aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/tectech/mechanics/spark
diff options
context:
space:
mode:
authorLyft <127234178+Lyfts@users.noreply.github.com>2024-10-02 20:50:11 +0200
committerGitHub <noreply@github.com>2024-10-02 18:50:11 +0000
commitefc9e5c4e25e808e7037222b7c7c340665191035 (patch)
tree8ed521077964c4d8e46688c0584a78dbe8a4317f /src/main/java/tectech/mechanics/spark
parent60c2d167c863d9d061efab7e18c4df605de50a55 (diff)
downloadGT5-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.java96
-rw-r--r--src/main/java/tectech/mechanics/spark/ThaumSpark.java22
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);
+ }
}