aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gregtech/api/multitileentity/multiblock/base/WallShareablePart.java
diff options
context:
space:
mode:
authorBlueWeabo <ilia.iliev2005@gmail.com>2023-04-01 17:06:06 +0300
committerGitHub <noreply@github.com>2023-04-01 16:06:06 +0200
commit655cc902d3df19a1ac2bfaa38cc928ed629d0171 (patch)
tree25e34b45705b8473e20af3f9b92af25cc87a1e0d /src/main/java/gregtech/api/multitileentity/multiblock/base/WallShareablePart.java
parenta01d019ed97101936210f16c7a362d852f081f09 (diff)
downloadGT5-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.java107
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;
+ }
+}