diff options
Diffstat (limited to 'src/main/java/gregtech/api/multitileentity/multiblock/base/MultiBlockPart.java')
-rw-r--r-- | src/main/java/gregtech/api/multitileentity/multiblock/base/MultiBlockPart.java | 202 |
1 files changed, 48 insertions, 154 deletions
diff --git a/src/main/java/gregtech/api/multitileentity/multiblock/base/MultiBlockPart.java b/src/main/java/gregtech/api/multitileentity/multiblock/base/MultiBlockPart.java index 1c6c5a0e07..9d40732b74 100644 --- a/src/main/java/gregtech/api/multitileentity/multiblock/base/MultiBlockPart.java +++ b/src/main/java/gregtech/api/multitileentity/multiblock/base/MultiBlockPart.java @@ -50,18 +50,21 @@ import gregtech.api.enums.GT_Values; import gregtech.api.enums.Textures; import gregtech.api.interfaces.IIconContainer; import gregtech.api.interfaces.ITexture; +import gregtech.api.logic.PowerLogic; +import gregtech.api.logic.interfaces.PowerLogicHost; import gregtech.api.multitileentity.MultiTileEntityRegistry; -import gregtech.api.multitileentity.base.BaseNontickableMultiTileEntity; +import gregtech.api.multitileentity.base.NonTickableMultiTileEntity; import gregtech.api.multitileentity.interfaces.IMultiBlockController; import gregtech.api.multitileentity.interfaces.IMultiBlockPart; import gregtech.api.multitileentity.interfaces.IMultiTileEntity.IMTE_BreakBlock; import gregtech.api.multitileentity.interfaces.IMultiTileEntity.IMTE_HasModes; +import gregtech.api.net.GT_Packet_MultiTileEntity; import gregtech.api.render.TextureFactory; import gregtech.api.util.GT_Utility; import gregtech.common.covers.CoverInfo; -public abstract class MultiBlockPart extends BaseNontickableMultiTileEntity - implements IMultiBlockPart, IMTE_BreakBlock, IMTE_HasModes { +public abstract class MultiBlockPart extends NonTickableMultiTileEntity + implements IMultiBlockPart, IMTE_BreakBlock, IMTE_HasModes, PowerLogicHost { public static final int NOTHING = 0, ENERGY_IN = B[0], ENERGY_OUT = B[1], FLUID_IN = B[2], FLUID_OUT = B[3], ITEM_IN = B[4], ITEM_OUT = B[5]; @@ -70,7 +73,7 @@ public abstract class MultiBlockPart extends BaseNontickableMultiTileEntity Arrays.asList(NOTHING, ENERGY_IN, ENERGY_OUT, FLUID_IN, FLUID_OUT, ITEM_IN, ITEM_OUT)); protected ChunkCoordinates mTargetPos = null; - protected IMultiBlockController mTarget = null; + protected IMultiBlockController target = null; protected int mAllowedModes = NOTHING; // BITMASK - Modes allowed for this part protected byte mMode = 0; // Mode selected for this part @@ -99,10 +102,10 @@ public abstract class MultiBlockPart extends BaseNontickableMultiTileEntity } public void setTarget(IMultiBlockController aTarget, int aAllowedModes) { - mTarget = aTarget; - mTargetPos = (mTarget == null ? null : mTarget.getCoords()); + target = aTarget; + mTargetPos = (target == null ? null : target.getCoords()); mAllowedModes = aAllowedModes; - if (mTarget != null) registerCovers(mTarget); + if (target != null) registerCovers(target); } @Override @@ -125,21 +128,22 @@ public abstract class MultiBlockPart extends BaseNontickableMultiTileEntity public IMultiBlockController getTarget(boolean aCheckValidity) { if (mTargetPos == null) return null; - if (mTarget == null || mTarget.isDead()) { + if (target == null || target.isDead()) { if (worldObj.blockExists(mTargetPos.posX, mTargetPos.posY, mTargetPos.posZ)) { final TileEntity te = worldObj.getTileEntity(mTargetPos.posX, mTargetPos.posY, mTargetPos.posZ); if (te instanceof IMultiBlockController) { - mTarget = (IMultiBlockController) te; + target = (IMultiBlockController) te; // Register our covers with the controller - registerCovers(mTarget); + registerCovers(target); } else { mTargetPos = null; } } } if (aCheckValidity) { - return mTarget != null && mTarget.checkStructure(false) ? mTarget : null; - } else return mTarget; + return target != null && target.checkStructure(false) ? target : null; + } + return target; } public void registerCovers(IMultiBlockController controller) { @@ -219,6 +223,18 @@ public abstract class MultiBlockPart extends BaseNontickableMultiTileEntity } @Override + public GT_Packet_MultiTileEntity getClientDataPacket() { + final GT_Packet_MultiTileEntity packet = super.getClientDataPacket(); + packet.setModes(getMode(), getAllowedModes()); + if (getTargetPos() != null) { + final ChunkCoordinates aTarget = getTargetPos(); + packet.setTargetPos(aTarget.posX, (short) aTarget.posY, aTarget.posZ); + } + packet.setInventoryIndex(getLockedInventoryIndex()); + return packet; + } + + @Override public void setLockedInventoryIndex(int aIndex) { mLockedInventoryIndex = aIndex; } @@ -305,7 +321,7 @@ public abstract class MultiBlockPart extends BaseNontickableMultiTileEntity public void loadTextureNBT(NBTTagCompound aNBT) { // Loading the registry final String textureName = aNBT.getString(NBT.TEXTURE); - mTextures = new IIconContainer[] { + textures = new IIconContainer[] { new Textures.BlockIcons.CustomIcon("multitileentity/multiblockparts/" + textureName + "/bottom"), new Textures.BlockIcons.CustomIcon("multitileentity/multiblockparts/" + textureName + "/top"), new Textures.BlockIcons.CustomIcon("multitileentity/multiblockparts/" + textureName + "/side"), @@ -321,8 +337,7 @@ public abstract class MultiBlockPart extends BaseNontickableMultiTileEntity // Loading an instance final TileEntity tCanonicalTileEntity = MultiTileEntityRegistry .getCanonicalTileEntity(getMultiTileEntityRegistryID(), getMultiTileEntityID()); - if (tCanonicalTileEntity instanceof MultiBlockPart) - mTextures = ((MultiBlockPart) tCanonicalTileEntity).mTextures; + if (tCanonicalTileEntity instanceof MultiBlockPart) textures = ((MultiBlockPart) tCanonicalTileEntity).textures; } @Override @@ -330,7 +345,7 @@ public abstract class MultiBlockPart extends BaseNontickableMultiTileEntity // For normal parts - texture comes from BaseMTE; overlay based on current mode // TODO(MTE) - For Advanced parts they might come from somewhere else final ITexture baseTexture = TextureFactory.of(super.getTexture(aBlock, aSide, isActive, aRenderPass)); - if (mMode != 0 && aSide == mFacing) { + if (mMode != 0 && aSide == facing) { if (mMode == getModeOrdinal(ITEM_IN)) return new ITexture[] { baseTexture, TextureFactory.of(OVERLAY_PIPE_IN), TextureFactory.of(ITEM_IN_SIGN) }; if (mMode == getModeOrdinal(ITEM_OUT)) return new ITexture[] { baseTexture, @@ -418,7 +433,7 @@ public abstract class MultiBlockPart extends BaseNontickableMultiTileEntity if (!modeSelected(FLUID_IN)) return 0; final byte aSide = (byte) aDirection.ordinal(); if (aDirection != ForgeDirection.UNKNOWN - && (aSide != mFacing || !coverLetsFluidIn(aSide, aFluidStack == null ? null : aFluidStack.getFluid()))) + && (aSide != facing || !coverLetsFluidIn(aSide, aFluidStack == null ? null : aFluidStack.getFluid()))) return 0; final IMultiBlockController controller = getTarget(true); return controller == null ? 0 : controller.fill(this, aDirection, aFluidStack, aDoFill); @@ -429,7 +444,7 @@ public abstract class MultiBlockPart extends BaseNontickableMultiTileEntity if (!modeSelected(FLUID_OUT)) return null; final byte aSide = (byte) aDirection.ordinal(); if (aDirection != ForgeDirection.UNKNOWN - && (aSide != mFacing || !coverLetsFluidOut(aSide, aFluidStack == null ? null : aFluidStack.getFluid()))) + && (aSide != facing || !coverLetsFluidOut(aSide, aFluidStack == null ? null : aFluidStack.getFluid()))) return null; final IMultiBlockController controller = getTarget(true); return controller == null ? null : controller.drain(this, aDirection, aFluidStack, aDoDrain); @@ -443,7 +458,7 @@ public abstract class MultiBlockPart extends BaseNontickableMultiTileEntity if (controller == null) return null; final FluidStack aFluidStack = controller.getDrainableFluid(aSide); if (aDirection != ForgeDirection.UNKNOWN - && (aSide != mFacing || !coverLetsFluidOut(aSide, aFluidStack == null ? null : aFluidStack.getFluid()))) + && (aSide != facing || !coverLetsFluidOut(aSide, aFluidStack == null ? null : aFluidStack.getFluid()))) return null; return controller.drain(this, aDirection, aAmountToDrain, aDoDrain); } @@ -452,8 +467,7 @@ public abstract class MultiBlockPart extends BaseNontickableMultiTileEntity public boolean canFill(ForgeDirection aDirection, Fluid aFluid) { if (!modeSelected(FLUID_IN)) return false; final byte aSide = (byte) aDirection.ordinal(); - if (aDirection != ForgeDirection.UNKNOWN && (aSide != mFacing || !coverLetsFluidIn(aSide, aFluid))) - return false; + if (aDirection != ForgeDirection.UNKNOWN && (aSide != facing || !coverLetsFluidIn(aSide, aFluid))) return false; final IMultiBlockController controller = getTarget(true); return controller != null && controller.canFill(this, aDirection, aFluid); } @@ -462,7 +476,7 @@ public abstract class MultiBlockPart extends BaseNontickableMultiTileEntity public boolean canDrain(ForgeDirection aDirection, Fluid aFluid) { if (!modeSelected(FLUID_OUT)) return false; final byte aSide = (byte) aDirection.ordinal(); - if (aDirection != ForgeDirection.UNKNOWN && (aSide != mFacing || !coverLetsFluidOut(aSide, aFluid))) + if (aDirection != ForgeDirection.UNKNOWN && (aSide != facing || !coverLetsFluidOut(aSide, aFluid))) return false; final IMultiBlockController controller = getTarget(true); return controller != null && controller.canDrain(this, aDirection, aFluid); @@ -471,7 +485,7 @@ public abstract class MultiBlockPart extends BaseNontickableMultiTileEntity @Override public FluidTankInfo[] getTankInfo(ForgeDirection aDirection) { final byte aSide = (byte) aDirection.ordinal(); - if (!modeSelected(FLUID_IN, FLUID_OUT) || (aSide != SIDE_UNKNOWN && aSide != mFacing)) + if (!modeSelected(FLUID_IN, FLUID_OUT) || (aSide != SIDE_UNKNOWN && aSide != facing)) return GT_Values.emptyFluidTankInfo; final IMultiBlockController controller = getTarget(true); if (controller == null) return GT_Values.emptyFluidTankInfo; @@ -485,145 +499,25 @@ public abstract class MultiBlockPart extends BaseNontickableMultiTileEntity return GT_Values.emptyFluidTankInfo; } - /** - * Energy - Depending on the part type - proxy to the multiblock controller, if we have one - */ - @Override - public boolean isEnetInput() { - return modeSelected(ENERGY_IN); - } - - @Override - public boolean isEnetOutput() { - return modeSelected(ENERGY_OUT); - } - - @Override - public boolean isUniversalEnergyStored(long aEnergyAmount) { - if (!modeSelected(ENERGY_OUT, ENERGY_IN)) return false; - final IMultiBlockController controller = getTarget(true); - return controller != null && controller.isUniversalEnergyStored(this, aEnergyAmount); - } - - @Override - public long getUniversalEnergyStored() { - if (!modeSelected(ENERGY_OUT, ENERGY_IN)) return 0; - final IMultiBlockController controller = getTarget(true); - return controller != null ? controller.getUniversalEnergyStored(this) : 0; - } + // #region Energy - Depending on the part type - proxy to the multiblock controller, if we have one @Override - public long getUniversalEnergyCapacity() { - if (!modeSelected(ENERGY_OUT, ENERGY_IN)) return 0; + public PowerLogic getPowerLogic(byte side) { final IMultiBlockController controller = getTarget(true); - return controller != null ? controller.getUniversalEnergyCapacity(this) : 0; + return controller.getPowerLogic(this, side); } @Override - public long getOutputAmperage() { - if (!modeSelected(ENERGY_OUT)) return 0; - final IMultiBlockController controller = getTarget(true); - return controller != null ? controller.getOutputAmperage(this) : 0; - } - - @Override - public long getOutputVoltage() { - if (!modeSelected(ENERGY_OUT)) return 0; - final IMultiBlockController controller = getTarget(true); - return controller != null ? controller.getOutputVoltage(this) : 0; - } - - @Override - public long getInputAmperage() { - if (!modeSelected(ENERGY_IN)) return 0; - final IMultiBlockController controller = getTarget(true); - return (controller != null && hasMode(ENERGY_IN)) ? controller.getInputAmperage(this) : 0; - } - - @Override - public long getInputVoltage() { - if (!modeSelected(ENERGY_IN)) return 0; - final IMultiBlockController controller = getTarget(true); - return (controller != null && hasMode(ENERGY_IN)) ? controller.getInputVoltage(this) : 0; - } - - @Override - public boolean decreaseStoredEnergyUnits(long aEnergy, boolean aIgnoreTooLittleEnergy) { - if (!modeSelected(ENERGY_OUT)) return false; - final IMultiBlockController controller = getTarget(true); - return controller != null && hasMode(ENERGY_OUT) - && controller.decreaseStoredEnergyUnits(this, aEnergy, aIgnoreTooLittleEnergy); - } - - @Override - public boolean increaseStoredEnergyUnits(long aEnergy, boolean aIgnoreTooMuchEnergy) { - if (!modeSelected(ENERGY_IN)) return false; - final IMultiBlockController controller = getTarget(true); - return controller != null && hasMode(ENERGY_IN) - && controller.increaseStoredEnergyUnits(this, aEnergy, aIgnoreTooMuchEnergy); - } - - @Override - public boolean drainEnergyUnits(byte aSide, long aVoltage, long aAmperage) { - if (!modeSelected(ENERGY_OUT) || (mFacing != SIDE_UNKNOWN && (mFacing != aSide || !coverLetsEnergyOut(aSide)))) - return false; - final IMultiBlockController controller = getTarget(true); - return controller != null && controller.drainEnergyUnits(this, aSide, aVoltage, aAmperage); - } - - @Override - public long injectEnergyUnits(byte aSide, long aVoltage, long aAmperage) { - if (!modeSelected(ENERGY_IN) || (mFacing != SIDE_UNKNOWN && (mFacing != aSide || !coverLetsEnergyIn(aSide)))) - return 0; - final IMultiBlockController controller = getTarget(true); - return controller != null ? controller.injectEnergyUnits(this, aSide, aVoltage, aAmperage) : 0; - } - - @Override - public long getAverageElectricInput() { - if (!modeSelected(ENERGY_IN)) return 0; - final IMultiBlockController controller = getTarget(true); - return controller != null ? controller.getAverageElectricInput(this) : 0; - } - - @Override - public long getAverageElectricOutput() { - if (!modeSelected(ENERGY_OUT)) return 0; - final IMultiBlockController controller = getTarget(true); - return controller != null ? controller.getAverageElectricOutput(this) : 0; - } - - @Override - public long getStoredEU() { - if (!modeSelected(ENERGY_OUT, ENERGY_IN)) return 0; - final IMultiBlockController controller = getTarget(true); - return controller != null ? controller.getStoredEU(this) : 0; - } - - @Override - public long getEUCapacity() { - if (!modeSelected(ENERGY_OUT, ENERGY_IN)) return 0; - final IMultiBlockController controller = getTarget(true); - return controller != null ? controller.getEUCapacity(this) : 0; - } - - @Override - public boolean inputEnergyFrom(byte aSide) { - if (!modeSelected(ENERGY_IN) || (mFacing != SIDE_UNKNOWN && (mFacing != aSide || !coverLetsEnergyIn(aSide)))) - return false; - final IMultiBlockController controller = getTarget(true); - return controller != null && controller.inputEnergyFrom(this, aSide); + public boolean isEnetInput() { + return modeSelected(ENERGY_IN); } @Override - public boolean outputsEnergyTo(byte aSide) { - if (!modeSelected(ENERGY_OUT) || (mFacing != SIDE_UNKNOWN && (mFacing != aSide || !coverLetsEnergyOut(aSide)))) - return false; - final IMultiBlockController controller = getTarget(true); - return controller != null && controller.outputsEnergyTo(this, aSide); + public boolean isEnetOutput() { + return modeSelected(ENERGY_OUT); } - // End Energy + // #endregion /** * Inventory - Depending on the part type - proxy to the multiblock controller, if we have one @@ -656,7 +550,7 @@ public abstract class MultiBlockPart extends BaseNontickableMultiTileEntity @Override public int[] getAccessibleSlotsFromSide(int aSide) { - if (!modeSelected(ITEM_IN, ITEM_OUT) || (mFacing != SIDE_UNKNOWN && mFacing != aSide)) + if (!modeSelected(ITEM_IN, ITEM_OUT) || (facing != SIDE_UNKNOWN && facing != aSide)) return GT_Values.emptyIntArray; final IMultiBlockController controller = getTarget(true); return controller != null ? controller.getAccessibleSlotsFromSide(this, (byte) aSide) : GT_Values.emptyIntArray; @@ -665,7 +559,7 @@ public abstract class MultiBlockPart extends BaseNontickableMultiTileEntity @Override public boolean canInsertItem(int aSlot, ItemStack aStack, int aSide) { if (!modeSelected(ITEM_IN, ITEM_OUT) - || (mFacing != SIDE_UNKNOWN && (mFacing != aSide || !coverLetsItemsIn((byte) aSide, aSlot)))) + || (facing != SIDE_UNKNOWN && (facing != aSide || !coverLetsItemsIn((byte) aSide, aSlot)))) return false; final IMultiBlockController controller = getTarget(true); return (controller != null && controller.canInsertItem(this, aSlot, aStack, (byte) aSide)); @@ -674,7 +568,7 @@ public abstract class MultiBlockPart extends BaseNontickableMultiTileEntity @Override public boolean canExtractItem(int aSlot, ItemStack aStack, int aSide) { if (!modeSelected(ITEM_IN, ITEM_OUT) - || (mFacing != SIDE_UNKNOWN && (mFacing != aSide || !coverLetsItemsOut((byte) aSide, aSlot)))) + || (facing != SIDE_UNKNOWN && (facing != aSide || !coverLetsItemsOut((byte) aSide, aSlot)))) return false; final IMultiBlockController controller = getTarget(true); return (controller != null && controller.canExtractItem(this, aSlot, aStack, (byte) aSide)); |