diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerBag.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerBag.java index 65060ca01..7d90be557 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerBag.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerBag.java @@ -191,9 +191,8 @@ public class ContainerBag extends Container implements IButtonReactor{ @Override public ItemStack slotClick(int slotId, int dragType, ClickType clickTypeIn, EntityPlayer player){ - if(slotId >= 0 && slotId < this.inventorySlots.size() && this.getSlot(slotId) instanceof SlotFilter){ - //Calls the Filter's SlotClick function - return ((SlotFilter)this.getSlot(slotId)).slotClick(player); + if(SlotFilter.checkFilter(this, slotId, player)){ + return StackUtil.getNull(); } else if(clickTypeIn == ClickType.SWAP && dragType == this.inventory.currentItem){ return null; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFilter.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFilter.java index 892ccc38d..75f7f744b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFilter.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerFilter.java @@ -58,7 +58,7 @@ public class ContainerFilter extends Container{ } ItemStack stack = inventory.getCurrentItem(); - if(StackUtil.isValid(stack) && stack.getItem() instanceof ItemFilter){ + if(SlotFilter.isFilter(stack)){ ItemDrill.loadSlotsFromNBT(this.filterInventory, inventory.getCurrentItem()); } } @@ -112,9 +112,8 @@ public class ContainerFilter extends Container{ @Override public ItemStack slotClick(int slotId, int dragType, ClickType clickTypeIn, EntityPlayer player){ - if(slotId >= 0 && slotId < this.inventorySlots.size() && this.getSlot(slotId) instanceof SlotFilter){ - //Calls the Filter's SlotClick function - return ((SlotFilter)this.getSlot(slotId)).slotClick(player); + if(SlotFilter.checkFilter(this, slotId, player)){ + return StackUtil.getNull(); } else if(clickTypeIn == ClickType.SWAP && dragType == this.inventory.currentItem){ return null; @@ -127,7 +126,7 @@ public class ContainerFilter extends Container{ @Override public void onContainerClosed(EntityPlayer player){ ItemStack stack = this.inventory.getCurrentItem(); - if(StackUtil.isValid(stack) && stack.getItem() instanceof ItemFilter){ + if(SlotFilter.isFilter(stack)){ ItemDrill.writeSlotsToNBT(this.filterInventory, this.inventory.getCurrentItem()); } super.onContainerClosed(player); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerInputter.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerInputter.java index 06bbd4096..f9110dd90 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerInputter.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerInputter.java @@ -106,9 +106,8 @@ public class ContainerInputter extends Container{ @Override public ItemStack slotClick(int slotId, int dragType, ClickType clickTypeIn, EntityPlayer player){ - if(slotId >= 0 && slotId < this.inventorySlots.size() && this.getSlot(slotId) instanceof SlotFilter){ - //Calls the Filter's SlotClick function - return ((SlotFilter)this.getSlot(slotId)).slotClick(player); + if(SlotFilter.checkFilter(this, slotId, player)){ + return StackUtil.getNull(); } else{ return super.slotClick(slotId, dragType, clickTypeIn, player); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerLaserRelayItemWhitelist.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerLaserRelayItemWhitelist.java index 940acb1d5..bc737540e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerLaserRelayItemWhitelist.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerLaserRelayItemWhitelist.java @@ -94,9 +94,8 @@ public class ContainerLaserRelayItemWhitelist extends Container{ @Override public ItemStack slotClick(int slotId, int dragType, ClickType clickTypeIn, EntityPlayer player){ - if(slotId >= 0 && slotId < this.inventorySlots.size() && this.getSlot(slotId) instanceof SlotFilter){ - //Calls the Filter's SlotClick function - return ((SlotFilter)this.getSlot(slotId)).slotClick(player); + if(SlotFilter.checkFilter(this, slotId, player)){ + return StackUtil.getNull(); } else{ return super.slotClick(slotId, dragType, clickTypeIn, player); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerRangedCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerRangedCollector.java index b0108fc96..239c77453 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerRangedCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/ContainerRangedCollector.java @@ -101,9 +101,8 @@ public class ContainerRangedCollector extends Container{ @Override public ItemStack slotClick(int slotId, int dragType, ClickType clickTypeIn, EntityPlayer player){ - if(slotId >= 0 && slotId < this.inventorySlots.size() && this.getSlot(slotId) instanceof SlotFilter){ - //Calls the Filter's SlotClick function - return ((SlotFilter)this.getSlot(slotId)).slotClick(player); + if(SlotFilter.checkFilter(this, slotId, player)){ + return StackUtil.getNull(); } else{ return super.slotClick(slotId, dragType, clickTypeIn, player); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/slot/SlotFilter.java b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/slot/SlotFilter.java index 5adf000e0..f316ce00f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/slot/SlotFilter.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/inventory/slot/SlotFilter.java @@ -10,9 +10,12 @@ package de.ellpeck.actuallyadditions.mod.inventory.slot; +import de.ellpeck.actuallyadditions.mod.items.ItemFilter; import de.ellpeck.actuallyadditions.mod.tile.FilterSettings; import de.ellpeck.actuallyadditions.mod.util.StackUtil; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.ClickType; +import net.minecraft.inventory.Container; import net.minecraft.inventory.IInventory; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; @@ -27,30 +30,41 @@ public class SlotFilter extends Slot{ this(inv.filterInventory, slot, x, y); } - /** - * Gets called when the Filter Slot is clicked - * Needs to be called in slotClick() in the Container! - * - * @param player The player - * @return Nothing, as the Item didn't really get "transferred" - */ - public ItemStack slotClick(EntityPlayer player){ - ItemStack heldStack = player.inventory.getItemStack(); - - //Delete the stack in the inventory - if(StackUtil.isValid(this.getStack()) && !StackUtil.isValid(heldStack)){ - this.putStack(StackUtil.getNull()); - } - //Put the current Item as a filter - else{ - if(StackUtil.isValid(heldStack)){ - ItemStack stack = heldStack.copy(); - stack = StackUtil.setStackSize(stack, 1); - this.putStack(stack); + public static boolean checkFilter(Container container, int slotId, EntityPlayer player){ + if(slotId >= 0 && slotId < container.inventorySlots.size()){ + Slot slot = container.getSlot(slotId); + if(slot instanceof SlotFilter){ + ((SlotFilter)slot).slotClick(player); + return true; } } + return false; + } - return StackUtil.getNull(); + private void slotClick(EntityPlayer player){ + ItemStack heldStack = player.inventory.getItemStack(); + ItemStack stackInSlot = this.getStack(); + + if(StackUtil.isValid(stackInSlot) && !StackUtil.isValid(heldStack)){ + if(isFilter(stackInSlot)){ + player.inventory.setItemStack(stackInSlot); + } + + this.putStack(StackUtil.getNull()); + } + else if(StackUtil.isValid(heldStack)){ + if(!isFilter(stackInSlot)){ + this.putStack(StackUtil.setStackSize(heldStack.copy(), 1)); + + if(isFilter(heldStack)){ + player.inventory.setItemStack(StackUtil.addStackSize(heldStack, -1)); + } + } + } + } + + public static boolean isFilter(ItemStack stack){ + return StackUtil.isValid(stack) && stack.getItem() instanceof ItemFilter; } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/FilterSettings.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/FilterSettings.java index d8d0e2f0e..eae95b5a8 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/FilterSettings.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/FilterSettings.java @@ -11,6 +11,7 @@ package de.ellpeck.actuallyadditions.mod.tile; import de.ellpeck.actuallyadditions.mod.inventory.ContainerFilter; +import de.ellpeck.actuallyadditions.mod.inventory.slot.SlotFilter; import de.ellpeck.actuallyadditions.mod.items.ItemDrill; import de.ellpeck.actuallyadditions.mod.items.ItemFilter; import de.ellpeck.actuallyadditions.mod.util.StackUtil; @@ -70,7 +71,7 @@ public class FilterSettings{ if(areEqualEnough(slot, stack, meta, nbt, mod, oredict)){ return whitelist; } - else if(slot.getItem() instanceof ItemFilter){ + else if(SlotFilter.isFilter(slot)){ IInventory inv = new InventoryBasic("Filter", false, ContainerFilter.SLOT_AMOUNT); ItemDrill.loadSlotsFromNBT(inv, slot); for(int k = 0; k < inv.getSizeInventory(); k++){ diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInputter.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInputter.java index 5ddb356f4..91092af7f 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInputter.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInputter.java @@ -21,7 +21,6 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumFacing; -import net.minecraft.util.NonNullList; import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; @@ -234,10 +233,10 @@ public class TileEntityInputter extends TileEntityInventoryBase implements IButt compound.setInteger("SideToPull", this.sideToPull); compound.setInteger("SlotToPull", this.slotToPullStart); compound.setInteger("SlotToPullEnd", this.slotToPullEnd); - - this.leftFilter.writeToNBT(compound, "LeftFilter"); - this.rightFilter.writeToNBT(compound, "RightFilter"); } + + this.leftFilter.writeToNBT(compound, "LeftFilter"); + this.rightFilter.writeToNBT(compound, "RightFilter"); } @Override @@ -249,10 +248,11 @@ public class TileEntityInputter extends TileEntityInventoryBase implements IButt this.sideToPull = compound.getInteger("SideToPull"); this.slotToPullStart = compound.getInteger("SlotToPull"); this.slotToPullEnd = compound.getInteger("SlotToPullEnd"); - - this.leftFilter.readFromNBT(compound, "LeftFilter"); - this.rightFilter.readFromNBT(compound, "RightFilter"); } + + this.leftFilter.readFromNBT(compound, "LeftFilter"); + this.rightFilter.readFromNBT(compound, "RightFilter"); + super.readSyncableNBT(compound, type); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItemWhitelist.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItemWhitelist.java index d6cbb1a4a..172eed172 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItemWhitelist.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelayItemWhitelist.java @@ -11,8 +11,8 @@ package de.ellpeck.actuallyadditions.mod.tile; import de.ellpeck.actuallyadditions.mod.inventory.ContainerFilter; +import de.ellpeck.actuallyadditions.mod.inventory.slot.SlotFilter; import de.ellpeck.actuallyadditions.mod.items.ItemDrill; -import de.ellpeck.actuallyadditions.mod.items.ItemFilter; import de.ellpeck.actuallyadditions.mod.network.gui.IButtonReactor; import de.ellpeck.actuallyadditions.mod.util.StackUtil; import net.minecraft.entity.player.EntityPlayer; @@ -44,19 +44,17 @@ public class TileEntityLaserRelayItemWhitelist extends TileEntityLaserRelayItem @Override public void writeSyncableNBT(NBTTagCompound compound, NBTType type){ super.writeSyncableNBT(compound, type); - if(type != NBTType.SAVE_BLOCK){ - this.leftFilter.writeToNBT(compound, "LeftFilter"); - this.rightFilter.writeToNBT(compound, "RightFilter"); - } + + this.leftFilter.writeToNBT(compound, "LeftFilter"); + this.rightFilter.writeToNBT(compound, "RightFilter"); } @Override public void readSyncableNBT(NBTTagCompound compound, NBTType type){ super.readSyncableNBT(compound, type); - if(type != NBTType.SAVE_BLOCK){ - this.leftFilter.readFromNBT(compound, "LeftFilter"); - this.rightFilter.readFromNBT(compound, "RightFilter"); - } + + this.leftFilter.readFromNBT(compound, "LeftFilter"); + this.rightFilter.readFromNBT(compound, "RightFilter"); } @Override @@ -84,7 +82,7 @@ public class TileEntityLaserRelayItemWhitelist extends TileEntityLaserRelayItem for(int k = 0; k < usedSettings.filterInventory.getSizeInventory(); k++){ ItemStack slot = usedSettings.filterInventory.getStackInSlot(k); if(StackUtil.isValid(slot)){ - if(slot.getItem() instanceof ItemFilter){ + if(SlotFilter.isFilter(slot)){ IInventory inv = new InventoryBasic("Filter", false, ContainerFilter.SLOT_AMOUNT); ItemDrill.loadSlotsFromNBT(inv, slot); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityRangedCollector.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityRangedCollector.java index ec41bc70c..bf938a11d 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityRangedCollector.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityRangedCollector.java @@ -36,17 +36,15 @@ public class TileEntityRangedCollector extends TileEntityInventoryBase implement @Override public void writeSyncableNBT(NBTTagCompound compound, NBTType type){ super.writeSyncableNBT(compound, type); - if(type != NBTType.SAVE_BLOCK){ - this.filter.writeToNBT(compound, "Filter"); - } + + this.filter.writeToNBT(compound, "Filter"); } @Override public void readSyncableNBT(NBTTagCompound compound, NBTType type){ super.readSyncableNBT(compound, type); - if(type != NBTType.SAVE_BLOCK){ - this.filter.readFromNBT(compound, "Filter"); - } + + this.filter.readFromNBT(compound, "Filter"); } @Override