diff options
Diffstat (limited to 'src/main/java/gregtech/api/metatileentity')
3 files changed, 102 insertions, 10 deletions
diff --git a/src/main/java/gregtech/api/metatileentity/BaseMetaPipeEntity.java b/src/main/java/gregtech/api/metatileentity/BaseMetaPipeEntity.java index 338724cf20..2f7504a4ce 100644 --- a/src/main/java/gregtech/api/metatileentity/BaseMetaPipeEntity.java +++ b/src/main/java/gregtech/api/metatileentity/BaseMetaPipeEntity.java @@ -2,14 +2,18 @@ package gregtech.api.metatileentity; import static gregtech.GT_Mod.GT_FML_LOGGER; import static gregtech.api.enums.GT_Values.NW; +import static gregtech.api.metatileentity.BaseMetaTileEntity.COVER_DATA_NBT_KEYS; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.UUID; +import gregtech.GT_Mod; import gregtech.api.GregTech_API; import gregtech.api.enums.Textures; +import gregtech.api.enums.Textures.BlockIcons; +import gregtech.api.graphs.Lock; import gregtech.api.graphs.Node; import gregtech.api.graphs.paths.NodePath; import gregtech.api.interfaces.ITexture; @@ -19,10 +23,9 @@ import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.interfaces.tileentity.IPipeRenderedTileEntity; import gregtech.api.net.GT_Packet_TileEntity; import gregtech.api.objects.GT_ItemStack; -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.api.util.*; +import gregtech.common.GT_Client; +import gregtech.common.covers.GT_Cover_Fluidfilter; import net.minecraft.block.Block; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; @@ -30,12 +33,22 @@ import net.minecraft.init.Items; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.network.Packet; +import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.fluids.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.UUID; + +import static gregtech.GT_Mod.GT_FML_LOGGER; +import static gregtech.api.enums.GT_Values.NW; +import static gregtech.api.metatileentity.BaseMetaTileEntity.COVER_DATA_NBT_KEYS; + /** * NEVER INCLUDE THIS FILE IN YOUR MOD!!! * <p/> @@ -69,6 +82,34 @@ public class BaseMetaPipeEntity extends CoverableGregTechTileEntity implements I this.nodePath = nodePath; } + public void addToLock(TileEntity tileEntity, int side) { + if (node != null) { + Lock lock = node.locks[side]; + if (lock != null) { + lock.addTileEntity(tileEntity); + } + } else if (nodePath != null) { + nodePath.lock.addTileEntity(tileEntity); + } + } + + public void removeFromLock(TileEntity tileEntity, int side) { + if (node != null) { + Lock lock = node.locks[side]; + if (lock != null) { + lock.removeTileEntity(tileEntity); + } + } else if (nodePath != null) { + nodePath.lock.removeTileEntity(tileEntity); + } + } + + public void reloadLocks() { + IMetaTileEntity meta = getMetaTileEntity(); + if (meta instanceof MetaPipeEntity) { + ((MetaPipeEntity) meta).reloadLocks(); + } + } public BaseMetaPipeEntity() { } @@ -533,11 +574,13 @@ public class BaseMetaPipeEntity extends CoverableGregTechTileEntity implements I public void enableWorking() { if (!mWorks) mWorkUpdate = true; mWorks = true; + reloadLocks(); } @Override public void disableWorking() { mWorks = false; + reloadLocks(); } @Override diff --git a/src/main/java/gregtech/api/metatileentity/MetaPipeEntity.java b/src/main/java/gregtech/api/metatileentity/MetaPipeEntity.java index 7d4fd38b8b..c8727131c8 100644 --- a/src/main/java/gregtech/api/metatileentity/MetaPipeEntity.java +++ b/src/main/java/gregtech/api/metatileentity/MetaPipeEntity.java @@ -859,14 +859,24 @@ public abstract class MetaPipeEntity implements IMetaTileEntity, IConnectable { public boolean letsIn(GT_CoverBehaviorBase<?> coverBehavior, byte aSide, int aCoverID, ISerializableObject aCoverVariable, ICoverable aTileEntity) { return false; } public boolean letsOut(GT_CoverBehaviorBase<?> coverBehavior, byte aSide, int aCoverID, ISerializableObject aCoverVariable, ICoverable aTileEntity) { return false; } - public boolean canConnect(byte aSide, TileEntity tTileEntity) { return false; } - public boolean getGT6StyleConnection() { return false; } + public boolean canConnect(byte aSide, TileEntity tTileEntity) { + return false; + } + + public boolean getGT6StyleConnection() { + return false; + } @Override - public boolean shouldJoinIc2Enet() { return false; } + public boolean shouldJoinIc2Enet() { + return false; + } @Override public boolean isMachineBlockUpdateRecursive() { return false; } + + public void reloadLocks() { + } } 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 788753f0cc..08f55715cb 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 @@ -8,11 +8,11 @@ import gregtech.api.enums.Dyes; import gregtech.api.enums.Materials; import gregtech.api.enums.TextureSet; import gregtech.api.enums.Textures; +import gregtech.api.graphs.Node; +import gregtech.api.graphs.NodeList; import gregtech.api.graphs.PowerNode; import gregtech.api.graphs.PowerNodes; import gregtech.api.graphs.consumers.ConsumerNode; -import gregtech.api.graphs.Node; -import gregtech.api.graphs.NodeList; import gregtech.api.graphs.paths.PowerNodePath; import gregtech.api.interfaces.ITexture; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; @@ -22,6 +22,7 @@ import gregtech.api.interfaces.tileentity.IEnergyConnected; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.metatileentity.BaseMetaPipeEntity; import gregtech.api.metatileentity.MetaPipeEntity; +import gregtech.api.objects.GT_Cover_None; import gregtech.api.render.TextureFactory; import gregtech.api.util.*; import gregtech.common.GT_Client; @@ -449,7 +450,7 @@ public class GT_MetaPipeEntity_Cable extends MetaPipeEntity implements IMetaTile for( byte aSide = 0 ; aSide < 6 ; aSide++) if(isConnectedAtSide(aSide)) { final TileEntity tTileEntity = baseMeta.getTileEntityAtSide(aSide); final TileEntity tEmitter = (tTileEntity == null || tTileEntity instanceof IEnergyTile || EnergyNet.instance == null) ? tTileEntity : - EnergyNet.instance.getTileEntity(tTileEntity.getWorldObj(), tTileEntity.xCoord, tTileEntity.yCoord, tTileEntity.zCoord); + EnergyNet.instance.getTileEntity(tTileEntity.getWorldObj(), tTileEntity.xCoord, tTileEntity.yCoord, tTileEntity.zCoord); if (tEmitter instanceof IEnergyEmitter) return true; @@ -458,4 +459,42 @@ public class GT_MetaPipeEntity_Cable extends MetaPipeEntity implements IMetaTile } return false; } + + @Override + public void reloadLocks() { + 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); + } else { + pipe.removeFromLock(pipe, i); + } + } + } + } 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)) { + dontAllow = true; + } + } + } + if (dontAllow) { + pipe.addToLock(pipe, 0); + } else { + pipe.removeFromLock(pipe, 0); + } + } + } } |