From 48b3e7a0bb56c16c58636001e71059ba7708bb11 Mon Sep 17 00:00:00 2001 From: way2muchnoise Date: Sat, 17 Sep 2016 00:45:57 +0200 Subject: [PATCH 1/2] adds inserting into the network for the Disk Manipulator I know, there must be a better way --- .../block/BlockDiskManipulator.java | 7 + .../gui/GuiDiskManipulator.java | 6 +- .../gui/sidebutton/SideButtonIOMode.java | 32 +++ .../tile/TileDiskManipulator.java | 183 +++++++++++++++++- .../assets/refinedstorage/lang/en_US.lang | 4 + .../assets/refinedstorage/textures/icons.png | Bin 3003 -> 3091 bytes 6 files changed, 219 insertions(+), 13 deletions(-) create mode 100644 src/main/java/refinedstorage/gui/sidebutton/SideButtonIOMode.java diff --git a/src/main/java/refinedstorage/block/BlockDiskManipulator.java b/src/main/java/refinedstorage/block/BlockDiskManipulator.java index 2d23d8400..0e98da118 100755 --- a/src/main/java/refinedstorage/block/BlockDiskManipulator.java +++ b/src/main/java/refinedstorage/block/BlockDiskManipulator.java @@ -31,4 +31,11 @@ public class BlockDiskManipulator extends BlockNode { } return true; } + + @Override + public void breakBlock(World world, BlockPos pos, IBlockState state) { + ((TileDiskManipulator) world.getTileEntity(pos)).onBreak(); + + super.breakBlock(world, pos, state); + } } diff --git a/src/main/java/refinedstorage/gui/GuiDiskManipulator.java b/src/main/java/refinedstorage/gui/GuiDiskManipulator.java index 91713cac1..0d4846585 100644 --- a/src/main/java/refinedstorage/gui/GuiDiskManipulator.java +++ b/src/main/java/refinedstorage/gui/GuiDiskManipulator.java @@ -2,10 +2,7 @@ package refinedstorage.gui; import refinedstorage.api.storage.CompareUtils; import refinedstorage.container.ContainerDiskManipulator; -import refinedstorage.gui.sidebutton.SideButtonCompare; -import refinedstorage.gui.sidebutton.SideButtonMode; -import refinedstorage.gui.sidebutton.SideButtonRedstoneMode; -import refinedstorage.gui.sidebutton.SideButtonType; +import refinedstorage.gui.sidebutton.*; import refinedstorage.tile.TileDiskManipulator; public class GuiDiskManipulator extends GuiBase { @@ -16,6 +13,7 @@ public class GuiDiskManipulator extends GuiBase { @Override public void init(int x, int y) { addSideButton(new SideButtonRedstoneMode(TileDiskManipulator.REDSTONE_MODE)); + addSideButton(new SideButtonIOMode(TileDiskManipulator.IOMODE)); addSideButton(new SideButtonType(TileDiskManipulator.TYPE)); addSideButton(new SideButtonMode(TileDiskManipulator.MODE)); addSideButton(new SideButtonCompare(TileDiskManipulator.COMPARE, CompareUtils.COMPARE_DAMAGE)); diff --git a/src/main/java/refinedstorage/gui/sidebutton/SideButtonIOMode.java b/src/main/java/refinedstorage/gui/sidebutton/SideButtonIOMode.java new file mode 100644 index 000000000..1ffb643b4 --- /dev/null +++ b/src/main/java/refinedstorage/gui/sidebutton/SideButtonIOMode.java @@ -0,0 +1,32 @@ +package refinedstorage.gui.sidebutton; + +import net.minecraft.util.text.TextFormatting; +import refinedstorage.gui.GuiBase; +import refinedstorage.tile.TileDiskManipulator; +import refinedstorage.tile.data.TileDataManager; +import refinedstorage.tile.data.TileDataParameter; + +public class SideButtonIOMode extends SideButton { + private TileDataParameter parameter; + + public SideButtonIOMode(TileDataParameter parameter) { + this.parameter = parameter; + } + + @Override + public String getTooltip(GuiBase gui) { + return TextFormatting.GREEN + gui.t("sidebutton.refinedstorage:iomode") + TextFormatting.RESET + "\n" + gui.t("sidebutton.refinedstorage:iomode." + (parameter.getValue() == TileDiskManipulator.INSERT ? "insert" : "extract")); + } + + @Override + public void draw(GuiBase gui, int x, int y) { + gui.bindTexture("icons.png"); + + gui.drawTexture(x, y + 1, parameter.getValue() == TileDiskManipulator.EXTRACT ? 0 : 16, 160, 16, 16); + } + + @Override + public void actionPerformed() { + TileDataManager.setParameter(parameter, parameter.getValue() == TileDiskManipulator.INSERT ? TileDiskManipulator.EXTRACT : TileDiskManipulator.INSERT); + } +} diff --git a/src/main/java/refinedstorage/tile/TileDiskManipulator.java b/src/main/java/refinedstorage/tile/TileDiskManipulator.java index 14f737abb..5a5434715 100644 --- a/src/main/java/refinedstorage/tile/TileDiskManipulator.java +++ b/src/main/java/refinedstorage/tile/TileDiskManipulator.java @@ -2,9 +2,12 @@ package refinedstorage.tile; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.datasync.DataSerializers; import net.minecraft.util.EnumFacing; import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fml.common.FMLCommonHandler; +import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.ItemHandlerHelper; @@ -20,12 +23,27 @@ import refinedstorage.inventory.ItemValidatorBasic; import refinedstorage.tile.config.IComparable; import refinedstorage.tile.config.IFilterable; import refinedstorage.tile.config.IType; +import refinedstorage.tile.data.ITileDataConsumer; +import refinedstorage.tile.data.ITileDataProducer; import refinedstorage.tile.data.TileDataParameter; public class TileDiskManipulator extends TileNode implements IComparable, IFilterable, IType { public static final TileDataParameter COMPARE = IComparable.createParameter(); public static final TileDataParameter MODE = IFilterable.createParameter(); public static final TileDataParameter TYPE = IType.createParameter(); + public static final TileDataParameter IOMODE = new TileDataParameter<>(DataSerializers.VARINT, 1, new ITileDataProducer() { + @Override + public Integer getValue(TileDiskManipulator tile) { + return tile.ioMode; + } + }, new ITileDataConsumer() { + @Override + public void setValue(TileDiskManipulator tile, Integer value) { + tile.ioMode = value; + } + }); + + public static final int INSERT = 0, EXTRACT = 1; private static final String NBT_COMPARE = "Compare"; private static final String NBT_MODE = "Mode"; @@ -34,11 +52,18 @@ public class TileDiskManipulator extends TileNode implements IComparable, IFilte private int compare = 0; private int mode = IFilterable.WHITELIST; private int type = IType.ITEMS; + private int ioMode = INSERT; + + private ItemStorage[] itemStorages; + private FluidStorage[] fluidStorages; public TileDiskManipulator() { dataManager.addWatchedParameter(COMPARE); dataManager.addWatchedParameter(MODE); dataManager.addWatchedParameter(TYPE); + + itemStorages = new ItemStorage[6]; + fluidStorages = new FluidStorage[6]; } private ItemHandlerBasic disks = new ItemHandlerBasic(12, this, new ItemValidatorBasic(RefinedStorageItems.STORAGE_DISK) { @@ -51,7 +76,41 @@ public class TileDiskManipulator extends TileNode implements IComparable, IFilte public boolean isValid(ItemStack disk) { return super.isValid(disk) && FluidStorageNBT.isValid(disk); } - }); + }) { + @Override + protected void onContentsChanged(int slot) { + super.onContentsChanged(slot); + + if (FMLCommonHandler.instance().getEffectiveSide() == Side.SERVER && slot < 6) { + ItemStack disk = getStackInSlot(slot); + + if (disk == null) { + itemStorages[slot] = null; + fluidStorages[slot] = null; + } else { + if (disk.getItem() == RefinedStorageItems.STORAGE_DISK) { + itemStorages[slot] = new ItemStorage(disk); + } else if (disk.getItem() == RefinedStorageItems.FLUID_STORAGE_DISK) { + fluidStorages[slot] = new FluidStorage(disk); + } + } + } + } + + @Override + public ItemStack extractItem(int slot, int amount, boolean simulate) { + if (slot < 6) { + if (itemStorages[slot] != null) { + itemStorages[slot].writeToNBT(); + } + + if (fluidStorages[slot] != null) { + fluidStorages[slot].writeToNBT(); + } + } + return super.extractItem(slot, amount, simulate); + } + }; public class ItemStorage extends ItemStorageNBT { public ItemStorage(ItemStack disk) { @@ -71,6 +130,15 @@ public class TileDiskManipulator extends TileNode implements IComparable, IFilte return super.insertItem(stack, size, simulate); } + + @Override + public ItemStack extractItem(ItemStack stack, int size, int flags) { + if (!IFilterable.canTake(itemFilters, mode, getCompare(), stack)) { + return null; + } + + return super.extractItem(stack, size, flags); + } } public class FluidStorage extends FluidStorageNBT { @@ -91,6 +159,15 @@ public class TileDiskManipulator extends TileNode implements IComparable, IFilte return super.insertFluid(stack, size, simulate); } + + @Override + public FluidStack extractFluid(FluidStack stack, int size, int flags) { + if (!IFilterable.canTakeFluids(fluidFilters, mode, getCompare(), stack)) { + return null; + } + + return super.extractFluid(stack, size, flags); + } } private ItemHandlerBasic itemFilters = new ItemHandlerBasic(9, this); @@ -103,17 +180,96 @@ public class TileDiskManipulator extends TileNode implements IComparable, IFilte @Override public void updateNode() { - int i = 0; - ItemStack disk = disks.getStackInSlot(i); - while (disk == null && i < 6) i++; - if (disk == null) return; + int slot = 0; + if (type == IType.ITEMS) { + while (slot < itemStorages.length && itemStorages[slot] == null) slot++; + if (slot == itemStorages.length) return; + ItemStorage storage = itemStorages[slot]; + if (ioMode == INSERT) { + insertIntoNetwork(storage, slot); + } else if (ioMode == EXTRACT) { + extractFromNetwork(storage, slot); + } - if (disk.getItem() == RefinedStorageItems.STORAGE_DISK) { - ItemStorage storage = new ItemStorage(disk); - } else if (disk.getItem() == RefinedStorageItems.FLUID_STORAGE_DISK) { - FluidStorage storage = new FluidStorage(disk); + } else if (type == IType.FLUIDS) { + while (slot < fluidStorages.length && fluidStorages[slot] == null) slot++; + if (slot == fluidStorages.length) return; + FluidStorage storage = fluidStorages[slot]; + if (ioMode == INSERT) { + insertIntoNetwork(storage, slot); + } else if (ioMode == EXTRACT) { + extractFromNetwork(storage, slot); + } } + } + private void insertIntoNetwork(ItemStorage storage, int slot) { + if (storage.getStored() == 0) { + moveDriveToOutput(slot); + return; + } + ItemStack extracted = null; + int ii = 0; + do { + ItemStack stack = null; + while (storage.getItems().size() > ii && stack == null) + stack = storage.getItems().get(ii++); + if (stack != null) extracted = storage.extractItem(stack, 1, compare); + } while (storage.getItems().size() > ii && extracted == null); + if (extracted == null) { + moveDriveToOutput(slot); + return; + } + ItemStack leftOver = network.insertItem(extracted, extracted.stackSize, false); + if (leftOver != null) storage.insertItem(leftOver, leftOver.stackSize, false); + } + + private void extractFromNetwork(ItemStorage storage, int slot) { + + } + + private void insertIntoNetwork(FluidStorage storage, int slot) { + if (storage.getStored() == 0) { + moveDriveToOutput(slot); + return; + } + FluidStack extracted = null; + int ii = 0; + do { + FluidStack stack = storage.getStacks().get(ii); + while (stack == null && storage.getStacks().size() > ii) ii++; + if (stack != null) extracted = storage.extractFluid(stack, 1, compare); + } while (extracted == null && storage.getStacks().size() > ii); + if (extracted == null) { + moveDriveToOutput(slot); + return; + } + FluidStack leftOver = network.insertFluid(extracted, extracted.amount, false); + if (leftOver != null) storage.insertFluid(leftOver, leftOver.amount, false); + } + + private void extractFromNetwork(FluidStorage storage, int slot) { + } + + private void moveDriveToOutput(int slot) { + ItemStack disk = disks.getStackInSlot(slot); + if (disk != null) { + int i = 6; + while (disks.getStackInSlot(i) != null && i < 12) i++; + if (i == 12) return; + if (slot < 6) { + if (itemStorages[slot] != null) { + itemStorages[slot].writeToNBT(); + itemStorages[slot] = null; + } + if (fluidStorages[slot] != null) { + fluidStorages[slot].writeToNBT(); + fluidStorages[slot] = null; + } + } + disks.extractItem(slot, 1, false); + disks.insertItem(i, disk, false); + } } @Override @@ -209,4 +365,13 @@ public class TileDiskManipulator extends TileNode implements IComparable, IFilte public boolean hasCapability(Capability capability, EnumFacing facing) { return capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY || super.hasCapability(capability, facing); } + + public void onBreak() { + for (ItemStorage storage : itemStorages) + if (storage != null) + storage.writeToNBT(); + for (FluidStorage storage : fluidStorages) + if (storage != null) + storage.writeToNBT(); + } } diff --git a/src/main/resources/assets/refinedstorage/lang/en_US.lang b/src/main/resources/assets/refinedstorage/lang/en_US.lang index 250525ac4..78e5e5371 100755 --- a/src/main/resources/assets/refinedstorage/lang/en_US.lang +++ b/src/main/resources/assets/refinedstorage/lang/en_US.lang @@ -94,6 +94,10 @@ sidebutton.refinedstorage:mode=Mode sidebutton.refinedstorage:mode.whitelist=Whitelist sidebutton.refinedstorage:mode.blacklist=Blacklist +sidebutton.refinedstorage:iomode=IOMode +sidebutton.refinedstorage:iomode.insert=Insert into network +sidebutton.refinedstorage:iomode.extract=Extract from network + sidebutton.refinedstorage:type=Type sidebutton.refinedstorage:type.0=Items sidebutton.refinedstorage:type.1=Fluids diff --git a/src/main/resources/assets/refinedstorage/textures/icons.png b/src/main/resources/assets/refinedstorage/textures/icons.png index 21389c3c3e3a8829309f290ea056772f690df41a..8e42d3281c57bb7947fca6733d93f2fda8d98cb6 100755 GIT binary patch delta 1979 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 w%cjW~ Date: Sat, 17 Sep 2016 01:08:41 +0200 Subject: [PATCH 2/2] fixes some minor issue and improves the code style --- .../gui/GuiDiskManipulator.java | 2 +- .../tile/TileDiskManipulator.java | 39 +++++++++++++------ 2 files changed, 29 insertions(+), 12 deletions(-) diff --git a/src/main/java/refinedstorage/gui/GuiDiskManipulator.java b/src/main/java/refinedstorage/gui/GuiDiskManipulator.java index 0d4846585..2361d6511 100644 --- a/src/main/java/refinedstorage/gui/GuiDiskManipulator.java +++ b/src/main/java/refinedstorage/gui/GuiDiskManipulator.java @@ -13,7 +13,7 @@ public class GuiDiskManipulator extends GuiBase { @Override public void init(int x, int y) { addSideButton(new SideButtonRedstoneMode(TileDiskManipulator.REDSTONE_MODE)); - addSideButton(new SideButtonIOMode(TileDiskManipulator.IOMODE)); + addSideButton(new SideButtonIOMode(TileDiskManipulator.IO_MODE)); addSideButton(new SideButtonType(TileDiskManipulator.TYPE)); addSideButton(new SideButtonMode(TileDiskManipulator.MODE)); addSideButton(new SideButtonCompare(TileDiskManipulator.COMPARE, CompareUtils.COMPARE_DAMAGE)); diff --git a/src/main/java/refinedstorage/tile/TileDiskManipulator.java b/src/main/java/refinedstorage/tile/TileDiskManipulator.java index 5a5434715..a475de2d7 100644 --- a/src/main/java/refinedstorage/tile/TileDiskManipulator.java +++ b/src/main/java/refinedstorage/tile/TileDiskManipulator.java @@ -31,7 +31,9 @@ public class TileDiskManipulator extends TileNode implements IComparable, IFilte public static final TileDataParameter COMPARE = IComparable.createParameter(); public static final TileDataParameter MODE = IFilterable.createParameter(); public static final TileDataParameter TYPE = IType.createParameter(); - public static final TileDataParameter IOMODE = new TileDataParameter<>(DataSerializers.VARINT, 1, new ITileDataProducer() { + + public static final int INSERT = 0, EXTRACT = 1; + public static final TileDataParameter IO_MODE = new TileDataParameter<>(DataSerializers.VARINT, INSERT, new ITileDataProducer() { @Override public Integer getValue(TileDiskManipulator tile) { return tile.ioMode; @@ -40,11 +42,10 @@ public class TileDiskManipulator extends TileNode implements IComparable, IFilte @Override public void setValue(TileDiskManipulator tile, Integer value) { tile.ioMode = value; + tile.markDirty(); } }); - public static final int INSERT = 0, EXTRACT = 1; - private static final String NBT_COMPARE = "Compare"; private static final String NBT_MODE = "Mode"; private static final String NBT_TYPE = "Type"; @@ -61,6 +62,7 @@ public class TileDiskManipulator extends TileNode implements IComparable, IFilte dataManager.addWatchedParameter(COMPARE); dataManager.addWatchedParameter(MODE); dataManager.addWatchedParameter(TYPE); + dataManager.addWatchedParameter(IO_MODE); itemStorages = new ItemStorage[6]; fluidStorages = new FluidStorage[6]; @@ -212,16 +214,21 @@ public class TileDiskManipulator extends TileNode implements IComparable, IFilte int ii = 0; do { ItemStack stack = null; - while (storage.getItems().size() > ii && stack == null) + while (storage.getItems().size() > ii && stack == null) { stack = storage.getItems().get(ii++); - if (stack != null) extracted = storage.extractItem(stack, 1, compare); + } + if (stack != null) { + extracted = storage.extractItem(stack, 1, compare); + } } while (storage.getItems().size() > ii && extracted == null); if (extracted == null) { moveDriveToOutput(slot); return; } ItemStack leftOver = network.insertItem(extracted, extracted.stackSize, false); - if (leftOver != null) storage.insertItem(leftOver, leftOver.stackSize, false); + if (leftOver != null) { + storage.insertItem(leftOver, leftOver.stackSize, false); + } } private void extractFromNetwork(ItemStorage storage, int slot) { @@ -237,15 +244,21 @@ public class TileDiskManipulator extends TileNode implements IComparable, IFilte int ii = 0; do { FluidStack stack = storage.getStacks().get(ii); - while (stack == null && storage.getStacks().size() > ii) ii++; - if (stack != null) extracted = storage.extractFluid(stack, 1, compare); + while (stack == null && storage.getStacks().size() > ii) { + ii++; + } + if (stack != null) { + extracted = storage.extractFluid(stack, 1, compare); + } } while (extracted == null && storage.getStacks().size() > ii); if (extracted == null) { moveDriveToOutput(slot); return; } FluidStack leftOver = network.insertFluid(extracted, extracted.amount, false); - if (leftOver != null) storage.insertFluid(leftOver, leftOver.amount, false); + if (leftOver != null) { + storage.insertFluid(leftOver, leftOver.amount, false); + } } private void extractFromNetwork(FluidStorage storage, int slot) { @@ -255,8 +268,12 @@ public class TileDiskManipulator extends TileNode implements IComparable, IFilte ItemStack disk = disks.getStackInSlot(slot); if (disk != null) { int i = 6; - while (disks.getStackInSlot(i) != null && i < 12) i++; - if (i == 12) return; + while (disks.getStackInSlot(i) != null && i < 12) { + i++; + } + if (i == 12) { + return; + } if (slot < 6) { if (itemStorages[slot] != null) { itemStorages[slot].writeToNBT();