Added Crate filtering Ctrl + click with items to set filter

This commit is contained in:
Robert S 2014-04-14 06:23:51 -04:00
parent 43de4351f0
commit 32119744d3
2 changed files with 36 additions and 7 deletions

View file

@ -148,20 +148,33 @@ public class BlockCrate extends BlockTile
if (ControlKeyModifer.isControlDown(player))
{
tryEject(tile, player, world.getWorldTime() - tile.prevClickTime < 10);
if (player.getCurrentEquippedItem() != null && (!player.getCurrentEquippedItem().getItem().isDamageable() || player.getCurrentEquippedItem().getItem().getDamage(player.getCurrentEquippedItem()) > 0))
{
ItemStack filter = player.getCurrentEquippedItem().copy();
filter.stackSize = 0;
tile.setFilter(filter);
}
else
{
tile.setFilter(null);
}
}
else
{
/* Creative mode way to fill crates to max in one click */
ItemStack current = player.inventory.getCurrentItem();
if (side == 1 && player.capabilities.isCreativeMode)
if (player.capabilities.isCreativeMode)
{
if (current != null && tile.getSampleStack() == null)
if (side == 1 && current != null && tile.getSampleStack() == null)
{
ItemStack cStack = current.copy();
cStack.stackSize = TileCrate.getSlotCount(world.getBlockMetadata(x, y, z)) * 64;
addStackToCrate(tile, cStack);
}
else if (hitY >= 0.5)
{
tryEject(tile, player, world.getWorldTime() - tile.prevClickTime < 10);
}
}
tryInsert(tile, player, world.getWorldTime() - tile.prevClickTime < 10);

View file

@ -1,14 +1,17 @@
package resonantinduction.archaic.crate;
import java.util.HashSet;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.network.packet.Packet;
import net.minecraft.util.ChatMessageComponent;
import net.minecraftforge.common.ForgeDirection;
import net.minecraftforge.oredict.OreDictionary;
import resonantinduction.core.ResonantInduction;
import resonantinduction.core.prefab.imprint.ItemImprint;
import calclavia.api.resonantinduction.IFilterable;
import calclavia.lib.network.IPacketReceiver;
import calclavia.lib.network.PacketHandler;
import calclavia.lib.prefab.tile.TileExternalInventory;
@ -21,19 +24,20 @@ import com.google.common.io.ByteArrayDataInput;
* TODO: Add filter-locking feature. Put filter in, locks the crate to only use that item.
*
* @author DarkGuardsman */
public class TileCrate extends TileExternalInventory implements IPacketReceiver, IExtendedStorage
public class TileCrate extends TileExternalInventory implements IPacketReceiver, IExtendedStorage, IFilterable
{
/** max meta size of the crate */
public static final int maxSize = 2;
/** delay from last click */
public long prevClickTime = -1000;
/** Check to see if oreName items can be force stacked */
public boolean oreFilterEnabled = false;
/** Collective total stack of all inv slots */
private ItemStack sampleStack;
private ItemStack filterStack;
@Override
public InventoryCrate getInventory()
@ -78,7 +82,7 @@ public class TileCrate extends TileExternalInventory implements IPacketReceiver,
}
}
if (newSampleStack == null || newSampleStack.itemID == 0 || newSampleStack.stackSize <= 0)
this.sampleStack = null;
this.sampleStack = this.getFilter() != null ? this.getFilter().copy() : null;
else
this.sampleStack = newSampleStack.copy();
@ -257,4 +261,16 @@ public class TileCrate extends TileExternalInventory implements IPacketReceiver,
nbt.setBoolean("oreFilter", this.oreFilterEnabled);
}
@Override
public void setFilter(ItemStack filter)
{
this.filterStack = filter;
}
@Override
public ItemStack getFilter()
{
return this.filterStack;
}
}