From 060a3e3e2d830aa9f58cb4b2c5a38fe2a9f97a54 Mon Sep 17 00:00:00 2001 From: Light_Quanta Date: Mon, 30 Jun 2025 03:33:41 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8DBulletDecalOption=E7=9B=B8?= =?UTF-8?q?=E5=85=B3=E9=97=AE=E9=A2=98=EF=BC=8C=E4=BC=98=E5=8C=96=E5=B8=A6?= =?UTF-8?q?=E5=8F=82=E6=95=B0ParticleType=E6=B3=A8=E5=86=8C=E6=96=B9?= =?UTF-8?q?=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../client/particle/BulletDecalOption.java | 59 ++++++------------- .../superbwarfare/init/ModParticleTypes.java | 32 ++++------ 2 files changed, 30 insertions(+), 61 deletions(-) diff --git a/src/main/java/com/atsuishio/superbwarfare/client/particle/BulletDecalOption.java b/src/main/java/com/atsuishio/superbwarfare/client/particle/BulletDecalOption.java index 8fa5b4c66..8ea737281 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/particle/BulletDecalOption.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/particle/BulletDecalOption.java @@ -1,21 +1,21 @@ package com.atsuishio.superbwarfare.client.particle; import com.atsuishio.superbwarfare.init.ModParticleTypes; -import com.mojang.brigadier.StringReader; -import com.mojang.brigadier.exceptions.CommandSyntaxException; import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; import com.mojang.serialization.codecs.RecordCodecBuilder; +import io.netty.buffer.ByteBuf; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.core.particles.ParticleOptions; import net.minecraft.core.particles.ParticleType; -import net.minecraft.core.registries.BuiltInRegistries; -import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.codec.ByteBufCodecs; +import net.minecraft.network.codec.StreamCodec; import org.jetbrains.annotations.NotNull; public class BulletDecalOption implements ParticleOptions { - public static final Codec CODEC = RecordCodecBuilder.create(builder -> + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(builder -> builder.group( Codec.INT.fieldOf("dir").forGetter(option -> option.direction.ordinal()), Codec.LONG.fieldOf("pos").forGetter(option -> option.pos.asLong()), @@ -24,28 +24,19 @@ public class BulletDecalOption implements ParticleOptions { Codec.FLOAT.fieldOf("b").forGetter(option -> option.blue) ).apply(builder, BulletDecalOption::new)); - @SuppressWarnings("deprecation") - public static final ParticleOptions.Deserializer DESERIALIZER = new ParticleOptions.Deserializer<>() { - @Override - public BulletDecalOption fromCommand(ParticleType particleType, StringReader reader) throws CommandSyntaxException { - reader.expect(' '); - int dir = reader.readInt(); - reader.expect(' '); - long pos = reader.readLong(); - reader.expect(' '); - float r = reader.readFloat(); - reader.expect(' '); - float g = reader.readFloat(); - reader.expect(' '); - float b = reader.readFloat(); - return new BulletDecalOption(dir, pos, r, g, b); - } - - @Override - public BulletDecalOption fromNetwork(ParticleType particleType, FriendlyByteBuf buffer) { - return new BulletDecalOption(buffer.readVarInt(), buffer.readLong(), buffer.readFloat(), buffer.readFloat(), buffer.readFloat()); - } - }; + public static final StreamCodec STREAM_CODEC = StreamCodec.composite( + Direction.STREAM_CODEC, + BulletDecalOption::getDirection, + BlockPos.STREAM_CODEC, + BulletDecalOption::getPos, + ByteBufCodecs.FLOAT, + BulletDecalOption::getRed, + ByteBufCodecs.FLOAT, + BulletDecalOption::getGreen, + ByteBufCodecs.FLOAT, + BulletDecalOption::getBlue, + BulletDecalOption::new + ); private final Direction direction; private final BlockPos pos; @@ -97,18 +88,4 @@ public class BulletDecalOption implements ParticleOptions { public @NotNull ParticleType getType() { return ModParticleTypes.BULLET_DECAL.get(); } - - @Override - public void writeToNetwork(FriendlyByteBuf buffer) { - buffer.writeEnum(this.direction); - buffer.writeBlockPos(this.pos); - buffer.writeFloat(this.red); - buffer.writeFloat(this.green); - buffer.writeFloat(this.blue); - } - - @Override - public String writeToString() { - return BuiltInRegistries.PARTICLE_TYPE.getKey(this.getType()) + " " + this.direction.getName(); - } } diff --git a/src/main/java/com/atsuishio/superbwarfare/init/ModParticleTypes.java b/src/main/java/com/atsuishio/superbwarfare/init/ModParticleTypes.java index 6665fb90d..3228c72a9 100644 --- a/src/main/java/com/atsuishio/superbwarfare/init/ModParticleTypes.java +++ b/src/main/java/com/atsuishio/superbwarfare/init/ModParticleTypes.java @@ -2,7 +2,7 @@ package com.atsuishio.superbwarfare.init; import com.atsuishio.superbwarfare.Mod; import com.atsuishio.superbwarfare.client.particle.BulletDecalOption; -import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; import net.minecraft.core.particles.ParticleOptions; import net.minecraft.core.particles.ParticleType; import net.minecraft.core.particles.SimpleParticleType; @@ -18,29 +18,21 @@ public class ModParticleTypes { public static final DeferredHolder, SimpleParticleType> FIRE_STAR = REGISTRY.register("fire_star", () -> new SimpleParticleType(false)); - public static final DeferredHolder, ModParticleType> BULLET_DECAL = REGISTRY.register("bullet_decal", - () -> new ModParticleType<>(false, BulletDecalOption.DESERIALIZER, BulletDecalOption.CODEC)); + public static final DeferredHolder, ParticleType> BULLET_DECAL = REGISTRY.register("bullet_decal", + () -> createOptions(BulletDecalOption.CODEC, BulletDecalOption.STREAM_CODEC)); public static final DeferredHolder, SimpleParticleType> CUSTOM_CLOUD = REGISTRY.register("custom_cloud", () -> new SimpleParticleType(false)); public static final DeferredHolder, SimpleParticleType> CUSTOM_SMOKE = REGISTRY.register("custom_smoke", () -> new SimpleParticleType(false)); - @SuppressWarnings("deprecation") - private static class ModParticleType extends ParticleType { - private final Codec codec; + public static ParticleType createOptions(MapCodec codec, StreamCodec streamCodec) { + return new ParticleType<>(false) { + public @NotNull MapCodec codec() { + return codec; + } - public ModParticleType(boolean overrideLimiter, ParticleOptions.Deserializer deserializer, Codec codec) { - super(overrideLimiter, deserializer); - this.codec = codec; - } - - @Override - public @NotNull Codec codec() { - return this.codec; - } - - @Override - public StreamCodec streamCodec() { - return this.codec; - } + public @NotNull StreamCodec streamCodec() { + return streamCodec; + } + }; } }