Merge pull request #2244 from abel1502/abel-suspend-inserter

Allow stopping conveyor inserters with redstone
This commit is contained in:
HbmMods 2025-06-29 10:23:24 +02:00 committed by GitHub
commit 42d45506bd
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 50 additions and 47 deletions

View File

@ -68,17 +68,19 @@ public class CraneInserter extends BlockCraneBase implements IEnterableBlock {
ItemStack toAdd = entity.getItemStack().copy();
int[] access = null;
if (!world.isBlockIndirectlyGettingPowered(x, y, z)) {
int[] access = null;
if(te instanceof ISidedInventory) {
ISidedInventory sided = (ISidedInventory) te;
access = InventoryUtil.masquerade(sided, outputDirection.getOpposite().ordinal());
}
if(te instanceof ISidedInventory) {
ISidedInventory sided = (ISidedInventory) te;
access = InventoryUtil.masquerade(sided, outputDirection.getOpposite().ordinal());
}
if(te instanceof IInventory) {
IInventory inv = (IInventory) te;
if(te instanceof IInventory) {
IInventory inv = (IInventory) te;
addToInventory(inv, access, toAdd, outputDirection.getOpposite().ordinal());
addToInventory(inv, access, toAdd, outputDirection.getOpposite().ordinal());
}
}
TileEntityCraneInserter inserter = null;

View File

@ -40,48 +40,49 @@ public class TileEntityCraneInserter extends TileEntityCraneBase implements IGUI
super.updateEntity();
if(!worldObj.isRemote) {
ForgeDirection outputSide = getOutputSide();
TileEntity te = worldObj.getTileEntity(xCoord + outputSide.offsetX, yCoord + outputSide.offsetY, zCoord + outputSide.offsetZ);
int[] access = null;
if(te instanceof ISidedInventory) {
ISidedInventory sided = (ISidedInventory) te;
//access = sided.getAccessibleSlotsFromSide(dir.ordinal());
access = InventoryUtil.masquerade(sided, outputSide.getOpposite().ordinal());
}
if(te instanceof IInventory) {
for(int i = 0; i < slots.length; i++) {
ItemStack stack = slots[i];
if(stack != null) {
ItemStack ret = CraneInserter.addToInventory((IInventory) te, access, stack.copy(), outputSide.getOpposite().ordinal());
if(ret == null || ret.stackSize != stack.stackSize) {
slots[i] = ret;
this.markDirty();
return;
}
}
if (!this.worldObj.isBlockIndirectlyGettingPowered(xCoord, yCoord, zCoord)) {ForgeDirection outputSide = getOutputSide();
TileEntity te = worldObj.getTileEntity(xCoord + outputSide.offsetX, yCoord + outputSide.offsetY, zCoord + outputSide.offsetZ);
int[] access = null;
if(te instanceof ISidedInventory) {
ISidedInventory sided = (ISidedInventory) te;
//access = sided.getAccessibleSlotsFromSide(dir.ordinal());
access = InventoryUtil.masquerade(sided, outputSide.getOpposite().ordinal());
}
//if the previous operation fails, repeat but use single items instead of the whole stack instead
//this should fix cases where the inserter can't insert into something that has a stack size limitation
for(int i = 0; i < slots.length; i++) {
ItemStack stack = slots[i];
if(stack != null) {
stack = stack.copy();
stack.stackSize = 1;
ItemStack ret = CraneInserter.addToInventory((IInventory) te, access, stack.copy(), outputSide.getOpposite().ordinal());
if(te instanceof IInventory) {
for(int i = 0; i < slots.length; i++) {
if(ret == null || ret.stackSize != stack.stackSize) {
this.decrStackSize(i, 1);
this.markDirty();
return;
ItemStack stack = slots[i];
if(stack != null) {
ItemStack ret = CraneInserter.addToInventory((IInventory) te, access, stack.copy(), outputSide.getOpposite().ordinal());
if(ret == null || ret.stackSize != stack.stackSize) {
slots[i] = ret;
this.markDirty();
return;
}
}
}
//if the previous operation fails, repeat but use single items instead of the whole stack instead
//this should fix cases where the inserter can't insert into something that has a stack size limitation
for(int i = 0; i < slots.length; i++) {
ItemStack stack = slots[i];
if(stack != null) {
stack = stack.copy();
stack.stackSize = 1;
ItemStack ret = CraneInserter.addToInventory((IInventory) te, access, stack.copy(), outputSide.getOpposite().ordinal());
if(ret == null || ret.stackSize != stack.stackSize) {
this.decrStackSize(i, 1);
this.markDirty();
return;
}
}
}
}