diff options
author | Jason Mitchell <mitchej@gmail.com> | 2023-01-20 00:30:50 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-01-20 09:30:50 +0100 |
commit | 7ed516e30ba224b4b8e3fad9c836c22ca00bfcdb (patch) | |
tree | bea33f6637b929427e9abbe733e19606f8bf9032 /src/main/java/gregtech/api/metatileentity | |
parent | 750a4070af4756e3708e2b2555b9874864bf3cfb (diff) | |
download | GT5-Unofficial-7ed516e30ba224b4b8e3fad9c836c22ca00bfcdb.tar.gz GT5-Unofficial-7ed516e30ba224b4b8e3fad9c836c22ca00bfcdb.tar.bz2 GT5-Unofficial-7ed516e30ba224b4b8e3fad9c836c22ca00bfcdb.zip |
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 <miozune@gmail.com>
* 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 <miozune@gmail.com>
* 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 <miozune@gmail.com>
* 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 <miozune@gmail.com>
Diffstat (limited to 'src/main/java/gregtech/api/metatileentity')
12 files changed, 473 insertions, 641 deletions
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<ItemStack> 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.ordinal()) - && getCoverBehaviorAtSideNew((byte) aSide.ordinal()) - .letsFluidOut( - (byte) aSide.ordinal(), - getCoverIDAtSide((byte) aSide.ordinal()), - getComplexCoverDataAtSide((byte) aSide.ordinal()), - aFluid == null ? null : aFluid.getFluid(), - this)))) return mMetaTileEntity.drain(aSide, aFluid, doDrain); + && getCoverInfoAtSide((byte) aSide.ordinal()) + .letsFluidOut(aFluid == null ? null : aFluid.getFluid())))) + return mMetaTileEntity.drain(aSide, aFluid, doDrain); return null; } @@ -2053,13 +2019,8 @@ 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, - this)))) return mMetaTileEntity.canFill(aSide, aFluid); + && getCoverInfoAtSide((byte) aSide.ordinal()).letsFluidIn(aFluid)))) + return mMetaTileEntity.canFill(aSide, aFluid); return false; } @@ -2070,13 +2031,8 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity && (mRunningThroughTick || !mOutputDisabled) && (aSide == ForgeDirection.UNKNOWN || (mMetaTileEntity.isLiquidOutput((byte) aSide.ordinal()) - && getCoverBehaviorAtSideNew((byte) aSide.ordinal()) - .letsFluidOut( - (byte) aSide.ordinal(), - getCoverIDAtSide((byte) aSide.ordinal()), - getComplexCoverDataAtSide((byte) aSide.ordinal()), - aFluid, - this)))) return mMetaTileEntity.canDrain(aSide, aFluid); + && getCoverInfoAtSide((byte) aSide.ordinal()).letsFluidOut(aFluid)))) + return mMetaTileEntity.canDrain(aSide, aFluid); return false; } @@ -2087,21 +2043,10 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity if (canAccessData() && (aSide == ForgeDirection.UNKNOWN || (mMetaTileEntity.isLiquidInput(tSide) - && getCoverBehaviorAtSideNew(tSide) - .letsFluidIn( - tSide, - getCoverIDAtSide(tSide), - getComplexCoverDataAtSide(tSide), - null, - this)) + && getCoverInfoAtSide(tSide).letsFluidIn(null)) || (mMetaTileEntity.isLiquidOutput(tSide) - && getCoverBehaviorAtSideNew(tSide) - .letsFluidOut( - tSide, - getCoverIDAtSide(tSide), - getComplexCoverDataAtSide(tSide), - null, - this)))) return mMetaTileEntity.getTankInfo(aSide); + && getCoverInfoAtSide(tSide).letsFluidOut(null)))) + return mMetaTileEntity.getTankInfo(aSide); return new FluidTankInfo[] {}; } diff --git a/src/main/java/gregtech/api/metatileentity/CoverableTileEntity.java b/src/main/java/gregtech/api/metatileentity/CoverableTileEntity.java index 2d29c7b70d..cbd39d3d15 100644 --- a/src/main/java/gregtech/api/metatileentity/CoverableTileEntity.java +++ b/src/main/java/gregtech/api/metatileentity/CoverableTileEntity.java @@ -21,7 +21,6 @@ import gregtech.GT_Mod; import gregtech.api.GregTech_API; import gregtech.api.enums.GT_Values; import gregtech.api.enums.Textures; -import gregtech.api.gui.modularui.GT_CoverUIBuildContext; import gregtech.api.gui.modularui.GUITextureSet; import gregtech.api.interfaces.ITexture; import gregtech.api.interfaces.tileentity.ICoverable; @@ -34,6 +33,7 @@ import gregtech.api.util.GT_CoverBehavior; import gregtech.api.util.GT_CoverBehaviorBase; import gregtech.api.util.ISerializableObject; import gregtech.common.GT_Client; +import gregtech.common.covers.CoverInfo; import gregtech.common.covers.GT_Cover_Fluidfilter; import java.util.ArrayList; import java.util.Arrays; @@ -49,6 +49,7 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.StatCollector; @@ -61,6 +62,16 @@ public abstract class CoverableTileEntity extends BaseTileEntity implements ICov .mapToInt(Enum::ordinal) .mapToObj(i -> "mCoverData" + i) .toArray(String[]::new); + + // New Cover Information + protected final CoverInfo[] coverInfos = new CoverInfo[] {null, null, null, null, null, null}; + + protected byte[] mSidedRedstone = new byte[] {15, 15, 15, 15, 15, 15}; + protected boolean mRedstone = false; + protected byte mStrongRedstone = 0; + + /* Deprecated Cover Variables */ + @Deprecated protected final GT_CoverBehaviorBase<?>[] mCoverBehaviors = new GT_CoverBehaviorBase<?>[] { GregTech_API.sNoBehavior, GregTech_API.sNoBehavior, @@ -69,26 +80,39 @@ public abstract class CoverableTileEntity extends BaseTileEntity implements ICov GregTech_API.sNoBehavior, GregTech_API.sNoBehavior }; - protected byte[] mSidedRedstone = new byte[] {15, 15, 15, 15, 15, 15}; - protected boolean mRedstone = false; - protected byte mStrongRedstone = 0; + @Deprecated protected int[] mCoverSides = new int[] {0, 0, 0, 0, 0, 0}; + + @Deprecated protected ISerializableObject[] mCoverData = new ISerializableObject[6]; + + @Deprecated protected final boolean[] mCoverNeedUpdate = new boolean[] {false, false, false, false, false, false}; + /* End Deprecated Cover Variables */ + protected short mID = 0; public long mTickTimer = 0; protected void writeCoverNBT(NBTTagCompound aNBT, boolean isDrop) { - boolean hasCover = false; - for (int i = 0; i < mCoverData.length; i++) { - if (mCoverSides[i] != 0 && mCoverData[i] != null) { - aNBT.setTag(COVER_DATA_NBT_KEYS[i], mCoverData[i].saveDataToNBT()); - hasCover = true; - } + final NBTTagList tList = new NBTTagList(); + final int[] coverSides = new int[] {0, 0, 0, 0, 0, 0}; + + for (byte i = 0; i < coverInfos.length; i++) { + final CoverInfo coverInfo = getCoverInfoAtSide(i); + if (!coverInfo.isValid()) continue; + + // Backwards compat, in case of a revert... for now + tList.appendTag(coverInfo.writeToNBT(new NBTTagCompound())); + aNBT.setTag(COVER_DATA_NBT_KEYS[i], coverInfo.getCoverData().saveDataToNBT()); + } + if (tList.tagCount() > 0) { + aNBT.setTag(GT_Values.NBT.COVERS, tList); + // Backwards compat, in case of a revert... for now + aNBT.setIntArray("mCoverSides", coverSides); } + if (mStrongRedstone > 0) aNBT.setByte("mStrongRedstone", mStrongRedstone); - if (hasCover) aNBT.setIntArray("mCoverSides", mCoverSides); if (!isDrop) { aNBT.setByteArray("mRedstoneSided", mSidedRedstone); @@ -97,40 +121,63 @@ public abstract class CoverableTileEntity extends BaseTileEntity implements ICov } protected void readCoverNBT(NBTTagCompound aNBT) { - mCoverSides = aNBT.hasKey("mCoverSides") ? aNBT.getIntArray("mCoverSides") : new int[] {0, 0, 0, 0, 0, 0}; mRedstone = aNBT.getBoolean("mRedstone"); mSidedRedstone = aNBT.hasKey("mRedstoneSided") ? aNBT.getByteArray("mRedstoneSided") : new byte[] {15, 15, 15, 15, 15, 15}; mStrongRedstone = aNBT.getByte("mStrongRedstone"); - for (byte i = 0; i < 6; i++) mCoverBehaviors[i] = GregTech_API.getCoverBehaviorNew(mCoverSides[i]); + if (aNBT.hasKey(GT_Values.NBT.COVERS)) { + readCoverInfoNBT(aNBT); + } else if (aNBT.hasKey("mCoverSides")) { + readLegacyCoverInfoNBT(aNBT); + } + } - // check old form of data - mCoverData = new ISerializableObject[6]; - if (aNBT.hasKey("mCoverData", 11) && aNBT.getIntArray("mCoverData").length == 6) { - final int[] tOldData = aNBT.getIntArray("mCoverData"); - for (int i = 0; i < tOldData.length; i++) { - if (mCoverBehaviors[i] instanceof GT_Cover_Fluidfilter) { + public void readCoverInfoNBT(NBTTagCompound aNBT) { + final NBTTagList tList = aNBT.getTagList(GT_Values.NBT.COVERS, 10); + for (byte i = 0; i < tList.tagCount(); i++) { + final NBTTagCompound tNBT = tList.getCompoundTagAt(i); + final CoverInfo coverInfo = new CoverInfo(this, tNBT); + this.setCoverInfoAtSide(coverInfo.getSide(), coverInfo); + if (coverInfo.isDataNeededOnClient()) issueCoverUpdate(i); + } + } + + public void readLegacyCoverInfoNBT(NBTTagCompound aNBT) { + final int[] coverIDs = + aNBT.hasKey("mCoverSides") ? aNBT.getIntArray("mCoverSides") : new int[] {0, 0, 0, 0, 0, 0}; + final boolean hasOldCoverData = (aNBT.hasKey("mCoverData", 11) && aNBT.getIntArray("mCoverData").length == 6); + final int[] tOldData = hasOldCoverData ? aNBT.getIntArray("mCoverData") : new int[] {}; + + for (byte i : ALL_VALID_SIDES) { + if (coverIDs[i] == 0) continue; + + final CoverInfo coverInfo = new CoverInfo(i, coverIDs[i], this, null); + final GT_CoverBehaviorBase<?> coverBehavior = coverInfo.getCoverBehavior(); + if (coverBehavior == GregTech_API.sNoBehavior) continue; + + ISerializableObject coverData = null; + if (hasOldCoverData) { + if (coverBehavior instanceof GT_Cover_Fluidfilter) { final String filterKey = String.format("fluidFilter%d", i); if (aNBT.hasKey(filterKey)) { - mCoverData[i] = mCoverBehaviors[i].createDataObject( - (tOldData[i] & 7) | (FluidRegistry.getFluidID(aNBT.getString(filterKey)) << 3)); + coverData = coverInfo + .getCoverBehavior() + .createDataObject( + (tOldData[i] & 7) | (FluidRegistry.getFluidID(aNBT.getString(filterKey)) << 3)); } - } else if (mCoverBehaviors[i] != null && mCoverBehaviors[i] != GregTech_API.sNoBehavior) { - mCoverData[i] = mCoverBehaviors[i].createDataObject(tOldData[i]); + } else { + coverData = coverBehavior.createDataObject(tOldData[i]); } - } - } else { - // no old data - for (byte i = 0; i < 6; i++) { - if (mCoverBehaviors[i] == null) continue; + } else { if (aNBT.hasKey(COVER_DATA_NBT_KEYS[i])) - mCoverData[i] = mCoverBehaviors[i].createDataObject(aNBT.getTag(COVER_DATA_NBT_KEYS[i])); - else mCoverData[i] = mCoverBehaviors[i].createDataObject(); - if (mCoverBehaviors[i].isDataNeededOnClient(i, mCoverSides[i], mCoverData[i], this)) - issueCoverUpdate(i); + coverData = coverBehavior.createDataObject(aNBT.getTag(COVER_DATA_NBT_KEYS[i])); } + + if (coverData != null) coverInfo.setCoverData(coverData); + setCoverInfoAtSide(i, coverInfo); + if (coverInfo.isDataNeededOnClient()) issueCoverUpdate(i); } } @@ -138,33 +185,45 @@ public abstract class CoverableTileEntity extends BaseTileEntity implements ICov protected boolean doCoverThings() { for (byte i : ALL_VALID_SIDES) { - if (getCoverIDAtSide(i) != 0) { - final GT_CoverBehaviorBase<?> tCover = getCoverBehaviorAtSideNew(i); - final int tCoverTickRate = tCover.getTickRate(i, getCoverIDAtSide(i), mCoverData[i], this); - if (tCoverTickRate > 0 && mTickTimer % tCoverTickRate == 0) { - final byte tRedstone = - tCover.isRedstoneSensitive(i, getCoverIDAtSide(i), mCoverData[i], this, mTickTimer) - ? getInputRedstoneSignal(i) - : 0; - mCoverData[i] = - tCover.doCoverThings(i, tRedstone, getCoverIDAtSide(i), mCoverData[i], this, mTickTimer); - if (!isStillValid()) return false; - } - } + if (!tickCoverAtSide(i)) return false; } return true; } + public boolean tickCoverAtSide(byte aSide) { + return tickCoverAtSide(aSide, mTickTimer); + } + + /** + * Returns false if the tile is no longer valid after ticking the cover + */ + public boolean tickCoverAtSide(byte aSide, long aTickTimer) { + final CoverInfo coverInfo = getCoverInfoAtSide(aSide); + if (!coverInfo.isValid()) return true; + final int tCoverTickRate = coverInfo.getTickRate(); + if (tCoverTickRate > 0 && aTickTimer % tCoverTickRate == 0) { + final byte tRedstone = coverInfo.isRedstoneSensitive(aTickTimer) ? getInputRedstoneSignal(aSide) : 0; + coverInfo.setCoverData(coverInfo.doCoverThings(aTickTimer, tRedstone)); + return isStillValid(); + } + + return true; + } + public abstract boolean allowCoverOnSide(byte aSide, GT_ItemStack aCoverID); protected void checkDropCover() { - for (byte i : ALL_VALID_SIDES) - if (getCoverIDAtSide(i) != 0) - if (!allowCoverOnSide(i, new GT_ItemStack(getCoverIDAtSide(i)))) dropCover(i, i, true); + for (byte i : ALL_VALID_SIDES) { + final int coverId = getCoverIDAtSide(i); + if (coverId != 0) if (!allowCoverOnSide(i, new GT_ItemStack(coverId))) dropCover(i, i, true); + } } protected void updateCoverBehavior() { - for (byte i : ALL_VALID_SIDES) mCoverBehaviors[i] = GregTech_API.getCoverBehaviorNew(mCoverSides[i]); + for (byte i : ALL_VALID_SIDES) { + final CoverInfo coverInfo = getCoverInfoAtSide(i); + if (coverInfo.isValid()) coverInfo.updateCoverBehavior(); + } } @Override @@ -172,32 +231,20 @@ public abstract class CoverableTileEntity extends BaseTileEntity implements ICov // If we've got a null worldObj we're getting called as a part of readingNBT from a non tickable MultiTileEntity // on chunk load before the world is set // so we'll want to send a cover update. - if (worldObj == null - || (isServerSide() - && getCoverBehaviorAtSideNew(aSide) - .isDataNeededOnClient( - aSide, getCoverIDAtSide(aSide), getComplexCoverDataAtSide(aSide), this))) - mCoverNeedUpdate[aSide] = true; + final CoverInfo coverInfo = getCoverInfoAtSide(aSide); + if (worldObj == null || (isServerSide() && coverInfo.isDataNeededOnClient())) coverInfo.setNeedsUpdate(true); } public final ITexture getCoverTexture(byte aSide) { - if (getCoverIDAtSide(aSide) == 0) return null; + final CoverInfo coverInfo = getCoverInfoAtSide(aSide); + if (!coverInfo.isValid()) return null; if (GT_Mod.instance.isClientSide() && (GT_Client.hideValue & 0x1) != 0) { return Textures.BlockIcons.HIDDEN_TEXTURE[0]; // See through } - GT_CoverBehaviorBase<?> coverBehavior = getCoverBehaviorAtSideNew(aSide); - final ITexture coverTexture; - if (coverBehavior != null) { - if (!(this instanceof BaseMetaPipeEntity)) { - coverTexture = coverBehavior.getSpecialCoverFGTexture( - aSide, getCoverIDAtSide(aSide), getComplexCoverDataAtSide(aSide), this); - } else { - coverTexture = coverBehavior.getSpecialCoverTexture( - aSide, getCoverIDAtSide(aSide), getComplexCoverDataAtSide(aSide), this); - } - } else { - coverTexture = null; - } + final ITexture coverTexture = (!(this instanceof BaseMetaPipeEntity)) + ? coverInfo.getSpecialCoverFGTexture() + : coverInfo.getSpecialCoverTexture(); + return coverTexture != null ? coverTexture : GregTech_API.sCovers.get(new GT_ItemStack(getCoverIDAtSide(aSide))); @@ -206,16 +253,14 @@ public abstract class CoverableTileEntity extends BaseTileEntity implements ICov protected void requestCoverDataIfNeeded() { if (worldObj == null || !worldObj.isRemote) return; for (byte i : ALL_VALID_SIDES) { - if (getCoverBehaviorAtSideNew(i) - .isDataNeededOnClient(i, getCoverIDAtSide(i), getComplexCoverDataAtSide(i), this)) - NW.sendToServer(new GT_Packet_RequestCoverData(i, getCoverIDAtSide(i), this)); + final CoverInfo coverInfo = getCoverInfoAtSide(i); + if (coverInfo.isDataNeededOnClient()) NW.sendToServer(new GT_Packet_RequestCoverData(coverInfo, this)); } } @Override public void setCoverIdAndDataAtSide(byte aSide, int aId, ISerializableObject aData) { - if (setCoverIDAtSideNoUpdate(aSide, aId)) { - setCoverDataAtSide(aSide, aData); + if (setCoverIDAtSideNoUpdate(aSide, aId, aData)) { issueCoverUpdate(aSide); issueBlockUpdate(); } @@ -223,20 +268,19 @@ public abstract class CoverableTileEntity extends BaseTileEntity implements ICov @Override public void setCoverIDAtSide(byte aSide, int aID) { - if (setCoverIDAtSideNoUpdate(aSide, aID)) { - issueCoverUpdate(aSide); - issueBlockUpdate(); - } + setCoverIdAndDataAtSide(aSide, aID, null); } @Override public boolean setCoverIDAtSideNoUpdate(byte aSide, int aID) { - if (aSide >= 0 && aSide < 6 && mCoverSides[aSide] != aID) { - if (aID == 0 && isClientSide()) - mCoverBehaviors[aSide].onDropped(aSide, mCoverSides[aSide], mCoverData[aSide], this); - mCoverSides[aSide] = aID; - mCoverBehaviors[aSide] = GregTech_API.getCoverBehaviorNew(aID); - mCoverData[aSide] = mCoverBehaviors[aSide].createDataObject(); + return setCoverIDAtSideNoUpdate(aSide, aID, null); + } + + public boolean setCoverIDAtSideNoUpdate(byte aSide, int aID, ISerializableObject aData) { + final CoverInfo oldCoverInfo = getCoverInfoAtSide(aSide); + if (aSide >= 0 && aSide < 6 && oldCoverInfo.getCoverID() != aID) { + if (aID == 0 && isClientSide()) oldCoverInfo.onDropped(); + setCoverInfoAtSide(aSide, new CoverInfo(aSide, aID, this, aData)); return true; } return false; @@ -245,23 +289,22 @@ public abstract class CoverableTileEntity extends BaseTileEntity implements ICov @Override @Deprecated public void setCoverDataAtSide(byte aSide, int aData) { - if (aSide >= 0 && aSide < 6 && mCoverData[aSide] instanceof ISerializableObject.LegacyCoverData) - mCoverData[aSide] = new ISerializableObject.LegacyCoverData(aData); + final CoverInfo coverInfo = getCoverInfoAtSide(aSide); + if (coverInfo.isValid() && coverInfo.getCoverData() instanceof ISerializableObject.LegacyCoverData) + coverInfo.setCoverData(new ISerializableObject.LegacyCoverData(aData)); } @Override public void setCoverDataAtSide(byte aSide, ISerializableObject aData) { - if (aSide >= 0 - && aSide < 6 - && getCoverBehaviorAtSideNew(aSide) != null - && getCoverBehaviorAtSideNew(aSide).cast(aData) != null) mCoverData[aSide] = aData; + final CoverInfo coverInfo = getCoverInfoAtSide(aSide); + if (coverInfo.isValid() && coverInfo.getCoverBehavior().cast(aData) != null) coverInfo.setCoverData(aData); } @Override @Deprecated public GT_CoverBehavior getCoverBehaviorAtSide(byte aSide) { - if (aSide >= 0 && aSide < mCoverBehaviors.length && mCoverBehaviors[aSide] instanceof GT_CoverBehavior) - return (GT_CoverBehavior) mCoverBehaviors[aSide]; + final GT_CoverBehaviorBase<?> behavior = getCoverInfoAtSide(aSide).getCoverBehavior(); + if (behavior instanceof GT_CoverBehavior) return (GT_CoverBehavior) behavior; return GregTech_API.sNoBehavior; } @@ -272,14 +315,12 @@ public abstract class CoverableTileEntity extends BaseTileEntity implements ICov @Override public int getCoverIDAtSide(byte aSide) { - if (aSide >= 0 && aSide < 6) return mCoverSides[aSide]; - return 0; + return getCoverInfoAtSide(aSide).getCoverID(); } @Override public ItemStack getCoverItemAtSide(byte aSide) { - return getCoverBehaviorAtSideNew(aSide) - .getDisplayStack(getCoverIDAtSide(aSide), getComplexCoverDataAtSide(aSide)); + return getCoverInfoAtSide(aSide).getDisplayStack(); } @Override @@ -295,57 +336,71 @@ public abstract class CoverableTileEntity extends BaseTileEntity implements ICov @Override @Deprecated public int getCoverDataAtSide(byte aSide) { - if (aSide >= 0 && aSide < 6 && mCoverData[aSide] instanceof ISerializableObject.LegacyCoverData) - return ((ISerializableObject.LegacyCoverData) mCoverData[aSide]).get(); + final ISerializableObject coverData = getCoverInfoAtSide(aSide).getCoverData(); + if (coverData instanceof ISerializableObject.LegacyCoverData) { + return ((ISerializableObject.LegacyCoverData) coverData).get(); + } return 0; } @Override public ISerializableObject getComplexCoverDataAtSide(byte aSide) { - if (aSide >= 0 && aSide < 6 && getCoverBehaviorAtSideNew(aSide) != null) return mCoverData[aSide]; - return GregTech_API.sNoBehavior.createDataObject(); + return getCoverInfoAtSide(aSide).getCoverData(); } @Override public GT_CoverBehaviorBase<?> getCoverBehaviorAtSideNew(byte aSide) { - if (aSide >= 0 && aSide < 6) return mCoverBehaviors[aSide]; - return GregTech_API.sNoBehavior; + return getCoverInfoAtSide(aSide).getCoverBehavior(); + } + + public void setCoverInfoAtSide(byte aSide, CoverInfo coverInfo) { + if (aSide >= 0 && aSide < 6) coverInfos[aSide] = coverInfo; } @Override - public boolean dropCover(byte aSide, byte aDroppedSide, boolean aForced) { - if (getCoverBehaviorAtSideNew(aSide) - .onCoverRemoval(aSide, getCoverIDAtSide(aSide), mCoverData[aSide], this, aForced) - || aForced) { - final ItemStack tStack = getCoverBehaviorAtSideNew(aSide) - .getDrop(aSide, getCoverIDAtSide(aSide), getComplexCoverDataAtSide(aSide), this); - if (tStack != null) { - getCoverBehaviorAtSideNew(aSide) - .onDropped(aSide, getCoverIDAtSide(aSide), getComplexCoverDataAtSide(aSide), this); - final EntityItem tEntity = new EntityItem( - worldObj, - getOffsetX(aDroppedSide, 1) + 0.5, - getOffsetY(aDroppedSide, 1) + 0.5, - getOffsetZ(aDroppedSide, 1) + 0.5, - tStack); - tEntity.motionX = 0; - tEntity.motionY = 0; - tEntity.motionZ = 0; - worldObj.spawnEntityInWorld(tEntity); - } + public CoverInfo getCoverInfoAtSide(byte aSide) { + if (aSide >= 0 && aSide < 6) { + if (coverInfos[aSide] == null) coverInfos[aSide] = new CoverInfo(aSide, this); + return coverInfos[aSide]; + } + return CoverInfo.EMPTY_INFO; + } + + public void clearCoverInfoAtSide(byte aSide) { + if (aSide >= 0 && aSide < 6) { setCoverIDAtSide(aSide, 0); - updateOutputRedstoneSignal(aSide); + } + } - return true; + @Override + public boolean dropCover(byte aSide, byte aDroppedSide, boolean aForced) { + final CoverInfo coverInfo = getCoverInfoAtSide(aSide); + if (!coverInfo.isValid()) return false; + if (!coverInfo.onCoverRemoval(aForced) && !aForced) return false; + final ItemStack tStack = coverInfo.getDrop(); + if (tStack != null) { + coverInfo.onDropped(); + final EntityItem tEntity = new EntityItem( + worldObj, + getOffsetX(aDroppedSide, 1) + 0.5, + getOffsetY(aDroppedSide, 1) + 0.5, + getOffsetZ(aDroppedSide, 1) + 0.5, + tStack); + tEntity.motionX = 0; + tEntity.motionY = 0; + tEntity.motionZ = 0; + worldObj.spawnEntityInWorld(tEntity); } - return false; + clearCoverInfoAtSide(aSide); + updateOutputRedstoneSignal(aSide); + + return true; } protected void onBaseTEDestroyed() { - for (byte side = 0; side < 6; ++side) { - GT_CoverBehaviorBase<?> behavior = getCoverBehaviorAtSideNew(side); - if (behavior != GregTech_API.sNoBehavior) - behavior.onBaseTEDestroyed(side, getCoverIDAtSide(side), mCoverData[side], this); + for (byte side : ALL_VALID_SIDES) { + final CoverInfo coverInfo = getCoverInfoAtSide(side); + if (coverInfo.isValid()) coverInfo.onBaseTEDestroyed(); } } @@ -435,49 +490,38 @@ public abstract class CoverableTileEntity extends BaseTileEntity implements ICov @Override public void receiveCoverData(byte aCoverSide, int aCoverID, int aCoverData) { - if ((aCoverSide >= 0 && aCoverSide < 6)) { - GT_CoverBehaviorBase<?> behaviorBase = getCoverBehaviorAtSideNew(aCoverSide); - if (behaviorBase == GregTech_API.sNoBehavior) return; + if (aCoverSide < 0 || aCoverSide >= 6) return; + final CoverInfo oldCoverInfo = getCoverInfoAtSide(aCoverSide); + if (!oldCoverInfo.isValid()) return; - setCoverIDAtSideNoUpdate(aCoverSide, aCoverID); - setCoverDataAtSide(aCoverSide, aCoverData); - } + setCoverIDAtSideNoUpdate(aCoverSide, aCoverID); + setCoverDataAtSide(aCoverSide, aCoverData); } @Override public void receiveCoverData( byte aCoverSide, int aCoverID, ISerializableObject aCoverData, EntityPlayerMP aPlayer) { - if ((aCoverSide >= 0 && aCoverSide < 6)) { - GT_CoverBehaviorBase<?> behaviorBase = getCoverBehaviorAtSideNew(aCoverSide); - if (behaviorBase == GregTech_API.sNoBehavior) return; - - behaviorBase.preDataChanged( - aCoverSide, - getCoverIDAtSide(aCoverSide), - aCoverID, - getComplexCoverDataAtSide(aCoverSide), - aCoverData, - this); - - setCoverIDAtSideNoUpdate(aCoverSide, aCoverID); - setCoverDataAtSide(aCoverSide, aCoverData); - if (isClientSide()) { - behaviorBase.onDataChanged(aCoverSide, aCoverID, aCoverData, this); - } + if (aCoverSide < 0 || aCoverSide >= 6) return; + + final CoverInfo oldCoverInfo = getCoverInfoAtSide(aCoverSide); + + if (!oldCoverInfo.isValid()) return; + oldCoverInfo.preDataChanged(aCoverID, aCoverData); + setCoverIDAtSideNoUpdate(aCoverSide, aCoverID, aCoverData); + + if (isClientSide()) { + getCoverInfoAtSide(aCoverSide).onDataChanged(); } } protected void sendCoverDataIfNeeded() { if (worldObj == null || worldObj.isRemote) return; - final int mCoverNeedUpdateLength = mCoverNeedUpdate.length; - for (byte i = 0; i < mCoverNeedUpdateLength; i++) { - if (mCoverNeedUpdate[i]) { + for (byte i : ALL_VALID_SIDES) { + final CoverInfo coverInfo = getCoverInfoAtSide(i); + if (coverInfo.needsUpdate()) { NW.sendPacketToAllPlayersInRange( - worldObj, - new GT_Packet_SendCoverData(i, getCoverIDAtSide(i), getComplexCoverDataAtSide(i), this), - xCoord, - zCoord); - mCoverNeedUpdate[i] = false; + worldObj, new GT_Packet_SendCoverData(coverInfo, this), xCoord, zCoord); + coverInfo.setNeedsUpdate(false); } } } @@ -488,31 +532,25 @@ public abstract class CoverableTileEntity extends BaseTileEntity implements ICov final NBTTagCompound tag = accessor.getNBTData(); final byte currentFacing = (byte) accessor.getSide().ordinal(); - final int[] coverSides = tag.getIntArray("mCoverSides"); - // Not all data is available on the client, so get it from the NBT packet - if (coverSides != null && coverSides.length == 6) { - for (ForgeDirection direction : ForgeDirection.VALID_DIRECTIONS) { - final byte side = (byte) direction.ordinal(); - final int coverId = coverSides[side]; - final GT_CoverBehaviorBase<?> behavior = GregTech_API.getCoverBehaviorNew(coverId); - - if (coverId != 0 && behavior != null && behavior != GregTech_API.sNoBehavior) { - if (tag.hasKey(CoverableTileEntity.COVER_DATA_NBT_KEYS[side])) { - final ISerializableObject dataObject = - behavior.createDataObject(tag.getTag(CoverableTileEntity.COVER_DATA_NBT_KEYS[side])); - final ItemStack coverStack = behavior.getDisplayStack(coverId, dataObject); - if (coverStack != null) - currenttip.add(StatCollector.translateToLocalFormatted( - "GT5U.waila.cover", - currentFacing == side - ? StatCollector.translateToLocal("GT5U.waila.cover.current_facing") - : StatCollector.translateToLocal("GT5U.interface.coverTabs." - + direction.toString().toLowerCase()), - coverStack.getDisplayName())); - final String behaviorDesc = behavior.getDescription(side, coverId, dataObject, null); - if (!Objects.equals(behaviorDesc, E)) currenttip.add(behaviorDesc); - } - } + final NBTTagList tList = tag.getTagList(GT_Values.NBT.COVERS, 10); + for (byte i = 0; i < tList.tagCount(); i++) { + final NBTTagCompound tNBT = tList.getCompoundTagAt(i); + final CoverInfo coverInfo = new CoverInfo(this, tNBT); + if (!coverInfo.isValid() || coverInfo.getCoverBehavior() == GregTech_API.sNoBehavior) continue; + + final ItemStack coverStack = coverInfo.getDisplayStack(); + if (coverStack != null) { + currenttip.add(StatCollector.translateToLocalFormatted( + "GT5U.waila.cover", + currentFacing == coverInfo.getSide() + ? StatCollector.translateToLocal("GT5U.waila.cover.current_facing") + : StatCollector.translateToLocal("GT5U.interface.coverTabs." + + ForgeDirection.getOrientation(coverInfo.getSide()) + .toString() + .toLowerCase()), + coverStack.getDisplayName())); + final String behaviorDesc = coverInfo.getBehaviorDescription(); + if (!Objects.equals(behaviorDesc, E)) currenttip.add(behaviorDesc); } } @@ -527,8 +565,7 @@ public abstract class CoverableTileEntity extends BaseTileEntity implements ICov // super.getWailaNBTData(player, tile, tag, world, x, y, z); // While we have some cover data on the client (enough to render it); we don't have all the information we want, - // such as - // details on the fluid filter, so send it all here. + // such as details on the fluid filter, so send it all here. writeCoverNBT(tag, false); } @@ -538,6 +575,20 @@ public abstract class CoverableTileEntity extends BaseTileEntity implements ICov * @param aList - List to add the information to */ public static void addInstalledCoversInformation(NBTTagCompound aNBT, List<String> aList) { + final NBTTagList tList = aNBT.getTagList(GT_Values.NBT.COVERS, 10); + for (byte i = 0; i < tList.tagCount(); i++) { + final NBTTagCompound tNBT = tList.getCompoundTagAt(i); + final CoverInfo coverInfo = new CoverInfo(null, tNBT); + if (!coverInfo.isValid() || coverInfo.getCoverBehavior() == GregTech_API.sNoBehavior) continue; + + final ItemStack coverStack = coverInfo.getDisplayStack(); + if (coverStack != null) { + aList.add(String.format( + "Cover on %s side: %s", + getTranslation(FACES[coverInfo.getSide()]), coverStack.getDisplayName())); + } + } + if (aNBT.hasKey("mCoverSides")) { final int[] mCoverSides = aNBT.getIntArray("mCoverSides"); if (mCoverSides != null && mCoverSides.length == 6) { @@ -560,10 +611,7 @@ public abstract class CoverableTileEntity extends BaseTileEntity implements ICov } protected ModularWindow createCoverWindow(EntityPlayer player, byte side) { - final GT_CoverBehaviorBase<?> coverBehavior = getCoverBehaviorAtSideNew(side); - final GT_CoverUIBuildContext buildContext = - new GT_CoverUIBuildContext(player, getCoverIDAtSide(side), side, this, true); - return coverBehavior.createWindow(buildContext); + return getCoverInfoAtSide(side).createWindow(player); } protected static final int COVER_WINDOW_ID_START = 1; @@ -630,9 +678,7 @@ public abstract class CoverableTileEntity extends BaseTileEntity implements ICov .setPos( (COVER_TAB_WIDTH - ICON_SIZE) / 2 + (flipHorizontally ? -1 : 1), (COVER_TAB_HEIGHT - ICON_SIZE) / 2)) - .setEnabled(widget -> { - return getCoverItemAtSide(side) != null; - })); + .setEnabled(widget -> getCoverItemAtSide(side) != null)); } } @@ -646,12 +692,13 @@ public abstract class CoverableTileEntity extends BaseTileEntity implements ICov "GT5U.interface.coverTabs.west", "GT5U.interface.coverTabs.east" }; - final ItemStack coverItem = getCoverItemAtSide(side); + final CoverInfo coverInfo = getCoverInfoAtSide(side); + final ItemStack coverItem = coverInfo.getDisplayStack(); if (coverItem == null) return Collections.emptyList(); - boolean coverHasGUI = getCoverBehaviorAtSideNew(side).hasCoverGUI(); + final boolean coverHasGUI = coverInfo.hasCoverGUI(); //noinspection unchecked - List<String> tooltip = coverItem.getTooltip(Minecraft.getMinecraft().thePlayer, true); + final List<String> tooltip = coverItem.getTooltip(Minecraft.getMinecraft().thePlayer, true); for (int i = 0; i < tooltip.size(); i++) { if (i == 0) { tooltip.set( @@ -669,18 +716,12 @@ public abstract class CoverableTileEntity extends BaseTileEntity implements ICov protected void onTabClicked(Widget.ClickData clickData, Widget widget, byte side) { if (isClientSide()) return; - - final GT_CoverBehaviorBase<?> coverBehavior = getCoverBehaviorAtSideNew(side); - if (coverBehavior.useModularUI()) { + final CoverInfo coverInfo = getCoverInfoAtSide(side); + if (coverInfo.useModularUI()) { widget.getContext().openSyncedWindow(side + COVER_WINDOW_ID_START); } else { final GT_Packet_TileEntityCoverGUI packet = new GT_Packet_TileEntityCoverGUI( - getXCoord(), - getYCoord(), - getZCoord(), - side, - getCoverIDAtSide(side), - getComplexCoverDataAtSide(side), + coverInfo, getWorld().provider.dimensionId, widget.getContext().getPlayer().getEntityId(), 0); diff --git a/src/main/java/gregtech/api/metatileentity/GregTechTileClientEvents.java b/src/main/java/gregtech/api/metatileentity/GregTechTileClientEvents.java index c3c22415cb..d8e8017060 100644 --- a/src/main/java/gregtech/api/metatileentity/GregTechTileClientEvents.java +++ b/src/main/java/gregtech/api/metatileentity/GregTechTileClientEvents.java @@ -1,6 +1,6 @@ package gregtech.api.metatileentity; -public class GregTechTileClientEvents { +public final class GregTechTileClientEvents { public static final byte CHANGE_COMMON_DATA = 0; public static final byte CHANGE_CUSTOM_DATA = 1; public static final byte CHANGE_COLOR = 2; diff --git a/src/main/java/gregtech/api/metatileentity/MetaPipeEntity.java b/src/main/java/gregtech/api/metatileentity/MetaPipeEntity.java index ff9ac7517d..b433e48b6e 100644 --- a/src/main/java/gregtech/api/metatileentity/MetaPipeEntity.java +++ b/src/main/java/gregtech/api/metatileentity/MetaPipeEntity.java @@ -17,6 +17,7 @@ import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.objects.GT_ItemStack; import gregtech.api.util.*; import gregtech.common.GT_Client; +import gregtech.common.covers.CoverInfo; import java.io.File; import java.util.ArrayList; import java.util.List; @@ -581,43 +582,15 @@ public abstract class MetaPipeEntity implements IMetaTileEntity, IConnectable { @Override public int[] getAccessibleSlotsFromSide(int aSide) { - TIntList tList = new TIntArrayList(); - IGregTechTileEntity tTileEntity = getBaseMetaTileEntity(); - boolean tSkip = tTileEntity - .getCoverBehaviorAtSideNew((byte) aSide) - .letsItemsIn( - (byte) aSide, - tTileEntity.getCoverIDAtSide((byte) aSide), - tTileEntity.getComplexCoverDataAtSide((byte) aSide), - -2, - tTileEntity) - || tTileEntity - .getCoverBehaviorAtSideNew((byte) aSide) - .letsItemsOut( - (byte) aSide, - tTileEntity.getCoverIDAtSide((byte) aSide), - tTileEntity.getComplexCoverDataAtSide((byte) aSide), - -2, - tTileEntity); - for (int i = 0; i < getSizeInventory(); i++) - if (isValidSlot(i) - && (tSkip - || tTileEntity - .getCoverBehaviorAtSideNew((byte) aSide) - .letsItemsOut( - (byte) aSide, - tTileEntity.getCoverIDAtSide((byte) aSide), - tTileEntity.getComplexCoverDataAtSide((byte) aSide), - i, - tTileEntity) - || tTileEntity - .getCoverBehaviorAtSideNew((byte) aSide) - .letsItemsIn( - (byte) aSide, - tTileEntity.getCoverIDAtSide((byte) aSide), - tTileEntity.getComplexCoverDataAtSide((byte) aSide), - i, - tTileEntity))) tList.add(i); + final TIntList tList = new TIntArrayList(); + final IGregTechTileEntity tTileEntity = getBaseMetaTileEntity(); + final CoverInfo tileCoverInfo = tTileEntity.getCoverInfoAtSide((byte) aSide); + final boolean tSkip = tileCoverInfo.letsItemsIn(-2) || tileCoverInfo.letsItemsOut(-2); + for (int i = 0; i < getSizeInventory(); i++) { + if (isValidSlot(i) && (tSkip || tileCoverInfo.letsItemsOut(i) || tileCoverInfo.letsItemsIn(i))) { + tList.add(i); + } + } return tList.toArray(); } @@ -910,7 +883,7 @@ public abstract class MetaPipeEntity implements IMetaTileEntity, IConnectable { // If both are colored they must be the same color to connect. if (tTileEntity instanceof IColoredTileEntity) { if (getBaseMetaTileEntity().getColorization() >= 0) { - byte tColor = ((IColoredTileEntity) tTileEntity).getColorization(); + final byte tColor = ((IColoredTileEntity) tTileEntity).getColorization(); if (tColor >= 0 && tColor != getBaseMetaTileEntity().getColorization()) return false; } } @@ -926,21 +899,19 @@ public abstract class MetaPipeEntity implements IMetaTileEntity, IConnectable { final IGregTechTileEntity baseMetaTile = getBaseMetaTileEntity(); if (baseMetaTile == null || !baseMetaTile.isServerSide()) return 0; - final GT_CoverBehaviorBase<?> coverBehavior = baseMetaTile.getCoverBehaviorAtSideNew(aSide); - final int coverId = baseMetaTile.getCoverIDAtSide(aSide); - ISerializableObject coverData = baseMetaTile.getComplexCoverDataAtSide(aSide); + final CoverInfo coverInfo = baseMetaTile.getCoverInfoAtSide(aSide); - boolean alwaysLookConnected = coverBehavior.alwaysLookConnected(aSide, coverId, coverData, baseMetaTile); - boolean letsIn = letsIn(coverBehavior, aSide, coverId, coverData, baseMetaTile); - boolean letsOut = letsOut(coverBehavior, aSide, coverId, coverData, baseMetaTile); + final boolean alwaysLookConnected = coverInfo.alwaysLookConnected(); + final boolean letsIn = letsIn(coverInfo); + final boolean letsOut = letsOut(coverInfo); // Careful - tTileEntity might be null, and that's ok -- so handle it - TileEntity tTileEntity = baseMetaTile.getTileEntityAtSide(aSide); + final TileEntity tTileEntity = baseMetaTile.getTileEntityAtSide(aSide); if (!connectableColor(tTileEntity)) return 0; if ((alwaysLookConnected || letsIn || letsOut)) { // Are we trying to connect to a pipe? let's do it! - IMetaTileEntity tPipe = tTileEntity instanceof IGregTechTileEntity + final IMetaTileEntity tPipe = tTileEntity instanceof IGregTechTileEntity ? ((IGregTechTileEntity) tTileEntity).getMetaTileEntity() : null; if (getClass().isInstance(tPipe) @@ -1006,11 +977,19 @@ public abstract class MetaPipeEntity implements IMetaTileEntity, IConnectable { return false; } + public boolean letsIn(CoverInfo coverInfo) { + return false; + } + public boolean letsOut( GT_CoverBehavior coverBehavior, byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { return false; } + public boolean letsOut(CoverInfo coverInfo) { + return false; + } + public boolean letsIn( GT_CoverBehaviorBase<?> coverBehavior, byte aSide, diff --git a/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java b/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java index 8f1c3f2e48..de2b118c71 100644 --- a/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java +++ b/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java @@ -32,6 +32,7 @@ import gregtech.api.util.GT_TooltipDataCache; import gregtech.api.util.GT_Util; import gregtech.api.util.GT_Utility; import gregtech.common.GT_Client; +import gregtech.common.covers.CoverInfo; import java.io.File; import java.util.ArrayList; import java.util.List; @@ -871,43 +872,15 @@ public abstract class MetaTileEntity implements IMetaTileEntity, IMachineCallbac @Override public int[] getAccessibleSlotsFromSide(int aSide) { - TIntList tList = new TIntArrayList(); - IGregTechTileEntity tTileEntity = getBaseMetaTileEntity(); - boolean tSkip = tTileEntity - .getCoverBehaviorAtSideNew((byte) aSide) - .letsItemsIn( - (byte) aSide, - tTileEntity.getCoverIDAtSide((byte) aSide), - tTileEntity.getComplexCoverDataAtSide((byte) aSide), - -2, - tTileEntity) - || tTileEntity - .getCoverBehaviorAtSideNew((byte) aSide) - .letsItemsOut( - (byte) aSide, - tTileEntity.getCoverIDAtSide((byte) aSide), - tTileEntity.getComplexCoverDataAtSide((byte) aSide), - -2, - tTileEntity); - for (int i = 0; i < getSizeInventory(); i++) - if (isValidSlot(i) - && (tSkip - || tTileEntity - .getCoverBehaviorAtSideNew((byte) aSide) - .letsItemsOut( - (byte) aSide, - tTileEntity.getCoverIDAtSide((byte) aSide), - tTileEntity.getComplexCoverDataAtSide((byte) aSide), - i, - tTileEntity) - || tTileEntity - .getCoverBehaviorAtSideNew((byte) aSide) - .letsItemsIn( - (byte) aSide, - tTileEntity.getCoverIDAtSide((byte) aSide), - tTileEntity.getComplexCoverDataAtSide((byte) aSide), - i, - tTileEntity))) tList.add(i); + final TIntList tList = new TIntArrayList(); + final IGregTechTileEntity tTileEntity = getBaseMetaTileEntity(); + final CoverInfo tileCoverInfo = tTileEntity.getCoverInfoAtSide((byte) aSide); + final boolean tSkip = tileCoverInfo.letsItemsIn(-2) || tileCoverInfo.letsItemsOut(-2); + for (int i = 0; i < getSizeInventory(); i++) { + if (isValidSlot(i) && (tSkip || tileCoverInfo.letsItemsOut(i) || tileCoverInfo.letsItemsIn(i))) { + tList.add(i); + } + } return tList.toArray(); } diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Cable.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Cable.java index 965e920e82..47915e64cb 100644 --- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Cable.java +++ b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Cable.java @@ -1,5 +1,7 @@ package gregtech.api.metatileentity.implementations; +import static gregtech.api.enums.GT_Values.ALL_VALID_SIDES; + import cofh.api.energy.IEnergyReceiver; import cpw.mods.fml.common.Loader; import gregtech.GT_Mod; @@ -26,6 +28,7 @@ import gregtech.api.objects.GT_Cover_None; import gregtech.api.render.TextureFactory; import gregtech.api.util.*; import gregtech.common.GT_Client; +import gregtech.common.covers.CoverInfo; import gregtech.common.covers.GT_Cover_SolarPanel; import ic2.api.energy.EnergyNet; import ic2.api.energy.tile.IEnergyEmitter; @@ -231,14 +234,8 @@ public class GT_MetaPipeEntity_Cable extends MetaPipeEntity implements IMetaTile @Override public long injectEnergyUnits(byte aSide, long aVoltage, long aAmperage) { if (!isConnectedAtSide(aSide) && aSide != 6) return 0; - if (!getBaseMetaTileEntity() - .getCoverBehaviorAtSideNew(aSide) - .letsEnergyIn( - aSide, - getBaseMetaTileEntity().getCoverIDAtSide(aSide), - getBaseMetaTileEntity().getComplexCoverDataAtSide(aSide), - getBaseMetaTileEntity())) return 0; - HashSet<TileEntity> nul = null; + if (!getBaseMetaTileEntity().getCoverInfoAtSide(aSide).letsEnergyIn()) return 0; + final HashSet<TileEntity> nul = null; return transferElectricity(aSide, aVoltage, aAmperage, nul); } @@ -252,12 +249,12 @@ public class GT_MetaPipeEntity_Cable extends MetaPipeEntity implements IMetaTile @Override public long transferElectricity(byte aSide, long aVoltage, long aAmperage, HashSet<TileEntity> aAlreadyPassedSet) { if (!getBaseMetaTileEntity().isServerSide() || !isConnectedAtSide(aSide) && aSide != 6) return 0; - BaseMetaPipeEntity tBase = (BaseMetaPipeEntity) getBaseMetaTileEntity(); + final BaseMetaPipeEntity tBase = (BaseMetaPipeEntity) getBaseMetaTileEntity(); if (!(tBase.getNode() instanceof PowerNode)) return 0; - PowerNode tNode = (PowerNode) tBase.getNode(); + final PowerNode tNode = (PowerNode) tBase.getNode(); if (tNode != null) { int tPlace = 0; - Node[] tToPower = new Node[tNode.mConsumers.size()]; + final Node[] tToPower = new Node[tNode.mConsumers.size()]; if (tNode.mHadVoltage) { for (ConsumerNode consumer : tNode.mConsumers) { if (consumer.needsEnergy()) tToPower[tPlace++] = consumer; @@ -359,6 +356,16 @@ public class GT_MetaPipeEntity_Cable extends MetaPipeEntity implements IMetaTile } @Override + public boolean letsIn(CoverInfo coverInfo) { + return coverInfo.letsEnergyIn(); + } + + @Override + public boolean letsOut(CoverInfo coverInfo) { + return coverInfo.letsEnergyOut(); + } + + @Override public boolean canConnect(byte aSide, TileEntity tTileEntity) { final IGregTechTileEntity baseMetaTile = getBaseMetaTileEntity(); final GT_CoverBehaviorBase<?> coverBehavior = baseMetaTile.getCoverBehaviorAtSideNew(aSide); @@ -472,8 +479,8 @@ public class GT_MetaPipeEntity_Cable extends MetaPipeEntity implements IMetaTile @Override public String[] getInfoData() { - BaseMetaPipeEntity base = (BaseMetaPipeEntity) getBaseMetaTileEntity(); - PowerNodePath path = (PowerNodePath) base.getNodePath(); + final BaseMetaPipeEntity base = (BaseMetaPipeEntity) getBaseMetaTileEntity(); + final PowerNodePath path = (PowerNodePath) base.getNodePath(); long amps = 0; long volts = 0; if (path != null) { @@ -562,7 +569,7 @@ public class GT_MetaPipeEntity_Cable extends MetaPipeEntity implements IMetaTile Entity collider) { super.addCollisionBoxesToList(aWorld, aX, aY, aZ, inputAABB, outputAABB, collider); if (GT_Mod.instance.isClientSide() && (GT_Client.hideValue & 0x2) != 0) { - AxisAlignedBB aabb = getActualCollisionBoundingBoxFromPool(aWorld, aX, aY, aZ); + final AxisAlignedBB aabb = getActualCollisionBoundingBoxFromPool(aWorld, aX, aY, aZ); if (inputAABB.intersectsWith(aabb)) outputAABB.add(aabb); } } @@ -593,32 +600,27 @@ public class GT_MetaPipeEntity_Cable extends MetaPipeEntity implements IMetaTile @Override public void reloadLocks() { - BaseMetaPipeEntity pipe = (BaseMetaPipeEntity) getBaseMetaTileEntity(); + final BaseMetaPipeEntity pipe = (BaseMetaPipeEntity) getBaseMetaTileEntity(); if (pipe.getNode() != null) { - for (byte i = 0; i < 6; i++) { - if (isConnectedAtSide(i)) { - final GT_CoverBehaviorBase<?> coverBehavior = pipe.getCoverBehaviorAtSideNew(i); - if (coverBehavior instanceof GT_Cover_None) continue; - final int coverId = pipe.getCoverIDAtSide(i); - ISerializableObject coverData = pipe.getComplexCoverDataAtSide(i); - if (!letsIn(coverBehavior, i, coverId, coverData, pipe) - || !letsOut(coverBehavior, i, coverId, coverData, pipe)) { - pipe.addToLock(pipe, i); + for (byte tSide : ALL_VALID_SIDES) { + if (isConnectedAtSide(tSide)) { + final CoverInfo coverInfo = pipe.getCoverInfoAtSide(tSide); + if (coverInfo.getCoverBehavior() instanceof GT_Cover_None) continue; + if (!letsIn(coverInfo) || !letsOut(coverInfo)) { + pipe.addToLock(pipe, tSide); } else { - pipe.removeFromLock(pipe, i); + pipe.removeFromLock(pipe, tSide); } } } } else { boolean dontAllow = false; - for (byte i = 0; i < 6; i++) { - if (isConnectedAtSide(i)) { - final GT_CoverBehaviorBase<?> coverBehavior = pipe.getCoverBehaviorAtSideNew(i); - if (coverBehavior instanceof GT_Cover_None) continue; - final int coverId = pipe.getCoverIDAtSide(i); - ISerializableObject coverData = pipe.getComplexCoverDataAtSide(i); - if (!letsIn(coverBehavior, i, coverId, coverData, pipe) - || !letsOut(coverBehavior, i, coverId, coverData, pipe)) { + for (byte tSide : ALL_VALID_SIDES) { + if (isConnectedAtSide(tSide)) { + final CoverInfo coverInfo = pipe.getCoverInfoAtSide(tSide); + if (coverInfo.getCoverBehavior() instanceof GT_Cover_None) continue; + + if (!letsIn(coverInfo) || !letsOut(coverInfo)) { dontAllow = true; } } diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Fluid.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Fluid.java index d25f92b58b..61d55bfd9b 100644 --- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Fluid.java +++ b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Fluid.java @@ -18,6 +18,7 @@ import gregtech.api.render.TextureFactory; import gregtech.api.util.*; import gregtech.api.util.WorldSpawnedEventBuilder.ParticleEventBuilder; import gregtech.common.GT_Client; +import gregtech.common.covers.CoverInfo; import gregtech.common.covers.GT_Cover_Drain; import gregtech.common.covers.GT_Cover_FluidRegulator; import java.util.ArrayList; @@ -130,7 +131,7 @@ public class GT_MetaPipeEntity_Fluid extends MetaPipeEntity { byte aColorIndex, boolean aConnected, boolean aRedstone) { - float tThickNess = getThickNess(); + final float tThickNess = getThickNess(); if (mDisableInput == 0) return new ITexture[] { aConnected @@ -140,7 +141,7 @@ public class GT_MetaPipeEntity_Fluid extends MetaPipeEntity { Dyes.getModulation(aColorIndex, mMaterial.mRGBa)) }; byte tMask = 0; - byte[][] sRestrictionArray = { + final byte[][] sRestrictionArray = { {2, 3, 5, 4}, {2, 3, 4, 5}, {1, 0, 4, 5}, @@ -303,7 +304,7 @@ public class GT_MetaPipeEntity_Fluid extends MetaPipeEntity { && aEntity instanceof EntityLivingBase) { for (FluidStack tFluid : mFluids) { if (tFluid != null) { - int tTemperature = tFluid.getFluid().getTemperature(tFluid); + final int tTemperature = tFluid.getFluid().getTemperature(tFluid); if (tTemperature > 320 && !isCoverOnSide( (BaseMetaPipeEntity) getBaseMetaTileEntity(), (EntityLivingBase) aEntity)) { @@ -331,9 +332,9 @@ public class GT_MetaPipeEntity_Fluid extends MetaPipeEntity { if (!GT_Mod.gregtechproxy.gt6Pipe || mCheckConnections) checkConnections(); - boolean shouldDistribute = (oLastReceivedFrom == mLastReceivedFrom); + final boolean shouldDistribute = (oLastReceivedFrom == mLastReceivedFrom); for (int i = 0, j = aBaseMetaTileEntity.getRandomNumber(mPipeAmount); i < mPipeAmount; i++) { - int index = (i + j) % mPipeAmount; + final int index = (i + j) % mPipeAmount; if (mFluids[index] != null && mFluids[index].amount <= 0) mFluids[index] = null; if (mFluids[index] == null) continue; @@ -354,7 +355,7 @@ public class GT_MetaPipeEntity_Fluid extends MetaPipeEntity { final FluidStack tFluid = mFluids[index]; if (tFluid != null && tFluid.amount > 0) { - int tTemperature = tFluid.getFluid().getTemperature(tFluid); + final int tTemperature = tFluid.getFluid().getTemperature(tFluid); if (tTemperature > mHeatResistance) { if (aBaseMetaTileEntity.getRandomNumber(100) == 0) { // Poof @@ -423,8 +424,8 @@ public class GT_MetaPipeEntity_Fluid extends MetaPipeEntity { if (tFluid == null) return; // Tank, From, Amount to receive - List<MutableTriple<IFluidHandler, ForgeDirection, Integer>> tTanks = new ArrayList<>(); - int amount = tFluid.amount; + final List<MutableTriple<IFluidHandler, ForgeDirection, Integer>> tTanks = new ArrayList<>(); + final int amount = tFluid.amount; for (byte aSide, i = 0, j = (byte) aBaseMetaTileEntity.getRandomNumber(6); i < 6; i++) { // Get a list of tanks accepting fluids, and what side they're on @@ -436,22 +437,8 @@ public class GT_MetaPipeEntity_Fluid extends MetaPipeEntity { if (isConnectedAtSide(aSide) && tTank != null && (mLastReceivedFrom & (1 << aSide)) == 0 - && getBaseMetaTileEntity() - .getCoverBehaviorAtSideNew(aSide) - .letsFluidOut( - aSide, - getBaseMetaTileEntity().getCoverIDAtSide(aSide), - getBaseMetaTileEntity().getComplexCoverDataAtSide(aSide), - tFluid.getFluid(), - getBaseMetaTileEntity()) - && (gTank == null - || gTank.getCoverBehaviorAtSideNew(tSide) - .letsFluidIn( - tSide, - gTank.getCoverIDAtSide(tSide), - gTank.getComplexCoverDataAtSide(tSide), - tFluid.getFluid(), - gTank))) { + && getBaseMetaTileEntity().getCoverInfoAtSide(aSide).letsFluidOut(tFluid.getFluid()) + && (gTank == null || gTank.getCoverInfoAtSide(tSide).letsFluidIn(tFluid.getFluid()))) { if (tTank.fill(ForgeDirection.getOrientation(tSide), tFluid, false) > 0) { tTanks.add(new MutableTriple<>(tTank, ForgeDirection.getOrientation(tSide), 0)); } @@ -460,8 +447,9 @@ public class GT_MetaPipeEntity_Fluid extends MetaPipeEntity { } // How much of this fluid is available for distribution? - double tAmount = Math.max(1, Math.min(mCapacity * 10, tFluid.amount)), tNumTanks = tTanks.size(); - FluidStack maxFluid = tFluid.copy(); + final double tAmount = Math.max(1, Math.min(mCapacity * 10, tFluid.amount)); + final double tNumTanks = tTanks.size(); + final FluidStack maxFluid = tFluid.copy(); maxFluid.amount = Integer.MAX_VALUE; double availableCapacity = 0; @@ -473,16 +461,17 @@ public class GT_MetaPipeEntity_Fluid extends MetaPipeEntity { // Now distribute for (MutableTriple<IFluidHandler, ForgeDirection, Integer> tEntry : tTanks) { + // Distribue fluids based on percentage available space at destination if (availableCapacity > tAmount) - tEntry.right = (int) Math.floor(tEntry.right - * tAmount - / availableCapacity); // Distribue fluids based on percentage available space at destination - if (tEntry.right == 0) - tEntry.right = - (int) Math.min(1, tAmount); // If the percent is not enough to give at least 1L, try to give 1L + tEntry.right = (int) Math.floor(tEntry.right * tAmount / availableCapacity); + + // If the percent is not enough to give at least 1L, try to give 1L + if (tEntry.right == 0) tEntry.right = (int) Math.min(1, tAmount); + if (tEntry.right <= 0) continue; - int tFilledAmount = tEntry.left.fill(tEntry.middle, drainFromIndex(tEntry.right, false, index), false); + final int tFilledAmount = + tEntry.left.fill(tEntry.middle, drainFromIndex(tEntry.right, false, index), false); if (tFilledAmount > 0) tEntry.left.fill(tEntry.middle, drainFromIndex(tFilledAmount, true, index), true); @@ -494,8 +483,8 @@ public class GT_MetaPipeEntity_Fluid extends MetaPipeEntity { public boolean onWrenchRightClick( byte aSide, byte aWrenchingSide, EntityPlayer aPlayer, float aX, float aY, float aZ) { if (GT_Mod.gregtechproxy.gt6Pipe) { - byte tSide = GT_Utility.determineWrenchingSide(aSide, aX, aY, aZ); - byte tMask = (byte) (1 << tSide); + final byte tSide = GT_Utility.determineWrenchingSide(aSide, aX, aY, aZ); + final byte tMask = (byte) (1 << tSide); if (aPlayer.isSneaking()) { if (isInputDisabledAtSide(tSide)) { mDisableInput &= ~tMask; @@ -551,6 +540,16 @@ public class GT_MetaPipeEntity_Fluid extends MetaPipeEntity { } @Override + public boolean letsIn(CoverInfo coverInfo) { + return coverInfo.letsFluidIn(null); + } + + @Override + public boolean letsOut(CoverInfo coverInfo) { + return coverInfo.letsFluidOut(null); + } + + @Override public boolean canConnect(byte aSide, TileEntity tTileEntity) { if (tTileEntity == null) return false; @@ -706,7 +705,7 @@ public class GT_MetaPipeEntity_Fluid extends MetaPipeEntity { if (!mFluids[index].isFluidEqual(aFluid)) return 0; - int space = getCapacity() / mPipeAmount - mFluids[index].amount; + final int space = getCapacity() / mPipeAmount - mFluids[index].amount; if (aFluid.amount <= space) { if (doFill) { mFluids[index].amount += aFluid.amount; @@ -745,7 +744,7 @@ public class GT_MetaPipeEntity_Fluid extends MetaPipeEntity { mFluids[index].amount -= used; } - FluidStack drained = mFluids[index].copy(); + final FluidStack drained = mFluids[index].copy(); drained.amount = used; if (mFluids[index].amount <= 0) { @@ -808,7 +807,7 @@ public class GT_MetaPipeEntity_Fluid extends MetaPipeEntity { } private AxisAlignedBB getActualCollisionBoundingBoxFromPool(World aWorld, int aX, int aY, int aZ) { - float tSpace = (1f - mThickNess) / 2; + final float tSpace = (1f - mThickNess) / 2; float tSide0 = tSpace; float tSide1 = 1f - tSpace; float tSide2 = tSpace; @@ -841,7 +840,7 @@ public class GT_MetaPipeEntity_Fluid extends MetaPipeEntity { tSide1 = tSide3 = tSide5 = 1; } - byte tConn = ((BaseMetaPipeEntity) getBaseMetaTileEntity()).mConnections; + final byte tConn = ((BaseMetaPipeEntity) getBaseMetaTileEntity()).mConnections; if ((tConn & (1 << ForgeDirection.DOWN.ordinal())) != 0) tSide0 = 0f; if ((tConn & (1 << ForgeDirection.UP.ordinal())) != 0) tSide1 = 1f; if ((tConn & (1 << ForgeDirection.NORTH.ordinal())) != 0) tSide2 = 0f; @@ -864,7 +863,7 @@ public class GT_MetaPipeEntity_Fluid extends MetaPipeEntity { Entity collider) { super.addCollisionBoxesToList(aWorld, aX, aY, aZ, inputAABB, outputAABB, collider); if (GT_Mod.instance.isClientSide() && (GT_Client.hideValue & 0x2) != 0) { - AxisAlignedBB aabb = getActualCollisionBoundingBoxFromPool(aWorld, aX, aY, aZ); + final AxisAlignedBB aabb = getActualCollisionBoundingBoxFromPool(aWorld, aX, aY, aZ); if (inputAABB.intersectsWith(aabb)) outputAABB.add(aabb); } } diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Item.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Item.java index c919187927..5ae9150a58 100644 --- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Item.java +++ b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Item.java @@ -1,5 +1,6 @@ package gregtech.api.metatileentity.implementations; +import static gregtech.api.enums.GT_Values.ALL_VALID_SIDES; import static gregtech.api.enums.Textures.BlockIcons.PIPE_RESTRICTOR; import gregtech.GT_Mod; @@ -20,6 +21,7 @@ import gregtech.api.util.GT_CoverBehaviorBase; import gregtech.api.util.GT_Utility; import gregtech.api.util.ISerializableObject; import gregtech.common.GT_Client; +import gregtech.common.covers.CoverInfo; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -264,7 +266,7 @@ public class GT_MetaPipeEntity_Item extends MetaPipeEntity implements IMetaTileE if (oLastReceivedFrom == mLastReceivedFrom) { doTickProfilingInThisTick = false; - ArrayList<IMetaTileEntityItemPipe> tPipeList = new ArrayList<IMetaTileEntityItemPipe>(); + final ArrayList<IMetaTileEntityItemPipe> tPipeList = new ArrayList<>(); for (boolean temp = true; temp && !isInventoryEmpty() && pipeCapacityCheck(); ) { temp = false; @@ -290,7 +292,7 @@ public class GT_MetaPipeEntity_Item extends MetaPipeEntity implements IMetaTileE public boolean onWrenchRightClick( byte aSide, byte aWrenchingSide, EntityPlayer aPlayer, float aX, float aY, float aZ) { if (GT_Mod.gregtechproxy.gt6Pipe) { - byte tSide = GT_Utility.determineWrenchingSide(aSide, aX, aY, aZ); + final byte tSide = GT_Utility.determineWrenchingSide(aSide, aX, aY, aZ); if (isConnectedAtSide(tSide)) { disconnect(tSide); GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("215", "Disconnected")); @@ -335,6 +337,16 @@ public class GT_MetaPipeEntity_Item extends MetaPipeEntity implements IMetaTileE } @Override + public boolean letsIn(CoverInfo coverInfo) { + return coverInfo.letsItemsOut(-1); + } + + @Override + public boolean letsOut(CoverInfo coverInfo) { + return coverInfo.letsItemsOut(-1); + } + + @Override public boolean canConnect(byte aSide, TileEntity tTileEntity) { if (tTileEntity == null) return false; @@ -354,7 +366,7 @@ public class GT_MetaPipeEntity_Item extends MetaPipeEntity implements IMetaTileE connectable = true; } if (tTileEntity instanceof ISidedInventory) { - int[] tSlots = ((ISidedInventory) tTileEntity).getAccessibleSlotsFromSide(tSide); + final int[] tSlots = ((ISidedInventory) tTileEntity).getAccessibleSlotsFromSide(tSide); if (tSlots == null || tSlots.length <= 0) return false; connectable = true; } @@ -377,8 +389,9 @@ public class GT_MetaPipeEntity_Item extends MetaPipeEntity implements IMetaTileE @Override public boolean sendItemStack(Object aSender) { if (pipeCapacityCheck()) { - byte tOffset = (byte) getBaseMetaTileEntity().getRandomNumber(6), tSide = 0; - for (byte i = 0; i < 6; i++) { + final byte tOffset = (byte) getBaseMetaTileEntity().getRandomNumber(6); + byte tSide = 0; + for (byte i : ALL_VALID_SIDES) { tSide = (byte) ((i + tOffset) % 6); if (isConnectedAtSide(tSide) && (isInventoryEmpty() || (tSide != mLastReceivedFrom || aSender != getBaseMetaTileEntity()))) { @@ -391,15 +404,8 @@ public class GT_MetaPipeEntity_Item extends MetaPipeEntity implements IMetaTileE @Override public boolean insertItemStackIntoTileEntity(Object aSender, byte aSide) { - if (getBaseMetaTileEntity() - .getCoverBehaviorAtSideNew(aSide) - .letsItemsOut( - aSide, - getBaseMetaTileEntity().getCoverIDAtSide(aSide), - getBaseMetaTileEntity().getComplexCoverDataAtSide(aSide), - -1, - getBaseMetaTileEntity())) { - TileEntity tInventory = getBaseMetaTileEntity().getTileEntityAtSide(aSide); + if (getBaseMetaTileEntity().getCoverInfoAtSide(aSide).letsItemsOut(-1)) { + final TileEntity tInventory = getBaseMetaTileEntity().getTileEntityAtSide(aSide); if (tInventory != null && !(tInventory instanceof BaseMetaPipeEntity)) { if ((!(tInventory instanceof TileEntityHopper) && !(tInventory instanceof TileEntityDispenser)) || getBaseMetaTileEntity().getMetaIDAtSide(aSide) != GT_Utility.getOppositeSide(aSide)) { @@ -459,23 +465,9 @@ public class GT_MetaPipeEntity_Item extends MetaPipeEntity implements IMetaTileE @Override public int[] getAccessibleSlotsFromSide(int aSide) { - IGregTechTileEntity tTileEntity = getBaseMetaTileEntity(); - boolean tAllow = tTileEntity - .getCoverBehaviorAtSideNew((byte) aSide) - .letsItemsIn( - (byte) aSide, - tTileEntity.getCoverIDAtSide((byte) aSide), - tTileEntity.getComplexCoverDataAtSide((byte) aSide), - -2, - tTileEntity) - || tTileEntity - .getCoverBehaviorAtSideNew((byte) aSide) - .letsItemsOut( - (byte) aSide, - tTileEntity.getCoverIDAtSide((byte) aSide), - tTileEntity.getComplexCoverDataAtSide((byte) aSide), - -2, - tTileEntity); + final IGregTechTileEntity tTileEntity = getBaseMetaTileEntity(); + final CoverInfo coverInfo = tTileEntity.getCoverInfoAtSide((byte) aSide); + final boolean tAllow = coverInfo.letsItemsIn(-2) || coverInfo.letsItemsOut(-2); if (tAllow) { if (cacheSides == null) cacheSides = super.getAccessibleSlotsFromSide(aSide); return cacheSides; @@ -534,7 +526,7 @@ public class GT_MetaPipeEntity_Item extends MetaPipeEntity implements IMetaTileE } private AxisAlignedBB getActualCollisionBoundingBoxFromPool(World aWorld, int aX, int aY, int aZ) { - float tSpace = (1f - mThickNess) / 2; + final float tSpace = (1f - mThickNess) / 2; float tSide0 = tSpace; float tSide1 = 1f - tSpace; float tSide2 = tSpace; @@ -567,7 +559,7 @@ public class GT_MetaPipeEntity_Item extends MetaPipeEntity implements IMetaTileE tSide1 = tSide3 = tSide5 = 1; } - byte tConn = ((BaseMetaPipeEntity) getBaseMetaTileEntity()).mConnections; + final byte tConn = ((BaseMetaPipeEntity) getBaseMetaTileEntity()).mConnections; if ((tConn & (1 << ForgeDirection.DOWN.ordinal())) != 0) tSide0 = 0f; if ((tConn & (1 << ForgeDirection.UP.ordinal())) != 0) tSide1 = 1f; if ((tConn & (1 << ForgeDirection.NORTH.ordinal())) != 0) tSide2 = 0f; @@ -590,7 +582,7 @@ public class GT_MetaPipeEntity_Item extends MetaPipeEntity implements IMetaTileE Entity collider) { super.addCollisionBoxesToList(aWorld, aX, aY, aZ, inputAABB, outputAABB, collider); if (GT_Mod.instance.isClientSide() && (GT_Client.hideValue & 0x2) != 0) { - AxisAlignedBB aabb = getActualCollisionBoundingBoxFromPool(aWorld, aX, aY, aZ); + final AxisAlignedBB aabb = getActualCollisionBoundingBoxFromPool(aWorld, aX, aY, aZ); if (inputAABB.intersectsWith(aabb)) outputAABB.add(aabb); } } diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine.java index 5de80c5cb6..632b8cca8b 100644 --- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine.java +++ b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine.java @@ -1,5 +1,6 @@ package gregtech.api.metatileentity.implementations; +import static gregtech.api.enums.GT_Values.ALL_VALID_SIDES; import static gregtech.api.enums.GT_Values.V; import static gregtech.api.enums.GT_Values.debugCleanroom; import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASINGS; @@ -527,8 +528,8 @@ public abstract class GT_MetaTileEntity_BasicMachine extends GT_MetaTileEntity_B } return true; } - for (byte i = 0; i < 6; i++) { - if (aBaseMetaTileEntity.getAirAtSide(i)) { + for (byte tSide : ALL_VALID_SIDES) { + if (aBaseMetaTileEntity.getAirAtSide(tSide)) { if (useModularUI()) { GT_UIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); } else { diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_InputBus.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_InputBus.java index b6ace5a630..fdedbad86a 100644 --- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_InputBus.java +++ b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_InputBus.java @@ -197,13 +197,7 @@ public class GT_MetaTileEntity_Hatch_InputBus extends GT_MetaTileEntity_Hatch @Override public void onScrewdriverRightClick(byte aSide, EntityPlayer aPlayer, float aX, float aY, float aZ) { - if (!getBaseMetaTileEntity() - .getCoverBehaviorAtSideNew(aSide) - .isGUIClickable( - aSide, - getBaseMetaTileEntity().getCoverIDAtSide(aSide), - getBaseMetaTileEntity().getComplexCoverDataAtSide(aSide), - getBaseMetaTileEntity())) return; + if (!getBaseMetaTileEntity().getCoverInfoAtSide(aSide).isGUIClickable()) return; if (aPlayer.isSneaking()) { if (disableSort) { disableSort = false; diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Output.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Output.java index 11ffa6e802..2809ab3815 100644 --- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Output.java +++ b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Output.java @@ -230,19 +230,13 @@ public class GT_MetaTileEntity_Hatch_Output extends GT_MetaTileEntity_Hatch impl @Override public void onScrewdriverRightClick(byte aSide, EntityPlayer aPlayer, float aX, float aY, float aZ) { - if (!getBaseMetaTileEntity() - .getCoverBehaviorAtSideNew(aSide) - .isGUIClickable( - aSide, - getBaseMetaTileEntity().getCoverIDAtSide(aSide), - getBaseMetaTileEntity().getComplexCoverDataAtSide(aSide), - getBaseMetaTileEntity())) return; + if (!getBaseMetaTileEntity().getCoverInfoAtSide(aSide).isGUIClickable()) return; if (aPlayer.isSneaking()) { mMode = (byte) ((mMode + 9) % 10); } else { mMode = (byte) ((mMode + 1) % 10); } - String inBrackets; + final String inBrackets; switch (mMode) { case 0: GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("108", "Outputs misc. Fluids, Steam and Items")); @@ -312,15 +306,9 @@ public class GT_MetaTileEntity_Hatch_Output extends GT_MetaTileEntity_Hatch impl } private boolean tryToLockHatch(EntityPlayer aPlayer, byte aSide) { - if (!getBaseMetaTileEntity() - .getCoverBehaviorAtSideNew(aSide) - .isGUIClickable( - aSide, - getBaseMetaTileEntity().getCoverIDAtSide(aSide), - getBaseMetaTileEntity().getComplexCoverDataAtSide(aSide), - getBaseMetaTileEntity())) return false; + if (!getBaseMetaTileEntity().getCoverInfoAtSide(aSide).isGUIClickable()) return false; if (!isFluidLocked()) return false; - ItemStack tCurrentItem = aPlayer.inventory.getCurrentItem(); + final ItemStack tCurrentItem = aPlayer.inventory.getCurrentItem(); if (tCurrentItem == null) return false; FluidStack tFluid = FluidContainerRegistry.getFluidForFilledItem(tCurrentItem); if (tFluid == null && tCurrentItem.getItem() instanceof IFluidContainerItem) @@ -432,7 +420,7 @@ public class GT_MetaTileEntity_Hatch_Output extends GT_MetaTileEntity_Hatch impl protected void onEmptyingContainerWhenEmpty() { if (this.lockedFluidName == null && this.mFluid != null && isFluidLocked()) { this.setLockedFluidName(this.mFluid.getFluid().getName()); - EntityPlayer player; + final EntityPlayer player; if (playerThatLockedfluid == null || (player = playerThatLockedfluid.get()) == null) return; GT_Utility.sendChatToPlayer( player, @@ -496,7 +484,7 @@ public class GT_MetaTileEntity_Hatch_Output extends GT_MetaTileEntity_Hatch impl .setDefaultColor(COLOR_TEXT_WHITE.get()) .setPos(101, 20)) .widget(TextWidget.dynamicString(() -> { - ItemStack lockedDisplayStack = mInventory[getLockedDisplaySlot()]; + final ItemStack lockedDisplayStack = mInventory[getLockedDisplaySlot()]; return lockedDisplayStack == null ? "None" : lockedDisplayStack.getDisplayName(); }) .setSynced(false) |