From bd6aa3453e6b3aaf5c96f2b7408a4b3669a61573 Mon Sep 17 00:00:00 2001 From: Robert S Date: Mon, 9 Jun 2014 08:37:32 -0400 Subject: [PATCH 01/62] Fixed packets being sent client side, attempted to fix a multiblock connection issue with turbines --- .../mechanical/energy/grid/TileMechanical.java | 9 ++++++--- .../mechanical/energy/turbine/TurbineNode.java | 2 +- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/TileMechanical.java b/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/TileMechanical.java index a2ce2623..c3885425 100644 --- a/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/TileMechanical.java +++ b/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/TileMechanical.java @@ -56,10 +56,13 @@ public abstract class TileMechanical extends TileBase implements INodeProvider, { super.updateEntity(); mechanicalNode.update(); - if (mechanicalNode.markRotationUpdate && ticks % 10 == 0) + if (!this.getWorldObj().isRemote) { - sendRotationPacket(); - mechanicalNode.markRotationUpdate = false; + if (mechanicalNode.markRotationUpdate && ticks % 10 == 0) + { + sendRotationPacket(); + mechanicalNode.markRotationUpdate = false; + } } } diff --git a/mechanical/src/main/scala/resonantinduction/mechanical/energy/turbine/TurbineNode.java b/mechanical/src/main/scala/resonantinduction/mechanical/energy/turbine/TurbineNode.java index 09ed9463..840f843c 100644 --- a/mechanical/src/main/scala/resonantinduction/mechanical/energy/turbine/TurbineNode.java +++ b/mechanical/src/main/scala/resonantinduction/mechanical/energy/turbine/TurbineNode.java @@ -22,7 +22,7 @@ public class TurbineNode extends MechanicalNode @Override public boolean canConnect(ForgeDirection from, Object source) { - return source instanceof MechanicalNode && !(source instanceof TurbineNode) && from == turbine().getDirection().getOpposite(); + return turbine().getMultiBlock().isPrimary() && source instanceof MechanicalNode && !(source instanceof TurbineNode) && from == turbine().getDirection().getOpposite(); } @Override From f238238aafa810b5c4c5bed0835354106744e733 Mon Sep 17 00:00:00 2001 From: Robert S Date: Mon, 9 Jun 2014 20:35:28 -0400 Subject: [PATCH 02/62] Changed vel packet to be the same on both sides --- .../mechanical/energy/grid/TileMechanical.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/TileMechanical.java b/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/TileMechanical.java index c3885425..56133479 100644 --- a/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/TileMechanical.java +++ b/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/TileMechanical.java @@ -20,7 +20,7 @@ import com.google.common.io.ByteArrayDataInput; * @author Calclavia */ public abstract class TileMechanical extends TileBase implements INodeProvider, IPacketReceiver { - protected static final int PACKET_VELOCITY = Mechanical.contentRegistry.getNextPacketID(); + protected static final int PACKET_VELOCITY = 1; /** Node that handles most mechanical actions */ public MechanicalNode mechanicalNode; From b06a5ea283fca97a1f9ee8fdac7de6314454ee51 Mon Sep 17 00:00:00 2001 From: Robert S Date: Mon, 9 Jun 2014 20:35:47 -0400 Subject: [PATCH 03/62] Created a prefab for tiles with several nodes --- .../core/prefab/tile/TileNode.java | 173 ++++++++++++++++++ 1 file changed, 173 insertions(+) create mode 100644 src/main/scala/resonantinduction/core/prefab/tile/TileNode.java diff --git a/src/main/scala/resonantinduction/core/prefab/tile/TileNode.java b/src/main/scala/resonantinduction/core/prefab/tile/TileNode.java new file mode 100644 index 00000000..85027e3e --- /dev/null +++ b/src/main/scala/resonantinduction/core/prefab/tile/TileNode.java @@ -0,0 +1,173 @@ +package resonantinduction.core.prefab.tile; + +import java.util.EnumSet; +import java.util.HashMap; +import java.util.List; + +import net.minecraft.block.material.Material; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraftforge.common.ForgeDirection; +import resonant.api.IRotatable; +import resonant.api.grid.INode; +import resonant.api.grid.INodeProvider; +import resonant.lib.content.module.TileBase; +import resonant.lib.utility.nbt.ISaveObj; + +/** Prefab for tiles that support several nodes at a single time + * + * @author Darkguardsman */ +public class TileNode extends TileBase implements INodeProvider, IRotatable +{ + /** Set of nodes that this tile contains */ + int maxNodeId = 0; + final HashMap nodes = new HashMap(); + + public static class NodeWrapper + { + private int id; + private INode node; + //TODO move connectionSet to node interface + private EnumSet connectionSet; + + public NodeWrapper(int id, INode node) + { + this.id = id; + this.node = node; + connectionSet = EnumSet.allOf(ForgeDirection.class); + } + + public int getID() + { + return id; + } + + public INode getNode() + { + return node; + } + + public boolean canConnect(ForgeDirection side) + { + return connectionSet.contains(side); + } + } + + public TileNode(Material material) + { + super(material); + } + + public TileNode(String name, Material material) + { + super(name, material); + } + + @Override + public void initiate() + { + rebuildNodes(); + super.initiate(); + } + + public void addNode(INode node) + { + NodeWrapper wrapper = new NodeWrapper(maxNodeId, node); + nodes.put(maxNodeId, wrapper); + maxNodeId++; + } + + /** Called to let the nodes rebuild followed by updating the connection map */ + public final void rebuildNodes() + { + for (NodeWrapper wrapper : nodes.values()) + { + rebuildNode(wrapper.getNode()); + } + } + + /** Called to rebuild the exact node */ + public void rebuildNode(INode node) + { + node.reconstruct(); + } + + @Override + public INode getNode(Class nodeType, ForgeDirection from) + { + for (NodeWrapper wrapper : nodes.values()) + { + if (nodeType.isAssignableFrom(wrapper.getNode().getClass())) + { + if (wrapper.canConnect(from)) + { + return wrapper.getNode(); + } + } + } + return null; + } + + @Override + public void setDirection(ForgeDirection direction) + { + ForgeDirection lastDir = getDirection(); + super.setDirection(direction); + if (lastDir != getDirection()) + { + rebuildNodes(); + } + } + + @Override + public void invalidate() + { + for (NodeWrapper wrapper : nodes.values()) + { + wrapper.getNode().deconstruct(); + } + super.invalidate(); + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + if (nbt.hasKey("NodeSaves")) + { + List list = nbt.getTagList("NodeSaves").tagList; + for (int i = 0; i < list.size(); i++) + { + Object obj = list.get(i); + if (obj instanceof NBTTagCompound) + { + NBTTagCompound tag = (NBTTagCompound) obj; + int nodeID = tag.getInteger("nodeID"); + NodeWrapper wrapper = nodes.get(nodeID); + if (wrapper != null && wrapper.getNode() instanceof ISaveObj) + { + ((ISaveObj) wrapper.getNode()).load(tag); + } + } + } + } + } + + @Override + public void writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + NBTTagList list = new NBTTagList(); + for (NodeWrapper wrapper : nodes.values()) + { + if (wrapper.getNode() instanceof ISaveObj) + { + NBTTagCompound tag = new NBTTagCompound(); + tag.setInteger("nodeID", wrapper.id); + ((ISaveObj) wrapper.getNode()).save(tag); + } + } + nbt.setTag("NodeSaves", list); + } + +} From 777bf75b898510d8ec4d7692213a55393d1764ce Mon Sep 17 00:00:00 2001 From: Robert S Date: Tue, 10 Jun 2014 08:21:24 -0400 Subject: [PATCH 04/62] Separated GrinderNode from grinder to make debug faster --- .../process/grinder/GrinderNode.java | 33 +++++++++++++++++++ .../process/grinder/TileGrindingWheel.java | 22 +------------ 2 files changed, 34 insertions(+), 21 deletions(-) create mode 100644 mechanical/src/main/scala/resonantinduction/mechanical/process/grinder/GrinderNode.java diff --git a/mechanical/src/main/scala/resonantinduction/mechanical/process/grinder/GrinderNode.java b/mechanical/src/main/scala/resonantinduction/mechanical/process/grinder/GrinderNode.java new file mode 100644 index 00000000..175fa375 --- /dev/null +++ b/mechanical/src/main/scala/resonantinduction/mechanical/process/grinder/GrinderNode.java @@ -0,0 +1,33 @@ +package resonantinduction.mechanical.process.grinder; + +import net.minecraftforge.common.ForgeDirection; +import resonantinduction.core.interfaces.IMechanicalNode; +import resonantinduction.mechanical.energy.grid.MechanicalNode; + +/** Node just for the grinder + * + * @author Darkguardsman */ +public class GrinderNode extends MechanicalNode +{ + public GrinderNode(TileGrindingWheel parent) + { + super(parent); + } + + public TileGrindingWheel grider() + { + return (TileGrindingWheel) getParent(); + } + + @Override + public boolean canConnect(ForgeDirection from, Object source) + { + return grider().getDirection() == from || grider().getDirection().getOpposite() == from; + } + + @Override + public boolean inverseRotation(ForgeDirection dir, IMechanicalNode with) + { + return !(dir.offsetX > 0 || dir.offsetZ < 0 || dir.offsetY < 0); + } +} diff --git a/mechanical/src/main/scala/resonantinduction/mechanical/process/grinder/TileGrindingWheel.java b/mechanical/src/main/scala/resonantinduction/mechanical/process/grinder/TileGrindingWheel.java index 73953016..50a60f1e 100644 --- a/mechanical/src/main/scala/resonantinduction/mechanical/process/grinder/TileGrindingWheel.java +++ b/mechanical/src/main/scala/resonantinduction/mechanical/process/grinder/TileGrindingWheel.java @@ -38,27 +38,7 @@ public class TileGrindingWheel extends TileMechanical implements IRotatable public TileGrindingWheel() { super(Material.rock); - - mechanicalNode = new MechanicalNode(this) - { - @Override - public boolean canConnect(ForgeDirection from, Object source) - { - if (getDirection().ordinal() < 2) - { - return from.offsetY != 0; - } - - return getDirection().getRotation(ForgeDirection.UP) == from || getDirection().getRotation(ForgeDirection.DOWN) == from; - } - - @Override - public boolean inverseRotation(ForgeDirection dir, IMechanicalNode with) - { - return !(dir.offsetX > 0 || dir.offsetZ < 0 || dir.offsetY < 0); - } - }.setLoad(2); - + mechanicalNode = new GrinderNode(this).setLoad(2); bounds = new Cuboid(0.05f, 0.05f, 0.05f, 0.95f, 0.95f, 0.95f); isOpaqueCube = false; normalRender = false; From e109305a23f9f7aa005c5d4e5cadf73e4a9d7911 Mon Sep 17 00:00:00 2001 From: Robert S Date: Tue, 10 Jun 2014 08:54:09 -0400 Subject: [PATCH 05/62] Fixed grinder connection logic --- .../process/grinder/GrinderNode.java | 6 +- .../process/grinder/RenderGrindingWheel.java | 2 +- .../process/grinder/TileGrindingWheel.java | 341 +++++++++--------- 3 files changed, 174 insertions(+), 175 deletions(-) diff --git a/mechanical/src/main/scala/resonantinduction/mechanical/process/grinder/GrinderNode.java b/mechanical/src/main/scala/resonantinduction/mechanical/process/grinder/GrinderNode.java index 175fa375..11fa5144 100644 --- a/mechanical/src/main/scala/resonantinduction/mechanical/process/grinder/GrinderNode.java +++ b/mechanical/src/main/scala/resonantinduction/mechanical/process/grinder/GrinderNode.java @@ -22,7 +22,11 @@ public class GrinderNode extends MechanicalNode @Override public boolean canConnect(ForgeDirection from, Object source) { - return grider().getDirection() == from || grider().getDirection().getOpposite() == from; + if(grider().getDirection() == ForgeDirection.UP || grider().getDirection() == ForgeDirection.DOWN) + { + return grider().getDirection() == from || grider().getDirection().getOpposite() == from; + } + return grider().getDirection() != from && grider().getDirection().getOpposite() != from; } @Override diff --git a/mechanical/src/main/scala/resonantinduction/mechanical/process/grinder/RenderGrindingWheel.java b/mechanical/src/main/scala/resonantinduction/mechanical/process/grinder/RenderGrindingWheel.java index 39cc4f66..f91a2821 100644 --- a/mechanical/src/main/scala/resonantinduction/mechanical/process/grinder/RenderGrindingWheel.java +++ b/mechanical/src/main/scala/resonantinduction/mechanical/process/grinder/RenderGrindingWheel.java @@ -34,7 +34,7 @@ public class RenderGrindingWheel extends TileEntitySpecialRenderer glTranslatef((float) x + 0.5F, (float) y + 0.5f, (float) z + 0.5F); glScalef(0.51f, 0.5f, 0.5f); ForgeDirection dir = tile.getDirection(); - dir = ForgeDirection.getOrientation(!(dir.ordinal() % 2 == 0) ? dir.ordinal() - 1 : dir.ordinal()); + //dir = ForgeDirection.getOrientation(!(dir.ordinal() % 2 == 0) ? dir.ordinal() - 1 : dir.ordinal()); RenderUtility.rotateBlockBasedOnDirection(dir); glRotatef((float) Math.toDegrees(tile.mechanicalNode.renderAngle), 0, 0, 1); RenderUtility.bind(Reference.BLOCK_TEXTURE_DIRECTORY + "planks_oak.png"); diff --git a/mechanical/src/main/scala/resonantinduction/mechanical/process/grinder/TileGrindingWheel.java b/mechanical/src/main/scala/resonantinduction/mechanical/process/grinder/TileGrindingWheel.java index 50a60f1e..4c5d15a5 100644 --- a/mechanical/src/main/scala/resonantinduction/mechanical/process/grinder/TileGrindingWheel.java +++ b/mechanical/src/main/scala/resonantinduction/mechanical/process/grinder/TileGrindingWheel.java @@ -20,206 +20,201 @@ import resonantinduction.mechanical.energy.grid.MechanicalNode; import resonantinduction.mechanical.energy.grid.TileMechanical; import universalelectricity.api.vector.Vector3; -/** - * @author Calclavia - * - */ +/** @author Calclavia */ public class TileGrindingWheel extends TileMechanical implements IRotatable { - public static final int PROCESS_TIME = 20 * 20; - /** A map of ItemStacks and their remaining grind-time left. */ - public static final Timer timer = new Timer(); + public static final int PROCESS_TIME = 20 * 20; + /** A map of ItemStacks and their remaining grind-time left. */ + public static final Timer timer = new Timer(); - public EntityItem grindingItem = null; + public EntityItem grindingItem = null; - private final long requiredTorque = 1000; - private double counter = 0; + private final long requiredTorque = 1000; + private double counter = 0; - public TileGrindingWheel() - { - super(Material.rock); - mechanicalNode = new GrinderNode(this).setLoad(2); - bounds = new Cuboid(0.05f, 0.05f, 0.05f, 0.95f, 0.95f, 0.95f); - isOpaqueCube = false; - normalRender = false; - customItemRender = true; - rotationMask = Byte.parseByte("111111", 2); - textureName = "material_steel_dark"; - } + public TileGrindingWheel() + { + super(Material.rock); + mechanicalNode = new GrinderNode(this).setLoad(2); + bounds = new Cuboid(0.05f, 0.05f, 0.05f, 0.95f, 0.95f, 0.95f); + isOpaqueCube = false; + normalRender = false; + customItemRender = true; + rotationMask = Byte.parseByte("111111", 2); + textureName = "material_steel_dark"; + } - @Override - public void collide(Entity entity) - { - if (entity instanceof EntityItem) - { - ((EntityItem) entity).age--; - } + @Override + public void updateEntity() + { + super.updateEntity(); + counter = Math.max(counter + mechanicalNode.torque, 0); + doWork(); + } - if (canWork()) - { - if (entity instanceof EntityItem) - { - if (canGrind(((EntityItem) entity).getEntityItem())) - { - if (grindingItem == null) - { - grindingItem = (EntityItem) entity; - } + @Override + public void collide(Entity entity) + { + if (entity instanceof EntityItem) + { + ((EntityItem) entity).age--; + } - if (!TileGrindingWheel.timer.containsKey((EntityItem) entity)) - { - TileGrindingWheel.timer.put((EntityItem) entity, TileGrindingWheel.PROCESS_TIME); - } - } - else - { - entity.setPosition(entity.posX, entity.posY - 1.2, entity.posZ); - } - } - else - { - entity.attackEntityFrom(DamageSource.cactus, 2); - } + if (canWork()) + { + if (entity instanceof EntityItem) + { + if (canGrind(((EntityItem) entity).getEntityItem())) + { + if (grindingItem == null) + { + grindingItem = (EntityItem) entity; + } - } + if (!TileGrindingWheel.timer.containsKey((EntityItem) entity)) + { + TileGrindingWheel.timer.put((EntityItem) entity, TileGrindingWheel.PROCESS_TIME); + } + } + else + { + entity.setPosition(entity.posX, entity.posY - 1.2, entity.posZ); + } + } + else + { + entity.attackEntityFrom(DamageSource.cactus, 2); + } - if (mechanicalNode.getAngularSpeed() != 0) - { - // Move entity based on the direction of the block. - ForgeDirection dir = getDirection(); - dir = ForgeDirection.getOrientation(!(dir.ordinal() % 2 == 0) ? dir.ordinal() - 1 : dir.ordinal()).getOpposite(); - double speed = mechanicalNode.getAngularSpeed() / 20; - entity.addVelocity(dir.offsetX * speed, Math.random() * speed, dir.offsetZ * speed); - } - } + } - @Override - public void updateEntity() - { - super.updateEntity(); - counter = Math.max(counter + mechanicalNode.torque, 0); - doWork(); - } + if (mechanicalNode.getAngularSpeed() != 0) + { + // Move entity based on the direction of the block. + ForgeDirection dir = getDirection(); + dir = ForgeDirection.getOrientation(!(dir.ordinal() % 2 == 0) ? dir.ordinal() - 1 : dir.ordinal()).getOpposite(); + double speed = mechanicalNode.getAngularSpeed() / 20; + entity.addVelocity(dir.offsetX * speed, Math.random() * speed, dir.offsetZ * speed); + } + } - /** - * Can this machine work this tick? - * - * @return - */ - public boolean canWork() - { - return counter >= requiredTorque; - } + /** Can this machine work this tick? + * + * @return */ + public boolean canWork() + { + return counter >= requiredTorque; + } - public void doWork() - { - if (canWork()) - { - boolean didWork = false; + public void doWork() + { + if (canWork()) + { + boolean didWork = false; - if (grindingItem != null) - { - if (timer.containsKey(grindingItem) && !grindingItem.isDead && new Vector3(this).add(0.5).distance(grindingItem) < 1) - { - int timeLeft = timer.decrease(grindingItem); + if (grindingItem != null) + { + if (timer.containsKey(grindingItem) && !grindingItem.isDead && new Vector3(this).add(0.5).distance(grindingItem) < 1) + { + int timeLeft = timer.decrease(grindingItem); - if (timeLeft <= 0) - { - if (this.doGrind(grindingItem)) - { - if (--grindingItem.getEntityItem().stackSize <= 0) - { - grindingItem.setDead(); - timer.remove(grindingItem); - grindingItem = null; - } - else - { - grindingItem.setEntityItemStack(grindingItem.getEntityItem()); - // Reset timer - timer.put(grindingItem, PROCESS_TIME); - } - } - } - else - { - grindingItem.delayBeforeCanPickup = 20; + if (timeLeft <= 0) + { + if (this.doGrind(grindingItem)) + { + if (--grindingItem.getEntityItem().stackSize <= 0) + { + grindingItem.setDead(); + timer.remove(grindingItem); + grindingItem = null; + } + else + { + grindingItem.setEntityItemStack(grindingItem.getEntityItem()); + // Reset timer + timer.put(grindingItem, PROCESS_TIME); + } + } + } + else + { + grindingItem.delayBeforeCanPickup = 20; - if (grindingItem.getEntityItem().getItem() instanceof ItemBlock) - { - ResonantInduction.proxy.renderBlockParticle(worldObj, new Vector3(grindingItem), new Vector3((Math.random() - 0.5f) * 3, (Math.random() - 0.5f) * 3, (Math.random() - 0.5f) * 3), ((ItemBlock) grindingItem.getEntityItem().getItem()).getBlockID(), 1); - } - else - { - worldObj.spawnParticle("crit", grindingItem.posX, grindingItem.posY, grindingItem.posZ, (Math.random() - 0.5f) * 3, (Math.random() - 0.5f) * 3, (Math.random() - 0.5f) * 3); - } - } + if (grindingItem.getEntityItem().getItem() instanceof ItemBlock) + { + ResonantInduction.proxy.renderBlockParticle(worldObj, new Vector3(grindingItem), new Vector3((Math.random() - 0.5f) * 3, (Math.random() - 0.5f) * 3, (Math.random() - 0.5f) * 3), ((ItemBlock) grindingItem.getEntityItem().getItem()).getBlockID(), 1); + } + else + { + worldObj.spawnParticle("crit", grindingItem.posX, grindingItem.posY, grindingItem.posZ, (Math.random() - 0.5f) * 3, (Math.random() - 0.5f) * 3, (Math.random() - 0.5f) * 3); + } + } - didWork = true; - } - else - { - timer.remove(grindingItem); - grindingItem = null; - } - } + didWork = true; + } + else + { + timer.remove(grindingItem); + grindingItem = null; + } + } - if (didWork) - { - if (this.ticks % 8 == 0) - { - worldObj.playSoundEffect(this.xCoord + 0.5, this.yCoord + 0.5, this.zCoord + 0.5, Reference.PREFIX + "grinder", 0.5f, 1); - } + if (didWork) + { + if (this.ticks % 8 == 0) + { + worldObj.playSoundEffect(this.xCoord + 0.5, this.yCoord + 0.5, this.zCoord + 0.5, Reference.PREFIX + "grinder", 0.5f, 1); + } - counter -= requiredTorque; - } - } - } + counter -= requiredTorque; + } + } + } - public boolean canGrind(ItemStack itemStack) - { - return MachineRecipes.INSTANCE.getOutput(RecipeType.GRINDER.name(), itemStack).length > 0; - } + public boolean canGrind(ItemStack itemStack) + { + return MachineRecipes.INSTANCE.getOutput(RecipeType.GRINDER.name(), itemStack).length > 0; + } - private boolean doGrind(EntityItem entity) - { - ItemStack itemStack = entity.getEntityItem(); + private boolean doGrind(EntityItem entity) + { + ItemStack itemStack = entity.getEntityItem(); - RecipeResource[] results = MachineRecipes.INSTANCE.getOutput(RecipeType.GRINDER.name(), itemStack); + RecipeResource[] results = MachineRecipes.INSTANCE.getOutput(RecipeType.GRINDER.name(), itemStack); - for (RecipeResource resource : results) - { - ItemStack outputStack = resource.getItemStack(); + for (RecipeResource resource : results) + { + ItemStack outputStack = resource.getItemStack(); - if (!this.worldObj.isRemote) - { - EntityItem entityItem = new EntityItem(this.worldObj, entity.posX, entity.posY - 1.2, entity.posZ, outputStack); - entityItem.delayBeforeCanPickup = 20; - entityItem.motionX = 0; - entityItem.motionY = 0; - entityItem.motionZ = 0; - this.worldObj.spawnEntityInWorld(entityItem); - } - } + if (!this.worldObj.isRemote) + { + EntityItem entityItem = new EntityItem(this.worldObj, entity.posX, entity.posY - 1.2, entity.posZ, outputStack); + entityItem.delayBeforeCanPickup = 20; + entityItem.motionX = 0; + entityItem.motionY = 0; + entityItem.motionZ = 0; + this.worldObj.spawnEntityInWorld(entityItem); + } + } - return results.length > 0; - } + return results.length > 0; + } - @Override - public ForgeDirection getDirection() - { - if (worldObj != null) - { - return ForgeDirection.getOrientation(getBlockMetadata()); - } + @Override + public ForgeDirection getDirection() + { + if (worldObj != null) + { + return ForgeDirection.getOrientation(getBlockMetadata()); + } - return ForgeDirection.UNKNOWN; - } + return ForgeDirection.UNKNOWN; + } - @Override - public void setDirection(ForgeDirection direction) - { - worldObj.setBlockMetadataWithNotify(xCoord, yCoord, zCoord, direction.ordinal(), 3); - } + @Override + public void setDirection(ForgeDirection direction) + { + worldObj.setBlockMetadataWithNotify(xCoord, yCoord, zCoord, direction.ordinal(), 3); + } } From 64e37368069bc7f42be709d58e618039932d7621 Mon Sep 17 00:00:00 2001 From: Robert S Date: Tue, 10 Jun 2014 09:23:06 -0400 Subject: [PATCH 06/62] Changed grinder to use a custom damage source allowing for localization --- .../mechanical/process/grinder/TileGrindingWheel.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/mechanical/src/main/scala/resonantinduction/mechanical/process/grinder/TileGrindingWheel.java b/mechanical/src/main/scala/resonantinduction/mechanical/process/grinder/TileGrindingWheel.java index 4c5d15a5..ce491d67 100644 --- a/mechanical/src/main/scala/resonantinduction/mechanical/process/grinder/TileGrindingWheel.java +++ b/mechanical/src/main/scala/resonantinduction/mechanical/process/grinder/TileGrindingWheel.java @@ -10,6 +10,7 @@ import net.minecraftforge.common.ForgeDirection; import resonant.api.IRotatable; import resonant.api.recipe.MachineRecipes; import resonant.api.recipe.RecipeResource; +import resonant.lib.prefab.CustomDamageSource; import resonant.lib.prefab.vector.Cuboid; import resonantinduction.core.Reference; import resonantinduction.core.ResonantInduction; @@ -29,7 +30,7 @@ public class TileGrindingWheel extends TileMechanical implements IRotatable public EntityItem grindingItem = null; - private final long requiredTorque = 1000; + private final long requiredTorque = 250; private double counter = 0; public TileGrindingWheel() @@ -83,7 +84,7 @@ public class TileGrindingWheel extends TileMechanical implements IRotatable } else { - entity.attackEntityFrom(DamageSource.cactus, 2); + entity.attackEntityFrom(new CustomDamageSource("grinder", this), 2); } } From 6f4ac81fdfe11241edbb224d944d31db33352d98 Mon Sep 17 00:00:00 2001 From: Robert S Date: Tue, 10 Jun 2014 09:47:25 -0400 Subject: [PATCH 07/62] Changed TileMechanical to use ID based packet interface --- .../energy/grid/TileMechanical.java | 23 +++++++++++-------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/TileMechanical.java b/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/TileMechanical.java index 56133479..62338398 100644 --- a/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/TileMechanical.java +++ b/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/TileMechanical.java @@ -8,6 +8,7 @@ import resonant.api.grid.INode; import resonant.api.grid.INodeProvider; import resonant.lib.content.module.TileBase; import resonant.lib.network.IPacketReceiver; +import resonant.lib.network.IPacketReceiverWithID; import resonant.lib.network.PacketHandler; import resonantinduction.core.ResonantInduction; import resonantinduction.mechanical.Mechanical; @@ -18,7 +19,7 @@ import com.google.common.io.ByteArrayDataInput; /** Prefab for mechanical tiles * * @author Calclavia */ -public abstract class TileMechanical extends TileBase implements INodeProvider, IPacketReceiver +public abstract class TileMechanical extends TileBase implements INodeProvider, IPacketReceiverWithID { protected static final int PACKET_VELOCITY = 1; @@ -76,19 +77,21 @@ public abstract class TileMechanical extends TileBase implements INodeProvider, private void sendRotationPacket() { - PacketHandler.sendPacketToClients(ResonantInduction.PACKET_TILE.getPacket(this, PACKET_VELOCITY, mechanicalNode.angularVelocity), worldObj, new Vector3(this), 20); + PacketHandler.sendPacketToClients(ResonantInduction.PACKET_TILE.getPacketWithID(PACKET_VELOCITY, this, mechanicalNode.angularVelocity), worldObj, new Vector3(this), 20); } @Override - public void onReceivePacket(ByteArrayDataInput data, EntityPlayer player, Object... extra) + public boolean onReceivePacket(int id, ByteArrayDataInput data, EntityPlayer player, Object... extra) { - onReceivePacket(data.readInt(), data, player, extra); - } - - public void onReceivePacket(int id, ByteArrayDataInput data, EntityPlayer player, Object... extra) - { - if (id == PACKET_VELOCITY) - mechanicalNode.angularVelocity = data.readDouble(); + if (!world().isRemote) + { + if (id == PACKET_VELOCITY) + { + mechanicalNode.angularVelocity = data.readDouble(); + return true; + } + } + return false; } @Override From 2772d4add612a397e933311ba6e2599c183730ce Mon Sep 17 00:00:00 2001 From: Robert S Date: Tue, 10 Jun 2014 09:53:09 -0400 Subject: [PATCH 08/62] Made TileTurbine extends TileMechanical as well cleaned up a few methods --- .../energy/turbine/TileTurbine.java | 90 ++----------------- 1 file changed, 7 insertions(+), 83 deletions(-) diff --git a/mechanical/src/main/scala/resonantinduction/mechanical/energy/turbine/TileTurbine.java b/mechanical/src/main/scala/resonantinduction/mechanical/energy/turbine/TileTurbine.java index f68af857..cf003072 100644 --- a/mechanical/src/main/scala/resonantinduction/mechanical/energy/turbine/TileTurbine.java +++ b/mechanical/src/main/scala/resonantinduction/mechanical/energy/turbine/TileTurbine.java @@ -24,12 +24,13 @@ import resonant.lib.network.Synced; import resonant.lib.network.Synced.SyncedInput; import resonant.lib.network.Synced.SyncedOutput; import resonantinduction.mechanical.energy.grid.MechanicalNode; +import resonantinduction.mechanical.energy.grid.TileMechanical; import universalelectricity.api.vector.Vector3; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; /** Reduced version of the main turbine class */ -public class TileTurbine extends TileBase implements IMultiBlockStructure, INodeProvider, IPacketReceiverWithID +public class TileTurbine extends TileMechanical implements IMultiBlockStructure, INodeProvider, IPacketReceiverWithID { /** Tier of the tile */ public int tier = 0; @@ -43,10 +44,10 @@ public class TileTurbine extends TileBase implements IMultiBlockStructure nodeType, ForgeDirection from) - { - if (nodeType.isAssignableFrom(mechanicalNode.getClass())) - return ((TileTurbine) getMultiBlock().get()).mechanicalNode; - return null; - } - - @Override - public void invalidate() - { - mechanicalNode.deconstruct(); - super.invalidate(); - } - - @Override - public boolean onReceivePacket(int id, ByteArrayDataInput data, EntityPlayer player, Object... extra) - { - if (world().isRemote) - { - if (id == 0) - { - try - { - readFromNBT(PacketHandler.readNBTTagCompound(data)); - } - catch (IOException e) - { - e.printStackTrace(); - } - } - else if (id == 1) - { - this.mechanicalNode.angularVelocity = data.readDouble(); - } - } - return false; - } - } From ac4d930aac16f1676789491abc7245e2a3f8ed7e Mon Sep 17 00:00:00 2001 From: Robert S Date: Tue, 10 Jun 2014 09:53:46 -0400 Subject: [PATCH 09/62] Added to TileMechanical packet system --- .../energy/grid/TileMechanical.java | 34 ++++++++++++++++--- 1 file changed, 30 insertions(+), 4 deletions(-) diff --git a/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/TileMechanical.java b/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/TileMechanical.java index 62338398..d91ff6cb 100644 --- a/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/TileMechanical.java +++ b/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/TileMechanical.java @@ -1,11 +1,15 @@ package resonantinduction.mechanical.energy.grid; +import java.io.IOException; + import net.minecraft.block.material.Material; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.packet.Packet; import net.minecraftforge.common.ForgeDirection; import resonant.api.grid.INode; import resonant.api.grid.INodeProvider; +import resonant.lib.References; import resonant.lib.content.module.TileBase; import resonant.lib.network.IPacketReceiver; import resonant.lib.network.IPacketReceiverWithID; @@ -21,6 +25,7 @@ import com.google.common.io.ByteArrayDataInput; * @author Calclavia */ public abstract class TileMechanical extends TileBase implements INodeProvider, IPacketReceiverWithID { + protected static final int PACKET_NBT = 0; protected static final int PACKET_VELOCITY = 1; /** Node that handles most mechanical actions */ @@ -74,6 +79,14 @@ public abstract class TileMechanical extends TileBase implements INodeProvider, return mechanicalNode; return null; } + + @Override + public Packet getDescriptionPacket() + { + NBTTagCompound tag = new NBTTagCompound(); + writeToNBT(tag); + return References.PACKET_TILE.getPacketWithID(PACKET_NBT, this, tag); + } private void sendRotationPacket() { @@ -83,14 +96,27 @@ public abstract class TileMechanical extends TileBase implements INodeProvider, @Override public boolean onReceivePacket(int id, ByteArrayDataInput data, EntityPlayer player, Object... extra) { - if (!world().isRemote) + try { - if (id == PACKET_VELOCITY) + if (!world().isRemote) { - mechanicalNode.angularVelocity = data.readDouble(); - return true; + if (id == PACKET_NBT) + { + readFromNBT(PacketHandler.readNBTTagCompound(data)); + return true; + } + else if (id == PACKET_VELOCITY) + { + mechanicalNode.angularVelocity = data.readDouble(); + return true; + } } } + catch (IOException e) + { + e.printStackTrace(); + return true; + } return false; } From f02912e7a4e620acebba14afe82d5d23e0d22d16 Mon Sep 17 00:00:00 2001 From: Robert S Date: Tue, 10 Jun 2014 10:11:08 -0400 Subject: [PATCH 10/62] Fixed client side check for TileMechanical packet handling --- .../mechanical/energy/grid/TileMechanical.java | 5 ++--- .../mechanical/energy/turbine/TileTurbine.java | 15 --------------- 2 files changed, 2 insertions(+), 18 deletions(-) diff --git a/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/TileMechanical.java b/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/TileMechanical.java index d91ff6cb..87742e65 100644 --- a/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/TileMechanical.java +++ b/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/TileMechanical.java @@ -40,7 +40,6 @@ public abstract class TileMechanical extends TileBase implements INodeProvider, public TileMechanical(Material material) { super(material); - mechanicalNode = new MechanicalNode(this).setLoad(0.5f); } @Override @@ -64,7 +63,7 @@ public abstract class TileMechanical extends TileBase implements INodeProvider, mechanicalNode.update(); if (!this.getWorldObj().isRemote) { - if (mechanicalNode.markRotationUpdate && ticks % 10 == 0) + if (mechanicalNode.markRotationUpdate && ticks % 3 == 0) { sendRotationPacket(); mechanicalNode.markRotationUpdate = false; @@ -98,7 +97,7 @@ public abstract class TileMechanical extends TileBase implements INodeProvider, { try { - if (!world().isRemote) + if (world().isRemote) { if (id == PACKET_NBT) { diff --git a/mechanical/src/main/scala/resonantinduction/mechanical/energy/turbine/TileTurbine.java b/mechanical/src/main/scala/resonantinduction/mechanical/energy/turbine/TileTurbine.java index cf003072..be3fdce3 100644 --- a/mechanical/src/main/scala/resonantinduction/mechanical/energy/turbine/TileTurbine.java +++ b/mechanical/src/main/scala/resonantinduction/mechanical/energy/turbine/TileTurbine.java @@ -1,29 +1,16 @@ package resonantinduction.mechanical.energy.turbine; -import java.io.IOException; import java.util.HashSet; import java.util.Set; -import com.google.common.io.ByteArrayDataInput; - import net.minecraft.block.material.Material; -import net.minecraft.entity.player.EntityPlayer; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.network.packet.Packet; import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.World; import net.minecraftforge.common.ForgeDirection; -import resonant.api.grid.INode; import resonant.api.grid.INodeProvider; -import resonant.lib.References; -import resonant.lib.content.module.TileBase; import resonant.lib.multiblock.IMultiBlockStructure; import resonant.lib.network.IPacketReceiverWithID; -import resonant.lib.network.PacketHandler; -import resonant.lib.network.Synced; -import resonant.lib.network.Synced.SyncedInput; -import resonant.lib.network.Synced.SyncedOutput; -import resonantinduction.mechanical.energy.grid.MechanicalNode; import resonantinduction.mechanical.energy.grid.TileMechanical; import universalelectricity.api.vector.Vector3; import cpw.mods.fml.relauncher.Side; @@ -102,7 +89,6 @@ public class TileTurbine extends TileMechanical implements IMultiBlockStructure< /** Reads a tile entity from NBT. */ @Override - @SyncedInput public void readFromNBT(NBTTagCompound nbt) { super.readFromNBT(nbt); @@ -113,7 +99,6 @@ public class TileTurbine extends TileMechanical implements IMultiBlockStructure< /** Writes a tile entity to NBT. */ @Override - @SyncedOutput public void writeToNBT(NBTTagCompound nbt) { super.writeToNBT(nbt); From a90702fa273fbc2b243c1937e73c9b4d6fc0a3c0 Mon Sep 17 00:00:00 2001 From: Robert S Date: Tue, 10 Jun 2014 10:14:59 -0400 Subject: [PATCH 11/62] Added torque syncing to client in TileMechanical --- .../mechanical/energy/grid/MechanicalNode.java | 9 ++++++++- .../mechanical/energy/grid/TileMechanical.java | 6 ++++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/MechanicalNode.java b/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/MechanicalNode.java index 6a3e5f97..2b657a4e 100644 --- a/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/MechanicalNode.java +++ b/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/MechanicalNode.java @@ -26,11 +26,12 @@ public class MechanicalNode implements IMechanicalNode, ISaveObj, IVectorWorld public boolean doDebug = false; /** Used to note that you should trigger a packet update for rotation */ public boolean markRotationUpdate = false; + public boolean markTorqueUpdate = false; /** Which section of debug is enabled */ public int debugCue = 0, maxDebugCue = 1, minDebugCue = 0; public static final int UPDATE_DEBUG = 0, CONNECTION_DEBUG = 1; /** Rotational Force */ - public double torque = 0; + public double torque = 0, prevTorque; /** Rotational speed */ public double prevAngularVelocity, angularVelocity = 0; /** Rotational acceleration */ @@ -123,6 +124,12 @@ public class MechanicalNode implements IMechanicalNode, ISaveObj, IVectorWorld prevAngularVelocity = angularVelocity; markRotationUpdate = true; } + + if (Math.abs(prevTorque - torque) > 0.01f) + { + prevTorque = torque; + markTorqueUpdate = true; + } //----------------------------------- // Loss calculations diff --git a/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/TileMechanical.java b/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/TileMechanical.java index 87742e65..af5ee3e1 100644 --- a/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/TileMechanical.java +++ b/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/TileMechanical.java @@ -63,10 +63,11 @@ public abstract class TileMechanical extends TileBase implements INodeProvider, mechanicalNode.update(); if (!this.getWorldObj().isRemote) { - if (mechanicalNode.markRotationUpdate && ticks % 3 == 0) + if (ticks % 3 == 0 && (mechanicalNode.markTorqueUpdate || mechanicalNode.markRotationUpdate)) { sendRotationPacket(); mechanicalNode.markRotationUpdate = false; + mechanicalNode.markTorqueUpdate = false; } } } @@ -89,7 +90,7 @@ public abstract class TileMechanical extends TileBase implements INodeProvider, private void sendRotationPacket() { - PacketHandler.sendPacketToClients(ResonantInduction.PACKET_TILE.getPacketWithID(PACKET_VELOCITY, this, mechanicalNode.angularVelocity), worldObj, new Vector3(this), 20); + PacketHandler.sendPacketToClients(ResonantInduction.PACKET_TILE.getPacketWithID(PACKET_VELOCITY, this, mechanicalNode.angularVelocity, mechanicalNode.torque), worldObj, new Vector3(this), 20); } @Override @@ -107,6 +108,7 @@ public abstract class TileMechanical extends TileBase implements INodeProvider, else if (id == PACKET_VELOCITY) { mechanicalNode.angularVelocity = data.readDouble(); + mechanicalNode.torque = data.readDouble(); return true; } } From 51cb0119e0d9a3dd1bce2e58ae44eb1cfd20764f Mon Sep 17 00:00:00 2001 From: Robert S Date: Tue, 10 Jun 2014 10:38:42 -0400 Subject: [PATCH 12/62] Reduced loss code in mech node too a few lines making it easier to read --- .../energy/grid/MechanicalNode.java | 22 +++---------------- 1 file changed, 3 insertions(+), 19 deletions(-) diff --git a/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/MechanicalNode.java b/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/MechanicalNode.java index 2b657a4e..9b9f374a 100644 --- a/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/MechanicalNode.java +++ b/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/MechanicalNode.java @@ -124,7 +124,7 @@ public class MechanicalNode implements IMechanicalNode, ISaveObj, IVectorWorld prevAngularVelocity = angularVelocity; markRotationUpdate = true; } - + if (Math.abs(prevTorque - torque) > 0.01f) { prevTorque = torque; @@ -135,26 +135,10 @@ public class MechanicalNode implements IMechanicalNode, ISaveObj, IVectorWorld // Loss calculations //----------------------------------- double torqueLoss = Math.min(Math.abs(getTorque()), (Math.abs(getTorque() * getTorqueLoad()) + getTorqueLoad() / 10) * deltaTime); - - if (torque > 0) - { - torque -= torqueLoss; - } - else - { - torque += torqueLoss; - } + torque += torque > 0 ? -torqueLoss : torqueLoss; double velocityLoss = Math.min(Math.abs(getAngularSpeed()), (Math.abs(getAngularSpeed() * getAngularVelocityLoad()) + getAngularVelocityLoad() / 10) * deltaTime); - - if (angularVelocity > 0) - { - angularVelocity -= velocityLoss; - } - else - { - angularVelocity += velocityLoss; - } + angularVelocity += angularVelocity > 0 ? -velocityLoss : velocityLoss; if (getEnergy() <= 0) { From 1773bc4b2d79356232ee6e11224348ef1c24ec29 Mon Sep 17 00:00:00 2001 From: Robert S Date: Tue, 10 Jun 2014 10:42:56 -0400 Subject: [PATCH 13/62] Changed debug GUI for gears to support any MechanicalNode --- .../mechanical/energy/grid/PartMechanical.java | 2 +- .../mechanical/gear/GearDebugFrame.java | 12 ++++++------ .../core/interfaces/IMechanicalNode.java | 3 +-- 3 files changed, 8 insertions(+), 9 deletions(-) diff --git a/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/PartMechanical.java b/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/PartMechanical.java index fa197bbe..bc06a7de 100644 --- a/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/PartMechanical.java +++ b/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/PartMechanical.java @@ -83,7 +83,7 @@ public abstract class PartMechanical extends JCuboidPart implements JNormalOcclu //Opens a debug GUI if (frame == null) { - frame = new GearDebugFrame(this); + frame = new GearDebugFrame(this.node); frame.showDebugFrame(); } //Closes the debug GUI else diff --git a/mechanical/src/main/scala/resonantinduction/mechanical/gear/GearDebugFrame.java b/mechanical/src/main/scala/resonantinduction/mechanical/gear/GearDebugFrame.java index e71e60a6..51f703f4 100644 --- a/mechanical/src/main/scala/resonantinduction/mechanical/gear/GearDebugFrame.java +++ b/mechanical/src/main/scala/resonantinduction/mechanical/gear/GearDebugFrame.java @@ -28,9 +28,9 @@ public class GearDebugFrame extends Frame implements ActionListener Label[] connections = new Label[20]; long tick = 0; - PartMechanical part = null; + MechanicalNode part = null; - public GearDebugFrame(PartMechanical part) + public GearDebugFrame(MechanicalNode part) { this.part = part; setLayout(new BorderLayout()); @@ -93,7 +93,7 @@ public class GearDebugFrame extends Frame implements ActionListener @Override public String buildLabel() { - return super.buildLabel() + GearDebugFrame.this.part.node.angularVelocity; + return super.buildLabel() + GearDebugFrame.this.part.angularVelocity; } }; dataLabels.add(velLabel); @@ -104,7 +104,7 @@ public class GearDebugFrame extends Frame implements ActionListener @Override public String buildLabel() { - return super.buildLabel() + GearDebugFrame.this.part.node.renderAngle; + return super.buildLabel() + GearDebugFrame.this.part.renderAngle; } }; dataLabels.add(angleLabel); @@ -115,7 +115,7 @@ public class GearDebugFrame extends Frame implements ActionListener @Override public String buildLabel() { - return super.buildLabel() + GearDebugFrame.this.part.node.torque; + return super.buildLabel() + GearDebugFrame.this.part.torque; } }; dataLabels.add(torqueLabel); @@ -154,7 +154,7 @@ public class GearDebugFrame extends Frame implements ActionListener label.update(); } int c = 0; - for (Entry entry : part.node.getConnections().entrySet()) + for (Entry entry : part.getConnections().entrySet()) { if (entry.getKey() != null) { diff --git a/src/main/scala/resonantinduction/core/interfaces/IMechanicalNode.java b/src/main/scala/resonantinduction/core/interfaces/IMechanicalNode.java index 90653c53..9d472483 100644 --- a/src/main/scala/resonantinduction/core/interfaces/IMechanicalNode.java +++ b/src/main/scala/resonantinduction/core/interfaces/IMechanicalNode.java @@ -16,8 +16,7 @@ public interface IMechanicalNode extends INode public double getAngularSpeed(); /** Applies rotational force and velocity to the mechanical object */ - public void apply(Object source, double torque, double angularVelocity); - + public void apply(Object source, double torque, double angularVelocity); /** The Rotational force */ From c1e68c8ad20252cf5e167ea27e3b09cdcb2a1106 Mon Sep 17 00:00:00 2001 From: Robert S Date: Tue, 10 Jun 2014 10:43:46 -0400 Subject: [PATCH 14/62] Renamed GearDebugFrame to MechanicalNodeFrame --- .../mechanical/energy/grid/PartMechanical.java | 6 +++--- ...rDebugFrame.java => MechanicalNodeFrame.java} | 16 ++++++++-------- 2 files changed, 11 insertions(+), 11 deletions(-) rename mechanical/src/main/scala/resonantinduction/mechanical/gear/{GearDebugFrame.java => MechanicalNodeFrame.java} (88%) diff --git a/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/PartMechanical.java b/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/PartMechanical.java index bc06a7de..01ac4a59 100644 --- a/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/PartMechanical.java +++ b/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/PartMechanical.java @@ -12,7 +12,7 @@ import net.minecraftforge.common.ForgeDirection; import resonant.api.grid.INode; import resonant.api.grid.INodeProvider; import resonant.core.ResonantEngine; -import resonantinduction.mechanical.gear.GearDebugFrame; +import resonantinduction.mechanical.gear.MechanicalNodeFrame; import codechicken.lib.data.MCDataInput; import codechicken.lib.data.MCDataOutput; import codechicken.multipart.ControlKeyModifer; @@ -32,7 +32,7 @@ public abstract class PartMechanical extends JCuboidPart implements JNormalOcclu /** Packets */ boolean markPacketUpdate = false; /** Simple debug external GUI */ - GearDebugFrame frame = null; + MechanicalNodeFrame frame = null; /** Side of the block this is placed on */ public ForgeDirection placementSide = ForgeDirection.UNKNOWN; @@ -83,7 +83,7 @@ public abstract class PartMechanical extends JCuboidPart implements JNormalOcclu //Opens a debug GUI if (frame == null) { - frame = new GearDebugFrame(this.node); + frame = new MechanicalNodeFrame(this.node); frame.showDebugFrame(); } //Closes the debug GUI else diff --git a/mechanical/src/main/scala/resonantinduction/mechanical/gear/GearDebugFrame.java b/mechanical/src/main/scala/resonantinduction/mechanical/gear/MechanicalNodeFrame.java similarity index 88% rename from mechanical/src/main/scala/resonantinduction/mechanical/gear/GearDebugFrame.java rename to mechanical/src/main/scala/resonantinduction/mechanical/gear/MechanicalNodeFrame.java index 51f703f4..27ce964a 100644 --- a/mechanical/src/main/scala/resonantinduction/mechanical/gear/GearDebugFrame.java +++ b/mechanical/src/main/scala/resonantinduction/mechanical/gear/MechanicalNodeFrame.java @@ -22,7 +22,7 @@ import resonantinduction.mechanical.energy.grid.PartMechanical; * * @author Darkguardsman */ @SuppressWarnings("serial") -public class GearDebugFrame extends Frame implements ActionListener +public class MechanicalNodeFrame extends Frame implements ActionListener { List dataLabels = new ArrayList(); Label[] connections = new Label[20]; @@ -30,7 +30,7 @@ public class GearDebugFrame extends Frame implements ActionListener long tick = 0; MechanicalNode part = null; - public GearDebugFrame(MechanicalNode part) + public MechanicalNodeFrame(MechanicalNode part) { this.part = part; setLayout(new BorderLayout()); @@ -55,7 +55,7 @@ public class GearDebugFrame extends Frame implements ActionListener @Override public String buildLabel() { - return super.buildLabel() + GearDebugFrame.this.part.x(); + return super.buildLabel() + MechanicalNodeFrame.this.part.x(); } }; dataLabels.add(xLabel); @@ -66,7 +66,7 @@ public class GearDebugFrame extends Frame implements ActionListener @Override public String buildLabel() { - return super.buildLabel() + GearDebugFrame.this.part.y(); + return super.buildLabel() + MechanicalNodeFrame.this.part.y(); } }; topPanel.add(yLabel); @@ -77,7 +77,7 @@ public class GearDebugFrame extends Frame implements ActionListener @Override public String buildLabel() { - return super.buildLabel() + GearDebugFrame.this.part.z(); + return super.buildLabel() + MechanicalNodeFrame.this.part.z(); } }; topPanel.add(zLabel); @@ -93,7 +93,7 @@ public class GearDebugFrame extends Frame implements ActionListener @Override public String buildLabel() { - return super.buildLabel() + GearDebugFrame.this.part.angularVelocity; + return super.buildLabel() + MechanicalNodeFrame.this.part.angularVelocity; } }; dataLabels.add(velLabel); @@ -104,7 +104,7 @@ public class GearDebugFrame extends Frame implements ActionListener @Override public String buildLabel() { - return super.buildLabel() + GearDebugFrame.this.part.renderAngle; + return super.buildLabel() + MechanicalNodeFrame.this.part.renderAngle; } }; dataLabels.add(angleLabel); @@ -115,7 +115,7 @@ public class GearDebugFrame extends Frame implements ActionListener @Override public String buildLabel() { - return super.buildLabel() + GearDebugFrame.this.part.torque; + return super.buildLabel() + MechanicalNodeFrame.this.part.torque; } }; dataLabels.add(torqueLabel); From ca47b2ace9e42a87624e8c7bbfc3ead164d21940 Mon Sep 17 00:00:00 2001 From: Robert S Date: Tue, 10 Jun 2014 10:48:15 -0400 Subject: [PATCH 15/62] Added debug gui to Tile mechanical allowing debugging of grinder, turbine, and mixer --- .../energy/grid/TileMechanical.java | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/TileMechanical.java b/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/TileMechanical.java index af5ee3e1..a4e30953 100644 --- a/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/TileMechanical.java +++ b/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/TileMechanical.java @@ -4,11 +4,14 @@ import java.io.IOException; import net.minecraft.block.material.Material; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.network.packet.Packet; import net.minecraftforge.common.ForgeDirection; import resonant.api.grid.INode; import resonant.api.grid.INodeProvider; +import resonant.core.ResonantEngine; import resonant.lib.References; import resonant.lib.content.module.TileBase; import resonant.lib.network.IPacketReceiver; @@ -16,7 +19,9 @@ import resonant.lib.network.IPacketReceiverWithID; import resonant.lib.network.PacketHandler; import resonantinduction.core.ResonantInduction; import resonantinduction.mechanical.Mechanical; +import resonantinduction.mechanical.gear.MechanicalNodeFrame; import universalelectricity.api.vector.Vector3; +import codechicken.multipart.ControlKeyModifer; import com.google.common.io.ByteArrayDataInput; @@ -30,6 +35,9 @@ public abstract class TileMechanical extends TileBase implements INodeProvider, /** Node that handles most mechanical actions */ public MechanicalNode mechanicalNode; + + /** External debug GUI */ + MechanicalNodeFrame frame = null; @Deprecated public TileMechanical() @@ -71,6 +79,37 @@ public abstract class TileMechanical extends TileBase implements INodeProvider, } } } + + @Override + protected boolean use(EntityPlayer player, int side, Vector3 hit) + { + ItemStack itemStack = player.getHeldItem(); + if (ResonantEngine.runningAsDev) + { + if (itemStack != null && !world().isRemote) + { + if (itemStack.getItem().itemID == Item.stick.itemID) + { + //Set the nodes debug mode + if (ControlKeyModifer.isControlDown(player)) + { + //Opens a debug GUI + if (frame == null) + { + frame = new MechanicalNodeFrame(this.mechanicalNode); + frame.showDebugFrame(); + } //Closes the debug GUI + else + { + frame.closeDebugFrame(); + frame = null; + } + } + } + } + } + return false; + } @Override public INode getNode(Class nodeType, ForgeDirection from) From 1aa1a7967cb3ff62d7ea59b10b4f3d16d4966384 Mon Sep 17 00:00:00 2001 From: Robert S Date: Tue, 10 Jun 2014 12:57:50 -0400 Subject: [PATCH 16/62] Few changes to Debug gui to add more info --- .../energy/grid/PartMechanical.java | 2 +- .../energy/grid/TileMechanical.java | 2 +- .../mechanical/gear/MechanicalNodeFrame.java | 178 ++++++++++++------ .../process/grinder/TileGrindingWheel.java | 2 +- 4 files changed, 120 insertions(+), 64 deletions(-) diff --git a/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/PartMechanical.java b/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/PartMechanical.java index 01ac4a59..30ad36c0 100644 --- a/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/PartMechanical.java +++ b/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/PartMechanical.java @@ -83,7 +83,7 @@ public abstract class PartMechanical extends JCuboidPart implements JNormalOcclu //Opens a debug GUI if (frame == null) { - frame = new MechanicalNodeFrame(this.node); + frame = new MechanicalNodeFrame(this); frame.showDebugFrame(); } //Closes the debug GUI else diff --git a/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/TileMechanical.java b/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/TileMechanical.java index a4e30953..1e475571 100644 --- a/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/TileMechanical.java +++ b/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/TileMechanical.java @@ -96,7 +96,7 @@ public abstract class TileMechanical extends TileBase implements INodeProvider, //Opens a debug GUI if (frame == null) { - frame = new MechanicalNodeFrame(this.mechanicalNode); + frame = new MechanicalNodeFrame(this); frame.showDebugFrame(); } //Closes the debug GUI else diff --git a/mechanical/src/main/scala/resonantinduction/mechanical/gear/MechanicalNodeFrame.java b/mechanical/src/main/scala/resonantinduction/mechanical/gear/MechanicalNodeFrame.java index 27ce964a..2225d8f2 100644 --- a/mechanical/src/main/scala/resonantinduction/mechanical/gear/MechanicalNodeFrame.java +++ b/mechanical/src/main/scala/resonantinduction/mechanical/gear/MechanicalNodeFrame.java @@ -17,6 +17,7 @@ import java.util.Map.Entry; import net.minecraftforge.common.ForgeDirection; import resonantinduction.mechanical.energy.grid.MechanicalNode; import resonantinduction.mechanical.energy.grid.PartMechanical; +import resonantinduction.mechanical.energy.grid.TileMechanical; /** Java GUI used to help debug gear information * @@ -25,65 +26,31 @@ import resonantinduction.mechanical.energy.grid.PartMechanical; public class MechanicalNodeFrame extends Frame implements ActionListener { List dataLabels = new ArrayList(); - Label[] connections = new Label[20]; + Label[] connections = new Label[10]; long tick = 0; - MechanicalNode part = null; + PartMechanical partMechanical = null; + TileMechanical tileMechanical = null; - public MechanicalNodeFrame(MechanicalNode part) + public MechanicalNodeFrame(TileMechanical tile) + { + this(); + this.tileMechanical = tile; + + } + + public MechanicalNodeFrame(PartMechanical part) + { + this(); + this.partMechanical = part; + } + + protected MechanicalNodeFrame() { - this.part = part; setLayout(new BorderLayout()); setBackground(Color.LIGHT_GRAY); - - //Top bar - Panel topPanel = new Panel(new GridLayout(1, 4, 0, 0)); - - UpdatedLabel tickLabel = new UpdatedLabel("Tick: ") - { - @Override - public String buildLabel() - { - return super.buildLabel() + tick; - } - }; - dataLabels.add(tickLabel); - topPanel.add(tickLabel); - - UpdatedLabel xLabel = new UpdatedLabel("X: ") - { - @Override - public String buildLabel() - { - return super.buildLabel() + MechanicalNodeFrame.this.part.x(); - } - }; - dataLabels.add(xLabel); - topPanel.add(xLabel); - - UpdatedLabel yLabel = new UpdatedLabel("Y: ") - { - @Override - public String buildLabel() - { - return super.buildLabel() + MechanicalNodeFrame.this.part.y(); - } - }; - topPanel.add(yLabel); - dataLabels.add(yLabel); - - UpdatedLabel zLabel = new UpdatedLabel("Z: ") - { - @Override - public String buildLabel() - { - return super.buildLabel() + MechanicalNodeFrame.this.part.z(); - } - }; - topPanel.add(zLabel); - dataLabels.add(zLabel); - - add(topPanel, BorderLayout.NORTH); + this.createBottomBar(); + this.createTopBar(); //Middle bar Panel middlePanel = new Panel(new GridLayout(3, 1, 0, 0)); @@ -93,7 +60,7 @@ public class MechanicalNodeFrame extends Frame implements ActionListener @Override public String buildLabel() { - return super.buildLabel() + MechanicalNodeFrame.this.part.angularVelocity; + return super.buildLabel() + MechanicalNodeFrame.this.getNode().angularVelocity; } }; dataLabels.add(velLabel); @@ -104,7 +71,7 @@ public class MechanicalNodeFrame extends Frame implements ActionListener @Override public String buildLabel() { - return super.buildLabel() + MechanicalNodeFrame.this.part.renderAngle; + return super.buildLabel() + MechanicalNodeFrame.this.getNode().renderAngle; } }; dataLabels.add(angleLabel); @@ -115,21 +82,21 @@ public class MechanicalNodeFrame extends Frame implements ActionListener @Override public String buildLabel() { - return super.buildLabel() + MechanicalNodeFrame.this.part.torque; + return super.buildLabel() + MechanicalNodeFrame.this.getNode().torque; } }; dataLabels.add(torqueLabel); middlePanel.add(torqueLabel); - add(middlePanel, BorderLayout.CENTER); + add(middlePanel, BorderLayout.WEST); - Panel connectionPanel = new Panel(new GridLayout(this.connections.length / 4, 4, 0, 0)); + Panel connectionPanel = new Panel(new GridLayout(this.connections.length / 2, 2, 0, 0)); for (int i = 0; i < connections.length; i++) { this.connections[i] = new Label("Connection" + i + ": ----"); connectionPanel.add(connections[i]); } - add(connectionPanel, BorderLayout.SOUTH); + add(connectionPanel, BorderLayout.EAST); //exit icon handler addWindowListener(new WindowAdapter() @@ -143,18 +110,107 @@ public class MechanicalNodeFrame extends Frame implements ActionListener }); } + public MechanicalNode getNode() + { + if(partMechanical != null) + { + return partMechanical.node; + } + return tileMechanical.mechanicalNode; + } + + public void createTopBar() + { + Panel panel = new Panel(new GridLayout(1, 2, 0, 0)); + + UpdatedLabel tickLabel = new UpdatedLabel("Node: ") + { + @Override + public String buildLabel() + { + return super.buildLabel() + MechanicalNodeFrame.this.getNode(); + } + }; + dataLabels.add(tickLabel); + panel.add(tickLabel); + + UpdatedLabel xLabel = new UpdatedLabel("Parent: ") + { + @Override + public String buildLabel() + { + return super.buildLabel() + (MechanicalNodeFrame.this.getNode() != null ? MechanicalNodeFrame.this.getNode().getParent() : "null"); + } + }; + dataLabels.add(xLabel); + panel.add(xLabel); + + add(panel, BorderLayout.NORTH); + } + + public void createBottomBar() + { + Panel bottomPanel = new Panel(new GridLayout(1, 4, 0, 0)); + + UpdatedLabel tickLabel = new UpdatedLabel("Tick: ") + { + @Override + public String buildLabel() + { + return super.buildLabel() + tick; + } + }; + dataLabels.add(tickLabel); + bottomPanel.add(tickLabel); + + UpdatedLabel xLabel = new UpdatedLabel("X: ") + { + @Override + public String buildLabel() + { + return super.buildLabel() + MechanicalNodeFrame.this.getNode().x(); + } + }; + dataLabels.add(xLabel); + bottomPanel.add(xLabel); + + UpdatedLabel yLabel = new UpdatedLabel("Y: ") + { + @Override + public String buildLabel() + { + return super.buildLabel() + MechanicalNodeFrame.this.getNode().y(); + } + }; + bottomPanel.add(yLabel); + dataLabels.add(yLabel); + + UpdatedLabel zLabel = new UpdatedLabel("Z: ") + { + @Override + public String buildLabel() + { + return super.buildLabel() + MechanicalNodeFrame.this.getNode().z(); + } + }; + bottomPanel.add(zLabel); + dataLabels.add(zLabel); + + add(bottomPanel, BorderLayout.SOUTH); + } + /** Called each cpu cycle */ public void update() { tick++; - if (this.part != null) + if (this.getNode() != null) { for (UpdatedLabel label : dataLabels) { label.update(); } int c = 0; - for (Entry entry : part.getConnections().entrySet()) + for (Entry entry : getNode().getConnections().entrySet()) { if (entry.getKey() != null) { diff --git a/mechanical/src/main/scala/resonantinduction/mechanical/process/grinder/TileGrindingWheel.java b/mechanical/src/main/scala/resonantinduction/mechanical/process/grinder/TileGrindingWheel.java index ce491d67..2147cc11 100644 --- a/mechanical/src/main/scala/resonantinduction/mechanical/process/grinder/TileGrindingWheel.java +++ b/mechanical/src/main/scala/resonantinduction/mechanical/process/grinder/TileGrindingWheel.java @@ -49,7 +49,7 @@ public class TileGrindingWheel extends TileMechanical implements IRotatable public void updateEntity() { super.updateEntity(); - counter = Math.max(counter + mechanicalNode.torque, 0); + counter = Math.max(counter + Math.abs(mechanicalNode.torque), 0); doWork(); } From b515691a203c92acde897e2c48f99ee0ee31d907 Mon Sep 17 00:00:00 2001 From: Robert S Date: Tue, 10 Jun 2014 12:58:08 -0400 Subject: [PATCH 17/62] Fixed a compile issue with accessing something i can't in the code --- .../scala/resonantinduction/core/prefab/tile/TileNode.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/scala/resonantinduction/core/prefab/tile/TileNode.java b/src/main/scala/resonantinduction/core/prefab/tile/TileNode.java index 85027e3e..2a26a4fc 100644 --- a/src/main/scala/resonantinduction/core/prefab/tile/TileNode.java +++ b/src/main/scala/resonantinduction/core/prefab/tile/TileNode.java @@ -135,10 +135,10 @@ public class TileNode extends TileBase implements INodeProvider, IRotatable super.readFromNBT(nbt); if (nbt.hasKey("NodeSaves")) { - List list = nbt.getTagList("NodeSaves").tagList; - for (int i = 0; i < list.size(); i++) + NBTTagList list = nbt.getTagList("NodeSaves"); + for (int i = 0; i < list.tagCount(); i++) { - Object obj = list.get(i); + Object obj = list.tagAt(i); if (obj instanceof NBTTagCompound) { NBTTagCompound tag = (NBTTagCompound) obj; From 07e7170e823c34f00232d1497fca01743f019413 Mon Sep 17 00:00:00 2001 From: Robert S Date: Tue, 10 Jun 2014 13:31:18 -0400 Subject: [PATCH 18/62] Fixed debug GUI not working for subclasses of TileMechanical --- .../energy/grid/TileMechanical.java | 10 +++++++++ .../mechanical/gear/MechanicalNodeFrame.java | 4 ++-- .../process/purifier/MixerNode.java | 22 +++++++++++++++++++ .../process/purifier/TileMixer.java | 12 +--------- 4 files changed, 35 insertions(+), 13 deletions(-) create mode 100644 mechanical/src/main/scala/resonantinduction/mechanical/process/purifier/MixerNode.java diff --git a/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/TileMechanical.java b/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/TileMechanical.java index 1e475571..b513d519 100644 --- a/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/TileMechanical.java +++ b/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/TileMechanical.java @@ -48,6 +48,7 @@ public abstract class TileMechanical extends TileBase implements INodeProvider, public TileMechanical(Material material) { super(material); + this.mechanicalNode = new MechanicalNode(this); } @Override @@ -69,6 +70,15 @@ public abstract class TileMechanical extends TileBase implements INodeProvider, { super.updateEntity(); mechanicalNode.update(); + if(frame != null) + { + frame.update(); + if(!frame.isVisible()) + { + frame.dispose(); + frame = null; + } + } if (!this.getWorldObj().isRemote) { if (ticks % 3 == 0 && (mechanicalNode.markTorqueUpdate || mechanicalNode.markRotationUpdate)) diff --git a/mechanical/src/main/scala/resonantinduction/mechanical/gear/MechanicalNodeFrame.java b/mechanical/src/main/scala/resonantinduction/mechanical/gear/MechanicalNodeFrame.java index 2225d8f2..7ec921bd 100644 --- a/mechanical/src/main/scala/resonantinduction/mechanical/gear/MechanicalNodeFrame.java +++ b/mechanical/src/main/scala/resonantinduction/mechanical/gear/MechanicalNodeFrame.java @@ -29,8 +29,8 @@ public class MechanicalNodeFrame extends Frame implements ActionListener Label[] connections = new Label[10]; long tick = 0; - PartMechanical partMechanical = null; - TileMechanical tileMechanical = null; + private PartMechanical partMechanical = null; + private TileMechanical tileMechanical = null; public MechanicalNodeFrame(TileMechanical tile) { diff --git a/mechanical/src/main/scala/resonantinduction/mechanical/process/purifier/MixerNode.java b/mechanical/src/main/scala/resonantinduction/mechanical/process/purifier/MixerNode.java new file mode 100644 index 00000000..743a5256 --- /dev/null +++ b/mechanical/src/main/scala/resonantinduction/mechanical/process/purifier/MixerNode.java @@ -0,0 +1,22 @@ +package resonantinduction.mechanical.process.purifier; + +import net.minecraftforge.common.ForgeDirection; +import resonant.api.grid.INodeProvider; +import resonantinduction.core.interfaces.IMechanicalNode; +import resonantinduction.mechanical.energy.grid.MechanicalNode; + +public class MixerNode extends MechanicalNode +{ + + public MixerNode(INodeProvider parent) + { + super(parent); + } + + @Override + public boolean inverseRotation(ForgeDirection dir, IMechanicalNode with) + { + return dir == ForgeDirection.DOWN; + } + +} diff --git a/mechanical/src/main/scala/resonantinduction/mechanical/process/purifier/TileMixer.java b/mechanical/src/main/scala/resonantinduction/mechanical/process/purifier/TileMixer.java index 7fd6bc0f..ae0458ce 100644 --- a/mechanical/src/main/scala/resonantinduction/mechanical/process/purifier/TileMixer.java +++ b/mechanical/src/main/scala/resonantinduction/mechanical/process/purifier/TileMixer.java @@ -41,17 +41,7 @@ public class TileMixer extends TileMechanical implements IInventory public TileMixer() { super(Material.iron); - - mechanicalNode = new MechanicalNode(this) - { - @Override - public boolean inverseRotation(ForgeDirection dir, IMechanicalNode with) - { - return dir == ForgeDirection.DOWN; - } - - }.setConnection(Byte.parseByte("000011", 2)); - + mechanicalNode = new MixerNode(this).setConnection(Byte.parseByte("000011", 2)); isOpaqueCube = false; normalRender = false; customItemRender = true; From 9c8fc0370e6dba05901ce48bed8d6fd9b283d249 Mon Sep 17 00:00:00 2001 From: Robert S Date: Tue, 10 Jun 2014 20:25:28 -0400 Subject: [PATCH 19/62] Fixed MechanicalNode using TMultiPart regardless of what the parent class type --- .../mechanical/energy/grid/MechanicalNode.java | 12 ++++++++++++ .../mechanical/energy/grid/PartMechanical.java | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/MechanicalNode.java b/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/MechanicalNode.java index 9b9f374a..b3309fb0 100644 --- a/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/MechanicalNode.java +++ b/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/MechanicalNode.java @@ -369,18 +369,30 @@ public class MechanicalNode implements IMechanicalNode, ISaveObj, IVectorWorld @Override public double z() { + if(this.getParent() instanceof TileEntity) + { + return ((TileEntity)this.getParent()).zCoord; + } return this.getParent() instanceof TMultiPart && ((TMultiPart) this.getParent()).tile() != null ? ((TMultiPart) this.getParent()).z() : 0; } @Override public double x() { + if(this.getParent() instanceof TileEntity) + { + return ((TileEntity)this.getParent()).xCoord; + } return this.getParent() instanceof TMultiPart && ((TMultiPart) this.getParent()).tile() != null ? ((TMultiPart) this.getParent()).x() : 0; } @Override public double y() { + if(this.getParent() instanceof TileEntity) + { + return ((TileEntity)this.getParent()).yCoord; + } return this.getParent() instanceof TMultiPart && ((TMultiPart) this.getParent()).tile() != null ? ((TMultiPart) this.getParent()).y() : 0; } } diff --git a/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/PartMechanical.java b/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/PartMechanical.java index 30ad36c0..920da296 100644 --- a/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/PartMechanical.java +++ b/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/PartMechanical.java @@ -55,7 +55,7 @@ public abstract class PartMechanical extends JCuboidPart implements JNormalOcclu } //Make sure to update on both sides - this.node.update(0.05f); + this.node.update(); if (!world().isRemote) { From 7e6e5d88eae31e434ad3078e11a12cdb7551dc98 Mon Sep 17 00:00:00 2001 From: Robert S Date: Tue, 10 Jun 2014 20:31:33 -0400 Subject: [PATCH 20/62] Renamed mixer package --- .../src/main/scala/resonantinduction/mechanical/Mechanical.java | 2 +- .../mechanical/process/{purifier => mixer}/MixerNode.java | 2 +- .../mechanical/process/{purifier => mixer}/RenderMixer.java | 2 +- .../mechanical/process/{purifier => mixer}/TileMixer.java | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) rename mechanical/src/main/scala/resonantinduction/mechanical/process/{purifier => mixer}/MixerNode.java (89%) rename mechanical/src/main/scala/resonantinduction/mechanical/process/{purifier => mixer}/RenderMixer.java (97%) rename mechanical/src/main/scala/resonantinduction/mechanical/process/{purifier => mixer}/TileMixer.java (99%) diff --git a/mechanical/src/main/scala/resonantinduction/mechanical/Mechanical.java b/mechanical/src/main/scala/resonantinduction/mechanical/Mechanical.java index c6219adc..06e4876c 100644 --- a/mechanical/src/main/scala/resonantinduction/mechanical/Mechanical.java +++ b/mechanical/src/main/scala/resonantinduction/mechanical/Mechanical.java @@ -41,7 +41,7 @@ import resonantinduction.mechanical.process.crusher.TileMechanicalPiston; import resonantinduction.mechanical.process.edit.TileBreaker; import resonantinduction.mechanical.process.edit.TilePlacer; import resonantinduction.mechanical.process.grinder.TileGrindingWheel; -import resonantinduction.mechanical.process.purifier.TileMixer; +import resonantinduction.mechanical.process.mixer.TileMixer; import cpw.mods.fml.common.Mod; import cpw.mods.fml.common.Mod.EventHandler; import cpw.mods.fml.common.Mod.Instance; diff --git a/mechanical/src/main/scala/resonantinduction/mechanical/process/purifier/MixerNode.java b/mechanical/src/main/scala/resonantinduction/mechanical/process/mixer/MixerNode.java similarity index 89% rename from mechanical/src/main/scala/resonantinduction/mechanical/process/purifier/MixerNode.java rename to mechanical/src/main/scala/resonantinduction/mechanical/process/mixer/MixerNode.java index 743a5256..38f05ec2 100644 --- a/mechanical/src/main/scala/resonantinduction/mechanical/process/purifier/MixerNode.java +++ b/mechanical/src/main/scala/resonantinduction/mechanical/process/mixer/MixerNode.java @@ -1,4 +1,4 @@ -package resonantinduction.mechanical.process.purifier; +package resonantinduction.mechanical.process.mixer; import net.minecraftforge.common.ForgeDirection; import resonant.api.grid.INodeProvider; diff --git a/mechanical/src/main/scala/resonantinduction/mechanical/process/purifier/RenderMixer.java b/mechanical/src/main/scala/resonantinduction/mechanical/process/mixer/RenderMixer.java similarity index 97% rename from mechanical/src/main/scala/resonantinduction/mechanical/process/purifier/RenderMixer.java rename to mechanical/src/main/scala/resonantinduction/mechanical/process/mixer/RenderMixer.java index c5171adb..d6905071 100644 --- a/mechanical/src/main/scala/resonantinduction/mechanical/process/purifier/RenderMixer.java +++ b/mechanical/src/main/scala/resonantinduction/mechanical/process/mixer/RenderMixer.java @@ -1,4 +1,4 @@ -package resonantinduction.mechanical.process.purifier; +package resonantinduction.mechanical.process.mixer; import static org.lwjgl.opengl.GL11.glPopMatrix; import static org.lwjgl.opengl.GL11.glPushMatrix; diff --git a/mechanical/src/main/scala/resonantinduction/mechanical/process/purifier/TileMixer.java b/mechanical/src/main/scala/resonantinduction/mechanical/process/mixer/TileMixer.java similarity index 99% rename from mechanical/src/main/scala/resonantinduction/mechanical/process/purifier/TileMixer.java rename to mechanical/src/main/scala/resonantinduction/mechanical/process/mixer/TileMixer.java index ae0458ce..15859213 100644 --- a/mechanical/src/main/scala/resonantinduction/mechanical/process/purifier/TileMixer.java +++ b/mechanical/src/main/scala/resonantinduction/mechanical/process/mixer/TileMixer.java @@ -1,4 +1,4 @@ -package resonantinduction.mechanical.process.purifier; +package resonantinduction.mechanical.process.mixer; import java.util.LinkedHashSet; import java.util.List; From 2a6229638b1510d021915f0729df2b3e22b17526 Mon Sep 17 00:00:00 2001 From: Robert S Date: Wed, 11 Jun 2014 04:50:12 -0400 Subject: [PATCH 21/62] Added max speed to grinder, still needs tuned but limits are setup --- .../process/grinder/TileGrindingWheel.java | 17 ++++++++++++++++- .../core/grid/fluid/FluidPressureNode.java | 11 ++--------- .../core/grid/fluid/IPressureNodeProvider.java | 1 + 3 files changed, 19 insertions(+), 10 deletions(-) diff --git a/mechanical/src/main/scala/resonantinduction/mechanical/process/grinder/TileGrindingWheel.java b/mechanical/src/main/scala/resonantinduction/mechanical/process/grinder/TileGrindingWheel.java index 2147cc11..7743f87e 100644 --- a/mechanical/src/main/scala/resonantinduction/mechanical/process/grinder/TileGrindingWheel.java +++ b/mechanical/src/main/scala/resonantinduction/mechanical/process/grinder/TileGrindingWheel.java @@ -95,7 +95,22 @@ public class TileGrindingWheel extends TileMechanical implements IRotatable ForgeDirection dir = getDirection(); dir = ForgeDirection.getOrientation(!(dir.ordinal() % 2 == 0) ? dir.ordinal() - 1 : dir.ordinal()).getOpposite(); double speed = mechanicalNode.getAngularSpeed() / 20; - entity.addVelocity(dir.offsetX * speed, Math.random() * speed, dir.offsetZ * speed); + double speedX = dir.offsetX * speed; + double speedZ = dir.offsetZ * speed; + double speedY = Math.random() * speed; + if(Math.abs(speedX) > 1) + { + speedX = speedX > 0 ? 1 : -1; + } + if(Math.abs(speedZ) > 1) + { + speedZ = speedZ > 0 ? 1 : -1; + } + if(Math.abs(speedZ) > 1) + { + speedY = speedY > 0 ? 1 : -1; + } + entity.addVelocity(speedX, speedY, speedZ); } } diff --git a/src/main/scala/resonantinduction/core/grid/fluid/FluidPressureNode.java b/src/main/scala/resonantinduction/core/grid/fluid/FluidPressureNode.java index 1e2f77fe..5c85ab96 100644 --- a/src/main/scala/resonantinduction/core/grid/fluid/FluidPressureNode.java +++ b/src/main/scala/resonantinduction/core/grid/fluid/FluidPressureNode.java @@ -16,6 +16,7 @@ import resonant.lib.grid.TickingGrid; import universalelectricity.api.vector.Vector3; import codechicken.multipart.TMultiPart; +@SuppressWarnings("deprecation") public class FluidPressureNode extends Node { public int maxFlowRate = 20; @@ -214,15 +215,7 @@ public class FluidPressureNode extends Node Date: Thu, 12 Jun 2014 02:20:01 -0400 Subject: [PATCH 22/62] Moved MechanicalNodeFrame to a different package --- .../grid}/MechanicalNodeFrame.java | 6 ++-- .../energy/grid/PartMechanical.java | 1 - .../energy/grid/TileMechanical.java | 1 - .../mechanical/gear/UpdatedLabel.java | 30 ------------------- 4 files changed, 2 insertions(+), 36 deletions(-) rename mechanical/src/main/scala/resonantinduction/mechanical/{gear => energy/grid}/MechanicalNodeFrame.java (96%) delete mode 100644 mechanical/src/main/scala/resonantinduction/mechanical/gear/UpdatedLabel.java diff --git a/mechanical/src/main/scala/resonantinduction/mechanical/gear/MechanicalNodeFrame.java b/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/MechanicalNodeFrame.java similarity index 96% rename from mechanical/src/main/scala/resonantinduction/mechanical/gear/MechanicalNodeFrame.java rename to mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/MechanicalNodeFrame.java index 7ec921bd..2a034db9 100644 --- a/mechanical/src/main/scala/resonantinduction/mechanical/gear/MechanicalNodeFrame.java +++ b/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/MechanicalNodeFrame.java @@ -1,4 +1,4 @@ -package resonantinduction.mechanical.gear; +package resonantinduction.mechanical.energy.grid; import java.awt.BorderLayout; import java.awt.Color; @@ -15,9 +15,7 @@ import java.util.List; import java.util.Map.Entry; import net.minecraftforge.common.ForgeDirection; -import resonantinduction.mechanical.energy.grid.MechanicalNode; -import resonantinduction.mechanical.energy.grid.PartMechanical; -import resonantinduction.mechanical.energy.grid.TileMechanical; +import resonantinduction.core.debug.UpdatedLabel; /** Java GUI used to help debug gear information * diff --git a/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/PartMechanical.java b/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/PartMechanical.java index 920da296..548401ca 100644 --- a/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/PartMechanical.java +++ b/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/PartMechanical.java @@ -12,7 +12,6 @@ import net.minecraftforge.common.ForgeDirection; import resonant.api.grid.INode; import resonant.api.grid.INodeProvider; import resonant.core.ResonantEngine; -import resonantinduction.mechanical.gear.MechanicalNodeFrame; import codechicken.lib.data.MCDataInput; import codechicken.lib.data.MCDataOutput; import codechicken.multipart.ControlKeyModifer; diff --git a/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/TileMechanical.java b/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/TileMechanical.java index b513d519..0c90373c 100644 --- a/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/TileMechanical.java +++ b/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/TileMechanical.java @@ -19,7 +19,6 @@ import resonant.lib.network.IPacketReceiverWithID; import resonant.lib.network.PacketHandler; import resonantinduction.core.ResonantInduction; import resonantinduction.mechanical.Mechanical; -import resonantinduction.mechanical.gear.MechanicalNodeFrame; import universalelectricity.api.vector.Vector3; import codechicken.multipart.ControlKeyModifer; diff --git a/mechanical/src/main/scala/resonantinduction/mechanical/gear/UpdatedLabel.java b/mechanical/src/main/scala/resonantinduction/mechanical/gear/UpdatedLabel.java deleted file mode 100644 index 3622ba47..00000000 --- a/mechanical/src/main/scala/resonantinduction/mechanical/gear/UpdatedLabel.java +++ /dev/null @@ -1,30 +0,0 @@ -package resonantinduction.mechanical.gear; - -import java.awt.Label; - -/** Simple label with an update method - * - * @author Darkguardsman */ -@SuppressWarnings("serial") -public class UpdatedLabel extends Label -{ - String start_string = "I Am a Label"; - - public UpdatedLabel(String start) - { - super(start); - this.start_string = start; - } - - /** Called to update the content of the label */ - public void update() - { - this.setText(buildLabel()); - } - - /** Recreates then returns the label's string value */ - public String buildLabel() - { - return start_string; - } -} From 7468a38b8add3b415b7a311a2d95cce4f9169f43 Mon Sep 17 00:00:00 2001 From: Robert S Date: Thu, 12 Jun 2014 02:20:31 -0400 Subject: [PATCH 23/62] Created a prefab for Debug Frame GUI and added a few interfaces to go with it --- .../core/debug/FrameDebug.java | 92 +++++++++++++++++++ .../resonantinduction/core/debug/IDebug.java | 9 ++ .../resonantinduction/core/debug/IUpdate.java | 9 ++ .../core/debug/UpdatePanel.java | 20 ++++ .../core/debug/UpdatedLabel.java | 30 ++++++ 5 files changed, 160 insertions(+) create mode 100644 src/main/scala/resonantinduction/core/debug/FrameDebug.java create mode 100644 src/main/scala/resonantinduction/core/debug/IDebug.java create mode 100644 src/main/scala/resonantinduction/core/debug/IUpdate.java create mode 100644 src/main/scala/resonantinduction/core/debug/UpdatePanel.java create mode 100644 src/main/scala/resonantinduction/core/debug/UpdatedLabel.java diff --git a/src/main/scala/resonantinduction/core/debug/FrameDebug.java b/src/main/scala/resonantinduction/core/debug/FrameDebug.java new file mode 100644 index 00000000..1f5b2b3c --- /dev/null +++ b/src/main/scala/resonantinduction/core/debug/FrameDebug.java @@ -0,0 +1,92 @@ +package resonantinduction.core.debug; + +import java.awt.BorderLayout; +import java.awt.Component; +import java.awt.Frame; +import java.awt.Panel; + +import net.minecraft.tileentity.TileEntity; +import resonant.api.grid.INode; + +@SuppressWarnings("serial") +public class FrameDebug extends Frame +{ + /** Linked tile */ + TileEntity tile = null; + /** Linked node */ + INode node = null; + /** Are we debugging a node */ + boolean debugNode = false; + + public FrameDebug(TileEntity tile) + { + this(); + this.tile = tile; + } + + public FrameDebug(INode node) + { + this(); + this.node = node; + } + + protected FrameDebug() + { + buildGUI(); + } + + /** Called to build the base of the GUI */ + protected void buildGUI() + { + UpdatePanel topPanel = new UpdatePanel(); + UpdatePanel botPanel = new UpdatePanel(); + UpdatePanel leftPanel = new UpdatePanel(); + UpdatePanel rightPanel = new UpdatePanel(); + + buildTop(topPanel); + buildBottom(botPanel); + buildLeft(leftPanel); + buildRight(rightPanel); + + this.add(topPanel, BorderLayout.NORTH); + this.add(botPanel, BorderLayout.SOUTH); + this.add(rightPanel, BorderLayout.EAST); + this.add(leftPanel, BorderLayout.WEST); + } + + /** Top are of the Frame */ + public void buildTop(Panel panel) + { + + } + + /** Bottom are of the Frame */ + public void buildBottom(Panel panel) + { + + } + + /** Left are of the Frame */ + public void buildLeft(Panel panel) + { + + } + + /** Right are of the Frame */ + public void buildRight(Panel panel) + { + + } + + /** Called each tick by the host of this GUI */ + public void update() + { + for(Component component : getComponents()) + { + if(component instanceof IUpdate) + { + ((IUpdate)component).update(); + } + } + } +} diff --git a/src/main/scala/resonantinduction/core/debug/IDebug.java b/src/main/scala/resonantinduction/core/debug/IDebug.java new file mode 100644 index 00000000..839d85b0 --- /dev/null +++ b/src/main/scala/resonantinduction/core/debug/IDebug.java @@ -0,0 +1,9 @@ +package resonantinduction.core.debug; + +/** Used to pass info to the debug GUI + * + * @author Darkguardsman */ +public interface IDebug +{ + +} diff --git a/src/main/scala/resonantinduction/core/debug/IUpdate.java b/src/main/scala/resonantinduction/core/debug/IUpdate.java new file mode 100644 index 00000000..389f6246 --- /dev/null +++ b/src/main/scala/resonantinduction/core/debug/IUpdate.java @@ -0,0 +1,9 @@ +package resonantinduction.core.debug; + +/** Used by objects can update each tick + * + * @author Darkguardsman */ +public interface IUpdate +{ + public void update(); +} diff --git a/src/main/scala/resonantinduction/core/debug/UpdatePanel.java b/src/main/scala/resonantinduction/core/debug/UpdatePanel.java new file mode 100644 index 00000000..206d4eba --- /dev/null +++ b/src/main/scala/resonantinduction/core/debug/UpdatePanel.java @@ -0,0 +1,20 @@ +package resonantinduction.core.debug; + +import java.awt.Component; +import java.awt.Panel; + +@SuppressWarnings("serial") +public class UpdatePanel extends Panel implements IUpdate +{ + @Override + public void update() + { + for(Component component : getComponents()) + { + if(component instanceof IUpdate) + { + ((IUpdate)component).update(); + } + } + } +} diff --git a/src/main/scala/resonantinduction/core/debug/UpdatedLabel.java b/src/main/scala/resonantinduction/core/debug/UpdatedLabel.java new file mode 100644 index 00000000..788bbd2a --- /dev/null +++ b/src/main/scala/resonantinduction/core/debug/UpdatedLabel.java @@ -0,0 +1,30 @@ +package resonantinduction.core.debug; + +import java.awt.Label; + +/** Simple label with an update method + * + * @author Darkguardsman */ +@SuppressWarnings("serial") +public class UpdatedLabel extends Label implements IUpdate +{ + String start_string = "I Am a Label"; + + public UpdatedLabel(String start) + { + super(start); + this.start_string = start; + } + + @Override + public void update() + { + this.setText(buildLabel()); + } + + /** Recreates then returns the label's string value */ + public String buildLabel() + { + return start_string; + } +} From 2a884fabc89383b36aff1bba15ead1d0e09de19d Mon Sep 17 00:00:00 2001 From: Robert S Date: Thu, 12 Jun 2014 04:04:45 -0400 Subject: [PATCH 24/62] Updated MechanicalNodeFrame to extends FrameNodeDebug --- .../energy/grid/MechanicalNodeFrame.java | 229 ++++++------------ .../core/debug/FrameDebug.java | 53 +++- .../core/debug/FrameNodeDebug.java | 51 ++++ .../core/debug/UpdatePanel.java | 8 +- 4 files changed, 177 insertions(+), 164 deletions(-) create mode 100644 src/main/scala/resonantinduction/core/debug/FrameNodeDebug.java diff --git a/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/MechanicalNodeFrame.java b/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/MechanicalNodeFrame.java index 2a034db9..1998ff6f 100644 --- a/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/MechanicalNodeFrame.java +++ b/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/MechanicalNodeFrame.java @@ -1,126 +1,33 @@ package resonantinduction.mechanical.energy.grid; -import java.awt.BorderLayout; -import java.awt.Color; -import java.awt.Frame; import java.awt.GridLayout; import java.awt.Label; import java.awt.Panel; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.awt.event.WindowAdapter; -import java.awt.event.WindowEvent; -import java.util.ArrayList; -import java.util.List; import java.util.Map.Entry; import net.minecraftforge.common.ForgeDirection; +import resonant.api.grid.INode; +import resonant.api.grid.INodeProvider; +import resonantinduction.core.debug.FrameNodeDebug; import resonantinduction.core.debug.UpdatedLabel; /** Java GUI used to help debug gear information * * @author Darkguardsman */ @SuppressWarnings("serial") -public class MechanicalNodeFrame extends Frame implements ActionListener +public class MechanicalNodeFrame extends FrameNodeDebug { - List dataLabels = new ArrayList(); - Label[] connections = new Label[10]; + Label[] connections; - long tick = 0; - private PartMechanical partMechanical = null; - private TileMechanical tileMechanical = null; - - public MechanicalNodeFrame(TileMechanical tile) - { - this(); - this.tileMechanical = tile; - - } - - public MechanicalNodeFrame(PartMechanical part) + public MechanicalNodeFrame(INodeProvider node) { - this(); - this.partMechanical = part; - } - - protected MechanicalNodeFrame() - { - setLayout(new BorderLayout()); - setBackground(Color.LIGHT_GRAY); - this.createBottomBar(); - this.createTopBar(); - - //Middle bar - Panel middlePanel = new Panel(new GridLayout(3, 1, 0, 0)); - - UpdatedLabel velLabel = new UpdatedLabel("Vel: ") - { - @Override - public String buildLabel() - { - return super.buildLabel() + MechanicalNodeFrame.this.getNode().angularVelocity; - } - }; - dataLabels.add(velLabel); - middlePanel.add(velLabel); - - UpdatedLabel angleLabel = new UpdatedLabel("Angle: ") - { - @Override - public String buildLabel() - { - return super.buildLabel() + MechanicalNodeFrame.this.getNode().renderAngle; - } - }; - dataLabels.add(angleLabel); - middlePanel.add(angleLabel); - - UpdatedLabel torqueLabel = new UpdatedLabel("Torque: ") - { - @Override - public String buildLabel() - { - return super.buildLabel() + MechanicalNodeFrame.this.getNode().torque; - } - }; - dataLabels.add(torqueLabel); - middlePanel.add(torqueLabel); - - add(middlePanel, BorderLayout.WEST); - - Panel connectionPanel = new Panel(new GridLayout(this.connections.length / 2, 2, 0, 0)); - for (int i = 0; i < connections.length; i++) - { - this.connections[i] = new Label("Connection" + i + ": ----"); - connectionPanel.add(connections[i]); - } - add(connectionPanel, BorderLayout.EAST); - - //exit icon handler - addWindowListener(new WindowAdapter() - { - public void windowClosing(WindowEvent e) - { - Frame f = (Frame) e.getSource(); - f.setVisible(false); - f.dispose(); - } - }); + super(node, MechanicalNode.class); } - public MechanicalNode getNode() + @Override + public void buildTop(Panel panel) { - if(partMechanical != null) - { - return partMechanical.node; - } - return tileMechanical.mechanicalNode; - } - - public void createTopBar() - { - Panel panel = new Panel(new GridLayout(1, 2, 0, 0)); - + panel.setLayout(new GridLayout(1, 2, 0, 0)); UpdatedLabel tickLabel = new UpdatedLabel("Node: ") { @Override @@ -129,7 +36,6 @@ public class MechanicalNodeFrame extends Frame implements ActionListener return super.buildLabel() + MechanicalNodeFrame.this.getNode(); } }; - dataLabels.add(tickLabel); panel.add(tickLabel); UpdatedLabel xLabel = new UpdatedLabel("Parent: ") @@ -140,16 +46,13 @@ public class MechanicalNodeFrame extends Frame implements ActionListener return super.buildLabel() + (MechanicalNodeFrame.this.getNode() != null ? MechanicalNodeFrame.this.getNode().getParent() : "null"); } }; - dataLabels.add(xLabel); panel.add(xLabel); - - add(panel, BorderLayout.NORTH); } - public void createBottomBar() + @Override + public void buildBottom(Panel panel) { - Panel bottomPanel = new Panel(new GridLayout(1, 4, 0, 0)); - + panel.setLayout(new GridLayout(1, 4, 0, 0)); UpdatedLabel tickLabel = new UpdatedLabel("Tick: ") { @Override @@ -158,59 +61,96 @@ public class MechanicalNodeFrame extends Frame implements ActionListener return super.buildLabel() + tick; } }; - dataLabels.add(tickLabel); - bottomPanel.add(tickLabel); + panel.add(tickLabel); UpdatedLabel xLabel = new UpdatedLabel("X: ") { @Override public String buildLabel() { - return super.buildLabel() + MechanicalNodeFrame.this.getNode().x(); + return super.buildLabel() + (MechanicalNodeFrame.this.getNode() != null ? MechanicalNodeFrame.this.getNode().x() : 0); } }; - dataLabels.add(xLabel); - bottomPanel.add(xLabel); + panel.add(xLabel); UpdatedLabel yLabel = new UpdatedLabel("Y: ") { @Override public String buildLabel() { - return super.buildLabel() + MechanicalNodeFrame.this.getNode().y(); + return super.buildLabel() + (MechanicalNodeFrame.this.getNode() != null ? MechanicalNodeFrame.this.getNode().y() : 0); } }; - bottomPanel.add(yLabel); - dataLabels.add(yLabel); + panel.add(yLabel); UpdatedLabel zLabel = new UpdatedLabel("Z: ") { @Override public String buildLabel() { - return super.buildLabel() + MechanicalNodeFrame.this.getNode().z(); + return super.buildLabel() + (MechanicalNodeFrame.this.getNode() != null ? MechanicalNodeFrame.this.getNode().z() : 0); } }; - bottomPanel.add(zLabel); - dataLabels.add(zLabel); - - add(bottomPanel, BorderLayout.SOUTH); + panel.add(zLabel); } - /** Called each cpu cycle */ + @Override + public void buildRight(Panel panel) + { + connections = new Label[10]; + panel.setLayout(new GridLayout(5, 2, 0, 0)); + for (int i = 0; i < connections.length; i++) + { + this.connections[i] = new Label("Connection" + i + ": ----"); + panel.add(connections[i]); + } + } + + @Override + public void buildLeft(Panel panel) + { + panel.setLayout(new GridLayout(3, 1, 0, 0)); + UpdatedLabel velLabel = new UpdatedLabel("Vel: ") + { + @Override + public String buildLabel() + { + return super.buildLabel() + MechanicalNodeFrame.this.getNode().angularVelocity; + } + }; + panel.add(velLabel); + + UpdatedLabel angleLabel = new UpdatedLabel("Angle: ") + { + @Override + public String buildLabel() + { + return super.buildLabel() + MechanicalNodeFrame.this.getNode().renderAngle; + } + }; + panel.add(angleLabel); + + UpdatedLabel torqueLabel = new UpdatedLabel("Torque: ") + { + @Override + public String buildLabel() + { + return super.buildLabel() + MechanicalNodeFrame.this.getNode().torque; + } + }; + panel.add(torqueLabel); + } + + @Override public void update() { - tick++; - if (this.getNode() != null) + super.update(); + if (this.getNode() != null && connections != null) { - for (UpdatedLabel label : dataLabels) - { - label.update(); - } int c = 0; for (Entry entry : getNode().getConnections().entrySet()) { - if (entry.getKey() != null) + if (entry.getKey() != null && this.connections[c] != null) { this.connections[c].setText("Connection" + c + ": " + entry.getKey()); c++; @@ -218,29 +158,20 @@ public class MechanicalNodeFrame extends Frame implements ActionListener } for (int i = c; i < connections.length; i++) { - this.connections[i].setText("Connection" + i + ": NONE"); + if (this.connections[c] != null) + this.connections[i].setText("Connection" + i + ": NONE"); } } } - /** Shows the frame */ - public void showDebugFrame() - { - setTitle("Resonant Engine Debug Window"); - setBounds(200, 200, 450, 600); - setVisible(true); - } - - /** Hides the frame and tells it to die off */ - public void closeDebugFrame() - { - dispose(); - } - @Override - public void actionPerformed(ActionEvent arg0) + public MechanicalNode getNode() { - // TODO Auto-generated method stub - + INode node = super.getNode(); + if (node instanceof MechanicalNode) + { + return (MechanicalNode) node; + } + return null; } } \ No newline at end of file diff --git a/src/main/scala/resonantinduction/core/debug/FrameDebug.java b/src/main/scala/resonantinduction/core/debug/FrameDebug.java index 1f5b2b3c..083e4774 100644 --- a/src/main/scala/resonantinduction/core/debug/FrameDebug.java +++ b/src/main/scala/resonantinduction/core/debug/FrameDebug.java @@ -4,19 +4,20 @@ import java.awt.BorderLayout; import java.awt.Component; import java.awt.Frame; import java.awt.Panel; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; import net.minecraft.tileentity.TileEntity; -import resonant.api.grid.INode; +/** @author Darkguardsman */ @SuppressWarnings("serial") public class FrameDebug extends Frame { /** Linked tile */ TileEntity tile = null; - /** Linked node */ - INode node = null; - /** Are we debugging a node */ + boolean debugNode = false; + protected long tick = 0; public FrameDebug(TileEntity tile) { @@ -24,11 +25,6 @@ public class FrameDebug extends Frame this.tile = tile; } - public FrameDebug(INode node) - { - this(); - this.node = node; - } protected FrameDebug() { @@ -43,6 +39,8 @@ public class FrameDebug extends Frame UpdatePanel leftPanel = new UpdatePanel(); UpdatePanel rightPanel = new UpdatePanel(); + setLayout(new BorderLayout()); + buildTop(topPanel); buildBottom(botPanel); buildLeft(leftPanel); @@ -52,6 +50,17 @@ public class FrameDebug extends Frame this.add(botPanel, BorderLayout.SOUTH); this.add(rightPanel, BorderLayout.EAST); this.add(leftPanel, BorderLayout.WEST); + + //exit icon handler + addWindowListener(new WindowAdapter() + { + public void windowClosing(WindowEvent e) + { + Frame f = (Frame) e.getSource(); + f.setVisible(false); + f.dispose(); + } + }); } /** Top are of the Frame */ @@ -81,12 +90,32 @@ public class FrameDebug extends Frame /** Called each tick by the host of this GUI */ public void update() { - for(Component component : getComponents()) + tick++; + if (tick >= Long.MAX_VALUE) { - if(component instanceof IUpdate) + tick = 0; + } + + for (Component component : getComponents()) + { + if (component instanceof IUpdate) { - ((IUpdate)component).update(); + ((IUpdate) component).update(); } } + } + + /** Shows the frame */ + public void showDebugFrame() + { + setTitle("Resonant Engine Debug Window"); + setBounds(200, 200, 450, 600); + setVisible(true); + } + + /** Hides the frame and tells it to die off */ + public void closeDebugFrame() + { + dispose(); } } diff --git a/src/main/scala/resonantinduction/core/debug/FrameNodeDebug.java b/src/main/scala/resonantinduction/core/debug/FrameNodeDebug.java new file mode 100644 index 00000000..b9c65c65 --- /dev/null +++ b/src/main/scala/resonantinduction/core/debug/FrameNodeDebug.java @@ -0,0 +1,51 @@ +package resonantinduction.core.debug; + +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.common.ForgeDirection; +import resonant.api.grid.INode; +import resonant.api.grid.INodeProvider; + +/** @author Darkguardsman */ +@SuppressWarnings("serial") +public class FrameNodeDebug extends FrameDebug +{ + protected INodeProvider nodeProvider = null; + /** Linked node */ + protected INode node = null; + protected Class nodeClazz = null; + + /** Are we debugging a node */ + + public FrameNodeDebug(TileEntity tile, Class nodeClazz) + { + super(tile); + this.nodeClazz = nodeClazz; + } + + public FrameNodeDebug(INodeProvider node, Class nodeClazz) + { + super(); + this.nodeProvider = node; + this.nodeClazz = nodeClazz; + } + + public FrameNodeDebug(INode node) + { + super(); + this.node = node; + } + + /** Gets the node used for debug */ + public INode getNode() + { + if (tile instanceof INodeProvider && nodeClazz != null) + { + return ((INodeProvider) tile).getNode(nodeClazz, ForgeDirection.UNKNOWN); + } + else if (nodeProvider != null && nodeClazz != null) + { + return nodeProvider.getNode(nodeClazz, ForgeDirection.UNKNOWN); + } + return node; + } +} diff --git a/src/main/scala/resonantinduction/core/debug/UpdatePanel.java b/src/main/scala/resonantinduction/core/debug/UpdatePanel.java index 206d4eba..be8040c2 100644 --- a/src/main/scala/resonantinduction/core/debug/UpdatePanel.java +++ b/src/main/scala/resonantinduction/core/debug/UpdatePanel.java @@ -3,17 +3,19 @@ package resonantinduction.core.debug; import java.awt.Component; import java.awt.Panel; + +/** @author Darkguardsman */ @SuppressWarnings("serial") public class UpdatePanel extends Panel implements IUpdate { @Override public void update() { - for(Component component : getComponents()) + for (Component component : getComponents()) { - if(component instanceof IUpdate) + if (component instanceof IUpdate) { - ((IUpdate)component).update(); + ((IUpdate) component).update(); } } } From 0cd07437f10e1567658aa8f432c6597c76ed22ba Mon Sep 17 00:00:00 2001 From: Maxwolf Goodliffe Date: Thu, 12 Jun 2014 02:45:54 -0700 Subject: [PATCH 25/62] Worked on water turbine rendering, need to do more work to check client sync. --- .../energy/grid/TileMechanical.java | 3 +++ .../energy/turbine/RenderWaterTurbine.java | 23 ++++++++++++++++++- .../energy/turbine/TileWaterTurbine.java | 18 +++++++++++++-- 3 files changed, 41 insertions(+), 3 deletions(-) diff --git a/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/TileMechanical.java b/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/TileMechanical.java index 0c90373c..5e8c6052 100644 --- a/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/TileMechanical.java +++ b/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/TileMechanical.java @@ -69,6 +69,7 @@ public abstract class TileMechanical extends TileBase implements INodeProvider, { super.updateEntity(); mechanicalNode.update(); + if(frame != null) { frame.update(); @@ -78,10 +79,12 @@ public abstract class TileMechanical extends TileBase implements INodeProvider, frame = null; } } + if (!this.getWorldObj().isRemote) { if (ticks % 3 == 0 && (mechanicalNode.markTorqueUpdate || mechanicalNode.markRotationUpdate)) { + ResonantInduction.LOGGER.info("[mechanicalNode] Sending Update"); sendRotationPacket(); mechanicalNode.markRotationUpdate = false; mechanicalNode.markTorqueUpdate = false; diff --git a/mechanical/src/main/scala/resonantinduction/mechanical/energy/turbine/RenderWaterTurbine.java b/mechanical/src/main/scala/resonantinduction/mechanical/energy/turbine/RenderWaterTurbine.java index e236c222..5cab561e 100644 --- a/mechanical/src/main/scala/resonantinduction/mechanical/energy/turbine/RenderWaterTurbine.java +++ b/mechanical/src/main/scala/resonantinduction/mechanical/energy/turbine/RenderWaterTurbine.java @@ -11,6 +11,7 @@ import org.lwjgl.opengl.GL11; import resonant.api.items.ISimpleItemRenderer; import resonant.lib.render.RenderUtility; import resonantinduction.core.Reference; +import resonantinduction.core.ResonantInduction; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -30,13 +31,33 @@ public class RenderWaterTurbine extends TileEntitySpecialRenderer implements ISi GL11.glTranslatef((float) x + 0.5f, (float) y + 0.5f, (float) z + 0.5f); GL11.glPushMatrix(); + // Determine if the turbine is facing horizontally or vertical. RenderUtility.rotateBlockBasedOnDirectionUp(tile.getDirection()); - GL11.glRotatef((float) Math.toDegrees(tile.mechanicalNode.renderAngle), 0, 1, 0); + + // Get the rotation directly from the mechanical node running client side. + double mechanicalNodeRenderAngle = tile.mechanicalNode.renderAngle; + + // We need to convert this value into something the model renderer can understand. + // Note: Check for NaN and if so then just defaults to zero. + float renderAngleInDegrees = 0; + if (!Double.isNaN(mechanicalNodeRenderAngle)) + { + renderAngleInDegrees = (float) Math.toDegrees(mechanicalNodeRenderAngle); + } + + // Call to actually rotate the gear model to the specified degree. + GL11.glRotatef(renderAngleInDegrees, 0, 1, 0); + ResonantInduction.LOGGER.info("[RenderWaterTurbine] Render Angle: " + renderAngleInDegrees); + // Determine what type of water turbine model we need to use based on orientation. if (tile.getDirection().offsetY != 0) + { renderWaterTurbine(tile.tier, tile.multiBlockRadius, tile.getMultiBlock().isConstructed()); + } else + { renderWaterWheel(tile.tier, tile.multiBlockRadius, tile.getMultiBlock().isConstructed()); + } GL11.glPopMatrix(); GL11.glPopMatrix(); diff --git a/mechanical/src/main/scala/resonantinduction/mechanical/energy/turbine/TileWaterTurbine.java b/mechanical/src/main/scala/resonantinduction/mechanical/energy/turbine/TileWaterTurbine.java index 91085046..b933062c 100644 --- a/mechanical/src/main/scala/resonantinduction/mechanical/energy/turbine/TileWaterTurbine.java +++ b/mechanical/src/main/scala/resonantinduction/mechanical/energy/turbine/TileWaterTurbine.java @@ -9,14 +9,15 @@ import net.minecraft.util.Vec3; import net.minecraft.world.IBlockAccess; import net.minecraftforge.common.ForgeDirection; import resonant.api.grid.INodeProvider; +import resonantinduction.core.ResonantInduction; import resonantinduction.core.Settings; import resonantinduction.mechanical.energy.grid.MechanicalNode; import universalelectricity.api.vector.Vector3; import cpw.mods.fml.relauncher.ReflectionHelper; /** - * The vertical wind turbine collects airflow. - * The horizontal wind turbine collects steam from steam power plants. + * The vertical water turbine collects flowing water flowing on X axis. + * The horizontal water turbine collects flowing water on Z axis. * * @author Calclavia * @@ -56,9 +57,13 @@ public class TileWaterTurbine extends TileTurbine public void updateEntity() { if (getMultiBlock().isConstructed()) + { mechanicalNode.torque = (long) (defaultTorque / (1d / multiBlockRadius)); + } else + { mechanicalNode.torque = defaultTorque / 12; + } /** * If this is a horizontal turbine. @@ -108,12 +113,21 @@ public class TileWaterTurbine extends TileTurbine Vector3 vector = new Vector3((Vec3) m.invoke(Block.waterMoving, worldObj, check.intX(), check.intY(), check.intZ())); if ((currentDir.offsetZ > 0 && vector.x < 0) || (currentDir.offsetZ < 0 && vector.x > 0) || (currentDir.offsetX > 0 && vector.z > 0) || (currentDir.offsetX < 0 && vector.z < 0)) + { mechanicalNode.torque = -mechanicalNode.torque; + } if (getDirection().offsetX != 0) + { getMultiBlock().get().power += Math.abs(getWaterPower() * vector.z * (7 - metadata) / 7f); + powerTicks = 20; + } + if (getDirection().offsetZ != 0) + { getMultiBlock().get().power += Math.abs(getWaterPower() * vector.x * (7 - metadata) / 7f); + powerTicks = 20; + } } catch (Exception e) { From 4268ace71098d9113841b312470f88c1abec0236 Mon Sep 17 00:00:00 2001 From: Maxwolf Goodliffe Date: Thu, 12 Jun 2014 02:46:25 -0700 Subject: [PATCH 26/62] Refactored mandarin DIAN into Joules. --- .../resonantinduction/atomic/fusion/TilePlasmaHeater.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/atomic/src/main/scala/resonantinduction/atomic/fusion/TilePlasmaHeater.java b/atomic/src/main/scala/resonantinduction/atomic/fusion/TilePlasmaHeater.java index 37c16103..22ea8a40 100644 --- a/atomic/src/main/scala/resonantinduction/atomic/fusion/TilePlasmaHeater.java +++ b/atomic/src/main/scala/resonantinduction/atomic/fusion/TilePlasmaHeater.java @@ -29,7 +29,7 @@ import com.google.common.io.ByteArrayDataInput; public class TilePlasmaHeater extends TileElectrical implements IPacketReceiver, ITagRender, IFluidHandler { - public static long DIAN = 10000000000L; + public static long joules = 10000000000L; @Config public static int plasmaHeatAmount = 100; @@ -42,7 +42,7 @@ public class TilePlasmaHeater extends TileElectrical implements IPacketReceiver, public TilePlasmaHeater() { - energy = new EnergyStorageHandler(DIAN, DIAN / 20); + energy = new EnergyStorageHandler(joules, joules / 20); } @Override From b3feb7c104e11dc926f43198f1b1a603b0204d3b Mon Sep 17 00:00:00 2001 From: Maxwolf Goodliffe Date: Thu, 12 Jun 2014 02:49:03 -0700 Subject: [PATCH 27/62] Remove debugging lines. --- .../mechanical/energy/grid/TileMechanical.java | 2 +- .../mechanical/energy/turbine/RenderWaterTurbine.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/TileMechanical.java b/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/TileMechanical.java index 5e8c6052..8fba7dda 100644 --- a/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/TileMechanical.java +++ b/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/TileMechanical.java @@ -84,7 +84,7 @@ public abstract class TileMechanical extends TileBase implements INodeProvider, { if (ticks % 3 == 0 && (mechanicalNode.markTorqueUpdate || mechanicalNode.markRotationUpdate)) { - ResonantInduction.LOGGER.info("[mechanicalNode] Sending Update"); + //ResonantInduction.LOGGER.info("[mechanicalNode] Sending Update"); sendRotationPacket(); mechanicalNode.markRotationUpdate = false; mechanicalNode.markTorqueUpdate = false; diff --git a/mechanical/src/main/scala/resonantinduction/mechanical/energy/turbine/RenderWaterTurbine.java b/mechanical/src/main/scala/resonantinduction/mechanical/energy/turbine/RenderWaterTurbine.java index 5cab561e..803273dd 100644 --- a/mechanical/src/main/scala/resonantinduction/mechanical/energy/turbine/RenderWaterTurbine.java +++ b/mechanical/src/main/scala/resonantinduction/mechanical/energy/turbine/RenderWaterTurbine.java @@ -47,7 +47,7 @@ public class RenderWaterTurbine extends TileEntitySpecialRenderer implements ISi // Call to actually rotate the gear model to the specified degree. GL11.glRotatef(renderAngleInDegrees, 0, 1, 0); - ResonantInduction.LOGGER.info("[RenderWaterTurbine] Render Angle: " + renderAngleInDegrees); + //ResonantInduction.LOGGER.info("[RenderWaterTurbine] Render Angle: " + renderAngleInDegrees); // Determine what type of water turbine model we need to use based on orientation. if (tile.getDirection().offsetY != 0) From 6af3bb2d50de72deee4430d27bcfa09ff4d14efe Mon Sep 17 00:00:00 2001 From: Robert S Date: Thu, 12 Jun 2014 09:27:24 -0400 Subject: [PATCH 28/62] Toyed with debug frame adding location data and setup debug GUI content --- .../core/debug/FrameDebug.java | 131 ++++++++++++++++-- .../core/debug/FrameNodeDebug.java | 58 ++++++++ 2 files changed, 181 insertions(+), 8 deletions(-) diff --git a/src/main/scala/resonantinduction/core/debug/FrameDebug.java b/src/main/scala/resonantinduction/core/debug/FrameDebug.java index 083e4774..1b5613e5 100644 --- a/src/main/scala/resonantinduction/core/debug/FrameDebug.java +++ b/src/main/scala/resonantinduction/core/debug/FrameDebug.java @@ -3,19 +3,24 @@ package resonantinduction.core.debug; import java.awt.BorderLayout; import java.awt.Component; import java.awt.Frame; +import java.awt.GridLayout; +import java.awt.Label; import java.awt.Panel; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; +import resonantinduction.mechanical.energy.grid.MechanicalNodeFrame; +import universalelectricity.api.vector.IVectorWorld; import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; /** @author Darkguardsman */ @SuppressWarnings("serial") -public class FrameDebug extends Frame +public class FrameDebug extends Frame implements IVectorWorld { /** Linked tile */ TileEntity tile = null; - + boolean debugNode = false; protected long tick = 0; @@ -25,7 +30,6 @@ public class FrameDebug extends Frame this.tile = tile; } - protected FrameDebug() { buildGUI(); @@ -66,24 +70,111 @@ public class FrameDebug extends Frame /** Top are of the Frame */ public void buildTop(Panel panel) { - + panel.setLayout(new GridLayout(1, 2, 0, 0)); + UpdatedLabel tickLabel = new UpdatedLabel("Tile: ") + { + @Override + public String buildLabel() + { + return super.buildLabel() + tile; + } + }; + panel.add(tickLabel); } /** Bottom are of the Frame */ public void buildBottom(Panel panel) { + panel.setLayout(new GridLayout(1, 4, 0, 0)); + UpdatedLabel tickLabel = new UpdatedLabel("Tick: ") + { + @Override + public String buildLabel() + { + return super.buildLabel() + tick; + } + }; + panel.add(tickLabel); + UpdatedLabel xLabel = new UpdatedLabel("X: ") + { + @Override + public String buildLabel() + { + return super.buildLabel() + x(); + } + }; + panel.add(xLabel); + + UpdatedLabel yLabel = new UpdatedLabel("Y: ") + { + @Override + public String buildLabel() + { + return super.buildLabel() + y(); + } + }; + panel.add(yLabel); + + UpdatedLabel zLabel = new UpdatedLabel("Z: ") + { + @Override + public String buildLabel() + { + return super.buildLabel() + z(); + } + }; + panel.add(zLabel); } /** Left are of the Frame */ - public void buildLeft(Panel panel) + public void buildRight(Panel panel) { - + panel.setLayout(new GridLayout(1, 2, 0, 0)); + UpdatedLabel tickLabel = new UpdatedLabel("Valid: ") + { + @Override + public String buildLabel() + { + return super.buildLabel() + (tile != null ? tile.isInvalid() : "null"); + } + }; + panel.add(tickLabel); } /** Right are of the Frame */ - public void buildRight(Panel panel) + public void buildLeft(Panel panel) { + panel.setLayout(new GridLayout(4, 1, 0, 0)); + UpdatedLabel block_label = new UpdatedLabel("BLOCK: ") + { + @Override + public String buildLabel() + { + return super.buildLabel() + (tile != null ? tile.getBlockType() : "null"); + } + }; + panel.add(block_label); + + UpdatedLabel meta_label = new UpdatedLabel("META: ") + { + @Override + public String buildLabel() + { + return super.buildLabel() + (tile != null && tile.getBlockType() != null ? tile.getBlockType().blockID : "-"); + } + }; + panel.add(meta_label); + + UpdatedLabel id_label = new UpdatedLabel("ID: ") + { + @Override + public String buildLabel() + { + return super.buildLabel() + (tile != null && tile.getBlockType() != null ? tile.getBlockType().blockID : "-"); + } + }; + panel.add(id_label); } @@ -103,7 +194,7 @@ public class FrameDebug extends Frame ((IUpdate) component).update(); } } - } + } /** Shows the frame */ public void showDebugFrame() @@ -118,4 +209,28 @@ public class FrameDebug extends Frame { dispose(); } + + @Override + public double z() + { + return tile != null ? tile.zCoord : 0; + } + + @Override + public double x() + { + return tile != null ? tile.xCoord : 0; + } + + @Override + public double y() + { + return tile != null ? tile.yCoord : 0; + } + + @Override + public World world() + { + return tile != null ? tile.getWorldObj() : null; + } } diff --git a/src/main/scala/resonantinduction/core/debug/FrameNodeDebug.java b/src/main/scala/resonantinduction/core/debug/FrameNodeDebug.java index b9c65c65..5c2880c4 100644 --- a/src/main/scala/resonantinduction/core/debug/FrameNodeDebug.java +++ b/src/main/scala/resonantinduction/core/debug/FrameNodeDebug.java @@ -1,6 +1,8 @@ package resonantinduction.core.debug; +import codechicken.multipart.TMultiPart; import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; import net.minecraftforge.common.ForgeDirection; import resonant.api.grid.INode; import resonant.api.grid.INodeProvider; @@ -48,4 +50,60 @@ public class FrameNodeDebug extends FrameDebug } return node; } + + @Override + public double z() + { + if (nodeProvider instanceof TileEntity) + { + return ((TileEntity) nodeProvider).zCoord; + } + else if (nodeProvider instanceof TMultiPart) + { + return ((TMultiPart) nodeProvider).z(); + } + return super.z(); + } + + @Override + public double x() + { + if (nodeProvider instanceof TileEntity) + { + return ((TileEntity) nodeProvider).xCoord; + } + else if (nodeProvider instanceof TMultiPart) + { + return ((TMultiPart) nodeProvider).x(); + } + return super.x(); + } + + @Override + public double y() + { + if (nodeProvider instanceof TileEntity) + { + return ((TileEntity) nodeProvider).yCoord; + } + else if (nodeProvider instanceof TMultiPart) + { + return ((TMultiPart) nodeProvider).y(); + } + return super.y(); + } + + @Override + public World world() + { + if (nodeProvider instanceof TileEntity) + { + return ((TileEntity) nodeProvider).getWorldObj(); + } + else if (nodeProvider instanceof TMultiPart) + { + return ((TMultiPart) nodeProvider).world(); + } + return super.world(); + } } From aad9b1938bc9ef84a68dcb0b979e28c21334ade9 Mon Sep 17 00:00:00 2001 From: Robert S Date: Thu, 12 Jun 2014 10:45:07 -0400 Subject: [PATCH 29/62] Changed Connection grid out for list in debug gui --- .../energy/grid/MechanicalNodeFrame.java | 111 ++++++------------ 1 file changed, 36 insertions(+), 75 deletions(-) diff --git a/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/MechanicalNodeFrame.java b/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/MechanicalNodeFrame.java index 1998ff6f..6f38222b 100644 --- a/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/MechanicalNodeFrame.java +++ b/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/MechanicalNodeFrame.java @@ -5,6 +5,11 @@ import java.awt.Label; import java.awt.Panel; import java.util.Map.Entry; +import javax.swing.AbstractListModel; +import javax.swing.DefaultListModel; +import javax.swing.JList; +import javax.swing.JScrollPane; + import net.minecraftforge.common.ForgeDirection; import resonant.api.grid.INode; import resonant.api.grid.INodeProvider; @@ -17,7 +22,8 @@ import resonantinduction.core.debug.UpdatedLabel; @SuppressWarnings("serial") public class MechanicalNodeFrame extends FrameNodeDebug { - Label[] connections; + JList connectionList_component = null; + DefaultListModel connectionList_model = new DefaultListModel();; public MechanicalNodeFrame(INodeProvider node) { @@ -49,61 +55,39 @@ public class MechanicalNodeFrame extends FrameNodeDebug panel.add(xLabel); } - @Override - public void buildBottom(Panel panel) - { - panel.setLayout(new GridLayout(1, 4, 0, 0)); - UpdatedLabel tickLabel = new UpdatedLabel("Tick: ") - { - @Override - public String buildLabel() - { - return super.buildLabel() + tick; - } - }; - panel.add(tickLabel); - - UpdatedLabel xLabel = new UpdatedLabel("X: ") - { - @Override - public String buildLabel() - { - return super.buildLabel() + (MechanicalNodeFrame.this.getNode() != null ? MechanicalNodeFrame.this.getNode().x() : 0); - } - }; - panel.add(xLabel); - - UpdatedLabel yLabel = new UpdatedLabel("Y: ") - { - @Override - public String buildLabel() - { - return super.buildLabel() + (MechanicalNodeFrame.this.getNode() != null ? MechanicalNodeFrame.this.getNode().y() : 0); - } - }; - panel.add(yLabel); - - UpdatedLabel zLabel = new UpdatedLabel("Z: ") - { - @Override - public String buildLabel() - { - return super.buildLabel() + (MechanicalNodeFrame.this.getNode() != null ? MechanicalNodeFrame.this.getNode().z() : 0); - } - }; - panel.add(zLabel); - } - @Override public void buildRight(Panel panel) { - connections = new Label[10]; - panel.setLayout(new GridLayout(5, 2, 0, 0)); - for (int i = 0; i < connections.length; i++) + panel.setLayout(new GridLayout(2, 1, 0, 0)); + + Label label = new Label("Connections"); + panel.add(label); + + AbstractListModel model = new AbstractListModel() { - this.connections[i] = new Label("Connection" + i + ": ----"); - panel.add(connections[i]); - } + @Override + public int getSize() + { + if (getNode() != null) + { + return getNode().getConnections().size(); + } + return 0; + } + + @Override + public Object getElementAt(int index) + { + if (getNode() != null) + { + return "[" + getNode().getConnections().keySet().toArray()[index] + "@" + getNode().getConnections().values().toArray()[index] + "]"; + } + return null; + } + }; + connectionList_component = new JList(model); + + panel.add(connectionList_component); } @Override @@ -141,29 +125,6 @@ public class MechanicalNodeFrame extends FrameNodeDebug panel.add(torqueLabel); } - @Override - public void update() - { - super.update(); - if (this.getNode() != null && connections != null) - { - int c = 0; - for (Entry entry : getNode().getConnections().entrySet()) - { - if (entry.getKey() != null && this.connections[c] != null) - { - this.connections[c].setText("Connection" + c + ": " + entry.getKey()); - c++; - } - } - for (int i = c; i < connections.length; i++) - { - if (this.connections[c] != null) - this.connections[i].setText("Connection" + i + ": NONE"); - } - } - } - @Override public MechanicalNode getNode() { From e059043139c7f9f6e1e77b777a917dbf56925c13 Mon Sep 17 00:00:00 2001 From: Robert S Date: Fri, 13 Jun 2014 10:22:26 -0400 Subject: [PATCH 30/62] Super refactored packages in Atomic module so i can find things --- .../resonantinduction/atomic/Atomic.java | 66 +++++++++---------- .../resonantinduction/atomic/ClientProxy.java | 48 +++++++------- .../resonantinduction/atomic/CommonProxy.java | 24 +++---- .../atomic/base/ItemASBase.java | 15 ----- .../atomic/base/ItemElectricAS.java | 21 ------ .../reactor => blocks}/BlockToxicWaste.java | 2 +- .../{fission => blocks}/BlockUraniumOre.java | 2 +- .../{fusion => blocks}/TileElectromagnet.java | 2 +- .../{process/sensor => blocks}/TileSiren.java | 2 +- .../fulmination => items}/ItemAntimatter.java | 3 +- .../{fission => items}/ItemBreederFuel.java | 2 +- .../atomic/{base => items}/ItemCell.java | 2 +- .../accelerator => items}/ItemDarkMatter.java | 3 +- .../{fission => items}/ItemFissileFuel.java | 2 +- .../atomic/{process => items}/ItemHazmat.java | 2 +- .../{fission => items}/ItemRadioactive.java | 2 +- .../{fission => items}/ItemUranium.java | 2 +- .../accelerator/BlockAccelerator.java | 2 +- .../accelerator/ContainerAccelerator.java | 2 +- .../accelerator/EntityParticle.java | 2 +- .../accelerator/GuiAccelerator.java | 2 +- .../accelerator/RenderParticle.java | 2 +- .../accelerator/TileAccelerator.java | 5 +- .../boiler}/BlockNuclearBoiler.java | 2 +- .../boiler}/GuiChemicalExtractor.java | 6 +- .../boiler}/GuiNuclearBoiler.java | 4 +- .../boiler}/RenderNuclearBoiler.java | 2 +- .../boiler}/TileNuclearBoiler.java | 2 +- .../centrifuge}/BlockCentrifuge.java | 2 +- .../centrifuge}/ContainerCentrifuge.java | 2 +- .../centrifuge}/GuiCentrifuge.java | 3 +- .../centrifuge}/RenderCentrifuge.java | 2 +- .../centrifuge}/TileCentrifuge.java | 2 +- .../extractor}/BlockChemicalExtractor.java | 2 +- .../ContainerChemicalExtractor.java | 2 +- .../extractor}/RenderChemicalExtractor.java | 2 +- .../extractor}/TileChemicalExtractor.java | 2 +- .../extractor}/TileProcess.java | 2 +- .../turbine/BlockElectricTurbine.java | 2 +- .../turbine/RenderElectricTurbine.java | 2 +- .../turbine/TileElectricTurbine.java | 2 +- .../extractor}/turbine/TileFunnel.java | 2 +- .../fulmination/FulminationHandler.java | 2 +- .../fulmination/TileFulmination.java | 2 +- .../plasma}/BlockPlasmaHeater.java | 2 +- .../plasma}/ContainerNuclearBoiler.java | 4 +- .../plasma}/RenderPlasmaHeater.java | 2 +- .../plasma}/TilePlasma.java | 2 +- .../plasma}/TilePlasmaHeater.java | 2 +- .../quantum/ContainerQuantumAssembler.java | 2 +- .../quantum/GuiQuantumAssembler.java | 2 +- .../quantum/RenderQuantumAssembler.java | 2 +- .../quantum/TileQuantumAssembler.java | 2 +- .../reactor/BlockReactorDrain.java | 2 +- .../reactor/ContainerReactorCell.java | 6 +- .../reactor/GuiReactorCell.java | 2 +- .../reactor/RenderReactorCell.java | 2 +- .../reactor/TileControlRod.java | 2 +- .../reactor/TileReactorCell.java | 4 +- .../reactor/TileReactorDrain.java | 2 +- .../thermometer}/ItemBlockThermometer.java | 2 +- .../thermometer}/RenderThermometer.java | 2 +- .../thermometer}/TileThermometer.java | 2 +- 63 files changed, 137 insertions(+), 173 deletions(-) delete mode 100644 atomic/src/main/scala/resonantinduction/atomic/base/ItemASBase.java delete mode 100644 atomic/src/main/scala/resonantinduction/atomic/base/ItemElectricAS.java rename atomic/src/main/scala/resonantinduction/atomic/{fission/reactor => blocks}/BlockToxicWaste.java (97%) rename atomic/src/main/scala/resonantinduction/atomic/{fission => blocks}/BlockUraniumOre.java (97%) rename atomic/src/main/scala/resonantinduction/atomic/{fusion => blocks}/TileElectromagnet.java (98%) rename atomic/src/main/scala/resonantinduction/atomic/{process/sensor => blocks}/TileSiren.java (97%) rename atomic/src/main/scala/resonantinduction/atomic/{particle/fulmination => items}/ItemAntimatter.java (98%) rename atomic/src/main/scala/resonantinduction/atomic/{fission => items}/ItemBreederFuel.java (95%) rename atomic/src/main/scala/resonantinduction/atomic/{base => items}/ItemCell.java (97%) rename atomic/src/main/scala/resonantinduction/atomic/{particle/accelerator => items}/ItemDarkMatter.java (59%) rename atomic/src/main/scala/resonantinduction/atomic/{fission => items}/ItemFissileFuel.java (98%) rename atomic/src/main/scala/resonantinduction/atomic/{process => items}/ItemHazmat.java (97%) rename atomic/src/main/scala/resonantinduction/atomic/{fission => items}/ItemRadioactive.java (94%) rename atomic/src/main/scala/resonantinduction/atomic/{fission => items}/ItemUranium.java (97%) rename atomic/src/main/scala/resonantinduction/atomic/{particle => machine}/accelerator/BlockAccelerator.java (94%) rename atomic/src/main/scala/resonantinduction/atomic/{particle => machine}/accelerator/ContainerAccelerator.java (97%) rename atomic/src/main/scala/resonantinduction/atomic/{particle => machine}/accelerator/EntityParticle.java (99%) rename atomic/src/main/scala/resonantinduction/atomic/{particle => machine}/accelerator/GuiAccelerator.java (98%) rename atomic/src/main/scala/resonantinduction/atomic/{particle => machine}/accelerator/RenderParticle.java (98%) rename atomic/src/main/scala/resonantinduction/atomic/{particle => machine}/accelerator/TileAccelerator.java (98%) rename atomic/src/main/scala/resonantinduction/atomic/{process/fission => machine/boiler}/BlockNuclearBoiler.java (96%) rename atomic/src/main/scala/resonantinduction/atomic/{process/fission => machine/boiler}/GuiChemicalExtractor.java (95%) rename atomic/src/main/scala/resonantinduction/atomic/{process/fission => machine/boiler}/GuiNuclearBoiler.java (96%) rename atomic/src/main/scala/resonantinduction/atomic/{process/fission => machine/boiler}/RenderNuclearBoiler.java (97%) rename atomic/src/main/scala/resonantinduction/atomic/{process/fission => machine/boiler}/TileNuclearBoiler.java (99%) rename atomic/src/main/scala/resonantinduction/atomic/{process/fission => machine/centrifuge}/BlockCentrifuge.java (96%) rename atomic/src/main/scala/resonantinduction/atomic/{process/fission => machine/centrifuge}/ContainerCentrifuge.java (98%) rename atomic/src/main/scala/resonantinduction/atomic/{process/fission => machine/centrifuge}/GuiCentrifuge.java (95%) rename atomic/src/main/scala/resonantinduction/atomic/{process/fission => machine/centrifuge}/RenderCentrifuge.java (96%) rename atomic/src/main/scala/resonantinduction/atomic/{process/fission => machine/centrifuge}/TileCentrifuge.java (99%) rename atomic/src/main/scala/resonantinduction/atomic/{process => machine/extractor}/BlockChemicalExtractor.java (96%) rename atomic/src/main/scala/resonantinduction/atomic/{process => machine/extractor}/ContainerChemicalExtractor.java (96%) rename atomic/src/main/scala/resonantinduction/atomic/{process => machine/extractor}/RenderChemicalExtractor.java (97%) rename atomic/src/main/scala/resonantinduction/atomic/{process => machine/extractor}/TileChemicalExtractor.java (99%) rename atomic/src/main/scala/resonantinduction/atomic/{process => machine/extractor}/TileProcess.java (98%) rename atomic/src/main/scala/resonantinduction/atomic/{process => machine/extractor}/turbine/BlockElectricTurbine.java (93%) rename atomic/src/main/scala/resonantinduction/atomic/{process => machine/extractor}/turbine/RenderElectricTurbine.java (98%) rename atomic/src/main/scala/resonantinduction/atomic/{process => machine/extractor}/turbine/TileElectricTurbine.java (96%) rename atomic/src/main/scala/resonantinduction/atomic/{process => machine/extractor}/turbine/TileFunnel.java (98%) rename atomic/src/main/scala/resonantinduction/atomic/{particle => machine}/fulmination/FulminationHandler.java (98%) rename atomic/src/main/scala/resonantinduction/atomic/{particle => machine}/fulmination/TileFulmination.java (97%) rename atomic/src/main/scala/resonantinduction/atomic/{fusion => machine/plasma}/BlockPlasmaHeater.java (96%) rename atomic/src/main/scala/resonantinduction/atomic/{fusion => machine/plasma}/ContainerNuclearBoiler.java (97%) rename atomic/src/main/scala/resonantinduction/atomic/{fusion => machine/plasma}/RenderPlasmaHeater.java (96%) rename atomic/src/main/scala/resonantinduction/atomic/{fusion => machine/plasma}/TilePlasma.java (98%) rename atomic/src/main/scala/resonantinduction/atomic/{fusion => machine/plasma}/TilePlasmaHeater.java (99%) rename atomic/src/main/scala/resonantinduction/atomic/{particle => machine}/quantum/ContainerQuantumAssembler.java (98%) rename atomic/src/main/scala/resonantinduction/atomic/{particle => machine}/quantum/GuiQuantumAssembler.java (97%) rename atomic/src/main/scala/resonantinduction/atomic/{particle => machine}/quantum/RenderQuantumAssembler.java (98%) rename atomic/src/main/scala/resonantinduction/atomic/{particle => machine}/quantum/TileQuantumAssembler.java (99%) rename atomic/src/main/scala/resonantinduction/atomic/{fission => machine}/reactor/BlockReactorDrain.java (97%) rename atomic/src/main/scala/resonantinduction/atomic/{fission => machine}/reactor/ContainerReactorCell.java (93%) rename atomic/src/main/scala/resonantinduction/atomic/{fission => machine}/reactor/GuiReactorCell.java (98%) rename atomic/src/main/scala/resonantinduction/atomic/{fission => machine}/reactor/RenderReactorCell.java (98%) rename atomic/src/main/scala/resonantinduction/atomic/{fission => machine}/reactor/TileControlRod.java (88%) rename atomic/src/main/scala/resonantinduction/atomic/{fission => machine}/reactor/TileReactorCell.java (99%) rename atomic/src/main/scala/resonantinduction/atomic/{fission => machine}/reactor/TileReactorDrain.java (99%) rename atomic/src/main/scala/resonantinduction/atomic/{process/sensor => machine/thermometer}/ItemBlockThermometer.java (98%) rename atomic/src/main/scala/resonantinduction/atomic/{process/sensor => machine/thermometer}/RenderThermometer.java (95%) rename atomic/src/main/scala/resonantinduction/atomic/{process/sensor => machine/thermometer}/TileThermometer.java (99%) diff --git a/atomic/src/main/scala/resonantinduction/atomic/Atomic.java b/atomic/src/main/scala/resonantinduction/atomic/Atomic.java index ee98ef69..8498e0e0 100644 --- a/atomic/src/main/scala/resonantinduction/atomic/Atomic.java +++ b/atomic/src/main/scala/resonantinduction/atomic/Atomic.java @@ -54,39 +54,39 @@ import resonant.lib.recipe.UniversalRecipe; import resonant.lib.render.RenderUtility; import resonant.lib.thermal.EventThermal.EventThermalUpdate; import resonant.lib.utility.nbt.NBTUtility; -import resonantinduction.atomic.base.ItemCell; -import resonantinduction.atomic.fission.BlockUraniumOre; -import resonantinduction.atomic.fission.ItemBreederFuel; -import resonantinduction.atomic.fission.ItemFissileFuel; -import resonantinduction.atomic.fission.ItemRadioactive; -import resonantinduction.atomic.fission.ItemUranium; -import resonantinduction.atomic.fission.reactor.BlockToxicWaste; -import resonantinduction.atomic.fission.reactor.TileControlRod; -import resonantinduction.atomic.fission.reactor.TileReactorCell; -import resonantinduction.atomic.fusion.BlockPlasmaHeater; -import resonantinduction.atomic.fusion.TileElectromagnet; -import resonantinduction.atomic.fusion.TilePlasma; -import resonantinduction.atomic.fusion.TilePlasmaHeater; -import resonantinduction.atomic.particle.accelerator.BlockAccelerator; -import resonantinduction.atomic.particle.accelerator.EntityParticle; -import resonantinduction.atomic.particle.accelerator.ItemDarkMatter; -import resonantinduction.atomic.particle.accelerator.TileAccelerator; -import resonantinduction.atomic.particle.fulmination.FulminationHandler; -import resonantinduction.atomic.particle.fulmination.ItemAntimatter; -import resonantinduction.atomic.particle.fulmination.TileFulmination; -import resonantinduction.atomic.particle.quantum.TileQuantumAssembler; -import resonantinduction.atomic.process.BlockChemicalExtractor; -import resonantinduction.atomic.process.ItemHazmat; -import resonantinduction.atomic.process.TileChemicalExtractor; -import resonantinduction.atomic.process.fission.BlockCentrifuge; -import resonantinduction.atomic.process.fission.BlockNuclearBoiler; -import resonantinduction.atomic.process.fission.TileCentrifuge; -import resonantinduction.atomic.process.fission.TileNuclearBoiler; -import resonantinduction.atomic.process.sensor.TileSiren; -import resonantinduction.atomic.process.sensor.TileThermometer; -import resonantinduction.atomic.process.turbine.BlockElectricTurbine; -import resonantinduction.atomic.process.turbine.TileElectricTurbine; -import resonantinduction.atomic.process.turbine.TileFunnel; +import resonantinduction.atomic.blocks.BlockToxicWaste; +import resonantinduction.atomic.blocks.BlockUraniumOre; +import resonantinduction.atomic.blocks.TileElectromagnet; +import resonantinduction.atomic.blocks.TileSiren; +import resonantinduction.atomic.items.ItemAntimatter; +import resonantinduction.atomic.items.ItemBreederFuel; +import resonantinduction.atomic.items.ItemCell; +import resonantinduction.atomic.items.ItemDarkMatter; +import resonantinduction.atomic.items.ItemFissileFuel; +import resonantinduction.atomic.items.ItemHazmat; +import resonantinduction.atomic.items.ItemRadioactive; +import resonantinduction.atomic.items.ItemUranium; +import resonantinduction.atomic.machine.accelerator.BlockAccelerator; +import resonantinduction.atomic.machine.accelerator.EntityParticle; +import resonantinduction.atomic.machine.accelerator.TileAccelerator; +import resonantinduction.atomic.machine.boiler.BlockNuclearBoiler; +import resonantinduction.atomic.machine.boiler.TileNuclearBoiler; +import resonantinduction.atomic.machine.centrifuge.BlockCentrifuge; +import resonantinduction.atomic.machine.centrifuge.TileCentrifuge; +import resonantinduction.atomic.machine.extractor.BlockChemicalExtractor; +import resonantinduction.atomic.machine.extractor.TileChemicalExtractor; +import resonantinduction.atomic.machine.extractor.turbine.BlockElectricTurbine; +import resonantinduction.atomic.machine.extractor.turbine.TileElectricTurbine; +import resonantinduction.atomic.machine.extractor.turbine.TileFunnel; +import resonantinduction.atomic.machine.fulmination.FulminationHandler; +import resonantinduction.atomic.machine.fulmination.TileFulmination; +import resonantinduction.atomic.machine.plasma.BlockPlasmaHeater; +import resonantinduction.atomic.machine.plasma.TilePlasma; +import resonantinduction.atomic.machine.plasma.TilePlasmaHeater; +import resonantinduction.atomic.machine.quantum.TileQuantumAssembler; +import resonantinduction.atomic.machine.reactor.TileControlRod; +import resonantinduction.atomic.machine.reactor.TileReactorCell; +import resonantinduction.atomic.machine.thermometer.TileThermometer; import resonantinduction.atomic.schematic.SchematicAccelerator; import resonantinduction.atomic.schematic.SchematicBreedingReactor; import resonantinduction.atomic.schematic.SchematicFissionReactor; diff --git a/atomic/src/main/scala/resonantinduction/atomic/ClientProxy.java b/atomic/src/main/scala/resonantinduction/atomic/ClientProxy.java index de290b7f..afec02b0 100644 --- a/atomic/src/main/scala/resonantinduction/atomic/ClientProxy.java +++ b/atomic/src/main/scala/resonantinduction/atomic/ClientProxy.java @@ -7,30 +7,30 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; import net.minecraftforge.common.MinecraftForge; import resonant.lib.render.block.BlockRenderingHandler; -import resonantinduction.atomic.fission.reactor.GuiReactorCell; -import resonantinduction.atomic.fission.reactor.RenderReactorCell; -import resonantinduction.atomic.fission.reactor.TileReactorCell; -import resonantinduction.atomic.fusion.RenderPlasmaHeater; -import resonantinduction.atomic.fusion.TilePlasmaHeater; -import resonantinduction.atomic.particle.accelerator.EntityParticle; -import resonantinduction.atomic.particle.accelerator.GuiAccelerator; -import resonantinduction.atomic.particle.accelerator.RenderParticle; -import resonantinduction.atomic.particle.accelerator.TileAccelerator; -import resonantinduction.atomic.particle.quantum.GuiQuantumAssembler; -import resonantinduction.atomic.particle.quantum.TileQuantumAssembler; -import resonantinduction.atomic.process.RenderChemicalExtractor; -import resonantinduction.atomic.process.TileChemicalExtractor; -import resonantinduction.atomic.process.fission.GuiCentrifuge; -import resonantinduction.atomic.process.fission.GuiChemicalExtractor; -import resonantinduction.atomic.process.fission.GuiNuclearBoiler; -import resonantinduction.atomic.process.fission.RenderCentrifuge; -import resonantinduction.atomic.process.fission.RenderNuclearBoiler; -import resonantinduction.atomic.process.fission.TileCentrifuge; -import resonantinduction.atomic.process.fission.TileNuclearBoiler; -import resonantinduction.atomic.process.sensor.RenderThermometer; -import resonantinduction.atomic.process.sensor.TileThermometer; -import resonantinduction.atomic.process.turbine.RenderElectricTurbine; -import resonantinduction.atomic.process.turbine.TileElectricTurbine; +import resonantinduction.atomic.machine.accelerator.EntityParticle; +import resonantinduction.atomic.machine.accelerator.GuiAccelerator; +import resonantinduction.atomic.machine.accelerator.RenderParticle; +import resonantinduction.atomic.machine.accelerator.TileAccelerator; +import resonantinduction.atomic.machine.boiler.GuiChemicalExtractor; +import resonantinduction.atomic.machine.boiler.GuiNuclearBoiler; +import resonantinduction.atomic.machine.boiler.RenderNuclearBoiler; +import resonantinduction.atomic.machine.boiler.TileNuclearBoiler; +import resonantinduction.atomic.machine.centrifuge.GuiCentrifuge; +import resonantinduction.atomic.machine.centrifuge.RenderCentrifuge; +import resonantinduction.atomic.machine.centrifuge.TileCentrifuge; +import resonantinduction.atomic.machine.extractor.RenderChemicalExtractor; +import resonantinduction.atomic.machine.extractor.TileChemicalExtractor; +import resonantinduction.atomic.machine.extractor.turbine.RenderElectricTurbine; +import resonantinduction.atomic.machine.extractor.turbine.TileElectricTurbine; +import resonantinduction.atomic.machine.plasma.RenderPlasmaHeater; +import resonantinduction.atomic.machine.plasma.TilePlasmaHeater; +import resonantinduction.atomic.machine.quantum.GuiQuantumAssembler; +import resonantinduction.atomic.machine.quantum.TileQuantumAssembler; +import resonantinduction.atomic.machine.reactor.GuiReactorCell; +import resonantinduction.atomic.machine.reactor.RenderReactorCell; +import resonantinduction.atomic.machine.reactor.TileReactorCell; +import resonantinduction.atomic.machine.thermometer.RenderThermometer; +import resonantinduction.atomic.machine.thermometer.TileThermometer; import cpw.mods.fml.client.registry.ClientRegistry; import cpw.mods.fml.client.registry.RenderingRegistry; diff --git a/atomic/src/main/scala/resonantinduction/atomic/CommonProxy.java b/atomic/src/main/scala/resonantinduction/atomic/CommonProxy.java index b050b43e..4192408e 100644 --- a/atomic/src/main/scala/resonantinduction/atomic/CommonProxy.java +++ b/atomic/src/main/scala/resonantinduction/atomic/CommonProxy.java @@ -4,18 +4,18 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; import resonant.lib.prefab.ProxyBase; -import resonantinduction.atomic.fission.reactor.ContainerReactorCell; -import resonantinduction.atomic.fission.reactor.TileReactorCell; -import resonantinduction.atomic.fusion.ContainerNuclearBoiler; -import resonantinduction.atomic.particle.accelerator.ContainerAccelerator; -import resonantinduction.atomic.particle.accelerator.TileAccelerator; -import resonantinduction.atomic.particle.quantum.ContainerQuantumAssembler; -import resonantinduction.atomic.particle.quantum.TileQuantumAssembler; -import resonantinduction.atomic.process.ContainerChemicalExtractor; -import resonantinduction.atomic.process.TileChemicalExtractor; -import resonantinduction.atomic.process.fission.ContainerCentrifuge; -import resonantinduction.atomic.process.fission.TileCentrifuge; -import resonantinduction.atomic.process.fission.TileNuclearBoiler; +import resonantinduction.atomic.machine.accelerator.ContainerAccelerator; +import resonantinduction.atomic.machine.accelerator.TileAccelerator; +import resonantinduction.atomic.machine.boiler.TileNuclearBoiler; +import resonantinduction.atomic.machine.centrifuge.ContainerCentrifuge; +import resonantinduction.atomic.machine.centrifuge.TileCentrifuge; +import resonantinduction.atomic.machine.extractor.ContainerChemicalExtractor; +import resonantinduction.atomic.machine.extractor.TileChemicalExtractor; +import resonantinduction.atomic.machine.plasma.ContainerNuclearBoiler; +import resonantinduction.atomic.machine.quantum.ContainerQuantumAssembler; +import resonantinduction.atomic.machine.quantum.TileQuantumAssembler; +import resonantinduction.atomic.machine.reactor.ContainerReactorCell; +import resonantinduction.atomic.machine.reactor.TileReactorCell; public class CommonProxy extends ProxyBase { diff --git a/atomic/src/main/scala/resonantinduction/atomic/base/ItemASBase.java b/atomic/src/main/scala/resonantinduction/atomic/base/ItemASBase.java deleted file mode 100644 index eb2921b3..00000000 --- a/atomic/src/main/scala/resonantinduction/atomic/base/ItemASBase.java +++ /dev/null @@ -1,15 +0,0 @@ -package resonantinduction.atomic.base; - -import resonant.lib.prefab.item.ItemBase; -import resonantinduction.core.Reference; -import resonantinduction.core.Settings; -import resonantinduction.core.TabRI; - -public class ItemASBase extends ItemBase -{ - /** Must be called while in mod init phase. */ - public ItemASBase(int itemID, String name) - { - super(itemID); - } -} diff --git a/atomic/src/main/scala/resonantinduction/atomic/base/ItemElectricAS.java b/atomic/src/main/scala/resonantinduction/atomic/base/ItemElectricAS.java deleted file mode 100644 index 03cf98d8..00000000 --- a/atomic/src/main/scala/resonantinduction/atomic/base/ItemElectricAS.java +++ /dev/null @@ -1,21 +0,0 @@ -package resonantinduction.atomic.base; - -import resonantinduction.core.Reference; -import resonantinduction.core.Settings; -import resonantinduction.core.TabRI; -import universalelectricity.api.UniversalClass; -import universalelectricity.api.item.IEnergyItem; -import universalelectricity.api.item.ItemElectric; - -@UniversalClass -public abstract class ItemElectricAS extends ItemElectric implements IEnergyItem -{ - public ItemElectricAS(int itemID, String name) - { - super(Settings.CONFIGURATION.getItem(name, itemID).getInt()); - this.setUnlocalizedName(Reference.PREFIX + name); - this.setCreativeTab(TabRI.DEFAULT); - this.setTextureName(Reference.PREFIX + name); - - } -} diff --git a/atomic/src/main/scala/resonantinduction/atomic/fission/reactor/BlockToxicWaste.java b/atomic/src/main/scala/resonantinduction/atomic/blocks/BlockToxicWaste.java similarity index 97% rename from atomic/src/main/scala/resonantinduction/atomic/fission/reactor/BlockToxicWaste.java rename to atomic/src/main/scala/resonantinduction/atomic/blocks/BlockToxicWaste.java index a6080c6f..cc3b22da 100644 --- a/atomic/src/main/scala/resonantinduction/atomic/fission/reactor/BlockToxicWaste.java +++ b/atomic/src/main/scala/resonantinduction/atomic/blocks/BlockToxicWaste.java @@ -1,4 +1,4 @@ -package resonantinduction.atomic.fission.reactor; +package resonantinduction.atomic.blocks; import java.util.Random; diff --git a/atomic/src/main/scala/resonantinduction/atomic/fission/BlockUraniumOre.java b/atomic/src/main/scala/resonantinduction/atomic/blocks/BlockUraniumOre.java similarity index 97% rename from atomic/src/main/scala/resonantinduction/atomic/fission/BlockUraniumOre.java rename to atomic/src/main/scala/resonantinduction/atomic/blocks/BlockUraniumOre.java index d33d469d..043aa34d 100644 --- a/atomic/src/main/scala/resonantinduction/atomic/fission/BlockUraniumOre.java +++ b/atomic/src/main/scala/resonantinduction/atomic/blocks/BlockUraniumOre.java @@ -1,4 +1,4 @@ -package resonantinduction.atomic.fission; +package resonantinduction.atomic.blocks; import java.util.Random; diff --git a/atomic/src/main/scala/resonantinduction/atomic/fusion/TileElectromagnet.java b/atomic/src/main/scala/resonantinduction/atomic/blocks/TileElectromagnet.java similarity index 98% rename from atomic/src/main/scala/resonantinduction/atomic/fusion/TileElectromagnet.java rename to atomic/src/main/scala/resonantinduction/atomic/blocks/TileElectromagnet.java index 48f9f324..f8c6ccaf 100644 --- a/atomic/src/main/scala/resonantinduction/atomic/fusion/TileElectromagnet.java +++ b/atomic/src/main/scala/resonantinduction/atomic/blocks/TileElectromagnet.java @@ -1,4 +1,4 @@ -package resonantinduction.atomic.fusion; +package resonantinduction.atomic.blocks; import java.util.List; diff --git a/atomic/src/main/scala/resonantinduction/atomic/process/sensor/TileSiren.java b/atomic/src/main/scala/resonantinduction/atomic/blocks/TileSiren.java similarity index 97% rename from atomic/src/main/scala/resonantinduction/atomic/process/sensor/TileSiren.java rename to atomic/src/main/scala/resonantinduction/atomic/blocks/TileSiren.java index a80211d5..6d52f561 100644 --- a/atomic/src/main/scala/resonantinduction/atomic/process/sensor/TileSiren.java +++ b/atomic/src/main/scala/resonantinduction/atomic/blocks/TileSiren.java @@ -1,4 +1,4 @@ -package resonantinduction.atomic.process.sensor; +package resonantinduction.atomic.blocks; import net.minecraft.entity.player.EntityPlayer; import net.minecraftforge.common.ForgeDirection; diff --git a/atomic/src/main/scala/resonantinduction/atomic/particle/fulmination/ItemAntimatter.java b/atomic/src/main/scala/resonantinduction/atomic/items/ItemAntimatter.java similarity index 98% rename from atomic/src/main/scala/resonantinduction/atomic/particle/fulmination/ItemAntimatter.java rename to atomic/src/main/scala/resonantinduction/atomic/items/ItemAntimatter.java index f24afb6b..0ca6b2ed 100644 --- a/atomic/src/main/scala/resonantinduction/atomic/particle/fulmination/ItemAntimatter.java +++ b/atomic/src/main/scala/resonantinduction/atomic/items/ItemAntimatter.java @@ -1,4 +1,4 @@ -package resonantinduction.atomic.particle.fulmination; +package resonantinduction.atomic.items; import java.util.List; @@ -19,7 +19,6 @@ import resonant.api.explosion.IExplosion; import resonant.lib.flag.FlagRegistry; import resonant.lib.prefab.poison.PoisonRadiation; import resonantinduction.atomic.Atomic; -import resonantinduction.atomic.base.ItemCell; import resonantinduction.core.Reference; import resonantinduction.core.ResonantInduction; import resonantinduction.core.Settings; diff --git a/atomic/src/main/scala/resonantinduction/atomic/fission/ItemBreederFuel.java b/atomic/src/main/scala/resonantinduction/atomic/items/ItemBreederFuel.java similarity index 95% rename from atomic/src/main/scala/resonantinduction/atomic/fission/ItemBreederFuel.java rename to atomic/src/main/scala/resonantinduction/atomic/items/ItemBreederFuel.java index ac406e9d..77643766 100644 --- a/atomic/src/main/scala/resonantinduction/atomic/fission/ItemBreederFuel.java +++ b/atomic/src/main/scala/resonantinduction/atomic/items/ItemBreederFuel.java @@ -1,4 +1,4 @@ -package resonantinduction.atomic.fission; +package resonantinduction.atomic.items; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; diff --git a/atomic/src/main/scala/resonantinduction/atomic/base/ItemCell.java b/atomic/src/main/scala/resonantinduction/atomic/items/ItemCell.java similarity index 97% rename from atomic/src/main/scala/resonantinduction/atomic/base/ItemCell.java rename to atomic/src/main/scala/resonantinduction/atomic/items/ItemCell.java index 6212a0f4..d1448c98 100644 --- a/atomic/src/main/scala/resonantinduction/atomic/base/ItemCell.java +++ b/atomic/src/main/scala/resonantinduction/atomic/items/ItemCell.java @@ -1,4 +1,4 @@ -package resonantinduction.atomic.base; +package resonantinduction.atomic.items; import java.util.List; diff --git a/atomic/src/main/scala/resonantinduction/atomic/particle/accelerator/ItemDarkMatter.java b/atomic/src/main/scala/resonantinduction/atomic/items/ItemDarkMatter.java similarity index 59% rename from atomic/src/main/scala/resonantinduction/atomic/particle/accelerator/ItemDarkMatter.java rename to atomic/src/main/scala/resonantinduction/atomic/items/ItemDarkMatter.java index 9df2c4c0..ec11854e 100644 --- a/atomic/src/main/scala/resonantinduction/atomic/particle/accelerator/ItemDarkMatter.java +++ b/atomic/src/main/scala/resonantinduction/atomic/items/ItemDarkMatter.java @@ -1,6 +1,5 @@ -package resonantinduction.atomic.particle.accelerator; +package resonantinduction.atomic.items; -import resonantinduction.atomic.base.ItemCell; /** Strange matter cell */ public class ItemDarkMatter extends ItemCell diff --git a/atomic/src/main/scala/resonantinduction/atomic/fission/ItemFissileFuel.java b/atomic/src/main/scala/resonantinduction/atomic/items/ItemFissileFuel.java similarity index 98% rename from atomic/src/main/scala/resonantinduction/atomic/fission/ItemFissileFuel.java rename to atomic/src/main/scala/resonantinduction/atomic/items/ItemFissileFuel.java index 2a7458b5..d3f6209e 100644 --- a/atomic/src/main/scala/resonantinduction/atomic/fission/ItemFissileFuel.java +++ b/atomic/src/main/scala/resonantinduction/atomic/items/ItemFissileFuel.java @@ -1,4 +1,4 @@ -package resonantinduction.atomic.fission; +package resonantinduction.atomic.items; import java.util.List; diff --git a/atomic/src/main/scala/resonantinduction/atomic/process/ItemHazmat.java b/atomic/src/main/scala/resonantinduction/atomic/items/ItemHazmat.java similarity index 97% rename from atomic/src/main/scala/resonantinduction/atomic/process/ItemHazmat.java rename to atomic/src/main/scala/resonantinduction/atomic/items/ItemHazmat.java index b068e562..b791ab5e 100644 --- a/atomic/src/main/scala/resonantinduction/atomic/process/ItemHazmat.java +++ b/atomic/src/main/scala/resonantinduction/atomic/items/ItemHazmat.java @@ -1,4 +1,4 @@ -package resonantinduction.atomic.process; +package resonantinduction.atomic.items; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; diff --git a/atomic/src/main/scala/resonantinduction/atomic/fission/ItemRadioactive.java b/atomic/src/main/scala/resonantinduction/atomic/items/ItemRadioactive.java similarity index 94% rename from atomic/src/main/scala/resonantinduction/atomic/fission/ItemRadioactive.java rename to atomic/src/main/scala/resonantinduction/atomic/items/ItemRadioactive.java index 9cf21a9e..0ff71421 100644 --- a/atomic/src/main/scala/resonantinduction/atomic/fission/ItemRadioactive.java +++ b/atomic/src/main/scala/resonantinduction/atomic/items/ItemRadioactive.java @@ -1,4 +1,4 @@ -package resonantinduction.atomic.fission; +package resonantinduction.atomic.items; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; diff --git a/atomic/src/main/scala/resonantinduction/atomic/fission/ItemUranium.java b/atomic/src/main/scala/resonantinduction/atomic/items/ItemUranium.java similarity index 97% rename from atomic/src/main/scala/resonantinduction/atomic/fission/ItemUranium.java rename to atomic/src/main/scala/resonantinduction/atomic/items/ItemUranium.java index 02282009..dc356da3 100644 --- a/atomic/src/main/scala/resonantinduction/atomic/fission/ItemUranium.java +++ b/atomic/src/main/scala/resonantinduction/atomic/items/ItemUranium.java @@ -1,4 +1,4 @@ -package resonantinduction.atomic.fission; +package resonantinduction.atomic.items; import java.util.List; diff --git a/atomic/src/main/scala/resonantinduction/atomic/particle/accelerator/BlockAccelerator.java b/atomic/src/main/scala/resonantinduction/atomic/machine/accelerator/BlockAccelerator.java similarity index 94% rename from atomic/src/main/scala/resonantinduction/atomic/particle/accelerator/BlockAccelerator.java rename to atomic/src/main/scala/resonantinduction/atomic/machine/accelerator/BlockAccelerator.java index 0b229d6b..992ea060 100644 --- a/atomic/src/main/scala/resonantinduction/atomic/particle/accelerator/BlockAccelerator.java +++ b/atomic/src/main/scala/resonantinduction/atomic/machine/accelerator/BlockAccelerator.java @@ -1,4 +1,4 @@ -package resonantinduction.atomic.particle.accelerator; +package resonantinduction.atomic.machine.accelerator; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.tileentity.TileEntity; diff --git a/atomic/src/main/scala/resonantinduction/atomic/particle/accelerator/ContainerAccelerator.java b/atomic/src/main/scala/resonantinduction/atomic/machine/accelerator/ContainerAccelerator.java similarity index 97% rename from atomic/src/main/scala/resonantinduction/atomic/particle/accelerator/ContainerAccelerator.java rename to atomic/src/main/scala/resonantinduction/atomic/machine/accelerator/ContainerAccelerator.java index fc9a8ed6..515637d8 100644 --- a/atomic/src/main/scala/resonantinduction/atomic/particle/accelerator/ContainerAccelerator.java +++ b/atomic/src/main/scala/resonantinduction/atomic/machine/accelerator/ContainerAccelerator.java @@ -1,4 +1,4 @@ -package resonantinduction.atomic.particle.accelerator; +package resonantinduction.atomic.machine.accelerator; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; diff --git a/atomic/src/main/scala/resonantinduction/atomic/particle/accelerator/EntityParticle.java b/atomic/src/main/scala/resonantinduction/atomic/machine/accelerator/EntityParticle.java similarity index 99% rename from atomic/src/main/scala/resonantinduction/atomic/particle/accelerator/EntityParticle.java rename to atomic/src/main/scala/resonantinduction/atomic/machine/accelerator/EntityParticle.java index 0ff4487e..25d01b30 100644 --- a/atomic/src/main/scala/resonantinduction/atomic/particle/accelerator/EntityParticle.java +++ b/atomic/src/main/scala/resonantinduction/atomic/machine/accelerator/EntityParticle.java @@ -1,4 +1,4 @@ -package resonantinduction.atomic.particle.accelerator; +package resonantinduction.atomic.machine.accelerator; import java.util.List; diff --git a/atomic/src/main/scala/resonantinduction/atomic/particle/accelerator/GuiAccelerator.java b/atomic/src/main/scala/resonantinduction/atomic/machine/accelerator/GuiAccelerator.java similarity index 98% rename from atomic/src/main/scala/resonantinduction/atomic/particle/accelerator/GuiAccelerator.java rename to atomic/src/main/scala/resonantinduction/atomic/machine/accelerator/GuiAccelerator.java index 2499bf6a..92b481dd 100644 --- a/atomic/src/main/scala/resonantinduction/atomic/particle/accelerator/GuiAccelerator.java +++ b/atomic/src/main/scala/resonantinduction/atomic/machine/accelerator/GuiAccelerator.java @@ -1,4 +1,4 @@ -package resonantinduction.atomic.particle.accelerator; +package resonantinduction.atomic.machine.accelerator; import net.minecraft.entity.player.InventoryPlayer; import resonant.lib.gui.GuiContainerBase; diff --git a/atomic/src/main/scala/resonantinduction/atomic/particle/accelerator/RenderParticle.java b/atomic/src/main/scala/resonantinduction/atomic/machine/accelerator/RenderParticle.java similarity index 98% rename from atomic/src/main/scala/resonantinduction/atomic/particle/accelerator/RenderParticle.java rename to atomic/src/main/scala/resonantinduction/atomic/machine/accelerator/RenderParticle.java index 5f054fb5..ff73580e 100644 --- a/atomic/src/main/scala/resonantinduction/atomic/particle/accelerator/RenderParticle.java +++ b/atomic/src/main/scala/resonantinduction/atomic/machine/accelerator/RenderParticle.java @@ -1,4 +1,4 @@ -package resonantinduction.atomic.particle.accelerator; +package resonantinduction.atomic.machine.accelerator; import java.util.Random; diff --git a/atomic/src/main/scala/resonantinduction/atomic/particle/accelerator/TileAccelerator.java b/atomic/src/main/scala/resonantinduction/atomic/machine/accelerator/TileAccelerator.java similarity index 98% rename from atomic/src/main/scala/resonantinduction/atomic/particle/accelerator/TileAccelerator.java rename to atomic/src/main/scala/resonantinduction/atomic/machine/accelerator/TileAccelerator.java index 01d22c78..83d32ba8 100644 --- a/atomic/src/main/scala/resonantinduction/atomic/particle/accelerator/TileAccelerator.java +++ b/atomic/src/main/scala/resonantinduction/atomic/machine/accelerator/TileAccelerator.java @@ -1,4 +1,4 @@ -package resonantinduction.atomic.particle.accelerator; +package resonantinduction.atomic.machine.accelerator; import net.minecraft.block.Block; import net.minecraft.entity.player.EntityPlayer; @@ -13,7 +13,8 @@ import resonant.api.IRotatable; import resonant.lib.network.Synced; import resonant.lib.prefab.tile.TileElectricalInventory; import resonantinduction.atomic.Atomic; -import resonantinduction.atomic.particle.fulmination.ItemAntimatter; +import resonantinduction.atomic.items.ItemAntimatter; +import resonantinduction.atomic.items.ItemDarkMatter; import resonantinduction.core.Reference; import resonantinduction.core.ResonantInduction; import resonantinduction.core.Settings; diff --git a/atomic/src/main/scala/resonantinduction/atomic/process/fission/BlockNuclearBoiler.java b/atomic/src/main/scala/resonantinduction/atomic/machine/boiler/BlockNuclearBoiler.java similarity index 96% rename from atomic/src/main/scala/resonantinduction/atomic/process/fission/BlockNuclearBoiler.java rename to atomic/src/main/scala/resonantinduction/atomic/machine/boiler/BlockNuclearBoiler.java index b8db81dc..7235580f 100644 --- a/atomic/src/main/scala/resonantinduction/atomic/process/fission/BlockNuclearBoiler.java +++ b/atomic/src/main/scala/resonantinduction/atomic/machine/boiler/BlockNuclearBoiler.java @@ -1,4 +1,4 @@ -package resonantinduction.atomic.process.fission; +package resonantinduction.atomic.machine.boiler; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.tileentity.TileEntity; diff --git a/atomic/src/main/scala/resonantinduction/atomic/process/fission/GuiChemicalExtractor.java b/atomic/src/main/scala/resonantinduction/atomic/machine/boiler/GuiChemicalExtractor.java similarity index 95% rename from atomic/src/main/scala/resonantinduction/atomic/process/fission/GuiChemicalExtractor.java rename to atomic/src/main/scala/resonantinduction/atomic/machine/boiler/GuiChemicalExtractor.java index bf1ae224..c0dd746a 100644 --- a/atomic/src/main/scala/resonantinduction/atomic/process/fission/GuiChemicalExtractor.java +++ b/atomic/src/main/scala/resonantinduction/atomic/machine/boiler/GuiChemicalExtractor.java @@ -1,10 +1,10 @@ -package resonantinduction.atomic.process.fission; +package resonantinduction.atomic.machine.boiler; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.util.StatCollector; import resonant.lib.gui.GuiContainerBase; -import resonantinduction.atomic.process.ContainerChemicalExtractor; -import resonantinduction.atomic.process.TileChemicalExtractor; +import resonantinduction.atomic.machine.extractor.ContainerChemicalExtractor; +import resonantinduction.atomic.machine.extractor.TileChemicalExtractor; import universalelectricity.api.energy.UnitDisplay.Unit; public class GuiChemicalExtractor extends GuiContainerBase diff --git a/atomic/src/main/scala/resonantinduction/atomic/process/fission/GuiNuclearBoiler.java b/atomic/src/main/scala/resonantinduction/atomic/machine/boiler/GuiNuclearBoiler.java similarity index 96% rename from atomic/src/main/scala/resonantinduction/atomic/process/fission/GuiNuclearBoiler.java rename to atomic/src/main/scala/resonantinduction/atomic/machine/boiler/GuiNuclearBoiler.java index 88311639..2b656907 100644 --- a/atomic/src/main/scala/resonantinduction/atomic/process/fission/GuiNuclearBoiler.java +++ b/atomic/src/main/scala/resonantinduction/atomic/machine/boiler/GuiNuclearBoiler.java @@ -1,9 +1,9 @@ -package resonantinduction.atomic.process.fission; +package resonantinduction.atomic.machine.boiler; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.util.StatCollector; import resonant.lib.gui.GuiContainerBase; -import resonantinduction.atomic.fusion.ContainerNuclearBoiler; +import resonantinduction.atomic.machine.plasma.ContainerNuclearBoiler; import universalelectricity.api.energy.UnitDisplay.Unit; public class GuiNuclearBoiler extends GuiContainerBase diff --git a/atomic/src/main/scala/resonantinduction/atomic/process/fission/RenderNuclearBoiler.java b/atomic/src/main/scala/resonantinduction/atomic/machine/boiler/RenderNuclearBoiler.java similarity index 97% rename from atomic/src/main/scala/resonantinduction/atomic/process/fission/RenderNuclearBoiler.java rename to atomic/src/main/scala/resonantinduction/atomic/machine/boiler/RenderNuclearBoiler.java index 0b22abb3..fb3d8fe9 100644 --- a/atomic/src/main/scala/resonantinduction/atomic/process/fission/RenderNuclearBoiler.java +++ b/atomic/src/main/scala/resonantinduction/atomic/machine/boiler/RenderNuclearBoiler.java @@ -1,4 +1,4 @@ -package resonantinduction.atomic.process.fission; +package resonantinduction.atomic.machine.boiler; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.tileentity.TileEntity; diff --git a/atomic/src/main/scala/resonantinduction/atomic/process/fission/TileNuclearBoiler.java b/atomic/src/main/scala/resonantinduction/atomic/machine/boiler/TileNuclearBoiler.java similarity index 99% rename from atomic/src/main/scala/resonantinduction/atomic/process/fission/TileNuclearBoiler.java rename to atomic/src/main/scala/resonantinduction/atomic/machine/boiler/TileNuclearBoiler.java index 8061cef6..36eef906 100644 --- a/atomic/src/main/scala/resonantinduction/atomic/process/fission/TileNuclearBoiler.java +++ b/atomic/src/main/scala/resonantinduction/atomic/machine/boiler/TileNuclearBoiler.java @@ -1,4 +1,4 @@ -package resonantinduction.atomic.process.fission; +package resonantinduction.atomic.machine.boiler; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.ISidedInventory; diff --git a/atomic/src/main/scala/resonantinduction/atomic/process/fission/BlockCentrifuge.java b/atomic/src/main/scala/resonantinduction/atomic/machine/centrifuge/BlockCentrifuge.java similarity index 96% rename from atomic/src/main/scala/resonantinduction/atomic/process/fission/BlockCentrifuge.java rename to atomic/src/main/scala/resonantinduction/atomic/machine/centrifuge/BlockCentrifuge.java index 6a04f263..76fb30ef 100644 --- a/atomic/src/main/scala/resonantinduction/atomic/process/fission/BlockCentrifuge.java +++ b/atomic/src/main/scala/resonantinduction/atomic/machine/centrifuge/BlockCentrifuge.java @@ -1,4 +1,4 @@ -package resonantinduction.atomic.process.fission; +package resonantinduction.atomic.machine.centrifuge; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.tileentity.TileEntity; diff --git a/atomic/src/main/scala/resonantinduction/atomic/process/fission/ContainerCentrifuge.java b/atomic/src/main/scala/resonantinduction/atomic/machine/centrifuge/ContainerCentrifuge.java similarity index 98% rename from atomic/src/main/scala/resonantinduction/atomic/process/fission/ContainerCentrifuge.java rename to atomic/src/main/scala/resonantinduction/atomic/machine/centrifuge/ContainerCentrifuge.java index 62e5526f..c2ebc5fa 100644 --- a/atomic/src/main/scala/resonantinduction/atomic/process/fission/ContainerCentrifuge.java +++ b/atomic/src/main/scala/resonantinduction/atomic/machine/centrifuge/ContainerCentrifuge.java @@ -1,4 +1,4 @@ -package resonantinduction.atomic.process.fission; +package resonantinduction.atomic.machine.centrifuge; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; diff --git a/atomic/src/main/scala/resonantinduction/atomic/process/fission/GuiCentrifuge.java b/atomic/src/main/scala/resonantinduction/atomic/machine/centrifuge/GuiCentrifuge.java similarity index 95% rename from atomic/src/main/scala/resonantinduction/atomic/process/fission/GuiCentrifuge.java rename to atomic/src/main/scala/resonantinduction/atomic/machine/centrifuge/GuiCentrifuge.java index 7542f552..1484b819 100644 --- a/atomic/src/main/scala/resonantinduction/atomic/process/fission/GuiCentrifuge.java +++ b/atomic/src/main/scala/resonantinduction/atomic/machine/centrifuge/GuiCentrifuge.java @@ -1,8 +1,9 @@ -package resonantinduction.atomic.process.fission; +package resonantinduction.atomic.machine.centrifuge; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.util.StatCollector; import resonant.lib.gui.GuiContainerBase; +import resonantinduction.atomic.machine.boiler.TileNuclearBoiler; import universalelectricity.api.energy.UnitDisplay.Unit; public class GuiCentrifuge extends GuiContainerBase diff --git a/atomic/src/main/scala/resonantinduction/atomic/process/fission/RenderCentrifuge.java b/atomic/src/main/scala/resonantinduction/atomic/machine/centrifuge/RenderCentrifuge.java similarity index 96% rename from atomic/src/main/scala/resonantinduction/atomic/process/fission/RenderCentrifuge.java rename to atomic/src/main/scala/resonantinduction/atomic/machine/centrifuge/RenderCentrifuge.java index 0d20cd4f..782f60c4 100644 --- a/atomic/src/main/scala/resonantinduction/atomic/process/fission/RenderCentrifuge.java +++ b/atomic/src/main/scala/resonantinduction/atomic/machine/centrifuge/RenderCentrifuge.java @@ -1,4 +1,4 @@ -package resonantinduction.atomic.process.fission; +package resonantinduction.atomic.machine.centrifuge; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.tileentity.TileEntity; diff --git a/atomic/src/main/scala/resonantinduction/atomic/process/fission/TileCentrifuge.java b/atomic/src/main/scala/resonantinduction/atomic/machine/centrifuge/TileCentrifuge.java similarity index 99% rename from atomic/src/main/scala/resonantinduction/atomic/process/fission/TileCentrifuge.java rename to atomic/src/main/scala/resonantinduction/atomic/machine/centrifuge/TileCentrifuge.java index 291052a2..4f65daa2 100644 --- a/atomic/src/main/scala/resonantinduction/atomic/process/fission/TileCentrifuge.java +++ b/atomic/src/main/scala/resonantinduction/atomic/machine/centrifuge/TileCentrifuge.java @@ -1,4 +1,4 @@ -package resonantinduction.atomic.process.fission; +package resonantinduction.atomic.machine.centrifuge; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.ISidedInventory; diff --git a/atomic/src/main/scala/resonantinduction/atomic/process/BlockChemicalExtractor.java b/atomic/src/main/scala/resonantinduction/atomic/machine/extractor/BlockChemicalExtractor.java similarity index 96% rename from atomic/src/main/scala/resonantinduction/atomic/process/BlockChemicalExtractor.java rename to atomic/src/main/scala/resonantinduction/atomic/machine/extractor/BlockChemicalExtractor.java index 49bca240..748d897c 100644 --- a/atomic/src/main/scala/resonantinduction/atomic/process/BlockChemicalExtractor.java +++ b/atomic/src/main/scala/resonantinduction/atomic/machine/extractor/BlockChemicalExtractor.java @@ -1,4 +1,4 @@ -package resonantinduction.atomic.process; +package resonantinduction.atomic.machine.extractor; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.tileentity.TileEntity; diff --git a/atomic/src/main/scala/resonantinduction/atomic/process/ContainerChemicalExtractor.java b/atomic/src/main/scala/resonantinduction/atomic/machine/extractor/ContainerChemicalExtractor.java similarity index 96% rename from atomic/src/main/scala/resonantinduction/atomic/process/ContainerChemicalExtractor.java rename to atomic/src/main/scala/resonantinduction/atomic/machine/extractor/ContainerChemicalExtractor.java index 88858a1c..65a4fcf5 100644 --- a/atomic/src/main/scala/resonantinduction/atomic/process/ContainerChemicalExtractor.java +++ b/atomic/src/main/scala/resonantinduction/atomic/machine/extractor/ContainerChemicalExtractor.java @@ -1,4 +1,4 @@ -package resonantinduction.atomic.process; +package resonantinduction.atomic.machine.extractor; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Slot; diff --git a/atomic/src/main/scala/resonantinduction/atomic/process/RenderChemicalExtractor.java b/atomic/src/main/scala/resonantinduction/atomic/machine/extractor/RenderChemicalExtractor.java similarity index 97% rename from atomic/src/main/scala/resonantinduction/atomic/process/RenderChemicalExtractor.java rename to atomic/src/main/scala/resonantinduction/atomic/machine/extractor/RenderChemicalExtractor.java index 91793830..7ef1e176 100644 --- a/atomic/src/main/scala/resonantinduction/atomic/process/RenderChemicalExtractor.java +++ b/atomic/src/main/scala/resonantinduction/atomic/machine/extractor/RenderChemicalExtractor.java @@ -1,4 +1,4 @@ -package resonantinduction.atomic.process; +package resonantinduction.atomic.machine.extractor; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.tileentity.TileEntity; diff --git a/atomic/src/main/scala/resonantinduction/atomic/process/TileChemicalExtractor.java b/atomic/src/main/scala/resonantinduction/atomic/machine/extractor/TileChemicalExtractor.java similarity index 99% rename from atomic/src/main/scala/resonantinduction/atomic/process/TileChemicalExtractor.java rename to atomic/src/main/scala/resonantinduction/atomic/machine/extractor/TileChemicalExtractor.java index fbbb8be8..9fead1ef 100644 --- a/atomic/src/main/scala/resonantinduction/atomic/process/TileChemicalExtractor.java +++ b/atomic/src/main/scala/resonantinduction/atomic/machine/extractor/TileChemicalExtractor.java @@ -1,4 +1,4 @@ -package resonantinduction.atomic.process; +package resonantinduction.atomic.machine.extractor; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.ISidedInventory; diff --git a/atomic/src/main/scala/resonantinduction/atomic/process/TileProcess.java b/atomic/src/main/scala/resonantinduction/atomic/machine/extractor/TileProcess.java similarity index 98% rename from atomic/src/main/scala/resonantinduction/atomic/process/TileProcess.java rename to atomic/src/main/scala/resonantinduction/atomic/machine/extractor/TileProcess.java index a244ba79..c15357d2 100644 --- a/atomic/src/main/scala/resonantinduction/atomic/process/TileProcess.java +++ b/atomic/src/main/scala/resonantinduction/atomic/machine/extractor/TileProcess.java @@ -1,4 +1,4 @@ -package resonantinduction.atomic.process; +package resonantinduction.atomic.machine.extractor; import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.FluidContainerRegistry; diff --git a/atomic/src/main/scala/resonantinduction/atomic/process/turbine/BlockElectricTurbine.java b/atomic/src/main/scala/resonantinduction/atomic/machine/extractor/turbine/BlockElectricTurbine.java similarity index 93% rename from atomic/src/main/scala/resonantinduction/atomic/process/turbine/BlockElectricTurbine.java rename to atomic/src/main/scala/resonantinduction/atomic/machine/extractor/turbine/BlockElectricTurbine.java index 55de8430..c544676c 100644 --- a/atomic/src/main/scala/resonantinduction/atomic/process/turbine/BlockElectricTurbine.java +++ b/atomic/src/main/scala/resonantinduction/atomic/machine/extractor/turbine/BlockElectricTurbine.java @@ -1,4 +1,4 @@ -package resonantinduction.atomic.process.turbine; +package resonantinduction.atomic.machine.extractor.turbine; import net.minecraft.block.material.Material; import net.minecraft.tileentity.TileEntity; diff --git a/atomic/src/main/scala/resonantinduction/atomic/process/turbine/RenderElectricTurbine.java b/atomic/src/main/scala/resonantinduction/atomic/machine/extractor/turbine/RenderElectricTurbine.java similarity index 98% rename from atomic/src/main/scala/resonantinduction/atomic/process/turbine/RenderElectricTurbine.java rename to atomic/src/main/scala/resonantinduction/atomic/machine/extractor/turbine/RenderElectricTurbine.java index 9f92181d..7fe630c7 100644 --- a/atomic/src/main/scala/resonantinduction/atomic/process/turbine/RenderElectricTurbine.java +++ b/atomic/src/main/scala/resonantinduction/atomic/machine/extractor/turbine/RenderElectricTurbine.java @@ -1,4 +1,4 @@ -package resonantinduction.atomic.process.turbine; +package resonantinduction.atomic.machine.extractor.turbine; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.tileentity.TileEntity; diff --git a/atomic/src/main/scala/resonantinduction/atomic/process/turbine/TileElectricTurbine.java b/atomic/src/main/scala/resonantinduction/atomic/machine/extractor/turbine/TileElectricTurbine.java similarity index 96% rename from atomic/src/main/scala/resonantinduction/atomic/process/turbine/TileElectricTurbine.java rename to atomic/src/main/scala/resonantinduction/atomic/machine/extractor/turbine/TileElectricTurbine.java index 1b33dd07..0b805335 100644 --- a/atomic/src/main/scala/resonantinduction/atomic/process/turbine/TileElectricTurbine.java +++ b/atomic/src/main/scala/resonantinduction/atomic/machine/extractor/turbine/TileElectricTurbine.java @@ -1,4 +1,4 @@ -package resonantinduction.atomic.process.turbine; +package resonantinduction.atomic.machine.extractor.turbine; import net.minecraftforge.common.ForgeDirection; import net.minecraftforge.fluids.Fluid; diff --git a/atomic/src/main/scala/resonantinduction/atomic/process/turbine/TileFunnel.java b/atomic/src/main/scala/resonantinduction/atomic/machine/extractor/turbine/TileFunnel.java similarity index 98% rename from atomic/src/main/scala/resonantinduction/atomic/process/turbine/TileFunnel.java rename to atomic/src/main/scala/resonantinduction/atomic/machine/extractor/turbine/TileFunnel.java index 5e8e4c40..d6c8bc12 100644 --- a/atomic/src/main/scala/resonantinduction/atomic/process/turbine/TileFunnel.java +++ b/atomic/src/main/scala/resonantinduction/atomic/machine/extractor/turbine/TileFunnel.java @@ -1,4 +1,4 @@ -package resonantinduction.atomic.process.turbine; +package resonantinduction.atomic.machine.extractor.turbine; import net.minecraft.block.material.Material; import net.minecraft.client.renderer.texture.IconRegister; diff --git a/atomic/src/main/scala/resonantinduction/atomic/particle/fulmination/FulminationHandler.java b/atomic/src/main/scala/resonantinduction/atomic/machine/fulmination/FulminationHandler.java similarity index 98% rename from atomic/src/main/scala/resonantinduction/atomic/particle/fulmination/FulminationHandler.java rename to atomic/src/main/scala/resonantinduction/atomic/machine/fulmination/FulminationHandler.java index 8c75218a..b609fcb2 100644 --- a/atomic/src/main/scala/resonantinduction/atomic/particle/fulmination/FulminationHandler.java +++ b/atomic/src/main/scala/resonantinduction/atomic/machine/fulmination/FulminationHandler.java @@ -1,4 +1,4 @@ -package resonantinduction.atomic.particle.fulmination; +package resonantinduction.atomic.machine.fulmination; import java.util.ArrayList; import java.util.HashSet; diff --git a/atomic/src/main/scala/resonantinduction/atomic/particle/fulmination/TileFulmination.java b/atomic/src/main/scala/resonantinduction/atomic/machine/fulmination/TileFulmination.java similarity index 97% rename from atomic/src/main/scala/resonantinduction/atomic/particle/fulmination/TileFulmination.java rename to atomic/src/main/scala/resonantinduction/atomic/machine/fulmination/TileFulmination.java index b56d680b..926518c7 100644 --- a/atomic/src/main/scala/resonantinduction/atomic/particle/fulmination/TileFulmination.java +++ b/atomic/src/main/scala/resonantinduction/atomic/machine/fulmination/TileFulmination.java @@ -1,4 +1,4 @@ -package resonantinduction.atomic.particle.fulmination; +package resonantinduction.atomic.machine.fulmination; import java.util.EnumSet; diff --git a/atomic/src/main/scala/resonantinduction/atomic/fusion/BlockPlasmaHeater.java b/atomic/src/main/scala/resonantinduction/atomic/machine/plasma/BlockPlasmaHeater.java similarity index 96% rename from atomic/src/main/scala/resonantinduction/atomic/fusion/BlockPlasmaHeater.java rename to atomic/src/main/scala/resonantinduction/atomic/machine/plasma/BlockPlasmaHeater.java index a45a63d8..fad749f0 100644 --- a/atomic/src/main/scala/resonantinduction/atomic/fusion/BlockPlasmaHeater.java +++ b/atomic/src/main/scala/resonantinduction/atomic/machine/plasma/BlockPlasmaHeater.java @@ -1,4 +1,4 @@ -package resonantinduction.atomic.fusion; +package resonantinduction.atomic.machine.plasma; import net.minecraft.client.renderer.texture.IconRegister; import net.minecraft.entity.player.EntityPlayer; diff --git a/atomic/src/main/scala/resonantinduction/atomic/fusion/ContainerNuclearBoiler.java b/atomic/src/main/scala/resonantinduction/atomic/machine/plasma/ContainerNuclearBoiler.java similarity index 97% rename from atomic/src/main/scala/resonantinduction/atomic/fusion/ContainerNuclearBoiler.java rename to atomic/src/main/scala/resonantinduction/atomic/machine/plasma/ContainerNuclearBoiler.java index 07bb9e45..a53f7e07 100644 --- a/atomic/src/main/scala/resonantinduction/atomic/fusion/ContainerNuclearBoiler.java +++ b/atomic/src/main/scala/resonantinduction/atomic/machine/plasma/ContainerNuclearBoiler.java @@ -1,4 +1,4 @@ -package resonantinduction.atomic.fusion; +package resonantinduction.atomic.machine.plasma; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; @@ -9,7 +9,7 @@ import resonant.lib.gui.ContainerBase; import resonant.lib.prefab.slot.SlotEnergyItem; import resonant.lib.prefab.slot.SlotSpecific; import resonantinduction.atomic.Atomic; -import resonantinduction.atomic.process.fission.TileNuclearBoiler; +import resonantinduction.atomic.machine.boiler.TileNuclearBoiler; /** Nuclear boiler container */ public class ContainerNuclearBoiler extends ContainerBase diff --git a/atomic/src/main/scala/resonantinduction/atomic/fusion/RenderPlasmaHeater.java b/atomic/src/main/scala/resonantinduction/atomic/machine/plasma/RenderPlasmaHeater.java similarity index 96% rename from atomic/src/main/scala/resonantinduction/atomic/fusion/RenderPlasmaHeater.java rename to atomic/src/main/scala/resonantinduction/atomic/machine/plasma/RenderPlasmaHeater.java index b41700cd..7d726a3c 100644 --- a/atomic/src/main/scala/resonantinduction/atomic/fusion/RenderPlasmaHeater.java +++ b/atomic/src/main/scala/resonantinduction/atomic/machine/plasma/RenderPlasmaHeater.java @@ -1,4 +1,4 @@ -package resonantinduction.atomic.fusion; +package resonantinduction.atomic.machine.plasma; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.ResourceLocation; diff --git a/atomic/src/main/scala/resonantinduction/atomic/fusion/TilePlasma.java b/atomic/src/main/scala/resonantinduction/atomic/machine/plasma/TilePlasma.java similarity index 98% rename from atomic/src/main/scala/resonantinduction/atomic/fusion/TilePlasma.java rename to atomic/src/main/scala/resonantinduction/atomic/machine/plasma/TilePlasma.java index cb0bed3d..fde393bf 100644 --- a/atomic/src/main/scala/resonantinduction/atomic/fusion/TilePlasma.java +++ b/atomic/src/main/scala/resonantinduction/atomic/machine/plasma/TilePlasma.java @@ -1,4 +1,4 @@ -package resonantinduction.atomic.fusion; +package resonantinduction.atomic.machine.plasma; import java.util.ArrayList; diff --git a/atomic/src/main/scala/resonantinduction/atomic/fusion/TilePlasmaHeater.java b/atomic/src/main/scala/resonantinduction/atomic/machine/plasma/TilePlasmaHeater.java similarity index 99% rename from atomic/src/main/scala/resonantinduction/atomic/fusion/TilePlasmaHeater.java rename to atomic/src/main/scala/resonantinduction/atomic/machine/plasma/TilePlasmaHeater.java index 22ea8a40..4ab1db62 100644 --- a/atomic/src/main/scala/resonantinduction/atomic/fusion/TilePlasmaHeater.java +++ b/atomic/src/main/scala/resonantinduction/atomic/machine/plasma/TilePlasmaHeater.java @@ -1,4 +1,4 @@ -package resonantinduction.atomic.fusion; +package resonantinduction.atomic.machine.plasma; import java.util.HashMap; diff --git a/atomic/src/main/scala/resonantinduction/atomic/particle/quantum/ContainerQuantumAssembler.java b/atomic/src/main/scala/resonantinduction/atomic/machine/quantum/ContainerQuantumAssembler.java similarity index 98% rename from atomic/src/main/scala/resonantinduction/atomic/particle/quantum/ContainerQuantumAssembler.java rename to atomic/src/main/scala/resonantinduction/atomic/machine/quantum/ContainerQuantumAssembler.java index 2d17eba2..b62230a6 100644 --- a/atomic/src/main/scala/resonantinduction/atomic/particle/quantum/ContainerQuantumAssembler.java +++ b/atomic/src/main/scala/resonantinduction/atomic/machine/quantum/ContainerQuantumAssembler.java @@ -1,4 +1,4 @@ -package resonantinduction.atomic.particle.quantum; +package resonantinduction.atomic.machine.quantum; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; diff --git a/atomic/src/main/scala/resonantinduction/atomic/particle/quantum/GuiQuantumAssembler.java b/atomic/src/main/scala/resonantinduction/atomic/machine/quantum/GuiQuantumAssembler.java similarity index 97% rename from atomic/src/main/scala/resonantinduction/atomic/particle/quantum/GuiQuantumAssembler.java rename to atomic/src/main/scala/resonantinduction/atomic/machine/quantum/GuiQuantumAssembler.java index 401a9ea3..08bb630a 100644 --- a/atomic/src/main/scala/resonantinduction/atomic/particle/quantum/GuiQuantumAssembler.java +++ b/atomic/src/main/scala/resonantinduction/atomic/machine/quantum/GuiQuantumAssembler.java @@ -1,4 +1,4 @@ -package resonantinduction.atomic.particle.quantum; +package resonantinduction.atomic.machine.quantum; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.util.ResourceLocation; diff --git a/atomic/src/main/scala/resonantinduction/atomic/particle/quantum/RenderQuantumAssembler.java b/atomic/src/main/scala/resonantinduction/atomic/machine/quantum/RenderQuantumAssembler.java similarity index 98% rename from atomic/src/main/scala/resonantinduction/atomic/particle/quantum/RenderQuantumAssembler.java rename to atomic/src/main/scala/resonantinduction/atomic/machine/quantum/RenderQuantumAssembler.java index 5a3f3f35..6db92dba 100644 --- a/atomic/src/main/scala/resonantinduction/atomic/particle/quantum/RenderQuantumAssembler.java +++ b/atomic/src/main/scala/resonantinduction/atomic/machine/quantum/RenderQuantumAssembler.java @@ -1,4 +1,4 @@ -package resonantinduction.atomic.particle.quantum; +package resonantinduction.atomic.machine.quantum; import net.minecraft.client.renderer.RenderBlocks; import net.minecraft.client.renderer.entity.RenderItem; diff --git a/atomic/src/main/scala/resonantinduction/atomic/particle/quantum/TileQuantumAssembler.java b/atomic/src/main/scala/resonantinduction/atomic/machine/quantum/TileQuantumAssembler.java similarity index 99% rename from atomic/src/main/scala/resonantinduction/atomic/particle/quantum/TileQuantumAssembler.java rename to atomic/src/main/scala/resonantinduction/atomic/machine/quantum/TileQuantumAssembler.java index f7bdaff1..4f8b807e 100644 --- a/atomic/src/main/scala/resonantinduction/atomic/particle/quantum/TileQuantumAssembler.java +++ b/atomic/src/main/scala/resonantinduction/atomic/machine/quantum/TileQuantumAssembler.java @@ -1,4 +1,4 @@ -package resonantinduction.atomic.particle.quantum; +package resonantinduction.atomic.machine.quantum; import net.minecraft.block.material.Material; import net.minecraft.entity.item.EntityItem; diff --git a/atomic/src/main/scala/resonantinduction/atomic/fission/reactor/BlockReactorDrain.java b/atomic/src/main/scala/resonantinduction/atomic/machine/reactor/BlockReactorDrain.java similarity index 97% rename from atomic/src/main/scala/resonantinduction/atomic/fission/reactor/BlockReactorDrain.java rename to atomic/src/main/scala/resonantinduction/atomic/machine/reactor/BlockReactorDrain.java index 67db7d1b..f4e1c504 100644 --- a/atomic/src/main/scala/resonantinduction/atomic/fission/reactor/BlockReactorDrain.java +++ b/atomic/src/main/scala/resonantinduction/atomic/machine/reactor/BlockReactorDrain.java @@ -1,4 +1,4 @@ -package resonantinduction.atomic.fission.reactor; +package resonantinduction.atomic.machine.reactor; import net.minecraft.client.renderer.texture.IconRegister; import net.minecraft.entity.EntityLivingBase; diff --git a/atomic/src/main/scala/resonantinduction/atomic/fission/reactor/ContainerReactorCell.java b/atomic/src/main/scala/resonantinduction/atomic/machine/reactor/ContainerReactorCell.java similarity index 93% rename from atomic/src/main/scala/resonantinduction/atomic/fission/reactor/ContainerReactorCell.java rename to atomic/src/main/scala/resonantinduction/atomic/machine/reactor/ContainerReactorCell.java index 928fd15c..44fa4057 100644 --- a/atomic/src/main/scala/resonantinduction/atomic/fission/reactor/ContainerReactorCell.java +++ b/atomic/src/main/scala/resonantinduction/atomic/machine/reactor/ContainerReactorCell.java @@ -1,12 +1,12 @@ -package resonantinduction.atomic.fission.reactor; +package resonantinduction.atomic.machine.reactor; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; import resonant.lib.gui.ContainerBase; import resonant.lib.prefab.slot.SlotSpecific; -import resonantinduction.atomic.fission.ItemBreederFuel; -import resonantinduction.atomic.fission.ItemFissileFuel; +import resonantinduction.atomic.items.ItemBreederFuel; +import resonantinduction.atomic.items.ItemFissileFuel; public class ContainerReactorCell extends ContainerBase { diff --git a/atomic/src/main/scala/resonantinduction/atomic/fission/reactor/GuiReactorCell.java b/atomic/src/main/scala/resonantinduction/atomic/machine/reactor/GuiReactorCell.java similarity index 98% rename from atomic/src/main/scala/resonantinduction/atomic/fission/reactor/GuiReactorCell.java rename to atomic/src/main/scala/resonantinduction/atomic/machine/reactor/GuiReactorCell.java index 139c81de..3d53db77 100644 --- a/atomic/src/main/scala/resonantinduction/atomic/fission/reactor/GuiReactorCell.java +++ b/atomic/src/main/scala/resonantinduction/atomic/machine/reactor/GuiReactorCell.java @@ -1,4 +1,4 @@ -package resonantinduction.atomic.fission.reactor; +package resonantinduction.atomic.machine.reactor; import java.util.List; diff --git a/atomic/src/main/scala/resonantinduction/atomic/fission/reactor/RenderReactorCell.java b/atomic/src/main/scala/resonantinduction/atomic/machine/reactor/RenderReactorCell.java similarity index 98% rename from atomic/src/main/scala/resonantinduction/atomic/fission/reactor/RenderReactorCell.java rename to atomic/src/main/scala/resonantinduction/atomic/machine/reactor/RenderReactorCell.java index 2e975f83..1e9933f0 100644 --- a/atomic/src/main/scala/resonantinduction/atomic/fission/reactor/RenderReactorCell.java +++ b/atomic/src/main/scala/resonantinduction/atomic/machine/reactor/RenderReactorCell.java @@ -1,4 +1,4 @@ -package resonantinduction.atomic.fission.reactor; +package resonantinduction.atomic.machine.reactor; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.tileentity.TileEntity; diff --git a/atomic/src/main/scala/resonantinduction/atomic/fission/reactor/TileControlRod.java b/atomic/src/main/scala/resonantinduction/atomic/machine/reactor/TileControlRod.java similarity index 88% rename from atomic/src/main/scala/resonantinduction/atomic/fission/reactor/TileControlRod.java rename to atomic/src/main/scala/resonantinduction/atomic/machine/reactor/TileControlRod.java index d7ebe620..9d2c362e 100644 --- a/atomic/src/main/scala/resonantinduction/atomic/fission/reactor/TileControlRod.java +++ b/atomic/src/main/scala/resonantinduction/atomic/machine/reactor/TileControlRod.java @@ -1,4 +1,4 @@ -package resonantinduction.atomic.fission.reactor; +package resonantinduction.atomic.machine.reactor; import net.minecraft.block.material.Material; import resonant.lib.content.module.TileBlock; diff --git a/atomic/src/main/scala/resonantinduction/atomic/fission/reactor/TileReactorCell.java b/atomic/src/main/scala/resonantinduction/atomic/machine/reactor/TileReactorCell.java similarity index 99% rename from atomic/src/main/scala/resonantinduction/atomic/fission/reactor/TileReactorCell.java rename to atomic/src/main/scala/resonantinduction/atomic/machine/reactor/TileReactorCell.java index afdc99b2..b16f7d76 100644 --- a/atomic/src/main/scala/resonantinduction/atomic/fission/reactor/TileReactorCell.java +++ b/atomic/src/main/scala/resonantinduction/atomic/machine/reactor/TileReactorCell.java @@ -1,4 +1,4 @@ -package resonantinduction.atomic.fission.reactor; +package resonantinduction.atomic.machine.reactor; import java.util.ArrayList; import java.util.List; @@ -38,7 +38,7 @@ import resonant.lib.thermal.ThermalPhysics; import resonant.lib.utility.inventory.InventoryUtility; import resonantinduction.atomic.Atomic; import resonantinduction.atomic.ReactorExplosion; -import resonantinduction.atomic.fusion.TilePlasma; +import resonantinduction.atomic.machine.plasma.TilePlasma; import resonantinduction.core.Reference; import resonantinduction.core.ResonantInduction; import universalelectricity.api.UniversalElectricity; diff --git a/atomic/src/main/scala/resonantinduction/atomic/fission/reactor/TileReactorDrain.java b/atomic/src/main/scala/resonantinduction/atomic/machine/reactor/TileReactorDrain.java similarity index 99% rename from atomic/src/main/scala/resonantinduction/atomic/fission/reactor/TileReactorDrain.java rename to atomic/src/main/scala/resonantinduction/atomic/machine/reactor/TileReactorDrain.java index be5699db..a94c27a6 100644 --- a/atomic/src/main/scala/resonantinduction/atomic/fission/reactor/TileReactorDrain.java +++ b/atomic/src/main/scala/resonantinduction/atomic/machine/reactor/TileReactorDrain.java @@ -1,4 +1,4 @@ -package resonantinduction.atomic.fission.reactor; +package resonantinduction.atomic.machine.reactor; import java.util.ArrayList; import java.util.HashSet; diff --git a/atomic/src/main/scala/resonantinduction/atomic/process/sensor/ItemBlockThermometer.java b/atomic/src/main/scala/resonantinduction/atomic/machine/thermometer/ItemBlockThermometer.java similarity index 98% rename from atomic/src/main/scala/resonantinduction/atomic/process/sensor/ItemBlockThermometer.java rename to atomic/src/main/scala/resonantinduction/atomic/machine/thermometer/ItemBlockThermometer.java index c492f2f0..664266ad 100644 --- a/atomic/src/main/scala/resonantinduction/atomic/process/sensor/ItemBlockThermometer.java +++ b/atomic/src/main/scala/resonantinduction/atomic/machine/thermometer/ItemBlockThermometer.java @@ -1,4 +1,4 @@ -package resonantinduction.atomic.process.sensor; +package resonantinduction.atomic.machine.thermometer; import java.util.List; diff --git a/atomic/src/main/scala/resonantinduction/atomic/process/sensor/RenderThermometer.java b/atomic/src/main/scala/resonantinduction/atomic/machine/thermometer/RenderThermometer.java similarity index 95% rename from atomic/src/main/scala/resonantinduction/atomic/process/sensor/RenderThermometer.java rename to atomic/src/main/scala/resonantinduction/atomic/machine/thermometer/RenderThermometer.java index ac75814a..611e7d04 100644 --- a/atomic/src/main/scala/resonantinduction/atomic/process/sensor/RenderThermometer.java +++ b/atomic/src/main/scala/resonantinduction/atomic/machine/thermometer/RenderThermometer.java @@ -1,4 +1,4 @@ -package resonantinduction.atomic.process.sensor; +package resonantinduction.atomic.machine.thermometer; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.tileentity.TileEntity; diff --git a/atomic/src/main/scala/resonantinduction/atomic/process/sensor/TileThermometer.java b/atomic/src/main/scala/resonantinduction/atomic/machine/thermometer/TileThermometer.java similarity index 99% rename from atomic/src/main/scala/resonantinduction/atomic/process/sensor/TileThermometer.java rename to atomic/src/main/scala/resonantinduction/atomic/machine/thermometer/TileThermometer.java index d74cfe32..99ef4dfe 100644 --- a/atomic/src/main/scala/resonantinduction/atomic/process/sensor/TileThermometer.java +++ b/atomic/src/main/scala/resonantinduction/atomic/machine/thermometer/TileThermometer.java @@ -1,4 +1,4 @@ -package resonantinduction.atomic.process.sensor; +package resonantinduction.atomic.machine.thermometer; import java.util.ArrayList; From 4925c4121b6f57deb1a687bfae39c90fbdbf519f Mon Sep 17 00:00:00 2001 From: Robert S Date: Fri, 13 Jun 2014 10:30:00 -0400 Subject: [PATCH 31/62] Converted Accelerator to use the TileBlock system --- .../resonantinduction/atomic/Atomic.java | 5 +-- .../machine/accelerator/BlockAccelerator.java | 37 ------------------- .../machine/accelerator/TileAccelerator.java | 13 +++++++ 3 files changed, 14 insertions(+), 41 deletions(-) delete mode 100644 atomic/src/main/scala/resonantinduction/atomic/machine/accelerator/BlockAccelerator.java diff --git a/atomic/src/main/scala/resonantinduction/atomic/Atomic.java b/atomic/src/main/scala/resonantinduction/atomic/Atomic.java index 8498e0e0..85dddcff 100644 --- a/atomic/src/main/scala/resonantinduction/atomic/Atomic.java +++ b/atomic/src/main/scala/resonantinduction/atomic/Atomic.java @@ -29,7 +29,6 @@ import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.Event.Result; import net.minecraftforge.event.ForgeSubscribe; import net.minecraftforge.event.entity.player.FillBucketEvent; -import net.minecraftforge.event.world.WorldEvent.Save; import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidContainerRegistry; import net.minecraftforge.fluids.FluidRegistry; @@ -53,7 +52,6 @@ import resonant.lib.prefab.ore.OreGenerator; import resonant.lib.recipe.UniversalRecipe; import resonant.lib.render.RenderUtility; import resonant.lib.thermal.EventThermal.EventThermalUpdate; -import resonant.lib.utility.nbt.NBTUtility; import resonantinduction.atomic.blocks.BlockToxicWaste; import resonantinduction.atomic.blocks.BlockUraniumOre; import resonantinduction.atomic.blocks.TileElectromagnet; @@ -66,7 +64,6 @@ import resonantinduction.atomic.items.ItemFissileFuel; import resonantinduction.atomic.items.ItemHazmat; import resonantinduction.atomic.items.ItemRadioactive; import resonantinduction.atomic.items.ItemUranium; -import resonantinduction.atomic.machine.accelerator.BlockAccelerator; import resonantinduction.atomic.machine.accelerator.EntityParticle; import resonantinduction.atomic.machine.accelerator.TileAccelerator; import resonantinduction.atomic.machine.boiler.BlockNuclearBoiler; @@ -305,7 +302,7 @@ public class Atomic blockElectromagnet = contentRegistry.newBlock(TileElectromagnet.class); blockSiren = contentRegistry.newBlock(TileSiren.class); blockSteamFunnel = contentRegistry.newBlock(TileFunnel.class); - blockAccelerator = contentRegistry.createTile(BlockAccelerator.class, TileAccelerator.class); + blockAccelerator = contentRegistry.newBlock(TileAccelerator.class); blockFulmination = contentRegistry.newBlock(TileFulmination.class); blockQuantumAssembler = contentRegistry.newBlock(TileQuantumAssembler.class); blockToxicWaste = contentRegistry.createBlock(BlockToxicWaste.class).setCreativeTab(null); diff --git a/atomic/src/main/scala/resonantinduction/atomic/machine/accelerator/BlockAccelerator.java b/atomic/src/main/scala/resonantinduction/atomic/machine/accelerator/BlockAccelerator.java deleted file mode 100644 index 992ea060..00000000 --- a/atomic/src/main/scala/resonantinduction/atomic/machine/accelerator/BlockAccelerator.java +++ /dev/null @@ -1,37 +0,0 @@ -package resonantinduction.atomic.machine.accelerator; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.World; -import resonant.lib.prefab.block.BlockRotatable; -import resonantinduction.atomic.Atomic; -import universalelectricity.api.UniversalElectricity; - -/** Accelerator block */ -public class BlockAccelerator extends BlockRotatable -{ - public BlockAccelerator(int id) - { - super(id, UniversalElectricity.machine); - - } - - @Override - public boolean onMachineActivated(World par1World, int x, int y, int z, EntityPlayer par5EntityPlayer, int side, float hitX, float hitY, float hitZ) - { - int metadata = par1World.getBlockMetadata(x, y, z); - - if (!par1World.isRemote) - { - par5EntityPlayer.openGui(Atomic.INSTANCE, 0, par1World, x, y, z); - } - - return true; - } - - @Override - public TileEntity createNewTileEntity(World var1) - { - return new TileAccelerator(); - } -} diff --git a/atomic/src/main/scala/resonantinduction/atomic/machine/accelerator/TileAccelerator.java b/atomic/src/main/scala/resonantinduction/atomic/machine/accelerator/TileAccelerator.java index 83d32ba8..4217bf3c 100644 --- a/atomic/src/main/scala/resonantinduction/atomic/machine/accelerator/TileAccelerator.java +++ b/atomic/src/main/scala/resonantinduction/atomic/machine/accelerator/TileAccelerator.java @@ -1,6 +1,7 @@ package resonantinduction.atomic.machine.accelerator; import net.minecraft.block.Block; +import net.minecraft.block.material.Material; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; import net.minecraft.inventory.ISidedInventory; @@ -18,6 +19,7 @@ import resonantinduction.atomic.items.ItemDarkMatter; import resonantinduction.core.Reference; import resonantinduction.core.ResonantInduction; import resonantinduction.core.Settings; +import universalelectricity.api.UniversalElectricity; import universalelectricity.api.electricity.IVoltageInput; import universalelectricity.api.energy.EnergyStorageHandler; import universalelectricity.api.energy.IEnergyInterface; @@ -57,6 +59,7 @@ public class TileAccelerator extends TileElectricalInventory implements IElectro public TileAccelerator() { + super(UniversalElectricity.machine); energy = new EnergyStorageHandler(energyPerTick * 2, energyPerTick / 20); maxSlots = 4; antiMatterDensityMultiplyer = DENSITY_MULTIPLYER_DEFAULT; @@ -240,6 +243,16 @@ public class TileAccelerator extends TileElectricalInventory implements IElectro lastSpawnTick++; } } + + @Override + protected boolean use(EntityPlayer player, int side, Vector3 hit) + { + if (!world().isRemote) + { + player.openGui(Atomic.INSTANCE, 0, world(), x(), y(), z()); + } + return true; + } private void CalculateParticleDensity() { From aed4ea5f9027c2477df74fe18a4a5d94d96115eb Mon Sep 17 00:00:00 2001 From: Robert S Date: Fri, 13 Jun 2014 10:30:17 -0400 Subject: [PATCH 32/62] Fixed import issue causing RI to not compile --- src/main/scala/resonantinduction/core/debug/FrameDebug.java | 4 +--- .../scala/resonantinduction/core/debug/FrameNodeDebug.java | 2 +- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/src/main/scala/resonantinduction/core/debug/FrameDebug.java b/src/main/scala/resonantinduction/core/debug/FrameDebug.java index 1b5613e5..c4b7155f 100644 --- a/src/main/scala/resonantinduction/core/debug/FrameDebug.java +++ b/src/main/scala/resonantinduction/core/debug/FrameDebug.java @@ -4,15 +4,13 @@ import java.awt.BorderLayout; import java.awt.Component; import java.awt.Frame; import java.awt.GridLayout; -import java.awt.Label; import java.awt.Panel; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; -import resonantinduction.mechanical.energy.grid.MechanicalNodeFrame; -import universalelectricity.api.vector.IVectorWorld; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; +import universalelectricity.api.vector.IVectorWorld; /** @author Darkguardsman */ @SuppressWarnings("serial") diff --git a/src/main/scala/resonantinduction/core/debug/FrameNodeDebug.java b/src/main/scala/resonantinduction/core/debug/FrameNodeDebug.java index 5c2880c4..fbb3739c 100644 --- a/src/main/scala/resonantinduction/core/debug/FrameNodeDebug.java +++ b/src/main/scala/resonantinduction/core/debug/FrameNodeDebug.java @@ -1,11 +1,11 @@ package resonantinduction.core.debug; -import codechicken.multipart.TMultiPart; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; import net.minecraftforge.common.ForgeDirection; import resonant.api.grid.INode; import resonant.api.grid.INodeProvider; +import codechicken.multipart.TMultiPart; /** @author Darkguardsman */ @SuppressWarnings("serial") From aa0b050e7062246ca956a378c4612e00a687a15d Mon Sep 17 00:00:00 2001 From: Robert S Date: Fri, 13 Jun 2014 10:56:48 -0400 Subject: [PATCH 33/62] Fixed particle failing to spawn if railcraft air block was in the way --- .../atomic/machine/accelerator/EntityParticle.java | 8 +++++--- .../atomic/machine/accelerator/GuiAccelerator.java | 2 +- .../atomic/machine/accelerator/TileAccelerator.java | 10 +++++----- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/atomic/src/main/scala/resonantinduction/atomic/machine/accelerator/EntityParticle.java b/atomic/src/main/scala/resonantinduction/atomic/machine/accelerator/EntityParticle.java index 25d01b30..14600525 100644 --- a/atomic/src/main/scala/resonantinduction/atomic/machine/accelerator/EntityParticle.java +++ b/atomic/src/main/scala/resonantinduction/atomic/machine/accelerator/EntityParticle.java @@ -2,6 +2,7 @@ package resonantinduction.atomic.machine.accelerator; import java.util.List; +import net.minecraft.block.Block; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLiving; import net.minecraft.nbt.NBTTagCompound; @@ -51,9 +52,10 @@ public class EntityParticle extends Entity implements IEntityAdditionalSpawnData this.movementDirection = dir; } - public static boolean canRenderAcceleratedParticle(World world, Vector3 pos) + public static boolean canSpawnParticle(World world, Vector3 pos) { - if (pos.getBlockID(world) != 0) + Block block = Block.blocksList[pos.getBlockID(world)]; + if (block != null && !block.isAirBlock(world, pos.intX(), pos.intY(), pos.intZ())) { return false; } @@ -178,7 +180,7 @@ public class EntityParticle extends Entity implements IEntityAdditionalSpawnData this.lastTurn--; /** Checks if the current block condition allows the particle to exist */ - if (!canRenderAcceleratedParticle(this.worldObj, new Vector3(this)) || this.isCollided) + if (!canSpawnParticle(this.worldObj, new Vector3(this)) || this.isCollided) { explode(); return; diff --git a/atomic/src/main/scala/resonantinduction/atomic/machine/accelerator/GuiAccelerator.java b/atomic/src/main/scala/resonantinduction/atomic/machine/accelerator/GuiAccelerator.java index 92b481dd..2b2588dc 100644 --- a/atomic/src/main/scala/resonantinduction/atomic/machine/accelerator/GuiAccelerator.java +++ b/atomic/src/main/scala/resonantinduction/atomic/machine/accelerator/GuiAccelerator.java @@ -29,7 +29,7 @@ public class GuiAccelerator extends GuiContainerBase Vector3 position = new Vector3(this.tileEntity); position.translate(this.tileEntity.getDirection().getOpposite()); - if (!EntityParticle.canRenderAcceleratedParticle(this.tileEntity.worldObj, position)) + if (!EntityParticle.canSpawnParticle(this.tileEntity.worldObj, position)) { status = "\u00a74Fail to emit; try rotating."; } diff --git a/atomic/src/main/scala/resonantinduction/atomic/machine/accelerator/TileAccelerator.java b/atomic/src/main/scala/resonantinduction/atomic/machine/accelerator/TileAccelerator.java index 4217bf3c..69a3b16e 100644 --- a/atomic/src/main/scala/resonantinduction/atomic/machine/accelerator/TileAccelerator.java +++ b/atomic/src/main/scala/resonantinduction/atomic/machine/accelerator/TileAccelerator.java @@ -151,16 +151,16 @@ public class TileAccelerator extends TileElectricalInventory implements IElectro // Creates a accelerated particle if one needs to exist (on world load for example or player login). if (getStackInSlot(0) != null && lastSpawnTick >= 40) { - Vector3 spawnAcceleratedParticle = new Vector3(this); - spawnAcceleratedParticle.translate(getDirection().getOpposite()); - spawnAcceleratedParticle.translate(0.5f); + Vector3 spawn_vec = new Vector3(this); + spawn_vec.translate(getDirection().getOpposite()); + spawn_vec.translate(0.5f); // Only render the particle if container within the proper environment for it. - if (EntityParticle.canRenderAcceleratedParticle(worldObj, spawnAcceleratedParticle)) + if (EntityParticle.canSpawnParticle(worldObj, spawn_vec)) { // Spawn the particle. totalEnergyConsumed = 0; - entityParticle = new EntityParticle(worldObj, spawnAcceleratedParticle, new Vector3(this), getDirection().getOpposite()); + entityParticle = new EntityParticle(worldObj, spawn_vec, new Vector3(this), getDirection().getOpposite()); worldObj.spawnEntityInWorld(entityParticle); // Grabs input block hardness if available, otherwise defaults are used. From 0d7dd572c0fe0d38e0a5eea40718eeac977f07a5 Mon Sep 17 00:00:00 2001 From: Robert S Date: Fri, 13 Jun 2014 11:10:04 -0400 Subject: [PATCH 34/62] Changed reactor cell interaction, right click to open GUI, sneak right click to add item, sneak right click with empty hand to take item --- .../machine/reactor/TileReactorCell.java | 31 +++++++++---------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/atomic/src/main/scala/resonantinduction/atomic/machine/reactor/TileReactorCell.java b/atomic/src/main/scala/resonantinduction/atomic/machine/reactor/TileReactorCell.java index b16f7d76..983dc74b 100644 --- a/atomic/src/main/scala/resonantinduction/atomic/machine/reactor/TileReactorCell.java +++ b/atomic/src/main/scala/resonantinduction/atomic/machine/reactor/TileReactorCell.java @@ -110,15 +110,9 @@ public class TileReactorCell extends TileInventory implements IMultiBlockStructu { TileReactorCell tile = getMultiBlock().get(); - if (!player.isSneaking()) + if (player.isSneaking()) { - if (tile.getStackInSlot(0) != null) - { - InventoryUtility.dropItemStack(world(), new Vector3(player), tile.getStackInSlot(0), 0); - tile.setInventorySlotContents(0, null); - return true; - } - else if (player.inventory.getCurrentItem() != null) + if (player.inventory.getCurrentItem() != null) { if (player.inventory.getCurrentItem().getItem() instanceof IReactorComponent) { @@ -129,6 +123,12 @@ public class TileReactorCell extends TileInventory implements IMultiBlockStructu return true; } } + else if (tile.getStackInSlot(0) != null) + { + InventoryUtility.dropItemStack(world(), new Vector3(player), tile.getStackInSlot(0), 0); + tile.setInventorySlotContents(0, null); + return true; + } } player.openGui(Atomic.INSTANCE, 0, world(), tile.xCoord, tile.yCoord, tile.zCoord); @@ -214,8 +214,7 @@ public class TileReactorCell extends TileInventory implements IMultiBlockStructu { if (worldObj.rand.nextFloat() > 0.65) { - List entities = worldObj.getEntitiesWithinAABB(EntityLiving.class, - AxisAlignedBB.getBoundingBox(xCoord - RADIUS * 2, yCoord - RADIUS * 2, zCoord - RADIUS * 2, xCoord + RADIUS * 2, yCoord + RADIUS * 2, zCoord + RADIUS * 2)); + List entities = worldObj.getEntitiesWithinAABB(EntityLiving.class, AxisAlignedBB.getBoundingBox(xCoord - RADIUS * 2, yCoord - RADIUS * 2, zCoord - RADIUS * 2, xCoord + RADIUS * 2, yCoord + RADIUS * 2, zCoord + RADIUS * 2)); for (EntityLiving entity : entities) { @@ -276,7 +275,7 @@ public class TileReactorCell extends TileInventory implements IMultiBlockStructu previousTemperature = temperature; //System.out.println("[Atomic Science] [Thermal Grid] Temperature: " + String.valueOf(previousTemperature)); } - + if (previousTemperature >= MELTING_POINT && meltdownCounter < meltdownCounterMaximum) { shouldUpdate = true; @@ -290,7 +289,7 @@ public class TileReactorCell extends TileInventory implements IMultiBlockStructu meltDown(); return; } - + // Reset meltdown ticker to give the reactor more of a 'goldilocks zone'. if (previousTemperature < MELTING_POINT && meltdownCounter < meltdownCounterMaximum && meltdownCounter > 0) { @@ -479,7 +478,7 @@ public class TileReactorCell extends TileInventory implements IMultiBlockStructu { // Turn the reactor cell into a block of lava to imply it melted. this.worldObj.setBlock(Block.lavaStill.blockID, 0, this.xCoord, this.yCoord, this.zCoord, 3); - + ReactorExplosion reactorExplosion = new ReactorExplosion(worldObj, null, xCoord, yCoord, zCoord, 9f); reactorExplosion.doExplosionA(); reactorExplosion.doExplosionB(true); @@ -514,7 +513,8 @@ public class TileReactorCell extends TileInventory implements IMultiBlockStructu return 1; } - /** Returns true if automation can insert the given item in the given slot from the given side. Args: Slot, item, side */ + /** Returns true if automation can insert the given item in the given slot from the given side. + * Args: Slot, item, side */ @Override public boolean canInsertItem(int slot, ItemStack items, int side) { @@ -583,8 +583,7 @@ public class TileReactorCell extends TileInventory implements IMultiBlockStructu @Override public FluidTankInfo[] getTankInfo(ForgeDirection from) { - return new FluidTankInfo[] - { tank.getInfo() }; + return new FluidTankInfo[] { tank.getInfo() }; } @Override From e3980c1bd8da97a45e7d4cab4e588d328a8a92f8 Mon Sep 17 00:00:00 2001 From: Robert S Date: Fri, 13 Jun 2014 11:24:24 -0400 Subject: [PATCH 35/62] Changed sneak right click support for reactor as items don't support it by default --- .../atomic/items/ItemCell.java | 29 ++++--------------- .../machine/reactor/TileReactorCell.java | 22 +++++++------- 2 files changed, 18 insertions(+), 33 deletions(-) diff --git a/atomic/src/main/scala/resonantinduction/atomic/items/ItemCell.java b/atomic/src/main/scala/resonantinduction/atomic/items/ItemCell.java index d1448c98..dfdf57a2 100644 --- a/atomic/src/main/scala/resonantinduction/atomic/items/ItemCell.java +++ b/atomic/src/main/scala/resonantinduction/atomic/items/ItemCell.java @@ -1,18 +1,13 @@ package resonantinduction.atomic.items; -import java.util.List; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.Item; import net.minecraft.item.ItemStack; - -import org.lwjgl.input.Keyboard; - -import resonant.lib.render.EnumColor; +import net.minecraft.world.World; +import resonant.api.IReactor; +import resonant.lib.prefab.item.ItemTooltip; import resonant.lib.utility.LanguageUtility; import resonantinduction.atomic.Atomic; -public class ItemCell extends Item +public class ItemCell extends ItemTooltip { public ItemCell(int itemID) { @@ -21,21 +16,9 @@ public class ItemCell extends Item } @Override - public void addInformation(ItemStack itemStack, EntityPlayer par2EntityPlayer, List list, boolean par4) + public boolean shouldPassSneakingClickToBlock(World world, int x, int y, int z) { - String tooltip = LanguageUtility.getLocal(getUnlocalizedName(itemStack) + ".tooltip"); - - if (tooltip != null && tooltip.length() > 0) - { - if (!Keyboard.isKeyDown(Keyboard.KEY_LSHIFT)) - { - list.add(LanguageUtility.getLocal("tooltip.noShift").replace("%0", EnumColor.AQUA.toString()).replace("%1", EnumColor.GREY.toString())); - } - else - { - list.addAll(LanguageUtility.splitStringPerWord(tooltip, 5)); - } - } + return world.getBlockTileEntity(x, y, z) instanceof IReactor; } @Override diff --git a/atomic/src/main/scala/resonantinduction/atomic/machine/reactor/TileReactorCell.java b/atomic/src/main/scala/resonantinduction/atomic/machine/reactor/TileReactorCell.java index 983dc74b..7732bbd8 100644 --- a/atomic/src/main/scala/resonantinduction/atomic/machine/reactor/TileReactorCell.java +++ b/atomic/src/main/scala/resonantinduction/atomic/machine/reactor/TileReactorCell.java @@ -110,9 +110,9 @@ public class TileReactorCell extends TileInventory implements IMultiBlockStructu { TileReactorCell tile = getMultiBlock().get(); - if (player.isSneaking()) + if (player.inventory.getCurrentItem() != null) { - if (player.inventory.getCurrentItem() != null) + if (tile.getStackInSlot(0) == null) { if (player.inventory.getCurrentItem().getItem() instanceof IReactorComponent) { @@ -123,15 +123,17 @@ public class TileReactorCell extends TileInventory implements IMultiBlockStructu return true; } } - else if (tile.getStackInSlot(0) != null) - { - InventoryUtility.dropItemStack(world(), new Vector3(player), tile.getStackInSlot(0), 0); - tile.setInventorySlotContents(0, null); - return true; - } } - - player.openGui(Atomic.INSTANCE, 0, world(), tile.xCoord, tile.yCoord, tile.zCoord); + else if (player.isSneaking() && tile.getStackInSlot(0) != null) + { + InventoryUtility.dropItemStack(world(), new Vector3(player), tile.getStackInSlot(0), 0); + tile.setInventorySlotContents(0, null); + return true; + } + else + { + player.openGui(Atomic.INSTANCE, 0, world(), tile.xCoord, tile.yCoord, tile.zCoord); + } } return true; From 209dd99820cbcc52b5edbd362a65ecc7d1a8dbc1 Mon Sep 17 00:00:00 2001 From: Robert S Date: Fri, 13 Jun 2014 13:18:51 -0400 Subject: [PATCH 36/62] Fixed NPE in siren --- .../atomic/blocks/TileSiren.java | 33 +++++++++---------- 1 file changed, 15 insertions(+), 18 deletions(-) diff --git a/atomic/src/main/scala/resonantinduction/atomic/blocks/TileSiren.java b/atomic/src/main/scala/resonantinduction/atomic/blocks/TileSiren.java index 6d52f561..5109e0bd 100644 --- a/atomic/src/main/scala/resonantinduction/atomic/blocks/TileSiren.java +++ b/atomic/src/main/scala/resonantinduction/atomic/blocks/TileSiren.java @@ -1,6 +1,7 @@ package resonantinduction.atomic.blocks; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.world.World; import net.minecraftforge.common.ForgeDirection; import resonant.lib.content.module.TileBlock; import resonantinduction.core.Reference; @@ -30,30 +31,26 @@ public class TileSiren extends TileBlock @Override public void updateEntity() { - if (worldObj == null) + World world = worldObj; + if (world != null) { - return; - } + int metadata = world.getBlockMetadata(x(), y(), z()); - int metadata = worldObj.getBlockMetadata(x(), y(), z()); - - if (worldObj.getBlockPowerInput(x(), y(), z()) > 0) - { - float volume = 0.5f; - - for (int i = 0; i < 6; i++) + if (world.getBlockPowerInput(x(), y(), z()) > 0) { - Vector3 check = position().translate(ForgeDirection.getOrientation(i)); - int blockID = check.getBlockID(worldObj); - - if (blockID == blockID()) + float volume = 0.5f; + for (int i = 0; i < 6; i++) { - volume *= 1.5f; + Vector3 check = position().translate(ForgeDirection.getOrientation(i)); + if (check.getBlockID(world) == blockID()) + { + volume *= 1.5f; + } } - } - worldObj.playSoundEffect(x(), y(), z(), Reference.PREFIX + "alarm", volume, 1f - 0.18f * (metadata / 15f)); - scheduelTick(30); + world.playSoundEffect(x(), y(), z(), Reference.PREFIX + "alarm", volume, 1f - 0.18f * (metadata / 15f)); + scheduelTick(30); + } } } From fa376f44a99e79933a74a885714583597130b992 Mon Sep 17 00:00:00 2001 From: Robert S Date: Fri, 13 Jun 2014 19:53:02 -0400 Subject: [PATCH 37/62] Fixed piston rotation for renderer --- .../crusher/RenderMechanicalPiston.java | 93 +++++++++---------- 1 file changed, 46 insertions(+), 47 deletions(-) diff --git a/mechanical/src/main/scala/resonantinduction/mechanical/process/crusher/RenderMechanicalPiston.java b/mechanical/src/main/scala/resonantinduction/mechanical/process/crusher/RenderMechanicalPiston.java index 145d4aa6..1cce93d2 100644 --- a/mechanical/src/main/scala/resonantinduction/mechanical/process/crusher/RenderMechanicalPiston.java +++ b/mechanical/src/main/scala/resonantinduction/mechanical/process/crusher/RenderMechanicalPiston.java @@ -18,62 +18,61 @@ import cpw.mods.fml.relauncher.SideOnly; @SideOnly(Side.CLIENT) public class RenderMechanicalPiston extends TileEntitySpecialRenderer { - public static final IModelCustom MODEL = AdvancedModelLoader.loadModel(Reference.MODEL_DIRECTORY + "piston/mechanicalPiston.tcn"); - public static ResourceLocation TEXTURE = new ResourceLocation(Reference.DOMAIN, Reference.MODEL_PATH + "piston/mechanicalPiston_iron.png"); + public static final IModelCustom MODEL = AdvancedModelLoader.loadModel(Reference.MODEL_DIRECTORY + "piston/mechanicalPiston.tcn"); + public static ResourceLocation TEXTURE = new ResourceLocation(Reference.DOMAIN, Reference.MODEL_PATH + "piston/mechanicalPiston_iron.png"); - @Override - public void renderTileEntityAt(TileEntity tileEntity, double x, double y, double z, float f) - { - GL11.glPushMatrix(); - GL11.glTranslated(x + 0.5, y + 0.5, z + 0.5); - TileMechanicalPiston tile = (TileMechanicalPiston) tileEntity; + @Override + public void renderTileEntityAt(TileEntity tileEntity, double x, double y, double z, float f) + { + GL11.glPushMatrix(); + GL11.glTranslated(x + 0.5, y + 0.5, z + 0.5); + TileMechanicalPiston tile = (TileMechanicalPiston) tileEntity; - GL11.glRotated(-90, 0, 1, 0); - GL11.glRotated(180, 0, 0, 1); + GL11.glRotated(-90, 0, 1, 0); + GL11.glRotated(180, 0, 0, 1); - if (tile.worldObj != null) - { - RenderUtility.rotateBlockBasedOnDirection(tile.getDirection()); - } + if (tile.worldObj != null) + { + if (tile.getDirection() != ForgeDirection.UP && tile.getDirection() != ForgeDirection.DOWN) + RenderUtility.rotateBlockBasedOnDirection(tile.getDirection().getOpposite()); + else + RenderUtility.rotateBlockBasedOnDirection(tile.getDirection()); + } - RenderUtility.bind(TEXTURE); + RenderUtility.bind(TEXTURE); - // Angle in radians of the rotor. - double angle = tile.mechanicalNode.renderAngle; - final String[] staticParts = { "baseRing", "leg1", "leg2", "leg3", "leg4", "connector", "basePlate", "basePlateTop", "connectorBar", "centerPiston" }; - final String[] shaftParts = { "topPlate", "outerPiston" }; + // Angle in radians of the rotor. + double angle = tile.mechanicalNode.renderAngle; + final String[] staticParts = { "baseRing", "leg1", "leg2", "leg3", "leg4", "connector", "basePlate", "basePlateTop", "connectorBar", "centerPiston" }; + final String[] shaftParts = { "topPlate", "outerPiston" }; - /** - * Render Piston Rotor - */ - GL11.glPushMatrix(); - GL11.glRotated(-Math.toDegrees(angle), 0, 0, 1); - MODEL.renderAllExcept(ArrayUtils.addAll(shaftParts, staticParts)); - GL11.glPopMatrix(); + /** Render Piston Rotor */ + GL11.glPushMatrix(); + GL11.glRotated(-Math.toDegrees(angle), 0, 0, 1); + MODEL.renderAllExcept(ArrayUtils.addAll(shaftParts, staticParts)); + GL11.glPopMatrix(); - /** - * Render Piston Shaft - */ - GL11.glPushMatrix(); + /** Render Piston Shaft */ + GL11.glPushMatrix(); - if (tile.worldObj != null) - { - ForgeDirection dir = tile.getDirection(); + if (tile.worldObj != null) + { + ForgeDirection dir = tile.getDirection(); - if (tile.world().isAirBlock(tile.x() + dir.offsetX, tile.y() + dir.offsetY, tile.z() + dir.offsetZ)) - { - GL11.glTranslated(0, 0, (0.4 * Math.sin(angle)) - 0.5); - } - else - { - GL11.glTranslated(0, 0, (0.06 * Math.sin(angle)) - 0.03); - } - } + if (tile.world().isAirBlock(tile.x() + dir.offsetX, tile.y() + dir.offsetY, tile.z() + dir.offsetZ)) + { + GL11.glTranslated(0, 0, (0.4 * Math.sin(angle)) - 0.5); + } + else + { + GL11.glTranslated(0, 0, (0.06 * Math.sin(angle)) - 0.03); + } + } - MODEL.renderOnly(shaftParts); - GL11.glPopMatrix(); + MODEL.renderOnly(shaftParts); + GL11.glPopMatrix(); - MODEL.renderOnly(staticParts); - GL11.glPopMatrix(); - } + MODEL.renderOnly(staticParts); + GL11.glPopMatrix(); + } } \ No newline at end of file From 85f0b1619ad65e4a9e84dc5fc09e5b542bbcc3b0 Mon Sep 17 00:00:00 2001 From: Maxwolf Goodliffe Date: Sat, 14 Jun 2014 20:55:20 -0700 Subject: [PATCH 38/62] Imported namespace into GearShaftNode rather than accessing it directly. --- .../resonantinduction/mechanical/gearshaft/GearShaftNode.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mechanical/src/main/scala/resonantinduction/mechanical/gearshaft/GearShaftNode.java b/mechanical/src/main/scala/resonantinduction/mechanical/gearshaft/GearShaftNode.java index 31a10986..6ab2ca3d 100644 --- a/mechanical/src/main/scala/resonantinduction/mechanical/gearshaft/GearShaftNode.java +++ b/mechanical/src/main/scala/resonantinduction/mechanical/gearshaft/GearShaftNode.java @@ -10,6 +10,7 @@ import resonant.api.grid.INodeProvider; import resonantinduction.core.interfaces.IMechanicalNode; import resonantinduction.mechanical.energy.grid.MechanicalNode; import resonantinduction.mechanical.gear.PartGear; +import universalelectricity.api.vector.Vector3; public class GearShaftNode extends MechanicalNode { @@ -72,7 +73,7 @@ public class GearShaftNode extends MechanicalNode { if (!getConnections().containsValue(checkDir) && (checkDir == shaft().placementSide || checkDir == shaft().placementSide.getOpposite())) { - TileEntity checkTile = new universalelectricity.api.vector.Vector3(shaft().tile()).translate(checkDir).getTileEntity(world()); + TileEntity checkTile = new Vector3(shaft().tile()).translate(checkDir).getTileEntity(world()); if (checkTile instanceof INodeProvider) { From 324eb54cd05b3efa329867889babf7491731c8d4 Mon Sep 17 00:00:00 2001 From: Maxwolf Goodliffe Date: Sat, 14 Jun 2014 20:55:56 -0700 Subject: [PATCH 39/62] Buffed the output of plasma heater to nearly double to allow self-sustained loops with fusion reactors. --- .../atomic/machine/plasma/TilePlasmaHeater.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/atomic/src/main/scala/resonantinduction/atomic/machine/plasma/TilePlasmaHeater.java b/atomic/src/main/scala/resonantinduction/atomic/machine/plasma/TilePlasmaHeater.java index 4ab1db62..80a69816 100644 --- a/atomic/src/main/scala/resonantinduction/atomic/machine/plasma/TilePlasmaHeater.java +++ b/atomic/src/main/scala/resonantinduction/atomic/machine/plasma/TilePlasmaHeater.java @@ -67,11 +67,14 @@ public class TilePlasmaHeater extends TileElectrical implements IPacketReceiver, { if (energy.checkExtract()) { - if (tankInputDeuterium.getFluidAmount() >= plasmaHeatAmount && tankInputTritium.getFluidAmount() >= plasmaHeatAmount) + // Creates plasma if there is enough Deuterium, Tritium AND Plasma output is not full. + if (tankInputDeuterium.getFluidAmount() >= plasmaHeatAmount && + tankInputTritium.getFluidAmount() >= plasmaHeatAmount && + tankOutput.getFluidAmount() < tankOutput.getCapacity()) { tankInputDeuterium.drain(plasmaHeatAmount, true); tankInputTritium.drain(plasmaHeatAmount, true); - tankOutput.fill(new FluidStack(Atomic.FLUID_PLASMA, plasmaHeatAmount), true); + tankOutput.fill(new FluidStack(Atomic.FLUID_PLASMA, tankOutput.getCapacity()), true); energy.extractEnergy(); } } From d7cb8c8a64bff07dda0e34c6a9b9065f8c2b277a Mon Sep 17 00:00:00 2001 From: Robert S Date: Sun, 15 Jun 2014 14:06:10 -0400 Subject: [PATCH 40/62] Created a debug frame for pipes, improved visuals of debug frames --- .../energy/grid/MechanicalNodeFrame.java | 10 +- .../mechanical/fluid/pipe/PartPipe.java | 52 ++++++ .../mechanical/fluid/pipe/PipeNodeFrame.java | 150 ++++++++++++++++++ .../fluid/pipe/PipePressureNode.java | 6 + .../core/debug/FrameDebug.java | 19 ++- .../core/debug/UpdatePanel.java | 13 +- .../core/prefab/part/PartFramedNode.java | 6 + 7 files changed, 244 insertions(+), 12 deletions(-) create mode 100644 mechanical/src/main/scala/resonantinduction/mechanical/fluid/pipe/PipeNodeFrame.java diff --git a/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/MechanicalNodeFrame.java b/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/MechanicalNodeFrame.java index 6f38222b..cf2f735c 100644 --- a/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/MechanicalNodeFrame.java +++ b/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/MechanicalNodeFrame.java @@ -3,17 +3,15 @@ package resonantinduction.mechanical.energy.grid; import java.awt.GridLayout; import java.awt.Label; import java.awt.Panel; -import java.util.Map.Entry; import javax.swing.AbstractListModel; import javax.swing.DefaultListModel; import javax.swing.JList; -import javax.swing.JScrollPane; -import net.minecraftforge.common.ForgeDirection; import resonant.api.grid.INode; import resonant.api.grid.INodeProvider; import resonantinduction.core.debug.FrameNodeDebug; +import resonantinduction.core.debug.UpdatePanel; import resonantinduction.core.debug.UpdatedLabel; /** Java GUI used to help debug gear information @@ -31,7 +29,7 @@ public class MechanicalNodeFrame extends FrameNodeDebug } @Override - public void buildTop(Panel panel) + public void buildTop(UpdatePanel panel) { panel.setLayout(new GridLayout(1, 2, 0, 0)); UpdatedLabel tickLabel = new UpdatedLabel("Node: ") @@ -56,7 +54,7 @@ public class MechanicalNodeFrame extends FrameNodeDebug } @Override - public void buildRight(Panel panel) + public void buildRight(UpdatePanel panel) { panel.setLayout(new GridLayout(2, 1, 0, 0)); @@ -91,7 +89,7 @@ public class MechanicalNodeFrame extends FrameNodeDebug } @Override - public void buildLeft(Panel panel) + public void buildLeft(UpdatePanel panel) { panel.setLayout(new GridLayout(3, 1, 0, 0)); UpdatedLabel velLabel = new UpdatedLabel("Vel: ") diff --git a/mechanical/src/main/scala/resonantinduction/mechanical/fluid/pipe/PartPipe.java b/mechanical/src/main/scala/resonantinduction/mechanical/fluid/pipe/PartPipe.java index 12ca5efd..3805be37 100644 --- a/mechanical/src/main/scala/resonantinduction/mechanical/fluid/pipe/PartPipe.java +++ b/mechanical/src/main/scala/resonantinduction/mechanical/fluid/pipe/PartPipe.java @@ -1,9 +1,12 @@ package resonantinduction.mechanical.fluid.pipe; import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.MovingObjectPosition; import net.minecraftforge.common.ForgeDirection; import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidContainerRegistry; @@ -12,6 +15,7 @@ import net.minecraftforge.fluids.FluidTank; import net.minecraftforge.fluids.FluidTankInfo; import net.minecraftforge.fluids.IFluidHandler; import resonant.api.grid.INode; +import resonant.core.ResonantEngine; import resonant.lib.type.EvictingList; import resonant.lib.utility.WorldUtility; import resonantinduction.core.ResonantInduction; @@ -19,12 +23,14 @@ import resonantinduction.core.grid.fluid.FluidPressureNode; import resonantinduction.core.grid.fluid.IPressureNodeProvider; import resonantinduction.core.prefab.part.PartFramedNode; import resonantinduction.mechanical.Mechanical; +import resonantinduction.mechanical.energy.grid.MechanicalNodeFrame; import codechicken.lib.data.MCDataInput; import codechicken.lib.render.CCRenderState; import codechicken.lib.render.IconTransformation; import codechicken.lib.render.RenderUtils; import codechicken.lib.vec.Translation; import codechicken.microblock.IHollowConnect; +import codechicken.multipart.ControlKeyModifer; import codechicken.multipart.JNormalOcclusion; import codechicken.multipart.TSlottedPart; import cpw.mods.fml.relauncher.Side; @@ -39,6 +45,7 @@ public class PartPipe extends PartFramedNode averageTankData = new EvictingList(20); private boolean markPacket = true; + private PipeNodeFrame frame = null; public PartPipe() { @@ -81,6 +88,11 @@ public class PartPipe extends PartFramedNode Date: Sun, 15 Jun 2014 14:23:51 -0400 Subject: [PATCH 41/62] Merged left and right display for debug frames, implemented better display for gear debug frame --- .../energy/grid/MechanicalNodeFrame.java | 89 +++++++++++++------ .../mechanical/fluid/pipe/PipeNodeFrame.java | 29 +++--- .../core/debug/FrameDebug.java | 22 ++--- 3 files changed, 85 insertions(+), 55 deletions(-) diff --git a/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/MechanicalNodeFrame.java b/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/MechanicalNodeFrame.java index cf2f735c..e7c604ac 100644 --- a/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/MechanicalNodeFrame.java +++ b/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/MechanicalNodeFrame.java @@ -1,5 +1,7 @@ package resonantinduction.mechanical.energy.grid; +import java.awt.BorderLayout; +import java.awt.Dimension; import java.awt.GridLayout; import java.awt.Label; import java.awt.Panel; @@ -7,7 +9,12 @@ import java.awt.Panel; import javax.swing.AbstractListModel; import javax.swing.DefaultListModel; import javax.swing.JList; +import javax.swing.JScrollPane; +import javax.swing.JTable; +import javax.swing.table.AbstractTableModel; +import javax.swing.table.TableModel; +import net.minecraftforge.common.ForgeDirection; import resonant.api.grid.INode; import resonant.api.grid.INodeProvider; import resonantinduction.core.debug.FrameNodeDebug; @@ -54,44 +61,73 @@ public class MechanicalNodeFrame extends FrameNodeDebug } @Override - public void buildRight(UpdatePanel panel) - { - panel.setLayout(new GridLayout(2, 1, 0, 0)); - - Label label = new Label("Connections"); - panel.add(label); - - AbstractListModel model = new AbstractListModel() + public void buildCenter(UpdatePanel panel) + { + panel.setLayout(new BorderLayout()); + TableModel dataModel = new AbstractTableModel() { @Override - public int getSize() + public int getColumnCount() { - if (getNode() != null) + return 4; + } + + @Override + public String getColumnName(int column) + { + switch (column) + { + case 0: + return "Direction"; + case 1: + return "Tile"; + case 2: + return "Torque"; + case 3: + return "Speed"; + } + return "---"; + } + + @Override + public int getRowCount() + { + if (getNode() != null && getNode().getConnections() != null) { return getNode().getConnections().size(); } - return 0; + return 10; } @Override - public Object getElementAt(int index) + public Object getValueAt(int row, int col) { - if (getNode() != null) + if (getNode() != null && getNode().getConnections() != null) { - return "[" + getNode().getConnections().keySet().toArray()[index] + "@" + getNode().getConnections().values().toArray()[index] + "]"; + ForgeDirection dir = (ForgeDirection) getNode().getConnections().values().toArray()[row]; + MechanicalNode node = (MechanicalNode) getNode().getConnections().keySet().toArray()[row]; + switch(col) + { + case 0: return dir; + case 1: return node; + case 2: return node.getTorque(); + case 3: return node.getAngularSpeed(); + } } - return null; + return "00000"; } }; - connectionList_component = new JList(model); + JTable table = new JTable(dataModel); + table.setAutoCreateRowSorter(true); + JScrollPane tableScroll = new JScrollPane(table); + Dimension tablePreferred = tableScroll.getPreferredSize(); + tableScroll.setPreferredSize(new Dimension(tablePreferred.width, tablePreferred.height / 3)); - panel.add(connectionList_component); - } - - @Override - public void buildLeft(UpdatePanel panel) - { - panel.setLayout(new GridLayout(3, 1, 0, 0)); + panel.add(tableScroll, BorderLayout.SOUTH); + + UpdatePanel topPanel = new UpdatePanel(); + topPanel.setLayout(new GridLayout(1, 3, 0, 0)); + UpdatedLabel velLabel = new UpdatedLabel("Vel: ") { @Override @@ -100,7 +136,7 @@ public class MechanicalNodeFrame extends FrameNodeDebug return super.buildLabel() + MechanicalNodeFrame.this.getNode().angularVelocity; } }; - panel.add(velLabel); + topPanel.add(velLabel); UpdatedLabel angleLabel = new UpdatedLabel("Angle: ") { @@ -110,7 +146,7 @@ public class MechanicalNodeFrame extends FrameNodeDebug return super.buildLabel() + MechanicalNodeFrame.this.getNode().renderAngle; } }; - panel.add(angleLabel); + topPanel.add(angleLabel); UpdatedLabel torqueLabel = new UpdatedLabel("Torque: ") { @@ -120,7 +156,8 @@ public class MechanicalNodeFrame extends FrameNodeDebug return super.buildLabel() + MechanicalNodeFrame.this.getNode().torque; } }; - panel.add(torqueLabel); + topPanel.add(torqueLabel); + panel.add(topPanel, BorderLayout.NORTH); } @Override diff --git a/mechanical/src/main/scala/resonantinduction/mechanical/fluid/pipe/PipeNodeFrame.java b/mechanical/src/main/scala/resonantinduction/mechanical/fluid/pipe/PipeNodeFrame.java index e51a98a1..d243ba66 100644 --- a/mechanical/src/main/scala/resonantinduction/mechanical/fluid/pipe/PipeNodeFrame.java +++ b/mechanical/src/main/scala/resonantinduction/mechanical/fluid/pipe/PipeNodeFrame.java @@ -1,5 +1,6 @@ package resonantinduction.mechanical.fluid.pipe; +import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.GridLayout; @@ -52,8 +53,9 @@ public class PipeNodeFrame extends FrameNodeDebug } @Override - public void buildRight(UpdatePanel panel) + public void buildCenter(UpdatePanel panel) { + panel.setLayout(new BorderLayout()); TableModel dataModel = new AbstractTableModel() { @Override @@ -93,11 +95,14 @@ public class PipeNodeFrame extends FrameNodeDebug if (getNode() != null && getNode().getConnections() != null) { ForgeDirection dir = (ForgeDirection) getNode().getConnections().values().toArray()[row]; - switch(col) + switch (col) { - case 0: return dir; - case 1: return getNode().getConnections().keySet().toArray()[row]; - case 2: return getNode().getPressure(dir); + case 0: + return dir; + case 1: + return getNode().getConnections().keySet().toArray()[row]; + case 2: + return getNode().getPressure(dir); } } return "00000"; @@ -109,13 +114,10 @@ public class PipeNodeFrame extends FrameNodeDebug Dimension tablePreferred = tableScroll.getPreferredSize(); tableScroll.setPreferredSize(new Dimension(tablePreferred.width, tablePreferred.height / 3)); - panel.add(tableScroll); - } + panel.add(tableScroll, BorderLayout.SOUTH); - @Override - public void buildLeft(UpdatePanel panel) - { - panel.setLayout(new GridLayout(2, 1, 0, 0)); + UpdatePanel topPanel = new UpdatePanel(); + topPanel.setLayout(new GridLayout(1, 2, 0, 0)); UpdatedLabel velLabel = new UpdatedLabel("Fluid: ") { @Override @@ -124,7 +126,7 @@ public class PipeNodeFrame extends FrameNodeDebug return super.buildLabel() + PipeNodeFrame.this.getNode().pipe().tank.getFluid(); } }; - panel.add(velLabel); + topPanel.add(velLabel); UpdatedLabel angleLabel = new UpdatedLabel("Volume: ") { @@ -134,7 +136,8 @@ public class PipeNodeFrame extends FrameNodeDebug return super.buildLabel() + PipeNodeFrame.this.getNode().pipe().tank.getFluidAmount() + "mb"; } }; - panel.add(angleLabel); + topPanel.add(angleLabel); + panel.add(topPanel, BorderLayout.NORTH); } @Override diff --git a/src/main/scala/resonantinduction/core/debug/FrameDebug.java b/src/main/scala/resonantinduction/core/debug/FrameDebug.java index 2e26471d..e489cabe 100644 --- a/src/main/scala/resonantinduction/core/debug/FrameDebug.java +++ b/src/main/scala/resonantinduction/core/debug/FrameDebug.java @@ -44,23 +44,19 @@ public class FrameDebug extends Frame implements IVectorWorld Border loweredetched = BorderFactory.createEtchedBorder(EtchedBorder.LOWERED); UpdatePanel topPanel = new UpdatePanel(); UpdatePanel botPanel = new UpdatePanel(); - UpdatePanel leftPanel = new UpdatePanel(); UpdatePanel rightPanel = new UpdatePanel(); topPanel.setBorder(loweredetched); botPanel.setBorder(loweredetched); - leftPanel.setBorder(loweredetched); rightPanel.setBorder(loweredetched); buildTop(topPanel); buildBottom(botPanel); - buildLeft(leftPanel); - buildRight(rightPanel); + buildCenter(rightPanel); this.add(topPanel, BorderLayout.NORTH); this.add(botPanel, BorderLayout.SOUTH); - this.add(rightPanel, BorderLayout.EAST); - this.add(leftPanel, BorderLayout.WEST); + this.add(rightPanel, BorderLayout.CENTER); //exit icon handler addWindowListener(new WindowAdapter() @@ -135,9 +131,9 @@ public class FrameDebug extends Frame implements IVectorWorld } /** Left are of the Frame */ - public void buildRight(UpdatePanel panel) + public void buildCenter(UpdatePanel panel) { - panel.setLayout(new GridLayout(1, 2, 0, 0)); + panel.setLayout(new GridLayout(1, 4, 0, 0)); UpdatedLabel tickLabel = new UpdatedLabel("Valid: ") { @Override @@ -147,12 +143,6 @@ public class FrameDebug extends Frame implements IVectorWorld } }; panel.add(tickLabel); - } - - /** Right are of the Frame */ - public void buildLeft(UpdatePanel panel) - { - panel.setLayout(new GridLayout(4, 1, 0, 0)); UpdatedLabel block_label = new UpdatedLabel("BLOCK: ") { @Override @@ -162,7 +152,7 @@ public class FrameDebug extends Frame implements IVectorWorld } }; panel.add(block_label); - + UpdatedLabel meta_label = new UpdatedLabel("META: ") { @Override @@ -172,7 +162,7 @@ public class FrameDebug extends Frame implements IVectorWorld } }; panel.add(meta_label); - + UpdatedLabel id_label = new UpdatedLabel("ID: ") { @Override From 17a90ba782a6169dadf5f350d79bd7d0cbb62413 Mon Sep 17 00:00:00 2001 From: Maxwolf Goodliffe Date: Sun, 15 Jun 2014 15:42:21 -0700 Subject: [PATCH 42/62] Tweaked electric turbine sound to player every 20 ticks (1 second) instead of 1.3 seconds. --- .../turbine/TileElectricTurbine.java | 6 +++--- .../resonantinduction/sound/turbine.ogg | Bin 13756 -> 11294 bytes 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/atomic/src/main/scala/resonantinduction/atomic/machine/extractor/turbine/TileElectricTurbine.java b/atomic/src/main/scala/resonantinduction/atomic/machine/extractor/turbine/TileElectricTurbine.java index 0b805335..3caa282c 100644 --- a/atomic/src/main/scala/resonantinduction/atomic/machine/extractor/turbine/TileElectricTurbine.java +++ b/atomic/src/main/scala/resonantinduction/atomic/machine/extractor/turbine/TileElectricTurbine.java @@ -41,11 +41,11 @@ public class TileElectricTurbine extends TileTurbine implements IBoilHandler @Override public void playSound() { - if (this.worldObj.getWorldTime() % (Atomic.SECOND_IN_TICKS * 1.3F) == 0) + if (this.worldObj.getWorldTime() % Atomic.SECOND_IN_TICKS == 0) { double maxVelocity = (getMaxPower() / torque) * 4; - float percentage = angularVelocity * 4 / (float) maxVelocity; - this.worldObj.playSoundEffect(this.xCoord, this.yCoord, this.zCoord, Reference.PREFIX + "turbine", percentage, 1.0F); + float percentage = Math.max(angularVelocity * 4 / (float) maxVelocity, 1.0f); + this.worldObj.playSoundEffect(this.xCoord, this.yCoord, this.zCoord, Reference.PREFIX + "turbine", percentage, 1.0f); } } diff --git a/src/main/resources/assets/resonantinduction/sound/turbine.ogg b/src/main/resources/assets/resonantinduction/sound/turbine.ogg index afcfac0b2d12f89a7400ce97fd98860a33373316..ed9133a1a92079ec8a75059d66fb7cb9934311a0 100644 GIT binary patch delta 8195 zcmV+eApGCFYo1tCPiJRS00IC200000005pI00000008ZbvswWj0d{Y4Vrg>#00001 zM63V+|NsC0zWe|H|NsC0xB*XRXHx(G0000000000o*n=I0RR91Sb=~hu~cLXf1Vxy z00IC209x%(Dj6s!xU90Uu&uYTtg@}UytJ*fthltexv;G~(d69czpINx^qISDsfY0k z^SRq|bN!r_DphKHe0;Pq-+c4USCs}l)6l+kfaDtRbV&GA*%} z^U?d@5CM{z$$wK}^?}+9gqU&UJwRf&+dQtLzm&4)xt0PNc`8SD_LDt+e`&d;_D1%7 zmWroB9x0=gaGb082x6uW8Cews^7X2jo%%BD4Y_W4>KJ!PpHRkD0DdYhVvGX;;QeNb zQXK<00FeSG+5`YAD|DqQb7DwH(g>T5J%7pWfB7R;&COM@i*boVRaHc@;zKo`c{m;! zq`BF&L)O{`66^K6m$4Gve=bDvwZ9XCS18JKM0L#)>egsdYq#MQ@i_4H`C<38$kNrW zMNRDOYb9#c+P*!`vz-??Yu8uXcm*@(CCcbdjizpDqLmI6d{31#b3)0M)(<|^lLl4? zmBO((mB=)2&j>!*@%) zO4LLLp=3AX(wGo%f93>>g+9g&#Fae!z-Y_$3I@eKRbRIRnO=Js0+zCyEOG zT3yT-g_tYA{vCv#6?)CG=WGaI)k*=|66PTG=f)Oqwyb*wH~CFR^*vQLuM#ysE5*vW z-AaF(dtXnghwPa2Lq}AVR>Xdsh_=(u{KyG6 zJImeGVMDV*eTn1WR`TXI%z43{EzzPfE#+4#e`A>pkaMsIVAaYp6?0}xO7r_n zkMd;KXtEx*wvF1eYer;#U)Rv{xH(dxFK~4H#yXF4vrZ>}lRaP*S5Y1>R(k64$X|#d zq^a5I)>afi;VhnzZXuS11l7L}kAKkINr>K&c1U>_)XneJ=QXx%q)iNR5I z6^@r5f7+Ei)`RxcD+h)hsU5_P0zDFJW7<_78QAWej~snksXHH@TCHXdDxd+}7h%>X z)Jg730UKR{m@Hzx^HCkkKY|Vw@V=Sk6x~-|zR*vqMl!>d8 zm0vYFEH+PJL?L&4)pYIV*X#-sB89REJLKeJ;;u|~Kai;&>tO0fnOnWDY48EF+((1wXCcZF`V3VTJKx0N9#M1 ze>}6F>y%P`vrV|4l^fkV_hxN~M&iK2YtOlNJ8VzI;PX}MAxhx+{(yt47}ot|bi z1>w&R-TGTPJA209$V{}xl#OTiXXY4FDz~%7SAxL_(qApiF;&;wte?SnEb_Wv+MNrE)c?X_Kt!9pcSU?&6)#(LA zB0JV@AOx&h$x5*#h}p{+&l*A;n}#o*hv>@v)x6n?h|jwTbx+6i`r1zhG94bC=4yj_ zKO8X<80y1{ED^I(kl6U$>~Y!QcIB--AzfG#6|M0!#C~Qz25SCG`ReYQ)YIURfA}W5 z?4mS|3EFwNNmqG9@p9N#*dhZ{qYHar8j=v2cr-i5Y9FbfnEJJ0s#+OQTmnZ36WR{O zm3wF&Tb;`oU@V{nzoG9FM3~iQX%GQUv;e@WdC3w@5}iN$3;T4D^L>H^T99jpZPiN< zv?C&=UR`f8btdF4^_rMs7N#yQf5y(+Z8F_8aX$3=Gg7MN^1|t@jecdNs*O2C$;|a@ z?3B$|I%k?!{-6|#fS99%$;50#CzXAG(OGJ4Fiv)>GaOynqeicDp@hPm<3+UYN)gA7 zotI4}B5F<+3e>{)V`Tbe&O}SGM^Udw=?tDaEqV?>Fo648TgQ%|$2|lRe*vsowNk7k zveA+^yV>s??XBm&n5ZH!eIE@!8&$FHY3nIk$YtQ}Zj&7LC59L;Y3kFQF*x11yEXQf zUXla^r;H|JP>@cQPE8kIZt|aF^I`2K9y-<+pYTxJtNKPPRrN?<9*0%ZUXoK zfV+|XYBI?QaiRtQmX(r~B;l+h$@+*)U#sj=Fb* zPp68TG4GjL*0FeTMe~x=f2Zm57Ngast%-%FnC+*kl&c8Nwu`>3f9s=MSJYM=b8i&t zY%D&5n7jAFyoBU}=iNOTy8h9ARARH&;^&5IboPl1+<;f-dSnW4<(2&vcO7}zuc^EC zX`>Bx)(ELUw6vVVbTSGWw{{YiWim)b0e%YYvO?p>1;BH$J4Zs#5$$B70jpLPNUQ+> zML0=RTJ*DrZf_vQf2Xf--1Lm+h-VYqgSJp?EtS$;-Pb}Vea&XGqY^bK8^19Er(0b6 z=H1&PKkQ%pyy%Ndl?!1v8F-m@ad&1Pm+gF55uPT*Ddi7XnpC@}-LwnYtdK@6Ql^l( z*xAvYn^kdm=q4_7{oJN#&YjGjSB*dC=xxkkmO>6raylKcf9!yY$sd)S!%(m)`*~nI zIb}F@$VU$zTOH#PoIt=Dp6+uYCG>VmK*RL{09ICDD=%S2mhXMGliODK&*6PmeSTZy zk((&k0QX)+vPJFY=3tKp*7J$z1~+C3B0Jfov$V%Wj+Nk;7MEweFW32P)>ba{B`h=2 znKAEY^kg>&e>sVCxBG?cxh9Zbv`yymAb7FocYlWG$7{G~H*dI-&TD-dg<{jJ1&5a= z%_#f_(UpprpY%-YB+MN4ftM?KywUr0zvm9z4rDK_4 zDl>BU&O1u}r*8PRzb+KNKV7efdv@8sn?6nRh5K2(fAogwr3o!=ljFwoUNh2=b%w^n zeNM_JZ*aM>rsP0+Ih!udIN9(r99KntW6pBz)rHksN`GEhUpGCXnWk#?>^@GG91X|z zq3J?haws_1%Gql@94#&o3Jj(2O8+PGfFyJEi5iKL@#ilb?)){!WG^LL-;rvd(2 zo%|Fae*oB5*srX znEvQnYNR8QjfL%X(;%7buo9c9K?C4{4YL@ z{G+QT)}zpdR8*vO8&BeGDX(nP_EY}9h+y+ye;}Ja)K~qBz|3r#elsMUkt|FQiGAck z9IR5zgac0)IriZ8WnuK3KyU9t@L@Uw-a4K16qN)3yx?s((%Q(i0UB7fQoyznW)6Eh z*Q#e9thT^y>KreJ`X@>x}}w;REp zfBd)*+IvtH2dpNu))uP%2whrFu(D1u4LkVG^>TQI?lo!Z>=`IJ%#m=dHLe!37?N(o zoPj|YBPValu=Ox7)SH)g89i=0A?m(jm@^Appu22N5SMAU9W6UcTmC7Hbc8ZLV+D9W z4rh*j)oEvk$ktke6DslI%ib)6s^hf1?Ck z3|z4i4DDIPbHR|XGo~7dj7I=|`mDME`~bjr=+I?`ZYSpjx`9>83MAG5fR%7KssEal z|F7A0?_J}|&*!9h?@C6Zn%24~f@^d^hw9Pt+V#A~rme@j6H^Fr(g%+oCcqX)kj(C< zhS$CXb)OA?_zS!W-APS#I#qKue}+WP5L;RH1d}5GvHmx-=ZIASG>mmbmf4l*T~?n2 z$pxHkcKb8|>B=>ey>9I&JXuV#Zl_m%nu@Ws-6a@9QjpB$vWR`nMW>erehN)xo^ppE z0enXewTm%lfZl)(-~=}SumT%w#S#pspTYDuo}8&?5#MT5fY^V;NE5xPf9iBW_ytkw z-9p@t)6F+(B$-mz%F#uy9h@v2AbOSOI@w|Trh0EW;?%mK>*|W$5`meKod-jRl&9Qy z`M&;^z7~4Moy3)FjMIdbr3PhmZu!`JsM<`fpBik;8em2 z=qPWo1!uj zlUhrC7Kg6m#UTRDM)yV|3YDol_BrHc1UkF-&9T_dzV;sy(~O#}e;j@^qp7A!Yj)G6 z=F~N%-7_o;y6bJ{<%>C}d9yuN&ndk5ziu68jDNT0)?FmP_t=A2^y z-b$@z&VsNCSX90v%op@w>y5fIS8BkC764dTN>(ZxOx;X7>OMg#|Cr~k7HI7r90OUZ zhsW6L|6E#%bgON>J)!1eeX3$j5p{VB=TpPBhl9y2Y z7}AFF(|9-LQwSAI-c1w}YR*aE23|__bV>tKV8Xr4Y!Z_ke?7TgSxQoqgv;bKo>2EL z&piD_)$nv9Jw1m1wRyVUJ-=fjrtR^Vil_Sj^<~nh%YVb=xilS$!_KLJ4`F0qXhRRJ z_)faHk0_Dl$i5%b?6z}Fv69s2O3IkqF!$Nz>-HRXmw!&3OFcTapb*Yu@FJ$8IXj}x znH(rPySV36fAiALtQtL&lby&Mfk0l4>|*f`Xw-@Od~}PCcDthqPiJRS00cy=00000 z005pI00093004t^C5Pha%ns;^ijqTX^{sPLP@e?0p>w!^)wH`pl)Vu5cczEtWJ zJ3p(<5@JI8lVF(A>J{#PzpahWDX3EhpcE80sh)SfP>i82v{`f-qVvvEjuWtgQCXB~ z3v9+_xb;gsAC?nqqqZ!2tLU-Dx-Q)*EY~X;`(a9Ev5(n6=Wc&Bf=6!jpFy+s-u9 zb3-qmFOKTj1~Fcc8_sCTX7+)=y-Dy-(?&gyGrKqM{b;(0Adk*bBg%Os4aC?mSjg5@ zL$%6P-<@)*+G&cjoaWi)q9>K1T5wNVDm!zgf2KLqVQ|d|MXpTQL)|2kBZHF@lWT!K zR1RrBFFn|y@0HM#x>y}de*wB ze>5oZ;VCZ^b#eWp!ri3m&P=|Q5chX9+Ods{gS>?g+?%5gJDWp?;-FJS=7Ym*Y5Av1 z*{tG99u9BCTRRluf_E2;$gFFejd1zWYvQ)ev9V8;o0I$4BmDRYDRi|zgPO4V5sT~{ z3_?f`&H>(f9nBOF0O0l!C)p6{bfNx<*eA)vfj5CY7@1~g~jAy#pqb$1MnY-iZ>(K%8s@%B`CzHC8}_sm!B zK>BZTXB7X)v+?d>O2{zk@w8jk!z$V!C`2{!Bdiu$^3K*vcOHS*!Wjjo38J;^e~9$| zw5~-4%AfAvuo(h-H2_d7 zkZk}!jU2=HW*tp^#uWC! zi;BfY<0!-o*N3he{yJ@be+iDD0eqvUn=+7{f&}0M8vtNs1-2p_#wzAG*ZxHHzV01s zjBI0F@nY+dUe-o%TzV9bDzGk9={|VtSFAnD!&7*OT%`m<+mCbWgQVilBM*n|pP-mg zjE?-Bp8p#v=N;mdbK7a|s==kT@EtPG zhJ&OtqUi?gD=V;-6HFq%esSjQjjzl8zQO$QxBC2an#26JY}2IsxZc=D%4F0xS6A3r z8qV!uU�Kd_bR!f40L|$a6o4&lpyPQBNt*Ak>|Bh<_&T9oIu_!pc}=#)M?&MIYwKk~_pj&z~} z{+a~N*+b-*2EIC-WluqbRR)#s6rdDuufcPRF5PO5}pZXN0(G9P-3U8?EW{bbPl zos>Q4WlG3`dbe}~zn|vb6zTQSK`NgknxH>&j=lttvvHXI*B5F>vNMASF4g}kq>&o! zjHHeHFjbu6f0tV_g(N$&mK}ha_c(tP?cLTi5mwAYQ1lr`0G>LnY)VLEP=NgsrHBd0 z+8hRGa5Vr>tiZM;Cb)N_r!SSKY}wWm(~RVP$dmaCeCvji0lgvZIRlf{)K58`dX9fJ zl@fL&qMtRMZBUG_#L3v_AGdyP29+nKT&H40z9%o%e?51oBUGxxL}o^JOBIW6XQPKZ zxt;M%e}%edhK_=HuZ~Jtu^rz?nRityS!RVc=G)X>9ex{Agcg_KS>hU#oUq>yuttPP) zcT0E5RKH4Non=m{-96$Wa_N7@e^H&GzP^V-oGXKxq^~n|$0Bn;z!dN&(x-5}EO53p4EJ zC({4KI?Y8)smA)!>0ubTJ64r-T?@CH!rrDsP_(YsY@obv^C;Tkw?`nVxFvDr!`{bBTj0*mtt0Dy5Y*cb zLMB$*iHW2;hcG}WwBv!JkuR(Yh=!9U``?sO<~9}@^yY%$n`#;Is7(sdV*{Q_O?piT z0s#xWw4ci3Ff#(sY2nlhe*jnsY~>n6Ml{|g$4VxwZ9JoFe!ai@ZGA_myo!!HFO3*H z++;0@t^HVOg09eG65;hF6gp*UX>98&gS=vgd0sm5^Uc;XWpKuhX(s*WV3G-_5K;7je|2>{sM|e_T z&U!6X70bP=3RKlAhrb+;&F|vq(^Qm0>jg_h#sEdn3#c$qacw!X7{=a)aEL=<%V3|! zSW`b;G*VuK^wu{9eu{N}%K;)MS+%YBS^7*=g=sn~nct|nS}K&vd* z!REITK4;HXcffxR%yX5%Rx{gP(3l&rWd{B_ZD|QX0A{$G zsVK7{obpry04po7B?%^4LvwikM^ErzJOm`fYJ_TC{nc-Me|)*RQ$LEs z0^sIiC6_!N<@6SXn-F|C{pCR06a#lfCc6?(jQ zn%OH+@)!O{+-s3(Z?ISOr?XgIj1Y1fWo2=kwzGH!86LSu4el=MU9GPawu8xjy@9n`D_Jt?rgl^!fhL#F6x(Zl#Yb@*M-LlT>%2}q%5b`AQe-uy0u=Y@#6t_b$Cg%O!&z{sa z2kxj=_>ed`B?j465^Kk+EM9EE16jSS(ri1qLc1+BW7-jFuA2_^w6=v4er2@J{z{$w z9Ekt`zl@mF8_0H!012F60|2b7z_t=jI9qFDv;61xaBlTjYkp2AeGXEgnw7#MO}!&* zS@t@5e_5Ii@}B{`UpdtRAXon4*?I0^Q`%#-els~LU2i@8er@LD^@G3}J%)Lny3y0D z!^6rUo{g`oX7kf~n#c))#&$&GQ%9q#aMyOaV0~M~+uKxfYG<%R=J~p=^oY^6qiBd$ z45t_8O9^>$xxG)TbMo}oE%$Zi{A~apS)J;3e;^x-26#@4fgbim4>)?{9$2+f6h*>O zp8gzv(QdN`-QGUpJ;zH(`+)t`;^nZDVPK~iT$@nu-B7QuZk9K1ivZf+vUO&&9xqas z;XQZx4SZX!yw-}J%cc17Y~Zzv pC0|!;9vY9e^S0P;lt5QI0ED$iO6Us@5*WRe7~@V*F#1lvwEzWB1DF5+ delta 10676 zcmYMabyU>f^Y~9m35bM9gOqejgGje@cQ4%~Je5WeqZk7g#1(xm-X_l^~`T2T( zzUTbzKX>k&Gxv`#9?Ek?-@I5o9gSj z>#7aV48L#uKIA44vo?|^#FMb{{u!R_O=aB^|t0ipqFTRGI`zu~qg31=PTtQK+v zQm=R7Bw^CcrGHX0pPT0`o1AZ+KM>JZUj_zhWox{8*e?w)S=cGYw>fm`zxqvb-)Xj% z-tO6=FgRAFD_ib!cNc?{on%#Z%OpRUq?P)N~omXeF0ts0NCvo6HIfmdcDft0qQ{^GFMyJ5#y+4i4OD*z(N z7})m}zIoh1*tJ7dmaqq`(4{5vc!^M_l?g-%eaPv+ihX8rX)1Otgm9Ir5H61V*=)kz z;8Zy)N%^a9B*xwTmb%We(-mlr%k>cn<(MsGp>b8jv3F3M4!o=i_)Uq699Ep{Xj zApl`$pkfs@VUGRU;cFP=gsmpA!)Llo?`*1Dl81bVzFl1;!<<=stda|Y)L=|~5PZls zv|?JYe#v7xL=pl$>4vchr~yNk0}IK~@|B%;A(1;x0Zk9#mlN_kTORKco@7!c&7NWOOX};FJebxfalh{f{hoI8%VGfFfy8%8 zJf}paTeh61=S%D>12+>PL}y4~GUH3kaB8HrdH+F{&@to7JTH_59UUDF2LkcsOoIio zvuLOF>$i7rDmy1tiZT3B#+Y|f)l!$Z>ZC@QvcW3zDQd-7~^2<0wm zanV3FQ4%}ILPPr+2uTsP9i@!FNY++Jpr35ZaVTHCgSArIY8yV4#4O|x-}BAi!U3`? zWvkh=Lt`J{Z-U;0@qdo^*@SFnU6`6d zKfKZO`%!4(ejWH;-!T;ycy(-pix`koM0!VPyF6R0UzlcMS^c|1E=zs-5$8Pdg;wco zqe7HEJaB}GOV)EL!UNUip_VU_kG`9_7BS*Ei0xG#MBSk2-4~K|fo0$oKxBr=T>km1142t{sr+2bB5b=my~XjhC`}b`TqSt1(2X5aJis91o8l zkUCToa86%JYvjX2I83jn;&CT-I#b|6Rl|UrCpIf*Hf1_VF{t)Yc6?T+JVw>KYeqfS zWGigd=X;I|3CFg7_7Q7-8`<$V`uIF0|CJUSqOSDNS)&wI$Qqk4uPd88p_o^$NV~9R zHlIB7wiN>N6fr+s9(ZvZ@&K&%>%@P?TSy}QMjOC9CO+|^V5aA(^#}Gt^F^{>8HVTn z9Q%DJH1V4wq=bD>V#GM5ti#Zp2fv)h%>CkpreZLg3TyRHcjDYmx4oB?U$W~4xG#aD z`pNS(-ASqS{Al!W;(8#o;nLNL-wO~jaDI+e3)AEd^!#}j>$zuXLDRy(b0p*Q*#)VS zEc+7epU0oQGD8SdJ()gY=;^1EC?%kc<7*yMz4t4)`|-ixAR!Ms_=-n_ABX+5c)~Qh z@->K7mytuD9yQ?aH8B5<&~sdPHt;hns=DLJeo$kYo7?n!+PbF&=aE(ngb(Di1z`^@ z?`s;bmssDH{%}6r!_`boO0L+Ip0l*gkn{&>j~|ocJXvwds7#hcKSoMyojCL*bAy-L zNj`}ADEB^?OSvV};<-z)?#g9(bKyN1WUt^wQlsIttWOqOnmgbwP9U2ZRuw{?96@b0eiac20d+@{1Cjo|Ly6IN|GQN~EyrQfLRu(Rh|o-FdCr=wAz# z32FQK4=sI)=Ni#IEzg|M%xL;v8>?a3f#*%nw!4n=vbw%UftC0jW5Br#I#bTWuG)+U z%jGxo7i)@?V<^GYNY~@EuNnl9Km9_jsHiAYNZ5LN(m8O^w9MR8j+41Y5dzy|9a?K^ z_FdF*n{rGh4M9;H;wjo$w=kd{uty#$uXTfs;$^Ec9}JsYgB})kRFv3{3RhC}J)oX2 zw)xhM%($U_3H|uUCqSj~os?tmvwecGCjo%)7g*Xg;tI*|7Nlz$oHpQD%5ofAoo;$^ z-f`iKH*Og?7IX_>3cg4IXgK~#Q}*qDVi>$ap+J2iqg=%c&qV(7JhocnDDATK=PMqU zj!uF#I267)R>oa5aamKEaCkOQp>l>lb4kB@@+obfa3OmU2T00T!iZK$li1}~dbXUx zOz#s?Z+Jg1smRwjYj`(Tu=+&G#=o9JmhNi3Cue5cpEM_w3<0)Bd-NF5=T3Ye8{(b4 zN@;c6D>sk(?Yp-rk6(Kf^bcF7^zR=>SPypvlb?gP0>g%sU5M(Uc!Uxq>z$N}DfB%7 zK64InGIn)zKuL=t@Jl>m zi(oIewT`0%v|1`3hRinKOkK#jzb4GP><{QuF-wrA-DkhAeyOHh&^fMtRpzZu+mhrL zp+!=uWjFD(llk_qiSt117zso48*^o0*klXvk0z2TKU5jZm! zGC8!s&Owo@cBV7Ig+3xVmwA$Nv@07}tT;KedU)!^8HhIa{31cqzM$px?(t;DXH2%j z_tmr)p|pe`LEhYMHif{%830G$}`BozN4r_j-7ckWUwYoy9drvc6bnyA-C$LnOF z9K(UaaQ^_DthKeamZ~(&-B4&0($^9t0vtdVV69jqTX-95y=Gg!O@~-1J4W_Rb|?*? z`?}@mM=#?oGlIVK`hz%^kQU|paf6icia%41ADonGP?#I8vxgb zwi0{zLp{MF-nEcjiMO^^15ruz$c2!&lJP1|cpUnl&Qryg+!#HIm|Wkz>ev*f{9m2a zCTLY$J&bB&_kicmHF4oQTC z=iRTCE`gHy7u7!!n=qIdxhHNK=?@;!!^SLy*rie#%X^;neDnC}RFIw&kM@zaUwl0o z<|Yt2@a8M8Mb^=Q4u8>4n7Pk(xo0WxmNL9TTU=ku?nuMzS;l(NMIZyW69541a+_AQ{ULrjE7WcuA)w(5N#El~c z*5Z|@-aQ(&JFoMWM!IXFuTmSJ<89e))vXZuP$TrKg|#ZkzsLb(RC7 z6K9S37;6WMKQXTVJSz!5*kob}id>M1;}0P;kSTBQx_*XzQ*G&qx$#e zgQA=wci->8^lRv>I2#Ah|Fs9&L<$5&6$NxAsYmxYM}~+1bKSGbhMzukk*(#ZbNe%N zl^L0x+@DPcY<@MFFacyU;XG#N&hQ>LdQF%Yca95~tLN**oe7wG&RSK5nroTI@M>WB zXV%-rv#?<}VpIuGs_CuF_Rl^qd_RbNtWf#*QW!JlE#7uoneBC>f`r zn}Wrm*V?zmU~2Mf`&q-6tBpmFKX&DRpofL4mZkw*ih|+No<%&rn+_E!e^w><$)<@F zHKmR&Zf3iFNWA<4p&qbvB9c&SrF}AQth!px8br^{VpYz>wa|xNCEBxpR=ilDKet=? zZNw3ayT|)$rV)_mX1>~n`KYb!uFt&d3;JSKrEB>!s)&^L_3C=I%C&KdQyYQ3yEP=| zuPYC75O$?M`tTT9@J$dNuZz@RxE3Of^y}e4Xr?R zZF5Uwb7NI~T}y3iOHF-MMN@f$I5xWl$}kLV;t8fxu)x3rnl$^CoUF~Nkl-p#@a0Eq zoQmQBLcEJLSK^(EpRc>Po7jLG9B162r6*O?ZO#!w+03BgU(HH+VV1dkZ(pxwAm-%= zE(?h=pgz$5bW4P$MDv@-S0QHwJ`9*r>dY3`Rw&5jWiDx!wirp)x32lFdB(7O(2P5a zAA0{~$8!shLJGtf_WYppe#o_<+F}t@fkmmdYS)!&K>G^h8Y5yF+-D(=0meS^NB6Zy z>P!WZ^21g{49VWShr%Hd0S2UA&hH$p43gM3|p#Y!f%Q1viy$uVKad|x1 zx-Fk+$0O5EZU0=|PpWSC7p;Ki`Q`_tCv3`1>>*UfQ(%ya_G64RvPpMYa)*2h{ln8) z>SvR@S{0%8#;W-9ZAnkdwpc4GM3dfVQ70``Emng5%@^r5E;KsJ6@)d0Rr6fqLVQoB z$MsT5I&!>dWEil^=f!!%b>}8jdlYBJcoCt&q!V^uZp)B+j|gsjfL_NB|HM_ zPe9}6Ykh9p0l`VkH)*N6GCB#aPhG?|i|hlIeHwRKuL$XNy5X6>@s`9Y_Qlh-&kS4T zHg=Yu8V!^Jlgw;YTlavzdAp>(k`; zq1-LsWuANt`S4q8HILi~0>X3fpO}twecqjZ?`?K2p)CiEb&jU!Wv3MRzpQ7U8&9N< z$%nBYa$mU(CCEn-i6T>pWItjjM38sir_#{J!te+z{uj{tfL(%PHStC2?AR|$oGP*F z4=Z_8G`C)zO}TObp-cvCVJ1nu1q%|}M{6`cgNZ0}2EXdbsgimbW(!>!)BCdNZah+a zyP_f!))r!>^~^i?wJ&1fgrnv!1&A~57ntZ3Z_MniH)Fl#iO(}~W8K)kpX?bPNYr-2 z(5^0cotoH$4j6%bK)m*wX^YT@`S;(xz4@)aZBITx%;2dn&De3oiL@q6d4-Y|r_$4V zKQz?aC$ac2e28*!M8Ih^~MKt5~ez`ljSAWKHm^`t?x9o*}UNEoZWc%I%@m#a(~}J5!l6p0GNzU z7UkLr7X29hOjb=MG{B;35?FE3;h|%skdslxs3Vczy2-e8CNeU8Xw|L?Ej}+=RP{~iykkkLGN($=q3gFAZYlYFa-yi;N zkYDjl``h<#u-n0y&fAu7z`U>sfS6U$h>%dmVv=&Q29&0~P7^{Wy;Sh=5?1DTUXSKb zC(g2OW`lk2@_9|Re$uaO(bui!GNoK`VJ3Z0J2<+)CXA|u>Ogo1XXHKA$rs6JH9yho z7n~IfJgsI#y;g_m^Pzi%mNj?Pe^BWPu> zB!|CbSI}c+&df6b$8wWm%Plg$FtB>GwL}~5gp+#XCtkQT2iPcHTn{2b)7}w_FO%rJ zHW@Y^iH)3@)C}Yjv1i=VP&qpbQcEl5>-(k|8Ytf$WQf(i1xYTFJ&-#)e|lJ9A<3yi zcvFov@k>2O((|y-KR;&C9#}*OG13_)B$~$ZcoS{k*Kg- z;0&G^I4!RLJI|7;BoQl5y4OMXPFkVj5>Jk-$vIg3fz?8iTteA9mt>cnM(SOHRTOlY zKew4J#M>P@3@xfuCwT-W2?@Q!vIgH;gRGd0Iy~fg(MfQhSh82qTv5B9s~L36@CdMk zd$7fjk$&nYnE5(cD`gQcRthIme1SKUC{SUBc{F$aMf0p$ZA=^lqA9e;>V(V1E$W+rJ*rgo6z5gy96X0VD zeqVr^N>KKc7HA1(tF_V*C|5_!U)^H6shw30_)?lj+Cii!_9&9Au_EHj;&|5Am%D=~ zXBZ1lY=R!G@o;Nf3p|WC(y8S9x#A9}n1Rw}Ri8{-fu@aF=r7N^R;D&1BRAU%ua)yn zn+6B*m?o028M{ZgG5a5#b-7nC+gZ#FwZxFxj&JQJlCEpQ#-nIaspz4nog&I`DW9kW zRAFSt3vHQREZYFvaj)l;_4vO|jKzUP$5YDRn&oKXi3D~o{Z$PGDc*&TN}CXAZUL*F z%>#pO%+30y1VYuuJ7Db0=ZkV0#h6*= zmYrMT1+Z5%6N$3MV(f|GoBomO8F*P;!eBlqOZE|U1X|{vKwnY&X|bk3F*!1wr(9+x z;IJ%ozPR5^oFVh9xssoE-Sd;9?-x}4%JIG-n<^egs$UB1w$sc-_FD??z8226fQ7R8 zroJ@)p2jF?s^lxT86uAD$gQ)AV%U7aLFf_;K(iR@Gg}kY8epnTpW2<(W`JX@gT$IX zGbhPQGCAP?gy($4N zGT|O56e`aZWw3nceq(eee#>U?143%Q<{zU4p%M+Y_m9>IIf^V}H(U&7!LVo<(0Oqm zZ(jd_%OzOZW9|m=d{7wp2krT{arz|~D-Gz7~ ztG`_!#TrZYDBimOJLNz3+w9Wc40h_?{F|SpM{pdBu@L@6n4Ry?O|x23?Q;KcqnQE1MEYl12G z-aHV(lxFl6Fa0BffhRSEwKZ2eyDH_Y5$Cnb=r#e+dYm(WWYNxWjQdNIyog#hn>waI55Dd4 z5Rem(Y)$l&!se@~`^2rJ@;CABdgiUQ0BIq|VWWHNJA(IEq3ao`i!vSrS`alGscrJW zr@U`Zbf-Uno;&Yy+YZ|zy`rec<*?=3#NmhtpSM~$6%Or*cp>vMkK(qeE>B-nTL|Rr z%^Xq*+pi2wIv#8I$y&Ehuj2-q_9siI9wcxCt`3CO`yJ)DA!A~M$Gt7aK0=@a897Gc zslGH(&~E3eh)>4U8aU`wsk=BoTZ4^P!hAlLt zk24H11ar?(efLfyikOx(945pD{Gar2FVhNr^*gCB#1U{zwB%3 z{IJ@wH8$nH2Mmop{6B?>0#Mx53yz%;zB0N%SJ0f}#ESCKzWS-D=%rTWDY=UZ*h+zU zOf7P2awxB=~-=w&r}^s>IDzPYlgp=A(K8^q#d@j?)30$3wy=Hkk0)`hb2 zEA+N2WfUhbB*q5bh-h!a<2Db2C`654h75i%9B=-p>|Y$x&9^fOGxlOWzIT9SV~kz5 z40~##6}g;xJX=?*xw!=sHmO`?Q7ih>Ul<-+z_YYd{anJQq86QOFKbioTUMA7zDvO9 zF>)q7w^$vzY;CAB0R?mowfXu1-BU_K_o3F+E8qEdz4-H?KYs@9|A?+E+n=SDfW-}QyOGB-j$ zr(v4~MzrOCb{XUOQ`6|_WN60QIQwH_l0AwjZ<1m3;f3ER-~(GQs6HCEakLmn9+&T4 zakhQT$zVOLK8dQ?JQ;f-DYCIDcrkmUmU~}LL_N=(jLo{laQotyPreKg)P>= zqolk-^KyTo5@~;nBWN~m19%&_Y-PqrSz(C5gu+WudA)UIbtuI(*!Z?Ro2Tc*VC*@O zK7}C1lH=8p&oWC_*s57TZ6!1xQA>zB+k&kF0Ra|kyq_o*K`s>Ju5>I%1|EB8|I(oI zi(wf0X~%SY^JIJ^=JNlBP%NMX*K>b=uIIDo{B=D9)g2eZ`R7lLw~Y(}ScqSP)Z1PIf34EyuTvm_1x0CW*dbY!TcIFSx_?+OG!*uLZ?PYTDe072y`gQuCp2?yL(FN@-H!ZU$*K5A?vgG=vD!G zyloE*iig`2H}YWgd9^0J=YCyL*;?d>RXT)z|4{;s*9l$SnuzPRd=x5G3x$0zzo9HQ zub`}7lYyiPZ~U44@E|7;zx+Fz08XfZkc=4|ErgJW!f>mnl)ROZ{vkdylm%qqPnQSY zWFSp*Wkp4v0>NC1y$)iOL{^V|b?fG))YItId~H_QL6H0r>5KdnvPXvVb#~_$d@{({ufX``eYM+Rijax*{_{{WO&#bU2 zqUZ2q*W2~GrL};HzB3NAC*dPE4Bu|Fwd5-MIspt;R#ur>daR-u)iWDIkg)&tjc9q= z?nwoHBW)Dh0aIO_kn0&K+ zBMl42bDnJI=gh78m_}H}!uMl9%7mr)2Lap~bCzQINTvxPWzDyz0^xE|&E_(++OBTA zS|wn{AU*bC|5V`v9sxXc;L4efEP9Y@*E-z9%FuoH8iyq7-k=FIaYN(B*R-?|DEU{J zx1STmlqOXy@sJGNhUx$-EL->yxHM3p;Ps#wd`&)oX)=$mq;;zkbU8Co2g{w2I^GiQ z*PySi^aG)l3TA5RTnR@V_74!reSlX6yrt#+y;5G0t`{p>#dG{fz%4pnu|Kr=IqK(M z2VPlWRj~I%af%{j!zqr~m`hCevVm1!Iow-i!@bCrg45aJbuVDLRVdBo;iZaRx~+Xo z`$&e%Xv;)LYGBe8%xv=+2N%qey-4GIeObH4#JJsusJ&*JC^$zkTj>%+`C zH0N2TPwvlnG^&)={L=L|jsaG3c#@EdN1qjkrYRxyWS|ju!?bCml)0Hzbyk=r+@kI` z5In)L|Mtr_tS4b(C>afsubMev5t?aN-cZ@3&@sc1;H@Syk)X z_Z|A$IQb1{%iB=VJ4em3F9OMQns`k6X*DW@alwfN4_EK6O|ryQ&PKxT;JqvRl;#ie zlbD;N06}@uFKcB1ls?6y6P=u25u!R@3}30%>2t(%wJ`Ctq1yZI33V!Ta4tv4f5d#b z=7A$9cHPZQfs|4xA5VXFJh>Z*XeaCQ26JMZaNPUJX%&Yt*6+rUAD(8~A-uLNMpHgJ z*7Uiw_cc}D%bV^S3tj(J)DX1^Fp4qu&3CDx&`G&=gyYYdq(YKkRtxGc|1d77=&F)D z8Q`chYnlZO6ja?f9eJtWIm^%@S!-lzFfx36pJ*|zI%hI6kCT;byIuI=7bgfRqe6=$ RIs$jsU7k&nMP@|${{Tl1Mpys< From 9be92dbe47ac6af9b6f5fcb86fb03b5ff78e0df2 Mon Sep 17 00:00:00 2001 From: Maxwolf Goodliffe Date: Sun, 15 Jun 2014 15:42:40 -0700 Subject: [PATCH 43/62] Fixed missing icons for water, deuterium, and tritium cells. --- .../resonantinduction/atomic/items/ItemCell.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/atomic/src/main/scala/resonantinduction/atomic/items/ItemCell.java b/atomic/src/main/scala/resonantinduction/atomic/items/ItemCell.java index dfdf57a2..e0b56840 100644 --- a/atomic/src/main/scala/resonantinduction/atomic/items/ItemCell.java +++ b/atomic/src/main/scala/resonantinduction/atomic/items/ItemCell.java @@ -1,5 +1,8 @@ package resonantinduction.atomic.items; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.client.renderer.texture.IconRegister; import net.minecraft.item.ItemStack; import net.minecraft.world.World; import resonant.api.IReactor; @@ -20,6 +23,13 @@ public class ItemCell extends ItemTooltip { return world.getBlockTileEntity(x, y, z) instanceof IReactor; } + + @SideOnly(Side.CLIENT) + @Override + public void registerIcons(IconRegister iconRegister) + { + this.itemIcon = iconRegister.registerIcon(this.getUnlocalizedName().replace("item.", "")); + } @Override public String getUnlocalizedName(ItemStack itemstack) @@ -29,6 +39,7 @@ public class ItemCell extends ItemTooltip { return getUnlocalizedName() + "." + itemstack.getItemDamage(); } + return getUnlocalizedName(); } } From 6a1f7fa9fe797ace5015257c032b177b75b8fbb4 Mon Sep 17 00:00:00 2001 From: Maxwolf Goodliffe Date: Sun, 15 Jun 2014 15:44:01 -0700 Subject: [PATCH 44/62] Refactored mandarin baoZhaEvent into antimatterExpireEvent and BzFanWuSu into AntimatterExplosion. --- .../resonantinduction/atomic/items/ItemAntimatter.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/atomic/src/main/scala/resonantinduction/atomic/items/ItemAntimatter.java b/atomic/src/main/scala/resonantinduction/atomic/items/ItemAntimatter.java index 0ca6b2ed..2fbb6d6e 100644 --- a/atomic/src/main/scala/resonantinduction/atomic/items/ItemAntimatter.java +++ b/atomic/src/main/scala/resonantinduction/atomic/items/ItemAntimatter.java @@ -42,6 +42,8 @@ public class ItemAntimatter extends ItemCell @Override public void registerIcons(IconRegister iconRegister) { + // Animated Icons + //ResonantInduction.LOGGER.info(this.getUnlocalizedName().replace("item.", "") + "_milligram"); this.itemIcon = iconRegister.registerIcon(this.getUnlocalizedName().replace("item.", "") + "_milligram"); this.iconGram = iconRegister.registerIcon(this.getUnlocalizedName().replace("item.", "") + "_gram"); } @@ -73,7 +75,7 @@ public class ItemAntimatter extends ItemCell } @ForgeSubscribe - public void baoZhaEvent(ItemExpireEvent evt) + public void antimatterExpireEvent(ItemExpireEvent evt) { if (evt.entityItem != null) { @@ -89,7 +91,7 @@ public class ItemAntimatter extends ItemCell { if (!FlagRegistry.getModFlag(FlagRegistry.DEFAULT_NAME).containsValue(evt.entityItem.worldObj, Atomic.BAN_ANTIMATTER_POWER, "true", new Vector3(evt.entityItem))) { - IExplosion explosive = new BzFanWuSu(evt.entity.worldObj, evt.entityItem, evt.entityItem.posX, evt.entityItem.posY, evt.entityItem.posZ, 4, itemStack.getItemDamage()); + IExplosion explosive = new AntimatterExposion(evt.entity.worldObj, evt.entityItem, evt.entityItem.posX, evt.entityItem.posY, evt.entityItem.posZ, 4, itemStack.getItemDamage()); MinecraftForge.EVENT_BUS.post(new DoExplosionEvent(evt.entityItem.worldObj, explosive)); evt.entityItem.worldObj.createExplosion(evt.entityItem, evt.entityItem.posX, evt.entityItem.posY, evt.entityItem.posZ, explosive.getRadius(), true); ResonantInduction.LOGGER.fine("Antimatter cell detonated at: " + evt.entityItem.posX + ", " + evt.entityItem.posY + ", " + evt.entityItem.posZ); @@ -110,11 +112,11 @@ public class ItemAntimatter extends ItemCell } } - public static class BzFanWuSu extends Explosion implements IExplosion + public static class AntimatterExposion extends Explosion implements IExplosion { private int tier; - public BzFanWuSu(World par1World, Entity par2Entity, double x, double y, double z, float size, int tier) + public AntimatterExposion(World par1World, Entity par2Entity, double x, double y, double z, float size, int tier) { super(par1World, par2Entity, x, y, z, size + 2 * tier); this.tier = tier; From abb0a4357d09e482238797a1b4c4ab6f9ba88a05 Mon Sep 17 00:00:00 2001 From: Maxwolf Goodliffe Date: Sun, 15 Jun 2014 15:44:15 -0700 Subject: [PATCH 45/62] Fixed missing icon for Darkmatter cell. --- .../atomic/items/ItemDarkMatter.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/atomic/src/main/scala/resonantinduction/atomic/items/ItemDarkMatter.java b/atomic/src/main/scala/resonantinduction/atomic/items/ItemDarkMatter.java index ec11854e..2343ad06 100644 --- a/atomic/src/main/scala/resonantinduction/atomic/items/ItemDarkMatter.java +++ b/atomic/src/main/scala/resonantinduction/atomic/items/ItemDarkMatter.java @@ -1,5 +1,10 @@ package resonantinduction.atomic.items; +import resonantinduction.core.ResonantInduction; +import net.minecraft.client.renderer.texture.IconRegister; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + /** Strange matter cell */ public class ItemDarkMatter extends ItemCell @@ -8,4 +13,12 @@ public class ItemDarkMatter extends ItemCell { super(itemID); } + + @SideOnly(Side.CLIENT) + @Override + public void registerIcons(IconRegister iconRegister) + { + // Animated Icon + this.itemIcon = iconRegister.registerIcon(this.getUnlocalizedName().replace("item.", "")); + } } From 7f0a48001278379d32f8acca15f83ec7d448550a Mon Sep 17 00:00:00 2001 From: Maxwolf Goodliffe Date: Sun, 15 Jun 2014 15:46:17 -0700 Subject: [PATCH 46/62] Added localization for Laser Drill and Biomass. --- .../assets/resonantinduction/languages/en_US.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/assets/resonantinduction/languages/en_US.properties b/src/main/resources/assets/resonantinduction/languages/en_US.properties index e49c4e23..d9cb5f5f 100644 --- a/src/main/resources/assets/resonantinduction/languages/en_US.properties +++ b/src/main/resources/assets/resonantinduction/languages/en_US.properties @@ -49,8 +49,8 @@ item.resonantinduction\:handCrank.name=Hand Crank item.resonantinduction\:devStaff.name=Staff of Devs item.resonantinduction\:flour.name=Flour item.dough.name=Dough - - +item.resonantinduction\:laserDrill.name=Laser Drill +item.resonantinduction\:biomass.name=Biomass ## Machines tile.resonantinduction\:castingMold.name=Casting Mold From d7ec01840c3ab1ada7fcfc4fd29396eb3cb709a3 Mon Sep 17 00:00:00 2001 From: Maxwolf Goodliffe Date: Sun, 15 Jun 2014 15:48:22 -0700 Subject: [PATCH 47/62] Fixed missing icon for biomass. --- .../resonantinduction/core/resource/ItemBiomass.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/main/scala/resonantinduction/core/resource/ItemBiomass.java b/src/main/scala/resonantinduction/core/resource/ItemBiomass.java index ee33801b..f109470b 100644 --- a/src/main/scala/resonantinduction/core/resource/ItemBiomass.java +++ b/src/main/scala/resonantinduction/core/resource/ItemBiomass.java @@ -1,5 +1,8 @@ package resonantinduction.core.resource; +import net.minecraft.client.renderer.texture.IconRegister; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; import resonant.lib.prefab.item.ItemTooltip; /** Bio mass item used as a crafting part and fuel @@ -11,4 +14,11 @@ public class ItemBiomass extends ItemTooltip { super(id); } + + @SideOnly(Side.CLIENT) + @Override + public void registerIcons(IconRegister iconRegister) + { + this.itemIcon = iconRegister.registerIcon(this.getUnlocalizedName().replace("item.", "")); + } } From 820880aa5bedd39ad021f63f5486ded303ddbaf9 Mon Sep 17 00:00:00 2001 From: Maxwolf Goodliffe Date: Sun, 15 Jun 2014 15:49:38 -0700 Subject: [PATCH 48/62] Rewrote breeder reactors (again), lowered breeding temp to 1100K. --- .../atomic/items/ItemFissileFuel.java | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/atomic/src/main/scala/resonantinduction/atomic/items/ItemFissileFuel.java b/atomic/src/main/scala/resonantinduction/atomic/items/ItemFissileFuel.java index d3f6209e..58ccb3e7 100644 --- a/atomic/src/main/scala/resonantinduction/atomic/items/ItemFissileFuel.java +++ b/atomic/src/main/scala/resonantinduction/atomic/items/ItemFissileFuel.java @@ -11,6 +11,7 @@ import net.minecraftforge.fluids.FluidStack; import resonant.api.IReactor; import resonant.api.IReactorComponent; import resonantinduction.atomic.Atomic; +import resonantinduction.atomic.machine.reactor.TileReactorCell; import resonantinduction.core.Settings; import universalelectricity.api.vector.Vector3; import cpw.mods.fml.relauncher.Side; @@ -22,7 +23,7 @@ public class ItemFissileFuel extends ItemRadioactive implements IReactorComponen public static final int DECAY = 2500; /** Temperature at which the fuel rod will begin to re-enrich itself. */ - public static final int BREEDING_TEMP = 1200; + public static final int BREEDING_TEMP = 1100; /** The energy in one KG of uranium is: 72PJ, 100TJ in one cell of uranium. */ public static final long ENERGY = 100000000000L; @@ -51,7 +52,7 @@ public class ItemFissileFuel extends ItemRadioactive implements IReactorComponen TileEntity tile = checkPos.getTileEntity(worldObj); // Check that the other reactors not only exist but also are running. - if (tile instanceof IReactor && ((IReactor) tile).getTemperature() > BREEDING_TEMP) + if (tile instanceof TileReactorCell && ((TileReactorCell) tile).getTemperature() > BREEDING_TEMP) { reactors++; } @@ -61,12 +62,15 @@ public class ItemFissileFuel extends ItemRadioactive implements IReactorComponen if (reactors >= 2) { // Begin the process of re-enriching the uranium rod but not consistently. - if (worldObj.rand.nextInt(1000) <= 100 && reactor.getTemperature() > BREEDING_TEMP) + // Note: The center reactor cell only needs to be half of breeding temperature for this to work. + if (worldObj.rand.nextInt(1000) <= 100 && reactor.getTemperature() > (BREEDING_TEMP / 2)) { // Cells can regain a random amount of health per tick. int healAmt = worldObj.rand.nextInt(5); + + // Determine if this is a completely dead cell (creative menu fission rod is like this). + //System.out.println("[Atomic Science] [Reactor Cell] Breeding " + String.valueOf(healAmt) + " back into fissle rod. " + String.valueOf(itemStack.getItemDamage()) + " / " + String.valueOf(itemStack.getMaxDamage())); itemStack.setItemDamage(Math.max(itemStack.getItemDamage() - healAmt, 0)); - // System.out.println("[Atomic Science] [Reactor Cell] Breeding " + String.valueOf(healAmt) + " back into fissle rod. " + String.valueOf(itemStack.getItemDamage()) + " / " + String.valueOf(itemStack.getMaxDamage())); } } else From 33f8d6532edd50c2793439fc2f36ca0bcf1a3c0f Mon Sep 17 00:00:00 2001 From: dmodoomsirius Date: Sun, 15 Jun 2014 19:56:00 -0400 Subject: [PATCH 49/62] Update README.md updating the licence to the correct page --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 29771550..13dee0c1 100644 --- a/README.md +++ b/README.md @@ -13,4 +13,4 @@ Resonant Induction is a Minecraft mod that brings in realistic, world-based tech * CyanideX ### License -"Resonant Induction" is under the Calclavia Mod License: http://calclavia.com/license/cl +"Resonant Induction" is under the Calclavia Mod License: http://calclavia.com/calclavia-mod-license/ From 2e2571132091da5e01a49a63b458836cbdb6fc77 Mon Sep 17 00:00:00 2001 From: dmodoomsirius Date: Tue, 17 Jun 2014 16:31:19 -0400 Subject: [PATCH 50/62] Adding support info Adding info about getting support faster. --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index 13dee0c1..91a44903 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,11 @@ Resonant Induction is a Minecraft mod that brings in realistic, world-based tech * Tgame14 * Maxwolf Goodliffe +Support +====== +* Make sure you used the latest Versions even try dev versions. +* use Pastebin to make it easier and so we don't have to scroll down a giant wall of text. + ### Artist * Archadia * CyanideX From 00b79b1d6964d889e92c929f175dcab0fc71bb3c Mon Sep 17 00:00:00 2001 From: tgame14 Date: Wed, 18 Jun 2014 14:51:11 +0300 Subject: [PATCH 51/62] Apply suggestion RI-13, mechanical piston is now based on block hardness --- .../process/crusher/TileMechanicalPiston.java | 23 ++++++++++--------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/mechanical/src/main/scala/resonantinduction/mechanical/process/crusher/TileMechanicalPiston.java b/mechanical/src/main/scala/resonantinduction/mechanical/process/crusher/TileMechanicalPiston.java index fdbe77c7..4032137f 100644 --- a/mechanical/src/main/scala/resonantinduction/mechanical/process/crusher/TileMechanicalPiston.java +++ b/mechanical/src/main/scala/resonantinduction/mechanical/process/crusher/TileMechanicalPiston.java @@ -1,7 +1,7 @@ package resonantinduction.mechanical.process.crusher; -import java.lang.reflect.Method; - +import cpw.mods.fml.common.Loader; +import cpw.mods.fml.relauncher.ReflectionHelper; import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.item.ItemStack; @@ -19,15 +19,17 @@ import resonantinduction.core.ResonantInduction; import resonantinduction.mechanical.energy.grid.MechanicalNode; import resonantinduction.mechanical.energy.grid.TileMechanical; import universalelectricity.api.vector.Vector3; -import cpw.mods.fml.common.Loader; -import cpw.mods.fml.relauncher.ReflectionHelper; + +import java.lang.reflect.Method; public class TileMechanicalPiston extends TileMechanical implements IRotatable { - @Config + @Config(comment = "Outdated, not used anymore. use mechanicalPistonMultiplier as its based on block hardness now") + @Deprecated private static int mechanicalPistonBreakCount = 5; - private int breakCount = mechanicalPistonBreakCount; + @Config + private static int mechanicalPistonMultiplier = 2; private boolean markRevolve = false; @@ -88,6 +90,9 @@ public class TileMechanicalPiston extends TileMechanical implements IRotatable if (block != null) { + int breakCount = (int) (mechanicalPistonMultiplier * block.blockHardness); + final int startBreakCount = breakCount; + ItemStack blockStack = new ItemStack(block); RecipeResource[] resources = MachineRecipes.INSTANCE.getOutput(ResonantInduction.RecipeType.CRUSHER.name(), blockStack); @@ -95,7 +100,7 @@ public class TileMechanicalPiston extends TileMechanical implements IRotatable { if (!worldObj.isRemote) { - int breakStatus = (int) (((float) (mechanicalPistonBreakCount - breakCount) / (float) mechanicalPistonBreakCount) * 10f); + int breakStatus = (int) (((float) (startBreakCount - breakCount) / (float) startBreakCount) * 10f); world().destroyBlockInWorldPartially(0, blockPos.intX(), blockPos.intY(), blockPos.intZ(), breakStatus); if (breakCount <= 0) @@ -112,8 +117,6 @@ public class TileMechanicalPiston extends TileMechanical implements IRotatable getWorldObj().destroyBlock(blockPos.intX(), blockPos.intY(), blockPos.intZ(), false); } - - breakCount = mechanicalPistonBreakCount; } } @@ -123,8 +126,6 @@ public class TileMechanicalPiston extends TileMechanical implements IRotatable } } - breakCount = mechanicalPistonBreakCount; - if (!worldObj.isRemote) world().destroyBlockInWorldPartially(0, blockPos.intX(), blockPos.intY(), blockPos.intZ(), -1); return false; From a4e300ad9ac4b18d841f736b8c090c30f04bb6a6 Mon Sep 17 00:00:00 2001 From: Maxwolf Goodliffe Date: Wed, 18 Jun 2014 21:50:13 -0700 Subject: [PATCH 52/62] Fixed bug with Mechanical Piston not breaking blocks. --- .../process/crusher/TileMechanicalPiston.java | 385 +++++++++--------- 1 file changed, 192 insertions(+), 193 deletions(-) diff --git a/mechanical/src/main/scala/resonantinduction/mechanical/process/crusher/TileMechanicalPiston.java b/mechanical/src/main/scala/resonantinduction/mechanical/process/crusher/TileMechanicalPiston.java index 4032137f..6667eb4a 100644 --- a/mechanical/src/main/scala/resonantinduction/mechanical/process/crusher/TileMechanicalPiston.java +++ b/mechanical/src/main/scala/resonantinduction/mechanical/process/crusher/TileMechanicalPiston.java @@ -24,239 +24,238 @@ import java.lang.reflect.Method; public class TileMechanicalPiston extends TileMechanical implements IRotatable { - @Config(comment = "Outdated, not used anymore. use mechanicalPistonMultiplier as its based on block hardness now") - @Deprecated - private static int mechanicalPistonBreakCount = 5; + @Config(comment = "Outdated, not used anymore. use mechanicalPistonMultiplier as its based on block hardness now") + @Deprecated + private static int mechanicalPistonBreakCount = 5; - @Config - private static int mechanicalPistonMultiplier = 2; + @Config + private static int mechanicalPistonMultiplier = 2; - private boolean markRevolve = false; + private boolean markRevolve = false; - public TileMechanicalPiston() - { - super(Material.piston); + public TileMechanicalPiston() + { + super(Material.piston); - mechanicalNode = new MechanicalNode(this) - { - @Override - protected void revolve() - { - markRevolve = true; - } + mechanicalNode = new MechanicalNode(this) + { + @Override + protected void revolve() + { + markRevolve = true; + } - @Override - public boolean canConnect(ForgeDirection from, Object source) - { - return from != getDirection(); - } + @Override + public boolean canConnect(ForgeDirection from, Object source) + { + return from != getDirection(); + } - }.setLoad(0.5f); + }.setLoad(0.5f); - isOpaqueCube = false; - normalRender = false; - customItemRender = true; - rotationMask = Byte.parseByte("111111", 2); - textureName = "material_steel_dark"; - } + isOpaqueCube = false; + normalRender = false; + customItemRender = true; + rotationMask = Byte.parseByte("111111", 2); + textureName = "material_steel_dark"; + } - @Override - public void updateEntity() - { - super.updateEntity(); + @Override + public void updateEntity() + { + super.updateEntity(); - if (markRevolve) - { - Vector3 movePosition = new Vector3(TileMechanicalPiston.this).translate(getDirection()); + if (markRevolve) + { + Vector3 movePosition = new Vector3(TileMechanicalPiston.this).translate(getDirection()); - if (!hitOreBlock(movePosition)) - { - if (!worldObj.isRemote) - { - Vector3 moveNewPosition = movePosition.clone().translate(getDirection()); + if (!hitOreBlock(movePosition)) + { + if (!worldObj.isRemote) + { + Vector3 moveNewPosition = movePosition.clone().translate(getDirection()); - if (canMove(movePosition, moveNewPosition)) - move(movePosition, moveNewPosition); - } - } + if (canMove(movePosition, moveNewPosition)) + { + move(movePosition, moveNewPosition); + } + } + } - markRevolve = false; - } - } + markRevolve = false; + } + } - public boolean hitOreBlock(Vector3 blockPos) - { - Block block = Block.blocksList[blockPos.getBlockID(world())]; + public boolean hitOreBlock(Vector3 blockPos) + { + Block block = Block.blocksList[blockPos.getBlockID(world())]; - if (block != null) - { - int breakCount = (int) (mechanicalPistonMultiplier * block.blockHardness); - final int startBreakCount = breakCount; + if (block != null) + { + int breakCount = (int) (mechanicalPistonMultiplier * block.blockHardness); + final int startBreakCount = breakCount; - ItemStack blockStack = new ItemStack(block); - RecipeResource[] resources = MachineRecipes.INSTANCE.getOutput(ResonantInduction.RecipeType.CRUSHER.name(), blockStack); + ItemStack blockStack = new ItemStack(block); + RecipeResource[] resources = MachineRecipes.INSTANCE.getOutput(ResonantInduction.RecipeType.CRUSHER.name(), blockStack); - if (resources.length > 0) - { - if (!worldObj.isRemote) - { - int breakStatus = (int) (((float) (startBreakCount - breakCount) / (float) startBreakCount) * 10f); - world().destroyBlockInWorldPartially(0, blockPos.intX(), blockPos.intY(), blockPos.intZ(), breakStatus); + if (resources.length > 0) + { + if (!worldObj.isRemote) + { + int breakStatus = (int) (((float) (startBreakCount - breakCount) / (float) startBreakCount) * 10f); + world().destroyBlockInWorldPartially(0, blockPos.intX(), blockPos.intY(), blockPos.intZ(), breakStatus); + ResonantInduction.LOGGER.info("[Mechanical Piston] Break Count: " + breakCount); + + if (breakCount >= mechanicalPistonMultiplier) + { + for (RecipeResource recipe : resources) + { + if (Math.random() <= recipe.getChance()) + { + InventoryUtility.dropItemStack(world(), blockPos.clone().translate(0.5), recipe.getItemStack(), 10, 0); + } + } - if (breakCount <= 0) - { - if (!world().isRemote) - { - for (RecipeResource recipe : resources) - { - if (Math.random() <= recipe.getChance()) - { - InventoryUtility.dropItemStack(world(), blockPos.clone().translate(0.5), recipe.getItemStack(), 10, 0); - } - } + getWorldObj().destroyBlock(blockPos.intX(), blockPos.intY(), blockPos.intZ(), false); + } + } - getWorldObj().destroyBlock(blockPos.intX(), blockPos.intY(), blockPos.intZ(), false); - } - } - } + ResonantInduction.proxy.renderBlockParticle(worldObj, blockPos.clone().translate(0.5), new Vector3((Math.random() - 0.5f) * 3, (Math.random() - 0.5f) * 3, (Math.random() - 0.5f) * 3), block.blockID, 1); + breakCount--; + return true; + } + } - ResonantInduction.proxy.renderBlockParticle(worldObj, blockPos.clone().translate(0.5), new Vector3((Math.random() - 0.5f) * 3, (Math.random() - 0.5f) * 3, (Math.random() - 0.5f) * 3), block.blockID, 1); - breakCount--; - return true; - } - } + if (!worldObj.isRemote) + { + world().destroyBlockInWorldPartially(0, blockPos.intX(), blockPos.intY(), blockPos.intZ(), -1); + } + + return false; + } - if (!worldObj.isRemote) - world().destroyBlockInWorldPartially(0, blockPos.intX(), blockPos.intY(), blockPos.intZ(), -1); - return false; - } + @Override + public void onRemove(int par5, int par6) + { + super.onRemove(par5, par6); + } - @Override - public void onRemove(int par5, int par6) - { - super.onRemove(par5, par6); - } + public boolean canMove(Vector3 from, Vector3 to) + { + TileEntity tileEntity = from.getTileEntity(worldObj); - public boolean canMove(Vector3 from, Vector3 to) - { - TileEntity tileEntity = from.getTileEntity(worldObj); + if (this.equals(to.getTileEntity(getWorldObj()))) + { + return false; + } - if (this.equals(to.getTileEntity(getWorldObj()))) - { - return false; - } + /** Check Target */ + int targetBlockID = to.getBlockID(worldObj); - /** Check Target */ - int targetBlockID = to.getBlockID(worldObj); + if (!(worldObj.isAirBlock(to.intX(), to.intY(), to.intZ()) || (targetBlockID > 0 && (Block.blocksList[targetBlockID].isBlockReplaceable(worldObj, to.intX(), to.intY(), to.intZ()))))) + { + return false; + } - if (!(worldObj.isAirBlock(to.intX(), to.intY(), to.intZ()) || (targetBlockID > 0 && (Block.blocksList[targetBlockID].isBlockReplaceable(worldObj, to.intX(), to.intY(), to.intZ()))))) - { - return false; - } + return true; + } - return true; - } + public void move(Vector3 from, Vector3 to) + { + int blockID = from.getBlockID(worldObj); + int blockMetadata = from.getBlockMetadata(worldObj); - public void move(Vector3 from, Vector3 to) - { - int blockID = from.getBlockID(worldObj); - int blockMetadata = from.getBlockMetadata(worldObj); + TileEntity tileEntity = from.getTileEntity(worldObj); - TileEntity tileEntity = from.getTileEntity(worldObj); + NBTTagCompound tileData = new NBTTagCompound(); - NBTTagCompound tileData = new NBTTagCompound(); + if (tileEntity != null) + { + tileEntity.writeToNBT(tileData); + } - if (tileEntity != null) - { - tileEntity.writeToNBT(tileData); - } + MovementUtility.setBlockSneaky(worldObj, from, 0, 0, null); - MovementUtility.setBlockSneaky(worldObj, from, 0, 0, null); + if (tileEntity != null && tileData != null) + { + /** Forge Multipart Support. Use FMP's custom TE creator. */ + boolean isMultipart = tileData.getString("id").equals("savedMultipart"); - if (tileEntity != null && tileData != null) - { - /** - * Forge Multipart Support. Use FMP's custom TE creator. - */ - boolean isMultipart = tileData.getString("id").equals("savedMultipart"); + TileEntity newTile = null; - TileEntity newTile = null; + if (isMultipart) + { + try + { + Class multipart = Class.forName("codechicken.multipart.MultipartHelper"); + Method m = multipart.getMethod("createTileFromNBT", World.class, NBTTagCompound.class); + newTile = (TileEntity) m.invoke(null, worldObj, tileData); + } + catch (Exception e) + { + e.printStackTrace(); + } + } + else + { + newTile = TileEntity.createAndLoadEntity(tileData); + } - if (isMultipart) - { - try - { - Class multipart = Class.forName("codechicken.multipart.MultipartHelper"); - Method m = multipart.getMethod("createTileFromNBT", World.class, NBTTagCompound.class); - newTile = (TileEntity) m.invoke(null, worldObj, tileData); - } - catch (Exception e) - { - e.printStackTrace(); - } - } - else - { - newTile = TileEntity.createAndLoadEntity(tileData); - } + MovementUtility.setBlockSneaky(worldObj, to, blockID, blockMetadata, newTile); - MovementUtility.setBlockSneaky(worldObj, to, blockID, blockMetadata, newTile); + if (newTile != null && isMultipart) + { + try + { + // Send the description packet of the TE after moving it. + Class multipart = Class.forName("codechicken.multipart.MultipartHelper"); + multipart.getMethod("sendDescPacket", World.class, TileEntity.class).invoke(null, worldObj, newTile); - if (newTile != null && isMultipart) - { - try - { - // Send the description packet of the TE after moving it. - Class multipart = Class.forName("codechicken.multipart.MultipartHelper"); - multipart.getMethod("sendDescPacket", World.class, TileEntity.class).invoke(null, worldObj, newTile); + // Call onMoved event. + Class tileMultipart = Class.forName("codechicken.multipart.TileMultipart"); + tileMultipart.getMethod("onMoved").invoke(newTile); + } + catch (Exception e) + { + e.printStackTrace(); + } + } + } + else + { + MovementUtility.setBlockSneaky(worldObj, to, blockID, blockMetadata, null); + } - // Call onMoved event. - Class tileMultipart = Class.forName("codechicken.multipart.TileMultipart"); - tileMultipart.getMethod("onMoved").invoke(newTile); - } - catch (Exception e) - { - e.printStackTrace(); - } - } - } - else - { - MovementUtility.setBlockSneaky(worldObj, to, blockID, blockMetadata, null); - } + notifyChanges(from); + notifyChanges(to); + } - notifyChanges(from); - notifyChanges(to); - } + public void notifyChanges(Vector3 pos) + { + worldObj.notifyBlocksOfNeighborChange(pos.intX(), pos.intY(), pos.intZ(), pos.getBlockID(worldObj)); - public void notifyChanges(Vector3 pos) - { - worldObj.notifyBlocksOfNeighborChange(pos.intX(), pos.intY(), pos.intZ(), pos.getBlockID(worldObj)); + TileEntity newTile = pos.getTileEntity(worldObj); - TileEntity newTile = pos.getTileEntity(worldObj); + if (newTile != null) + { + if (Loader.isModLoaded("BuildCraft|Factory")) + { + /** Special quarry compatibility code. */ + try + { + Class clazz = Class.forName("buildcraft.factory.TileQuarry"); - if (newTile != null) - { - if (Loader.isModLoaded("BuildCraft|Factory")) - { - /** - * Special quarry compatibility code. - */ - try - { - Class clazz = Class.forName("buildcraft.factory.TileQuarry"); - - if (newTile.equals(clazz)) - { - ReflectionHelper.setPrivateValue(clazz, newTile, true, "isAlive"); - } - } - catch (Exception e) - { - e.printStackTrace(); - } - } - } - } + if (newTile.equals(clazz)) + { + ReflectionHelper.setPrivateValue(clazz, newTile, true, "isAlive"); + } + } + catch (Exception e) + { + e.printStackTrace(); + } + } + } + } } From 182876fb090c37a9749c86560611226cab2df2e0 Mon Sep 17 00:00:00 2001 From: Robert S Date: Thu, 19 Jun 2014 02:22:29 -0400 Subject: [PATCH 53/62] NPE fix for CommandMachine when dev staff is null --- src/main/scala/resonantinduction/core/CommandMachine.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/scala/resonantinduction/core/CommandMachine.java b/src/main/scala/resonantinduction/core/CommandMachine.java index e1fe6a84..e4a88405 100644 --- a/src/main/scala/resonantinduction/core/CommandMachine.java +++ b/src/main/scala/resonantinduction/core/CommandMachine.java @@ -196,7 +196,7 @@ public class CommandMachine extends CommandBase { if (event.action == Action.RIGHT_CLICK_BLOCK) { - if (event.entityPlayer.getHeldItem() != null && event.entityPlayer.getHeldItem().itemID == ResonantInduction.itemDevStaff.itemID) + if (event.entityPlayer.getHeldItem() != null && ResonantInduction.itemDevStaff != null && event.entityPlayer.getHeldItem().itemID == ResonantInduction.itemDevStaff.itemID) { if (event.entityPlayer.isSneaking()) { From 57045791282b37389c622742ec10e72b530fbd0f Mon Sep 17 00:00:00 2001 From: Robert S Date: Thu, 19 Jun 2014 16:36:22 -0400 Subject: [PATCH 54/62] Change for RE laser event --- .../electrical/laser/gun/ItemMiningLaser.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/electrical/src/main/scala/resonantinduction/electrical/laser/gun/ItemMiningLaser.java b/electrical/src/main/scala/resonantinduction/electrical/laser/gun/ItemMiningLaser.java index 5905db48..e65421a4 100644 --- a/electrical/src/main/scala/resonantinduction/electrical/laser/gun/ItemMiningLaser.java +++ b/electrical/src/main/scala/resonantinduction/electrical/laser/gun/ItemMiningLaser.java @@ -17,6 +17,7 @@ import net.minecraft.world.World; import net.minecraftforge.common.ForgeDirection; import net.minecraftforge.common.MinecraftForge; import resonant.api.event.LaserEvent; +import resonant.api.event.LaserFiredPlayerEvent; import resonant.lib.prefab.vector.RayTraceHelper; import resonant.lib.type.Pair; import resonantinduction.core.ResonantInduction; @@ -120,7 +121,7 @@ public class ItemMiningLaser extends ItemEnergyTool if (hit != null) { - LaserEvent event = new LaserEvent.LaserFiredPlayerEvent(player, hit, stack); + LaserEvent event = new LaserFiredPlayerEvent(player, hit, stack); MinecraftForge.EVENT_BUS.post(event); if (!player.worldObj.isRemote && !event.isCanceled()) { From 21dcffc100f0e90d6d49dce10b3e08f76c73ac43 Mon Sep 17 00:00:00 2001 From: Robert S Date: Thu, 19 Jun 2014 16:41:03 -0400 Subject: [PATCH 55/62] Removed item thermal laser as its unfinished --- .../laser/gun/ItemThermalLaser.java | 125 ------------------ 1 file changed, 125 deletions(-) delete mode 100644 electrical/src/main/scala/resonantinduction/electrical/laser/gun/ItemThermalLaser.java diff --git a/electrical/src/main/scala/resonantinduction/electrical/laser/gun/ItemThermalLaser.java b/electrical/src/main/scala/resonantinduction/electrical/laser/gun/ItemThermalLaser.java deleted file mode 100644 index 2243fdcb..00000000 --- a/electrical/src/main/scala/resonantinduction/electrical/laser/gun/ItemThermalLaser.java +++ /dev/null @@ -1,125 +0,0 @@ -package resonantinduction.electrical.laser.gun; - -import java.awt.Color; - -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.EnumAction; -import net.minecraft.item.ItemStack; -import net.minecraft.util.DamageSource; -import net.minecraft.util.EnumMovingObjectType; -import net.minecraft.util.MathHelper; -import net.minecraft.util.MovingObjectPosition; -import net.minecraft.util.Vec3; -import net.minecraft.world.World; -import net.minecraftforge.common.MinecraftForge; -import resonant.api.event.LaserEvent; -import resonant.lib.prefab.vector.RayTraceHelper; -import resonant.lib.thermal.ThermalGrid; -import resonantinduction.core.ResonantInduction; -import universalelectricity.api.item.ItemElectric; -import universalelectricity.api.vector.IVector3; -import universalelectricity.api.vector.Vector3; -import universalelectricity.api.vector.VectorWorld; - -/** Version of the mining laser that uses the thermal grid to melt blocks down - * - * @author DarkGuardsman */ -public class ItemThermalLaser extends ItemElectric -{ - long batterySize = 100000; - float wattPerShot = 1; - float damageToEntities = 3.3f; - int blockRange = 50; - int firingDelay = 5; - int breakTime = 15; - boolean createLava = true, setFire = true; - - public ItemThermalLaser(int id) - { - super(id); - this.setUnlocalizedName("MiningLaser"); - this.setMaxStackSize(1); - this.setCreativeTab(CreativeTabs.tabTools); - } - - @Override - public EnumAction getItemUseAction(ItemStack par1ItemStack) - { - return EnumAction.bow; - } - - @Override - public int getMaxItemUseDuration(ItemStack par1ItemStack) - { - //TODO change render of the laser too show it slowly over heat, when it over heats eg gets to max use damage the player, and tool - return 1000; - } - - @Override - public void onUsingItemTick(ItemStack stack, EntityPlayer player, int count) - { - if (count > 5) - { - Vec3 playerPosition = Vec3.createVectorHelper(player.posX, player.posY + player.getEyeHeight(), player.posZ); - Vec3 playerLook = RayTraceHelper.getLook(player, 1.0f); - Vec3 p = Vec3.createVectorHelper(playerPosition.xCoord + playerLook.xCoord, playerPosition.yCoord + playerLook.yCoord, playerPosition.zCoord + playerLook.zCoord); - - Vec3 playerViewOffset = Vec3.createVectorHelper(playerPosition.xCoord + playerLook.xCoord * blockRange, playerPosition.yCoord + playerLook.yCoord * blockRange, playerPosition.zCoord + playerLook.zCoord * blockRange); - MovingObjectPosition hit = RayTraceHelper.do_rayTraceFromEntity(player, new Vector3().toVec3(), blockRange, true); - - //TODO fix sound - if (hit != null) - { - LaserEvent event = new LaserEvent.LaserFiredPlayerEvent(player, hit, stack); - MinecraftForge.EVENT_BUS.post(event); - if (!player.worldObj.isRemote && !event.isCanceled()) - { - if (hit.typeOfHit == EnumMovingObjectType.ENTITY && hit.entityHit != null) - { - //TODO re-implements laser damage source - DamageSource damageSource = DamageSource.causeMobDamage(player); - hit.entityHit.attackEntityFrom(damageSource, damageToEntities); - hit.entityHit.setFire(5); - } - else if (hit.typeOfHit == EnumMovingObjectType.TILE) - { - ThermalGrid.addTemperature(new VectorWorld(player.worldObj, hit.blockX, hit.blockY, hit.blockZ), 100f); - } - - } - playerViewOffset = hit.hitVec; - } - //TODO make beam brighter the longer it has been used - //TODO adjust the laser for the end of the gun - float x = (float) (MathHelper.cos((float) (player.rotationYawHead * 0.0174532925)) * (-.4) - MathHelper.sin((float) (player.rotationYawHead * 0.0174532925)) * (-.1)); - float z = (float) (MathHelper.sin((float) (player.rotationYawHead * 0.0174532925)) * (-.4) + MathHelper.cos((float) (player.rotationYawHead * 0.0174532925)) * (-.1)); - ResonantInduction.proxy.renderBeam(player.worldObj, (IVector3) new Vector3(p).translate(new Vector3(x, -.25, z)), (IVector3) new Vector3(playerViewOffset), Color.ORANGE, 1); - ResonantInduction.proxy.renderBeam(player.worldObj, (IVector3) new Vector3(p).translate(new Vector3(x, -.45, z)), (IVector3) new Vector3(playerViewOffset), Color.ORANGE, 1); - } - - } - - @Override - public ItemStack onItemRightClick(ItemStack itemStack, World par2World, EntityPlayer player) - { - if (player.capabilities.isCreativeMode || this.getEnergy(itemStack) > this.wattPerShot) - { - player.setItemInUse(itemStack, this.getMaxItemUseDuration(itemStack)); - } - return itemStack; - } - - @Override - public ItemStack onEaten(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer) - { - return par1ItemStack; - } - - @Override - public long getEnergyCapacity(ItemStack theItem) - { - return this.batterySize; - } - -} From 8bed6932ea4b79f58974cab8c5e92040060c2cbd Mon Sep 17 00:00:00 2001 From: Calclavia Date: Fri, 20 Jun 2014 16:25:30 -0700 Subject: [PATCH 56/62] #RI-37 fixed - Glitchy tank rendering --- .../archaic/fluid/tank/TankNetwork.java | 7 +- .../archaic/fluid/tank/TileTank.java | 367 +++++++++--------- .../grid/fluid/TileFluidDistribution.java | 240 ++++++------ .../core/grid/fluid/TileFluidNode.java | 4 +- 4 files changed, 312 insertions(+), 306 deletions(-) diff --git a/archaic/src/main/scala/resonantinduction/archaic/fluid/tank/TankNetwork.java b/archaic/src/main/scala/resonantinduction/archaic/fluid/tank/TankNetwork.java index 9a7d1a95..8b2d1ae1 100644 --- a/archaic/src/main/scala/resonantinduction/archaic/fluid/tank/TankNetwork.java +++ b/archaic/src/main/scala/resonantinduction/archaic/fluid/tank/TankNetwork.java @@ -25,14 +25,13 @@ public class TankNetwork extends FluidDistributionetwork final FluidStack networkTankFluid = getTank().getFluid(); int lowestY = 255; int highestY = 0; - int connectorCount = 0; + int connectorCount; int totalFluid = networkTankFluid != null ? networkTankFluid.amount : 0; //If we only have one tank only fill one tank if (getConnectors().size() > 0) { - IFluidDistribution tank = ((IFluidDistribution) getConnectors().toArray()[0]); if (getConnectors().size() == 1) { @@ -61,14 +60,14 @@ public class TankNetwork extends FluidDistributionetwork } else { - HashMap> heightMap = new HashMap>(); + HashMap> heightMap = new HashMap(); //Build map of all tanks by their y level for (IFluidDistribution connector : this.getConnectors()) { if (connector instanceof TileEntity) { - LinkedList list = new LinkedList(); + LinkedList list = new LinkedList(); int yCoord = ((TileEntity) connector).yCoord; if (yCoord < lowestY) diff --git a/archaic/src/main/scala/resonantinduction/archaic/fluid/tank/TileTank.java b/archaic/src/main/scala/resonantinduction/archaic/fluid/tank/TileTank.java index c5c77882..8e3b9ad7 100644 --- a/archaic/src/main/scala/resonantinduction/archaic/fluid/tank/TileTank.java +++ b/archaic/src/main/scala/resonantinduction/archaic/fluid/tank/TileTank.java @@ -24,7 +24,6 @@ import resonant.lib.render.FluidRenderUtility; import resonant.lib.render.RenderUtility; import resonant.lib.utility.FluidUtility; import resonant.lib.utility.WorldUtility; -import resonant.lib.utility.inventory.InventoryUtility; import resonant.lib.utility.render.RenderBlockUtility; import resonantinduction.archaic.Archaic; import resonantinduction.core.Reference; @@ -36,217 +35,219 @@ import universalelectricity.api.vector.Vector3; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -/** Tile/Block class for basic Dynamic tanks - * - * @author Darkguardsman */ +/** + * Tile/Block class for basic Dynamic tanks + * + * @author Darkguardsman + */ public class TileTank extends TileFluidDistribution implements IComparatorInputOverride, ISneakPickup { - public static final int VOLUME = 16; + public static final int VOLUME = 16; - public TileTank() - { - super(UniversalElectricity.machine, VOLUME * FluidContainerRegistry.BUCKET_VOLUME); - isOpaqueCube = false; - normalRender = false; - itemBlock = ItemBlockTank.class; - } + public TileTank() + { + super(UniversalElectricity.machine, VOLUME * FluidContainerRegistry.BUCKET_VOLUME); + isOpaqueCube = false; + normalRender = false; + itemBlock = ItemBlockTank.class; + } - @Override - public boolean shouldSideBeRendered(IBlockAccess access, int x, int y, int z, int side) - { - return access != null && block != null && access.getBlockId(x, y, z) != block.blockID; - } + @Override + public boolean shouldSideBeRendered(IBlockAccess access, int x, int y, int z, int side) + { + return access != null && block != null && access.getBlockId(x, y, z) != block.blockID; + } - @Override - protected boolean use(EntityPlayer player, int side, Vector3 vector3) - { - if (!world().isRemote) - { - return FluidUtility.playerActivatedFluidItem(world(), x(), y(), z(), player, side); - } + @Override + protected boolean use(EntityPlayer player, int side, Vector3 vector3) + { + if (!world().isRemote) + { + return FluidUtility.playerActivatedFluidItem(world(), x(), y(), z(), player, side); + } - return true; - } + return true; + } - @Override - public int getComparatorInputOverride(int side) - { - if (getNetwork().getTank().getFluid() != null) - { - return (int) (15 * ((double) getNetwork().getTank().getFluidAmount() / (double) getNetwork().getTank().getCapacity())); - } - return 0; - } + @Override + public int getComparatorInputOverride(int side) + { + if (getNetwork().getTank().getFluid() != null) + { + return (int) (15 * ((double) getNetwork().getTank().getFluidAmount() / (double) getNetwork().getTank().getCapacity())); + } + return 0; + } - @Override - public int getLightValue(IBlockAccess access) - { - if (getInternalTank().getFluid() != null) - { - return getInternalTank().getFluid().getFluid().getLuminosity(); - } - return super.getLightValue(access); - } + @Override + public int getLightValue(IBlockAccess access) + { + if (getInternalTank().getFluid() != null) + { + return getInternalTank().getFluid().getFluid().getLuminosity(); + } + return super.getLightValue(access); + } - @Override - public FluidDistributionetwork getNetwork() - { - if (this.network == null) - { - this.network = new TankNetwork(); - this.network.addConnector(this); - } - return this.network; - } + @Override + public FluidDistributionetwork getNetwork() + { + if (this.network == null) + { + this.network = new TankNetwork(); + this.network.addConnector(this); + } + return this.network; + } - @Override - public void setNetwork(FluidDistributionetwork network) - { - if (network instanceof TankNetwork) - { - this.network = network; - } - } + @Override + public void setNetwork(FluidDistributionetwork network) + { + if (network instanceof TankNetwork) + { + this.network = network; + } + } - @Override - public void validateConnectionSide(TileEntity tileEntity, ForgeDirection side) - { - if (!this.worldObj.isRemote) - { - if (tileEntity instanceof TileTank) - { - getNetwork().merge(((IFluidDistribution) tileEntity).getNetwork()); - renderSides = WorldUtility.setEnableSide(renderSides, side, true); - connectedBlocks[side.ordinal()] = tileEntity; - } - } - } + @Override + public void validateConnectionSide(TileEntity tileEntity, ForgeDirection side) + { + if (!this.worldObj.isRemote) + { + if (tileEntity instanceof TileTank) + { + getNetwork().merge(((IFluidDistribution) tileEntity).getNetwork()); + renderSides = WorldUtility.setEnableSide(renderSides, side, true); + connectedBlocks[side.ordinal()] = tileEntity; + } + } + } - @SideOnly(Side.CLIENT) - @Override - protected TileRender newRenderer() - { - return new TileRender() - { - @Override - public boolean renderStatic(RenderBlocks renderer, Vector3 position) - { - RenderBlockUtility.tessellateBlockWithConnectedTextures(renderSides, world(), x(), y(), z(), Archaic.blockTank, null, RenderUtility.getIcon(Reference.PREFIX + "tankEdge")); - return true; - } + @SideOnly(Side.CLIENT) + @Override + protected TileRender newRenderer() + { + return new TileRender() + { + @Override + public boolean renderStatic(RenderBlocks renderer, Vector3 position) + { + RenderBlockUtility.tessellateBlockWithConnectedTextures(renderSides, world(), x(), y(), z(), Archaic.blockTank, null, RenderUtility.getIcon(Reference.PREFIX + "tankEdge")); + return true; + } - public void renderTank(TileEntity tileEntity, double x, double y, double z, FluidStack fluid) - { - if (tileEntity.worldObj != null && tileEntity instanceof TileTank) - { - GL11.glPushMatrix(); - GL11.glTranslated(x + 0.5, y + 0.5, z + 0.5); + public void renderTank(TileEntity tileEntity, double x, double y, double z, FluidStack fluid) + { + if (tileEntity.worldObj != null && tileEntity instanceof TileTank) + { + GL11.glPushMatrix(); + GL11.glTranslated(x + 0.5, y + 0.5, z + 0.5); - if (fluid != null) - { - GL11.glPushMatrix(); + if (fluid != null) + { + GL11.glPushMatrix(); - if (!fluid.getFluid().isGaseous()) - { - GL11.glScaled(0.99, 0.99, 0.99); - FluidTank tank = ((TileTank) tileEntity).getInternalTank(); - double percentageFilled = (double) tank.getFluidAmount() / (double) tank.getCapacity(); + if (!fluid.getFluid().isGaseous()) + { + GL11.glScaled(0.99, 0.99, 0.99); + FluidTank tank = ((TileTank) tileEntity).getInternalTank(); + double percentageFilled = (double) tank.getFluidAmount() / (double) tank.getCapacity(); - double ySouthEast = FluidUtility.getAveragePercentageFilledForSides(TileTank.class, percentageFilled, tileEntity.worldObj, new Vector3(tileEntity), ForgeDirection.SOUTH, ForgeDirection.EAST); - double yNorthEast = FluidUtility.getAveragePercentageFilledForSides(TileTank.class, percentageFilled, tileEntity.worldObj, new Vector3(tileEntity), ForgeDirection.NORTH, ForgeDirection.EAST); - double ySouthWest = FluidUtility.getAveragePercentageFilledForSides(TileTank.class, percentageFilled, tileEntity.worldObj, new Vector3(tileEntity), ForgeDirection.SOUTH, ForgeDirection.WEST); - double yNorthWest = FluidUtility.getAveragePercentageFilledForSides(TileTank.class, percentageFilled, tileEntity.worldObj, new Vector3(tileEntity), ForgeDirection.NORTH, ForgeDirection.WEST); - FluidRenderUtility.renderFluidTesselation(tank, ySouthEast, yNorthEast, ySouthWest, yNorthWest); - } - else - { - GL11.glTranslated(-0.5, -0.5, -0.5); - GL11.glScaled(0.99, 0.99, 0.99); - int capacity = tileEntity instanceof TileTank ? ((TileTank) tileEntity).getInternalTank().getCapacity() : fluid.amount; - double filledPercentage = (double) fluid.amount / (double) capacity; - double renderPercentage = fluid.getFluid().isGaseous() ? 1 : filledPercentage; + double ySouthEast = FluidUtility.getAveragePercentageFilledForSides(TileTank.class, percentageFilled, tileEntity.worldObj, new Vector3(tileEntity), ForgeDirection.SOUTH, ForgeDirection.EAST); + double yNorthEast = percentageFilled;//FluidUtility.getAveragePercentageFilledForSides(TileTank.class, percentageFilled, tileEntity.worldObj, new Vector3(tileEntity), ForgeDirection.NORTH, ForgeDirection.EAST); + double ySouthWest = percentageFilled;//FluidUtility.getAveragePercentageFilledForSides(TileTank.class, percentageFilled, tileEntity.worldObj, new Vector3(tileEntity), ForgeDirection.SOUTH, ForgeDirection.WEST); + double yNorthWest = percentageFilled;//FluidUtility.getAveragePercentageFilledForSides(TileTank.class, percentageFilled, tileEntity.worldObj, new Vector3(tileEntity), ForgeDirection.NORTH, ForgeDirection.WEST); + FluidRenderUtility.renderFluidTesselation(tank, ySouthEast, yNorthEast, ySouthWest, yNorthWest); + } + else + { + GL11.glTranslated(-0.5, -0.5, -0.5); + GL11.glScaled(0.99, 0.99, 0.99); + int capacity = tileEntity instanceof TileTank ? ((TileTank) tileEntity).getInternalTank().getCapacity() : fluid.amount; + double filledPercentage = (double) fluid.amount / (double) capacity; + double renderPercentage = fluid.getFluid().isGaseous() ? 1 : filledPercentage; - int[] displayList = FluidRenderUtility.getFluidDisplayLists(fluid, tileEntity.worldObj, false); + int[] displayList = FluidRenderUtility.getFluidDisplayLists(fluid, tileEntity.worldObj, false); - GL11.glPushAttrib(GL11.GL_ENABLE_BIT); - GL11.glEnable(GL11.GL_CULL_FACE); - GL11.glDisable(GL11.GL_LIGHTING); - GL11.glEnable(GL11.GL_BLEND); - GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GL11.glPushAttrib(GL11.GL_ENABLE_BIT); + GL11.glEnable(GL11.GL_CULL_FACE); + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); - Color color = new Color(fluid.getFluid().getColor()); - RenderUtility.enableBlending(); - GL11.glColor4d(color.getRed() / 255f, color.getGreen() / 255f, color.getBlue() / 255f, fluid.getFluid().isGaseous() ? filledPercentage : 1); + Color color = new Color(fluid.getFluid().getColor()); + RenderUtility.enableBlending(); + GL11.glColor4d(color.getRed() / 255f, color.getGreen() / 255f, color.getBlue() / 255f, fluid.getFluid().isGaseous() ? filledPercentage : 1); - RenderUtility.bind(FluidRenderUtility.getFluidSheet(fluid)); - GL11.glCallList(displayList[(int) (renderPercentage * (FluidRenderUtility.DISPLAY_STAGES - 1))]); - RenderUtility.disableBlending(); - GL11.glPopAttrib(); - } + RenderUtility.bind(FluidRenderUtility.getFluidSheet(fluid)); + GL11.glCallList(displayList[(int) (renderPercentage * (FluidRenderUtility.DISPLAY_STAGES - 1))]); + RenderUtility.disableBlending(); + GL11.glPopAttrib(); + } - GL11.glPopMatrix(); - } + GL11.glPopMatrix(); + } - GL11.glPopMatrix(); - } - } + GL11.glPopMatrix(); + } + } - @Override - public boolean renderDynamic(Vector3 position, boolean isItem, float frame) - { - renderTank(TileTank.this, position.x, position.y, position.z, getInternalTank().getFluid()); - return false; - } + @Override + public boolean renderDynamic(Vector3 position, boolean isItem, float frame) + { + renderTank(TileTank.this, position.x, position.y, position.z, getInternalTank().getFluid()); + return false; + } - @Override - public boolean renderItem(ItemStack itemStack) - { - GL11.glPushMatrix(); - GL11.glTranslated(0.5, 0.5, 0.5); - RenderBlockUtility.tessellateBlockWithConnectedTextures(itemStack.getItemDamage(), Archaic.blockTank, null, RenderUtility.getIcon(Reference.PREFIX + "tankEdge")); - GL11.glPopMatrix(); + @Override + public boolean renderItem(ItemStack itemStack) + { + GL11.glPushMatrix(); + GL11.glTranslated(0.5, 0.5, 0.5); + RenderBlockUtility.tessellateBlockWithConnectedTextures(itemStack.getItemDamage(), Archaic.blockTank, null, RenderUtility.getIcon(Reference.PREFIX + "tankEdge")); + GL11.glPopMatrix(); - GL11.glPushMatrix(); - GL11.glTranslated(0, -0.1, 0); + GL11.glPushMatrix(); + GL11.glTranslated(0, -0.1, 0); - FluidStack fluid = null; + FluidStack fluid = null; - if (itemStack.getTagCompound() != null && itemStack.getTagCompound().hasKey("fluid")) - { - fluid = FluidStack.loadFluidStackFromNBT(itemStack.getTagCompound().getCompoundTag("fluid")); - } + if (itemStack.getTagCompound() != null && itemStack.getTagCompound().hasKey("fluid")) + { + fluid = FluidStack.loadFluidStackFromNBT(itemStack.getTagCompound().getCompoundTag("fluid")); + } - renderTank(TileTank.this, 0, 0, 0, fluid); - GL11.glPopMatrix(); - return true; - } - }; - } + renderTank(TileTank.this, 0, 0, 0, fluid); + GL11.glPopMatrix(); + return true; + } + }; + } - @Override - public List getRemovedItems(EntityPlayer entity) - { - List drops = new ArrayList(); + @Override + public List getRemovedItems(EntityPlayer entity) + { + List drops = new ArrayList(); - ItemStack itemStack = new ItemStack(Archaic.blockTank, 1, 0); - if (itemStack != null) - { - if (getInternalTank() != null && getInternalTank().getFluid() != null) - { - FluidStack stack = getInternalTank().getFluid(); + ItemStack itemStack = new ItemStack(Archaic.blockTank, 1, 0); + if (itemStack != null) + { + if (getInternalTank() != null && getInternalTank().getFluid() != null) + { + FluidStack stack = getInternalTank().getFluid(); - if (stack != null) - { - if (itemStack.getTagCompound() == null) - { - itemStack.setTagCompound(new NBTTagCompound()); - } - drain(ForgeDirection.UNKNOWN, stack.amount, false); - itemStack.getTagCompound().setCompoundTag("fluid", stack.writeToNBT(new NBTTagCompound())); - } - } - drops.add(itemStack); - } - return drops; - } + if (stack != null) + { + if (itemStack.getTagCompound() == null) + { + itemStack.setTagCompound(new NBTTagCompound()); + } + drain(ForgeDirection.UNKNOWN, stack.amount, false); + itemStack.getTagCompound().setCompoundTag("fluid", stack.writeToNBT(new NBTTagCompound())); + } + } + drops.add(itemStack); + } + return drops; + } } diff --git a/src/main/scala/resonantinduction/core/grid/fluid/TileFluidDistribution.java b/src/main/scala/resonantinduction/core/grid/fluid/TileFluidDistribution.java index 80ea203c..66647cba 100644 --- a/src/main/scala/resonantinduction/core/grid/fluid/TileFluidDistribution.java +++ b/src/main/scala/resonantinduction/core/grid/fluid/TileFluidDistribution.java @@ -9,145 +9,151 @@ import net.minecraftforge.fluids.FluidTankInfo; import resonant.lib.utility.WorldUtility; import universalelectricity.api.vector.Vector3; -/** A prefab class for tiles that use the fluid network. - * - * @author DarkGuardsman */ +/** + * A prefab class for tiles that use the fluid network. + * + * @author DarkGuardsman + */ public abstract class TileFluidDistribution extends TileFluidNode implements IFluidDistribution { - protected Object[] connectedBlocks = new Object[6]; + protected Object[] connectedBlocks = new Object[6]; - /** Network used to link all parts together */ - protected FluidDistributionetwork network; + /** + * Network used to link all parts together + */ + protected FluidDistributionetwork network; - public TileFluidDistribution(Material material, int tankSize) - { - super(material, tankSize); - } + public TileFluidDistribution(Material material, int tankSize) + { + super(material, tankSize); + } - @Override - public void initiate() - { - super.initiate(); - refresh(); - getNetwork().reconstruct(); - } + @Override + public void initiate() + { + super.initiate(); + refresh(); + getNetwork().reconstruct(); + } - @Override - protected void onNeighborChanged() - { - refresh(); - } + @Override + protected void onNeighborChanged() + { + refresh(); + } - @Override - public void invalidate() - { - this.getNetwork().split(this); - super.invalidate(); - } + @Override + public void invalidate() + { + this.getNetwork().split(this); + super.invalidate(); + } - @Override - public int fill(ForgeDirection from, FluidStack resource, boolean doFill) - { - return getNetwork().fill(this, from, resource, doFill); - } + @Override + public int fill(ForgeDirection from, FluidStack resource, boolean doFill) + { + return getNetwork().fill(this, from, resource, doFill); + } - @Override - public FluidStack drain(ForgeDirection from, FluidStack resource, boolean doDrain) - { - return getNetwork().drain(this, from, resource, doDrain); - } + @Override + public FluidStack drain(ForgeDirection from, FluidStack resource, boolean doDrain) + { + return getNetwork().drain(this, from, resource, doDrain); + } - @Override - public FluidStack drain(ForgeDirection from, int maxDrain, boolean doDrain) - { - return getNetwork().drain(this, from, maxDrain, doDrain); - } + @Override + public FluidStack drain(ForgeDirection from, int maxDrain, boolean doDrain) + { + return getNetwork().drain(this, from, maxDrain, doDrain); + } - @Override - public boolean canFill(ForgeDirection from, Fluid fluid) - { - return true; - } + @Override + public boolean canFill(ForgeDirection from, Fluid fluid) + { + return true; + } - @Override - public boolean canDrain(ForgeDirection from, Fluid fluid) - { - return true; - } + @Override + public boolean canDrain(ForgeDirection from, Fluid fluid) + { + return true; + } - @Override - public FluidTankInfo[] getTankInfo(ForgeDirection from) - { - return new FluidTankInfo[] { getNetwork().getTank().getInfo() }; - } + @Override + public FluidTankInfo[] getTankInfo(ForgeDirection from) + { + return new FluidTankInfo[] { getInternalTank().getInfo() }; + } - @Override - public Object[] getConnections() - { - return connectedBlocks; - } + @Override + public Object[] getConnections() + { + return connectedBlocks; + } - public void refresh() - { - if (this.worldObj != null && !this.worldObj.isRemote) - { - byte previousConnections = renderSides; - connectedBlocks = new Object[6]; - renderSides = 0; + public void refresh() + { + if (this.worldObj != null && !this.worldObj.isRemote) + { + byte previousConnections = renderSides; + connectedBlocks = new Object[6]; + renderSides = 0; - for (ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) - { - this.validateConnectionSide(new Vector3(this).translate(dir).getTileEntity(worldObj), dir); - } + for (ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) + { + this.validateConnectionSide(new Vector3(this).translate(dir).getTileEntity(worldObj), dir); + } - /** Only send packet updates if visuallyConnected changed. */ - if (previousConnections != renderSides) - { - getNetwork().update(); - getNetwork().reconstruct(); - sendRenderUpdate(); - } - } + /** Only send packet updates if visuallyConnected changed. */ + if (previousConnections != renderSides) + { + getNetwork().update(); + getNetwork().reconstruct(); + sendRenderUpdate(); + } + } - } + } - /** Checks to make sure the connection is valid to the tileEntity - * - * @param tileEntity - the tileEntity being checked - * @param side - side the connection is too */ - public void validateConnectionSide(TileEntity tileEntity, ForgeDirection side) - { - if (!this.worldObj.isRemote) - { - if (tileEntity instanceof IFluidDistribution) - { - this.getNetwork().merge(((IFluidDistribution) tileEntity).getNetwork()); - renderSides = WorldUtility.setEnableSide(renderSides, side, true); - connectedBlocks[side.ordinal()] = tileEntity; - } - } - } + /** + * Checks to make sure the connection is valid to the tileEntity + * + * @param tileEntity - the tileEntity being checked + * @param side - side the connection is too + */ + public void validateConnectionSide(TileEntity tileEntity, ForgeDirection side) + { + if (!this.worldObj.isRemote) + { + if (tileEntity instanceof IFluidDistribution) + { + this.getNetwork().merge(((IFluidDistribution) tileEntity).getNetwork()); + renderSides = WorldUtility.setEnableSide(renderSides, side, true); + connectedBlocks[side.ordinal()] = tileEntity; + } + } + } - public int getSubID() - { - return this.colorID; - } + public int getSubID() + { + return this.colorID; + } - public void setSubID(int id) - { - this.colorID = id; - } + public void setSubID(int id) + { + this.colorID = id; + } - @Override - public boolean canConnect(ForgeDirection direction, Object obj) - { - return true; - } + @Override + public boolean canConnect(ForgeDirection direction, Object obj) + { + return true; + } - @Override - public IFluidDistribution getInstance(ForgeDirection from) - { - return this; - } + @Override + public IFluidDistribution getInstance(ForgeDirection from) + { + return this; + } } diff --git a/src/main/scala/resonantinduction/core/grid/fluid/TileFluidNode.java b/src/main/scala/resonantinduction/core/grid/fluid/TileFluidNode.java index 24878c8a..b2824487 100644 --- a/src/main/scala/resonantinduction/core/grid/fluid/TileFluidNode.java +++ b/src/main/scala/resonantinduction/core/grid/fluid/TileFluidNode.java @@ -57,7 +57,7 @@ public abstract class TileFluidNode extends TileBase implements IPacketReceiverW sendTankUpdate(); markTankUpdate = false; } - } + } @Override public void readFromNBT(NBTTagCompound nbt) @@ -138,7 +138,7 @@ public abstract class TileFluidNode extends TileBase implements IPacketReceiverW { if (!worldObj.isRemote) { - if (!FluidUtility.matchExact(prevStack, getInternalTank().getFluid())) + if (!FluidUtility.matchExact(prevStack, getInternalTank().getFluid()) || ticks == 0) { markTankUpdate = true; prevStack = tank.getFluid() != null ? tank.getFluid().copy() : null; From 38aa020db30041dab364461c979a5c729f660f2b Mon Sep 17 00:00:00 2001 From: Calclavia Date: Fri, 20 Jun 2014 16:33:02 -0700 Subject: [PATCH 57/62] Fixed tank not having its animation --- .../archaic/fluid/tank/TankNetwork.java | 183 ++++++++---------- 1 file changed, 82 insertions(+), 101 deletions(-) diff --git a/archaic/src/main/scala/resonantinduction/archaic/fluid/tank/TankNetwork.java b/archaic/src/main/scala/resonantinduction/archaic/fluid/tank/TankNetwork.java index 8b2d1ae1..ac0e8af5 100644 --- a/archaic/src/main/scala/resonantinduction/archaic/fluid/tank/TankNetwork.java +++ b/archaic/src/main/scala/resonantinduction/archaic/fluid/tank/TankNetwork.java @@ -1,10 +1,13 @@ package resonantinduction.archaic.fluid.tank; +import java.util.Comparator; import java.util.HashMap; import java.util.LinkedList; +import java.util.PriorityQueue; import net.minecraft.tileentity.TileEntity; import net.minecraftforge.fluids.FluidStack; +import resonant.lib.utility.FluidUtility; import resonantinduction.core.grid.fluid.FluidDistributionetwork; import resonantinduction.core.grid.fluid.IFluidDistribution; @@ -22,119 +25,97 @@ public class TankNetwork extends FluidDistributionetwork @Override public void update() { - final FluidStack networkTankFluid = getTank().getFluid(); - int lowestY = 255; - int highestY = 0; - int connectorCount; - int totalFluid = networkTankFluid != null ? networkTankFluid.amount : 0; + final FluidStack networkTankFluid = getTank().getFluid(); + int lowestY = 255, highestY = 0; - //If we only have one tank only fill one tank + if (getConnectors().size() > 0) + { + int totalFluid = networkTankFluid != null ? networkTankFluid.amount : 0; - if (getConnectors().size() > 0) - { - IFluidDistribution tank = ((IFluidDistribution) getConnectors().toArray()[0]); - if (getConnectors().size() == 1) - { - tank.getInternalTank().setFluid(networkTankFluid); - tank.onFluidChanged(); - needsUpdate = false; - return; - } - if (networkTankFluid != null) - { - //If fluid is gaseous fill all tanks equally - if (networkTankFluid.getFluid().isGaseous()) - { - connectorCount = this.getConnectors().size(); - for (IFluidDistribution connector : this.getConnectors()) - { - FluidStack input = networkTankFluid.copy(); - input.amount = (totalFluid / connectorCount) + (totalFluid % connectorCount); - connector.getInternalTank().setFluid(null); - totalFluid -= connector.getInternalTank().fill(input, true); - connector.onFluidChanged(); + HashMap heightCount = new HashMap(); + PriorityQueue heightPriorityQueue = new PriorityQueue(1024, new Comparator() + { + @Override + public int compare(Object a, Object b) + { + if (networkTankFluid != null && networkTankFluid.getFluid().isGaseous()) + return 0; - if (connectorCount > 0) - connectorCount--; - } - } - else - { - HashMap> heightMap = new HashMap(); + TileEntity wa = (TileEntity) a; + TileEntity wb = (TileEntity) b; + return wa.yCoord - wb.yCoord; + } + }); - //Build map of all tanks by their y level - for (IFluidDistribution connector : this.getConnectors()) - { - if (connector instanceof TileEntity) - { - LinkedList list = new LinkedList(); - int yCoord = ((TileEntity) connector).yCoord; + for (IFluidDistribution connector : this.getConnectors()) + { + if (connector instanceof TileEntity) + { + int yCoord = ((TileEntity) connector).yCoord; - if (yCoord < lowestY) - { - lowestY = yCoord; - } + if (yCoord < lowestY) + { + lowestY = yCoord; + } - if (yCoord > highestY) - { - highestY = yCoord; - } + if (yCoord > highestY) + { + highestY = yCoord; + } - if (heightMap.containsKey(yCoord)) - { - list = heightMap.get(yCoord); - } - list.add(connector); - heightMap.put(yCoord, list); - } - } + heightPriorityQueue.add(connector); + heightCount.put(yCoord, heightCount.containsKey(yCoord) ? heightCount.get(yCoord) + 1 : 1); + } + } - //Loop threw levels - for (int yLevel = lowestY; yLevel <= highestY; yLevel++) - { - if (heightMap.containsKey(yLevel)) - { - connectorCount = heightMap.get(yLevel).size(); + boolean didChange = false; - if (connectorCount <= 0) - continue; - //Loop threw tanks in each level - for (IFluidDistribution connector : heightMap.get(yLevel)) - { - //If tank is empty clear internal and move on - if (totalFluid <= 0) - { - connector.getInternalTank().setFluid(null); - connector.onFluidChanged(); - continue; - } + while (!heightPriorityQueue.isEmpty()) + { + IFluidDistribution distributeNode = heightPriorityQueue.poll(); + int yCoord = ((TileEntity) distributeNode).yCoord; + int connectorCount = heightCount.get(yCoord); - FluidStack input = networkTankFluid.copy(); - input.amount = (totalFluid / connectorCount) + (totalFluid % connectorCount); - connector.getInternalTank().setFluid(null); - totalFluid -= connector.getInternalTank().fill(input, true); - connector.onFluidChanged(); + if (totalFluid <= 0) + { + distributeNode.getInternalTank().setFluid(null); + distributeNode.onFluidChanged(); + continue; + } - if (connectorCount > 1) - connectorCount--; + int fluidPer = totalFluid / connectorCount; + int deltaFluidAmount = fluidPer - distributeNode.getInternalTank().getFluidAmount(); - } - } - } - } - } - else - { - //In the cases the tank is empty just clear all tanks - //instead of doing additional logic that is wasting ticks - for (IFluidDistribution connector : this.getConnectors()) - { - connector.getInternalTank().setFluid(null); - connector.onFluidChanged(); - } - } - } - needsUpdate = false; + int current = distributeNode.getInternalTank().getFluidAmount(); + + if (deltaFluidAmount > 0) + { + int filled = distributeNode.getInternalTank().fill(FluidUtility.getStack(networkTankFluid, deltaFluidAmount), false); + distributeNode.getInternalTank().fill(FluidUtility.getStack(networkTankFluid, deltaFluidAmount / 10), true); + totalFluid -= current + filled; + } + else + { + FluidStack drain = distributeNode.getInternalTank().drain(Math.abs(deltaFluidAmount), false); + distributeNode.getInternalTank().drain(Math.abs(deltaFluidAmount / 10), true); + + if (drain != null) + totalFluid -= current - drain.amount; + } + + if (deltaFluidAmount != 0) + didChange = true; + + if (connectorCount > 1) + connectorCount--; + + heightCount.put(yCoord, connectorCount); + distributeNode.onFluidChanged(); + } + + if (!didChange) + needsUpdate = false; + } } @Override From 0daba1a5771c92dbd3526d40b44a14ce35bd7948 Mon Sep 17 00:00:00 2001 From: Calclavia Date: Fri, 20 Jun 2014 16:58:16 -0700 Subject: [PATCH 58/62] Patched some sync blocks preventing mechanical concurrent modification --- .../energy/grid/MechanicalNode.java | 667 +++++++++--------- .../mechanical/gear/GearNode.java | 487 ++++++------- .../mechanical/gearshaft/GearShaftNode.java | 195 ++--- 3 files changed, 695 insertions(+), 654 deletions(-) diff --git a/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/MechanicalNode.java b/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/MechanicalNode.java index b3309fb0..5015a15e 100644 --- a/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/MechanicalNode.java +++ b/mechanical/src/main/scala/resonantinduction/mechanical/energy/grid/MechanicalNode.java @@ -17,382 +17,413 @@ import universalelectricity.api.vector.IVectorWorld; import universalelectricity.api.vector.Vector3; import codechicken.multipart.TMultiPart; -/** A mechanical node for mechanical energy. - * - * @author Calclavia, Darkguardsman */ +/** + * A mechanical node for mechanical energy. + * + * @author Calclavia, Darkguardsman + */ public class MechanicalNode implements IMechanicalNode, ISaveObj, IVectorWorld { - /** Is debug enabled for the node */ - public boolean doDebug = false; - /** Used to note that you should trigger a packet update for rotation */ - public boolean markRotationUpdate = false; - public boolean markTorqueUpdate = false; - /** Which section of debug is enabled */ - public int debugCue = 0, maxDebugCue = 1, minDebugCue = 0; - public static final int UPDATE_DEBUG = 0, CONNECTION_DEBUG = 1; - /** Rotational Force */ - public double torque = 0, prevTorque; - /** Rotational speed */ - public double prevAngularVelocity, angularVelocity = 0; - /** Rotational acceleration */ - public float acceleration = 2f; + /** + * Is debug enabled for the node + */ + public boolean doDebug = false; + /** + * Used to note that you should trigger a packet update for rotation + */ + public boolean markRotationUpdate = false; + public boolean markTorqueUpdate = false; + /** + * Which section of debug is enabled + */ + public int debugCue = 0, maxDebugCue = 1, minDebugCue = 0; + public static final int UPDATE_DEBUG = 0, CONNECTION_DEBUG = 1; + /** + * Rotational Force + */ + public double torque = 0, prevTorque; + /** + * Rotational speed + */ + public double prevAngularVelocity, angularVelocity = 0; + /** + * Rotational acceleration + */ + public float acceleration = 2f; - /** The current rotation of the mechanical node. */ - public double renderAngle = 0, prev_angle = 0; - /** Limits the max distance an object can rotate in a single update */ - protected double maxDeltaAngle = Math.toRadians(180); + /** + * The current rotation of the mechanical node. + */ + public double renderAngle = 0, prev_angle = 0; + /** + * Limits the max distance an object can rotate in a single update + */ + protected double maxDeltaAngle = Math.toRadians(180); - protected double load = 2; - protected byte connectionMap = Byte.parseByte("111111", 2); + protected double load = 2; + protected byte connectionMap = Byte.parseByte("111111", 2); - private double power = 0; - private INodeProvider parent; - private long ticks = 0; + private double power = 0; + private INodeProvider parent; + private long ticks = 0; - private final AbstractMap connections = new WeakHashMap(); + private final AbstractMap connections = new WeakHashMap(); - public MechanicalNode(INodeProvider parent) - { - this.setParent(parent); - } + public MechanicalNode(INodeProvider parent) + { + this.setParent(parent); + } - @Override - public MechanicalNode setLoad(double load) - { - this.load = load; - return this; - } + @Override + public MechanicalNode setLoad(double load) + { + this.load = load; + return this; + } - public MechanicalNode setConnection(byte connectionMap) - { - this.connectionMap = connectionMap; - return this; - } + public MechanicalNode setConnection(byte connectionMap) + { + this.connectionMap = connectionMap; + return this; + } - @Override - public double getRadius() - { - return 0.5; - } + @Override + public double getRadius() + { + return 0.5; + } - public void update() - { - update(0.05f); - } + public void update() + { + update(0.05f); + } - @Override - public void update(float deltaTime) - { - ticks++; - if (ticks >= Long.MAX_VALUE) - { - ticks = 1; - } - //temp, TODO find a better way to trigger this - if (ticks % 100 == 0) - { - this.recache(); - } - //----------------------------------- - // Render Update - //----------------------------------- + @Override + public void update(float deltaTime) + { + ticks++; + if (ticks >= Long.MAX_VALUE) + { + ticks = 1; + } + //temp, TODO find a better way to trigger this + if (ticks % 100 == 0) + { + this.recache(); + } + //----------------------------------- + // Render Update + //----------------------------------- - if (angularVelocity >= 0) - { - renderAngle += Math.min(angularVelocity, this.maxDeltaAngle) * deltaTime; - } - else - { - renderAngle += Math.max(angularVelocity, -this.maxDeltaAngle) * deltaTime; - } + if (angularVelocity >= 0) + { + renderAngle += Math.min(angularVelocity, this.maxDeltaAngle) * deltaTime; + } + else + { + renderAngle += Math.max(angularVelocity, -this.maxDeltaAngle) * deltaTime; + } - if (renderAngle % (Math.PI * 2) != renderAngle) - { - revolve(); - renderAngle = renderAngle % (Math.PI * 2); - } + if (renderAngle % (Math.PI * 2) != renderAngle) + { + revolve(); + renderAngle = renderAngle % (Math.PI * 2); + } - //----------------------------------- - // Server side Update - //----------------------------------- - if (world() != null && !world().isRemote) - { - final double acceleration = this.acceleration * deltaTime; + //----------------------------------- + // Server side Update + //----------------------------------- + if (world() != null && !world().isRemote) + { + final double acceleration = this.acceleration * deltaTime; - if (Math.abs(prevAngularVelocity - angularVelocity) > 0.01f) - { - prevAngularVelocity = angularVelocity; - markRotationUpdate = true; - } + if (Math.abs(prevAngularVelocity - angularVelocity) > 0.01f) + { + prevAngularVelocity = angularVelocity; + markRotationUpdate = true; + } - if (Math.abs(prevTorque - torque) > 0.01f) - { - prevTorque = torque; - markTorqueUpdate = true; - } + if (Math.abs(prevTorque - torque) > 0.01f) + { + prevTorque = torque; + markTorqueUpdate = true; + } - //----------------------------------- - // Loss calculations - //----------------------------------- - double torqueLoss = Math.min(Math.abs(getTorque()), (Math.abs(getTorque() * getTorqueLoad()) + getTorqueLoad() / 10) * deltaTime); - torque += torque > 0 ? -torqueLoss : torqueLoss; + //----------------------------------- + // Loss calculations + //----------------------------------- + double torqueLoss = Math.min(Math.abs(getTorque()), (Math.abs(getTorque() * getTorqueLoad()) + getTorqueLoad() / 10) * deltaTime); + torque += torque > 0 ? -torqueLoss : torqueLoss; - double velocityLoss = Math.min(Math.abs(getAngularSpeed()), (Math.abs(getAngularSpeed() * getAngularVelocityLoad()) + getAngularVelocityLoad() / 10) * deltaTime); - angularVelocity += angularVelocity > 0 ? -velocityLoss : velocityLoss; + double velocityLoss = Math.min(Math.abs(getAngularSpeed()), (Math.abs(getAngularSpeed() * getAngularVelocityLoad()) + getAngularVelocityLoad() / 10) * deltaTime); + angularVelocity += angularVelocity > 0 ? -velocityLoss : velocityLoss; - if (getEnergy() <= 0) - { - angularVelocity = torque = 0; - } + if (getEnergy() <= 0) + { + angularVelocity = torque = 0; + } - power = getEnergy() / deltaTime; + power = getEnergy() / deltaTime; - //----------------------------------- - // Connection application of force and speed - //----------------------------------- - synchronized (getConnections()) - { - Iterator> it = getConnections().entrySet().iterator(); + //----------------------------------- + // Connection application of force and speed + //----------------------------------- + synchronized (getConnections()) + { + Iterator> it = getConnections().entrySet().iterator(); - while (it.hasNext()) - { - Entry entry = it.next(); + while (it.hasNext()) + { + Entry entry = it.next(); - ForgeDirection dir = entry.getValue(); - MechanicalNode adjacentMech = entry.getKey(); - /** Calculate angular velocity and torque. */ - float ratio = adjacentMech.getRatio(dir.getOpposite(), this) / getRatio(dir, adjacentMech); - boolean inverseRotation = inverseRotation(dir, adjacentMech) && adjacentMech.inverseRotation(dir.getOpposite(), this); + ForgeDirection dir = entry.getValue(); + MechanicalNode adjacentMech = entry.getKey(); + /** Calculate angular velocity and torque. */ + float ratio = adjacentMech.getRatio(dir.getOpposite(), this) / getRatio(dir, adjacentMech); + boolean inverseRotation = inverseRotation(dir, adjacentMech) && adjacentMech.inverseRotation(dir.getOpposite(), this); - int inversion = inverseRotation ? -1 : 1; + int inversion = inverseRotation ? -1 : 1; - double targetTorque = inversion * adjacentMech.getTorque() / ratio; - double applyTorque = targetTorque * acceleration; + double targetTorque = inversion * adjacentMech.getTorque() / ratio; + double applyTorque = targetTorque * acceleration; - if (Math.abs(torque + applyTorque) < Math.abs(targetTorque)) - { - torque += applyTorque; - } - else if (Math.abs(torque - applyTorque) > Math.abs(targetTorque)) - { - torque -= applyTorque; - } + if (Math.abs(torque + applyTorque) < Math.abs(targetTorque)) + { + torque += applyTorque; + } + else if (Math.abs(torque - applyTorque) > Math.abs(targetTorque)) + { + torque -= applyTorque; + } - double targetVelocity = inversion * adjacentMech.getAngularSpeed() * ratio; - double applyVelocity = targetVelocity * acceleration; + double targetVelocity = inversion * adjacentMech.getAngularSpeed() * ratio; + double applyVelocity = targetVelocity * acceleration; - if (Math.abs(angularVelocity + applyVelocity) < Math.abs(targetVelocity)) - { - angularVelocity += applyVelocity; - } - else if (Math.abs(angularVelocity - applyVelocity) > Math.abs(targetVelocity)) - { - angularVelocity -= applyVelocity; - } + if (Math.abs(angularVelocity + applyVelocity) < Math.abs(targetVelocity)) + { + angularVelocity += applyVelocity; + } + else if (Math.abs(angularVelocity - applyVelocity) > Math.abs(targetVelocity)) + { + angularVelocity -= applyVelocity; + } - /** Set all current rotations */ - // adjacentMech.angle = Math.abs(angle) * (adjacentMech.angle >= 0 ? 1 : -1); - } - } - } + /** Set all current rotations */ + // adjacentMech.angle = Math.abs(angle) * (adjacentMech.angle >= 0 ? 1 : -1); + } + } + } - onUpdate(); - prev_angle = renderAngle; - } + onUpdate(); + prev_angle = renderAngle; + } - protected void onUpdate() - { + protected void onUpdate() + { - } + } - /** Called when one revolution is made. */ - protected void revolve() - { + /** + * Called when one revolution is made. + */ + protected void revolve() + { - } + } - @Override - public void apply(Object source, double torque, double angularVelocity) - { - this.torque += torque; - this.angularVelocity += angularVelocity; - } + @Override + public void apply(Object source, double torque, double angularVelocity) + { + this.torque += torque; + this.angularVelocity += angularVelocity; + } - @Override - public double getTorque() - { - return angularVelocity != 0 ? torque : 0; - } + @Override + public double getTorque() + { + return angularVelocity != 0 ? torque : 0; + } - @Override - public double getAngularSpeed() - { - return torque != 0 ? angularVelocity : 0; - } + @Override + public double getAngularSpeed() + { + return torque != 0 ? angularVelocity : 0; + } - @Override - public float getRatio(ForgeDirection dir, IMechanicalNode with) - { - return 0.5f; - } + @Override + public float getRatio(ForgeDirection dir, IMechanicalNode with) + { + return 0.5f; + } - @Override - public boolean inverseRotation(ForgeDirection dir, IMechanicalNode with) - { - return true; - } + @Override + public boolean inverseRotation(ForgeDirection dir, IMechanicalNode with) + { + return true; + } - /** The energy percentage loss due to resistance in seconds. */ - public double getTorqueLoad() - { - return load; - } + /** + * The energy percentage loss due to resistance in seconds. + */ + public double getTorqueLoad() + { + return load; + } - public double getAngularVelocityLoad() - { - return load; - } + public double getAngularVelocityLoad() + { + return load; + } - /** Checks to see if a connection is allowed from side and from a source */ - public boolean canConnect(ForgeDirection from, Object source) - { - if (source instanceof MechanicalNode) - { - boolean flag = (connectionMap & (1 << from.ordinal())) != 0; - return flag; - } - return false; - } + /** + * Checks to see if a connection is allowed from side and from a source + */ + public boolean canConnect(ForgeDirection from, Object source) + { + if (source instanceof MechanicalNode) + { + boolean flag = (connectionMap & (1 << from.ordinal())) != 0; + return flag; + } + return false; + } - @Override - public double getEnergy() - { - return getTorque() * getAngularSpeed(); - } + @Override + public double getEnergy() + { + return getTorque() * getAngularSpeed(); + } - @Override - public double getPower() - { - return power; - } + @Override + public double getPower() + { + return power; + } - @Override - public void load(NBTTagCompound nbt) - { - torque = nbt.getDouble("torque"); - angularVelocity = nbt.getDouble("angularVelocity"); - } + @Override + public void load(NBTTagCompound nbt) + { + torque = nbt.getDouble("torque"); + angularVelocity = nbt.getDouble("angularVelocity"); + } - @Override - public void save(NBTTagCompound nbt) - { - nbt.setDouble("torque", torque); - nbt.setDouble("angularVelocity", angularVelocity); - } + @Override + public void save(NBTTagCompound nbt) + { + nbt.setDouble("torque", torque); + nbt.setDouble("angularVelocity", angularVelocity); + } - @Override - public void reconstruct() - { - recache(); - } + @Override + public void reconstruct() + { + recache(); + } - @Override - public void deconstruct() - { - for (Entry entry : getConnections().entrySet()) - { - entry.getKey().getConnections().remove(this); - entry.getKey().recache(); - } - getConnections().clear(); - } + @Override + public void deconstruct() + { + for (Entry entry : getConnections().entrySet()) + { + entry.getKey().getConnections().remove(this); + entry.getKey().recache(); + } + getConnections().clear(); + } - @Override - public void recache() - { - getConnections().clear(); + @Override + public void recache() + { + synchronized (this) + { + getConnections().clear(); - for (ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) - { - TileEntity tile = position().translate(dir).getTileEntity(world()); - if (tile instanceof INodeProvider) - { - INode node = ((INodeProvider) tile).getNode(MechanicalNode.class, dir.getOpposite()); - if (node instanceof MechanicalNode) - { - MechanicalNode check = (MechanicalNode) node; - boolean canConnect = canConnect(dir, check); - boolean canOtherConnect = check.canConnect(dir.getOpposite(), this); - if (canConnect && canOtherConnect) - { - getConnections().put(check, dir); - } - } - } - } - } + for (ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) + { + TileEntity tile = position().translate(dir).getTileEntity(world()); + if (tile instanceof INodeProvider) + { + INode node = ((INodeProvider) tile).getNode(MechanicalNode.class, dir.getOpposite()); + if (node instanceof MechanicalNode) + { + MechanicalNode check = (MechanicalNode) node; + boolean canConnect = canConnect(dir, check); + boolean canOtherConnect = check.canConnect(dir.getOpposite(), this); + if (canConnect && canOtherConnect) + { + getConnections().put(check, dir); + } + } + } + } + } + } - /** Gets the node provider for this node */ - public INodeProvider getParent() - { - return parent; - } + /** + * Gets the node provider for this node + */ + public INodeProvider getParent() + { + return parent; + } - /** Sets the node provider for the node */ - public void setParent(INodeProvider parent) - { - this.parent = parent; - } + /** + * Sets the node provider for the node + */ + public void setParent(INodeProvider parent) + { + this.parent = parent; + } - @Override - public String toString() - { - return this.getClass().getSimpleName() + this.hashCode(); - } + @Override + public String toString() + { + return this.getClass().getSimpleName() + this.hashCode(); + } - public AbstractMap getConnections() - { - return connections; - } + public AbstractMap getConnections() + { + return connections; + } - @Override - public World world() - { - return getParent() instanceof TMultiPart ? ((TMultiPart) getParent()).world() : getParent() instanceof TileEntity ? ((TileEntity) getParent()).getWorldObj() : null; - } + @Override + public World world() + { + return getParent() instanceof TMultiPart ? ((TMultiPart) getParent()).world() : getParent() instanceof TileEntity ? ((TileEntity) getParent()).getWorldObj() : null; + } - public Vector3 position() - { - return new Vector3(x(), y(), z()); - } + public Vector3 position() + { + return new Vector3(x(), y(), z()); + } - @Override - public double z() - { - if(this.getParent() instanceof TileEntity) - { - return ((TileEntity)this.getParent()).zCoord; - } - return this.getParent() instanceof TMultiPart && ((TMultiPart) this.getParent()).tile() != null ? ((TMultiPart) this.getParent()).z() : 0; - } + @Override + public double z() + { + if (this.getParent() instanceof TileEntity) + { + return ((TileEntity) this.getParent()).zCoord; + } + return this.getParent() instanceof TMultiPart && ((TMultiPart) this.getParent()).tile() != null ? ((TMultiPart) this.getParent()).z() : 0; + } - @Override - public double x() - { - if(this.getParent() instanceof TileEntity) - { - return ((TileEntity)this.getParent()).xCoord; - } - return this.getParent() instanceof TMultiPart && ((TMultiPart) this.getParent()).tile() != null ? ((TMultiPart) this.getParent()).x() : 0; - } + @Override + public double x() + { + if (this.getParent() instanceof TileEntity) + { + return ((TileEntity) this.getParent()).xCoord; + } + return this.getParent() instanceof TMultiPart && ((TMultiPart) this.getParent()).tile() != null ? ((TMultiPart) this.getParent()).x() : 0; + } - @Override - public double y() - { - if(this.getParent() instanceof TileEntity) - { - return ((TileEntity)this.getParent()).yCoord; - } - return this.getParent() instanceof TMultiPart && ((TMultiPart) this.getParent()).tile() != null ? ((TMultiPart) this.getParent()).y() : 0; - } + @Override + public double y() + { + if (this.getParent() instanceof TileEntity) + { + return ((TileEntity) this.getParent()).yCoord; + } + return this.getParent() instanceof TMultiPart && ((TMultiPart) this.getParent()).tile() != null ? ((TMultiPart) this.getParent()).y() : 0; + } } diff --git a/mechanical/src/main/scala/resonantinduction/mechanical/gear/GearNode.java b/mechanical/src/main/scala/resonantinduction/mechanical/gear/GearNode.java index 7a404b6e..e7055f88 100644 --- a/mechanical/src/main/scala/resonantinduction/mechanical/gear/GearNode.java +++ b/mechanical/src/main/scala/resonantinduction/mechanical/gear/GearNode.java @@ -10,283 +10,290 @@ import codechicken.lib.vec.Rotation; import codechicken.multipart.TMultiPart; import codechicken.multipart.TileMultipart; -/** Node for the gear - * - * @author Calclavia, Edited by: Darkguardsman */ +/** + * Node for the gear + * + * @author Calclavia, Edited by: Darkguardsman + */ public class GearNode extends MechanicalNode { - public GearNode(PartGear parent) - { - super(parent); - } + public GearNode(PartGear parent) + { + super(parent); + } - protected PartGear gear() - { - return (PartGear) this.getParent(); - } + protected PartGear gear() + { + return (PartGear) this.getParent(); + } - @Override - public void onUpdate() - { - super.onUpdate(); - if (!gear().getMultiBlock().isPrimary()) - { - torque = 0; - angularVelocity = 0; - } - else - { - if (gear().tier == 10) - { - torque = 100; - angularVelocity = 100; - } - } - } + @Override + public void onUpdate() + { + super.onUpdate(); + if (!gear().getMultiBlock().isPrimary()) + { + torque = 0; + angularVelocity = 0; + } + else + { + if (gear().tier == 10) + { + torque = 100; + angularVelocity = 100; + } + } + } - @Override - public double getTorqueLoad() - { - // Decelerate the gear based on tier. - switch (gear().tier) - { - default: - return 0.3; - case 1: - return 0.2; - case 2: - return 0.1; - case 10: - return 0; - } - } + @Override + public double getTorqueLoad() + { + // Decelerate the gear based on tier. + switch (gear().tier) + { + default: + return 0.3; + case 1: + return 0.2; + case 2: + return 0.1; + case 10: + return 0; + } + } - @Override - public double getAngularVelocityLoad() - { - // Decelerate the gear based on tier. - switch (gear().tier) - { - default: - return 0.03; - case 1: - return 0.02; - case 2: - return 0.01; - case 10: - return 0; - } - } + @Override + public double getAngularVelocityLoad() + { + // Decelerate the gear based on tier. + switch (gear().tier) + { + default: + return 0.03; + case 1: + return 0.02; + case 2: + return 0.01; + case 10: + return 0; + } + } - @Override - public void recache() - { - getConnections().clear(); + @Override + public void recache() + { + synchronized (this) + { + getConnections().clear(); - /** Only call refresh if this is the main block of a multiblock gear or a single gear block. */ - if (!gear().getMultiBlock().isPrimary() || world() == null) - { - return; - } + /** Only call refresh if this is the main block of a multiblock gear or a single gear block. */ + if (!gear().getMultiBlock().isPrimary() || world() == null) + { + return; + } - /** Look for gears that are back-to-back with this gear. Equate torque. */ - TileEntity tileBehind = new universalelectricity.api.vector.Vector3(gear().tile()).translate(gear().placementSide).getTileEntity(world()); + /** Look for gears that are back-to-back with this gear. Equate torque. */ + TileEntity tileBehind = new universalelectricity.api.vector.Vector3(gear().tile()).translate(gear().placementSide).getTileEntity(world()); - if (tileBehind instanceof INodeProvider) - { - MechanicalNode instance = (MechanicalNode) ((INodeProvider) tileBehind).getNode(MechanicalNode.class, gear().placementSide.getOpposite()); + if (tileBehind instanceof INodeProvider) + { + MechanicalNode instance = (MechanicalNode) ((INodeProvider) tileBehind).getNode(MechanicalNode.class, gear().placementSide.getOpposite()); - if (instance != null && instance != this && !(instance.getParent() instanceof PartGearShaft) && instance.canConnect(gear().placementSide.getOpposite(), this)) - { - getConnections().put(instance, gear().placementSide); - } - } + if (instance != null && instance != this && !(instance.getParent() instanceof PartGearShaft) && instance.canConnect(gear().placementSide.getOpposite(), this)) + { + getConnections().put(instance, gear().placementSide); + } + } - /** Look for gears that are internal and adjacent to this gear. (The 4 sides + the internal - * center) */ - for (int i = 0; i < 6; i++) - { - ForgeDirection checkDir = ForgeDirection.getOrientation(i); + /** Look for gears that are internal and adjacent to this gear. (The 4 sides + the internal + * center) */ + for (int i = 0; i < 6; i++) + { + ForgeDirection checkDir = ForgeDirection.getOrientation(i); - TileEntity tile = gear().tile(); + TileEntity tile = gear().tile(); - if (gear().getMultiBlock().isConstructed() && checkDir != gear().placementSide && checkDir != gear().placementSide.getOpposite()) - { - tile = new universalelectricity.api.vector.Vector3(gear().tile()).translate(checkDir).getTileEntity(world()); - } + if (gear().getMultiBlock().isConstructed() && checkDir != gear().placementSide && checkDir != gear().placementSide.getOpposite()) + { + tile = new universalelectricity.api.vector.Vector3(gear().tile()).translate(checkDir).getTileEntity(world()); + } - if (tile instanceof INodeProvider) - { - /** If we're checking for the block that is opposite to the gear's placement side - * (the center), then we try to look for a gear shaft in the center. */ - MechanicalNode instance = (MechanicalNode) ((INodeProvider) tile).getNode(MechanicalNode.class, checkDir == gear().placementSide.getOpposite() ? ForgeDirection.UNKNOWN : checkDir); + if (tile instanceof INodeProvider) + { + /** If we're checking for the block that is opposite to the gear's placement side + * (the center), then we try to look for a gear shaft in the center. */ + MechanicalNode instance = (MechanicalNode) ((INodeProvider) tile).getNode(MechanicalNode.class, checkDir == gear().placementSide.getOpposite() ? ForgeDirection.UNKNOWN : checkDir); - if (!getConnections().containsValue(checkDir) && instance != this && checkDir != gear().placementSide && instance != null && instance.canConnect(checkDir.getOpposite(), this)) - { - getConnections().put(instance, checkDir); - } - } - } + if (!getConnections().containsValue(checkDir) && instance != this && checkDir != gear().placementSide && instance != null && instance.canConnect(checkDir.getOpposite(), this)) + { + getConnections().put(instance, checkDir); + } + } + } - int displaceCheck = 1; + int displaceCheck = 1; - if (gear().getMultiBlock().isPrimary() && gear().getMultiBlock().isConstructed()) - { - displaceCheck = 2; - } + if (gear().getMultiBlock().isPrimary() && gear().getMultiBlock().isConstructed()) + { + displaceCheck = 2; + } - /** Look for gears outside this block space, the relative UP, DOWN, LEFT, RIGHT */ - for (int i = 0; i < 4; i++) - { - ForgeDirection checkDir = ForgeDirection.getOrientation(Rotation.rotateSide(gear().placementSide.ordinal(), i)); - TileEntity checkTile = new universalelectricity.api.vector.Vector3(gear().tile()).translate(checkDir, displaceCheck).getTileEntity(world()); + /** Look for gears outside this block space, the relative UP, DOWN, LEFT, RIGHT */ + for (int i = 0; i < 4; i++) + { + ForgeDirection checkDir = ForgeDirection.getOrientation(Rotation.rotateSide(gear().placementSide.ordinal(), i)); + TileEntity checkTile = new universalelectricity.api.vector.Vector3(gear().tile()).translate(checkDir, displaceCheck).getTileEntity(world()); - if (!getConnections().containsValue(checkDir) && checkTile instanceof INodeProvider) - { - MechanicalNode instance = (MechanicalNode) ((INodeProvider) checkTile).getNode(MechanicalNode.class, gear().placementSide); + if (!getConnections().containsValue(checkDir) && checkTile instanceof INodeProvider) + { + MechanicalNode instance = (MechanicalNode) ((INodeProvider) checkTile).getNode(MechanicalNode.class, gear().placementSide); - if (instance != null && instance != this && instance.canConnect(checkDir.getOpposite(), this) && !(instance.getParent() instanceof PartGearShaft)) - { - getConnections().put(instance, checkDir); - } - } - } - } + if (instance != null && instance != this && instance.canConnect(checkDir.getOpposite(), this) && !(instance.getParent() instanceof PartGearShaft)) + { + getConnections().put(instance, checkDir); + } + } + } + } + } - /** Can this gear be connected BY the source? - * - * @param from - Direction source is coming from. - * @param with - The source of the connection. - * @return True is so. */ - @Override - public boolean canConnect(ForgeDirection from, Object with) - { - if (!gear().getMultiBlock().isPrimary()) - { - return false; - } + /** + * Can this gear be connected BY the source? + * + * @param from - Direction source is coming from. + * @param with - The source of the connection. + * @return True is so. + */ + @Override + public boolean canConnect(ForgeDirection from, Object with) + { + if (!gear().getMultiBlock().isPrimary()) + { + return false; + } - if (with instanceof MechanicalNode) - { - INodeProvider parent = ((MechanicalNode) with).getParent(); + if (with instanceof MechanicalNode) + { + INodeProvider parent = ((MechanicalNode) with).getParent(); - /** Check for flat connections (gear face on gear face) to make sure it's actually on - * this gear block. */ - if (from == gear().placementSide.getOpposite()) - { - if (parent instanceof PartGear || parent instanceof PartGearShaft) - { - if (parent instanceof PartGearShaft) - { - PartGearShaft shaft = (PartGearShaft) parent; - return shaft.tile().partMap(from.getOpposite().ordinal()) == gear() && Math.abs(shaft.placementSide.offsetX) == Math.abs(gear().placementSide.offsetX) && Math.abs(shaft.placementSide.offsetY) == Math.abs(gear().placementSide.offsetY) && Math.abs(shaft.placementSide.offsetZ) == Math.abs(gear().placementSide.offsetZ); - } - else if (parent instanceof PartGear) - { - if (((PartGear) parent).tile() == gear().tile() && !gear().getMultiBlock().isConstructed()) - { - return true; - } + /** Check for flat connections (gear face on gear face) to make sure it's actually on + * this gear block. */ + if (from == gear().placementSide.getOpposite()) + { + if (parent instanceof PartGear || parent instanceof PartGearShaft) + { + if (parent instanceof PartGearShaft) + { + PartGearShaft shaft = (PartGearShaft) parent; + return shaft.tile().partMap(from.getOpposite().ordinal()) == gear() && Math.abs(shaft.placementSide.offsetX) == Math.abs(gear().placementSide.offsetX) && Math.abs(shaft.placementSide.offsetY) == Math.abs(gear().placementSide.offsetY) && Math.abs(shaft.placementSide.offsetZ) == Math.abs(gear().placementSide.offsetZ); + } + else if (parent instanceof PartGear) + { + if (((PartGear) parent).tile() == gear().tile() && !gear().getMultiBlock().isConstructed()) + { + return true; + } - if (((PartGear) parent).placementSide != gear().placementSide) - { - TMultiPart part = gear().tile().partMap(((PartGear) parent).placementSide.ordinal()); + if (((PartGear) parent).placementSide != gear().placementSide) + { + TMultiPart part = gear().tile().partMap(((PartGear) parent).placementSide.ordinal()); - if (part instanceof PartGear) - { - /** Case when we connect gears via edges internally. Large gear - * attempt to connect to small gear. */ - PartGear sourceGear = (PartGear) part; + if (part instanceof PartGear) + { + /** Case when we connect gears via edges internally. Large gear + * attempt to connect to small gear. */ + PartGear sourceGear = (PartGear) part; - if (sourceGear.isCenterMultiBlock() && !sourceGear.getMultiBlock().isPrimary()) - { - // For large gear to small gear on edge connection. - return true; - } - } - else - { - /** Small gear attempting to connect to large gear. */ - if (gear().getMultiBlock().isConstructed()) - { - TMultiPart checkPart = ((PartGear) parent).tile().partMap(gear().placementSide.ordinal()); + if (sourceGear.isCenterMultiBlock() && !sourceGear.getMultiBlock().isPrimary()) + { + // For large gear to small gear on edge connection. + return true; + } + } + else + { + /** Small gear attempting to connect to large gear. */ + if (gear().getMultiBlock().isConstructed()) + { + TMultiPart checkPart = ((PartGear) parent).tile().partMap(gear().placementSide.ordinal()); - if (checkPart instanceof PartGear) - { - ForgeDirection requiredDirection = ((PartGear) checkPart).getPosition().subtract(position()).toForgeDirection(); - return ((PartGear) checkPart).isCenterMultiBlock() && ((PartGear) parent).placementSide == requiredDirection; - } - } - } - } - } - } + if (checkPart instanceof PartGear) + { + ForgeDirection requiredDirection = ((PartGear) checkPart).getPosition().subtract(position()).toForgeDirection(); + return ((PartGear) checkPart).isCenterMultiBlock() && ((PartGear) parent).placementSide == requiredDirection; + } + } + } + } + } + } - /** Face to face stick connection. */ - TileEntity sourceTile = position().translate(from.getOpposite()).getTileEntity(world()); + /** Face to face stick connection. */ + TileEntity sourceTile = position().translate(from.getOpposite()).getTileEntity(world()); - if (sourceTile instanceof INodeProvider) - { - MechanicalNode sourceInstance = (MechanicalNode) ((INodeProvider) sourceTile).getNode(MechanicalNode.class, from); - return sourceInstance == with; - } - } - else if (from == gear().placementSide) - { - /** Face to face stick connection. */ - TileEntity sourceTile = position().translate(from).getTileEntity(world()); + if (sourceTile instanceof INodeProvider) + { + MechanicalNode sourceInstance = (MechanicalNode) ((INodeProvider) sourceTile).getNode(MechanicalNode.class, from); + return sourceInstance == with; + } + } + else if (from == gear().placementSide) + { + /** Face to face stick connection. */ + TileEntity sourceTile = position().translate(from).getTileEntity(world()); - if (sourceTile instanceof INodeProvider) - { - MechanicalNode sourceInstance = (MechanicalNode) ((INodeProvider) sourceTile).getNode(MechanicalNode.class, from.getOpposite()); - return sourceInstance == with; - } - } - else - { - TileEntity destinationTile = ((MechanicalNode) with).position().translate(from.getOpposite()).getTileEntity(world()); + if (sourceTile instanceof INodeProvider) + { + MechanicalNode sourceInstance = (MechanicalNode) ((INodeProvider) sourceTile).getNode(MechanicalNode.class, from.getOpposite()); + return sourceInstance == with; + } + } + else + { + TileEntity destinationTile = ((MechanicalNode) with).position().translate(from.getOpposite()).getTileEntity(world()); - if (destinationTile instanceof INodeProvider && destinationTile instanceof TileMultipart) - { - TMultiPart destinationPart = ((TileMultipart) destinationTile).partMap(gear().placementSide.ordinal()); + if (destinationTile instanceof INodeProvider && destinationTile instanceof TileMultipart) + { + TMultiPart destinationPart = ((TileMultipart) destinationTile).partMap(gear().placementSide.ordinal()); - if (destinationPart instanceof PartGear) - { - if (gear() != destinationPart) - { - return ((PartGear) destinationPart).isCenterMultiBlock(); - } - else - { - return true; - } - } - else - { - return true; - } - } - } - } + if (destinationPart instanceof PartGear) + { + if (gear() != destinationPart) + { + return ((PartGear) destinationPart).isCenterMultiBlock(); + } + else + { + return true; + } + } + else + { + return true; + } + } + } + } - return false; - } + return false; + } - @Override - public float getRatio(ForgeDirection dir, IMechanicalNode with) - { - universalelectricity.api.vector.Vector3 deltaPos = with.position().subtract(position()); + @Override + public float getRatio(ForgeDirection dir, IMechanicalNode with) + { + universalelectricity.api.vector.Vector3 deltaPos = with.position().subtract(position()); - boolean caseX = gear().placementSide.offsetX != 0 && deltaPos.y == 0 && deltaPos.z == 0; - boolean caseY = gear().placementSide.offsetY != 0 && deltaPos.x == 0 && deltaPos.z == 0; - boolean caseZ = gear().placementSide.offsetZ != 0 && deltaPos.x == 0 && deltaPos.y == 0; + boolean caseX = gear().placementSide.offsetX != 0 && deltaPos.y == 0 && deltaPos.z == 0; + boolean caseY = gear().placementSide.offsetY != 0 && deltaPos.x == 0 && deltaPos.z == 0; + boolean caseZ = gear().placementSide.offsetZ != 0 && deltaPos.x == 0 && deltaPos.y == 0; - if (caseX || caseY || caseZ) - { - return super.getRatio(dir, with); - } + if (caseX || caseY || caseZ) + { + return super.getRatio(dir, with); + } - return gear().getMultiBlock().isConstructed() ? 1.5f : super.getRatio(dir, with); - } + return gear().getMultiBlock().isConstructed() ? 1.5f : super.getRatio(dir, with); + } } diff --git a/mechanical/src/main/scala/resonantinduction/mechanical/gearshaft/GearShaftNode.java b/mechanical/src/main/scala/resonantinduction/mechanical/gearshaft/GearShaftNode.java index 6ab2ca3d..91c54645 100644 --- a/mechanical/src/main/scala/resonantinduction/mechanical/gearshaft/GearShaftNode.java +++ b/mechanical/src/main/scala/resonantinduction/mechanical/gearshaft/GearShaftNode.java @@ -14,113 +14,116 @@ import universalelectricity.api.vector.Vector3; public class GearShaftNode extends MechanicalNode { - public GearShaftNode(PartGearShaft parent) - { - super(parent); - } + public GearShaftNode(PartGearShaft parent) + { + super(parent); + } - @Override - public double getTorqueLoad() - { - // Decelerate the gear based on tier. - switch (shaft().tier) - { - default: - return 0.03; - case 1: - return 0.02; - case 2: - return 0.01; - } - } + @Override + public double getTorqueLoad() + { + // Decelerate the gear based on tier. + switch (shaft().tier) + { + default: + return 0.03; + case 1: + return 0.02; + case 2: + return 0.01; + } + } - @Override - public double getAngularVelocityLoad() - { - return 0; - } + @Override + public double getAngularVelocityLoad() + { + return 0; + } - @Override - public void recache() - { - getConnections().clear(); - List dirs = new ArrayList(); - dirs.add(shaft().placementSide); - dirs.add(shaft().placementSide.getOpposite()); - /** Check for internal connections, the FRONT and BACK. */ - Iterator it = dirs.iterator(); - while (it.hasNext()) - { - ForgeDirection checkDir = it.next(); - if (checkDir == shaft().placementSide || checkDir == shaft().placementSide.getOpposite()) - { - if (shaft().tile() instanceof INodeProvider) - { - MechanicalNode instance = (MechanicalNode) ((INodeProvider) shaft().tile()).getNode(MechanicalNode.class, checkDir); + @Override + public void recache() + { + synchronized (this) + { + getConnections().clear(); + List dirs = new ArrayList(); + dirs.add(shaft().placementSide); + dirs.add(shaft().placementSide.getOpposite()); + /** Check for internal connections, the FRONT and BACK. */ + Iterator it = dirs.iterator(); + while (it.hasNext()) + { + ForgeDirection checkDir = it.next(); + if (checkDir == shaft().placementSide || checkDir == shaft().placementSide.getOpposite()) + { + if (shaft().tile() instanceof INodeProvider) + { + MechanicalNode instance = (MechanicalNode) ((INodeProvider) shaft().tile()).getNode(MechanicalNode.class, checkDir); - if (instance != null && instance != this && instance.canConnect(checkDir.getOpposite(), this)) - { - getConnections().put(instance, checkDir); - it.remove(); - } - } - } - } + if (instance != null && instance != this && instance.canConnect(checkDir.getOpposite(), this)) + { + getConnections().put(instance, checkDir); + it.remove(); + } + } + } + } - /** Look for connections outside this block space, the relative FRONT and BACK */ - if (!dirs.isEmpty()) - for (ForgeDirection checkDir : dirs) - { - if (!getConnections().containsValue(checkDir) && (checkDir == shaft().placementSide || checkDir == shaft().placementSide.getOpposite())) - { - TileEntity checkTile = new Vector3(shaft().tile()).translate(checkDir).getTileEntity(world()); + /** Look for connections outside this block space, the relative FRONT and BACK */ + if (!dirs.isEmpty()) + for (ForgeDirection checkDir : dirs) + { + if (!getConnections().containsValue(checkDir) && (checkDir == shaft().placementSide || checkDir == shaft().placementSide.getOpposite())) + { + TileEntity checkTile = new Vector3(shaft().tile()).translate(checkDir).getTileEntity(world()); - if (checkTile instanceof INodeProvider) - { - MechanicalNode instance = (MechanicalNode) ((INodeProvider) checkTile).getNode(MechanicalNode.class, checkDir.getOpposite()); + if (checkTile instanceof INodeProvider) + { + MechanicalNode instance = (MechanicalNode) ((INodeProvider) checkTile).getNode(MechanicalNode.class, checkDir.getOpposite()); - // Only connect to shafts outside of this block space. - if (instance != null && instance != this && instance.getParent() instanceof PartGearShaft && instance.canConnect(checkDir.getOpposite(), this)) - { - getConnections().put(instance, checkDir); - } - } - } - } - } + // Only connect to shafts outside of this block space. + if (instance != null && instance != this && instance.getParent() instanceof PartGearShaft && instance.canConnect(checkDir.getOpposite(), this)) + { + getConnections().put(instance, checkDir); + } + } + } + } + } + } - @Override - public boolean canConnect(ForgeDirection from, Object source) - { - if (source instanceof MechanicalNode) - { - if (((MechanicalNode) source).getParent() instanceof PartGear) - { - PartGear gear = (PartGear) ((MechanicalNode) source).getParent(); + @Override + public boolean canConnect(ForgeDirection from, Object source) + { + if (source instanceof MechanicalNode) + { + if (((MechanicalNode) source).getParent() instanceof PartGear) + { + PartGear gear = (PartGear) ((MechanicalNode) source).getParent(); - if (!(Math.abs(gear.placementSide.offsetX) == Math.abs(shaft().placementSide.offsetX) && Math.abs(gear.placementSide.offsetY) == Math.abs(shaft().placementSide.offsetY) && Math.abs(gear.placementSide.offsetZ) == Math.abs(shaft().placementSide.offsetZ))) - { - return false; - } - } - } + if (!(Math.abs(gear.placementSide.offsetX) == Math.abs(shaft().placementSide.offsetX) && Math.abs(gear.placementSide.offsetY) == Math.abs(shaft().placementSide.offsetY) && Math.abs(gear.placementSide.offsetZ) == Math.abs(shaft().placementSide.offsetZ))) + { + return false; + } + } + } - return from == shaft().placementSide || from == shaft().placementSide.getOpposite(); - } + return from == shaft().placementSide || from == shaft().placementSide.getOpposite(); + } - @Override - public boolean inverseRotation(ForgeDirection dir, IMechanicalNode with) - { - if (shaft().placementSide.offsetY != 0 || shaft().placementSide.offsetZ != 0) - { - return dir == shaft().placementSide.getOpposite(); - } + @Override + public boolean inverseRotation(ForgeDirection dir, IMechanicalNode with) + { + if (shaft().placementSide.offsetY != 0 || shaft().placementSide.offsetZ != 0) + { + return dir == shaft().placementSide.getOpposite(); + } - return dir == shaft().placementSide; - } + return dir == shaft().placementSide; + } - public PartGearShaft shaft() - { - return (PartGearShaft) this.getParent(); - } + public PartGearShaft shaft() + { + return (PartGearShaft) this.getParent(); + } } From d595490009562ba3e488bc174548ca81535c09ec Mon Sep 17 00:00:00 2001 From: Calclavia Date: Fri, 20 Jun 2014 17:27:50 -0700 Subject: [PATCH 59/62] Fixed turbine render and connection --- .../electrical/generator/TileMotor.java | 3 +- .../energy/turbine/RenderWindTurbine.java | 3 +- .../energy/turbine/TileWindTurbine.java | 1 - .../energy/turbine/TurbineNode.java | 55 ++++++++++--------- 4 files changed, 33 insertions(+), 29 deletions(-) diff --git a/electrical/src/main/scala/resonantinduction/electrical/generator/TileMotor.java b/electrical/src/main/scala/resonantinduction/electrical/generator/TileMotor.java index 6af83025..b1094285 100644 --- a/electrical/src/main/scala/resonantinduction/electrical/generator/TileMotor.java +++ b/electrical/src/main/scala/resonantinduction/electrical/generator/TileMotor.java @@ -61,7 +61,8 @@ public class TileMotor extends TileElectrical implements IRotatable, INodeProvid if (node != null) { - node.update(0.05f); + node.update(0.05f); + if (!isInversed) { receiveMechanical(); diff --git a/mechanical/src/main/scala/resonantinduction/mechanical/energy/turbine/RenderWindTurbine.java b/mechanical/src/main/scala/resonantinduction/mechanical/energy/turbine/RenderWindTurbine.java index e0b6f16f..828f066b 100644 --- a/mechanical/src/main/scala/resonantinduction/mechanical/energy/turbine/RenderWindTurbine.java +++ b/mechanical/src/main/scala/resonantinduction/mechanical/energy/turbine/RenderWindTurbine.java @@ -32,7 +32,8 @@ public class RenderWindTurbine extends TileEntitySpecialRenderer implements ISim RenderUtility.rotateBlockBasedOnDirectionUp(tile.getDirection()); - GL11.glTranslatef(0, -0.35f, 0); + GL11.glTranslatef(0, 0.35f, 0); + GL11.glRotatef(180, 1, 0, 0); GL11.glRotatef((float) Math.toDegrees(tile.mechanicalNode.renderAngle), 0, 1, 0); render(tile.tier, tile.multiBlockRadius, tile.getMultiBlock().isConstructed()); diff --git a/mechanical/src/main/scala/resonantinduction/mechanical/energy/turbine/TileWindTurbine.java b/mechanical/src/main/scala/resonantinduction/mechanical/energy/turbine/TileWindTurbine.java index bcfb8f26..42d3a541 100644 --- a/mechanical/src/main/scala/resonantinduction/mechanical/energy/turbine/TileWindTurbine.java +++ b/mechanical/src/main/scala/resonantinduction/mechanical/energy/turbine/TileWindTurbine.java @@ -22,7 +22,6 @@ public class TileWindTurbine extends TileTurbine private float efficiency = 0; private long windPower = 0; - @Override public void updateEntity() diff --git a/mechanical/src/main/scala/resonantinduction/mechanical/energy/turbine/TurbineNode.java b/mechanical/src/main/scala/resonantinduction/mechanical/energy/turbine/TurbineNode.java index 840f843c..a8e077c1 100644 --- a/mechanical/src/main/scala/resonantinduction/mechanical/energy/turbine/TurbineNode.java +++ b/mechanical/src/main/scala/resonantinduction/mechanical/energy/turbine/TurbineNode.java @@ -4,36 +4,39 @@ import net.minecraftforge.common.ForgeDirection; import resonantinduction.core.interfaces.IMechanicalNode; import resonantinduction.mechanical.energy.grid.MechanicalNode; -/** Turbine's Mechanical node - * - * @author Calclavia, Darkguardsman */ +/** + * Turbine's Mechanical node + * Turbines always face forward and connect from behind. + * + * @author Calclavia, Darkguardsman + */ public class TurbineNode extends MechanicalNode { - public TurbineNode(TileTurbine tileTurbineBase) - { - super(tileTurbineBase); - } + public TurbineNode(TileTurbine tileTurbineBase) + { + super(tileTurbineBase); + } - public TileTurbine turbine() - { - return (TileTurbine) getParent(); - } + public TileTurbine turbine() + { + return (TileTurbine) getParent(); + } - @Override - public boolean canConnect(ForgeDirection from, Object source) - { - return turbine().getMultiBlock().isPrimary() && source instanceof MechanicalNode && !(source instanceof TurbineNode) && from == turbine().getDirection().getOpposite(); - } + @Override + public boolean canConnect(ForgeDirection from, Object source) + { + return turbine().getMultiBlock().isPrimary() && source instanceof MechanicalNode && !(source instanceof TurbineNode) && from == turbine().getDirection().getOpposite(); + } - @Override - public boolean inverseRotation(ForgeDirection dir, IMechanicalNode with) - { - return dir == turbine().getDirection().getOpposite(); - } + @Override + public boolean inverseRotation(ForgeDirection dir, IMechanicalNode with) + { + return dir == turbine().getDirection().getOpposite(); + } - @Override - public float getRatio(ForgeDirection dir, IMechanicalNode with) - { - return turbine().getMultiBlock().isConstructed() ? turbine().multiBlockRadius - 0.5f : 0.5f; - } + @Override + public float getRatio(ForgeDirection dir, IMechanicalNode with) + { + return turbine().getMultiBlock().isConstructed() ? turbine().multiBlockRadius - 0.5f : 0.5f; + } } From e752bd9ccc2477130ffd20718b75a40b32f90242 Mon Sep 17 00:00:00 2001 From: Calclavia Date: Fri, 20 Jun 2014 17:28:45 -0700 Subject: [PATCH 60/62] #RI-10 fixed - Uranium ore now spawns particles --- .../scala/resonantinduction/atomic/blocks/BlockUraniumOre.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/atomic/src/main/scala/resonantinduction/atomic/blocks/BlockUraniumOre.java b/atomic/src/main/scala/resonantinduction/atomic/blocks/BlockUraniumOre.java index 043aa34d..1e483e22 100644 --- a/atomic/src/main/scala/resonantinduction/atomic/blocks/BlockUraniumOre.java +++ b/atomic/src/main/scala/resonantinduction/atomic/blocks/BlockUraniumOre.java @@ -29,7 +29,7 @@ public class BlockUraniumOre extends BlockRadioactive this.canSpread = false; this.radius = 1f; this.amplifier = 0; - this.spawnParticle = false; + this.spawnParticle = true; } @Override From 91f402b18fe6e42f395feb854a66cd9097896091 Mon Sep 17 00:00:00 2001 From: Calclavia Date: Fri, 20 Jun 2014 17:48:22 -0700 Subject: [PATCH 61/62] Patched battery side render --- .../electrical/battery/RenderBattery.java | 29 +- .../process/grinder/TileGrindingWheel.java | 372 +++++++++--------- 2 files changed, 214 insertions(+), 187 deletions(-) diff --git a/electrical/src/main/scala/resonantinduction/electrical/battery/RenderBattery.java b/electrical/src/main/scala/resonantinduction/electrical/battery/RenderBattery.java index d8709d6c..e902fa7a 100644 --- a/electrical/src/main/scala/resonantinduction/electrical/battery/RenderBattery.java +++ b/electrical/src/main/scala/resonantinduction/electrical/battery/RenderBattery.java @@ -1,10 +1,11 @@ /** - * + * */ package resonantinduction.electrical.battery; import static org.lwjgl.opengl.GL11.glPopMatrix; import static org.lwjgl.opengl.GL11.glPushMatrix; +import static org.lwjgl.opengl.GL11.glRotatef; import java.util.ArrayList; import java.util.Arrays; @@ -21,14 +22,16 @@ import org.lwjgl.opengl.GL11; import resonant.api.items.ISimpleItemRenderer; import resonant.lib.render.RenderUtility; +import resonant.lib.utility.WorldUtility; import resonantinduction.core.Reference; import universalelectricity.api.vector.Vector3; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; /** + * TODO: Make this more efficient. + * * @author Calclavia - * */ @SideOnly(Side.CLIENT) public class RenderBattery extends TileEntitySpecialRenderer implements ISimpleItemRenderer @@ -83,8 +86,8 @@ public class RenderBattery extends TileEntitySpecialRenderer implements ISimpleI int energyLevel = (int) Math.round(((double) tile.getEnergyHandler().getEnergy() / (double) TileBattery.getEnergyForTier(tile.getBlockMetadata())) * 8); RenderUtility.bind(Reference.DOMAIN, Reference.MODEL_PATH + "battery/battery.png"); - List disabledParts = new ArrayList(); - List enabledParts = new ArrayList(); + List disabledParts = new ArrayList(); + List enabledParts = new ArrayList(); for (ForgeDirection check : ForgeDirection.VALID_DIRECTIONS) { @@ -128,6 +131,24 @@ public class RenderBattery extends TileEntitySpecialRenderer implements ISimpleI { GL11.glPushMatrix(); RenderUtility.rotateBlockBasedOnDirection(check); + + //TODO: Fix this horrible patch. + switch (check) + { + case NORTH: + glRotatef(0, 0, 1, 0); + break; + case SOUTH: + glRotatef(0, 0, 1, 0); + break; + case WEST: + glRotatef(-180, 0, 1, 0); + break; + case EAST: + glRotatef(180, 0, 1, 0); + break; + } + GL11.glRotatef(-90, 0, 1, 0); int io = tile.getIO(check); diff --git a/mechanical/src/main/scala/resonantinduction/mechanical/process/grinder/TileGrindingWheel.java b/mechanical/src/main/scala/resonantinduction/mechanical/process/grinder/TileGrindingWheel.java index 7743f87e..730da57e 100644 --- a/mechanical/src/main/scala/resonantinduction/mechanical/process/grinder/TileGrindingWheel.java +++ b/mechanical/src/main/scala/resonantinduction/mechanical/process/grinder/TileGrindingWheel.java @@ -21,216 +21,222 @@ import resonantinduction.mechanical.energy.grid.MechanicalNode; import resonantinduction.mechanical.energy.grid.TileMechanical; import universalelectricity.api.vector.Vector3; -/** @author Calclavia */ +/** + * @author Calclavia + */ public class TileGrindingWheel extends TileMechanical implements IRotatable { - public static final int PROCESS_TIME = 20 * 20; - /** A map of ItemStacks and their remaining grind-time left. */ - public static final Timer timer = new Timer(); + public static final int PROCESS_TIME = 20 * 20; + /** + * A map of ItemStacks and their remaining grind-time left. + */ + public static final Timer timer = new Timer(); - public EntityItem grindingItem = null; + public EntityItem grindingItem = null; - private final long requiredTorque = 250; - private double counter = 0; + private final long requiredTorque = 250; + private double counter = 0; - public TileGrindingWheel() - { - super(Material.rock); - mechanicalNode = new GrinderNode(this).setLoad(2); - bounds = new Cuboid(0.05f, 0.05f, 0.05f, 0.95f, 0.95f, 0.95f); - isOpaqueCube = false; - normalRender = false; - customItemRender = true; - rotationMask = Byte.parseByte("111111", 2); - textureName = "material_steel_dark"; - } + public TileGrindingWheel() + { + super(Material.rock); + mechanicalNode = new GrinderNode(this).setLoad(2); + bounds = new Cuboid(0.05f, 0.05f, 0.05f, 0.95f, 0.95f, 0.95f); + isOpaqueCube = false; + normalRender = false; + customItemRender = true; + rotationMask = Byte.parseByte("111111", 2); + textureName = "material_steel_dark"; + } - @Override - public void updateEntity() - { - super.updateEntity(); - counter = Math.max(counter + Math.abs(mechanicalNode.torque), 0); - doWork(); - } + @Override + public void updateEntity() + { + super.updateEntity(); + counter = Math.max(counter + Math.abs(mechanicalNode.torque), 0); + doWork(); + } - @Override - public void collide(Entity entity) - { - if (entity instanceof EntityItem) - { - ((EntityItem) entity).age--; - } + @Override + public void collide(Entity entity) + { + if (entity instanceof EntityItem) + { + ((EntityItem) entity).age--; + } - if (canWork()) - { - if (entity instanceof EntityItem) - { - if (canGrind(((EntityItem) entity).getEntityItem())) - { - if (grindingItem == null) - { - grindingItem = (EntityItem) entity; - } + if (canWork()) + { + if (entity instanceof EntityItem) + { + if (canGrind(((EntityItem) entity).getEntityItem())) + { + if (grindingItem == null) + { + grindingItem = (EntityItem) entity; + } - if (!TileGrindingWheel.timer.containsKey((EntityItem) entity)) - { - TileGrindingWheel.timer.put((EntityItem) entity, TileGrindingWheel.PROCESS_TIME); - } - } - else - { - entity.setPosition(entity.posX, entity.posY - 1.2, entity.posZ); - } - } - else - { - entity.attackEntityFrom(new CustomDamageSource("grinder", this), 2); - } + if (!TileGrindingWheel.timer.containsKey((EntityItem) entity)) + { + TileGrindingWheel.timer.put((EntityItem) entity, TileGrindingWheel.PROCESS_TIME); + } + } + else + { + entity.setPosition(entity.posX, entity.posY - 1.2, entity.posZ); + } + } + else + { + entity.attackEntityFrom(new CustomDamageSource("grinder", this), 2); + } - } + } - if (mechanicalNode.getAngularSpeed() != 0) - { - // Move entity based on the direction of the block. - ForgeDirection dir = getDirection(); - dir = ForgeDirection.getOrientation(!(dir.ordinal() % 2 == 0) ? dir.ordinal() - 1 : dir.ordinal()).getOpposite(); - double speed = mechanicalNode.getAngularSpeed() / 20; - double speedX = dir.offsetX * speed; - double speedZ = dir.offsetZ * speed; - double speedY = Math.random() * speed; - if(Math.abs(speedX) > 1) - { - speedX = speedX > 0 ? 1 : -1; - } - if(Math.abs(speedZ) > 1) - { - speedZ = speedZ > 0 ? 1 : -1; - } - if(Math.abs(speedZ) > 1) - { - speedY = speedY > 0 ? 1 : -1; - } - entity.addVelocity(speedX, speedY, speedZ); - } - } + if (mechanicalNode.getAngularSpeed() != 0) + { + // Move entity based on the direction of the block. + ForgeDirection dir = getDirection(); + dir = ForgeDirection.getOrientation(!(dir.ordinal() % 2 == 0) ? dir.ordinal() - 1 : dir.ordinal()).getOpposite(); + double speed = mechanicalNode.getAngularSpeed() / 20; + double speedX = dir.offsetX * speed; + double speedZ = dir.offsetZ * speed; + double speedY = Math.random() * speed; + if (Math.abs(speedX) > 1) + { + speedX = speedX > 0 ? 1 : -1; + } + if (Math.abs(speedZ) > 1) + { + speedZ = speedZ > 0 ? 1 : -1; + } + if (Math.abs(speedZ) > 1) + { + speedY = speedY > 0 ? 1 : -1; + } + entity.addVelocity(speedX, speedY, speedZ); + } + } - /** Can this machine work this tick? - * - * @return */ - public boolean canWork() - { - return counter >= requiredTorque; - } + /** + * Can this machine work this tick? + * + * @return + */ + public boolean canWork() + { + return counter >= requiredTorque; + } - public void doWork() - { - if (canWork()) - { - boolean didWork = false; + public void doWork() + { + if (canWork()) + { + boolean didWork = false; - if (grindingItem != null) - { - if (timer.containsKey(grindingItem) && !grindingItem.isDead && new Vector3(this).add(0.5).distance(grindingItem) < 1) - { - int timeLeft = timer.decrease(grindingItem); + if (grindingItem != null) + { + if (timer.containsKey(grindingItem) && !grindingItem.isDead && new Vector3(this).add(0.5).distance(grindingItem) < 1) + { + int timeLeft = timer.decrease(grindingItem); - if (timeLeft <= 0) - { - if (this.doGrind(grindingItem)) - { - if (--grindingItem.getEntityItem().stackSize <= 0) - { - grindingItem.setDead(); - timer.remove(grindingItem); - grindingItem = null; - } - else - { - grindingItem.setEntityItemStack(grindingItem.getEntityItem()); - // Reset timer - timer.put(grindingItem, PROCESS_TIME); - } - } - } - else - { - grindingItem.delayBeforeCanPickup = 20; + if (timeLeft <= 0) + { + if (this.doGrind(grindingItem)) + { + if (--grindingItem.getEntityItem().stackSize <= 0) + { + grindingItem.setDead(); + timer.remove(grindingItem); + grindingItem = null; + } + else + { + grindingItem.setEntityItemStack(grindingItem.getEntityItem()); + // Reset timer + timer.put(grindingItem, PROCESS_TIME); + } + } + } + else + { + grindingItem.delayBeforeCanPickup = 20; - if (grindingItem.getEntityItem().getItem() instanceof ItemBlock) - { - ResonantInduction.proxy.renderBlockParticle(worldObj, new Vector3(grindingItem), new Vector3((Math.random() - 0.5f) * 3, (Math.random() - 0.5f) * 3, (Math.random() - 0.5f) * 3), ((ItemBlock) grindingItem.getEntityItem().getItem()).getBlockID(), 1); - } - else - { - worldObj.spawnParticle("crit", grindingItem.posX, grindingItem.posY, grindingItem.posZ, (Math.random() - 0.5f) * 3, (Math.random() - 0.5f) * 3, (Math.random() - 0.5f) * 3); - } - } + if (grindingItem.getEntityItem().getItem() instanceof ItemBlock) + { + ResonantInduction.proxy.renderBlockParticle(worldObj, new Vector3(grindingItem), new Vector3((Math.random() - 0.5f) * 3, (Math.random() - 0.5f) * 3, (Math.random() - 0.5f) * 3), ((ItemBlock) grindingItem.getEntityItem().getItem()).getBlockID(), 1); + } + else + { + worldObj.spawnParticle("crit", grindingItem.posX, grindingItem.posY, grindingItem.posZ, (Math.random() - 0.5f) * 3, (Math.random() - 0.5f) * 3, (Math.random() - 0.5f) * 3); + } + } - didWork = true; - } - else - { - timer.remove(grindingItem); - grindingItem = null; - } - } + didWork = true; + } + else + { + timer.remove(grindingItem); + grindingItem = null; + } + } - if (didWork) - { - if (this.ticks % 8 == 0) - { - worldObj.playSoundEffect(this.xCoord + 0.5, this.yCoord + 0.5, this.zCoord + 0.5, Reference.PREFIX + "grinder", 0.5f, 1); - } + if (didWork) + { + if (this.ticks % 8 == 0) + { + worldObj.playSoundEffect(this.xCoord + 0.5, this.yCoord + 0.5, this.zCoord + 0.5, Reference.PREFIX + "grinder", 0.5f, 1); + } - counter -= requiredTorque; - } - } - } + counter -= requiredTorque; + } + } + } - public boolean canGrind(ItemStack itemStack) - { - return MachineRecipes.INSTANCE.getOutput(RecipeType.GRINDER.name(), itemStack).length > 0; - } + public boolean canGrind(ItemStack itemStack) + { + return MachineRecipes.INSTANCE.getOutput(RecipeType.GRINDER.name(), itemStack).length > 0; + } - private boolean doGrind(EntityItem entity) - { - ItemStack itemStack = entity.getEntityItem(); + private boolean doGrind(EntityItem entity) + { + ItemStack itemStack = entity.getEntityItem(); - RecipeResource[] results = MachineRecipes.INSTANCE.getOutput(RecipeType.GRINDER.name(), itemStack); + RecipeResource[] results = MachineRecipes.INSTANCE.getOutput(RecipeType.GRINDER.name(), itemStack); - for (RecipeResource resource : results) - { - ItemStack outputStack = resource.getItemStack(); + for (RecipeResource resource : results) + { + ItemStack outputStack = resource.getItemStack(); - if (!this.worldObj.isRemote) - { - EntityItem entityItem = new EntityItem(this.worldObj, entity.posX, entity.posY - 1.2, entity.posZ, outputStack); - entityItem.delayBeforeCanPickup = 20; - entityItem.motionX = 0; - entityItem.motionY = 0; - entityItem.motionZ = 0; - this.worldObj.spawnEntityInWorld(entityItem); - } - } + if (!this.worldObj.isRemote) + { + EntityItem entityItem = new EntityItem(this.worldObj, entity.posX, entity.posY - 1.2, entity.posZ, outputStack); + entityItem.delayBeforeCanPickup = 20; + entityItem.motionX = 0; + entityItem.motionY = 0; + entityItem.motionZ = 0; + this.worldObj.spawnEntityInWorld(entityItem); + } + } - return results.length > 0; - } + return results.length > 0; + } - @Override - public ForgeDirection getDirection() - { - if (worldObj != null) - { - return ForgeDirection.getOrientation(getBlockMetadata()); - } + @Override + public ForgeDirection getDirection() + { + if (worldObj != null) + { + return ForgeDirection.getOrientation(getBlockMetadata()); + } - return ForgeDirection.UNKNOWN; - } + return ForgeDirection.UNKNOWN; + } - @Override - public void setDirection(ForgeDirection direction) - { - worldObj.setBlockMetadataWithNotify(xCoord, yCoord, zCoord, direction.ordinal(), 3); - } + @Override + public void setDirection(ForgeDirection direction) + { + worldObj.setBlockMetadataWithNotify(xCoord, yCoord, zCoord, direction.ordinal(), 3); + } } From ffa9be03d5cfef6d35376c6a94f45457e3825f9d Mon Sep 17 00:00:00 2001 From: Calclavia Date: Fri, 20 Jun 2014 22:48:44 -0700 Subject: [PATCH 62/62] Fixed tank item rendering --- .../archaic/ClientProxy.java | 4 + .../archaic/fluid/tank/ItemBlockTank.java | 333 +++++++++--------- .../archaic/fluid/tank/TileTank.java | 80 ++++- 3 files changed, 232 insertions(+), 185 deletions(-) diff --git a/archaic/src/main/scala/resonantinduction/archaic/ClientProxy.java b/archaic/src/main/scala/resonantinduction/archaic/ClientProxy.java index 4ebd04ee..2450b3b0 100644 --- a/archaic/src/main/scala/resonantinduction/archaic/ClientProxy.java +++ b/archaic/src/main/scala/resonantinduction/archaic/ClientProxy.java @@ -1,9 +1,13 @@ package resonantinduction.archaic; +import resonant.lib.render.item.GlobalItemRenderer; +import resonantinduction.archaic.fluid.tank.TileTank; + public class ClientProxy extends CommonProxy { @Override public void preInit() { + GlobalItemRenderer.register(Archaic.blockTank.blockID, TileTank.ItemRenderer.instance); } } diff --git a/archaic/src/main/scala/resonantinduction/archaic/fluid/tank/ItemBlockTank.java b/archaic/src/main/scala/resonantinduction/archaic/fluid/tank/ItemBlockTank.java index 7a71ca73..f9811ad7 100644 --- a/archaic/src/main/scala/resonantinduction/archaic/fluid/tank/ItemBlockTank.java +++ b/archaic/src/main/scala/resonantinduction/archaic/fluid/tank/ItemBlockTank.java @@ -9,212 +9,211 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; -import net.minecraftforge.common.ForgeDirection; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.IFluidContainerItem; import resonant.lib.utility.LanguageUtility; -import resonantinduction.archaic.Archaic; import resonantinduction.core.grid.fluid.TileFluidDistribution; import universalelectricity.api.energy.UnitDisplay; import universalelectricity.api.energy.UnitDisplay.Unit; import universalelectricity.api.energy.UnitDisplay.UnitPrefix; -import universalelectricity.api.vector.Vector3; -/** @author Darkguardsman */ +/** + * @author Darkguardsman + */ public class ItemBlockTank extends ItemBlock implements IFluidContainerItem { - public ItemBlockTank(int id) - { - super(id); - this.setMaxDamage(0); - this.setHasSubtypes(true); - } + public ItemBlockTank(int id) + { + super(id); + this.setMaxDamage(0); + this.setHasSubtypes(true); + } - @Override - public int getMetadata(int damage) - { - return damage; - } + @Override + public int getMetadata(int damage) + { + return damage; + } - @SuppressWarnings({ "unchecked", "rawtypes" }) - @Override - public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean par4) - { - if (stack.getTagCompound() != null && stack.getTagCompound().hasKey("fluid")) - { - FluidStack fluid = getFluid(stack); + @SuppressWarnings({ "unchecked", "rawtypes" }) + @Override + public void addInformation(ItemStack itemStack, EntityPlayer player, List list, boolean par4) + { + if (itemStack.getTagCompound() != null && itemStack.getTagCompound().hasKey("fluid")) + { + FluidStack fluid = getFluid(itemStack); - if (fluid != null) - { - list.add("Fluid: " + fluid.getFluid().getLocalizedName()); - list.add("Volume: " + UnitDisplay.getDisplay(fluid.amount, Unit.LITER, UnitPrefix.MILLI)); - } - } - } + if (fluid != null) + { + list.add("Fluid: " + fluid.getFluid().getLocalizedName()); + list.add("Volume: " + UnitDisplay.getDisplay(fluid.amount, Unit.LITER, UnitPrefix.MILLI)); + } + } + } - @Override - public int getItemStackLimit(ItemStack stack) - { - if (stack.getTagCompound() != null && stack.getTagCompound().hasKey("fluid")) - { - return 1; - } - return this.maxStackSize; - } + @Override + public int getItemStackLimit(ItemStack stack) + { + if (stack.getTagCompound() != null && stack.getTagCompound().hasKey("fluid")) + { + return 1; + } + return this.maxStackSize; + } - @Override - public String getUnlocalizedName(ItemStack itemStack) - { - String translation = LanguageUtility.getLocal(Block.blocksList[this.getBlockID()].getUnlocalizedName() + "." + itemStack.getItemDamage()); + @Override + public String getUnlocalizedName(ItemStack itemStack) + { + String translation = LanguageUtility.getLocal(Block.blocksList[this.getBlockID()].getUnlocalizedName() + "." + itemStack.getItemDamage()); - if (translation == null || translation.isEmpty()) - { - return Block.blocksList[this.getBlockID()].getUnlocalizedName(); - } + if (translation == null || translation.isEmpty()) + { + return Block.blocksList[this.getBlockID()].getUnlocalizedName(); + } - return Block.blocksList[this.getBlockID()].getUnlocalizedName() + "." + itemStack.getItemDamage(); - } + return Block.blocksList[this.getBlockID()].getUnlocalizedName() + "." + itemStack.getItemDamage(); + } - @Override - public boolean placeBlockAt(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, float hitX, float hitY, float hitZ, int metadata) - { - if (super.placeBlockAt(stack, player, world, x, y, z, side, hitX, hitY, hitZ, metadata)) - { - TileEntity tile = world.getBlockTileEntity(x, y, z); - if (tile instanceof TileFluidDistribution) - { - ((TileFluidDistribution) tile).setSubID(stack.getItemDamage()); - ((TileFluidDistribution) tile).getInternalTank().fill(getFluid(stack), true); + @Override + public boolean placeBlockAt(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, float hitX, float hitY, float hitZ, int metadata) + { + if (super.placeBlockAt(stack, player, world, x, y, z, side, hitX, hitY, hitZ, metadata)) + { + TileEntity tile = world.getBlockTileEntity(x, y, z); + if (tile instanceof TileFluidDistribution) + { + ((TileFluidDistribution) tile).setSubID(stack.getItemDamage()); + ((TileFluidDistribution) tile).getInternalTank().fill(getFluid(stack), true); - } - return true; - } + } + return true; + } - return false; - } + return false; + } - @Override - public FluidStack getFluid(ItemStack container) - { - if (container.stackTagCompound == null || !container.stackTagCompound.hasKey("fluid")) - { - return null; - } - return FluidStack.loadFluidStackFromNBT(container.stackTagCompound.getCompoundTag("fluid")); - } + @Override + public FluidStack getFluid(ItemStack container) + { + if (container.stackTagCompound == null || !container.stackTagCompound.hasKey("fluid")) + { + return null; + } + return FluidStack.loadFluidStackFromNBT(container.stackTagCompound.getCompoundTag("fluid")); + } - @Override - public int getCapacity(ItemStack container) - { - return TileTank.VOLUME; - } + @Override + public int getCapacity(ItemStack container) + { + return TileTank.VOLUME; + } - @Override - public int fill(ItemStack container, FluidStack resource, boolean doFill) - { - if (resource == null) - { - return 0; - } + @Override + public int fill(ItemStack container, FluidStack resource, boolean doFill) + { + if (resource == null) + { + return 0; + } - if (!doFill) - { - if (container.stackTagCompound == null || !container.stackTagCompound.hasKey("fluid")) - { - return Math.min(getCapacity(container), resource.amount); - } + if (!doFill) + { + if (container.stackTagCompound == null || !container.stackTagCompound.hasKey("fluid")) + { + return Math.min(getCapacity(container), resource.amount); + } - FluidStack stack = FluidStack.loadFluidStackFromNBT(container.stackTagCompound.getCompoundTag("fluid")); + FluidStack stack = FluidStack.loadFluidStackFromNBT(container.stackTagCompound.getCompoundTag("fluid")); - if (stack == null) - { - return Math.min(getCapacity(container), resource.amount); - } + if (stack == null) + { + return Math.min(getCapacity(container), resource.amount); + } - if (!stack.isFluidEqual(resource)) - { - return 0; - } + if (!stack.isFluidEqual(resource)) + { + return 0; + } - return Math.min(getCapacity(container) - stack.amount, resource.amount); - } + return Math.min(getCapacity(container) - stack.amount, resource.amount); + } - if (container.stackTagCompound == null) - { - container.stackTagCompound = new NBTTagCompound(); - } + if (container.stackTagCompound == null) + { + container.stackTagCompound = new NBTTagCompound(); + } - if (!container.stackTagCompound.hasKey("fluid")) - { - NBTTagCompound fluidTag = resource.writeToNBT(new NBTTagCompound()); + if (!container.stackTagCompound.hasKey("fluid")) + { + NBTTagCompound fluidTag = resource.writeToNBT(new NBTTagCompound()); - if (getCapacity(container) < resource.amount) - { - fluidTag.setInteger("Amount", getCapacity(container)); - container.stackTagCompound.setTag("fluid", fluidTag); - return getCapacity(container); - } + if (getCapacity(container) < resource.amount) + { + fluidTag.setInteger("Amount", getCapacity(container)); + container.stackTagCompound.setTag("fluid", fluidTag); + return getCapacity(container); + } - container.stackTagCompound.setTag("fluid", fluidTag); - return resource.amount; - } + container.stackTagCompound.setTag("fluid", fluidTag); + return resource.amount; + } - NBTTagCompound fluidTag = container.stackTagCompound.getCompoundTag("fluid"); - FluidStack stack = FluidStack.loadFluidStackFromNBT(fluidTag); + NBTTagCompound fluidTag = container.stackTagCompound.getCompoundTag("fluid"); + FluidStack stack = FluidStack.loadFluidStackFromNBT(fluidTag); - if (!stack.isFluidEqual(resource)) - { - return 0; - } + if (!stack.isFluidEqual(resource)) + { + return 0; + } - int filled = getCapacity(container) - stack.amount; - if (resource.amount < filled) - { - stack.amount += resource.amount; - filled = resource.amount; - } - else - { - stack.amount = getCapacity(container); - } + int filled = getCapacity(container) - stack.amount; + if (resource.amount < filled) + { + stack.amount += resource.amount; + filled = resource.amount; + } + else + { + stack.amount = getCapacity(container); + } - container.stackTagCompound.setTag("fluid", stack.writeToNBT(fluidTag)); - return filled; - } + container.stackTagCompound.setTag("fluid", stack.writeToNBT(fluidTag)); + return filled; + } - @Override - public FluidStack drain(ItemStack container, int maxDrain, boolean doDrain) - { - if (container.stackTagCompound == null || !container.stackTagCompound.hasKey("fluid") || maxDrain == 0) - { - return null; - } + @Override + public FluidStack drain(ItemStack container, int maxDrain, boolean doDrain) + { + if (container.stackTagCompound == null || !container.stackTagCompound.hasKey("fluid") || maxDrain == 0) + { + return null; + } - FluidStack stack = FluidStack.loadFluidStackFromNBT(container.stackTagCompound.getCompoundTag("fluid")); - if (stack == null) - { - return null; - } + FluidStack stack = FluidStack.loadFluidStackFromNBT(container.stackTagCompound.getCompoundTag("fluid")); + if (stack == null) + { + return null; + } - int drained = Math.min(stack.amount, maxDrain); - if (doDrain) - { - if (maxDrain >= stack.amount) - { - container.stackTagCompound.removeTag("fluid"); + int drained = Math.min(stack.amount, maxDrain); + if (doDrain) + { + if (maxDrain >= stack.amount) + { + container.stackTagCompound.removeTag("fluid"); - if (container.stackTagCompound.hasNoTags()) - { - container.stackTagCompound = null; - } - return stack; - } + if (container.stackTagCompound.hasNoTags()) + { + container.stackTagCompound = null; + } + return stack; + } - NBTTagCompound fluidTag = container.stackTagCompound.getCompoundTag("fluid"); - fluidTag.setInteger("Amount", fluidTag.getInteger("Amount") - maxDrain); - container.stackTagCompound.setTag("fluid", fluidTag); - } - stack.amount = drained; - return stack; - } + NBTTagCompound fluidTag = container.stackTagCompound.getCompoundTag("fluid"); + fluidTag.setInteger("Amount", fluidTag.getInteger("Amount") - maxDrain); + container.stackTagCompound.setTag("fluid", fluidTag); + } + stack.amount = drained; + return stack; + } } diff --git a/archaic/src/main/scala/resonantinduction/archaic/fluid/tank/TileTank.java b/archaic/src/main/scala/resonantinduction/archaic/fluid/tank/TileTank.java index 8e3b9ad7..20598ee1 100644 --- a/archaic/src/main/scala/resonantinduction/archaic/fluid/tank/TileTank.java +++ b/archaic/src/main/scala/resonantinduction/archaic/fluid/tank/TileTank.java @@ -18,6 +18,7 @@ import net.minecraftforge.fluids.FluidTank; import org.lwjgl.opengl.GL11; import resonant.api.IRemovable.ISneakPickup; +import resonant.api.items.ISimpleItemRenderer; import resonant.lib.content.module.TileBlock.IComparatorInputOverride; import resonant.lib.content.module.TileRender; import resonant.lib.render.FluidRenderUtility; @@ -154,9 +155,9 @@ public class TileTank extends TileFluidDistribution implements IComparatorInputO double percentageFilled = (double) tank.getFluidAmount() / (double) tank.getCapacity(); double ySouthEast = FluidUtility.getAveragePercentageFilledForSides(TileTank.class, percentageFilled, tileEntity.worldObj, new Vector3(tileEntity), ForgeDirection.SOUTH, ForgeDirection.EAST); - double yNorthEast = percentageFilled;//FluidUtility.getAveragePercentageFilledForSides(TileTank.class, percentageFilled, tileEntity.worldObj, new Vector3(tileEntity), ForgeDirection.NORTH, ForgeDirection.EAST); - double ySouthWest = percentageFilled;//FluidUtility.getAveragePercentageFilledForSides(TileTank.class, percentageFilled, tileEntity.worldObj, new Vector3(tileEntity), ForgeDirection.SOUTH, ForgeDirection.WEST); - double yNorthWest = percentageFilled;//FluidUtility.getAveragePercentageFilledForSides(TileTank.class, percentageFilled, tileEntity.worldObj, new Vector3(tileEntity), ForgeDirection.NORTH, ForgeDirection.WEST); + double yNorthEast = FluidUtility.getAveragePercentageFilledForSides(TileTank.class, percentageFilled, tileEntity.worldObj, new Vector3(tileEntity), ForgeDirection.NORTH, ForgeDirection.EAST); + double ySouthWest = FluidUtility.getAveragePercentageFilledForSides(TileTank.class, percentageFilled, tileEntity.worldObj, new Vector3(tileEntity), ForgeDirection.SOUTH, ForgeDirection.WEST); + double yNorthWest = FluidUtility.getAveragePercentageFilledForSides(TileTank.class, percentageFilled, tileEntity.worldObj, new Vector3(tileEntity), ForgeDirection.NORTH, ForgeDirection.WEST); FluidRenderUtility.renderFluidTesselation(tank, ySouthEast, yNorthEast, ySouthWest, yNorthWest); } else @@ -198,30 +199,73 @@ public class TileTank extends TileFluidDistribution implements IComparatorInputO renderTank(TileTank.this, position.x, position.y, position.z, getInternalTank().getFluid()); return false; } + }; + } - @Override - public boolean renderItem(ItemStack itemStack) + public static class ItemRenderer implements ISimpleItemRenderer + { + public static ItemRenderer instance = new ItemRenderer(); + + public void renderTank(double x, double y, double z, FluidStack fluid, int capacity) + { + FluidTank tank = new FluidTank(fluid, capacity); + GL11.glPushMatrix(); + + GL11.glTranslated(0.02, 0.02, 0.02); + GL11.glScaled(0.92, 0.92, 0.92); + + if (fluid != null) { GL11.glPushMatrix(); - GL11.glTranslated(0.5, 0.5, 0.5); - RenderBlockUtility.tessellateBlockWithConnectedTextures(itemStack.getItemDamage(), Archaic.blockTank, null, RenderUtility.getIcon(Reference.PREFIX + "tankEdge")); - GL11.glPopMatrix(); - GL11.glPushMatrix(); - GL11.glTranslated(0, -0.1, 0); - - FluidStack fluid = null; - - if (itemStack.getTagCompound() != null && itemStack.getTagCompound().hasKey("fluid")) + if (!fluid.getFluid().isGaseous()) { - fluid = FluidStack.loadFluidStackFromNBT(itemStack.getTagCompound().getCompoundTag("fluid")); + double percentageFilled = (double) tank.getFluidAmount() / (double) tank.getCapacity(); + FluidRenderUtility.renderFluidTesselation(tank, percentageFilled, percentageFilled, percentageFilled, percentageFilled); + } + else + { + double filledPercentage = (double) fluid.amount / (double) capacity; + + GL11.glPushAttrib(GL11.GL_ENABLE_BIT); + GL11.glEnable(GL11.GL_CULL_FACE); + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + + Color color = new Color(fluid.getFluid().getColor()); + RenderUtility.enableBlending(); + GL11.glColor4d(color.getRed() / 255f, color.getGreen() / 255f, color.getBlue() / 255f, fluid.getFluid().isGaseous() ? filledPercentage : 1); + + RenderUtility.bind(FluidRenderUtility.getFluidSheet(fluid)); + FluidRenderUtility.renderFluidTesselation(tank, 1, 1, 1, 1); + RenderUtility.disableBlending(); + GL11.glPopAttrib(); } - renderTank(TileTank.this, 0, 0, 0, fluid); GL11.glPopMatrix(); - return true; } - }; + + GL11.glPopMatrix(); + } + + @Override + public void renderInventoryItem(ItemStack itemStack) + { + GL11.glPushMatrix(); + RenderBlockUtility.tessellateBlockWithConnectedTextures(itemStack.getItemDamage(), Archaic.blockTank, null, RenderUtility.getIcon(Reference.PREFIX + "tankEdge")); + GL11.glPopMatrix(); + + GL11.glPushMatrix(); + + if (itemStack.getTagCompound() != null && itemStack.getTagCompound().hasKey("fluid")) + { + renderTank(0, 0, 0, FluidStack.loadFluidStackFromNBT(itemStack.getTagCompound().getCompoundTag("fluid")), VOLUME * FluidContainerRegistry.BUCKET_VOLUME); + } + + GL11.glPopMatrix(); + } + } @Override