mirror of
https://github.com/Ellpeck/ActuallyAdditions.git
synced 2024-11-22 15:18:34 +01:00
Made Filters be consumed when placing them into filter slots
This commit is contained in:
parent
b8fb63378c
commit
348b3521f6
10 changed files with 68 additions and 62 deletions
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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();
|
||||
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;
|
||||
}
|
||||
|
||||
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());
|
||||
}
|
||||
//Put the current Item as a filter
|
||||
else{
|
||||
if(StackUtil.isValid(heldStack)){
|
||||
ItemStack stack = heldStack.copy();
|
||||
stack = StackUtil.setStackSize(stack, 1);
|
||||
this.putStack(stack);
|
||||
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));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return StackUtil.getNull();
|
||||
public static boolean isFilter(ItemStack stack){
|
||||
return StackUtil.isValid(stack) && stack.getItem() instanceof ItemFilter;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -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++){
|
||||
|
|
|
@ -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,11 +233,11 @@ 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");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void readSyncableNBT(NBTTagCompound compound, NBTType type){
|
||||
|
@ -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");
|
||||
}
|
||||
|
||||
super.readSyncableNBT(compound, type);
|
||||
}
|
||||
|
||||
|
|
|
@ -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,20 +44,18 @@ 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");
|
||||
}
|
||||
}
|
||||
|
||||
@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");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onButtonPressed(int buttonID, EntityPlayer player){
|
||||
|
@ -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);
|
||||
|
||||
|
|
|
@ -36,18 +36,16 @@ 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");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void readSyncableNBT(NBTTagCompound compound, NBTType type){
|
||||
super.readSyncableNBT(compound, type);
|
||||
if(type != NBTType.SAVE_BLOCK){
|
||||
|
||||
this.filter.readFromNBT(compound, "Filter");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateEntity(){
|
||||
|
|
Loading…
Reference in a new issue