diff --git a/src/main/java/malte0811/industrialWires/controlpanel/PanelComponent.java b/src/main/java/malte0811/industrialWires/controlpanel/PanelComponent.java index 52582ca..a63ed70 100644 --- a/src/main/java/malte0811/industrialWires/controlpanel/PanelComponent.java +++ b/src/main/java/malte0811/industrialWires/controlpanel/PanelComponent.java @@ -31,6 +31,8 @@ import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.Vec3d; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; import javax.annotation.Nonnull; import javax.annotation.Nullable; @@ -146,10 +148,7 @@ public abstract class PanelComponent { String type = nbt.getString("type"); if (baseCreaters.containsKey(type)) { PanelComponent ret = baseCreaters.get(type).get(); - ret.readCustomNBT(nbt); - ret.setX(nbt.getFloat("x")); - ret.setY(nbt.getFloat("y")); - ret.setPanelHeight(nbt.getFloat("panelHeight")); + ret.readFromNBT(nbt); return ret; } else { IELogger.info("(IndustrialWires) Unknown panel component: " + type);//TODO own logger? @@ -157,6 +156,14 @@ public abstract class PanelComponent { } } + public final void readFromNBT(NBTTagCompound nbt) { + readCustomNBT(nbt); + setX(nbt.getFloat("x")); + setY(nbt.getFloat("y")); + setPanelHeight(nbt.getFloat("panelHeight")); + } + + @SideOnly(Side.CLIENT) public void renderBox(TileEntityPanel te) { GlStateManager.enableBlend(); GlStateManager.tryBlendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); diff --git a/src/main/java/malte0811/industrialWires/controlpanel/PanelUtils.java b/src/main/java/malte0811/industrialWires/controlpanel/PanelUtils.java index 1b6fb6c..3ea764d 100644 --- a/src/main/java/malte0811/industrialWires/controlpanel/PanelUtils.java +++ b/src/main/java/malte0811/industrialWires/controlpanel/PanelUtils.java @@ -80,8 +80,10 @@ public final class PanelUtils { Matrix4 m4RotOnly = m4.copy(); m4RotOnly.invert(); m4RotOnly.transpose(); - for (PanelComponent pc : components) { - Matrix4 m4Here = m4.copy().translate(pc.getX(), 0, pc.getY()); + //Intentionally not a for-each to help with CME's + for (int i = 0; i < components.size(); i++) { + PanelComponent pc = components.get(i); + Matrix4 m4Here = m4.copy().translate(pc.getX(), .0001, pc.getY()); List compQuads = pc.getQuads(); for (RawQuad bq : compQuads) { ret.add(bakeQuad(bq, m4Here, m4RotOnly, false)); @@ -331,11 +333,24 @@ public final class PanelUtils { } public static void readListFromNBT(NBTTagList list, @Nonnull List base) { - base.clear(); + boolean allNew = list.tagCount() != base.size(); + if (allNew) { + base.clear(); + } for (int i = 0; i < list.tagCount(); i++) { - PanelComponent pc = PanelComponent.read(list.getCompoundTagAt(i)); + NBTTagCompound nbt = list.getCompoundTagAt(i); + PanelComponent pc = PanelComponent.read(nbt); if (pc != null) { - base.add(pc); + if (allNew) { + base.add(pc); + } else { + PanelComponent oldPc = base.get(i); + if (pc.getClass() != oldPc.getClass()) { + base.set(i, pc); + } else { + oldPc.readFromNBT(nbt); + } + } } } }