From 7b18634b34cb513f76f9a657fdc235af836d9032 Mon Sep 17 00:00:00 2001 From: Voxelstice <95834462+Voxelstice@users.noreply.github.com> Date: Sat, 17 Jan 2026 10:42:19 +0300 Subject: [PATCH] here's hoping this doesnt break anything else OC connection with multiblocks bug fix --- .../hbm/tileentity/TileEntityProxyCombo.java | 189 ++++++++++-------- 1 file changed, 101 insertions(+), 88 deletions(-) diff --git a/src/main/java/com/hbm/tileentity/TileEntityProxyCombo.java b/src/main/java/com/hbm/tileentity/TileEntityProxyCombo.java index 3f36eab8d..9a7ee5cfb 100644 --- a/src/main/java/com/hbm/tileentity/TileEntityProxyCombo.java +++ b/src/main/java/com/hbm/tileentity/TileEntityProxyCombo.java @@ -15,6 +15,7 @@ import api.hbm.redstoneoverradio.IRORInteractive; import api.hbm.redstoneoverradio.IRORValueProvider; import api.hbm.tile.IHeatSource; import com.hbm.inventory.material.Mats; +import com.hbm.util.Compat; import cpw.mods.fml.common.Loader; import cpw.mods.fml.common.Optional; import li.cil.oc.api.machine.Arguments; @@ -33,7 +34,7 @@ import net.minecraftforge.common.util.ForgeDirection; @Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "opencomputers") }) public class TileEntityProxyCombo extends TileEntityProxyBase implements IEnergyReceiverMK2, IEnergyConductorMK2, ISidedInventory, IFluidReceiverMK2, IHeatSource, ICrucibleAcceptor, SimpleComponent, OCComponent, IRORValueProvider, IRORInteractive { - + TileEntity tile; boolean inventory; boolean power; @@ -47,13 +48,13 @@ public class TileEntityProxyCombo extends TileEntityProxyBase implements IEnergy String componentName = CompatHandler.nullComponent; public TileEntityProxyCombo() { } - + public TileEntityProxyCombo(boolean inventory, boolean power, boolean fluid) { this.inventory = inventory; this.power = power; this.fluid = fluid; } - + public TileEntityProxyCombo inventory() { this.inventory = true; return this; @@ -75,12 +76,12 @@ public class TileEntityProxyCombo extends TileEntityProxyBase implements IEnergy this.fluid = true; return this; } - + public TileEntityProxyCombo heatSource() { this.heat = true; return this; } - + /** Returns the actual tile entity that represents the core. Only for internal use, and EnergyControl. */ public TileEntity getTile() { if(tile == null || tile.isInvalid() || (tile instanceof TileEntityLoadedBase && !((TileEntityLoadedBase) tile).isLoaded)) { @@ -88,7 +89,7 @@ public class TileEntityProxyCombo extends TileEntityProxyBase implements IEnergy } return tile; } - + /** Returns the core tile entity, or a delegate object. */ protected Object getCoreObject() { return getTile(); @@ -96,10 +97,10 @@ public class TileEntityProxyCombo extends TileEntityProxyBase implements IEnergy @Override public void setPower(long i) { - + if(!power) return; - + if(getCoreObject() instanceof IEnergyReceiverMK2) { ((IEnergyReceiverMK2)getCoreObject()).setPower(i); } @@ -107,54 +108,54 @@ public class TileEntityProxyCombo extends TileEntityProxyBase implements IEnergy @Override public long getPower() { - + if(!power) return 0; - + if(getCoreObject() instanceof IEnergyReceiverMK2) { return ((IEnergyReceiverMK2)getCoreObject()).getPower(); } - + return 0; } @Override public long getMaxPower() { - + if(!power) return 0; - + if(getCoreObject() instanceof IEnergyReceiverMK2) { return ((IEnergyReceiverMK2)getCoreObject()).getMaxPower(); } - + return 0; } @Override public long transferPower(long power) { - + if(!this.power) return power; - + if(getCoreObject() instanceof IEnergyReceiverMK2) { return ((IEnergyReceiverMK2)getCoreObject()).transferPower(power); } - + return power; } @Override public boolean canConnect(ForgeDirection dir) { - + if(power && getCoreObject() instanceof IEnergyReceiverMK2) { return ((IEnergyReceiverMK2)getCoreObject()).canConnect(dir); } - + if(conductor && getCoreObject() instanceof IEnergyConductorMK2) { return ((IEnergyConductorMK2)getCoreObject()).canConnect(dir); } - + return true; } @@ -166,46 +167,46 @@ public class TileEntityProxyCombo extends TileEntityProxyBase implements IEnergy } public static final FluidTank[] EMPTY_TANKS = new FluidTank[0]; - + @Override public FluidTank[] getAllTanks() { if(!fluid) return EMPTY_TANKS; - + if(getCoreObject() instanceof IFluidReceiverMK2) { return ((IFluidReceiverMK2)getCoreObject()).getAllTanks(); } - + return EMPTY_TANKS; } @Override public long transferFluid(FluidType type, int pressure, long amount) { if(!fluid) return amount; - + if(getCoreObject() instanceof IFluidReceiverMK2) { return ((IFluidReceiverMK2)getCoreObject()).transferFluid(type, pressure, amount); } - + return amount; } @Override public long getDemand(FluidType type, int pressure) { if(!fluid) return 0; - + if(getCoreObject() instanceof IFluidReceiverMK2) { return ((IFluidReceiverMK2)getCoreObject()).getDemand(type, pressure); } - + return 0; } - + @Override public boolean canConnect(FluidType type, ForgeDirection dir) { - + if(!this.fluid) return false; - + if(getCoreObject() instanceof IFluidConnectorMK2) { return ((IFluidConnectorMK2) getCoreObject()).canConnect(type, dir); } @@ -214,59 +215,59 @@ public class TileEntityProxyCombo extends TileEntityProxyBase implements IEnergy @Override public int getSizeInventory() { - + if(!inventory) return 0; - + if(getCoreObject() instanceof ISidedInventory) { return ((ISidedInventory)getCoreObject()).getSizeInventory(); } - + return 0; } @Override public ItemStack getStackInSlot(int slot) { - + if(!inventory) return null; - + if(getCoreObject() instanceof ISidedInventory) { return ((ISidedInventory)getCoreObject()).getStackInSlot(slot); } - + return null; } @Override public ItemStack decrStackSize(int i, int j) { - + if(getCoreObject() instanceof ISidedInventory) { return ((ISidedInventory)getCoreObject()).decrStackSize(i, j); } - + return null; } @Override public ItemStack getStackInSlotOnClosing(int slot) { - + if(!inventory) return null; - + if(getCoreObject() instanceof ISidedInventory) { return ((ISidedInventory)getCoreObject()).getStackInSlotOnClosing(slot); } - + return null; } @Override public void setInventorySlotContents(int slot, ItemStack stack) { - + if(!inventory) return; - + if(getCoreObject() instanceof ISidedInventory) { ((ISidedInventory)getCoreObject()).setInventorySlotContents(slot, stack); } @@ -274,62 +275,62 @@ public class TileEntityProxyCombo extends TileEntityProxyBase implements IEnergy @Override public String getInventoryName() { - + if(!inventory) return null; - + if(getCoreObject() instanceof ISidedInventory) { return ((ISidedInventory)getCoreObject()).getInventoryName(); } - + return null; } @Override public boolean hasCustomInventoryName() { - + if(!inventory) return false; - + if(getCoreObject() instanceof ISidedInventory) { return ((ISidedInventory)getCoreObject()).hasCustomInventoryName(); } - + return false; } @Override public int getInventoryStackLimit() { - + if(!inventory) return 0; - + if(getCoreObject() instanceof ISidedInventory) { return ((ISidedInventory)getCoreObject()).getInventoryStackLimit(); } - + return 0; } @Override public boolean isUseableByPlayer(EntityPlayer player) { - + if(!inventory) return false; - + if(getCoreObject() instanceof ISidedInventory) { return ((ISidedInventory)getCoreObject()).isUseableByPlayer(player); } - + return false; } @Override public void openInventory() { - + if(!inventory) return; - + if(getCoreObject() instanceof ISidedInventory) { ((ISidedInventory)getCoreObject()).openInventory(); } @@ -337,10 +338,10 @@ public class TileEntityProxyCombo extends TileEntityProxyBase implements IEnergy @Override public void closeInventory() { - + if(!inventory) return; - + if(getCoreObject() instanceof ISidedInventory) { ((ISidedInventory)getCoreObject()).closeInventory(); } @@ -348,68 +349,68 @@ public class TileEntityProxyCombo extends TileEntityProxyBase implements IEnergy @Override public boolean isItemValidForSlot(int slot, ItemStack stack) { - + if(!inventory) return false; - + if(getCoreObject() instanceof ISidedInventory) { - + if(getCoreObject() instanceof IConditionalInvAccess) return ((IConditionalInvAccess) getCoreObject()).isItemValidForSlot(xCoord, yCoord, zCoord, slot, stack); - + return ((ISidedInventory)getCoreObject()).isItemValidForSlot(slot, stack); } - + return false; } @Override public int[] getAccessibleSlotsFromSide(int side) { - + if(!inventory) return new int[0]; - + if(getCoreObject() instanceof ISidedInventory) { - + if(getCoreObject() instanceof IConditionalInvAccess) return ((IConditionalInvAccess) getCoreObject()).getAccessibleSlotsFromSide(xCoord, yCoord, zCoord, side); - + return ((ISidedInventory)getCoreObject()).getAccessibleSlotsFromSide(side); } - + return new int[0]; } @Override public boolean canInsertItem(int i, ItemStack stack, int j) { - + if(!inventory) return false; - + if(getCoreObject() instanceof ISidedInventory) { - + if(getCoreObject() instanceof IConditionalInvAccess) return ((IConditionalInvAccess) getCoreObject()).canInsertItem(xCoord, yCoord, zCoord, i, stack, j); - + return ((ISidedInventory)getCoreObject()).canInsertItem(i, stack, j); } - + return false; } @Override public boolean canExtractItem(int i, ItemStack stack, int j) { - + if(!inventory) return false; - + if(getCoreObject() instanceof ISidedInventory) { - + if(getCoreObject() instanceof IConditionalInvAccess) return ((IConditionalInvAccess) getCoreObject()).canExtractItem(xCoord, yCoord, zCoord, i, stack, j); - + return ((ISidedInventory)getCoreObject()).canExtractItem(i, stack, j); } - + return false; } - + @Override public void readFromNBT(NBTTagCompound nbt) { super.readFromNBT(nbt); @@ -424,7 +425,7 @@ public class TileEntityProxyCombo extends TileEntityProxyBase implements IEnergy this.componentName = nbt.getString("ocname"); } - + @Override public void writeToNBT(NBTTagCompound nbt) { super.writeToNBT(nbt); @@ -441,23 +442,23 @@ public class TileEntityProxyCombo extends TileEntityProxyBase implements IEnergy @Override public int getHeatStored() { - + if(!this.heat) return 0; - + if(getCoreObject() instanceof IHeatSource) { return ((IHeatSource)getCoreObject()).getHeatStored(); } - + return 0; } @Override public void useUpHeat(int heat) { - + if(!this.heat) return; - + if(getCoreObject() instanceof IHeatSource) { ((IHeatSource)getCoreObject()).useUpHeat(heat); } @@ -512,10 +513,22 @@ public class TileEntityProxyCombo extends TileEntityProxyBase implements IEnergy @Override @Optional.Method(modid = "OpenComputers") public boolean canConnectNode(ForgeDirection side) { - if(this.getCoreObject() instanceof OCComponent) + if(this.getCoreObject() instanceof OCComponent) { + boolean isComponent = false; + if (this.worldObj != null) { + Object nodeTE = Compat.getTileStandard(this.worldObj, this.xCoord + side.offsetX, this.yCoord + side.offsetY, this.zCoord + side.offsetZ); + if (nodeTE instanceof TileEntityProxyCombo) { + TileEntityProxyCombo proxy = (TileEntityProxyCombo)nodeTE; + if (proxy.getCoreObject() == this.getCoreObject()) isComponent = true; + } else if (nodeTE == this.getCoreObject()) { + isComponent = true; + } + } return (this.getBlockMetadata() >= 6 && this.getBlockMetadata() <= 11) && (power || fluid) && - ((OCComponent) this.getCoreObject()).canConnectNode(side); + ((OCComponent) this.getCoreObject()).canConnectNode(side) && + !isComponent; + } return OCComponent.super.canConnectNode(null); }