here's hoping this doesnt break anything else

OC connection with multiblocks bug fix
This commit is contained in:
Voxelstice 2026-01-17 10:42:19 +03:00
parent 7664cacd2f
commit 7b18634b34

View File

@ -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);
}