diff options
author | BlueWeabo <ilia.iliev2005@gmail.com> | 2023-04-01 17:06:06 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-04-01 16:06:06 +0200 |
commit | 655cc902d3df19a1ac2bfaa38cc928ed629d0171 (patch) | |
tree | 25e34b45705b8473e20af3f9b92af25cc87a1e0d /src/main/java/gregtech/api/multitileentity/multiblock/base/WallShareablePart.java | |
parent | a01d019ed97101936210f16c7a362d852f081f09 (diff) | |
download | GT5-Unofficial-655cc902d3df19a1ac2bfaa38cc928ed629d0171.tar.gz GT5-Unofficial-655cc902d3df19a1ac2bfaa38cc928ed629d0171.tar.bz2 GT5-Unofficial-655cc902d3df19a1ac2bfaa38cc928ed629d0171.zip |
Implement Power Logic, Pollution Logic and Processing Logic for MuTEs and many other things (#1823)
* update bs 2
* fuel consumption and energy implementation. clean up
* don't register XD
* some clean up
* coke oven work
* semi-working coke oven
somehow i broke the activating of the multiblock
* power logic
* PowerLogic
* clean up, saving loading nbt
* small cleanup and pollution
* pollution working :P
* Energy mostly working, wallsharing
* processing logic
* fix npe and deregister
* review requests
* missed one
* remove extra 0
Diffstat (limited to 'src/main/java/gregtech/api/multitileentity/multiblock/base/WallShareablePart.java')
-rw-r--r-- | src/main/java/gregtech/api/multitileentity/multiblock/base/WallShareablePart.java | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/src/main/java/gregtech/api/multitileentity/multiblock/base/WallShareablePart.java b/src/main/java/gregtech/api/multitileentity/multiblock/base/WallShareablePart.java new file mode 100644 index 0000000000..a391f503dc --- /dev/null +++ b/src/main/java/gregtech/api/multitileentity/multiblock/base/WallShareablePart.java @@ -0,0 +1,107 @@ +package gregtech.api.multitileentity.multiblock.base; + +import static gregtech.api.enums.GT_Values.ALL_VALID_SIDES; + +import java.util.ArrayList; +import java.util.List; + +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ChunkCoordinates; + +import gregtech.api.multitileentity.interfaces.IMultiBlockController; + +public class WallShareablePart extends MultiBlockPart { + + protected List<ChunkCoordinates> targetPositions = new ArrayList<>(); + protected List<IMultiBlockController> targets = new ArrayList<>(); + + @Override + public void setTarget(IMultiBlockController aTarget, int aAllowedModes) { + if (targets.size() > 1 || targetPositions.size() > 1) { + mAllowedModes = 0; + mMode = 0; + } else { + mAllowedModes = aAllowedModes; + } + + if (aTarget == null) { + return; + } + + targets.add(aTarget); + targetPositions.add(aTarget.getCoords()); + } + + @Override + public String getLockedInventory() { + issueClientUpdate(); + if (targets.size() > 1 || targetPositions.size() > 1) { + return null; + } + + IMultiBlockController controller = getTarget(false); + if (!getNameOfInventoryFromIndex(controller, mLockedInventoryIndex).equals(mLockedInventory)) { + mLockedInventory = getNameOfInventoryFromIndex(controller, mLockedInventoryIndex); + if (mLockedInventory.equals("all")) { + mLockedInventory = ""; + } + } + return mLockedInventory.equals("") ? null : mLockedInventory; + } + + @Override + public IMultiBlockController getTarget(boolean aCheckValidity) { + if (targets.size() > 1 || targetPositions.size() > 1 || targets.size() <= 0 || targetPositions.size() <= 0) { + return null; + } + + target = targets.get(0); + mTargetPos = targetPositions.get(0); + return super.getTarget(aCheckValidity); + } + + @Override + public String getTileEntityName() { + return "gt.multiTileEntity.casing.wallSharable"; + } + + @Override + public boolean breakBlock() { + for (ChunkCoordinates coordinates : targetPositions) { + IMultiBlockController target = getTarget(coordinates, false); + if (target == null) { + continue; + } + target.onStructureChange(); + } + return false; + } + + @Override + public void onBlockAdded() { + for (byte tSide : ALL_VALID_SIDES) { + final TileEntity te = getTileEntityAtSide(tSide); + if (te instanceof MultiBlockPart) { + final IMultiBlockController tController = ((MultiBlockPart) te).getTarget(false); + if (tController != null) tController.onStructureChange(); + } else if (te instanceof IMultiBlockController) { + ((IMultiBlockController) te).onStructureChange(); + } + } + } + + public IMultiBlockController getTarget(ChunkCoordinates coordinates, boolean aCheckValidity) { + IMultiBlockController target = null; + if (coordinates == null) return null; + if (worldObj.blockExists(coordinates.posX, coordinates.posY, coordinates.posZ)) { + final TileEntity te = worldObj.getTileEntity(coordinates.posX, coordinates.posY, coordinates.posZ); + if (te instanceof IMultiBlockController) { + target = (IMultiBlockController) te; + } + } + if (aCheckValidity) { + return target != null && target.checkStructure(false) ? target : null; + } + return target; + } +} |