From 9cd7010c0a3d4021abf7020fe83e75dfbe8a9791 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sun, 27 Mar 2016 13:37:34 +0200 Subject: [PATCH] Allow whitelist / blacklist and filters on destructors --- .../container/ContainerConstructor.java | 17 +-- .../container/ContainerDestructor.java | 10 +- .../container/slot/SlotSpecimenItemBlock.java | 16 +++ .../refinedstorage/gui/GuiDestructor.java | 12 +- .../java/refinedstorage/gui/GuiHandler.java | 2 +- .../refinedstorage/tile/TileConstructor.java | 4 +- .../refinedstorage/tile/TileDestructor.java | 114 ++++++++++++++++-- .../textures/gui/destructor.png | Bin 1788 -> 1807 bytes 8 files changed, 147 insertions(+), 28 deletions(-) create mode 100755 src/main/java/refinedstorage/container/slot/SlotSpecimenItemBlock.java diff --git a/src/main/java/refinedstorage/container/ContainerConstructor.java b/src/main/java/refinedstorage/container/ContainerConstructor.java index 910dfcebb..bd94f4f61 100755 --- a/src/main/java/refinedstorage/container/ContainerConstructor.java +++ b/src/main/java/refinedstorage/container/ContainerConstructor.java @@ -1,28 +1,15 @@ package refinedstorage.container; import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.IInventory; -import net.minecraft.item.ItemBlock; -import net.minecraft.item.ItemStack; -import refinedstorage.container.slot.SlotSpecimen; +import refinedstorage.container.slot.SlotSpecimenItemBlock; import refinedstorage.tile.TileConstructor; public class ContainerConstructor extends ContainerBase { - class SlotConstructor extends SlotSpecimen { - public SlotConstructor(IInventory inventory, int id, int x, int y) { - super(inventory, id, x, y, false); - } - - @Override - public boolean isItemValid(ItemStack stack) { - return stack.getItem() instanceof ItemBlock; - } - } public ContainerConstructor(EntityPlayer player, TileConstructor constructor) { super(player); - addSlotToContainer(new SlotConstructor(constructor.getInventory(), 0, 80, 20)); + addSlotToContainer(new SlotSpecimenItemBlock(constructor.getInventory(), 0, 80, 20)); addPlayerInventory(8, 55); } diff --git a/src/main/java/refinedstorage/container/ContainerDestructor.java b/src/main/java/refinedstorage/container/ContainerDestructor.java index ce722492e..e97a4af5c 100755 --- a/src/main/java/refinedstorage/container/ContainerDestructor.java +++ b/src/main/java/refinedstorage/container/ContainerDestructor.java @@ -1,11 +1,17 @@ package refinedstorage.container; import net.minecraft.entity.player.EntityPlayer; +import refinedstorage.container.slot.SlotSpecimenItemBlock; +import refinedstorage.tile.TileDestructor; public class ContainerDestructor extends ContainerBase { - public ContainerDestructor(EntityPlayer player) { + public ContainerDestructor(EntityPlayer player, TileDestructor destructor) { super(player); - addPlayerInventory(8, 50); + for (int i = 0; i < 9; ++i) { + addSlotToContainer(new SlotSpecimenItemBlock(destructor.getInventory(), i, 8 + (18 * i), 20)); + } + + addPlayerInventory(8, 55); } } diff --git a/src/main/java/refinedstorage/container/slot/SlotSpecimenItemBlock.java b/src/main/java/refinedstorage/container/slot/SlotSpecimenItemBlock.java new file mode 100755 index 000000000..104875755 --- /dev/null +++ b/src/main/java/refinedstorage/container/slot/SlotSpecimenItemBlock.java @@ -0,0 +1,16 @@ +package refinedstorage.container.slot; + +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; + +public class SlotSpecimenItemBlock extends SlotSpecimen { + public SlotSpecimenItemBlock(IInventory inventory, int id, int x, int y) { + super(inventory, id, x, y, false); + } + + @Override + public boolean isItemValid(ItemStack stack) { + return stack.getItem() instanceof ItemBlock; + } +} diff --git a/src/main/java/refinedstorage/gui/GuiDestructor.java b/src/main/java/refinedstorage/gui/GuiDestructor.java index 247a1ed0b..1e19a2fd8 100755 --- a/src/main/java/refinedstorage/gui/GuiDestructor.java +++ b/src/main/java/refinedstorage/gui/GuiDestructor.java @@ -1,14 +1,17 @@ package refinedstorage.gui; import refinedstorage.container.ContainerDestructor; +import refinedstorage.gui.sidebutton.SideButtonCompare; +import refinedstorage.gui.sidebutton.SideButtonMode; import refinedstorage.gui.sidebutton.SideButtonRedstoneMode; import refinedstorage.tile.TileDestructor; +import refinedstorage.util.InventoryUtils; public class GuiDestructor extends GuiBase { private TileDestructor destructor; public GuiDestructor(ContainerDestructor container, TileDestructor destructor) { - super(container, 176, 131); + super(container, 176, 137); this.destructor = destructor; } @@ -16,6 +19,11 @@ public class GuiDestructor extends GuiBase { @Override public void init(int x, int y) { addSideButton(new SideButtonRedstoneMode(destructor)); + + addSideButton(new SideButtonMode(destructor)); + + addSideButton(new SideButtonCompare(destructor, InventoryUtils.COMPARE_DAMAGE)); + addSideButton(new SideButtonCompare(destructor, InventoryUtils.COMPARE_NBT)); } @Override @@ -32,6 +40,6 @@ public class GuiDestructor extends GuiBase { @Override public void drawForeground(int mouseX, int mouseY) { drawString(7, 7, t("gui.refinedstorage:destructor")); - drawString(7, 39, t("container.inventory")); + drawString(7, 43, t("container.inventory")); } } diff --git a/src/main/java/refinedstorage/gui/GuiHandler.java b/src/main/java/refinedstorage/gui/GuiHandler.java index 9ff5d33df..c0bea9630 100755 --- a/src/main/java/refinedstorage/gui/GuiHandler.java +++ b/src/main/java/refinedstorage/gui/GuiHandler.java @@ -31,7 +31,7 @@ public class GuiHandler implements IGuiHandler { case RefinedStorageGui.WIRELESS_TRANSMITTER: return new ContainerWirelessTransmitter(player, (TileWirelessTransmitter) tile); case RefinedStorageGui.DESTRUCTOR: - return new ContainerDestructor(player); + return new ContainerDestructor(player, (TileDestructor) tile); case RefinedStorageGui.CONSTRUCTOR: return new ContainerConstructor(player, (TileConstructor) tile); case RefinedStorageGui.STORAGE: diff --git a/src/main/java/refinedstorage/tile/TileConstructor.java b/src/main/java/refinedstorage/tile/TileConstructor.java index eb69f69ed..f138c2cf0 100755 --- a/src/main/java/refinedstorage/tile/TileConstructor.java +++ b/src/main/java/refinedstorage/tile/TileConstructor.java @@ -11,6 +11,8 @@ import refinedstorage.tile.settings.ICompareSetting; import refinedstorage.util.InventoryUtils; public class TileConstructor extends TileMachine implements ICompareSetting { + public static final int SPEED = 10; + public static final String NBT_COMPARE = "Compare"; private InventorySimple inventory = new InventorySimple("constructor", 1, this); @@ -24,7 +26,7 @@ public class TileConstructor extends TileMachine implements ICompareSetting { @Override public void updateMachine() { - if (ticks % 10 == 0) { + if (ticks % SPEED == 0) { BlockPos front = pos.offset(getDirection()); if ((worldObj.isAirBlock(front) || worldObj.getBlockState(front).getBlock().getMaterial(worldObj.getBlockState(front)).isLiquid()) && inventory.getStackInSlot(0) != null) { diff --git a/src/main/java/refinedstorage/tile/TileDestructor.java b/src/main/java/refinedstorage/tile/TileDestructor.java index 968968485..d8ed2200b 100755 --- a/src/main/java/refinedstorage/tile/TileDestructor.java +++ b/src/main/java/refinedstorage/tile/TileDestructor.java @@ -1,14 +1,31 @@ package refinedstorage.tile; +import io.netty.buffer.ByteBuf; import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; +import net.minecraft.inventory.IInventory; import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.math.BlockPos; +import refinedstorage.inventory.InventorySimple; +import refinedstorage.tile.settings.ICompareSetting; +import refinedstorage.tile.settings.IModeSetting; +import refinedstorage.tile.settings.ModeSettingUtils; import refinedstorage.util.InventoryUtils; import java.util.List; -public class TileDestructor extends TileMachine { +public class TileDestructor extends TileMachine implements ICompareSetting, IModeSetting { + public static final String NBT_COMPARE = "Compare"; + public static final String NBT_MODE = "Mode"; + + public static final int SPEED = 10; + + private InventorySimple inventory = new InventorySimple("destructor", 9, this); + + private int compare = 0; + private int mode = 0; + @Override public int getEnergyUsage() { return 1; @@ -16,23 +33,106 @@ public class TileDestructor extends TileMachine { @Override public void updateMachine() { - if (ticks % 10 == 0) { + if (ticks % SPEED == 0) { BlockPos front = pos.offset(getDirection()); IBlockState frontBlockState = worldObj.getBlockState(front); Block frontBlock = frontBlockState.getBlock(); if (!frontBlock.isAir(frontBlockState, worldObj, front)) { - List drops = frontBlock.getDrops(worldObj, front, worldObj.getBlockState(front), 0); + if (ModeSettingUtils.doesNotViolateMode(inventory, this, compare, new ItemStack(frontBlock, 1, frontBlock.getMetaFromState(frontBlockState)))) { + List drops = frontBlock.getDrops(worldObj, front, frontBlockState, 0); - worldObj.setBlockToAir(front); + worldObj.setBlockToAir(front); - for (ItemStack drop : drops) { - if (!getController().push(drop)) { - InventoryUtils.dropStack(worldObj, drop, front.getX(), front.getY(), front.getZ()); + for (ItemStack drop : drops) { + if (!getController().push(drop)) { + InventoryUtils.dropStack(worldObj, drop, front.getX(), front.getY(), front.getZ()); + } } } } } } + + @Override + public int getCompare() { + return compare; + } + + @Override + public void setCompare(int compare) { + markDirty(); + + this.compare = compare; + } + + @Override + public boolean isWhitelist() { + return mode == 0; + } + + @Override + public boolean isBlacklist() { + return mode == 1; + } + + @Override + public void setToWhitelist() { + markDirty(); + + this.mode = 0; + } + + @Override + public void setToBlacklist() { + markDirty(); + + this.mode = 1; + } + + @Override + public void readFromNBT(NBTTagCompound nbt) { + super.readFromNBT(nbt); + + if (nbt.hasKey(NBT_COMPARE)) { + compare = nbt.getInteger(NBT_COMPARE); + } + + if (nbt.hasKey(NBT_MODE)) { + mode = nbt.getInteger(NBT_MODE); + } + + InventoryUtils.restoreInventory(inventory, 0, nbt); + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); + + nbt.setInteger(NBT_COMPARE, compare); + nbt.setInteger(NBT_MODE, mode); + + InventoryUtils.saveInventory(inventory, 0, nbt); + } + + @Override + public void fromBytes(ByteBuf buf) { + super.fromBytes(buf); + + compare = buf.readInt(); + mode = buf.readInt(); + } + + @Override + public void toBytes(ByteBuf buf) { + super.toBytes(buf); + + buf.writeInt(compare); + buf.writeInt(mode); + } + + public IInventory getInventory() { + return inventory; + } } diff --git a/src/main/resources/assets/refinedstorage/textures/gui/destructor.png b/src/main/resources/assets/refinedstorage/textures/gui/destructor.png index c0c97a66ec2dc4b9a32b246d39f270a9ea63f774..6de1a9c413ed6a57b51a85e3a57da6600ee8b831 100755 GIT binary patch delta 475 zcmeyv+t0V5i>2N&$GFaqfq^N*)5S5QBJS<2i&?iFBw7Nm_TB$K@vha(DAn*|Z~Ql( z`KiJ4rZs@S>A<7Mb@tz0?%Vgc?#{PNhX*%a{;&TXq5pyN!$$Avr;8fd9p>$GWME)8 zQLWDnq!>PZ;bmfAaJW|;3FQ1>`SEpc_P00o^L?0O_Lu(7RIdlA0fL4--#0;6KyqEY z{lOp0=a(7rY;Xs1u^PoNVR`-q1&6whBC{XK)8E|mR=>=!v#Q#xV)yrZoKTY#-tX0c z8QQRO{QzXjbYLx^o>?mk-wbR0h?a)hU4KIyyNxvZfbOYCpx*1t#EPzo3G@wvi<+rZe>)PuAP*?12V?b L)z4*}Q$iB}xQo4) delta 460 zcmeC@`@_4Ti>2P|PfzlF1_q{3PZ!6KinzD8FJ|3#kZ1|K+IRo|#Jjs@Mk$6Ld*i?P z%uf!UH?22hSQs7qe*e9({P(ZE--WlAGd3nKzyJT+#<&Oi2afB->YZklW2pSa#>l{+ z@I6k90SKPFlxAUIXt+}y3F1vyo-Y8Tir%LJl`uHW+gI-hq)+Uf&I+V(>ty=yy88N? zoAq`x*>=>u{&v|9q#6Wve%}OP0LgXp|1bEzbbgr;&xH4S>CN}cHl^#&^Ez6YKU*u!ez3pYD-6}@@NTaTl*!PrbN$ZMer=53 zI2ao88cuT@_*n7IY^^B!kI$3S-(N6f{7}JN_VV*3ZRv_9agz_QnN2>=rjCTArNa0M b_Wx%)KlSN}8(XAIK*oBy`njxgN@xNAIeEBl