From 7ed516e30ba224b4b8e3fad9c836c22ca00bfcdb Mon Sep 17 00:00:00 2001 From: Jason Mitchell Date: Fri, 20 Jan 2023 00:30:50 -0800 Subject: MTE Inventory updates (#1496) * MTE Inventory updates * Separate Input/Output inventory * Use a LinkedHashMap to ensure inventory orders are deterministic * Input/Output work on either Input/Output inventories * MTE Inventory * Add GT_Packet_MultiTileEntity * More dyanmic packet with packetFeatures * Add IMTE_HasModes for MultiBlockPart * Help with MTE Inventory (#1613) * convert inventory to use ItemStackHandler * Update MUI * inventories * move Iteminventory to its own method Co-authored-by: miozune * Update MUI * Update MUI * Add IMultiBlockPart * Mte fluid inventory (#1639) * first work on fluid inventory * make gui work with numbers not dividable by 4 * use math.min * add outputfluids saving * actually working * Update MUI Co-authored-by: miozune * Ticking Covers! * Parts now register covers with the controller * Controllers now tick covers on parts * Break cover ticking out into `tickCoverAtSide` Fix some inventory methods on MultiBlockController * Filter on tickable covers * Improve GUIs for MTEs (#1650) * working controller GUI * locked inventory selection work * input and output locking of inventories Co-authored-by: miozune * spotless * CoverInfo refactor (#1654) * Add `CoverInfo` and deprecate the old fields to hold cover information * Disable MTE registration * Fix NPE - Return EMPTY_INFO for SIDE_UNKNOWN Temporarily add back old NBT saving in case of a revert so covers aren't lost. * Actually save the old NBT data, instead of empty Co-authored-by: BlueWeabo <76872108+BlueWeabo@users.noreply.github.com> Co-authored-by: miozune --- src/main/java/gregtech/api/enums/GT_Values.java | 12 +- .../java/gregtech/api/graphs/GenerateNodeMap.java | 73 ++-- .../gregtech/api/gui/modularui/GT_UIInfos.java | 35 +- .../gregtech/api/gui/modularui/GT_UITextures.java | 4 + .../api/gui/widgets/GT_GuiCoverTabLine.java | 10 +- .../api/interfaces/covers/IControlsWorkCover.java | 8 +- .../metatileentity/IMetaTileEntityItemPipe.java | 61 +-- .../api/interfaces/tileentity/ICoverable.java | 5 + .../api/metatileentity/BaseMetaPipeEntity.java | 170 ++------ .../api/metatileentity/BaseMetaTileEntity.java | 127 ++---- .../api/metatileentity/CoverableTileEntity.java | 453 +++++++++++---------- .../metatileentity/GregTechTileClientEvents.java | 2 +- .../api/metatileentity/MetaPipeEntity.java | 71 ++-- .../api/metatileentity/MetaTileEntity.java | 47 +-- .../implementations/GT_MetaPipeEntity_Cable.java | 68 ++-- .../implementations/GT_MetaPipeEntity_Fluid.java | 79 ++-- .../implementations/GT_MetaPipeEntity_Item.java | 60 ++- .../GT_MetaTileEntity_BasicMachine.java | 5 +- .../GT_MetaTileEntity_Hatch_InputBus.java | 8 +- .../GT_MetaTileEntity_Hatch_Output.java | 24 +- .../api/multitileentity/MultiTileEntityBlock.java | 93 ++--- .../multitileentity/base/BaseMultiTileEntity.java | 157 +++---- .../base/BaseNontickableMultiTileEntity.java | 11 +- .../interfaces/IMultiBlockController.java | 4 + .../interfaces/IMultiBlockFluidHandler.java | 3 + .../interfaces/IMultiBlockInventory.java | 6 + .../interfaces/IMultiBlockPart.java | 11 + .../interfaces/IMultiTileEntity.java | 10 + .../machine/MultiTileBasicMachine.java | 112 +++-- .../multiblock/base/MultiBlockController.java | 452 ++++++++++++++++---- .../multiblock/base/MultiBlockPart.java | 274 +++++++++++-- .../gregtech/api/net/GT_Packet_Block_Event.java | 2 +- .../api/net/GT_Packet_GtTileEntityGuiRequest.java | 33 +- .../api/net/GT_Packet_MultiTileEntity.java | 200 +++++++++ src/main/java/gregtech/api/net/GT_Packet_New.java | 4 +- .../api/net/GT_Packet_RequestCoverData.java | 17 +- .../gregtech/api/net/GT_Packet_SendCoverData.java | 16 +- .../gregtech/api/net/GT_Packet_TileEntity.java | 22 - .../api/net/GT_Packet_TileEntityCoverGUI.java | 25 +- .../api/threads/GT_Runnable_Cable_Update.java | 8 +- .../gregtech/api/util/GT_CircuitryBehavior.java | 100 ++--- .../gregtech/api/util/GT_CoverBehaviorBase.java | 2 +- src/main/java/gregtech/api/util/GT_Utility.java | 52 ++- src/main/java/gregtech/common/GT_Client.java | 16 +- src/main/java/gregtech/common/GT_Network.java | 45 +- src/main/java/gregtech/common/GT_Proxy.java | 29 +- .../gregtech/common/blocks/GT_Block_Machines.java | 30 +- .../java/gregtech/common/covers/CoverInfo.java | 235 +++++++++++ .../common/covers/GT_Cover_ControlsWork.java | 6 +- .../gregtech/common/covers/GT_Cover_Conveyor.java | 10 +- .../common/covers/GT_Cover_FacadeBase.java | 24 +- .../GT_Cover_RedstoneTransmitterExternal.java | 6 +- .../GT_MetaTileEntity_Hatch_OutputBus_ME.java | 8 +- .../GT_MetaTileEntity_Hatch_Output_ME.java | 8 +- .../basic/GT_MetaTileEntity_IndustrialApiary.java | 160 ++++---- .../multi/GT_MetaTileEntity_Cleanroom.java | 36 +- .../preload/GT_Loader_MultiTileEntities.java | 33 +- 57 files changed, 2218 insertions(+), 1364 deletions(-) create mode 100644 src/main/java/gregtech/api/multitileentity/interfaces/IMultiBlockPart.java create mode 100644 src/main/java/gregtech/api/net/GT_Packet_MultiTileEntity.java create mode 100644 src/main/java/gregtech/common/covers/CoverInfo.java (limited to 'src/main/java') diff --git a/src/main/java/gregtech/api/enums/GT_Values.java b/src/main/java/gregtech/api/enums/GT_Values.java index 4911801025..2ee24b8b5a 100644 --- a/src/main/java/gregtech/api/enums/GT_Values.java +++ b/src/main/java/gregtech/api/enums/GT_Values.java @@ -257,8 +257,9 @@ public class GT_Values { /** * NBT String Keys */ - public static class NBT { + public static final class NBT { public static final String COLOR = "gt.color", // Integer + COVERS = "gt.covers", // String CUSTOM_NAME = "name", // String DISPAY = "gt.display", // String FACING = "gt.facing", // Byte @@ -274,14 +275,15 @@ public class GT_Values { // Machines ACTIVE = "gt.active", // Boolean FLUID_OUT = "gt.fluidout", // Output Fluid - INV_OUT = "gt.invout", // ItemStack PARALLEL = "gt.parallel", // Number TANK_CAPACITY = "gt.tankcap", // Number TANK_IN = "gt.tank.in.", // FluidStack TANK_OUT = "gt.tank.out.", // FluidStack TEXTURE = "gt.texture", // String - INV_SIZE = "gt.invsize", // Number - INV_LIST = "gt.invlist", // NBT List + INV_INPUT_SIZE = "gt.invsize.in", // Number + INV_OUTPUT_SIZE = "gt.invsize.out", // Number + INV_INPUT_LIST = "gt.invlist.in", // NBT List + INV_OUTPUT_LIST = "gt.invlist.out", // NBT List // MultiBlock STRUCTURE_OK = "gt.structure.ok", @@ -291,6 +293,8 @@ public class GT_Values { TARGET_X = "gt.target.x", // Number TARGET_Y = "gt.target.y", // Number TARGET_Z = "gt.target.z", // Number + LOCKED_INVENTORY = "gt.locked.inventory", // String + LOCKED_INVENTORY_INDEX = "gt.locked.inventory.index", // Number empty_ = ""; } diff --git a/src/main/java/gregtech/api/graphs/GenerateNodeMap.java b/src/main/java/gregtech/api/graphs/GenerateNodeMap.java index c0ee8b9490..8085421576 100644 --- a/src/main/java/gregtech/api/graphs/GenerateNodeMap.java +++ b/src/main/java/gregtech/api/graphs/GenerateNodeMap.java @@ -1,5 +1,6 @@ package gregtech.api.graphs; +import static gregtech.api.enums.GT_Values.ALL_VALID_SIDES; import static gregtech.api.util.GT_Utility.getOppositeSide; import gregtech.api.graphs.consumers.ConsumerNode; @@ -15,7 +16,7 @@ public abstract class GenerateNodeMap { // clearing the node map to make sure it is gone on reset public static void clearNodeMap(Node aNode, int aReturnNodeValue) { if (aNode.mTileEntity instanceof BaseMetaPipeEntity) { - BaseMetaPipeEntity tPipe = (BaseMetaPipeEntity) aNode.mTileEntity; + final BaseMetaPipeEntity tPipe = (BaseMetaPipeEntity) aNode.mTileEntity; tPipe.setNode(null); tPipe.setNodePath(null); if (aNode.mSelfPath != null) { @@ -23,24 +24,24 @@ public abstract class GenerateNodeMap { aNode.mSelfPath = null; } } - for (int i = 0; i < 6; i++) { - NodePath tPath = aNode.mNodePaths[i]; + for (byte side : ALL_VALID_SIDES) { + final NodePath tPath = aNode.mNodePaths[side]; if (tPath != null) { tPath.clearPath(); - aNode.mNodePaths[i] = null; + aNode.mNodePaths[side] = null; } - Node tNextNode = aNode.mNeighbourNodes[i]; + final Node tNextNode = aNode.mNeighbourNodes[side]; if (tNextNode == null) continue; if (tNextNode.mNodeValue != aReturnNodeValue) clearNodeMap(tNextNode, aNode.mNodeValue); - aNode.mNeighbourNodes[i] = null; + aNode.mNeighbourNodes[side] = null; } } // get how many connections the pipe have private static int getNumberOfConnections(MetaPipeEntity aPipe) { int tCons = 0; - for (int i = 0; i < 6; i++) { - if (aPipe.isConnectedAtSide(i)) tCons++; + for (byte side : ALL_VALID_SIDES) { + if (aPipe.isConnectedAtSide(side)) tCons++; } return tCons; } @@ -53,17 +54,17 @@ public abstract class GenerateNodeMap { int aNextNodeValue, ArrayList tConsumers, HashSet tNodeMap) { - MetaPipeEntity tMetaPipe = (MetaPipeEntity) aPipe.getMetaTileEntity(); - for (byte i = 0; i < 6; i++) { - if (i == aInvalidSide) { + final MetaPipeEntity tMetaPipe = (MetaPipeEntity) aPipe.getMetaTileEntity(); + for (byte side : ALL_VALID_SIDES) { + if (side == aInvalidSide) { continue; } - TileEntity tNextTileEntity = aPipe.getTileEntityAtSide(i); - if (tNextTileEntity == null || (tMetaPipe != null && !tMetaPipe.isConnectedAtSide(i))) continue; - ArrayList tNewPipes = new ArrayList<>(); - Pair nextTileEntity = getNextValidTileEntity(tNextTileEntity, tNewPipes, i, tNodeMap); + final TileEntity tNextTileEntity = aPipe.getTileEntityAtSide(side); + if (tNextTileEntity == null || (tMetaPipe != null && !tMetaPipe.isConnectedAtSide(side))) continue; + final ArrayList tNewPipes = new ArrayList<>(); + final Pair nextTileEntity = getNextValidTileEntity(tNextTileEntity, tNewPipes, side, tNodeMap); if (nextTileEntity != null) { - Node tNextNode = generateNode( + final Node tNextNode = generateNode( nextTileEntity.mTileEntity, aPipeNode, aNextNodeValue + 1, @@ -74,10 +75,10 @@ public abstract class GenerateNodeMap { if (tNextNode != null) { aNextNodeValue = tNextNode.mHighestNodeValue; aPipeNode.mHighestNodeValue = tNextNode.mHighestNodeValue; - aPipeNode.mNeighbourNodes[i] = tNextNode; - aPipeNode.mNodePaths[i] = aPipeNode.returnValues.mReturnPath; - aPipeNode.locks[i] = aPipeNode.returnValues.returnLock; - aPipeNode.mNodePaths[i].reloadLocks(); + aPipeNode.mNeighbourNodes[side] = tNextNode; + aPipeNode.mNodePaths[side] = aPipeNode.returnValues.mReturnPath; + aPipeNode.locks[side] = aPipeNode.returnValues.returnLock; + aPipeNode.mNodePaths[side].reloadLocks(); } } } @@ -94,14 +95,14 @@ public abstract class GenerateNodeMap { ArrayList aConsumers, HashSet aNodeMap) { if (aTileEntity.isInvalid()) return null; - byte tSideOp = getOppositeSide(aSide); - byte tInvalidSide = aPreviousNode == null ? -1 : tSideOp; + final byte tSideOp = getOppositeSide(aSide); + final byte tInvalidSide = aPreviousNode == null ? -1 : tSideOp; Node tThisNode = null; if (isPipe(aTileEntity)) { - BaseMetaPipeEntity tPipe = (BaseMetaPipeEntity) aTileEntity; - MetaPipeEntity tMetaPipe = (MetaPipeEntity) tPipe.getMetaTileEntity(); - int tConnections = getNumberOfConnections(tMetaPipe); - Node tPipeNode; + final BaseMetaPipeEntity tPipe = (BaseMetaPipeEntity) aTileEntity; + final MetaPipeEntity tMetaPipe = (MetaPipeEntity) tPipe.getMetaTileEntity(); + final int tConnections = getNumberOfConnections(tMetaPipe); + final Node tPipeNode; if (tConnections == 1) { tPipeNode = getEmptyNode(aNextNodeValue, tSideOp, aTileEntity, aConsumers); if (tPipeNode == null) return null; @@ -115,7 +116,7 @@ public abstract class GenerateNodeMap { if (tInvalidSide > -1) { tPipeNode.mNeighbourNodes[tInvalidSide] = aPreviousNode; tPipeNode.mNodePaths[tInvalidSide] = getNewPath(aPipes.toArray(new MetaPipeEntity[0])); - Lock lock = new Lock(); + final Lock lock = new Lock(); tPipeNode.mNodePaths[tSideOp].lock = lock; tPipeNode.locks[tInvalidSide] = lock; aPreviousNode.returnValues.mReturnPath = tPipeNode.mNodePaths[tInvalidSide]; @@ -124,10 +125,10 @@ public abstract class GenerateNodeMap { if (tConnections > 1) generateNextNode(tPipe, tPipeNode, tInvalidSide, aNextNodeValue, aConsumers, aNodeMap); } else if (addConsumer(aTileEntity, tSideOp, aNextNodeValue, aConsumers)) { - ConsumerNode tConsumeNode = aConsumers.get(aConsumers.size() - 1); + final ConsumerNode tConsumeNode = aConsumers.get(aConsumers.size() - 1); tConsumeNode.mNeighbourNodes[tSideOp] = aPreviousNode; tConsumeNode.mNodePaths[tSideOp] = getNewPath(aPipes.toArray(new MetaPipeEntity[0])); - Lock lock = new Lock(); + final Lock lock = new Lock(); tConsumeNode.mNodePaths[tSideOp].lock = lock; aPreviousNode.returnValues.mReturnPath = tConsumeNode.mNodePaths[tSideOp]; aPreviousNode.returnValues.returnLock = lock; @@ -140,18 +141,18 @@ public abstract class GenerateNodeMap { protected Pair getNextValidTileEntity( TileEntity aTileEntity, ArrayList aPipes, byte aSide, HashSet aNodeMap) { if (isPipe(aTileEntity)) { - BaseMetaPipeEntity tPipe = (BaseMetaPipeEntity) aTileEntity; - MetaPipeEntity tMetaPipe = (MetaPipeEntity) tPipe.getMetaTileEntity(); - Node tNode = tPipe.getNode(); + final BaseMetaPipeEntity tPipe = (BaseMetaPipeEntity) aTileEntity; + final MetaPipeEntity tMetaPipe = (MetaPipeEntity) tPipe.getMetaTileEntity(); + final Node tNode = tPipe.getNode(); if (tNode != null) { if (aNodeMap.contains(tNode)) return null; } - int tConnections = getNumberOfConnections(tMetaPipe); + final int tConnections = getNumberOfConnections(tMetaPipe); if (tConnections == 2) { - byte tSideOp = getOppositeSide(aSide); - for (byte i = 0; i < 6; i++) { + final byte tSideOp = getOppositeSide(aSide); + for (byte i : ALL_VALID_SIDES) { if (i == tSideOp || !(tMetaPipe.isConnectedAtSide(i))) continue; - TileEntity tNewTileEntity = tPipe.getTileEntityAtSide(i); + final TileEntity tNewTileEntity = tPipe.getTileEntityAtSide(i); if (tNewTileEntity == null) continue; if (isPipe(tNewTileEntity)) { aPipes.add(tMetaPipe); diff --git a/src/main/java/gregtech/api/gui/modularui/GT_UIInfos.java b/src/main/java/gregtech/api/gui/modularui/GT_UIInfos.java index 2d776ce71e..d1e699bb40 100644 --- a/src/main/java/gregtech/api/gui/modularui/GT_UIInfos.java +++ b/src/main/java/gregtech/api/gui/modularui/GT_UIInfos.java @@ -70,9 +70,9 @@ public class GT_UIInfos { side, UIBuilder.of() .container((player, world, x, y, z) -> { - TileEntity te = world.getTileEntity(x, y, z); + final TileEntity te = world.getTileEntity(x, y, z); if (!(te instanceof ICoverable)) return null; - ICoverable gtTileEntity = (ICoverable) te; + final ICoverable gtTileEntity = (ICoverable) te; GT_CoverBehaviorBase cover = gtTileEntity.getCoverBehaviorAtSideNew(side); return createCoverContainer( player, @@ -84,10 +84,10 @@ public class GT_UIInfos { }) .gui((player, world, x, y, z) -> { if (!world.isRemote) return null; - TileEntity te = world.getTileEntity(x, y, z); + final TileEntity te = world.getTileEntity(x, y, z); if (!(te instanceof ICoverable)) return null; - ICoverable gtTileEntity = (ICoverable) te; - GT_CoverBehaviorBase cover = gtTileEntity.getCoverBehaviorAtSideNew(side); + final ICoverable gtTileEntity = (ICoverable) te; + final GT_CoverBehaviorBase cover = gtTileEntity.getCoverBehaviorAtSideNew(side); return createCoverGuiContainer( player, cover::createWindow, @@ -148,11 +148,9 @@ public class GT_UIInfos { Function windowCreator, Runnable onWidgetUpdate, ContainerConstructor containerCreator) { - UIBuildContext buildContext = new UIBuildContext(player); - ModularWindow window = windowCreator.apply(buildContext); - if (window == null) { - return null; - } + final UIBuildContext buildContext = new UIBuildContext(player); + final ModularWindow window = windowCreator.apply(buildContext); + if (window == null) return null; return containerCreator.of(new ModularUIContext(buildContext, onWidgetUpdate), window); } @@ -161,10 +159,9 @@ public class GT_UIInfos { EntityPlayer player, Function windowCreator, ContainerConstructor containerConstructor) { - ModularUIContainer container = createTileEntityContainer(player, windowCreator, null, containerConstructor); - if (container == null) { - return null; - } + final ModularUIContainer container = + createTileEntityContainer(player, windowCreator, null, containerConstructor); + if (container == null) return null; return new ModularGui(container); } @@ -175,11 +172,9 @@ public class GT_UIInfos { int coverID, byte side, ICoverable tile) { - GT_CoverUIBuildContext buildContext = new GT_CoverUIBuildContext(player, coverID, side, tile, false); - ModularWindow window = windowCreator.apply(buildContext); - if (window == null) { - return null; - } + final GT_CoverUIBuildContext buildContext = new GT_CoverUIBuildContext(player, coverID, side, tile, false); + final ModularWindow window = windowCreator.apply(buildContext); + if (window == null) return null; return new ModularUIContainer(new ModularUIContext(buildContext, onWidgetUpdate), window); } @@ -190,7 +185,7 @@ public class GT_UIInfos { int coverID, byte side, ICoverable tile) { - ModularUIContainer container = createCoverContainer(player, windowCreator, null, coverID, side, tile); + final ModularUIContainer container = createCoverContainer(player, windowCreator, null, coverID, side, tile); if (container == null) { return null; } diff --git a/src/main/java/gregtech/api/gui/modularui/GT_UITextures.java b/src/main/java/gregtech/api/gui/modularui/GT_UITextures.java index a92ff64df6..3ca1e6d45e 100644 --- a/src/main/java/gregtech/api/gui/modularui/GT_UITextures.java +++ b/src/main/java/gregtech/api/gui/modularui/GT_UITextures.java @@ -347,4 +347,8 @@ public class GT_UITextures { public static final UITexture PICTURE_SQUARE_LIGHT_GRAY = UITexture.fullImage(MODID, "gui/picture/square_light_gray"); public static final UITexture PICTURE_GAUGE = UITexture.fullImage(MODID, "gui/picture/gauge"); + public static final UITexture PICTURE_ITEM_IN = UITexture.fullImage(MODID, "gui/picture/item_in"); + public static final UITexture PICTURE_ITEM_OUT = UITexture.fullImage(MODID, "gui/picture/item_out"); + public static final UITexture PICTURE_FLUID_IN = UITexture.fullImage(MODID, "gui/picture/fluid_in"); + public static final UITexture PICTURE_FLUID_OUT = UITexture.fullImage(MODID, "gui/picture/fluid_out"); } diff --git a/src/main/java/gregtech/api/gui/widgets/GT_GuiCoverTabLine.java b/src/main/java/gregtech/api/gui/widgets/GT_GuiCoverTabLine.java index 525618589b..d5e383ed50 100644 --- a/src/main/java/gregtech/api/gui/widgets/GT_GuiCoverTabLine.java +++ b/src/main/java/gregtech/api/gui/widgets/GT_GuiCoverTabLine.java @@ -79,7 +79,7 @@ public class GT_GuiCoverTabLine extends GT_GuiTabLine { */ private void setupTabs() { for (byte tSide = 0; tSide < 6; tSide++) { - ItemStack cover = tile.getCoverItemAtSide(tSide); + final ItemStack cover = tile.getCoverItemAtSide(tSide); if (cover != null) { addCoverToTabs(tSide, cover); } @@ -114,7 +114,7 @@ public class GT_GuiCoverTabLine extends GT_GuiTabLine { * @param cover */ private void addCoverToTabs(byte side, ItemStack cover) { - boolean enabled = this.tile.getCoverBehaviorAtSideNew(side).hasCoverGUI(); + final boolean enabled = this.tile.getCoverBehaviorAtSideNew(side).hasCoverGUI(); this.setTab(side, cover, null, getTooltipForCoverTab(side, cover, enabled)); this.setTabEnabled(side, enabled); } @@ -127,7 +127,7 @@ public class GT_GuiCoverTabLine extends GT_GuiTabLine { * @return This cover tab's tooltip */ private String[] getTooltipForCoverTab(byte side, ItemStack cover, boolean enabled) { - List tooltip = cover.getTooltip(Minecraft.getMinecraft().thePlayer, true); + final List tooltip = cover.getTooltip(Minecraft.getMinecraft().thePlayer, true); tooltip.set( 0, (enabled ? EnumChatFormatting.UNDERLINE : EnumChatFormatting.DARK_GRAY) @@ -158,9 +158,9 @@ public class GT_GuiCoverTabLine extends GT_GuiTabLine { static class CoverTabLineNEIHandler extends INEIGuiAdapter { @Override public boolean hideItemPanelSlot(GuiContainer gui, int x, int y, int w, int h) { - Rectangle neiSlotArea = new Rectangle(x, y, w, h); + final Rectangle neiSlotArea = new Rectangle(x, y, w, h); if (gui instanceof GT_GUIContainerMetaTile_Machine) { - GT_GuiTabLine tabLine = ((GT_GUIContainerMetaTile_Machine) gui).coverTabs; + final GT_GuiTabLine tabLine = ((GT_GUIContainerMetaTile_Machine) gui).coverTabs; if (!tabLine.visible) { return false; } diff --git a/src/main/java/gregtech/api/interfaces/covers/IControlsWorkCover.java b/src/main/java/gregtech/api/interfaces/covers/IControlsWorkCover.java index 7c2361af83..47edc7af93 100644 --- a/src/main/java/gregtech/api/interfaces/covers/IControlsWorkCover.java +++ b/src/main/java/gregtech/api/interfaces/covers/IControlsWorkCover.java @@ -1,5 +1,7 @@ package gregtech.api.interfaces.covers; +import static gregtech.api.enums.GT_Values.ALL_VALID_SIDES; + import gregtech.api.interfaces.tileentity.ICoverable; import gregtech.api.interfaces.tileentity.IMachineProgress; @@ -15,9 +17,9 @@ public interface IControlsWorkCover { * @return true if the cover is the first (side) one **/ static boolean makeSureOnlyOne(byte aMySide, ICoverable aTileEntity) { - for (byte i = 0; i < 6; i++) { - if (aTileEntity.getCoverBehaviorAtSideNew(i) instanceof IControlsWorkCover && i < aMySide) { - aTileEntity.dropCover(i, i, true); + for (byte tSide : ALL_VALID_SIDES) { + if (aTileEntity.getCoverBehaviorAtSideNew(tSide) instanceof IControlsWorkCover && tSide < aMySide) { + aTileEntity.dropCover(tSide, tSide, true); aTileEntity.markDirty(); return false; } diff --git a/src/main/java/gregtech/api/interfaces/metatileentity/IMetaTileEntityItemPipe.java b/src/main/java/gregtech/api/interfaces/metatileentity/IMetaTileEntityItemPipe.java index 1b1ce36871..5375ea85ee 100644 --- a/src/main/java/gregtech/api/interfaces/metatileentity/IMetaTileEntityItemPipe.java +++ b/src/main/java/gregtech/api/interfaces/metatileentity/IMetaTileEntityItemPipe.java @@ -1,5 +1,7 @@ package gregtech.api.interfaces.metatileentity; +import static gregtech.api.enums.GT_Values.ALL_VALID_SIDES; + import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.metatileentity.BaseMetaPipeEntity; import gregtech.api.util.GT_Utility; @@ -56,39 +58,29 @@ public interface IMetaTileEntityItemPipe extends IMetaTileEntity { aStep += aMetaTileEntity.getStepSize(); if (aIgnoreCapacity || aMetaTileEntity.pipeCapacityCheck()) if (aMap.get(aMetaTileEntity) == null || aMap.get(aMetaTileEntity) > aStep) { - IGregTechTileEntity aBaseMetaTileEntity = aMetaTileEntity.getBaseMetaTileEntity(); + final IGregTechTileEntity aBaseMetaTileEntity = aMetaTileEntity.getBaseMetaTileEntity(); aMap.put(aMetaTileEntity, aStep); - for (byte i = 0, j = 0; i < 6; i++) { + byte oppositeSide; + for (byte side : ALL_VALID_SIDES) { if (aMetaTileEntity instanceof IConnectable - && !((IConnectable) aMetaTileEntity).isConnectedAtSide(i)) continue; - j = GT_Utility.getOppositeSide(i); + && !((IConnectable) aMetaTileEntity).isConnectedAtSide(side)) continue; + oppositeSide = GT_Utility.getOppositeSide(side); if (aSuckItems) { - if (aBaseMetaTileEntity - .getCoverBehaviorAtSideNew(i) - .letsItemsIn( - i, - aBaseMetaTileEntity.getCoverIDAtSide(i), - aBaseMetaTileEntity.getComplexCoverDataAtSide(i), - -2, - aBaseMetaTileEntity)) { - IGregTechTileEntity tItemPipe = aBaseMetaTileEntity.getIGregTechTileEntityAtSide(i); + if (aBaseMetaTileEntity.getCoverInfoAtSide(side).letsItemsIn(-2)) { + final IGregTechTileEntity tItemPipe = + aBaseMetaTileEntity.getIGregTechTileEntityAtSide(side); if (aBaseMetaTileEntity.getColorization() >= 0) { - byte tColor = tItemPipe.getColorization(); + final byte tColor = tItemPipe.getColorization(); if (tColor >= 0 && tColor != aBaseMetaTileEntity.getColorization()) { continue; } } if (tItemPipe instanceof BaseMetaPipeEntity) { - IMetaTileEntity tMetaTileEntity = tItemPipe.getMetaTileEntity(); + final IMetaTileEntity tMetaTileEntity = tItemPipe.getMetaTileEntity(); if (tMetaTileEntity instanceof IMetaTileEntityItemPipe && tItemPipe - .getCoverBehaviorAtSideNew(j) - .letsItemsOut( - j, - tItemPipe.getCoverIDAtSide(j), - tItemPipe.getComplexCoverDataAtSide(j), - -2, - tItemPipe)) { + .getCoverInfoAtSide(oppositeSide) + .letsItemsOut(-2)) { scanPipes( (IMetaTileEntityItemPipe) tMetaTileEntity, aMap, @@ -99,33 +91,22 @@ public interface IMetaTileEntityItemPipe extends IMetaTileEntity { } } } else { - if (aBaseMetaTileEntity - .getCoverBehaviorAtSideNew(i) - .letsItemsOut( - i, - aBaseMetaTileEntity.getCoverIDAtSide(i), - aBaseMetaTileEntity.getComplexCoverDataAtSide(i), - -2, - aBaseMetaTileEntity)) { - IGregTechTileEntity tItemPipe = aBaseMetaTileEntity.getIGregTechTileEntityAtSide(i); + if (aBaseMetaTileEntity.getCoverInfoAtSide(side).letsItemsOut(-2)) { + final IGregTechTileEntity tItemPipe = + aBaseMetaTileEntity.getIGregTechTileEntityAtSide(side); if (tItemPipe != null) { if (aBaseMetaTileEntity.getColorization() >= 0) { - byte tColor = tItemPipe.getColorization(); + final byte tColor = tItemPipe.getColorization(); if (tColor >= 0 && tColor != aBaseMetaTileEntity.getColorization()) { continue; } } if (tItemPipe instanceof BaseMetaPipeEntity) { - IMetaTileEntity tMetaTileEntity = tItemPipe.getMetaTileEntity(); + final IMetaTileEntity tMetaTileEntity = tItemPipe.getMetaTileEntity(); if (tMetaTileEntity instanceof IMetaTileEntityItemPipe && tItemPipe - .getCoverBehaviorAtSideNew(j) - .letsItemsIn( - j, - tItemPipe.getCoverIDAtSide(j), - tItemPipe.getComplexCoverDataAtSide(j), - -2, - tItemPipe)) { + .getCoverInfoAtSide(oppositeSide) + .letsItemsIn(-2)) { scanPipes( (IMetaTileEntityItemPipe) tMetaTileEntity, aMap, diff --git a/src/main/java/gregtech/api/interfaces/tileentity/ICoverable.java b/src/main/java/gregtech/api/interfaces/tileentity/ICoverable.java index 6beb34a305..df131c84c2 100644 --- a/src/main/java/gregtech/api/interfaces/tileentity/ICoverable.java +++ b/src/main/java/gregtech/api/interfaces/tileentity/ICoverable.java @@ -3,6 +3,7 @@ package gregtech.api.interfaces.tileentity; import gregtech.api.util.GT_CoverBehavior; import gregtech.api.util.GT_CoverBehaviorBase; import gregtech.api.util.ISerializableObject; +import gregtech.common.covers.CoverInfo; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.ItemStack; @@ -32,6 +33,10 @@ public interface ICoverable extends IRedstoneTileEntity, IHasInventory, IBasicEn @Deprecated int getCoverDataAtSide(byte aSide); + default CoverInfo getCoverInfoAtSide(byte aSide) { + return null; + } + default ISerializableObject getComplexCoverDataAtSide(byte aSide) { return new ISerializableObject.LegacyCoverData(getCoverDataAtSide(aSide)); } diff --git a/src/main/java/gregtech/api/metatileentity/BaseMetaPipeEntity.java b/src/main/java/gregtech/api/metatileentity/BaseMetaPipeEntity.java index 09b62c0657..31a341040e 100644 --- a/src/main/java/gregtech/api/metatileentity/BaseMetaPipeEntity.java +++ b/src/main/java/gregtech/api/metatileentity/BaseMetaPipeEntity.java @@ -22,6 +22,7 @@ import gregtech.api.util.GT_Log; import gregtech.api.util.GT_ModHandler; import gregtech.api.util.GT_OreDictUnificator; import gregtech.api.util.GT_Utility; +import gregtech.common.covers.CoverInfo; import java.util.*; import net.minecraft.block.Block; import net.minecraft.entity.Entity; @@ -79,7 +80,7 @@ public class BaseMetaPipeEntity extends CommonMetaTileEntity public void addToLock(TileEntity tileEntity, int side) { if (node != null) { - Lock lock = node.locks[side]; + final Lock lock = node.locks[side]; if (lock != null) { lock.addTileEntity(tileEntity); } @@ -90,7 +91,7 @@ public class BaseMetaPipeEntity extends CommonMetaTileEntity public void removeFromLock(TileEntity tileEntity, int side) { if (node != null) { - Lock lock = node.locks[side]; + final Lock lock = node.locks[side]; if (lock != null) { lock.removeTileEntity(tileEntity); } @@ -100,7 +101,7 @@ public class BaseMetaPipeEntity extends CommonMetaTileEntity } public void reloadLocks() { - IMetaTileEntity meta = getMetaTileEntity(); + final IMetaTileEntity meta = getMetaTileEntity(); if (meta instanceof MetaPipeEntity) { ((MetaPipeEntity) meta).reloadLocks(); } @@ -283,12 +284,12 @@ public class BaseMetaPipeEntity extends CommonMetaTileEntity (short) yCoord, zCoord, mID, - mCoverSides[0], - mCoverSides[1], - mCoverSides[2], - mCoverSides[3], - mCoverSides[4], - mCoverSides[5], + getCoverInfoAtSide((byte) 0).getCoverID(), + getCoverInfoAtSide((byte) 1).getCoverID(), + getCoverInfoAtSide((byte) 2).getCoverID(), + getCoverInfoAtSide((byte) 3).getCoverID(), + getCoverInfoAtSide((byte) 4).getCoverID(), + getCoverInfoAtSide((byte) 5).getCoverID(), oTextureData = mConnections, oUpdateData = hasValidMetaTileEntity() ? mMetaTileEntity.getUpdateData() : 0, oRedstoneData = (byte) (((mSidedRedstone[0] > 0) ? 1 : 0) @@ -705,16 +706,16 @@ public class BaseMetaPipeEntity extends CommonMetaTileEntity @Override public ITexture[] getTexture(Block aBlock, byte aSide) { - ITexture rIcon = getCoverTexture(aSide); + final ITexture rIcon = getCoverTexture(aSide); if (rIcon != null) return new ITexture[] {rIcon}; return getTextureUncovered(aSide); } @Override public ITexture[] getTextureCovered(byte aSide) { - ITexture coverTexture = getCoverTexture(aSide); - ITexture[] textureUncovered = getTextureUncovered(aSide); - ITexture[] textureCovered; + final ITexture coverTexture = getCoverTexture(aSide); + final ITexture[] textureUncovered = getTextureUncovered(aSide); + final ITexture[] textureCovered; if (coverTexture != null) { textureCovered = Arrays.copyOf(textureUncovered, textureUncovered.length + 1); textureCovered[textureUncovered.length] = coverTexture; @@ -762,18 +763,11 @@ public class BaseMetaPipeEntity extends CommonMetaTileEntity @Override public ArrayList getDrops() { - ItemStack rStack = new ItemStack(GregTech_API.sBlockMachines, 1, mID); - NBTTagCompound tNBT = new NBTTagCompound(); - if (mStrongRedstone > 0) tNBT.setByte("mStrongRedstone", mStrongRedstone); - boolean hasCover = false; - for (byte i = 0; i < mCoverSides.length; i++) { - if (mCoverSides[i] != 0) { - if (mCoverData[i] != null) // this really shouldn't be null if a cover is there already, but whatever - tNBT.setTag(COVER_DATA_NBT_KEYS[i], mCoverData[i].saveDataToNBT()); - hasCover = true; - } - } - if (hasCover) tNBT.setIntArray("mCoverSides", mCoverSides); + final ItemStack rStack = new ItemStack(GregTech_API.sBlockMachines, 1, mID); + final NBTTagCompound tNBT = new NBTTagCompound(); + + writeCoverNBT(tNBT, true); + if (hasValidMetaTileEntity()) mMetaTileEntity.setItemNBT(tNBT); if (!tNBT.hasNoTags()) rStack.setTagCompound(tNBT); @@ -791,15 +785,15 @@ public class BaseMetaPipeEntity extends CommonMetaTileEntity if (isClientSide()) { // Configure Cover, sneak can also be: screwdriver, wrench, side cutter, soldering iron if (aPlayer.isSneaking()) { - byte tSide = + final byte tSide = (getCoverIDAtSide(aSide) == 0) ? GT_Utility.determineWrenchingSide(aSide, aX, aY, aZ) : aSide; - return (getCoverBehaviorAtSideNew(tSide).hasCoverGUI()); + return (getCoverInfoAtSide(tSide).hasCoverGUI()); } else if (getCoverBehaviorAtSideNew(aSide).onCoverRightclickClient(aSide, this, aPlayer, aX, aY, aZ)) { return true; } } if (isServerSide()) { - ItemStack tCurrentItem = aPlayer.inventory.getCurrentItem(); + final ItemStack tCurrentItem = aPlayer.inventory.getCurrentItem(); if (tCurrentItem != null) { if (getColorization() >= 0 && GT_Utility.areStacksEqual(new ItemStack(Items.water_bucket, 1), tCurrentItem)) { @@ -808,7 +802,7 @@ public class BaseMetaPipeEntity extends CommonMetaTileEntity setColorization((byte) -1); return true; } - byte tSide = GT_Utility.determineWrenchingSide(aSide, aX, aY, aZ); + final byte tSide = GT_Utility.determineWrenchingSide(aSide, aX, aY, aZ); if (GT_Utility.isStackInList(tCurrentItem, GregTech_API.sWrenchList)) { if (mMetaTileEntity.onWrenchRightClick(aSide, tSide, aPlayer, aX, aY, aZ)) { mMetaTileEntity.markDirty(); @@ -823,16 +817,7 @@ public class BaseMetaPipeEntity extends CommonMetaTileEntity if (GT_ModHandler.damageOrDechargeItem(tCurrentItem, 1, 200, aPlayer)) { setCoverDataAtSide( tSide, - getCoverBehaviorAtSideNew(tSide) - .onCoverScrewdriverClick( - tSide, - getCoverIDAtSide(tSide), - getComplexCoverDataAtSide(tSide), - this, - aPlayer, - 0.5F, - 0.5F, - 0.5F)); + getCoverInfoAtSide(tSide).onCoverScrewdriverClick(aPlayer, 0.5F, 0.5F, 0.5F)); mMetaTileEntity.onScrewdriverRightClick(tSide, aPlayer, aX, aY, aZ); mMetaTileEntity.markDirty(); GT_Utility.sendSoundToPlayers( @@ -841,17 +826,7 @@ public class BaseMetaPipeEntity extends CommonMetaTileEntity } else { if (GT_ModHandler.damageOrDechargeItem(tCurrentItem, 1, 1000, aPlayer)) { setCoverDataAtSide( - aSide, - getCoverBehaviorAtSideNew(aSide) - .onCoverScrewdriverClick( - aSide, - getCoverIDAtSide(aSide), - getComplexCoverDataAtSide(aSide), - this, - aPlayer, - aX, - aY, - aZ)); + aSide, getCoverInfoAtSide(aSide).onCoverScrewdriverClick(aPlayer, aX, aY, aZ)); mMetaTileEntity.onScrewdriverRightClick(aSide, aPlayer, aX, aY, aZ); mMetaTileEntity.markDirty(); GT_Utility.sendSoundToPlayers( @@ -925,7 +900,9 @@ public class BaseMetaPipeEntity extends CommonMetaTileEntity byte coverSide = aSide; if (getCoverIDAtSide(aSide) == 0) coverSide = tSide; - if (getCoverIDAtSide(coverSide) == 0) { + final CoverInfo coverInfo = getCoverInfoAtSide(coverSide); + + if (coverInfo.getCoverID() == 0) { if (GT_Utility.isStackInList(tCurrentItem, GregTech_API.sCovers.keySet())) { if (GregTech_API.getCoverBehaviorNew(tCurrentItem) .isCoverPlaceable(coverSide, tCurrentItem, this) @@ -951,34 +928,18 @@ public class BaseMetaPipeEntity extends CommonMetaTileEntity } } else if (aPlayer.isSneaking()) { // Sneak click, no tool -> open cover config or turn back. aSide = (getCoverIDAtSide(aSide) == 0) ? GT_Utility.determineWrenchingSide(aSide, aX, aY, aZ) : aSide; - return getCoverIDAtSide(aSide) > 0 - && getCoverBehaviorAtSideNew(aSide) - .onCoverShiftRightClick( - aSide, - getCoverIDAtSide(aSide), - getComplexCoverDataAtSide(aSide), - this, - aPlayer); + final CoverInfo coverInfo = getCoverInfoAtSide(aSide); + return coverInfo.isValid() && coverInfo.onCoverShiftRightClick(aPlayer); } - if (getCoverBehaviorAtSideNew(aSide) - .onCoverRightClick( - aSide, - getCoverIDAtSide(aSide), - getComplexCoverDataAtSide(aSide), - this, - aPlayer, - aX, - aY, - aZ)) return true; + if (getCoverInfoAtSide(aSide).onCoverRightClick(aPlayer, aX, aY, aZ)) return true; } - if (!getCoverBehaviorAtSideNew(aSide) - .isGUIClickable(aSide, getCoverIDAtSide(aSide), getComplexCoverDataAtSide(aSide), this)) return false; + if (!getCoverInfoAtSide(aSide).isGUIClickable()) return false; try { if (!aPlayer.isSneaking() && hasValidMetaTileEntity()) { - boolean handled = mMetaTileEntity.onRightclick(this, aPlayer, aSide, aX, aY, aZ); + final boolean handled = mMetaTileEntity.onRightclick(this, aPlayer, aSide, aX, aY, aZ); if (handled) { mMetaTileEntity.markDirty(); } @@ -1034,21 +995,9 @@ public class BaseMetaPipeEntity extends CommonMetaTileEntity */ @Override public int[] getAccessibleSlotsFromSide(int aSide) { - if (canAccessData() - && (getCoverBehaviorAtSideNew((byte) aSide) - .letsItemsOut( - (byte) aSide, - getCoverIDAtSide((byte) aSide), - getComplexCoverDataAtSide((byte) aSide), - -1, - this) - || getCoverBehaviorAtSideNew((byte) aSide) - .letsItemsIn( - (byte) aSide, - getCoverIDAtSide((byte) aSide), - getComplexCoverDataAtSide((byte) aSide), - -1, - this))) return mMetaTileEntity.getAccessibleSlotsFromSide(aSide); + final CoverInfo coverInfo = getCoverInfoAtSide((byte) aSide); + if (canAccessData() && (coverInfo.letsItemsOut(-1) || coverInfo.letsItemsIn(-1))) + return mMetaTileEntity.getAccessibleSlotsFromSide(aSide); return GT_Values.emptyIntArray; } @@ -1058,13 +1007,7 @@ public class BaseMetaPipeEntity extends CommonMetaTileEntity @Override public boolean canInsertItem(int aIndex, ItemStack aStack, int aSide) { return canAccessData() - && getCoverBehaviorAtSideNew((byte) aSide) - .letsItemsIn( - (byte) aSide, - getCoverIDAtSide((byte) aSide), - getComplexCoverDataAtSide((byte) aSide), - aIndex, - this) + && getCoverInfoAtSide((byte) aSide).letsItemsIn(aIndex) && mMetaTileEntity.canInsertItem(aIndex, aStack, aSide); } @@ -1206,30 +1149,18 @@ public class BaseMetaPipeEntity extends CommonMetaTileEntity private boolean canMoveFluidOnSide(ForgeDirection aSide, Fluid aFluid, boolean isFill) { if (aSide == ForgeDirection.UNKNOWN) return true; - IFluidHandler tTileEntity = getITankContainerAtSide((byte) aSide.ordinal()); + final IFluidHandler tTileEntity = getITankContainerAtSide((byte) aSide.ordinal()); // Only require a connection if there's something to connect to - Allows fluid cells & buckets to interact with // the pipe if (tTileEntity != null && !mMetaTileEntity.isConnectedAtSide((byte) aSide.ordinal())) return false; if (isFill && mMetaTileEntity.isLiquidInput((byte) aSide.ordinal()) - && getCoverBehaviorAtSideNew((byte) aSide.ordinal()) - .letsFluidIn( - (byte) aSide.ordinal(), - getCoverIDAtSide((byte) aSide.ordinal()), - getComplexCoverDataAtSide((byte) aSide.ordinal()), - aFluid, - this)) return true; + && getCoverInfoAtSide((byte) aSide.ordinal()).letsFluidIn(aFluid)) return true; if (!isFill && mMetaTileEntity.isLiquidOutput((byte) aSide.ordinal()) - && getCoverBehaviorAtSideNew((byte) aSide.ordinal()) - .letsFluidOut( - (byte) aSide.ordinal(), - getCoverIDAtSide((byte) aSide.ordinal()), - getComplexCoverDataAtSide((byte) aSide.ordinal()), - aFluid, - this)) return true; + && getCoverInfoAtSide((byte) aSide.ordinal()).letsFluidOut(aFluid)) return true; return false; } @@ -1281,24 +1212,11 @@ public class BaseMetaPipeEntity extends CommonMetaTileEntity @Override public FluidTankInfo[] getTankInfo(ForgeDirection aSide) { + final CoverInfo coverInfo = getCoverInfoAtSide((byte) aSide.ordinal()); if (canAccessData() && (aSide == ForgeDirection.UNKNOWN - || (mMetaTileEntity.isLiquidInput((byte) aSide.ordinal()) - && getCoverBehaviorAtSideNew((byte) aSide.ordinal()) - .letsFluidIn( - (byte) aSide.ordinal(), - getCoverIDAtSide((byte) aSide.ordinal()), - getComplexCoverDataAtSide((byte) aSide.ordinal()), - null, - this)) - || (mMetaTileEntity.isLiquidOutput((byte) aSide.ordinal()) - && getCoverBehaviorAtSideNew((byte) aSide.ordinal()) - .letsFluidOut( - (byte) aSide.ordinal(), - getCoverIDAtSide((byte) aSide.ordinal()), - getComplexCoverDataAtSide((byte) aSide.ordinal()), - null, - this)) + || (mMetaTileEntity.isLiquidInput((byte) aSide.ordinal()) && coverInfo.letsFluidIn(null)) + || (mMetaTileEntity.isLiquidOutput((byte) aSide.ordinal()) && coverInfo.letsFluidOut(null)) // Doesn't need to be connected to get Tank Info -- otherwise things can't connect )) return mMetaTileEntity.getTankInfo(aSide); return new FluidTankInfo[] {}; @@ -1308,7 +1226,7 @@ public class BaseMetaPipeEntity extends CommonMetaTileEntity public boolean addStackToSlot(int aIndex, ItemStack aStack) { if (GT_Utility.isStackInvalid(aStack)) return true; if (aIndex < 0 || aIndex >= getSizeInventory()) return false; - ItemStack tStack = getStackInSlot(aIndex); + final ItemStack tStack = getStackInSlot(aIndex); if (GT_Utility.isStackInvalid(tStack)) { setInventorySlotContents(aIndex, aStack); return true; diff --git a/src/main/java/gregtech/api/metatileentity/BaseMetaTileEntity.java b/src/main/java/gregtech/api/metatileentity/BaseMetaTileEntity.java index 821cfcd8a7..1e8ffa0994 100644 --- a/src/main/java/gregtech/api/metatileentity/BaseMetaTileEntity.java +++ b/src/main/java/gregtech/api/metatileentity/BaseMetaTileEntity.java @@ -1,6 +1,7 @@ package gregtech.api.metatileentity; import static gregtech.GT_Mod.GT_FML_LOGGER; +import static gregtech.api.enums.GT_Values.ALL_VALID_SIDES; import static gregtech.api.enums.GT_Values.NW; import static gregtech.api.enums.GT_Values.V; import static gregtech.api.objects.XSTR.XSTR_INSTANCE; @@ -40,6 +41,7 @@ import gregtech.api.net.GT_Packet_TileEntity; import gregtech.api.objects.GT_ItemStack; import gregtech.api.util.*; import gregtech.common.GT_Pollution; +import gregtech.common.covers.CoverInfo; import ic2.api.Direction; import java.lang.reflect.Field; import java.util.*; @@ -215,8 +217,6 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity loadMetaTileNBT(aNBT); } - if (mCoverData == null || mCoverData.length != 6) mCoverData = new ISerializableObject[6]; - if (mCoverSides.length != 6) mCoverSides = new int[] {0, 0, 0, 0, 0, 0}; if (mSidedRedstone.length != 6) if (hasValidMetaTileEntity() && mMetaTileEntity.hasSidedRedstoneOutputBehavior()) mSidedRedstone = new byte[] {0, 0, 0, 0, 0, 0}; @@ -400,7 +400,7 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity } if (mMetaTileEntity.isEnetOutput() || mMetaTileEntity.isEnetInput()) { - for (byte i = 0; i < 6; i++) { + for (byte i : ALL_VALID_SIDES) { boolean temp = isEnergyInputSide(i); if (temp != mActiveEUInputs[i]) { mActiveEUInputs[i] = temp; @@ -656,12 +656,12 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity (short) yCoord, zCoord, mID, - mCoverSides[0], - mCoverSides[1], - mCoverSides[2], - mCoverSides[3], - mCoverSides[4], - mCoverSides[5], + getCoverInfoAtSide((byte) 0).getCoverID(), + getCoverInfoAtSide((byte) 1).getCoverID(), + getCoverInfoAtSide((byte) 2).getCoverID(), + getCoverInfoAtSide((byte) 3).getCoverID(), + getCoverInfoAtSide((byte) 4).getCoverID(), + getCoverInfoAtSide((byte) 5).getCoverID(), oTextureData = (byte) ((mFacing & 7) | (mActive ? 8 : 0) | (mRedstone ? 16 : 0) @@ -1147,7 +1147,7 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity public void generatePowerNodes() { if (isServerSide() && (isEnetInput() || isEnetOutput())) { final int time = MinecraftServer.getServer().getTickCounter(); - for (byte i = 0; i < 6; i++) { + for (byte i : ALL_VALID_SIDES) { if (outputsEnergyTo(i, false) || inputEnergyFrom(i, false)) { final IGregTechTileEntity TE = getIGregTechTileEntityAtSide(i); if (TE instanceof BaseMetaPipeEntity) { @@ -1252,8 +1252,7 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity private boolean isEnergyInputSide(byte aSide) { if (aSide >= 0 && aSide < 6) { - if (!getCoverBehaviorAtSideNew(aSide) - .letsEnergyIn(aSide, getCoverIDAtSide(aSide), getComplexCoverDataAtSide(aSide), this)) return false; + if (!getCoverInfoAtSide(aSide).letsEnergyIn()) return false; if (isInvalid() || mReleaseEnergy) return false; if (canAccessData() && mMetaTileEntity.isElectric() && mMetaTileEntity.isEnetInput()) return mMetaTileEntity.isInputFacing(aSide); @@ -1263,9 +1262,7 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity private boolean isEnergyOutputSide(byte aSide) { if (aSide >= 0 && aSide < 6) { - if (!getCoverBehaviorAtSideNew(aSide) - .letsEnergyOut(aSide, getCoverIDAtSide(aSide), getComplexCoverDataAtSide(aSide), this)) - return false; + if (!getCoverInfoAtSide(aSide).letsEnergyOut()) return false; if (isInvalid() || mReleaseEnergy) return mReleaseEnergy; if (canAccessData() && mMetaTileEntity.isElectric() && mMetaTileEntity.isEnetOutput()) return mMetaTileEntity.isOutputFacing(aSide); @@ -1460,10 +1457,9 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity return true; } - if (!getCoverBehaviorAtSideNew(aSide) - .isGUIClickable(aSide, getCoverIDAtSide(aSide), getComplexCoverDataAtSide(aSide), this)) - return false; + if (!getCoverInfoAtSide(aSide).isGUIClickable()) return false; } + if (isServerSide()) { if (!privateAccess() || aPlayer.getDisplayName().equalsIgnoreCase(getOwnerName())) { final ItemStack tCurrentItem = aPlayer.inventory.getCurrentItem(); @@ -1622,6 +1618,7 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity return true; } } + // End item != null } else if (aPlayer.isSneaking()) { // Sneak click, no tool -> open cover config if possible. aSide = (getCoverIDAtSide(aSide) == 0) ? GT_Utility.determineWrenchingSide(aSide, aX, aY, aZ) @@ -1647,9 +1644,7 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity aY, aZ)) return true; - if (!getCoverBehaviorAtSideNew(aSide) - .isGUIClickable(aSide, getCoverIDAtSide(aSide), getComplexCoverDataAtSide(aSide), this)) - return false; + if (!getCoverInfoAtSide(aSide).isGUIClickable()) return false; if (isUpgradable() && tCurrentItem != null) { if (ItemList.Upgrade_Muffler.isStackEqual(aPlayer.inventory.getCurrentItem())) { @@ -1736,21 +1731,9 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity */ @Override public int[] getAccessibleSlotsFromSide(int aSide) { - if (canAccessData() - && (getCoverBehaviorAtSideNew((byte) aSide) - .letsItemsOut( - (byte) aSide, - getCoverIDAtSide((byte) aSide), - getComplexCoverDataAtSide((byte) aSide), - -1, - this) - || getCoverBehaviorAtSideNew((byte) aSide) - .letsItemsIn( - (byte) aSide, - getCoverIDAtSide((byte) aSide), - getComplexCoverDataAtSide((byte) aSide), - -1, - this))) return mMetaTileEntity.getAccessibleSlotsFromSide(aSide); + final CoverInfo coverInfo = getCoverInfoAtSide((byte) aSide); + if (canAccessData() && (coverInfo.letsItemsOut(-1) || coverInfo.letsItemsIn(-1))) + return mMetaTileEntity.getAccessibleSlotsFromSide(aSide); return GT_Values.emptyIntArray; } @@ -1761,13 +1744,7 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity public boolean canInsertItem(int aIndex, ItemStack aStack, int aSide) { return canAccessData() && (mRunningThroughTick || !mInputDisabled) - && getCoverBehaviorAtSideNew((byte) aSide) - .letsItemsIn( - (byte) aSide, - getCoverIDAtSide((byte) aSide), - getComplexCoverDataAtSide((byte) aSide), - aIndex, - this) + && getCoverInfoAtSide((byte) aSide).letsItemsIn(aIndex) && mMetaTileEntity.canInsertItem(aIndex, aStack, aSide); } @@ -1998,13 +1975,9 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity && (mRunningThroughTick || !mInputDisabled) && (aSide == ForgeDirection.UNKNOWN || (mMetaTileEntity.isLiquidInput((byte) aSide.ordinal()) - && getCoverBehaviorAtSideNew((byte) aSide.ordinal()) - .letsFluidIn( - (byte) aSide.ordinal(), - getCoverIDAtSide((byte) aSide.ordinal()), - getComplexCoverDataAtSide((byte) aSide.ordinal()), - aFluid == null ? null : aFluid.getFluid(), - this)))) return mMetaTileEntity.fill(aSide, aFluid, doFill); + && getCoverInfoAtSide((byte) aSide.ordinal()) + .letsFluidIn(aFluid == null ? null : aFluid.getFluid())))) + return mMetaTileEntity.fill(aSide, aFluid, doFill); return 0; } @@ -2015,17 +1988,14 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity && (mRunningThroughTick || !mOutputDisabled) && (aSide == ForgeDirection.UNKNOWN || (mMetaTileEntity.isLiquidOutput((byte) aSide.ordinal()) - && getCoverBehaviorAtSideNew((byte) aSide.ordinal()) + && getCoverInfoAtSide((byte) aSide.ordinal()) .letsFluidOut( - (byte) aSide.ordinal(), - getCoverIDAtSide((byte) aSide.ordinal()), - getComplexCoverDataAtSide((byte) aSide.ordinal()), mMetaTileEntity.getFluid() == null ? null : mMetaTileEntity .getFluid() - .getFluid(), - this)))) return mMetaTileEntity.drain(aSide, maxDrain, doDrain); + .getFluid())))) + return mMetaTileEntity.drain(aSide, maxDrain, doDrain); return null; } @@ -2036,13 +2006,9 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity && (mRunningThroughTick || !mOutputDisabled) && (aSide == ForgeDirection.UNKNOWN || (mMetaTileEntity.isLiquidOutput((byte) aSide.ordi