diff --git a/src/main/java/com/pahimar/ee3/api/AlchemyArray.java b/src/main/java/com/pahimar/ee3/api/AlchemyArray.java index 5500fa0c..30d53c9f 100644 --- a/src/main/java/com/pahimar/ee3/api/AlchemyArray.java +++ b/src/main/java/com/pahimar/ee3/api/AlchemyArray.java @@ -2,8 +2,6 @@ package com.pahimar.ee3.api; import com.google.common.collect.ImmutableSortedSet; import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.nbt.NBTTagList; import net.minecraft.world.World; import java.util.Collection; @@ -11,49 +9,18 @@ import java.util.Set; import java.util.SortedSet; import java.util.TreeSet; -public class AlchemyArray implements Comparable +public abstract class AlchemyArray implements Comparable { private SortedSet glyphs; - private int largestGlyphSize; public AlchemyArray() { glyphs = new TreeSet(); - largestGlyphSize = 0; } public AlchemyArray(Collection glyphs) { this.glyphs = new TreeSet(glyphs); - largestGlyphSize = 0; - - for (Glyph glyph : glyphs) - { - if (glyph.getSize() > largestGlyphSize) - { - largestGlyphSize = glyph.getSize(); - } - } - } - - public boolean addGlyph(Glyph glyph) - { - if (glyph.getSize() > largestGlyphSize) - { - largestGlyphSize = glyph.getSize(); - } - - return glyphs.add(glyph); - } - - public void addGlyph(Glyph glyph, int size) - { - if (size > largestGlyphSize) - { - largestGlyphSize = size; - } - - glyphs.add(new Glyph(glyph, size)); } public Set getGlyphs() @@ -61,70 +28,11 @@ public class AlchemyArray implements Comparable return ImmutableSortedSet.copyOf(glyphs); } - public int getLargestGlyphSize() - { - return largestGlyphSize; - } - public void onAlchemyArrayActivated(World world, int x, int y, int z, EntityPlayer entityPlayer, int sideHit, float hitX, float hitY, float hitZ) { } - public void readFromNBT(NBTTagCompound nbtTagCompound) - { - if (nbtTagCompound != null && nbtTagCompound.hasKey("glyphs")) - { - // Read in the ItemStacks in the inventory from NBT - if (nbtTagCompound.hasKey("glyphs")) - { - NBTTagList tagList = nbtTagCompound.getTagList("glyphs", 10); - glyphs = new TreeSet(); - largestGlyphSize = 0; - for (int i = 0; i < tagList.tagCount(); ++i) - { - NBTTagCompound tagCompound = tagList.getCompoundTagAt(i); - Glyph glyph = Glyph.readGlyphFromNBT(tagCompound); - glyphs.add(glyph); - if (glyph.getSize() > largestGlyphSize) - { - largestGlyphSize = glyph.getSize(); - } - } - } - else - { - glyphs = new TreeSet(); - largestGlyphSize = 0; - } - } - else - { - glyphs = new TreeSet(); - largestGlyphSize = 0; - } - } - - public void writeToNBT(NBTTagCompound nbtTagCompound) - { - NBTTagList tagList = new NBTTagList(); - for (Glyph glyph : glyphs) - { - NBTTagCompound tagCompound = new NBTTagCompound(); - glyph.writeToNBT(tagCompound); - tagList.appendTag(tagCompound); - } - nbtTagCompound.setTag("glyphs", tagList); - nbtTagCompound.setInteger("largestGlyphSize", largestGlyphSize); - } - - public static AlchemyArray readAlchemyArrayFromNBT(NBTTagCompound nbtTagCompound) - { - AlchemyArray alchemyArray = new AlchemyArray(); - alchemyArray.readFromNBT(nbtTagCompound); - return alchemyArray; - } - @Override public String toString() { diff --git a/src/main/java/com/pahimar/ee3/client/renderer/tileentity/TileEntityRendererAlchemyArray.java b/src/main/java/com/pahimar/ee3/client/renderer/tileentity/TileEntityRendererAlchemyArray.java index 0af9986d..bc779360 100644 --- a/src/main/java/com/pahimar/ee3/client/renderer/tileentity/TileEntityRendererAlchemyArray.java +++ b/src/main/java/com/pahimar/ee3/client/renderer/tileentity/TileEntityRendererAlchemyArray.java @@ -32,7 +32,7 @@ public class TileEntityRendererAlchemyArray extends TileEntitySpecialRenderer GL11.glDepthMask(false); GL11.glClear(GL11.GL_DEPTH_BUFFER_BIT); - for (Glyph glyph : tileEntityAlchemyArray.getAlchemyArray().getGlyphs()) + for (Glyph glyph : tileEntityAlchemyArray.getGlyphs()) { scale = glyph.getSize(); if (tileEntityAlchemyArray.getOrientation() == ForgeDirection.UP) diff --git a/src/main/java/com/pahimar/ee3/tileentity/TileEntityAlchemyArray.java b/src/main/java/com/pahimar/ee3/tileentity/TileEntityAlchemyArray.java index b3a3d7c4..935202a2 100644 --- a/src/main/java/com/pahimar/ee3/tileentity/TileEntityAlchemyArray.java +++ b/src/main/java/com/pahimar/ee3/tileentity/TileEntityAlchemyArray.java @@ -1,6 +1,6 @@ package com.pahimar.ee3.tileentity; -import com.pahimar.ee3.api.AlchemyArray; +import com.google.common.collect.ImmutableSortedSet; import com.pahimar.ee3.api.Glyph; import com.pahimar.ee3.network.PacketHandler; import com.pahimar.ee3.network.message.MessageTileEntityAlchemyArray; @@ -8,32 +8,49 @@ import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; import net.minecraft.network.Packet; import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; +import java.util.Set; +import java.util.SortedSet; +import java.util.TreeSet; + public class TileEntityAlchemyArray extends TileEntityEE { - private AlchemyArray alchemyArray; + private SortedSet glyphs; + private int largestGlyphSize; private ForgeDirection rotation; private int ticksSinceSync; public TileEntityAlchemyArray() { super(); - alchemyArray = new AlchemyArray(); + glyphs = new TreeSet(); + largestGlyphSize = 0; rotation = ForgeDirection.UNKNOWN; } - public AlchemyArray getAlchemyArray() + public Set getGlyphs() { - return alchemyArray; + return ImmutableSortedSet.copyOf(glyphs); } public boolean addGlyphToAlchemyArray(Glyph glyph) { - return alchemyArray.addGlyph(glyph); + if (!glyphs.contains(glyph)) + { + if (glyph.getSize() > largestGlyphSize) + { + largestGlyphSize = glyph.getSize(); + } + + return glyphs.add(glyph); + } + + return false; } public boolean addGlyphToAlchemyArray(Glyph glyph, int size) @@ -171,15 +188,15 @@ public class TileEntityAlchemyArray extends TileEntityEE { if (this.orientation == ForgeDirection.UP || this.orientation == ForgeDirection.DOWN) { - return AxisAlignedBB.getBoundingBox(xCoord - alchemyArray.getLargestGlyphSize(), yCoord - 1, zCoord - alchemyArray.getLargestGlyphSize(), xCoord + alchemyArray.getLargestGlyphSize(), yCoord + 1, zCoord + alchemyArray.getLargestGlyphSize()); + return AxisAlignedBB.getBoundingBox(xCoord - largestGlyphSize, yCoord - 1, zCoord - largestGlyphSize, xCoord + largestGlyphSize, yCoord + 1, zCoord + largestGlyphSize); } else if (this.orientation == ForgeDirection.NORTH || this.orientation == ForgeDirection.SOUTH) { - return AxisAlignedBB.getBoundingBox(xCoord - alchemyArray.getLargestGlyphSize(), yCoord - alchemyArray.getLargestGlyphSize(), zCoord - 1, xCoord + alchemyArray.getLargestGlyphSize(), yCoord + alchemyArray.getLargestGlyphSize(), zCoord + 1); + return AxisAlignedBB.getBoundingBox(xCoord - largestGlyphSize, yCoord - largestGlyphSize, zCoord - 1, xCoord + largestGlyphSize, yCoord + largestGlyphSize, zCoord + 1); } else if (this.orientation == ForgeDirection.EAST || this.orientation == ForgeDirection.WEST) { - return AxisAlignedBB.getBoundingBox(xCoord - 1, yCoord - alchemyArray.getLargestGlyphSize(), zCoord - alchemyArray.getLargestGlyphSize(), xCoord + 1, yCoord + alchemyArray.getLargestGlyphSize(), zCoord + alchemyArray.getLargestGlyphSize()); + return AxisAlignedBB.getBoundingBox(xCoord - 1, yCoord - largestGlyphSize, zCoord - largestGlyphSize, xCoord + 1, yCoord + largestGlyphSize, zCoord + largestGlyphSize); } return super.getRenderBoundingBox(); @@ -196,10 +213,23 @@ public class TileEntityAlchemyArray extends TileEntityEE { super.readFromNBT(nbtTagCompound); - NBTTagCompound alchemyArrayTagCompound = nbtTagCompound.getCompoundTag("alchemyArray"); - alchemyArray = AlchemyArray.readAlchemyArrayFromNBT(alchemyArrayTagCompound); - + largestGlyphSize = 0; rotation = ForgeDirection.getOrientation(nbtTagCompound.getInteger("rotation")); + + // Read in the ItemStacks in the inventory from NBT + NBTTagList tagList = nbtTagCompound.getTagList("glyphs", 10); + glyphs = new TreeSet(); + for (int i = 0; i < tagList.tagCount(); ++i) + { + NBTTagCompound tagCompound = tagList.getCompoundTagAt(i); + Glyph glyph = Glyph.readGlyphFromNBT(tagCompound); + glyphs.add(glyph); + + if (glyph.getSize() > largestGlyphSize) + { + largestGlyphSize = glyph.getSize(); + } + } } @Override @@ -207,12 +237,17 @@ public class TileEntityAlchemyArray extends TileEntityEE { super.writeToNBT(nbtTagCompound); - NBTTagCompound alchemyArrayTagCompound = new NBTTagCompound(); - alchemyArray.writeToNBT(alchemyArrayTagCompound); - nbtTagCompound.setInteger("rotation", rotation.ordinal()); - nbtTagCompound.setTag("alchemyArray", alchemyArrayTagCompound); + // Write the ItemStacks in the inventory to NBT + NBTTagList tagList = new NBTTagList(); + for (Glyph glyph : glyphs) + { + NBTTagCompound tagCompound = new NBTTagCompound(); + glyph.writeToNBT(tagCompound); + tagList.appendTag(tagCompound); + } + nbtTagCompound.setTag("glyphs", tagList); } @Override @@ -236,13 +271,12 @@ public class TileEntityAlchemyArray extends TileEntityEE public void onBlockActivated(World world, int x, int y, int z, EntityPlayer entityPlayer, int sideHit, float hitX, float hitY, float hitZ) { // TODO: Perform the action for the registered alchemy array - this.alchemyArray.onAlchemyArrayActivated(world, x, y, z, entityPlayer, sideHit, hitX, hitY, hitZ); } private boolean areDummyBlocksValid() { boolean validDummyBlocks = true; - int coordOffset = this.alchemyArray.getLargestGlyphSize() / 2; + int coordOffset = this.largestGlyphSize / 2; if (this.orientation == ForgeDirection.UP || this.orientation == ForgeDirection.DOWN) {