diff options
author | Lyft <127234178+Lyfts@users.noreply.github.com> | 2024-10-02 20:50:11 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-10-02 18:50:11 +0000 |
commit | efc9e5c4e25e808e7037222b7c7c340665191035 (patch) | |
tree | 8ed521077964c4d8e46688c0584a78dbe8a4317f /src/main/java/tectech/mechanics/spark | |
parent | 60c2d167c863d9d061efab7e18c4df605de50a55 (diff) | |
download | GT5-Unofficial-efc9e5c4e25e808e7037222b7c7c340665191035.tar.gz GT5-Unofficial-efc9e5c4e25e808e7037222b7c7c340665191035.tar.bz2 GT5-Unofficial-efc9e5c4e25e808e7037222b7c7c340665191035.zip |
Refactor tesla tower spark packet (#3317)
Diffstat (limited to 'src/main/java/tectech/mechanics/spark')
-rw-r--r-- | src/main/java/tectech/mechanics/spark/RendererMessage.java | 96 | ||||
-rw-r--r-- | src/main/java/tectech/mechanics/spark/ThaumSpark.java | 22 |
2 files changed, 47 insertions, 71 deletions
diff --git a/src/main/java/tectech/mechanics/spark/RendererMessage.java b/src/main/java/tectech/mechanics/spark/RendererMessage.java index 6c52e43b0d..2d8d4f74a0 100644 --- a/src/main/java/tectech/mechanics/spark/RendererMessage.java +++ b/src/main/java/tectech/mechanics/spark/RendererMessage.java @@ -2,27 +2,14 @@ package tectech.mechanics.spark; import static gregtech.api.enums.Mods.Thaumcraft; -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.ObjectInputStream; -import java.io.ObjectOutputStream; -import java.io.ObjectStreamClass; -import java.util.Arrays; import java.util.HashSet; import java.util.Random; +import java.util.Set; import net.minecraft.client.Minecraft; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.world.World; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; -import org.apache.logging.log4j.Marker; -import org.apache.logging.log4j.MarkerManager; - -import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.common.network.simpleimpl.IMessage; import cpw.mods.fml.common.network.simpleimpl.MessageContext; import cpw.mods.fml.relauncher.Side; @@ -34,44 +21,32 @@ import thaumcraft.client.fx.bolt.FXLightningBolt; // TODO Re-work how sparks are distributed public class RendererMessage implements IMessage { - HashSet<ThaumSpark> sparkList; + Set<ThaumSpark> sparkList; public RendererMessage() {} - @SuppressWarnings("unchecked") @Override - public void fromBytes(ByteBuf pBuffer) { - if (FMLCommonHandler.instance() - .getSide() - .isServer()) return; - try { - // I'd love to know why I need to offset by one byte for this to work - byte[] boop = pBuffer.array(); - boop = Arrays.copyOfRange(boop, 1, boop.length); - InputStream is = new ByteArrayInputStream(boop); - ObjectInputStream ois = new ValidatingObjectInputStream(is); - Object data = ois.readObject(); - sparkList = (HashSet<ThaumSpark>) data; - } catch (IOException | ClassNotFoundException ignored) {} + public void fromBytes(ByteBuf buffer) { + sparkList = new HashSet<>(); + int size = buffer.readInt(); + for (int i = 0; i < size; i++) { + sparkList.add(new ThaumSpark(buffer)); + } } @Override - public void toBytes(ByteBuf pBuffer) { - try { - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - ObjectOutputStream oos = new ObjectOutputStream(baos); - oos.writeObject(sparkList); - oos.flush(); - InputStream is = new ByteArrayInputStream(baos.toByteArray()); - pBuffer.writeBytes(is, baos.toByteArray().length); - } catch (IOException ignore) {} + public void toBytes(ByteBuf buffer) { + buffer.writeInt(sparkList.size()); + for (ThaumSpark spark : sparkList) { + spark.writeToBuf(buffer); + } } public static class RendererData extends RendererMessage { public RendererData() {} - public RendererData(HashSet<ThaumSpark> eSparkList) { + public RendererData(Set<ThaumSpark> eSparkList) { sparkList = eSparkList; } } @@ -87,35 +62,34 @@ public class RendererMessage implements IMessage { zapsToUse[i] = localRand.nextInt(pMessage.sparkList.size()); } int i = 0; - for (ThaumSpark sp : pMessage.sparkList) { + for (ThaumSpark spark : pMessage.sparkList) { for (int j : zapsToUse) { if (i == j) { - thaumLightning(sp.x, sp.y, sp.z, sp.xR, sp.yR, sp.zR, sp.wID); + thaumLightning(spark); } } i++; } - pMessage.sparkList.clear(); return null; } } @SideOnly(Side.CLIENT) - private static void thaumLightning(int tX, int tY, int tZ, int tXN, int tYN, int tZN, int wID) { + private static void thaumLightning(ThaumSpark spark) { // This is enough to check for thaum, since it only ever matters for client side effects (Tested not to crash) if (Thaumcraft.isModLoaded()) { World world = Minecraft.getMinecraft().theWorld; - if (world.provider.dimensionId == wID) { + if (world.provider.dimensionId == spark.wID) { FXLightningBolt bolt = new FXLightningBolt( world, - tX + 0.5F, - tY + 0.5F, - tZ + 0.5F, - tX + tXN + 0.5F, - tY + tYN + 0.5F, - tZ + tZN + 0.5F, + spark.x + 0.5F, + spark.y + 0.5F, + spark.z + 0.5F, + spark.x + spark.xR + 0.5F, + spark.y + spark.yR + 0.5F, + spark.z + spark.zR + 0.5F, world.rand.nextLong(), - 6, + 10, 0.5F, 8); bolt.defaultFractal(); @@ -125,24 +99,4 @@ public class RendererMessage implements IMessage { } } } - - private static class ValidatingObjectInputStream extends ObjectInputStream { - - private static final Logger logger = LogManager.getLogger(); - private static final Marker securityMarker = MarkerManager.getMarker("SuspiciousPackets"); - - private ValidatingObjectInputStream(InputStream in) throws IOException { - super(in); - } - - @Override - protected Class<?> resolveClass(ObjectStreamClass desc) throws IOException, ClassNotFoundException { - String name = desc.getName(); - if (!name.equals("java.util.HashSet") && !name.equals("tectech.mechanics.spark.ThaumSpark")) { - logger.warn(securityMarker, "Received packet containing disallowed class: " + name); - throw new RuntimeException(); - } - return super.resolveClass(desc); - } - } } diff --git a/src/main/java/tectech/mechanics/spark/ThaumSpark.java b/src/main/java/tectech/mechanics/spark/ThaumSpark.java index 12c04f2cfe..9599d73db9 100644 --- a/src/main/java/tectech/mechanics/spark/ThaumSpark.java +++ b/src/main/java/tectech/mechanics/spark/ThaumSpark.java @@ -5,6 +5,8 @@ import java.util.Objects; import com.gtnewhorizon.structurelib.util.Vec3Impl; +import io.netty.buffer.ByteBuf; + public class ThaumSpark implements Serializable { // This works regardless of if TC is loaded @@ -24,6 +26,16 @@ public class ThaumSpark implements Serializable { this.wID = wID; } + public ThaumSpark(ByteBuf buf) { + this.x = buf.readInt(); + this.y = buf.readInt(); + this.z = buf.readInt(); + this.xR = buf.readByte(); + this.yR = buf.readByte(); + this.zR = buf.readByte(); + this.wID = buf.readInt(); + } + public ThaumSpark(Vec3Impl origin, Vec3Impl target, int wID) { this.x = origin.get0(); this.y = origin.get1(); @@ -54,4 +66,14 @@ public class ThaumSpark implements Serializable { public int hashCode() { return Objects.hash(x, y, z, wID, xR, yR, zR); } + + public void writeToBuf(ByteBuf buf) { + buf.writeInt(x); + buf.writeInt(y); + buf.writeInt(z); + buf.writeByte(xR); + buf.writeByte(yR); + buf.writeByte(zR); + buf.writeInt(wID); + } } |