From 08914da371c2c1643792e161da8e2755bc2768ff Mon Sep 17 00:00:00 2001 From: Aidan Brady Date: Wed, 6 Aug 2014 13:44:59 -0400 Subject: [PATCH 1/7] Fixed Electric Pump lag - was able to completely eliminate system of node cleaning while boosting performance immensely --- .../common/tile/TileEntityElectricPump.java | 111 +----------------- 1 file changed, 4 insertions(+), 107 deletions(-) diff --git a/src/main/java/mekanism/common/tile/TileEntityElectricPump.java b/src/main/java/mekanism/common/tile/TileEntityElectricPump.java index 8f1ad35b6..505d630e4 100644 --- a/src/main/java/mekanism/common/tile/TileEntityElectricPump.java +++ b/src/main/java/mekanism/common/tile/TileEntityElectricPump.java @@ -44,9 +44,6 @@ public class TileEntityElectricPump extends TileEntityElectricBlock implements I /** The nodes that have full sources near them or in them */ public Set recurringNodes = new HashSet(); - /** The nodes that have already been sucked up, but are held on to in order to remove dead blocks */ - public Set cleaningNodes = new HashSet(); - public TileEntityElectricPump() { super("ElectricPump", 10000); @@ -129,8 +126,6 @@ public class TileEntityElectricPump extends TileEntityElectricBlock implements I { Mekanism.packetHandler.sendToAllAround(new TileEntityMessage(Coord4D.get(this), getNetworkedData(new ArrayList())), Coord4D.get(this).getTargetPoint(50D)); } - - clean(true); } } @@ -161,6 +156,7 @@ public class TileEntityElectricPump extends TileEntityElectricBlock implements I List tempPumpList = Arrays.asList(recurringNodes.toArray(new Coord4D[recurringNodes.size()])); Collections.shuffle(tempPumpList); + //First see if there are any fluid blocks touching the pump - if so, sucks and adds the location to the recurring list for(ForgeDirection orientation : ForgeDirection.VALID_DIRECTIONS) { Coord4D wrapper = Coord4D.get(this).getFromSide(orientation); @@ -182,24 +178,8 @@ public class TileEntityElectricPump extends TileEntityElectricBlock implements I } } - for(Coord4D wrapper : cleaningNodes) - { - if(MekanismUtils.isFluid(worldObj, wrapper.xCoord, wrapper.yCoord, wrapper.zCoord)) - { - if(fluidTank.getFluid() != null && MekanismUtils.getFluid(worldObj, wrapper.xCoord, wrapper.yCoord, wrapper.zCoord).isFluidEqual(fluidTank.getFluid())) - { - if(take) - { - setEnergy(getEnergy() - Mekanism.electricPumpUsage); - fluidTank.fill(MekanismUtils.getFluid(worldObj, wrapper.xCoord, wrapper.yCoord, wrapper.zCoord), true); - worldObj.setBlockToAir(wrapper.xCoord, wrapper.yCoord, wrapper.zCoord); - } - - return true; - } - } - } - + //Finally, go over the recurring list of nodes and see if there is a fluid block available to suck - if not, will iterate around the recurring block, attempt to suck, + //and then add the adjacent block to the recurring list for(Coord4D wrapper : tempPumpList) { if(MekanismUtils.isFluid(worldObj, wrapper.xCoord, wrapper.yCoord, wrapper.zCoord)) @@ -217,6 +197,7 @@ public class TileEntityElectricPump extends TileEntityElectricBlock implements I } } + //Add all the blocks surrounding this recurring node to the recurring node list for(ForgeDirection orientation : ForgeDirection.VALID_DIRECTIONS) { Coord4D side = wrapper.getFromSide(orientation); @@ -241,73 +222,12 @@ public class TileEntityElectricPump extends TileEntityElectricBlock implements I } } - cleaningNodes.add(wrapper); recurringNodes.remove(wrapper); } return false; } - public boolean clean(boolean take) - { - boolean took = false; - - if(!worldObj.isRemote) - { - for(Coord4D wrapper : cleaningNodes) - { - if(MekanismUtils.isDeadFluid(worldObj, wrapper.xCoord, wrapper.yCoord, wrapper.zCoord)) - { - if(fluidTank.getFluid() != null && MekanismUtils.getFluidId(worldObj, wrapper.xCoord, wrapper.yCoord, wrapper.zCoord) == fluidTank.getFluid().fluidID) - { - took = true; - - if(take) - { - worldObj.setBlockToAir(wrapper.xCoord, wrapper.yCoord, wrapper.zCoord); - } - } - } - } - - for(Coord4D wrapper : recurringNodes) - { - if(MekanismUtils.isDeadFluid(worldObj, wrapper.xCoord, wrapper.yCoord, wrapper.zCoord)) - { - if(fluidTank.getFluid() != null && MekanismUtils.getFluidId(worldObj, wrapper.xCoord, wrapper.yCoord, wrapper.zCoord) == fluidTank.getFluid().fluidID) - { - took = true; - - if(take) - { - worldObj.setBlockToAir(wrapper.xCoord, wrapper.yCoord, wrapper.zCoord); - } - } - } - } - - for(ForgeDirection orientation : ForgeDirection.VALID_DIRECTIONS) - { - Coord4D wrapper = Coord4D.get(this).getFromSide(orientation); - - if(MekanismUtils.isDeadFluid(worldObj, wrapper.xCoord, wrapper.yCoord, wrapper.zCoord)) - { - if(fluidTank.getFluid() != null && MekanismUtils.getFluidId(worldObj, wrapper.xCoord, wrapper.yCoord, wrapper.zCoord) == fluidTank.getFluid().fluidID) - { - took = true; - - if(take) - { - worldObj.setBlockToAir(wrapper.xCoord, wrapper.yCoord, wrapper.zCoord); - } - } - } - } - } - - return took; - } - @Override public void handlePacketData(ByteBuf dataStream) { @@ -370,18 +290,6 @@ public class TileEntityElectricPump extends TileEntityElectricBlock implements I { nbtTags.setTag("recurringNodes", recurringList); } - - NBTTagList cleaningList = new NBTTagList(); - - for(Coord4D obj : cleaningNodes) - { - cleaningList.appendTag(obj.write(new NBTTagCompound())); - } - - if(cleaningList.tagCount() != 0) - { - nbtTags.setTag("cleaningNodes", cleaningList); - } } @Override @@ -403,16 +311,6 @@ public class TileEntityElectricPump extends TileEntityElectricBlock implements I recurringNodes.add(Coord4D.read((NBTTagCompound)tagList.getCompoundTagAt(i))); } } - - if(nbtTags.hasKey("cleaningNodes")) - { - NBTTagList tagList = nbtTags.getTagList("cleaningNodes", NBT.TAG_COMPOUND); - - for(int i = 0; i < tagList.tagCount(); i++) - { - cleaningNodes.add(Coord4D.read((NBTTagCompound)tagList.getCompoundTagAt(i))); - } - } } @Override @@ -550,7 +448,6 @@ public class TileEntityElectricPump extends TileEntityElectricBlock implements I public boolean onSneakRightClick(EntityPlayer player, int side) { recurringNodes.clear(); - cleaningNodes.clear(); player.addChatMessage(new ChatComponentText(EnumColor.DARK_BLUE + "[Mekanism] " + EnumColor.GREY + MekanismUtils.localize("tooltip.configurator.pumpReset"))); From 321411ee3ac81730db1ec8ddecd1c3716c183c20 Mon Sep 17 00:00:00 2001 From: Aidan Brady Date: Wed, 6 Aug 2014 13:56:01 -0400 Subject: [PATCH 2/7] Fixed incorrect Advanced Solar Generator generation rate display --- .../java/mekanism/generators/client/gui/GuiSolarGenerator.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/mekanism/generators/client/gui/GuiSolarGenerator.java b/src/main/java/mekanism/generators/client/gui/GuiSolarGenerator.java index 4d0546c00..50aee3b70 100644 --- a/src/main/java/mekanism/generators/client/gui/GuiSolarGenerator.java +++ b/src/main/java/mekanism/generators/client/gui/GuiSolarGenerator.java @@ -39,7 +39,7 @@ public class GuiSolarGenerator extends GuiMekanism public List getInfo() { return ListUtils.asList( - "Producing: " + MekanismUtils.getEnergyDisplay(tileEntity.isActive ? MekanismGenerators.solarGeneration : 0) + "/t", + "Producing: " + MekanismUtils.getEnergyDisplay(tileEntity.isActive ? tileEntity.GENERATION_RATE : 0) + "/t", "Storing: " + MekanismUtils.getEnergyDisplay(tileEntity.getEnergy()), "Max Output: " + MekanismUtils.getEnergyDisplay(tileEntity.getMaxOutput()) + "/t"); } From 78c0cc4c7ce91483037d8d5c38a692b924b2a8c6 Mon Sep 17 00:00:00 2001 From: Aidan Brady Date: Wed, 6 Aug 2014 18:25:33 -0400 Subject: [PATCH 3/7] Fixed an issue where networks would be forgotten, made shift-M turn jetpack off immediately, simplified network code a bit --- .../java/mekanism/api/gas/GasNetwork.java | 4 --- .../api/transmitters/DynamicNetwork.java | 26 +++++++++++---- .../mekanism/client/ClientTickHandler.java | 13 ++++++-- .../java/mekanism/common/EnergyNetwork.java | 13 +++----- .../java/mekanism/common/FluidNetwork.java | 5 --- src/main/java/mekanism/common/Mekanism.java | 6 ++-- .../common/multipart/PartTransmitter.java | 4 +++ .../common/multipart/PartUniversalCable.java | 2 ++ .../common/network/PacketJetpackData.java | 33 ++++++++++++++----- 9 files changed, 68 insertions(+), 38 deletions(-) diff --git a/src/main/java/mekanism/api/gas/GasNetwork.java b/src/main/java/mekanism/api/gas/GasNetwork.java index 0248c614b..aaf7efdc9 100644 --- a/src/main/java/mekanism/api/gas/GasNetwork.java +++ b/src/main/java/mekanism/api/gas/GasNetwork.java @@ -45,14 +45,12 @@ public class GasNetwork extends DynamicNetwork public GasNetwork(IGridTransmitter... varPipes) { transmitters.addAll(Arrays.asList(varPipes)); - updateCapacity(); register(); } public GasNetwork(Collection> collection) { transmitters.addAll(collection); - updateCapacity(); register(); } @@ -97,8 +95,6 @@ public class GasNetwork extends DynamicNetwork gasScale = getScale(); - updateCapacity(); - fullRefresh(); register(); } diff --git a/src/main/java/mekanism/api/transmitters/DynamicNetwork.java b/src/main/java/mekanism/api/transmitters/DynamicNetwork.java index bef1f0d88..3dace876c 100644 --- a/src/main/java/mekanism/api/transmitters/DynamicNetwork.java +++ b/src/main/java/mekanism/api/transmitters/DynamicNetwork.java @@ -12,6 +12,7 @@ import java.util.Set; import mekanism.api.Coord4D; import mekanism.api.IClientTicker; +import mekanism.common.Mekanism; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; @@ -52,8 +53,20 @@ public abstract class DynamicNetwork> implemen for(ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { Coord4D coord = Coord4D.get(transmitter.getTile()).getFromSide(side); - possibleAcceptors.remove(coord); - acceptorDirections.remove(coord.getTileEntity(transmitter.getTile().getWorldObj())); + + if(possibleAcceptors.containsKey(coord)) + { + clearIfNecessary(coord, transmitter, side.getOpposite()); + } + } + } + + protected void clearIfNecessary(Coord4D acceptor, IGridTransmitter transmitter, ForgeDirection side) + { + if(acceptor.getTileEntity(getWorld()) == null || acceptor.getTileEntity(getWorld()).isInvalid() || transmitter.canConnectToAcceptor(side, true)) + { + possibleAcceptors.remove(acceptor); + acceptorDirections.remove(acceptor.getTileEntity(getWorld())); } } @@ -92,14 +105,14 @@ public abstract class DynamicNetwork> implemen return packetRange; } - public int getDimension() + public World getWorld() { if(getSize() == 0) { - return 0; + return null; } - return transmitters.iterator().next().getTile().getWorldObj().provider.dimensionId; + return transmitters.iterator().next().getTile().getWorldObj(); } protected AxisAlignedBB genPacketRange() @@ -198,7 +211,8 @@ public abstract class DynamicNetwork> implemen return possibleAcceptors.size(); } - public synchronized void updateCapacity() { + public synchronized void updateCapacity() + { updateMeanCapacity(); capacity = (int)meanCapacity * transmitters.size(); } diff --git a/src/main/java/mekanism/client/ClientTickHandler.java b/src/main/java/mekanism/client/ClientTickHandler.java index ba20f0767..69c793e45 100644 --- a/src/main/java/mekanism/client/ClientTickHandler.java +++ b/src/main/java/mekanism/client/ClientTickHandler.java @@ -9,6 +9,7 @@ import java.util.Set; import mekanism.api.EnumColor; import mekanism.api.IClientTicker; +import mekanism.api.StackUtils; import mekanism.api.gas.GasStack; import mekanism.client.sound.GasMaskSound; import mekanism.client.sound.JetpackSound; @@ -36,7 +37,6 @@ import mekanism.common.network.PacketScubaTankData.ScubaTankPacket; import mekanism.common.network.PacketWalkieTalkieState.WalkieTalkieStateMessage; import mekanism.common.util.LangUtils; import mekanism.common.util.MekanismUtils; -import mekanism.api.StackUtils; import net.minecraft.client.Minecraft; import net.minecraft.client.entity.AbstractClientPlayer; import net.minecraft.entity.player.EntityPlayer; @@ -312,8 +312,15 @@ public class ClientTickHandler { if(!lastTickUpdate) { - ((ItemJetpack)jetpack.getItem()).incrementMode(jetpack); - Mekanism.packetHandler.sendToServer(new JetpackDataMessage(JetpackPacket.MODE, null, false)); + if(mc.thePlayer.isSneaking()) + { + ((ItemJetpack)jetpack.getItem()).setMode(stack, JetpackMode.DISABLED); + } + else { + ((ItemJetpack)jetpack.getItem()).incrementMode(jetpack); + } + + Mekanism.packetHandler.sendToServer(new JetpackDataMessage(JetpackPacket.MODE, null, mc.thePlayer.isSneaking())); SoundHandler.playSound("mekanism:etc.Hydraulic"); lastTickUpdate = true; } diff --git a/src/main/java/mekanism/common/EnergyNetwork.java b/src/main/java/mekanism/common/EnergyNetwork.java index 11b012149..cd553f2af 100644 --- a/src/main/java/mekanism/common/EnergyNetwork.java +++ b/src/main/java/mekanism/common/EnergyNetwork.java @@ -43,22 +43,15 @@ public class EnergyNetwork extends DynamicNetwork public EnergyNetwork(IGridTransmitter... varCables) { transmitters.addAll(Arrays.asList(varCables)); - updateCapacity(); register(); } public EnergyNetwork(Collection> collection) { transmitters.addAll(collection); - updateCapacity(); register(); } - public static double round(double d) - { - return Math.round(d * 10000)/10000; - } - public EnergyNetwork(Set networks) { for(EnergyNetwork net : networks) @@ -80,9 +73,13 @@ public class EnergyNetwork extends DynamicNetwork } } - fullRefresh(); register(); } + + public static double round(double d) + { + return Math.round(d * 10000)/10000; + } @Override protected synchronized void updateMeanCapacity() diff --git a/src/main/java/mekanism/common/FluidNetwork.java b/src/main/java/mekanism/common/FluidNetwork.java index 36f6dbbe4..4dabef481 100644 --- a/src/main/java/mekanism/common/FluidNetwork.java +++ b/src/main/java/mekanism/common/FluidNetwork.java @@ -43,14 +43,12 @@ public class FluidNetwork extends DynamicNetwork public FluidNetwork(IGridTransmitter... varPipes) { transmitters.addAll(Arrays.asList(varPipes)); - updateCapacity(); register(); } public FluidNetwork(Collection> collection) { transmitters.addAll(collection); - updateCapacity(); register(); } @@ -95,9 +93,6 @@ public class FluidNetwork extends DynamicNetwork fluidScale = getScale(); - updateCapacity(); - - fullRefresh(); register(); } diff --git a/src/main/java/mekanism/common/Mekanism.java b/src/main/java/mekanism/common/Mekanism.java index 16e2ec492..d15e7025c 100644 --- a/src/main/java/mekanism/common/Mekanism.java +++ b/src/main/java/mekanism/common/Mekanism.java @@ -1424,7 +1424,7 @@ public class Mekanism public void onEnergyTransferred(EnergyTransferEvent event) { try { - packetHandler.sendToDimension(new TransmitterUpdateMessage(PacketType.ENERGY, Coord4D.get((TileEntity)event.energyNetwork.transmitters.iterator().next()), event.power), event.energyNetwork.getDimension()); + packetHandler.sendToDimension(new TransmitterUpdateMessage(PacketType.ENERGY, Coord4D.get((TileEntity)event.energyNetwork.transmitters.iterator().next()), event.power), event.energyNetwork.getWorld().provider.dimensionId); } catch(Exception e) {} } @@ -1432,7 +1432,7 @@ public class Mekanism public void onGasTransferred(GasTransferEvent event) { try { - packetHandler.sendToDimension(new TransmitterUpdateMessage(PacketType.GAS, Coord4D.get((TileEntity)event.gasNetwork.transmitters.iterator().next()), event.transferType, event.didTransfer), event.gasNetwork.getDimension()); + packetHandler.sendToDimension(new TransmitterUpdateMessage(PacketType.GAS, Coord4D.get((TileEntity)event.gasNetwork.transmitters.iterator().next()), event.transferType, event.didTransfer), event.gasNetwork.getWorld().provider.dimensionId); } catch(Exception e) {} } @@ -1440,7 +1440,7 @@ public class Mekanism public void onLiquidTransferred(FluidTransferEvent event) { try { - packetHandler.sendToDimension(new TransmitterUpdateMessage(PacketType.FLUID, Coord4D.get((TileEntity)event.fluidNetwork.transmitters.iterator().next()), event.fluidType, event.didTransfer), event.fluidNetwork.getDimension()); + packetHandler.sendToDimension(new TransmitterUpdateMessage(PacketType.FLUID, Coord4D.get((TileEntity)event.fluidNetwork.transmitters.iterator().next()), event.fluidType, event.didTransfer), event.fluidNetwork.getWorld().provider.dimensionId); } catch(Exception e) {} } diff --git a/src/main/java/mekanism/common/multipart/PartTransmitter.java b/src/main/java/mekanism/common/multipart/PartTransmitter.java index 7bfc50b14..bbbec3063 100644 --- a/src/main/java/mekanism/common/multipart/PartTransmitter.java +++ b/src/main/java/mekanism/common/multipart/PartTransmitter.java @@ -101,6 +101,8 @@ public abstract class PartTransmitter> extends Pa if(connectedNets.size() == 0) { theNetwork = createNetworkFromSingleTransmitter((IGridTransmitter)tile()); + theNetwork.fullRefresh(); + theNetwork.updateCapacity(); } else if(connectedNets.size() == 1) { @@ -114,6 +116,8 @@ public abstract class PartTransmitter> extends Pa else { theNetwork = createNetworkByMergingSet(connectedNets); theNetwork.transmitters.add((IGridTransmitter)tile()); + theNetwork.fullRefresh(); + theNetwork.updateCapacity(); } } diff --git a/src/main/java/mekanism/common/multipart/PartUniversalCable.java b/src/main/java/mekanism/common/multipart/PartUniversalCable.java index 1a7c04065..bd0b76944 100644 --- a/src/main/java/mekanism/common/multipart/PartUniversalCable.java +++ b/src/main/java/mekanism/common/multipart/PartUniversalCable.java @@ -134,7 +134,9 @@ public class PartUniversalCable extends PartTransmitter implement super.refreshTransmitterNetwork(); if(MekanismUtils.useBuildCraft()) + { reconfigure(); + } } @Override diff --git a/src/main/java/mekanism/common/network/PacketJetpackData.java b/src/main/java/mekanism/common/network/PacketJetpackData.java index 82140f30a..7f1de1a51 100644 --- a/src/main/java/mekanism/common/network/PacketJetpackData.java +++ b/src/main/java/mekanism/common/network/PacketJetpackData.java @@ -4,6 +4,7 @@ import io.netty.buffer.ByteBuf; import mekanism.common.Mekanism; import mekanism.common.PacketHandler; import mekanism.common.item.ItemJetpack; +import mekanism.common.item.ItemJetpack.JetpackMode; import mekanism.common.network.PacketJetpackData.JetpackDataMessage; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; @@ -39,7 +40,13 @@ public class PacketJetpackData implements IMessageHandler Date: Wed, 6 Aug 2014 18:49:32 -0400 Subject: [PATCH 4/7] Started work on Range4D for new packet system --- src/main/java/mekanism/api/Range4D.java | 83 +++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 src/main/java/mekanism/api/Range4D.java diff --git a/src/main/java/mekanism/api/Range4D.java b/src/main/java/mekanism/api/Range4D.java new file mode 100644 index 000000000..0a487b2e7 --- /dev/null +++ b/src/main/java/mekanism/api/Range4D.java @@ -0,0 +1,83 @@ +package mekanism.api; + +import net.minecraft.server.MinecraftServer; + +public class Range4D +{ + public int dimensionId; + + public int xMin; + public int yMin; + public int zMin; + public int xMax; + public int yMax; + public int zMax; + + public Range4D(int minX, int minY, int minZ, int maxX, int maxY, int maxZ, int dimension) + { + xMin = minX; + yMin = minY; + zMin = minZ; + xMax = maxX; + yMax = maxY; + zMax = maxZ; + + dimensionId = dimension; + } + + public Range4D(Chunk3D chunk) + { + xMin = chunk.xCoord*16; + yMin = 0; + zMin = chunk.zCoord*16; + xMax = xMin+16; + } + + public static Range4D getLoadedChunks(MinecraftServer server) + { + int range = server.getConfigurationManager().getViewDistance(); + + + + return null; + } + + @Override + public Range4D clone() + { + return new Range4D(xMin, yMin, zMin, xMax, yMax, zMax, dimensionId); + } + + @Override + public String toString() + { + return "[Range4D: " + xMin + ", " + yMin + ", " + zMin + ", " + xMax + ", " + yMax + ", " + zMax + ", dim=" + dimensionId + "]"; + } + + @Override + public boolean equals(Object obj) + { + return obj instanceof Range4D && + ((Range4D)obj).xMin == xMin && + ((Range4D)obj).yMin == yMin && + ((Range4D)obj).zMin == zMin && + ((Range4D)obj).xMax == xMax && + ((Range4D)obj).yMax == yMax && + ((Range4D)obj).zMax == zMax && + ((Range4D)obj).dimensionId == dimensionId; + } + + @Override + public int hashCode() + { + int code = 1; + code = 31 * code + xMin; + code = 31 * code + yMin; + code = 31 * code + zMin; + code = 31 * code + xMax; + code = 31 * code + yMax; + code = 31 * code + zMax; + code = 31 * code + dimensionId; + return code; + } +} From 2ba639f8fc7491b8da670f7498f67be265a13ca8 Mon Sep 17 00:00:00 2001 From: Ben Spiers Date: Thu, 7 Aug 2014 03:58:01 +0100 Subject: [PATCH 5/7] Fix running with Forestry but not BC. --- src/main/java/mekanism/common/Mekanism.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/mekanism/common/Mekanism.java b/src/main/java/mekanism/common/Mekanism.java index dce79ef61..2e3f2013c 100644 --- a/src/main/java/mekanism/common/Mekanism.java +++ b/src/main/java/mekanism/common/Mekanism.java @@ -162,7 +162,7 @@ import cpw.mods.fml.common.registry.GameRegistry; */ @Mod(modid = "Mekanism", name = "Mekanism", version = "7.0.0", guiFactory = "mekanism.client.gui.ConfigGuiFactory", dependencies = "after:ForgeMultipart;after:BuildCraftAPI|power;after:BuildCraftAPI|tools;after:BuildCraftAPI|transport;after:IC2API;after:CoFHAPI|energy;after:ComputerCraft;after:Galacticraft API;" + - "after:MineFactoryReloaded;after:MetallurgyCore;after:EnderIO;after:ExtraUtilities;after:Railcraft") + "after:MineFactoryReloaded;after:MetallurgyCore;after:EnderIO;after:ExtraUtilities;after:Railcraft;after:Forestry") public class Mekanism { /** Mekanism Packet Pipeline */ From 799f49d9b670a4ddbb9612a20cd23f56dcc80445 Mon Sep 17 00:00:00 2001 From: Ben Spiers Date: Thu, 7 Aug 2014 17:16:08 +0100 Subject: [PATCH 6/7] Move to Forge block rotation implementation. Hopefully the configurator should rotate more stuff now and more wrenches should be able to rotate our blocks --- .../mekanism/common/block/BlockBasic.java | 33 +++++++++++++++ .../common/block/BlockEnergyCube.java | 33 +++++++++++++++ .../mekanism/common/block/BlockGasTank.java | 35 ++++++++++++++++ .../mekanism/common/block/BlockMachine.java | 33 +++++++++++++++ .../common/item/ItemConfigurator.java | 33 +++++++-------- .../common/block/BlockGenerator.java | 41 ++++++++++++++++++- 6 files changed, 188 insertions(+), 20 deletions(-) diff --git a/src/main/java/mekanism/common/block/BlockBasic.java b/src/main/java/mekanism/common/block/BlockBasic.java index 38400a179..fdb6bb1d3 100644 --- a/src/main/java/mekanism/common/block/BlockBasic.java +++ b/src/main/java/mekanism/common/block/BlockBasic.java @@ -802,4 +802,37 @@ public class BlockBasic extends Block return super.shouldSideBeRendered(world, x, y, z, side); } } + + public ForgeDirection[] getValidRotations(World world, int x, int y, int z) + { + TileEntity tile = world.getTileEntity(x, y, z); + ForgeDirection[] valid = new ForgeDirection[6]; + if(tile instanceof TileEntityBasicBlock) + { + TileEntityBasicBlock basicTile = (TileEntityBasicBlock)tile; + for(ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) + { + if(basicTile.canSetFacing(dir.ordinal())) + { + valid[dir.ordinal()] = dir; + } + } + } + return valid; + } + + public boolean rotateBlock(World world, int x, int y, int z, ForgeDirection axis) + { + TileEntity tile = world.getTileEntity(x, y, z); + if(tile instanceof TileEntityBasicBlock) + { + TileEntityBasicBlock basicTile = (TileEntityBasicBlock)tile; + if(basicTile.canSetFacing(axis.ordinal())) + { + basicTile.setFacing((short)axis.ordinal()); + return true; + } + } + return false; + } } \ No newline at end of file diff --git a/src/main/java/mekanism/common/block/BlockEnergyCube.java b/src/main/java/mekanism/common/block/BlockEnergyCube.java index 68d2ef24f..f3863a5c8 100644 --- a/src/main/java/mekanism/common/block/BlockEnergyCube.java +++ b/src/main/java/mekanism/common/block/BlockEnergyCube.java @@ -321,4 +321,37 @@ public class BlockEnergyCube extends BlockContainer { return true; } + + public ForgeDirection[] getValidRotations(World world, int x, int y, int z) + { + TileEntity tile = world.getTileEntity(x, y, z); + ForgeDirection[] valid = new ForgeDirection[6]; + if(tile instanceof TileEntityBasicBlock) + { + TileEntityBasicBlock basicTile = (TileEntityBasicBlock)tile; + for(ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) + { + if(basicTile.canSetFacing(dir.ordinal())) + { + valid[dir.ordinal()] = dir; + } + } + } + return valid; + } + + public boolean rotateBlock(World world, int x, int y, int z, ForgeDirection axis) + { + TileEntity tile = world.getTileEntity(x, y, z); + if(tile instanceof TileEntityBasicBlock) + { + TileEntityBasicBlock basicTile = (TileEntityBasicBlock)tile; + if(basicTile.canSetFacing(axis.ordinal())) + { + basicTile.setFacing((short)axis.ordinal()); + return true; + } + } + return false; + } } diff --git a/src/main/java/mekanism/common/block/BlockGasTank.java b/src/main/java/mekanism/common/block/BlockGasTank.java index 56f9d8c74..6db0bfba9 100644 --- a/src/main/java/mekanism/common/block/BlockGasTank.java +++ b/src/main/java/mekanism/common/block/BlockGasTank.java @@ -21,6 +21,8 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.util.MathHelper; import net.minecraft.util.MovingObjectPosition; import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + import buildcraft.api.tools.IToolWrench; import cpw.mods.fml.common.ModAPIManager; @@ -235,4 +237,37 @@ public class BlockGasTank extends BlockContainer return itemStack; } + + public ForgeDirection[] getValidRotations(World world, int x, int y, int z) + { + TileEntity tile = world.getTileEntity(x, y, z); + ForgeDirection[] valid = new ForgeDirection[6]; + if(tile instanceof TileEntityBasicBlock) + { + TileEntityBasicBlock basicTile = (TileEntityBasicBlock)tile; + for(ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) + { + if(basicTile.canSetFacing(dir.ordinal())) + { + valid[dir.ordinal()] = dir; + } + } + } + return valid; + } + + public boolean rotateBlock(World world, int x, int y, int z, ForgeDirection axis) + { + TileEntity tile = world.getTileEntity(x, y, z); + if(tile instanceof TileEntityBasicBlock) + { + TileEntityBasicBlock basicTile = (TileEntityBasicBlock)tile; + if(basicTile.canSetFacing(axis.ordinal())) + { + basicTile.setFacing((short)axis.ordinal()); + return true; + } + } + return false; + } } diff --git a/src/main/java/mekanism/common/block/BlockMachine.java b/src/main/java/mekanism/common/block/BlockMachine.java index fcfafe0f6..e33f75ba1 100644 --- a/src/main/java/mekanism/common/block/BlockMachine.java +++ b/src/main/java/mekanism/common/block/BlockMachine.java @@ -1279,4 +1279,37 @@ public class BlockMachine extends BlockContainer implements ISpecialBounds, IPer return null; } + + public ForgeDirection[] getValidRotations(World world, int x, int y, int z) + { + TileEntity tile = world.getTileEntity(x, y, z); + ForgeDirection[] valid = new ForgeDirection[6]; + if(tile instanceof TileEntityBasicBlock) + { + TileEntityBasicBlock basicTile = (TileEntityBasicBlock)tile; + for(ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) + { + if(basicTile.canSetFacing(dir.ordinal())) + { + valid[dir.ordinal()] = dir; + } + } + } + return valid; + } + + public boolean rotateBlock(World world, int x, int y, int z, ForgeDirection axis) + { + TileEntity tile = world.getTileEntity(x, y, z); + if(tile instanceof TileEntityBasicBlock) + { + TileEntityBasicBlock basicTile = (TileEntityBasicBlock)tile; + if(basicTile.canSetFacing(axis.ordinal())) + { + basicTile.setFacing((short)axis.ordinal()); + return true; + } + } + return false; + } } diff --git a/src/main/java/mekanism/common/item/ItemConfigurator.java b/src/main/java/mekanism/common/item/ItemConfigurator.java index 2d6cf23b1..58532b19f 100644 --- a/src/main/java/mekanism/common/item/ItemConfigurator.java +++ b/src/main/java/mekanism/common/item/ItemConfigurator.java @@ -1,6 +1,7 @@ package mekanism.common.item; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import java.util.Random; @@ -13,6 +14,8 @@ import mekanism.common.network.PacketTileEntity.TileEntityMessage; import mekanism.common.tile.TileEntityBasicBlock; import mekanism.common.tile.TileEntityElectricChest; import mekanism.common.util.MekanismUtils; + +import net.minecraft.block.Block; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; @@ -65,6 +68,7 @@ public class ItemConfigurator extends ItemEnergized implements IToolWrench { if(!world.isRemote) { + Block block = world.getBlock(x, y, z); TileEntity tile = world.getTileEntity(x, y, z); if(tile instanceof IConfigurable) @@ -172,27 +176,18 @@ public class ItemConfigurator extends ItemEnergized implements IToolWrench } else if(getState(stack) == 2) { - if(tile instanceof TileEntityBasicBlock) + ForgeDirection axis = ForgeDirection.getOrientation(side); + List l = Arrays.asList(block.getValidRotations(world, x, y, z)); + + if(!player.isSneaking() && l.contains(axis)) { - TileEntityBasicBlock basicBlock = (TileEntityBasicBlock)tile; - int newSide = basicBlock.facing; - - if(!player.isSneaking()) - { - newSide = side; - } - else { - newSide = ForgeDirection.OPPOSITES[side]; - } - - if(basicBlock.canSetFacing(newSide)) - { - basicBlock.setFacing((short)newSide); - world.playSoundEffect(x, y, z, "random.click", 1.0F, 1.0F); - } - - return true; + block.rotateBlock(world, x, y, z, axis); } + else if(player.isSneaking() && l.contains(axis.getOpposite())) { + block.rotateBlock(world, x, y, z, axis.getOpposite()); + } + + return true; } else if(getState(stack) == 3) { diff --git a/src/main/java/mekanism/generators/common/block/BlockGenerator.java b/src/main/java/mekanism/generators/common/block/BlockGenerator.java index 0f94d9688..2d1a80dba 100644 --- a/src/main/java/mekanism/generators/common/block/BlockGenerator.java +++ b/src/main/java/mekanism/generators/common/block/BlockGenerator.java @@ -40,7 +40,12 @@ import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; import buildcraft.api.tools.IToolWrench; +import dan200.computercraft.api.peripheral.IPeripheral; +import dan200.computercraft.api.peripheral.IPeripheralProvider; + import cpw.mods.fml.common.ModAPIManager; +import cpw.mods.fml.common.Optional.Interface; +import cpw.mods.fml.common.Optional.Method; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -55,7 +60,8 @@ import cpw.mods.fml.relauncher.SideOnly; * @author AidanBrady * */ -public class BlockGenerator extends BlockContainer implements ISpecialBounds +@Interface(iface = "dan200.computercraft.api.peripheral.IPeripheralProvider", modid = "ComputerCraft") +public class BlockGenerator extends BlockContainer implements ISpecialBounds, IPeripheralProvider { public Random machineRand = new Random(); @@ -608,4 +614,37 @@ public class BlockGenerator extends BlockContainer implements ISpecialBounds { return true; } + + public ForgeDirection[] getValidRotations(World world, int x, int y, int z) + { + TileEntity tile = world.getTileEntity(x, y, z); + ForgeDirection[] valid = new ForgeDirection[6]; + if(tile instanceof TileEntityBasicBlock) + { + TileEntityBasicBlock basicTile = (TileEntityBasicBlock)tile; + for(ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) + { + if(basicTile.canSetFacing(dir.ordinal())) + { + valid[dir.ordinal()] = dir; + } + } + } + return valid; + } + + public boolean rotateBlock(World world, int x, int y, int z, ForgeDirection axis) + { + TileEntity tile = world.getTileEntity(x, y, z); + if(tile instanceof TileEntityBasicBlock) + { + TileEntityBasicBlock basicTile = (TileEntityBasicBlock)tile; + if(basicTile.canSetFacing(axis.ordinal())) + { + basicTile.setFacing((short)axis.ordinal()); + return true; + } + } + return false; + } } From 91dbb7fcd69d42625948c1e977bc099f827106a3 Mon Sep 17 00:00:00 2001 From: Ben Spiers Date: Thu, 7 Aug 2014 17:17:11 +0100 Subject: [PATCH 7/7] Add CC IPeripheralProvider to Bounding, EnergyCube and Generator blocks --- .../mekanism/common/block/BlockBounding.java | 26 ++++++++++++++++--- .../common/block/BlockEnergyCube.java | 21 ++++++++++++++- .../common/block/BlockGenerator.java | 14 ++++++++++ 3 files changed, 57 insertions(+), 4 deletions(-) diff --git a/src/main/java/mekanism/common/block/BlockBounding.java b/src/main/java/mekanism/common/block/BlockBounding.java index 94f7f6a84..9276a4100 100644 --- a/src/main/java/mekanism/common/block/BlockBounding.java +++ b/src/main/java/mekanism/common/block/BlockBounding.java @@ -13,10 +13,16 @@ import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.MovingObjectPosition; import net.minecraft.world.World; +import cpw.mods.fml.common.Optional.Interface; +import cpw.mods.fml.common.Optional.Method; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -public class BlockBounding extends Block +import dan200.computercraft.api.peripheral.IPeripheral; +import dan200.computercraft.api.peripheral.IPeripheralProvider; + +@Interface(iface = "dan200.computercraft.api.peripheral.IPeripheralProvider", modid = "ComputerCraft") +public class BlockBounding extends Block implements IPeripheralProvider { public BlockBounding() { @@ -52,11 +58,11 @@ public class BlockBounding extends Block } @Override - public boolean removedByPlayer(World world, EntityPlayer player, int x, int y, int z) + public boolean removedByPlayer(World world, EntityPlayer player, int x, int y, int z, boolean willHarvest) { try { TileEntityBoundingBlock tileEntity = (TileEntityBoundingBlock)world.getTileEntity(x, y, z); - return world.getBlock(tileEntity.mainX, tileEntity.mainY, tileEntity.mainZ).removedByPlayer(world, player, tileEntity.mainX, tileEntity.mainY, tileEntity.mainZ); + return world.getBlock(tileEntity.mainX, tileEntity.mainY, tileEntity.mainZ).removedByPlayer(world, player, tileEntity.mainX, tileEntity.mainY, tileEntity.mainZ, willHarvest); } catch(Exception e) { return false; } @@ -122,4 +128,18 @@ public class BlockBounding extends Block return null; } + + @Override + @Method(modid = "ComputerCraft") + public IPeripheral getPeripheral(World world, int x, int y, int z, int side) + { + TileEntity te = world.getTileEntity(x, y, z); + + if(te != null && te instanceof IPeripheral) + { + return (IPeripheral)te; + } + + return null; + } } diff --git a/src/main/java/mekanism/common/block/BlockEnergyCube.java b/src/main/java/mekanism/common/block/BlockEnergyCube.java index f3863a5c8..ba43cd3e3 100644 --- a/src/main/java/mekanism/common/block/BlockEnergyCube.java +++ b/src/main/java/mekanism/common/block/BlockEnergyCube.java @@ -33,8 +33,12 @@ import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; import buildcraft.api.tools.IToolWrench; +import dan200.computercraft.api.peripheral.IPeripheral; +import dan200.computercraft.api.peripheral.IPeripheralProvider; import cpw.mods.fml.common.ModAPIManager; +import cpw.mods.fml.common.Optional.Interface; +import cpw.mods.fml.common.Optional.Method; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -46,7 +50,8 @@ import cpw.mods.fml.relauncher.SideOnly; * @author AidanBrady * */ -public class BlockEnergyCube extends BlockContainer +@Interface(iface = "dan200.computercraft.api.peripheral.IPeripheralProvider", modid = "ComputerCraft") +public class BlockEnergyCube extends BlockContainer implements IPeripheralProvider { public IIcon[][] icons = new IIcon[256][256]; @@ -354,4 +359,18 @@ public class BlockEnergyCube extends BlockContainer } return false; } + + @Override + @Method(modid = "ComputerCraft") + public IPeripheral getPeripheral(World world, int x, int y, int z, int side) + { + TileEntity te = world.getTileEntity(x, y, z); + + if(te != null && te instanceof IPeripheral) + { + return (IPeripheral)te; + } + + return null; + } } diff --git a/src/main/java/mekanism/generators/common/block/BlockGenerator.java b/src/main/java/mekanism/generators/common/block/BlockGenerator.java index 2d1a80dba..d2f6af17d 100644 --- a/src/main/java/mekanism/generators/common/block/BlockGenerator.java +++ b/src/main/java/mekanism/generators/common/block/BlockGenerator.java @@ -647,4 +647,18 @@ public class BlockGenerator extends BlockContainer implements ISpecialBounds, IP } return false; } + + @Override + @Method(modid = "ComputerCraft") + public IPeripheral getPeripheral(World world, int x, int y, int z, int side) + { + TileEntity te = world.getTileEntity(x, y, z); + + if(te != null && te instanceof IPeripheral) + { + return (IPeripheral)te; + } + + return null; + } }