From 2e4e1191f67555a87742f1563bf9f4675b7fde0f Mon Sep 17 00:00:00 2001 From: Abbie Date: Tue, 12 Nov 2024 10:02:34 +0000 Subject: [PATCH] ParticleDatas StreamCodecs --- .../client/fx/SparkleParticleData.java | 81 ++++++------------- .../client/fx/SparkleParticleType.java | 13 ++- .../botania/client/fx/WispParticleData.java | 81 ++++++------------- .../botania/client/fx/WispParticleType.java | 13 ++- 4 files changed, 70 insertions(+), 118 deletions(-) diff --git a/Xplat/src/main/java/vazkii/botania/client/fx/SparkleParticleData.java b/Xplat/src/main/java/vazkii/botania/client/fx/SparkleParticleData.java index 3a6ace4236..be3c1afafc 100644 --- a/Xplat/src/main/java/vazkii/botania/client/fx/SparkleParticleData.java +++ b/Xplat/src/main/java/vazkii/botania/client/fx/SparkleParticleData.java @@ -8,22 +8,20 @@ */ package vazkii.botania.client.fx; -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 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.StreamCodec; import org.jetbrains.annotations.NotNull; -import java.util.Locale; +import io.netty.buffer.ByteBuf; public class SparkleParticleData implements ParticleOptions { - public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(instance -> instance.group( Codec.FLOAT.fieldOf("size").forGetter(d -> d.size), Codec.FLOAT.fieldOf("r").forGetter(d -> d.r), Codec.FLOAT.fieldOf("g").forGetter(d -> d.g), @@ -33,6 +31,28 @@ public class SparkleParticleData implements ParticleOptions { Codec.BOOL.fieldOf("fake").forGetter(d -> d.fake), Codec.BOOL.fieldOf("corrupt").forGetter(d -> d.corrupt) ).apply(instance, SparkleParticleData::new)); + public static final StreamCodec STREAM_CODEC = StreamCodec.of( + (buf, d) -> { + buf.writeFloat(d.size); + buf.writeFloat(d.r); + buf.writeFloat(d.g); + buf.writeFloat(d.b); + buf.writeInt(d.m); + buf.writeBoolean(d.noClip); + buf.writeBoolean(d.fake); + buf.writeBoolean(d.corrupt); + }, + buf -> new SparkleParticleData( + buf.readFloat(), + buf.readFloat(), + buf.readFloat(), + buf.readFloat(), + buf.readInt(), + buf.readBoolean(), + buf.readBoolean(), + buf.readBoolean() + ) + ); public final float size; public final float r, g, b; public final int m; @@ -72,53 +92,4 @@ private SparkleParticleData(float size, float r, float g, float b, int m, boolea public ParticleType getType() { return BotaniaParticles.SPARKLE; } - - @Override - public void writeToNetwork(FriendlyByteBuf buf) { - buf.writeFloat(size); - buf.writeFloat(r); - buf.writeFloat(g); - buf.writeFloat(b); - buf.writeInt(m); - buf.writeBoolean(noClip); - buf.writeBoolean(fake); - buf.writeBoolean(corrupt); - } - - @NotNull - @Override - public String writeToString() { - return String.format(Locale.ROOT, "%s %.2f %.2f %.2f %.2f %d %s %s %s", - BuiltInRegistries.PARTICLE_TYPE.getKey(this.getType()), this.size, this.r, this.g, this.b, this.m, this.noClip, this.fake, this.corrupt); - } - - public static final Deserializer DESERIALIZER = new Deserializer<>() { - @NotNull - @Override - public SparkleParticleData fromCommand(@NotNull ParticleType type, @NotNull StringReader reader) throws CommandSyntaxException { - reader.expect(' '); - float size = reader.readFloat(); - reader.expect(' '); - float r = reader.readFloat(); - reader.expect(' '); - float g = reader.readFloat(); - reader.expect(' '); - float b = reader.readFloat(); - reader.expect(' '); - int m = reader.readInt(); - reader.expect(' '); - boolean noClip = reader.readBoolean(); - reader.expect(' '); - boolean fake = reader.readBoolean(); - reader.expect(' '); - boolean corrupt = reader.readBoolean(); - - return new SparkleParticleData(size, r, g, b, m, noClip, fake, corrupt); - } - - @Override - public SparkleParticleData fromNetwork(@NotNull ParticleType type, FriendlyByteBuf buf) { - return new SparkleParticleData(buf.readFloat(), buf.readFloat(), buf.readFloat(), buf.readFloat(), buf.readInt(), buf.readBoolean(), buf.readBoolean(), buf.readBoolean()); - } - }; } diff --git a/Xplat/src/main/java/vazkii/botania/client/fx/SparkleParticleType.java b/Xplat/src/main/java/vazkii/botania/client/fx/SparkleParticleType.java index ef680c5d5a..e7f3ef50fd 100644 --- a/Xplat/src/main/java/vazkii/botania/client/fx/SparkleParticleType.java +++ b/Xplat/src/main/java/vazkii/botania/client/fx/SparkleParticleType.java @@ -8,27 +8,34 @@ */ package vazkii.botania.client.fx; -import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.client.particle.Particle; import net.minecraft.client.particle.ParticleProvider; import net.minecraft.client.particle.SpriteSet; import net.minecraft.core.particles.ParticleType; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.StreamCodec; import org.jetbrains.annotations.NotNull; public class SparkleParticleType extends ParticleType { public SparkleParticleType() { - super(false, SparkleParticleData.DESERIALIZER); + super(false); } @NotNull @Override - public Codec codec() { + public MapCodec codec() { return SparkleParticleData.CODEC; } + @Override + public StreamCodec streamCodec() { + return SparkleParticleData.STREAM_CODEC; + } + public static class Factory implements ParticleProvider { private final SpriteSet sprite; diff --git a/Xplat/src/main/java/vazkii/botania/client/fx/WispParticleData.java b/Xplat/src/main/java/vazkii/botania/client/fx/WispParticleData.java index 0f38bd9928..aee650ba0c 100644 --- a/Xplat/src/main/java/vazkii/botania/client/fx/WispParticleData.java +++ b/Xplat/src/main/java/vazkii/botania/client/fx/WispParticleData.java @@ -8,22 +8,20 @@ */ package vazkii.botania.client.fx; -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 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.StreamCodec; import org.jetbrains.annotations.NotNull; -import java.util.Locale; +import io.netty.buffer.ByteBuf; public class WispParticleData implements ParticleOptions { - public static final Codec CODEC = RecordCodecBuilder.create(instance -> instance.group( + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(instance -> instance.group( Codec.FLOAT.fieldOf("size").forGetter(d -> d.size), Codec.FLOAT.fieldOf("r").forGetter(d -> d.r), Codec.FLOAT.fieldOf("g").forGetter(d -> d.g), @@ -33,6 +31,26 @@ public class WispParticleData implements ParticleOptions { Codec.BOOL.fieldOf("noClip").forGetter(d -> d.noClip) ) .apply(instance, WispParticleData::new)); + public static final StreamCodec STREAM_CODEC = StreamCodec.of( + (buf, d) -> { + buf.writeFloat(d.size); + buf.writeFloat(d.r); + buf.writeFloat(d.g); + buf.writeFloat(d.b); + buf.writeFloat(d.maxAgeMul); + buf.writeBoolean(d.depthTest); + buf.writeBoolean(d.noClip); + }, + buf -> new WispParticleData( + buf.readFloat(), + buf.readFloat(), + buf.readFloat(), + buf.readFloat(), + buf.readFloat(), + buf.readBoolean(), + buf.readBoolean() + ) + ); public final float size; public final float r, g, b; public final float maxAgeMul; @@ -78,55 +96,4 @@ public WispParticleData withNoClip(boolean v) { public ParticleType getType() { return BotaniaParticles.WISP; } - - @Override - public void writeToNetwork(FriendlyByteBuf buf) { - buf.writeFloat(size); - buf.writeFloat(r); - buf.writeFloat(g); - buf.writeFloat(b); - buf.writeFloat(maxAgeMul); - buf.writeBoolean(depthTest); - buf.writeBoolean(noClip); - } - - @NotNull - @Override - public String writeToString() { - return String.format(Locale.ROOT, "%s %.2f %.2f %.2f %.2f %.2f %s", - BuiltInRegistries.PARTICLE_TYPE.getKey(getType()), this.size, this.r, this.g, this.b, this.maxAgeMul, this.depthTest); - } - - public static final Deserializer DESERIALIZER = new Deserializer<>() { - @NotNull - @Override - public WispParticleData fromCommand(@NotNull ParticleType type, @NotNull StringReader reader) throws CommandSyntaxException { - reader.expect(' '); - float size = reader.readFloat(); - reader.expect(' '); - float r = reader.readFloat(); - reader.expect(' '); - float g = reader.readFloat(); - reader.expect(' '); - float b = reader.readFloat(); - reader.expect(' '); - float mam = reader.readFloat(); - boolean depth = true; - if (reader.canRead()) { - reader.expect(' '); - depth = reader.readBoolean(); - } - boolean noClip = false; - if (reader.canRead()) { - reader.expect(' '); - depth = reader.readBoolean(); - } - return new WispParticleData(size, r, g, b, mam, depth, noClip); - } - - @Override - public WispParticleData fromNetwork(@NotNull ParticleType type, FriendlyByteBuf buf) { - return new WispParticleData(buf.readFloat(), buf.readFloat(), buf.readFloat(), buf.readFloat(), buf.readFloat(), buf.readBoolean(), buf.readBoolean()); - } - }; } diff --git a/Xplat/src/main/java/vazkii/botania/client/fx/WispParticleType.java b/Xplat/src/main/java/vazkii/botania/client/fx/WispParticleType.java index 4e52085783..24dbc52f0c 100644 --- a/Xplat/src/main/java/vazkii/botania/client/fx/WispParticleType.java +++ b/Xplat/src/main/java/vazkii/botania/client/fx/WispParticleType.java @@ -8,27 +8,34 @@ */ package vazkii.botania.client.fx; -import com.mojang.serialization.Codec; +import com.mojang.serialization.MapCodec; import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.client.particle.Particle; import net.minecraft.client.particle.ParticleProvider; import net.minecraft.client.particle.SpriteSet; import net.minecraft.core.particles.ParticleType; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.StreamCodec; import org.jetbrains.annotations.NotNull; public class WispParticleType extends ParticleType { public WispParticleType() { - super(false, WispParticleData.DESERIALIZER); + super(false); } @NotNull @Override - public Codec codec() { + public MapCodec codec() { return WispParticleData.CODEC; } + @Override + public StreamCodec streamCodec() { + return WispParticleData.STREAM_CODEC; + } + public static class Factory implements ParticleProvider { private final SpriteSet sprite;