From d27f8d90ab38986bd961fdc798aaec4396debb81 Mon Sep 17 00:00:00 2001 From: SpaceToad Date: Wed, 19 Feb 2014 23:37:35 +0100 Subject: [PATCH] fixed serialization for urbanist over the network --- .../builders/urbanism/AnchoredBox.java | 41 +++++++++++++++ .../builders/urbanism/RenderUrbanist.java | 1 - .../builders/urbanism/TileUrbanist.java | 27 +--------- .../buildcraft/core/network/ClassMapping.java | 50 ++++++++++++++++--- 4 files changed, 85 insertions(+), 34 deletions(-) create mode 100755 common/buildcraft/builders/urbanism/AnchoredBox.java diff --git a/common/buildcraft/builders/urbanism/AnchoredBox.java b/common/buildcraft/builders/urbanism/AnchoredBox.java new file mode 100755 index 00000000..cd41d85e --- /dev/null +++ b/common/buildcraft/builders/urbanism/AnchoredBox.java @@ -0,0 +1,41 @@ +/** + * Copyright (c) 2011-2014, SpaceToad and the BuildCraft Team + * http://www.mod-buildcraft.com + * + * BuildCraft is distributed under the terms of the Minecraft Mod Public + * License 1.0, or MMPL. Please check the contents of the license located in + * http://www.mod-buildcraft.com/MMPL-1.0.txt + */ +package buildcraft.builders.urbanism; + +import net.minecraft.nbt.NBTTagCompound; +import buildcraft.core.Box; +import buildcraft.core.network.NetworkData; + +public class AnchoredBox { + @NetworkData + public Box box = new Box(); + + @NetworkData + public float x1, y1, z1; + + public void setP2 (float x2, float y2, float z2) { + box.initialize(x1, y1, z1, x2, y2, z2); + } + + public void writeToNBT(NBTTagCompound nbt) { + nbt.setFloat("anchorX", x1); + nbt.setFloat("anchorY", y1); + nbt.setFloat("anchorZ", z1); + + box.writeToNBT(nbt); + } + + public void readFromNBT(NBTTagCompound nbt) { + x1 = nbt.getFloat("anchorX"); + y1 = nbt.getFloat("anchorY"); + z1 = nbt.getFloat("anchorZ"); + + box.initialize(nbt); + } +} \ No newline at end of file diff --git a/common/buildcraft/builders/urbanism/RenderUrbanist.java b/common/buildcraft/builders/urbanism/RenderUrbanist.java index 1108d126..587d34fd 100755 --- a/common/buildcraft/builders/urbanism/RenderUrbanist.java +++ b/common/buildcraft/builders/urbanism/RenderUrbanist.java @@ -14,7 +14,6 @@ import net.minecraft.util.ResourceLocation; import org.lwjgl.opengl.GL11; -import buildcraft.builders.urbanism.TileUrbanist.AnchoredBox; import buildcraft.core.DefaultProps; import buildcraft.core.render.RenderBox; diff --git a/common/buildcraft/builders/urbanism/TileUrbanist.java b/common/buildcraft/builders/urbanism/TileUrbanist.java index 5b4a0d7e..937ed77e 100755 --- a/common/buildcraft/builders/urbanism/TileUrbanist.java +++ b/common/buildcraft/builders/urbanism/TileUrbanist.java @@ -25,6 +25,7 @@ import buildcraft.builders.blueprints.BlueprintBuilder.SchematicBuilder; import buildcraft.builders.filler.pattern.FillerPattern; import buildcraft.core.Box; import buildcraft.core.TileBuildCraft; +import buildcraft.core.network.NetworkData; import buildcraft.core.network.RPC; import buildcraft.core.network.RPCHandler; import buildcraft.core.network.RPCSide; @@ -40,31 +41,7 @@ public class TileUrbanist extends TileBuildCraft implements IInventory { int p2x = 0, p2y = 0, p2z = 0; - public static class AnchoredBox { - Box box = new Box(); - float x1, y1, z1; - - public void setP2 (float x2, float y2, float z2) { - box.initialize(x1, y1, z1, x2, y2, z2); - } - - public void writeToNBT(NBTTagCompound nbt) { - nbt.setFloat("anchorX", x1); - nbt.setFloat("anchorY", y1); - nbt.setFloat("anchorZ", z1); - - box.writeToNBT(nbt); - } - - public void readFromNBT(NBTTagCompound nbt) { - x1 = nbt.getFloat("anchorX"); - y1 = nbt.getFloat("anchorY"); - z1 = nbt.getFloat("anchorZ"); - - box.initialize(nbt); - } - } - + @NetworkData public ArrayList frames = new ArrayList (); LinkedList tasks = new LinkedList (); diff --git a/common/buildcraft/core/network/ClassMapping.java b/common/buildcraft/core/network/ClassMapping.java index 1a480ced..567d3dd9 100644 --- a/common/buildcraft/core/network/ClassMapping.java +++ b/common/buildcraft/core/network/ClassMapping.java @@ -10,8 +10,6 @@ package buildcraft.core.network; import io.netty.buffer.ByteBuf; -import java.io.DataInputStream; -import java.io.DataOutputStream; import java.lang.reflect.Array; import java.lang.reflect.Field; import java.lang.reflect.Type; @@ -20,9 +18,8 @@ import java.util.LinkedList; import java.util.Map; import java.util.TreeMap; -import buildcraft.core.utils.Utils; -import net.minecraft.nbt.NBTBase; import net.minecraft.nbt.NBTTagCompound; +import buildcraft.core.utils.Utils; /** * This class implements custom class mapping. There are three advantages in @@ -75,6 +72,7 @@ public class ClassMapping { private LinkedList booleanFields = new LinkedList(); private LinkedList enumFields = new LinkedList(); private LinkedList nbtFields = new LinkedList(); + private LinkedList arrayListFields = new LinkedList(); class FieldObject { public Field field; @@ -143,7 +141,7 @@ public class ClassMapping { continue; } - Type t = f.getGenericType(); + Type t = f.getType(); if (t instanceof Class) { Class fieldClass = (Class) t; @@ -162,8 +160,11 @@ public class ClassMapping { floatFields.add(f); } else if (fieldClass.equals(double.class)) { doubleFields.add(f); - } else if (NBTBase.class.isAssignableFrom(fieldClass)) { + } else if (NBTTagCompound.class.isAssignableFrom(fieldClass)) { nbtFields.add(f); + } else if (ArrayList.class.isAssignableFrom(fieldClass)) { + System.out.println ("ARRAY LIST IN MAPPING"); + arrayListFields.add(f); } else { FieldObject obj = new FieldObject(); obj.mapping = get (fieldClass); @@ -283,7 +284,7 @@ public class ClassMapping { } for (Field f : doubleFields) { - data.writeDouble((double) f.getDouble(obj)); + data.writeDouble(f.getDouble(obj)); } for (Field f : stringFields) { @@ -308,6 +309,21 @@ public class ClassMapping { } } + for (Field f : arrayListFields) { + ArrayList list = (ArrayList) f.get(obj); + + if (list == null) { + data.writeBoolean(false); + } else { + data.writeBoolean(true); + data.writeShort(list.size()); + + for (Object o : list) { + setDataObject(o, null, data, context); + } + } + } + for (FieldObject f : objectFields) { Object cpt = f.field.get(obj); @@ -361,6 +377,24 @@ public class ClassMapping { } } + for (Field f : arrayListFields) { + System.out.println ("RETRIEVE ARRAY LIST"); + if (data.readBoolean()) { + int size = data.readShort(); + + ArrayList arr = new ArrayList(); + + for (int i = 0; i < size; ++i) { + arr.add(updateFromDataObject(null, null, + data, context)); + } + + f.set(obj, arr); + } else { + f.set(obj, null); + } + } + for (Field f : nbtFields) { if (data.readBoolean()) { f.set(obj, Utils.readNBT(data)); @@ -654,7 +688,7 @@ public class ClassMapping { Class realClass = obj.getClass(); - if (realClass.equals(baseMapping.mappedClass)) { + if (baseMapping != null && realClass.equals(baseMapping.mappedClass)) { data.writeByte(0); } else { if (context.classToId.containsKey(realClass.getCanonicalName())) {