mirror of
https://github.com/HbmMods/Hbm-s-Nuclear-Tech-GIT.git
synced 2026-01-25 10:32:49 +00:00
Merge pull request #2661 from Voxelstice/oc-comp-fix
OC connection with multiblocks bug fix
This commit is contained in:
commit
69c1f49f55
@ -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);
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user