make filters be consumed when putting them into filter slots

This commit is contained in:
Ellpeck 2016-12-27 12:08:00 +01:00
parent 7303b3b68c
commit 8e3ea19bcd
10 changed files with 67 additions and 60 deletions

View file

@ -192,9 +192,8 @@ public class ContainerBag extends Container implements IButtonReactor{
@Override @Override
public ItemStack slotClick(int slotId, int dragType, ClickType clickTypeIn, EntityPlayer player){ public ItemStack slotClick(int slotId, int dragType, ClickType clickTypeIn, EntityPlayer player){
if(slotId >= 0 && slotId < this.inventorySlots.size() && this.getSlot(slotId) instanceof SlotFilter){ if(SlotFilter.checkFilter(this, slotId, player)){
//Calls the Filter's SlotClick function return StackUtil.getNull();
return ((SlotFilter)this.getSlot(slotId)).slotClick(player);
} }
else if(clickTypeIn == ClickType.SWAP && dragType == this.inventory.currentItem){ else if(clickTypeIn == ClickType.SWAP && dragType == this.inventory.currentItem){
return null; return null;

View file

@ -59,7 +59,7 @@ public class ContainerFilter extends Container{
} }
ItemStack stack = inventory.getCurrentItem(); ItemStack stack = inventory.getCurrentItem();
if(StackUtil.isValid(stack) && stack.getItem() instanceof ItemFilter){ if(SlotFilter.isFilter(stack)){
ItemDrill.loadSlotsFromNBT(this.filterInventory.slots, inventory.getCurrentItem()); ItemDrill.loadSlotsFromNBT(this.filterInventory.slots, inventory.getCurrentItem());
} }
} }
@ -113,9 +113,8 @@ public class ContainerFilter extends Container{
@Override @Override
public ItemStack slotClick(int slotId, int dragType, ClickType clickTypeIn, EntityPlayer player){ public ItemStack slotClick(int slotId, int dragType, ClickType clickTypeIn, EntityPlayer player){
if(slotId >= 0 && slotId < this.inventorySlots.size() && this.getSlot(slotId) instanceof SlotFilter){ if(SlotFilter.checkFilter(this, slotId, player)){
//Calls the Filter's SlotClick function return StackUtil.getNull();
return ((SlotFilter)this.getSlot(slotId)).slotClick(player);
} }
else if(clickTypeIn == ClickType.SWAP && dragType == this.inventory.currentItem){ else if(clickTypeIn == ClickType.SWAP && dragType == this.inventory.currentItem){
return null; return null;
@ -128,7 +127,7 @@ public class ContainerFilter extends Container{
@Override @Override
public void onContainerClosed(EntityPlayer player){ public void onContainerClosed(EntityPlayer player){
ItemStack stack = this.inventory.getCurrentItem(); ItemStack stack = this.inventory.getCurrentItem();
if(StackUtil.isValid(stack) && stack.getItem() instanceof ItemFilter){ if(SlotFilter.isFilter(stack)){
ItemDrill.writeSlotsToNBT(this.filterInventory.slots, this.inventory.getCurrentItem()); ItemDrill.writeSlotsToNBT(this.filterInventory.slots, this.inventory.getCurrentItem());
} }
super.onContainerClosed(player); super.onContainerClosed(player);

View file

@ -106,9 +106,8 @@ public class ContainerInputter extends Container{
@Override @Override
public ItemStack slotClick(int slotId, int dragType, ClickType clickTypeIn, EntityPlayer player){ public ItemStack slotClick(int slotId, int dragType, ClickType clickTypeIn, EntityPlayer player){
if(slotId >= 0 && slotId < this.inventorySlots.size() && this.getSlot(slotId) instanceof SlotFilter){ if(SlotFilter.checkFilter(this, slotId, player)){
//Calls the Filter's SlotClick function return StackUtil.getNull();
return ((SlotFilter)this.getSlot(slotId)).slotClick(player);
} }
else{ else{
return super.slotClick(slotId, dragType, clickTypeIn, player); return super.slotClick(slotId, dragType, clickTypeIn, player);

View file

@ -94,9 +94,8 @@ public class ContainerLaserRelayItemWhitelist extends Container{
@Override @Override
public ItemStack slotClick(int slotId, int dragType, ClickType clickTypeIn, EntityPlayer player){ public ItemStack slotClick(int slotId, int dragType, ClickType clickTypeIn, EntityPlayer player){
if(slotId >= 0 && slotId < this.inventorySlots.size() && this.getSlot(slotId) instanceof SlotFilter){ if(SlotFilter.checkFilter(this, slotId, player)){
//Calls the Filter's SlotClick function return StackUtil.getNull();
return ((SlotFilter)this.getSlot(slotId)).slotClick(player);
} }
else{ else{
return super.slotClick(slotId, dragType, clickTypeIn, player); return super.slotClick(slotId, dragType, clickTypeIn, player);

View file

@ -101,9 +101,8 @@ public class ContainerRangedCollector extends Container{
@Override @Override
public ItemStack slotClick(int slotId, int dragType, ClickType clickTypeIn, EntityPlayer player){ public ItemStack slotClick(int slotId, int dragType, ClickType clickTypeIn, EntityPlayer player){
if(slotId >= 0 && slotId < this.inventorySlots.size() && this.getSlot(slotId) instanceof SlotFilter){ if(SlotFilter.checkFilter(this, slotId, player)){
//Calls the Filter's SlotClick function return StackUtil.getNull();
return ((SlotFilter)this.getSlot(slotId)).slotClick(player);
} }
else{ else{
return super.slotClick(slotId, dragType, clickTypeIn, player); return super.slotClick(slotId, dragType, clickTypeIn, player);

View file

@ -10,8 +10,10 @@
package de.ellpeck.actuallyadditions.mod.inventory.slot; package de.ellpeck.actuallyadditions.mod.inventory.slot;
import de.ellpeck.actuallyadditions.mod.items.ItemFilter;
import de.ellpeck.actuallyadditions.mod.util.StackUtil; import de.ellpeck.actuallyadditions.mod.util.StackUtil;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.Container;
import net.minecraft.inventory.IInventory; import net.minecraft.inventory.IInventory;
import net.minecraft.inventory.Slot; import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
@ -22,30 +24,41 @@ public class SlotFilter extends Slot{
super(inv, slot, x, y); super(inv, slot, x, y);
} }
/** public static boolean checkFilter(Container container, int slotId, EntityPlayer player){
* Gets called when the Filter Slot is clicked if(slotId >= 0 && slotId < container.inventorySlots.size()){
* Needs to be called in slotClick() in the Container! Slot slot = container.getSlot(slotId);
* if(slot instanceof SlotFilter){
* @param player The player ((SlotFilter)slot).slotClick(player);
* @return Nothing, as the Item didn't really get "transferred" return true;
*/ }
public ItemStack slotClick(EntityPlayer player){ }
ItemStack heldStack = player.inventory.getItemStack(); return false;
}
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);
}
//Delete the stack in the inventory
if(StackUtil.isValid(this.getStack()) && !StackUtil.isValid(heldStack)){
this.putStack(StackUtil.getNull()); this.putStack(StackUtil.getNull());
} }
//Put the current Item as a filter else if(StackUtil.isValid(heldStack)){
else{ if(!isFilter(stackInSlot)){
if(StackUtil.isValid(heldStack)){ this.putStack(StackUtil.setStackSize(heldStack.copy(), 1));
ItemStack stack = heldStack.copy();
stack = StackUtil.setStackSize(stack, 1); if(isFilter(heldStack)){
this.putStack(stack); player.inventory.setItemStack(StackUtil.addStackSize(heldStack, -1));
}
}
} }
} }
return null; public static boolean isFilter(ItemStack stack){
return StackUtil.isValid(stack) && stack.getItem() instanceof ItemFilter;
} }
@Override @Override

View file

@ -11,6 +11,7 @@
package de.ellpeck.actuallyadditions.mod.tile; package de.ellpeck.actuallyadditions.mod.tile;
import de.ellpeck.actuallyadditions.mod.inventory.ContainerFilter; 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.ItemDrill;
import de.ellpeck.actuallyadditions.mod.items.ItemFilter; import de.ellpeck.actuallyadditions.mod.items.ItemFilter;
import de.ellpeck.actuallyadditions.mod.util.StackUtil; import de.ellpeck.actuallyadditions.mod.util.StackUtil;
@ -65,7 +66,7 @@ public class FilterSettings{
if(StackUtil.isValid(stack)){ if(StackUtil.isValid(stack)){
for(int i = startSlot; i < endSlot; i++){ for(int i = startSlot; i < endSlot; i++){
if(StackUtil.isValid(slots[i])){ if(StackUtil.isValid(slots[i])){
if(slots[i].getItem() instanceof ItemFilter){ if(SlotFilter.isFilter(slots[i])){
ItemStack[] filterSlots = new ItemStack[ContainerFilter.SLOT_AMOUNT]; ItemStack[] filterSlots = new ItemStack[ContainerFilter.SLOT_AMOUNT];
ItemDrill.loadSlotsFromNBT(filterSlots, slots[i]); ItemDrill.loadSlotsFromNBT(filterSlots, slots[i]);
if(filterSlots != null && filterSlots.length > 0){ if(filterSlots != null && filterSlots.length > 0){

View file

@ -231,11 +231,11 @@ public class TileEntityInputter extends TileEntityInventoryBase implements IButt
compound.setInteger("SideToPull", this.sideToPull); compound.setInteger("SideToPull", this.sideToPull);
compound.setInteger("SlotToPull", this.slotToPullStart); compound.setInteger("SlotToPull", this.slotToPullStart);
compound.setInteger("SlotToPullEnd", this.slotToPullEnd); compound.setInteger("SlotToPullEnd", this.slotToPullEnd);
}
this.leftFilter.writeToNBT(compound, "LeftFilter"); this.leftFilter.writeToNBT(compound, "LeftFilter");
this.rightFilter.writeToNBT(compound, "RightFilter"); this.rightFilter.writeToNBT(compound, "RightFilter");
} }
}
@Override @Override
public void readSyncableNBT(NBTTagCompound compound, NBTType type){ public void readSyncableNBT(NBTTagCompound compound, NBTType type){
@ -246,10 +246,11 @@ public class TileEntityInputter extends TileEntityInventoryBase implements IButt
this.sideToPull = compound.getInteger("SideToPull"); this.sideToPull = compound.getInteger("SideToPull");
this.slotToPullStart = compound.getInteger("SlotToPull"); this.slotToPullStart = compound.getInteger("SlotToPull");
this.slotToPullEnd = compound.getInteger("SlotToPullEnd"); this.slotToPullEnd = compound.getInteger("SlotToPullEnd");
}
this.leftFilter.readFromNBT(compound, "LeftFilter"); this.leftFilter.readFromNBT(compound, "LeftFilter");
this.rightFilter.readFromNBT(compound, "RightFilter"); this.rightFilter.readFromNBT(compound, "RightFilter");
}
super.readSyncableNBT(compound, type); super.readSyncableNBT(compound, type);
} }

View file

@ -11,6 +11,7 @@
package de.ellpeck.actuallyadditions.mod.tile; package de.ellpeck.actuallyadditions.mod.tile;
import de.ellpeck.actuallyadditions.mod.inventory.ContainerFilter; 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.ItemDrill;
import de.ellpeck.actuallyadditions.mod.items.ItemFilter; import de.ellpeck.actuallyadditions.mod.items.ItemFilter;
import de.ellpeck.actuallyadditions.mod.network.gui.IButtonReactor; import de.ellpeck.actuallyadditions.mod.network.gui.IButtonReactor;
@ -180,11 +181,10 @@ public class TileEntityLaserRelayItemWhitelist extends TileEntityLaserRelayItem
if(type == NBTType.SAVE_TILE){ if(type == NBTType.SAVE_TILE){
TileEntityInventoryBase.saveSlots(this.slots, compound); TileEntityInventoryBase.saveSlots(this.slots, compound);
} }
if(type != NBTType.SAVE_BLOCK){
this.leftFilter.writeToNBT(compound, "LeftFilter"); this.leftFilter.writeToNBT(compound, "LeftFilter");
this.rightFilter.writeToNBT(compound, "RightFilter"); this.rightFilter.writeToNBT(compound, "RightFilter");
} }
}
@Override @Override
public void readSyncableNBT(NBTTagCompound compound, NBTType type){ public void readSyncableNBT(NBTTagCompound compound, NBTType type){
@ -192,11 +192,10 @@ public class TileEntityLaserRelayItemWhitelist extends TileEntityLaserRelayItem
if(type == NBTType.SAVE_TILE){ if(type == NBTType.SAVE_TILE){
TileEntityInventoryBase.loadSlots(this.slots, compound); TileEntityInventoryBase.loadSlots(this.slots, compound);
} }
if(type != NBTType.SAVE_BLOCK){
this.leftFilter.readFromNBT(compound, "LeftFilter"); this.leftFilter.readFromNBT(compound, "LeftFilter");
this.rightFilter.readFromNBT(compound, "RightFilter"); this.rightFilter.readFromNBT(compound, "RightFilter");
} }
}
@Override @Override
public void onButtonPressed(int buttonID, EntityPlayer player){ public void onButtonPressed(int buttonID, EntityPlayer player){
@ -222,7 +221,7 @@ public class TileEntityLaserRelayItemWhitelist extends TileEntityLaserRelayItem
if(!FilterSettings.check(copy, this.slots, usedSettings.startSlot, usedSettings.endSlot, true, usedSettings.respectMeta, usedSettings.respectNBT, usedSettings.respectMod, usedSettings.respectOredict)){ if(!FilterSettings.check(copy, this.slots, usedSettings.startSlot, usedSettings.endSlot, true, usedSettings.respectMeta, usedSettings.respectNBT, usedSettings.respectMod, usedSettings.respectOredict)){
for(int k = usedSettings.startSlot; k < usedSettings.endSlot; k++){ for(int k = usedSettings.startSlot; k < usedSettings.endSlot; k++){
if(StackUtil.isValid(this.slots[k])){ if(StackUtil.isValid(this.slots[k])){
if(this.slots[k].getItem() instanceof ItemFilter){ if(SlotFilter.isFilter(this.slots[k])){
ItemStack[] filterSlots = new ItemStack[ContainerFilter.SLOT_AMOUNT]; ItemStack[] filterSlots = new ItemStack[ContainerFilter.SLOT_AMOUNT];
ItemDrill.loadSlotsFromNBT(filterSlots, this.slots[k]); ItemDrill.loadSlotsFromNBT(filterSlots, this.slots[k]);

View file

@ -37,18 +37,16 @@ public class TileEntityRangedCollector extends TileEntityInventoryBase implement
@Override @Override
public void writeSyncableNBT(NBTTagCompound compound, NBTType type){ public void writeSyncableNBT(NBTTagCompound compound, NBTType type){
super.writeSyncableNBT(compound, type); super.writeSyncableNBT(compound, type);
if(type != NBTType.SAVE_BLOCK){
this.filter.writeToNBT(compound, "Filter"); this.filter.writeToNBT(compound, "Filter");
} }
}
@Override @Override
public void readSyncableNBT(NBTTagCompound compound, NBTType type){ public void readSyncableNBT(NBTTagCompound compound, NBTType type){
super.readSyncableNBT(compound, type); super.readSyncableNBT(compound, type);
if(type != NBTType.SAVE_BLOCK){
this.filter.readFromNBT(compound, "Filter"); this.filter.readFromNBT(compound, "Filter");
} }
}
@Override @Override
public void updateEntity(){ public void updateEntity(){