From 5807e35a4add425de68aeab82808bccbb2684727 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Tue, 19 Jul 2016 00:24:45 +0200 Subject: [PATCH 001/214] Update changelog --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4875e76ec..16573de41 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,9 +5,12 @@ - Fixed minor dupe bug with JEI transferring - Fixed exporter crafting upgrades taking priority over other tasks - Fixed NPE with incorrectly initialized disks +- Fixed not being able to take out items of Grid 2K16 +- Fixed not being able to start autocrafting for certain items (most notably IC2 items) **Features** - Added X button to Processing Pattern Encoder to clear configuration of inputs and outputs +- Added Grid view toggle buttons (regular, craftable items only, no craftable items) - Re-added opposite facing on shift click functionality - Updated to Forge 2014 From e64bdf069c3340fe0cfd141f582ef26dca313255 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Tue, 19 Jul 2016 00:33:53 +0200 Subject: [PATCH 002/214] Update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 16573de41..1e31c0b7c 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ **Bugfixes** - Fixed minor dupe bug with JEI transferring - Fixed exporter crafting upgrades taking priority over other tasks +- Solderer upgrades go to upgrades slots first now when shift clicking - Fixed NPE with incorrectly initialized disks - Fixed not being able to take out items of Grid 2K16 - Fixed not being able to start autocrafting for certain items (most notably IC2 items) From 05a121ef2f7f788c7483da8677c19251979402c6 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Tue, 19 Jul 2016 01:16:28 +0200 Subject: [PATCH 003/214] Buggy view type toggle --- src/main/java/refinedstorage/gui/GuiGrid.java | 35 +++++++--- .../sidebutton/SideButtonGridViewType.java | 40 +++++++++++ .../refinedstorage/item/ItemWirelessGrid.java | 28 ++++---- .../network/MessageGridSettingsUpdate.java | 10 ++- .../MessageWirelessGridSettingsUpdate.java | 17 +++-- .../java/refinedstorage/tile/grid/IGrid.java | 4 ++ .../refinedstorage/tile/grid/TileGrid.java | 67 ++++++++++++++----- .../tile/grid/WirelessGrid.java | 44 +++++++----- .../assets/refinedstorage/lang/en_US.lang | 4 ++ .../assets/refinedstorage/lang/nl_NL.lang | 4 ++ 10 files changed, 194 insertions(+), 59 deletions(-) create mode 100755 src/main/java/refinedstorage/gui/sidebutton/SideButtonGridViewType.java diff --git a/src/main/java/refinedstorage/gui/GuiGrid.java b/src/main/java/refinedstorage/gui/GuiGrid.java index 5b904435a..736dd931e 100755 --- a/src/main/java/refinedstorage/gui/GuiGrid.java +++ b/src/main/java/refinedstorage/gui/GuiGrid.java @@ -16,10 +16,7 @@ import refinedstorage.api.network.GridExtractFlags; import refinedstorage.apiimpl.storage.ClientStack; import refinedstorage.block.EnumGridType; import refinedstorage.container.ContainerGrid; -import refinedstorage.gui.sidebutton.SideButtonGridSearchBoxMode; -import refinedstorage.gui.sidebutton.SideButtonGridSortingDirection; -import refinedstorage.gui.sidebutton.SideButtonGridSortingType; -import refinedstorage.gui.sidebutton.SideButtonRedstoneMode; +import refinedstorage.gui.sidebutton.*; import refinedstorage.jei.RefinedStorageJEIPlugin; import refinedstorage.network.MessageGridCraftingClear; import refinedstorage.network.MessageGridInsertHeld; @@ -105,6 +102,7 @@ public class GuiGrid extends GuiBase { searchField.yPosition = sy; } + addSideButton(new SideButtonGridViewType(grid)); addSideButton(new SideButtonGridSortingDirection(grid)); addSideButton(new SideButtonGridSortingType(grid)); addSideButton(new SideButtonGridSearchBoxMode(this)); @@ -127,13 +125,32 @@ public class GuiGrid extends GuiBase { Iterator t = items.iterator(); while (t.hasNext()) { - ItemStack item = t.next().getStack(); + ClientStack stack = t.next(); + + switch (grid.getViewType()) { + case TileGrid.VIEW_TYPE_NORMAL: + break; + case TileGrid.VIEW_TYPE_NON_CRAFTABLES: + if (stack.isCraftable()) { + t.remove(); + + continue; + } + break; + case TileGrid.VIEW_TYPE_CRAFTABLES: + if (!stack.isCraftable()) { + t.remove(); + + continue; + } + break; + } if (query.startsWith("@")) { String[] parts = query.split(" "); String modId = parts[0].substring(1); - String modIdFromItem = Item.REGISTRY.getNameForObject(item.getItem()).getResourceDomain(); + String modIdFromItem = Item.REGISTRY.getNameForObject(stack.getStack().getItem()).getResourceDomain(); if (!modIdFromItem.contains(modId)) { t.remove(); @@ -148,18 +165,18 @@ public class GuiGrid extends GuiBase { } } - if (!item.getDisplayName().toLowerCase().contains(itemFromMod.toString())) { + if (!stack.getStack().getDisplayName().toLowerCase().contains(itemFromMod.toString())) { t.remove(); } } } else if (query.startsWith("#")) { String tooltip = query.substring(1); - String tooltipFromItem = StringUtils.join(item.getTooltip(container.getPlayer(), true), "\n"); + String tooltipFromItem = StringUtils.join(stack.getStack().getTooltip(container.getPlayer(), true), "\n"); if (!tooltipFromItem.contains(tooltip)) { t.remove(); } - } else if (!item.getDisplayName().toLowerCase().contains(query)) { + } else if (!stack.getStack().getDisplayName().toLowerCase().contains(query)) { t.remove(); } } diff --git a/src/main/java/refinedstorage/gui/sidebutton/SideButtonGridViewType.java b/src/main/java/refinedstorage/gui/sidebutton/SideButtonGridViewType.java new file mode 100755 index 000000000..745c64420 --- /dev/null +++ b/src/main/java/refinedstorage/gui/sidebutton/SideButtonGridViewType.java @@ -0,0 +1,40 @@ +package refinedstorage.gui.sidebutton; + +import net.minecraft.util.text.TextFormatting; +import refinedstorage.gui.GuiBase; +import refinedstorage.tile.grid.IGrid; +import refinedstorage.tile.grid.TileGrid; + +public class SideButtonGridViewType extends SideButton { + private IGrid grid; + + public SideButtonGridViewType(IGrid grid) { + this.grid = grid; + } + + @Override + public String getTooltip(GuiBase gui) { + return TextFormatting.YELLOW + gui.t("sidebutton.refinedstorage:grid.view_type") + TextFormatting.RESET + "\n" + gui.t("sidebutton.refinedstorage:grid.view_type." + grid.getViewType()); + } + + @Override + public void draw(GuiBase gui, int x, int y) { + gui.bindTexture("icons.png"); + gui.drawTexture(x, y + 2 - 1, grid.getViewType() * 16, 112, 16, 16); + } + + @Override + public void actionPerformed() { + int type = grid.getViewType(); + + if (type == TileGrid.VIEW_TYPE_NORMAL) { + type = TileGrid.VIEW_TYPE_NON_CRAFTABLES; + } else if (type == TileGrid.VIEW_TYPE_NON_CRAFTABLES) { + type = TileGrid.VIEW_TYPE_CRAFTABLES; + } else if (type == TileGrid.VIEW_TYPE_CRAFTABLES) { + type = TileGrid.VIEW_TYPE_NORMAL; + } + + grid.onViewTypeChanged(type); + } +} diff --git a/src/main/java/refinedstorage/item/ItemWirelessGrid.java b/src/main/java/refinedstorage/item/ItemWirelessGrid.java index b05b179c0..ef48b2b30 100755 --- a/src/main/java/refinedstorage/item/ItemWirelessGrid.java +++ b/src/main/java/refinedstorage/item/ItemWirelessGrid.java @@ -42,10 +42,6 @@ public class ItemWirelessGrid extends ItemEnergyContainer implements ISpecialEle public static final int TYPE_NORMAL = 0; public static final int TYPE_CREATIVE = 1; - public static final String NBT_SORTING_TYPE = "SortingType"; - public static final String NBT_SORTING_DIRECTION = "SortingDirection"; - public static final String NBT_SEARCH_BOX_MODE = "SearchBoxMode"; - private static final String NBT_CONTROLLER_X = "ControllerX"; private static final String NBT_CONTROLLER_Y = "ControllerY"; private static final String NBT_CONTROLLER_Z = "ControllerZ"; @@ -137,9 +133,10 @@ public class ItemWirelessGrid extends ItemEnergyContainer implements ISpecialEle tag.setInteger(NBT_CONTROLLER_Y, pos.getY()); tag.setInteger(NBT_CONTROLLER_Z, pos.getZ()); tag.setInteger(NBT_DIMENSION_ID, player.dimension); - tag.setInteger(NBT_SORTING_DIRECTION, TileGrid.SORTING_DIRECTION_DESCENDING); - tag.setInteger(NBT_SORTING_TYPE, TileGrid.SORTING_TYPE_NAME); - tag.setInteger(NBT_SEARCH_BOX_MODE, TileGrid.SEARCH_BOX_MODE_NORMAL); + tag.setInteger(TileGrid.NBT_VIEW_TYPE, TileGrid.VIEW_TYPE_NORMAL); + tag.setInteger(TileGrid.NBT_SORTING_DIRECTION, TileGrid.SORTING_DIRECTION_DESCENDING); + tag.setInteger(TileGrid.NBT_SORTING_TYPE, TileGrid.SORTING_TYPE_NAME); + tag.setInteger(TileGrid.NBT_SEARCH_BOX_MODE, TileGrid.SEARCH_BOX_MODE_NORMAL); stack.setTagCompound(tag); @@ -184,16 +181,20 @@ public class ItemWirelessGrid extends ItemEnergyContainer implements ISpecialEle return stack.getTagCompound().getInteger(NBT_CONTROLLER_Z); } + public static int getViewType(ItemStack stack) { + return stack.getTagCompound().getInteger(TileGrid.NBT_VIEW_TYPE); + } + public static int getSortingType(ItemStack stack) { - return stack.getTagCompound().getInteger(NBT_SORTING_TYPE); + return stack.getTagCompound().getInteger(TileGrid.NBT_SORTING_TYPE); } public static int getSortingDirection(ItemStack stack) { - return stack.getTagCompound().getInteger(NBT_SORTING_DIRECTION); + return stack.getTagCompound().getInteger(TileGrid.NBT_SORTING_DIRECTION); } public static int getSearchBoxMode(ItemStack stack) { - return stack.getTagCompound().getInteger(NBT_SEARCH_BOX_MODE); + return stack.getTagCompound().getInteger(TileGrid.NBT_SEARCH_BOX_MODE); } private static boolean hasValidNBT(ItemStack stack) { @@ -202,9 +203,10 @@ public class ItemWirelessGrid extends ItemEnergyContainer implements ISpecialEle && stack.getTagCompound().hasKey(NBT_CONTROLLER_Y) && stack.getTagCompound().hasKey(NBT_CONTROLLER_Z) && stack.getTagCompound().hasKey(NBT_DIMENSION_ID) - && stack.getTagCompound().hasKey(NBT_SORTING_DIRECTION) - && stack.getTagCompound().hasKey(NBT_SORTING_TYPE) - && stack.getTagCompound().hasKey(NBT_SEARCH_BOX_MODE); + && stack.getTagCompound().hasKey(TileGrid.NBT_VIEW_TYPE) + && stack.getTagCompound().hasKey(TileGrid.NBT_SORTING_DIRECTION) + && stack.getTagCompound().hasKey(TileGrid.NBT_SORTING_TYPE) + && stack.getTagCompound().hasKey(TileGrid.NBT_SEARCH_BOX_MODE); } @Override diff --git a/src/main/java/refinedstorage/network/MessageGridSettingsUpdate.java b/src/main/java/refinedstorage/network/MessageGridSettingsUpdate.java index 35319cbbb..09c2ac8bc 100755 --- a/src/main/java/refinedstorage/network/MessageGridSettingsUpdate.java +++ b/src/main/java/refinedstorage/network/MessageGridSettingsUpdate.java @@ -11,6 +11,7 @@ public class MessageGridSettingsUpdate extends MessageHandlerPlayerToServer implements IMessage { private int hand; + private int viewType; private int sortingDirection; private int sortingType; private int searchBoxMode; @@ -18,8 +18,9 @@ public class MessageWirelessGridSettingsUpdate extends MessageHandlerPlayerToSer public MessageWirelessGridSettingsUpdate() { } - public MessageWirelessGridSettingsUpdate(int hand, int sortingDirection, int sortingType, int searchBoxMode) { + public MessageWirelessGridSettingsUpdate(int hand, int viewType, int sortingDirection, int sortingType, int searchBoxMode) { this.hand = hand; + this.viewType = viewType; this.sortingDirection = sortingDirection; this.sortingType = sortingType; this.searchBoxMode = searchBoxMode; @@ -28,6 +29,7 @@ public class MessageWirelessGridSettingsUpdate extends MessageHandlerPlayerToSer @Override public void fromBytes(ByteBuf buf) { hand = buf.readInt(); + viewType = buf.readInt(); sortingDirection = buf.readInt(); sortingType = buf.readInt(); searchBoxMode = buf.readInt(); @@ -36,6 +38,7 @@ public class MessageWirelessGridSettingsUpdate extends MessageHandlerPlayerToSer @Override public void toBytes(ByteBuf buf) { buf.writeInt(hand); + buf.writeInt(viewType); buf.writeInt(sortingDirection); buf.writeInt(sortingType); buf.writeInt(searchBoxMode); @@ -46,16 +49,20 @@ public class MessageWirelessGridSettingsUpdate extends MessageHandlerPlayerToSer ItemStack held = player.getHeldItem(RefinedStorageUtils.getHandById(message.hand)); if (held != null && held.getItem() == RefinedStorageItems.WIRELESS_GRID && held.getTagCompound() != null) { + if (TileGrid.isValidViewType(message.viewType)) { + held.getTagCompound().setInteger(TileGrid.NBT_VIEW_TYPE, message.viewType); + } + if (TileGrid.isValidSortingDirection(message.sortingDirection)) { - held.getTagCompound().setInteger(ItemWirelessGrid.NBT_SORTING_DIRECTION, message.sortingDirection); + held.getTagCompound().setInteger(TileGrid.NBT_SORTING_DIRECTION, message.sortingDirection); } if (TileGrid.isValidSortingType(message.sortingType)) { - held.getTagCompound().setInteger(ItemWirelessGrid.NBT_SORTING_TYPE, message.sortingType); + held.getTagCompound().setInteger(TileGrid.NBT_SORTING_TYPE, message.sortingType); } if (TileGrid.isValidSearchBoxMode(message.searchBoxMode)) { - held.getTagCompound().setInteger(ItemWirelessGrid.NBT_SEARCH_BOX_MODE, message.searchBoxMode); + held.getTagCompound().setInteger(TileGrid.NBT_SEARCH_BOX_MODE, message.searchBoxMode); } } } diff --git a/src/main/java/refinedstorage/tile/grid/IGrid.java b/src/main/java/refinedstorage/tile/grid/IGrid.java index ef77bad8e..33486d41f 100755 --- a/src/main/java/refinedstorage/tile/grid/IGrid.java +++ b/src/main/java/refinedstorage/tile/grid/IGrid.java @@ -12,12 +12,16 @@ public interface IGrid { IGridHandler getGridHandler(); + int getViewType(); + int getSortingType(); int getSortingDirection(); int getSearchBoxMode(); + void onViewTypeChanged(int type); + void onSortingTypeChanged(int type); void onSortingDirectionChanged(int direction); diff --git a/src/main/java/refinedstorage/tile/grid/TileGrid.java b/src/main/java/refinedstorage/tile/grid/TileGrid.java index eb8145489..ea6e4396f 100755 --- a/src/main/java/refinedstorage/tile/grid/TileGrid.java +++ b/src/main/java/refinedstorage/tile/grid/TileGrid.java @@ -29,9 +29,10 @@ import java.util.ArrayList; import java.util.List; public class TileGrid extends TileNode implements IGrid { - private static final String NBT_SORTING_DIRECTION = "SortingDirection"; - private static final String NBT_SORTING_TYPE = "SortingType"; - private static final String NBT_SEARCH_BOX_MODE = "SearchBoxMode"; + public static final String NBT_VIEW_TYPE = "ViewType"; + public static final String NBT_SORTING_DIRECTION = "SortingDirection"; + public static final String NBT_SORTING_TYPE = "SortingType"; + public static final String NBT_SEARCH_BOX_MODE = "SearchBoxMode"; public static final int SORTING_DIRECTION_ASCENDING = 0; public static final int SORTING_DIRECTION_DESCENDING = 1; @@ -44,6 +45,10 @@ public class TileGrid extends TileNode implements IGrid { public static final int SEARCH_BOX_MODE_JEI_SYNCHRONIZED = 2; public static final int SEARCH_BOX_MODE_JEI_SYNCHRONIZED_AUTOSELECTED = 3; + public static final int VIEW_TYPE_NORMAL = 0; + public static final int VIEW_TYPE_NON_CRAFTABLES = 1; + public static final int VIEW_TYPE_CRAFTABLES = 2; + private Container craftingContainer = new Container() { @Override public boolean canInteractWith(EntityPlayer player) { @@ -62,6 +67,7 @@ public class TileGrid extends TileNode implements IGrid { private EnumGridType type; + private int viewType = VIEW_TYPE_NORMAL; private int sortingDirection = SORTING_DIRECTION_DESCENDING; private int sortingType = SORTING_TYPE_NAME; private int searchBoxMode = SEARCH_BOX_MODE_NORMAL; @@ -255,6 +261,17 @@ public class TileGrid extends TileNode implements IGrid { } } + @Override + public int getViewType() { + return viewType; + } + + public void setViewType(int type) { + this.viewType = type; + + markDirty(); + } + public int getSortingDirection() { return sortingDirection; } @@ -285,19 +302,24 @@ public class TileGrid extends TileNode implements IGrid { markDirty(); } + @Override + public void onViewTypeChanged(int type) { + RefinedStorage.INSTANCE.network.sendToServer(new MessageGridSettingsUpdate(this, sortingDirection, sortingType, searchBoxMode, type)); + } + @Override public void onSortingTypeChanged(int type) { - RefinedStorage.INSTANCE.network.sendToServer(new MessageGridSettingsUpdate(this, sortingDirection, type, searchBoxMode)); + RefinedStorage.INSTANCE.network.sendToServer(new MessageGridSettingsUpdate(this, sortingDirection, type, searchBoxMode, viewType)); } @Override public void onSortingDirectionChanged(int direction) { - RefinedStorage.INSTANCE.network.sendToServer(new MessageGridSettingsUpdate(this, direction, sortingType, searchBoxMode)); + RefinedStorage.INSTANCE.network.sendToServer(new MessageGridSettingsUpdate(this, direction, sortingType, searchBoxMode, viewType)); } @Override public void onSearchBoxModeChanged(int searchBoxMode) { - RefinedStorage.INSTANCE.network.sendToServer(new MessageGridSettingsUpdate(this, sortingDirection, sortingType, searchBoxMode)); + RefinedStorage.INSTANCE.network.sendToServer(new MessageGridSettingsUpdate(this, sortingDirection, sortingType, searchBoxMode, viewType)); } @Override @@ -306,22 +328,26 @@ public class TileGrid extends TileNode implements IGrid { } @Override - public void read(NBTTagCompound nbt) { - super.read(nbt); + public void read(NBTTagCompound tag) { + super.read(tag); - RefinedStorageUtils.readItemsLegacy(matrix, 0, nbt); - RefinedStorageUtils.readItems(patterns, 1, nbt); + RefinedStorageUtils.readItemsLegacy(matrix, 0, tag); + RefinedStorageUtils.readItems(patterns, 1, tag); - if (nbt.hasKey(NBT_SORTING_DIRECTION)) { - sortingDirection = nbt.getInteger(NBT_SORTING_DIRECTION); + if (tag.hasKey(NBT_VIEW_TYPE)) { + viewType = tag.getInteger(NBT_VIEW_TYPE); } - if (nbt.hasKey(NBT_SORTING_TYPE)) { - sortingType = nbt.getInteger(NBT_SORTING_TYPE); + if (tag.hasKey(NBT_SORTING_DIRECTION)) { + sortingDirection = tag.getInteger(NBT_SORTING_DIRECTION); } - if (nbt.hasKey(NBT_SEARCH_BOX_MODE)) { - searchBoxMode = nbt.getInteger(NBT_SEARCH_BOX_MODE); + if (tag.hasKey(NBT_SORTING_TYPE)) { + sortingType = tag.getInteger(NBT_SORTING_TYPE); + } + + if (tag.hasKey(NBT_SEARCH_BOX_MODE)) { + searchBoxMode = tag.getInteger(NBT_SEARCH_BOX_MODE); } } @@ -332,6 +358,7 @@ public class TileGrid extends TileNode implements IGrid { RefinedStorageUtils.writeItemsLegacy(matrix, 0, tag); RefinedStorageUtils.writeItems(patterns, 1, tag); + tag.setInteger(NBT_VIEW_TYPE, viewType); tag.setInteger(NBT_SORTING_DIRECTION, sortingDirection); tag.setInteger(NBT_SORTING_TYPE, sortingType); tag.setInteger(NBT_SEARCH_BOX_MODE, searchBoxMode); @@ -344,6 +371,7 @@ public class TileGrid extends TileNode implements IGrid { super.writeContainerData(buf); buf.writeBoolean(isConnected()); + buf.writeInt(viewType); buf.writeInt(sortingDirection); buf.writeInt(sortingType); buf.writeInt(searchBoxMode); @@ -354,6 +382,7 @@ public class TileGrid extends TileNode implements IGrid { super.readContainerData(buf); connected = buf.readBoolean(); + viewType = buf.readInt(); sortingDirection = buf.readInt(); sortingType = buf.readInt(); searchBoxMode = buf.readInt(); @@ -376,6 +405,12 @@ public class TileGrid extends TileNode implements IGrid { } } + public static boolean isValidViewType(int type) { + return type == VIEW_TYPE_NORMAL || + type == VIEW_TYPE_CRAFTABLES || + type == VIEW_TYPE_NON_CRAFTABLES; + } + public static boolean isValidSearchBoxMode(int mode) { return mode == SEARCH_BOX_MODE_NORMAL || mode == SEARCH_BOX_MODE_NORMAL_AUTOSELECTED || diff --git a/src/main/java/refinedstorage/tile/grid/WirelessGrid.java b/src/main/java/refinedstorage/tile/grid/WirelessGrid.java index 7379b1879..f4d7841d7 100755 --- a/src/main/java/refinedstorage/tile/grid/WirelessGrid.java +++ b/src/main/java/refinedstorage/tile/grid/WirelessGrid.java @@ -19,6 +19,7 @@ public class WirelessGrid implements IGrid { private EnumHand hand; private World world; private BlockPos controllerPos; + private int viewType; private int sortingType; private int sortingDirection; private int searchBoxMode; @@ -27,6 +28,7 @@ public class WirelessGrid implements IGrid { this.hand = hand; this.world = world; this.controllerPos = new BlockPos(ItemWirelessGrid.getX(stack), ItemWirelessGrid.getY(stack), ItemWirelessGrid.getZ(stack)); + this.viewType = ItemWirelessGrid.getViewType(stack); this.sortingType = ItemWirelessGrid.getSortingType(stack); this.sortingDirection = ItemWirelessGrid.getSortingDirection(stack); this.searchBoxMode = ItemWirelessGrid.getSearchBoxMode(stack); @@ -49,18 +51,9 @@ public class WirelessGrid implements IGrid { return controller != null ? controller.getGridHandler() : null; } - public void onClose(EntityPlayer player) { - TileController controller = getController(); - - if (controller != null) { - controller.getWirelessGridHandler().onClose(player); - } - } - - private TileController getController() { - TileEntity tile = world.getTileEntity(controllerPos); - - return tile instanceof TileController ? (TileController) tile : null; + @Override + public int getViewType() { + return viewType; } @Override @@ -78,23 +71,30 @@ public class WirelessGrid implements IGrid { return searchBoxMode; } + @Override + public void onViewTypeChanged(int type) { + RefinedStorage.INSTANCE.network.sendToServer(new MessageWirelessGridSettingsUpdate(RefinedStorageUtils.getIdFromHand(hand), getSortingDirection(), getSortingType(), getSearchBoxMode(), type)); + + this.viewType = type; + } + @Override public void onSortingTypeChanged(int type) { - RefinedStorage.INSTANCE.network.sendToServer(new MessageWirelessGridSettingsUpdate(RefinedStorageUtils.getIdFromHand(hand), getSortingDirection(), type, getSearchBoxMode())); + RefinedStorage.INSTANCE.network.sendToServer(new MessageWirelessGridSettingsUpdate(RefinedStorageUtils.getIdFromHand(hand), getSortingDirection(), type, getSearchBoxMode(), getViewType())); this.sortingType = type; } @Override public void onSortingDirectionChanged(int direction) { - RefinedStorage.INSTANCE.network.sendToServer(new MessageWirelessGridSettingsUpdate(RefinedStorageUtils.getIdFromHand(hand), direction, getSortingType(), getSearchBoxMode())); + RefinedStorage.INSTANCE.network.sendToServer(new MessageWirelessGridSettingsUpdate(RefinedStorageUtils.getIdFromHand(hand), direction, getSortingType(), getSearchBoxMode(), getViewType())); this.sortingDirection = direction; } @Override public void onSearchBoxModeChanged(int searchBoxMode) { - RefinedStorage.INSTANCE.network.sendToServer(new MessageWirelessGridSettingsUpdate(RefinedStorageUtils.getIdFromHand(hand), getSortingDirection(), getSortingType(), searchBoxMode)); + RefinedStorage.INSTANCE.network.sendToServer(new MessageWirelessGridSettingsUpdate(RefinedStorageUtils.getIdFromHand(hand), getSortingDirection(), getSortingType(), searchBoxMode, getViewType())); this.searchBoxMode = searchBoxMode; } @@ -108,4 +108,18 @@ public class WirelessGrid implements IGrid { public boolean isConnected() { return true; } + + public void onClose(EntityPlayer player) { + TileController controller = getController(); + + if (controller != null) { + controller.getWirelessGridHandler().onClose(player); + } + } + + private TileController getController() { + TileEntity tile = world.getTileEntity(controllerPos); + + return tile instanceof TileController ? (TileController) tile : null; + } } diff --git a/src/main/resources/assets/refinedstorage/lang/en_US.lang b/src/main/resources/assets/refinedstorage/lang/en_US.lang index 4b0efcd39..b3fbc772b 100755 --- a/src/main/resources/assets/refinedstorage/lang/en_US.lang +++ b/src/main/resources/assets/refinedstorage/lang/en_US.lang @@ -63,6 +63,10 @@ sidebutton.refinedstorage:redstone_mode.0=Ignore redstone signal sidebutton.refinedstorage:redstone_mode.1=Only work with redstone signal sidebutton.refinedstorage:redstone_mode.2=Only work without redstone signal +sidebutton.refinedstorage:grid.view_type=Display +sidebutton.refinedstorage:grid.view_type.0=Normal +sidebutton.refinedstorage:grid.view_type.1=No craftables +sidebutton.refinedstorage:grid.view_type.2=Only craftables sidebutton.refinedstorage:grid.sorting.direction=Sorting Direction sidebutton.refinedstorage:grid.sorting.direction.0=Ascending sidebutton.refinedstorage:grid.sorting.direction.1=Descending diff --git a/src/main/resources/assets/refinedstorage/lang/nl_NL.lang b/src/main/resources/assets/refinedstorage/lang/nl_NL.lang index fe838210b..e3c70c657 100755 --- a/src/main/resources/assets/refinedstorage/lang/nl_NL.lang +++ b/src/main/resources/assets/refinedstorage/lang/nl_NL.lang @@ -63,6 +63,10 @@ sidebutton.refinedstorage:redstone_mode.0=Redstone negeren sidebutton.refinedstorage:redstone_mode.1=Alleen werken met redstone signaal sidebutton.refinedstorage:redstone_mode.2=Alleen werken zonder redstone signaal +sidebutton.refinedstorage:grid.view_type=Weergave +sidebutton.refinedstorage:grid.view_type.0=Normaal +sidebutton.refinedstorage:grid.view_type.1=Geen craftables +sidebutton.refinedstorage:grid.view_type.2=Alleen craftables sidebutton.refinedstorage:grid.sorting.direction=Sorteer Richting sidebutton.refinedstorage:grid.sorting.direction.0=Oplopend sidebutton.refinedstorage:grid.sorting.direction.1=Aflopend From 8c11c617dd806f1d9e1ced28a2e602a3c7862eaa Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Tue, 19 Jul 2016 01:27:13 +0200 Subject: [PATCH 004/214] Fixes --- src/main/java/refinedstorage/gui/GuiGrid.java | 83 ++++++++----------- .../refinedstorage/tile/grid/TileGrid.java | 8 +- .../tile/grid/WirelessGrid.java | 8 +- 3 files changed, 42 insertions(+), 57 deletions(-) diff --git a/src/main/java/refinedstorage/gui/GuiGrid.java b/src/main/java/refinedstorage/gui/GuiGrid.java index 736dd931e..341e44e99 100755 --- a/src/main/java/refinedstorage/gui/GuiGrid.java +++ b/src/main/java/refinedstorage/gui/GuiGrid.java @@ -121,64 +121,49 @@ public class GuiGrid extends GuiBase { String query = searchField.getText().trim().toLowerCase(); - if (!query.isEmpty()) { - Iterator t = items.iterator(); + Iterator t = items.iterator(); - while (t.hasNext()) { - ClientStack stack = t.next(); + while (t.hasNext()) { + ClientStack stack = t.next(); - switch (grid.getViewType()) { - case TileGrid.VIEW_TYPE_NORMAL: - break; - case TileGrid.VIEW_TYPE_NON_CRAFTABLES: - if (stack.isCraftable()) { - t.remove(); + if (grid.getViewType() == TileGrid.VIEW_TYPE_NON_CRAFTABLES && stack.isCraftable()) { + t.remove(); + } else if (grid.getViewType() == TileGrid.VIEW_TYPE_CRAFTABLES && !stack.isCraftable()) { + t.remove(); + } - continue; + if (query.startsWith("@")) { + String[] parts = query.split(" "); + + String modId = parts[0].substring(1); + String modIdFromItem = Item.REGISTRY.getNameForObject(stack.getStack().getItem()).getResourceDomain(); + + if (!modIdFromItem.contains(modId)) { + t.remove(); + } else if (parts.length >= 2) { + StringBuilder itemFromMod = new StringBuilder(); + + for (int i = 1; i < parts.length; ++i) { + itemFromMod.append(parts[i]); + + if (i != parts.length - 1) { + itemFromMod.append(" "); } - break; - case TileGrid.VIEW_TYPE_CRAFTABLES: - if (!stack.isCraftable()) { - t.remove(); + } - continue; - } - break; + if (!stack.getStack().getDisplayName().toLowerCase().contains(itemFromMod.toString())) { + t.remove(); + } } + } else if (query.startsWith("#")) { + String tooltip = query.substring(1); + String tooltipFromItem = StringUtils.join(stack.getStack().getTooltip(container.getPlayer(), true), "\n"); - if (query.startsWith("@")) { - String[] parts = query.split(" "); - - String modId = parts[0].substring(1); - String modIdFromItem = Item.REGISTRY.getNameForObject(stack.getStack().getItem()).getResourceDomain(); - - if (!modIdFromItem.contains(modId)) { - t.remove(); - } else if (parts.length >= 2) { - StringBuilder itemFromMod = new StringBuilder(); - - for (int i = 1; i < parts.length; ++i) { - itemFromMod.append(parts[i]); - - if (i != parts.length - 1) { - itemFromMod.append(" "); - } - } - - if (!stack.getStack().getDisplayName().toLowerCase().contains(itemFromMod.toString())) { - t.remove(); - } - } - } else if (query.startsWith("#")) { - String tooltip = query.substring(1); - String tooltipFromItem = StringUtils.join(stack.getStack().getTooltip(container.getPlayer(), true), "\n"); - - if (!tooltipFromItem.contains(tooltip)) { - t.remove(); - } - } else if (!stack.getStack().getDisplayName().toLowerCase().contains(query)) { + if (!tooltipFromItem.contains(tooltip)) { t.remove(); } + } else if (!stack.getStack().getDisplayName().toLowerCase().contains(query)) { + t.remove(); } } diff --git a/src/main/java/refinedstorage/tile/grid/TileGrid.java b/src/main/java/refinedstorage/tile/grid/TileGrid.java index ea6e4396f..0f8faac0e 100755 --- a/src/main/java/refinedstorage/tile/grid/TileGrid.java +++ b/src/main/java/refinedstorage/tile/grid/TileGrid.java @@ -304,22 +304,22 @@ public class TileGrid extends TileNode implements IGrid { @Override public void onViewTypeChanged(int type) { - RefinedStorage.INSTANCE.network.sendToServer(new MessageGridSettingsUpdate(this, sortingDirection, sortingType, searchBoxMode, type)); + RefinedStorage.INSTANCE.network.sendToServer(new MessageGridSettingsUpdate(this, type, sortingDirection, sortingType, searchBoxMode)); } @Override public void onSortingTypeChanged(int type) { - RefinedStorage.INSTANCE.network.sendToServer(new MessageGridSettingsUpdate(this, sortingDirection, type, searchBoxMode, viewType)); + RefinedStorage.INSTANCE.network.sendToServer(new MessageGridSettingsUpdate(this, viewType, sortingDirection, type, searchBoxMode)); } @Override public void onSortingDirectionChanged(int direction) { - RefinedStorage.INSTANCE.network.sendToServer(new MessageGridSettingsUpdate(this, direction, sortingType, searchBoxMode, viewType)); + RefinedStorage.INSTANCE.network.sendToServer(new MessageGridSettingsUpdate(this, viewType, direction, sortingType, searchBoxMode)); } @Override public void onSearchBoxModeChanged(int searchBoxMode) { - RefinedStorage.INSTANCE.network.sendToServer(new MessageGridSettingsUpdate(this, sortingDirection, sortingType, searchBoxMode, viewType)); + RefinedStorage.INSTANCE.network.sendToServer(new MessageGridSettingsUpdate(this, viewType, sortingDirection, sortingType, searchBoxMode)); } @Override diff --git a/src/main/java/refinedstorage/tile/grid/WirelessGrid.java b/src/main/java/refinedstorage/tile/grid/WirelessGrid.java index f4d7841d7..782794c8e 100755 --- a/src/main/java/refinedstorage/tile/grid/WirelessGrid.java +++ b/src/main/java/refinedstorage/tile/grid/WirelessGrid.java @@ -73,28 +73,28 @@ public class WirelessGrid implements IGrid { @Override public void onViewTypeChanged(int type) { - RefinedStorage.INSTANCE.network.sendToServer(new MessageWirelessGridSettingsUpdate(RefinedStorageUtils.getIdFromHand(hand), getSortingDirection(), getSortingType(), getSearchBoxMode(), type)); + RefinedStorage.INSTANCE.network.sendToServer(new MessageWirelessGridSettingsUpdate(RefinedStorageUtils.getIdFromHand(hand), type, getSortingDirection(), getSortingType(), getSearchBoxMode())); this.viewType = type; } @Override public void onSortingTypeChanged(int type) { - RefinedStorage.INSTANCE.network.sendToServer(new MessageWirelessGridSettingsUpdate(RefinedStorageUtils.getIdFromHand(hand), getSortingDirection(), type, getSearchBoxMode(), getViewType())); + RefinedStorage.INSTANCE.network.sendToServer(new MessageWirelessGridSettingsUpdate(RefinedStorageUtils.getIdFromHand(hand), getViewType(), getSortingDirection(), type, getSearchBoxMode())); this.sortingType = type; } @Override public void onSortingDirectionChanged(int direction) { - RefinedStorage.INSTANCE.network.sendToServer(new MessageWirelessGridSettingsUpdate(RefinedStorageUtils.getIdFromHand(hand), direction, getSortingType(), getSearchBoxMode(), getViewType())); + RefinedStorage.INSTANCE.network.sendToServer(new MessageWirelessGridSettingsUpdate(RefinedStorageUtils.getIdFromHand(hand), getViewType(), direction, getSortingType(), getSearchBoxMode())); this.sortingDirection = direction; } @Override public void onSearchBoxModeChanged(int searchBoxMode) { - RefinedStorage.INSTANCE.network.sendToServer(new MessageWirelessGridSettingsUpdate(RefinedStorageUtils.getIdFromHand(hand), getSortingDirection(), getSortingType(), searchBoxMode, getViewType())); + RefinedStorage.INSTANCE.network.sendToServer(new MessageWirelessGridSettingsUpdate(RefinedStorageUtils.getIdFromHand(hand), getViewType(), getSortingDirection(), getSortingType(), searchBoxMode)); this.searchBoxMode = searchBoxMode; } From 55cd5c2c479733eb8802355abf50960ac1670e58 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Tue, 19 Jul 2016 02:10:51 +0200 Subject: [PATCH 005/214] Added ability to shift click items into Importer, Exporter, Constructor, Destructor and Detector to set up whitelist / blacklist configurations easier, fixes #202 --- CHANGELOG.md | 1 + .../container/ContainerBase.java | 21 +++++++++++++++++++ .../container/ContainerConstructor.java | 2 +- .../container/ContainerDestructor.java | 2 +- .../container/ContainerDetector.java | 13 ++++++++++++ .../container/ContainerExporter.java | 2 +- .../container/ContainerImporter.java | 2 +- 7 files changed, 39 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1e31c0b7c..895c8a8fa 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ **Features** - Added X button to Processing Pattern Encoder to clear configuration of inputs and outputs - Added Grid view toggle buttons (regular, craftable items only, no craftable items) +- Added ability to shift click items into Importer, Exporter, Constructor, Destructor and Detector to set up whitelist / blacklist configurations easier - Re-added opposite facing on shift click functionality - Updated to Forge 2014 diff --git a/src/main/java/refinedstorage/container/ContainerBase.java b/src/main/java/refinedstorage/container/ContainerBase.java index a9d9afef1..30be7ff22 100755 --- a/src/main/java/refinedstorage/container/ContainerBase.java +++ b/src/main/java/refinedstorage/container/ContainerBase.java @@ -6,6 +6,8 @@ import net.minecraft.inventory.ClickType; import net.minecraft.inventory.Container; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; +import net.minecraftforge.items.ItemHandlerHelper; +import refinedstorage.RefinedStorageUtils; import refinedstorage.container.slot.SlotDisabled; import refinedstorage.container.slot.SlotSpecimen; import refinedstorage.container.slot.SlotSpecimenLegacy; @@ -106,6 +108,25 @@ public abstract class ContainerBase extends Container { return null; } + public ItemStack mergeItemStackToSpecimen(ItemStack stack, int begin, int end) { + for (int i = begin; i < end; ++i) { + if (RefinedStorageUtils.compareStackNoQuantity(getSlot(i).getStack(), stack)) { + return null; + } + } + + for (int i = begin; i < end; ++i) { + if (!getSlot(i).getHasStack()) { + getSlot(i).putStack(ItemHandlerHelper.copyStackWithSize(stack, 1)); + getSlot(i).onSlotChanged(); + + return null; + } + } + + return null; + } + @Override public boolean canInteractWith(EntityPlayer player) { return true; diff --git a/src/main/java/refinedstorage/container/ContainerConstructor.java b/src/main/java/refinedstorage/container/ContainerConstructor.java index 93894e402..18e8fd7fd 100755 --- a/src/main/java/refinedstorage/container/ContainerConstructor.java +++ b/src/main/java/refinedstorage/container/ContainerConstructor.java @@ -34,7 +34,7 @@ public class ContainerConstructor extends ContainerBase { return null; } } else if (!mergeItemStack(stack, 0, 4, false)) { - return null; + return mergeItemStackToSpecimen(stack, 4, 4 + 1); } if (stack.stackSize == 0) { diff --git a/src/main/java/refinedstorage/container/ContainerDestructor.java b/src/main/java/refinedstorage/container/ContainerDestructor.java index 1bce4b602..7e29698bd 100755 --- a/src/main/java/refinedstorage/container/ContainerDestructor.java +++ b/src/main/java/refinedstorage/container/ContainerDestructor.java @@ -36,7 +36,7 @@ public class ContainerDestructor extends ContainerBase { return null; } } else if (!mergeItemStack(stack, 0, 4, false)) { - return null; + return mergeItemStackToSpecimen(stack, 4, 4 + 9); } if (stack.stackSize == 0) { diff --git a/src/main/java/refinedstorage/container/ContainerDetector.java b/src/main/java/refinedstorage/container/ContainerDetector.java index dcc92e29d..2ca8c0e6a 100755 --- a/src/main/java/refinedstorage/container/ContainerDetector.java +++ b/src/main/java/refinedstorage/container/ContainerDetector.java @@ -1,6 +1,8 @@ package refinedstorage.container; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; import refinedstorage.container.slot.SlotSpecimen; import refinedstorage.tile.TileDetector; @@ -12,4 +14,15 @@ public class ContainerDetector extends ContainerBase { addPlayerInventory(8, 55); } + + @Override + public ItemStack transferStackInSlot(EntityPlayer player, int index) { + Slot slot = getSlot(index); + + if (slot != null && slot.getHasStack() && index > 0) { + return mergeItemStackToSpecimen(slot.getStack(), 0, 1); + } + + return null; + } } diff --git a/src/main/java/refinedstorage/container/ContainerExporter.java b/src/main/java/refinedstorage/container/ContainerExporter.java index 7ff6f990c..5f90598c8 100755 --- a/src/main/java/refinedstorage/container/ContainerExporter.java +++ b/src/main/java/refinedstorage/container/ContainerExporter.java @@ -36,7 +36,7 @@ public class ContainerExporter extends ContainerBase { return null; } } else if (!mergeItemStack(stack, 0, 4, false)) { - return null; + return mergeItemStackToSpecimen(stack, 4, 4 + 9); } if (stack.stackSize == 0) { diff --git a/src/main/java/refinedstorage/container/ContainerImporter.java b/src/main/java/refinedstorage/container/ContainerImporter.java index c21727668..50dfd53ad 100755 --- a/src/main/java/refinedstorage/container/ContainerImporter.java +++ b/src/main/java/refinedstorage/container/ContainerImporter.java @@ -36,7 +36,7 @@ public class ContainerImporter extends ContainerBase { return null; } } else if (!mergeItemStack(stack, 0, 4, false)) { - return null; + return mergeItemStackToSpecimen(stack, 4, 4 + 9); } if (stack.stackSize == 0) { From e9745c2b6128a113c2f27542b879f66524caa1dc Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Tue, 19 Jul 2016 04:53:44 +0200 Subject: [PATCH 006/214] Move static upgrade helpers in a class with state --- .../refinedstorage/RefinedStorageUtils.java | 43 -------------- .../inventory/BasicItemHandler.java | 3 +- .../inventory/UpgradeItemHandler.java | 57 +++++++++++++++++++ .../refinedstorage/tile/TileConstructor.java | 16 ++---- .../java/refinedstorage/tile/TileCrafter.java | 8 +-- .../refinedstorage/tile/TileDestructor.java | 13 ++--- .../refinedstorage/tile/TileExporter.java | 19 ++----- .../refinedstorage/tile/TileImporter.java | 16 ++---- .../refinedstorage/tile/TileInterface.java | 16 ++---- .../refinedstorage/tile/TileSolderer.java | 9 ++- .../tile/TileWirelessTransmitter.java | 9 ++- 11 files changed, 96 insertions(+), 113 deletions(-) create mode 100755 src/main/java/refinedstorage/inventory/UpgradeItemHandler.java diff --git a/src/main/java/refinedstorage/RefinedStorageUtils.java b/src/main/java/refinedstorage/RefinedStorageUtils.java index 8fbff4a1d..b2c3543b4 100755 --- a/src/main/java/refinedstorage/RefinedStorageUtils.java +++ b/src/main/java/refinedstorage/RefinedStorageUtils.java @@ -21,7 +21,6 @@ import org.apache.commons.lang3.ArrayUtils; import refinedstorage.api.autocrafting.ICraftingPattern; import refinedstorage.api.network.INetworkMaster; import refinedstorage.api.storage.CompareFlags; -import refinedstorage.item.ItemUpgrade; import java.util.HashSet; import java.util.List; @@ -176,48 +175,6 @@ public final class RefinedStorageUtils { return false; } - public static int getSpeed(IItemHandler handler) { - return getSpeed(handler, 9, 2); - } - - public static int getSpeed(IItemHandler handler, int speed, int speedIncrease) { - for (int i = 0; i < handler.getSlots(); ++i) { - if (handler.getStackInSlot(i) != null && handler.getStackInSlot(i).getMetadata() == ItemUpgrade.TYPE_SPEED) { - speed -= speedIncrease; - } - } - - return speed; - } - - public static boolean hasUpgrade(IItemHandler handler, int type) { - return getUpgradeCount(handler, type) > 0; - } - - public static int getUpgradeCount(IItemHandler handler, int type) { - int upgrades = 0; - - for (int i = 0; i < handler.getSlots(); ++i) { - if (handler.getStackInSlot(i) != null && handler.getStackInSlot(i).getMetadata() == type) { - upgrades++; - } - } - - return upgrades; - } - - public static int getUpgradeEnergyUsage(IItemHandler handler) { - int usage = 0; - - for (int i = 0; i < handler.getSlots(); ++i) { - if (handler.getStackInSlot(i) != null) { - usage += ItemUpgrade.getEnergyUsage(handler.getStackInSlot(i).getMetadata()); - } - } - - return usage; - } - public static void writeBooleanArray(NBTTagCompound tag, String name, boolean[] array) { int[] intArray = new int[array.length]; diff --git a/src/main/java/refinedstorage/inventory/BasicItemHandler.java b/src/main/java/refinedstorage/inventory/BasicItemHandler.java index 07edaa151..646f454a7 100755 --- a/src/main/java/refinedstorage/inventory/BasicItemHandler.java +++ b/src/main/java/refinedstorage/inventory/BasicItemHandler.java @@ -6,7 +6,8 @@ import net.minecraftforge.items.ItemStackHandler; public class BasicItemHandler extends ItemStackHandler { private TileEntity tile; - private IItemValidator[] validators; + + protected IItemValidator[] validators; public BasicItemHandler(int size, TileEntity tile, IItemValidator... validators) { super(size); diff --git a/src/main/java/refinedstorage/inventory/UpgradeItemHandler.java b/src/main/java/refinedstorage/inventory/UpgradeItemHandler.java new file mode 100755 index 000000000..fff343f75 --- /dev/null +++ b/src/main/java/refinedstorage/inventory/UpgradeItemHandler.java @@ -0,0 +1,57 @@ +package refinedstorage.inventory; + +import net.minecraft.tileentity.TileEntity; +import refinedstorage.RefinedStorageItems; +import refinedstorage.item.ItemUpgrade; + +public class UpgradeItemHandler extends BasicItemHandler { + public UpgradeItemHandler(int size, TileEntity tile, int... supportedUpgrades) { + super(size, tile, new IItemValidator[supportedUpgrades.length]); + + for (int i = 0; i < supportedUpgrades.length; ++i) { + this.validators[i] = new BasicItemValidator(RefinedStorageItems.UPGRADE, supportedUpgrades[i]); + } + } + + public int getSpeed() { + return getSpeed(9, 2); + } + + public int getSpeed(int speed, int speedIncrease) { + for (int i = 0; i < getSlots(); ++i) { + if (getStackInSlot(i) != null && getStackInSlot(i).getItemDamage() == ItemUpgrade.TYPE_SPEED) { + speed -= speedIncrease; + } + } + + return speed; + } + + public boolean hasUpgrade(int type) { + return getUpgradeCount(type) > 0; + } + + public int getUpgradeCount(int type) { + int upgrades = 0; + + for (int i = 0; i < getSlots(); ++i) { + if (getStackInSlot(i) != null && getStackInSlot(i).getItemDamage() == type) { + upgrades++; + } + } + + return upgrades; + } + + public int getEnergyUsage() { + int usage = 0; + + for (int i = 0; i < getSlots(); ++i) { + if (getStackInSlot(i) != null) { + usage += ItemUpgrade.getEnergyUsage(getStackInSlot(i).getItemDamage()); + } + } + + return usage; + } +} diff --git a/src/main/java/refinedstorage/tile/TileConstructor.java b/src/main/java/refinedstorage/tile/TileConstructor.java index 59b73e4d4..ceedb6343 100755 --- a/src/main/java/refinedstorage/tile/TileConstructor.java +++ b/src/main/java/refinedstorage/tile/TileConstructor.java @@ -13,13 +13,12 @@ import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; import refinedstorage.RefinedStorage; -import refinedstorage.RefinedStorageItems; import refinedstorage.RefinedStorageUtils; import refinedstorage.apiimpl.autocrafting.CraftingTaskScheduler; import refinedstorage.container.ContainerConstructor; import refinedstorage.container.slot.SlotSpecimen; import refinedstorage.inventory.BasicItemHandler; -import refinedstorage.inventory.BasicItemValidator; +import refinedstorage.inventory.UpgradeItemHandler; import refinedstorage.item.ItemUpgrade; import refinedstorage.tile.config.ICompareConfig; @@ -36,12 +35,7 @@ public class TileConstructor extends TileNode implements ICompareConfig { block = SlotSpecimen.getBlockState(worldObj, pos.offset(getDirection()), getStackInSlot(0)); } }; - private BasicItemHandler upgrades = new BasicItemHandler( - 4, - this, - new BasicItemValidator(RefinedStorageItems.UPGRADE, ItemUpgrade.TYPE_SPEED), - new BasicItemValidator(RefinedStorageItems.UPGRADE, ItemUpgrade.TYPE_CRAFTING) - ); + private UpgradeItemHandler upgrades = new UpgradeItemHandler(4, this, ItemUpgrade.TYPE_SPEED, ItemUpgrade.TYPE_CRAFTING); private int compare = 0; private IBlockState block; @@ -50,12 +44,12 @@ public class TileConstructor extends TileNode implements ICompareConfig { @Override public int getEnergyUsage() { - return RefinedStorage.INSTANCE.constructorUsage + RefinedStorageUtils.getUpgradeEnergyUsage(upgrades); + return RefinedStorage.INSTANCE.constructorUsage + upgrades.getEnergyUsage(); } @Override public void updateNode() { - if (block != null && ticks % RefinedStorageUtils.getSpeed(upgrades, BASE_SPEED, 4) == 0) { + if (block != null && ticks % upgrades.getSpeed(BASE_SPEED, 4) == 0) { BlockPos front = pos.offset(getDirection()); if (worldObj.isAirBlock(front) && block.getBlock().canPlaceBlockAt(worldObj, front)) { @@ -67,7 +61,7 @@ public class TileConstructor extends TileNode implements ICompareConfig { // From ItemBlock.onItemUse SoundType blockSound = block.getBlock().getSoundType(); worldObj.playSound(null, front, blockSound.getPlaceSound(), SoundCategory.BLOCKS, (blockSound.getVolume() + 1.0F) / 2.0F, blockSound.getPitch() * 0.8F); - } else if (RefinedStorageUtils.hasUpgrade(upgrades, ItemUpgrade.TYPE_CRAFTING)) { + } else if (upgrades.hasUpgrade(ItemUpgrade.TYPE_CRAFTING)) { ItemStack craft = filter.getStackInSlot(0); if (scheduler.canSchedule(compare, craft)) { diff --git a/src/main/java/refinedstorage/tile/TileCrafter.java b/src/main/java/refinedstorage/tile/TileCrafter.java index 19968f471..6a86f6f4b 100755 --- a/src/main/java/refinedstorage/tile/TileCrafter.java +++ b/src/main/java/refinedstorage/tile/TileCrafter.java @@ -16,8 +16,8 @@ import refinedstorage.api.autocrafting.ICraftingTask; import refinedstorage.api.network.INetworkMaster; import refinedstorage.container.ContainerCrafter; import refinedstorage.inventory.BasicItemHandler; -import refinedstorage.inventory.BasicItemValidator; import refinedstorage.inventory.IItemValidator; +import refinedstorage.inventory.UpgradeItemHandler; import refinedstorage.item.ItemPattern; import refinedstorage.item.ItemUpgrade; @@ -38,11 +38,11 @@ public class TileCrafter extends TileNode implements ICraftingPatternContainer { } }; - private BasicItemHandler upgrades = new BasicItemHandler(4, this, new BasicItemValidator(RefinedStorageItems.UPGRADE, ItemUpgrade.TYPE_SPEED)); + private UpgradeItemHandler upgrades = new UpgradeItemHandler(4, this, ItemUpgrade.TYPE_SPEED); @Override public int getEnergyUsage() { - int usage = RefinedStorage.INSTANCE.crafterUsage + RefinedStorageUtils.getUpgradeEnergyUsage(upgrades); + int usage = RefinedStorage.INSTANCE.crafterUsage + upgrades.getEnergyUsage(); for (int i = 0; i < patterns.getSlots(); ++i) { if (patterns.getStackInSlot(i) != null) { @@ -95,7 +95,7 @@ public class TileCrafter extends TileNode implements ICraftingPatternContainer { @Override public int getSpeed() { - return 20 - (RefinedStorageUtils.getUpgradeCount(upgrades, ItemUpgrade.TYPE_SPEED) * 4); + return 20 - (upgrades.getUpgradeCount(ItemUpgrade.TYPE_SPEED) * 4); } @Override diff --git a/src/main/java/refinedstorage/tile/TileDestructor.java b/src/main/java/refinedstorage/tile/TileDestructor.java index 59ff51fdd..f6fb978bd 100755 --- a/src/main/java/refinedstorage/tile/TileDestructor.java +++ b/src/main/java/refinedstorage/tile/TileDestructor.java @@ -13,11 +13,10 @@ import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; import refinedstorage.RefinedStorage; -import refinedstorage.RefinedStorageItems; import refinedstorage.RefinedStorageUtils; import refinedstorage.container.ContainerDestructor; import refinedstorage.inventory.BasicItemHandler; -import refinedstorage.inventory.BasicItemValidator; +import refinedstorage.inventory.UpgradeItemHandler; import refinedstorage.item.ItemUpgrade; import refinedstorage.tile.config.ICompareConfig; import refinedstorage.tile.config.IModeConfig; @@ -33,23 +32,19 @@ public class TileDestructor extends TileNode implements ICompareConfig, IModeCon private static final int BASE_SPEED = 20; private BasicItemHandler filters = new BasicItemHandler(9, this); - private BasicItemHandler upgrades = new BasicItemHandler( - 4, - this, - new BasicItemValidator(RefinedStorageItems.UPGRADE, ItemUpgrade.TYPE_SPEED) - ); + private UpgradeItemHandler upgrades = new UpgradeItemHandler(4, this, ItemUpgrade.TYPE_SPEED); private int compare = 0; private int mode = ModeConstants.WHITELIST; @Override public int getEnergyUsage() { - return RefinedStorage.INSTANCE.destructorUsage + RefinedStorageUtils.getUpgradeEnergyUsage(upgrades); + return RefinedStorage.INSTANCE.destructorUsage + upgrades.getEnergyUsage(); } @Override public void updateNode() { - if (ticks % RefinedStorageUtils.getSpeed(upgrades, BASE_SPEED, 4) == 0) { + if (ticks % upgrades.getSpeed(BASE_SPEED, 4) == 0) { BlockPos front = pos.offset(getDirection()); IBlockState frontBlockState = worldObj.getBlockState(front); diff --git a/src/main/java/refinedstorage/tile/TileExporter.java b/src/main/java/refinedstorage/tile/TileExporter.java index 808975969..ffc2608b9 100755 --- a/src/main/java/refinedstorage/tile/TileExporter.java +++ b/src/main/java/refinedstorage/tile/TileExporter.java @@ -10,12 +10,11 @@ import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.ItemHandlerHelper; import refinedstorage.RefinedStorage; -import refinedstorage.RefinedStorageItems; import refinedstorage.RefinedStorageUtils; import refinedstorage.apiimpl.autocrafting.CraftingTaskScheduler; import refinedstorage.container.ContainerExporter; import refinedstorage.inventory.BasicItemHandler; -import refinedstorage.inventory.BasicItemValidator; +import refinedstorage.inventory.UpgradeItemHandler; import refinedstorage.item.ItemUpgrade; import refinedstorage.tile.config.ICompareConfig; @@ -23,13 +22,7 @@ public class TileExporter extends TileNode implements ICompareConfig { private static final String NBT_COMPARE = "Compare"; private BasicItemHandler filters = new BasicItemHandler(9, this); - private BasicItemHandler upgrades = new BasicItemHandler( - 4, - this, - new BasicItemValidator(RefinedStorageItems.UPGRADE, ItemUpgrade.TYPE_SPEED), - new BasicItemValidator(RefinedStorageItems.UPGRADE, ItemUpgrade.TYPE_CRAFTING), - new BasicItemValidator(RefinedStorageItems.UPGRADE, ItemUpgrade.TYPE_STACK) - ); + private UpgradeItemHandler upgrades = new UpgradeItemHandler(4, this, ItemUpgrade.TYPE_SPEED, ItemUpgrade.TYPE_CRAFTING, ItemUpgrade.TYPE_STACK); private int compare = 0; @@ -37,16 +30,16 @@ public class TileExporter extends TileNode implements ICompareConfig { @Override public int getEnergyUsage() { - return RefinedStorage.INSTANCE.exporterUsage + RefinedStorageUtils.getUpgradeEnergyUsage(upgrades); + return RefinedStorage.INSTANCE.exporterUsage + upgrades.getEnergyUsage(); } @Override public void updateNode() { IItemHandler handler = RefinedStorageUtils.getItemHandler(getFacingTile(), getDirection().getOpposite()); - int size = RefinedStorageUtils.hasUpgrade(upgrades, ItemUpgrade.TYPE_STACK) ? 64 : 1; + int size = upgrades.hasUpgrade(ItemUpgrade.TYPE_STACK) ? 64 : 1; - if (handler != null && ticks % RefinedStorageUtils.getSpeed(upgrades) == 0) { + if (handler != null && ticks % upgrades.getSpeed() == 0) { for (int i = 0; i < filters.getSlots(); ++i) { ItemStack slot = filters.getStackInSlot(i); @@ -61,7 +54,7 @@ public class TileExporter extends TileNode implements ICompareConfig { if (remainder != null) { network.insertItem(remainder, remainder.stackSize, false); } - } else if (RefinedStorageUtils.hasUpgrade(upgrades, ItemUpgrade.TYPE_CRAFTING)) { + } else if (upgrades.hasUpgrade(ItemUpgrade.TYPE_CRAFTING)) { if (scheduler.canSchedule(compare, slot)) { scheduler.schedule(network, compare, slot); } diff --git a/src/main/java/refinedstorage/tile/TileImporter.java b/src/main/java/refinedstorage/tile/TileImporter.java index dafab8a2f..0ccb3256b 100755 --- a/src/main/java/refinedstorage/tile/TileImporter.java +++ b/src/main/java/refinedstorage/tile/TileImporter.java @@ -9,11 +9,10 @@ import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; import refinedstorage.RefinedStorage; -import refinedstorage.RefinedStorageItems; import refinedstorage.RefinedStorageUtils; import refinedstorage.container.ContainerImporter; import refinedstorage.inventory.BasicItemHandler; -import refinedstorage.inventory.BasicItemValidator; +import refinedstorage.inventory.UpgradeItemHandler; import refinedstorage.item.ItemUpgrade; import refinedstorage.tile.config.ICompareConfig; import refinedstorage.tile.config.IModeConfig; @@ -25,12 +24,7 @@ public class TileImporter extends TileNode implements ICompareConfig, IModeConfi private static final String NBT_MODE = "Mode"; private BasicItemHandler filters = new BasicItemHandler(9, this); - private BasicItemHandler upgrades = new BasicItemHandler( - 4, - this, - new BasicItemValidator(RefinedStorageItems.UPGRADE, ItemUpgrade.TYPE_SPEED), - new BasicItemValidator(RefinedStorageItems.UPGRADE, ItemUpgrade.TYPE_STACK) - ); + private UpgradeItemHandler upgrades = new UpgradeItemHandler(4, this, ItemUpgrade.TYPE_SPEED, ItemUpgrade.TYPE_STACK); private int compare = 0; private int mode = ModeConstants.WHITELIST; @@ -39,7 +33,7 @@ public class TileImporter extends TileNode implements ICompareConfig, IModeConfi @Override public int getEnergyUsage() { - return RefinedStorage.INSTANCE.importerUsage + RefinedStorageUtils.getUpgradeEnergyUsage(upgrades); + return RefinedStorage.INSTANCE.importerUsage + upgrades.getEnergyUsage(); } @Override @@ -59,8 +53,8 @@ public class TileImporter extends TileNode implements ICompareConfig, IModeConfi if (stack == null || !ModeFilter.respectsMode(filters, this, compare, stack)) { currentSlot++; - } else if (ticks % RefinedStorageUtils.getSpeed(upgrades) == 0) { - int quantity = RefinedStorageUtils.hasUpgrade(upgrades, ItemUpgrade.TYPE_STACK) ? 64 : 1; + } else if (ticks % upgrades.getSpeed() == 0) { + int quantity = upgrades.hasUpgrade(ItemUpgrade.TYPE_STACK) ? 64 : 1; ItemStack result = handler.extractItem(currentSlot, quantity, true); diff --git a/src/main/java/refinedstorage/tile/TileInterface.java b/src/main/java/refinedstorage/tile/TileInterface.java index 05fd82d64..c2f82d81c 100755 --- a/src/main/java/refinedstorage/tile/TileInterface.java +++ b/src/main/java/refinedstorage/tile/TileInterface.java @@ -10,11 +10,10 @@ import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.wrapper.CombinedInvWrapper; import refinedstorage.RefinedStorage; -import refinedstorage.RefinedStorageItems; import refinedstorage.RefinedStorageUtils; import refinedstorage.container.ContainerInterface; import refinedstorage.inventory.BasicItemHandler; -import refinedstorage.inventory.BasicItemValidator; +import refinedstorage.inventory.UpgradeItemHandler; import refinedstorage.item.ItemUpgrade; import refinedstorage.tile.config.ICompareConfig; @@ -24,12 +23,7 @@ public class TileInterface extends TileNode implements ICompareConfig { private BasicItemHandler importItems = new BasicItemHandler(9, this); private BasicItemHandler exportSpecimenItems = new BasicItemHandler(9, this); private BasicItemHandler exportItems = new BasicItemHandler(9, this); - private BasicItemHandler upgrades = new BasicItemHandler( - 4, - this, - new BasicItemValidator(RefinedStorageItems.UPGRADE, ItemUpgrade.TYPE_SPEED), - new BasicItemValidator(RefinedStorageItems.UPGRADE, ItemUpgrade.TYPE_STACK) - ); + private UpgradeItemHandler upgrades = new UpgradeItemHandler(4, this, ItemUpgrade.TYPE_SPEED, ItemUpgrade.TYPE_STACK); private int compare = 0; @@ -37,7 +31,7 @@ public class TileInterface extends TileNode implements ICompareConfig { @Override public int getEnergyUsage() { - return RefinedStorage.INSTANCE.interfaceUsage + RefinedStorageUtils.getUpgradeEnergyUsage(upgrades); + return RefinedStorage.INSTANCE.interfaceUsage + upgrades.getEnergyUsage(); } @Override @@ -50,8 +44,8 @@ public class TileInterface extends TileNode implements ICompareConfig { if (slot == null) { currentSlot++; - } else if (ticks % RefinedStorageUtils.getSpeed(upgrades) == 0) { - int size = Math.min(slot.stackSize, RefinedStorageUtils.hasUpgrade(upgrades, ItemUpgrade.TYPE_STACK) ? 64 : 1); + } else if (ticks % upgrades.getSpeed() == 0) { + int size = Math.min(slot.stackSize, upgrades.hasUpgrade(ItemUpgrade.TYPE_STACK) ? 64 : 1); ItemStack remainder = network.insertItem(slot, size, false); diff --git a/src/main/java/refinedstorage/tile/TileSolderer.java b/src/main/java/refinedstorage/tile/TileSolderer.java index 723aef9a7..c19630ef8 100755 --- a/src/main/java/refinedstorage/tile/TileSolderer.java +++ b/src/main/java/refinedstorage/tile/TileSolderer.java @@ -9,15 +9,14 @@ import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.wrapper.CombinedInvWrapper; import refinedstorage.RefinedStorage; -import refinedstorage.RefinedStorageItems; import refinedstorage.RefinedStorageUtils; import refinedstorage.api.RefinedStorageAPI; import refinedstorage.api.network.INetworkMaster; import refinedstorage.api.solderer.ISoldererRecipe; import refinedstorage.container.ContainerSolderer; import refinedstorage.inventory.BasicItemHandler; -import refinedstorage.inventory.BasicItemValidator; import refinedstorage.inventory.SoldererItemHandler; +import refinedstorage.inventory.UpgradeItemHandler; import refinedstorage.item.ItemUpgrade; public class TileSolderer extends TileNode { @@ -25,7 +24,7 @@ public class TileSolderer extends TileNode { private static final String NBT_PROGRESS = "Progress"; private BasicItemHandler items = new BasicItemHandler(4, this); - private BasicItemHandler upgrades = new BasicItemHandler(4, this, new BasicItemValidator(RefinedStorageItems.UPGRADE, ItemUpgrade.TYPE_SPEED)); + private UpgradeItemHandler upgrades = new UpgradeItemHandler(4, this, ItemUpgrade.TYPE_SPEED); private SoldererItemHandler[] itemsFacade = new SoldererItemHandler[EnumFacing.values().length]; private ISoldererRecipe recipe; @@ -36,7 +35,7 @@ public class TileSolderer extends TileNode { @Override public int getEnergyUsage() { - return RefinedStorage.INSTANCE.soldererUsage + RefinedStorageUtils.getUpgradeEnergyUsage(upgrades); + return RefinedStorage.INSTANCE.soldererUsage + upgrades.getEnergyUsage(); } @Override @@ -61,7 +60,7 @@ public class TileSolderer extends TileNode { markDirty(); } } else if (working) { - progress += 1 + RefinedStorageUtils.getUpgradeCount(upgrades, ItemUpgrade.TYPE_SPEED); + progress += 1 + upgrades.getUpgradeCount(ItemUpgrade.TYPE_SPEED); if (progress >= recipe.getDuration()) { if (items.getStackInSlot(3) != null) { diff --git a/src/main/java/refinedstorage/tile/TileWirelessTransmitter.java b/src/main/java/refinedstorage/tile/TileWirelessTransmitter.java index b92221410..0718a4d04 100755 --- a/src/main/java/refinedstorage/tile/TileWirelessTransmitter.java +++ b/src/main/java/refinedstorage/tile/TileWirelessTransmitter.java @@ -8,20 +8,19 @@ import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; import refinedstorage.RefinedStorage; -import refinedstorage.RefinedStorageItems; import refinedstorage.RefinedStorageUtils; import refinedstorage.api.network.IWirelessTransmitter; import refinedstorage.container.ContainerWirelessTransmitter; import refinedstorage.inventory.BasicItemHandler; -import refinedstorage.inventory.BasicItemValidator; +import refinedstorage.inventory.UpgradeItemHandler; import refinedstorage.item.ItemUpgrade; public class TileWirelessTransmitter extends TileNode implements IWirelessTransmitter { - private BasicItemHandler upgrades = new BasicItemHandler(4, this, new BasicItemValidator(RefinedStorageItems.UPGRADE, ItemUpgrade.TYPE_RANGE)); + private UpgradeItemHandler upgrades = new UpgradeItemHandler(4, this, ItemUpgrade.TYPE_RANGE); @Override public int getEnergyUsage() { - return RefinedStorage.INSTANCE.wirelessTransmitterUsage + RefinedStorageUtils.getUpgradeEnergyUsage(upgrades); + return RefinedStorage.INSTANCE.wirelessTransmitterUsage + upgrades.getEnergyUsage(); } @Override @@ -46,7 +45,7 @@ public class TileWirelessTransmitter extends TileNode implements IWirelessTransm @Override public int getRange() { - return RefinedStorage.INSTANCE.wirelessTransmitterBaseRange + (RefinedStorageUtils.getUpgradeCount(upgrades, ItemUpgrade.TYPE_RANGE) * RefinedStorage.INSTANCE.wirelessTransmitterRangePerUpgrade); + return RefinedStorage.INSTANCE.wirelessTransmitterBaseRange + (upgrades.getUpgradeCount(ItemUpgrade.TYPE_RANGE) * RefinedStorage.INSTANCE.wirelessTransmitterRangePerUpgrade); } @Override From fc0184cbfd1f766fb0e4d833c721a7b6a7470ab6 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Tue, 19 Jul 2016 04:57:27 +0200 Subject: [PATCH 007/214] Move compare utils to API --- .../refinedstorage/RefinedStorageUtils.java | 87 +----------------- .../api/network/INetworkMaster.java | 8 +- .../api/storage/CompareFlags.java | 10 -- .../api/storage/CompareUtils.java | 91 +++++++++++++++++++ .../api/storage/IGroupedStorage.java | 2 +- .../refinedstorage/api/storage/IStorage.java | 2 +- .../autocrafting/CraftingTaskScheduler.java | 4 +- .../autocrafting/ProcessingCraftingTask.java | 3 +- .../apiimpl/network/GridHandler.java | 5 +- .../apiimpl/network/WirelessGridHandler.java | 3 +- .../apiimpl/solderer/SoldererRegistry.java | 4 +- .../apiimpl/storage/GroupedStorage.java | 7 +- .../apiimpl/storage/NBTStorage.java | 6 +- .../container/ContainerBase.java | 4 +- .../refinedstorage/gui/GuiConstructor.java | 6 +- .../refinedstorage/gui/GuiDestructor.java | 6 +- .../java/refinedstorage/gui/GuiDetector.java | 6 +- .../java/refinedstorage/gui/GuiExporter.java | 6 +- .../java/refinedstorage/gui/GuiImporter.java | 6 +- .../java/refinedstorage/gui/GuiInterface.java | 6 +- .../java/refinedstorage/gui/GuiStorage.java | 6 +- .../gui/sidebutton/SideButtonCompare.java | 6 +- .../refinedstorage/tile/TileSolderer.java | 3 +- .../tile/config/ModeFilter.java | 6 +- .../tile/controller/ClientNode.java | 4 +- .../tile/controller/TileController.java | 6 +- .../DeepStorageUnitStorage.java | 6 +- .../tile/externalstorage/DrawerStorage.java | 4 +- .../tile/externalstorage/ExternalStorage.java | 4 +- .../externalstorage/ItemHandlerStorage.java | 4 +- .../refinedstorage/tile/grid/TileGrid.java | 3 +- 31 files changed, 166 insertions(+), 158 deletions(-) delete mode 100755 src/main/java/refinedstorage/api/storage/CompareFlags.java create mode 100755 src/main/java/refinedstorage/api/storage/CompareUtils.java diff --git a/src/main/java/refinedstorage/RefinedStorageUtils.java b/src/main/java/refinedstorage/RefinedStorageUtils.java index b2c3543b4..9c9d17a6d 100755 --- a/src/main/java/refinedstorage/RefinedStorageUtils.java +++ b/src/main/java/refinedstorage/RefinedStorageUtils.java @@ -16,11 +16,9 @@ import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.wrapper.InvWrapper; import net.minecraftforge.items.wrapper.SidedInvWrapper; -import net.minecraftforge.oredict.OreDictionary; -import org.apache.commons.lang3.ArrayUtils; import refinedstorage.api.autocrafting.ICraftingPattern; import refinedstorage.api.network.INetworkMaster; -import refinedstorage.api.storage.CompareFlags; +import refinedstorage.api.storage.CompareUtils; import java.util.HashSet; import java.util.List; @@ -98,83 +96,6 @@ public final class RefinedStorageUtils { } } - public static boolean compareStack(ItemStack left, ItemStack right) { - return compareStack(left, right, CompareFlags.COMPARE_NBT | CompareFlags.COMPARE_DAMAGE | CompareFlags.COMPARE_QUANTITY); - } - - public static boolean compareStack(ItemStack left, ItemStack right, int flags) { - if (left == null && right == null) { - return true; - } - - if ((left == null && right != null) || (left != null && right == null)) { - return false; - } - - if (left.getItem() != right.getItem()) { - return false; - } - - if ((flags & CompareFlags.COMPARE_DAMAGE) == CompareFlags.COMPARE_DAMAGE) { - if (left.getItemDamage() != right.getItemDamage()) { - return false; - } - } - - if ((flags & CompareFlags.COMPARE_NBT) == CompareFlags.COMPARE_NBT) { - if (!compareNbt(left, right)) { - return false; - } - } - - if ((flags & CompareFlags.COMPARE_QUANTITY) == CompareFlags.COMPARE_QUANTITY) { - if (left.stackSize != right.stackSize) { - return false; - } - } - - return true; - } - - public static boolean compareNbt(ItemStack left, ItemStack right) { - if (!ItemStack.areItemStackTagsEqual(left, right)) { - if (left.hasTagCompound() && !right.hasTagCompound() && left.getTagCompound().hasNoTags()) { - return true; - } else if (!left.hasTagCompound() && right.hasTagCompound() && right.getTagCompound().hasNoTags()) { - return true; - } - - return false; - } - - return true; - } - - public static boolean compareStackNoQuantity(ItemStack left, ItemStack right) { - return compareStack(left, right, CompareFlags.COMPARE_NBT | CompareFlags.COMPARE_DAMAGE); - } - - public static boolean compareStackOreDict(ItemStack left, ItemStack right) { - if (left == null && right == null) { - return true; - } - - if ((left == null && right != null) || (left != null && right == null)) { - return false; - } - - int[] leftIds = OreDictionary.getOreIDs(left); - int[] rightIds = OreDictionary.getOreIDs(right); - - for (int i : rightIds) { - if (ArrayUtils.contains(leftIds, i)) { - return true; - } - } - - return false; - } - public static void writeBooleanArray(NBTTagCompound tag, String name, boolean[] array) { int[] intArray = new int[array.length]; @@ -257,7 +178,7 @@ public final class RefinedStorageUtils { int amount = stacks[i].stackSize; for (int j = i + 1; j < stacks.length; ++j) { - if (RefinedStorageUtils.compareStack(stacks[i], stacks[j])) { + if (CompareUtils.compareStack(stacks[i], stacks[j])) { amount += stacks[j].stackSize; combinedIndices.add(j); @@ -288,11 +209,11 @@ public final class RefinedStorageUtils { } public static ItemStack extractItem(INetworkMaster network, ItemStack stack, int size) { - return network.extractItem(stack, size, CompareFlags.COMPARE_DAMAGE | CompareFlags.COMPARE_NBT); + return network.extractItem(stack, size, CompareUtils.COMPARE_DAMAGE | CompareUtils.COMPARE_NBT); } public static ICraftingPattern getPattern(INetworkMaster network, ItemStack stack) { - return network.getPattern(stack, CompareFlags.COMPARE_DAMAGE | CompareFlags.COMPARE_NBT); + return network.getPattern(stack, CompareUtils.COMPARE_DAMAGE | CompareUtils.COMPARE_NBT); } public static boolean hasPattern(INetworkMaster network, ItemStack stack) { diff --git a/src/main/java/refinedstorage/api/network/INetworkMaster.java b/src/main/java/refinedstorage/api/network/INetworkMaster.java index 4856ed90f..fa0167605 100755 --- a/src/main/java/refinedstorage/api/network/INetworkMaster.java +++ b/src/main/java/refinedstorage/api/network/INetworkMaster.java @@ -6,7 +6,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.util.math.BlockPos; import refinedstorage.api.autocrafting.ICraftingPattern; import refinedstorage.api.autocrafting.ICraftingTask; -import refinedstorage.api.storage.CompareFlags; +import refinedstorage.api.storage.CompareUtils; import refinedstorage.api.storage.IGroupedStorage; import javax.annotation.Nonnull; @@ -110,14 +110,14 @@ public interface INetworkMaster { * Returns crafting patterns from an item stack. * * @param pattern The {@link ItemStack} to get a pattern for - * @param flags The flags to compare on, see {@link CompareFlags} + * @param flags The flags to compare on, see {@link CompareUtils} * @return A list of crafting patterns where the given pattern is one of the outputs */ List getPatterns(ItemStack pattern, int flags); /** * @param pattern The {@link ItemStack} to get a pattern for - * @param flags The flags to compare on, see {@link CompareFlags} + * @param flags The flags to compare on, see {@link CompareUtils} * @return The pattern, or null if the pattern is not found */ @Nullable @@ -157,7 +157,7 @@ public interface INetworkMaster { * * @param stack The prototype of the stack to extract, do NOT modify * @param size The amount of that prototype that has to be extracted - * @param flags The flags to compare on, see {@link CompareFlags} + * @param flags The flags to compare on, see {@link CompareUtils} * @return null if we didn't extract anything, or a {@link ItemStack} with the result */ @Nullable diff --git a/src/main/java/refinedstorage/api/storage/CompareFlags.java b/src/main/java/refinedstorage/api/storage/CompareFlags.java deleted file mode 100755 index fa5d62d08..000000000 --- a/src/main/java/refinedstorage/api/storage/CompareFlags.java +++ /dev/null @@ -1,10 +0,0 @@ -package refinedstorage.api.storage; - -/** - * Comparison flags. - */ -public final class CompareFlags { - public static final int COMPARE_DAMAGE = 1; - public static final int COMPARE_NBT = 2; - public static final int COMPARE_QUANTITY = 4; -} diff --git a/src/main/java/refinedstorage/api/storage/CompareUtils.java b/src/main/java/refinedstorage/api/storage/CompareUtils.java new file mode 100755 index 000000000..7ca1a671b --- /dev/null +++ b/src/main/java/refinedstorage/api/storage/CompareUtils.java @@ -0,0 +1,91 @@ +package refinedstorage.api.storage; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.oredict.OreDictionary; +import org.apache.commons.lang3.ArrayUtils; + +/** + * Comparison utils. + */ +public final class CompareUtils { + public static final int COMPARE_DAMAGE = 1; + public static final int COMPARE_NBT = 2; + public static final int COMPARE_QUANTITY = 4; + + public static boolean compareStack(ItemStack left, ItemStack right) { + return compareStack(left, right, COMPARE_NBT | COMPARE_DAMAGE | COMPARE_QUANTITY); + } + + public static boolean compareStack(ItemStack left, ItemStack right, int flags) { + if (left == null && right == null) { + return true; + } + + if ((left == null && right != null) || (left != null && right == null)) { + return false; + } + + if (left.getItem() != right.getItem()) { + return false; + } + + if ((flags & COMPARE_DAMAGE) == COMPARE_DAMAGE) { + if (left.getItemDamage() != right.getItemDamage()) { + return false; + } + } + + if ((flags & COMPARE_NBT) == COMPARE_NBT) { + if (!compareNbt(left, right)) { + return false; + } + } + + if ((flags & COMPARE_QUANTITY) == COMPARE_QUANTITY) { + if (left.stackSize != right.stackSize) { + return false; + } + } + + return true; + } + + public static boolean compareNbt(ItemStack left, ItemStack right) { + if (!ItemStack.areItemStackTagsEqual(left, right)) { + if (left.hasTagCompound() && !right.hasTagCompound() && left.getTagCompound().hasNoTags()) { + return true; + } else if (!left.hasTagCompound() && right.hasTagCompound() && right.getTagCompound().hasNoTags()) { + return true; + } + + return false; + } + + return true; + } + + public static boolean compareStackNoQuantity(ItemStack left, ItemStack right) { + return compareStack(left, right, COMPARE_NBT | COMPARE_DAMAGE); + } + + public static boolean compareStackOreDict(ItemStack left, ItemStack right) { + if (left == null && right == null) { + return true; + } + + if ((left == null && right != null) || (left != null && right == null)) { + return false; + } + + int[] leftIds = OreDictionary.getOreIDs(left); + int[] rightIds = OreDictionary.getOreIDs(right); + + for (int i : rightIds) { + if (ArrayUtils.contains(leftIds, i)) { + return true; + } + } + + return false; + } +} diff --git a/src/main/java/refinedstorage/api/storage/IGroupedStorage.java b/src/main/java/refinedstorage/api/storage/IGroupedStorage.java index 0d349f98d..674e5b623 100755 --- a/src/main/java/refinedstorage/api/storage/IGroupedStorage.java +++ b/src/main/java/refinedstorage/api/storage/IGroupedStorage.java @@ -35,7 +35,7 @@ public interface IGroupedStorage { * Gets an item from the network, does not decrement its count like {@link IGroupedStorage#remove(ItemStack)} does. * * @param stack The stack to find - * @param flags The flags to compare on, see {@link CompareFlags} + * @param flags The flags to compare on, see {@link CompareUtils} * @return The {@link ItemStack}, do NOT modify */ ItemStack get(ItemStack stack, int flags); diff --git a/src/main/java/refinedstorage/api/storage/IStorage.java b/src/main/java/refinedstorage/api/storage/IStorage.java index 085b98bc2..c7235cbdb 100755 --- a/src/main/java/refinedstorage/api/storage/IStorage.java +++ b/src/main/java/refinedstorage/api/storage/IStorage.java @@ -35,7 +35,7 @@ public interface IStorage { * * @param stack A prototype of the stack to extract, do NOT modify * @param size The amount of that prototype that has to be extracted - * @param flags On what we are comparing to extract this item, see {@link CompareFlags} + * @param flags On what we are comparing to extract this item, see {@link CompareUtils} * @return null if we didn't extract anything, or an {@link ItemStack} with the result */ @Nullable diff --git a/src/main/java/refinedstorage/apiimpl/autocrafting/CraftingTaskScheduler.java b/src/main/java/refinedstorage/apiimpl/autocrafting/CraftingTaskScheduler.java index 201779bc7..54342d0c4 100755 --- a/src/main/java/refinedstorage/apiimpl/autocrafting/CraftingTaskScheduler.java +++ b/src/main/java/refinedstorage/apiimpl/autocrafting/CraftingTaskScheduler.java @@ -3,9 +3,9 @@ package refinedstorage.apiimpl.autocrafting; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; -import refinedstorage.RefinedStorageUtils; import refinedstorage.api.autocrafting.ICraftingPattern; import refinedstorage.api.network.INetworkMaster; +import refinedstorage.api.storage.CompareUtils; public class CraftingTaskScheduler { private static final String NBT_SCHEDULED = "CraftingTaskScheduled"; @@ -18,7 +18,7 @@ public class CraftingTaskScheduler { } public boolean canSchedule(int compare, ItemStack item) { - return scheduledItem == null || !RefinedStorageUtils.compareStack(scheduledItem, item, compare); + return scheduledItem == null || !CompareUtils.compareStack(scheduledItem, item, compare); } public void schedule(INetworkMaster network, int compare, ItemStack item) { diff --git a/src/main/java/refinedstorage/apiimpl/autocrafting/ProcessingCraftingTask.java b/src/main/java/refinedstorage/apiimpl/autocrafting/ProcessingCraftingTask.java index 70368b580..6a780d3a6 100755 --- a/src/main/java/refinedstorage/apiimpl/autocrafting/ProcessingCraftingTask.java +++ b/src/main/java/refinedstorage/apiimpl/autocrafting/ProcessingCraftingTask.java @@ -9,6 +9,7 @@ import refinedstorage.api.autocrafting.ICraftingPattern; import refinedstorage.api.autocrafting.ICraftingPatternContainer; import refinedstorage.api.autocrafting.ICraftingTask; import refinedstorage.api.network.INetworkMaster; +import refinedstorage.api.storage.CompareUtils; public class ProcessingCraftingTask implements ICraftingTask { public static final int ID = 1; @@ -92,7 +93,7 @@ public class ProcessingCraftingTask implements ICraftingTask { public boolean onInserted(ItemStack stack) { for (int i = 0; i < pattern.getOutputs().length; ++i) { - if (!satisfied[i] && RefinedStorageUtils.compareStackNoQuantity(stack, pattern.getOutputs()[i])) { + if (!satisfied[i] && CompareUtils.compareStackNoQuantity(stack, pattern.getOutputs()[i])) { satisfied[i] = true; return true; diff --git a/src/main/java/refinedstorage/apiimpl/network/GridHandler.java b/src/main/java/refinedstorage/apiimpl/network/GridHandler.java index 806811846..1e930fe39 100755 --- a/src/main/java/refinedstorage/apiimpl/network/GridHandler.java +++ b/src/main/java/refinedstorage/apiimpl/network/GridHandler.java @@ -9,6 +9,7 @@ import refinedstorage.api.autocrafting.ICraftingTask; import refinedstorage.api.network.GridExtractFlags; import refinedstorage.api.network.IGridHandler; import refinedstorage.api.network.INetworkMaster; +import refinedstorage.api.storage.CompareUtils; public class GridHandler implements IGridHandler { public static final int MAX_CRAFTING_PER_REQUEST = 500; @@ -34,7 +35,7 @@ public class GridHandler implements IGridHandler { ItemStack held = player.inventory.getItemStack(); if (single) { - if (held != null && (!RefinedStorageUtils.compareStackNoQuantity(item, held) || held.stackSize + 1 > held.getMaxStackSize())) { + if (held != null && (!CompareUtils.compareStackNoQuantity(item, held) || held.stackSize + 1 > held.getMaxStackSize())) { return; } } else if (player.inventory.getItemStack() != null) { @@ -129,7 +130,7 @@ public class GridHandler implements IGridHandler { if (pattern != null) { for (ItemStack output : pattern.getOutputs()) { - if (RefinedStorageUtils.compareStackNoQuantity(stack, output)) { + if (CompareUtils.compareStackNoQuantity(stack, output)) { quantityPerRequest += output.stackSize; if (!pattern.isProcessing()) { diff --git a/src/main/java/refinedstorage/apiimpl/network/WirelessGridHandler.java b/src/main/java/refinedstorage/apiimpl/network/WirelessGridHandler.java index ab8a566ed..84e50eab9 100755 --- a/src/main/java/refinedstorage/apiimpl/network/WirelessGridHandler.java +++ b/src/main/java/refinedstorage/apiimpl/network/WirelessGridHandler.java @@ -9,6 +9,7 @@ import refinedstorage.RefinedStorageGui; import refinedstorage.RefinedStorageItems; import refinedstorage.RefinedStorageUtils; import refinedstorage.api.network.*; +import refinedstorage.api.storage.CompareUtils; import refinedstorage.item.ItemWirelessGrid; import java.util.ArrayList; @@ -39,7 +40,7 @@ public class WirelessGridHandler implements IWirelessGridHandler { while (it.hasNext()) { IWirelessGridConsumer consumer = it.next(); - if (!RefinedStorageUtils.compareStack(consumer.getStack(), consumer.getPlayer().getHeldItem(consumer.getHand()))) { + if (!CompareUtils.compareStack(consumer.getStack(), consumer.getPlayer().getHeldItem(consumer.getHand()))) { /** * This will call {@link net.minecraft.inventory.Container#onContainerClosed(EntityPlayer)} so the consumer is removed from the list. */ diff --git a/src/main/java/refinedstorage/apiimpl/solderer/SoldererRegistry.java b/src/main/java/refinedstorage/apiimpl/solderer/SoldererRegistry.java index efed97dc7..6a08d30c3 100755 --- a/src/main/java/refinedstorage/apiimpl/solderer/SoldererRegistry.java +++ b/src/main/java/refinedstorage/apiimpl/solderer/SoldererRegistry.java @@ -1,9 +1,9 @@ package refinedstorage.apiimpl.solderer; import net.minecraftforge.items.IItemHandler; -import refinedstorage.RefinedStorageUtils; import refinedstorage.api.solderer.ISoldererRecipe; import refinedstorage.api.solderer.ISoldererRegistry; +import refinedstorage.api.storage.CompareUtils; import javax.annotation.Nonnull; import javax.annotation.Nullable; @@ -30,7 +30,7 @@ public class SoldererRegistry implements ISoldererRegistry { boolean found = true; for (int i = 0; i < 3; ++i) { - if (!RefinedStorageUtils.compareStackNoQuantity(recipe.getRow(i), items.getStackInSlot(i)) && !RefinedStorageUtils.compareStackOreDict(recipe.getRow(i), items.getStackInSlot(i))) { + if (!CompareUtils.compareStackNoQuantity(recipe.getRow(i), items.getStackInSlot(i)) && !CompareUtils.compareStackOreDict(recipe.getRow(i), items.getStackInSlot(i))) { found = false; } diff --git a/src/main/java/refinedstorage/apiimpl/storage/GroupedStorage.java b/src/main/java/refinedstorage/apiimpl/storage/GroupedStorage.java index 21855ae17..64c9f5803 100755 --- a/src/main/java/refinedstorage/apiimpl/storage/GroupedStorage.java +++ b/src/main/java/refinedstorage/apiimpl/storage/GroupedStorage.java @@ -8,6 +8,7 @@ import refinedstorage.RefinedStorageUtils; import refinedstorage.api.autocrafting.ICraftingPattern; import refinedstorage.api.network.INetworkMaster; import refinedstorage.api.network.INetworkNode; +import refinedstorage.api.storage.CompareUtils; import refinedstorage.api.storage.IGroupedStorage; import refinedstorage.api.storage.IStorage; import refinedstorage.api.storage.IStorageProvider; @@ -57,7 +58,7 @@ public class GroupedStorage implements IGroupedStorage { @Override public void add(ItemStack stack, boolean rebuilding) { for (ItemStack otherStack : stacks.get(stack.getItem())) { - if (RefinedStorageUtils.compareStackNoQuantity(otherStack, stack)) { + if (CompareUtils.compareStackNoQuantity(otherStack, stack)) { otherStack.stackSize += stack.stackSize; if (!rebuilding) { @@ -78,7 +79,7 @@ public class GroupedStorage implements IGroupedStorage { @Override public void remove(ItemStack stack) { for (ItemStack otherStack : stacks.get(stack.getItem())) { - if (RefinedStorageUtils.compareStackNoQuantity(otherStack, stack)) { + if (CompareUtils.compareStackNoQuantity(otherStack, stack)) { otherStack.stackSize -= stack.stackSize; if (otherStack.stackSize == 0) { @@ -97,7 +98,7 @@ public class GroupedStorage implements IGroupedStorage { @Override public ItemStack get(ItemStack stack, int flags) { for (ItemStack otherStack : stacks.get(stack.getItem())) { - if (RefinedStorageUtils.compareStack(otherStack, stack, flags)) { + if (CompareUtils.compareStack(otherStack, stack, flags)) { return otherStack; } } diff --git a/src/main/java/refinedstorage/apiimpl/storage/NBTStorage.java b/src/main/java/refinedstorage/apiimpl/storage/NBTStorage.java index 8d85afe15..d71a68137 100755 --- a/src/main/java/refinedstorage/apiimpl/storage/NBTStorage.java +++ b/src/main/java/refinedstorage/apiimpl/storage/NBTStorage.java @@ -6,7 +6,7 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.tileentity.TileEntity; import net.minecraftforge.items.ItemHandlerHelper; -import refinedstorage.RefinedStorageUtils; +import refinedstorage.api.storage.CompareUtils; import refinedstorage.api.storage.IStorage; import javax.annotation.Nullable; @@ -117,7 +117,7 @@ public abstract class NBTStorage implements IStorage { @Override public ItemStack insertItem(ItemStack stack, int size, boolean simulate) { for (ItemStack otherStack : stacks) { - if (RefinedStorageUtils.compareStackNoQuantity(otherStack, stack)) { + if (CompareUtils.compareStackNoQuantity(otherStack, stack)) { if (getCapacity() != -1 && getStored() + size > getCapacity()) { int remainingSpace = getCapacity() - getStored(); @@ -180,7 +180,7 @@ public abstract class NBTStorage implements IStorage { @Override public ItemStack extractItem(ItemStack stack, int size, int flags) { for (ItemStack otherStack : stacks) { - if (RefinedStorageUtils.compareStack(otherStack, stack, flags)) { + if (CompareUtils.compareStack(otherStack, stack, flags)) { if (size > otherStack.stackSize) { size = otherStack.stackSize; } diff --git a/src/main/java/refinedstorage/container/ContainerBase.java b/src/main/java/refinedstorage/container/ContainerBase.java index 30be7ff22..1b6be6c65 100755 --- a/src/main/java/refinedstorage/container/ContainerBase.java +++ b/src/main/java/refinedstorage/container/ContainerBase.java @@ -7,7 +7,7 @@ import net.minecraft.inventory.Container; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; import net.minecraftforge.items.ItemHandlerHelper; -import refinedstorage.RefinedStorageUtils; +import refinedstorage.api.storage.CompareUtils; import refinedstorage.container.slot.SlotDisabled; import refinedstorage.container.slot.SlotSpecimen; import refinedstorage.container.slot.SlotSpecimenLegacy; @@ -110,7 +110,7 @@ public abstract class ContainerBase extends Container { public ItemStack mergeItemStackToSpecimen(ItemStack stack, int begin, int end) { for (int i = begin; i < end; ++i) { - if (RefinedStorageUtils.compareStackNoQuantity(getSlot(i).getStack(), stack)) { + if (CompareUtils.compareStackNoQuantity(getSlot(i).getStack(), stack)) { return null; } } diff --git a/src/main/java/refinedstorage/gui/GuiConstructor.java b/src/main/java/refinedstorage/gui/GuiConstructor.java index b97436463..50a8f56c6 100755 --- a/src/main/java/refinedstorage/gui/GuiConstructor.java +++ b/src/main/java/refinedstorage/gui/GuiConstructor.java @@ -1,6 +1,6 @@ package refinedstorage.gui; -import refinedstorage.api.storage.CompareFlags; +import refinedstorage.api.storage.CompareUtils; import refinedstorage.container.ContainerConstructor; import refinedstorage.gui.sidebutton.SideButtonCompare; import refinedstorage.gui.sidebutton.SideButtonRedstoneMode; @@ -19,8 +19,8 @@ public class GuiConstructor extends GuiBase { public void init(int x, int y) { addSideButton(new SideButtonRedstoneMode(constructor)); - addSideButton(new SideButtonCompare(constructor, CompareFlags.COMPARE_DAMAGE)); - addSideButton(new SideButtonCompare(constructor, CompareFlags.COMPARE_NBT)); + addSideButton(new SideButtonCompare(constructor, CompareUtils.COMPARE_DAMAGE)); + addSideButton(new SideButtonCompare(constructor, CompareUtils.COMPARE_NBT)); } @Override diff --git a/src/main/java/refinedstorage/gui/GuiDestructor.java b/src/main/java/refinedstorage/gui/GuiDestructor.java index 3b62a970a..d755c27d2 100755 --- a/src/main/java/refinedstorage/gui/GuiDestructor.java +++ b/src/main/java/refinedstorage/gui/GuiDestructor.java @@ -1,6 +1,6 @@ package refinedstorage.gui; -import refinedstorage.api.storage.CompareFlags; +import refinedstorage.api.storage.CompareUtils; import refinedstorage.container.ContainerDestructor; import refinedstorage.gui.sidebutton.SideButtonCompare; import refinedstorage.gui.sidebutton.SideButtonMode; @@ -22,8 +22,8 @@ public class GuiDestructor extends GuiBase { addSideButton(new SideButtonMode(destructor)); - addSideButton(new SideButtonCompare(destructor, CompareFlags.COMPARE_DAMAGE)); - addSideButton(new SideButtonCompare(destructor, CompareFlags.COMPARE_NBT)); + addSideButton(new SideButtonCompare(destructor, CompareUtils.COMPARE_DAMAGE)); + addSideButton(new SideButtonCompare(destructor, CompareUtils.COMPARE_NBT)); } @Override diff --git a/src/main/java/refinedstorage/gui/GuiDetector.java b/src/main/java/refinedstorage/gui/GuiDetector.java index a52f83ef6..053d7786a 100755 --- a/src/main/java/refinedstorage/gui/GuiDetector.java +++ b/src/main/java/refinedstorage/gui/GuiDetector.java @@ -3,7 +3,7 @@ package refinedstorage.gui; import com.google.common.primitives.Ints; import net.minecraft.client.gui.GuiTextField; import refinedstorage.RefinedStorage; -import refinedstorage.api.storage.CompareFlags; +import refinedstorage.api.storage.CompareUtils; import refinedstorage.container.ContainerDetector; import refinedstorage.gui.sidebutton.SideButtonCompare; import refinedstorage.gui.sidebutton.SideButtonDetectorMode; @@ -25,8 +25,8 @@ public class GuiDetector extends GuiBase { @Override public void init(int x, int y) { - addSideButton(new SideButtonCompare(detector, CompareFlags.COMPARE_DAMAGE)); - addSideButton(new SideButtonCompare(detector, CompareFlags.COMPARE_NBT)); + addSideButton(new SideButtonCompare(detector, CompareUtils.COMPARE_DAMAGE)); + addSideButton(new SideButtonCompare(detector, CompareUtils.COMPARE_NBT)); addSideButton(new SideButtonDetectorMode(detector)); diff --git a/src/main/java/refinedstorage/gui/GuiExporter.java b/src/main/java/refinedstorage/gui/GuiExporter.java index 5d8587cd9..30854d39d 100755 --- a/src/main/java/refinedstorage/gui/GuiExporter.java +++ b/src/main/java/refinedstorage/gui/GuiExporter.java @@ -1,6 +1,6 @@ package refinedstorage.gui; -import refinedstorage.api.storage.CompareFlags; +import refinedstorage.api.storage.CompareUtils; import refinedstorage.container.ContainerExporter; import refinedstorage.gui.sidebutton.SideButtonCompare; import refinedstorage.gui.sidebutton.SideButtonRedstoneMode; @@ -19,8 +19,8 @@ public class GuiExporter extends GuiBase { public void init(int x, int y) { addSideButton(new SideButtonRedstoneMode(exporter)); - addSideButton(new SideButtonCompare(exporter, CompareFlags.COMPARE_DAMAGE)); - addSideButton(new SideButtonCompare(exporter, CompareFlags.COMPARE_NBT)); + addSideButton(new SideButtonCompare(exporter, CompareUtils.COMPARE_DAMAGE)); + addSideButton(new SideButtonCompare(exporter, CompareUtils.COMPARE_NBT)); } @Override diff --git a/src/main/java/refinedstorage/gui/GuiImporter.java b/src/main/java/refinedstorage/gui/GuiImporter.java index 7aa5e7a6d..688a25d35 100755 --- a/src/main/java/refinedstorage/gui/GuiImporter.java +++ b/src/main/java/refinedstorage/gui/GuiImporter.java @@ -1,6 +1,6 @@ package refinedstorage.gui; -import refinedstorage.api.storage.CompareFlags; +import refinedstorage.api.storage.CompareUtils; import refinedstorage.container.ContainerImporter; import refinedstorage.gui.sidebutton.SideButtonCompare; import refinedstorage.gui.sidebutton.SideButtonMode; @@ -22,8 +22,8 @@ public class GuiImporter extends GuiBase { addSideButton(new SideButtonMode(importer)); - addSideButton(new SideButtonCompare(importer, CompareFlags.COMPARE_DAMAGE)); - addSideButton(new SideButtonCompare(importer, CompareFlags.COMPARE_NBT)); + addSideButton(new SideButtonCompare(importer, CompareUtils.COMPARE_DAMAGE)); + addSideButton(new SideButtonCompare(importer, CompareUtils.COMPARE_NBT)); } @Override diff --git a/src/main/java/refinedstorage/gui/GuiInterface.java b/src/main/java/refinedstorage/gui/GuiInterface.java index 9a8f9831a..7df115559 100755 --- a/src/main/java/refinedstorage/gui/GuiInterface.java +++ b/src/main/java/refinedstorage/gui/GuiInterface.java @@ -1,6 +1,6 @@ package refinedstorage.gui; -import refinedstorage.api.storage.CompareFlags; +import refinedstorage.api.storage.CompareUtils; import refinedstorage.container.ContainerInterface; import refinedstorage.gui.sidebutton.SideButtonCompare; import refinedstorage.gui.sidebutton.SideButtonRedstoneMode; @@ -19,8 +19,8 @@ public class GuiInterface extends GuiBase { public void init(int x, int y) { addSideButton(new SideButtonRedstoneMode(tile)); - addSideButton(new SideButtonCompare(tile, CompareFlags.COMPARE_DAMAGE)); - addSideButton(new SideButtonCompare(tile, CompareFlags.COMPARE_NBT)); + addSideButton(new SideButtonCompare(tile, CompareUtils.COMPARE_DAMAGE)); + addSideButton(new SideButtonCompare(tile, CompareUtils.COMPARE_NBT)); } @Override diff --git a/src/main/java/refinedstorage/gui/GuiStorage.java b/src/main/java/refinedstorage/gui/GuiStorage.java index cf996419d..963576e3d 100755 --- a/src/main/java/refinedstorage/gui/GuiStorage.java +++ b/src/main/java/refinedstorage/gui/GuiStorage.java @@ -2,7 +2,7 @@ package refinedstorage.gui; import com.google.common.primitives.Ints; import net.minecraft.client.gui.GuiTextField; -import refinedstorage.api.storage.CompareFlags; +import refinedstorage.api.storage.CompareUtils; import refinedstorage.container.ContainerStorage; import refinedstorage.gui.sidebutton.SideButtonCompare; import refinedstorage.gui.sidebutton.SideButtonMode; @@ -44,8 +44,8 @@ public class GuiStorage extends GuiBase { } if (gui.getCompareConfig() != null) { - addSideButton(new SideButtonCompare(gui.getCompareConfig(), CompareFlags.COMPARE_DAMAGE)); - addSideButton(new SideButtonCompare(gui.getCompareConfig(), CompareFlags.COMPARE_NBT)); + addSideButton(new SideButtonCompare(gui.getCompareConfig(), CompareUtils.COMPARE_DAMAGE)); + addSideButton(new SideButtonCompare(gui.getCompareConfig(), CompareUtils.COMPARE_NBT)); } priorityField = new GuiTextField(0, fontRendererObj, x + 98 + 1, y + 54 + 1, 25, fontRendererObj.FONT_HEIGHT); diff --git a/src/main/java/refinedstorage/gui/sidebutton/SideButtonCompare.java b/src/main/java/refinedstorage/gui/sidebutton/SideButtonCompare.java index 7b9de9eae..20eb21d19 100755 --- a/src/main/java/refinedstorage/gui/sidebutton/SideButtonCompare.java +++ b/src/main/java/refinedstorage/gui/sidebutton/SideButtonCompare.java @@ -2,7 +2,7 @@ package refinedstorage.gui.sidebutton; import net.minecraft.util.text.TextFormatting; import refinedstorage.RefinedStorage; -import refinedstorage.api.storage.CompareFlags; +import refinedstorage.api.storage.CompareUtils; import refinedstorage.gui.GuiBase; import refinedstorage.network.MessageCompareUpdate; import refinedstorage.tile.config.ICompareConfig; @@ -35,9 +35,9 @@ public class SideButtonCompare extends SideButton { int ty = 0; - if (mask == CompareFlags.COMPARE_DAMAGE) { + if (mask == CompareUtils.COMPARE_DAMAGE) { ty = 80; - } else if (mask == CompareFlags.COMPARE_NBT) { + } else if (mask == CompareUtils.COMPARE_NBT) { ty = 48; } diff --git a/src/main/java/refinedstorage/tile/TileSolderer.java b/src/main/java/refinedstorage/tile/TileSolderer.java index c19630ef8..f21d14885 100755 --- a/src/main/java/refinedstorage/tile/TileSolderer.java +++ b/src/main/java/refinedstorage/tile/TileSolderer.java @@ -13,6 +13,7 @@ import refinedstorage.RefinedStorageUtils; import refinedstorage.api.RefinedStorageAPI; import refinedstorage.api.network.INetworkMaster; import refinedstorage.api.solderer.ISoldererRecipe; +import refinedstorage.api.storage.CompareUtils; import refinedstorage.container.ContainerSolderer; import refinedstorage.inventory.BasicItemHandler; import refinedstorage.inventory.SoldererItemHandler; @@ -50,7 +51,7 @@ public class TileSolderer extends TileNode { if (newRecipe == null) { stop(); } else if (newRecipe != recipe) { - boolean sameItem = items.getStackInSlot(3) != null ? RefinedStorageUtils.compareStackNoQuantity(items.getStackInSlot(3), newRecipe.getResult()) : false; + boolean sameItem = items.getStackInSlot(3) != null ? CompareUtils.compareStackNoQuantity(items.getStackInSlot(3), newRecipe.getResult()) : false; if (items.getStackInSlot(3) == null || (sameItem && ((items.getStackInSlot(3).stackSize + newRecipe.getResult().stackSize) <= items.getStackInSlot(3).getMaxStackSize()))) { recipe = newRecipe; diff --git a/src/main/java/refinedstorage/tile/config/ModeFilter.java b/src/main/java/refinedstorage/tile/config/ModeFilter.java index 090916feb..461203bea 100755 --- a/src/main/java/refinedstorage/tile/config/ModeFilter.java +++ b/src/main/java/refinedstorage/tile/config/ModeFilter.java @@ -2,7 +2,7 @@ package refinedstorage.tile.config; import net.minecraft.item.ItemStack; import net.minecraftforge.items.IItemHandler; -import refinedstorage.RefinedStorageUtils; +import refinedstorage.api.storage.CompareUtils; public final class ModeFilter { public static boolean respectsMode(IItemHandler filters, IModeConfig mode, int compare, ItemStack stack) { @@ -15,7 +15,7 @@ public final class ModeFilter { if (slot != null) { slots++; - if (RefinedStorageUtils.compareStack(slot, stack, compare)) { + if (CompareUtils.compareStack(slot, stack, compare)) { return true; } } @@ -26,7 +26,7 @@ public final class ModeFilter { for (int i = 0; i < filters.getSlots(); ++i) { ItemStack slot = filters.getStackInSlot(i); - if (slot != null && RefinedStorageUtils.compareStack(slot, stack, compare)) { + if (slot != null && CompareUtils.compareStack(slot, stack, compare)) { return false; } } diff --git a/src/main/java/refinedstorage/tile/controller/ClientNode.java b/src/main/java/refinedstorage/tile/controller/ClientNode.java index 7b97be51e..a1c73ffe6 100755 --- a/src/main/java/refinedstorage/tile/controller/ClientNode.java +++ b/src/main/java/refinedstorage/tile/controller/ClientNode.java @@ -1,7 +1,7 @@ package refinedstorage.tile.controller; import net.minecraft.item.ItemStack; -import refinedstorage.RefinedStorageUtils; +import refinedstorage.api.storage.CompareUtils; public final class ClientNode { public ItemStack stack; @@ -18,7 +18,7 @@ public final class ClientNode { return false; } - return energyUsage == ((ClientNode) other).energyUsage && RefinedStorageUtils.compareStack(stack, ((ClientNode) other).stack); + return energyUsage == ((ClientNode) other).energyUsage && CompareUtils.compareStack(stack, ((ClientNode) other).stack); } @Override diff --git a/src/main/java/refinedstorage/tile/controller/TileController.java b/src/main/java/refinedstorage/tile/controller/TileController.java index af94298e1..a577eea6f 100755 --- a/src/main/java/refinedstorage/tile/controller/TileController.java +++ b/src/main/java/refinedstorage/tile/controller/TileController.java @@ -31,7 +31,7 @@ import refinedstorage.api.network.IGridHandler; import refinedstorage.api.network.INetworkMaster; import refinedstorage.api.network.INetworkNode; import refinedstorage.api.network.IWirelessGridHandler; -import refinedstorage.api.storage.CompareFlags; +import refinedstorage.api.storage.CompareUtils; import refinedstorage.api.storage.IGroupedStorage; import refinedstorage.api.storage.IStorage; import refinedstorage.apiimpl.autocrafting.BasicCraftingTask; @@ -320,7 +320,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR for (ICraftingPattern craftingPattern : getPatterns()) { for (ItemStack output : craftingPattern.getOutputs()) { - if (RefinedStorageUtils.compareStack(output, pattern, flags)) { + if (CompareUtils.compareStack(output, pattern, flags)) { patterns.add(craftingPattern); } } @@ -346,7 +346,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR int score = 0; for (ItemStack input : patterns.get(i).getInputs()) { - ItemStack stored = storage.get(input, CompareFlags.COMPARE_DAMAGE | CompareFlags.COMPARE_NBT); + ItemStack stored = storage.get(input, CompareUtils.COMPARE_DAMAGE | CompareUtils.COMPARE_NBT); score += stored != null ? stored.stackSize : 0; } diff --git a/src/main/java/refinedstorage/tile/externalstorage/DeepStorageUnitStorage.java b/src/main/java/refinedstorage/tile/externalstorage/DeepStorageUnitStorage.java index 3ed8b7352..24f1159b7 100755 --- a/src/main/java/refinedstorage/tile/externalstorage/DeepStorageUnitStorage.java +++ b/src/main/java/refinedstorage/tile/externalstorage/DeepStorageUnitStorage.java @@ -3,7 +3,7 @@ package refinedstorage.tile.externalstorage; import net.minecraft.item.ItemStack; import net.minecraftforge.items.ItemHandlerHelper; import powercrystals.minefactoryreloaded.api.IDeepStorageUnit; -import refinedstorage.RefinedStorageUtils; +import refinedstorage.api.storage.CompareUtils; import refinedstorage.tile.config.ModeFilter; import javax.annotation.Nonnull; @@ -37,7 +37,7 @@ public class DeepStorageUnitStorage extends ExternalStorage { public ItemStack insertItem(@Nonnull ItemStack stack, int size, boolean simulate) { if (ModeFilter.respectsMode(externalStorage.getFilters(), externalStorage, externalStorage.getCompare(), stack)) { if (unit.getStoredItemType() != null) { - if (RefinedStorageUtils.compareStackNoQuantity(unit.getStoredItemType(), stack)) { + if (CompareUtils.compareStackNoQuantity(unit.getStoredItemType(), stack)) { if (getStored() + size > unit.getMaxStoredCount()) { int remainingSpace = getCapacity() - getStored(); @@ -86,7 +86,7 @@ public class DeepStorageUnitStorage extends ExternalStorage { @Override public ItemStack extractItem(@Nonnull ItemStack stack, int size, int flags) { - if (RefinedStorageUtils.compareStack(stack, unit.getStoredItemType(), flags)) { + if (CompareUtils.compareStack(stack, unit.getStoredItemType(), flags)) { if (size > unit.getStoredItemType().stackSize) { size = unit.getStoredItemType().stackSize; } diff --git a/src/main/java/refinedstorage/tile/externalstorage/DrawerStorage.java b/src/main/java/refinedstorage/tile/externalstorage/DrawerStorage.java index c25924744..4b398d4d7 100755 --- a/src/main/java/refinedstorage/tile/externalstorage/DrawerStorage.java +++ b/src/main/java/refinedstorage/tile/externalstorage/DrawerStorage.java @@ -4,7 +4,7 @@ import com.jaquadro.minecraft.storagedrawers.api.storage.IDrawer; import com.jaquadro.minecraft.storagedrawers.api.storage.attribute.IVoidable; import net.minecraft.item.ItemStack; import net.minecraftforge.items.ItemHandlerHelper; -import refinedstorage.RefinedStorageUtils; +import refinedstorage.api.storage.CompareUtils; import refinedstorage.tile.config.ModeFilter; import java.util.Collections; @@ -88,7 +88,7 @@ public class DrawerStorage extends ExternalStorage { @Override public ItemStack extractItem(ItemStack stack, int size, int flags) { - if (RefinedStorageUtils.compareStack(stack, drawer.getStoredItemPrototype(), flags) && drawer.canItemBeExtracted(stack)) { + if (CompareUtils.compareStack(stack, drawer.getStoredItemPrototype(), flags) && drawer.canItemBeExtracted(stack)) { if (size > drawer.getStoredItemCount()) { size = drawer.getStoredItemCount(); } diff --git a/src/main/java/refinedstorage/tile/externalstorage/ExternalStorage.java b/src/main/java/refinedstorage/tile/externalstorage/ExternalStorage.java index 19f7832c5..6ec709ebf 100755 --- a/src/main/java/refinedstorage/tile/externalstorage/ExternalStorage.java +++ b/src/main/java/refinedstorage/tile/externalstorage/ExternalStorage.java @@ -1,7 +1,7 @@ package refinedstorage.tile.externalstorage; import net.minecraft.item.ItemStack; -import refinedstorage.RefinedStorageUtils; +import refinedstorage.api.storage.CompareUtils; import refinedstorage.api.storage.IStorage; import java.util.List; @@ -22,7 +22,7 @@ public abstract class ExternalStorage implements IStorage { return true; } else { for (int i = 0; i < items.size(); ++i) { - if (!RefinedStorageUtils.compareStack(items.get(i), cache.get(i))) { + if (!CompareUtils.compareStack(items.get(i), cache.get(i))) { cache = items; return true; diff --git a/src/main/java/refinedstorage/tile/externalstorage/ItemHandlerStorage.java b/src/main/java/refinedstorage/tile/externalstorage/ItemHandlerStorage.java index f56af7c1e..716ae16f7 100755 --- a/src/main/java/refinedstorage/tile/externalstorage/ItemHandlerStorage.java +++ b/src/main/java/refinedstorage/tile/externalstorage/ItemHandlerStorage.java @@ -3,7 +3,7 @@ package refinedstorage.tile.externalstorage; import net.minecraft.item.ItemStack; import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.ItemHandlerHelper; -import refinedstorage.RefinedStorageUtils; +import refinedstorage.api.storage.CompareUtils; import refinedstorage.tile.config.ModeFilter; import java.util.ArrayList; @@ -50,7 +50,7 @@ public class ItemHandlerStorage extends ExternalStorage { for (int i = 0; i < handler.getSlots(); ++i) { ItemStack slot = handler.getStackInSlot(i); - if (slot != null && RefinedStorageUtils.compareStack(slot, stack, flags)) { + if (slot != null && CompareUtils.compareStack(slot, stack, flags)) { size = Math.min(size, slot.stackSize); ItemStack took = ItemHandlerHelper.copyStackWithSize(slot, size); diff --git a/src/main/java/refinedstorage/tile/grid/TileGrid.java b/src/main/java/refinedstorage/tile/grid/TileGrid.java index 0f8faac0e..73975aa47 100755 --- a/src/main/java/refinedstorage/tile/grid/TileGrid.java +++ b/src/main/java/refinedstorage/tile/grid/TileGrid.java @@ -15,6 +15,7 @@ import refinedstorage.RefinedStorageBlocks; import refinedstorage.RefinedStorageItems; import refinedstorage.RefinedStorageUtils; import refinedstorage.api.network.IGridHandler; +import refinedstorage.api.storage.CompareUtils; import refinedstorage.block.BlockGrid; import refinedstorage.block.EnumGridType; import refinedstorage.container.ContainerGrid; @@ -174,7 +175,7 @@ public class TileGrid extends TileNode implements IGrid { craftedItems += crafted.stackSize; - if (!RefinedStorageUtils.compareStack(crafted, result.getStackInSlot(0)) || craftedItems + crafted.stackSize > crafted.getMaxStackSize()) { + if (!CompareUtils.compareStack(crafted, result.getStackInSlot(0)) || craftedItems + crafted.stackSize > crafted.getMaxStackSize()) { break; } } From 77c1a2dbd04bd9a8f2ec546597c30fbfde48f37b Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Tue, 19 Jul 2016 05:04:50 +0200 Subject: [PATCH 008/214] Move away more helpers --- .../refinedstorage/RefinedStorageUtils.java | 75 ------------------- .../autocrafting/BasicCraftingTask.java | 5 +- .../autocrafting/ProcessingCraftingTask.java | 5 +- .../apiimpl/network/GridHandler.java | 5 +- .../apiimpl/network/NetworkUtils.java | 32 ++++++++ .../apiimpl/storage/ClientStack.java | 6 +- .../apiimpl/storage/GroupedStorage.java | 6 +- .../java/refinedstorage/block/BlockBase.java | 3 +- src/main/java/refinedstorage/gui/GuiBase.java | 6 ++ .../refinedstorage/gui/GuiController.java | 5 +- .../gui/GuiCraftingMonitor.java | 3 +- .../java/refinedstorage/item/ItemPattern.java | 34 ++++++++- .../refinedstorage/item/ItemWirelessGrid.java | 4 +- .../java/refinedstorage/tile/TileBase.java | 7 +- .../refinedstorage/tile/TileDetector.java | 2 +- .../refinedstorage/tile/TileDiskDrive.java | 2 +- .../java/refinedstorage/tile/TileNode.java | 3 +- .../refinedstorage/tile/TileSolderer.java | 2 +- .../tile/controller/IC2Energy.java | 4 +- .../tile/controller/TileController.java | 3 +- .../refinedstorage/tile/grid/TileGrid.java | 5 +- 21 files changed, 104 insertions(+), 113 deletions(-) create mode 100755 src/main/java/refinedstorage/apiimpl/network/NetworkUtils.java diff --git a/src/main/java/refinedstorage/RefinedStorageUtils.java b/src/main/java/refinedstorage/RefinedStorageUtils.java index 9c9d17a6d..16cdc91a9 100755 --- a/src/main/java/refinedstorage/RefinedStorageUtils.java +++ b/src/main/java/refinedstorage/RefinedStorageUtils.java @@ -9,20 +9,11 @@ import net.minecraft.nbt.NBTTagList; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumHand; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; import net.minecraftforge.common.util.Constants; import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.wrapper.InvWrapper; import net.minecraftforge.items.wrapper.SidedInvWrapper; -import refinedstorage.api.autocrafting.ICraftingPattern; -import refinedstorage.api.network.INetworkMaster; -import refinedstorage.api.storage.CompareUtils; - -import java.util.HashSet; -import java.util.List; -import java.util.Set; public final class RefinedStorageUtils { private static final String NBT_INVENTORY = "Inventory_%d"; @@ -140,10 +131,6 @@ public final class RefinedStorageUtils { } } - public static void updateBlock(World world, BlockPos pos) { - world.notifyBlockUpdate(pos, world.getBlockState(pos), world.getBlockState(pos), 1 | 2); - } - public static IItemHandler getItemHandler(TileEntity tile, EnumFacing side) { if (tile == null) { return null; @@ -161,66 +148,4 @@ public final class RefinedStorageUtils { return handler; } - - public static int calculateOffsetOnScale(int pos, float scale) { - float multiplier = (pos / scale); - - return (int) multiplier; - } - - public static void combineMultipleItemsInTooltip(List lines, ItemStack... stacks) { - Set combinedIndices = new HashSet(); - - for (int i = 0; i < stacks.length; ++i) { - if (!combinedIndices.contains(i)) { - String data = stacks[i].getDisplayName(); - - int amount = stacks[i].stackSize; - - for (int j = i + 1; j < stacks.length; ++j) { - if (CompareUtils.compareStack(stacks[i], stacks[j])) { - amount += stacks[j].stackSize; - - combinedIndices.add(j); - } - } - - if (amount != 1) { - data += " (" + amount + "x)"; - } - - lines.add(data); - } - } - } - - // Keep this on par with the Forestry generators (1 EU is worth 4 RF) - public static int convertIC2ToRF(double amount) { - // IC2 passes infinity sometimes as a simulate test - if (amount >= Double.POSITIVE_INFINITY) { - return Integer.MAX_VALUE; - } - - return (int) Math.floor(amount) * 4; - } - - public static double convertRFToIC2(int amount) { - return Math.floor(amount / 4); - } - - public static ItemStack extractItem(INetworkMaster network, ItemStack stack, int size) { - return network.extractItem(stack, size, CompareUtils.COMPARE_DAMAGE | CompareUtils.COMPARE_NBT); - } - - public static ICraftingPattern getPattern(INetworkMaster network, ItemStack stack) { - return network.getPattern(stack, CompareUtils.COMPARE_DAMAGE | CompareUtils.COMPARE_NBT); - } - - public static boolean hasPattern(INetworkMaster network, ItemStack stack) { - return RefinedStorageUtils.getPattern(network, stack) != null; - } - - public static int getItemStackHashCode(ItemStack stack) { - return stack.getItem().hashCode() * (stack.getItemDamage() + 1) * (stack.hasTagCompound() ? stack.getTagCompound().hashCode() : 1); - } } diff --git a/src/main/java/refinedstorage/apiimpl/autocrafting/BasicCraftingTask.java b/src/main/java/refinedstorage/apiimpl/autocrafting/BasicCraftingTask.java index 93f126982..a1dffe8dd 100755 --- a/src/main/java/refinedstorage/apiimpl/autocrafting/BasicCraftingTask.java +++ b/src/main/java/refinedstorage/apiimpl/autocrafting/BasicCraftingTask.java @@ -9,6 +9,7 @@ import refinedstorage.RefinedStorageUtils; import refinedstorage.api.autocrafting.ICraftingPattern; import refinedstorage.api.autocrafting.ICraftingTask; import refinedstorage.api.network.INetworkMaster; +import refinedstorage.apiimpl.network.NetworkUtils; import java.util.ArrayList; import java.util.List; @@ -67,14 +68,14 @@ public class BasicCraftingTask implements ICraftingTask { if (!satisfied[i]) { done = false; - ItemStack took = RefinedStorageUtils.extractItem(network, input, 1); + ItemStack took = NetworkUtils.extractItem(network, input, 1); if (took != null) { itemsTook.add(took); satisfied[i] = true; } else if (!childTasks[i]) { - ICraftingPattern pattern = RefinedStorageUtils.getPattern(network, input); + ICraftingPattern pattern = NetworkUtils.getPattern(network, input); if (pattern != null) { network.addCraftingTask(network.createCraftingTask(pattern)); diff --git a/src/main/java/refinedstorage/apiimpl/autocrafting/ProcessingCraftingTask.java b/src/main/java/refinedstorage/apiimpl/autocrafting/ProcessingCraftingTask.java index 6a780d3a6..b74f68481 100755 --- a/src/main/java/refinedstorage/apiimpl/autocrafting/ProcessingCraftingTask.java +++ b/src/main/java/refinedstorage/apiimpl/autocrafting/ProcessingCraftingTask.java @@ -10,6 +10,7 @@ import refinedstorage.api.autocrafting.ICraftingPatternContainer; import refinedstorage.api.autocrafting.ICraftingTask; import refinedstorage.api.network.INetworkMaster; import refinedstorage.api.storage.CompareUtils; +import refinedstorage.apiimpl.network.NetworkUtils; public class ProcessingCraftingTask implements ICraftingTask { public static final int ID = 1; @@ -53,7 +54,7 @@ public class ProcessingCraftingTask implements ICraftingTask { for (int i = 0; i < inserted.length; ++i) { if (!inserted[i]) { ItemStack input = pattern.getInputs()[i]; - ItemStack took = RefinedStorageUtils.extractItem(network, input, 1); + ItemStack took = NetworkUtils.extractItem(network, input, 1); if (took != null) { if (ItemHandlerHelper.insertItem(container.getConnectedItems(), took, true) == null) { @@ -64,7 +65,7 @@ public class ProcessingCraftingTask implements ICraftingTask { network.insertItem(took, took.stackSize, false); } } else if (!childTasks[i]) { - ICraftingPattern pattern = RefinedStorageUtils.getPattern(network, input); + ICraftingPattern pattern = NetworkUtils.getPattern(network, input); if (pattern != null) { childTasks[i] = true; diff --git a/src/main/java/refinedstorage/apiimpl/network/GridHandler.java b/src/main/java/refinedstorage/apiimpl/network/GridHandler.java index 1e930fe39..c3ec103eb 100755 --- a/src/main/java/refinedstorage/apiimpl/network/GridHandler.java +++ b/src/main/java/refinedstorage/apiimpl/network/GridHandler.java @@ -3,7 +3,6 @@ package refinedstorage.apiimpl.network; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.inventory.InventoryHelper; import net.minecraft.item.ItemStack; -import refinedstorage.RefinedStorageUtils; import refinedstorage.api.autocrafting.ICraftingPattern; import refinedstorage.api.autocrafting.ICraftingTask; import refinedstorage.api.network.GridExtractFlags; @@ -58,7 +57,7 @@ public class GridHandler implements IGridHandler { size = Math.min(size, item.getItem().getItemStackLimit(item)); - ItemStack took = RefinedStorageUtils.extractItem(network, item, size); + ItemStack took = NetworkUtils.extractItem(network, item, size); if (took != null) { if ((flags & GridExtractFlags.EXTRACT_SHIFT) == GridExtractFlags.EXTRACT_SHIFT) { @@ -126,7 +125,7 @@ public class GridHandler implements IGridHandler { int quantityPerRequest = 0; - ICraftingPattern pattern = RefinedStorageUtils.getPattern(network, stack); + ICraftingPattern pattern = NetworkUtils.getPattern(network, stack); if (pattern != null) { for (ItemStack output : pattern.getOutputs()) { diff --git a/src/main/java/refinedstorage/apiimpl/network/NetworkUtils.java b/src/main/java/refinedstorage/apiimpl/network/NetworkUtils.java new file mode 100755 index 000000000..e6e44849f --- /dev/null +++ b/src/main/java/refinedstorage/apiimpl/network/NetworkUtils.java @@ -0,0 +1,32 @@ +package refinedstorage.apiimpl.network; + +import net.minecraft.item.ItemStack; +import refinedstorage.api.autocrafting.ICraftingPattern; +import refinedstorage.api.network.INetworkMaster; +import refinedstorage.api.storage.CompareUtils; + +public final class NetworkUtils { + public static int convertIC2ToRF(double amount) { + return amount >= Double.POSITIVE_INFINITY ? Integer.MAX_VALUE : ((int) Math.floor(amount) * 4); + } + + public static double convertRFToIC2(int amount) { + return Math.floor(amount / 4); + } + + public static ItemStack extractItem(INetworkMaster network, ItemStack stack, int size) { + return network.extractItem(stack, size, CompareUtils.COMPARE_DAMAGE | CompareUtils.COMPARE_NBT); + } + + public static ICraftingPattern getPattern(INetworkMaster network, ItemStack stack) { + return network.getPattern(stack, CompareUtils.COMPARE_DAMAGE | CompareUtils.COMPARE_NBT); + } + + public static boolean hasPattern(INetworkMaster network, ItemStack stack) { + return getPattern(network, stack) != null; + } + + public static int getItemStackHashCode(ItemStack stack) { + return stack.getItem().hashCode() * (stack.getItemDamage() + 1) * (stack.hasTagCompound() ? stack.getTagCompound().hashCode() : 1); + } +} diff --git a/src/main/java/refinedstorage/apiimpl/storage/ClientStack.java b/src/main/java/refinedstorage/apiimpl/storage/ClientStack.java index 0b568540c..693bf1167 100755 --- a/src/main/java/refinedstorage/apiimpl/storage/ClientStack.java +++ b/src/main/java/refinedstorage/apiimpl/storage/ClientStack.java @@ -4,8 +4,8 @@ import io.netty.buffer.ByteBuf; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraftforge.fml.common.network.ByteBufUtils; -import refinedstorage.RefinedStorageUtils; import refinedstorage.api.network.INetworkMaster; +import refinedstorage.apiimpl.network.NetworkUtils; public class ClientStack { private int id; @@ -47,7 +47,7 @@ public class ClientStack { buf.writeInt(stack.stackSize); buf.writeInt(stack.getItemDamage()); ByteBufUtils.writeTag(buf, stack.getTagCompound()); - buf.writeInt(RefinedStorageUtils.getItemStackHashCode(stack)); - buf.writeBoolean(RefinedStorageUtils.hasPattern(network, stack)); + buf.writeInt(NetworkUtils.getItemStackHashCode(stack)); + buf.writeBoolean(NetworkUtils.hasPattern(network, stack)); } } diff --git a/src/main/java/refinedstorage/apiimpl/storage/GroupedStorage.java b/src/main/java/refinedstorage/apiimpl/storage/GroupedStorage.java index 64c9f5803..8517cb674 100755 --- a/src/main/java/refinedstorage/apiimpl/storage/GroupedStorage.java +++ b/src/main/java/refinedstorage/apiimpl/storage/GroupedStorage.java @@ -4,7 +4,6 @@ import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.Multimap; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -import refinedstorage.RefinedStorageUtils; import refinedstorage.api.autocrafting.ICraftingPattern; import refinedstorage.api.network.INetworkMaster; import refinedstorage.api.network.INetworkNode; @@ -12,6 +11,7 @@ import refinedstorage.api.storage.CompareUtils; import refinedstorage.api.storage.IGroupedStorage; import refinedstorage.api.storage.IStorage; import refinedstorage.api.storage.IStorageProvider; +import refinedstorage.apiimpl.network.NetworkUtils; import java.util.ArrayList; import java.util.Collection; @@ -83,7 +83,7 @@ public class GroupedStorage implements IGroupedStorage { otherStack.stackSize -= stack.stackSize; if (otherStack.stackSize == 0) { - if (!RefinedStorageUtils.hasPattern(network, stack)) { + if (!NetworkUtils.hasPattern(network, stack)) { stacks.remove(otherStack.getItem(), otherStack); } } @@ -109,7 +109,7 @@ public class GroupedStorage implements IGroupedStorage { @Override public ItemStack get(int id) { for (ItemStack stack : this.stacks.values()) { - if (RefinedStorageUtils.getItemStackHashCode(stack) == id) { + if (NetworkUtils.getItemStackHashCode(stack) == id) { return stack; } } diff --git a/src/main/java/refinedstorage/block/BlockBase.java b/src/main/java/refinedstorage/block/BlockBase.java index 33599093b..07238e5b8 100755 --- a/src/main/java/refinedstorage/block/BlockBase.java +++ b/src/main/java/refinedstorage/block/BlockBase.java @@ -17,7 +17,6 @@ import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.items.IItemHandler; import refinedstorage.RefinedStorage; -import refinedstorage.RefinedStorageUtils; import refinedstorage.item.ItemBlockBase; import refinedstorage.tile.TileBase; @@ -91,7 +90,7 @@ public abstract class BlockBase extends Block { tile.setDirection(getPlacementType().getNext(tile.getDirection())); - RefinedStorageUtils.updateBlock(world, pos); + tile.updateBlock(); return true; } diff --git a/src/main/java/refinedstorage/gui/GuiBase.java b/src/main/java/refinedstorage/gui/GuiBase.java index 9d3b30615..932136f4c 100755 --- a/src/main/java/refinedstorage/gui/GuiBase.java +++ b/src/main/java/refinedstorage/gui/GuiBase.java @@ -278,4 +278,10 @@ public abstract class GuiBase extends GuiContainer { public int getGuiTop() { return guiTop; } + + public static int calculateOffsetOnScale(int pos, float scale) { + float multiplier = (pos / scale); + + return (int) multiplier; + } } diff --git a/src/main/java/refinedstorage/gui/GuiController.java b/src/main/java/refinedstorage/gui/GuiController.java index 9f5e937ac..fe61ac2a3 100755 --- a/src/main/java/refinedstorage/gui/GuiController.java +++ b/src/main/java/refinedstorage/gui/GuiController.java @@ -2,7 +2,6 @@ package refinedstorage.gui; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.RenderHelper; -import refinedstorage.RefinedStorageUtils; import refinedstorage.container.ContainerController; import refinedstorage.gui.sidebutton.SideButtonRedstoneMode; import refinedstorage.tile.controller.ClientNode; @@ -77,8 +76,8 @@ public class GuiController extends GuiBase { GlStateManager.pushMatrix(); GlStateManager.scale(scale, scale, 1); - drawString(RefinedStorageUtils.calculateOffsetOnScale(x + 1, scale), RefinedStorageUtils.calculateOffsetOnScale(y - 2, scale), node.stack.getDisplayName()); - drawString(RefinedStorageUtils.calculateOffsetOnScale(x + 21, scale), RefinedStorageUtils.calculateOffsetOnScale(y + 10, scale), t("gui.refinedstorage:controller.machine_amount", node.amount)); + drawString(calculateOffsetOnScale(x + 1, scale), calculateOffsetOnScale(y - 2, scale), node.stack.getDisplayName()); + drawString(calculateOffsetOnScale(x + 21, scale), calculateOffsetOnScale(y + 10, scale), t("gui.refinedstorage:controller.machine_amount", node.amount)); GlStateManager.popMatrix(); diff --git a/src/main/java/refinedstorage/gui/GuiCraftingMonitor.java b/src/main/java/refinedstorage/gui/GuiCraftingMonitor.java index 0733e6bf2..5c8f7cc5e 100755 --- a/src/main/java/refinedstorage/gui/GuiCraftingMonitor.java +++ b/src/main/java/refinedstorage/gui/GuiCraftingMonitor.java @@ -5,7 +5,6 @@ import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.RenderHelper; import net.minecraft.util.text.TextFormatting; import refinedstorage.RefinedStorage; -import refinedstorage.RefinedStorageUtils; import refinedstorage.container.ContainerCraftingMonitor; import refinedstorage.gui.sidebutton.SideButtonRedstoneMode; import refinedstorage.network.MessageCraftingMonitorCancel; @@ -110,7 +109,7 @@ public class GuiCraftingMonitor extends GuiBase { GlStateManager.pushMatrix(); GlStateManager.scale(scale, scale, 1); - drawString(RefinedStorageUtils.calculateOffsetOnScale(x + 5, scale), RefinedStorageUtils.calculateOffsetOnScale(y + 4, scale), task.output.getDisplayName()); + drawString(calculateOffsetOnScale(x + 5, scale), calculateOffsetOnScale(y + 4, scale), task.output.getDisplayName()); GlStateManager.popMatrix(); diff --git a/src/main/java/refinedstorage/item/ItemPattern.java b/src/main/java/refinedstorage/item/ItemPattern.java index b8320fc38..d392896f2 100755 --- a/src/main/java/refinedstorage/item/ItemPattern.java +++ b/src/main/java/refinedstorage/item/ItemPattern.java @@ -13,9 +13,11 @@ import net.minecraft.util.text.TextFormatting; import net.minecraft.world.World; import net.minecraftforge.common.util.Constants; import refinedstorage.RefinedStorageItems; -import refinedstorage.RefinedStorageUtils; +import refinedstorage.api.storage.CompareUtils; +import java.util.HashSet; import java.util.List; +import java.util.Set; public class ItemPattern extends ItemBase { public static final String NBT_INPUTS = "Inputs"; @@ -33,12 +35,38 @@ public class ItemPattern extends ItemBase { if (GuiScreen.isShiftKeyDown() || isProcessing(pattern)) { list.add(TextFormatting.YELLOW + I18n.format("misc.refinedstorage:pattern.inputs") + TextFormatting.RESET); - RefinedStorageUtils.combineMultipleItemsInTooltip(list, getInputs(pattern)); + combineItems(list, getInputs(pattern)); list.add(TextFormatting.YELLOW + I18n.format("misc.refinedstorage:pattern.outputs") + TextFormatting.RESET); } - RefinedStorageUtils.combineMultipleItemsInTooltip(list, getOutputs(pattern)); + combineItems(list, getOutputs(pattern)); + } + } + + private void combineItems(List lines, ItemStack... stacks) { + Set combinedIndices = new HashSet(); + + for (int i = 0; i < stacks.length; ++i) { + if (!combinedIndices.contains(i)) { + String data = stacks[i].getDisplayName(); + + int amount = stacks[i].stackSize; + + for (int j = i + 1; j < stacks.length; ++j) { + if (CompareUtils.compareStack(stacks[i], stacks[j])) { + amount += stacks[j].stackSize; + + combinedIndices.add(j); + } + } + + if (amount != 1) { + data += " (" + amount + "x)"; + } + + lines.add(data); + } } } diff --git a/src/main/java/refinedstorage/item/ItemWirelessGrid.java b/src/main/java/refinedstorage/item/ItemWirelessGrid.java index ef48b2b30..84d08bc0f 100755 --- a/src/main/java/refinedstorage/item/ItemWirelessGrid.java +++ b/src/main/java/refinedstorage/item/ItemWirelessGrid.java @@ -31,8 +31,8 @@ import refinedstorage.tile.grid.TileGrid; import javax.annotation.Nullable; import java.util.List; -import static refinedstorage.RefinedStorageUtils.convertIC2ToRF; -import static refinedstorage.RefinedStorageUtils.convertRFToIC2; +import static refinedstorage.apiimpl.network.NetworkUtils.convertIC2ToRF; +import static refinedstorage.apiimpl.network.NetworkUtils.convertRFToIC2; @Optional.InterfaceList({ @Optional.Interface(iface = "ic2.api.item.ISpecialElectricItem", modid = "IC2"), diff --git a/src/main/java/refinedstorage/tile/TileBase.java b/src/main/java/refinedstorage/tile/TileBase.java index 98cee85a4..48e8317f0 100755 --- a/src/main/java/refinedstorage/tile/TileBase.java +++ b/src/main/java/refinedstorage/tile/TileBase.java @@ -13,7 +13,6 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.minecraftforge.items.IItemHandler; import refinedstorage.RefinedStorage; -import refinedstorage.RefinedStorageUtils; import refinedstorage.network.MessageTileContainerUpdate; import javax.annotation.Nullable; @@ -40,6 +39,10 @@ public abstract class TileBase extends TileEntity implements ITickable { } } + public void updateBlock() { + worldObj.notifyBlockUpdate(pos, worldObj.getBlockState(pos), worldObj.getBlockState(pos), 1 | 2); + } + public void setDirection(EnumFacing direction) { this.direction = direction; @@ -69,7 +72,7 @@ public abstract class TileBase extends TileEntity implements ITickable { public void readUpdate(NBTTagCompound tag) { direction = EnumFacing.getFront(tag.getInteger(NBT_DIRECTION)); - RefinedStorageUtils.updateBlock(worldObj, pos); + updateBlock(); } @Override diff --git a/src/main/java/refinedstorage/tile/TileDetector.java b/src/main/java/refinedstorage/tile/TileDetector.java index ef508062a..d983f1869 100755 --- a/src/main/java/refinedstorage/tile/TileDetector.java +++ b/src/main/java/refinedstorage/tile/TileDetector.java @@ -82,7 +82,7 @@ public class TileDetector extends TileNode implements ICompareConfig { worldObj.notifyNeighborsOfStateChange(pos, RefinedStorageBlocks.DETECTOR); - RefinedStorageUtils.updateBlock(worldObj, pos); + updateBlock(); } super.update(); diff --git a/src/main/java/refinedstorage/tile/TileDiskDrive.java b/src/main/java/refinedstorage/tile/TileDiskDrive.java index 2ff45cb73..0a479735e 100755 --- a/src/main/java/refinedstorage/tile/TileDiskDrive.java +++ b/src/main/java/refinedstorage/tile/TileDiskDrive.java @@ -105,7 +105,7 @@ public class TileDiskDrive extends TileNode implements IStorageProvider, IStorag if (stored != getStoredForDisplayServer()) { stored = getStoredForDisplayServer(); - RefinedStorageUtils.updateBlock(worldObj, pos); + updateBlock(); } } diff --git a/src/main/java/refinedstorage/tile/TileNode.java b/src/main/java/refinedstorage/tile/TileNode.java index 70202a4e6..2e9504ae6 100755 --- a/src/main/java/refinedstorage/tile/TileNode.java +++ b/src/main/java/refinedstorage/tile/TileNode.java @@ -4,7 +4,6 @@ import io.netty.buffer.ByteBuf; import net.minecraft.block.Block; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.math.BlockPos; -import refinedstorage.RefinedStorageUtils; import refinedstorage.api.network.INetworkMaster; import refinedstorage.api.network.INetworkNode; import refinedstorage.block.BlockNode; @@ -46,7 +45,7 @@ public abstract class TileNode extends TileBase implements INetworkNode, ISynchr } if (active != isActive() && canSendConnectivityUpdate()) { - RefinedStorageUtils.updateBlock(worldObj, pos); + updateBlock(); active = isActive(); } diff --git a/src/main/java/refinedstorage/tile/TileSolderer.java b/src/main/java/refinedstorage/tile/TileSolderer.java index f21d14885..1f64e134f 100755 --- a/src/main/java/refinedstorage/tile/TileSolderer.java +++ b/src/main/java/refinedstorage/tile/TileSolderer.java @@ -86,7 +86,7 @@ public class TileSolderer extends TileNode { } if (wasWorking != working) { - RefinedStorageUtils.updateBlock(worldObj, pos); + updateBlock(); } } diff --git a/src/main/java/refinedstorage/tile/controller/IC2Energy.java b/src/main/java/refinedstorage/tile/controller/IC2Energy.java index aaf7e8a8b..d1f052031 100755 --- a/src/main/java/refinedstorage/tile/controller/IC2Energy.java +++ b/src/main/java/refinedstorage/tile/controller/IC2Energy.java @@ -3,8 +3,8 @@ package refinedstorage.tile.controller; import ic2.api.energy.prefab.BasicSink; import net.minecraft.util.EnumFacing; -import static refinedstorage.RefinedStorageUtils.convertIC2ToRF; -import static refinedstorage.RefinedStorageUtils.convertRFToIC2; +import static refinedstorage.apiimpl.network.NetworkUtils.convertIC2ToRF; +import static refinedstorage.apiimpl.network.NetworkUtils.convertRFToIC2; public class IC2Energy { private BasicSink sink; diff --git a/src/main/java/refinedstorage/tile/controller/TileController.java b/src/main/java/refinedstorage/tile/controller/TileController.java index a577eea6f..b349fa3c0 100755 --- a/src/main/java/refinedstorage/tile/controller/TileController.java +++ b/src/main/java/refinedstorage/tile/controller/TileController.java @@ -23,7 +23,6 @@ import net.minecraftforge.fml.common.network.ByteBufUtils; import net.minecraftforge.items.ItemHandlerHelper; import refinedstorage.RefinedStorage; import refinedstorage.RefinedStorageBlocks; -import refinedstorage.RefinedStorageUtils; import refinedstorage.api.autocrafting.ICraftingPattern; import refinedstorage.api.autocrafting.ICraftingPatternContainer; import refinedstorage.api.autocrafting.ICraftingTask; @@ -195,7 +194,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR if (getEnergyScaledForDisplay() != lastEnergyDisplay) { lastEnergyDisplay = getEnergyScaledForDisplay(); - RefinedStorageUtils.updateBlock(worldObj, pos); + updateBlock(); } if (getEnergyScaledForComparator() != lastEnergyComparator) { diff --git a/src/main/java/refinedstorage/tile/grid/TileGrid.java b/src/main/java/refinedstorage/tile/grid/TileGrid.java index 73975aa47..8e2580ff4 100755 --- a/src/main/java/refinedstorage/tile/grid/TileGrid.java +++ b/src/main/java/refinedstorage/tile/grid/TileGrid.java @@ -16,6 +16,7 @@ import refinedstorage.RefinedStorageItems; import refinedstorage.RefinedStorageUtils; import refinedstorage.api.network.IGridHandler; import refinedstorage.api.storage.CompareUtils; +import refinedstorage.apiimpl.network.NetworkUtils; import refinedstorage.block.BlockGrid; import refinedstorage.block.EnumGridType; import refinedstorage.container.ContainerGrid; @@ -152,7 +153,7 @@ public class TileGrid extends TileNode implements IGrid { } else { if (slot != null) { if (slot.stackSize == 1 && isConnected()) { - matrix.setInventorySlotContents(i, RefinedStorageUtils.extractItem(network, slot, 1)); + matrix.setInventorySlotContents(i, NetworkUtils.extractItem(network, slot, 1)); } else { matrix.decrStackSize(i, 1); } @@ -246,7 +247,7 @@ public class TileGrid extends TileNode implements IGrid { if (getType() == EnumGridType.CRAFTING) { for (ItemStack possibility : possibilities) { - ItemStack took = RefinedStorageUtils.extractItem(network, possibility, 1); + ItemStack took = NetworkUtils.extractItem(network, possibility, 1); if (took != null) { matrix.setInventorySlotContents(i, took); From 8743aaa214bcd73f35a80835d34624daf822121e Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Tue, 19 Jul 2016 05:13:07 +0200 Subject: [PATCH 009/214] Move out all remaining stuff from utils to classes --- .../refinedstorage/RefinedStorageUtils.java | 151 ------------------ .../autocrafting/BasicCraftingTask.java | 36 ++++- .../autocrafting/ProcessingCraftingTask.java | 13 +- .../apiimpl/network/WirelessGridHandler.java | 3 +- .../java/refinedstorage/gui/GuiHandler.java | 4 +- .../MessageWirelessGridSettingsUpdate.java | 4 +- .../java/refinedstorage/tile/TileBase.java | 97 +++++++++++ .../refinedstorage/tile/TileConstructor.java | 9 +- .../java/refinedstorage/tile/TileCrafter.java | 11 +- .../refinedstorage/tile/TileDestructor.java | 9 +- .../refinedstorage/tile/TileDetector.java | 5 +- .../refinedstorage/tile/TileDiskDrive.java | 9 +- .../refinedstorage/tile/TileExporter.java | 11 +- .../refinedstorage/tile/TileImporter.java | 11 +- .../refinedstorage/tile/TileInterface.java | 17 +- .../tile/TileProcessingPatternEncoder.java | 9 +- .../refinedstorage/tile/TileSolderer.java | 9 +- .../java/refinedstorage/tile/TileStorage.java | 5 +- .../tile/TileWirelessTransmitter.java | 5 +- .../externalstorage/TileExternalStorage.java | 8 +- .../refinedstorage/tile/grid/TileGrid.java | 10 +- .../tile/grid/WirelessGrid.java | 9 +- 22 files changed, 199 insertions(+), 246 deletions(-) delete mode 100755 src/main/java/refinedstorage/RefinedStorageUtils.java diff --git a/src/main/java/refinedstorage/RefinedStorageUtils.java b/src/main/java/refinedstorage/RefinedStorageUtils.java deleted file mode 100755 index 16cdc91a9..000000000 --- a/src/main/java/refinedstorage/RefinedStorageUtils.java +++ /dev/null @@ -1,151 +0,0 @@ -package refinedstorage; - -import net.minecraft.inventory.IInventory; -import net.minecraft.inventory.ISidedInventory; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.nbt.NBTTagIntArray; -import net.minecraft.nbt.NBTTagList; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.EnumHand; -import net.minecraftforge.common.util.Constants; -import net.minecraftforge.items.CapabilityItemHandler; -import net.minecraftforge.items.IItemHandler; -import net.minecraftforge.items.wrapper.InvWrapper; -import net.minecraftforge.items.wrapper.SidedInvWrapper; - -public final class RefinedStorageUtils { - private static final String NBT_INVENTORY = "Inventory_%d"; - private static final String NBT_SLOT = "Slot"; - - public static void writeItems(IItemHandler handler, int id, NBTTagCompound nbt) { - NBTTagList tagList = new NBTTagList(); - - for (int i = 0; i < handler.getSlots(); i++) { - if (handler.getStackInSlot(i) != null) { - NBTTagCompound compoundTag = new NBTTagCompound(); - - compoundTag.setInteger(NBT_SLOT, i); - - handler.getStackInSlot(i).writeToNBT(compoundTag); - - tagList.appendTag(compoundTag); - } - } - - nbt.setTag(String.format(NBT_INVENTORY, id), tagList); - } - - public static void readItems(IItemHandler handler, int id, NBTTagCompound nbt) { - String name = String.format(NBT_INVENTORY, id); - - if (nbt.hasKey(name)) { - NBTTagList tagList = nbt.getTagList(name, Constants.NBT.TAG_COMPOUND); - - for (int i = 0; i < tagList.tagCount(); i++) { - int slot = tagList.getCompoundTagAt(i).getInteger(NBT_SLOT); - - ItemStack stack = ItemStack.loadItemStackFromNBT(tagList.getCompoundTagAt(i)); - - handler.insertItem(slot, stack, false); - } - } - } - - public static void writeItemsLegacy(IInventory inventory, int id, NBTTagCompound nbt) { - NBTTagList tagList = new NBTTagList(); - - for (int i = 0; i < inventory.getSizeInventory(); i++) { - if (inventory.getStackInSlot(i) != null) { - NBTTagCompound compoundTag = new NBTTagCompound(); - - compoundTag.setInteger(NBT_SLOT, i); - - inventory.getStackInSlot(i).writeToNBT(compoundTag); - - tagList.appendTag(compoundTag); - } - } - - nbt.setTag(String.format(NBT_INVENTORY, id), tagList); - } - - public static void readItemsLegacy(IInventory inventory, int id, NBTTagCompound nbt) { - String name = String.format(NBT_INVENTORY, id); - - if (nbt.hasKey(name)) { - NBTTagList tagList = nbt.getTagList(name, Constants.NBT.TAG_COMPOUND); - - for (int i = 0; i < tagList.tagCount(); i++) { - int slot = tagList.getCompoundTagAt(i).getInteger(NBT_SLOT); - - ItemStack stack = ItemStack.loadItemStackFromNBT(tagList.getCompoundTagAt(i)); - - inventory.setInventorySlotContents(slot, stack); - } - } - } - - public static void writeBooleanArray(NBTTagCompound tag, String name, boolean[] array) { - int[] intArray = new int[array.length]; - - for (int i = 0; i < intArray.length; ++i) { - intArray[i] = array[i] ? 1 : 0; - } - - tag.setTag(name, new NBTTagIntArray(intArray)); - } - - public static boolean[] readBooleanArray(NBTTagCompound tag, String name) { - int[] intArray = tag.getIntArray(name); - - boolean array[] = new boolean[intArray.length]; - - for (int i = 0; i < intArray.length; ++i) { - array[i] = intArray[i] == 1 ? true : false; - } - - return array; - } - - public static EnumHand getHandById(int id) { - switch (id) { - case 0: - return EnumHand.MAIN_HAND; - case 1: - return EnumHand.OFF_HAND; - default: - return EnumHand.MAIN_HAND; - } - } - - public static int getIdFromHand(EnumHand hand) { - switch (hand) { - case MAIN_HAND: - return 0; - case OFF_HAND: - return 1; - default: - return 0; - } - } - - public static IItemHandler getItemHandler(TileEntity tile, EnumFacing side) { - if (tile == null) { - return null; - } - - IItemHandler handler = tile.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, side); - - if (handler == null) { - if (side != null && tile instanceof ISidedInventory) { - handler = new SidedInvWrapper((ISidedInventory) tile, side); - } else if (tile instanceof IInventory) { - handler = new InvWrapper((IInventory) tile); - } - } - - return handler; - } -} diff --git a/src/main/java/refinedstorage/apiimpl/autocrafting/BasicCraftingTask.java b/src/main/java/refinedstorage/apiimpl/autocrafting/BasicCraftingTask.java index a1dffe8dd..32647b06f 100755 --- a/src/main/java/refinedstorage/apiimpl/autocrafting/BasicCraftingTask.java +++ b/src/main/java/refinedstorage/apiimpl/autocrafting/BasicCraftingTask.java @@ -2,10 +2,10 @@ package refinedstorage.apiimpl.autocrafting; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagIntArray; import net.minecraft.nbt.NBTTagList; import net.minecraft.world.World; import net.minecraftforge.common.util.Constants; -import refinedstorage.RefinedStorageUtils; import refinedstorage.api.autocrafting.ICraftingPattern; import refinedstorage.api.autocrafting.ICraftingTask; import refinedstorage.api.network.INetworkMaster; @@ -38,9 +38,9 @@ public class BasicCraftingTask implements ICraftingTask { public BasicCraftingTask(NBTTagCompound tag, ICraftingPattern pattern) { this.pattern = pattern; - this.satisfied = RefinedStorageUtils.readBooleanArray(tag, NBT_SATISFIED); - this.checked = RefinedStorageUtils.readBooleanArray(tag, NBT_CHECKED); - this.childTasks = RefinedStorageUtils.readBooleanArray(tag, NBT_CHILD_TASKS); + this.satisfied = readBooleanArray(tag, NBT_SATISFIED); + this.checked = readBooleanArray(tag, NBT_CHECKED); + this.childTasks = readBooleanArray(tag, NBT_CHILD_TASKS); NBTTagList tookList = tag.getTagList(NBT_TOOK, Constants.NBT.TAG_COMPOUND); @@ -121,9 +121,9 @@ public class BasicCraftingTask implements ICraftingTask { pattern.writeToNBT(patternTag); tag.setTag(CraftingPattern.NBT, patternTag); - RefinedStorageUtils.writeBooleanArray(tag, NBT_SATISFIED, satisfied); - RefinedStorageUtils.writeBooleanArray(tag, NBT_CHECKED, checked); - RefinedStorageUtils.writeBooleanArray(tag, NBT_CHILD_TASKS, childTasks); + writeBooleanArray(tag, NBT_SATISFIED, satisfied); + writeBooleanArray(tag, NBT_CHECKED, checked); + writeBooleanArray(tag, NBT_CHILD_TASKS, childTasks); NBTTagList tookList = new NBTTagList(); @@ -178,4 +178,26 @@ public class BasicCraftingTask implements ICraftingTask { return builder.toString(); } + + public static void writeBooleanArray(NBTTagCompound tag, String name, boolean[] array) { + int[] intArray = new int[array.length]; + + for (int i = 0; i < intArray.length; ++i) { + intArray[i] = array[i] ? 1 : 0; + } + + tag.setTag(name, new NBTTagIntArray(intArray)); + } + + public static boolean[] readBooleanArray(NBTTagCompound tag, String name) { + int[] intArray = tag.getIntArray(name); + + boolean array[] = new boolean[intArray.length]; + + for (int i = 0; i < intArray.length; ++i) { + array[i] = intArray[i] == 1 ? true : false; + } + + return array; + } } diff --git a/src/main/java/refinedstorage/apiimpl/autocrafting/ProcessingCraftingTask.java b/src/main/java/refinedstorage/apiimpl/autocrafting/ProcessingCraftingTask.java index b74f68481..a71515321 100755 --- a/src/main/java/refinedstorage/apiimpl/autocrafting/ProcessingCraftingTask.java +++ b/src/main/java/refinedstorage/apiimpl/autocrafting/ProcessingCraftingTask.java @@ -4,7 +4,6 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.world.World; import net.minecraftforge.items.ItemHandlerHelper; -import refinedstorage.RefinedStorageUtils; import refinedstorage.api.autocrafting.ICraftingPattern; import refinedstorage.api.autocrafting.ICraftingPatternContainer; import refinedstorage.api.autocrafting.ICraftingTask; @@ -34,9 +33,9 @@ public class ProcessingCraftingTask implements ICraftingTask { public ProcessingCraftingTask(NBTTagCompound tag, ICraftingPattern pattern) { this.pattern = pattern; - this.inserted = RefinedStorageUtils.readBooleanArray(tag, NBT_INSERTED); - this.childTasks = RefinedStorageUtils.readBooleanArray(tag, NBT_CHILD_TASKS); - this.satisfied = RefinedStorageUtils.readBooleanArray(tag, NBT_SATISFIED); + this.inserted = BasicCraftingTask.readBooleanArray(tag, NBT_INSERTED); + this.childTasks = BasicCraftingTask.readBooleanArray(tag, NBT_CHILD_TASKS); + this.satisfied = BasicCraftingTask.readBooleanArray(tag, NBT_SATISFIED); } @Override @@ -120,9 +119,9 @@ public class ProcessingCraftingTask implements ICraftingTask { pattern.writeToNBT(patternTag); tag.setTag(CraftingPattern.NBT, patternTag); - RefinedStorageUtils.writeBooleanArray(tag, NBT_INSERTED, inserted); - RefinedStorageUtils.writeBooleanArray(tag, NBT_CHILD_TASKS, childTasks); - RefinedStorageUtils.writeBooleanArray(tag, NBT_SATISFIED, satisfied); + BasicCraftingTask.writeBooleanArray(tag, NBT_INSERTED, inserted); + BasicCraftingTask.writeBooleanArray(tag, NBT_CHILD_TASKS, childTasks); + BasicCraftingTask.writeBooleanArray(tag, NBT_SATISFIED, satisfied); tag.setInteger("Type", ID); } diff --git a/src/main/java/refinedstorage/apiimpl/network/WirelessGridHandler.java b/src/main/java/refinedstorage/apiimpl/network/WirelessGridHandler.java index 84e50eab9..25634bd19 100755 --- a/src/main/java/refinedstorage/apiimpl/network/WirelessGridHandler.java +++ b/src/main/java/refinedstorage/apiimpl/network/WirelessGridHandler.java @@ -7,7 +7,6 @@ import net.minecraft.util.EnumHand; import refinedstorage.RefinedStorage; import refinedstorage.RefinedStorageGui; import refinedstorage.RefinedStorageItems; -import refinedstorage.RefinedStorageUtils; import refinedstorage.api.network.*; import refinedstorage.api.storage.CompareUtils; import refinedstorage.item.ItemWirelessGrid; @@ -73,7 +72,7 @@ public class WirelessGridHandler implements IWirelessGridHandler { consumers.add(new WirelessGridConsumer(player, hand, player.getHeldItem(hand))); - player.openGui(RefinedStorage.INSTANCE, RefinedStorageGui.WIRELESS_GRID, player.worldObj, RefinedStorageUtils.getIdFromHand(hand), 0, 0); + player.openGui(RefinedStorage.INSTANCE, RefinedStorageGui.WIRELESS_GRID, player.worldObj, hand.ordinal(), 0, 0); network.sendStorageToClient((EntityPlayerMP) player); diff --git a/src/main/java/refinedstorage/gui/GuiHandler.java b/src/main/java/refinedstorage/gui/GuiHandler.java index 87e374ce4..bef7a4d4d 100755 --- a/src/main/java/refinedstorage/gui/GuiHandler.java +++ b/src/main/java/refinedstorage/gui/GuiHandler.java @@ -3,11 +3,11 @@ package refinedstorage.gui; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumHand; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.minecraftforge.fml.common.network.IGuiHandler; import refinedstorage.RefinedStorageGui; -import refinedstorage.RefinedStorageUtils; import refinedstorage.container.*; import refinedstorage.tile.*; import refinedstorage.tile.controller.TileController; @@ -64,7 +64,7 @@ public class GuiHandler implements IGuiHandler { } private WirelessGrid getWirelessGrid(EntityPlayer player, int hand) { - return new WirelessGrid(player.worldObj, player.getHeldItem(RefinedStorageUtils.getHandById(hand)), RefinedStorageUtils.getHandById(hand)); + return new WirelessGrid(player.worldObj, player.getHeldItem(EnumHand.values()[hand]), EnumHand.values()[hand]); } private ContainerGrid getWirelessGridContainer(EntityPlayer player, int hand) { diff --git a/src/main/java/refinedstorage/network/MessageWirelessGridSettingsUpdate.java b/src/main/java/refinedstorage/network/MessageWirelessGridSettingsUpdate.java index f2df18d25..aa3a1919d 100755 --- a/src/main/java/refinedstorage/network/MessageWirelessGridSettingsUpdate.java +++ b/src/main/java/refinedstorage/network/MessageWirelessGridSettingsUpdate.java @@ -3,9 +3,9 @@ package refinedstorage.network; import io.netty.buffer.ByteBuf; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumHand; import net.minecraftforge.fml.common.network.simpleimpl.IMessage; import refinedstorage.RefinedStorageItems; -import refinedstorage.RefinedStorageUtils; import refinedstorage.tile.grid.TileGrid; public class MessageWirelessGridSettingsUpdate extends MessageHandlerPlayerToServer implements IMessage { @@ -46,7 +46,7 @@ public class MessageWirelessGridSettingsUpdate extends MessageHandlerPlayerToSer @Override public void handle(MessageWirelessGridSettingsUpdate message, EntityPlayerMP player) { - ItemStack held = player.getHeldItem(RefinedStorageUtils.getHandById(message.hand)); + ItemStack held = player.getHeldItem((message.hand < 0 || message.hand > EnumHand.values().length - 1) ? EnumHand.MAIN_HAND : EnumHand.values()[message.hand]); if (held != null && held.getItem() == RefinedStorageItems.WIRELESS_GRID && held.getTagCompound() != null) { if (TileGrid.isValidViewType(message.viewType)) { diff --git a/src/main/java/refinedstorage/tile/TileBase.java b/src/main/java/refinedstorage/tile/TileBase.java index 48e8317f0..751aa7f4e 100755 --- a/src/main/java/refinedstorage/tile/TileBase.java +++ b/src/main/java/refinedstorage/tile/TileBase.java @@ -3,7 +3,11 @@ package refinedstorage.tile; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; import net.minecraft.network.NetworkManager; import net.minecraft.network.play.server.SPacketUpdateTileEntity; import net.minecraft.tileentity.TileEntity; @@ -11,7 +15,11 @@ import net.minecraft.util.EnumFacing; import net.minecraft.util.ITickable; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; +import net.minecraftforge.common.util.Constants; +import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; +import net.minecraftforge.items.wrapper.InvWrapper; +import net.minecraftforge.items.wrapper.SidedInvWrapper; import refinedstorage.RefinedStorage; import refinedstorage.network.MessageTileContainerUpdate; @@ -20,6 +28,9 @@ import javax.annotation.Nullable; public abstract class TileBase extends TileEntity implements ITickable { private static final String NBT_DIRECTION = "Direction"; + private static final String NBT_INVENTORY = "Inventory_%d"; + private static final String NBT_SLOT = "Slot"; + private EnumFacing direction = EnumFacing.NORTH; protected int ticks = 0; @@ -122,4 +133,90 @@ public abstract class TileBase extends TileEntity implements ITickable { public IItemHandler getDroppedItems() { return null; } + + protected void writeItems(IItemHandler handler, int id, NBTTagCompound nbt) { + NBTTagList tagList = new NBTTagList(); + + for (int i = 0; i < handler.getSlots(); i++) { + if (handler.getStackInSlot(i) != null) { + NBTTagCompound compoundTag = new NBTTagCompound(); + + compoundTag.setInteger(NBT_SLOT, i); + + handler.getStackInSlot(i).writeToNBT(compoundTag); + + tagList.appendTag(compoundTag); + } + } + + nbt.setTag(String.format(NBT_INVENTORY, id), tagList); + } + + protected void readItems(IItemHandler handler, int id, NBTTagCompound nbt) { + String name = String.format(NBT_INVENTORY, id); + + if (nbt.hasKey(name)) { + NBTTagList tagList = nbt.getTagList(name, Constants.NBT.TAG_COMPOUND); + + for (int i = 0; i < tagList.tagCount(); i++) { + int slot = tagList.getCompoundTagAt(i).getInteger(NBT_SLOT); + + ItemStack stack = ItemStack.loadItemStackFromNBT(tagList.getCompoundTagAt(i)); + + handler.insertItem(slot, stack, false); + } + } + } + + protected void writeItemsLegacy(IInventory inventory, int id, NBTTagCompound nbt) { + NBTTagList tagList = new NBTTagList(); + + for (int i = 0; i < inventory.getSizeInventory(); i++) { + if (inventory.getStackInSlot(i) != null) { + NBTTagCompound compoundTag = new NBTTagCompound(); + + compoundTag.setInteger(NBT_SLOT, i); + + inventory.getStackInSlot(i).writeToNBT(compoundTag); + + tagList.appendTag(compoundTag); + } + } + + nbt.setTag(String.format(NBT_INVENTORY, id), tagList); + } + + protected void readItemsLegacy(IInventory inventory, int id, NBTTagCompound nbt) { + String name = String.format(NBT_INVENTORY, id); + + if (nbt.hasKey(name)) { + NBTTagList tagList = nbt.getTagList(name, Constants.NBT.TAG_COMPOUND); + + for (int i = 0; i < tagList.tagCount(); i++) { + int slot = tagList.getCompoundTagAt(i).getInteger(NBT_SLOT); + + ItemStack stack = ItemStack.loadItemStackFromNBT(tagList.getCompoundTagAt(i)); + + inventory.setInventorySlotContents(slot, stack); + } + } + } + + protected IItemHandler getItemHandler(TileEntity tile, EnumFacing side) { + if (tile == null) { + return null; + } + + IItemHandler handler = tile.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, side); + + if (handler == null) { + if (side != null && tile instanceof ISidedInventory) { + handler = new SidedInvWrapper((ISidedInventory) tile, side); + } else if (tile instanceof IInventory) { + handler = new InvWrapper((IInventory) tile); + } + } + + return handler; + } } diff --git a/src/main/java/refinedstorage/tile/TileConstructor.java b/src/main/java/refinedstorage/tile/TileConstructor.java index ceedb6343..ab9e9d205 100755 --- a/src/main/java/refinedstorage/tile/TileConstructor.java +++ b/src/main/java/refinedstorage/tile/TileConstructor.java @@ -13,7 +13,6 @@ import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; import refinedstorage.RefinedStorage; -import refinedstorage.RefinedStorageUtils; import refinedstorage.apiimpl.autocrafting.CraftingTaskScheduler; import refinedstorage.container.ContainerConstructor; import refinedstorage.container.slot.SlotSpecimen; @@ -92,8 +91,8 @@ public class TileConstructor extends TileNode implements ICompareConfig { compare = tag.getInteger(NBT_COMPARE); } - RefinedStorageUtils.readItems(filter, 0, tag); - RefinedStorageUtils.readItems(upgrades, 1, tag); + TileBase.readItems(filter, 0, tag); + TileBase.readItems(upgrades, 1, tag); scheduler.read(tag); } @@ -104,8 +103,8 @@ public class TileConstructor extends TileNode implements ICompareConfig { tag.setInteger(NBT_COMPARE, compare); - RefinedStorageUtils.writeItems(filter, 0, tag); - RefinedStorageUtils.writeItems(upgrades, 1, tag); + TileBase.writeItems(filter, 0, tag); + TileBase.writeItems(upgrades, 1, tag); scheduler.writeToNBT(tag); diff --git a/src/main/java/refinedstorage/tile/TileCrafter.java b/src/main/java/refinedstorage/tile/TileCrafter.java index 6a86f6f4b..7dec3149c 100755 --- a/src/main/java/refinedstorage/tile/TileCrafter.java +++ b/src/main/java/refinedstorage/tile/TileCrafter.java @@ -10,7 +10,6 @@ import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.wrapper.CombinedInvWrapper; import refinedstorage.RefinedStorage; import refinedstorage.RefinedStorageItems; -import refinedstorage.RefinedStorageUtils; import refinedstorage.api.autocrafting.ICraftingPatternContainer; import refinedstorage.api.autocrafting.ICraftingTask; import refinedstorage.api.network.INetworkMaster; @@ -79,16 +78,16 @@ public class TileCrafter extends TileNode implements ICraftingPatternContainer { public void read(NBTTagCompound nbt) { super.read(nbt); - RefinedStorageUtils.readItems(patterns, 0, nbt); - RefinedStorageUtils.readItems(upgrades, 1, nbt); + TileBase.readItems(patterns, 0, nbt); + TileBase.readItems(upgrades, 1, nbt); } @Override public NBTTagCompound write(NBTTagCompound tag) { super.write(tag); - RefinedStorageUtils.writeItems(patterns, 0, tag); - RefinedStorageUtils.writeItems(upgrades, 1, tag); + TileBase.writeItems(patterns, 0, tag); + TileBase.writeItems(upgrades, 1, tag); return tag; } @@ -100,7 +99,7 @@ public class TileCrafter extends TileNode implements ICraftingPatternContainer { @Override public IItemHandler getConnectedItems() { - return RefinedStorageUtils.getItemHandler(getFacingTile(), getDirection().getOpposite()); + return TileBase.getItemHandler(getFacingTile(), getDirection().getOpposite()); } public IItemHandler getPatterns() { diff --git a/src/main/java/refinedstorage/tile/TileDestructor.java b/src/main/java/refinedstorage/tile/TileDestructor.java index f6fb978bd..d59834884 100755 --- a/src/main/java/refinedstorage/tile/TileDestructor.java +++ b/src/main/java/refinedstorage/tile/TileDestructor.java @@ -13,7 +13,6 @@ import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; import refinedstorage.RefinedStorage; -import refinedstorage.RefinedStorageUtils; import refinedstorage.container.ContainerDestructor; import refinedstorage.inventory.BasicItemHandler; import refinedstorage.inventory.UpgradeItemHandler; @@ -111,8 +110,8 @@ public class TileDestructor extends TileNode implements ICompareConfig, IModeCon mode = nbt.getInteger(NBT_MODE); } - RefinedStorageUtils.readItems(filters, 0, nbt); - RefinedStorageUtils.readItems(upgrades, 1, nbt); + TileBase.readItems(filters, 0, nbt); + TileBase.readItems(upgrades, 1, nbt); } @Override @@ -122,8 +121,8 @@ public class TileDestructor extends TileNode implements ICompareConfig, IModeCon tag.setInteger(NBT_COMPARE, compare); tag.setInteger(NBT_MODE, mode); - RefinedStorageUtils.writeItems(filters, 0, tag); - RefinedStorageUtils.writeItems(upgrades, 1, tag); + TileBase.writeItems(filters, 0, tag); + TileBase.writeItems(upgrades, 1, tag); return tag; } diff --git a/src/main/java/refinedstorage/tile/TileDetector.java b/src/main/java/refinedstorage/tile/TileDetector.java index d983f1869..63e33ba01 100755 --- a/src/main/java/refinedstorage/tile/TileDetector.java +++ b/src/main/java/refinedstorage/tile/TileDetector.java @@ -7,7 +7,6 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraftforge.items.IItemHandler; import refinedstorage.RefinedStorage; import refinedstorage.RefinedStorageBlocks; -import refinedstorage.RefinedStorageUtils; import refinedstorage.api.network.INetworkMaster; import refinedstorage.container.ContainerDetector; import refinedstorage.inventory.BasicItemHandler; @@ -149,7 +148,7 @@ public class TileDetector extends TileNode implements ICompareConfig { amount = nbt.getInteger(NBT_AMOUNT); } - RefinedStorageUtils.readItems(filter, 0, nbt); + TileBase.readItems(filter, 0, nbt); } @Override @@ -160,7 +159,7 @@ public class TileDetector extends TileNode implements ICompareConfig { tag.setInteger(NBT_MODE, mode); tag.setInteger(NBT_AMOUNT, amount); - RefinedStorageUtils.writeItems(filter, 0, tag); + TileBase.writeItems(filter, 0, tag); return tag; } diff --git a/src/main/java/refinedstorage/tile/TileDiskDrive.java b/src/main/java/refinedstorage/tile/TileDiskDrive.java index 0a479735e..71f367718 100755 --- a/src/main/java/refinedstorage/tile/TileDiskDrive.java +++ b/src/main/java/refinedstorage/tile/TileDiskDrive.java @@ -13,7 +13,6 @@ import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.ItemHandlerHelper; import refinedstorage.RefinedStorage; import refinedstorage.RefinedStorageItems; -import refinedstorage.RefinedStorageUtils; import refinedstorage.api.network.INetworkMaster; import refinedstorage.api.storage.IStorage; import refinedstorage.api.storage.IStorageProvider; @@ -157,8 +156,8 @@ public class TileDiskDrive extends TileNode implements IStorageProvider, IStorag public void read(NBTTagCompound nbt) { super.read(nbt); - RefinedStorageUtils.readItems(disks, 0, nbt); - RefinedStorageUtils.readItems(filters, 1, nbt); + TileBase.readItems(disks, 0, nbt); + TileBase.readItems(filters, 1, nbt); if (nbt.hasKey(NBT_PRIORITY)) { priority = nbt.getInteger(NBT_PRIORITY); @@ -183,8 +182,8 @@ public class TileDiskDrive extends TileNode implements IStorageProvider, IStorag } } - RefinedStorageUtils.writeItems(disks, 0, tag); - RefinedStorageUtils.writeItems(filters, 1, tag); + TileBase.writeItems(disks, 0, tag); + TileBase.writeItems(filters, 1, tag); tag.setInteger(NBT_PRIORITY, priority); tag.setInteger(NBT_COMPARE, compare); diff --git a/src/main/java/refinedstorage/tile/TileExporter.java b/src/main/java/refinedstorage/tile/TileExporter.java index ffc2608b9..79b6cbbe6 100755 --- a/src/main/java/refinedstorage/tile/TileExporter.java +++ b/src/main/java/refinedstorage/tile/TileExporter.java @@ -10,7 +10,6 @@ import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.ItemHandlerHelper; import refinedstorage.RefinedStorage; -import refinedstorage.RefinedStorageUtils; import refinedstorage.apiimpl.autocrafting.CraftingTaskScheduler; import refinedstorage.container.ContainerExporter; import refinedstorage.inventory.BasicItemHandler; @@ -35,7 +34,7 @@ public class TileExporter extends TileNode implements ICompareConfig { @Override public void updateNode() { - IItemHandler handler = RefinedStorageUtils.getItemHandler(getFacingTile(), getDirection().getOpposite()); + IItemHandler handler = TileBase.getItemHandler(getFacingTile(), getDirection().getOpposite()); int size = upgrades.hasUpgrade(ItemUpgrade.TYPE_STACK) ? 64 : 1; @@ -84,8 +83,8 @@ public class TileExporter extends TileNode implements ICompareConfig { compare = nbt.getInteger(NBT_COMPARE); } - RefinedStorageUtils.readItems(filters, 0, nbt); - RefinedStorageUtils.readItems(upgrades, 1, nbt); + TileBase.readItems(filters, 0, nbt); + TileBase.readItems(upgrades, 1, nbt); scheduler.read(nbt); } @@ -96,8 +95,8 @@ public class TileExporter extends TileNode implements ICompareConfig { tag.setInteger(NBT_COMPARE, compare); - RefinedStorageUtils.writeItems(filters, 0, tag); - RefinedStorageUtils.writeItems(upgrades, 1, tag); + TileBase.writeItems(filters, 0, tag); + TileBase.writeItems(upgrades, 1, tag); scheduler.writeToNBT(tag); diff --git a/src/main/java/refinedstorage/tile/TileImporter.java b/src/main/java/refinedstorage/tile/TileImporter.java index 0ccb3256b..464028a72 100755 --- a/src/main/java/refinedstorage/tile/TileImporter.java +++ b/src/main/java/refinedstorage/tile/TileImporter.java @@ -9,7 +9,6 @@ import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; import refinedstorage.RefinedStorage; -import refinedstorage.RefinedStorageUtils; import refinedstorage.container.ContainerImporter; import refinedstorage.inventory.BasicItemHandler; import refinedstorage.inventory.UpgradeItemHandler; @@ -38,7 +37,7 @@ public class TileImporter extends TileNode implements ICompareConfig, IModeConfi @Override public void updateNode() { - IItemHandler handler = RefinedStorageUtils.getItemHandler(getFacingTile(), getDirection().getOpposite()); + IItemHandler handler = TileBase.getItemHandler(getFacingTile(), getDirection().getOpposite()); if (getFacingTile() instanceof TileDiskDrive || handler == null) { return; @@ -105,8 +104,8 @@ public class TileImporter extends TileNode implements ICompareConfig, IModeConfi mode = nbt.getInteger(NBT_MODE); } - RefinedStorageUtils.readItems(filters, 0, nbt); - RefinedStorageUtils.readItems(upgrades, 1, nbt); + TileBase.readItems(filters, 0, nbt); + TileBase.readItems(upgrades, 1, nbt); } @Override @@ -116,8 +115,8 @@ public class TileImporter extends TileNode implements ICompareConfig, IModeConfi tag.setInteger(NBT_COMPARE, compare); tag.setInteger(NBT_MODE, mode); - RefinedStorageUtils.writeItems(filters, 0, tag); - RefinedStorageUtils.writeItems(upgrades, 1, tag); + TileBase.writeItems(filters, 0, tag); + TileBase.writeItems(upgrades, 1, tag); return tag; } diff --git a/src/main/java/refinedstorage/tile/TileInterface.java b/src/main/java/refinedstorage/tile/TileInterface.java index c2f82d81c..711b0112e 100755 --- a/src/main/java/refinedstorage/tile/TileInterface.java +++ b/src/main/java/refinedstorage/tile/TileInterface.java @@ -10,7 +10,6 @@ import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.wrapper.CombinedInvWrapper; import refinedstorage.RefinedStorage; -import refinedstorage.RefinedStorageUtils; import refinedstorage.container.ContainerInterface; import refinedstorage.inventory.BasicItemHandler; import refinedstorage.inventory.UpgradeItemHandler; @@ -106,10 +105,10 @@ public class TileInterface extends TileNode implements ICompareConfig { public void read(NBTTagCompound nbt) { super.read(nbt); - RefinedStorageUtils.readItems(importItems, 0, nbt); - RefinedStorageUtils.readItems(exportSpecimenItems, 1, nbt); - RefinedStorageUtils.readItems(exportItems, 2, nbt); - RefinedStorageUtils.readItems(upgrades, 3, nbt); + TileBase.readItems(importItems, 0, nbt); + TileBase.readItems(exportSpecimenItems, 1, nbt); + TileBase.readItems(exportItems, 2, nbt); + TileBase.readItems(upgrades, 3, nbt); if (nbt.hasKey(NBT_COMPARE)) { compare = nbt.getInteger(NBT_COMPARE); @@ -120,10 +119,10 @@ public class TileInterface extends TileNode implements ICompareConfig { public NBTTagCompound write(NBTTagCompound tag) { super.write(tag); - RefinedStorageUtils.writeItems(importItems, 0, tag); - RefinedStorageUtils.writeItems(exportSpecimenItems, 1, tag); - RefinedStorageUtils.writeItems(exportItems, 2, tag); - RefinedStorageUtils.writeItems(upgrades, 3, tag); + TileBase.writeItems(importItems, 0, tag); + TileBase.writeItems(exportSpecimenItems, 1, tag); + TileBase.writeItems(exportItems, 2, tag); + TileBase.writeItems(upgrades, 3, tag); tag.setInteger(NBT_COMPARE, compare); diff --git a/src/main/java/refinedstorage/tile/TileProcessingPatternEncoder.java b/src/main/java/refinedstorage/tile/TileProcessingPatternEncoder.java index ae1ab3e03..eba85b522 100755 --- a/src/main/java/refinedstorage/tile/TileProcessingPatternEncoder.java +++ b/src/main/java/refinedstorage/tile/TileProcessingPatternEncoder.java @@ -7,7 +7,6 @@ import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; import refinedstorage.RefinedStorageItems; -import refinedstorage.RefinedStorageUtils; import refinedstorage.inventory.BasicItemHandler; import refinedstorage.inventory.BasicItemValidator; import refinedstorage.item.ItemPattern; @@ -20,8 +19,8 @@ public class TileProcessingPatternEncoder extends TileBase { public NBTTagCompound write(NBTTagCompound tag) { super.write(tag); - RefinedStorageUtils.writeItems(patterns, 0, tag); - RefinedStorageUtils.writeItems(configuration, 1, tag); + TileBase.writeItems(patterns, 0, tag); + TileBase.writeItems(configuration, 1, tag); return tag; } @@ -30,8 +29,8 @@ public class TileProcessingPatternEncoder extends TileBase { public void read(NBTTagCompound nbt) { super.read(nbt); - RefinedStorageUtils.readItems(patterns, 0, nbt); - RefinedStorageUtils.readItems(configuration, 1, nbt); + TileBase.readItems(patterns, 0, nbt); + TileBase.readItems(configuration, 1, nbt); } public void onCreatePattern() { diff --git a/src/main/java/refinedstorage/tile/TileSolderer.java b/src/main/java/refinedstorage/tile/TileSolderer.java index 1f64e134f..a32f43872 100755 --- a/src/main/java/refinedstorage/tile/TileSolderer.java +++ b/src/main/java/refinedstorage/tile/TileSolderer.java @@ -9,7 +9,6 @@ import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.wrapper.CombinedInvWrapper; import refinedstorage.RefinedStorage; -import refinedstorage.RefinedStorageUtils; import refinedstorage.api.RefinedStorageAPI; import refinedstorage.api.network.INetworkMaster; import refinedstorage.api.solderer.ISoldererRecipe; @@ -111,8 +110,8 @@ public class TileSolderer extends TileNode { public void read(NBTTagCompound nbt) { super.read(nbt); - RefinedStorageUtils.readItems(items, 0, nbt); - RefinedStorageUtils.readItems(upgrades, 1, nbt); + TileBase.readItems(items, 0, nbt); + TileBase.readItems(upgrades, 1, nbt); recipe = RefinedStorageAPI.SOLDERER_REGISTRY.getRecipe(items); @@ -129,8 +128,8 @@ public class TileSolderer extends TileNode { public NBTTagCompound write(NBTTagCompound tag) { super.write(tag); - RefinedStorageUtils.writeItems(items, 0, tag); - RefinedStorageUtils.writeItems(upgrades, 1, tag); + TileBase.writeItems(items, 0, tag); + TileBase.writeItems(upgrades, 1, tag); tag.setBoolean(NBT_WORKING, working); tag.setInteger(NBT_PROGRESS, progress); diff --git a/src/main/java/refinedstorage/tile/TileStorage.java b/src/main/java/refinedstorage/tile/TileStorage.java index 69e9b5621..d3ecb4b5d 100755 --- a/src/main/java/refinedstorage/tile/TileStorage.java +++ b/src/main/java/refinedstorage/tile/TileStorage.java @@ -8,7 +8,6 @@ import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.ItemHandlerHelper; import refinedstorage.RefinedStorage; import refinedstorage.RefinedStorageBlocks; -import refinedstorage.RefinedStorageUtils; import refinedstorage.api.network.INetworkMaster; import refinedstorage.api.storage.IStorage; import refinedstorage.api.storage.IStorageProvider; @@ -108,7 +107,7 @@ public class TileStorage extends TileNode implements IStorageProvider, IStorageG public void read(NBTTagCompound nbt) { super.read(nbt); - RefinedStorageUtils.readItems(filters, 0, nbt); + TileBase.readItems(filters, 0, nbt); if (nbt.hasKey(NBT_PRIORITY)) { priority = nbt.getInteger(NBT_PRIORITY); @@ -131,7 +130,7 @@ public class TileStorage extends TileNode implements IStorageProvider, IStorageG public NBTTagCompound write(NBTTagCompound tag) { super.write(tag); - RefinedStorageUtils.writeItems(filters, 0, tag); + TileBase.writeItems(filters, 0, tag); tag.setInteger(NBT_PRIORITY, priority); diff --git a/src/main/java/refinedstorage/tile/TileWirelessTransmitter.java b/src/main/java/refinedstorage/tile/TileWirelessTransmitter.java index 0718a4d04..ad1424d35 100755 --- a/src/main/java/refinedstorage/tile/TileWirelessTransmitter.java +++ b/src/main/java/refinedstorage/tile/TileWirelessTransmitter.java @@ -8,7 +8,6 @@ import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; import refinedstorage.RefinedStorage; -import refinedstorage.RefinedStorageUtils; import refinedstorage.api.network.IWirelessTransmitter; import refinedstorage.container.ContainerWirelessTransmitter; import refinedstorage.inventory.BasicItemHandler; @@ -31,14 +30,14 @@ public class TileWirelessTransmitter extends TileNode implements IWirelessTransm public void read(NBTTagCompound nbt) { super.read(nbt); - RefinedStorageUtils.readItems(upgrades, 0, nbt); + TileBase.readItems(upgrades, 0, nbt); } @Override public NBTTagCompound write(NBTTagCompound tag) { super.write(tag); - RefinedStorageUtils.writeItems(upgrades, 0, tag); + TileBase.writeItems(upgrades, 0, tag); return tag; } diff --git a/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java b/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java index d22304d3d..ac4dc6fd9 100755 --- a/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java +++ b/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java @@ -9,7 +9,6 @@ import net.minecraft.tileentity.TileEntity; import net.minecraftforge.items.IItemHandler; import powercrystals.minefactoryreloaded.api.IDeepStorageUnit; import refinedstorage.RefinedStorage; -import refinedstorage.RefinedStorageUtils; import refinedstorage.api.network.INetworkMaster; import refinedstorage.api.storage.IStorage; import refinedstorage.api.storage.IStorageProvider; @@ -17,6 +16,7 @@ import refinedstorage.container.ContainerStorage; import refinedstorage.inventory.BasicItemHandler; import refinedstorage.network.MessagePriorityUpdate; import refinedstorage.tile.IStorageGui; +import refinedstorage.tile.TileBase; import refinedstorage.tile.TileNode; import refinedstorage.tile.config.ICompareConfig; import refinedstorage.tile.config.IModeConfig; @@ -119,7 +119,7 @@ public class TileExternalStorage extends TileNode implements IStorageProvider, I public void read(NBTTagCompound nbt) { super.read(nbt); - RefinedStorageUtils.readItems(filters, 0, nbt); + TileBase.readItems(filters, 0, nbt); if (nbt.hasKey(NBT_PRIORITY)) { priority = nbt.getInteger(NBT_PRIORITY); @@ -138,7 +138,7 @@ public class TileExternalStorage extends TileNode implements IStorageProvider, I public NBTTagCompound write(NBTTagCompound tag) { super.write(tag); - RefinedStorageUtils.writeItems(filters, 0, tag); + TileBase.writeItems(filters, 0, tag); tag.setInteger(NBT_PRIORITY, priority); tag.setInteger(NBT_COMPARE, compare); @@ -200,7 +200,7 @@ public class TileExternalStorage extends TileNode implements IStorageProvider, I } else if (facing instanceof IDeepStorageUnit) { storages.add(new DeepStorageUnitStorage(this, (IDeepStorageUnit) facing)); } else { - IItemHandler handler = RefinedStorageUtils.getItemHandler(facing, getDirection().getOpposite()); + IItemHandler handler = TileBase.getItemHandler(facing, getDirection().getOpposite()); if (handler != null) { storages.add(new ItemHandlerStorage(this, handler)); diff --git a/src/main/java/refinedstorage/tile/grid/TileGrid.java b/src/main/java/refinedstorage/tile/grid/TileGrid.java index 8e2580ff4..fa5541874 100755 --- a/src/main/java/refinedstorage/tile/grid/TileGrid.java +++ b/src/main/java/refinedstorage/tile/grid/TileGrid.java @@ -13,7 +13,6 @@ import net.minecraftforge.items.wrapper.InvWrapper; import refinedstorage.RefinedStorage; import refinedstorage.RefinedStorageBlocks; import refinedstorage.RefinedStorageItems; -import refinedstorage.RefinedStorageUtils; import refinedstorage.api.network.IGridHandler; import refinedstorage.api.storage.CompareUtils; import refinedstorage.apiimpl.network.NetworkUtils; @@ -24,6 +23,7 @@ import refinedstorage.inventory.BasicItemHandler; import refinedstorage.inventory.BasicItemValidator; import refinedstorage.item.ItemPattern; import refinedstorage.network.MessageGridSettingsUpdate; +import refinedstorage.tile.TileBase; import refinedstorage.tile.TileNode; import refinedstorage.tile.config.IRedstoneModeConfig; @@ -333,8 +333,8 @@ public class TileGrid extends TileNode implements IGrid { public void read(NBTTagCompound tag) { super.read(tag); - RefinedStorageUtils.readItemsLegacy(matrix, 0, tag); - RefinedStorageUtils.readItems(patterns, 1, tag); + TileBase.readItemsLegacy(matrix, 0, tag); + TileBase.readItems(patterns, 1, tag); if (tag.hasKey(NBT_VIEW_TYPE)) { viewType = tag.getInteger(NBT_VIEW_TYPE); @@ -357,8 +357,8 @@ public class TileGrid extends TileNode implements IGrid { public NBTTagCompound write(NBTTagCompound tag) { super.write(tag); - RefinedStorageUtils.writeItemsLegacy(matrix, 0, tag); - RefinedStorageUtils.writeItems(patterns, 1, tag); + TileBase.writeItemsLegacy(matrix, 0, tag); + TileBase.writeItems(patterns, 1, tag); tag.setInteger(NBT_VIEW_TYPE, viewType); tag.setInteger(NBT_SORTING_DIRECTION, sortingDirection); diff --git a/src/main/java/refinedstorage/tile/grid/WirelessGrid.java b/src/main/java/refinedstorage/tile/grid/WirelessGrid.java index 782794c8e..5bffe15de 100755 --- a/src/main/java/refinedstorage/tile/grid/WirelessGrid.java +++ b/src/main/java/refinedstorage/tile/grid/WirelessGrid.java @@ -7,7 +7,6 @@ import net.minecraft.util.EnumHand; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import refinedstorage.RefinedStorage; -import refinedstorage.RefinedStorageUtils; import refinedstorage.api.network.IGridHandler; import refinedstorage.block.EnumGridType; import refinedstorage.item.ItemWirelessGrid; @@ -73,28 +72,28 @@ public class WirelessGrid implements IGrid { @Override public void onViewTypeChanged(int type) { - RefinedStorage.INSTANCE.network.sendToServer(new MessageWirelessGridSettingsUpdate(RefinedStorageUtils.getIdFromHand(hand), type, getSortingDirection(), getSortingType(), getSearchBoxMode())); + RefinedStorage.INSTANCE.network.sendToServer(new MessageWirelessGridSettingsUpdate(hand.ordinal(), type, getSortingDirection(), getSortingType(), getSearchBoxMode())); this.viewType = type; } @Override public void onSortingTypeChanged(int type) { - RefinedStorage.INSTANCE.network.sendToServer(new MessageWirelessGridSettingsUpdate(RefinedStorageUtils.getIdFromHand(hand), getViewType(), getSortingDirection(), type, getSearchBoxMode())); + RefinedStorage.INSTANCE.network.sendToServer(new MessageWirelessGridSettingsUpdate(hand.ordinal(), getViewType(), getSortingDirection(), type, getSearchBoxMode())); this.sortingType = type; } @Override public void onSortingDirectionChanged(int direction) { - RefinedStorage.INSTANCE.network.sendToServer(new MessageWirelessGridSettingsUpdate(RefinedStorageUtils.getIdFromHand(hand), getViewType(), direction, getSortingType(), getSearchBoxMode())); + RefinedStorage.INSTANCE.network.sendToServer(new MessageWirelessGridSettingsUpdate(hand.ordinal(), getViewType(), direction, getSortingType(), getSearchBoxMode())); this.sortingDirection = direction; } @Override public void onSearchBoxModeChanged(int searchBoxMode) { - RefinedStorage.INSTANCE.network.sendToServer(new MessageWirelessGridSettingsUpdate(RefinedStorageUtils.getIdFromHand(hand), getViewType(), getSortingDirection(), getSortingType(), searchBoxMode)); + RefinedStorage.INSTANCE.network.sendToServer(new MessageWirelessGridSettingsUpdate(hand.ordinal(), getViewType(), getSortingDirection(), getSortingType(), searchBoxMode)); this.searchBoxMode = searchBoxMode; } From 0923702b3eac9caead632dec878d64931c210c77 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Tue, 19 Jul 2016 05:15:13 +0200 Subject: [PATCH 010/214] Fix compiler errors --- .../refinedstorage/tile/TileConstructor.java | 8 ++++---- .../java/refinedstorage/tile/TileCrafter.java | 10 +++++----- .../java/refinedstorage/tile/TileDestructor.java | 8 ++++---- .../java/refinedstorage/tile/TileDetector.java | 4 ++-- .../java/refinedstorage/tile/TileDiskDrive.java | 8 ++++---- .../java/refinedstorage/tile/TileExporter.java | 10 +++++----- .../java/refinedstorage/tile/TileImporter.java | 10 +++++----- .../java/refinedstorage/tile/TileInterface.java | 16 ++++++++-------- .../tile/TileProcessingPatternEncoder.java | 8 ++++---- .../java/refinedstorage/tile/TileSolderer.java | 8 ++++---- .../java/refinedstorage/tile/TileStorage.java | 4 ++-- .../tile/TileWirelessTransmitter.java | 4 ++-- .../externalstorage/TileExternalStorage.java | 7 +++---- .../java/refinedstorage/tile/grid/TileGrid.java | 9 ++++----- 14 files changed, 56 insertions(+), 58 deletions(-) diff --git a/src/main/java/refinedstorage/tile/TileConstructor.java b/src/main/java/refinedstorage/tile/TileConstructor.java index ab9e9d205..1c7c2e910 100755 --- a/src/main/java/refinedstorage/tile/TileConstructor.java +++ b/src/main/java/refinedstorage/tile/TileConstructor.java @@ -91,8 +91,8 @@ public class TileConstructor extends TileNode implements ICompareConfig { compare = tag.getInteger(NBT_COMPARE); } - TileBase.readItems(filter, 0, tag); - TileBase.readItems(upgrades, 1, tag); + readItems(filter, 0, tag); + readItems(upgrades, 1, tag); scheduler.read(tag); } @@ -103,8 +103,8 @@ public class TileConstructor extends TileNode implements ICompareConfig { tag.setInteger(NBT_COMPARE, compare); - TileBase.writeItems(filter, 0, tag); - TileBase.writeItems(upgrades, 1, tag); + writeItems(filter, 0, tag); + writeItems(upgrades, 1, tag); scheduler.writeToNBT(tag); diff --git a/src/main/java/refinedstorage/tile/TileCrafter.java b/src/main/java/refinedstorage/tile/TileCrafter.java index 7dec3149c..d34ba7642 100755 --- a/src/main/java/refinedstorage/tile/TileCrafter.java +++ b/src/main/java/refinedstorage/tile/TileCrafter.java @@ -78,16 +78,16 @@ public class TileCrafter extends TileNode implements ICraftingPatternContainer { public void read(NBTTagCompound nbt) { super.read(nbt); - TileBase.readItems(patterns, 0, nbt); - TileBase.readItems(upgrades, 1, nbt); + readItems(patterns, 0, nbt); + readItems(upgrades, 1, nbt); } @Override public NBTTagCompound write(NBTTagCompound tag) { super.write(tag); - TileBase.writeItems(patterns, 0, tag); - TileBase.writeItems(upgrades, 1, tag); + writeItems(patterns, 0, tag); + writeItems(upgrades, 1, tag); return tag; } @@ -99,7 +99,7 @@ public class TileCrafter extends TileNode implements ICraftingPatternContainer { @Override public IItemHandler getConnectedItems() { - return TileBase.getItemHandler(getFacingTile(), getDirection().getOpposite()); + return getItemHandler(getFacingTile(), getDirection().getOpposite()); } public IItemHandler getPatterns() { diff --git a/src/main/java/refinedstorage/tile/TileDestructor.java b/src/main/java/refinedstorage/tile/TileDestructor.java index d59834884..dcba0b057 100755 --- a/src/main/java/refinedstorage/tile/TileDestructor.java +++ b/src/main/java/refinedstorage/tile/TileDestructor.java @@ -110,8 +110,8 @@ public class TileDestructor extends TileNode implements ICompareConfig, IModeCon mode = nbt.getInteger(NBT_MODE); } - TileBase.readItems(filters, 0, nbt); - TileBase.readItems(upgrades, 1, nbt); + readItems(filters, 0, nbt); + readItems(upgrades, 1, nbt); } @Override @@ -121,8 +121,8 @@ public class TileDestructor extends TileNode implements ICompareConfig, IModeCon tag.setInteger(NBT_COMPARE, compare); tag.setInteger(NBT_MODE, mode); - TileBase.writeItems(filters, 0, tag); - TileBase.writeItems(upgrades, 1, tag); + writeItems(filters, 0, tag); + writeItems(upgrades, 1, tag); return tag; } diff --git a/src/main/java/refinedstorage/tile/TileDetector.java b/src/main/java/refinedstorage/tile/TileDetector.java index 63e33ba01..6c0ddf55e 100755 --- a/src/main/java/refinedstorage/tile/TileDetector.java +++ b/src/main/java/refinedstorage/tile/TileDetector.java @@ -148,7 +148,7 @@ public class TileDetector extends TileNode implements ICompareConfig { amount = nbt.getInteger(NBT_AMOUNT); } - TileBase.readItems(filter, 0, nbt); + readItems(filter, 0, nbt); } @Override @@ -159,7 +159,7 @@ public class TileDetector extends TileNode implements ICompareConfig { tag.setInteger(NBT_MODE, mode); tag.setInteger(NBT_AMOUNT, amount); - TileBase.writeItems(filter, 0, tag); + writeItems(filter, 0, tag); return tag; } diff --git a/src/main/java/refinedstorage/tile/TileDiskDrive.java b/src/main/java/refinedstorage/tile/TileDiskDrive.java index 71f367718..fdb0275b1 100755 --- a/src/main/java/refinedstorage/tile/TileDiskDrive.java +++ b/src/main/java/refinedstorage/tile/TileDiskDrive.java @@ -156,8 +156,8 @@ public class TileDiskDrive extends TileNode implements IStorageProvider, IStorag public void read(NBTTagCompound nbt) { super.read(nbt); - TileBase.readItems(disks, 0, nbt); - TileBase.readItems(filters, 1, nbt); + readItems(disks, 0, nbt); + readItems(filters, 1, nbt); if (nbt.hasKey(NBT_PRIORITY)) { priority = nbt.getInteger(NBT_PRIORITY); @@ -182,8 +182,8 @@ public class TileDiskDrive extends TileNode implements IStorageProvider, IStorag } } - TileBase.writeItems(disks, 0, tag); - TileBase.writeItems(filters, 1, tag); + writeItems(disks, 0, tag); + writeItems(filters, 1, tag); tag.setInteger(NBT_PRIORITY, priority); tag.setInteger(NBT_COMPARE, compare); diff --git a/src/main/java/refinedstorage/tile/TileExporter.java b/src/main/java/refinedstorage/tile/TileExporter.java index 79b6cbbe6..413079980 100755 --- a/src/main/java/refinedstorage/tile/TileExporter.java +++ b/src/main/java/refinedstorage/tile/TileExporter.java @@ -34,7 +34,7 @@ public class TileExporter extends TileNode implements ICompareConfig { @Override public void updateNode() { - IItemHandler handler = TileBase.getItemHandler(getFacingTile(), getDirection().getOpposite()); + IItemHandler handler = getItemHandler(getFacingTile(), getDirection().getOpposite()); int size = upgrades.hasUpgrade(ItemUpgrade.TYPE_STACK) ? 64 : 1; @@ -83,8 +83,8 @@ public class TileExporter extends TileNode implements ICompareConfig { compare = nbt.getInteger(NBT_COMPARE); } - TileBase.readItems(filters, 0, nbt); - TileBase.readItems(upgrades, 1, nbt); + readItems(filters, 0, nbt); + readItems(upgrades, 1, nbt); scheduler.read(nbt); } @@ -95,8 +95,8 @@ public class TileExporter extends TileNode implements ICompareConfig { tag.setInteger(NBT_COMPARE, compare); - TileBase.writeItems(filters, 0, tag); - TileBase.writeItems(upgrades, 1, tag); + writeItems(filters, 0, tag); + writeItems(upgrades, 1, tag); scheduler.writeToNBT(tag); diff --git a/src/main/java/refinedstorage/tile/TileImporter.java b/src/main/java/refinedstorage/tile/TileImporter.java index 464028a72..247bd739f 100755 --- a/src/main/java/refinedstorage/tile/TileImporter.java +++ b/src/main/java/refinedstorage/tile/TileImporter.java @@ -37,7 +37,7 @@ public class TileImporter extends TileNode implements ICompareConfig, IModeConfi @Override public void updateNode() { - IItemHandler handler = TileBase.getItemHandler(getFacingTile(), getDirection().getOpposite()); + IItemHandler handler = getItemHandler(getFacingTile(), getDirection().getOpposite()); if (getFacingTile() instanceof TileDiskDrive || handler == null) { return; @@ -104,8 +104,8 @@ public class TileImporter extends TileNode implements ICompareConfig, IModeConfi mode = nbt.getInteger(NBT_MODE); } - TileBase.readItems(filters, 0, nbt); - TileBase.readItems(upgrades, 1, nbt); + readItems(filters, 0, nbt); + readItems(upgrades, 1, nbt); } @Override @@ -115,8 +115,8 @@ public class TileImporter extends TileNode implements ICompareConfig, IModeConfi tag.setInteger(NBT_COMPARE, compare); tag.setInteger(NBT_MODE, mode); - TileBase.writeItems(filters, 0, tag); - TileBase.writeItems(upgrades, 1, tag); + writeItems(filters, 0, tag); + writeItems(upgrades, 1, tag); return tag; } diff --git a/src/main/java/refinedstorage/tile/TileInterface.java b/src/main/java/refinedstorage/tile/TileInterface.java index 711b0112e..45e35e994 100755 --- a/src/main/java/refinedstorage/tile/TileInterface.java +++ b/src/main/java/refinedstorage/tile/TileInterface.java @@ -105,10 +105,10 @@ public class TileInterface extends TileNode implements ICompareConfig { public void read(NBTTagCompound nbt) { super.read(nbt); - TileBase.readItems(importItems, 0, nbt); - TileBase.readItems(exportSpecimenItems, 1, nbt); - TileBase.readItems(exportItems, 2, nbt); - TileBase.readItems(upgrades, 3, nbt); + readItems(importItems, 0, nbt); + readItems(exportSpecimenItems, 1, nbt); + readItems(exportItems, 2, nbt); + readItems(upgrades, 3, nbt); if (nbt.hasKey(NBT_COMPARE)) { compare = nbt.getInteger(NBT_COMPARE); @@ -119,10 +119,10 @@ public class TileInterface extends TileNode implements ICompareConfig { public NBTTagCompound write(NBTTagCompound tag) { super.write(tag); - TileBase.writeItems(importItems, 0, tag); - TileBase.writeItems(exportSpecimenItems, 1, tag); - TileBase.writeItems(exportItems, 2, tag); - TileBase.writeItems(upgrades, 3, tag); + writeItems(importItems, 0, tag); + writeItems(exportSpecimenItems, 1, tag); + writeItems(exportItems, 2, tag); + writeItems(upgrades, 3, tag); tag.setInteger(NBT_COMPARE, compare); diff --git a/src/main/java/refinedstorage/tile/TileProcessingPatternEncoder.java b/src/main/java/refinedstorage/tile/TileProcessingPatternEncoder.java index eba85b522..77376f8ff 100755 --- a/src/main/java/refinedstorage/tile/TileProcessingPatternEncoder.java +++ b/src/main/java/refinedstorage/tile/TileProcessingPatternEncoder.java @@ -19,8 +19,8 @@ public class TileProcessingPatternEncoder extends TileBase { public NBTTagCompound write(NBTTagCompound tag) { super.write(tag); - TileBase.writeItems(patterns, 0, tag); - TileBase.writeItems(configuration, 1, tag); + writeItems(patterns, 0, tag); + writeItems(configuration, 1, tag); return tag; } @@ -29,8 +29,8 @@ public class TileProcessingPatternEncoder extends TileBase { public void read(NBTTagCompound nbt) { super.read(nbt); - TileBase.readItems(patterns, 0, nbt); - TileBase.readItems(configuration, 1, nbt); + readItems(patterns, 0, nbt); + readItems(configuration, 1, nbt); } public void onCreatePattern() { diff --git a/src/main/java/refinedstorage/tile/TileSolderer.java b/src/main/java/refinedstorage/tile/TileSolderer.java index a32f43872..2e5cc3704 100755 --- a/src/main/java/refinedstorage/tile/TileSolderer.java +++ b/src/main/java/refinedstorage/tile/TileSolderer.java @@ -110,8 +110,8 @@ public class TileSolderer extends TileNode { public void read(NBTTagCompound nbt) { super.read(nbt); - TileBase.readItems(items, 0, nbt); - TileBase.readItems(upgrades, 1, nbt); + readItems(items, 0, nbt); + readItems(upgrades, 1, nbt); recipe = RefinedStorageAPI.SOLDERER_REGISTRY.getRecipe(items); @@ -128,8 +128,8 @@ public class TileSolderer extends TileNode { public NBTTagCompound write(NBTTagCompound tag) { super.write(tag); - TileBase.writeItems(items, 0, tag); - TileBase.writeItems(upgrades, 1, tag); + writeItems(items, 0, tag); + writeItems(upgrades, 1, tag); tag.setBoolean(NBT_WORKING, working); tag.setInteger(NBT_PROGRESS, progress); diff --git a/src/main/java/refinedstorage/tile/TileStorage.java b/src/main/java/refinedstorage/tile/TileStorage.java index d3ecb4b5d..2bb1d07b6 100755 --- a/src/main/java/refinedstorage/tile/TileStorage.java +++ b/src/main/java/refinedstorage/tile/TileStorage.java @@ -107,7 +107,7 @@ public class TileStorage extends TileNode implements IStorageProvider, IStorageG public void read(NBTTagCompound nbt) { super.read(nbt); - TileBase.readItems(filters, 0, nbt); + readItems(filters, 0, nbt); if (nbt.hasKey(NBT_PRIORITY)) { priority = nbt.getInteger(NBT_PRIORITY); @@ -130,7 +130,7 @@ public class TileStorage extends TileNode implements IStorageProvider, IStorageG public NBTTagCompound write(NBTTagCompound tag) { super.write(tag); - TileBase.writeItems(filters, 0, tag); + writeItems(filters, 0, tag); tag.setInteger(NBT_PRIORITY, priority); diff --git a/src/main/java/refinedstorage/tile/TileWirelessTransmitter.java b/src/main/java/refinedstorage/tile/TileWirelessTransmitter.java index ad1424d35..89b7b018d 100755 --- a/src/main/java/refinedstorage/tile/TileWirelessTransmitter.java +++ b/src/main/java/refinedstorage/tile/TileWirelessTransmitter.java @@ -30,14 +30,14 @@ public class TileWirelessTransmitter extends TileNode implements IWirelessTransm public void read(NBTTagCompound nbt) { super.read(nbt); - TileBase.readItems(upgrades, 0, nbt); + readItems(upgrades, 0, nbt); } @Override public NBTTagCompound write(NBTTagCompound tag) { super.write(tag); - TileBase.writeItems(upgrades, 0, tag); + writeItems(upgrades, 0, tag); return tag; } diff --git a/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java b/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java index ac4dc6fd9..ccb65761b 100755 --- a/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java +++ b/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java @@ -16,7 +16,6 @@ import refinedstorage.container.ContainerStorage; import refinedstorage.inventory.BasicItemHandler; import refinedstorage.network.MessagePriorityUpdate; import refinedstorage.tile.IStorageGui; -import refinedstorage.tile.TileBase; import refinedstorage.tile.TileNode; import refinedstorage.tile.config.ICompareConfig; import refinedstorage.tile.config.IModeConfig; @@ -119,7 +118,7 @@ public class TileExternalStorage extends TileNode implements IStorageProvider, I public void read(NBTTagCompound nbt) { super.read(nbt); - TileBase.readItems(filters, 0, nbt); + readItems(filters, 0, nbt); if (nbt.hasKey(NBT_PRIORITY)) { priority = nbt.getInteger(NBT_PRIORITY); @@ -138,7 +137,7 @@ public class TileExternalStorage extends TileNode implements IStorageProvider, I public NBTTagCompound write(NBTTagCompound tag) { super.write(tag); - TileBase.writeItems(filters, 0, tag); + writeItems(filters, 0, tag); tag.setInteger(NBT_PRIORITY, priority); tag.setInteger(NBT_COMPARE, compare); @@ -200,7 +199,7 @@ public class TileExternalStorage extends TileNode implements IStorageProvider, I } else if (facing instanceof IDeepStorageUnit) { storages.add(new DeepStorageUnitStorage(this, (IDeepStorageUnit) facing)); } else { - IItemHandler handler = TileBase.getItemHandler(facing, getDirection().getOpposite()); + IItemHandler handler = getItemHandler(facing, getDirection().getOpposite()); if (handler != null) { storages.add(new ItemHandlerStorage(this, handler)); diff --git a/src/main/java/refinedstorage/tile/grid/TileGrid.java b/src/main/java/refinedstorage/tile/grid/TileGrid.java index fa5541874..af8c33670 100755 --- a/src/main/java/refinedstorage/tile/grid/TileGrid.java +++ b/src/main/java/refinedstorage/tile/grid/TileGrid.java @@ -23,7 +23,6 @@ import refinedstorage.inventory.BasicItemHandler; import refinedstorage.inventory.BasicItemValidator; import refinedstorage.item.ItemPattern; import refinedstorage.network.MessageGridSettingsUpdate; -import refinedstorage.tile.TileBase; import refinedstorage.tile.TileNode; import refinedstorage.tile.config.IRedstoneModeConfig; @@ -333,8 +332,8 @@ public class TileGrid extends TileNode implements IGrid { public void read(NBTTagCompound tag) { super.read(tag); - TileBase.readItemsLegacy(matrix, 0, tag); - TileBase.readItems(patterns, 1, tag); + readItemsLegacy(matrix, 0, tag); + readItems(patterns, 1, tag); if (tag.hasKey(NBT_VIEW_TYPE)) { viewType = tag.getInteger(NBT_VIEW_TYPE); @@ -357,8 +356,8 @@ public class TileGrid extends TileNode implements IGrid { public NBTTagCompound write(NBTTagCompound tag) { super.write(tag); - TileBase.writeItemsLegacy(matrix, 0, tag); - TileBase.writeItems(patterns, 1, tag); + writeItemsLegacy(matrix, 0, tag); + writeItems(patterns, 1, tag); tag.setInteger(NBT_VIEW_TYPE, viewType); tag.setInteger(NBT_SORTING_DIRECTION, sortingDirection); From 36f117c0d751250a7e6188d0a25f48200f287b80 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Tue, 19 Jul 2016 12:39:44 +0200 Subject: [PATCH 011/214] Add docs to CompareUtils, small fixes --- .../api/storage/CompareUtils.java | 46 +++++++++++++++++-- src/main/java/refinedstorage/gui/GuiBase.java | 2 +- 2 files changed, 42 insertions(+), 6 deletions(-) diff --git a/src/main/java/refinedstorage/api/storage/CompareUtils.java b/src/main/java/refinedstorage/api/storage/CompareUtils.java index 7ca1a671b..937e804bd 100755 --- a/src/main/java/refinedstorage/api/storage/CompareUtils.java +++ b/src/main/java/refinedstorage/api/storage/CompareUtils.java @@ -5,17 +5,43 @@ import net.minecraftforge.oredict.OreDictionary; import org.apache.commons.lang3.ArrayUtils; /** - * Comparison utils. + * Utilities for comparing {@link ItemStack}. */ public final class CompareUtils { public static final int COMPARE_DAMAGE = 1; public static final int COMPARE_NBT = 2; public static final int COMPARE_QUANTITY = 4; + /** + * Compares two stacks by NBT, damage and quantity. + * + * @param left The left stack + * @param right The right stack + * @return Whether the left and right stack are equal + */ public static boolean compareStack(ItemStack left, ItemStack right) { return compareStack(left, right, COMPARE_NBT | COMPARE_DAMAGE | COMPARE_QUANTITY); } + /** + * Compares two stacks by NBT and damage. + * + * @param left The left stack + * @param right The right stack + * @return Whether the left and right stack are equal + */ + public static boolean compareStackNoQuantity(ItemStack left, ItemStack right) { + return compareStack(left, right, COMPARE_NBT | COMPARE_DAMAGE); + } + + /** + * Compares two stacks by the given flags. + * + * @param left The left stack + * @param right The right stack + * @param flags The flags to compare with + * @return Whether the left and right stack are equal + */ public static boolean compareStack(ItemStack left, ItemStack right, int flags) { if (left == null && right == null) { return true; @@ -50,6 +76,13 @@ public final class CompareUtils { return true; } + /** + * Compares the NBT tags of two stacks. + * + * @param left The left stack + * @param right The right stack + * @return Whether the NBT tags are equal + */ public static boolean compareNbt(ItemStack left, ItemStack right) { if (!ItemStack.areItemStackTagsEqual(left, right)) { if (left.hasTagCompound() && !right.hasTagCompound() && left.getTagCompound().hasNoTags()) { @@ -64,10 +97,13 @@ public final class CompareUtils { return true; } - public static boolean compareStackNoQuantity(ItemStack left, ItemStack right) { - return compareStack(left, right, COMPARE_NBT | COMPARE_DAMAGE); - } - + /** + * Compares two stacks and checks if they share the same ore dictionary entry. + * + * @param left The left stack + * @param right The right stack + * @return Whether the stacks share the same ore dictionary entry + */ public static boolean compareStackOreDict(ItemStack left, ItemStack right) { if (left == null && right == null) { return true; diff --git a/src/main/java/refinedstorage/gui/GuiBase.java b/src/main/java/refinedstorage/gui/GuiBase.java index 932136f4c..5fd1d7ebe 100755 --- a/src/main/java/refinedstorage/gui/GuiBase.java +++ b/src/main/java/refinedstorage/gui/GuiBase.java @@ -279,7 +279,7 @@ public abstract class GuiBase extends GuiContainer { return guiTop; } - public static int calculateOffsetOnScale(int pos, float scale) { + protected int calculateOffsetOnScale(int pos, float scale) { float multiplier = (pos / scale); return (int) multiplier; From 80e4a6500b88ff304842407ec53c1ff3a8992257 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Tue, 19 Jul 2016 12:51:44 +0200 Subject: [PATCH 012/214] Another small fix --- src/main/java/refinedstorage/RefinedStorage.java | 4 +++- .../java/refinedstorage/api/storage/IStorageProvider.java | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/refinedstorage/RefinedStorage.java b/src/main/java/refinedstorage/RefinedStorage.java index d4afca352..59116b570 100755 --- a/src/main/java/refinedstorage/RefinedStorage.java +++ b/src/main/java/refinedstorage/RefinedStorage.java @@ -34,9 +34,11 @@ public final class RefinedStorage { public final SimpleNetworkWrapper network = NetworkRegistry.INSTANCE.newSimpleChannel(ID); public final CreativeTabs tab = new CreativeTabs(ID) { + private ItemStack icon = new ItemStack(RefinedStorageItems.STORAGE_HOUSING); + @Override public ItemStack getIconItemStack() { - return new ItemStack(RefinedStorageItems.STORAGE_HOUSING); + return icon; } @Override diff --git a/src/main/java/refinedstorage/api/storage/IStorageProvider.java b/src/main/java/refinedstorage/api/storage/IStorageProvider.java index 2003b5502..fd10e65ea 100755 --- a/src/main/java/refinedstorage/api/storage/IStorageProvider.java +++ b/src/main/java/refinedstorage/api/storage/IStorageProvider.java @@ -3,7 +3,7 @@ package refinedstorage.api.storage; import java.util.List; /** - * Implement this interface on the tile that has a {@link refinedstorage.api.RefinedStorageCapabilities#NETWORK_NODE_CAPABILITY} capability. + * Represents a tile that provides storage to the network. Implement this on a tile that implements {@link refinedstorage.api.network.INetworkNode}. */ public interface IStorageProvider { /** From 432e37f000431e6b032087d531ba835e2fa6ab8a Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Tue, 19 Jul 2016 14:52:21 +0200 Subject: [PATCH 013/214] Bugfixes --- src/main/java/refinedstorage/RefinedStorage.java | 4 +--- src/main/java/refinedstorage/gui/GuiGrid.java | 4 ++++ 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/main/java/refinedstorage/RefinedStorage.java b/src/main/java/refinedstorage/RefinedStorage.java index 59116b570..d4afca352 100755 --- a/src/main/java/refinedstorage/RefinedStorage.java +++ b/src/main/java/refinedstorage/RefinedStorage.java @@ -34,11 +34,9 @@ public final class RefinedStorage { public final SimpleNetworkWrapper network = NetworkRegistry.INSTANCE.newSimpleChannel(ID); public final CreativeTabs tab = new CreativeTabs(ID) { - private ItemStack icon = new ItemStack(RefinedStorageItems.STORAGE_HOUSING); - @Override public ItemStack getIconItemStack() { - return icon; + return new ItemStack(RefinedStorageItems.STORAGE_HOUSING); } @Override diff --git a/src/main/java/refinedstorage/gui/GuiGrid.java b/src/main/java/refinedstorage/gui/GuiGrid.java index 341e44e99..2c8c7de94 100755 --- a/src/main/java/refinedstorage/gui/GuiGrid.java +++ b/src/main/java/refinedstorage/gui/GuiGrid.java @@ -128,8 +128,12 @@ public class GuiGrid extends GuiBase { if (grid.getViewType() == TileGrid.VIEW_TYPE_NON_CRAFTABLES && stack.isCraftable()) { t.remove(); + + continue; } else if (grid.getViewType() == TileGrid.VIEW_TYPE_CRAFTABLES && !stack.isCraftable()) { t.remove(); + + continue; } if (query.startsWith("@")) { From 9eb70afc2b638f1c621c23dcddd7fdd254427870 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Wed, 20 Jul 2016 00:32:24 +0200 Subject: [PATCH 014/214] Version bump to 0.8.12 --- build.gradle | 2 +- src/main/java/refinedstorage/RefinedStorage.java | 2 +- src/main/resources/mcmod.info | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/build.gradle b/build.gradle index 95d11e44b..36f8cfe73 100755 --- a/build.gradle +++ b/build.gradle @@ -12,7 +12,7 @@ buildscript { } apply plugin: 'net.minecraftforge.gradle.forge' -version = "0.8.11" +version = "0.8.12" group = "refinedstorage" archivesBaseName = "refinedstorage" diff --git a/src/main/java/refinedstorage/RefinedStorage.java b/src/main/java/refinedstorage/RefinedStorage.java index d4afca352..a3a1e751a 100755 --- a/src/main/java/refinedstorage/RefinedStorage.java +++ b/src/main/java/refinedstorage/RefinedStorage.java @@ -23,7 +23,7 @@ import java.util.List; @Mod(modid = RefinedStorage.ID, version = RefinedStorage.VERSION) public final class RefinedStorage { public static final String ID = "refinedstorage"; - public static final String VERSION = "0.8.11"; + public static final String VERSION = "0.8.12"; @SidedProxy(clientSide = "refinedstorage.proxy.ClientProxy", serverSide = "refinedstorage.proxy.ServerProxy") public static CommonProxy PROXY; diff --git a/src/main/resources/mcmod.info b/src/main/resources/mcmod.info index 8509f28dc..68c52678d 100755 --- a/src/main/resources/mcmod.info +++ b/src/main/resources/mcmod.info @@ -3,7 +3,7 @@ "modid": "refinedstorage", "name": "Refined Storage", "description": "A Minecraft mod all about storage.", - "version": "0.8.11", + "version": "0.8.12", "mcversion": "1.10.2", "url": "", "updateUrl": "", From d5d98a5584fb4c4bb329bb2d31cdda66907db851 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Wed, 20 Jul 2016 00:32:48 +0200 Subject: [PATCH 015/214] Fixes issue #210 "Dupe bug in crafting grid" --- CHANGELOG.md | 4 ++++ .../java/refinedstorage/container/ContainerGrid.java | 12 +++++++----- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 895c8a8fa..2fe89796b 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Refined Storage Changelog +### 0.8.12 +**Bugfixes** +- Fixed dupe bug when shift clicking output slot in grid + ### 0.8.11 **Bugfixes** - Fixed minor dupe bug with JEI transferring diff --git a/src/main/java/refinedstorage/container/ContainerGrid.java b/src/main/java/refinedstorage/container/ContainerGrid.java index be2bbc681..775e32ddb 100755 --- a/src/main/java/refinedstorage/container/ContainerGrid.java +++ b/src/main/java/refinedstorage/container/ContainerGrid.java @@ -96,12 +96,14 @@ public class ContainerGrid extends ContainerBase { if (!player.worldObj.isRemote) { Slot slot = inventorySlots.get(slotIndex); - if (slot == craftingResultSlot) { - ((TileGrid) grid).onCraftedShift(this, player); - } else if (grid.getGridHandler() != null && slot != patternResultSlot && !(slot instanceof SlotSpecimenLegacy) && slot.getHasStack()) { - slot.putStack(grid.getGridHandler().onInsert(slot.getStack())); + if (slot.getHasStack()) { + if (slot == craftingResultSlot) { + ((TileGrid) grid).onCraftedShift(this, player); + } else if (grid.getGridHandler() != null && slot != patternResultSlot && !(slot instanceof SlotSpecimenLegacy)) { + slot.putStack(grid.getGridHandler().onInsert(slot.getStack())); - detectAndSendChanges(); + detectAndSendChanges(); + } } } From 168e1cdadd2c002a480ba7f7d8dde43858ac6320 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Fri, 22 Jul 2016 14:21:49 +0200 Subject: [PATCH 016/214] Bump to 0.8.13 --- build.gradle | 2 +- src/main/java/refinedstorage/RefinedStorage.java | 2 +- src/main/resources/mcmod.info | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/build.gradle b/build.gradle index 36f8cfe73..a93247133 100755 --- a/build.gradle +++ b/build.gradle @@ -12,7 +12,7 @@ buildscript { } apply plugin: 'net.minecraftforge.gradle.forge' -version = "0.8.12" +version = "0.8.13" group = "refinedstorage" archivesBaseName = "refinedstorage" diff --git a/src/main/java/refinedstorage/RefinedStorage.java b/src/main/java/refinedstorage/RefinedStorage.java index a3a1e751a..2ac66ac4a 100755 --- a/src/main/java/refinedstorage/RefinedStorage.java +++ b/src/main/java/refinedstorage/RefinedStorage.java @@ -23,7 +23,7 @@ import java.util.List; @Mod(modid = RefinedStorage.ID, version = RefinedStorage.VERSION) public final class RefinedStorage { public static final String ID = "refinedstorage"; - public static final String VERSION = "0.8.12"; + public static final String VERSION = "0.8.13"; @SidedProxy(clientSide = "refinedstorage.proxy.ClientProxy", serverSide = "refinedstorage.proxy.ServerProxy") public static CommonProxy PROXY; diff --git a/src/main/resources/mcmod.info b/src/main/resources/mcmod.info index 68c52678d..f7cb78cb3 100755 --- a/src/main/resources/mcmod.info +++ b/src/main/resources/mcmod.info @@ -3,7 +3,7 @@ "modid": "refinedstorage", "name": "Refined Storage", "description": "A Minecraft mod all about storage.", - "version": "0.8.12", + "version": "0.8.13", "mcversion": "1.10.2", "url": "", "updateUrl": "", From b3885bf90dd3b5a507bf561757f71272f6d09d1b Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Fri, 22 Jul 2016 14:22:04 +0200 Subject: [PATCH 017/214] Fixes issue #212 "Tesselating block in world" --- src/main/java/refinedstorage/block/BlockDiskDrive.java | 2 +- src/main/java/refinedstorage/tile/TileDiskDrive.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/refinedstorage/block/BlockDiskDrive.java b/src/main/java/refinedstorage/block/BlockDiskDrive.java index 3399c96ea..048beb1d4 100755 --- a/src/main/java/refinedstorage/block/BlockDiskDrive.java +++ b/src/main/java/refinedstorage/block/BlockDiskDrive.java @@ -37,7 +37,7 @@ public class BlockDiskDrive extends BlockNode { @Override public IBlockState getActualState(IBlockState state, IBlockAccess world, BlockPos pos) { return super.getActualState(state, world, pos) - .withProperty(STORED, ((TileDiskDrive) world.getTileEntity(pos)).getStoredForScaledDisplay()); + .withProperty(STORED, Math.max(0, ((TileDiskDrive) world.getTileEntity(pos)).getStoredForDisplay())); } @Override diff --git a/src/main/java/refinedstorage/tile/TileDiskDrive.java b/src/main/java/refinedstorage/tile/TileDiskDrive.java index fdb0275b1..a4f6b51e3 100755 --- a/src/main/java/refinedstorage/tile/TileDiskDrive.java +++ b/src/main/java/refinedstorage/tile/TileDiskDrive.java @@ -281,7 +281,7 @@ public class TileDiskDrive extends TileNode implements IStorageProvider, IStorag return (int) Math.floor((stored / storedMax) * 7f); } - public int getStoredForScaledDisplay() { + public int getStoredForDisplay() { return stored; } From 224e5e6eff05a425c15940c0f9b659fc500663b7 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Fri, 22 Jul 2016 14:33:01 +0200 Subject: [PATCH 018/214] Fixed crash when quickly toggling sorting direction in Grid, fixes #186 --- CHANGELOG.md | 5 ++ .../java/refinedstorage/RefinedStorage.java | 2 +- .../java/refinedstorage/gui/GuiHandler.java | 1 + .../storage => gui/grid}/ClientStack.java | 8 +--- .../gui/{ => grid}/GuiCraftingSettings.java | 4 +- .../gui/{ => grid}/GuiGrid.java | 48 +++++-------------- .../gui/grid/sorting/GridSorting.java | 13 +++++ .../gui/grid/sorting/GridSortingName.java | 20 ++++++++ .../gui/grid/sorting/GridSortingQuantity.java | 22 +++++++++ .../SideButtonGridSearchBoxMode.java | 2 +- .../network/MessageGridDelta.java | 2 +- .../network/MessageGridUpdate.java | 2 +- 12 files changed, 80 insertions(+), 49 deletions(-) rename src/main/java/refinedstorage/{apiimpl/storage => gui/grid}/ClientStack.java (87%) rename src/main/java/refinedstorage/gui/{ => grid}/GuiCraftingSettings.java (98%) rename src/main/java/refinedstorage/gui/{ => grid}/GuiGrid.java (90%) create mode 100755 src/main/java/refinedstorage/gui/grid/sorting/GridSorting.java create mode 100755 src/main/java/refinedstorage/gui/grid/sorting/GridSortingName.java create mode 100755 src/main/java/refinedstorage/gui/grid/sorting/GridSortingQuantity.java diff --git a/CHANGELOG.md b/CHANGELOG.md index 2fe89796b..491aac9df 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # Refined Storage Changelog +### 0.8.13 +**Bugfixes** +- Fixed rendering crash with Disk Drive +- Fixed crash when quickly toggling sorting direction in Grid + ### 0.8.12 **Bugfixes** - Fixed dupe bug when shift clicking output slot in grid diff --git a/src/main/java/refinedstorage/RefinedStorage.java b/src/main/java/refinedstorage/RefinedStorage.java index 2ac66ac4a..4f74c04fb 100755 --- a/src/main/java/refinedstorage/RefinedStorage.java +++ b/src/main/java/refinedstorage/RefinedStorage.java @@ -14,7 +14,7 @@ import net.minecraftforge.fml.common.event.FMLPostInitializationEvent; import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; import net.minecraftforge.fml.common.network.NetworkRegistry; import net.minecraftforge.fml.common.network.simpleimpl.SimpleNetworkWrapper; -import refinedstorage.apiimpl.storage.ClientStack; +import refinedstorage.gui.grid.ClientStack; import refinedstorage.proxy.CommonProxy; import java.util.ArrayList; diff --git a/src/main/java/refinedstorage/gui/GuiHandler.java b/src/main/java/refinedstorage/gui/GuiHandler.java index bef7a4d4d..d5aa498ca 100755 --- a/src/main/java/refinedstorage/gui/GuiHandler.java +++ b/src/main/java/refinedstorage/gui/GuiHandler.java @@ -9,6 +9,7 @@ import net.minecraft.world.World; import net.minecraftforge.fml.common.network.IGuiHandler; import refinedstorage.RefinedStorageGui; import refinedstorage.container.*; +import refinedstorage.gui.grid.GuiGrid; import refinedstorage.tile.*; import refinedstorage.tile.controller.TileController; import refinedstorage.tile.grid.TileGrid; diff --git a/src/main/java/refinedstorage/apiimpl/storage/ClientStack.java b/src/main/java/refinedstorage/gui/grid/ClientStack.java similarity index 87% rename from src/main/java/refinedstorage/apiimpl/storage/ClientStack.java rename to src/main/java/refinedstorage/gui/grid/ClientStack.java index 693bf1167..a9cc647b5 100755 --- a/src/main/java/refinedstorage/apiimpl/storage/ClientStack.java +++ b/src/main/java/refinedstorage/gui/grid/ClientStack.java @@ -1,4 +1,4 @@ -package refinedstorage.apiimpl.storage; +package refinedstorage.gui.grid; import io.netty.buffer.ByteBuf; import net.minecraft.item.Item; @@ -12,12 +12,6 @@ public class ClientStack { private ItemStack stack; private boolean craftable; - public ClientStack(int id, ItemStack stack, boolean craftable) { - this.id = id; - this.stack = stack; - this.craftable = craftable; - } - public ClientStack(ByteBuf buf) { stack = new ItemStack(Item.getItemById(buf.readInt()), buf.readInt(), buf.readInt()); stack.setTagCompound(ByteBufUtils.readTag(buf)); diff --git a/src/main/java/refinedstorage/gui/GuiCraftingSettings.java b/src/main/java/refinedstorage/gui/grid/GuiCraftingSettings.java similarity index 98% rename from src/main/java/refinedstorage/gui/GuiCraftingSettings.java rename to src/main/java/refinedstorage/gui/grid/GuiCraftingSettings.java index 634d9369c..34a1cb349 100755 --- a/src/main/java/refinedstorage/gui/GuiCraftingSettings.java +++ b/src/main/java/refinedstorage/gui/grid/GuiCraftingSettings.java @@ -1,4 +1,4 @@ -package refinedstorage.gui; +package refinedstorage.gui.grid; import com.google.common.primitives.Ints; import net.minecraft.client.gui.GuiButton; @@ -8,8 +8,8 @@ import net.minecraftforge.fml.client.FMLClientHandler; import org.lwjgl.input.Keyboard; import refinedstorage.RefinedStorage; import refinedstorage.apiimpl.network.GridHandler; -import refinedstorage.apiimpl.storage.ClientStack; import refinedstorage.container.ContainerCraftingSettings; +import refinedstorage.gui.GuiBase; import refinedstorage.network.MessageGridCraftingStart; import java.io.IOException; diff --git a/src/main/java/refinedstorage/gui/GuiGrid.java b/src/main/java/refinedstorage/gui/grid/GuiGrid.java similarity index 90% rename from src/main/java/refinedstorage/gui/GuiGrid.java rename to src/main/java/refinedstorage/gui/grid/GuiGrid.java index 2c8c7de94..b316fa7d5 100755 --- a/src/main/java/refinedstorage/gui/GuiGrid.java +++ b/src/main/java/refinedstorage/gui/grid/GuiGrid.java @@ -1,4 +1,4 @@ -package refinedstorage.gui; +package refinedstorage.gui.grid; import net.minecraft.client.audio.PositionedSoundRecord; import net.minecraft.client.gui.GuiScreen; @@ -13,9 +13,12 @@ import net.minecraftforge.fml.common.FMLCommonHandler; import org.apache.commons.lang3.StringUtils; import refinedstorage.RefinedStorage; import refinedstorage.api.network.GridExtractFlags; -import refinedstorage.apiimpl.storage.ClientStack; import refinedstorage.block.EnumGridType; import refinedstorage.container.ContainerGrid; +import refinedstorage.gui.GuiBase; +import refinedstorage.gui.Scrollbar; +import refinedstorage.gui.grid.sorting.GridSortingName; +import refinedstorage.gui.grid.sorting.GridSortingQuantity; import refinedstorage.gui.sidebutton.*; import refinedstorage.jei.RefinedStorageJEIPlugin; import refinedstorage.network.MessageGridCraftingClear; @@ -30,38 +33,8 @@ import java.io.IOException; import java.util.*; public class GuiGrid extends GuiBase { - private Comparator quantityComparator = new Comparator() { - @Override - public int compare(ClientStack left, ClientStack right) { - int leftSize = left.getStack().stackSize; - int rightSize = right.getStack().stackSize; - - if (leftSize == rightSize) { - return 0; - } - - if (grid.getSortingDirection() == TileGrid.SORTING_DIRECTION_ASCENDING) { - return (leftSize > rightSize) ? 1 : -1; - } else if (grid.getSortingDirection() == TileGrid.SORTING_DIRECTION_DESCENDING) { - return (rightSize > leftSize) ? 1 : -1; - } - - return 0; - } - }; - - private Comparator nameComparator = new Comparator() { - @Override - public int compare(ClientStack left, ClientStack right) { - if (grid.getSortingDirection() == TileGrid.SORTING_DIRECTION_ASCENDING) { - return left.getStack().getDisplayName().compareTo(right.getStack().getDisplayName()); - } else if (grid.getSortingDirection() == TileGrid.SORTING_DIRECTION_DESCENDING) { - return right.getStack().getDisplayName().compareTo(left.getStack().getDisplayName()); - } - - return 0; - } - }; + private GridSortingQuantity quantitySorting = new GridSortingQuantity(); + private GridSortingName nameSorting = new GridSortingName(); private GuiTextField searchField; @@ -171,10 +144,13 @@ public class GuiGrid extends GuiBase { } } - Collections.sort(items, nameComparator); + nameSorting.setSortingDirection(grid.getSortingDirection()); + quantitySorting.setSortingDirection(grid.getSortingDirection()); + + Collections.sort(items, nameSorting); if (grid.getSortingType() == TileGrid.SORTING_TYPE_QUANTITY) { - Collections.sort(items, quantityComparator); + Collections.sort(items, quantitySorting); } } diff --git a/src/main/java/refinedstorage/gui/grid/sorting/GridSorting.java b/src/main/java/refinedstorage/gui/grid/sorting/GridSorting.java new file mode 100755 index 000000000..16d2c705e --- /dev/null +++ b/src/main/java/refinedstorage/gui/grid/sorting/GridSorting.java @@ -0,0 +1,13 @@ +package refinedstorage.gui.grid.sorting; + +import refinedstorage.gui.grid.ClientStack; + +import java.util.Comparator; + +public abstract class GridSorting implements Comparator { + protected int sortingDirection; + + public void setSortingDirection(int sortingDirection) { + this.sortingDirection = sortingDirection; + } +} diff --git a/src/main/java/refinedstorage/gui/grid/sorting/GridSortingName.java b/src/main/java/refinedstorage/gui/grid/sorting/GridSortingName.java new file mode 100755 index 000000000..5139dab4f --- /dev/null +++ b/src/main/java/refinedstorage/gui/grid/sorting/GridSortingName.java @@ -0,0 +1,20 @@ +package refinedstorage.gui.grid.sorting; + +import refinedstorage.gui.grid.ClientStack; +import refinedstorage.tile.grid.TileGrid; + +public class GridSortingName extends GridSorting { + @Override + public int compare(ClientStack left, ClientStack right) { + String leftName = left.getStack().getDisplayName(); + String rightName = right.getStack().getDisplayName(); + + if (sortingDirection == TileGrid.SORTING_DIRECTION_ASCENDING) { + return leftName.compareTo(rightName); + } else if (sortingDirection == TileGrid.SORTING_DIRECTION_DESCENDING) { + return rightName.compareTo(leftName); + } + + return 0; + } +} diff --git a/src/main/java/refinedstorage/gui/grid/sorting/GridSortingQuantity.java b/src/main/java/refinedstorage/gui/grid/sorting/GridSortingQuantity.java new file mode 100755 index 000000000..68fa6e4e5 --- /dev/null +++ b/src/main/java/refinedstorage/gui/grid/sorting/GridSortingQuantity.java @@ -0,0 +1,22 @@ +package refinedstorage.gui.grid.sorting; + +import refinedstorage.gui.grid.ClientStack; +import refinedstorage.tile.grid.TileGrid; + +public class GridSortingQuantity extends GridSorting { + @Override + public int compare(ClientStack left, ClientStack right) { + int leftSize = left.getStack().stackSize; + int rightSize = right.getStack().stackSize; + + if (leftSize != rightSize) { + if (sortingDirection == TileGrid.SORTING_DIRECTION_ASCENDING) { + return (leftSize > rightSize) ? 1 : -1; + } else if (sortingDirection == TileGrid.SORTING_DIRECTION_DESCENDING) { + return (rightSize > leftSize) ? 1 : -1; + } + } + + return 0; + } +} diff --git a/src/main/java/refinedstorage/gui/sidebutton/SideButtonGridSearchBoxMode.java b/src/main/java/refinedstorage/gui/sidebutton/SideButtonGridSearchBoxMode.java index 8e08f7612..6466c07bf 100755 --- a/src/main/java/refinedstorage/gui/sidebutton/SideButtonGridSearchBoxMode.java +++ b/src/main/java/refinedstorage/gui/sidebutton/SideButtonGridSearchBoxMode.java @@ -3,7 +3,7 @@ package refinedstorage.gui.sidebutton; import net.minecraft.util.text.TextFormatting; import refinedstorage.RefinedStorage; import refinedstorage.gui.GuiBase; -import refinedstorage.gui.GuiGrid; +import refinedstorage.gui.grid.GuiGrid; import refinedstorage.tile.grid.TileGrid; public class SideButtonGridSearchBoxMode extends SideButton { diff --git a/src/main/java/refinedstorage/network/MessageGridDelta.java b/src/main/java/refinedstorage/network/MessageGridDelta.java index 1116b865b..a11108c8e 100755 --- a/src/main/java/refinedstorage/network/MessageGridDelta.java +++ b/src/main/java/refinedstorage/network/MessageGridDelta.java @@ -7,7 +7,7 @@ import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler; import net.minecraftforge.fml.common.network.simpleimpl.MessageContext; import refinedstorage.RefinedStorage; import refinedstorage.api.network.INetworkMaster; -import refinedstorage.apiimpl.storage.ClientStack; +import refinedstorage.gui.grid.ClientStack; public class MessageGridDelta implements IMessage, IMessageHandler { private INetworkMaster network; diff --git a/src/main/java/refinedstorage/network/MessageGridUpdate.java b/src/main/java/refinedstorage/network/MessageGridUpdate.java index 5eccb2d4b..bcf87f8ec 100755 --- a/src/main/java/refinedstorage/network/MessageGridUpdate.java +++ b/src/main/java/refinedstorage/network/MessageGridUpdate.java @@ -7,7 +7,7 @@ import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler; import net.minecraftforge.fml.common.network.simpleimpl.MessageContext; import refinedstorage.RefinedStorage; import refinedstorage.api.network.INetworkMaster; -import refinedstorage.apiimpl.storage.ClientStack; +import refinedstorage.gui.grid.ClientStack; import java.util.ArrayList; import java.util.List; From 1c2d2815738a9ba94bb0c4ac53aae5aa96f00aa2 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Thu, 28 Jul 2016 15:20:48 +0200 Subject: [PATCH 019/214] Fixed usage of client side only class in ContainerBase, fixes #223 --- CHANGELOG.md | 1 + .../container/ContainerBase.java | 24 ++++--------------- 2 files changed, 5 insertions(+), 20 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 491aac9df..13deedaee 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ **Bugfixes** - Fixed rendering crash with Disk Drive - Fixed crash when quickly toggling sorting direction in Grid +- Fixed not being able to clear configurations in GUIs ### 0.8.12 **Bugfixes** diff --git a/src/main/java/refinedstorage/container/ContainerBase.java b/src/main/java/refinedstorage/container/ContainerBase.java index 1b6be6c65..980a39526 100755 --- a/src/main/java/refinedstorage/container/ContainerBase.java +++ b/src/main/java/refinedstorage/container/ContainerBase.java @@ -1,6 +1,5 @@ package refinedstorage.container; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.ClickType; import net.minecraft.inventory.Container; @@ -48,23 +47,15 @@ public abstract class ContainerBase extends Container { if (slot instanceof SlotSpecimen) { if (((SlotSpecimen) slot).isWithSize()) { if (slot.getStack() != null) { - if (GuiScreen.isShiftKeyDown()) { + if (clickType == ClickType.QUICK_MOVE) { slot.putStack(null); } else { int amount = slot.getStack().stackSize; if (clickedButton == 0) { - amount--; - - if (amount < 1) { - amount = 1; - } + amount = Math.max(1, --amount); } else if (clickedButton == 1) { - amount++; - - if (amount > 64) { - amount = 64; - } + amount = Math.min(64, ++amount); } slot.getStack().stackSize = amount; @@ -72,14 +63,7 @@ public abstract class ContainerBase extends Container { } else if (player.inventory.getItemStack() != null) { int amount = player.inventory.getItemStack().stackSize; - if (clickedButton == 1) { - amount = 1; - } - - ItemStack toPut = player.inventory.getItemStack().copy(); - toPut.stackSize = amount; - - slot.putStack(toPut); + slot.putStack(ItemHandlerHelper.copyStackWithSize(player.inventory.getItemStack(), clickedButton == 1 ? 1 : amount)); } } else if (player.inventory.getItemStack() == null) { slot.putStack(null); From 5a1a2e63565df919366c9451677a6816bb3865df Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Thu, 28 Jul 2016 15:22:43 +0200 Subject: [PATCH 020/214] Better changelog --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 13deedaee..13308ff91 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,7 @@ **Bugfixes** - Fixed rendering crash with Disk Drive - Fixed crash when quickly toggling sorting direction in Grid -- Fixed not being able to clear configurations in GUIs +- Fixed not being able to clear exporter row in interface ### 0.8.12 **Bugfixes** From abf4d7d8868360143c4866f4f8afcfd4eefc94ec Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Thu, 28 Jul 2016 15:44:22 +0200 Subject: [PATCH 021/214] Fixed interface having weird extraction / insertion rules, fixes #224 --- CHANGELOG.md | 1 + .../inventory/InterfaceItemHandler.java | 24 +++++++++++++++++++ .../refinedstorage/tile/TileInterface.java | 8 +++---- 3 files changed, 28 insertions(+), 5 deletions(-) create mode 100755 src/main/java/refinedstorage/inventory/InterfaceItemHandler.java diff --git a/CHANGELOG.md b/CHANGELOG.md index 13308ff91..287d92024 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ - Fixed rendering crash with Disk Drive - Fixed crash when quickly toggling sorting direction in Grid - Fixed not being able to clear exporter row in interface +- Fixed interface having weird extraction / insertion rules. It can now take items from any side, or extract items from any side depending on the block that is inserting or extracting the item (like conduits). ### 0.8.12 **Bugfixes** diff --git a/src/main/java/refinedstorage/inventory/InterfaceItemHandler.java b/src/main/java/refinedstorage/inventory/InterfaceItemHandler.java new file mode 100755 index 000000000..1ba94747e --- /dev/null +++ b/src/main/java/refinedstorage/inventory/InterfaceItemHandler.java @@ -0,0 +1,24 @@ +package refinedstorage.inventory; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.items.ItemStackHandler; + +public class InterfaceItemHandler extends ItemStackHandler { + private BasicItemHandler importItems; + private BasicItemHandler exportItems; + + public InterfaceItemHandler(BasicItemHandler importItems, BasicItemHandler exportItems) { + this.importItems = importItems; + this.exportItems = exportItems; + } + + @Override + public ItemStack insertItem(int slot, ItemStack stack, boolean simulate) { + return importItems.insertItem(slot, stack, simulate); + } + + @Override + public ItemStack extractItem(int slot, int amount, boolean simulate) { + return exportItems.extractItem(slot, amount, simulate); + } +} diff --git a/src/main/java/refinedstorage/tile/TileInterface.java b/src/main/java/refinedstorage/tile/TileInterface.java index 45e35e994..43a64897c 100755 --- a/src/main/java/refinedstorage/tile/TileInterface.java +++ b/src/main/java/refinedstorage/tile/TileInterface.java @@ -12,6 +12,7 @@ import net.minecraftforge.items.wrapper.CombinedInvWrapper; import refinedstorage.RefinedStorage; import refinedstorage.container.ContainerInterface; import refinedstorage.inventory.BasicItemHandler; +import refinedstorage.inventory.InterfaceItemHandler; import refinedstorage.inventory.UpgradeItemHandler; import refinedstorage.item.ItemUpgrade; import refinedstorage.tile.config.ICompareConfig; @@ -22,6 +23,7 @@ public class TileInterface extends TileNode implements ICompareConfig { private BasicItemHandler importItems = new BasicItemHandler(9, this); private BasicItemHandler exportSpecimenItems = new BasicItemHandler(9, this); private BasicItemHandler exportItems = new BasicItemHandler(9, this); + private InterfaceItemHandler itemHandler = new InterfaceItemHandler(importItems, exportItems); private UpgradeItemHandler upgrades = new UpgradeItemHandler(4, this, ItemUpgrade.TYPE_SPEED, ItemUpgrade.TYPE_STACK); private int compare = 0; @@ -173,11 +175,7 @@ public class TileInterface extends TileNode implements ICompareConfig { @Override public T getCapability(Capability capability, EnumFacing facing) { if (capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) { - if (facing == EnumFacing.DOWN) { - return (T) exportItems; - } else { - return (T) importItems; - } + return (T) itemHandler; } return super.getCapability(capability, facing); From 87f815ad7b5ba6738c01c51a7fe1fee5af412332 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Thu, 28 Jul 2016 16:24:10 +0200 Subject: [PATCH 022/214] Update docs --- .../api/autocrafting/ICraftingPatternContainer.java | 2 +- .../java/refinedstorage/api/network/GridExtractFlags.java | 2 +- src/main/java/refinedstorage/api/network/INetworkNode.java | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/refinedstorage/api/autocrafting/ICraftingPatternContainer.java b/src/main/java/refinedstorage/api/autocrafting/ICraftingPatternContainer.java index fb1b1cf81..733543471 100755 --- a/src/main/java/refinedstorage/api/autocrafting/ICraftingPatternContainer.java +++ b/src/main/java/refinedstorage/api/autocrafting/ICraftingPatternContainer.java @@ -9,7 +9,7 @@ public interface ICraftingPatternContainer { /** * This usually corresponds to the amount of speed upgrades in a crafter. * - * @return The speed of this pattern + * @return The speed of this container */ int getSpeed(); diff --git a/src/main/java/refinedstorage/api/network/GridExtractFlags.java b/src/main/java/refinedstorage/api/network/GridExtractFlags.java index 1dd9917fa..87064d6bb 100755 --- a/src/main/java/refinedstorage/api/network/GridExtractFlags.java +++ b/src/main/java/refinedstorage/api/network/GridExtractFlags.java @@ -3,7 +3,7 @@ package refinedstorage.api.network; /** * Flags for knowing what extract action the player is performing, these can be combined. */ -public class GridExtractFlags { +public final class GridExtractFlags { public static final int EXTRACT_HALF = 1; public static final int EXTRACT_SINGLE = 2; public static final int EXTRACT_SHIFT = 4; diff --git a/src/main/java/refinedstorage/api/network/INetworkNode.java b/src/main/java/refinedstorage/api/network/INetworkNode.java index 854426326..1408609db 100755 --- a/src/main/java/refinedstorage/api/network/INetworkNode.java +++ b/src/main/java/refinedstorage/api/network/INetworkNode.java @@ -37,7 +37,7 @@ public interface INetworkNode { /** * Called when the connection state of this node changes. - * This is also called when redstone mode is updated, as opposed to {@link INetworkNode#onConnected(INetworkMaster)} and {@link INetworkNode#onDisconnected()}. + * This is also called when redstone mode is updated, as opposed to {@link INetworkNode#onConnected(INetworkMaster)} and {@link INetworkNode#onDisconnected(INetworkMaster)}. * * @param network The network * @param state The state @@ -50,7 +50,7 @@ public interface INetworkNode { boolean isConnected(); /** - * @return If {@link INetworkNode#canUpdate()} can get called, typically checks for connection status and redstone mode + * @return If {@link INetworkNode#updateNode()} can get called, typically checks for connection status and redstone mode */ boolean canUpdate(); From e0c3e509ba7a35fd5ca56e66a2775c1897b73e38 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Fri, 29 Jul 2016 22:56:23 +0200 Subject: [PATCH 023/214] Added config option to set the base energy usage of the Controller (default is 0) --- CHANGELOG.md | 3 +++ src/main/java/refinedstorage/RefinedStorage.java | 8 +++++--- src/main/java/refinedstorage/container/ContainerBase.java | 4 ++-- .../java/refinedstorage/item/ItemBlockController.java | 4 ++-- .../refinedstorage/tile/controller/TileController.java | 4 ++-- 5 files changed, 14 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 287d92024..216017b56 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,9 @@ - Fixed not being able to clear exporter row in interface - Fixed interface having weird extraction / insertion rules. It can now take items from any side, or extract items from any side depending on the block that is inserting or extracting the item (like conduits). +**Features** +- Added config option to set the base energy usage of the Controller (default is 0) + ### 0.8.12 **Bugfixes** - Fixed dupe bug when shift clicking output slot in grid diff --git a/src/main/java/refinedstorage/RefinedStorage.java b/src/main/java/refinedstorage/RefinedStorage.java index 4f74c04fb..23eb67765 100755 --- a/src/main/java/refinedstorage/RefinedStorage.java +++ b/src/main/java/refinedstorage/RefinedStorage.java @@ -47,6 +47,7 @@ public final class RefinedStorage { public List items = new ArrayList(); + public int controllerUsage; public int cableUsage; public int constructorUsage; public int crafterUsage; @@ -69,7 +70,7 @@ public final class RefinedStorage { public int craftingGridUsage; public int patternGridUsage; - public int controller; + public int controllerCapacity; public boolean controllerUsesEnergy; public int wirelessTransmitterBaseRange; @@ -86,6 +87,7 @@ public final class RefinedStorage { Configuration config = new Configuration(e.getSuggestedConfigurationFile()); + controllerUsage = config.getInt("controller", "energy", 20, 0, Integer.MAX_VALUE, "The base energy used by the Controller"); cableUsage = config.getInt("cable", "energy", 0, 0, Integer.MAX_VALUE, "The energy used by Cables"); constructorUsage = config.getInt("constructor", "energy", 1, 0, Integer.MAX_VALUE, "The energy used by Constructors"); crafterUsage = config.getInt("crafter", "energy", 2, 0, Integer.MAX_VALUE, "The base energy used by Crafters"); @@ -108,8 +110,8 @@ public final class RefinedStorage { craftingGridUsage = config.getInt("craftingGrid", "energy", 4, 0, Integer.MAX_VALUE, "The energy used by Crafting Grids"); patternGridUsage = config.getInt("patternGrid", "energy", 3, 0, Integer.MAX_VALUE, "The energy used by Pattern Grids"); - controller = config.getInt("controller", "energy", 32000, 0, Integer.MAX_VALUE, "The energy capacity of the controller"); - controllerUsesEnergy = config.getBoolean("controllerUsesEnergy", "energy", true, "Whether the controller uses RF"); + controllerCapacity = config.getInt("capacity", "controller", 32000, 0, Integer.MAX_VALUE, "The energy capacity of the Controller"); + controllerUsesEnergy = config.getBoolean("usesEnergy", "controller", true, "Whether the Controller uses energy"); wirelessTransmitterBaseRange = config.getInt("range", "wirelessTransmitter", 16, 0, Integer.MAX_VALUE, "The base range of the Wireless Transmitter"); wirelessTransmitterRangePerUpgrade = config.getInt("rangePerUpgrade", "wirelessTransmitter", 8, 0, Integer.MAX_VALUE, "The additional range per Range Upgrade in the Wireless Transmitter"); diff --git a/src/main/java/refinedstorage/container/ContainerBase.java b/src/main/java/refinedstorage/container/ContainerBase.java index 980a39526..3eb1d74a1 100755 --- a/src/main/java/refinedstorage/container/ContainerBase.java +++ b/src/main/java/refinedstorage/container/ContainerBase.java @@ -53,9 +53,9 @@ public abstract class ContainerBase extends Container { int amount = slot.getStack().stackSize; if (clickedButton == 0) { - amount = Math.max(1, --amount); + amount = Math.max(1, amount - 1); } else if (clickedButton == 1) { - amount = Math.min(64, ++amount); + amount = Math.min(64, amount + 1); } slot.getStack().stackSize = amount; diff --git a/src/main/java/refinedstorage/item/ItemBlockController.java b/src/main/java/refinedstorage/item/ItemBlockController.java index 8f20acc69..2c192dbb0 100755 --- a/src/main/java/refinedstorage/item/ItemBlockController.java +++ b/src/main/java/refinedstorage/item/ItemBlockController.java @@ -21,7 +21,7 @@ public class ItemBlockController extends ItemBlockBase { public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean b) { if (stack.getMetadata() != EnumControllerType.CREATIVE.getId()) { int energyStored = 0; - int energyCapacity = RefinedStorage.INSTANCE.controller; + int energyCapacity = RefinedStorage.INSTANCE.controllerCapacity; if (stack.getTagCompound() != null) { if (stack.getTagCompound().hasKey(TileController.NBT_ENERGY)) { @@ -51,7 +51,7 @@ public class ItemBlockController extends ItemBlockBase { tag = new NBTTagCompound(); } - tag.setInteger(TileController.NBT_ENERGY, stack.getMetadata() == EnumControllerType.CREATIVE.getId() ? RefinedStorage.INSTANCE.controller : 0); + tag.setInteger(TileController.NBT_ENERGY, stack.getMetadata() == EnumControllerType.CREATIVE.getId() ? RefinedStorage.INSTANCE.controllerCapacity : 0); return stack; } diff --git a/src/main/java/refinedstorage/tile/controller/TileController.java b/src/main/java/refinedstorage/tile/controller/TileController.java index b349fa3c0..9c815c5af 100755 --- a/src/main/java/refinedstorage/tile/controller/TileController.java +++ b/src/main/java/refinedstorage/tile/controller/TileController.java @@ -102,7 +102,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR private List craftingTasksToAdd = new ArrayList(); private List craftingTasksToCancel = new ArrayList(); - private EnergyStorage energy = new EnergyStorage(RefinedStorage.INSTANCE.controller); + private EnergyStorage energy = new EnergyStorage(RefinedStorage.INSTANCE.controllerCapacity); private IC2Energy IC2Energy; private int energyUsage; @@ -696,7 +696,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR @Override public int getEnergyUsage() { if (!worldObj.isRemote) { - int usage = 0; + int usage = RefinedStorage.INSTANCE.controllerUsage; for (INetworkNode node : nodes) { if (node.canUpdate()) { From 72973d9755ba9fb2cd4df543c4072c6a446a10b8 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Fri, 29 Jul 2016 22:57:11 +0200 Subject: [PATCH 024/214] The default is 0! --- src/main/java/refinedstorage/RefinedStorage.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/refinedstorage/RefinedStorage.java b/src/main/java/refinedstorage/RefinedStorage.java index 23eb67765..b3be3f541 100755 --- a/src/main/java/refinedstorage/RefinedStorage.java +++ b/src/main/java/refinedstorage/RefinedStorage.java @@ -87,7 +87,7 @@ public final class RefinedStorage { Configuration config = new Configuration(e.getSuggestedConfigurationFile()); - controllerUsage = config.getInt("controller", "energy", 20, 0, Integer.MAX_VALUE, "The base energy used by the Controller"); + controllerUsage = config.getInt("controller", "energy", 0, 0, Integer.MAX_VALUE, "The base energy used by the Controller"); cableUsage = config.getInt("cable", "energy", 0, 0, Integer.MAX_VALUE, "The energy used by Cables"); constructorUsage = config.getInt("constructor", "energy", 1, 0, Integer.MAX_VALUE, "The energy used by Constructors"); crafterUsage = config.getInt("crafter", "energy", 2, 0, Integer.MAX_VALUE, "The base energy used by Crafters"); From c376ff5ce71b369167628075e8695093f2b40ba6 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sat, 30 Jul 2016 00:21:01 +0200 Subject: [PATCH 025/214] Grid Filter item and GUI --- .../refinedstorage/RefinedStorageGui.java | 1 + .../refinedstorage/RefinedStorageItems.java | 1 + .../container/ContainerBase.java | 9 ++- .../container/ContainerGridFilter.java | 55 ++++++++++++++++++ .../refinedstorage/gui/GuiGridFilter.java | 30 ++++++++++ .../java/refinedstorage/gui/GuiHandler.java | 8 +++ .../inventory/GridFilterItemHandler.java | 31 ++++++++++ .../refinedstorage/item/ItemGridFilter.java | 29 +++++++++ .../refinedstorage/proxy/ClientProxy.java | 1 + .../refinedstorage/proxy/CommonProxy.java | 1 + .../java/refinedstorage/tile/TileBase.java | 8 +-- .../assets/refinedstorage/lang/en_US.lang | 4 +- .../assets/refinedstorage/lang/nl_NL.lang | 4 +- .../models/item/grid_filter.json | 6 ++ .../textures/gui/grid_filter.png | Bin 0 -> 1832 bytes .../textures/items/grid_filter.png | Bin 0 -> 232 bytes 16 files changed, 181 insertions(+), 7 deletions(-) create mode 100755 src/main/java/refinedstorage/container/ContainerGridFilter.java create mode 100755 src/main/java/refinedstorage/gui/GuiGridFilter.java create mode 100755 src/main/java/refinedstorage/inventory/GridFilterItemHandler.java create mode 100755 src/main/java/refinedstorage/item/ItemGridFilter.java create mode 100755 src/main/resources/assets/refinedstorage/models/item/grid_filter.json create mode 100755 src/main/resources/assets/refinedstorage/textures/gui/grid_filter.png create mode 100755 src/main/resources/assets/refinedstorage/textures/items/grid_filter.png diff --git a/src/main/java/refinedstorage/RefinedStorageGui.java b/src/main/java/refinedstorage/RefinedStorageGui.java index e454987b3..e07961b75 100755 --- a/src/main/java/refinedstorage/RefinedStorageGui.java +++ b/src/main/java/refinedstorage/RefinedStorageGui.java @@ -18,4 +18,5 @@ public final class RefinedStorageGui { public static final int WIRELESS_TRANSMITTER = 14; public static final int CRAFTER = 15; public static final int PROCESSING_PATTERN_ENCODER = 16; + public static final int GRID_FILTER = 17; } diff --git a/src/main/java/refinedstorage/RefinedStorageItems.java b/src/main/java/refinedstorage/RefinedStorageItems.java index df83bd2dc..8ea4c3810 100755 --- a/src/main/java/refinedstorage/RefinedStorageItems.java +++ b/src/main/java/refinedstorage/RefinedStorageItems.java @@ -13,4 +13,5 @@ public final class RefinedStorageItems { public static final ItemPattern PATTERN = new ItemPattern(); public static final ItemUpgrade UPGRADE = new ItemUpgrade(); public static final ItemStorageHousing STORAGE_HOUSING = new ItemStorageHousing(); + public static final ItemGridFilter GRID_FILTER = new ItemGridFilter(); } diff --git a/src/main/java/refinedstorage/container/ContainerBase.java b/src/main/java/refinedstorage/container/ContainerBase.java index 3eb1d74a1..bfc46cb7b 100755 --- a/src/main/java/refinedstorage/container/ContainerBase.java +++ b/src/main/java/refinedstorage/container/ContainerBase.java @@ -26,7 +26,14 @@ public abstract class ContainerBase extends Container { int id = 0; for (int i = 0; i < 9; i++) { - addSlotToContainer(new Slot(player.inventory, id, xInventory + i * 18, yInventory + 4 + (3 * 18))); + int x = xInventory + i * 18; + int y = yInventory + 4 + (3 * 18); + + if (ContainerBase.this instanceof ContainerGridFilter && i == ((ContainerGridFilter) ContainerBase.this).slot) { + addSlotToContainer(new SlotDisabled(player.inventory, id, x, y)); + } else { + addSlotToContainer(new Slot(player.inventory, id, x, y)); + } id++; } diff --git a/src/main/java/refinedstorage/container/ContainerGridFilter.java b/src/main/java/refinedstorage/container/ContainerGridFilter.java new file mode 100755 index 000000000..1a0537d1d --- /dev/null +++ b/src/main/java/refinedstorage/container/ContainerGridFilter.java @@ -0,0 +1,55 @@ +package refinedstorage.container; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; +import refinedstorage.container.slot.SlotSpecimen; +import refinedstorage.inventory.GridFilterItemHandler; + +public class ContainerGridFilter extends ContainerBase { + private GridFilterItemHandler itemHandler; + + protected int slot; + + public ContainerGridFilter(EntityPlayer player, ItemStack gridFilter, int slot) { + super(player); + + this.slot = slot; + this.itemHandler = new GridFilterItemHandler(gridFilter); + + int x = 8; + int y = 20; + + for (int i = 0; i < 9 * 3; ++i) { + addSlotToContainer(new SlotSpecimen(itemHandler, i, x, y)); + + if ((i + 1) % 9 == 0) { + y += 18; + x = 8; + } else { + x += 18; + } + } + + addPlayerInventory(8, 91); + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer player, int index) { + ItemStack stack = null; + + Slot slot = getSlot(index); + + if (slot != null && slot.getHasStack()) { + stack = slot.getStack(); + + if (index > (9 * 3) - 1) { + return mergeItemStackToSpecimen(stack, 0, 9 * 3); + } + + return null; + } + + return stack; + } +} diff --git a/src/main/java/refinedstorage/gui/GuiGridFilter.java b/src/main/java/refinedstorage/gui/GuiGridFilter.java new file mode 100755 index 000000000..002913bad --- /dev/null +++ b/src/main/java/refinedstorage/gui/GuiGridFilter.java @@ -0,0 +1,30 @@ +package refinedstorage.gui; + +import refinedstorage.container.ContainerGridFilter; + +public class GuiGridFilter extends GuiBase { + public GuiGridFilter(ContainerGridFilter container) { + super(container, 176, 183); + } + + @Override + public void init(int x, int y) { + } + + @Override + public void update(int x, int y) { + } + + @Override + public void drawBackground(int x, int y, int mouseX, int mouseY) { + bindTexture("gui/grid_filter.png"); + + drawTexture(x, y, 0, 0, width, height); + } + + @Override + public void drawForeground(int mouseX, int mouseY) { + drawString(7, 7, t("gui.refinedstorage:grid_filter")); + drawString(7, 79, t("container.inventory")); + } +} diff --git a/src/main/java/refinedstorage/gui/GuiHandler.java b/src/main/java/refinedstorage/gui/GuiHandler.java index d5aa498ca..baa33c5f3 100755 --- a/src/main/java/refinedstorage/gui/GuiHandler.java +++ b/src/main/java/refinedstorage/gui/GuiHandler.java @@ -59,11 +59,17 @@ public class GuiHandler implements IGuiHandler { public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { if (ID == RefinedStorageGui.WIRELESS_GRID) { return getWirelessGridContainer(player, x); + } else if (ID == RefinedStorageGui.GRID_FILTER) { + return getGridFilterContainer(player, x); } return getContainer(ID, player, world.getTileEntity(new BlockPos(x, y, z))); } + private ContainerGridFilter getGridFilterContainer(EntityPlayer player, int hand) { + return new ContainerGridFilter(player, player.getHeldItem(EnumHand.values()[hand]), player.inventory.currentItem); + } + private WirelessGrid getWirelessGrid(EntityPlayer player, int hand) { return new WirelessGrid(player.worldObj, player.getHeldItem(EnumHand.values()[hand]), EnumHand.values()[hand]); } @@ -119,6 +125,8 @@ public class GuiHandler implements IGuiHandler { return new GuiCrafter((ContainerCrafter) getContainer(ID, player, tile), (TileCrafter) tile); case RefinedStorageGui.PROCESSING_PATTERN_ENCODER: return new GuiProcessingPatternEncoder((ContainerProcessingPatternEncoder) getContainer(ID, player, tile), (TileProcessingPatternEncoder) tile); + case RefinedStorageGui.GRID_FILTER: + return new GuiGridFilter(getGridFilterContainer(player, x)); default: return null; } diff --git a/src/main/java/refinedstorage/inventory/GridFilterItemHandler.java b/src/main/java/refinedstorage/inventory/GridFilterItemHandler.java new file mode 100755 index 000000000..31bf88390 --- /dev/null +++ b/src/main/java/refinedstorage/inventory/GridFilterItemHandler.java @@ -0,0 +1,31 @@ +package refinedstorage.inventory; + +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.items.ItemStackHandler; +import refinedstorage.tile.TileBase; + +public class GridFilterItemHandler extends ItemStackHandler { + private ItemStack filter; + + public GridFilterItemHandler(ItemStack filter) { + super(9 * 3); + + this.filter = filter; + + if (filter.hasTagCompound()) { + TileBase.readItems(this, 0, filter.getTagCompound()); + } + } + + @Override + protected void onContentsChanged(int slot) { + super.onContentsChanged(slot); + + if (!filter.hasTagCompound()) { + filter.setTagCompound(new NBTTagCompound()); + } + + TileBase.writeItems(this, 0, filter.getTagCompound()); + } +} diff --git a/src/main/java/refinedstorage/item/ItemGridFilter.java b/src/main/java/refinedstorage/item/ItemGridFilter.java new file mode 100755 index 000000000..ff9c75454 --- /dev/null +++ b/src/main/java/refinedstorage/item/ItemGridFilter.java @@ -0,0 +1,29 @@ +package refinedstorage.item; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ActionResult; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumHand; +import net.minecraft.world.World; +import refinedstorage.RefinedStorage; +import refinedstorage.RefinedStorageGui; + +public class ItemGridFilter extends ItemBase { + public ItemGridFilter() { + super("grid_filter"); + + setMaxStackSize(1); + } + + @Override + public ActionResult onItemRightClick(ItemStack stack, World world, EntityPlayer player, EnumHand hand) { + if (!world.isRemote) { + player.openGui(RefinedStorage.INSTANCE, RefinedStorageGui.GRID_FILTER, world, hand.ordinal(), 0, 0); + + return new ActionResult(EnumActionResult.SUCCESS, stack); + } + + return new ActionResult(EnumActionResult.PASS, stack); + } +} diff --git a/src/main/java/refinedstorage/proxy/ClientProxy.java b/src/main/java/refinedstorage/proxy/ClientProxy.java index 51a02b210..8307640aa 100755 --- a/src/main/java/refinedstorage/proxy/ClientProxy.java +++ b/src/main/java/refinedstorage/proxy/ClientProxy.java @@ -94,6 +94,7 @@ public class ClientProxy extends CommonProxy { ModelLoader.setCustomModelResourceLocation(RefinedStorageItems.WIRELESS_GRID, 0, new ModelResourceLocation("refinedstorage:wireless_grid", "inventory")); ModelLoader.setCustomModelResourceLocation(RefinedStorageItems.PATTERN, 0, new ModelResourceLocation("refinedstorage:pattern", "inventory")); ModelLoader.setCustomModelResourceLocation(RefinedStorageItems.STORAGE_HOUSING, 0, new ModelResourceLocation("refinedstorage:storage_housing", "inventory")); + ModelLoader.setCustomModelResourceLocation(RefinedStorageItems.GRID_FILTER, 0, new ModelResourceLocation("refinedstorage:grid_filter", "inventory")); ModelLoader.setCustomModelResourceLocation(RefinedStorageItems.UPGRADE, 0, new ModelResourceLocation("refinedstorage:upgrade", "inventory")); ModelLoader.setCustomModelResourceLocation(RefinedStorageItems.UPGRADE, ItemUpgrade.TYPE_RANGE, new ModelResourceLocation("refinedstorage:range_upgrade", "inventory")); diff --git a/src/main/java/refinedstorage/proxy/CommonProxy.java b/src/main/java/refinedstorage/proxy/CommonProxy.java index 8383ba7fe..2c036b343 100755 --- a/src/main/java/refinedstorage/proxy/CommonProxy.java +++ b/src/main/java/refinedstorage/proxy/CommonProxy.java @@ -110,6 +110,7 @@ public class CommonProxy { registerItem(RefinedStorageItems.CORE); registerItem(RefinedStorageItems.SILICON); registerItem(RefinedStorageItems.UPGRADE); + registerItem(RefinedStorageItems.GRID_FILTER); OreDictionary.registerOre("itemSilicon", RefinedStorageItems.SILICON); diff --git a/src/main/java/refinedstorage/tile/TileBase.java b/src/main/java/refinedstorage/tile/TileBase.java index 751aa7f4e..7bf1fe33a 100755 --- a/src/main/java/refinedstorage/tile/TileBase.java +++ b/src/main/java/refinedstorage/tile/TileBase.java @@ -134,7 +134,7 @@ public abstract class TileBase extends TileEntity implements ITickable { return null; } - protected void writeItems(IItemHandler handler, int id, NBTTagCompound nbt) { + public static void writeItems(IItemHandler handler, int id, NBTTagCompound nbt) { NBTTagList tagList = new NBTTagList(); for (int i = 0; i < handler.getSlots(); i++) { @@ -152,7 +152,7 @@ public abstract class TileBase extends TileEntity implements ITickable { nbt.setTag(String.format(NBT_INVENTORY, id), tagList); } - protected void readItems(IItemHandler handler, int id, NBTTagCompound nbt) { + public static void readItems(IItemHandler handler, int id, NBTTagCompound nbt) { String name = String.format(NBT_INVENTORY, id); if (nbt.hasKey(name)) { @@ -168,7 +168,7 @@ public abstract class TileBase extends TileEntity implements ITickable { } } - protected void writeItemsLegacy(IInventory inventory, int id, NBTTagCompound nbt) { + public static void writeItemsLegacy(IInventory inventory, int id, NBTTagCompound nbt) { NBTTagList tagList = new NBTTagList(); for (int i = 0; i < inventory.getSizeInventory(); i++) { @@ -186,7 +186,7 @@ public abstract class TileBase extends TileEntity implements ITickable { nbt.setTag(String.format(NBT_INVENTORY, id), tagList); } - protected void readItemsLegacy(IInventory inventory, int id, NBTTagCompound nbt) { + public static void readItemsLegacy(IInventory inventory, int id, NBTTagCompound nbt) { String name = String.format(NBT_INVENTORY, id); if (nbt.hasKey(name)) { diff --git a/src/main/resources/assets/refinedstorage/lang/en_US.lang b/src/main/resources/assets/refinedstorage/lang/en_US.lang index b3fbc772b..968ae2a51 100755 --- a/src/main/resources/assets/refinedstorage/lang/en_US.lang +++ b/src/main/resources/assets/refinedstorage/lang/en_US.lang @@ -30,6 +30,7 @@ gui.refinedstorage:crafter=Crafter gui.refinedstorage:crafter.processing=Processing gui.refinedstorage:processing_pattern_encoder=Processing Pattern Encoder gui.refinedstorage:processing_pattern_encoder.pattern_create=Create Pattern +gui.refinedstorage:grid_filter=Grid Filter misc.refinedstorage:energy_stored=%d / %d RS misc.refinedstorage:energy_usage=Usage: %d RS/t @@ -144,4 +145,5 @@ item.refinedstorage:upgrade.1.name=Range Upgrade item.refinedstorage:upgrade.2.name=Speed Upgrade item.refinedstorage:upgrade.3.name=Crafting Upgrade item.refinedstorage:upgrade.4.name=Stack Upgrade -item.refinedstorage:storage_housing.name=Storage Housing \ No newline at end of file +item.refinedstorage:storage_housing.name=Storage Housing +item.refinedstorage:grid_filter.name=Grid Filter \ No newline at end of file diff --git a/src/main/resources/assets/refinedstorage/lang/nl_NL.lang b/src/main/resources/assets/refinedstorage/lang/nl_NL.lang index e3c70c657..23c96624d 100755 --- a/src/main/resources/assets/refinedstorage/lang/nl_NL.lang +++ b/src/main/resources/assets/refinedstorage/lang/nl_NL.lang @@ -30,6 +30,7 @@ gui.refinedstorage:crafter=Crafter gui.refinedstorage:crafter.processing=Verwerking gui.refinedstorage:processing_pattern_encoder=Verwerkingspatroon Codeerder gui.refinedstorage:processing_pattern_encoder.pattern_create=Patroon maken +gui.refinedstorage:grid_filter=Rooster Filter misc.refinedstorage:energy_stored=%d / %d RS misc.refinedstorage:energy_usage=Vebruik: %d RS/t @@ -144,4 +145,5 @@ item.refinedstorage:upgrade.1.name=Afstand Upgrade item.refinedstorage:upgrade.2.name=Snelheid Upgrade item.refinedstorage:upgrade.3.name=Crafting Upgrade item.refinedstorage:upgrade.4.name=Stack Upgrade -item.refinedstorage:storage_housing.name=Opslagomhulsel \ No newline at end of file +item.refinedstorage:storage_housing.name=Opslagomhulsel +item.refinedstorage:grid_filter.name=Rooster Filter \ No newline at end of file diff --git a/src/main/resources/assets/refinedstorage/models/item/grid_filter.json b/src/main/resources/assets/refinedstorage/models/item/grid_filter.json new file mode 100755 index 000000000..7dcacb623 --- /dev/null +++ b/src/main/resources/assets/refinedstorage/models/item/grid_filter.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "refinedstorage:items/grid_filter" + } +} diff --git a/src/main/resources/assets/refinedstorage/textures/gui/grid_filter.png b/src/main/resources/assets/refinedstorage/textures/gui/grid_filter.png new file mode 100755 index 0000000000000000000000000000000000000000..a1c7b0fc36d05a101b168c7f85c82bf326c3a384 GIT binary patch literal 1832 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K58911MRQ8&P5Fo{p?&#~tz_78O`%fY(0|PTd zfKP}kP~62^QA&dRf`N&DBm;)v@9e6; zXy+{Oh%9Dc;M)trjPAcDtOW{6mbgZg1m~xflqVLYG880c=9TE>rIsj|=o#o48m#5w zI>5ld)a&Wu7*Y}U_SVI$+YTbGfmi$f|DSx<%JSD>=IyMlRy7_ zqyPC|ea}DMSkBg%y!`+F$BW}02tP=kp0~ZIQQTqPK43}3aH4uTu%KdKsQkqSEY1|( z$BF?tc8qnk@8`w-eLgv_;rDhq`?oA0B|tFYyB;@$#lZ03-&f(D`d^vqXBl>uN1EPy zn-ad#aVv zd+wW8S3J!f_H8NemH)g|7;2`&z1=!6;~VzPp0jFlT7xanFF^4%`x$mt$C}=Ip9Tq+ z>(62z%WuKqu!`njxg HN@xNA?!zhP literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/refinedstorage/textures/items/grid_filter.png b/src/main/resources/assets/refinedstorage/textures/items/grid_filter.png new file mode 100755 index 0000000000000000000000000000000000000000..f4cab8420e13ba4736b5801f01aa9c38b7e64684 GIT binary patch literal 232 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLCF%=h?3y^w370~qEv>0#LT=By}Z;C1rt33 zJwt=FTwDi$iXuE+978PpxAr*l9Z=vo{Nw*}>xf+%TdqpX`k<+2bkFG%Q^_bHA&S0 Ud^^Tu2ha`%Pgg&ebxsLQ0H1kEUH||9 literal 0 HcmV?d00001 From 5481b8553a154e3dbac35cc8eb49ffdbb8734363 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sat, 30 Jul 2016 00:34:33 +0200 Subject: [PATCH 026/214] Just disable wireless grid slot instead of closing GUI's --- .../api/network/IWirelessGridConsumer.java | 6 --- .../apiimpl/network/WirelessGridConsumer.java | 10 +---- .../apiimpl/network/WirelessGridHandler.java | 25 +++--------- .../container/ContainerBase.java | 3 +- .../container/ContainerGridFilter.java | 11 ++--- .../java/refinedstorage/gui/GuiHandler.java | 40 +++++++++---------- .../inventory/GridFilterItemHandler.java | 16 ++++---- 7 files changed, 40 insertions(+), 71 deletions(-) diff --git a/src/main/java/refinedstorage/api/network/IWirelessGridConsumer.java b/src/main/java/refinedstorage/api/network/IWirelessGridConsumer.java index df4259e2b..39851adca 100755 --- a/src/main/java/refinedstorage/api/network/IWirelessGridConsumer.java +++ b/src/main/java/refinedstorage/api/network/IWirelessGridConsumer.java @@ -2,17 +2,11 @@ package refinedstorage.api.network; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumHand; /** * Represents a player using a wireless grid. */ public interface IWirelessGridConsumer { - /** - * @return The hand this wireless grid is opened with - */ - EnumHand getHand(); - /** * @return The player using the wireless grid */ diff --git a/src/main/java/refinedstorage/apiimpl/network/WirelessGridConsumer.java b/src/main/java/refinedstorage/apiimpl/network/WirelessGridConsumer.java index 497642f16..124145a4b 100755 --- a/src/main/java/refinedstorage/apiimpl/network/WirelessGridConsumer.java +++ b/src/main/java/refinedstorage/apiimpl/network/WirelessGridConsumer.java @@ -2,25 +2,17 @@ package refinedstorage.apiimpl.network; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumHand; import refinedstorage.api.network.IWirelessGridConsumer; public class WirelessGridConsumer implements IWirelessGridConsumer { private EntityPlayer player; - private EnumHand hand; private ItemStack stack; - public WirelessGridConsumer(EntityPlayer player, EnumHand hand, ItemStack stack) { + public WirelessGridConsumer(EntityPlayer player, ItemStack stack) { this.player = player; - this.hand = hand; this.stack = stack; } - @Override - public EnumHand getHand() { - return hand; - } - @Override public EntityPlayer getPlayer() { return player; diff --git a/src/main/java/refinedstorage/apiimpl/network/WirelessGridHandler.java b/src/main/java/refinedstorage/apiimpl/network/WirelessGridHandler.java index 25634bd19..ddf84a2c6 100755 --- a/src/main/java/refinedstorage/apiimpl/network/WirelessGridHandler.java +++ b/src/main/java/refinedstorage/apiimpl/network/WirelessGridHandler.java @@ -2,13 +2,11 @@ package refinedstorage.apiimpl.network; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.ItemStack; import net.minecraft.util.EnumHand; import refinedstorage.RefinedStorage; import refinedstorage.RefinedStorageGui; import refinedstorage.RefinedStorageItems; import refinedstorage.api.network.*; -import refinedstorage.api.storage.CompareUtils; import refinedstorage.item.ItemWirelessGrid; import java.util.ArrayList; @@ -33,19 +31,6 @@ public class WirelessGridHandler implements IWirelessGridHandler { public void update() { consumers.removeAll(consumersToRemove); consumersToRemove.clear(); - - Iterator it = consumers.iterator(); - - while (it.hasNext()) { - IWirelessGridConsumer consumer = it.next(); - - if (!CompareUtils.compareStack(consumer.getStack(), consumer.getPlayer().getHeldItem(consumer.getHand()))) { - /** - * This will call {@link net.minecraft.inventory.Container#onContainerClosed(EntityPlayer)} so the consumer is removed from the list. - */ - consumer.getPlayer().closeScreen(); - } - } } @Override @@ -70,7 +55,7 @@ public class WirelessGridHandler implements IWirelessGridHandler { return false; } - consumers.add(new WirelessGridConsumer(player, hand, player.getHeldItem(hand))); + consumers.add(new WirelessGridConsumer(player, player.getHeldItem(hand))); player.openGui(RefinedStorage.INSTANCE, RefinedStorageGui.WIRELESS_GRID, player.worldObj, hand.ordinal(), 0, 0); @@ -96,13 +81,13 @@ public class WirelessGridHandler implements IWirelessGridHandler { if (consumer != null) { ItemWirelessGrid item = RefinedStorageItems.WIRELESS_GRID; - ItemStack held = consumer.getPlayer().getHeldItem(consumer.getHand()); - if (held.getItemDamage() != ItemWirelessGrid.TYPE_CREATIVE) { - item.extractEnergy(held, energy, false); + if (consumer.getStack().getItemDamage() != ItemWirelessGrid.TYPE_CREATIVE) { + item.extractEnergy(consumer.getStack(), energy, false); - if (item.getEnergyStored(held) <= 0) { + if (item.getEnergyStored(consumer.getStack()) <= 0) { onClose(player); + consumer.getPlayer().closeScreen(); } } diff --git a/src/main/java/refinedstorage/container/ContainerBase.java b/src/main/java/refinedstorage/container/ContainerBase.java index bfc46cb7b..830c93a15 100755 --- a/src/main/java/refinedstorage/container/ContainerBase.java +++ b/src/main/java/refinedstorage/container/ContainerBase.java @@ -10,6 +10,7 @@ import refinedstorage.api.storage.CompareUtils; import refinedstorage.container.slot.SlotDisabled; import refinedstorage.container.slot.SlotSpecimen; import refinedstorage.container.slot.SlotSpecimenLegacy; +import refinedstorage.tile.grid.WirelessGrid; public abstract class ContainerBase extends Container { private EntityPlayer player; @@ -29,7 +30,7 @@ public abstract class ContainerBase extends Container { int x = xInventory + i * 18; int y = yInventory + 4 + (3 * 18); - if (ContainerBase.this instanceof ContainerGridFilter && i == ((ContainerGridFilter) ContainerBase.this).slot) { + if (i == player.inventory.currentItem && (ContainerBase.this instanceof ContainerGridFilter || (ContainerBase.this instanceof ContainerGrid && ((ContainerGrid) ContainerBase.this).getGrid() instanceof WirelessGrid))) { addSlotToContainer(new SlotDisabled(player.inventory, id, x, y)); } else { addSlotToContainer(new Slot(player.inventory, id, x, y)); diff --git a/src/main/java/refinedstorage/container/ContainerGridFilter.java b/src/main/java/refinedstorage/container/ContainerGridFilter.java index 1a0537d1d..d87797fed 100755 --- a/src/main/java/refinedstorage/container/ContainerGridFilter.java +++ b/src/main/java/refinedstorage/container/ContainerGridFilter.java @@ -7,21 +7,18 @@ import refinedstorage.container.slot.SlotSpecimen; import refinedstorage.inventory.GridFilterItemHandler; public class ContainerGridFilter extends ContainerBase { - private GridFilterItemHandler itemHandler; + private GridFilterItemHandler filter; - protected int slot; - - public ContainerGridFilter(EntityPlayer player, ItemStack gridFilter, int slot) { + public ContainerGridFilter(EntityPlayer player, ItemStack stack) { super(player); - this.slot = slot; - this.itemHandler = new GridFilterItemHandler(gridFilter); + this.filter = new GridFilterItemHandler(stack); int x = 8; int y = 20; for (int i = 0; i < 9 * 3; ++i) { - addSlotToContainer(new SlotSpecimen(itemHandler, i, x, y)); + addSlotToContainer(new SlotSpecimen(filter, i, x, y)); if ((i + 1) % 9 == 0) { y += 18; diff --git a/src/main/java/refinedstorage/gui/GuiHandler.java b/src/main/java/refinedstorage/gui/GuiHandler.java index baa33c5f3..68160ebfe 100755 --- a/src/main/java/refinedstorage/gui/GuiHandler.java +++ b/src/main/java/refinedstorage/gui/GuiHandler.java @@ -66,26 +66,6 @@ public class GuiHandler implements IGuiHandler { return getContainer(ID, player, world.getTileEntity(new BlockPos(x, y, z))); } - private ContainerGridFilter getGridFilterContainer(EntityPlayer player, int hand) { - return new ContainerGridFilter(player, player.getHeldItem(EnumHand.values()[hand]), player.inventory.currentItem); - } - - private WirelessGrid getWirelessGrid(EntityPlayer player, int hand) { - return new WirelessGrid(player.worldObj, player.getHeldItem(EnumHand.values()[hand]), EnumHand.values()[hand]); - } - - private ContainerGrid getWirelessGridContainer(EntityPlayer player, int hand) { - WirelessGrid wirelessGrid = getWirelessGrid(player, hand); - - return new ContainerGrid(player, wirelessGrid); - } - - private GuiGrid getWirelessGridGui(EntityPlayer player, int hand) { - WirelessGrid wirelessGrid = getWirelessGrid(player, hand); - - return new GuiGrid(new ContainerGrid(player, wirelessGrid), wirelessGrid); - } - @Override public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { TileEntity tile = world.getTileEntity(new BlockPos(x, y, z)); @@ -131,4 +111,24 @@ public class GuiHandler implements IGuiHandler { return null; } } + + private ContainerGridFilter getGridFilterContainer(EntityPlayer player, int hand) { + return new ContainerGridFilter(player, player.getHeldItem(EnumHand.values()[hand])); + } + + private WirelessGrid getWirelessGrid(EntityPlayer player, int hand) { + return new WirelessGrid(player.worldObj, player.getHeldItem(EnumHand.values()[hand]), EnumHand.values()[hand]); + } + + private ContainerGrid getWirelessGridContainer(EntityPlayer player, int hand) { + WirelessGrid wirelessGrid = getWirelessGrid(player, hand); + + return new ContainerGrid(player, wirelessGrid); + } + + private GuiGrid getWirelessGridGui(EntityPlayer player, int hand) { + WirelessGrid wirelessGrid = getWirelessGrid(player, hand); + + return new GuiGrid(new ContainerGrid(player, wirelessGrid), wirelessGrid); + } } diff --git a/src/main/java/refinedstorage/inventory/GridFilterItemHandler.java b/src/main/java/refinedstorage/inventory/GridFilterItemHandler.java index 31bf88390..1a862c8bb 100755 --- a/src/main/java/refinedstorage/inventory/GridFilterItemHandler.java +++ b/src/main/java/refinedstorage/inventory/GridFilterItemHandler.java @@ -6,15 +6,15 @@ import net.minecraftforge.items.ItemStackHandler; import refinedstorage.tile.TileBase; public class GridFilterItemHandler extends ItemStackHandler { - private ItemStack filter; + private ItemStack stack; - public GridFilterItemHandler(ItemStack filter) { + public GridFilterItemHandler(ItemStack stack) { super(9 * 3); - this.filter = filter; + this.stack = stack; - if (filter.hasTagCompound()) { - TileBase.readItems(this, 0, filter.getTagCompound()); + if (stack.hasTagCompound()) { + TileBase.readItems(this, 0, stack.getTagCompound()); } } @@ -22,10 +22,10 @@ public class GridFilterItemHandler extends ItemStackHandler { protected void onContentsChanged(int slot) { super.onContentsChanged(slot); - if (!filter.hasTagCompound()) { - filter.setTagCompound(new NBTTagCompound()); + if (!stack.hasTagCompound()) { + stack.setTagCompound(new NBTTagCompound()); } - TileBase.writeItems(this, 0, filter.getTagCompound()); + TileBase.writeItems(this, 0, stack.getTagCompound()); } } From 3ed83798e0ee6731f2340ad8e24f4177f13e03dd Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sat, 30 Jul 2016 00:56:30 +0200 Subject: [PATCH 027/214] Actually filter items in grid --- .../container/ContainerGrid.java | 4 ++ .../java/refinedstorage/gui/grid/GuiGrid.java | 25 +++++++++++- .../refinedstorage/tile/grid/TileGrid.java | 36 ++++++++++++++++++ .../textures/gui/crafting_grid.png | Bin 2089 -> 2168 bytes .../refinedstorage/textures/gui/grid.png | Bin 1960 -> 2043 bytes .../textures/gui/pattern_grid.png | Bin 2625 -> 2712 bytes 6 files changed, 63 insertions(+), 2 deletions(-) diff --git a/src/main/java/refinedstorage/container/ContainerGrid.java b/src/main/java/refinedstorage/container/ContainerGrid.java index 775e32ddb..308649927 100755 --- a/src/main/java/refinedstorage/container/ContainerGrid.java +++ b/src/main/java/refinedstorage/container/ContainerGrid.java @@ -59,6 +59,10 @@ public class ContainerGrid extends ContainerBase { addSlotToContainer(new SlotItemHandler(((TileGrid) grid).getPatterns(), 0, 152, 96)); addSlotToContainer(new SlotOutput(((TileGrid) grid).getPatterns(), 1, 152, 132)); } + + if (!(grid instanceof WirelessGrid)) { + addSlotToContainer(new SlotItemHandler(((TileGrid) grid).getFilter(), 0, 204, 6)); + } } public IGrid getGrid() { diff --git a/src/main/java/refinedstorage/gui/grid/GuiGrid.java b/src/main/java/refinedstorage/gui/grid/GuiGrid.java index b316fa7d5..4a268be27 100755 --- a/src/main/java/refinedstorage/gui/grid/GuiGrid.java +++ b/src/main/java/refinedstorage/gui/grid/GuiGrid.java @@ -13,6 +13,7 @@ import net.minecraftforge.fml.common.FMLCommonHandler; import org.apache.commons.lang3.StringUtils; import refinedstorage.RefinedStorage; import refinedstorage.api.network.GridExtractFlags; +import refinedstorage.api.storage.CompareUtils; import refinedstorage.block.EnumGridType; import refinedstorage.container.ContainerGrid; import refinedstorage.gui.GuiBase; @@ -45,7 +46,7 @@ public class GuiGrid extends GuiBase { private int slotNumber; public GuiGrid(ContainerGrid container, IGrid grid) { - super(container, 193, (grid.getType() == EnumGridType.CRAFTING || grid.getType() == EnumGridType.PATTERN) ? 247 : 208); + super(container, !(grid instanceof WirelessGrid) ? 227 : 193, (grid.getType() == EnumGridType.CRAFTING || grid.getType() == EnumGridType.PATTERN) ? 247 : 208); setScrollbar(new Scrollbar(174, 20, 12, (grid.getType() == EnumGridType.CRAFTING || grid.getType() == EnumGridType.PATTERN) ? 70 : 88)); getScrollbar().setCanScroll(false); @@ -99,6 +100,26 @@ public class GuiGrid extends GuiBase { while (t.hasNext()) { ClientStack stack = t.next(); + if (!(grid instanceof WirelessGrid)) { + List filteredItems = ((TileGrid) grid).getFilteredItems(); + + boolean found = filteredItems.isEmpty(); + + for (ItemStack item : filteredItems) { + if (CompareUtils.compareStackNoQuantity(stack.getStack(), item)) { + found = true; + + break; + } + } + + if (!found) { + t.remove(); + + continue; + } + } + if (grid.getViewType() == TileGrid.VIEW_TYPE_NON_CRAFTABLES && stack.isCraftable()) { t.remove(); @@ -222,7 +243,7 @@ public class GuiGrid extends GuiBase { ty = 2; } - drawTexture(x + 152, y + 114, 195, ty * 16, 16, 16); + drawTexture(x + 152, y + 114, 240, ty * 16, 16, 16); } searchField.drawTextBox(); diff --git a/src/main/java/refinedstorage/tile/grid/TileGrid.java b/src/main/java/refinedstorage/tile/grid/TileGrid.java index af8c33670..e15f19591 100755 --- a/src/main/java/refinedstorage/tile/grid/TileGrid.java +++ b/src/main/java/refinedstorage/tile/grid/TileGrid.java @@ -23,6 +23,7 @@ import refinedstorage.inventory.BasicItemHandler; import refinedstorage.inventory.BasicItemValidator; import refinedstorage.item.ItemPattern; import refinedstorage.network.MessageGridSettingsUpdate; +import refinedstorage.tile.TileBase; import refinedstorage.tile.TileNode; import refinedstorage.tile.config.IRedstoneModeConfig; @@ -65,6 +66,31 @@ public class TileGrid extends TileNode implements IGrid { private InventoryCraftResult result = new InventoryCraftResult(); private BasicItemHandler patterns = new BasicItemHandler(2, this, new BasicItemValidator(RefinedStorageItems.PATTERN)); + private BasicItemHandler filter = new BasicItemHandler(1, this, new BasicItemValidator(RefinedStorageItems.GRID_FILTER)) { + @Override + protected void onContentsChanged(int slot) { + super.onContentsChanged(slot); + + filteredItems.clear(); + + ItemStack stack = getStackInSlot(slot); + + if (stack != null && stack.hasTagCompound()) { + BasicItemHandler items = new BasicItemHandler(9 * 3); + + TileBase.readItems(items, 0, stack.getTagCompound()); + + for (int i = 0; i < items.getSlots(); ++i) { + ItemStack item = items.getStackInSlot(i); + + if (item != null) { + filteredItems.add(item); + } + } + } + } + }; + private List filteredItems = new ArrayList(); private EnumGridType type; @@ -127,6 +153,14 @@ public class TileGrid extends TileNode implements IGrid { return patterns; } + public BasicItemHandler getFilter() { + return filter; + } + + public List getFilteredItems() { + return filteredItems; + } + public void onCraftingMatrixChanged() { markDirty(); @@ -334,6 +368,7 @@ public class TileGrid extends TileNode implements IGrid { readItemsLegacy(matrix, 0, tag); readItems(patterns, 1, tag); + readItems(filter, 2, tag); if (tag.hasKey(NBT_VIEW_TYPE)) { viewType = tag.getInteger(NBT_VIEW_TYPE); @@ -358,6 +393,7 @@ public class TileGrid extends TileNode implements IGrid { writeItemsLegacy(matrix, 0, tag); writeItems(patterns, 1, tag); + writeItems(filter, 2, tag); tag.setInteger(NBT_VIEW_TYPE, viewType); tag.setInteger(NBT_SORTING_DIRECTION, sortingDirection); diff --git a/src/main/resources/assets/refinedstorage/textures/gui/crafting_grid.png b/src/main/resources/assets/refinedstorage/textures/gui/crafting_grid.png index 8a4578e0a650ead38e2bc33bb7adc354bd1892ea..3541a86c6c269b6f853ea90baa4dba354b95308a 100755 GIT binary patch literal 2168 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K58911MRQ8&P5Fo{p?&#~tz_78O`%fY(0|PTd zfKP}kP~62^QA&dRf`N&DBm;)v@9e6; zXy+{Oh%9Dc;M)Vjj8pd%c>)C`OI#yLg7ec#$`gxH8440J^GfvcQcDy}^bGV24c2mT z9RQXncRgJkLn`9l-svv7Wgy^|$bRUz{ifHa`=4YdU5P#ZY2M{CGdK#C#-z{C9WOw#v{u)wRF7fA}s~S@n1Q`@&j#9jE>qxePznZ9ASEai72Yf^ykw z#xED7PBTbFl$sqlyn6Y*1A8P7T;KH1ayhfj+*|XW$~f@*er*Q2^uUG-dw~=KLtC&U zYs0>6m0KBX+P5djz2rW#TkgO~#sszn-~D$k@7rlF7kRemQ`~tbhx49$*O_ga^)#iD zf#E{^raIPB{WsqFG0b*luV7)!_%-#N2;+k2_ORXWrvI1O#qF?t!rYSoaoZU+c)|7n zi5nH_rCSBl8QyMsBJ;hhFJmZM8L%OeJ+?iBmu!_xrU6fFgOz-@XI-eB1{ef$g zTcsYuUwM6ov$u8TYcKfC!FxdTf~bVUdfvy8Ijflu7=mp4Y{m_wek3=1jOUfk-7|lW zdc(Y3S&w5F=5Pk=EB_sNeJ|5A*?*b)&hOG|cs9}KhxUf2!rTeY3K9pR6r>J#DaafM zQjj~~^xzqT)cobYk0~*oVNqgwv2WvS<}=drOZ-D@81B}I^EsFYUt}oJ7Uyv=S3Amd zp)g9LVXYqbfxZhyWi5R@FHXv{0BzOcI`HfF32WPgOS+79oIqDy*mD*foEL72GcGV) z3UsY`5W^j*2Ww;(`df)U=mG`#tnHCNl7Ydhniau4z_38R;Dqe2LJryDK428xy5uQ) z>%V0&3s@2^QA&dRf`N&DBm;)v@9e6; zXy+{Oh%9Dc;M)trjPAcDtOW{6l(rIsj|=o#o)<`~!c z0SlCVPZ!6KinzCTy8CV!h`3(l;rajnq^2VKY?~0tVt=(`)!Tz!oOu`Lf*&9DI#>B*amDaIVJaF~OKRr-^ zcGn{poGznuR2a70{}9Ev8*^G(q#7N!@)zOTx* zolKj4nFXlpLhlteux1b;u+{fINU(q@=lrL0W`@i!rl_Xd+`ecUZc@mcadpba#C5a5 ziglKODIn31x5Ny@Zph5M@9B5t2+xAz>2p5jxL=RCc!YOBXz;Q2oq0?k1si67DG+nl z#9JVWVcF7Jb<03uU2{O3FXm#R-x>kOV5Z!Qh2k7O2c-m@)0! z+$S!++jjG?W|%NovF|8hH~6o9di_s^5~o2|TL zzWVm#tLOK4<$RZpTY7uNc_xF}V#bX7iIwvjet%!bSi$tJlxM;Bw#unDZZQ~u0s|-q z3f6iaga2z2m(Q*DuTyWZE4h3wia~}mpuX&P-1AzdYohh0_p9fMJN))w{Udne^Gogo z_XWlcYaQ|#q#NHcTx0snxQ1n)jKk;DUpsfoF^VzSGQD{IY@bZR%|G2=n6Jt=#M!^* zbI=do%lIO6oiW4Sik12dvGK3D64qa4Dp1X`3mOC?^lK{#ssBH&|1L>>M96;*A zzQds4mt*+F)E;wjy7P-!#(sAgtS)(q&iyZA3Gyu%YM6UED1neH??NQYc-e}n9ITZhW9G!SxIae%0QmO zZ@$-@3pQV$^RXrzl61;vPx;8Z7Ls;A%At`0*2(b0uXwRqT7wxAL&H8sJ+X$wsO>W! zF}}OMwTzpWui>R;#?s2m6D6nRXfu?&HABK%3jeUP+8%XVdgakNkV&4delF{r5}E*; CriniQ diff --git a/src/main/resources/assets/refinedstorage/textures/gui/grid.png b/src/main/resources/assets/refinedstorage/textures/gui/grid.png index 2d2cb3a5f22a6b6753e171e3f7db912ffa1d4611..fb1d4edf2cd04bff8f1c38363044282ae5605e40 100644 GIT binary patch literal 2043 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K58911MRQ8&P5Fo{p?&#~tz_78O`%fY(0|PTd zfKP}kP~62^QA&dRf`N&DBm;)v@9e6; zXy+{Oh%9Dc;M)ztjK_amF#`%pmbgZg1m~xflqVLYG880c=9TE>rIsj|=o#o48m#5w zIshzD5a`X@4N2i01(Ox*2k_`BaPs&uy0?_iZ9a;Hqr zUp_E1|Kj=AFTT&7`Rt`hLEiJ*c1Qe~E?;u!tL?j)CEY!d_7E%%I`@ zTg@^MsO6d7VAL}AtDZ9>8!y92##6?@r4#P)uoct>ys0f>d~u=t=i8s{%ojEnWta5) z<6&P=+YSzJht>Q7Kz}*>=Hq5yy71i~s^|XKfZUr`3z;*{g(S=5eJzCr0mEBs9XOjI z@c!curDqss?cO4hZoNu(w^bg)-AvPCvv;nChi=CGL~xjaHGS|cT4a^Ra5groXS3|p zX|b~A4ez!{JwAKqI$X_`_ZtxA{{RQ`0SS;SP~r}QNp-H_x$@BHveG*YRohn@?puh< zY5OwsLXPtoxG^v&m^&O(sf_=V;i1C vFglp#G6eWaGlX1bW4OA7N?bL|12+HJJK6T~7F+ljfqdra>gTe~DWM4f^VMtb literal 1960 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K58911MRQ8&P5Fo{p?&#~tz_78O`%fY(0|PTd zfKP}kP~62^QA&dRf`N&DBm;)v@9e6; zXy+{Oh%9Dc;M)Vjj8pd%c>)C`N?apKg7ec#$`gxH8440J^GfvcQcDy}^bGVYbByc! zfCUPlr;B4qMcmuF7xRP-1==pEX5Rllk=eWMn(yJGr#?F9%=h>$%=ASmqqN$NwPcs%ibfo>h{&Ad9g6+fO>g#8&)!(zReY#JQ zV?up)pWXf3&tIneW&>)goOlnU8w}iR)9!-ArZSu_uYA8vlkJ4A_v#OM>YGcmf_Wzd z_jB2wsg(w)thm7h*1*8LT2G7oFm{S$-=V`^@PBJ`d^ER${@Aa(#2pUmHa@H|in$ORy!Am9KA-2*Z}vlPzTuCZs>S)D6- z?|s@fzuZ-fpRPVz@qs%EtHT`b=Dq{Q3rOb%vjZLSOaJc8z5T6td8W;Q_4bz4ZESxG zKIXq=zgO?`Q{=9ERSK*7InjnQsmv30<}esd=XH3tiSa~?8NXP!IlpsiW~S@i*+@XD0MM?2 z95t90003%)>*fgN9!^ALz`kG*9|%?|GEZX4WAslN3rM?Ae@?4+~MyrlVc2d`PSxz(t8Fi5_C13+>!kd@0ffczNw$cIsg zOn9Rv#Tbp3?KucTZv}jGMvGUBrGmZnD(Y(H_VzJJu9$+EB5T+MNjgit5g|0VYa^ zvNQ?f?B>|km!NX;!|$oMwSGsRD#zs)orav?qAQURn|Z0Y$DZUj-jh-Nql#sU zUC|29(}soyo?c=Ru^hLrnHG?|FMFIVW)onFFr>|WVsGw|6^Iv38nii;imgJl)^TNi zmQDou_zLl|n2od02YHi{7^Yu^cKX-hQg+sATBLNivA37o*gM`kK3*;%&%zyIPKF}3 zU%sTdrL;-fQW{;9lK?uT@ciL7&K;LaEO3Hrf-aFLYs>{VaPw^|$0%S-VMtSW?d-BD z2D6JhJ^UT|Bg&eyd^kjly8Fee`R@7g3(;X#`90$nRK)2wKgz8xiI#CeGwa?Qxry*q zHkCF5doC5|!9LALBQ0RJk`y|#mW+ZGB;$ye#^#Q*kv)4B-vBm9e zCcjxY+p~6s5MzHv8uoy`PThG!*XL{Q5xwZTlYtC0VMgI*c4vC-0<6k`1S^X5jTgg* z6NuGQ8I-B;OJc>eOY^4#CVwBQg_$Shn>@Qym2vdc9j zMNh?1+s{ljLIX{cJAzJ7(HFj+hA$81+Ba@`OT;qtxqEF5ZvB^`4APP!0Fa;fqv}KH zcwt$BmZVd=$gzp?kd#{68U3nQG#r$3gcIR8>a0ye|U5=+4^vmFtwJpj;#0 z&>s3WVf>H%Qwu3MKLr68XYFT%Zc2xqP?XI(z*jV|oD!eR4iZBw7_{ZpL)dobExHFf vIff2f@&W377Xn3rc(C&k5ww$=13#JG+)f@|AN8PJRnpzn%O!u6|FM4o3=p(K delta 1536 zcmZ8fdo2u) zeY`g%f*PS&*O2?rt&5|R9pCP)^=o+$>yn4th!ra4oyiNXbz60eC2XHejpa)$uHmb6 zh)Z#yR9#3^bMO7aRpHPIZ!W3Hml8X?@Mp}yTsL3tax6Sc24dv52hxBO4x`s7E z)(M!}-Kv3AhNl$-YoF7hKt{{lc(@E!@RBY(qaNu`#~_>~nh|;x-Lqn^BeaDmHa1B_ zoX^`PN9zjN!|DlO?Bdiya?_l`6FtcE{FyD38hyp#>S;=8v<4E{Otcxr;RhB+Ob2Fn zMbt`pCD4WCGy0F}!j@|4EeF!2ugJ*r-5BWBoUDB|lc%I4nv{b+@v%`fR3*cX`u>gXV zwW2a`A!=Ad4zujo7E48dxv0kx1$nQiaBS#=3`rI46HVUn)k`E7QN4SR6sj>m+7CGhV@`w_LBg97JpN&kkbO3RQ;i)+Rp+npal%!D|J`3osRO%b2_ z?^aqT>s9;^x?hTn_D8w7*5&~ZmO>qID~~_H$v*d&;V|#EH|Ivo%)?$y9(}4FDbSF{ zoIPcfHSf&p4yMOqcXdri4)OJgiahr+&gYhk3(=o6=Og17K|zi8?^(2dBFcpf6cvzdQi|)^&wKo2 z;YIIGj?(L*#5tRnTz(6p++lT;XMX(oKoV7gcaol(lbla7sVRBkYp{}RZZymY!jJm_ z+IrtkurT1pXax(Js=$zDO#-HBpAIncO#lM|Ub|%gdxOna47lqHFMC-!7zi9^^}v_T z3jcNqprbt^xmVyEb6-i~sbD+j9rkIy=;TspdJb4A>cu_%m?Ck7NWl7d(Nu+*Fa^E? zAA&CnlhDj_MxW{_ILH;V2Zbz+{zDP6Mm2H-%(oCSZ!iibNeN_NVo$`v3Z>TDK}8Qy zmY{!3?rz9Iiyj?ZXC7wVftDm#q<`@MZiW6wSiVrMb*4X(fh8 Date: Sat, 30 Jul 2016 00:56:43 +0200 Subject: [PATCH 028/214] Actually filter items in grid --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 216017b56..67f6db628 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ **Features** - Added config option to set the base energy usage of the Controller (default is 0) +- Added Grid Filter item ### 0.8.12 **Bugfixes** From 5539b8f96520775b48981d0b91f10ea5a473a8e2 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sat, 30 Jul 2016 01:27:23 +0200 Subject: [PATCH 029/214] Grid filter support for Wireless Grid --- .../container/ContainerGrid.java | 4 +- .../java/refinedstorage/gui/grid/GuiGrid.java | 53 ++++++++++++----- .../GridFilterInGridItemHandler.java | 40 +++++++++++++ .../java/refinedstorage/tile/grid/IGrid.java | 8 +++ .../refinedstorage/tile/grid/TileGrid.java | 29 ++-------- .../tile/grid/WirelessGrid.java | 57 +++++++++++++++++-- 6 files changed, 142 insertions(+), 49 deletions(-) create mode 100755 src/main/java/refinedstorage/inventory/GridFilterInGridItemHandler.java diff --git a/src/main/java/refinedstorage/container/ContainerGrid.java b/src/main/java/refinedstorage/container/ContainerGrid.java index 308649927..fddc3a828 100755 --- a/src/main/java/refinedstorage/container/ContainerGrid.java +++ b/src/main/java/refinedstorage/container/ContainerGrid.java @@ -60,9 +60,7 @@ public class ContainerGrid extends ContainerBase { addSlotToContainer(new SlotOutput(((TileGrid) grid).getPatterns(), 1, 152, 132)); } - if (!(grid instanceof WirelessGrid)) { - addSlotToContainer(new SlotItemHandler(((TileGrid) grid).getFilter(), 0, 204, 6)); - } + addSlotToContainer(new SlotItemHandler(grid.getFilter(), 0, 204, 6)); } public IGrid getGrid() { diff --git a/src/main/java/refinedstorage/gui/grid/GuiGrid.java b/src/main/java/refinedstorage/gui/grid/GuiGrid.java index 4a268be27..1ee09b6c8 100755 --- a/src/main/java/refinedstorage/gui/grid/GuiGrid.java +++ b/src/main/java/refinedstorage/gui/grid/GuiGrid.java @@ -46,7 +46,7 @@ public class GuiGrid extends GuiBase { private int slotNumber; public GuiGrid(ContainerGrid container, IGrid grid) { - super(container, !(grid instanceof WirelessGrid) ? 227 : 193, (grid.getType() == EnumGridType.CRAFTING || grid.getType() == EnumGridType.PATTERN) ? 247 : 208); + super(container, 227, (grid.getType() == EnumGridType.CRAFTING || grid.getType() == EnumGridType.PATTERN) ? 247 : 208); setScrollbar(new Scrollbar(174, 20, 12, (grid.getType() == EnumGridType.CRAFTING || grid.getType() == EnumGridType.PATTERN) ? 70 : 88)); getScrollbar().setCanScroll(false); @@ -100,24 +100,22 @@ public class GuiGrid extends GuiBase { while (t.hasNext()) { ClientStack stack = t.next(); - if (!(grid instanceof WirelessGrid)) { - List filteredItems = ((TileGrid) grid).getFilteredItems(); + List filteredItems = grid.getFilteredItems(); - boolean found = filteredItems.isEmpty(); + boolean found = filteredItems.isEmpty(); - for (ItemStack item : filteredItems) { - if (CompareUtils.compareStackNoQuantity(stack.getStack(), item)) { - found = true; + for (ItemStack item : filteredItems) { + if (CompareUtils.compareStackNoQuantity(stack.getStack(), item)) { + found = true; - break; - } + break; } + } - if (!found) { - t.remove(); + if (!found) { + t.remove(); - continue; - } + continue; } if (grid.getViewType() == TileGrid.VIEW_TYPE_NON_CRAFTABLES && stack.isCraftable()) { @@ -175,8 +173,33 @@ public class GuiGrid extends GuiBase { } } - getScrollbar().setCanScroll(getRows() > getVisibleRows()); - getScrollbar().setScrollDelta((float) getScrollbar().getScrollbarHeight() / (float) getRows()); + getScrollbar() + + . + + setCanScroll(getRows() + + > + + getVisibleRows() + + ); + + getScrollbar() + + . + + setScrollDelta((float) getScrollbar + + (). + + getScrollbarHeight() + + / (float) + + getRows() + + ); } private int getOffset() { diff --git a/src/main/java/refinedstorage/inventory/GridFilterInGridItemHandler.java b/src/main/java/refinedstorage/inventory/GridFilterInGridItemHandler.java new file mode 100755 index 000000000..1e7f24b9d --- /dev/null +++ b/src/main/java/refinedstorage/inventory/GridFilterInGridItemHandler.java @@ -0,0 +1,40 @@ +package refinedstorage.inventory; + +import net.minecraft.item.ItemStack; +import refinedstorage.RefinedStorageItems; +import refinedstorage.tile.TileBase; + +import java.util.List; + +public class GridFilterInGridItemHandler extends BasicItemHandler { + private List filteredItems; + + public GridFilterInGridItemHandler(List filteredItems) { + super(1, new BasicItemValidator(RefinedStorageItems.GRID_FILTER)); + + this.filteredItems = filteredItems; + } + + @Override + protected void onContentsChanged(int slot) { + super.onContentsChanged(slot); + + filteredItems.clear(); + + ItemStack stack = getStackInSlot(slot); + + if (stack != null && stack.hasTagCompound()) { + BasicItemHandler items = new BasicItemHandler(9 * 3); + + TileBase.readItems(items, 0, stack.getTagCompound()); + + for (int i = 0; i < items.getSlots(); ++i) { + ItemStack item = items.getStackInSlot(i); + + if (item != null) { + filteredItems.add(item); + } + } + } + } +} diff --git a/src/main/java/refinedstorage/tile/grid/IGrid.java b/src/main/java/refinedstorage/tile/grid/IGrid.java index 33486d41f..219d76224 100755 --- a/src/main/java/refinedstorage/tile/grid/IGrid.java +++ b/src/main/java/refinedstorage/tile/grid/IGrid.java @@ -1,10 +1,14 @@ package refinedstorage.tile.grid; +import net.minecraft.item.ItemStack; import net.minecraft.util.math.BlockPos; import refinedstorage.api.network.IGridHandler; import refinedstorage.block.EnumGridType; +import refinedstorage.inventory.BasicItemHandler; import refinedstorage.tile.config.IRedstoneModeConfig; +import java.util.List; + public interface IGrid { EnumGridType getType(); @@ -28,6 +32,10 @@ public interface IGrid { void onSearchBoxModeChanged(int searchBoxMode); + List getFilteredItems(); + + BasicItemHandler getFilter(); + IRedstoneModeConfig getRedstoneModeConfig(); boolean isConnected(); diff --git a/src/main/java/refinedstorage/tile/grid/TileGrid.java b/src/main/java/refinedstorage/tile/grid/TileGrid.java index e15f19591..d8442f0a3 100755 --- a/src/main/java/refinedstorage/tile/grid/TileGrid.java +++ b/src/main/java/refinedstorage/tile/grid/TileGrid.java @@ -21,9 +21,9 @@ import refinedstorage.block.EnumGridType; import refinedstorage.container.ContainerGrid; import refinedstorage.inventory.BasicItemHandler; import refinedstorage.inventory.BasicItemValidator; +import refinedstorage.inventory.GridFilterInGridItemHandler; import refinedstorage.item.ItemPattern; import refinedstorage.network.MessageGridSettingsUpdate; -import refinedstorage.tile.TileBase; import refinedstorage.tile.TileNode; import refinedstorage.tile.config.IRedstoneModeConfig; @@ -66,31 +66,8 @@ public class TileGrid extends TileNode implements IGrid { private InventoryCraftResult result = new InventoryCraftResult(); private BasicItemHandler patterns = new BasicItemHandler(2, this, new BasicItemValidator(RefinedStorageItems.PATTERN)); - private BasicItemHandler filter = new BasicItemHandler(1, this, new BasicItemValidator(RefinedStorageItems.GRID_FILTER)) { - @Override - protected void onContentsChanged(int slot) { - super.onContentsChanged(slot); - - filteredItems.clear(); - - ItemStack stack = getStackInSlot(slot); - - if (stack != null && stack.hasTagCompound()) { - BasicItemHandler items = new BasicItemHandler(9 * 3); - - TileBase.readItems(items, 0, stack.getTagCompound()); - - for (int i = 0; i < items.getSlots(); ++i) { - ItemStack item = items.getStackInSlot(i); - - if (item != null) { - filteredItems.add(item); - } - } - } - } - }; private List filteredItems = new ArrayList(); + private GridFilterInGridItemHandler filter = new GridFilterInGridItemHandler(filteredItems); private EnumGridType type; @@ -153,10 +130,12 @@ public class TileGrid extends TileNode implements IGrid { return patterns; } + @Override public BasicItemHandler getFilter() { return filter; } + @Override public List getFilteredItems() { return filteredItems; } diff --git a/src/main/java/refinedstorage/tile/grid/WirelessGrid.java b/src/main/java/refinedstorage/tile/grid/WirelessGrid.java index 5bffe15de..7bcea4f86 100755 --- a/src/main/java/refinedstorage/tile/grid/WirelessGrid.java +++ b/src/main/java/refinedstorage/tile/grid/WirelessGrid.java @@ -2,6 +2,7 @@ package refinedstorage.tile.grid; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumHand; import net.minecraft.util.math.BlockPos; @@ -9,28 +10,62 @@ import net.minecraft.world.World; import refinedstorage.RefinedStorage; import refinedstorage.api.network.IGridHandler; import refinedstorage.block.EnumGridType; +import refinedstorage.inventory.BasicItemHandler; +import refinedstorage.inventory.GridFilterInGridItemHandler; import refinedstorage.item.ItemWirelessGrid; import refinedstorage.network.MessageWirelessGridSettingsUpdate; +import refinedstorage.tile.TileBase; import refinedstorage.tile.config.IRedstoneModeConfig; import refinedstorage.tile.controller.TileController; +import java.util.ArrayList; +import java.util.List; + public class WirelessGrid implements IGrid { - private EnumHand hand; private World world; - private BlockPos controllerPos; + + private EnumHand hand; + private ItemStack stack; + + private BlockPos controller; + private int viewType; private int sortingType; private int sortingDirection; private int searchBoxMode; + private List filteredItems = new ArrayList(); + private GridFilterInGridItemHandler filter = new GridFilterInGridItemHandler(filteredItems) { + @Override + protected void onContentsChanged(int slot) { + super.onContentsChanged(slot); + + if (!world.isRemote) { + if (!stack.hasTagCompound()) { + stack.setTagCompound(new NBTTagCompound()); + } + + TileBase.writeItems(this, 0, stack.getTagCompound()); + } + } + }; + public WirelessGrid(World world, ItemStack stack, EnumHand hand) { - this.hand = hand; this.world = world; - this.controllerPos = new BlockPos(ItemWirelessGrid.getX(stack), ItemWirelessGrid.getY(stack), ItemWirelessGrid.getZ(stack)); + + this.stack = stack; + this.hand = hand; + + this.controller = new BlockPos(ItemWirelessGrid.getX(stack), ItemWirelessGrid.getY(stack), ItemWirelessGrid.getZ(stack)); + this.viewType = ItemWirelessGrid.getViewType(stack); this.sortingType = ItemWirelessGrid.getSortingType(stack); this.sortingDirection = ItemWirelessGrid.getSortingDirection(stack); this.searchBoxMode = ItemWirelessGrid.getSearchBoxMode(stack); + + if (stack.hasTagCompound()) { + TileBase.readItems(filter, 0, stack.getTagCompound()); + } } @Override @@ -40,7 +75,7 @@ public class WirelessGrid implements IGrid { @Override public BlockPos getNetworkPosition() { - return controllerPos; + return controller; } @Override @@ -98,6 +133,16 @@ public class WirelessGrid implements IGrid { this.searchBoxMode = searchBoxMode; } + @Override + public List getFilteredItems() { + return filteredItems; + } + + @Override + public BasicItemHandler getFilter() { + return filter; + } + @Override public IRedstoneModeConfig getRedstoneModeConfig() { return null; @@ -117,7 +162,7 @@ public class WirelessGrid implements IGrid { } private TileController getController() { - TileEntity tile = world.getTileEntity(controllerPos); + TileEntity tile = world.getTileEntity(controller); return tile instanceof TileController ? (TileController) tile : null; } From deb9d6237b3dac606897b9edd77d57790e96bb3d Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sat, 30 Jul 2016 01:29:32 +0200 Subject: [PATCH 030/214] Renames of the inventory classes --- .../container/ContainerGridFilter.java | 6 +++--- ...sicItemHandler.java => ItemHandlerBasic.java} | 6 +++--- ...emHandler.java => ItemHandlerGridFilter.java} | 4 ++-- ...ler.java => ItemHandlerGridFilterInGrid.java} | 8 ++++---- ...temHandler.java => ItemHandlerInterface.java} | 8 ++++---- ...oxyItemHandler.java => ItemHandlerProxy.java} | 6 +++--- ...ItemHandler.java => ItemHandlerSolderer.java} | 4 ++-- ...eItemHandler.java => ItemHandlerUpgrade.java} | 6 +++--- ...temValidator.java => ItemValidatorBasic.java} | 6 +++--- ...ndler.java => RecipeTransferHandlerGrid.java} | 2 +- .../jei/RefinedStorageJEIPlugin.java | 2 +- .../refinedstorage/tile/TileConstructor.java | 8 ++++---- .../java/refinedstorage/tile/TileCrafter.java | 8 ++++---- .../java/refinedstorage/tile/TileDestructor.java | 8 ++++---- .../java/refinedstorage/tile/TileDetector.java | 4 ++-- .../java/refinedstorage/tile/TileDiskDrive.java | 8 ++++---- .../java/refinedstorage/tile/TileExporter.java | 8 ++++---- .../java/refinedstorage/tile/TileImporter.java | 8 ++++---- .../java/refinedstorage/tile/TileInterface.java | 16 ++++++++-------- .../tile/TileProcessingPatternEncoder.java | 12 ++++++------ .../java/refinedstorage/tile/TileSolderer.java | 16 ++++++++-------- .../java/refinedstorage/tile/TileStorage.java | 4 ++-- .../tile/TileWirelessTransmitter.java | 8 ++++---- .../externalstorage/TileExternalStorage.java | 4 ++-- .../java/refinedstorage/tile/grid/IGrid.java | 4 ++-- .../java/refinedstorage/tile/grid/TileGrid.java | 12 ++++++------ .../refinedstorage/tile/grid/WirelessGrid.java | 8 ++++---- 27 files changed, 97 insertions(+), 97 deletions(-) rename src/main/java/refinedstorage/inventory/{BasicItemHandler.java => ItemHandlerBasic.java} (84%) rename src/main/java/refinedstorage/inventory/{GridFilterItemHandler.java => ItemHandlerGridFilter.java} (85%) rename src/main/java/refinedstorage/inventory/{GridFilterInGridItemHandler.java => ItemHandlerGridFilterInGrid.java} (76%) rename src/main/java/refinedstorage/inventory/{InterfaceItemHandler.java => ItemHandlerInterface.java} (69%) rename src/main/java/refinedstorage/inventory/{ProxyItemHandler.java => ItemHandlerProxy.java} (88%) rename src/main/java/refinedstorage/inventory/{SoldererItemHandler.java => ItemHandlerSolderer.java} (91%) rename src/main/java/refinedstorage/inventory/{UpgradeItemHandler.java => ItemHandlerUpgrade.java} (88%) rename src/main/java/refinedstorage/inventory/{BasicItemValidator.java => ItemValidatorBasic.java} (77%) rename src/main/java/refinedstorage/jei/{GridRecipeTransferHandler.java => RecipeTransferHandlerGrid.java} (97%) diff --git a/src/main/java/refinedstorage/container/ContainerGridFilter.java b/src/main/java/refinedstorage/container/ContainerGridFilter.java index d87797fed..fc636d98f 100755 --- a/src/main/java/refinedstorage/container/ContainerGridFilter.java +++ b/src/main/java/refinedstorage/container/ContainerGridFilter.java @@ -4,15 +4,15 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; import refinedstorage.container.slot.SlotSpecimen; -import refinedstorage.inventory.GridFilterItemHandler; +import refinedstorage.inventory.ItemHandlerGridFilter; public class ContainerGridFilter extends ContainerBase { - private GridFilterItemHandler filter; + private ItemHandlerGridFilter filter; public ContainerGridFilter(EntityPlayer player, ItemStack stack) { super(player); - this.filter = new GridFilterItemHandler(stack); + this.filter = new ItemHandlerGridFilter(stack); int x = 8; int y = 20; diff --git a/src/main/java/refinedstorage/inventory/BasicItemHandler.java b/src/main/java/refinedstorage/inventory/ItemHandlerBasic.java similarity index 84% rename from src/main/java/refinedstorage/inventory/BasicItemHandler.java rename to src/main/java/refinedstorage/inventory/ItemHandlerBasic.java index 646f454a7..cb65b2210 100755 --- a/src/main/java/refinedstorage/inventory/BasicItemHandler.java +++ b/src/main/java/refinedstorage/inventory/ItemHandlerBasic.java @@ -4,19 +4,19 @@ import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraftforge.items.ItemStackHandler; -public class BasicItemHandler extends ItemStackHandler { +public class ItemHandlerBasic extends ItemStackHandler { private TileEntity tile; protected IItemValidator[] validators; - public BasicItemHandler(int size, TileEntity tile, IItemValidator... validators) { + public ItemHandlerBasic(int size, TileEntity tile, IItemValidator... validators) { super(size); this.tile = tile; this.validators = validators; } - public BasicItemHandler(int size, IItemValidator... validators) { + public ItemHandlerBasic(int size, IItemValidator... validators) { this(size, null, validators); } diff --git a/src/main/java/refinedstorage/inventory/GridFilterItemHandler.java b/src/main/java/refinedstorage/inventory/ItemHandlerGridFilter.java similarity index 85% rename from src/main/java/refinedstorage/inventory/GridFilterItemHandler.java rename to src/main/java/refinedstorage/inventory/ItemHandlerGridFilter.java index 1a862c8bb..cc82bbd1e 100755 --- a/src/main/java/refinedstorage/inventory/GridFilterItemHandler.java +++ b/src/main/java/refinedstorage/inventory/ItemHandlerGridFilter.java @@ -5,10 +5,10 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraftforge.items.ItemStackHandler; import refinedstorage.tile.TileBase; -public class GridFilterItemHandler extends ItemStackHandler { +public class ItemHandlerGridFilter extends ItemStackHandler { private ItemStack stack; - public GridFilterItemHandler(ItemStack stack) { + public ItemHandlerGridFilter(ItemStack stack) { super(9 * 3); this.stack = stack; diff --git a/src/main/java/refinedstorage/inventory/GridFilterInGridItemHandler.java b/src/main/java/refinedstorage/inventory/ItemHandlerGridFilterInGrid.java similarity index 76% rename from src/main/java/refinedstorage/inventory/GridFilterInGridItemHandler.java rename to src/main/java/refinedstorage/inventory/ItemHandlerGridFilterInGrid.java index 1e7f24b9d..2312b4602 100755 --- a/src/main/java/refinedstorage/inventory/GridFilterInGridItemHandler.java +++ b/src/main/java/refinedstorage/inventory/ItemHandlerGridFilterInGrid.java @@ -6,11 +6,11 @@ import refinedstorage.tile.TileBase; import java.util.List; -public class GridFilterInGridItemHandler extends BasicItemHandler { +public class ItemHandlerGridFilterInGrid extends ItemHandlerBasic { private List filteredItems; - public GridFilterInGridItemHandler(List filteredItems) { - super(1, new BasicItemValidator(RefinedStorageItems.GRID_FILTER)); + public ItemHandlerGridFilterInGrid(List filteredItems) { + super(1, new ItemValidatorBasic(RefinedStorageItems.GRID_FILTER)); this.filteredItems = filteredItems; } @@ -24,7 +24,7 @@ public class GridFilterInGridItemHandler extends BasicItemHandler { ItemStack stack = getStackInSlot(slot); if (stack != null && stack.hasTagCompound()) { - BasicItemHandler items = new BasicItemHandler(9 * 3); + ItemHandlerBasic items = new ItemHandlerBasic(9 * 3); TileBase.readItems(items, 0, stack.getTagCompound()); diff --git a/src/main/java/refinedstorage/inventory/InterfaceItemHandler.java b/src/main/java/refinedstorage/inventory/ItemHandlerInterface.java similarity index 69% rename from src/main/java/refinedstorage/inventory/InterfaceItemHandler.java rename to src/main/java/refinedstorage/inventory/ItemHandlerInterface.java index 1ba94747e..8fff53eb5 100755 --- a/src/main/java/refinedstorage/inventory/InterfaceItemHandler.java +++ b/src/main/java/refinedstorage/inventory/ItemHandlerInterface.java @@ -3,11 +3,11 @@ package refinedstorage.inventory; import net.minecraft.item.ItemStack; import net.minecraftforge.items.ItemStackHandler; -public class InterfaceItemHandler extends ItemStackHandler { - private BasicItemHandler importItems; - private BasicItemHandler exportItems; +public class ItemHandlerInterface extends ItemStackHandler { + private ItemHandlerBasic importItems; + private ItemHandlerBasic exportItems; - public InterfaceItemHandler(BasicItemHandler importItems, BasicItemHandler exportItems) { + public ItemHandlerInterface(ItemHandlerBasic importItems, ItemHandlerBasic exportItems) { this.importItems = importItems; this.exportItems = exportItems; } diff --git a/src/main/java/refinedstorage/inventory/ProxyItemHandler.java b/src/main/java/refinedstorage/inventory/ItemHandlerProxy.java similarity index 88% rename from src/main/java/refinedstorage/inventory/ProxyItemHandler.java rename to src/main/java/refinedstorage/inventory/ItemHandlerProxy.java index 2c0863630..4b1a6d37b 100755 --- a/src/main/java/refinedstorage/inventory/ProxyItemHandler.java +++ b/src/main/java/refinedstorage/inventory/ItemHandlerProxy.java @@ -6,10 +6,10 @@ import net.minecraftforge.common.util.INBTSerializable; import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.IItemHandlerModifiable; -public class ProxyItemHandler implements IItemHandler, IItemHandlerModifiable, INBTSerializable { - private BasicItemHandler proxy; +public class ItemHandlerProxy implements IItemHandler, IItemHandlerModifiable, INBTSerializable { + private ItemHandlerBasic proxy; - public ProxyItemHandler(BasicItemHandler proxy) { + public ItemHandlerProxy(ItemHandlerBasic proxy) { this.proxy = proxy; } diff --git a/src/main/java/refinedstorage/inventory/SoldererItemHandler.java b/src/main/java/refinedstorage/inventory/ItemHandlerSolderer.java similarity index 91% rename from src/main/java/refinedstorage/inventory/SoldererItemHandler.java rename to src/main/java/refinedstorage/inventory/ItemHandlerSolderer.java index edc46aabb..b66af4a65 100755 --- a/src/main/java/refinedstorage/inventory/SoldererItemHandler.java +++ b/src/main/java/refinedstorage/inventory/ItemHandlerSolderer.java @@ -4,11 +4,11 @@ import net.minecraft.item.ItemStack; import net.minecraft.util.EnumFacing; import refinedstorage.tile.TileSolderer; -public class SoldererItemHandler extends ProxyItemHandler { +public class ItemHandlerSolderer extends ItemHandlerProxy { private TileSolderer solderer; private EnumFacing side; - public SoldererItemHandler(TileSolderer solderer, EnumFacing side) { + public ItemHandlerSolderer(TileSolderer solderer, EnumFacing side) { super(solderer.getItems()); this.solderer = solderer; diff --git a/src/main/java/refinedstorage/inventory/UpgradeItemHandler.java b/src/main/java/refinedstorage/inventory/ItemHandlerUpgrade.java similarity index 88% rename from src/main/java/refinedstorage/inventory/UpgradeItemHandler.java rename to src/main/java/refinedstorage/inventory/ItemHandlerUpgrade.java index fff343f75..38243f5a1 100755 --- a/src/main/java/refinedstorage/inventory/UpgradeItemHandler.java +++ b/src/main/java/refinedstorage/inventory/ItemHandlerUpgrade.java @@ -4,12 +4,12 @@ import net.minecraft.tileentity.TileEntity; import refinedstorage.RefinedStorageItems; import refinedstorage.item.ItemUpgrade; -public class UpgradeItemHandler extends BasicItemHandler { - public UpgradeItemHandler(int size, TileEntity tile, int... supportedUpgrades) { +public class ItemHandlerUpgrade extends ItemHandlerBasic { + public ItemHandlerUpgrade(int size, TileEntity tile, int... supportedUpgrades) { super(size, tile, new IItemValidator[supportedUpgrades.length]); for (int i = 0; i < supportedUpgrades.length; ++i) { - this.validators[i] = new BasicItemValidator(RefinedStorageItems.UPGRADE, supportedUpgrades[i]); + this.validators[i] = new ItemValidatorBasic(RefinedStorageItems.UPGRADE, supportedUpgrades[i]); } } diff --git a/src/main/java/refinedstorage/inventory/BasicItemValidator.java b/src/main/java/refinedstorage/inventory/ItemValidatorBasic.java similarity index 77% rename from src/main/java/refinedstorage/inventory/BasicItemValidator.java rename to src/main/java/refinedstorage/inventory/ItemValidatorBasic.java index 8938a002c..cfae89161 100755 --- a/src/main/java/refinedstorage/inventory/BasicItemValidator.java +++ b/src/main/java/refinedstorage/inventory/ItemValidatorBasic.java @@ -3,15 +3,15 @@ package refinedstorage.inventory; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -public class BasicItemValidator implements IItemValidator { +public class ItemValidatorBasic implements IItemValidator { private Item item; private int damage = -1; - public BasicItemValidator(Item item) { + public ItemValidatorBasic(Item item) { this.item = item; } - public BasicItemValidator(Item item, int damage) { + public ItemValidatorBasic(Item item, int damage) { this.item = item; this.damage = damage; } diff --git a/src/main/java/refinedstorage/jei/GridRecipeTransferHandler.java b/src/main/java/refinedstorage/jei/RecipeTransferHandlerGrid.java similarity index 97% rename from src/main/java/refinedstorage/jei/GridRecipeTransferHandler.java rename to src/main/java/refinedstorage/jei/RecipeTransferHandlerGrid.java index 73f116c7f..b68023f41 100755 --- a/src/main/java/refinedstorage/jei/GridRecipeTransferHandler.java +++ b/src/main/java/refinedstorage/jei/RecipeTransferHandlerGrid.java @@ -21,7 +21,7 @@ import java.util.Map; /** * @link https://github.com/zerofall/EZStorage/blob/master/src/main/java/com/zerofall/ezstorage/jei/RecipeTransferHandler.java */ -public class GridRecipeTransferHandler implements IRecipeTransferHandler { +public class RecipeTransferHandlerGrid implements IRecipeTransferHandler { @Override public Class getContainerClass() { return ContainerGrid.class; diff --git a/src/main/java/refinedstorage/jei/RefinedStorageJEIPlugin.java b/src/main/java/refinedstorage/jei/RefinedStorageJEIPlugin.java index 5faab58aa..dd547091e 100755 --- a/src/main/java/refinedstorage/jei/RefinedStorageJEIPlugin.java +++ b/src/main/java/refinedstorage/jei/RefinedStorageJEIPlugin.java @@ -17,7 +17,7 @@ public class RefinedStorageJEIPlugin implements IModPlugin { public void register(IModRegistry registry) { INSTANCE = this; - registry.getRecipeTransferRegistry().addRecipeTransferHandler(new GridRecipeTransferHandler()); + registry.getRecipeTransferRegistry().addRecipeTransferHandler(new RecipeTransferHandlerGrid()); registry.addRecipeCategories(new SoldererRecipeCategory(registry.getJeiHelpers().getGuiHelper())); diff --git a/src/main/java/refinedstorage/tile/TileConstructor.java b/src/main/java/refinedstorage/tile/TileConstructor.java index 1c7c2e910..7781062e4 100755 --- a/src/main/java/refinedstorage/tile/TileConstructor.java +++ b/src/main/java/refinedstorage/tile/TileConstructor.java @@ -16,8 +16,8 @@ import refinedstorage.RefinedStorage; import refinedstorage.apiimpl.autocrafting.CraftingTaskScheduler; import refinedstorage.container.ContainerConstructor; import refinedstorage.container.slot.SlotSpecimen; -import refinedstorage.inventory.BasicItemHandler; -import refinedstorage.inventory.UpgradeItemHandler; +import refinedstorage.inventory.ItemHandlerBasic; +import refinedstorage.inventory.ItemHandlerUpgrade; import refinedstorage.item.ItemUpgrade; import refinedstorage.tile.config.ICompareConfig; @@ -26,7 +26,7 @@ public class TileConstructor extends TileNode implements ICompareConfig { private static final int BASE_SPEED = 20; - private BasicItemHandler filter = new BasicItemHandler(1, this) { + private ItemHandlerBasic filter = new ItemHandlerBasic(1, this) { @Override protected void onContentsChanged(int slot) { super.onContentsChanged(slot); @@ -34,7 +34,7 @@ public class TileConstructor extends TileNode implements ICompareConfig { block = SlotSpecimen.getBlockState(worldObj, pos.offset(getDirection()), getStackInSlot(0)); } }; - private UpgradeItemHandler upgrades = new UpgradeItemHandler(4, this, ItemUpgrade.TYPE_SPEED, ItemUpgrade.TYPE_CRAFTING); + private ItemHandlerUpgrade upgrades = new ItemHandlerUpgrade(4, this, ItemUpgrade.TYPE_SPEED, ItemUpgrade.TYPE_CRAFTING); private int compare = 0; private IBlockState block; diff --git a/src/main/java/refinedstorage/tile/TileCrafter.java b/src/main/java/refinedstorage/tile/TileCrafter.java index d34ba7642..b653fc29e 100755 --- a/src/main/java/refinedstorage/tile/TileCrafter.java +++ b/src/main/java/refinedstorage/tile/TileCrafter.java @@ -14,14 +14,14 @@ import refinedstorage.api.autocrafting.ICraftingPatternContainer; import refinedstorage.api.autocrafting.ICraftingTask; import refinedstorage.api.network.INetworkMaster; import refinedstorage.container.ContainerCrafter; -import refinedstorage.inventory.BasicItemHandler; import refinedstorage.inventory.IItemValidator; -import refinedstorage.inventory.UpgradeItemHandler; +import refinedstorage.inventory.ItemHandlerBasic; +import refinedstorage.inventory.ItemHandlerUpgrade; import refinedstorage.item.ItemPattern; import refinedstorage.item.ItemUpgrade; public class TileCrafter extends TileNode implements ICraftingPatternContainer { - private BasicItemHandler patterns = new BasicItemHandler(9, this, new IItemValidator() { + private ItemHandlerBasic patterns = new ItemHandlerBasic(9, this, new IItemValidator() { @Override public boolean isValid(ItemStack stack) { return stack.getItem() == RefinedStorageItems.PATTERN && ItemPattern.isValid(stack); @@ -37,7 +37,7 @@ public class TileCrafter extends TileNode implements ICraftingPatternContainer { } }; - private UpgradeItemHandler upgrades = new UpgradeItemHandler(4, this, ItemUpgrade.TYPE_SPEED); + private ItemHandlerUpgrade upgrades = new ItemHandlerUpgrade(4, this, ItemUpgrade.TYPE_SPEED); @Override public int getEnergyUsage() { diff --git a/src/main/java/refinedstorage/tile/TileDestructor.java b/src/main/java/refinedstorage/tile/TileDestructor.java index dcba0b057..f8964c15d 100755 --- a/src/main/java/refinedstorage/tile/TileDestructor.java +++ b/src/main/java/refinedstorage/tile/TileDestructor.java @@ -14,8 +14,8 @@ import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; import refinedstorage.RefinedStorage; import refinedstorage.container.ContainerDestructor; -import refinedstorage.inventory.BasicItemHandler; -import refinedstorage.inventory.UpgradeItemHandler; +import refinedstorage.inventory.ItemHandlerBasic; +import refinedstorage.inventory.ItemHandlerUpgrade; import refinedstorage.item.ItemUpgrade; import refinedstorage.tile.config.ICompareConfig; import refinedstorage.tile.config.IModeConfig; @@ -30,8 +30,8 @@ public class TileDestructor extends TileNode implements ICompareConfig, IModeCon private static final int BASE_SPEED = 20; - private BasicItemHandler filters = new BasicItemHandler(9, this); - private UpgradeItemHandler upgrades = new UpgradeItemHandler(4, this, ItemUpgrade.TYPE_SPEED); + private ItemHandlerBasic filters = new ItemHandlerBasic(9, this); + private ItemHandlerUpgrade upgrades = new ItemHandlerUpgrade(4, this, ItemUpgrade.TYPE_SPEED); private int compare = 0; private int mode = ModeConstants.WHITELIST; diff --git a/src/main/java/refinedstorage/tile/TileDetector.java b/src/main/java/refinedstorage/tile/TileDetector.java index 6c0ddf55e..3210397a5 100755 --- a/src/main/java/refinedstorage/tile/TileDetector.java +++ b/src/main/java/refinedstorage/tile/TileDetector.java @@ -9,7 +9,7 @@ import refinedstorage.RefinedStorage; import refinedstorage.RefinedStorageBlocks; import refinedstorage.api.network.INetworkMaster; import refinedstorage.container.ContainerDetector; -import refinedstorage.inventory.BasicItemHandler; +import refinedstorage.inventory.ItemHandlerBasic; import refinedstorage.tile.config.ICompareConfig; import refinedstorage.tile.config.RedstoneMode; @@ -25,7 +25,7 @@ public class TileDetector extends TileNode implements ICompareConfig { private static final String NBT_AMOUNT = "Amount"; private static final String NBT_POWERED = "Powered"; - private BasicItemHandler filter = new BasicItemHandler(1, this); + private ItemHandlerBasic filter = new ItemHandlerBasic(1, this); private int compare = 0; private int mode = MODE_EQUAL; diff --git a/src/main/java/refinedstorage/tile/TileDiskDrive.java b/src/main/java/refinedstorage/tile/TileDiskDrive.java index a4f6b51e3..16ed93660 100755 --- a/src/main/java/refinedstorage/tile/TileDiskDrive.java +++ b/src/main/java/refinedstorage/tile/TileDiskDrive.java @@ -19,8 +19,8 @@ import refinedstorage.api.storage.IStorageProvider; import refinedstorage.apiimpl.storage.NBTStorage; import refinedstorage.block.EnumStorageType; import refinedstorage.container.ContainerDiskDrive; -import refinedstorage.inventory.BasicItemHandler; -import refinedstorage.inventory.BasicItemValidator; +import refinedstorage.inventory.ItemHandlerBasic; +import refinedstorage.inventory.ItemValidatorBasic; import refinedstorage.network.MessagePriorityUpdate; import refinedstorage.tile.config.*; @@ -52,7 +52,7 @@ public class TileDiskDrive extends TileNode implements IStorageProvider, IStorag private static final String NBT_MODE = "Mode"; private static final String NBT_STORED = "Stored"; - private BasicItemHandler disks = new BasicItemHandler(8, this, new BasicItemValidator(RefinedStorageItems.STORAGE_DISK) { + private ItemHandlerBasic disks = new ItemHandlerBasic(8, this, new ItemValidatorBasic(RefinedStorageItems.STORAGE_DISK) { @Override public boolean isValid(ItemStack disk) { return super.isValid(disk) && NBTStorage.isValid(disk); @@ -89,7 +89,7 @@ public class TileDiskDrive extends TileNode implements IStorageProvider, IStorag return super.extractItem(slot, amount, simulate); } }; - private BasicItemHandler filters = new BasicItemHandler(9, this); + private ItemHandlerBasic filters = new ItemHandlerBasic(9, this); private Storage storages[] = new Storage[8]; diff --git a/src/main/java/refinedstorage/tile/TileExporter.java b/src/main/java/refinedstorage/tile/TileExporter.java index 413079980..b2e035cfb 100755 --- a/src/main/java/refinedstorage/tile/TileExporter.java +++ b/src/main/java/refinedstorage/tile/TileExporter.java @@ -12,16 +12,16 @@ import net.minecraftforge.items.ItemHandlerHelper; import refinedstorage.RefinedStorage; import refinedstorage.apiimpl.autocrafting.CraftingTaskScheduler; import refinedstorage.container.ContainerExporter; -import refinedstorage.inventory.BasicItemHandler; -import refinedstorage.inventory.UpgradeItemHandler; +import refinedstorage.inventory.ItemHandlerBasic; +import refinedstorage.inventory.ItemHandlerUpgrade; import refinedstorage.item.ItemUpgrade; import refinedstorage.tile.config.ICompareConfig; public class TileExporter extends TileNode implements ICompareConfig { private static final String NBT_COMPARE = "Compare"; - private BasicItemHandler filters = new BasicItemHandler(9, this); - private UpgradeItemHandler upgrades = new UpgradeItemHandler(4, this, ItemUpgrade.TYPE_SPEED, ItemUpgrade.TYPE_CRAFTING, ItemUpgrade.TYPE_STACK); + private ItemHandlerBasic filters = new ItemHandlerBasic(9, this); + private ItemHandlerUpgrade upgrades = new ItemHandlerUpgrade(4, this, ItemUpgrade.TYPE_SPEED, ItemUpgrade.TYPE_CRAFTING, ItemUpgrade.TYPE_STACK); private int compare = 0; diff --git a/src/main/java/refinedstorage/tile/TileImporter.java b/src/main/java/refinedstorage/tile/TileImporter.java index 247bd739f..114ecb758 100755 --- a/src/main/java/refinedstorage/tile/TileImporter.java +++ b/src/main/java/refinedstorage/tile/TileImporter.java @@ -10,8 +10,8 @@ import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; import refinedstorage.RefinedStorage; import refinedstorage.container.ContainerImporter; -import refinedstorage.inventory.BasicItemHandler; -import refinedstorage.inventory.UpgradeItemHandler; +import refinedstorage.inventory.ItemHandlerBasic; +import refinedstorage.inventory.ItemHandlerUpgrade; import refinedstorage.item.ItemUpgrade; import refinedstorage.tile.config.ICompareConfig; import refinedstorage.tile.config.IModeConfig; @@ -22,8 +22,8 @@ public class TileImporter extends TileNode implements ICompareConfig, IModeConfi private static final String NBT_COMPARE = "Compare"; private static final String NBT_MODE = "Mode"; - private BasicItemHandler filters = new BasicItemHandler(9, this); - private UpgradeItemHandler upgrades = new UpgradeItemHandler(4, this, ItemUpgrade.TYPE_SPEED, ItemUpgrade.TYPE_STACK); + private ItemHandlerBasic filters = new ItemHandlerBasic(9, this); + private ItemHandlerUpgrade upgrades = new ItemHandlerUpgrade(4, this, ItemUpgrade.TYPE_SPEED, ItemUpgrade.TYPE_STACK); private int compare = 0; private int mode = ModeConstants.WHITELIST; diff --git a/src/main/java/refinedstorage/tile/TileInterface.java b/src/main/java/refinedstorage/tile/TileInterface.java index 43a64897c..b07bdec97 100755 --- a/src/main/java/refinedstorage/tile/TileInterface.java +++ b/src/main/java/refinedstorage/tile/TileInterface.java @@ -11,20 +11,20 @@ import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.wrapper.CombinedInvWrapper; import refinedstorage.RefinedStorage; import refinedstorage.container.ContainerInterface; -import refinedstorage.inventory.BasicItemHandler; -import refinedstorage.inventory.InterfaceItemHandler; -import refinedstorage.inventory.UpgradeItemHandler; +import refinedstorage.inventory.ItemHandlerBasic; +import refinedstorage.inventory.ItemHandlerInterface; +import refinedstorage.inventory.ItemHandlerUpgrade; import refinedstorage.item.ItemUpgrade; import refinedstorage.tile.config.ICompareConfig; public class TileInterface extends TileNode implements ICompareConfig { private static final String NBT_COMPARE = "Compare"; - private BasicItemHandler importItems = new BasicItemHandler(9, this); - private BasicItemHandler exportSpecimenItems = new BasicItemHandler(9, this); - private BasicItemHandler exportItems = new BasicItemHandler(9, this); - private InterfaceItemHandler itemHandler = new InterfaceItemHandler(importItems, exportItems); - private UpgradeItemHandler upgrades = new UpgradeItemHandler(4, this, ItemUpgrade.TYPE_SPEED, ItemUpgrade.TYPE_STACK); + private ItemHandlerBasic importItems = new ItemHandlerBasic(9, this); + private ItemHandlerBasic exportSpecimenItems = new ItemHandlerBasic(9, this); + private ItemHandlerBasic exportItems = new ItemHandlerBasic(9, this); + private ItemHandlerInterface itemHandler = new ItemHandlerInterface(importItems, exportItems); + private ItemHandlerUpgrade upgrades = new ItemHandlerUpgrade(4, this, ItemUpgrade.TYPE_SPEED, ItemUpgrade.TYPE_STACK); private int compare = 0; diff --git a/src/main/java/refinedstorage/tile/TileProcessingPatternEncoder.java b/src/main/java/refinedstorage/tile/TileProcessingPatternEncoder.java index 77376f8ff..cbc9b1e13 100755 --- a/src/main/java/refinedstorage/tile/TileProcessingPatternEncoder.java +++ b/src/main/java/refinedstorage/tile/TileProcessingPatternEncoder.java @@ -7,13 +7,13 @@ import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; import refinedstorage.RefinedStorageItems; -import refinedstorage.inventory.BasicItemHandler; -import refinedstorage.inventory.BasicItemValidator; +import refinedstorage.inventory.ItemHandlerBasic; +import refinedstorage.inventory.ItemValidatorBasic; import refinedstorage.item.ItemPattern; public class TileProcessingPatternEncoder extends TileBase { - private BasicItemHandler patterns = new BasicItemHandler(2, this, new BasicItemValidator(RefinedStorageItems.PATTERN)); - private BasicItemHandler configuration = new BasicItemHandler(9 * 2, this); + private ItemHandlerBasic patterns = new ItemHandlerBasic(2, this, new ItemValidatorBasic(RefinedStorageItems.PATTERN)); + private ItemHandlerBasic configuration = new ItemHandlerBasic(9 * 2, this); @Override public NBTTagCompound write(NBTTagCompound tag) { @@ -72,11 +72,11 @@ public class TileProcessingPatternEncoder extends TileBase { return inputsFilled > 0 && outputsFilled > 0 && patterns.getStackInSlot(0) != null && patterns.getStackInSlot(1) == null; } - public BasicItemHandler getPatterns() { + public ItemHandlerBasic getPatterns() { return patterns; } - public BasicItemHandler getConfiguration() { + public ItemHandlerBasic getConfiguration() { return configuration; } diff --git a/src/main/java/refinedstorage/tile/TileSolderer.java b/src/main/java/refinedstorage/tile/TileSolderer.java index 2e5cc3704..7312ff6bb 100755 --- a/src/main/java/refinedstorage/tile/TileSolderer.java +++ b/src/main/java/refinedstorage/tile/TileSolderer.java @@ -14,18 +14,18 @@ import refinedstorage.api.network.INetworkMaster; import refinedstorage.api.solderer.ISoldererRecipe; import refinedstorage.api.storage.CompareUtils; import refinedstorage.container.ContainerSolderer; -import refinedstorage.inventory.BasicItemHandler; -import refinedstorage.inventory.SoldererItemHandler; -import refinedstorage.inventory.UpgradeItemHandler; +import refinedstorage.inventory.ItemHandlerBasic; +import refinedstorage.inventory.ItemHandlerSolderer; +import refinedstorage.inventory.ItemHandlerUpgrade; import refinedstorage.item.ItemUpgrade; public class TileSolderer extends TileNode { private static final String NBT_WORKING = "Working"; private static final String NBT_PROGRESS = "Progress"; - private BasicItemHandler items = new BasicItemHandler(4, this); - private UpgradeItemHandler upgrades = new UpgradeItemHandler(4, this, ItemUpgrade.TYPE_SPEED); - private SoldererItemHandler[] itemsFacade = new SoldererItemHandler[EnumFacing.values().length]; + private ItemHandlerBasic items = new ItemHandlerBasic(4, this); + private ItemHandlerUpgrade upgrades = new ItemHandlerUpgrade(4, this, ItemUpgrade.TYPE_SPEED); + private ItemHandlerSolderer[] itemsFacade = new ItemHandlerSolderer[EnumFacing.values().length]; private ISoldererRecipe recipe; @@ -186,7 +186,7 @@ public class TileSolderer extends TileNode { return (int) ((float) progress / (float) duration * (float) i); } - public BasicItemHandler getItems() { + public ItemHandlerBasic getItems() { return items; } @@ -209,7 +209,7 @@ public class TileSolderer extends TileNode { int i = facing.ordinal(); if (itemsFacade[i] == null) { - itemsFacade[i] = new SoldererItemHandler(this, facing); + itemsFacade[i] = new ItemHandlerSolderer(this, facing); } return (T) itemsFacade[i]; diff --git a/src/main/java/refinedstorage/tile/TileStorage.java b/src/main/java/refinedstorage/tile/TileStorage.java index 2bb1d07b6..aaa420c20 100755 --- a/src/main/java/refinedstorage/tile/TileStorage.java +++ b/src/main/java/refinedstorage/tile/TileStorage.java @@ -15,7 +15,7 @@ import refinedstorage.apiimpl.storage.NBTStorage; import refinedstorage.block.BlockStorage; import refinedstorage.block.EnumStorageType; import refinedstorage.container.ContainerStorage; -import refinedstorage.inventory.BasicItemHandler; +import refinedstorage.inventory.ItemHandlerBasic; import refinedstorage.network.MessagePriorityUpdate; import refinedstorage.tile.config.*; @@ -48,7 +48,7 @@ public class TileStorage extends TileNode implements IStorageProvider, IStorageG private static final String NBT_COMPARE = "Compare"; private static final String NBT_MODE = "Mode"; - private BasicItemHandler filters = new BasicItemHandler(9, this); + private ItemHandlerBasic filters = new ItemHandlerBasic(9, this); private NBTTagCompound storageTag = NBTStorage.createNBT(); diff --git a/src/main/java/refinedstorage/tile/TileWirelessTransmitter.java b/src/main/java/refinedstorage/tile/TileWirelessTransmitter.java index 89b7b018d..499c1d694 100755 --- a/src/main/java/refinedstorage/tile/TileWirelessTransmitter.java +++ b/src/main/java/refinedstorage/tile/TileWirelessTransmitter.java @@ -10,12 +10,12 @@ import net.minecraftforge.items.IItemHandler; import refinedstorage.RefinedStorage; import refinedstorage.api.network.IWirelessTransmitter; import refinedstorage.container.ContainerWirelessTransmitter; -import refinedstorage.inventory.BasicItemHandler; -import refinedstorage.inventory.UpgradeItemHandler; +import refinedstorage.inventory.ItemHandlerBasic; +import refinedstorage.inventory.ItemHandlerUpgrade; import refinedstorage.item.ItemUpgrade; public class TileWirelessTransmitter extends TileNode implements IWirelessTransmitter { - private UpgradeItemHandler upgrades = new UpgradeItemHandler(4, this, ItemUpgrade.TYPE_RANGE); + private ItemHandlerUpgrade upgrades = new ItemHandlerUpgrade(4, this, ItemUpgrade.TYPE_RANGE); @Override public int getEnergyUsage() { @@ -52,7 +52,7 @@ public class TileWirelessTransmitter extends TileNode implements IWirelessTransm return pos; } - public BasicItemHandler getUpgrades() { + public ItemHandlerBasic getUpgrades() { return upgrades; } diff --git a/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java b/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java index ccb65761b..bd42ae53e 100755 --- a/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java +++ b/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java @@ -13,7 +13,7 @@ import refinedstorage.api.network.INetworkMaster; import refinedstorage.api.storage.IStorage; import refinedstorage.api.storage.IStorageProvider; import refinedstorage.container.ContainerStorage; -import refinedstorage.inventory.BasicItemHandler; +import refinedstorage.inventory.ItemHandlerBasic; import refinedstorage.network.MessagePriorityUpdate; import refinedstorage.tile.IStorageGui; import refinedstorage.tile.TileNode; @@ -30,7 +30,7 @@ public class TileExternalStorage extends TileNode implements IStorageProvider, I private static final String NBT_COMPARE = "Compare"; private static final String NBT_MODE = "Mode"; - private BasicItemHandler filters = new BasicItemHandler(9, this); + private ItemHandlerBasic filters = new ItemHandlerBasic(9, this); private int priority = 0; private int compare = 0; diff --git a/src/main/java/refinedstorage/tile/grid/IGrid.java b/src/main/java/refinedstorage/tile/grid/IGrid.java index 219d76224..7b8262c6e 100755 --- a/src/main/java/refinedstorage/tile/grid/IGrid.java +++ b/src/main/java/refinedstorage/tile/grid/IGrid.java @@ -4,7 +4,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.util.math.BlockPos; import refinedstorage.api.network.IGridHandler; import refinedstorage.block.EnumGridType; -import refinedstorage.inventory.BasicItemHandler; +import refinedstorage.inventory.ItemHandlerBasic; import refinedstorage.tile.config.IRedstoneModeConfig; import java.util.List; @@ -34,7 +34,7 @@ public interface IGrid { List getFilteredItems(); - BasicItemHandler getFilter(); + ItemHandlerBasic getFilter(); IRedstoneModeConfig getRedstoneModeConfig(); diff --git a/src/main/java/refinedstorage/tile/grid/TileGrid.java b/src/main/java/refinedstorage/tile/grid/TileGrid.java index d8442f0a3..da7ac41f9 100755 --- a/src/main/java/refinedstorage/tile/grid/TileGrid.java +++ b/src/main/java/refinedstorage/tile/grid/TileGrid.java @@ -19,9 +19,9 @@ import refinedstorage.apiimpl.network.NetworkUtils; import refinedstorage.block.BlockGrid; import refinedstorage.block.EnumGridType; import refinedstorage.container.ContainerGrid; -import refinedstorage.inventory.BasicItemHandler; -import refinedstorage.inventory.BasicItemValidator; -import refinedstorage.inventory.GridFilterInGridItemHandler; +import refinedstorage.inventory.ItemHandlerBasic; +import refinedstorage.inventory.ItemHandlerGridFilterInGrid; +import refinedstorage.inventory.ItemValidatorBasic; import refinedstorage.item.ItemPattern; import refinedstorage.network.MessageGridSettingsUpdate; import refinedstorage.tile.TileNode; @@ -65,9 +65,9 @@ public class TileGrid extends TileNode implements IGrid { private InventoryCrafting matrix = new InventoryCrafting(craftingContainer, 3, 3); private InventoryCraftResult result = new InventoryCraftResult(); - private BasicItemHandler patterns = new BasicItemHandler(2, this, new BasicItemValidator(RefinedStorageItems.PATTERN)); + private ItemHandlerBasic patterns = new ItemHandlerBasic(2, this, new ItemValidatorBasic(RefinedStorageItems.PATTERN)); private List filteredItems = new ArrayList(); - private GridFilterInGridItemHandler filter = new GridFilterInGridItemHandler(filteredItems); + private ItemHandlerGridFilterInGrid filter = new ItemHandlerGridFilterInGrid(filteredItems); private EnumGridType type; @@ -131,7 +131,7 @@ public class TileGrid extends TileNode implements IGrid { } @Override - public BasicItemHandler getFilter() { + public ItemHandlerBasic getFilter() { return filter; } diff --git a/src/main/java/refinedstorage/tile/grid/WirelessGrid.java b/src/main/java/refinedstorage/tile/grid/WirelessGrid.java index 7bcea4f86..19a56c128 100755 --- a/src/main/java/refinedstorage/tile/grid/WirelessGrid.java +++ b/src/main/java/refinedstorage/tile/grid/WirelessGrid.java @@ -10,8 +10,8 @@ import net.minecraft.world.World; import refinedstorage.RefinedStorage; import refinedstorage.api.network.IGridHandler; import refinedstorage.block.EnumGridType; -import refinedstorage.inventory.BasicItemHandler; -import refinedstorage.inventory.GridFilterInGridItemHandler; +import refinedstorage.inventory.ItemHandlerBasic; +import refinedstorage.inventory.ItemHandlerGridFilterInGrid; import refinedstorage.item.ItemWirelessGrid; import refinedstorage.network.MessageWirelessGridSettingsUpdate; import refinedstorage.tile.TileBase; @@ -35,7 +35,7 @@ public class WirelessGrid implements IGrid { private int searchBoxMode; private List filteredItems = new ArrayList(); - private GridFilterInGridItemHandler filter = new GridFilterInGridItemHandler(filteredItems) { + private ItemHandlerGridFilterInGrid filter = new ItemHandlerGridFilterInGrid(filteredItems) { @Override protected void onContentsChanged(int slot) { super.onContentsChanged(slot); @@ -139,7 +139,7 @@ public class WirelessGrid implements IGrid { } @Override - public BasicItemHandler getFilter() { + public ItemHandlerBasic getFilter() { return filter; } From 7e7320748b052d6085bf604865c92df490b4c785 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sat, 30 Jul 2016 01:31:05 +0200 Subject: [PATCH 031/214] Fix messed up formatting --- .../java/refinedstorage/gui/grid/GuiGrid.java | 29 ++----------------- 1 file changed, 2 insertions(+), 27 deletions(-) diff --git a/src/main/java/refinedstorage/gui/grid/GuiGrid.java b/src/main/java/refinedstorage/gui/grid/GuiGrid.java index 1ee09b6c8..6c4946552 100755 --- a/src/main/java/refinedstorage/gui/grid/GuiGrid.java +++ b/src/main/java/refinedstorage/gui/grid/GuiGrid.java @@ -173,33 +173,8 @@ public class GuiGrid extends GuiBase { } } - getScrollbar() - - . - - setCanScroll(getRows() - - > - - getVisibleRows() - - ); - - getScrollbar() - - . - - setScrollDelta((float) getScrollbar - - (). - - getScrollbarHeight() - - / (float) - - getRows() - - ); + getScrollbar().setCanScroll(getRows() > getVisibleRows()); + getScrollbar().setScrollDelta((float) getScrollbar().getScrollbarHeight() / (float) getRows()); } private int getOffset() { From 8480ec243301c43e873a3fa4a0ca6a3d6fff90df Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sat, 30 Jul 2016 01:32:58 +0200 Subject: [PATCH 032/214] Drop filter as well --- src/main/java/refinedstorage/tile/grid/TileGrid.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main/java/refinedstorage/tile/grid/TileGrid.java b/src/main/java/refinedstorage/tile/grid/TileGrid.java index da7ac41f9..10a5311d9 100755 --- a/src/main/java/refinedstorage/tile/grid/TileGrid.java +++ b/src/main/java/refinedstorage/tile/grid/TileGrid.java @@ -9,6 +9,7 @@ import net.minecraft.item.crafting.CraftingManager; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.math.BlockPos; import net.minecraftforge.items.IItemHandler; +import net.minecraftforge.items.wrapper.CombinedInvWrapper; import net.minecraftforge.items.wrapper.InvWrapper; import refinedstorage.RefinedStorage; import refinedstorage.RefinedStorageBlocks; @@ -413,11 +414,11 @@ public class TileGrid extends TileNode implements IGrid { public IItemHandler getDroppedItems() { switch (getType()) { case CRAFTING: - return new InvWrapper(matrix); + return new CombinedInvWrapper(filter, new InvWrapper(matrix)); case PATTERN: - return patterns; + return new CombinedInvWrapper(filter, patterns); default: - return null; + return new CombinedInvWrapper(filter); } } From 66107f3f78d540dcc1af44295cd030fb68caee06 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sat, 30 Jul 2016 01:33:42 +0200 Subject: [PATCH 033/214] Sneaking clears grid filter --- src/main/java/refinedstorage/item/ItemGridFilter.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/java/refinedstorage/item/ItemGridFilter.java b/src/main/java/refinedstorage/item/ItemGridFilter.java index ff9c75454..015f1c320 100755 --- a/src/main/java/refinedstorage/item/ItemGridFilter.java +++ b/src/main/java/refinedstorage/item/ItemGridFilter.java @@ -8,6 +8,7 @@ import net.minecraft.util.EnumHand; import net.minecraft.world.World; import refinedstorage.RefinedStorage; import refinedstorage.RefinedStorageGui; +import refinedstorage.RefinedStorageItems; public class ItemGridFilter extends ItemBase { public ItemGridFilter() { @@ -19,6 +20,10 @@ public class ItemGridFilter extends ItemBase { @Override public ActionResult onItemRightClick(ItemStack stack, World world, EntityPlayer player, EnumHand hand) { if (!world.isRemote) { + if (player.isSneaking()) { + return new ActionResult(EnumActionResult.SUCCESS, new ItemStack(RefinedStorageItems.GRID_FILTER)); + } + player.openGui(RefinedStorage.INSTANCE, RefinedStorageGui.GRID_FILTER, world, hand.ordinal(), 0, 0); return new ActionResult(EnumActionResult.SUCCESS, stack); From 947ace31b822ab8aca1186152c564d3d3f4104f1 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sat, 30 Jul 2016 01:36:13 +0200 Subject: [PATCH 034/214] Changed Relay recipe to use redstone torch instead of Basic Processor --- CHANGELOG.md | 3 ++- src/main/java/refinedstorage/proxy/CommonProxy.java | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 67f6db628..2f0da4503 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,7 +9,8 @@ **Features** - Added config option to set the base energy usage of the Controller (default is 0) -- Added Grid Filter item +- Added Grid Filter item to filter items in any Grid +- Changed Relay recipe to use redstone torch instead of Basic Processor ### 0.8.12 **Bugfixes** diff --git a/src/main/java/refinedstorage/proxy/CommonProxy.java b/src/main/java/refinedstorage/proxy/CommonProxy.java index 2c036b343..8d59052d3 100755 --- a/src/main/java/refinedstorage/proxy/CommonProxy.java +++ b/src/main/java/refinedstorage/proxy/CommonProxy.java @@ -157,9 +157,9 @@ public class CommonProxy { // Relay GameRegistry.addShapelessRecipe(new ItemStack(RefinedStorageBlocks.RELAY), - new ItemStack(RefinedStorageItems.PROCESSOR, 1, ItemProcessor.TYPE_BASIC), new ItemStack(RefinedStorageBlocks.MACHINE_CASING), - new ItemStack(RefinedStorageBlocks.CABLE) + new ItemStack(RefinedStorageBlocks.CABLE), + new ItemStack(Blocks.REDSTONE_TORCH) ); // Controller From bd89dd3c17d3cf20ccb5229f83b32581a981ca9f Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sat, 30 Jul 2016 01:48:10 +0200 Subject: [PATCH 035/214] Add tooltip to grid filter with the filtered items --- .../inventory/ItemHandlerGridFilter.java | 4 ++++ .../inventory/ItemHandlerGridFilterInGrid.java | 11 +++-------- .../refinedstorage/item/ItemBlockController.java | 4 ++-- .../refinedstorage/item/ItemBlockStorage.java | 6 +++--- .../java/refinedstorage/item/ItemGridFilter.java | 12 ++++++++++++ .../java/refinedstorage/item/ItemPattern.java | 16 ++++++++-------- .../refinedstorage/item/ItemStorageDisk.java | 6 +++--- .../refinedstorage/item/ItemWirelessGrid.java | 10 +++++----- 8 files changed, 40 insertions(+), 29 deletions(-) diff --git a/src/main/java/refinedstorage/inventory/ItemHandlerGridFilter.java b/src/main/java/refinedstorage/inventory/ItemHandlerGridFilter.java index cc82bbd1e..dfd83bbfc 100755 --- a/src/main/java/refinedstorage/inventory/ItemHandlerGridFilter.java +++ b/src/main/java/refinedstorage/inventory/ItemHandlerGridFilter.java @@ -28,4 +28,8 @@ public class ItemHandlerGridFilter extends ItemStackHandler { TileBase.writeItems(this, 0, stack.getTagCompound()); } + + public ItemStack[] getFilteredItems() { + return stacks; + } } diff --git a/src/main/java/refinedstorage/inventory/ItemHandlerGridFilterInGrid.java b/src/main/java/refinedstorage/inventory/ItemHandlerGridFilterInGrid.java index 2312b4602..b51ab73b5 100755 --- a/src/main/java/refinedstorage/inventory/ItemHandlerGridFilterInGrid.java +++ b/src/main/java/refinedstorage/inventory/ItemHandlerGridFilterInGrid.java @@ -2,7 +2,6 @@ package refinedstorage.inventory; import net.minecraft.item.ItemStack; import refinedstorage.RefinedStorageItems; -import refinedstorage.tile.TileBase; import java.util.List; @@ -23,14 +22,10 @@ public class ItemHandlerGridFilterInGrid extends ItemHandlerBasic { ItemStack stack = getStackInSlot(slot); - if (stack != null && stack.hasTagCompound()) { - ItemHandlerBasic items = new ItemHandlerBasic(9 * 3); - - TileBase.readItems(items, 0, stack.getTagCompound()); - - for (int i = 0; i < items.getSlots(); ++i) { - ItemStack item = items.getStackInSlot(i); + if (stack != null) { + ItemHandlerGridFilter items = new ItemHandlerGridFilter(stack); + for (ItemStack item : items.getFilteredItems()) { if (item != null) { filteredItems.add(item); } diff --git a/src/main/java/refinedstorage/item/ItemBlockController.java b/src/main/java/refinedstorage/item/ItemBlockController.java index 2c192dbb0..c5595fd11 100755 --- a/src/main/java/refinedstorage/item/ItemBlockController.java +++ b/src/main/java/refinedstorage/item/ItemBlockController.java @@ -18,7 +18,7 @@ public class ItemBlockController extends ItemBlockBase { } @Override - public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean b) { + public void addInformation(ItemStack stack, EntityPlayer player, List tooltip, boolean advanced) { if (stack.getMetadata() != EnumControllerType.CREATIVE.getId()) { int energyStored = 0; int energyCapacity = RefinedStorage.INSTANCE.controllerCapacity; @@ -33,7 +33,7 @@ public class ItemBlockController extends ItemBlockBase { } } - list.add(I18n.format("misc.refinedstorage:energy_stored", energyStored, energyCapacity)); + tooltip.add(I18n.format("misc.refinedstorage:energy_stored", energyStored, energyCapacity)); } } diff --git a/src/main/java/refinedstorage/item/ItemBlockStorage.java b/src/main/java/refinedstorage/item/ItemBlockStorage.java index c30000c81..8cb21a1a7 100755 --- a/src/main/java/refinedstorage/item/ItemBlockStorage.java +++ b/src/main/java/refinedstorage/item/ItemBlockStorage.java @@ -24,16 +24,16 @@ public class ItemBlockStorage extends ItemBlockBase { } @Override - public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean b) { + public void addInformation(ItemStack stack, EntityPlayer player, List tooltip, boolean advanced) { EnumStorageType type = EnumStorageType.getById(stack.getMetadata()); if (type != null && isValid(stack)) { NBTTagCompound tag = stack.getTagCompound().getCompoundTag(TileStorage.NBT_STORAGE); if (type == EnumStorageType.TYPE_CREATIVE) { - list.add(I18n.format("misc.refinedstorage:storage.stored", NBTStorage.getStoredFromNBT(tag))); + tooltip.add(I18n.format("misc.refinedstorage:storage.stored", NBTStorage.getStoredFromNBT(tag))); } else { - list.add(I18n.format("misc.refinedstorage:storage.stored_capacity", NBTStorage.getStoredFromNBT(tag), type.getCapacity())); + tooltip.add(I18n.format("misc.refinedstorage:storage.stored_capacity", NBTStorage.getStoredFromNBT(tag), type.getCapacity())); } } } diff --git a/src/main/java/refinedstorage/item/ItemGridFilter.java b/src/main/java/refinedstorage/item/ItemGridFilter.java index 015f1c320..f31452d49 100755 --- a/src/main/java/refinedstorage/item/ItemGridFilter.java +++ b/src/main/java/refinedstorage/item/ItemGridFilter.java @@ -9,6 +9,9 @@ import net.minecraft.world.World; import refinedstorage.RefinedStorage; import refinedstorage.RefinedStorageGui; import refinedstorage.RefinedStorageItems; +import refinedstorage.inventory.ItemHandlerGridFilter; + +import java.util.List; public class ItemGridFilter extends ItemBase { public ItemGridFilter() { @@ -31,4 +34,13 @@ public class ItemGridFilter extends ItemBase { return new ActionResult(EnumActionResult.PASS, stack); } + + @Override + public void addInformation(ItemStack stack, EntityPlayer player, List tooltip, boolean advanced) { + super.addInformation(stack, player, tooltip, advanced); + + ItemHandlerGridFilter items = new ItemHandlerGridFilter(stack); + + ItemPattern.combineItems(tooltip, items.getFilteredItems()); + } } diff --git a/src/main/java/refinedstorage/item/ItemPattern.java b/src/main/java/refinedstorage/item/ItemPattern.java index d392896f2..df3db4a88 100755 --- a/src/main/java/refinedstorage/item/ItemPattern.java +++ b/src/main/java/refinedstorage/item/ItemPattern.java @@ -30,25 +30,25 @@ public class ItemPattern extends ItemBase { } @Override - public void addInformation(ItemStack pattern, EntityPlayer player, List list, boolean b) { + public void addInformation(ItemStack pattern, EntityPlayer player, List tooltip, boolean advanced) { if (isValid(pattern)) { if (GuiScreen.isShiftKeyDown() || isProcessing(pattern)) { - list.add(TextFormatting.YELLOW + I18n.format("misc.refinedstorage:pattern.inputs") + TextFormatting.RESET); + tooltip.add(TextFormatting.YELLOW + I18n.format("misc.refinedstorage:pattern.inputs") + TextFormatting.RESET); - combineItems(list, getInputs(pattern)); + combineItems(tooltip, getInputs(pattern)); - list.add(TextFormatting.YELLOW + I18n.format("misc.refinedstorage:pattern.outputs") + TextFormatting.RESET); + tooltip.add(TextFormatting.YELLOW + I18n.format("misc.refinedstorage:pattern.outputs") + TextFormatting.RESET); } - combineItems(list, getOutputs(pattern)); + combineItems(tooltip, getOutputs(pattern)); } } - private void combineItems(List lines, ItemStack... stacks) { + public static void combineItems(List tooltip, ItemStack... stacks) { Set combinedIndices = new HashSet(); for (int i = 0; i < stacks.length; ++i) { - if (!combinedIndices.contains(i)) { + if (stacks[i] != null && !combinedIndices.contains(i)) { String data = stacks[i].getDisplayName(); int amount = stacks[i].stackSize; @@ -65,7 +65,7 @@ public class ItemPattern extends ItemBase { data += " (" + amount + "x)"; } - lines.add(data); + tooltip.add(data); } } } diff --git a/src/main/java/refinedstorage/item/ItemStorageDisk.java b/src/main/java/refinedstorage/item/ItemStorageDisk.java index 622fb1950..23ce83613 100755 --- a/src/main/java/refinedstorage/item/ItemStorageDisk.java +++ b/src/main/java/refinedstorage/item/ItemStorageDisk.java @@ -92,14 +92,14 @@ public class ItemStorageDisk extends ItemBase { } @Override - public void addInformation(ItemStack disk, EntityPlayer player, List list, boolean b) { + public void addInformation(ItemStack disk, EntityPlayer player, List tooltip, boolean advanced) { if (NBTStorage.isValid(disk)) { int capacity = EnumStorageType.getById(disk.getItemDamage()).getCapacity(); if (capacity == -1) { - list.add(I18n.format("misc.refinedstorage:storage.stored", NBTStorage.getStoredFromNBT(disk.getTagCompound()))); + tooltip.add(I18n.format("misc.refinedstorage:storage.stored", NBTStorage.getStoredFromNBT(disk.getTagCompound()))); } else { - list.add(I18n.format("misc.refinedstorage:storage.stored_capacity", NBTStorage.getStoredFromNBT(disk.getTagCompound()), capacity)); + tooltip.add(I18n.format("misc.refinedstorage:storage.stored_capacity", NBTStorage.getStoredFromNBT(disk.getTagCompound()), capacity)); } } } diff --git a/src/main/java/refinedstorage/item/ItemWirelessGrid.java b/src/main/java/refinedstorage/item/ItemWirelessGrid.java index 84d08bc0f..b4765380f 100755 --- a/src/main/java/refinedstorage/item/ItemWirelessGrid.java +++ b/src/main/java/refinedstorage/item/ItemWirelessGrid.java @@ -106,15 +106,15 @@ public class ItemWirelessGrid extends ItemEnergyContainer implements ISpecialEle } @Override - public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean b) { + public void addInformation(ItemStack stack, EntityPlayer player, List tooltip, boolean advanced) { if (stack.getItemDamage() != TYPE_CREATIVE) { - list.add(I18n.format("misc.refinedstorage:energy_stored", getEnergyStored(stack), getMaxEnergyStored(stack))); + tooltip.add(I18n.format("misc.refinedstorage:energy_stored", getEnergyStored(stack), getMaxEnergyStored(stack))); } if (hasValidNBT(stack)) { - list.add(I18n.format("misc.refinedstorage:wireless_grid.tooltip.0", getX(stack))); - list.add(I18n.format("misc.refinedstorage:wireless_grid.tooltip.1", getY(stack))); - list.add(I18n.format("misc.refinedstorage:wireless_grid.tooltip.2", getZ(stack))); + tooltip.add(I18n.format("misc.refinedstorage:wireless_grid.tooltip.0", getX(stack))); + tooltip.add(I18n.format("misc.refinedstorage:wireless_grid.tooltip.1", getY(stack))); + tooltip.add(I18n.format("misc.refinedstorage:wireless_grid.tooltip.2", getZ(stack))); } } From 462781658cb775c1e65317a51a159d83c72766b2 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sat, 30 Jul 2016 01:57:03 +0200 Subject: [PATCH 036/214] Add recipe for grid filter --- src/main/java/refinedstorage/proxy/CommonProxy.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/main/java/refinedstorage/proxy/CommonProxy.java b/src/main/java/refinedstorage/proxy/CommonProxy.java index 8d59052d3..4c783c579 100755 --- a/src/main/java/refinedstorage/proxy/CommonProxy.java +++ b/src/main/java/refinedstorage/proxy/CommonProxy.java @@ -467,6 +467,16 @@ public class CommonProxy { new ItemStack(RefinedStorageItems.PROCESSOR, 1, ItemProcessor.TYPE_BASIC), new ItemStack(RefinedStorageBlocks.EXPORTER) )); + + // Grid Filter + GameRegistry.addShapedRecipe(new ItemStack(RefinedStorageItems.GRID_FILTER), + "EPE", + "PHP", + "EPE", + 'E', new ItemStack(RefinedStorageItems.QUARTZ_ENRICHED_IRON), + 'P', new ItemStack(Items.PAPER), + 'H', new ItemStack(Blocks.HOPPER) + ); } public void init(FMLInitializationEvent e) { From 7652c83bf9eb7317890583ed788cb999f7278f3e Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sat, 30 Jul 2016 02:24:43 +0200 Subject: [PATCH 037/214] Slight texture tweaks --- .../textures/blocks/constructor.png | Bin 811 -> 736 bytes .../textures/blocks/destructor.png | Bin 712 -> 664 bytes .../refinedstorage/textures/items/pattern.png | Bin 474 -> 372 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/src/main/resources/assets/refinedstorage/textures/blocks/constructor.png b/src/main/resources/assets/refinedstorage/textures/blocks/constructor.png index 44719621a7f73d985cfd81029cd5e49543bb30a3..dfbc0090599ac318896cd3359d0caf6c40784221 100755 GIT binary patch delta 651 zcmV;60(AYW2H*vdJPN)501mzZ>O!%=kwz$gT}ebiR5(vXj#*C{VHAeH--E*@SgS^f zp@?>HAy(7&#;dm4DljXXLo^P|O28<1;rfTFF#7`7_Lub7Now-Un|IE4-g6GZ@$GD8 zb9FVpww7OC-^u4c@9ysH?Cfo9egxgx`h>sV#_@c1EuYP9uB>dJT<*i|^XtDyI*$!Hk<7jz#^=f?e%H*m)?)NAC z-ne%$y68Xmf!?HdIlcs4TFRhICU@?iciawW*XwruZpZJmy|&^is;^3}Bzv;rE11bFy92AN=5s4&GG@7hh)v{3rSe>OchBjb4L+Dgd zBM%3q?}H+6@KgZ8;b{bC)vY>qP%~>)qgvK06{|)YWx`+&hvbhT@$IR&KPZ8IeJsRc zvo9xc4i{vAidki#Tcb-FbMRQ)|JV2B=Me;eFgA@sp;#ys#jtodoWQUcECgV6B$5E& lU@QXlI2MYBu;|oOh002ovPDHLkV1f*~HLd^v delta 727 zcmV;|0x1391*-;-JPN-601m$aI0aKAkwz$gs7XXYR5(v1Q2%G+U>wfh(@Vdt-R-v7 zYI%P@)b9X=7&X|f&RU$$}goqFkA|gbDh!PPYqD)Px3RPpKO3kP#Q|CD6nEU1K zGsp8j-uLxihfk!^5+B{mc3J#o5`#(eWqXlatT252v+Sy}Dn2 zuU3zDcaM;RgOBcW*ZmTFRp% z&CIQ>GEyq-DtERzakQzcKXjCPOTM?%iK#v~(wzYb;=~ZfDnHVhfw*0IkHC^fhB(xP zp(Z3cKhWffCEc0gts#tbK2g|#!VYC-Ak%%JSX@USMIKx7ohjX#;z$RPIM#)KvCfZF zZm4iWl}lu{4{8yxzF9&xHg<$W11Zy!rCS61;K+{@Zls9NWUO&xg&oUGA~Jnp69x*a z>qNkjArGKqk%|N|=ILvmh*+vC5;4~fXxyW4k8B5QKEH;nu5L2dGJG6+qi{W00Lzg| z!9dKBJ&qkpR9_@}d@Ev`0a+-2yhC!iw?x2_AqU1p$dWNf#7sM6$SwzHM+~49(ZF~} zXEH@3n=RrNi8~bT{AU7lNX#Lc0o4rXE3O!%=kwz$g6-h)vR5(vfPup(VKos2Xaf~qmnh+Ea zqTFf{f>NTkFZs75CN>7_nBWWMl6$@fyt{@zb&RX3()j3{vomwXL{TmqwNA6yZMC{* zXT5Is*VWZ^uXlak`GItJ`RF>h*KdZhzmtzw_7E=vJ(d7} znxx0__vdG|rVtn>?Btofyr7}a&&dWOn#2WTwW^RxrMZ22VvEHNq}3`60*nA(F8N{s zu=zY%F1M={P%70(t=49<84rR85A!+meIN<~>blJHsN+PwzY78Y&FN{Cl*@JQdCYZD z@yr~DPN$LU0(?59lL@u$XgcMOk3gw^{FUH?U*Z}A*L?r41!SJL!{|5wEONO5!4-}q zL6B6WLOed3#V(NT&q9wpK%rPBCnptHZi66%$KD>^NQ{bj$&r63LXgcD_+-Lt`~MnR zR%n{swkewNIKpq(HnXfu=7{9;MQRw~V8BKrJ|45-5aU|Y;>~av>N+zFIv4ij!oG#D?-2GKWG!uhTGq0Nf<{P9Y}BaHsL@2DMss~8lbAenbMBe< zyziM2s#@&x1pNMBUS6=Epd=W)Us_sLQc_kJxXW2obWgoqtg1m@UeM7bh7xM5>o}9?z zW4XVty^2KKZdK&w`n3Vr*^$wx42R|RwmdqLySrKujs9L=|1>xEad!6g_;^l^M|eE> znjgk^06BYmnwpvcLf8i{>Toza+bvvwE-xOMG4`?8pN$QWo0}+puCD3{Ul$j@EG)d4 zn8>kU$2{PT8XQiS$jZva7+q>~lo|ZE0-22I%W!3w0Ve~t49BC+&WoNNxEdILc-Gek zFNTM?UJnjZpLKK`w6p+))tV_XGMq0*M)2dW;ejiD$)O>noCK20{FCnP(E}J#1|J&rU-F;D=(Ps%ovWQa>M5 zR2Yrvg0-+D6xfZ=z&_F18gFV|!U*YheLXc6yUooOOQyCGE#B!l;hLIAZEdK!nkML< zi<*SR@^Yh+E(`{X!C+PttI=pv6bpesw8>-x7FJC3t%|{FP|Rs*rho5+-g87?%OL;& N002ovPDHLkV1oGEH;(`S diff --git a/src/main/resources/assets/refinedstorage/textures/items/pattern.png b/src/main/resources/assets/refinedstorage/textures/items/pattern.png index e4c5d8ba0529791b0ecc4e2f02b6c88dea08dd1c..8d5627bcf798292327b799947f9ac9462e02d19a 100755 GIT binary patch delta 299 zcmV+`0o4B51M~urBnkm@Qb$4nuFf3kks%un!vFvd!vV){sAK>D02z@=8-Fn{tqKaj z0002wNkl)5nbtqP}jbC+b}um zCLKsXBlzQJAMorB6jgP0WqC68ZF9Fc0v&OoZS#+1+2&qMZsY)UlG--^{^rHA0t#$X xBvJmwizBFz$6|j6-1|K1;G5_Leh(MC0bU;CRjfAa1^@s607*qoLf5DI)v>M1jr!} zc>`R1rXC2qpw`kKdp!277< z>m;JnG}X$qPYgB-e|H4sa#z`Hd0;l1IeR{z>z(-^;#C|0JAnCkJmQqY;oxkO)9K_i z3-9+|Ii3l41y~VFB+!y>g%Mh<5$1&eC&{--_^$nE#?5umYz8_4vRp28R@(U@@NOJp@K*G=d8OI{?LEA@L#9>rX;aNAPz@;Rlsf V1ht6Y8qELz002ovPDHLkV1glpw0{5q From 4b172ae9af2706125c44e24f2460c064ba053865 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sat, 30 Jul 2016 02:28:44 +0200 Subject: [PATCH 038/214] Update icons --- .../assets/refinedstorage/textures/icons.png | Bin 3026 -> 2972 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/main/resources/assets/refinedstorage/textures/icons.png b/src/main/resources/assets/refinedstorage/textures/icons.png index 7cb5226bfd93293d1cbde6df38ee78a56fb4d071..9271cc5404ef15e0289e87c36ffcdf3bdf3ece9b 100755 GIT binary patch delta 2001 zcmcJPX*ipS7RTTB6&h--U|P4O#$YO1qn6s5)V{X8Q>{H{45mm`qg>nj_IB{7R#k@9 zPEkvV&=GNoM5l(C+-dClHdRUa3UX_zmotyhAFRvy)zqX)&T3A?DT3T9JSy@w4Q(Ie0rBdta z>WYi&Ygw&yI-SO1wzRagwY4?0w~0j0+S}VHG*F+i2pSS*0wj- z`CD6C+uPfGK7V(2S0E4wg+h@?M7ad*P_9BIs7%_cfY+8{Dxee-0A!h<{a!{bg@Dq5 zK}VZQZZU*U1&grabxiV?uDVs%>woI;dS-vKW&9f5a%4(0)TPsQgbGO%IT3x0xd$>IeVgG>oE# z>HLX#QZ{<0VNesm-S)gu04(ke9Pt^va^IZ>tZ}`w2ek1grjShqX0qAKW|HaPb7Ub9 z`^KKU{tXs?cOtUJ2qf+aHI((~YDc?$n*I^$%3e~9=hXvMsv%VG^hPcJY54S1JeEE9 zeeO~=u~stX{iTsEGv(=znBSu~^>e84+f7@Y9c|RU&&>duKjI(RowS)dx47yQnDJ93 zps81nxKL8(%sje-?N)X1TI}tqVS{JD6l~26RE&uJ`3&L(yhBSJ;YcAMCg61|5DakG zo|o9ZQ8e0Sv&I=1a7>fJ+Yud%Z-PW(nS?rCplviQ&NwiYxd4jEXSD7|triREW7BJj z(=z>j2i8l5ki;)F_hnMSxc!75u2_I#RR`Y)F~T8j^>B6+w?`zUIE~WxMKM8^rWo`V z2o|LxA;7P88iL7Xjaei-#JJl~vkW?O^?a$!$ zA8PHB>8%MXGioLmS+t#<66>e+jgGgZzzHTVetm+MwZsdbYMYSC7=3GWA88LCJ2jFG z%OCes?MFd$(!|3cwe0T#ucm?Cis%I%>k&?)#&?DH#KlL|T@gLpP=2q6mAd0pTX)XD zF+9vw-G3t}nthVVd|EYRcMAgZj0ev8lH;!}EvC9u8(UhUAY;;gwB-KK#K|0T_Rg%_Q-|JGl~h?AOz%Wm#om5{%ANMt4aj&VG&dkhqL3zQNfNl$UnjIhO@2`bjg& ztp$Fp!k^hrkeP=aTQWjeA&nUwGaofK(~7x9xorI(sL%$GSm%$ev1bhp+s}~)i zjU1YV867R-TY1w=rmgm4ycHC z?z|IT79@|nmmA;0d7ekdn3lZ0M*ae06&&0*Pl8h%B#KlZ8{o#N1Q;j+jNO1tWhH-; z9prk-nDY-Rh}=jcgK1LCiSNJ{JFvy+hXTcn10IodPT?|e{tS?V zOg+%_kEUrt5>M}NDqY^~ zE5nIjHKKKtIWz18rL+~}(|?E$CvpqzI@f*cY}tWTUIiY{bQu~(F}#V(4!(81{lFLScEM`;p1dXN+4 z?m(6IzUY_*XN%2L zE0GUE1zAdU2VyR+<-AQ$?>}PoSZJ^1JJ#9J;n*xa8j4t8WY-DB@T(G0mtp^Uzk_U? z)Uw=>ahbvP&%cq~f})i`e=+XNXGrzF_#4u{`1iMr{=b&i{NGJSn-Lv>nt79S`blZo Qi@;$x+FrJyTKWI`PfSXv>;M1& delta 2103 zcmcJMdo+}b8pgkG45Mt<LVKvM@1|YwRs@$u;E?Vi#K>--k*RBeqS^n357> zW>BJOX1<|RhfuVc3`r+c8069nX0~(rcb|3s+3$M)dDinjYyH;yRH?pErAva&>FMbf zu|<|~M5~j<*74VD5=v|nOC2)rJD#t1%4)zt6th>r0l3jQo9dE7!{^coSD3DaY_}rB zoyhSh?(iykTB-gwt!6iQ=bBb7>}(P)kAC#|imbT*U0U@)0X7K_DZvzs|A zvA7&T5Dtga(b3V_*;$$kVz+R)+;{KZjf{+xwt!f@g@uL1#l@wirRC-2m6es%)m4E& zAQTGM*Vi{THbf$kSS&78M6IJ6%vZBp93)i1tt5lv>{~ejz8dcHf;8$ zAl%Pit;<0Dg^sZc{%Ox1Rj(f;Ig~il*U9>HU*i^=BgdodmHkY(n$58?zWN>&$>J9y zL8OeS-WQACs-`xwCLE{QdrbLhy}U@Z9f#{L^dHVaG2L8fD)3R8_3g>}(MkO~TdZpf zVpalygL9Us6_hbKb{dL3KY>-bb~}E1Z>;Q8>>|2s(?I=9KRay^ut9{cWW=>Y9dvCK2BzO?0{- zX*hf0`7wKPOyyBLD!nxl^vK{g4a=Q9(_ZPIM9xsGWzGa9Kp2bBsY^t31?kR%a*Zpq z@T0l67-kWAm_+`Uo`V^$n&!_meU9dZ$Zozn<O@473JIC?a2 z5~@;Fgzpg0+MSwuJFmecOWWi| z@iP7lk6%$>;=Tsb#{9^FC(*%nv^gWK?p?6oZFA|^Mrf`^Ccwl=)RWS%y+4??^(GFP z`~5ASiNFQE#dq3WeZQB~lhT_ER|z5e zQ3ZCL4IHI;BO9rEOahdplXFKBWwztd>Eo7x>E3$U(q^fr;$9vZb>D;Qqsb1}68hLF zKjvi%(0)w`pfS>0jV*4ZQ0gi5x3LlE3W52`c<+gU^zR8L{BLj&9?Iw;Y*7fT0d!PV zb^_rd$>HcVYP~iVTMnn#h2E0%yQAKUGkT1&dyqX-Qn922iDhj->sh(B>k7q$@n})W zKfH>33W?#}$MtF6SAAX`r-RxEByqnd#-*m*KtHM1E3{Hgcn(|2boqEG{B{5u<$*QL zEgAoH>=>lvmGeIL>G*?3Jvx94CLeyquu9DAr}C!ilJh9OC`+$iwHk8||gN%uTadhsM@N_ zhOE%jXIE;ieJ;QgBVpo?mbtKMRDHukxr?`<`&1JFFHy_=!#8JG1ukDrnCSz}w^cGL*Jey6~3eUQ8WatR@zo1V=+fq3DTtn6&yE zcliix1yehw4lUCg-XFo(D*w+l;TmRh*QA8 Date: Sat, 30 Jul 2016 03:01:36 +0200 Subject: [PATCH 039/214] Added support for processing patterns with big stacksizes, fixes #219 --- CHANGELOG.md | 1 + .../ContainerProcessingPatternEncoder.java | 2 +- .../java/refinedstorage/tile/TileCrafter.java | 8 +++---- .../refinedstorage/tile/TileDestructor.java | 16 +++++++------- .../refinedstorage/tile/TileDetector.java | 18 +++++++-------- .../refinedstorage/tile/TileDiskDrive.java | 20 ++++++++--------- .../refinedstorage/tile/TileExporter.java | 14 ++++++------ .../refinedstorage/tile/TileImporter.java | 16 +++++++------- .../refinedstorage/tile/TileInterface.java | 16 +++++++------- .../java/refinedstorage/tile/TileNode.java | 8 +++---- .../tile/TileProcessingPatternEncoder.java | 19 +++++++++------- .../refinedstorage/tile/TileSolderer.java | 16 +++++++------- .../java/refinedstorage/tile/TileStorage.java | 22 +++++++++---------- .../tile/TileWirelessTransmitter.java | 6 ++--- .../externalstorage/TileExternalStorage.java | 18 +++++++-------- 15 files changed, 102 insertions(+), 98 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2f0da4503..e56aba6d0 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ **Features** - Added config option to set the base energy usage of the Controller (default is 0) - Added Grid Filter item to filter items in any Grid +- Added support for processing patterns with big stacksizes - Changed Relay recipe to use redstone torch instead of Basic Processor ### 0.8.12 diff --git a/src/main/java/refinedstorage/container/ContainerProcessingPatternEncoder.java b/src/main/java/refinedstorage/container/ContainerProcessingPatternEncoder.java index 9541dac20..c998c2bf8 100755 --- a/src/main/java/refinedstorage/container/ContainerProcessingPatternEncoder.java +++ b/src/main/java/refinedstorage/container/ContainerProcessingPatternEncoder.java @@ -20,7 +20,7 @@ public class ContainerProcessingPatternEncoder extends ContainerBase { int y = 20; for (int i = 0; i < 9 * 2; ++i) { - addSlotToContainer(new SlotSpecimen(processingPatternEncoder.getConfiguration(), i, x, y)); + addSlotToContainer(new SlotSpecimen(processingPatternEncoder.getConfiguration(), i, x, y, SlotSpecimen.SPECIMEN_SIZE)); x += 18; diff --git a/src/main/java/refinedstorage/tile/TileCrafter.java b/src/main/java/refinedstorage/tile/TileCrafter.java index b653fc29e..729c487f7 100755 --- a/src/main/java/refinedstorage/tile/TileCrafter.java +++ b/src/main/java/refinedstorage/tile/TileCrafter.java @@ -75,11 +75,11 @@ public class TileCrafter extends TileNode implements ICraftingPatternContainer { } @Override - public void read(NBTTagCompound nbt) { - super.read(nbt); + public void read(NBTTagCompound tag) { + super.read(tag); - readItems(patterns, 0, nbt); - readItems(upgrades, 1, nbt); + readItems(patterns, 0, tag); + readItems(upgrades, 1, tag); } @Override diff --git a/src/main/java/refinedstorage/tile/TileDestructor.java b/src/main/java/refinedstorage/tile/TileDestructor.java index f8964c15d..23fc6bf98 100755 --- a/src/main/java/refinedstorage/tile/TileDestructor.java +++ b/src/main/java/refinedstorage/tile/TileDestructor.java @@ -99,19 +99,19 @@ public class TileDestructor extends TileNode implements ICompareConfig, IModeCon } @Override - public void read(NBTTagCompound nbt) { - super.read(nbt); + public void read(NBTTagCompound tag) { + super.read(tag); - if (nbt.hasKey(NBT_COMPARE)) { - compare = nbt.getInteger(NBT_COMPARE); + if (tag.hasKey(NBT_COMPARE)) { + compare = tag.getInteger(NBT_COMPARE); } - if (nbt.hasKey(NBT_MODE)) { - mode = nbt.getInteger(NBT_MODE); + if (tag.hasKey(NBT_MODE)) { + mode = tag.getInteger(NBT_MODE); } - readItems(filters, 0, nbt); - readItems(upgrades, 1, nbt); + readItems(filters, 0, tag); + readItems(upgrades, 1, tag); } @Override diff --git a/src/main/java/refinedstorage/tile/TileDetector.java b/src/main/java/refinedstorage/tile/TileDetector.java index 3210397a5..b9ece57c2 100755 --- a/src/main/java/refinedstorage/tile/TileDetector.java +++ b/src/main/java/refinedstorage/tile/TileDetector.java @@ -133,22 +133,22 @@ public class TileDetector extends TileNode implements ICompareConfig { } @Override - public void read(NBTTagCompound nbt) { - super.read(nbt); + public void read(NBTTagCompound tag) { + super.read(tag); - if (nbt.hasKey(NBT_COMPARE)) { - compare = nbt.getInteger(NBT_COMPARE); + if (tag.hasKey(NBT_COMPARE)) { + compare = tag.getInteger(NBT_COMPARE); } - if (nbt.hasKey(NBT_MODE)) { - mode = nbt.getInteger(NBT_MODE); + if (tag.hasKey(NBT_MODE)) { + mode = tag.getInteger(NBT_MODE); } - if (nbt.hasKey(NBT_AMOUNT)) { - amount = nbt.getInteger(NBT_AMOUNT); + if (tag.hasKey(NBT_AMOUNT)) { + amount = tag.getInteger(NBT_AMOUNT); } - readItems(filter, 0, nbt); + readItems(filter, 0, tag); } @Override diff --git a/src/main/java/refinedstorage/tile/TileDiskDrive.java b/src/main/java/refinedstorage/tile/TileDiskDrive.java index 16ed93660..42ee7a690 100755 --- a/src/main/java/refinedstorage/tile/TileDiskDrive.java +++ b/src/main/java/refinedstorage/tile/TileDiskDrive.java @@ -153,22 +153,22 @@ public class TileDiskDrive extends TileNode implements IStorageProvider, IStorag } @Override - public void read(NBTTagCompound nbt) { - super.read(nbt); + public void read(NBTTagCompound tag) { + super.read(tag); - readItems(disks, 0, nbt); - readItems(filters, 1, nbt); + readItems(disks, 0, tag); + readItems(filters, 1, tag); - if (nbt.hasKey(NBT_PRIORITY)) { - priority = nbt.getInteger(NBT_PRIORITY); + if (tag.hasKey(NBT_PRIORITY)) { + priority = tag.getInteger(NBT_PRIORITY); } - if (nbt.hasKey(NBT_COMPARE)) { - compare = nbt.getInteger(NBT_COMPARE); + if (tag.hasKey(NBT_COMPARE)) { + compare = tag.getInteger(NBT_COMPARE); } - if (nbt.hasKey(NBT_MODE)) { - mode = nbt.getInteger(NBT_MODE); + if (tag.hasKey(NBT_MODE)) { + mode = tag.getInteger(NBT_MODE); } } diff --git a/src/main/java/refinedstorage/tile/TileExporter.java b/src/main/java/refinedstorage/tile/TileExporter.java index b2e035cfb..7c84f5f5d 100755 --- a/src/main/java/refinedstorage/tile/TileExporter.java +++ b/src/main/java/refinedstorage/tile/TileExporter.java @@ -76,17 +76,17 @@ public class TileExporter extends TileNode implements ICompareConfig { } @Override - public void read(NBTTagCompound nbt) { - super.read(nbt); + public void read(NBTTagCompound tag) { + super.read(tag); - if (nbt.hasKey(NBT_COMPARE)) { - compare = nbt.getInteger(NBT_COMPARE); + if (tag.hasKey(NBT_COMPARE)) { + compare = tag.getInteger(NBT_COMPARE); } - readItems(filters, 0, nbt); - readItems(upgrades, 1, nbt); + readItems(filters, 0, tag); + readItems(upgrades, 1, tag); - scheduler.read(nbt); + scheduler.read(tag); } @Override diff --git a/src/main/java/refinedstorage/tile/TileImporter.java b/src/main/java/refinedstorage/tile/TileImporter.java index 114ecb758..6a23c3462 100755 --- a/src/main/java/refinedstorage/tile/TileImporter.java +++ b/src/main/java/refinedstorage/tile/TileImporter.java @@ -93,19 +93,19 @@ public class TileImporter extends TileNode implements ICompareConfig, IModeConfi } @Override - public void read(NBTTagCompound nbt) { - super.read(nbt); + public void read(NBTTagCompound tag) { + super.read(tag); - if (nbt.hasKey(NBT_COMPARE)) { - compare = nbt.getInteger(NBT_COMPARE); + if (tag.hasKey(NBT_COMPARE)) { + compare = tag.getInteger(NBT_COMPARE); } - if (nbt.hasKey(NBT_MODE)) { - mode = nbt.getInteger(NBT_MODE); + if (tag.hasKey(NBT_MODE)) { + mode = tag.getInteger(NBT_MODE); } - readItems(filters, 0, nbt); - readItems(upgrades, 1, nbt); + readItems(filters, 0, tag); + readItems(upgrades, 1, tag); } @Override diff --git a/src/main/java/refinedstorage/tile/TileInterface.java b/src/main/java/refinedstorage/tile/TileInterface.java index b07bdec97..228044364 100755 --- a/src/main/java/refinedstorage/tile/TileInterface.java +++ b/src/main/java/refinedstorage/tile/TileInterface.java @@ -104,16 +104,16 @@ public class TileInterface extends TileNode implements ICompareConfig { } @Override - public void read(NBTTagCompound nbt) { - super.read(nbt); + public void read(NBTTagCompound tag) { + super.read(tag); - readItems(importItems, 0, nbt); - readItems(exportSpecimenItems, 1, nbt); - readItems(exportItems, 2, nbt); - readItems(upgrades, 3, nbt); + readItems(importItems, 0, tag); + readItems(exportSpecimenItems, 1, tag); + readItems(exportItems, 2, tag); + readItems(upgrades, 3, tag); - if (nbt.hasKey(NBT_COMPARE)) { - compare = nbt.getInteger(NBT_COMPARE); + if (tag.hasKey(NBT_COMPARE)) { + compare = tag.getInteger(NBT_COMPARE); } } diff --git a/src/main/java/refinedstorage/tile/TileNode.java b/src/main/java/refinedstorage/tile/TileNode.java index 2e9504ae6..b0454af04 100755 --- a/src/main/java/refinedstorage/tile/TileNode.java +++ b/src/main/java/refinedstorage/tile/TileNode.java @@ -126,11 +126,11 @@ public abstract class TileNode extends TileBase implements INetworkNode, ISynchr } @Override - public void read(NBTTagCompound nbt) { - super.read(nbt); + public void read(NBTTagCompound tag) { + super.read(tag); - if (nbt.hasKey(RedstoneMode.NBT)) { - redstoneMode = RedstoneMode.getById(nbt.getInteger(RedstoneMode.NBT)); + if (tag.hasKey(RedstoneMode.NBT)) { + redstoneMode = RedstoneMode.getById(tag.getInteger(RedstoneMode.NBT)); } } diff --git a/src/main/java/refinedstorage/tile/TileProcessingPatternEncoder.java b/src/main/java/refinedstorage/tile/TileProcessingPatternEncoder.java index cbc9b1e13..2a90c6dd1 100755 --- a/src/main/java/refinedstorage/tile/TileProcessingPatternEncoder.java +++ b/src/main/java/refinedstorage/tile/TileProcessingPatternEncoder.java @@ -6,6 +6,7 @@ import net.minecraft.util.EnumFacing; import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; +import net.minecraftforge.items.ItemHandlerHelper; import refinedstorage.RefinedStorageItems; import refinedstorage.inventory.ItemHandlerBasic; import refinedstorage.inventory.ItemValidatorBasic; @@ -26,11 +27,11 @@ public class TileProcessingPatternEncoder extends TileBase { } @Override - public void read(NBTTagCompound nbt) { - super.read(nbt); + public void read(NBTTagCompound tag) { + super.read(tag); - readItems(patterns, 0, nbt); - readItems(configuration, 1, nbt); + readItems(patterns, 0, tag); + readItems(configuration, 1, tag); } public void onCreatePattern() { @@ -41,10 +42,12 @@ public class TileProcessingPatternEncoder extends TileBase { for (int i = 0; i < 18; ++i) { if (configuration.getStackInSlot(i) != null) { - if (i >= 9) { - ItemPattern.addOutput(pattern, configuration.getStackInSlot(i)); - } else { - ItemPattern.addInput(pattern, configuration.getStackInSlot(i)); + for (int j = 0; j < configuration.getStackInSlot(i).stackSize; ++j) { + if (i >= 9) { + ItemPattern.addOutput(pattern, ItemHandlerHelper.copyStackWithSize(configuration.getStackInSlot(i), 1)); + } else { + ItemPattern.addInput(pattern, ItemHandlerHelper.copyStackWithSize(configuration.getStackInSlot(i), 1)); + } } } } diff --git a/src/main/java/refinedstorage/tile/TileSolderer.java b/src/main/java/refinedstorage/tile/TileSolderer.java index 7312ff6bb..9f21c2ba2 100755 --- a/src/main/java/refinedstorage/tile/TileSolderer.java +++ b/src/main/java/refinedstorage/tile/TileSolderer.java @@ -107,20 +107,20 @@ public class TileSolderer extends TileNode { } @Override - public void read(NBTTagCompound nbt) { - super.read(nbt); + public void read(NBTTagCompound tag) { + super.read(tag); - readItems(items, 0, nbt); - readItems(upgrades, 1, nbt); + readItems(items, 0, tag); + readItems(upgrades, 1, tag); recipe = RefinedStorageAPI.SOLDERER_REGISTRY.getRecipe(items); - if (nbt.hasKey(NBT_WORKING)) { - working = nbt.getBoolean(NBT_WORKING); + if (tag.hasKey(NBT_WORKING)) { + working = tag.getBoolean(NBT_WORKING); } - if (nbt.hasKey(NBT_PROGRESS)) { - progress = nbt.getInteger(NBT_PROGRESS); + if (tag.hasKey(NBT_PROGRESS)) { + progress = tag.getInteger(NBT_PROGRESS); } } diff --git a/src/main/java/refinedstorage/tile/TileStorage.java b/src/main/java/refinedstorage/tile/TileStorage.java index aaa420c20..aa31fd033 100755 --- a/src/main/java/refinedstorage/tile/TileStorage.java +++ b/src/main/java/refinedstorage/tile/TileStorage.java @@ -104,25 +104,25 @@ public class TileStorage extends TileNode implements IStorageProvider, IStorageG } @Override - public void read(NBTTagCompound nbt) { - super.read(nbt); + public void read(NBTTagCompound tag) { + super.read(tag); - readItems(filters, 0, nbt); + readItems(filters, 0, tag); - if (nbt.hasKey(NBT_PRIORITY)) { - priority = nbt.getInteger(NBT_PRIORITY); + if (tag.hasKey(NBT_PRIORITY)) { + priority = tag.getInteger(NBT_PRIORITY); } - if (nbt.hasKey(NBT_STORAGE)) { - storageTag = nbt.getCompoundTag(NBT_STORAGE); + if (tag.hasKey(NBT_STORAGE)) { + storageTag = tag.getCompoundTag(NBT_STORAGE); } - if (nbt.hasKey(NBT_COMPARE)) { - compare = nbt.getInteger(NBT_COMPARE); + if (tag.hasKey(NBT_COMPARE)) { + compare = tag.getInteger(NBT_COMPARE); } - if (nbt.hasKey(NBT_MODE)) { - mode = nbt.getInteger(NBT_MODE); + if (tag.hasKey(NBT_MODE)) { + mode = tag.getInteger(NBT_MODE); } } diff --git a/src/main/java/refinedstorage/tile/TileWirelessTransmitter.java b/src/main/java/refinedstorage/tile/TileWirelessTransmitter.java index 499c1d694..2f487a7bd 100755 --- a/src/main/java/refinedstorage/tile/TileWirelessTransmitter.java +++ b/src/main/java/refinedstorage/tile/TileWirelessTransmitter.java @@ -27,10 +27,10 @@ public class TileWirelessTransmitter extends TileNode implements IWirelessTransm } @Override - public void read(NBTTagCompound nbt) { - super.read(nbt); + public void read(NBTTagCompound tag) { + super.read(tag); - readItems(upgrades, 0, nbt); + readItems(upgrades, 0, tag); } @Override diff --git a/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java b/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java index bd42ae53e..e553528e0 100755 --- a/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java +++ b/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java @@ -115,21 +115,21 @@ public class TileExternalStorage extends TileNode implements IStorageProvider, I } @Override - public void read(NBTTagCompound nbt) { - super.read(nbt); + public void read(NBTTagCompound tag) { + super.read(tag); - readItems(filters, 0, nbt); + readItems(filters, 0, tag); - if (nbt.hasKey(NBT_PRIORITY)) { - priority = nbt.getInteger(NBT_PRIORITY); + if (tag.hasKey(NBT_PRIORITY)) { + priority = tag.getInteger(NBT_PRIORITY); } - if (nbt.hasKey(NBT_COMPARE)) { - compare = nbt.getInteger(NBT_COMPARE); + if (tag.hasKey(NBT_COMPARE)) { + compare = tag.getInteger(NBT_COMPARE); } - if (nbt.hasKey(NBT_MODE)) { - mode = nbt.getInteger(NBT_MODE); + if (tag.hasKey(NBT_MODE)) { + mode = tag.getInteger(NBT_MODE); } } From d157bdc8b1853659a6323e46d10e443206e72f4f Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sat, 30 Jul 2016 13:29:29 +0200 Subject: [PATCH 040/214] Update changelog --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e56aba6d0..73c7d3fd6 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,8 +11,11 @@ - Added config option to set the base energy usage of the Controller (default is 0) - Added Grid Filter item to filter items in any Grid - Added support for processing patterns with big stacksizes +- The slot where the Wireless Grid is in in the Wireless Grid GUI is now disabled, so the item can't be thrown out of the inventory by accident - Changed Relay recipe to use redstone torch instead of Basic Processor +**NOTE:** Config change: the config options for the energy capacity of the Controller and wether the Controller uses energy are now in a different config category called "controller", if you changed these config options, don't forget the change it under the new category. + ### 0.8.12 **Bugfixes** - Fixed dupe bug when shift clicking output slot in grid From e1293733b5563c93c419e512464e6928e99ab3f3 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sat, 30 Jul 2016 13:31:04 +0200 Subject: [PATCH 041/214] Rename config key because of BC break --- src/main/java/refinedstorage/RefinedStorage.java | 4 ++-- .../java/refinedstorage/tile/controller/TileController.java | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/refinedstorage/RefinedStorage.java b/src/main/java/refinedstorage/RefinedStorage.java index b3be3f541..283812bb9 100755 --- a/src/main/java/refinedstorage/RefinedStorage.java +++ b/src/main/java/refinedstorage/RefinedStorage.java @@ -47,7 +47,7 @@ public final class RefinedStorage { public List items = new ArrayList(); - public int controllerUsage; + public int controllerBaseUsage; public int cableUsage; public int constructorUsage; public int crafterUsage; @@ -87,7 +87,7 @@ public final class RefinedStorage { Configuration config = new Configuration(e.getSuggestedConfigurationFile()); - controllerUsage = config.getInt("controller", "energy", 0, 0, Integer.MAX_VALUE, "The base energy used by the Controller"); + controllerBaseUsage = config.getInt("controllerBase", "energy", 0, 0, Integer.MAX_VALUE, "The base energy used by the Controller"); cableUsage = config.getInt("cable", "energy", 0, 0, Integer.MAX_VALUE, "The energy used by Cables"); constructorUsage = config.getInt("constructor", "energy", 1, 0, Integer.MAX_VALUE, "The energy used by Constructors"); crafterUsage = config.getInt("crafter", "energy", 2, 0, Integer.MAX_VALUE, "The base energy used by Crafters"); diff --git a/src/main/java/refinedstorage/tile/controller/TileController.java b/src/main/java/refinedstorage/tile/controller/TileController.java index 9c815c5af..a605165be 100755 --- a/src/main/java/refinedstorage/tile/controller/TileController.java +++ b/src/main/java/refinedstorage/tile/controller/TileController.java @@ -696,7 +696,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR @Override public int getEnergyUsage() { if (!worldObj.isRemote) { - int usage = RefinedStorage.INSTANCE.controllerUsage; + int usage = RefinedStorage.INSTANCE.controllerBaseUsage; for (INetworkNode node : nodes) { if (node.canUpdate()) { From 955ee43b255ffb3a81a08e7acfa2975e950082e5 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sat, 30 Jul 2016 13:59:09 +0200 Subject: [PATCH 042/214] Placed machines now face the block they are placed on, like hoppers, fixes #231 --- CHANGELOG.md | 1 + src/main/java/refinedstorage/block/BlockBase.java | 13 ++++++++++++- .../refinedstorage/block/EnumPlacementType.java | 8 ++------ 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 73c7d3fd6..d66aa7af1 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ - Added support for processing patterns with big stacksizes - The slot where the Wireless Grid is in in the Wireless Grid GUI is now disabled, so the item can't be thrown out of the inventory by accident - Changed Relay recipe to use redstone torch instead of Basic Processor +- Placed machines now face the block they are placed on, like hoppers **NOTE:** Config change: the config options for the energy capacity of the Controller and wether the Controller uses energy are now in a different config category called "controller", if you changed these config options, don't forget the change it under the new category. diff --git a/src/main/java/refinedstorage/block/BlockBase.java b/src/main/java/refinedstorage/block/BlockBase.java index 07238e5b8..84708da07 100755 --- a/src/main/java/refinedstorage/block/BlockBase.java +++ b/src/main/java/refinedstorage/block/BlockBase.java @@ -98,12 +98,23 @@ public abstract class BlockBase extends Block { return false; } + @Override + public IBlockState onBlockPlaced(World world, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase entity) { + IBlockState state = super.onBlockPlaced(world, pos, facing, hitX, hitY, hitZ, meta, entity); + + if (getPlacementType() != null) { + return state.withProperty(DIRECTION, getPlacementType().getFrom(facing, entity)); + } + + return state; + } + @Override public void onBlockPlacedBy(World world, BlockPos pos, IBlockState state, EntityLivingBase player, ItemStack stack) { super.onBlockPlacedBy(world, pos, state, player, stack); if (getPlacementType() != null) { - ((TileBase) world.getTileEntity(pos)).setDirection(getPlacementType().getFrom(pos, player)); + ((TileBase) world.getTileEntity(pos)).setDirection(state.getValue(DIRECTION)); } } diff --git a/src/main/java/refinedstorage/block/EnumPlacementType.java b/src/main/java/refinedstorage/block/EnumPlacementType.java index 5d61a53d5..b95a51f47 100755 --- a/src/main/java/refinedstorage/block/EnumPlacementType.java +++ b/src/main/java/refinedstorage/block/EnumPlacementType.java @@ -1,9 +1,7 @@ package refinedstorage.block; -import net.minecraft.block.BlockPistonBase; import net.minecraft.entity.EntityLivingBase; import net.minecraft.util.EnumFacing; -import net.minecraft.util.math.BlockPos; public enum EnumPlacementType { ANY( @@ -22,12 +20,10 @@ public enum EnumPlacementType { this.allowed = allowed; } - EnumFacing getFrom(BlockPos pos, EntityLivingBase entity) { + EnumFacing getFrom(EnumFacing facing, EntityLivingBase entity) { switch (this) { case ANY: - EnumFacing facing = BlockPistonBase.getFacingFromEntity(pos, entity); - - return entity.isSneaking() ? facing.getOpposite() : facing; + return facing.getOpposite(); case HORIZONTAL: return entity.getHorizontalFacing().getOpposite(); default: From b814273b1155ada334e77b50d9a4e25ce955f4f4 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sat, 30 Jul 2016 21:59:29 +0200 Subject: [PATCH 043/214] Network Receiver/Network Transmitter/Network Card boilerplate --- .../refinedstorage/RefinedStorageBlocks.java | 2 ++ .../refinedstorage/RefinedStorageItems.java | 1 + .../block/BlockNetworkReceiver.java | 17 +++++++++++++++++ .../block/BlockNetworkTransmitter.java | 17 +++++++++++++++++ .../refinedstorage/item/ItemNetworkCard.java | 7 +++++++ .../refinedstorage/proxy/CommonProxy.java | 5 +++++ .../tile/TileNetworkReceiver.java | 19 +++++++++++++++++++ .../tile/TileNetworkTransmitter.java | 19 +++++++++++++++++++ .../assets/refinedstorage/lang/en_US.lang | 5 ++++- .../assets/refinedstorage/lang/nl_NL.lang | 5 ++++- 10 files changed, 95 insertions(+), 2 deletions(-) create mode 100755 src/main/java/refinedstorage/block/BlockNetworkReceiver.java create mode 100755 src/main/java/refinedstorage/block/BlockNetworkTransmitter.java create mode 100755 src/main/java/refinedstorage/item/ItemNetworkCard.java create mode 100755 src/main/java/refinedstorage/tile/TileNetworkReceiver.java create mode 100755 src/main/java/refinedstorage/tile/TileNetworkTransmitter.java diff --git a/src/main/java/refinedstorage/RefinedStorageBlocks.java b/src/main/java/refinedstorage/RefinedStorageBlocks.java index d9f376622..48eeb0b85 100755 --- a/src/main/java/refinedstorage/RefinedStorageBlocks.java +++ b/src/main/java/refinedstorage/RefinedStorageBlocks.java @@ -22,4 +22,6 @@ public final class RefinedStorageBlocks { public static final BlockWirelessTransmitter WIRELESS_TRANSMITTER = new BlockWirelessTransmitter(); public static final BlockCrafter CRAFTER = new BlockCrafter(); public static final BlockProcessingPatternEncoder PROCESSING_PATTERN_ENCODER = new BlockProcessingPatternEncoder(); + public static final BlockNetworkTransmitter NETWORK_TRANSMITTER = new BlockNetworkTransmitter(); + public static final BlockNetworkReceiver NETWORK_RECEIVER = new BlockNetworkReceiver(); } diff --git a/src/main/java/refinedstorage/RefinedStorageItems.java b/src/main/java/refinedstorage/RefinedStorageItems.java index 8ea4c3810..a797b8eea 100755 --- a/src/main/java/refinedstorage/RefinedStorageItems.java +++ b/src/main/java/refinedstorage/RefinedStorageItems.java @@ -14,4 +14,5 @@ public final class RefinedStorageItems { public static final ItemUpgrade UPGRADE = new ItemUpgrade(); public static final ItemStorageHousing STORAGE_HOUSING = new ItemStorageHousing(); public static final ItemGridFilter GRID_FILTER = new ItemGridFilter(); + public static final ItemNetworkCard NETWORK_CARD = new ItemNetworkCard(); } diff --git a/src/main/java/refinedstorage/block/BlockNetworkReceiver.java b/src/main/java/refinedstorage/block/BlockNetworkReceiver.java new file mode 100755 index 000000000..28f29b7a9 --- /dev/null +++ b/src/main/java/refinedstorage/block/BlockNetworkReceiver.java @@ -0,0 +1,17 @@ +package refinedstorage.block; + +import net.minecraft.block.state.IBlockState; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; +import refinedstorage.tile.TileNetworkReceiver; + +public class BlockNetworkReceiver extends BlockBase { + public BlockNetworkReceiver() { + super("network_receiver"); + } + + @Override + public TileEntity createTileEntity(World world, IBlockState state) { + return new TileNetworkReceiver(); + } +} diff --git a/src/main/java/refinedstorage/block/BlockNetworkTransmitter.java b/src/main/java/refinedstorage/block/BlockNetworkTransmitter.java new file mode 100755 index 000000000..dd0ed92a4 --- /dev/null +++ b/src/main/java/refinedstorage/block/BlockNetworkTransmitter.java @@ -0,0 +1,17 @@ +package refinedstorage.block; + +import net.minecraft.block.state.IBlockState; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; +import refinedstorage.tile.TileNetworkTransmitter; + +public class BlockNetworkTransmitter extends BlockNode { + public BlockNetworkTransmitter() { + super("network_transmitter"); + } + + @Override + public TileEntity createTileEntity(World world, IBlockState state) { + return new TileNetworkTransmitter(); + } +} diff --git a/src/main/java/refinedstorage/item/ItemNetworkCard.java b/src/main/java/refinedstorage/item/ItemNetworkCard.java new file mode 100755 index 000000000..1df70d1d9 --- /dev/null +++ b/src/main/java/refinedstorage/item/ItemNetworkCard.java @@ -0,0 +1,7 @@ +package refinedstorage.item; + +public class ItemNetworkCard extends ItemBase { + public ItemNetworkCard() { + super("network_card"); + } +} diff --git a/src/main/java/refinedstorage/proxy/CommonProxy.java b/src/main/java/refinedstorage/proxy/CommonProxy.java index 4c783c579..8fcfb9667 100755 --- a/src/main/java/refinedstorage/proxy/CommonProxy.java +++ b/src/main/java/refinedstorage/proxy/CommonProxy.java @@ -79,6 +79,8 @@ public class CommonProxy { GameRegistry.registerTileEntity(TileCrafter.class, ID + ":crafter"); GameRegistry.registerTileEntity(TileProcessingPatternEncoder.class, ID + ":processing_pattern_encoder"); GameRegistry.registerTileEntity(TileCable.class, ID + ":cable"); + GameRegistry.registerTileEntity(TileNetworkReceiver.class, ID + ":network_receiver"); + GameRegistry.registerTileEntity(TileNetworkTransmitter.class, ID + ":network_transmitter"); registerBlock(RefinedStorageBlocks.CONTROLLER); registerBlock(RefinedStorageBlocks.GRID); @@ -99,6 +101,8 @@ public class CommonProxy { registerBlock(RefinedStorageBlocks.INTERFACE); registerBlock(RefinedStorageBlocks.WIRELESS_TRANSMITTER); registerBlock(RefinedStorageBlocks.MACHINE_CASING); + registerBlock(RefinedStorageBlocks.NETWORK_TRANSMITTER); + registerBlock(RefinedStorageBlocks.NETWORK_RECEIVER); registerItem(RefinedStorageItems.QUARTZ_ENRICHED_IRON); registerItem(RefinedStorageItems.STORAGE_DISK); @@ -111,6 +115,7 @@ public class CommonProxy { registerItem(RefinedStorageItems.SILICON); registerItem(RefinedStorageItems.UPGRADE); registerItem(RefinedStorageItems.GRID_FILTER); + registerItem(RefinedStorageItems.NETWORK_CARD); OreDictionary.registerOre("itemSilicon", RefinedStorageItems.SILICON); diff --git a/src/main/java/refinedstorage/tile/TileNetworkReceiver.java b/src/main/java/refinedstorage/tile/TileNetworkReceiver.java new file mode 100755 index 000000000..4bb2c2390 --- /dev/null +++ b/src/main/java/refinedstorage/tile/TileNetworkReceiver.java @@ -0,0 +1,19 @@ +package refinedstorage.tile; + +import net.minecraft.inventory.Container; + +public class TileNetworkReceiver extends TileNode { + @Override + public void updateNode() { + } + + @Override + public int getEnergyUsage() { + return 0; + } + + @Override + public Class getContainer() { + return null; + } +} diff --git a/src/main/java/refinedstorage/tile/TileNetworkTransmitter.java b/src/main/java/refinedstorage/tile/TileNetworkTransmitter.java new file mode 100755 index 000000000..249923197 --- /dev/null +++ b/src/main/java/refinedstorage/tile/TileNetworkTransmitter.java @@ -0,0 +1,19 @@ +package refinedstorage.tile; + +import net.minecraft.inventory.Container; + +public class TileNetworkTransmitter extends TileNode { + @Override + public void updateNode() { + } + + @Override + public int getEnergyUsage() { + return 0; + } + + @Override + public Class getContainer() { + return null; + } +} diff --git a/src/main/resources/assets/refinedstorage/lang/en_US.lang b/src/main/resources/assets/refinedstorage/lang/en_US.lang index 968ae2a51..e39b67f73 100755 --- a/src/main/resources/assets/refinedstorage/lang/en_US.lang +++ b/src/main/resources/assets/refinedstorage/lang/en_US.lang @@ -115,6 +115,8 @@ block.refinedstorage:crafting_monitor.name=Crafting Monitor block.refinedstorage:wireless_transmitter.name=Wireless Transmitter block.refinedstorage:crafter.name=Crafter block.refinedstorage:processing_pattern_encoder.name=Processing Pattern Encoder +block.refinedstorage:network_receiver.name=Wireless Receiver +block.refinedstorage:network_transmitter.name=Wireless Transmitter item.refinedstorage:storage_disk.0.name=1k Storage Disk item.refinedstorage:storage_disk.1.name=4k Storage Disk @@ -146,4 +148,5 @@ item.refinedstorage:upgrade.2.name=Speed Upgrade item.refinedstorage:upgrade.3.name=Crafting Upgrade item.refinedstorage:upgrade.4.name=Stack Upgrade item.refinedstorage:storage_housing.name=Storage Housing -item.refinedstorage:grid_filter.name=Grid Filter \ No newline at end of file +item.refinedstorage:grid_filter.name=Grid Filter +item.refinedstorage:network_card.name=Network Card \ No newline at end of file diff --git a/src/main/resources/assets/refinedstorage/lang/nl_NL.lang b/src/main/resources/assets/refinedstorage/lang/nl_NL.lang index 23c96624d..a86588188 100755 --- a/src/main/resources/assets/refinedstorage/lang/nl_NL.lang +++ b/src/main/resources/assets/refinedstorage/lang/nl_NL.lang @@ -115,6 +115,8 @@ block.refinedstorage:crafting_monitor.name=Crafting Monitor block.refinedstorage:wireless_transmitter.name=Draadloze Zender block.refinedstorage:crafter.name=Crafter block.refinedstorage:processing_pattern_encoder.name=Verwerkingspatroon Codeerder +block.refinedstorage:network_receiver.name=Draadloze Networkontvanger +block.refinedstorage:network_transmitter.name=Draadloze Netwerkzender item.refinedstorage:storage_disk.0.name=1k Opslagschijf item.refinedstorage:storage_disk.1.name=4k Opslagschijf @@ -146,4 +148,5 @@ item.refinedstorage:upgrade.2.name=Snelheid Upgrade item.refinedstorage:upgrade.3.name=Crafting Upgrade item.refinedstorage:upgrade.4.name=Stack Upgrade item.refinedstorage:storage_housing.name=Opslagomhulsel -item.refinedstorage:grid_filter.name=Rooster Filter \ No newline at end of file +item.refinedstorage:grid_filter.name=Rooster Filter +item.refinedstorage:network_card.name=Netwerk Kaart \ No newline at end of file From ae80ef0fbbaaa6e8424a1bba7d86bcc53beb1a6a Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sat, 30 Jul 2016 22:51:18 +0200 Subject: [PATCH 044/214] Implement network transmitter GUI and network card logic --- .../refinedstorage/RefinedStorageGui.java | 1 + .../block/BlockNetworkReceiver.java | 2 +- .../block/BlockNetworkTransmitter.java | 16 ++++ .../ContainerNetworkTransmitter.java | 16 ++++ .../java/refinedstorage/gui/GuiHandler.java | 4 + .../gui/GuiNetworkTransmitter.java | 47 ++++++++++ .../refinedstorage/item/ItemNetworkCard.java | 62 +++++++++++++ .../tile/TileNetworkTransmitter.java | 89 ++++++++++++++++++- .../assets/refinedstorage/lang/en_US.lang | 11 ++- .../assets/refinedstorage/lang/nl_NL.lang | 11 ++- 10 files changed, 253 insertions(+), 6 deletions(-) create mode 100755 src/main/java/refinedstorage/container/ContainerNetworkTransmitter.java create mode 100755 src/main/java/refinedstorage/gui/GuiNetworkTransmitter.java diff --git a/src/main/java/refinedstorage/RefinedStorageGui.java b/src/main/java/refinedstorage/RefinedStorageGui.java index e07961b75..6fb65a6cc 100755 --- a/src/main/java/refinedstorage/RefinedStorageGui.java +++ b/src/main/java/refinedstorage/RefinedStorageGui.java @@ -19,4 +19,5 @@ public final class RefinedStorageGui { public static final int CRAFTER = 15; public static final int PROCESSING_PATTERN_ENCODER = 16; public static final int GRID_FILTER = 17; + public static final int NETWORK_TRANSMITTER = 18; } diff --git a/src/main/java/refinedstorage/block/BlockNetworkReceiver.java b/src/main/java/refinedstorage/block/BlockNetworkReceiver.java index 28f29b7a9..3a0208f8c 100755 --- a/src/main/java/refinedstorage/block/BlockNetworkReceiver.java +++ b/src/main/java/refinedstorage/block/BlockNetworkReceiver.java @@ -5,7 +5,7 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; import refinedstorage.tile.TileNetworkReceiver; -public class BlockNetworkReceiver extends BlockBase { +public class BlockNetworkReceiver extends BlockNode { public BlockNetworkReceiver() { super("network_receiver"); } diff --git a/src/main/java/refinedstorage/block/BlockNetworkTransmitter.java b/src/main/java/refinedstorage/block/BlockNetworkTransmitter.java index dd0ed92a4..6dca66146 100755 --- a/src/main/java/refinedstorage/block/BlockNetworkTransmitter.java +++ b/src/main/java/refinedstorage/block/BlockNetworkTransmitter.java @@ -1,8 +1,15 @@ package refinedstorage.block; import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; +import refinedstorage.RefinedStorage; +import refinedstorage.RefinedStorageGui; import refinedstorage.tile.TileNetworkTransmitter; public class BlockNetworkTransmitter extends BlockNode { @@ -10,6 +17,15 @@ public class BlockNetworkTransmitter extends BlockNode { super("network_transmitter"); } + @Override + public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) { + if (!world.isRemote) { + player.openGui(RefinedStorage.INSTANCE, RefinedStorageGui.NETWORK_TRANSMITTER, world, pos.getX(), pos.getY(), pos.getZ()); + } + + return true; + } + @Override public TileEntity createTileEntity(World world, IBlockState state) { return new TileNetworkTransmitter(); diff --git a/src/main/java/refinedstorage/container/ContainerNetworkTransmitter.java b/src/main/java/refinedstorage/container/ContainerNetworkTransmitter.java new file mode 100755 index 000000000..d7d1d658e --- /dev/null +++ b/src/main/java/refinedstorage/container/ContainerNetworkTransmitter.java @@ -0,0 +1,16 @@ +package refinedstorage.container; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraftforge.items.SlotItemHandler; +import refinedstorage.tile.TileNetworkTransmitter; + +public class ContainerNetworkTransmitter extends ContainerBase { + public ContainerNetworkTransmitter(EntityPlayer player, TileNetworkTransmitter networkTransmitter) { + super(player); + + addSlotToContainer(new SlotItemHandler(networkTransmitter.getNetworkCard(), 0, 8, 20)); + addSlotToContainer(new SlotItemHandler(networkTransmitter.getUpgrade(), 0, 187, 6)); + + addPlayerInventory(8, 55); + } +} diff --git a/src/main/java/refinedstorage/gui/GuiHandler.java b/src/main/java/refinedstorage/gui/GuiHandler.java index 68160ebfe..be609c238 100755 --- a/src/main/java/refinedstorage/gui/GuiHandler.java +++ b/src/main/java/refinedstorage/gui/GuiHandler.java @@ -50,6 +50,8 @@ public class GuiHandler implements IGuiHandler { return new ContainerCrafter(player, (TileCrafter) tile); case RefinedStorageGui.PROCESSING_PATTERN_ENCODER: return new ContainerProcessingPatternEncoder(player, (TileProcessingPatternEncoder) tile); + case RefinedStorageGui.NETWORK_TRANSMITTER: + return new ContainerNetworkTransmitter(player, (TileNetworkTransmitter) tile); default: return null; } @@ -107,6 +109,8 @@ public class GuiHandler implements IGuiHandler { return new GuiProcessingPatternEncoder((ContainerProcessingPatternEncoder) getContainer(ID, player, tile), (TileProcessingPatternEncoder) tile); case RefinedStorageGui.GRID_FILTER: return new GuiGridFilter(getGridFilterContainer(player, x)); + case RefinedStorageGui.NETWORK_TRANSMITTER: + return new GuiNetworkTransmitter((ContainerNetworkTransmitter) getContainer(ID, player, tile), (TileNetworkTransmitter) tile); default: return null; } diff --git a/src/main/java/refinedstorage/gui/GuiNetworkTransmitter.java b/src/main/java/refinedstorage/gui/GuiNetworkTransmitter.java new file mode 100755 index 000000000..39296169b --- /dev/null +++ b/src/main/java/refinedstorage/gui/GuiNetworkTransmitter.java @@ -0,0 +1,47 @@ +package refinedstorage.gui; + +import refinedstorage.container.ContainerNetworkTransmitter; +import refinedstorage.gui.sidebutton.SideButtonRedstoneMode; +import refinedstorage.tile.TileNetworkTransmitter; + +public class GuiNetworkTransmitter extends GuiBase { + private TileNetworkTransmitter networkTransmitter; + + public GuiNetworkTransmitter(ContainerNetworkTransmitter container, TileNetworkTransmitter networkTransmitter) { + super(container, 211, 137); + + this.networkTransmitter = networkTransmitter; + } + + @Override + public void init(int x, int y) { + addSideButton(new SideButtonRedstoneMode(networkTransmitter)); + } + + @Override + public void update(int x, int y) { + } + + @Override + public void drawBackground(int x, int y, int mouseX, int mouseY) { + bindTexture("gui/network_transmitter.png"); + + drawTexture(x, y, 0, 0, width, height); + } + + @Override + public void drawForeground(int mouseX, int mouseY) { + drawString(7, 7, t("gui.refinedstorage:network_transmitter")); + + String distance; + + if (networkTransmitter.getReceiver() == null) { + distance = t("gui.refinedstorage:network_transmitter.distance_missing"); + } else { + distance = t("gui.refinedstorage:network_transmitter.distance", networkTransmitter.getDistance()); + } + + drawString(50, 24, distance); + drawString(7, 42, t("container.inventory")); + } +} \ No newline at end of file diff --git a/src/main/java/refinedstorage/item/ItemNetworkCard.java b/src/main/java/refinedstorage/item/ItemNetworkCard.java index 1df70d1d9..c6cb03038 100755 --- a/src/main/java/refinedstorage/item/ItemNetworkCard.java +++ b/src/main/java/refinedstorage/item/ItemNetworkCard.java @@ -1,7 +1,69 @@ package refinedstorage.item; +import net.minecraft.block.Block; +import net.minecraft.client.resources.I18n; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import refinedstorage.RefinedStorageBlocks; + +import java.util.List; + public class ItemNetworkCard extends ItemBase { + private static final String NBT_RECEIVER_X = "ReceiverX"; + private static final String NBT_RECEIVER_Y = "ReceiverY"; + private static final String NBT_RECEIVER_Z = "ReceiverZ"; + public ItemNetworkCard() { super("network_card"); } + + @Override + public EnumActionResult onItemUse(ItemStack stack, EntityPlayer player, World world, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) { + Block block = world.getBlockState(pos).getBlock(); + + if (block == RefinedStorageBlocks.NETWORK_RECEIVER) { + setReceiver(stack, pos); + + return EnumActionResult.SUCCESS; + } + + return EnumActionResult.PASS; + } + + @Override + public void addInformation(ItemStack stack, EntityPlayer player, List tooltip, boolean advanced) { + super.addInformation(stack, player, tooltip, advanced); + + BlockPos pos = getReceiver(stack); + + if (pos != null) { + tooltip.add(I18n.format("misc.refinedstorage:network_card.tooltip.0", pos.getX())); + tooltip.add(I18n.format("misc.refinedstorage:network_card.tooltip.1", pos.getY())); + tooltip.add(I18n.format("misc.refinedstorage:network_card.tooltip.2", pos.getZ())); + } + } + + public static BlockPos getReceiver(ItemStack stack) { + if (stack.hasTagCompound() && stack.getTagCompound().hasKey(NBT_RECEIVER_X) && stack.getTagCompound().hasKey(NBT_RECEIVER_Y) && stack.getTagCompound().hasKey(NBT_RECEIVER_Z)) { + return new BlockPos(stack.getTagCompound().getInteger(NBT_RECEIVER_X), stack.getTagCompound().getInteger(NBT_RECEIVER_Y), stack.getTagCompound().getInteger(NBT_RECEIVER_Z)); + } + + return null; + } + + public static void setReceiver(ItemStack stack, BlockPos pos) { + NBTTagCompound tag = new NBTTagCompound(); + + tag.setInteger(NBT_RECEIVER_X, pos.getX()); + tag.setInteger(NBT_RECEIVER_Y, pos.getY()); + tag.setInteger(NBT_RECEIVER_Z, pos.getZ()); + + stack.setTagCompound(tag); + } } diff --git a/src/main/java/refinedstorage/tile/TileNetworkTransmitter.java b/src/main/java/refinedstorage/tile/TileNetworkTransmitter.java index 249923197..8b7e3cc61 100755 --- a/src/main/java/refinedstorage/tile/TileNetworkTransmitter.java +++ b/src/main/java/refinedstorage/tile/TileNetworkTransmitter.java @@ -1,12 +1,79 @@ package refinedstorage.tile; +import io.netty.buffer.ByteBuf; import net.minecraft.inventory.Container; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.math.BlockPos; +import refinedstorage.RefinedStorageItems; +import refinedstorage.container.ContainerNetworkTransmitter; +import refinedstorage.inventory.ItemHandlerBasic; +import refinedstorage.inventory.ItemValidatorBasic; +import refinedstorage.item.ItemNetworkCard; public class TileNetworkTransmitter extends TileNode { + private ItemHandlerBasic networkCard = new ItemHandlerBasic(1, this, new ItemValidatorBasic(RefinedStorageItems.NETWORK_CARD)) { + @Override + protected void onContentsChanged(int slot) { + super.onContentsChanged(slot); + + ItemStack card = getStackInSlot(slot); + + if (card == null) { + receiver = null; + } else { + receiver = ItemNetworkCard.getReceiver(card); + } + } + }; + private ItemHandlerBasic upgrade = new ItemHandlerBasic(1, this); + + private BlockPos receiver; + @Override public void updateNode() { } + @Override + public NBTTagCompound write(NBTTagCompound tag) { + super.write(tag); + + writeItems(networkCard, 0, tag); + writeItems(upgrade, 1, tag); + + return tag; + } + + @Override + public void read(NBTTagCompound tag) { + super.read(tag); + + readItems(networkCard, 0, tag); + readItems(upgrade, 1, tag); + } + + @Override + public void writeContainerData(ByteBuf buf) { + super.writeContainerData(buf); + + buf.writeBoolean(receiver != null); + + if (receiver != null) { + buf.writeLong(receiver.toLong()); + } + } + + @Override + public void readContainerData(ByteBuf buf) { + super.readContainerData(buf); + + if (buf.readBoolean()) { + receiver = BlockPos.fromLong(buf.readLong()); + } else { + receiver = null; + } + } + @Override public int getEnergyUsage() { return 0; @@ -14,6 +81,26 @@ public class TileNetworkTransmitter extends TileNode { @Override public Class getContainer() { - return null; + return ContainerNetworkTransmitter.class; + } + + public ItemHandlerBasic getUpgrade() { + return upgrade; + } + + public ItemHandlerBasic getNetworkCard() { + return networkCard; + } + + public BlockPos getReceiver() { + return receiver; + } + + public int getDistance() { + if (receiver == null) { + return 0; + } + + return (int) Math.sqrt(Math.pow(pos.getX() - receiver.getX(), 2) + Math.pow(pos.getY() - receiver.getY(), 2) + Math.pow(pos.getZ() - receiver.getZ(), 2)); } } diff --git a/src/main/resources/assets/refinedstorage/lang/en_US.lang b/src/main/resources/assets/refinedstorage/lang/en_US.lang index e39b67f73..a24aaca49 100755 --- a/src/main/resources/assets/refinedstorage/lang/en_US.lang +++ b/src/main/resources/assets/refinedstorage/lang/en_US.lang @@ -31,6 +31,9 @@ gui.refinedstorage:crafter.processing=Processing gui.refinedstorage:processing_pattern_encoder=Processing Pattern Encoder gui.refinedstorage:processing_pattern_encoder.pattern_create=Create Pattern gui.refinedstorage:grid_filter=Grid Filter +gui.refinedstorage:network_transmitter=Network Transmitter +gui.refinedstorage:network_transmitter.distance=%d blocks +gui.refinedstorage:network_transmitter.distance_missing=Missing Network Card misc.refinedstorage:energy_stored=%d / %d RS misc.refinedstorage:energy_usage=Usage: %d RS/t @@ -48,6 +51,10 @@ misc.refinedstorage:wireless_grid.tooltip.2=Z: %d misc.refinedstorage:wireless_grid.out_of_range=There is no Wireless Transmitter in range. misc.refinedstorage:wireless_grid.not_found=Controller not found. +misc.refinedstorage:network_card.tooltip.0=X: %d +misc.refinedstorage:network_card.tooltip.1=Y: %d +misc.refinedstorage:network_card.tooltip.2=Z: %d + misc.refinedstorage:pattern.inputs=Inputs misc.refinedstorage:pattern.outputs=Outputs @@ -115,8 +122,8 @@ block.refinedstorage:crafting_monitor.name=Crafting Monitor block.refinedstorage:wireless_transmitter.name=Wireless Transmitter block.refinedstorage:crafter.name=Crafter block.refinedstorage:processing_pattern_encoder.name=Processing Pattern Encoder -block.refinedstorage:network_receiver.name=Wireless Receiver -block.refinedstorage:network_transmitter.name=Wireless Transmitter +block.refinedstorage:network_receiver.name=Network Receiver +block.refinedstorage:network_transmitter.name=Network Transmitter item.refinedstorage:storage_disk.0.name=1k Storage Disk item.refinedstorage:storage_disk.1.name=4k Storage Disk diff --git a/src/main/resources/assets/refinedstorage/lang/nl_NL.lang b/src/main/resources/assets/refinedstorage/lang/nl_NL.lang index a86588188..a145b0143 100755 --- a/src/main/resources/assets/refinedstorage/lang/nl_NL.lang +++ b/src/main/resources/assets/refinedstorage/lang/nl_NL.lang @@ -31,6 +31,9 @@ gui.refinedstorage:crafter.processing=Verwerking gui.refinedstorage:processing_pattern_encoder=Verwerkingspatroon Codeerder gui.refinedstorage:processing_pattern_encoder.pattern_create=Patroon maken gui.refinedstorage:grid_filter=Rooster Filter +gui.refinedstorage:network_transmitter=Netwerkzender +gui.refinedstorage:network_transmitter.distance=%d blokken +gui.refinedstorage:network_transmitter.distance_missing=Geen Netwerkkaart misc.refinedstorage:energy_stored=%d / %d RS misc.refinedstorage:energy_usage=Vebruik: %d RS/t @@ -48,6 +51,10 @@ misc.refinedstorage:wireless_grid.tooltip.2=Z: %d misc.refinedstorage:wireless_grid.out_of_range=Er is geen Draadloze Zender binnen bereik. misc.refinedstorage:wireless_grid.not_found=Controller niet gevonden. +misc.refinedstorage:network_card.tooltip.0=X: %d +misc.refinedstorage:network_card.tooltip.1=Y: %d +misc.refinedstorage:network_card.tooltip.2=Z: %d + misc.refinedstorage:pattern.inputs=Inputs misc.refinedstorage:pattern.outputs=Outputs @@ -115,8 +122,8 @@ block.refinedstorage:crafting_monitor.name=Crafting Monitor block.refinedstorage:wireless_transmitter.name=Draadloze Zender block.refinedstorage:crafter.name=Crafter block.refinedstorage:processing_pattern_encoder.name=Verwerkingspatroon Codeerder -block.refinedstorage:network_receiver.name=Draadloze Networkontvanger -block.refinedstorage:network_transmitter.name=Draadloze Netwerkzender +block.refinedstorage:network_receiver.name=Netwerkontvanger +block.refinedstorage:network_transmitter.name=Netwerkzender item.refinedstorage:storage_disk.0.name=1k Opslagschijf item.refinedstorage:storage_disk.1.name=4k Opslagschijf From 0fe848f995fa8d34b4b3564b2596a26514319f3d Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sun, 31 Jul 2016 02:02:06 +0200 Subject: [PATCH 045/214] Make more stuff + add crafting recipes --- .../java/refinedstorage/RefinedStorage.java | 6 ++++ .../gui/GuiNetworkTransmitter.java | 2 +- .../refinedstorage/proxy/CommonProxy.java | 34 +++++++++++++++++++ .../tile/TileNetworkReceiver.java | 3 +- .../tile/TileNetworkTransmitter.java | 24 ++++++++++++- .../tile/controller/TileController.java | 12 +++++-- 6 files changed, 75 insertions(+), 6 deletions(-) diff --git a/src/main/java/refinedstorage/RefinedStorage.java b/src/main/java/refinedstorage/RefinedStorage.java index 283812bb9..2999e0a8d 100755 --- a/src/main/java/refinedstorage/RefinedStorage.java +++ b/src/main/java/refinedstorage/RefinedStorage.java @@ -69,6 +69,9 @@ public final class RefinedStorage { public int gridUsage; public int craftingGridUsage; public int patternGridUsage; + public int networkTransmitterUsage; + public float networkTransmitterPerBlockUsage; + public int networkReceiverUsage; public int controllerCapacity; public boolean controllerUsesEnergy; @@ -109,6 +112,9 @@ public final class RefinedStorage { gridUsage = config.getInt("grid", "energy", 2, 0, Integer.MAX_VALUE, "The energy used by Grids"); craftingGridUsage = config.getInt("craftingGrid", "energy", 4, 0, Integer.MAX_VALUE, "The energy used by Crafting Grids"); patternGridUsage = config.getInt("patternGrid", "energy", 3, 0, Integer.MAX_VALUE, "The energy used by Pattern Grids"); + networkTransmitterUsage = config.getInt("networkTransmitter", "energy", 20, 0, Integer.MAX_VALUE, "The base energy used by Network Transmitters"); + networkTransmitterPerBlockUsage = config.getFloat("networkTransmitterPerBlock", "energy", 2, 0, Float.MAX_VALUE, "The additional energy per block that the Network Transmitter uses, gets rounded up"); + networkReceiverUsage = config.getInt("networkReceiver", "energy", 4, 0, Integer.MAX_VALUE, "The energy used by Network Receivers"); controllerCapacity = config.getInt("capacity", "controller", 32000, 0, Integer.MAX_VALUE, "The energy capacity of the Controller"); controllerUsesEnergy = config.getBoolean("usesEnergy", "controller", true, "Whether the Controller uses energy"); diff --git a/src/main/java/refinedstorage/gui/GuiNetworkTransmitter.java b/src/main/java/refinedstorage/gui/GuiNetworkTransmitter.java index 39296169b..0dc34b5da 100755 --- a/src/main/java/refinedstorage/gui/GuiNetworkTransmitter.java +++ b/src/main/java/refinedstorage/gui/GuiNetworkTransmitter.java @@ -41,7 +41,7 @@ public class GuiNetworkTransmitter extends GuiBase { distance = t("gui.refinedstorage:network_transmitter.distance", networkTransmitter.getDistance()); } - drawString(50, 24, distance); + drawString(51, 24, distance); drawString(7, 42, t("container.inventory")); } } \ No newline at end of file diff --git a/src/main/java/refinedstorage/proxy/CommonProxy.java b/src/main/java/refinedstorage/proxy/CommonProxy.java index 8fcfb9667..01f5c5230 100755 --- a/src/main/java/refinedstorage/proxy/CommonProxy.java +++ b/src/main/java/refinedstorage/proxy/CommonProxy.java @@ -482,6 +482,40 @@ public class CommonProxy { 'P', new ItemStack(Items.PAPER), 'H', new ItemStack(Blocks.HOPPER) ); + + // Network Card + GameRegistry.addShapedRecipe(new ItemStack(RefinedStorageItems.NETWORK_CARD), + "EEE", + "PAP", + "EEE", + 'E', new ItemStack(RefinedStorageItems.QUARTZ_ENRICHED_IRON), + 'P', new ItemStack(Items.PAPER), + 'A', new ItemStack(RefinedStorageItems.PROCESSOR, 1, ItemProcessor.TYPE_ADVANCED) + ); + + // Network Transmitter + GameRegistry.addShapedRecipe(new ItemStack(RefinedStorageBlocks.NETWORK_TRANSMITTER), + "EEE", + "CMD", + "AAA", + 'E', new ItemStack(Items.ENDER_PEARL), + 'C', new ItemStack(RefinedStorageItems.CORE, 1, ItemCore.TYPE_CONSTRUCTION), + 'M', new ItemStack(RefinedStorageBlocks.MACHINE_CASING), + 'D', new ItemStack(RefinedStorageItems.CORE, 1, ItemCore.TYPE_DESTRUCTION), + 'A', new ItemStack(RefinedStorageItems.PROCESSOR, 1, ItemProcessor.TYPE_ADVANCED) + ); + + // Network Receiver + GameRegistry.addShapedRecipe(new ItemStack(RefinedStorageBlocks.NETWORK_RECEIVER), + "AAA", + "CMD", + "EEE", + 'E', new ItemStack(Items.ENDER_PEARL), + 'C', new ItemStack(RefinedStorageItems.CORE, 1, ItemCore.TYPE_CONSTRUCTION), + 'M', new ItemStack(RefinedStorageBlocks.MACHINE_CASING), + 'D', new ItemStack(RefinedStorageItems.CORE, 1, ItemCore.TYPE_DESTRUCTION), + 'A', new ItemStack(RefinedStorageItems.PROCESSOR, 1, ItemProcessor.TYPE_ADVANCED) + ); } public void init(FMLInitializationEvent e) { diff --git a/src/main/java/refinedstorage/tile/TileNetworkReceiver.java b/src/main/java/refinedstorage/tile/TileNetworkReceiver.java index 4bb2c2390..0a4ab0e87 100755 --- a/src/main/java/refinedstorage/tile/TileNetworkReceiver.java +++ b/src/main/java/refinedstorage/tile/TileNetworkReceiver.java @@ -1,6 +1,7 @@ package refinedstorage.tile; import net.minecraft.inventory.Container; +import refinedstorage.RefinedStorage; public class TileNetworkReceiver extends TileNode { @Override @@ -9,7 +10,7 @@ public class TileNetworkReceiver extends TileNode { @Override public int getEnergyUsage() { - return 0; + return RefinedStorage.INSTANCE.networkReceiverUsage; } @Override diff --git a/src/main/java/refinedstorage/tile/TileNetworkTransmitter.java b/src/main/java/refinedstorage/tile/TileNetworkTransmitter.java index 8b7e3cc61..92b48a8ae 100755 --- a/src/main/java/refinedstorage/tile/TileNetworkTransmitter.java +++ b/src/main/java/refinedstorage/tile/TileNetworkTransmitter.java @@ -5,6 +5,7 @@ import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.math.BlockPos; +import refinedstorage.RefinedStorage; import refinedstorage.RefinedStorageItems; import refinedstorage.container.ContainerNetworkTransmitter; import refinedstorage.inventory.ItemHandlerBasic; @@ -24,16 +25,37 @@ public class TileNetworkTransmitter extends TileNode { } else { receiver = ItemNetworkCard.getReceiver(card); } + + if (network != null) { + network.rebuildNodes(); + } } }; private ItemHandlerBasic upgrade = new ItemHandlerBasic(1, this); private BlockPos receiver; + private boolean couldUpdate; + @Override public void updateNode() { } + public void update() { + super.update(); + + if (network != null && couldUpdate != canUpdate()) { + couldUpdate = canUpdate(); + + network.rebuildNodes(); + } + } + + @Override + public boolean canConduct() { + return canUpdate(); + } + @Override public NBTTagCompound write(NBTTagCompound tag) { super.write(tag); @@ -76,7 +98,7 @@ public class TileNetworkTransmitter extends TileNode { @Override public int getEnergyUsage() { - return 0; + return RefinedStorage.INSTANCE.networkTransmitterUsage + (int) Math.ceil(RefinedStorage.INSTANCE.networkTransmitterPerBlockUsage * getDistance()); } @Override diff --git a/src/main/java/refinedstorage/tile/controller/TileController.java b/src/main/java/refinedstorage/tile/controller/TileController.java index a605165be..3ad95afb3 100755 --- a/src/main/java/refinedstorage/tile/controller/TileController.java +++ b/src/main/java/refinedstorage/tile/controller/TileController.java @@ -46,9 +46,7 @@ import refinedstorage.container.ContainerGrid; import refinedstorage.item.ItemPattern; import refinedstorage.network.MessageGridDelta; import refinedstorage.network.MessageGridUpdate; -import refinedstorage.tile.ISynchronizedContainer; -import refinedstorage.tile.TileBase; -import refinedstorage.tile.TileCrafter; +import refinedstorage.tile.*; import refinedstorage.tile.config.IRedstoneModeConfig; import refinedstorage.tile.config.RedstoneMode; import refinedstorage.tile.externalstorage.ExternalStorage; @@ -427,6 +425,14 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR newNodesPos.add(node.getPosition()); if (node.canConduct()) { + if (tile instanceof TileNetworkTransmitter) { + BlockPos receiver = ((TileNetworkTransmitter) tile).getReceiver(); + + if (receiver != null && worldObj.getTileEntity(receiver) instanceof TileNetworkReceiver && checked.add(receiver)) { + toCheck.add(receiver); + } + } + for (EnumFacing facing : EnumFacing.VALUES) { BlockPos pos = currentPos.offset(facing); From 198458f010c167e514ee0f4bc4a07e5e28c279bc Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sun, 31 Jul 2016 03:30:45 +0200 Subject: [PATCH 046/214] Few bugfixes --- .../ContainerNetworkTransmitter.java | 1 - .../gui/GuiNetworkTransmitter.java | 8 ++-- .../refinedstorage/item/ItemNetworkCard.java | 10 ++++- .../tile/TileNetworkTransmitter.java | 40 +++++++++---------- .../tile/controller/TileController.java | 17 ++++---- .../assets/refinedstorage/lang/en_US.lang | 3 +- .../assets/refinedstorage/lang/nl_NL.lang | 3 +- 7 files changed, 47 insertions(+), 35 deletions(-) diff --git a/src/main/java/refinedstorage/container/ContainerNetworkTransmitter.java b/src/main/java/refinedstorage/container/ContainerNetworkTransmitter.java index d7d1d658e..576d78d56 100755 --- a/src/main/java/refinedstorage/container/ContainerNetworkTransmitter.java +++ b/src/main/java/refinedstorage/container/ContainerNetworkTransmitter.java @@ -9,7 +9,6 @@ public class ContainerNetworkTransmitter extends ContainerBase { super(player); addSlotToContainer(new SlotItemHandler(networkTransmitter.getNetworkCard(), 0, 8, 20)); - addSlotToContainer(new SlotItemHandler(networkTransmitter.getUpgrade(), 0, 187, 6)); addPlayerInventory(8, 55); } diff --git a/src/main/java/refinedstorage/gui/GuiNetworkTransmitter.java b/src/main/java/refinedstorage/gui/GuiNetworkTransmitter.java index 0dc34b5da..c2ea0f0be 100755 --- a/src/main/java/refinedstorage/gui/GuiNetworkTransmitter.java +++ b/src/main/java/refinedstorage/gui/GuiNetworkTransmitter.java @@ -8,7 +8,7 @@ public class GuiNetworkTransmitter extends GuiBase { private TileNetworkTransmitter networkTransmitter; public GuiNetworkTransmitter(ContainerNetworkTransmitter container, TileNetworkTransmitter networkTransmitter) { - super(container, 211, 137); + super(container, 176, 137); this.networkTransmitter = networkTransmitter; } @@ -35,8 +35,10 @@ public class GuiNetworkTransmitter extends GuiBase { String distance; - if (networkTransmitter.getReceiver() == null) { - distance = t("gui.refinedstorage:network_transmitter.distance_missing"); + if (!networkTransmitter.isInSameDimension()) { + distance = t("gui.refinedstorage:network_transmitter.different_dimension"); + } else if (networkTransmitter.getDistance() == -1) { + distance = t("gui.refinedstorage:network_transmitter.missing_card"); } else { distance = t("gui.refinedstorage:network_transmitter.distance", networkTransmitter.getDistance()); } diff --git a/src/main/java/refinedstorage/item/ItemNetworkCard.java b/src/main/java/refinedstorage/item/ItemNetworkCard.java index c6cb03038..57893119f 100755 --- a/src/main/java/refinedstorage/item/ItemNetworkCard.java +++ b/src/main/java/refinedstorage/item/ItemNetworkCard.java @@ -18,6 +18,7 @@ public class ItemNetworkCard extends ItemBase { private static final String NBT_RECEIVER_X = "ReceiverX"; private static final String NBT_RECEIVER_Y = "ReceiverY"; private static final String NBT_RECEIVER_Z = "ReceiverZ"; + private static final String NBT_DIMENSION = "Dimension"; public ItemNetworkCard() { super("network_card"); @@ -28,7 +29,7 @@ public class ItemNetworkCard extends ItemBase { Block block = world.getBlockState(pos).getBlock(); if (block == RefinedStorageBlocks.NETWORK_RECEIVER) { - setReceiver(stack, pos); + setReceiver(stack, pos, world.provider.getDimension()); return EnumActionResult.SUCCESS; } @@ -57,12 +58,17 @@ public class ItemNetworkCard extends ItemBase { return null; } - public static void setReceiver(ItemStack stack, BlockPos pos) { + public static int getDimension(ItemStack stack) { + return (stack.hasTagCompound() && stack.getTagCompound().hasKey(NBT_DIMENSION)) ? stack.getTagCompound().getInteger(NBT_DIMENSION) : 0; + } + + public static void setReceiver(ItemStack stack, BlockPos pos, int dimension) { NBTTagCompound tag = new NBTTagCompound(); tag.setInteger(NBT_RECEIVER_X, pos.getX()); tag.setInteger(NBT_RECEIVER_Y, pos.getY()); tag.setInteger(NBT_RECEIVER_Z, pos.getZ()); + tag.setInteger(NBT_DIMENSION, dimension); stack.setTagCompound(tag); } diff --git a/src/main/java/refinedstorage/tile/TileNetworkTransmitter.java b/src/main/java/refinedstorage/tile/TileNetworkTransmitter.java index 92b48a8ae..1bce6ced6 100755 --- a/src/main/java/refinedstorage/tile/TileNetworkTransmitter.java +++ b/src/main/java/refinedstorage/tile/TileNetworkTransmitter.java @@ -24,6 +24,7 @@ public class TileNetworkTransmitter extends TileNode { receiver = null; } else { receiver = ItemNetworkCard.getReceiver(card); + receiverDimension = ItemNetworkCard.getDimension(card); } if (network != null) { @@ -31,12 +32,16 @@ public class TileNetworkTransmitter extends TileNode { } } }; - private ItemHandlerBasic upgrade = new ItemHandlerBasic(1, this); private BlockPos receiver; + private int receiverDimension; private boolean couldUpdate; + // Used clientside + private int distance; + private boolean inSameDimension; + @Override public void updateNode() { } @@ -51,9 +56,8 @@ public class TileNetworkTransmitter extends TileNode { } } - @Override - public boolean canConduct() { - return canUpdate(); + public boolean canTransmit() { + return receiver != null && worldObj.getTileEntity(receiver) instanceof TileNetworkReceiver && isInSameDimension(); } @Override @@ -61,7 +65,6 @@ public class TileNetworkTransmitter extends TileNode { super.write(tag); writeItems(networkCard, 0, tag); - writeItems(upgrade, 1, tag); return tag; } @@ -71,29 +74,22 @@ public class TileNetworkTransmitter extends TileNode { super.read(tag); readItems(networkCard, 0, tag); - readItems(upgrade, 1, tag); } @Override public void writeContainerData(ByteBuf buf) { super.writeContainerData(buf); - buf.writeBoolean(receiver != null); - - if (receiver != null) { - buf.writeLong(receiver.toLong()); - } + buf.writeInt((receiver != null && isInSameDimension()) ? getDistance() : -1); + buf.writeBoolean(isInSameDimension()); } @Override public void readContainerData(ByteBuf buf) { super.readContainerData(buf); - if (buf.readBoolean()) { - receiver = BlockPos.fromLong(buf.readLong()); - } else { - receiver = null; - } + distance = buf.readInt(); + inSameDimension = buf.readBoolean(); } @Override @@ -106,10 +102,6 @@ public class TileNetworkTransmitter extends TileNode { return ContainerNetworkTransmitter.class; } - public ItemHandlerBasic getUpgrade() { - return upgrade; - } - public ItemHandlerBasic getNetworkCard() { return networkCard; } @@ -119,10 +111,18 @@ public class TileNetworkTransmitter extends TileNode { } public int getDistance() { + if (worldObj.isRemote) { + return distance; + } + if (receiver == null) { return 0; } return (int) Math.sqrt(Math.pow(pos.getX() - receiver.getX(), 2) + Math.pow(pos.getY() - receiver.getY(), 2) + Math.pow(pos.getZ() - receiver.getZ(), 2)); } + + public boolean isInSameDimension() { + return worldObj.isRemote ? inSameDimension : worldObj.provider.getDimension() == receiverDimension; + } } diff --git a/src/main/java/refinedstorage/tile/controller/TileController.java b/src/main/java/refinedstorage/tile/controller/TileController.java index 3ad95afb3..16030d496 100755 --- a/src/main/java/refinedstorage/tile/controller/TileController.java +++ b/src/main/java/refinedstorage/tile/controller/TileController.java @@ -46,7 +46,10 @@ import refinedstorage.container.ContainerGrid; import refinedstorage.item.ItemPattern; import refinedstorage.network.MessageGridDelta; import refinedstorage.network.MessageGridUpdate; -import refinedstorage.tile.*; +import refinedstorage.tile.ISynchronizedContainer; +import refinedstorage.tile.TileBase; +import refinedstorage.tile.TileCrafter; +import refinedstorage.tile.TileNetworkTransmitter; import refinedstorage.tile.config.IRedstoneModeConfig; import refinedstorage.tile.config.RedstoneMode; import refinedstorage.tile.externalstorage.ExternalStorage; @@ -424,15 +427,15 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR newNodes.add(node); newNodesPos.add(node.getPosition()); - if (node.canConduct()) { - if (tile instanceof TileNetworkTransmitter) { - BlockPos receiver = ((TileNetworkTransmitter) tile).getReceiver(); + if (tile instanceof TileNetworkTransmitter) { + BlockPos receiver = ((TileNetworkTransmitter) tile).getReceiver(); - if (receiver != null && worldObj.getTileEntity(receiver) instanceof TileNetworkReceiver && checked.add(receiver)) { - toCheck.add(receiver); - } + if (((TileNetworkTransmitter) tile).canTransmit() && checked.add(receiver)) { + toCheck.add(receiver); } + } + if (node.canConduct()) { for (EnumFacing facing : EnumFacing.VALUES) { BlockPos pos = currentPos.offset(facing); diff --git a/src/main/resources/assets/refinedstorage/lang/en_US.lang b/src/main/resources/assets/refinedstorage/lang/en_US.lang index a24aaca49..1a480b5ea 100755 --- a/src/main/resources/assets/refinedstorage/lang/en_US.lang +++ b/src/main/resources/assets/refinedstorage/lang/en_US.lang @@ -33,7 +33,8 @@ gui.refinedstorage:processing_pattern_encoder.pattern_create=Create Pattern gui.refinedstorage:grid_filter=Grid Filter gui.refinedstorage:network_transmitter=Network Transmitter gui.refinedstorage:network_transmitter.distance=%d blocks -gui.refinedstorage:network_transmitter.distance_missing=Missing Network Card +gui.refinedstorage:network_transmitter.missing_card=Missing Network Card +gui.refinedstorage:network_transmitter.different_dimension=Different dimension misc.refinedstorage:energy_stored=%d / %d RS misc.refinedstorage:energy_usage=Usage: %d RS/t diff --git a/src/main/resources/assets/refinedstorage/lang/nl_NL.lang b/src/main/resources/assets/refinedstorage/lang/nl_NL.lang index a145b0143..b96c9f100 100755 --- a/src/main/resources/assets/refinedstorage/lang/nl_NL.lang +++ b/src/main/resources/assets/refinedstorage/lang/nl_NL.lang @@ -33,7 +33,8 @@ gui.refinedstorage:processing_pattern_encoder.pattern_create=Patroon maken gui.refinedstorage:grid_filter=Rooster Filter gui.refinedstorage:network_transmitter=Netwerkzender gui.refinedstorage:network_transmitter.distance=%d blokken -gui.refinedstorage:network_transmitter.distance_missing=Geen Netwerkkaart +gui.refinedstorage:network_transmitter.missing_card=Geen Netwerkkaart +gui.refinedstorage:network_transmitter.different_dimension=Andere dimensie misc.refinedstorage:energy_stored=%d / %d RS misc.refinedstorage:energy_usage=Vebruik: %d RS/t From 1136186d5f4598c981f489d0f11a13f25853d526 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sun, 31 Jul 2016 04:02:29 +0200 Subject: [PATCH 047/214] Update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d66aa7af1..4ee4549b3 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ - Added config option to set the base energy usage of the Controller (default is 0) - Added Grid Filter item to filter items in any Grid - Added support for processing patterns with big stacksizes +- Added Network Transmitter, Network Receiver and Network Cards - The slot where the Wireless Grid is in in the Wireless Grid GUI is now disabled, so the item can't be thrown out of the inventory by accident - Changed Relay recipe to use redstone torch instead of Basic Processor - Placed machines now face the block they are placed on, like hoppers From 01be58bb13e944704ff7cf5a12d67f7bae66456a Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sun, 31 Jul 2016 15:23:01 +0200 Subject: [PATCH 048/214] Increase energy cost of the wireless stuff --- src/main/java/refinedstorage/RefinedStorage.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/refinedstorage/RefinedStorage.java b/src/main/java/refinedstorage/RefinedStorage.java index 2999e0a8d..8d0482668 100755 --- a/src/main/java/refinedstorage/RefinedStorage.java +++ b/src/main/java/refinedstorage/RefinedStorage.java @@ -112,9 +112,9 @@ public final class RefinedStorage { gridUsage = config.getInt("grid", "energy", 2, 0, Integer.MAX_VALUE, "The energy used by Grids"); craftingGridUsage = config.getInt("craftingGrid", "energy", 4, 0, Integer.MAX_VALUE, "The energy used by Crafting Grids"); patternGridUsage = config.getInt("patternGrid", "energy", 3, 0, Integer.MAX_VALUE, "The energy used by Pattern Grids"); - networkTransmitterUsage = config.getInt("networkTransmitter", "energy", 20, 0, Integer.MAX_VALUE, "The base energy used by Network Transmitters"); - networkTransmitterPerBlockUsage = config.getFloat("networkTransmitterPerBlock", "energy", 2, 0, Float.MAX_VALUE, "The additional energy per block that the Network Transmitter uses, gets rounded up"); - networkReceiverUsage = config.getInt("networkReceiver", "energy", 4, 0, Integer.MAX_VALUE, "The energy used by Network Receivers"); + networkTransmitterUsage = config.getInt("networkTransmitter", "energy", 50, 0, Integer.MAX_VALUE, "The base energy used by Network Transmitters"); + networkTransmitterPerBlockUsage = config.getFloat("networkTransmitterPerBlock", "energy", 4, 0, Float.MAX_VALUE, "The additional energy per block that the Network Transmitter uses, gets rounded up"); + networkReceiverUsage = config.getInt("networkReceiver", "energy", 15, 0, Integer.MAX_VALUE, "The energy used by Network Receivers"); controllerCapacity = config.getInt("capacity", "controller", 32000, 0, Integer.MAX_VALUE, "The energy capacity of the Controller"); controllerUsesEnergy = config.getBoolean("usesEnergy", "controller", true, "Whether the Controller uses energy"); From ae72ec15cd9e6a3aabf2819c4822e76f9e808c1c Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sun, 31 Jul 2016 15:33:00 +0200 Subject: [PATCH 049/214] Remove network rebuilding on change code duplication --- .../tile/TileNetworkReceiver.java | 4 ++++ .../tile/TileNetworkTransmitter.java | 22 ++++++++----------- .../java/refinedstorage/tile/TileNode.java | 5 +++++ .../java/refinedstorage/tile/TileRelay.java | 14 ++---------- 4 files changed, 20 insertions(+), 25 deletions(-) diff --git a/src/main/java/refinedstorage/tile/TileNetworkReceiver.java b/src/main/java/refinedstorage/tile/TileNetworkReceiver.java index 0a4ab0e87..58a05c267 100755 --- a/src/main/java/refinedstorage/tile/TileNetworkReceiver.java +++ b/src/main/java/refinedstorage/tile/TileNetworkReceiver.java @@ -4,6 +4,10 @@ import net.minecraft.inventory.Container; import refinedstorage.RefinedStorage; public class TileNetworkReceiver extends TileNode { + public TileNetworkReceiver() { + rebuildOnUpdateChange = true; + } + @Override public void updateNode() { } diff --git a/src/main/java/refinedstorage/tile/TileNetworkTransmitter.java b/src/main/java/refinedstorage/tile/TileNetworkTransmitter.java index 1bce6ced6..20d7fd925 100755 --- a/src/main/java/refinedstorage/tile/TileNetworkTransmitter.java +++ b/src/main/java/refinedstorage/tile/TileNetworkTransmitter.java @@ -36,28 +36,24 @@ public class TileNetworkTransmitter extends TileNode { private BlockPos receiver; private int receiverDimension; - private boolean couldUpdate; - // Used clientside private int distance; private boolean inSameDimension; + public TileNetworkTransmitter() { + rebuildOnUpdateChange = true; + } + @Override public void updateNode() { } - public void update() { - super.update(); - - if (network != null && couldUpdate != canUpdate()) { - couldUpdate = canUpdate(); - - network.rebuildNodes(); - } - } - public boolean canTransmit() { - return receiver != null && worldObj.getTileEntity(receiver) instanceof TileNetworkReceiver && isInSameDimension(); + return canUpdate() + && receiver != null + && isInSameDimension() + && worldObj.getTileEntity(receiver) instanceof TileNetworkReceiver + && ((TileNetworkReceiver) worldObj.getTileEntity(receiver)).canUpdate(); } @Override diff --git a/src/main/java/refinedstorage/tile/TileNode.java b/src/main/java/refinedstorage/tile/TileNode.java index b0454af04..ca8cdb288 100755 --- a/src/main/java/refinedstorage/tile/TileNode.java +++ b/src/main/java/refinedstorage/tile/TileNode.java @@ -17,6 +17,7 @@ public abstract class TileNode extends TileBase implements INetworkNode, ISynchr private boolean active; private boolean update; + protected boolean rebuildOnUpdateChange; protected boolean connected; protected INetworkMaster network; @@ -42,6 +43,10 @@ public abstract class TileNode extends TileBase implements INetworkNode, ISynchr update = canUpdate(); onConnectionChange(network, update); + + if (rebuildOnUpdateChange) { + network.rebuildNodes(); + } } if (active != isActive() && canSendConnectivityUpdate()) { diff --git a/src/main/java/refinedstorage/tile/TileRelay.java b/src/main/java/refinedstorage/tile/TileRelay.java index 07c1a9df9..34e29e1f5 100755 --- a/src/main/java/refinedstorage/tile/TileRelay.java +++ b/src/main/java/refinedstorage/tile/TileRelay.java @@ -6,10 +6,10 @@ import refinedstorage.container.ContainerRelay; import refinedstorage.tile.config.RedstoneMode; public class TileRelay extends TileNode { - private boolean couldUpdate; - public TileRelay() { setRedstoneMode(RedstoneMode.LOW); + + rebuildOnUpdateChange = true; } @Override @@ -21,16 +21,6 @@ public class TileRelay extends TileNode { public void updateNode() { } - public void update() { - super.update(); - - if (network != null && couldUpdate != canUpdate()) { - couldUpdate = canUpdate(); - - network.rebuildNodes(); - } - } - @Override public boolean canConduct() { return canUpdate(); From e77f1060662df1146a978ecab9a0845da1327d2c Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sun, 31 Jul 2016 16:04:16 +0200 Subject: [PATCH 050/214] GUI fixes + add gui for network receiver --- .../refinedstorage/RefinedStorageGui.java | 1 + .../block/BlockNetworkReceiver.java | 16 ++++++++ .../container/ContainerNetworkReceiver.java | 11 ++++++ .../ContainerNetworkTransmitter.java | 29 ++++++++++++++ .../java/refinedstorage/gui/GuiHandler.java | 4 ++ .../gui/GuiNetworkReceiver.java | 37 ++++++++++++++++++ .../gui/GuiNetworkTransmitter.java | 2 + .../tile/TileNetworkReceiver.java | 3 +- .../tile/TileNetworkTransmitter.java | 10 ++++- .../assets/refinedstorage/lang/en_US.lang | 2 + .../assets/refinedstorage/lang/nl_NL.lang | 2 + .../textures/gui/network_receiver.png | Bin 0 -> 1789 bytes .../textures/gui/network_transmitter.png | Bin 0 -> 1951 bytes 13 files changed, 114 insertions(+), 3 deletions(-) create mode 100755 src/main/java/refinedstorage/container/ContainerNetworkReceiver.java create mode 100755 src/main/java/refinedstorage/gui/GuiNetworkReceiver.java create mode 100755 src/main/resources/assets/refinedstorage/textures/gui/network_receiver.png create mode 100755 src/main/resources/assets/refinedstorage/textures/gui/network_transmitter.png diff --git a/src/main/java/refinedstorage/RefinedStorageGui.java b/src/main/java/refinedstorage/RefinedStorageGui.java index 6fb65a6cc..dee62f6fa 100755 --- a/src/main/java/refinedstorage/RefinedStorageGui.java +++ b/src/main/java/refinedstorage/RefinedStorageGui.java @@ -20,4 +20,5 @@ public final class RefinedStorageGui { public static final int PROCESSING_PATTERN_ENCODER = 16; public static final int GRID_FILTER = 17; public static final int NETWORK_TRANSMITTER = 18; + public static final int NETWORK_RECEIVER = 19; } diff --git a/src/main/java/refinedstorage/block/BlockNetworkReceiver.java b/src/main/java/refinedstorage/block/BlockNetworkReceiver.java index 3a0208f8c..3f37bab2c 100755 --- a/src/main/java/refinedstorage/block/BlockNetworkReceiver.java +++ b/src/main/java/refinedstorage/block/BlockNetworkReceiver.java @@ -1,8 +1,15 @@ package refinedstorage.block; import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; +import refinedstorage.RefinedStorage; +import refinedstorage.RefinedStorageGui; import refinedstorage.tile.TileNetworkReceiver; public class BlockNetworkReceiver extends BlockNode { @@ -10,6 +17,15 @@ public class BlockNetworkReceiver extends BlockNode { super("network_receiver"); } + @Override + public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) { + if (!world.isRemote) { + player.openGui(RefinedStorage.INSTANCE, RefinedStorageGui.NETWORK_RECEIVER, world, pos.getX(), pos.getY(), pos.getZ()); + } + + return true; + } + @Override public TileEntity createTileEntity(World world, IBlockState state) { return new TileNetworkReceiver(); diff --git a/src/main/java/refinedstorage/container/ContainerNetworkReceiver.java b/src/main/java/refinedstorage/container/ContainerNetworkReceiver.java new file mode 100755 index 000000000..3e94ad9eb --- /dev/null +++ b/src/main/java/refinedstorage/container/ContainerNetworkReceiver.java @@ -0,0 +1,11 @@ +package refinedstorage.container; + +import net.minecraft.entity.player.EntityPlayer; + +public class ContainerNetworkReceiver extends ContainerBase { + public ContainerNetworkReceiver(EntityPlayer player) { + super(player); + + addPlayerInventory(8, 50); + } +} diff --git a/src/main/java/refinedstorage/container/ContainerNetworkTransmitter.java b/src/main/java/refinedstorage/container/ContainerNetworkTransmitter.java index 576d78d56..f87d364b8 100755 --- a/src/main/java/refinedstorage/container/ContainerNetworkTransmitter.java +++ b/src/main/java/refinedstorage/container/ContainerNetworkTransmitter.java @@ -1,6 +1,8 @@ package refinedstorage.container; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; import net.minecraftforge.items.SlotItemHandler; import refinedstorage.tile.TileNetworkTransmitter; @@ -12,4 +14,31 @@ public class ContainerNetworkTransmitter extends ContainerBase { addPlayerInventory(8, 55); } + + @Override + public ItemStack transferStackInSlot(EntityPlayer player, int index) { + ItemStack stack = null; + + Slot slot = getSlot(index); + + if (slot != null && slot.getHasStack()) { + stack = slot.getStack(); + + if (index == 0) { + if (!mergeItemStack(stack, 1, inventorySlots.size(), false)) { + return null; + } + } else if (!mergeItemStack(stack, 0, 1, false)) { + return null; + } + + if (stack.stackSize == 0) { + slot.putStack(null); + } else { + slot.onSlotChanged(); + } + } + + return stack; + } } diff --git a/src/main/java/refinedstorage/gui/GuiHandler.java b/src/main/java/refinedstorage/gui/GuiHandler.java index be609c238..77803e66a 100755 --- a/src/main/java/refinedstorage/gui/GuiHandler.java +++ b/src/main/java/refinedstorage/gui/GuiHandler.java @@ -52,6 +52,8 @@ public class GuiHandler implements IGuiHandler { return new ContainerProcessingPatternEncoder(player, (TileProcessingPatternEncoder) tile); case RefinedStorageGui.NETWORK_TRANSMITTER: return new ContainerNetworkTransmitter(player, (TileNetworkTransmitter) tile); + case RefinedStorageGui.NETWORK_RECEIVER: + return new ContainerNetworkReceiver(player); default: return null; } @@ -111,6 +113,8 @@ public class GuiHandler implements IGuiHandler { return new GuiGridFilter(getGridFilterContainer(player, x)); case RefinedStorageGui.NETWORK_TRANSMITTER: return new GuiNetworkTransmitter((ContainerNetworkTransmitter) getContainer(ID, player, tile), (TileNetworkTransmitter) tile); + case RefinedStorageGui.NETWORK_RECEIVER: + return new GuiNetworkReceiver((ContainerNetworkReceiver) getContainer(ID, player, tile), (TileNetworkReceiver) tile); default: return null; } diff --git a/src/main/java/refinedstorage/gui/GuiNetworkReceiver.java b/src/main/java/refinedstorage/gui/GuiNetworkReceiver.java new file mode 100755 index 000000000..85425a2a2 --- /dev/null +++ b/src/main/java/refinedstorage/gui/GuiNetworkReceiver.java @@ -0,0 +1,37 @@ +package refinedstorage.gui; + +import refinedstorage.container.ContainerNetworkReceiver; +import refinedstorage.gui.sidebutton.SideButtonRedstoneMode; +import refinedstorage.tile.TileNetworkReceiver; + +public class GuiNetworkReceiver extends GuiBase { + private TileNetworkReceiver networkReceiver; + + public GuiNetworkReceiver(ContainerNetworkReceiver container, TileNetworkReceiver networkReceiver) { + super(container, 176, 131); + + this.networkReceiver = networkReceiver; + } + + @Override + public void init(int x, int y) { + addSideButton(new SideButtonRedstoneMode(networkReceiver)); + } + + @Override + public void update(int x, int y) { + } + + @Override + public void drawBackground(int x, int y, int mouseX, int mouseY) { + bindTexture("gui/network_receiver.png"); + + drawTexture(x, y, 0, 0, width, height); + } + + @Override + public void drawForeground(int mouseX, int mouseY) { + drawString(7, 7, t("gui.refinedstorage:network_receiver")); + drawString(7, 39, t("container.inventory")); + } +} diff --git a/src/main/java/refinedstorage/gui/GuiNetworkTransmitter.java b/src/main/java/refinedstorage/gui/GuiNetworkTransmitter.java index c2ea0f0be..d53fd3b8f 100755 --- a/src/main/java/refinedstorage/gui/GuiNetworkTransmitter.java +++ b/src/main/java/refinedstorage/gui/GuiNetworkTransmitter.java @@ -39,6 +39,8 @@ public class GuiNetworkTransmitter extends GuiBase { distance = t("gui.refinedstorage:network_transmitter.different_dimension"); } else if (networkTransmitter.getDistance() == -1) { distance = t("gui.refinedstorage:network_transmitter.missing_card"); + } else if (!networkTransmitter.isReceiverValid()) { + distance = t("gui.refinedstorage:network_transmitter.missing_receiver"); } else { distance = t("gui.refinedstorage:network_transmitter.distance", networkTransmitter.getDistance()); } diff --git a/src/main/java/refinedstorage/tile/TileNetworkReceiver.java b/src/main/java/refinedstorage/tile/TileNetworkReceiver.java index 58a05c267..728c7abc1 100755 --- a/src/main/java/refinedstorage/tile/TileNetworkReceiver.java +++ b/src/main/java/refinedstorage/tile/TileNetworkReceiver.java @@ -2,6 +2,7 @@ package refinedstorage.tile; import net.minecraft.inventory.Container; import refinedstorage.RefinedStorage; +import refinedstorage.container.ContainerNetworkReceiver; public class TileNetworkReceiver extends TileNode { public TileNetworkReceiver() { @@ -19,6 +20,6 @@ public class TileNetworkReceiver extends TileNode { @Override public Class getContainer() { - return null; + return ContainerNetworkReceiver.class; } } diff --git a/src/main/java/refinedstorage/tile/TileNetworkTransmitter.java b/src/main/java/refinedstorage/tile/TileNetworkTransmitter.java index 20d7fd925..1a731a7a9 100755 --- a/src/main/java/refinedstorage/tile/TileNetworkTransmitter.java +++ b/src/main/java/refinedstorage/tile/TileNetworkTransmitter.java @@ -39,6 +39,7 @@ public class TileNetworkTransmitter extends TileNode { // Used clientside private int distance; private boolean inSameDimension; + private boolean receiverValid; public TileNetworkTransmitter() { rebuildOnUpdateChange = true; @@ -52,8 +53,7 @@ public class TileNetworkTransmitter extends TileNode { return canUpdate() && receiver != null && isInSameDimension() - && worldObj.getTileEntity(receiver) instanceof TileNetworkReceiver - && ((TileNetworkReceiver) worldObj.getTileEntity(receiver)).canUpdate(); + && isReceiverValid(); } @Override @@ -78,6 +78,7 @@ public class TileNetworkTransmitter extends TileNode { buf.writeInt((receiver != null && isInSameDimension()) ? getDistance() : -1); buf.writeBoolean(isInSameDimension()); + buf.writeBoolean(isReceiverValid()); } @Override @@ -86,6 +87,7 @@ public class TileNetworkTransmitter extends TileNode { distance = buf.readInt(); inSameDimension = buf.readBoolean(); + receiverValid = buf.readBoolean(); } @Override @@ -121,4 +123,8 @@ public class TileNetworkTransmitter extends TileNode { public boolean isInSameDimension() { return worldObj.isRemote ? inSameDimension : worldObj.provider.getDimension() == receiverDimension; } + + public boolean isReceiverValid() { + return worldObj.isRemote ? receiverValid : (receiver != null && isInSameDimension() && worldObj.getTileEntity(receiver) instanceof TileNetworkReceiver && ((TileNetworkReceiver) worldObj.getTileEntity(receiver)).canUpdate()); + } } diff --git a/src/main/resources/assets/refinedstorage/lang/en_US.lang b/src/main/resources/assets/refinedstorage/lang/en_US.lang index 1a480b5ea..d50ddd128 100755 --- a/src/main/resources/assets/refinedstorage/lang/en_US.lang +++ b/src/main/resources/assets/refinedstorage/lang/en_US.lang @@ -34,7 +34,9 @@ gui.refinedstorage:grid_filter=Grid Filter gui.refinedstorage:network_transmitter=Network Transmitter gui.refinedstorage:network_transmitter.distance=%d blocks gui.refinedstorage:network_transmitter.missing_card=Missing Network Card +gui.refinedstorage:network_transmitter.missing_receiver=Receiver not found gui.refinedstorage:network_transmitter.different_dimension=Different dimension +gui.refinedstorage:network_receiver=Network Receiver misc.refinedstorage:energy_stored=%d / %d RS misc.refinedstorage:energy_usage=Usage: %d RS/t diff --git a/src/main/resources/assets/refinedstorage/lang/nl_NL.lang b/src/main/resources/assets/refinedstorage/lang/nl_NL.lang index b96c9f100..7e06994ae 100755 --- a/src/main/resources/assets/refinedstorage/lang/nl_NL.lang +++ b/src/main/resources/assets/refinedstorage/lang/nl_NL.lang @@ -34,7 +34,9 @@ gui.refinedstorage:grid_filter=Rooster Filter gui.refinedstorage:network_transmitter=Netwerkzender gui.refinedstorage:network_transmitter.distance=%d blokken gui.refinedstorage:network_transmitter.missing_card=Geen Netwerkkaart +gui.refinedstorage:network_transmitter.missing_receiver=Ontvanger niet gevonden gui.refinedstorage:network_transmitter.different_dimension=Andere dimensie +gui.refinedstorage:network_receiver=Netwerkontvanger misc.refinedstorage:energy_stored=%d / %d RS misc.refinedstorage:energy_usage=Vebruik: %d RS/t diff --git a/src/main/resources/assets/refinedstorage/textures/gui/network_receiver.png b/src/main/resources/assets/refinedstorage/textures/gui/network_receiver.png new file mode 100755 index 0000000000000000000000000000000000000000..1f102b2c000fc4cd5cf3bcd13104b00a0dbbb0de GIT binary patch literal 1789 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K58911MRQ8&P5D>38$lZxy-8q?;Kn_c~qpu?a z!^VE@KZ&di49pAxJ|V6^adUI?(9qEC?(Sp9j{X1tA1E>kMnhnPgh10{aTQRmDGBlm z1}6TI3>bpHv#SE5owL9rvY3H^?=T269?xHq0u+=iag8Vm&QB{TPb^AhC`ioAE78kK zEm1JhGte_MSj)wAfPsN2)YHW=q$2L^?TcBr9VA);ulC*lKk@FanNf=2$KLpFKJ$}< z=S}Mk85TyzzTbauEdTwh?|0$t<&2HV%kTgHwlVI3{(<9qv3jRjngnh3|1< zpmg};r8ElzL&KfwNDyzr@_YdxRrEd;RNy(x+XpPv7*6b+4lL6caBF1x@Vff?o167^ zGud|3z5aID52P9dc7ERkVF1Z>^ZzgSzjS_?5zmD8dg;yg%QmI!&-Gz`;#+O@!)Sjw z6I3D0G7#6`yK4H?lLij^cF*ChyM1!r-V!6;3FdEaJ~;j79w$^i%pV}`fjiUZgsLBA zsD}FJKf|ZDUvobE&inRe>Ez6YKU*u!ez3pYD-6}@@NTaTl*!PrbN$ZMer=53I2ao8 z8cuT@_*n7IY%Tkb&y&;NUod3+P{CdH^7AEa>53_pxKg{{R0Ebk8Ul z4FS4^!2D+krl5>c666;QOnxI7Fa&>RR|N(ER3EKyiIT^vIy;@;l6ohNK4;hK1v>8X!q zI@1(qFU8zR-|KfJ&dD*-xZ^UhJ|}y<>JhhM!?`sPAw9F&6u({$*k`h&)Si`N$vnIN zRiSYS%o|=Uy}4$G1KWkW)*L|lFBFS&11ScF^7jfL>U^vYkV;@K$lw3;nYLM&%7LQw zdy6ODKk>3(bT#{gy1#q&tC%{@zBe|G#)} z!*l&}e*W@X3jP#}GQ`>Lt}ptuqSN0#jPb$W+1=gh)Auo~{_^h6;p1U;^}G#k|D;!B zF_?rZ94Pv&EK$GpXIHN%#|3wwvm55^jsQ{&47;k?LFIJSyCe|B@Zz1U2*(2Xo|#cu z%eCS=*)FU;5c~StI*=3?z|?^`e|{?)t&QbmyHGuS<$-eRTPvH_xiG(2@|Mfy%<)*T zaUf-1?i^(TD+duB)sur?c^Nd^+wH@;@AgGM*%DPL2ld?W2Z?s?Kvf4AEO@Rb24gcg z+?hQmD7=aB7c>rD^Ecev>&Lq9{#A(P`?+PTbF@N)4hi=O_4$K{`T3Yn0xk@ zyqEJ5WcVra<
-eLu(_c1wSOEW~>X1H*Rt>Ky(! Z_A^F^F8jVcL&XymhMul|F6*2UngBSpgW&)G literal 0 HcmV?d00001 From 9b9c1959f5f72e3b59d004c11fbff373b10120f4 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sun, 31 Jul 2016 16:33:55 +0200 Subject: [PATCH 051/214] Add textures --- .../block/BlockNetworkReceiver.java | 10 +++++++ .../block/BlockNetworkTransmitter.java | 10 +++++++ .../refinedstorage/proxy/ClientProxy.java | 3 +++ .../blockstates/network_receiver.json | 25 ++++++++++++++++++ .../blockstates/network_transmitter.json | 25 ++++++++++++++++++ .../models/item/network_card.json | 6 +++++ .../blocks/network_receiver_connected.png | Bin 0 -> 801 bytes .../blocks/network_receiver_disconnected.png | Bin 0 -> 763 bytes .../blocks/network_transmitter_connected.png | Bin 0 -> 800 bytes .../network_transmitter_disconnected.png | Bin 0 -> 768 bytes .../textures/items/grid_filter.png | Bin 232 -> 542 bytes .../textures/items/network_card.png | Bin 0 -> 443 bytes 12 files changed, 79 insertions(+) create mode 100755 src/main/resources/assets/refinedstorage/blockstates/network_receiver.json create mode 100755 src/main/resources/assets/refinedstorage/blockstates/network_transmitter.json create mode 100755 src/main/resources/assets/refinedstorage/models/item/network_card.json create mode 100755 src/main/resources/assets/refinedstorage/textures/blocks/network_receiver_connected.png create mode 100755 src/main/resources/assets/refinedstorage/textures/blocks/network_receiver_disconnected.png create mode 100755 src/main/resources/assets/refinedstorage/textures/blocks/network_transmitter_connected.png create mode 100755 src/main/resources/assets/refinedstorage/textures/blocks/network_transmitter_disconnected.png create mode 100755 src/main/resources/assets/refinedstorage/textures/items/network_card.png diff --git a/src/main/java/refinedstorage/block/BlockNetworkReceiver.java b/src/main/java/refinedstorage/block/BlockNetworkReceiver.java index 3f37bab2c..eb09a8e23 100755 --- a/src/main/java/refinedstorage/block/BlockNetworkReceiver.java +++ b/src/main/java/refinedstorage/block/BlockNetworkReceiver.java @@ -30,4 +30,14 @@ public class BlockNetworkReceiver extends BlockNode { public TileEntity createTileEntity(World world, IBlockState state) { return new TileNetworkReceiver(); } + + @Override + public EnumPlacementType getPlacementType() { + return null; + } + + @Override + public boolean hasConnectivityState() { + return true; + } } diff --git a/src/main/java/refinedstorage/block/BlockNetworkTransmitter.java b/src/main/java/refinedstorage/block/BlockNetworkTransmitter.java index 6dca66146..75b6512b3 100755 --- a/src/main/java/refinedstorage/block/BlockNetworkTransmitter.java +++ b/src/main/java/refinedstorage/block/BlockNetworkTransmitter.java @@ -30,4 +30,14 @@ public class BlockNetworkTransmitter extends BlockNode { public TileEntity createTileEntity(World world, IBlockState state) { return new TileNetworkTransmitter(); } + + @Override + public EnumPlacementType getPlacementType() { + return null; + } + + @Override + public boolean hasConnectivityState() { + return true; + } } diff --git a/src/main/java/refinedstorage/proxy/ClientProxy.java b/src/main/java/refinedstorage/proxy/ClientProxy.java index 8307640aa..07a2aa23c 100755 --- a/src/main/java/refinedstorage/proxy/ClientProxy.java +++ b/src/main/java/refinedstorage/proxy/ClientProxy.java @@ -95,6 +95,7 @@ public class ClientProxy extends CommonProxy { ModelLoader.setCustomModelResourceLocation(RefinedStorageItems.PATTERN, 0, new ModelResourceLocation("refinedstorage:pattern", "inventory")); ModelLoader.setCustomModelResourceLocation(RefinedStorageItems.STORAGE_HOUSING, 0, new ModelResourceLocation("refinedstorage:storage_housing", "inventory")); ModelLoader.setCustomModelResourceLocation(RefinedStorageItems.GRID_FILTER, 0, new ModelResourceLocation("refinedstorage:grid_filter", "inventory")); + ModelLoader.setCustomModelResourceLocation(RefinedStorageItems.NETWORK_CARD, 0, new ModelResourceLocation("refinedstorage:network_card", "inventory")); ModelLoader.setCustomModelResourceLocation(RefinedStorageItems.UPGRADE, 0, new ModelResourceLocation("refinedstorage:upgrade", "inventory")); ModelLoader.setCustomModelResourceLocation(RefinedStorageItems.UPGRADE, ItemUpgrade.TYPE_RANGE, new ModelResourceLocation("refinedstorage:range_upgrade", "inventory")); @@ -129,6 +130,8 @@ public class ClientProxy extends CommonProxy { ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.CRAFTING_MONITOR), 0, new ModelResourceLocation("refinedstorage:crafting_monitor", "inventory")); ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.CRAFTER), 0, new ModelResourceLocation("refinedstorage:crafter", "inventory")); ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.PROCESSING_PATTERN_ENCODER), 0, new ModelResourceLocation("refinedstorage:processing_pattern_encoder", "inventory")); + ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.NETWORK_TRANSMITTER), 0, new ModelResourceLocation("refinedstorage:network_transmitter", "inventory")); + ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.NETWORK_RECEIVER), 0, new ModelResourceLocation("refinedstorage:network_receiver", "inventory")); ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.STORAGE), EnumStorageType.TYPE_1K.getId(), new ModelResourceLocation("refinedstorage:storage", "type=1k")); ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.STORAGE), EnumStorageType.TYPE_4K.getId(), new ModelResourceLocation("refinedstorage:storage", "type=4k")); ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.STORAGE), EnumStorageType.TYPE_16K.getId(), new ModelResourceLocation("refinedstorage:storage", "type=16k")); diff --git a/src/main/resources/assets/refinedstorage/blockstates/network_receiver.json b/src/main/resources/assets/refinedstorage/blockstates/network_receiver.json new file mode 100755 index 000000000..774d8c95a --- /dev/null +++ b/src/main/resources/assets/refinedstorage/blockstates/network_receiver.json @@ -0,0 +1,25 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "cube_all", + "textures": { + "all": "refinedstorage:blocks/network_receiver_disconnected" + } + }, + "variants": { + "inventory": [ + { + "transform": "forge:default-block" + } + ], + "connected": { + "true": { + "textures": { + "all": "refinedstorage:blocks/network_receiver_connected" + } + }, + "false": { + } + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/refinedstorage/blockstates/network_transmitter.json b/src/main/resources/assets/refinedstorage/blockstates/network_transmitter.json new file mode 100755 index 000000000..86e56d08f --- /dev/null +++ b/src/main/resources/assets/refinedstorage/blockstates/network_transmitter.json @@ -0,0 +1,25 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "cube_all", + "textures": { + "all": "refinedstorage:blocks/network_transmitter_disconnected" + } + }, + "variants": { + "inventory": [ + { + "transform": "forge:default-block" + } + ], + "connected": { + "true": { + "textures": { + "all": "refinedstorage:blocks/network_transmitter_connected" + } + }, + "false": { + } + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/refinedstorage/models/item/network_card.json b/src/main/resources/assets/refinedstorage/models/item/network_card.json new file mode 100755 index 000000000..cd2b01777 --- /dev/null +++ b/src/main/resources/assets/refinedstorage/models/item/network_card.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "refinedstorage:items/network_card" + } +} diff --git a/src/main/resources/assets/refinedstorage/textures/blocks/network_receiver_connected.png b/src/main/resources/assets/refinedstorage/textures/blocks/network_receiver_connected.png new file mode 100755 index 0000000000000000000000000000000000000000..46c528615dc3befb4dad2b55968d25161b44543e GIT binary patch literal 801 zcmV++1K#|JP)N2bZe?^J zG%heMF)*zP3cvsW0-i}kK~y+TEt1bq6HySy=f8kTDVXTNvi(Ji2n{r(Zd=&4yW6_# zuRgY|+b-SRlx~-X(f}3`g9qc^z=0SK#uyJAh%p|BA;b_5#u&rF11CE5VRsIVdOZOSt&CNpIzp&SvHd?LO%a!v%9~& zeK^>8wl{n}9KPswhwwWJH}_n3e=s=g_n&q;JFff0>FlOy22j{Edycb<;Dc#z+2#Ol z?!vFIX>Qr}pw~Na++Ei_Xt%f0X$F>-a+cM%EPU(NY8&t^06!++`VRb@gsVxsSF3iT z;pqBCt!6JS(m>OB*B!c>!ZYO|#nVLA7qf2h29s(XkX-d*#IP=5#I9^&-Pt$BdOrz;m zlqP)gBa)+YL5@afy2$Y= z$4M+JhCys3;mDXdMp65geEbV?IU& fV?io1H5L8?JQ@6G7yTff00000NkvXXu0mjfOO0Fq literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/refinedstorage/textures/blocks/network_receiver_disconnected.png b/src/main/resources/assets/refinedstorage/textures/blocks/network_receiver_disconnected.png new file mode 100755 index 0000000000000000000000000000000000000000..f56457e64746ba7293c033661139578fc1521e5d GIT binary patch literal 763 zcmVN2bZe?^J zG%heMF)*zP3cvsW0(eP8K~y+TJ(A076G0rue;^(_iT_5rc{QoEEo~?+4(-0 z8LC$0Qh_g*#Y#o2*A-DTwzn-su^POFQ4sX%mRzlhrHWW8@x@|;YPCE2qtnB~^XTZo z$@JlL`e-zo{-qng=~@_`M$!3Xa(_5H3d4KB@Hk(n5{zAU90bPzKV1L7ccWi)^$%Tl z-2>l`#^bXfJPyON!QddDuhQmb+4ClzhkuiHd+#gJH=+x=@`DI`Cu+6)Za1*)y>{E* z*eFn;Pz%FpxIgVXVGx|SZuFA~T+9SWL$c!p2=@ok`g)#nxuWBYU;|^@4*KrC)$%aM zZp-opgQ(TUHhqOe643)9lG|ljn7dxuV#7Mf8GjzlzXkrqj!`w6w<9uCCi}QB>*R08Gm9Fr4PL)#mgKl}Jf7jW t6aoRF6NwB!VJ?C7G#5+9xa7h@;vY2*^-Z7K33&hj002ovPDHLkV1jUYWiN2bZe?^J zG%heMF)*zP3cvsW0-Z@jK~y+TEs{%56Hye$&$oa|DUis*GJR1Hfj~q0q7KZfola-& z4Aa)>ly++Abf~lqU?DNMFn$JOh;dvRrnXU}mCo6VhgoQ9Q^RmDcyut=2P5$BjOpFpRrat%sdW)5hkFW`AiZ4zXCO zT5V$)_%UV}cCEgx7whoNhvjv>-fZ@ZWed(mRkdC&H zm*9m5;TRH$%)#vJqNZ)SLO*z=Tp0(TC?>ocfw$L$oQl&Fr80aR;W$;6i_z#U2#0S< zQc;%6xCK|1;Uw&aIf9_#lMn-~MyfI~g25RGg=X+A2n0!`csL${<6##Ri98ufBp8k- z99LjjDG-l=xkP##3C-DDCyzwoGXdv6kJl5 ztip40BFSK3cs86)3#b+mMGgH7BL%2w@cYAle~6+Yfk2d^!q^bO*1=#DLBUiI{SnF^ e@l&Cxso+100Q?S?nXdN$0000N2bZe?^J zG%heMF)*zP3cvsW0)0tDK~y+TJ(9g|(@+$}uY?$w5dTK%d^IVht=g!{SA$!BC5~f1 zyH0}RGhZmb4No1LALBK!^b$#K6FS7!X1TF)$&-zqHE z$-(`j>4WL?;b1WRN7w$)l`uS>Oio9md;R`F7~T!~huJ(&5ca%b5F7&h==gVj(`E3N zuKptO{qb;k5`>3gc+%_bXR|!5uW$JN$oKcV-BF{l`-SK$(NDVcod|p*s@MHiD{!3M zMx(p7mZyAvGYqHU-gL(egW#ys8M|)y<7|c;=eFM&!`XEMn0I@V)zvIzGKF?~02v57 zPSEl8?7D|NE}=o=!f z(!>QAh6}e>n6H?)O;u~cR+3CzucuNsD3Q3XX?0z1;uV~)f~38iB~%m>N5&ki7HjLw ziN(?skEd}~6b1?f`7zNs$bgWKh;lhWl9?pcL{W=I=LxY4!?CRP_O^?QSCnn^A@ozC zC$sKy+0xWH9-^w*iNxYrBv~@>NY5x6vZUwo0))|BEGkF~RMkRV5VR;aPmxF>5{YwM yG8#>BTmpsw*0ER$ATSq0J;_Cq5iUMA7yA!|MfCV$xL{}i0000lCp5&%4cQ`$F5dIk;Oz65k z8NH28rEk(R!$v-eQI4HG0v2#|9Mh_9B44Z^S2AonH6R-xnzC>a(f;Yvn966He;idsNoKZ){F9f7ojz+MRE{W-+wCrMtf zfO74!0jSS|V-?|41m(v%jOPZd_bZq$Em%*NsN6NVl3dXM<=SNf^a<7yUifx`sJ&f4 z%ETaLf83+OZ005AYXf}}{S#AJWNklUr#o1>D74iW zn(!$uGR-y_LA!BJBj5oPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02y>eSaefwW^{L9 za%BK;VQFr3E^cLXAT%y8E-^5z3JSmg00ApWL_t(IPu)?;PQp+Wed@2cab<#1tl+RQ z(S;kO5Q}tBDzs?Tg^5#wg&G`?jUT2J^lQ-Lz0b13RM(v3BsX_BcM@ZWi{KGwVF#yo zPw*eQl5De&V{zK=I6l9@W#<`gtBs8#2jc4uQ}}>d)})VPi6Zr@CTbxS`v(x{A?upR zc@`$|E=6i2!jr`5qo_7QOiSres7qU*4~1fh0>c$jMjom1Hs%bCm`B*y^+BphdfE6 l1t$n4*=8Td; literal 0 HcmV?d00001 From 89c9ea42651c170250a14069b9bf9b76a7a7d1ec Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sun, 31 Jul 2016 16:40:12 +0200 Subject: [PATCH 052/214] Remove receiver GUI again... --- .../refinedstorage/RefinedStorageGui.java | 1 - .../block/BlockNetworkReceiver.java | 16 -------- .../container/ContainerNetworkReceiver.java | 11 ------ .../java/refinedstorage/gui/GuiHandler.java | 4 -- .../gui/GuiNetworkReceiver.java | 37 ------------------ .../tile/TileNetworkReceiver.java | 13 +++--- .../tile/TileNetworkTransmitter.java | 2 +- .../textures/gui/network_receiver.png | Bin 1789 -> 0 bytes 8 files changed, 8 insertions(+), 76 deletions(-) delete mode 100755 src/main/java/refinedstorage/container/ContainerNetworkReceiver.java delete mode 100755 src/main/java/refinedstorage/gui/GuiNetworkReceiver.java delete mode 100755 src/main/resources/assets/refinedstorage/textures/gui/network_receiver.png diff --git a/src/main/java/refinedstorage/RefinedStorageGui.java b/src/main/java/refinedstorage/RefinedStorageGui.java index dee62f6fa..6fb65a6cc 100755 --- a/src/main/java/refinedstorage/RefinedStorageGui.java +++ b/src/main/java/refinedstorage/RefinedStorageGui.java @@ -20,5 +20,4 @@ public final class RefinedStorageGui { public static final int PROCESSING_PATTERN_ENCODER = 16; public static final int GRID_FILTER = 17; public static final int NETWORK_TRANSMITTER = 18; - public static final int NETWORK_RECEIVER = 19; } diff --git a/src/main/java/refinedstorage/block/BlockNetworkReceiver.java b/src/main/java/refinedstorage/block/BlockNetworkReceiver.java index eb09a8e23..64b17b618 100755 --- a/src/main/java/refinedstorage/block/BlockNetworkReceiver.java +++ b/src/main/java/refinedstorage/block/BlockNetworkReceiver.java @@ -1,15 +1,8 @@ package refinedstorage.block; import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.EnumHand; -import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; -import refinedstorage.RefinedStorage; -import refinedstorage.RefinedStorageGui; import refinedstorage.tile.TileNetworkReceiver; public class BlockNetworkReceiver extends BlockNode { @@ -17,15 +10,6 @@ public class BlockNetworkReceiver extends BlockNode { super("network_receiver"); } - @Override - public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) { - if (!world.isRemote) { - player.openGui(RefinedStorage.INSTANCE, RefinedStorageGui.NETWORK_RECEIVER, world, pos.getX(), pos.getY(), pos.getZ()); - } - - return true; - } - @Override public TileEntity createTileEntity(World world, IBlockState state) { return new TileNetworkReceiver(); diff --git a/src/main/java/refinedstorage/container/ContainerNetworkReceiver.java b/src/main/java/refinedstorage/container/ContainerNetworkReceiver.java deleted file mode 100755 index 3e94ad9eb..000000000 --- a/src/main/java/refinedstorage/container/ContainerNetworkReceiver.java +++ /dev/null @@ -1,11 +0,0 @@ -package refinedstorage.container; - -import net.minecraft.entity.player.EntityPlayer; - -public class ContainerNetworkReceiver extends ContainerBase { - public ContainerNetworkReceiver(EntityPlayer player) { - super(player); - - addPlayerInventory(8, 50); - } -} diff --git a/src/main/java/refinedstorage/gui/GuiHandler.java b/src/main/java/refinedstorage/gui/GuiHandler.java index 77803e66a..be609c238 100755 --- a/src/main/java/refinedstorage/gui/GuiHandler.java +++ b/src/main/java/refinedstorage/gui/GuiHandler.java @@ -52,8 +52,6 @@ public class GuiHandler implements IGuiHandler { return new ContainerProcessingPatternEncoder(player, (TileProcessingPatternEncoder) tile); case RefinedStorageGui.NETWORK_TRANSMITTER: return new ContainerNetworkTransmitter(player, (TileNetworkTransmitter) tile); - case RefinedStorageGui.NETWORK_RECEIVER: - return new ContainerNetworkReceiver(player); default: return null; } @@ -113,8 +111,6 @@ public class GuiHandler implements IGuiHandler { return new GuiGridFilter(getGridFilterContainer(player, x)); case RefinedStorageGui.NETWORK_TRANSMITTER: return new GuiNetworkTransmitter((ContainerNetworkTransmitter) getContainer(ID, player, tile), (TileNetworkTransmitter) tile); - case RefinedStorageGui.NETWORK_RECEIVER: - return new GuiNetworkReceiver((ContainerNetworkReceiver) getContainer(ID, player, tile), (TileNetworkReceiver) tile); default: return null; } diff --git a/src/main/java/refinedstorage/gui/GuiNetworkReceiver.java b/src/main/java/refinedstorage/gui/GuiNetworkReceiver.java deleted file mode 100755 index 85425a2a2..000000000 --- a/src/main/java/refinedstorage/gui/GuiNetworkReceiver.java +++ /dev/null @@ -1,37 +0,0 @@ -package refinedstorage.gui; - -import refinedstorage.container.ContainerNetworkReceiver; -import refinedstorage.gui.sidebutton.SideButtonRedstoneMode; -import refinedstorage.tile.TileNetworkReceiver; - -public class GuiNetworkReceiver extends GuiBase { - private TileNetworkReceiver networkReceiver; - - public GuiNetworkReceiver(ContainerNetworkReceiver container, TileNetworkReceiver networkReceiver) { - super(container, 176, 131); - - this.networkReceiver = networkReceiver; - } - - @Override - public void init(int x, int y) { - addSideButton(new SideButtonRedstoneMode(networkReceiver)); - } - - @Override - public void update(int x, int y) { - } - - @Override - public void drawBackground(int x, int y, int mouseX, int mouseY) { - bindTexture("gui/network_receiver.png"); - - drawTexture(x, y, 0, 0, width, height); - } - - @Override - public void drawForeground(int mouseX, int mouseY) { - drawString(7, 7, t("gui.refinedstorage:network_receiver")); - drawString(7, 39, t("container.inventory")); - } -} diff --git a/src/main/java/refinedstorage/tile/TileNetworkReceiver.java b/src/main/java/refinedstorage/tile/TileNetworkReceiver.java index 728c7abc1..3edbe7d30 100755 --- a/src/main/java/refinedstorage/tile/TileNetworkReceiver.java +++ b/src/main/java/refinedstorage/tile/TileNetworkReceiver.java @@ -2,13 +2,9 @@ package refinedstorage.tile; import net.minecraft.inventory.Container; import refinedstorage.RefinedStorage; -import refinedstorage.container.ContainerNetworkReceiver; +import refinedstorage.tile.config.RedstoneMode; public class TileNetworkReceiver extends TileNode { - public TileNetworkReceiver() { - rebuildOnUpdateChange = true; - } - @Override public void updateNode() { } @@ -20,6 +16,11 @@ public class TileNetworkReceiver extends TileNode { @Override public Class getContainer() { - return ContainerNetworkReceiver.class; + return null; + } + + @Override + public void setRedstoneMode(RedstoneMode mode) { + // NO OP } } diff --git a/src/main/java/refinedstorage/tile/TileNetworkTransmitter.java b/src/main/java/refinedstorage/tile/TileNetworkTransmitter.java index 1a731a7a9..1c3e4be79 100755 --- a/src/main/java/refinedstorage/tile/TileNetworkTransmitter.java +++ b/src/main/java/refinedstorage/tile/TileNetworkTransmitter.java @@ -125,6 +125,6 @@ public class TileNetworkTransmitter extends TileNode { } public boolean isReceiverValid() { - return worldObj.isRemote ? receiverValid : (receiver != null && isInSameDimension() && worldObj.getTileEntity(receiver) instanceof TileNetworkReceiver && ((TileNetworkReceiver) worldObj.getTileEntity(receiver)).canUpdate()); + return worldObj.isRemote ? receiverValid : (receiver != null && isInSameDimension() && worldObj.getTileEntity(receiver) instanceof TileNetworkReceiver); } } diff --git a/src/main/resources/assets/refinedstorage/textures/gui/network_receiver.png b/src/main/resources/assets/refinedstorage/textures/gui/network_receiver.png deleted file mode 100755 index 1f102b2c000fc4cd5cf3bcd13104b00a0dbbb0de..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1789 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K58911MRQ8&P5D>38$lZxy-8q?;Kn_c~qpu?a z!^VE@KZ&di49pAxJ|V6^adUI?(9qEC?(Sp9j{X1tA1E>kMnhnPgh10{aTQRmDGBlm z1}6TI3>bpHv#SE5owL9rvY3H^?=T269?xHq0u+=iag8Vm&QB{TPb^AhC`ioAE78kK zEm1JhGte_MSj)wAfPsN2)YHW=q$2L^?TcBr9VA);ulC*lKk@FanNf=2$KLpFKJ$}< z=S}Mk85TyzzTbauEdTwh?|0$t<&2HV%kTgHwlVI3{(<9qv3jRjngnh3|1< zpmg};r8ElzL&KfwNDyzr@_YdxRrEd;RNy(x+XpPv7*6b+4lL6caBF1x@Vff?o167^ zGud|3z5aID52P9dc7ERkVF1Z>^ZzgSzjS_?5zmD8dg;yg%QmI!&-Gz`;#+O@!)Sjw z6I3D0G7#6`yK4H?lLij^cF*ChyM1!r-V!6;3FdEaJ~;j79w$^i%pV}`fjiUZgsLBA zsD}FJKf|ZDUvobE&inRe>Ez6YKU*u!ez3pYD-6}@@NTaTl*!PrbN$ZMer=53I2ao8 z8cuT@_*n7IY%Tkb&y&;NUod3+P{CdH^7AEa>53 Date: Sun, 31 Jul 2016 17:33:22 +0200 Subject: [PATCH 053/214] Network card can not stack --- src/main/java/refinedstorage/item/ItemNetworkCard.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/refinedstorage/item/ItemNetworkCard.java b/src/main/java/refinedstorage/item/ItemNetworkCard.java index 57893119f..8edbe2cdc 100755 --- a/src/main/java/refinedstorage/item/ItemNetworkCard.java +++ b/src/main/java/refinedstorage/item/ItemNetworkCard.java @@ -22,6 +22,8 @@ public class ItemNetworkCard extends ItemBase { public ItemNetworkCard() { super("network_card"); + + setMaxStackSize(1); } @Override From 74a62f503515a0d85127163a8a70e4a5df87af4d Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sun, 31 Jul 2016 17:37:37 +0200 Subject: [PATCH 054/214] Revert #224 --- CHANGELOG.md | 1 - .../inventory/ItemHandlerInterface.java | 24 ------------------- .../refinedstorage/tile/TileInterface.java | 8 ++++--- 3 files changed, 5 insertions(+), 28 deletions(-) delete mode 100755 src/main/java/refinedstorage/inventory/ItemHandlerInterface.java diff --git a/CHANGELOG.md b/CHANGELOG.md index 4ee4549b3..0de10c9ea 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,6 @@ - Fixed rendering crash with Disk Drive - Fixed crash when quickly toggling sorting direction in Grid - Fixed not being able to clear exporter row in interface -- Fixed interface having weird extraction / insertion rules. It can now take items from any side, or extract items from any side depending on the block that is inserting or extracting the item (like conduits). **Features** - Added config option to set the base energy usage of the Controller (default is 0) diff --git a/src/main/java/refinedstorage/inventory/ItemHandlerInterface.java b/src/main/java/refinedstorage/inventory/ItemHandlerInterface.java deleted file mode 100755 index 8fff53eb5..000000000 --- a/src/main/java/refinedstorage/inventory/ItemHandlerInterface.java +++ /dev/null @@ -1,24 +0,0 @@ -package refinedstorage.inventory; - -import net.minecraft.item.ItemStack; -import net.minecraftforge.items.ItemStackHandler; - -public class ItemHandlerInterface extends ItemStackHandler { - private ItemHandlerBasic importItems; - private ItemHandlerBasic exportItems; - - public ItemHandlerInterface(ItemHandlerBasic importItems, ItemHandlerBasic exportItems) { - this.importItems = importItems; - this.exportItems = exportItems; - } - - @Override - public ItemStack insertItem(int slot, ItemStack stack, boolean simulate) { - return importItems.insertItem(slot, stack, simulate); - } - - @Override - public ItemStack extractItem(int slot, int amount, boolean simulate) { - return exportItems.extractItem(slot, amount, simulate); - } -} diff --git a/src/main/java/refinedstorage/tile/TileInterface.java b/src/main/java/refinedstorage/tile/TileInterface.java index 228044364..13703ad11 100755 --- a/src/main/java/refinedstorage/tile/TileInterface.java +++ b/src/main/java/refinedstorage/tile/TileInterface.java @@ -12,7 +12,6 @@ import net.minecraftforge.items.wrapper.CombinedInvWrapper; import refinedstorage.RefinedStorage; import refinedstorage.container.ContainerInterface; import refinedstorage.inventory.ItemHandlerBasic; -import refinedstorage.inventory.ItemHandlerInterface; import refinedstorage.inventory.ItemHandlerUpgrade; import refinedstorage.item.ItemUpgrade; import refinedstorage.tile.config.ICompareConfig; @@ -23,7 +22,6 @@ public class TileInterface extends TileNode implements ICompareConfig { private ItemHandlerBasic importItems = new ItemHandlerBasic(9, this); private ItemHandlerBasic exportSpecimenItems = new ItemHandlerBasic(9, this); private ItemHandlerBasic exportItems = new ItemHandlerBasic(9, this); - private ItemHandlerInterface itemHandler = new ItemHandlerInterface(importItems, exportItems); private ItemHandlerUpgrade upgrades = new ItemHandlerUpgrade(4, this, ItemUpgrade.TYPE_SPEED, ItemUpgrade.TYPE_STACK); private int compare = 0; @@ -175,7 +173,11 @@ public class TileInterface extends TileNode implements ICompareConfig { @Override public T getCapability(Capability capability, EnumFacing facing) { if (capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) { - return (T) itemHandler; + if (facing == EnumFacing.DOWN) { + return (T) exportItems; + } else { + return (T) importItems; + } } return super.getCapability(capability, facing); From 82dde2b27cbf613b104de4c8fd449f64986d5c2d Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sun, 31 Jul 2016 17:45:22 +0200 Subject: [PATCH 055/214] Simplify tooltips --- src/main/java/refinedstorage/item/ItemNetworkCard.java | 4 +--- src/main/java/refinedstorage/item/ItemWirelessGrid.java | 4 +--- src/main/resources/assets/refinedstorage/lang/en_US.lang | 9 ++------- src/main/resources/assets/refinedstorage/lang/fr_FR.lang | 3 --- src/main/resources/assets/refinedstorage/lang/nl_NL.lang | 9 ++------- src/main/resources/assets/refinedstorage/lang/pt_BR.lang | 3 --- 6 files changed, 6 insertions(+), 26 deletions(-) diff --git a/src/main/java/refinedstorage/item/ItemNetworkCard.java b/src/main/java/refinedstorage/item/ItemNetworkCard.java index 8edbe2cdc..61cd73b12 100755 --- a/src/main/java/refinedstorage/item/ItemNetworkCard.java +++ b/src/main/java/refinedstorage/item/ItemNetworkCard.java @@ -46,9 +46,7 @@ public class ItemNetworkCard extends ItemBase { BlockPos pos = getReceiver(stack); if (pos != null) { - tooltip.add(I18n.format("misc.refinedstorage:network_card.tooltip.0", pos.getX())); - tooltip.add(I18n.format("misc.refinedstorage:network_card.tooltip.1", pos.getY())); - tooltip.add(I18n.format("misc.refinedstorage:network_card.tooltip.2", pos.getZ())); + tooltip.add(I18n.format("misc.refinedstorage:network_card.tooltip", pos.getX(), pos.getY(), pos.getZ())); } } diff --git a/src/main/java/refinedstorage/item/ItemWirelessGrid.java b/src/main/java/refinedstorage/item/ItemWirelessGrid.java index b4765380f..57c8b3bf7 100755 --- a/src/main/java/refinedstorage/item/ItemWirelessGrid.java +++ b/src/main/java/refinedstorage/item/ItemWirelessGrid.java @@ -112,9 +112,7 @@ public class ItemWirelessGrid extends ItemEnergyContainer implements ISpecialEle } if (hasValidNBT(stack)) { - tooltip.add(I18n.format("misc.refinedstorage:wireless_grid.tooltip.0", getX(stack))); - tooltip.add(I18n.format("misc.refinedstorage:wireless_grid.tooltip.1", getY(stack))); - tooltip.add(I18n.format("misc.refinedstorage:wireless_grid.tooltip.2", getZ(stack))); + tooltip.add(I18n.format("misc.refinedstorage:wireless_grid.tooltip", getX(stack), getY(stack), getZ(stack))); } } diff --git a/src/main/resources/assets/refinedstorage/lang/en_US.lang b/src/main/resources/assets/refinedstorage/lang/en_US.lang index d50ddd128..f92444ed5 100755 --- a/src/main/resources/assets/refinedstorage/lang/en_US.lang +++ b/src/main/resources/assets/refinedstorage/lang/en_US.lang @@ -36,7 +36,6 @@ gui.refinedstorage:network_transmitter.distance=%d blocks gui.refinedstorage:network_transmitter.missing_card=Missing Network Card gui.refinedstorage:network_transmitter.missing_receiver=Receiver not found gui.refinedstorage:network_transmitter.different_dimension=Different dimension -gui.refinedstorage:network_receiver=Network Receiver misc.refinedstorage:energy_stored=%d / %d RS misc.refinedstorage:energy_usage=Usage: %d RS/t @@ -48,15 +47,11 @@ misc.refinedstorage:storage.stored_minimal=%d misc.refinedstorage:storage.stored_capacity_minimal=%d / %d misc.refinedstorage:storage.full=%d%% full -misc.refinedstorage:wireless_grid.tooltip.0=X: %d -misc.refinedstorage:wireless_grid.tooltip.1=Y: %d -misc.refinedstorage:wireless_grid.tooltip.2=Z: %d +misc.refinedstorage:wireless_grid.tooltip=Linked to %d, %d, %d. misc.refinedstorage:wireless_grid.out_of_range=There is no Wireless Transmitter in range. misc.refinedstorage:wireless_grid.not_found=Controller not found. -misc.refinedstorage:network_card.tooltip.0=X: %d -misc.refinedstorage:network_card.tooltip.1=Y: %d -misc.refinedstorage:network_card.tooltip.2=Z: %d +misc.refinedstorage:network_card.tooltip=Linked to %d, %d, %d. misc.refinedstorage:pattern.inputs=Inputs misc.refinedstorage:pattern.outputs=Outputs diff --git a/src/main/resources/assets/refinedstorage/lang/fr_FR.lang b/src/main/resources/assets/refinedstorage/lang/fr_FR.lang index 87d64dc37..5790ddb16 100755 --- a/src/main/resources/assets/refinedstorage/lang/fr_FR.lang +++ b/src/main/resources/assets/refinedstorage/lang/fr_FR.lang @@ -41,9 +41,6 @@ misc.refinedstorage:storage.stored_minimal=%d misc.refinedstorage:storage.stored_capacity_minimal=%d / %d misc.refinedstorage:storage.full=%d%% plein -misc.refinedstorage:wireless_grid.tooltip.0=X: %d -misc.refinedstorage:wireless_grid.tooltip.1=Y: %d -misc.refinedstorage:wireless_grid.tooltip.2=Z: %d misc.refinedstorage:wireless_grid.out_of_range=Il n'y a pas un Émetteur sans Fil dans la gamme. misc.refinedstorage:wireless_grid.not_found=Contrôleur non trouvé. diff --git a/src/main/resources/assets/refinedstorage/lang/nl_NL.lang b/src/main/resources/assets/refinedstorage/lang/nl_NL.lang index 7e06994ae..90a9ae7d9 100755 --- a/src/main/resources/assets/refinedstorage/lang/nl_NL.lang +++ b/src/main/resources/assets/refinedstorage/lang/nl_NL.lang @@ -36,7 +36,6 @@ gui.refinedstorage:network_transmitter.distance=%d blokken gui.refinedstorage:network_transmitter.missing_card=Geen Netwerkkaart gui.refinedstorage:network_transmitter.missing_receiver=Ontvanger niet gevonden gui.refinedstorage:network_transmitter.different_dimension=Andere dimensie -gui.refinedstorage:network_receiver=Netwerkontvanger misc.refinedstorage:energy_stored=%d / %d RS misc.refinedstorage:energy_usage=Vebruik: %d RS/t @@ -48,15 +47,11 @@ misc.refinedstorage:storage.stored_minimal=%d misc.refinedstorage:storage.stored_capacity_minimal=%d / %d misc.refinedstorage:storage.full=%d%% vol -misc.refinedstorage:wireless_grid.tooltip.0=X: %d -misc.refinedstorage:wireless_grid.tooltip.1=Y: %d -misc.refinedstorage:wireless_grid.tooltip.2=Z: %d +misc.refinedstorage:wireless_grid.tooltip=Gelinkt aan %d, %d, %d. misc.refinedstorage:wireless_grid.out_of_range=Er is geen Draadloze Zender binnen bereik. misc.refinedstorage:wireless_grid.not_found=Controller niet gevonden. -misc.refinedstorage:network_card.tooltip.0=X: %d -misc.refinedstorage:network_card.tooltip.1=Y: %d -misc.refinedstorage:network_card.tooltip.2=Z: %d +misc.refinedstorage:network_card.tooltip=Gelinkt aan %d, %d, %d. misc.refinedstorage:pattern.inputs=Inputs misc.refinedstorage:pattern.outputs=Outputs diff --git a/src/main/resources/assets/refinedstorage/lang/pt_BR.lang b/src/main/resources/assets/refinedstorage/lang/pt_BR.lang index 7aaece026..bc743fd86 100755 --- a/src/main/resources/assets/refinedstorage/lang/pt_BR.lang +++ b/src/main/resources/assets/refinedstorage/lang/pt_BR.lang @@ -41,9 +41,6 @@ misc.refinedstorage:storage.stored_minimal=%d misc.refinedstorage:storage.stored_capacity_minimal=%d / %d misc.refinedstorage:storage.full=%d%% full -misc.refinedstorage:wireless_grid.tooltip.0=X: %d -misc.refinedstorage:wireless_grid.tooltip.1=Y: %d -misc.refinedstorage:wireless_grid.tooltip.2=Z: %d misc.refinedstorage:wireless_grid.out_of_range=Não há Transmissor Sem Fio na gama. misc.refinedstorage:wireless_grid.not_found=Controlador não encontrado. From 81b0b538734584c227d7775c79baaa8671f7f80a Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sun, 31 Jul 2016 18:18:31 +0200 Subject: [PATCH 056/214] Add translation-diff util script --- .gitignore | 1 + translation-diff.pl | 42 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+) create mode 100755 translation-diff.pl diff --git a/.gitignore b/.gitignore index ae019ee66..defc03d02 100755 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,4 @@ run/ *.iws .idea/ out/ +translation-diff.diff diff --git a/translation-diff.pl b/translation-diff.pl new file mode 100755 index 000000000..0c84ea823 --- /dev/null +++ b/translation-diff.pl @@ -0,0 +1,42 @@ +use constant { + BASE_LANG => "en_US", + OUTPUT_FILE => "translation-diff.diff" +}; + +my $lang = $ARGV[0] or die("Missing language to diff with"); + +sub lang_file { + my ($lang) = @_; + my $filename = "src/main/resources/assets/refinedstorage/lang/" . $lang . ".lang"; + open(my $fh, $filename) or die("Couldn't open $filename"); + return $fh; +} + +sub write_keys { + my ($lang, $lang_keys) = @_; + my $filename = $lang . ".tmp"; + open(my $fh, '>', $filename) or die("Couldn't open temp file $filename for $lang for writing"); + print $fh $lang_keys; + close $fh; + return $filename; +} + +sub lang_keys { + my ($lang_file) = @_; + my $keys = ""; + while (my $line = <$lang_file>) { + my @p = split("=", $line); + $keys .= $p[0] . "\n"; + } + return $keys; +} + +my $base_keys = lang_keys(lang_file(BASE_LANG)); +my $t1 = write_keys(BASE_LANG, $base_keys); + +my $lang_keys = lang_keys(lang_file($lang)); +my $t2 = write_keys($lang, $lang_keys); + +system("diff -s -y $t1 $t2 > " . OUTPUT_FILE); + +unlink($t1, $t2); \ No newline at end of file From 53b397b7bb1c38cccc922d8dcb5eda7c9dfb5df9 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sun, 31 Jul 2016 18:19:35 +0200 Subject: [PATCH 057/214] Remove if already existing --- translation-diff.pl | 2 ++ 1 file changed, 2 insertions(+) diff --git a/translation-diff.pl b/translation-diff.pl index 0c84ea823..0d3d88010 100755 --- a/translation-diff.pl +++ b/translation-diff.pl @@ -37,6 +37,8 @@ my $t1 = write_keys(BASE_LANG, $base_keys); my $lang_keys = lang_keys(lang_file($lang)); my $t2 = write_keys($lang, $lang_keys); +unlink(OUTPUT_FILE); + system("diff -s -y $t1 $t2 > " . OUTPUT_FILE); unlink($t1, $t2); \ No newline at end of file From dd2c61821b5394ec772cf3fdf9cc4ca7aee3499f Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sun, 31 Jul 2016 18:23:05 +0200 Subject: [PATCH 058/214] Close file handles --- translation-diff.pl | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/translation-diff.pl b/translation-diff.pl index 0d3d88010..3ba0ce749 100755 --- a/translation-diff.pl +++ b/translation-diff.pl @@ -31,14 +31,17 @@ sub lang_keys { return $keys; } -my $base_keys = lang_keys(lang_file(BASE_LANG)); +my $f1 = lang_file(BASE_LANG); +my $f2 = lang_file($lang); + +my $base_keys = lang_keys($f1); my $t1 = write_keys(BASE_LANG, $base_keys); -my $lang_keys = lang_keys(lang_file($lang)); +my $lang_keys = lang_keys($f2); my $t2 = write_keys($lang, $lang_keys); -unlink(OUTPUT_FILE); - system("diff -s -y $t1 $t2 > " . OUTPUT_FILE); -unlink($t1, $t2); \ No newline at end of file +unlink($t1, $t2); + +close($f1, $f2); From a25a5ee1445b328539107e21f27239c87f7457ce Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sun, 31 Jul 2016 18:25:58 +0200 Subject: [PATCH 059/214] Add comment showing usage --- translation-diff.pl | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/translation-diff.pl b/translation-diff.pl index 3ba0ce749..8c101baa9 100755 --- a/translation-diff.pl +++ b/translation-diff.pl @@ -1,3 +1,7 @@ +# Utility for comparing language translation keys of BASE_LANG and a given language. +# Usage: perl translation-diff.pl $lang +# Will output a translation-diff.diff file that compares the lang keys of BASE_LANG to $lang. + use constant { BASE_LANG => "en_US", OUTPUT_FILE => "translation-diff.diff" From 9f272406f69e7a56b5dcfcb99f98589cb14364a3 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sun, 31 Jul 2016 19:10:44 +0200 Subject: [PATCH 060/214] Add screenshot --- screenshots/wireless_networks.png | Bin 0 -> 238882 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100755 screenshots/wireless_networks.png diff --git a/screenshots/wireless_networks.png b/screenshots/wireless_networks.png new file mode 100755 index 0000000000000000000000000000000000000000..615beb20303a4b58ae2bfa1ad5cd292d1a76f6d0 GIT binary patch literal 238882 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 ik@5F50i_AVn60QZEzwa$2}F})^c(y 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 literal 0 HcmV?d00001 From ddd6c319e172869140ac283140629cadf5b91c0b Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Mon, 1 Aug 2016 00:15:24 +0200 Subject: [PATCH 061/214] Bump to 0.8.14 --- build.gradle | 2 +- src/main/java/refinedstorage/RefinedStorage.java | 2 +- src/main/resources/mcmod.info | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/build.gradle b/build.gradle index a93247133..03bce3eec 100755 --- a/build.gradle +++ b/build.gradle @@ -12,7 +12,7 @@ buildscript { } apply plugin: 'net.minecraftforge.gradle.forge' -version = "0.8.13" +version = "0.8.14" group = "refinedstorage" archivesBaseName = "refinedstorage" diff --git a/src/main/java/refinedstorage/RefinedStorage.java b/src/main/java/refinedstorage/RefinedStorage.java index 8d0482668..fe28eda5c 100755 --- a/src/main/java/refinedstorage/RefinedStorage.java +++ b/src/main/java/refinedstorage/RefinedStorage.java @@ -23,7 +23,7 @@ import java.util.List; @Mod(modid = RefinedStorage.ID, version = RefinedStorage.VERSION) public final class RefinedStorage { public static final String ID = "refinedstorage"; - public static final String VERSION = "0.8.13"; + public static final String VERSION = "0.8.14"; @SidedProxy(clientSide = "refinedstorage.proxy.ClientProxy", serverSide = "refinedstorage.proxy.ServerProxy") public static CommonProxy PROXY; diff --git a/src/main/resources/mcmod.info b/src/main/resources/mcmod.info index f7cb78cb3..cf7b9e461 100755 --- a/src/main/resources/mcmod.info +++ b/src/main/resources/mcmod.info @@ -3,7 +3,7 @@ "modid": "refinedstorage", "name": "Refined Storage", "description": "A Minecraft mod all about storage.", - "version": "0.8.13", + "version": "0.8.14", "mcversion": "1.10.2", "url": "", "updateUrl": "", From 384d79c998943e1f24af35cd4ccf033b322b7cac Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Mon, 1 Aug 2016 00:16:20 +0200 Subject: [PATCH 062/214] Made network transmitter work over dimensions --- .../api/network/INetworkMaster.java | 9 +- .../api/network/INetworkNodeGraph.java | 13 ++ .../apiimpl/network/NetworkNodeGraph.java | 148 ++++++++++++++++++ .../apiimpl/network/WirelessGridHandler.java | 2 +- .../apiimpl/storage/GroupedStorage.java | 2 +- .../refinedstorage/block/BlockController.java | 4 +- .../java/refinedstorage/block/BlockNode.java | 4 +- .../gui/GuiNetworkTransmitter.java | 2 - .../tile/TileNetworkTransmitter.java | 18 +-- .../java/refinedstorage/tile/TileNode.java | 2 +- .../tile/controller/TileController.java | 118 ++------------ 11 files changed, 188 insertions(+), 134 deletions(-) create mode 100755 src/main/java/refinedstorage/api/network/INetworkNodeGraph.java create mode 100755 src/main/java/refinedstorage/apiimpl/network/NetworkNodeGraph.java diff --git a/src/main/java/refinedstorage/api/network/INetworkMaster.java b/src/main/java/refinedstorage/api/network/INetworkMaster.java index fa0167605..9b783a5a3 100755 --- a/src/main/java/refinedstorage/api/network/INetworkMaster.java +++ b/src/main/java/refinedstorage/api/network/INetworkMaster.java @@ -38,9 +38,9 @@ public interface INetworkMaster { boolean canRun(); /** - * @return A list with all the network nodes + * @return A graph of connected nodes to this network */ - List getNodes(); + INetworkNodeGraph getNodeGraph(); /** * @return The {@link IGridHandler} for this network @@ -101,11 +101,6 @@ public interface INetworkMaster { */ void rebuildPatterns(); - /** - * Rebuilds the network node list. - */ - void rebuildNodes(); - /** * Returns crafting patterns from an item stack. * diff --git a/src/main/java/refinedstorage/api/network/INetworkNodeGraph.java b/src/main/java/refinedstorage/api/network/INetworkNodeGraph.java new file mode 100755 index 000000000..77f0b89c4 --- /dev/null +++ b/src/main/java/refinedstorage/api/network/INetworkNodeGraph.java @@ -0,0 +1,13 @@ +package refinedstorage.api.network; + +import net.minecraft.util.math.BlockPos; + +import java.util.List; + +public interface INetworkNodeGraph { + void rebuild(BlockPos start); + + List all(); + + void disconnectAll(); +} diff --git a/src/main/java/refinedstorage/apiimpl/network/NetworkNodeGraph.java b/src/main/java/refinedstorage/apiimpl/network/NetworkNodeGraph.java new file mode 100755 index 000000000..e31a30de2 --- /dev/null +++ b/src/main/java/refinedstorage/apiimpl/network/NetworkNodeGraph.java @@ -0,0 +1,148 @@ +package refinedstorage.apiimpl.network; + +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.common.DimensionManager; +import refinedstorage.api.network.INetworkNode; +import refinedstorage.api.network.INetworkNodeGraph; +import refinedstorage.tile.TileNetworkTransmitter; +import refinedstorage.tile.controller.TileController; + +import java.util.*; + +public class NetworkNodeGraph implements INetworkNodeGraph { + private TileController controller; + + private List nodes = new ArrayList(); + private Set nodesPos = new HashSet(); + + public NetworkNodeGraph(TileController controller) { + this.controller = controller; + } + + @Override + public void rebuild(BlockPos start) { + if (!controller.canRun()) { + if (!nodes.isEmpty()) { + disconnectAll(); + } + + return; + } + + World world = getWorld(); + + List newNodes = new ArrayList(); + List interDimensionalNodes = new ArrayList(); + Set newNodesPos = new HashSet(); + + Set checked = new HashSet(); + Queue toCheck = new ArrayDeque(); + + checked.add(start); + toCheck.add(start); + + for (EnumFacing facing : EnumFacing.VALUES) { + BlockPos pos = start.offset(facing); + + checked.add(pos); + toCheck.add(pos); + } + + BlockPos currentPos; + while ((currentPos = toCheck.poll()) != null) { + TileEntity tile = world.getTileEntity(currentPos); + + if (tile instanceof TileController && !controller.getPos().equals(tile.getPos())) { + world.createExplosion(null, tile.getPos().getX(), tile.getPos().getY(), tile.getPos().getZ(), 4.5f, true); + } + + if (!(tile instanceof INetworkNode)) { + continue; + } + + INetworkNode node = (INetworkNode) tile; + + newNodes.add(node); + newNodesPos.add(node.getPosition()); + + if (tile instanceof TileNetworkTransmitter) { + final TileNetworkTransmitter transmitter = (TileNetworkTransmitter) tile; + + if (transmitter.canTransmit()) { + if (!transmitter.isInSameDimension()) { + NetworkNodeGraph dimensionGraph = new NetworkNodeGraph(controller) { + @Override + public World getWorld() { + return DimensionManager.getWorld(transmitter.getReceiverDimension()); + } + }; + + dimensionGraph.rebuild(transmitter.getReceiver()); + + interDimensionalNodes.addAll(dimensionGraph.all()); + } else { + BlockPos receiver = transmitter.getReceiver(); + + if (checked.add(receiver)) { + toCheck.add(receiver); + } + } + } + } + + if (node.canConduct()) { + for (EnumFacing facing : EnumFacing.VALUES) { + BlockPos pos = currentPos.offset(facing); + + if (checked.add(pos)) { + toCheck.add(pos); + } + } + } + } + + List oldNodes = new ArrayList(nodes); + Set oldNodesPos = new HashSet(nodesPos); + + this.nodes = newNodes; + this.nodesPos = newNodesPos; + + for (INetworkNode newNode : nodes) { + if (!oldNodesPos.contains(newNode.getPosition())) { + newNode.onConnected(controller); + } + } + + for (INetworkNode oldNode : oldNodes) { + if (!nodesPos.contains(oldNode.getPosition())) { + oldNode.onDisconnected(controller); + } + } + + this.nodes.addAll(interDimensionalNodes); + } + + @Override + public List all() { + return nodes; + } + + @Override + public void disconnectAll() { + for (INetworkNode node : nodes) { + if (node.isConnected()) { + node.onDisconnected(controller); + } + } + + nodes.clear(); + nodesPos.clear(); + } + + public World getWorld() { + return controller.getWorld(); + } +} diff --git a/src/main/java/refinedstorage/apiimpl/network/WirelessGridHandler.java b/src/main/java/refinedstorage/apiimpl/network/WirelessGridHandler.java index ddf84a2c6..5aee28fce 100755 --- a/src/main/java/refinedstorage/apiimpl/network/WirelessGridHandler.java +++ b/src/main/java/refinedstorage/apiimpl/network/WirelessGridHandler.java @@ -37,7 +37,7 @@ public class WirelessGridHandler implements IWirelessGridHandler { public boolean onOpen(EntityPlayer player, EnumHand hand) { boolean inRange = false; - for (INetworkNode node : network.getNodes()) { + for (INetworkNode node : network.getNodeGraph().all()) { if (node instanceof IWirelessTransmitter) { IWirelessTransmitter transmitter = (IWirelessTransmitter) node; diff --git a/src/main/java/refinedstorage/apiimpl/storage/GroupedStorage.java b/src/main/java/refinedstorage/apiimpl/storage/GroupedStorage.java index 8517cb674..acb95ca1d 100755 --- a/src/main/java/refinedstorage/apiimpl/storage/GroupedStorage.java +++ b/src/main/java/refinedstorage/apiimpl/storage/GroupedStorage.java @@ -30,7 +30,7 @@ public class GroupedStorage implements IGroupedStorage { public void rebuild() { storages.clear(); - for (INetworkNode node : network.getNodes()) { + for (INetworkNode node : network.getNodeGraph().all()) { if (node.canUpdate() && node instanceof IStorageProvider) { ((IStorageProvider) node).addStorages(storages); } diff --git a/src/main/java/refinedstorage/block/BlockController.java b/src/main/java/refinedstorage/block/BlockController.java index 8b0fad77c..f207dacd2 100755 --- a/src/main/java/refinedstorage/block/BlockController.java +++ b/src/main/java/refinedstorage/block/BlockController.java @@ -104,7 +104,7 @@ public class BlockController extends BlockBase { @Override public void breakBlock(World world, BlockPos pos, IBlockState state) { if (!world.isRemote) { - ((TileController) world.getTileEntity(pos)).disconnectAll(); + ((TileController) world.getTileEntity(pos)).getNodeGraph().disconnectAll(); } super.breakBlock(world, pos, state); @@ -115,7 +115,7 @@ public class BlockController extends BlockBase { super.neighborChanged(state, world, pos, block); if (!world.isRemote) { - ((TileController) world.getTileEntity(pos)).rebuildNodes(); + ((TileController) world.getTileEntity(pos)).getNodeGraph().rebuild(pos); } } diff --git a/src/main/java/refinedstorage/block/BlockNode.java b/src/main/java/refinedstorage/block/BlockNode.java index 86e274f97..5ada93a96 100755 --- a/src/main/java/refinedstorage/block/BlockNode.java +++ b/src/main/java/refinedstorage/block/BlockNode.java @@ -63,7 +63,7 @@ public abstract class BlockNode extends BlockBase { TileEntity tile = world.getTileEntity(pos.offset(facing)); if (tile instanceof TileNode && ((TileNode) tile).isConnected()) { - ((TileNode) tile).getNetwork().rebuildNodes(); + ((TileNode) tile).getNetwork().getNodeGraph().rebuild(((TileNode) tile).getNetwork().getPosition()); break; } @@ -86,7 +86,7 @@ public abstract class BlockNode extends BlockBase { super.breakBlock(world, pos, state); if (network != null) { - network.rebuildNodes(); + network.getNodeGraph().rebuild(network.getPosition()); } } } diff --git a/src/main/java/refinedstorage/gui/GuiNetworkTransmitter.java b/src/main/java/refinedstorage/gui/GuiNetworkTransmitter.java index d53fd3b8f..c2ea0f0be 100755 --- a/src/main/java/refinedstorage/gui/GuiNetworkTransmitter.java +++ b/src/main/java/refinedstorage/gui/GuiNetworkTransmitter.java @@ -39,8 +39,6 @@ public class GuiNetworkTransmitter extends GuiBase { distance = t("gui.refinedstorage:network_transmitter.different_dimension"); } else if (networkTransmitter.getDistance() == -1) { distance = t("gui.refinedstorage:network_transmitter.missing_card"); - } else if (!networkTransmitter.isReceiverValid()) { - distance = t("gui.refinedstorage:network_transmitter.missing_receiver"); } else { distance = t("gui.refinedstorage:network_transmitter.distance", networkTransmitter.getDistance()); } diff --git a/src/main/java/refinedstorage/tile/TileNetworkTransmitter.java b/src/main/java/refinedstorage/tile/TileNetworkTransmitter.java index 1c3e4be79..3ac3bfbc8 100755 --- a/src/main/java/refinedstorage/tile/TileNetworkTransmitter.java +++ b/src/main/java/refinedstorage/tile/TileNetworkTransmitter.java @@ -28,7 +28,7 @@ public class TileNetworkTransmitter extends TileNode { } if (network != null) { - network.rebuildNodes(); + network.getNodeGraph().rebuild(network.getPosition()); } } }; @@ -39,7 +39,6 @@ public class TileNetworkTransmitter extends TileNode { // Used clientside private int distance; private boolean inSameDimension; - private boolean receiverValid; public TileNetworkTransmitter() { rebuildOnUpdateChange = true; @@ -50,10 +49,7 @@ public class TileNetworkTransmitter extends TileNode { } public boolean canTransmit() { - return canUpdate() - && receiver != null - && isInSameDimension() - && isReceiverValid(); + return canUpdate() && receiver != null; } @Override @@ -78,7 +74,6 @@ public class TileNetworkTransmitter extends TileNode { buf.writeInt((receiver != null && isInSameDimension()) ? getDistance() : -1); buf.writeBoolean(isInSameDimension()); - buf.writeBoolean(isReceiverValid()); } @Override @@ -87,7 +82,6 @@ public class TileNetworkTransmitter extends TileNode { distance = buf.readInt(); inSameDimension = buf.readBoolean(); - receiverValid = buf.readBoolean(); } @Override @@ -108,6 +102,10 @@ public class TileNetworkTransmitter extends TileNode { return receiver; } + public int getReceiverDimension() { + return receiverDimension; + } + public int getDistance() { if (worldObj.isRemote) { return distance; @@ -123,8 +121,4 @@ public class TileNetworkTransmitter extends TileNode { public boolean isInSameDimension() { return worldObj.isRemote ? inSameDimension : worldObj.provider.getDimension() == receiverDimension; } - - public boolean isReceiverValid() { - return worldObj.isRemote ? receiverValid : (receiver != null && isInSameDimension() && worldObj.getTileEntity(receiver) instanceof TileNetworkReceiver); - } } diff --git a/src/main/java/refinedstorage/tile/TileNode.java b/src/main/java/refinedstorage/tile/TileNode.java index ca8cdb288..a132cef70 100755 --- a/src/main/java/refinedstorage/tile/TileNode.java +++ b/src/main/java/refinedstorage/tile/TileNode.java @@ -45,7 +45,7 @@ public abstract class TileNode extends TileBase implements INetworkNode, ISynchr onConnectionChange(network, update); if (rebuildOnUpdateChange) { - network.rebuildNodes(); + network.getNodeGraph().rebuild(network.getPosition()); } } diff --git a/src/main/java/refinedstorage/tile/controller/TileController.java b/src/main/java/refinedstorage/tile/controller/TileController.java index 16030d496..2a9d699f7 100755 --- a/src/main/java/refinedstorage/tile/controller/TileController.java +++ b/src/main/java/refinedstorage/tile/controller/TileController.java @@ -13,7 +13,6 @@ import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; -import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumFacing; import net.minecraft.util.math.BlockPos; import net.minecraftforge.common.capabilities.Capability; @@ -26,10 +25,7 @@ import refinedstorage.RefinedStorageBlocks; import refinedstorage.api.autocrafting.ICraftingPattern; import refinedstorage.api.autocrafting.ICraftingPatternContainer; import refinedstorage.api.autocrafting.ICraftingTask; -import refinedstorage.api.network.IGridHandler; -import refinedstorage.api.network.INetworkMaster; -import refinedstorage.api.network.INetworkNode; -import refinedstorage.api.network.IWirelessGridHandler; +import refinedstorage.api.network.*; import refinedstorage.api.storage.CompareUtils; import refinedstorage.api.storage.IGroupedStorage; import refinedstorage.api.storage.IStorage; @@ -37,6 +33,7 @@ import refinedstorage.apiimpl.autocrafting.BasicCraftingTask; import refinedstorage.apiimpl.autocrafting.CraftingPattern; import refinedstorage.apiimpl.autocrafting.ProcessingCraftingTask; import refinedstorage.apiimpl.network.GridHandler; +import refinedstorage.apiimpl.network.NetworkNodeGraph; import refinedstorage.apiimpl.network.WirelessGridHandler; import refinedstorage.apiimpl.storage.GroupedStorage; import refinedstorage.block.BlockController; @@ -49,7 +46,6 @@ import refinedstorage.network.MessageGridUpdate; import refinedstorage.tile.ISynchronizedContainer; import refinedstorage.tile.TileBase; import refinedstorage.tile.TileCrafter; -import refinedstorage.tile.TileNetworkTransmitter; import refinedstorage.tile.config.IRedstoneModeConfig; import refinedstorage.tile.config.RedstoneMode; import refinedstorage.tile.externalstorage.ExternalStorage; @@ -93,8 +89,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR } }; - private List nodes = new ArrayList(); - private Set nodesPos = new HashSet(); + private INetworkNodeGraph nodeGraph = new NetworkNodeGraph(this); private List patterns = new ArrayList(); @@ -139,6 +134,11 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR return energy.getEnergyStored() > 0 && redstoneMode.isEnabled(worldObj, pos); } + @Override + public INetworkNodeGraph getNodeGraph() { + return nodeGraph; + } + @Override public void update() { if (!worldObj.isRemote) { @@ -189,7 +189,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR if (couldRun != canRun()) { couldRun = canRun(); - rebuildNodes(); + nodeGraph.rebuild(pos); } if (getEnergyScaledForDisplay() != lastEnergyDisplay) { @@ -224,17 +224,6 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR } } - public void disconnectAll() { - for (INetworkNode node : nodes) { - if (node.isConnected()) { - node.onDisconnected(this); - } - } - - nodes.clear(); - nodesPos.clear(); - } - @Override public void invalidate() { super.invalidate(); @@ -244,11 +233,6 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR } } - @Override - public List getNodes() { - return nodes; - } - public List getClientNodes() { return clientNodes; } @@ -364,7 +348,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR public void rebuildPatterns() { patterns.clear(); - for (INetworkNode node : nodes) { + for (INetworkNode node : nodeGraph.all()) { if (node instanceof TileCrafter && node.canUpdate()) { TileCrafter crafter = (TileCrafter) node; @@ -387,84 +371,6 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR storage.rebuild(); } - @Override - public void rebuildNodes() { - if (!canRun()) { - if (!nodes.isEmpty()) { - disconnectAll(); - } - - return; - } - - List newNodes = new ArrayList(); - Set newNodesPos = new HashSet(); - - Set checked = new HashSet(); - Queue toCheck = new ArrayDeque(); - - for (EnumFacing facing : EnumFacing.VALUES) { - BlockPos pos = this.pos.offset(facing); - - checked.add(pos); - toCheck.add(pos); - } - - BlockPos currentPos; - while ((currentPos = toCheck.poll()) != null) { - TileEntity tile = worldObj.getTileEntity(currentPos); - - if (tile instanceof TileController && !pos.equals(tile.getPos())) { - worldObj.createExplosion(null, tile.getPos().getX(), tile.getPos().getY(), tile.getPos().getZ(), 4.5f, true); - } - - if (!(tile instanceof INetworkNode)) { - continue; - } - - INetworkNode node = (INetworkNode) tile; - - newNodes.add(node); - newNodesPos.add(node.getPosition()); - - if (tile instanceof TileNetworkTransmitter) { - BlockPos receiver = ((TileNetworkTransmitter) tile).getReceiver(); - - if (((TileNetworkTransmitter) tile).canTransmit() && checked.add(receiver)) { - toCheck.add(receiver); - } - } - - if (node.canConduct()) { - for (EnumFacing facing : EnumFacing.VALUES) { - BlockPos pos = currentPos.offset(facing); - - if (checked.add(pos)) { - toCheck.add(pos); - } - } - } - } - - List oldNodes = new ArrayList(nodes); - Set oldNodesPos = new HashSet(nodesPos); - - this.nodes = newNodes; - this.nodesPos = newNodesPos; - - for (INetworkNode newNode : nodes) { - if (!oldNodesPos.contains(newNode.getPosition())) { - newNode.onConnected(this); - } - } - - for (INetworkNode oldNode : oldNodes) { - if (!nodesPos.contains(oldNode.getPosition())) { - oldNode.onDisconnected(this); - } - } - } - @Override public void sendStorageToClient() { for (EntityPlayer player : worldObj.playerEntities) { @@ -707,7 +613,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR if (!worldObj.isRemote) { int usage = RefinedStorage.INSTANCE.controllerBaseUsage; - for (INetworkNode node : nodes) { + for (INetworkNode node : nodeGraph.all()) { if (node.canUpdate()) { usage += node.getEnergyUsage(); } @@ -759,7 +665,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR List clientNodes = new ArrayList(); - for (INetworkNode node : nodes) { + for (INetworkNode node : nodeGraph.all()) { if (node.canUpdate()) { IBlockState state = worldObj.getBlockState(node.getPosition()); From 8f7b1603bc4e446e1caeffbccdcc6826014fa768 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Mon, 1 Aug 2016 00:43:29 +0200 Subject: [PATCH 063/214] Add Interdimension Upgrade --- .../java/refinedstorage/RefinedStorage.java | 4 +++- .../solderer/SoldererRecipeUpgrade.java | 20 ++-------------- .../ContainerNetworkTransmitter.java | 1 + .../gui/GuiNetworkTransmitter.java | 2 +- .../java/refinedstorage/item/ItemUpgrade.java | 22 +++++++++++++++++- .../refinedstorage/proxy/ClientProxy.java | 4 +++- .../refinedstorage/proxy/CommonProxy.java | 1 + .../tile/TileNetworkTransmitter.java | 9 +++++++ .../assets/refinedstorage/lang/en_US.lang | 1 + .../models/item/interdimension_upgrade.json | 6 +++++ .../textures/gui/network_transmitter.png | Bin 1951 -> 2055 bytes 11 files changed, 48 insertions(+), 22 deletions(-) create mode 100755 src/main/resources/assets/refinedstorage/models/item/interdimension_upgrade.json diff --git a/src/main/java/refinedstorage/RefinedStorage.java b/src/main/java/refinedstorage/RefinedStorage.java index fe28eda5c..477bf14d4 100755 --- a/src/main/java/refinedstorage/RefinedStorage.java +++ b/src/main/java/refinedstorage/RefinedStorage.java @@ -77,12 +77,13 @@ public final class RefinedStorage { public boolean controllerUsesEnergy; public int wirelessTransmitterBaseRange; + public int wirelessTransmitterRangePerUpgrade; public int rangeUpgradeUsage; public int speedUpgradeUsage; public int craftingUpgradeUsage; public int stackUpgradeUsage; - public int wirelessTransmitterRangePerUpgrade; + public int interdimensionUpgradeUsage; @EventHandler public void preInit(FMLPreInitializationEvent e) { @@ -126,6 +127,7 @@ public final class RefinedStorage { speedUpgradeUsage = config.getInt("speed", "upgrades", 2, 0, Integer.MAX_VALUE, "The additional energy used per Speed Upgrade"); craftingUpgradeUsage = config.getInt("crafting", "upgrades", 5, 0, Integer.MAX_VALUE, "The additional energy used per Crafting Upgrade"); stackUpgradeUsage = config.getInt("stack", "upgrades", 12, 0, Integer.MAX_VALUE, "The additional energy used per Stack Upgrade"); + interdimensionUpgradeUsage = config.getInt("interdimension", "upgrades", 1000, 0, Integer.MAX_VALUE, "The energy used by the Interdimension Upgrade"); config.save(); } diff --git a/src/main/java/refinedstorage/apiimpl/solderer/SoldererRecipeUpgrade.java b/src/main/java/refinedstorage/apiimpl/solderer/SoldererRecipeUpgrade.java index 8f8f223ec..e92266508 100755 --- a/src/main/java/refinedstorage/apiimpl/solderer/SoldererRecipeUpgrade.java +++ b/src/main/java/refinedstorage/apiimpl/solderer/SoldererRecipeUpgrade.java @@ -1,7 +1,5 @@ package refinedstorage.apiimpl.solderer; -import net.minecraft.init.Blocks; -import net.minecraft.init.Items; import net.minecraft.item.ItemStack; import refinedstorage.RefinedStorageItems; import refinedstorage.api.solderer.ISoldererRecipe; @@ -12,25 +10,11 @@ public class SoldererRecipeUpgrade implements ISoldererRecipe { private ItemStack result; public SoldererRecipeUpgrade(int type) { - ItemStack requirement = null; - - switch (type) { - case ItemUpgrade.TYPE_RANGE: - requirement = new ItemStack(Items.ENDER_PEARL); - break; - case ItemUpgrade.TYPE_SPEED: - requirement = new ItemStack(Items.SUGAR); - break; - case ItemUpgrade.TYPE_CRAFTING: - requirement = new ItemStack(Blocks.CRAFTING_TABLE); - break; - } - this.result = new ItemStack(RefinedStorageItems.UPGRADE, 1, type); this.rows = new ItemStack[]{ - requirement, + ItemUpgrade.getRequirement(type), new ItemStack(RefinedStorageItems.UPGRADE, 1, 0), - requirement + ItemUpgrade.getRequirement(type) }; } diff --git a/src/main/java/refinedstorage/container/ContainerNetworkTransmitter.java b/src/main/java/refinedstorage/container/ContainerNetworkTransmitter.java index f87d364b8..55fb669a4 100755 --- a/src/main/java/refinedstorage/container/ContainerNetworkTransmitter.java +++ b/src/main/java/refinedstorage/container/ContainerNetworkTransmitter.java @@ -11,6 +11,7 @@ public class ContainerNetworkTransmitter extends ContainerBase { super(player); addSlotToContainer(new SlotItemHandler(networkTransmitter.getNetworkCard(), 0, 8, 20)); + addSlotToContainer(new SlotItemHandler(networkTransmitter.getUpgrades(), 0, 187, 6)); addPlayerInventory(8, 55); } diff --git a/src/main/java/refinedstorage/gui/GuiNetworkTransmitter.java b/src/main/java/refinedstorage/gui/GuiNetworkTransmitter.java index c2ea0f0be..cb3d005cb 100755 --- a/src/main/java/refinedstorage/gui/GuiNetworkTransmitter.java +++ b/src/main/java/refinedstorage/gui/GuiNetworkTransmitter.java @@ -8,7 +8,7 @@ public class GuiNetworkTransmitter extends GuiBase { private TileNetworkTransmitter networkTransmitter; public GuiNetworkTransmitter(ContainerNetworkTransmitter container, TileNetworkTransmitter networkTransmitter) { - super(container, 176, 137); + super(container, 210, 137); this.networkTransmitter = networkTransmitter; } diff --git a/src/main/java/refinedstorage/item/ItemUpgrade.java b/src/main/java/refinedstorage/item/ItemUpgrade.java index 921cc7887..6cb10cc12 100755 --- a/src/main/java/refinedstorage/item/ItemUpgrade.java +++ b/src/main/java/refinedstorage/item/ItemUpgrade.java @@ -1,6 +1,8 @@ package refinedstorage.item; import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import refinedstorage.RefinedStorage; @@ -12,6 +14,7 @@ public class ItemUpgrade extends ItemBase { public static final int TYPE_SPEED = 2; public static final int TYPE_CRAFTING = 3; public static final int TYPE_STACK = 4; + public static final int TYPE_INTERDIMENSION = 5; public ItemUpgrade() { super("upgrade"); @@ -23,7 +26,7 @@ public class ItemUpgrade extends ItemBase { @Override public void getSubItems(Item item, CreativeTabs tab, List list) { - for (int i = 0; i <= 4; ++i) { + for (int i = 0; i <= 5; ++i) { list.add(new ItemStack(item, 1, i)); } } @@ -38,8 +41,25 @@ public class ItemUpgrade extends ItemBase { return RefinedStorage.INSTANCE.craftingUpgradeUsage; case TYPE_STACK: return RefinedStorage.INSTANCE.stackUpgradeUsage; + case TYPE_INTERDIMENSION: + return RefinedStorage.INSTANCE.interdimensionUpgradeUsage; default: return 0; } } + + public static ItemStack getRequirement(int type) { + switch (type) { + case ItemUpgrade.TYPE_RANGE: + return new ItemStack(Items.ENDER_PEARL); + case ItemUpgrade.TYPE_SPEED: + return new ItemStack(Items.SUGAR); + case ItemUpgrade.TYPE_CRAFTING: + return new ItemStack(Blocks.CRAFTING_TABLE); + case ItemUpgrade.TYPE_INTERDIMENSION: + return new ItemStack(Items.NETHER_STAR); + default: + return null; + } + } } diff --git a/src/main/java/refinedstorage/proxy/ClientProxy.java b/src/main/java/refinedstorage/proxy/ClientProxy.java index 07a2aa23c..315aa0f66 100755 --- a/src/main/java/refinedstorage/proxy/ClientProxy.java +++ b/src/main/java/refinedstorage/proxy/ClientProxy.java @@ -61,7 +61,8 @@ public class ClientProxy extends CommonProxy { new ResourceLocation("refinedstorage:upgrade"), new ResourceLocation("refinedstorage:range_upgrade"), new ResourceLocation("refinedstorage:speed_upgrade"), - new ResourceLocation("refinedstorage:stack_upgrade") + new ResourceLocation("refinedstorage:stack_upgrade"), + new ResourceLocation("refinedstorage:interdimension_upgrade") ); // Items @@ -102,6 +103,7 @@ public class ClientProxy extends CommonProxy { ModelLoader.setCustomModelResourceLocation(RefinedStorageItems.UPGRADE, ItemUpgrade.TYPE_SPEED, new ModelResourceLocation("refinedstorage:speed_upgrade", "inventory")); ModelLoader.setCustomModelResourceLocation(RefinedStorageItems.UPGRADE, ItemUpgrade.TYPE_CRAFTING, new ModelResourceLocation("refinedstorage:crafting_upgrade", "inventory")); ModelLoader.setCustomModelResourceLocation(RefinedStorageItems.UPGRADE, ItemUpgrade.TYPE_STACK, new ModelResourceLocation("refinedstorage:stack_upgrade", "inventory")); + ModelLoader.setCustomModelResourceLocation(RefinedStorageItems.UPGRADE, ItemUpgrade.TYPE_INTERDIMENSION, new ModelResourceLocation("refinedstorage:interdimension_upgrade", "inventory")); // Blocks ModelLoader.setCustomStateMapper(RefinedStorageBlocks.GRID, (new StateMap.Builder()) diff --git a/src/main/java/refinedstorage/proxy/CommonProxy.java b/src/main/java/refinedstorage/proxy/CommonProxy.java index 01f5c5230..22ba02209 100755 --- a/src/main/java/refinedstorage/proxy/CommonProxy.java +++ b/src/main/java/refinedstorage/proxy/CommonProxy.java @@ -438,6 +438,7 @@ public class CommonProxy { RefinedStorageAPI.SOLDERER_REGISTRY.addRecipe(new SoldererRecipeUpgrade(ItemUpgrade.TYPE_RANGE)); RefinedStorageAPI.SOLDERER_REGISTRY.addRecipe(new SoldererRecipeUpgrade(ItemUpgrade.TYPE_SPEED)); RefinedStorageAPI.SOLDERER_REGISTRY.addRecipe(new SoldererRecipeUpgrade(ItemUpgrade.TYPE_CRAFTING)); + RefinedStorageAPI.SOLDERER_REGISTRY.addRecipe(new SoldererRecipeUpgrade(ItemUpgrade.TYPE_INTERDIMENSION)); GameRegistry.addShapedRecipe(new ItemStack(RefinedStorageItems.UPGRADE, 1, ItemUpgrade.TYPE_STACK), "USU", diff --git a/src/main/java/refinedstorage/tile/TileNetworkTransmitter.java b/src/main/java/refinedstorage/tile/TileNetworkTransmitter.java index 3ac3bfbc8..9404e30a8 100755 --- a/src/main/java/refinedstorage/tile/TileNetworkTransmitter.java +++ b/src/main/java/refinedstorage/tile/TileNetworkTransmitter.java @@ -9,10 +9,13 @@ import refinedstorage.RefinedStorage; import refinedstorage.RefinedStorageItems; import refinedstorage.container.ContainerNetworkTransmitter; import refinedstorage.inventory.ItemHandlerBasic; +import refinedstorage.inventory.ItemHandlerUpgrade; import refinedstorage.inventory.ItemValidatorBasic; import refinedstorage.item.ItemNetworkCard; +import refinedstorage.item.ItemUpgrade; public class TileNetworkTransmitter extends TileNode { + private ItemHandlerUpgrade upgrades = new ItemHandlerUpgrade(1, this, ItemUpgrade.TYPE_INTERDIMENSION); private ItemHandlerBasic networkCard = new ItemHandlerBasic(1, this, new ItemValidatorBasic(RefinedStorageItems.NETWORK_CARD)) { @Override protected void onContentsChanged(int slot) { @@ -57,6 +60,7 @@ public class TileNetworkTransmitter extends TileNode { super.write(tag); writeItems(networkCard, 0, tag); + writeItems(upgrades, 1, tag); return tag; } @@ -66,6 +70,7 @@ public class TileNetworkTransmitter extends TileNode { super.read(tag); readItems(networkCard, 0, tag); + readItems(upgrades, 1, tag); } @Override @@ -98,6 +103,10 @@ public class TileNetworkTransmitter extends TileNode { return networkCard; } + public ItemHandlerUpgrade getUpgrades() { + return upgrades; + } + public BlockPos getReceiver() { return receiver; } diff --git a/src/main/resources/assets/refinedstorage/lang/en_US.lang b/src/main/resources/assets/refinedstorage/lang/en_US.lang index f92444ed5..513b87679 100755 --- a/src/main/resources/assets/refinedstorage/lang/en_US.lang +++ b/src/main/resources/assets/refinedstorage/lang/en_US.lang @@ -152,6 +152,7 @@ item.refinedstorage:upgrade.1.name=Range Upgrade item.refinedstorage:upgrade.2.name=Speed Upgrade item.refinedstorage:upgrade.3.name=Crafting Upgrade item.refinedstorage:upgrade.4.name=Stack Upgrade +item.refinedstorage:upgrade.5.name=Interdimension Upgrade item.refinedstorage:storage_housing.name=Storage Housing item.refinedstorage:grid_filter.name=Grid Filter item.refinedstorage:network_card.name=Network Card \ No newline at end of file diff --git a/src/main/resources/assets/refinedstorage/models/item/interdimension_upgrade.json b/src/main/resources/assets/refinedstorage/models/item/interdimension_upgrade.json new file mode 100755 index 000000000..fc8e5350e --- /dev/null +++ b/src/main/resources/assets/refinedstorage/models/item/interdimension_upgrade.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "refinedstorage:items/interdimension_upgrade" + } +} diff --git a/src/main/resources/assets/refinedstorage/textures/gui/network_transmitter.png b/src/main/resources/assets/refinedstorage/textures/gui/network_transmitter.png index 174bfcf7a13b016ed15d590aac07e683531020b3..02b15cbaebaf0d6a2fbf9e3575d2fba585cae30a 100755 GIT binary patch delta 741 zcmbQw-!8BrgoSG#0|Vba##c@o4@{0@(WuYyba4!+hCJ zOZUS+|MoLQ2|1akozje~E&t0uzL=}Jd%m=9xbUGQ!CRRd{p|1i$-j?}XsNVbyZ-&N z;(O5wTT1?ZzWM4`o@IKi+kdNuNbO#?yI=1Xo%_}E&z0ftEjBL(s|{0y5A0p-dpZ5f z`qYM(^-~`?GB7YK*uCx^Bamh&S%23BNI8^WVtB%SK|EyTkEK^1XmKtOzj;O0_vrK7 zUx`OwF}CclKd1MKJ7h1jTKeQyOw$>b-E}_j-+TVW{recao4PN*`hGyQAzPby!!Kq9 zpE_Q-gb)^mp5yx;=hywP6loAx|E2BJ9meO6mpc3~tQTl_n)y0w`|a=Y?PW|azS-ON z-hUmj_0s!%o3+`Ok5_N!R@n3Z*NezK-(GF6&v`FhQ*O<0=(hg)_xCC{?fJWZHq)Mp zuMd9wcqowfKZ3Qv{QP@)SzEaySM^sjeE4|xM!hn~x6kM5f;`W#w~84Q3RdrPz=84Ns`LtlhJVRES*v_Q?SiBn z`kBnnwwJMh)dGnNmFe6tHbcVi{U>`Jlh$a35R;%r{_xDb=%PzxGIMFk@n1 z$Zz=Jrx68|K3Xmixz{sX`YC%v-R11<7yi9h-M0Ei)5qQvsm#(#mf9aC<+4s@WN)1u iz-|V_T#}}_8-K6|aXqV8F<0#{$XriXKbLh*2~7aQ3_r2} delta 636 zcmZn{n9sitke*p>ieE1W>@!(XYR}5CWS-sss?fLu z<_)iw-dwZ8f$hRwYYqkmh6}~w+(3%Kq5Qo9h&msu1Edm|3-b3reWq;|rgETYef{3z ziT6*u>=#|lKB4aKo_%Ze1HQ88tP{V=s>Rg9vOWCjc?aEwxAqK~AMc7NoPBQpDZcL4 zvudWiXNw(vz2aE#xW0I5{q?O`p$s1R_VzWi?5n>%p8xwl!^^MBrnU4 zt@uv13#$*rzP`2&Bn1XAbzsh)-^xa7V>#I_R8L=dpxpXa{mSNbF3c~Myydbvb37Jo z9!TAnJ4czo>On+D_2l4JUIq>KcKfjIyM575wnSCRK|MG8L89F|E|{tX&-KJ$YzBur zv*!ebH!=Q#M#F3VhI@PcSoht(3ekK&w~V#U*&3+Z9;ydT`|Ue0?Ryy06d5${Z=ZdN zxo3aLdpR#bhMyu|E`3|*Emm-PAJgQ6?7EZZvIhdOyW}i0p8bpwqRYN-&rtCM8SLrm K=d#Wzp$P!>GW06| From 1f05d9570fa745c569e8f85e511a5e428b5a1dd3 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Mon, 1 Aug 2016 00:43:45 +0200 Subject: [PATCH 064/214] Add Interdimension Upgrade --- .../textures/items/interdimension_upgrade.png | Bin 0 -> 312 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100755 src/main/resources/assets/refinedstorage/textures/items/interdimension_upgrade.png diff --git a/src/main/resources/assets/refinedstorage/textures/items/interdimension_upgrade.png b/src/main/resources/assets/refinedstorage/textures/items/interdimension_upgrade.png new file mode 100755 index 0000000000000000000000000000000000000000..2117d38a307ff64346f7ffd41cbb500a568b522b GIT binary patch literal 312 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6;>1s;*b z3=Dj`L74IQk1J+CLCF%=h?3y^w370~qEv>0#LT=By}Z;C1rt33Jwt=FTwDi$ine;X zIEGmGC;#~W-`-VXwSp!XJ16%O6Nbpo+og;D)$g`tJ}R(?hat0~xcJxq_vP0A{_nW{ z@BihuFB1$W@l+JnKKie}UHX6h-pgP9|LxUWBFXUi(DB!{|LtR6vu^JE#&oo?BZtF? zty8eaO`uJ(iF@&C_lFajH*!sC+Q=o;|KFH_p`rLqQ_ZJy?m!PPc)I$ztaD0e0swH6 Bd^Z39 literal 0 HcmV?d00001 From 6979c476efda974e91815d5fe61b31c9452ac7f1 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Mon, 1 Aug 2016 01:12:38 +0200 Subject: [PATCH 065/214] Finish it up --- CHANGELOG.md | 4 +++ .../java/refinedstorage/RefinedStorage.java | 4 +-- .../apiimpl/network/NetworkNodeGraph.java | 2 +- .../gui/GuiNetworkTransmitter.java | 6 ++-- .../java/refinedstorage/item/ItemUpgrade.java | 8 ++--- .../refinedstorage/proxy/ClientProxy.java | 4 +-- .../refinedstorage/proxy/CommonProxy.java | 2 +- .../tile/TileNetworkTransmitter.java | 34 +++++++++++++----- .../assets/refinedstorage/lang/en_US.lang | 6 ++-- .../assets/refinedstorage/lang/nl_NL.lang | 5 +-- .../models/item/interdimension_upgrade.json | 6 ---- .../models/item/interdimensional_upgrade.json | 6 ++++ .../textures/items/interdimension_upgrade.png | Bin 312 -> 0 bytes .../items/interdimensional_upgrade.png | Bin 0 -> 366 bytes 14 files changed, 55 insertions(+), 32 deletions(-) delete mode 100755 src/main/resources/assets/refinedstorage/models/item/interdimension_upgrade.json create mode 100755 src/main/resources/assets/refinedstorage/models/item/interdimensional_upgrade.json delete mode 100755 src/main/resources/assets/refinedstorage/textures/items/interdimension_upgrade.png create mode 100755 src/main/resources/assets/refinedstorage/textures/items/interdimensional_upgrade.png diff --git a/CHANGELOG.md b/CHANGELOG.md index 0de10c9ea..c6292e3e9 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Refined Storage Changelog +### 0.8.14 +**Features** +- Added Interdimensional Upgrade so the Network Transmitter can work over different dimensions + ### 0.8.13 **Bugfixes** - Fixed rendering crash with Disk Drive diff --git a/src/main/java/refinedstorage/RefinedStorage.java b/src/main/java/refinedstorage/RefinedStorage.java index 477bf14d4..23d49f8cf 100755 --- a/src/main/java/refinedstorage/RefinedStorage.java +++ b/src/main/java/refinedstorage/RefinedStorage.java @@ -83,7 +83,7 @@ public final class RefinedStorage { public int speedUpgradeUsage; public int craftingUpgradeUsage; public int stackUpgradeUsage; - public int interdimensionUpgradeUsage; + public int interdimensionalUpgradeUsage; @EventHandler public void preInit(FMLPreInitializationEvent e) { @@ -127,7 +127,7 @@ public final class RefinedStorage { speedUpgradeUsage = config.getInt("speed", "upgrades", 2, 0, Integer.MAX_VALUE, "The additional energy used per Speed Upgrade"); craftingUpgradeUsage = config.getInt("crafting", "upgrades", 5, 0, Integer.MAX_VALUE, "The additional energy used per Crafting Upgrade"); stackUpgradeUsage = config.getInt("stack", "upgrades", 12, 0, Integer.MAX_VALUE, "The additional energy used per Stack Upgrade"); - interdimensionUpgradeUsage = config.getInt("interdimension", "upgrades", 1000, 0, Integer.MAX_VALUE, "The energy used by the Interdimension Upgrade"); + interdimensionalUpgradeUsage = config.getInt("interdimensional", "upgrades", 1000, 0, Integer.MAX_VALUE, "The additional energy used by the Interdimensional Upgrade"); config.save(); } diff --git a/src/main/java/refinedstorage/apiimpl/network/NetworkNodeGraph.java b/src/main/java/refinedstorage/apiimpl/network/NetworkNodeGraph.java index e31a30de2..c18d2ef2b 100755 --- a/src/main/java/refinedstorage/apiimpl/network/NetworkNodeGraph.java +++ b/src/main/java/refinedstorage/apiimpl/network/NetworkNodeGraph.java @@ -72,7 +72,7 @@ public class NetworkNodeGraph implements INetworkNodeGraph { final TileNetworkTransmitter transmitter = (TileNetworkTransmitter) tile; if (transmitter.canTransmit()) { - if (!transmitter.isInSameDimension()) { + if (!transmitter.isSameDimension()) { NetworkNodeGraph dimensionGraph = new NetworkNodeGraph(controller) { @Override public World getWorld() { diff --git a/src/main/java/refinedstorage/gui/GuiNetworkTransmitter.java b/src/main/java/refinedstorage/gui/GuiNetworkTransmitter.java index cb3d005cb..9606afc60 100755 --- a/src/main/java/refinedstorage/gui/GuiNetworkTransmitter.java +++ b/src/main/java/refinedstorage/gui/GuiNetworkTransmitter.java @@ -35,8 +35,10 @@ public class GuiNetworkTransmitter extends GuiBase { String distance; - if (!networkTransmitter.isInSameDimension()) { - distance = t("gui.refinedstorage:network_transmitter.different_dimension"); + if (!networkTransmitter.isDimensionSupported()) { + distance = t("gui.refinedstorage:network_transmitter.missing_upgrade"); + } else if (!networkTransmitter.isSameDimension()) { + distance = t("gui.refinedstorage:network_transmitter.dimension", networkTransmitter.getReceiverDimension()); } else if (networkTransmitter.getDistance() == -1) { distance = t("gui.refinedstorage:network_transmitter.missing_card"); } else { diff --git a/src/main/java/refinedstorage/item/ItemUpgrade.java b/src/main/java/refinedstorage/item/ItemUpgrade.java index 6cb10cc12..863a1b337 100755 --- a/src/main/java/refinedstorage/item/ItemUpgrade.java +++ b/src/main/java/refinedstorage/item/ItemUpgrade.java @@ -14,7 +14,7 @@ public class ItemUpgrade extends ItemBase { public static final int TYPE_SPEED = 2; public static final int TYPE_CRAFTING = 3; public static final int TYPE_STACK = 4; - public static final int TYPE_INTERDIMENSION = 5; + public static final int TYPE_INTERDIMENSIONAL = 5; public ItemUpgrade() { super("upgrade"); @@ -41,8 +41,8 @@ public class ItemUpgrade extends ItemBase { return RefinedStorage.INSTANCE.craftingUpgradeUsage; case TYPE_STACK: return RefinedStorage.INSTANCE.stackUpgradeUsage; - case TYPE_INTERDIMENSION: - return RefinedStorage.INSTANCE.interdimensionUpgradeUsage; + case TYPE_INTERDIMENSIONAL: + return RefinedStorage.INSTANCE.interdimensionalUpgradeUsage; default: return 0; } @@ -56,7 +56,7 @@ public class ItemUpgrade extends ItemBase { return new ItemStack(Items.SUGAR); case ItemUpgrade.TYPE_CRAFTING: return new ItemStack(Blocks.CRAFTING_TABLE); - case ItemUpgrade.TYPE_INTERDIMENSION: + case ItemUpgrade.TYPE_INTERDIMENSIONAL: return new ItemStack(Items.NETHER_STAR); default: return null; diff --git a/src/main/java/refinedstorage/proxy/ClientProxy.java b/src/main/java/refinedstorage/proxy/ClientProxy.java index 315aa0f66..58182e494 100755 --- a/src/main/java/refinedstorage/proxy/ClientProxy.java +++ b/src/main/java/refinedstorage/proxy/ClientProxy.java @@ -62,7 +62,7 @@ public class ClientProxy extends CommonProxy { new ResourceLocation("refinedstorage:range_upgrade"), new ResourceLocation("refinedstorage:speed_upgrade"), new ResourceLocation("refinedstorage:stack_upgrade"), - new ResourceLocation("refinedstorage:interdimension_upgrade") + new ResourceLocation("refinedstorage:interdimensional_upgrade") ); // Items @@ -103,7 +103,7 @@ public class ClientProxy extends CommonProxy { ModelLoader.setCustomModelResourceLocation(RefinedStorageItems.UPGRADE, ItemUpgrade.TYPE_SPEED, new ModelResourceLocation("refinedstorage:speed_upgrade", "inventory")); ModelLoader.setCustomModelResourceLocation(RefinedStorageItems.UPGRADE, ItemUpgrade.TYPE_CRAFTING, new ModelResourceLocation("refinedstorage:crafting_upgrade", "inventory")); ModelLoader.setCustomModelResourceLocation(RefinedStorageItems.UPGRADE, ItemUpgrade.TYPE_STACK, new ModelResourceLocation("refinedstorage:stack_upgrade", "inventory")); - ModelLoader.setCustomModelResourceLocation(RefinedStorageItems.UPGRADE, ItemUpgrade.TYPE_INTERDIMENSION, new ModelResourceLocation("refinedstorage:interdimension_upgrade", "inventory")); + ModelLoader.setCustomModelResourceLocation(RefinedStorageItems.UPGRADE, ItemUpgrade.TYPE_INTERDIMENSIONAL, new ModelResourceLocation("refinedstorage:interdimensional_upgrade", "inventory")); // Blocks ModelLoader.setCustomStateMapper(RefinedStorageBlocks.GRID, (new StateMap.Builder()) diff --git a/src/main/java/refinedstorage/proxy/CommonProxy.java b/src/main/java/refinedstorage/proxy/CommonProxy.java index 22ba02209..5bf983892 100755 --- a/src/main/java/refinedstorage/proxy/CommonProxy.java +++ b/src/main/java/refinedstorage/proxy/CommonProxy.java @@ -438,7 +438,7 @@ public class CommonProxy { RefinedStorageAPI.SOLDERER_REGISTRY.addRecipe(new SoldererRecipeUpgrade(ItemUpgrade.TYPE_RANGE)); RefinedStorageAPI.SOLDERER_REGISTRY.addRecipe(new SoldererRecipeUpgrade(ItemUpgrade.TYPE_SPEED)); RefinedStorageAPI.SOLDERER_REGISTRY.addRecipe(new SoldererRecipeUpgrade(ItemUpgrade.TYPE_CRAFTING)); - RefinedStorageAPI.SOLDERER_REGISTRY.addRecipe(new SoldererRecipeUpgrade(ItemUpgrade.TYPE_INTERDIMENSION)); + RefinedStorageAPI.SOLDERER_REGISTRY.addRecipe(new SoldererRecipeUpgrade(ItemUpgrade.TYPE_INTERDIMENSIONAL)); GameRegistry.addShapedRecipe(new ItemStack(RefinedStorageItems.UPGRADE, 1, ItemUpgrade.TYPE_STACK), "USU", diff --git a/src/main/java/refinedstorage/tile/TileNetworkTransmitter.java b/src/main/java/refinedstorage/tile/TileNetworkTransmitter.java index 9404e30a8..821f14c68 100755 --- a/src/main/java/refinedstorage/tile/TileNetworkTransmitter.java +++ b/src/main/java/refinedstorage/tile/TileNetworkTransmitter.java @@ -15,7 +15,17 @@ import refinedstorage.item.ItemNetworkCard; import refinedstorage.item.ItemUpgrade; public class TileNetworkTransmitter extends TileNode { - private ItemHandlerUpgrade upgrades = new ItemHandlerUpgrade(1, this, ItemUpgrade.TYPE_INTERDIMENSION); + private ItemHandlerUpgrade upgrades = new ItemHandlerUpgrade(1, this, ItemUpgrade.TYPE_INTERDIMENSIONAL) { + @Override + protected void onContentsChanged(int slot) { + super.onContentsChanged(slot); + + if (network != null) { + network.getNodeGraph().rebuild(network.getPosition()); + } + } + }; + private ItemHandlerBasic networkCard = new ItemHandlerBasic(1, this, new ItemValidatorBasic(RefinedStorageItems.NETWORK_CARD)) { @Override protected void onContentsChanged(int slot) { @@ -41,7 +51,7 @@ public class TileNetworkTransmitter extends TileNode { // Used clientside private int distance; - private boolean inSameDimension; + private boolean dimensionSupported; public TileNetworkTransmitter() { rebuildOnUpdateChange = true; @@ -52,7 +62,7 @@ public class TileNetworkTransmitter extends TileNode { } public boolean canTransmit() { - return canUpdate() && receiver != null; + return canUpdate() && receiver != null && isDimensionSupported(); } @Override @@ -77,8 +87,9 @@ public class TileNetworkTransmitter extends TileNode { public void writeContainerData(ByteBuf buf) { super.writeContainerData(buf); - buf.writeInt((receiver != null && isInSameDimension()) ? getDistance() : -1); - buf.writeBoolean(isInSameDimension()); + buf.writeInt((receiver != null && isSameDimension()) ? getDistance() : -1); + buf.writeInt(receiverDimension); + buf.writeBoolean(isDimensionSupported()); } @Override @@ -86,12 +97,13 @@ public class TileNetworkTransmitter extends TileNode { super.readContainerData(buf); distance = buf.readInt(); - inSameDimension = buf.readBoolean(); + receiverDimension = buf.readInt(); + dimensionSupported = buf.readBoolean(); } @Override public int getEnergyUsage() { - return RefinedStorage.INSTANCE.networkTransmitterUsage + (int) Math.ceil(RefinedStorage.INSTANCE.networkTransmitterPerBlockUsage * getDistance()); + return RefinedStorage.INSTANCE.networkTransmitterUsage + (isSameDimension() ? (int) Math.ceil(RefinedStorage.INSTANCE.networkTransmitterPerBlockUsage * getDistance()) : 0) + upgrades.getEnergyUsage(); } @Override @@ -127,7 +139,11 @@ public class TileNetworkTransmitter extends TileNode { return (int) Math.sqrt(Math.pow(pos.getX() - receiver.getX(), 2) + Math.pow(pos.getY() - receiver.getY(), 2) + Math.pow(pos.getZ() - receiver.getZ(), 2)); } - public boolean isInSameDimension() { - return worldObj.isRemote ? inSameDimension : worldObj.provider.getDimension() == receiverDimension; + public boolean isSameDimension() { + return worldObj.provider.getDimension() == receiverDimension; + } + + public boolean isDimensionSupported() { + return worldObj.isRemote ? dimensionSupported : (isSameDimension() || upgrades.hasUpgrade(ItemUpgrade.TYPE_INTERDIMENSIONAL)); } } diff --git a/src/main/resources/assets/refinedstorage/lang/en_US.lang b/src/main/resources/assets/refinedstorage/lang/en_US.lang index 513b87679..d1174dc7a 100755 --- a/src/main/resources/assets/refinedstorage/lang/en_US.lang +++ b/src/main/resources/assets/refinedstorage/lang/en_US.lang @@ -33,9 +33,9 @@ gui.refinedstorage:processing_pattern_encoder.pattern_create=Create Pattern gui.refinedstorage:grid_filter=Grid Filter gui.refinedstorage:network_transmitter=Network Transmitter gui.refinedstorage:network_transmitter.distance=%d blocks +gui.refinedstorage:network_transmitter.dimension=Dimension #%d gui.refinedstorage:network_transmitter.missing_card=Missing Network Card -gui.refinedstorage:network_transmitter.missing_receiver=Receiver not found -gui.refinedstorage:network_transmitter.different_dimension=Different dimension +gui.refinedstorage:network_transmitter.missing_upgrade=Insert upgrade misc.refinedstorage:energy_stored=%d / %d RS misc.refinedstorage:energy_usage=Usage: %d RS/t @@ -152,7 +152,7 @@ item.refinedstorage:upgrade.1.name=Range Upgrade item.refinedstorage:upgrade.2.name=Speed Upgrade item.refinedstorage:upgrade.3.name=Crafting Upgrade item.refinedstorage:upgrade.4.name=Stack Upgrade -item.refinedstorage:upgrade.5.name=Interdimension Upgrade +item.refinedstorage:upgrade.5.name=Interdimensional Upgrade item.refinedstorage:storage_housing.name=Storage Housing item.refinedstorage:grid_filter.name=Grid Filter item.refinedstorage:network_card.name=Network Card \ No newline at end of file diff --git a/src/main/resources/assets/refinedstorage/lang/nl_NL.lang b/src/main/resources/assets/refinedstorage/lang/nl_NL.lang index 90a9ae7d9..8ea49b688 100755 --- a/src/main/resources/assets/refinedstorage/lang/nl_NL.lang +++ b/src/main/resources/assets/refinedstorage/lang/nl_NL.lang @@ -33,9 +33,9 @@ gui.refinedstorage:processing_pattern_encoder.pattern_create=Patroon maken gui.refinedstorage:grid_filter=Rooster Filter gui.refinedstorage:network_transmitter=Netwerkzender gui.refinedstorage:network_transmitter.distance=%d blokken +gui.refinedstorage:network_transmitter.dimension=Dimensie #%d gui.refinedstorage:network_transmitter.missing_card=Geen Netwerkkaart -gui.refinedstorage:network_transmitter.missing_receiver=Ontvanger niet gevonden -gui.refinedstorage:network_transmitter.different_dimension=Andere dimensie +gui.refinedstorage:network_transmitter.missing_upgrade=Ontbrekende upgrade misc.refinedstorage:energy_stored=%d / %d RS misc.refinedstorage:energy_usage=Vebruik: %d RS/t @@ -152,6 +152,7 @@ item.refinedstorage:upgrade.1.name=Afstand Upgrade item.refinedstorage:upgrade.2.name=Snelheid Upgrade item.refinedstorage:upgrade.3.name=Crafting Upgrade item.refinedstorage:upgrade.4.name=Stack Upgrade +item.refinedstorage:upgrade.5.name=Interdimensionale Upgrade item.refinedstorage:storage_housing.name=Opslagomhulsel item.refinedstorage:grid_filter.name=Rooster Filter item.refinedstorage:network_card.name=Netwerk Kaart \ No newline at end of file diff --git a/src/main/resources/assets/refinedstorage/models/item/interdimension_upgrade.json b/src/main/resources/assets/refinedstorage/models/item/interdimension_upgrade.json deleted file mode 100755 index fc8e5350e..000000000 --- a/src/main/resources/assets/refinedstorage/models/item/interdimension_upgrade.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "item/generated", - "textures": { - "layer0": "refinedstorage:items/interdimension_upgrade" - } -} diff --git a/src/main/resources/assets/refinedstorage/models/item/interdimensional_upgrade.json b/src/main/resources/assets/refinedstorage/models/item/interdimensional_upgrade.json new file mode 100755 index 000000000..7fef125b7 --- /dev/null +++ b/src/main/resources/assets/refinedstorage/models/item/interdimensional_upgrade.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "refinedstorage:items/interdimensional_upgrade" + } +} diff --git a/src/main/resources/assets/refinedstorage/textures/items/interdimension_upgrade.png b/src/main/resources/assets/refinedstorage/textures/items/interdimension_upgrade.png deleted file mode 100755 index 2117d38a307ff64346f7ffd41cbb500a568b522b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 312 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6;>1s;*b z3=Dj`L74IQk1J+CLCF%=h?3y^w370~qEv>0#LT=By}Z;C1rt33Jwt=FTwDi$ine;X zIEGmGC;#~W-`-VXwSp!XJ16%O6Nbpo+og;D)$g`tJ}R(?hat0~xcJxq_vP0A{_nW{ z@BihuFB1$W@l+JnKKie}UHX6h-pgP9|LxUWBFXUi(DB!{|LtR6vu^JE#&oo?BZtF? zty8eaO`uJ(iF@&C_lFajH*!sC+Q=o;|KFH_p`rLqQ_ZJy?m!PPc)I$ztaD0e0swH6 Bd^Z39 diff --git a/src/main/resources/assets/refinedstorage/textures/items/interdimensional_upgrade.png b/src/main/resources/assets/refinedstorage/textures/items/interdimensional_upgrade.png new file mode 100755 index 0000000000000000000000000000000000000000..5afce07a1c3150a038e8ed53b04ed0e9ff99cea8 GIT binary patch literal 366 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6;>1s;*b z3=Dj`L74IQk1J+CLCF%=h?3y^w370~qEv>0#LT=By}Z;C1rt33Jwt=FTwDi$ie7uV zIEGmGFP-Sge=tC#^>6yp&V^1&f*Us;Jauo&;x%XLnmRPMiM5#=+hkD`=d{8-TI~L# zx%Ym5{d$G@f&P+((m-^N$=Cal^tGSUn-{qV^e z$#)XuUV0<2vz$|WUSisB>65XaIA8xc{ZJh2%Hjt*85`%ksi|j~cns)m22WQ%mvv4F FO#tEQlrjJS literal 0 HcmV?d00001 From 82d0eab6462fa811a2869b55e5194dbe0de01436 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Mon, 1 Aug 2016 01:33:17 +0200 Subject: [PATCH 066/214] Finish it up --- .../container/ContainerNetworkTransmitter.java | 6 +++--- .../tile/controller/TileController.java | 4 ++-- .../textures/items/interdimension_upgrade.png | Bin 0 -> 354 bytes 3 files changed, 5 insertions(+), 5 deletions(-) create mode 100755 src/main/resources/assets/refinedstorage/textures/items/interdimension_upgrade.png diff --git a/src/main/java/refinedstorage/container/ContainerNetworkTransmitter.java b/src/main/java/refinedstorage/container/ContainerNetworkTransmitter.java index 55fb669a4..6946738bd 100755 --- a/src/main/java/refinedstorage/container/ContainerNetworkTransmitter.java +++ b/src/main/java/refinedstorage/container/ContainerNetworkTransmitter.java @@ -25,11 +25,11 @@ public class ContainerNetworkTransmitter extends ContainerBase { if (slot != null && slot.getHasStack()) { stack = slot.getStack(); - if (index == 0) { - if (!mergeItemStack(stack, 1, inventorySlots.size(), false)) { + if (index <= 1) { + if (!mergeItemStack(stack, 2, inventorySlots.size(), false)) { return null; } - } else if (!mergeItemStack(stack, 0, 1, false)) { + } else if (!mergeItemStack(stack, 0, 2, false)) { return null; } diff --git a/src/main/java/refinedstorage/tile/controller/TileController.java b/src/main/java/refinedstorage/tile/controller/TileController.java index 2a9d699f7..bd15f6707 100755 --- a/src/main/java/refinedstorage/tile/controller/TileController.java +++ b/src/main/java/refinedstorage/tile/controller/TileController.java @@ -373,7 +373,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR @Override public void sendStorageToClient() { - for (EntityPlayer player : worldObj.playerEntities) { + for (EntityPlayer player : worldObj.getMinecraftServer().getPlayerList().getPlayerList()) { if (isWatchingGrid(player)) { sendStorageToClient((EntityPlayerMP) player); } @@ -387,7 +387,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR @Override public void sendStorageDeltaToClient(ItemStack stack, int delta) { - for (EntityPlayer player : worldObj.playerEntities) { + for (EntityPlayer player : worldObj.getMinecraftServer().getPlayerList().getPlayerList()) { if (isWatchingGrid(player)) { RefinedStorage.INSTANCE.network.sendTo(new MessageGridDelta(this, stack, delta), (EntityPlayerMP) player); } diff --git a/src/main/resources/assets/refinedstorage/textures/items/interdimension_upgrade.png b/src/main/resources/assets/refinedstorage/textures/items/interdimension_upgrade.png new file mode 100755 index 0000000000000000000000000000000000000000..df8e37ddaca664bf3992c2c661a5f2b10e49edff GIT binary patch literal 354 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6;>1s;*b z3=Dj`L74IQk1J+CLCF%=h?3y^w370~qEv>0#LT=By}Z;C1rt33Jwt=FTwDi$itc;5 zIEGmGFP-Sk-Q*y1wOyG$-?T=H2wVc{y%n&5(a+b2FXGFi*#y3#3hnZ{E!{fm#cE2ywMP+)fZ z%yio-DMRi;t_73Efx?EQvYxotT8H{?bM44Cc=0xITfWAL#T5+yj~Fzcb2?tSvfI>l zo{rc7MaF{b7H73A&aY;=U|x2TG3>bL@ngx_>l_u2_gvP;6uP+Kb sd%EM^7zfEcncVbw-&uW#)AT(2CrKG3TSp00i_>zopr03p_j1^@s6 literal 0 HcmV?d00001 From 445355896dc6d03542c68f7c62688761d14668d3 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Mon, 1 Aug 2016 01:33:43 +0200 Subject: [PATCH 067/214] Finish it up --- .../textures/items/interdimension_upgrade.png | Bin 354 -> 0 bytes .../textures/items/interdimensional_upgrade.png | Bin 366 -> 354 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100755 src/main/resources/assets/refinedstorage/textures/items/interdimension_upgrade.png diff --git a/src/main/resources/assets/refinedstorage/textures/items/interdimension_upgrade.png b/src/main/resources/assets/refinedstorage/textures/items/interdimension_upgrade.png deleted file mode 100755 index df8e37ddaca664bf3992c2c661a5f2b10e49edff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 354 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6;>1s;*b z3=Dj`L74IQk1J+CLCF%=h?3y^w370~qEv>0#LT=By}Z;C1rt33Jwt=FTwDi$itc;5 zIEGmGFP-Sk-Q*y1wOyG$-?T=H2wVc{y%n&5(a+b2FXGFi*#y3#3hnZ{E!{fm#cE2ywMP+)fZ z%yio-DMRi;t_73Efx?EQvYxotT8H{?bM44Cc=0xITfWAL#T5+yj~Fzcb2?tSvfI>l zo{rc7MaF{b7H73A&aY;=U|x2TG3>bL@ngx_>l_u2_gvP;6uP+Kb sd%EM^7zfEcncVbw-&uW#)AT(2CrKG3TSp00i_>zopr03p_j1^@s6 diff --git a/src/main/resources/assets/refinedstorage/textures/items/interdimensional_upgrade.png b/src/main/resources/assets/refinedstorage/textures/items/interdimensional_upgrade.png index 5afce07a1c3150a038e8ed53b04ed0e9ff99cea8..df8e37ddaca664bf3992c2c661a5f2b10e49edff 100755 GIT binary patch delta 252 zcmVh$pKc!701S7E3QExua(c($x37oERI2f zSSZ1XO7tKMyo+A!Gg2PplY;ZU%`b{H(s7G5C-{PI#`}OtI1K=;Dp&O*38{PsHuMX z{{b^Tvr66s9OOc+ct)qOMZ3O1wQv$bA+{5Qd_CwTQ!Jk+d4C+IIW%i4)XNtHm9D*j zZ{qT5oW*ILfVoIuH_M5PH?tLRh{MZK8vAJ!hgl59BqMI&SkS0k(bCs2MkyG>l<0w< z74UYPmB=1g9B)Dq3#HgmiFXMXo?&MD8_8Yr3G4jJ;TNQ#8>FFg;JE>Toa}sm1d+x7 P0000 Date: Mon, 1 Aug 2016 02:13:07 +0200 Subject: [PATCH 068/214] Fix cross dimensional bugs --- .../api/network/INetworkNode.java | 6 +++ .../api/network/INetworkNodeGraph.java | 26 ++++++++- .../apiimpl/network/NetworkNodeGraph.java | 53 +++++++++++-------- .../apiimpl/network/NetworkUtils.java | 4 ++ .../refinedstorage/block/BlockController.java | 3 +- .../java/refinedstorage/block/BlockNode.java | 5 +- .../tile/TileNetworkTransmitter.java | 5 +- .../java/refinedstorage/tile/TileNode.java | 3 +- .../tile/controller/TileController.java | 3 +- 9 files changed, 79 insertions(+), 29 deletions(-) diff --git a/src/main/java/refinedstorage/api/network/INetworkNode.java b/src/main/java/refinedstorage/api/network/INetworkNode.java index 1408609db..443e32135 100755 --- a/src/main/java/refinedstorage/api/network/INetworkNode.java +++ b/src/main/java/refinedstorage/api/network/INetworkNode.java @@ -1,6 +1,7 @@ package refinedstorage.api.network; import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; /** * Represents a node in the storage network. @@ -63,4 +64,9 @@ public interface INetworkNode { * @return The network */ INetworkMaster getNetwork(); + + /** + * @return The world where this node is in + */ + World getWorld(); } diff --git a/src/main/java/refinedstorage/api/network/INetworkNodeGraph.java b/src/main/java/refinedstorage/api/network/INetworkNodeGraph.java index 77f0b89c4..3b758e3d7 100755 --- a/src/main/java/refinedstorage/api/network/INetworkNodeGraph.java +++ b/src/main/java/refinedstorage/api/network/INetworkNodeGraph.java @@ -1,13 +1,37 @@ package refinedstorage.api.network; import net.minecraft.util.math.BlockPos; +import net.minecraft.world.WorldProvider; import java.util.List; +import java.util.Set; +/** + * A graph of all the nodes connected to a network. + */ public interface INetworkNodeGraph { - void rebuild(BlockPos start); + /** + * Rebuilds the node graph. + * + * @param start The starting position to start looking for nodes + * @param notify Whether to notify nodes of a connection change + */ + void rebuild(BlockPos start, boolean notify); + /** + * @return A list of all connected nodes + */ List all(); + /** + * These hashes are calculated like this: 31 * {@link BlockPos#hashCode()} + {@link WorldProvider#getDimension()} + * + * @return A set of hashes of all connected nodes + */ + Set allHashes(); + + /** + * Disconnects and notifies all connected nodes. + */ void disconnectAll(); } diff --git a/src/main/java/refinedstorage/apiimpl/network/NetworkNodeGraph.java b/src/main/java/refinedstorage/apiimpl/network/NetworkNodeGraph.java index c18d2ef2b..bf646bffb 100755 --- a/src/main/java/refinedstorage/apiimpl/network/NetworkNodeGraph.java +++ b/src/main/java/refinedstorage/apiimpl/network/NetworkNodeGraph.java @@ -16,14 +16,20 @@ public class NetworkNodeGraph implements INetworkNodeGraph { private TileController controller; private List nodes = new ArrayList(); - private Set nodesPos = new HashSet(); + private Set nodeHashes = new HashSet(); public NetworkNodeGraph(TileController controller) { this.controller = controller; } + private int hashNode(World world, INetworkNode node) { + int result = node.getPosition().hashCode(); + result = 31 * result + world.provider.getDimension(); + return result; + } + @Override - public void rebuild(BlockPos start) { + public void rebuild(BlockPos start, boolean notify) { if (!controller.canRun()) { if (!nodes.isEmpty()) { disconnectAll(); @@ -35,8 +41,7 @@ public class NetworkNodeGraph implements INetworkNodeGraph { World world = getWorld(); List newNodes = new ArrayList(); - List interDimensionalNodes = new ArrayList(); - Set newNodesPos = new HashSet(); + Set newNodeHashes = new HashSet(); Set checked = new HashSet(); Queue toCheck = new ArrayDeque(); @@ -66,7 +71,7 @@ public class NetworkNodeGraph implements INetworkNodeGraph { INetworkNode node = (INetworkNode) tile; newNodes.add(node); - newNodesPos.add(node.getPosition()); + newNodeHashes.add(hashNode(world, node)); if (tile instanceof TileNetworkTransmitter) { final TileNetworkTransmitter transmitter = (TileNetworkTransmitter) tile; @@ -80,9 +85,10 @@ public class NetworkNodeGraph implements INetworkNodeGraph { } }; - dimensionGraph.rebuild(transmitter.getReceiver()); + dimensionGraph.rebuild(transmitter.getReceiver(), false); - interDimensionalNodes.addAll(dimensionGraph.all()); + newNodes.addAll(dimensionGraph.all()); + newNodeHashes.addAll(dimensionGraph.allHashes()); } else { BlockPos receiver = transmitter.getReceiver(); @@ -105,24 +111,24 @@ public class NetworkNodeGraph implements INetworkNodeGraph { } List oldNodes = new ArrayList(nodes); - Set oldNodesPos = new HashSet(nodesPos); + Set oldNodeHashes = new HashSet(nodeHashes); this.nodes = newNodes; - this.nodesPos = newNodesPos; + this.nodeHashes = newNodeHashes; - for (INetworkNode newNode : nodes) { - if (!oldNodesPos.contains(newNode.getPosition())) { - newNode.onConnected(controller); + if (notify) { + for (INetworkNode newNode : nodes) { + if (!oldNodeHashes.contains(hashNode(newNode.getWorld(), newNode))) { + newNode.onConnected(controller); + } + } + + for (INetworkNode oldNode : oldNodes) { + if (!nodeHashes.contains(hashNode(oldNode.getWorld(), oldNode))) { + oldNode.onDisconnected(controller); + } } } - - for (INetworkNode oldNode : oldNodes) { - if (!nodesPos.contains(oldNode.getPosition())) { - oldNode.onDisconnected(controller); - } - } - - this.nodes.addAll(interDimensionalNodes); } @Override @@ -130,6 +136,11 @@ public class NetworkNodeGraph implements INetworkNodeGraph { return nodes; } + @Override + public Set allHashes() { + return nodeHashes; + } + @Override public void disconnectAll() { for (INetworkNode node : nodes) { @@ -139,7 +150,7 @@ public class NetworkNodeGraph implements INetworkNodeGraph { } nodes.clear(); - nodesPos.clear(); + nodeHashes.clear(); } public World getWorld() { diff --git a/src/main/java/refinedstorage/apiimpl/network/NetworkUtils.java b/src/main/java/refinedstorage/apiimpl/network/NetworkUtils.java index e6e44849f..65c04718f 100755 --- a/src/main/java/refinedstorage/apiimpl/network/NetworkUtils.java +++ b/src/main/java/refinedstorage/apiimpl/network/NetworkUtils.java @@ -26,6 +26,10 @@ public final class NetworkUtils { return getPattern(network, stack) != null; } + public static void rebuildGraph(INetworkMaster network) { + network.getNodeGraph().rebuild(network.getPosition(), true); + } + public static int getItemStackHashCode(ItemStack stack) { return stack.getItem().hashCode() * (stack.getItemDamage() + 1) * (stack.hasTagCompound() ? stack.getTagCompound().hashCode() : 1); } diff --git a/src/main/java/refinedstorage/block/BlockController.java b/src/main/java/refinedstorage/block/BlockController.java index f207dacd2..39c4a1d45 100755 --- a/src/main/java/refinedstorage/block/BlockController.java +++ b/src/main/java/refinedstorage/block/BlockController.java @@ -20,6 +20,7 @@ import net.minecraft.world.World; import refinedstorage.RefinedStorage; import refinedstorage.RefinedStorageBlocks; import refinedstorage.RefinedStorageGui; +import refinedstorage.apiimpl.network.NetworkUtils; import refinedstorage.item.ItemBlockController; import refinedstorage.tile.controller.TileController; @@ -115,7 +116,7 @@ public class BlockController extends BlockBase { super.neighborChanged(state, world, pos, block); if (!world.isRemote) { - ((TileController) world.getTileEntity(pos)).getNodeGraph().rebuild(pos); + NetworkUtils.rebuildGraph((TileController) world.getTileEntity(pos)); } } diff --git a/src/main/java/refinedstorage/block/BlockNode.java b/src/main/java/refinedstorage/block/BlockNode.java index 5ada93a96..ea9d1dcf5 100755 --- a/src/main/java/refinedstorage/block/BlockNode.java +++ b/src/main/java/refinedstorage/block/BlockNode.java @@ -11,6 +11,7 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import refinedstorage.api.network.INetworkMaster; +import refinedstorage.apiimpl.network.NetworkUtils; import refinedstorage.tile.TileNode; public abstract class BlockNode extends BlockBase { @@ -63,7 +64,7 @@ public abstract class BlockNode extends BlockBase { TileEntity tile = world.getTileEntity(pos.offset(facing)); if (tile instanceof TileNode && ((TileNode) tile).isConnected()) { - ((TileNode) tile).getNetwork().getNodeGraph().rebuild(((TileNode) tile).getNetwork().getPosition()); + NetworkUtils.rebuildGraph(((TileNode) tile).getNetwork()); break; } @@ -86,7 +87,7 @@ public abstract class BlockNode extends BlockBase { super.breakBlock(world, pos, state); if (network != null) { - network.getNodeGraph().rebuild(network.getPosition()); + NetworkUtils.rebuildGraph(network); } } } diff --git a/src/main/java/refinedstorage/tile/TileNetworkTransmitter.java b/src/main/java/refinedstorage/tile/TileNetworkTransmitter.java index 821f14c68..4bf77d363 100755 --- a/src/main/java/refinedstorage/tile/TileNetworkTransmitter.java +++ b/src/main/java/refinedstorage/tile/TileNetworkTransmitter.java @@ -7,6 +7,7 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.math.BlockPos; import refinedstorage.RefinedStorage; import refinedstorage.RefinedStorageItems; +import refinedstorage.apiimpl.network.NetworkUtils; import refinedstorage.container.ContainerNetworkTransmitter; import refinedstorage.inventory.ItemHandlerBasic; import refinedstorage.inventory.ItemHandlerUpgrade; @@ -21,7 +22,7 @@ public class TileNetworkTransmitter extends TileNode { super.onContentsChanged(slot); if (network != null) { - network.getNodeGraph().rebuild(network.getPosition()); + NetworkUtils.rebuildGraph(network); } } }; @@ -41,7 +42,7 @@ public class TileNetworkTransmitter extends TileNode { } if (network != null) { - network.getNodeGraph().rebuild(network.getPosition()); + NetworkUtils.rebuildGraph(network); } } }; diff --git a/src/main/java/refinedstorage/tile/TileNode.java b/src/main/java/refinedstorage/tile/TileNode.java index a132cef70..18ac4e6f3 100755 --- a/src/main/java/refinedstorage/tile/TileNode.java +++ b/src/main/java/refinedstorage/tile/TileNode.java @@ -6,6 +6,7 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.math.BlockPos; import refinedstorage.api.network.INetworkMaster; import refinedstorage.api.network.INetworkNode; +import refinedstorage.apiimpl.network.NetworkUtils; import refinedstorage.block.BlockNode; import refinedstorage.tile.config.IRedstoneModeConfig; import refinedstorage.tile.config.RedstoneMode; @@ -45,7 +46,7 @@ public abstract class TileNode extends TileBase implements INetworkNode, ISynchr onConnectionChange(network, update); if (rebuildOnUpdateChange) { - network.getNodeGraph().rebuild(network.getPosition()); + NetworkUtils.rebuildGraph(network); } } diff --git a/src/main/java/refinedstorage/tile/controller/TileController.java b/src/main/java/refinedstorage/tile/controller/TileController.java index bd15f6707..6bd405317 100755 --- a/src/main/java/refinedstorage/tile/controller/TileController.java +++ b/src/main/java/refinedstorage/tile/controller/TileController.java @@ -34,6 +34,7 @@ import refinedstorage.apiimpl.autocrafting.CraftingPattern; import refinedstorage.apiimpl.autocrafting.ProcessingCraftingTask; import refinedstorage.apiimpl.network.GridHandler; import refinedstorage.apiimpl.network.NetworkNodeGraph; +import refinedstorage.apiimpl.network.NetworkUtils; import refinedstorage.apiimpl.network.WirelessGridHandler; import refinedstorage.apiimpl.storage.GroupedStorage; import refinedstorage.block.BlockController; @@ -189,7 +190,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR if (couldRun != canRun()) { couldRun = canRun(); - nodeGraph.rebuild(pos); + NetworkUtils.rebuildGraph(this); } if (getEnergyScaledForDisplay() != lastEnergyDisplay) { From 9ebd5b31b64770715d21bfc902f8357ae6d8c23c Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Mon, 1 Aug 2016 02:27:46 +0200 Subject: [PATCH 069/214] GUI polish --- src/main/java/refinedstorage/gui/GuiNetworkTransmitter.java | 6 +++--- src/main/resources/assets/refinedstorage/lang/en_US.lang | 2 +- src/main/resources/assets/refinedstorage/lang/nl_NL.lang | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/refinedstorage/gui/GuiNetworkTransmitter.java b/src/main/java/refinedstorage/gui/GuiNetworkTransmitter.java index 9606afc60..5713fca94 100755 --- a/src/main/java/refinedstorage/gui/GuiNetworkTransmitter.java +++ b/src/main/java/refinedstorage/gui/GuiNetworkTransmitter.java @@ -35,12 +35,12 @@ public class GuiNetworkTransmitter extends GuiBase { String distance; - if (!networkTransmitter.isDimensionSupported()) { + if (networkTransmitter.getNetworkCard().getStackInSlot(0) == null) { + distance = t("gui.refinedstorage:network_transmitter.missing_card"); + } else if (!networkTransmitter.isDimensionSupported()) { distance = t("gui.refinedstorage:network_transmitter.missing_upgrade"); } else if (!networkTransmitter.isSameDimension()) { distance = t("gui.refinedstorage:network_transmitter.dimension", networkTransmitter.getReceiverDimension()); - } else if (networkTransmitter.getDistance() == -1) { - distance = t("gui.refinedstorage:network_transmitter.missing_card"); } else { distance = t("gui.refinedstorage:network_transmitter.distance", networkTransmitter.getDistance()); } diff --git a/src/main/resources/assets/refinedstorage/lang/en_US.lang b/src/main/resources/assets/refinedstorage/lang/en_US.lang index d1174dc7a..e35f36752 100755 --- a/src/main/resources/assets/refinedstorage/lang/en_US.lang +++ b/src/main/resources/assets/refinedstorage/lang/en_US.lang @@ -33,7 +33,7 @@ gui.refinedstorage:processing_pattern_encoder.pattern_create=Create Pattern gui.refinedstorage:grid_filter=Grid Filter gui.refinedstorage:network_transmitter=Network Transmitter gui.refinedstorage:network_transmitter.distance=%d blocks -gui.refinedstorage:network_transmitter.dimension=Dimension #%d +gui.refinedstorage:network_transmitter.dimension=Dimension %d gui.refinedstorage:network_transmitter.missing_card=Missing Network Card gui.refinedstorage:network_transmitter.missing_upgrade=Insert upgrade diff --git a/src/main/resources/assets/refinedstorage/lang/nl_NL.lang b/src/main/resources/assets/refinedstorage/lang/nl_NL.lang index 8ea49b688..5291de209 100755 --- a/src/main/resources/assets/refinedstorage/lang/nl_NL.lang +++ b/src/main/resources/assets/refinedstorage/lang/nl_NL.lang @@ -33,7 +33,7 @@ gui.refinedstorage:processing_pattern_encoder.pattern_create=Patroon maken gui.refinedstorage:grid_filter=Rooster Filter gui.refinedstorage:network_transmitter=Netwerkzender gui.refinedstorage:network_transmitter.distance=%d blokken -gui.refinedstorage:network_transmitter.dimension=Dimensie #%d +gui.refinedstorage:network_transmitter.dimension=Dimensie %d gui.refinedstorage:network_transmitter.missing_card=Geen Netwerkkaart gui.refinedstorage:network_transmitter.missing_upgrade=Ontbrekende upgrade From 4b421734d38a84a0a2bd4f45ff5ce1309929020d Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Mon, 1 Aug 2016 16:12:34 +0200 Subject: [PATCH 070/214] Don't send connected in grid, it's provided as a block update already. 0.8.14 done --- src/main/java/refinedstorage/tile/grid/TileGrid.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/java/refinedstorage/tile/grid/TileGrid.java b/src/main/java/refinedstorage/tile/grid/TileGrid.java index 10a5311d9..e2a0c1a3e 100755 --- a/src/main/java/refinedstorage/tile/grid/TileGrid.java +++ b/src/main/java/refinedstorage/tile/grid/TileGrid.java @@ -387,7 +387,6 @@ public class TileGrid extends TileNode implements IGrid { public void writeContainerData(ByteBuf buf) { super.writeContainerData(buf); - buf.writeBoolean(isConnected()); buf.writeInt(viewType); buf.writeInt(sortingDirection); buf.writeInt(sortingType); @@ -398,7 +397,6 @@ public class TileGrid extends TileNode implements IGrid { public void readContainerData(ByteBuf buf) { super.readContainerData(buf); - connected = buf.readBoolean(); viewType = buf.readInt(); sortingDirection = buf.readInt(); sortingType = buf.readInt(); From 2215f279bd8638074a0880925d47df609b905cb4 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Mon, 1 Aug 2016 18:15:58 +0200 Subject: [PATCH 071/214] 0.8.15 hotfix, fixes #234 --- CHANGELOG.md | 4 ++++ build.gradle | 2 +- src/main/java/refinedstorage/RefinedStorage.java | 2 +- src/main/java/refinedstorage/api/network/INetworkNode.java | 2 +- .../refinedstorage/apiimpl/network/NetworkNodeGraph.java | 4 ++-- src/main/java/refinedstorage/tile/TileNode.java | 6 ++++++ src/main/resources/mcmod.info | 2 +- 7 files changed, 16 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c6292e3e9..6de161228 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Refined Storage Changelog +### 0.8.15 +**Bugfixes** +- Fixed server startup crash + ### 0.8.14 **Features** - Added Interdimensional Upgrade so the Network Transmitter can work over different dimensions diff --git a/build.gradle b/build.gradle index 03bce3eec..0178e15be 100755 --- a/build.gradle +++ b/build.gradle @@ -12,7 +12,7 @@ buildscript { } apply plugin: 'net.minecraftforge.gradle.forge' -version = "0.8.14" +version = "0.8.15" group = "refinedstorage" archivesBaseName = "refinedstorage" diff --git a/src/main/java/refinedstorage/RefinedStorage.java b/src/main/java/refinedstorage/RefinedStorage.java index 23d49f8cf..e5ad56641 100755 --- a/src/main/java/refinedstorage/RefinedStorage.java +++ b/src/main/java/refinedstorage/RefinedStorage.java @@ -23,7 +23,7 @@ import java.util.List; @Mod(modid = RefinedStorage.ID, version = RefinedStorage.VERSION) public final class RefinedStorage { public static final String ID = "refinedstorage"; - public static final String VERSION = "0.8.14"; + public static final String VERSION = "0.8.15"; @SidedProxy(clientSide = "refinedstorage.proxy.ClientProxy", serverSide = "refinedstorage.proxy.ServerProxy") public static CommonProxy PROXY; diff --git a/src/main/java/refinedstorage/api/network/INetworkNode.java b/src/main/java/refinedstorage/api/network/INetworkNode.java index 443e32135..4320b5e40 100755 --- a/src/main/java/refinedstorage/api/network/INetworkNode.java +++ b/src/main/java/refinedstorage/api/network/INetworkNode.java @@ -68,5 +68,5 @@ public interface INetworkNode { /** * @return The world where this node is in */ - World getWorld(); + World getNodeWorld(); } diff --git a/src/main/java/refinedstorage/apiimpl/network/NetworkNodeGraph.java b/src/main/java/refinedstorage/apiimpl/network/NetworkNodeGraph.java index bf646bffb..9207e1b79 100755 --- a/src/main/java/refinedstorage/apiimpl/network/NetworkNodeGraph.java +++ b/src/main/java/refinedstorage/apiimpl/network/NetworkNodeGraph.java @@ -118,13 +118,13 @@ public class NetworkNodeGraph implements INetworkNodeGraph { if (notify) { for (INetworkNode newNode : nodes) { - if (!oldNodeHashes.contains(hashNode(newNode.getWorld(), newNode))) { + if (!oldNodeHashes.contains(hashNode(newNode.getNodeWorld(), newNode))) { newNode.onConnected(controller); } } for (INetworkNode oldNode : oldNodes) { - if (!nodeHashes.contains(hashNode(oldNode.getWorld(), oldNode))) { + if (!nodeHashes.contains(hashNode(oldNode.getNodeWorld(), oldNode))) { oldNode.onDisconnected(controller); } } diff --git a/src/main/java/refinedstorage/tile/TileNode.java b/src/main/java/refinedstorage/tile/TileNode.java index 18ac4e6f3..f4159bf61 100755 --- a/src/main/java/refinedstorage/tile/TileNode.java +++ b/src/main/java/refinedstorage/tile/TileNode.java @@ -4,6 +4,7 @@ import io.netty.buffer.ByteBuf; import net.minecraft.block.Block; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; import refinedstorage.api.network.INetworkMaster; import refinedstorage.api.network.INetworkNode; import refinedstorage.apiimpl.network.NetworkUtils; @@ -95,6 +96,11 @@ public abstract class TileNode extends TileBase implements INetworkNode, ISynchr return network; } + @Override + public World getNodeWorld() { + return worldObj; + } + @Override public BlockPos getPosition() { return pos; diff --git a/src/main/resources/mcmod.info b/src/main/resources/mcmod.info index cf7b9e461..78877348a 100755 --- a/src/main/resources/mcmod.info +++ b/src/main/resources/mcmod.info @@ -3,7 +3,7 @@ "modid": "refinedstorage", "name": "Refined Storage", "description": "A Minecraft mod all about storage.", - "version": "0.8.14", + "version": "0.8.15", "mcversion": "1.10.2", "url": "", "updateUrl": "", From 84cda83005f17fb195bb06839cc0b50c5aafb60f Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Tue, 2 Aug 2016 20:11:35 +0200 Subject: [PATCH 072/214] Version bump to 0.8.16 + update versions --- build.gradle | 6 +++--- src/main/java/refinedstorage/RefinedStorage.java | 2 +- src/main/resources/mcmod.info | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/build.gradle b/build.gradle index 0178e15be..6acf39429 100755 --- a/build.gradle +++ b/build.gradle @@ -12,12 +12,12 @@ buildscript { } apply plugin: 'net.minecraftforge.gradle.forge' -version = "0.8.15" +version = "0.8.16" group = "refinedstorage" archivesBaseName = "refinedstorage" minecraft { - version = "1.10.2-12.18.1.2014" + version = "1.10.2-12.18.1.2044" runDir = "run" useDepAts = true mappings = "snapshot_20160518" @@ -39,7 +39,7 @@ repositories { dependencies { deobfCompile "mezz.jei:jei_1.10.2:3.7.+" compile "net.darkhax.tesla:Tesla:1.10-1.2.0.34" - compile "net.industrial-craft:industrialcraft-2:2.6.9-ex110:api" + compile "net.industrial-craft:industrialcraft-2:2.6.26-ex110:api" } processResources { diff --git a/src/main/java/refinedstorage/RefinedStorage.java b/src/main/java/refinedstorage/RefinedStorage.java index e5ad56641..d241c91c8 100755 --- a/src/main/java/refinedstorage/RefinedStorage.java +++ b/src/main/java/refinedstorage/RefinedStorage.java @@ -23,7 +23,7 @@ import java.util.List; @Mod(modid = RefinedStorage.ID, version = RefinedStorage.VERSION) public final class RefinedStorage { public static final String ID = "refinedstorage"; - public static final String VERSION = "0.8.15"; + public static final String VERSION = "0.8.16"; @SidedProxy(clientSide = "refinedstorage.proxy.ClientProxy", serverSide = "refinedstorage.proxy.ServerProxy") public static CommonProxy PROXY; diff --git a/src/main/resources/mcmod.info b/src/main/resources/mcmod.info index 78877348a..18741e379 100755 --- a/src/main/resources/mcmod.info +++ b/src/main/resources/mcmod.info @@ -3,7 +3,7 @@ "modid": "refinedstorage", "name": "Refined Storage", "description": "A Minecraft mod all about storage.", - "version": "0.8.15", + "version": "0.8.16", "mcversion": "1.10.2", "url": "", "updateUrl": "", From 443cfcfe49a22930cccb3e7b57284532f64b9296 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Tue, 2 Aug 2016 20:21:51 +0200 Subject: [PATCH 073/214] Update docs --- .../api/storage/IGroupedStorage.java | 36 +++++++++++++------ .../refinedstorage/api/storage/IStorage.java | 6 ++-- .../apiimpl/network/NetworkUtils.java | 2 ++ .../apiimpl/storage/GroupedStorage.java | 14 +++++--- 4 files changed, 40 insertions(+), 18 deletions(-) diff --git a/src/main/java/refinedstorage/api/storage/IGroupedStorage.java b/src/main/java/refinedstorage/api/storage/IGroupedStorage.java index 674e5b623..161f2acc4 100755 --- a/src/main/java/refinedstorage/api/storage/IGroupedStorage.java +++ b/src/main/java/refinedstorage/api/storage/IGroupedStorage.java @@ -3,11 +3,17 @@ package refinedstorage.api.storage; import net.minecraft.item.ItemStack; import refinedstorage.api.network.INetworkMaster; +import javax.annotation.Nonnull; +import javax.annotation.Nullable; import java.util.Collection; import java.util.List; /** * This holds all items from all the connected storages from a {@link INetworkMaster}. + *

+ * Refined Storage uses this class mainly for use in Grids and Detectors to avoid querying + * individual {@link IStorage} constantly (performance impact) and to send and detect storage changes + * more efficiently. */ public interface IGroupedStorage { /** @@ -17,35 +23,45 @@ public interface IGroupedStorage { void rebuild(); /** - * Adds an item to the network. Will merge it with another item if it already exists. + * Adds an item to the global item list. + *

+ * Note that this doesn't modify any of the connected storages, but just modifies the global item list. + * Use {@link INetworkMaster#insertItem(ItemStack, int, boolean)} to add an item to an actual storage. + *

+ * Will merge it with another item if it already exists. * * @param stack The stack to add, do NOT modify * @param rebuilding Whether this method is called while the storage is rebuilding */ - void add(ItemStack stack, boolean rebuilding); + void add(@Nonnull ItemStack stack, boolean rebuilding); /** - * Removes a item from the network. + * Removes a item from global item list. + *

+ * Note that this doesn't modify any of the connected storages, but just modifies the global item list. + * Use {@link INetworkMaster#extractItem(ItemStack, int, int)} to remove an item from an actual storage. * * @param stack The item to remove, do NOT modify */ - void remove(ItemStack stack); + void remove(@Nonnull ItemStack stack); /** - * Gets an item from the network, does not decrement its count like {@link IGroupedStorage#remove(ItemStack)} does. + * Gets an item from the network. * * @param stack The stack to find * @param flags The flags to compare on, see {@link CompareUtils} - * @return The {@link ItemStack}, do NOT modify + * @return Null if no item is found, or the {@link ItemStack}, do NOT modify */ - ItemStack get(ItemStack stack, int flags); + @Nullable + ItemStack get(@Nonnull ItemStack stack, int flags); /** - * Gets an item from the network by ID. + * Gets an item from the network by hash. * - * @return The {@link ItemStack}, do NOT modify + * @return Null if no item is found matching the hash, or the {@link ItemStack}, do NOT modify */ - ItemStack get(int id); + @Nullable + ItemStack get(int hash); /** * @return All items in this storage network diff --git a/src/main/java/refinedstorage/api/storage/IStorage.java b/src/main/java/refinedstorage/api/storage/IStorage.java index c7235cbdb..709be751d 100755 --- a/src/main/java/refinedstorage/api/storage/IStorage.java +++ b/src/main/java/refinedstorage/api/storage/IStorage.java @@ -17,7 +17,7 @@ public interface IStorage { List getItems(); /** - * Inserts an item to this storage. + * Inserts an item to the storage network. * * @param stack The stack prototype to insert, do NOT modify * @param size The amount of that prototype that has to be inserted @@ -28,8 +28,8 @@ public interface IStorage { ItemStack insertItem(@Nonnull ItemStack stack, int size, boolean simulate); /** - * Extracts an item from storage. - * + * Extracts an item from the storage network. + *

* If the stack we found in the system is smaller than the requested size, return the stack anyway. * For example: if this method is called for dirt (64x) while there is only dirt (32x), return the dirt (32x) anyway. * diff --git a/src/main/java/refinedstorage/apiimpl/network/NetworkUtils.java b/src/main/java/refinedstorage/apiimpl/network/NetworkUtils.java index 65c04718f..5dcc72d94 100755 --- a/src/main/java/refinedstorage/apiimpl/network/NetworkUtils.java +++ b/src/main/java/refinedstorage/apiimpl/network/NetworkUtils.java @@ -5,6 +5,8 @@ import refinedstorage.api.autocrafting.ICraftingPattern; import refinedstorage.api.network.INetworkMaster; import refinedstorage.api.storage.CompareUtils; +// @TODO: Move this class to API +// @TODO: Move IC2-specific stuff to special IC2 integration class, along with the IC2 wrapper class public final class NetworkUtils { public static int convertIC2ToRF(double amount) { return amount >= Double.POSITIVE_INFINITY ? Integer.MAX_VALUE : ((int) Math.floor(amount) * 4); diff --git a/src/main/java/refinedstorage/apiimpl/storage/GroupedStorage.java b/src/main/java/refinedstorage/apiimpl/storage/GroupedStorage.java index acb95ca1d..b160082ac 100755 --- a/src/main/java/refinedstorage/apiimpl/storage/GroupedStorage.java +++ b/src/main/java/refinedstorage/apiimpl/storage/GroupedStorage.java @@ -13,6 +13,8 @@ import refinedstorage.api.storage.IStorage; import refinedstorage.api.storage.IStorageProvider; import refinedstorage.apiimpl.network.NetworkUtils; +import javax.annotation.Nonnull; +import javax.annotation.Nullable; import java.util.ArrayList; import java.util.Collection; import java.util.List; @@ -56,7 +58,7 @@ public class GroupedStorage implements IGroupedStorage { } @Override - public void add(ItemStack stack, boolean rebuilding) { + public void add(@Nonnull ItemStack stack, boolean rebuilding) { for (ItemStack otherStack : stacks.get(stack.getItem())) { if (CompareUtils.compareStackNoQuantity(otherStack, stack)) { otherStack.stackSize += stack.stackSize; @@ -77,7 +79,7 @@ public class GroupedStorage implements IGroupedStorage { } @Override - public void remove(ItemStack stack) { + public void remove(@Nonnull ItemStack stack) { for (ItemStack otherStack : stacks.get(stack.getItem())) { if (CompareUtils.compareStackNoQuantity(otherStack, stack)) { otherStack.stackSize -= stack.stackSize; @@ -96,7 +98,8 @@ public class GroupedStorage implements IGroupedStorage { } @Override - public ItemStack get(ItemStack stack, int flags) { + @Nullable + public ItemStack get(@Nonnull ItemStack stack, int flags) { for (ItemStack otherStack : stacks.get(stack.getItem())) { if (CompareUtils.compareStack(otherStack, stack, flags)) { return otherStack; @@ -107,9 +110,10 @@ public class GroupedStorage implements IGroupedStorage { } @Override - public ItemStack get(int id) { + @Nullable + public ItemStack get(int hash) { for (ItemStack stack : this.stacks.values()) { - if (NetworkUtils.getItemStackHashCode(stack) == id) { + if (NetworkUtils.getItemStackHashCode(stack) == hash) { return stack; } } From be18fc43b187bfdbd47abd819cc3df80a06d45e4 Mon Sep 17 00:00:00 2001 From: Rony Tesch Date: Tue, 2 Aug 2016 20:26:34 +0200 Subject: [PATCH 074/214] Adding German translation I took some time and created this german translation. I double checked ingame, if everything is as it should be :) --- .../assets/refinedstorage/lang/de_DE.lang | 157 ++++++++++++++++++ 1 file changed, 157 insertions(+) create mode 100644 src/main/resources/assets/refinedstorage/lang/de_DE.lang diff --git a/src/main/resources/assets/refinedstorage/lang/de_DE.lang b/src/main/resources/assets/refinedstorage/lang/de_DE.lang new file mode 100644 index 000000000..2bcdc8acd --- /dev/null +++ b/src/main/resources/assets/refinedstorage/lang/de_DE.lang @@ -0,0 +1,157 @@ +itemGroup.refinedstorage=Refined Storage + +gui.refinedstorage:controller.0=Controller +gui.refinedstorage:controller.1=Kreativmodus Controller +gui.refinedstorage:controller.machine_amount=%dx +gui.refinedstorage:grid=Zugangspunkt +gui.refinedstorage:grid.craft=Craften +gui.refinedstorage:grid.pattern_create=Erstelle Schema +gui.refinedstorage:wireless_grid=Kabelloser Zugangspunkt +gui.refinedstorage:disk_drive=Laufwerk +gui.refinedstorage:external_storage=Externe Speicherverbindung +gui.refinedstorage:importer=Import-Kabel +gui.refinedstorage:exporter=Export-Kabel +gui.refinedstorage:detector=Detektor +gui.refinedstorage:solderer=Lötmaschiene +gui.refinedstorage:solderer.progress=%d%% +gui.refinedstorage:destructor=Block-Zerstörer +gui.refinedstorage:constructor=Block-Platzierer +gui.refinedstorage:relay=Relais +gui.refinedstorage:interface.import=Eingang +gui.refinedstorage:interface.export=Ausgang +gui.refinedstorage:crafting_monitor=Craftingprozess Überwachung +gui.refinedstorage:crafting_monitor.missing_items=Fehlende Items +gui.refinedstorage:crafting_monitor.items_crafting=Items werden gecraftet +gui.refinedstorage:crafting_monitor.items_processing=Items werden verarbeitet +gui.refinedstorage:crafting_monitor.not_started_yet=Noch nicht gestartet +gui.refinedstorage:wireless_transmitter=Kabelloser Übermittler +gui.refinedstorage:wireless_transmitter.distance=%d Blöcke +gui.refinedstorage:crafter=Crafter +gui.refinedstorage:crafter.processing=Verarbeitung +gui.refinedstorage:processing_pattern_encoder=Schema Anfertigung +gui.refinedstorage:processing_pattern_encoder.pattern_create=Kreatives Schema +gui.refinedstorage:grid_filter=Zugangspunkt Filter +gui.refinedstorage:network_transmitter=Netzwerk Übermittler +gui.refinedstorage:network_transmitter.distance=%d Blöcke +gui.refinedstorage:network_transmitter.dimension=Dimension %d +gui.refinedstorage:network_transmitter.missing_card=Netzwerkkarte fehlt +gui.refinedstorage:network_transmitter.missing_upgrade=Erweiterung fehlt + +misc.refinedstorage:energy_stored=%d / %d RS +misc.refinedstorage:energy_usage=Verbrauch: %d RS/t +misc.refinedstorage:energy_usage_minimal=%d RS/t + +misc.refinedstorage:storage.stored=Stored: %d +misc.refinedstorage:storage.stored_capacity=Gespeichert: %d / %d +misc.refinedstorage:storage.stored_minimal=%d +misc.refinedstorage:storage.stored_capacity_minimal=%d / %d +misc.refinedstorage:storage.full=%d%% voll + +misc.refinedstorage:wireless_grid.tooltip=Verbunden mit %d, %d, %d. +misc.refinedstorage:wireless_grid.out_of_range=Es gibt keine Verbindung zu einem kabellosen Übermittler. +misc.refinedstorage:wireless_grid.not_found=Controller konnte nicht gefunden werden. + +misc.refinedstorage:network_card.tooltip=Verbunden mit %d, %d, %d. + +misc.refinedstorage:pattern.inputs=Eingänge +misc.refinedstorage:pattern.outputs=Ausgänge + +misc.refinedstorage:start=Start +misc.refinedstorage:clear=Frei machen +misc.refinedstorage:cancel_all=Alles abbrechen +misc.refinedstorage:priority=Priorität + +sidebutton.refinedstorage:compare.1=Schaden vergleichen +sidebutton.refinedstorage:compare.2=NBT vergleichen + +sidebutton.refinedstorage:redstone_mode=Redstone Modus +sidebutton.refinedstorage:redstone_mode.0=Ignoriert Redstone-Signale +sidebutton.refinedstorage:redstone_mode.1=Funktioniert nur mit Redstone-Signal +sidebutton.refinedstorage:redstone_mode.2=Funktioniert nur ohne Redstone-Signal + +sidebutton.refinedstorage:grid.view_type=Anzeigen +sidebutton.refinedstorage:grid.view_type.0=Alles +sidebutton.refinedstorage:grid.view_type.1=Uncraftbares +sidebutton.refinedstorage:grid.view_type.2=Nur Craftbares +sidebutton.refinedstorage:grid.sorting.direction=Sortierrichtung +sidebutton.refinedstorage:grid.sorting.direction.0=Aufsteigend +sidebutton.refinedstorage:grid.sorting.direction.1=Absteigend +sidebutton.refinedstorage:grid.sorting.type=Sortieren nach +sidebutton.refinedstorage:grid.sorting.type.0=Anzahl +sidebutton.refinedstorage:grid.sorting.type.1=Name +sidebutton.refinedstorage:grid.search_box_mode=Suchbox Modus +sidebutton.refinedstorage:grid.search_box_mode.0=Normal +sidebutton.refinedstorage:grid.search_box_mode.1=Normal (automatisch Ausgewählt) +sidebutton.refinedstorage:grid.search_box_mode.2=Synchronisiert mit JEI +sidebutton.refinedstorage:grid.search_box_mode.3=Synchronisiert mit JEI (automatisch Ausgewählt) + +sidebutton.refinedstorage:mode=Modus +sidebutton.refinedstorage:mode.whitelist=Zugelassene Items +sidebutton.refinedstorage:mode.blacklist=Verbotene Items + +sidebutton.refinedstorage:detector.mode=Modus +sidebutton.refinedstorage:detector.mode.0=Signal geben, wenn Wert unterschritten wird +sidebutton.refinedstorage:detector.mode.1=Signal geben, wenn genauer Wert erreicht wird +sidebutton.refinedstorage:detector.mode.2=Signal geben, wenn Wert überschritten wird +block.refinedstorage:controller.0.name=Controller +block.refinedstorage:controller.1.name=Kreativer Controller +block.refinedstorage:cable.name=Kabel +block.refinedstorage:grid.0.name=Zugangspunkt +block.refinedstorage:grid.1.name=Zugangspunkt - Crafting +block.refinedstorage:grid.2.name=Zugangspunkt - Schema Anfertigung +block.refinedstorage:disk_drive.name=Laufwerk +block.refinedstorage:external_storage.name=Externe Speicherverbindung +block.refinedstorage:importer.name=Import-Kabel +block.refinedstorage:exporter.name=Export-Kabel +block.refinedstorage:detector.name=Detektor +block.refinedstorage:machine_casing.name=Maschienengehäuse +block.refinedstorage:solderer.name=Lötmaschiene +block.refinedstorage:destructor.name=Block-Zerstörer +block.refinedstorage:constructor.name=Block-Platzierer +block.refinedstorage:storage.0.name=1Tsd. Speicherblock +block.refinedstorage:storage.1.name=4Tsd. Speicherblock +block.refinedstorage:storage.2.name=16Tsd. Speicherblock +block.refinedstorage:storage.3.name=64Tsd. Speicherblock +block.refinedstorage:storage.4.name=Kreativer Speicherblock +block.refinedstorage:relay.name=Relais +block.refinedstorage:interface.name=Schnittstelle +block.refinedstorage:crafting_monitor.name=Craftingprozess Überwachung +block.refinedstorage:wireless_transmitter.name=Kabelloser Übermittler +block.refinedstorage:crafter.name=Crafter +block.refinedstorage:processing_pattern_encoder.name=Anfertigung für Verarbeitungs Schemata +block.refinedstorage:network_receiver.name=Netzwerk Empfänger +block.refinedstorage:network_transmitter.name=Network Übermittler + +item.refinedstorage:storage_disk.0.name=1Tsd. Speicherkarte +item.refinedstorage:storage_disk.1.name=4Tsd. Speicherkarte +item.refinedstorage:storage_disk.2.name=16Tsd. Speicherkarte +item.refinedstorage:storage_disk.3.name=64Tsd. Speicherkarte +item.refinedstorage:storage_disk.4.name=Kreative Speicherkarte +item.refinedstorage:storage_disk.5.name=Speicherkarte debuggen +item.refinedstorage:wireless_grid.0.name=Kabelloses Zugangsgerät +item.refinedstorage:wireless_grid.1.name=Kreatives kabelloses Zugangsgerät +item.refinedstorage:quartz_enriched_iron.name=Quartzeisenbarren +item.refinedstorage:core.0.name=Erschaffungskern +item.refinedstorage:core.1.name=Zerstörungskern +item.refinedstorage:silicon.name=Silizium +item.refinedstorage:processor.0.name=Einfacher Prozessor (vorgepresst) +item.refinedstorage:processor.1.name=Verbesserter Prozessor (vorgepresst) +item.refinedstorage:processor.2.name=Fortgeschrittener Prozessor (vorgepresst) +item.refinedstorage:processor.3.name=Einfacher Prozessor +item.refinedstorage:processor.4.name=Verbesserter Prozessor +item.refinedstorage:processor.5.name=Fortgeschrittener Prozessor +item.refinedstorage:processor.6.name=Gepresstes Silizium +item.refinedstorage:storage_part.0.name=1Tsd. Speicherzelle +item.refinedstorage:storage_part.1.name=4Tsd. Speicherzelle +item.refinedstorage:storage_part.2.name=16Tsd. Speicherzelle +item.refinedstorage:storage_part.3.name=64Tsd. Speicherzelle +item.refinedstorage:pattern.name=Schema +item.refinedstorage:upgrade.0.name=Erweiterung +item.refinedstorage:upgrade.1.name=Erweiterung für Reichweite +item.refinedstorage:upgrade.2.name=Erweiterung für Geschwindigkeit +item.refinedstorage:upgrade.3.name=Erweiterung für Crafting +item.refinedstorage:upgrade.4.name=Gebündelte Erweiterung +item.refinedstorage:upgrade.5.name=Überdimensionales Upgrade +item.refinedstorage:storage_housing.name=Speicherzellen-Hülle +item.refinedstorage:grid_filter.name=Schema Filter +item.refinedstorage:network_card.name=Netzwerkkarte \ No newline at end of file From 64d67889a7e4403c93b74460fe28bc25245409d2 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Tue, 2 Aug 2016 20:33:50 +0200 Subject: [PATCH 075/214] Fixed issue with IC2 integration causing console spam, fixes #218 --- CHANGELOG.md | 4 ++ .../java/refinedstorage/RefinedStorage.java | 4 -- .../apiimpl/network/NetworkUtils.java | 9 ----- .../integration/ic2/IC2EnergyController.java | 40 +++++++++++++++++++ .../ic2/IC2EnergyControllerNone.java | 15 +++++++ .../integration/ic2/IC2Integration.java | 17 ++++++++ .../integration/ic2/IIC2EnergyController.java | 9 +++++ .../refinedstorage/item/ItemWirelessGrid.java | 12 +++--- .../tile/controller/IC2Energy.java | 35 ---------------- .../tile/controller/TileController.java | 28 +++++++------ 10 files changed, 105 insertions(+), 68 deletions(-) create mode 100755 src/main/java/refinedstorage/integration/ic2/IC2EnergyController.java create mode 100755 src/main/java/refinedstorage/integration/ic2/IC2EnergyControllerNone.java create mode 100755 src/main/java/refinedstorage/integration/ic2/IC2Integration.java create mode 100755 src/main/java/refinedstorage/integration/ic2/IIC2EnergyController.java delete mode 100755 src/main/java/refinedstorage/tile/controller/IC2Energy.java diff --git a/CHANGELOG.md b/CHANGELOG.md index 6de161228..0d18f8751 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Refined Storage Changelog +### 0.8.16 +**Bugfixes** +- Fixed issue with IC2 integration causing console spam + ### 0.8.15 **Bugfixes** - Fixed server startup crash diff --git a/src/main/java/refinedstorage/RefinedStorage.java b/src/main/java/refinedstorage/RefinedStorage.java index d241c91c8..c07daf97b 100755 --- a/src/main/java/refinedstorage/RefinedStorage.java +++ b/src/main/java/refinedstorage/RefinedStorage.java @@ -146,10 +146,6 @@ public final class RefinedStorage { return Loader.isModLoaded("JEI"); } - public static boolean hasIC2() { - return Loader.isModLoaded("IC2"); - } - public static boolean hasTesla() { return Loader.isModLoaded("Tesla"); } diff --git a/src/main/java/refinedstorage/apiimpl/network/NetworkUtils.java b/src/main/java/refinedstorage/apiimpl/network/NetworkUtils.java index 5dcc72d94..eb7091dea 100755 --- a/src/main/java/refinedstorage/apiimpl/network/NetworkUtils.java +++ b/src/main/java/refinedstorage/apiimpl/network/NetworkUtils.java @@ -6,16 +6,7 @@ import refinedstorage.api.network.INetworkMaster; import refinedstorage.api.storage.CompareUtils; // @TODO: Move this class to API -// @TODO: Move IC2-specific stuff to special IC2 integration class, along with the IC2 wrapper class public final class NetworkUtils { - public static int convertIC2ToRF(double amount) { - return amount >= Double.POSITIVE_INFINITY ? Integer.MAX_VALUE : ((int) Math.floor(amount) * 4); - } - - public static double convertRFToIC2(int amount) { - return Math.floor(amount / 4); - } - public static ItemStack extractItem(INetworkMaster network, ItemStack stack, int size) { return network.extractItem(stack, size, CompareUtils.COMPARE_DAMAGE | CompareUtils.COMPARE_NBT); } diff --git a/src/main/java/refinedstorage/integration/ic2/IC2EnergyController.java b/src/main/java/refinedstorage/integration/ic2/IC2EnergyController.java new file mode 100755 index 000000000..03ac96f9a --- /dev/null +++ b/src/main/java/refinedstorage/integration/ic2/IC2EnergyController.java @@ -0,0 +1,40 @@ +package refinedstorage.integration.ic2; + +import ic2.api.energy.prefab.BasicSink; +import net.minecraft.util.EnumFacing; +import refinedstorage.tile.controller.TileController; + +public class IC2EnergyController implements IIC2EnergyController { + private BasicSink sink; + + public IC2EnergyController(final TileController controller) { + this.sink = new BasicSink(controller, (int) IC2Integration.toEU(controller.getEnergy().getMaxEnergyStored()), Integer.MAX_VALUE) { + @Override + public double getDemandedEnergy() { + return Math.max(0.0D, IC2Integration.toEU(controller.getEnergy().getMaxEnergyStored()) - IC2Integration.toEU(controller.getEnergy().getEnergyStored())); + } + + @Override + public double injectEnergy(EnumFacing directionFrom, double amount, double voltage) { + controller.getEnergy().setEnergyStored(controller.getEnergy().getEnergyStored() + IC2Integration.toRS(amount)); + + return 0.0D; + } + }; + } + + @Override + public void invalidate() { + sink.invalidate(); + } + + @Override + public void update() { + sink.update(); + } + + @Override + public void onChunkUnload() { + sink.onChunkUnload(); + } +} diff --git a/src/main/java/refinedstorage/integration/ic2/IC2EnergyControllerNone.java b/src/main/java/refinedstorage/integration/ic2/IC2EnergyControllerNone.java new file mode 100755 index 000000000..d415ba09f --- /dev/null +++ b/src/main/java/refinedstorage/integration/ic2/IC2EnergyControllerNone.java @@ -0,0 +1,15 @@ +package refinedstorage.integration.ic2; + +public class IC2EnergyControllerNone implements IIC2EnergyController { + @Override + public void invalidate() { + } + + @Override + public void update() { + } + + @Override + public void onChunkUnload() { + } +} diff --git a/src/main/java/refinedstorage/integration/ic2/IC2Integration.java b/src/main/java/refinedstorage/integration/ic2/IC2Integration.java new file mode 100755 index 000000000..6b83b1441 --- /dev/null +++ b/src/main/java/refinedstorage/integration/ic2/IC2Integration.java @@ -0,0 +1,17 @@ +package refinedstorage.integration.ic2; + +import net.minecraftforge.fml.common.Loader; + +public final class IC2Integration { + public static boolean isLoaded() { + return Loader.isModLoaded("IC2"); + } + + public static int toRS(double amount) { + return amount >= Double.POSITIVE_INFINITY ? Integer.MAX_VALUE : ((int) Math.floor(amount) * 4); + } + + public static double toEU(int amount) { + return Math.floor(amount / 4); + } +} diff --git a/src/main/java/refinedstorage/integration/ic2/IIC2EnergyController.java b/src/main/java/refinedstorage/integration/ic2/IIC2EnergyController.java new file mode 100755 index 000000000..1fb4e996e --- /dev/null +++ b/src/main/java/refinedstorage/integration/ic2/IIC2EnergyController.java @@ -0,0 +1,9 @@ +package refinedstorage.integration.ic2; + +public interface IIC2EnergyController { + void invalidate(); + + void update(); + + void onChunkUnload(); +} diff --git a/src/main/java/refinedstorage/item/ItemWirelessGrid.java b/src/main/java/refinedstorage/item/ItemWirelessGrid.java index 57c8b3bf7..3f427476b 100755 --- a/src/main/java/refinedstorage/item/ItemWirelessGrid.java +++ b/src/main/java/refinedstorage/item/ItemWirelessGrid.java @@ -25,15 +25,13 @@ import net.minecraftforge.common.capabilities.ICapabilityProvider; import net.minecraftforge.fml.common.Optional; import refinedstorage.RefinedStorage; import refinedstorage.RefinedStorageBlocks; +import refinedstorage.integration.ic2.IC2Integration; import refinedstorage.tile.controller.TileController; import refinedstorage.tile.grid.TileGrid; import javax.annotation.Nullable; import java.util.List; -import static refinedstorage.apiimpl.network.NetworkUtils.convertIC2ToRF; -import static refinedstorage.apiimpl.network.NetworkUtils.convertRFToIC2; - @Optional.InterfaceList({ @Optional.Interface(iface = "ic2.api.item.ISpecialElectricItem", modid = "IC2"), @Optional.Interface(iface = "ic2.api.item.IElectricItemManager", modid = "IC2") @@ -239,25 +237,25 @@ public class ItemWirelessGrid extends ItemEnergyContainer implements ISpecialEle @Optional.Method(modid = "IC2") @Override public double charge(ItemStack stack, double amount, int tier, boolean ignoreTransferLimit, boolean simulate) { - return convertRFToIC2(receiveEnergy(stack, convertIC2ToRF(amount), simulate)); + return IC2Integration.toEU(receiveEnergy(stack, IC2Integration.toRS(amount), simulate)); } @Optional.Method(modid = "IC2") @Override public double discharge(ItemStack stack, double amount, int tier, boolean ignoreTransferLimit, boolean externally, boolean simulate) { - return convertRFToIC2(extractEnergy(stack, convertIC2ToRF(amount), simulate)); + return IC2Integration.toEU(extractEnergy(stack, IC2Integration.toRS(amount), simulate)); } @Optional.Method(modid = "IC2") @Override public double getCharge(ItemStack stack) { - return convertRFToIC2(getEnergyStored(stack)); + return IC2Integration.toEU(getEnergyStored(stack)); } @Optional.Method(modid = "IC2") @Override public double getMaxCharge(ItemStack stack) { - return convertRFToIC2(getMaxEnergyStored(stack)); + return IC2Integration.toEU(getMaxEnergyStored(stack)); } @Optional.Method(modid = "IC2") diff --git a/src/main/java/refinedstorage/tile/controller/IC2Energy.java b/src/main/java/refinedstorage/tile/controller/IC2Energy.java deleted file mode 100755 index d1f052031..000000000 --- a/src/main/java/refinedstorage/tile/controller/IC2Energy.java +++ /dev/null @@ -1,35 +0,0 @@ -package refinedstorage.tile.controller; - -import ic2.api.energy.prefab.BasicSink; -import net.minecraft.util.EnumFacing; - -import static refinedstorage.apiimpl.network.NetworkUtils.convertIC2ToRF; -import static refinedstorage.apiimpl.network.NetworkUtils.convertRFToIC2; - -public class IC2Energy { - private BasicSink sink; - - public IC2Energy(final TileController controller) { - this.sink = new BasicSink(controller, (int) convertRFToIC2(controller.getEnergy().getMaxEnergyStored()), Integer.MAX_VALUE) { - @Override - public double getDemandedEnergy() { - return Math.max(0.0D, convertRFToIC2(controller.getEnergy().getMaxEnergyStored()) - convertRFToIC2(controller.getEnergy().getEnergyStored())); - } - - @Override - public double injectEnergy(EnumFacing directionFrom, double amount, double voltage) { - controller.getEnergy().setEnergyStored(controller.getEnergy().getEnergyStored() + convertIC2ToRF(amount)); - - return 0.0D; - } - }; - } - - public void invalidate() { - sink.invalidate(); - } - - public void update() { - sink.update(); - } -} diff --git a/src/main/java/refinedstorage/tile/controller/TileController.java b/src/main/java/refinedstorage/tile/controller/TileController.java index 6bd405317..d34ca5a8d 100755 --- a/src/main/java/refinedstorage/tile/controller/TileController.java +++ b/src/main/java/refinedstorage/tile/controller/TileController.java @@ -41,6 +41,10 @@ import refinedstorage.block.BlockController; import refinedstorage.block.EnumControllerType; import refinedstorage.container.ContainerController; import refinedstorage.container.ContainerGrid; +import refinedstorage.integration.ic2.IC2EnergyController; +import refinedstorage.integration.ic2.IC2EnergyControllerNone; +import refinedstorage.integration.ic2.IC2Integration; +import refinedstorage.integration.ic2.IIC2EnergyController; import refinedstorage.item.ItemPattern; import refinedstorage.network.MessageGridDelta; import refinedstorage.network.MessageGridUpdate; @@ -100,7 +104,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR private List craftingTasksToCancel = new ArrayList(); private EnergyStorage energy = new EnergyStorage(RefinedStorage.INSTANCE.controllerCapacity); - private IC2Energy IC2Energy; + private IIC2EnergyController energyEU; private int energyUsage; private int lastEnergyDisplay; @@ -115,8 +119,10 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR private List clientNodes = new ArrayList(); public TileController() { - if (RefinedStorage.hasIC2()) { - this.IC2Energy = new IC2Energy(this); + if (IC2Integration.isLoaded()) { + this.energyEU = new IC2EnergyController(this); + } else { + this.energyEU = new IC2EnergyControllerNone(); } } @@ -143,9 +149,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR @Override public void update() { if (!worldObj.isRemote) { - if (IC2Energy != null) { - IC2Energy.update(); - } + energyEU.update(); if (canRun()) { Collections.sort(storage.getStorages(), sizeComparator); @@ -227,11 +231,9 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR @Override public void invalidate() { - super.invalidate(); + energyEU.invalidate(); - if (IC2Energy != null) { - IC2Energy.invalidate(); - } + super.invalidate(); } public List getClientNodes() { @@ -250,9 +252,9 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR @Override public void onChunkUnload() { - if (IC2Energy != null) { - IC2Energy.invalidate(); - } + super.onChunkUnload(); + + energyEU.onChunkUnload(); } public IGroupedStorage getStorage() { From 4eb7a447f4ffcdbf160253b09190d3a11ee65e67 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Tue, 2 Aug 2016 20:36:35 +0200 Subject: [PATCH 076/214] Move JEI integration to other package --- .../java/refinedstorage/RefinedStorage.java | 4 - .../java/refinedstorage/gui/grid/GuiGrid.java | 6 +- .../SideButtonGridSearchBoxMode.java | 4 +- .../jei/JEIIntegration.java} | 11 +- .../jei/RecipeTransferHandlerGrid.java | 2 +- .../jei/SoldererRecipeCategory.java | 138 +++++++++--------- .../jei/SoldererRecipeHandler.java | 68 ++++----- .../jei/SoldererRecipeMaker.java | 56 +++---- .../jei/SoldererRecipeWrapper.java | 98 ++++++------- 9 files changed, 194 insertions(+), 193 deletions(-) rename src/main/java/refinedstorage/{jei/RefinedStorageJEIPlugin.java => integration/jei/JEIIntegration.java} (78%) rename src/main/java/refinedstorage/{ => integration}/jei/RecipeTransferHandlerGrid.java (98%) rename src/main/java/refinedstorage/{ => integration}/jei/SoldererRecipeCategory.java (94%) rename src/main/java/refinedstorage/{ => integration}/jei/SoldererRecipeHandler.java (92%) rename src/main/java/refinedstorage/{ => integration}/jei/SoldererRecipeMaker.java (93%) rename src/main/java/refinedstorage/{ => integration}/jei/SoldererRecipeWrapper.java (93%) diff --git a/src/main/java/refinedstorage/RefinedStorage.java b/src/main/java/refinedstorage/RefinedStorage.java index c07daf97b..bbe008368 100755 --- a/src/main/java/refinedstorage/RefinedStorage.java +++ b/src/main/java/refinedstorage/RefinedStorage.java @@ -142,10 +142,6 @@ public final class RefinedStorage { PROXY.postInit(e); } - public static boolean hasJei() { - return Loader.isModLoaded("JEI"); - } - public static boolean hasTesla() { return Loader.isModLoaded("Tesla"); } diff --git a/src/main/java/refinedstorage/gui/grid/GuiGrid.java b/src/main/java/refinedstorage/gui/grid/GuiGrid.java index 6c4946552..4181770b5 100755 --- a/src/main/java/refinedstorage/gui/grid/GuiGrid.java +++ b/src/main/java/refinedstorage/gui/grid/GuiGrid.java @@ -21,7 +21,7 @@ import refinedstorage.gui.Scrollbar; import refinedstorage.gui.grid.sorting.GridSortingName; import refinedstorage.gui.grid.sorting.GridSortingQuantity; import refinedstorage.gui.sidebutton.*; -import refinedstorage.jei.RefinedStorageJEIPlugin; +import refinedstorage.integration.jei.JEIIntegration; import refinedstorage.network.MessageGridCraftingClear; import refinedstorage.network.MessageGridInsertHeld; import refinedstorage.network.MessageGridPatternCreate; @@ -394,8 +394,8 @@ public class GuiGrid extends GuiBase { } private void updateJEI() { - if (RefinedStorage.hasJei() && (grid.getSearchBoxMode() == TileGrid.SEARCH_BOX_MODE_JEI_SYNCHRONIZED || grid.getSearchBoxMode() == TileGrid.SEARCH_BOX_MODE_JEI_SYNCHRONIZED_AUTOSELECTED)) { - RefinedStorageJEIPlugin.INSTANCE.getRuntime().getItemListOverlay().setFilterText(searchField.getText()); + if (JEIIntegration.isLoaded() && (grid.getSearchBoxMode() == TileGrid.SEARCH_BOX_MODE_JEI_SYNCHRONIZED || grid.getSearchBoxMode() == TileGrid.SEARCH_BOX_MODE_JEI_SYNCHRONIZED_AUTOSELECTED)) { + JEIIntegration.INSTANCE.getRuntime().getItemListOverlay().setFilterText(searchField.getText()); } } diff --git a/src/main/java/refinedstorage/gui/sidebutton/SideButtonGridSearchBoxMode.java b/src/main/java/refinedstorage/gui/sidebutton/SideButtonGridSearchBoxMode.java index 6466c07bf..0b376e4ae 100755 --- a/src/main/java/refinedstorage/gui/sidebutton/SideButtonGridSearchBoxMode.java +++ b/src/main/java/refinedstorage/gui/sidebutton/SideButtonGridSearchBoxMode.java @@ -1,9 +1,9 @@ package refinedstorage.gui.sidebutton; import net.minecraft.util.text.TextFormatting; -import refinedstorage.RefinedStorage; import refinedstorage.gui.GuiBase; import refinedstorage.gui.grid.GuiGrid; +import refinedstorage.integration.jei.JEIIntegration; import refinedstorage.tile.grid.TileGrid; public class SideButtonGridSearchBoxMode extends SideButton { @@ -31,7 +31,7 @@ public class SideButtonGridSearchBoxMode extends SideButton { if (mode == TileGrid.SEARCH_BOX_MODE_NORMAL) { mode = TileGrid.SEARCH_BOX_MODE_NORMAL_AUTOSELECTED; } else if (mode == TileGrid.SEARCH_BOX_MODE_NORMAL_AUTOSELECTED) { - if (RefinedStorage.hasJei()) { + if (JEIIntegration.isLoaded()) { mode = TileGrid.SEARCH_BOX_MODE_JEI_SYNCHRONIZED; } else { mode = TileGrid.SEARCH_BOX_MODE_NORMAL; diff --git a/src/main/java/refinedstorage/jei/RefinedStorageJEIPlugin.java b/src/main/java/refinedstorage/integration/jei/JEIIntegration.java similarity index 78% rename from src/main/java/refinedstorage/jei/RefinedStorageJEIPlugin.java rename to src/main/java/refinedstorage/integration/jei/JEIIntegration.java index dd547091e..62da17355 100755 --- a/src/main/java/refinedstorage/jei/RefinedStorageJEIPlugin.java +++ b/src/main/java/refinedstorage/integration/jei/JEIIntegration.java @@ -1,15 +1,16 @@ -package refinedstorage.jei; +package refinedstorage.integration.jei; import mezz.jei.api.IJeiRuntime; import mezz.jei.api.IModPlugin; import mezz.jei.api.IModRegistry; import mezz.jei.api.JEIPlugin; import net.minecraft.item.ItemStack; +import net.minecraftforge.fml.common.Loader; import refinedstorage.RefinedStorageBlocks; @JEIPlugin -public class RefinedStorageJEIPlugin implements IModPlugin { - public static RefinedStorageJEIPlugin INSTANCE; +public class JEIIntegration implements IModPlugin { + public static JEIIntegration INSTANCE; private IJeiRuntime runtime; @@ -36,4 +37,8 @@ public class RefinedStorageJEIPlugin implements IModPlugin { public IJeiRuntime getRuntime() { return runtime; } + + public static boolean isLoaded() { + return Loader.isModLoaded("JEI"); + } } diff --git a/src/main/java/refinedstorage/jei/RecipeTransferHandlerGrid.java b/src/main/java/refinedstorage/integration/jei/RecipeTransferHandlerGrid.java similarity index 98% rename from src/main/java/refinedstorage/jei/RecipeTransferHandlerGrid.java rename to src/main/java/refinedstorage/integration/jei/RecipeTransferHandlerGrid.java index b68023f41..36f61b40c 100755 --- a/src/main/java/refinedstorage/jei/RecipeTransferHandlerGrid.java +++ b/src/main/java/refinedstorage/integration/jei/RecipeTransferHandlerGrid.java @@ -1,4 +1,4 @@ -package refinedstorage.jei; +package refinedstorage.integration.jei; import mezz.jei.api.gui.IGuiIngredient; import mezz.jei.api.gui.IRecipeLayout; diff --git a/src/main/java/refinedstorage/jei/SoldererRecipeCategory.java b/src/main/java/refinedstorage/integration/jei/SoldererRecipeCategory.java similarity index 94% rename from src/main/java/refinedstorage/jei/SoldererRecipeCategory.java rename to src/main/java/refinedstorage/integration/jei/SoldererRecipeCategory.java index 8a2a2452b..077621927 100755 --- a/src/main/java/refinedstorage/jei/SoldererRecipeCategory.java +++ b/src/main/java/refinedstorage/integration/jei/SoldererRecipeCategory.java @@ -1,69 +1,69 @@ -package refinedstorage.jei; - -import mezz.jei.api.IGuiHelper; -import mezz.jei.api.gui.IDrawable; -import mezz.jei.api.gui.IGuiItemStackGroup; -import mezz.jei.api.gui.IRecipeLayout; -import mezz.jei.api.recipe.IRecipeCategory; -import mezz.jei.api.recipe.IRecipeWrapper; -import net.minecraft.client.Minecraft; -import net.minecraft.client.resources.I18n; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ResourceLocation; - -public class SoldererRecipeCategory implements IRecipeCategory { - public static final String ID = "refinedstorage.solderer"; - - private IDrawable background; - - public SoldererRecipeCategory(IGuiHelper helper) { - background = helper.createDrawable(new ResourceLocation("refinedstorage", "textures/gui/solderer.png"), 8, 5, 162, 83); - } - - @Override - public String getUid() { - return ID; - } - - @Override - public String getTitle() { - return I18n.format("gui.refinedstorage:solderer"); - } - - @Override - public IDrawable getBackground() { - return background; - } - - @Override - public void drawExtras(Minecraft minecraft) { - } - - @Override - public void drawAnimations(Minecraft minecraft) { - } - - @Override - public void setRecipe(IRecipeLayout recipeLayout, IRecipeWrapper recipeWrapper) { - IGuiItemStackGroup group = recipeLayout.getItemStacks(); - - int x = 44 - 9; - int y = 20 - 6; - - for (int i = 0; i < 3; ++i) { - group.init(i, true, x, y); - - y += 18; - } - - group.init(3, false, 127 - 9, 38 - 6); - - if (recipeWrapper instanceof SoldererRecipeWrapper) { - for (int i = 0; i < 3; ++i) { - group.set(i, (ItemStack) recipeWrapper.getInputs().get(i)); - } - - group.set(3, (ItemStack) recipeWrapper.getOutputs().get(0)); - } - } -} +package refinedstorage.integration.jei; + +import mezz.jei.api.IGuiHelper; +import mezz.jei.api.gui.IDrawable; +import mezz.jei.api.gui.IGuiItemStackGroup; +import mezz.jei.api.gui.IRecipeLayout; +import mezz.jei.api.recipe.IRecipeCategory; +import mezz.jei.api.recipe.IRecipeWrapper; +import net.minecraft.client.Minecraft; +import net.minecraft.client.resources.I18n; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; + +public class SoldererRecipeCategory implements IRecipeCategory { + public static final String ID = "refinedstorage.solderer"; + + private IDrawable background; + + public SoldererRecipeCategory(IGuiHelper helper) { + background = helper.createDrawable(new ResourceLocation("refinedstorage", "textures/gui/solderer.png"), 8, 5, 162, 83); + } + + @Override + public String getUid() { + return ID; + } + + @Override + public String getTitle() { + return I18n.format("gui.refinedstorage:solderer"); + } + + @Override + public IDrawable getBackground() { + return background; + } + + @Override + public void drawExtras(Minecraft minecraft) { + } + + @Override + public void drawAnimations(Minecraft minecraft) { + } + + @Override + public void setRecipe(IRecipeLayout recipeLayout, IRecipeWrapper recipeWrapper) { + IGuiItemStackGroup group = recipeLayout.getItemStacks(); + + int x = 44 - 9; + int y = 20 - 6; + + for (int i = 0; i < 3; ++i) { + group.init(i, true, x, y); + + y += 18; + } + + group.init(3, false, 127 - 9, 38 - 6); + + if (recipeWrapper instanceof SoldererRecipeWrapper) { + for (int i = 0; i < 3; ++i) { + group.set(i, (ItemStack) recipeWrapper.getInputs().get(i)); + } + + group.set(3, (ItemStack) recipeWrapper.getOutputs().get(0)); + } + } +} diff --git a/src/main/java/refinedstorage/jei/SoldererRecipeHandler.java b/src/main/java/refinedstorage/integration/jei/SoldererRecipeHandler.java similarity index 92% rename from src/main/java/refinedstorage/jei/SoldererRecipeHandler.java rename to src/main/java/refinedstorage/integration/jei/SoldererRecipeHandler.java index ce122bb10..cee9fd08e 100755 --- a/src/main/java/refinedstorage/jei/SoldererRecipeHandler.java +++ b/src/main/java/refinedstorage/integration/jei/SoldererRecipeHandler.java @@ -1,34 +1,34 @@ -package refinedstorage.jei; - -import mezz.jei.api.recipe.IRecipeHandler; -import mezz.jei.api.recipe.IRecipeWrapper; - -import javax.annotation.Nonnull; - -public class SoldererRecipeHandler implements IRecipeHandler { - @Override - public Class getRecipeClass() { - return SoldererRecipeWrapper.class; - } - - @Override - public String getRecipeCategoryUid() { - return SoldererRecipeCategory.ID; - } - - @Nonnull - @Override - public String getRecipeCategoryUid(@Nonnull SoldererRecipeWrapper recipe) { - return SoldererRecipeCategory.ID; - } - - @Override - public IRecipeWrapper getRecipeWrapper(SoldererRecipeWrapper recipe) { - return recipe; - } - - @Override - public boolean isRecipeValid(SoldererRecipeWrapper recipe) { - return true; - } -} +package refinedstorage.integration.jei; + +import mezz.jei.api.recipe.IRecipeHandler; +import mezz.jei.api.recipe.IRecipeWrapper; + +import javax.annotation.Nonnull; + +public class SoldererRecipeHandler implements IRecipeHandler { + @Override + public Class getRecipeClass() { + return SoldererRecipeWrapper.class; + } + + @Override + public String getRecipeCategoryUid() { + return SoldererRecipeCategory.ID; + } + + @Nonnull + @Override + public String getRecipeCategoryUid(@Nonnull SoldererRecipeWrapper recipe) { + return SoldererRecipeCategory.ID; + } + + @Override + public IRecipeWrapper getRecipeWrapper(SoldererRecipeWrapper recipe) { + return recipe; + } + + @Override + public boolean isRecipeValid(SoldererRecipeWrapper recipe) { + return true; + } +} diff --git a/src/main/java/refinedstorage/jei/SoldererRecipeMaker.java b/src/main/java/refinedstorage/integration/jei/SoldererRecipeMaker.java similarity index 93% rename from src/main/java/refinedstorage/jei/SoldererRecipeMaker.java rename to src/main/java/refinedstorage/integration/jei/SoldererRecipeMaker.java index d042d2aa3..0fbcc01fa 100755 --- a/src/main/java/refinedstorage/jei/SoldererRecipeMaker.java +++ b/src/main/java/refinedstorage/integration/jei/SoldererRecipeMaker.java @@ -1,28 +1,28 @@ -package refinedstorage.jei; - -import net.minecraft.item.ItemStack; -import refinedstorage.api.RefinedStorageAPI; -import refinedstorage.api.solderer.ISoldererRecipe; - -import java.util.ArrayList; -import java.util.List; - -public class SoldererRecipeMaker { - public static List getRecipes() { - List recipes = new ArrayList(); - - for (ISoldererRecipe recipe : RefinedStorageAPI.SOLDERER_REGISTRY.getRecipes()) { - List inputs = new ArrayList(); - - inputs.add(recipe.getRow(0)); - inputs.add(recipe.getRow(1)); - inputs.add(recipe.getRow(2)); - - ItemStack output = recipe.getResult(); - - recipes.add(new SoldererRecipeWrapper(inputs, output)); - } - - return recipes; - } -} +package refinedstorage.integration.jei; + +import net.minecraft.item.ItemStack; +import refinedstorage.api.RefinedStorageAPI; +import refinedstorage.api.solderer.ISoldererRecipe; + +import java.util.ArrayList; +import java.util.List; + +public class SoldererRecipeMaker { + public static List getRecipes() { + List recipes = new ArrayList(); + + for (ISoldererRecipe recipe : RefinedStorageAPI.SOLDERER_REGISTRY.getRecipes()) { + List inputs = new ArrayList(); + + inputs.add(recipe.getRow(0)); + inputs.add(recipe.getRow(1)); + inputs.add(recipe.getRow(2)); + + ItemStack output = recipe.getResult(); + + recipes.add(new SoldererRecipeWrapper(inputs, output)); + } + + return recipes; + } +} diff --git a/src/main/java/refinedstorage/jei/SoldererRecipeWrapper.java b/src/main/java/refinedstorage/integration/jei/SoldererRecipeWrapper.java similarity index 93% rename from src/main/java/refinedstorage/jei/SoldererRecipeWrapper.java rename to src/main/java/refinedstorage/integration/jei/SoldererRecipeWrapper.java index ede772266..57988bb4e 100755 --- a/src/main/java/refinedstorage/jei/SoldererRecipeWrapper.java +++ b/src/main/java/refinedstorage/integration/jei/SoldererRecipeWrapper.java @@ -1,49 +1,49 @@ -package refinedstorage.jei; - -import mezz.jei.plugins.vanilla.VanillaRecipeWrapper; -import net.minecraft.item.ItemStack; - -import java.util.Collections; -import java.util.List; - -public class SoldererRecipeWrapper extends VanillaRecipeWrapper { - private List inputs; - private ItemStack output; - - public SoldererRecipeWrapper(List inputs, ItemStack output) { - this.inputs = inputs; - this.output = output; - } - - @Override - public List getInputs() { - return inputs; - } - - @Override - public List getOutputs() { - return Collections.singletonList(output); - } - - @Override - public boolean equals(Object obj) { - if (!(obj instanceof SoldererRecipeWrapper)) { - return false; - } - - SoldererRecipeWrapper other = (SoldererRecipeWrapper) obj; - - for (int i = 0; i < inputs.size(); i++) { - if (!ItemStack.areItemStacksEqual(inputs.get(i), other.inputs.get(i))) { - return false; - } - } - - return ItemStack.areItemStacksEqual(output, other.output); - } - - @Override - public String toString() { - return inputs + " = " + output; - } -} +package refinedstorage.integration.jei; + +import mezz.jei.plugins.vanilla.VanillaRecipeWrapper; +import net.minecraft.item.ItemStack; + +import java.util.Collections; +import java.util.List; + +public class SoldererRecipeWrapper extends VanillaRecipeWrapper { + private List inputs; + private ItemStack output; + + public SoldererRecipeWrapper(List inputs, ItemStack output) { + this.inputs = inputs; + this.output = output; + } + + @Override + public List getInputs() { + return inputs; + } + + @Override + public List getOutputs() { + return Collections.singletonList(output); + } + + @Override + public boolean equals(Object obj) { + if (!(obj instanceof SoldererRecipeWrapper)) { + return false; + } + + SoldererRecipeWrapper other = (SoldererRecipeWrapper) obj; + + for (int i = 0; i < inputs.size(); i++) { + if (!ItemStack.areItemStacksEqual(inputs.get(i), other.inputs.get(i))) { + return false; + } + } + + return ItemStack.areItemStacksEqual(output, other.output); + } + + @Override + public String toString() { + return inputs + " = " + output; + } +} From 3f506cd5e4f864e8f54e6ffc903f495f55e186c3 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Tue, 2 Aug 2016 20:39:37 +0200 Subject: [PATCH 077/214] Add ChillUpX to CREDITS.md and add German translation to changelog --- CHANGELOG.md | 3 +++ CREDITS.md | 1 + 2 files changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0d18f8751..41e370838 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,9 @@ **Bugfixes** - Fixed issue with IC2 integration causing console spam +**Features** +- Added German translation by ChillUpX + ### 0.8.15 **Bugfixes** - Fixed server startup crash diff --git a/CREDITS.md b/CREDITS.md index ade1746e9..6f68c2dde 100755 --- a/CREDITS.md +++ b/CREDITS.md @@ -10,3 +10,4 @@ ## Translations - ChaoticTabris (Portuguese (Brazilian) translation) - Leventovitch (French translation) +- ChillUpX (German translation) \ No newline at end of file From b287c1902963aee84a0791fead4e4f92a5ab2249 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Tue, 2 Aug 2016 20:41:19 +0200 Subject: [PATCH 078/214] Add line break --- src/main/resources/assets/refinedstorage/lang/de_DE.lang | 1 + 1 file changed, 1 insertion(+) mode change 100644 => 100755 src/main/resources/assets/refinedstorage/lang/de_DE.lang diff --git a/src/main/resources/assets/refinedstorage/lang/de_DE.lang b/src/main/resources/assets/refinedstorage/lang/de_DE.lang old mode 100644 new mode 100755 index 2bcdc8acd..e406aca4c --- a/src/main/resources/assets/refinedstorage/lang/de_DE.lang +++ b/src/main/resources/assets/refinedstorage/lang/de_DE.lang @@ -93,6 +93,7 @@ sidebutton.refinedstorage:detector.mode=Modus sidebutton.refinedstorage:detector.mode.0=Signal geben, wenn Wert unterschritten wird sidebutton.refinedstorage:detector.mode.1=Signal geben, wenn genauer Wert erreicht wird sidebutton.refinedstorage:detector.mode.2=Signal geben, wenn Wert überschritten wird + block.refinedstorage:controller.0.name=Controller block.refinedstorage:controller.1.name=Kreativer Controller block.refinedstorage:cable.name=Kabel From 1e286447c7cf6290813bca001987481abcefb00b Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Tue, 2 Aug 2016 20:50:23 +0200 Subject: [PATCH 079/214] Move NetworkUtils to API pkg --- .../{apiimpl => api}/network/NetworkUtils.java | 7 ++++--- .../java/refinedstorage/api/storage/IGroupedStorage.java | 2 +- .../apiimpl/autocrafting/BasicCraftingTask.java | 2 +- .../apiimpl/autocrafting/ProcessingCraftingTask.java | 2 +- .../java/refinedstorage/apiimpl/network/GridHandler.java | 1 + .../refinedstorage/apiimpl/storage/GroupedStorage.java | 2 +- src/main/java/refinedstorage/block/BlockController.java | 2 +- src/main/java/refinedstorage/block/BlockNode.java | 2 +- src/main/java/refinedstorage/gui/grid/ClientStack.java | 2 +- .../java/refinedstorage/tile/TileNetworkTransmitter.java | 2 +- src/main/java/refinedstorage/tile/TileNode.java | 2 +- .../refinedstorage/tile/controller/TileController.java | 1 - src/main/java/refinedstorage/tile/grid/TileGrid.java | 2 +- 13 files changed, 15 insertions(+), 14 deletions(-) rename src/main/java/refinedstorage/{apiimpl => api}/network/NetworkUtils.java (89%) diff --git a/src/main/java/refinedstorage/apiimpl/network/NetworkUtils.java b/src/main/java/refinedstorage/api/network/NetworkUtils.java similarity index 89% rename from src/main/java/refinedstorage/apiimpl/network/NetworkUtils.java rename to src/main/java/refinedstorage/api/network/NetworkUtils.java index eb7091dea..b5bb88a47 100755 --- a/src/main/java/refinedstorage/apiimpl/network/NetworkUtils.java +++ b/src/main/java/refinedstorage/api/network/NetworkUtils.java @@ -1,11 +1,12 @@ -package refinedstorage.apiimpl.network; +package refinedstorage.api.network; import net.minecraft.item.ItemStack; import refinedstorage.api.autocrafting.ICraftingPattern; -import refinedstorage.api.network.INetworkMaster; import refinedstorage.api.storage.CompareUtils; -// @TODO: Move this class to API +/** + * Utilities for network manipulation. + */ public final class NetworkUtils { public static ItemStack extractItem(INetworkMaster network, ItemStack stack, int size) { return network.extractItem(stack, size, CompareUtils.COMPARE_DAMAGE | CompareUtils.COMPARE_NBT); diff --git a/src/main/java/refinedstorage/api/storage/IGroupedStorage.java b/src/main/java/refinedstorage/api/storage/IGroupedStorage.java index 161f2acc4..887f823ed 100755 --- a/src/main/java/refinedstorage/api/storage/IGroupedStorage.java +++ b/src/main/java/refinedstorage/api/storage/IGroupedStorage.java @@ -56,7 +56,7 @@ public interface IGroupedStorage { ItemStack get(@Nonnull ItemStack stack, int flags); /** - * Gets an item from the network by hash. + * Gets an item from the network by hash, see {@link refinedstorage.api.network.NetworkUtils#getItemStackHashCode(ItemStack)}. * * @return Null if no item is found matching the hash, or the {@link ItemStack}, do NOT modify */ diff --git a/src/main/java/refinedstorage/apiimpl/autocrafting/BasicCraftingTask.java b/src/main/java/refinedstorage/apiimpl/autocrafting/BasicCraftingTask.java index 32647b06f..6f0f1f723 100755 --- a/src/main/java/refinedstorage/apiimpl/autocrafting/BasicCraftingTask.java +++ b/src/main/java/refinedstorage/apiimpl/autocrafting/BasicCraftingTask.java @@ -9,7 +9,7 @@ import net.minecraftforge.common.util.Constants; import refinedstorage.api.autocrafting.ICraftingPattern; import refinedstorage.api.autocrafting.ICraftingTask; import refinedstorage.api.network.INetworkMaster; -import refinedstorage.apiimpl.network.NetworkUtils; +import refinedstorage.api.network.NetworkUtils; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/refinedstorage/apiimpl/autocrafting/ProcessingCraftingTask.java b/src/main/java/refinedstorage/apiimpl/autocrafting/ProcessingCraftingTask.java index a71515321..31f04b17a 100755 --- a/src/main/java/refinedstorage/apiimpl/autocrafting/ProcessingCraftingTask.java +++ b/src/main/java/refinedstorage/apiimpl/autocrafting/ProcessingCraftingTask.java @@ -8,8 +8,8 @@ import refinedstorage.api.autocrafting.ICraftingPattern; import refinedstorage.api.autocrafting.ICraftingPatternContainer; import refinedstorage.api.autocrafting.ICraftingTask; import refinedstorage.api.network.INetworkMaster; +import refinedstorage.api.network.NetworkUtils; import refinedstorage.api.storage.CompareUtils; -import refinedstorage.apiimpl.network.NetworkUtils; public class ProcessingCraftingTask implements ICraftingTask { public static final int ID = 1; diff --git a/src/main/java/refinedstorage/apiimpl/network/GridHandler.java b/src/main/java/refinedstorage/apiimpl/network/GridHandler.java index c3ec103eb..dcc2bb780 100755 --- a/src/main/java/refinedstorage/apiimpl/network/GridHandler.java +++ b/src/main/java/refinedstorage/apiimpl/network/GridHandler.java @@ -8,6 +8,7 @@ import refinedstorage.api.autocrafting.ICraftingTask; import refinedstorage.api.network.GridExtractFlags; import refinedstorage.api.network.IGridHandler; import refinedstorage.api.network.INetworkMaster; +import refinedstorage.api.network.NetworkUtils; import refinedstorage.api.storage.CompareUtils; public class GridHandler implements IGridHandler { diff --git a/src/main/java/refinedstorage/apiimpl/storage/GroupedStorage.java b/src/main/java/refinedstorage/apiimpl/storage/GroupedStorage.java index b160082ac..be2aa0b27 100755 --- a/src/main/java/refinedstorage/apiimpl/storage/GroupedStorage.java +++ b/src/main/java/refinedstorage/apiimpl/storage/GroupedStorage.java @@ -7,11 +7,11 @@ import net.minecraft.item.ItemStack; import refinedstorage.api.autocrafting.ICraftingPattern; import refinedstorage.api.network.INetworkMaster; import refinedstorage.api.network.INetworkNode; +import refinedstorage.api.network.NetworkUtils; import refinedstorage.api.storage.CompareUtils; import refinedstorage.api.storage.IGroupedStorage; import refinedstorage.api.storage.IStorage; import refinedstorage.api.storage.IStorageProvider; -import refinedstorage.apiimpl.network.NetworkUtils; import javax.annotation.Nonnull; import javax.annotation.Nullable; diff --git a/src/main/java/refinedstorage/block/BlockController.java b/src/main/java/refinedstorage/block/BlockController.java index 39c4a1d45..16686409b 100755 --- a/src/main/java/refinedstorage/block/BlockController.java +++ b/src/main/java/refinedstorage/block/BlockController.java @@ -20,7 +20,7 @@ import net.minecraft.world.World; import refinedstorage.RefinedStorage; import refinedstorage.RefinedStorageBlocks; import refinedstorage.RefinedStorageGui; -import refinedstorage.apiimpl.network.NetworkUtils; +import refinedstorage.api.network.NetworkUtils; import refinedstorage.item.ItemBlockController; import refinedstorage.tile.controller.TileController; diff --git a/src/main/java/refinedstorage/block/BlockNode.java b/src/main/java/refinedstorage/block/BlockNode.java index ea9d1dcf5..8156606eb 100755 --- a/src/main/java/refinedstorage/block/BlockNode.java +++ b/src/main/java/refinedstorage/block/BlockNode.java @@ -11,7 +11,7 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import refinedstorage.api.network.INetworkMaster; -import refinedstorage.apiimpl.network.NetworkUtils; +import refinedstorage.api.network.NetworkUtils; import refinedstorage.tile.TileNode; public abstract class BlockNode extends BlockBase { diff --git a/src/main/java/refinedstorage/gui/grid/ClientStack.java b/src/main/java/refinedstorage/gui/grid/ClientStack.java index a9cc647b5..6532fa381 100755 --- a/src/main/java/refinedstorage/gui/grid/ClientStack.java +++ b/src/main/java/refinedstorage/gui/grid/ClientStack.java @@ -5,7 +5,7 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraftforge.fml.common.network.ByteBufUtils; import refinedstorage.api.network.INetworkMaster; -import refinedstorage.apiimpl.network.NetworkUtils; +import refinedstorage.api.network.NetworkUtils; public class ClientStack { private int id; diff --git a/src/main/java/refinedstorage/tile/TileNetworkTransmitter.java b/src/main/java/refinedstorage/tile/TileNetworkTransmitter.java index 4bf77d363..0b7dfff89 100755 --- a/src/main/java/refinedstorage/tile/TileNetworkTransmitter.java +++ b/src/main/java/refinedstorage/tile/TileNetworkTransmitter.java @@ -7,7 +7,7 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.math.BlockPos; import refinedstorage.RefinedStorage; import refinedstorage.RefinedStorageItems; -import refinedstorage.apiimpl.network.NetworkUtils; +import refinedstorage.api.network.NetworkUtils; import refinedstorage.container.ContainerNetworkTransmitter; import refinedstorage.inventory.ItemHandlerBasic; import refinedstorage.inventory.ItemHandlerUpgrade; diff --git a/src/main/java/refinedstorage/tile/TileNode.java b/src/main/java/refinedstorage/tile/TileNode.java index f4159bf61..b0c35f2c9 100755 --- a/src/main/java/refinedstorage/tile/TileNode.java +++ b/src/main/java/refinedstorage/tile/TileNode.java @@ -7,7 +7,7 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import refinedstorage.api.network.INetworkMaster; import refinedstorage.api.network.INetworkNode; -import refinedstorage.apiimpl.network.NetworkUtils; +import refinedstorage.api.network.NetworkUtils; import refinedstorage.block.BlockNode; import refinedstorage.tile.config.IRedstoneModeConfig; import refinedstorage.tile.config.RedstoneMode; diff --git a/src/main/java/refinedstorage/tile/controller/TileController.java b/src/main/java/refinedstorage/tile/controller/TileController.java index d34ca5a8d..900e5c0fb 100755 --- a/src/main/java/refinedstorage/tile/controller/TileController.java +++ b/src/main/java/refinedstorage/tile/controller/TileController.java @@ -34,7 +34,6 @@ import refinedstorage.apiimpl.autocrafting.CraftingPattern; import refinedstorage.apiimpl.autocrafting.ProcessingCraftingTask; import refinedstorage.apiimpl.network.GridHandler; import refinedstorage.apiimpl.network.NetworkNodeGraph; -import refinedstorage.apiimpl.network.NetworkUtils; import refinedstorage.apiimpl.network.WirelessGridHandler; import refinedstorage.apiimpl.storage.GroupedStorage; import refinedstorage.block.BlockController; diff --git a/src/main/java/refinedstorage/tile/grid/TileGrid.java b/src/main/java/refinedstorage/tile/grid/TileGrid.java index e2a0c1a3e..0f14802d5 100755 --- a/src/main/java/refinedstorage/tile/grid/TileGrid.java +++ b/src/main/java/refinedstorage/tile/grid/TileGrid.java @@ -15,8 +15,8 @@ import refinedstorage.RefinedStorage; import refinedstorage.RefinedStorageBlocks; import refinedstorage.RefinedStorageItems; import refinedstorage.api.network.IGridHandler; +import refinedstorage.api.network.NetworkUtils; import refinedstorage.api.storage.CompareUtils; -import refinedstorage.apiimpl.network.NetworkUtils; import refinedstorage.block.BlockGrid; import refinedstorage.block.EnumGridType; import refinedstorage.container.ContainerGrid; From 2d725cf4ab94dc53451c6354a08ddcd9b4921f0d Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Tue, 2 Aug 2016 23:00:43 +0200 Subject: [PATCH 080/214] Grid filter change: max 9 items per grid filter, but 4 slots in grid instead --- .../container/ContainerGrid.java | 4 +++- .../container/ContainerGridFilter.java | 20 +++++------------- .../refinedstorage/gui/GuiGridFilter.java | 4 ++-- .../inventory/ItemHandlerGridFilter.java | 2 +- .../ItemHandlerGridFilterInGrid.java | 16 ++++++++------ .../java/refinedstorage/tile/TileBase.java | 4 +++- .../tile/grid/WirelessGrid.java | 6 ++++-- .../textures/gui/crafting_grid.png | Bin 2168 -> 2278 bytes .../refinedstorage/textures/gui/grid.png | Bin 2043 -> 2157 bytes .../textures/gui/grid_filter.png | Bin 1832 -> 1799 bytes .../textures/gui/pattern_grid.png | Bin 2712 -> 2788 bytes 11 files changed, 27 insertions(+), 29 deletions(-) diff --git a/src/main/java/refinedstorage/container/ContainerGrid.java b/src/main/java/refinedstorage/container/ContainerGrid.java index fddc3a828..a893a0919 100755 --- a/src/main/java/refinedstorage/container/ContainerGrid.java +++ b/src/main/java/refinedstorage/container/ContainerGrid.java @@ -60,7 +60,9 @@ public class ContainerGrid extends ContainerBase { addSlotToContainer(new SlotOutput(((TileGrid) grid).getPatterns(), 1, 152, 132)); } - addSlotToContainer(new SlotItemHandler(grid.getFilter(), 0, 204, 6)); + for (int i = 0; i < 4; ++i) { + addSlotToContainer(new SlotItemHandler(grid.getFilter(), i, 204, 6 + (18 * i))); + } } public IGrid getGrid() { diff --git a/src/main/java/refinedstorage/container/ContainerGridFilter.java b/src/main/java/refinedstorage/container/ContainerGridFilter.java index fc636d98f..47fc3be72 100755 --- a/src/main/java/refinedstorage/container/ContainerGridFilter.java +++ b/src/main/java/refinedstorage/container/ContainerGridFilter.java @@ -14,21 +14,11 @@ public class ContainerGridFilter extends ContainerBase { this.filter = new ItemHandlerGridFilter(stack); - int x = 8; - int y = 20; - - for (int i = 0; i < 9 * 3; ++i) { - addSlotToContainer(new SlotSpecimen(filter, i, x, y)); - - if ((i + 1) % 9 == 0) { - y += 18; - x = 8; - } else { - x += 18; - } + for (int i = 0; i < 9; ++i) { + addSlotToContainer(new SlotSpecimen(filter, i, 8 + (i * 18), 20)); } - addPlayerInventory(8, 91); + addPlayerInventory(8, 61); } @Override @@ -40,8 +30,8 @@ public class ContainerGridFilter extends ContainerBase { if (slot != null && slot.getHasStack()) { stack = slot.getStack(); - if (index > (9 * 3) - 1) { - return mergeItemStackToSpecimen(stack, 0, 9 * 3); + if (index > 9 - 1) { + return mergeItemStackToSpecimen(stack, 0, 9); } return null; diff --git a/src/main/java/refinedstorage/gui/GuiGridFilter.java b/src/main/java/refinedstorage/gui/GuiGridFilter.java index 002913bad..7020e5928 100755 --- a/src/main/java/refinedstorage/gui/GuiGridFilter.java +++ b/src/main/java/refinedstorage/gui/GuiGridFilter.java @@ -4,7 +4,7 @@ import refinedstorage.container.ContainerGridFilter; public class GuiGridFilter extends GuiBase { public GuiGridFilter(ContainerGridFilter container) { - super(container, 176, 183); + super(container, 176, 148); } @Override @@ -25,6 +25,6 @@ public class GuiGridFilter extends GuiBase { @Override public void drawForeground(int mouseX, int mouseY) { drawString(7, 7, t("gui.refinedstorage:grid_filter")); - drawString(7, 79, t("container.inventory")); + drawString(7, 55, t("container.inventory")); } } diff --git a/src/main/java/refinedstorage/inventory/ItemHandlerGridFilter.java b/src/main/java/refinedstorage/inventory/ItemHandlerGridFilter.java index dfd83bbfc..1184700c3 100755 --- a/src/main/java/refinedstorage/inventory/ItemHandlerGridFilter.java +++ b/src/main/java/refinedstorage/inventory/ItemHandlerGridFilter.java @@ -9,7 +9,7 @@ public class ItemHandlerGridFilter extends ItemStackHandler { private ItemStack stack; public ItemHandlerGridFilter(ItemStack stack) { - super(9 * 3); + super(9); this.stack = stack; diff --git a/src/main/java/refinedstorage/inventory/ItemHandlerGridFilterInGrid.java b/src/main/java/refinedstorage/inventory/ItemHandlerGridFilterInGrid.java index b51ab73b5..a3393d0ac 100755 --- a/src/main/java/refinedstorage/inventory/ItemHandlerGridFilterInGrid.java +++ b/src/main/java/refinedstorage/inventory/ItemHandlerGridFilterInGrid.java @@ -9,7 +9,7 @@ public class ItemHandlerGridFilterInGrid extends ItemHandlerBasic { private List filteredItems; public ItemHandlerGridFilterInGrid(List filteredItems) { - super(1, new ItemValidatorBasic(RefinedStorageItems.GRID_FILTER)); + super(4, new ItemValidatorBasic(RefinedStorageItems.GRID_FILTER)); this.filteredItems = filteredItems; } @@ -20,14 +20,16 @@ public class ItemHandlerGridFilterInGrid extends ItemHandlerBasic { filteredItems.clear(); - ItemStack stack = getStackInSlot(slot); + for (int i = 0; i < getSlots(); ++i) { + ItemStack stack = getStackInSlot(i); - if (stack != null) { - ItemHandlerGridFilter items = new ItemHandlerGridFilter(stack); + if (stack != null) { + ItemHandlerGridFilter items = new ItemHandlerGridFilter(stack); - for (ItemStack item : items.getFilteredItems()) { - if (item != null) { - filteredItems.add(item); + for (ItemStack item : items.getFilteredItems()) { + if (item != null) { + filteredItems.add(item); + } } } } diff --git a/src/main/java/refinedstorage/tile/TileBase.java b/src/main/java/refinedstorage/tile/TileBase.java index 7bf1fe33a..796fd6836 100755 --- a/src/main/java/refinedstorage/tile/TileBase.java +++ b/src/main/java/refinedstorage/tile/TileBase.java @@ -163,7 +163,9 @@ public abstract class TileBase extends TileEntity implements ITickable { ItemStack stack = ItemStack.loadItemStackFromNBT(tagList.getCompoundTagAt(i)); - handler.insertItem(slot, stack, false); + if (slot >= 0 && slot < handler.getSlots()) { + handler.insertItem(slot, stack, false); + } } } } diff --git a/src/main/java/refinedstorage/tile/grid/WirelessGrid.java b/src/main/java/refinedstorage/tile/grid/WirelessGrid.java index 19a56c128..3d10a0992 100755 --- a/src/main/java/refinedstorage/tile/grid/WirelessGrid.java +++ b/src/main/java/refinedstorage/tile/grid/WirelessGrid.java @@ -45,7 +45,7 @@ public class WirelessGrid implements IGrid { stack.setTagCompound(new NBTTagCompound()); } - TileBase.writeItems(this, 0, stack.getTagCompound()); + TileBase.writeItems(this, slot, stack.getTagCompound()); } } }; @@ -64,7 +64,9 @@ public class WirelessGrid implements IGrid { this.searchBoxMode = ItemWirelessGrid.getSearchBoxMode(stack); if (stack.hasTagCompound()) { - TileBase.readItems(filter, 0, stack.getTagCompound()); + for (int i = 0; i < 4; ++i) { + TileBase.readItems(filter, i, stack.getTagCompound()); + } } } diff --git a/src/main/resources/assets/refinedstorage/textures/gui/crafting_grid.png b/src/main/resources/assets/refinedstorage/textures/gui/crafting_grid.png index 3541a86c6c269b6f853ea90baa4dba354b95308a..f00b3b24e4bfd5fec3979cdb8bd8afa646a3f751 100755 GIT binary patch literal 2278 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K58911MRQ8&P5Fo{p?&#~tz_78O`%fY(0|PTd zfKP}kP~62^QA&dRf`N&DBm;)v@9e6; zXy+{Oh%9Dc;M)ztjK_amF#`%pmbgZg1m~xflqVLYG880c=9TE>rIsj|=o#o48m#5w zIshzSyggkULn`9l-eD|WWFXL%xa#Zw|0(BN&g%$VQkuTBWzYRmw%ttc><+)2SeRE~ z*WUKI#(n?ui=U73oPT(+;NIt{?LT}IGOGR^|88-g-#Mc{N$EiO=ACyR)!6eawC&<# zxV81DL<3i3AKQ+~r|ZOLq_ch4>SOV&pka6LwcT@=Gp{5}R{jCwI;1VP{}? zIQ@_CiEkRug2E3N&0oWDHS6;FNu@KHUvy46DR&fXZpw1LLYdTf)z?A{()>V?h`9&9 zX|ORcxHbIodzCZw!cygick^}nvaN4LnS~}zpQW?RsG-lZaLttZN9jV!M!jxMJF_Oy&cIKwBDqtrG)M5BeF8)tjzKd0O{r z7K4?^=~FuyEQAvN-+G&F`CfFxnP>T*Yo~o?TG2m+tDf~*%`c`1!52IV;xBj=gkSI_ zXkL&%;Pl`T!>aR(pC9|eVIcfM(BXXVPKyIJkNtkRzT|i4zyFfYfj_v4`GT@{IzyF# zXFS6#zssTrqWriIbX@=jbMDF)5BQlH_|9J9cKB!asjqCtlSvHoK`Aic{#7O*#js$r zK2t-Q7qBL_^N9`nM#&Z%tIfvSCZjhRWbN3uTG|<05(t+iIxQx#1eS8bo z9^LqecY*5MDZa1m-NQgCzyP8Q%K5#IuQ27Pq{C}HvEy51b9HBH-DB8wDM&{DS*<8k z3EUnqzu~@@-`XzYhHJ5~^tp$zWa(0ixHG@CU>cx-3+3*gIwwjry}=CRpB3-3Dw#9h zUVXG<-)dkoJSy!l-%PVlJ_D!Tt9M{}YnkuFFtioiOAC^J@O5$V_6Y}>6=GP|rsV8O xlkvM5#&BWVZH5K8+Zi2h=P@^IoBQnNA9nNBc>g;hHC`Zxc)I$ztaD0e0ss_z@819b delta 1041 zcmaDR_(Nbr2n*L91_r)8j8pd%c}|XFQLksd>*?YcQW5v|PIu8Q0|B>0_CvqzH@!aH z|0Fx7Z^Ddv6!BMaz|4zUapIO^-wbs=xKY#t@zq_-xRfgWFuKnHp!*{{Ts=w>s z7uMSAIQ8GiW%#jf+wtUx`~2M(l*?W-ez_oZnn5a})a=0F)ywxC*dux1`lf%D%b9KF z-kSGR#-X0y_iHl)1H*w07xn@v28Om^N!Esa+bXv**tBm?kbB8}X1CmdlZ**$3%>jB zT;8|SUM})%(WkicOb+Kg_pUSBH0x-SkA}ds)dDS*ed~7b1iE z#EWlofD|3b5rL__;N-;&V!!ZzyM1!9=_8&6wbSQ3zSq~c(^>f*gH`sak4bvcj35;= zdYM2J2t;{gg6Y32|CSZ4aht=q<^81MJGUd!xPjD<E&n71qIaSX#8&VYU8zay{jWtt}YFLU4d zU3v}ACK~I3?i9d(MJG^ukSX#s#KJfzCA#Vz?vqV2$iTe=E@kU7%2(wLKC@ zGB8+Gvm&?$7#7GEoRIxh$RS(Y2aKg#mpo-}{kJS;0V@R(K$Gj?k;S0#yRgI99W9c= zqYyC*(q@vs8K#?o;SZKrB}T(5Q0f9&Ud5bI_1^UPj{U2X-(Bc1Z-~nc>eJ7FrU;;t zhG)5AaN8R0=dHWiVeBBw$l#FE(9Z2}dH(iUZy0y+&)wZ7#ozExYsJ#SOVcdpY+A=~ p!7zv6g@hSH36C^`72Dd}|BPoR&3xPT^x!>^X`ZfrF6*2UngC)po96%k diff --git a/src/main/resources/assets/refinedstorage/textures/gui/grid.png b/src/main/resources/assets/refinedstorage/textures/gui/grid.png index fb1d4edf2cd04bff8f1c38363044282ae5605e40..0644972f7763853fcec814f32920127b5dd0ecb8 100644 GIT binary patch literal 2157 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K58911MRQ8&P5Fo{p?&#~tz_78O`%fY(0|PTd zfKP}kP~62^QA&dRf`N&DBm;)v@9e6; zXy+{Oh%9Dc;M)bljH3I^E&&B4OI#yLg7ec#$`gxH8440J^GfvcQcDy}^bGV24c2mT z9RQXnmpok@Ln`9l-et^xWWdw*P%h{HfAwPTUu)Zz-K?6qSNX@^l1Zk)UVm0dWwq^i zS{AK#?yd2!oxO7J({}2<7k*y6@1MYZPMzTM|Nm_}_x-4V)uP#4AIx&~rd!2U1fWhuSf{xS+d~6X@70j@6*zk732~ zA})ri-0x?Y3f68<5WL83^Xw->oh8E##uxui7KLv8^W1OqsomAK{0z3~r+;rQofUeo zmz{y(Y5OjmAjaO3}!gH(woU$^0moomIKE? zMJ!+X2IXCh3=N_S_D-(a<`s;d z*+M(EFV3>Ox^nfE6w`AIRp+K1=&oFId5sW*G=GEDk%#YlL&6W(z2Ueico$?QgUNC| zPMK7w0wCXF&cVJHYzz!x4C`xW?;zHpCs+z*ykVHG!r(n~%VZt~`QnUQX7_8BK3L6A z!*i)q?)}qL1~*VJfPv3GGRLo%Qo13-Qb$slWxVZ_O>oqpVe;` zkda&RwlgR&)bbq``Vq+=dU~awNyE39+gS4QdP`w8!L@(|;^sf@c+J9`asMbZFgw{U zOx>pXAxZ8vTtn3MXgHhUQCZO*tAh-;$~UsSd%GgauXGV($ZTze}9V>2}D zm@Bj1&)|Rz)Oj^b8Sk$O?byE>7;!+mcAuSgza6CNo{pOmV^4sm>|1jG9dwIwB$ive|$~Dzv_AjgHTGRc_=YZyOE{0W^%nez$ n7#7SjV_30_mrC4|jCtGle|puF?>(t2^QA&dRf`N&DBm;)v@9e6; zXy+{Oh%9Dc;M)ztjK_amF#`%pmbgZg1m~xflqVLYG880c=9TE>rIsj|=o#o48m#5w zIshzD5a`X@4N2i01(Ox*2k_`BaPs&uy0?_iZ9a;Hqr zUp_E1|Kj=AFTT&7`Rt`hLEiJ*c1Qe~E?;u!tL?j)CEY!d_7E%%I`@ zTg@^MsO6d7VAL}AtDZ9>8!y92##6?@r4#P)uoct>ys0f>d~u=t=i8s{%ojEnWta5) z<6&P=+YSzJht>Q7Kz}*>=Hq5yy71i~s^|XKfZUr`3z;*{g(S=5eJzCr0mEBs9XOjI z@c!curDqss?cO4hZoNu(w^bg)-AvPCvv;nChi=CGL~xjaHGS|cT4a^Ra5groXS3|p zX|b~A4ez!{JwAKqI$X_`_ZtxA{{RQ`0SS;SP~r}QNp-H_x$@BHveG*YRohn@?puh< zY5OwsLXPtoxG^v&m^&O(sf_=V;i1C vFglp#G6eWaGlX1bW4OA7N?bL|12+HJJK6T~7F+ljfqdra>gTe~DWM4f^VMtb diff --git a/src/main/resources/assets/refinedstorage/textures/gui/grid_filter.png b/src/main/resources/assets/refinedstorage/textures/gui/grid_filter.png index a1c7b0fc36d05a101b168c7f85c82bf326c3a384..25ad95901bd15448b9bb5efe18fac09ff97ed4c1 100755 GIT binary patch literal 1799 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K58911MRQ8&P5Fo{p?&#~tz_78O`%fY(0|PTd zfKP}kP~62^QA&dRf`N&DBm;)v@9e6; zXy+{Oh%9Dc;M)Vjj8pd%c>)C`OI#yLg7ec#$`gxH8440J^GfvcQcDy}^bGV24c2mT z9bjN!%JFn@45^5Fd+VZ?vZF-H#mMA)|0iyi)-`?<%JFxzS*cx1(>{q?&JGgAck+(g z-Mv8|>|Or=0)y`J~B#r|#G9moWk5KmZ~SVHf=T!*y(X-R+YG2jqZ8D146-14%r2 zDa`^j;!brWh=`R?zwMn2CH9Y z__@SZ>W{&GtX?tru9gn80OpTt;tu!r&g0#8|189+{bv1a{}=4Vq1CJ$s`Ucz2Q#LE zJM(w@zGnRQ_sLD`5+8;;_N=?VRKA?bYg4qIAtjr6!dhO3ZDtHNZw+#eHv5jd|Ck)- V2EHs;8@;%Q~loCIAA283O2^QA&dRf`N&DBm;)v@9e6; zXy+{Oh%9Dc;M)trjPAcDtOW{6mbgZg1m~xflqVLYG880c=9TE>rIsj|=o#o48m#5w zI>5ld)a&Wu7*Y}U_SVI$+YTbGfmi$f|DSx<%JSD>=IyMlRy7_ zqyPC|ea}DMSkBg%y!`+F$BW}02tP=kp0~ZIQQTqPK43}3aH4uTu%KdKsQkqSEY1|( z$BF?tc8qnk@8`w-eLgv_;rDhq`?oA0B|tFYyB;@$#lZ03-&f(D`d^vqXBl>uN1EPy zn-ad#aVv zd+wW8S3J!f_H8NemH)g|7;2`&z1=!6;~VzPp0jFlT7xanFF^4%`x$mt$C}=Ip9Tq+ z>(62z%WuKqu!`njxg HN@xNA?!zhP diff --git a/src/main/resources/assets/refinedstorage/textures/gui/pattern_grid.png b/src/main/resources/assets/refinedstorage/textures/gui/pattern_grid.png index 12de1c6bcd9c8c5063f668015454b0986ecb5161..b6b62fc4221a967b87d32653179d8807a9981a71 100755 GIT binary patch delta 1666 zcmZ`%2~bm46#f76!xDl-ibz#r!crE63Mdt{`iX%Ev8*CHi82*58d4P@DE<#sXppTS ziYOSMrLja7v7(K%Q9vvL23J}J42Vr+kpuxl3D962JJXrIIWzCgyt(I{^Uf(=Hngm6 zCyf6E0G9j$4pZwTg)y)#s_WxJ^W2#nGj`E1sh39dJ}4-r`)Ks-`OzfG)xm&xp7mF} z?=}SOFyPytxu#fHAU23sun&$^(U*!j-_3ARyF6mU|F~IJBy!(!utT1McV!~z1?kAg zovU(qR+rbE*3|f0CJ1;=yy+cA^4$%AuQY|B`%cvQq+h=mKkr6Bag|Dj`-uX4a!B}J zsYTD(1p-Hx5_$6+_eim|p7EWz-An_)7uDaGA)rpMWPV-G%1?Zfx#qg!F5G0Q^Y=QU ztClhjX@;~-vbtg-Q;&+6la5baJ_ZK+_r%?Fz}!0XJsY45J?4EIVut6&6>uLJTe022n=z%eA6m*-V{9XQ5Z?1IyHA@nREO`c14QqyVJR}Z{{*n@V zip*Cz(Q4=(72Qg}X)IdP@2mN%(0j0Su5hn!<)5e#Jv-c~Z=_EMRoJRtuJsv|-?_~< zL&ksG&WUU(ei@YVnTc|JmY-H?S!=iRHgF-UJ#UXaId?%*zYFSElizPyIpgxPn&Ft1 zY{JYQ2?2Q`i}E!y-Arr#MgzYSm(K$!l-PZz2{tn7+BC)F`jR?Ra)Uqr(_dfMv8FE) z&~FMUy*A`Gd4r0{MfR3%YqRG%pQsL)eH8^YsMP9Nm0F=zD0;25&Y!8&KU`X!=b!7B z+ZLM(9YTOjU|d0_@e}UT0XsqA!!b?*=T>u&q-s0rQDoxwyb~@?3Tkw;jC)0uRQiRQ z7yBJ+8k@dr5e@P-PalncY?>uR!-Mu_6+m4cef?EGVx33jIvEVv%J5lVMEr>3{JGxb zbs;otBT4D6(^nixiKYnF?3Z0h2|-9~x9581v%~Mcz6W}OH=G1YNwCmbBscPdMBL@lI73sTjt99jg_fgOd@yoj6eehlUb0u=EXX6qY_Ba3IC`3~jZq!k>ccotk~IoX9n@ z>xm~v)!H`_ZdlRiQemuf1T-D%iA>>&<=^72fq{{rSK5Cyql+KM+De9{g#>-!Pgr8& z$*etF&(gss?;4@?jsf~w2%19w*?F6E7IQoU{Pl5qmDJce{&8})+6>7#mrb=OPxRJa zy$AN^7-4bpJ+MPt^TXm=8h~MO{QL52$BNLi1NFuCz5aI$KucGJE`0zA$17Alz2$+y zc7u^XNJK{49;fALAIO1{M%RBS07#Q~D9UTIp-^|x9rEVrT`DjYvw<`#UcVpjb=*); z{Y6HbVZ=>+7-4Js`VQ|B{LmtztoFi)!(ceFK`US8C>Zxbw!Ln2xv`u~x;E}0RZ@^$ zo*~<9$4rdHA~Pal6-matuOmRtfiz&nd6!EIdY2=1iP_NjeL%Z>y!>c2R95=mHc`jt delta 1590 zcmY+Ddt8iZ6vv-;t~F8(x{RVxsnw#SlCa(siL|qZ8I>;DBoVomiuWZNO1UImXuUL2 zm{Lup(w!2jS%s8oXa?<66Phk)v@>HryY~6xoX>ea-`_c(bDr}^^wRY1Y#>mo0no07 z9EnWxWIuu>LR7fBI&X;d8+diEQz~6JQQAt2fwsRJT77ImWATG)te&|SuU=`p`c>RMHFsX9 z^Qj_ZQ6Kr-v>gB5rP2Bh2D>U*(vRf)Yac7O=*mwz4&Ojr*jpvtZ3Ek=HMgE-i*y=C z#8N2TBp|x z1j+ZU2S`r(@}=uRUbKAp{RkB7(Ik881eVz)&ClLe^P$)1u*TgyaS~|?Bwx&EM(eNk z#mv?VK)B#?EWVMdX|uP!FDrhDbPd5!#IBwQAD1!uXJL)`Ef6_^h#QwVCEfBP8<&gE znSInX)FFM1AjNhc$uE789I4?LTWjFoJwqO?P}IVvuxSYt{N{6t89#P-r%6p56TJ3* z`!>O#ysTQqh>HzfY|HcCdzCb?ScHV zV{OUC^_81x-HG6j$nNwTV7zQFQ-d(ZZjNbv0jeh6|C)kZ?SJ%%a$NpVsmKWqx_sE$ zG6nb0gYw#YLTVigXA*8yvrMonn&G+H&|v?QODqzW?e-P7A#LvC zdvcB}Lp*WPpiL<>Yz3mZmLv1Ga3aXZmWh@`ZI!p)hmQ z71w|BO>6M9l?XoHXGfO(x1UU5VFK^ED2_~7>-z{C zFu2d`D5s`0O2z@rtfEa8Hq?kkmI5$qDkha+H@LF zACw|mlfLp({xO>XpdJ&X&X;Xq+xt4zwY zMSDfZZa3%yUS)>FH#f1x?M()+SuoS1ZkYgMe?l5}gWk?5mV?*lXzUg~@4A!T{}`Jd zZfbYBrvPBp4rEwSqHnYiKAb?R(PB`w;1{II$(QEn049JdPU3+t5h&}cAh6Sr9`)?( zx%*$6q&NYS>ArIk*pO5|nGth+B)DnP*-Gmc+F1`-t4uie5LC!4bfG_X(}&|w8OgP9 znjnZ#flU7mc)j#S!+fZZwBKv3em5^)<4=bDTVmZ2ngo) z0GO>BB%_)~RFAGOLIadj$smQ)(H_s}4jN3LV#X>$-IfZ$c&T)i&k;SxDIJ}Fotc#; z`GOLPEl%qpyMTA(spK6iLz4AWkox>9RYz!`$=Qye6EyU>uZQ7_gE{t18{d$ybbZbq zTZ3EwD3nfGTKr!CKB(T)1}`X2&=hxS7h9BBy#jV^JvN^20{>SB(f>hIm169p7mV&D zsP2Zlye|U&NNC;Ns<<6MEn6;ZUcmEbM~5YpflLe!7C4--USdS4#b;)&<7;YPH7JOXmWEKWoTXGy>?Yf N_m!Tmc`E{r{S9uysvrOW From b21b70d23475b3e2e0ca815d4c01793c90b9f1c2 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Tue, 2 Aug 2016 23:27:45 +0200 Subject: [PATCH 081/214] Add checkboxes for NBT/dmg compare on grid filter --- .../container/ContainerGridFilter.java | 2 +- src/main/java/refinedstorage/gui/GuiBase.java | 9 +++++++++ .../refinedstorage/gui/GuiGridFilter.java | 10 ++++++++-- .../assets/refinedstorage/lang/de_DE.lang | 2 ++ .../assets/refinedstorage/lang/en_US.lang | 2 ++ .../assets/refinedstorage/lang/nl_NL.lang | 2 ++ .../textures/gui/grid_filter.png | Bin 1799 -> 1798 bytes 7 files changed, 24 insertions(+), 3 deletions(-) diff --git a/src/main/java/refinedstorage/container/ContainerGridFilter.java b/src/main/java/refinedstorage/container/ContainerGridFilter.java index 47fc3be72..c0cd3520a 100755 --- a/src/main/java/refinedstorage/container/ContainerGridFilter.java +++ b/src/main/java/refinedstorage/container/ContainerGridFilter.java @@ -18,7 +18,7 @@ public class ContainerGridFilter extends ContainerBase { addSlotToContainer(new SlotSpecimen(filter, i, 8 + (i * 18), 20)); } - addPlayerInventory(8, 61); + addPlayerInventory(8, 70); } @Override diff --git a/src/main/java/refinedstorage/gui/GuiBase.java b/src/main/java/refinedstorage/gui/GuiBase.java index 5fd1d7ebe..229140985 100755 --- a/src/main/java/refinedstorage/gui/GuiBase.java +++ b/src/main/java/refinedstorage/gui/GuiBase.java @@ -7,6 +7,7 @@ import net.minecraft.client.resources.I18n; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.client.config.GuiCheckBox; import org.lwjgl.input.Mouse; import refinedstorage.RefinedStorage; import refinedstorage.gui.sidebutton.SideButton; @@ -150,6 +151,14 @@ public abstract class GuiBase extends GuiContainer { return addButton(x, y, w, h, text, true); } + public GuiCheckBox addCheckBox(int x, int y, String text, boolean checked) { + GuiCheckBox checkBox = new GuiCheckBox(lastButtonId++, x, y, text, checked); + + buttonList.add(checkBox); + + return checkBox; + } + public GuiButton addButton(int x, int y, int w, int h, String text, boolean enabled) { GuiButton button = new GuiButton(lastButtonId++, x, y, w, h, text); button.enabled = enabled; diff --git a/src/main/java/refinedstorage/gui/GuiGridFilter.java b/src/main/java/refinedstorage/gui/GuiGridFilter.java index 7020e5928..21b03d25d 100755 --- a/src/main/java/refinedstorage/gui/GuiGridFilter.java +++ b/src/main/java/refinedstorage/gui/GuiGridFilter.java @@ -1,14 +1,20 @@ package refinedstorage.gui; +import net.minecraftforge.fml.client.config.GuiCheckBox; import refinedstorage.container.ContainerGridFilter; public class GuiGridFilter extends GuiBase { + private GuiCheckBox compareDamage; + private GuiCheckBox compareNBT; + public GuiGridFilter(ContainerGridFilter container) { - super(container, 176, 148); + super(container, 176, 152); } @Override public void init(int x, int y) { + compareDamage = addCheckBox(x + 7, y + 41, t("gui.refinedstorage:grid_filter.compare_damage"), false); + compareNBT = addCheckBox(x + 7 + compareDamage.getButtonWidth() + 4, y + 41, t("gui.refinedstorage:grid_filter.compare_nbt"), false); } @Override @@ -25,6 +31,6 @@ public class GuiGridFilter extends GuiBase { @Override public void drawForeground(int mouseX, int mouseY) { drawString(7, 7, t("gui.refinedstorage:grid_filter")); - drawString(7, 55, t("container.inventory")); + drawString(7, 58, t("container.inventory")); } } diff --git a/src/main/resources/assets/refinedstorage/lang/de_DE.lang b/src/main/resources/assets/refinedstorage/lang/de_DE.lang index e406aca4c..c53c918bc 100755 --- a/src/main/resources/assets/refinedstorage/lang/de_DE.lang +++ b/src/main/resources/assets/refinedstorage/lang/de_DE.lang @@ -31,6 +31,8 @@ gui.refinedstorage:crafter.processing=Verarbeitung gui.refinedstorage:processing_pattern_encoder=Schema Anfertigung gui.refinedstorage:processing_pattern_encoder.pattern_create=Kreatives Schema gui.refinedstorage:grid_filter=Zugangspunkt Filter +gui.refinedstorage:grid_filter.compare_damage=Schaden +gui.refinedstorage:grid_filter.compare_nbt=NBT gui.refinedstorage:network_transmitter=Netzwerk Übermittler gui.refinedstorage:network_transmitter.distance=%d Blöcke gui.refinedstorage:network_transmitter.dimension=Dimension %d diff --git a/src/main/resources/assets/refinedstorage/lang/en_US.lang b/src/main/resources/assets/refinedstorage/lang/en_US.lang index e35f36752..9e98bb2f4 100755 --- a/src/main/resources/assets/refinedstorage/lang/en_US.lang +++ b/src/main/resources/assets/refinedstorage/lang/en_US.lang @@ -31,6 +31,8 @@ gui.refinedstorage:crafter.processing=Processing gui.refinedstorage:processing_pattern_encoder=Processing Pattern Encoder gui.refinedstorage:processing_pattern_encoder.pattern_create=Create Pattern gui.refinedstorage:grid_filter=Grid Filter +gui.refinedstorage:grid_filter.compare_damage=Damage +gui.refinedstorage:grid_filter.compare_nbt=NBT gui.refinedstorage:network_transmitter=Network Transmitter gui.refinedstorage:network_transmitter.distance=%d blocks gui.refinedstorage:network_transmitter.dimension=Dimension %d diff --git a/src/main/resources/assets/refinedstorage/lang/nl_NL.lang b/src/main/resources/assets/refinedstorage/lang/nl_NL.lang index 5291de209..891c76d5d 100755 --- a/src/main/resources/assets/refinedstorage/lang/nl_NL.lang +++ b/src/main/resources/assets/refinedstorage/lang/nl_NL.lang @@ -31,6 +31,8 @@ gui.refinedstorage:crafter.processing=Verwerking gui.refinedstorage:processing_pattern_encoder=Verwerkingspatroon Codeerder gui.refinedstorage:processing_pattern_encoder.pattern_create=Patroon maken gui.refinedstorage:grid_filter=Rooster Filter +gui.refinedstorage:grid_filter.compare_damage=Schade +gui.refinedstorage:grid_filter.compare_nbt=NBT gui.refinedstorage:network_transmitter=Netwerkzender gui.refinedstorage:network_transmitter.distance=%d blokken gui.refinedstorage:network_transmitter.dimension=Dimensie %d diff --git a/src/main/resources/assets/refinedstorage/textures/gui/grid_filter.png b/src/main/resources/assets/refinedstorage/textures/gui/grid_filter.png index 25ad95901bd15448b9bb5efe18fac09ff97ed4c1..94a6a60b59ccc096c4fb57e97f3d0f2e37ce17db 100755 GIT binary patch delta 500 zcmZqYYvbF{#^Rgp>Eakt5%>1?#V#pFiI$6<>)!uAq4q9p&W3QMzms!c)v$2=N_rvF z((2g%`|pkAzkl`pF1)>*u`zl1|Nn23_a0C`a9l4|?=-6%L**~F$ug`G^*>mCeBGP< z?T!6>ALf|-rN1-P86cqHPIV-d$-r=Z{rZGIm;J3J*={HU1)tnI%><+xY-*c<)P!n% zZjj1PUwDC{4)6BrfOsb^n{xoEo!>Wscn?0l_@nnY=figSo13TmEo1!TJ0-n2zO1tT zJqt)02wxL-HiLzj35<20CfbIJ)?T^ z=2s~a3h!gjvE6^0az4&#Cff=1w>KZO|J*AKR)KIBh}*E!+!AELw>YR9|1mwe`}*dC z-*?~K^j5#j@H6{!&IkTm)mQ_gIKMc2E)Vk?K?a7q4ATW09)G-(8^!Eakt5%>1iMK5JXiI$6z$@l(G+$^nY{3w*;?`E@7yOySX61SWk zB#Q6k9k;uCt^7{kYdc;J8SB6Qu7Cf^B+u}E_m^+mVjl2KSe`Gyz`#)SK9vzjIn3MV z2&7KzozBX@(7@kdZ@)X`{J+m9O%6PDzka`r2`C2wC+fipAe@4qf4Gique*KH;D8*^ z42AD;VjzhpFQr+4X56Wc1o3cL^ObeN`;_^-b?>dKzg;ZBjY%UM;lf9>J zKG;3?&COu-%M3r4*h>8|*pKiGl3xtItEB^NfO+JaxWm1@^LY2&KMS#Hzga)q{{?%? znCzgIK>`ZGG5Bs)4%K^s_k$Tz!JYZLeP1*F`}^dkb%_td9edW@Un*Zt<+UkVKe>@D jd-8oYUNkHqe)k`f;~W7!R)>?qAVWP}{an^LB{Ts5D2u*$ From 5f296f539013b8ecd45cdcc5b9fb4247d261eeab Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Tue, 2 Aug 2016 23:44:31 +0200 Subject: [PATCH 082/214] Actually set NBT and dmg settings to item --- .../container/ContainerGridFilter.java | 6 ++++ .../refinedstorage/gui/GuiGridFilter.java | 28 +++++++++++++-- .../refinedstorage/item/ItemGridFilter.java | 15 ++++++++ .../network/MessageGridFilterUpdate.java | 35 +++++++++++++++++++ .../refinedstorage/proxy/CommonProxy.java | 1 + 5 files changed, 83 insertions(+), 2 deletions(-) create mode 100755 src/main/java/refinedstorage/network/MessageGridFilterUpdate.java diff --git a/src/main/java/refinedstorage/container/ContainerGridFilter.java b/src/main/java/refinedstorage/container/ContainerGridFilter.java index c0cd3520a..9d04a6b83 100755 --- a/src/main/java/refinedstorage/container/ContainerGridFilter.java +++ b/src/main/java/refinedstorage/container/ContainerGridFilter.java @@ -8,10 +8,12 @@ import refinedstorage.inventory.ItemHandlerGridFilter; public class ContainerGridFilter extends ContainerBase { private ItemHandlerGridFilter filter; + private ItemStack stack; public ContainerGridFilter(EntityPlayer player, ItemStack stack) { super(player); + this.stack = stack; this.filter = new ItemHandlerGridFilter(stack); for (int i = 0; i < 9; ++i) { @@ -21,6 +23,10 @@ public class ContainerGridFilter extends ContainerBase { addPlayerInventory(8, 70); } + public ItemStack getStack() { + return stack; + } + @Override public ItemStack transferStackInSlot(EntityPlayer player, int index) { ItemStack stack = null; diff --git a/src/main/java/refinedstorage/gui/GuiGridFilter.java b/src/main/java/refinedstorage/gui/GuiGridFilter.java index 21b03d25d..8d6b119ed 100755 --- a/src/main/java/refinedstorage/gui/GuiGridFilter.java +++ b/src/main/java/refinedstorage/gui/GuiGridFilter.java @@ -1,20 +1,31 @@ package refinedstorage.gui; +import net.minecraft.client.gui.GuiButton; import net.minecraftforge.fml.client.config.GuiCheckBox; +import refinedstorage.RefinedStorage; +import refinedstorage.api.storage.CompareUtils; import refinedstorage.container.ContainerGridFilter; +import refinedstorage.item.ItemGridFilter; +import refinedstorage.network.MessageGridFilterUpdate; + +import java.io.IOException; public class GuiGridFilter extends GuiBase { + private int compare; + private GuiCheckBox compareDamage; private GuiCheckBox compareNBT; public GuiGridFilter(ContainerGridFilter container) { super(container, 176, 152); + + this.compare = ItemGridFilter.getCompare(container.getStack()); } @Override public void init(int x, int y) { - compareDamage = addCheckBox(x + 7, y + 41, t("gui.refinedstorage:grid_filter.compare_damage"), false); - compareNBT = addCheckBox(x + 7 + compareDamage.getButtonWidth() + 4, y + 41, t("gui.refinedstorage:grid_filter.compare_nbt"), false); + compareDamage = addCheckBox(x + 7, y + 41, t("gui.refinedstorage:grid_filter.compare_damage"), (compare & CompareUtils.COMPARE_DAMAGE) == CompareUtils.COMPARE_DAMAGE); + compareNBT = addCheckBox(x + 7 + compareDamage.getButtonWidth() + 4, y + 41, t("gui.refinedstorage:grid_filter.compare_nbt"), (compare & CompareUtils.COMPARE_NBT) == CompareUtils.COMPARE_NBT); } @Override @@ -33,4 +44,17 @@ public class GuiGridFilter extends GuiBase { drawString(7, 7, t("gui.refinedstorage:grid_filter")); drawString(7, 58, t("container.inventory")); } + + @Override + protected void actionPerformed(GuiButton button) throws IOException { + super.actionPerformed(button); + + if (button == compareDamage) { + compare ^= CompareUtils.COMPARE_DAMAGE; + } else if (button == compareNBT) { + compare ^= CompareUtils.COMPARE_NBT; + } + + RefinedStorage.INSTANCE.network.sendToServer(new MessageGridFilterUpdate(compare)); + } } diff --git a/src/main/java/refinedstorage/item/ItemGridFilter.java b/src/main/java/refinedstorage/item/ItemGridFilter.java index f31452d49..6461662b5 100755 --- a/src/main/java/refinedstorage/item/ItemGridFilter.java +++ b/src/main/java/refinedstorage/item/ItemGridFilter.java @@ -2,6 +2,7 @@ package refinedstorage.item; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.ActionResult; import net.minecraft.util.EnumActionResult; import net.minecraft.util.EnumHand; @@ -14,6 +15,8 @@ import refinedstorage.inventory.ItemHandlerGridFilter; import java.util.List; public class ItemGridFilter extends ItemBase { + private static final String NBT_COMPARE = "Compare"; + public ItemGridFilter() { super("grid_filter"); @@ -43,4 +46,16 @@ public class ItemGridFilter extends ItemBase { ItemPattern.combineItems(tooltip, items.getFilteredItems()); } + + public static int getCompare(ItemStack stack) { + return (stack.hasTagCompound() && stack.getTagCompound().hasKey(NBT_COMPARE)) ? stack.getTagCompound().getInteger(NBT_COMPARE) : 0; + } + + public static void setCompare(ItemStack stack, int compare) { + if (!stack.hasTagCompound()) { + stack.setTagCompound(new NBTTagCompound()); + } + + stack.getTagCompound().setInteger(NBT_COMPARE, compare); + } } diff --git a/src/main/java/refinedstorage/network/MessageGridFilterUpdate.java b/src/main/java/refinedstorage/network/MessageGridFilterUpdate.java new file mode 100755 index 000000000..2fd123dd6 --- /dev/null +++ b/src/main/java/refinedstorage/network/MessageGridFilterUpdate.java @@ -0,0 +1,35 @@ +package refinedstorage.network; + +import io.netty.buffer.ByteBuf; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraftforge.fml.common.network.simpleimpl.IMessage; +import refinedstorage.container.ContainerGridFilter; +import refinedstorage.item.ItemGridFilter; + +public class MessageGridFilterUpdate extends MessageHandlerPlayerToServer implements IMessage { + private int compare; + + public MessageGridFilterUpdate() { + } + + public MessageGridFilterUpdate(int compare) { + this.compare = compare; + } + + @Override + public void fromBytes(ByteBuf buf) { + compare = buf.readInt(); + } + + @Override + public void toBytes(ByteBuf buf) { + buf.writeInt(compare); + } + + @Override + public void handle(MessageGridFilterUpdate message, EntityPlayerMP player) { + if (player.openContainer instanceof ContainerGridFilter) { + ItemGridFilter.setCompare(((ContainerGridFilter) player.openContainer).getStack(), message.compare); + } + } +} diff --git a/src/main/java/refinedstorage/proxy/CommonProxy.java b/src/main/java/refinedstorage/proxy/CommonProxy.java index 5bf983892..75b76fa3f 100755 --- a/src/main/java/refinedstorage/proxy/CommonProxy.java +++ b/src/main/java/refinedstorage/proxy/CommonProxy.java @@ -58,6 +58,7 @@ public class CommonProxy { RefinedStorage.INSTANCE.network.registerMessage(MessageGridUpdate.class, MessageGridUpdate.class, id++, Side.CLIENT); RefinedStorage.INSTANCE.network.registerMessage(MessageGridDelta.class, MessageGridDelta.class, id++, Side.CLIENT); RefinedStorage.INSTANCE.network.registerMessage(MessageProcessingPatternEncoderClear.class, MessageProcessingPatternEncoderClear.class, id++, Side.SERVER); + RefinedStorage.INSTANCE.network.registerMessage(MessageGridFilterUpdate.class, MessageGridFilterUpdate.class, id++, Side.SERVER); NetworkRegistry.INSTANCE.registerGuiHandler(RefinedStorage.INSTANCE, new GuiHandler()); From 89526df15838b738ebfb47056ab27ed7e6248cba Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Tue, 2 Aug 2016 23:55:12 +0200 Subject: [PATCH 083/214] More robust system of getting the Wireless Grid stack --- .../java/refinedstorage/gui/GuiHandler.java | 26 ++++++------ .../MessageWirelessGridSettingsUpdate.java | 41 ++++++++++--------- .../tile/grid/WirelessGrid.java | 17 ++++---- 3 files changed, 42 insertions(+), 42 deletions(-) diff --git a/src/main/java/refinedstorage/gui/GuiHandler.java b/src/main/java/refinedstorage/gui/GuiHandler.java index be609c238..415f2f3a8 100755 --- a/src/main/java/refinedstorage/gui/GuiHandler.java +++ b/src/main/java/refinedstorage/gui/GuiHandler.java @@ -57,6 +57,18 @@ public class GuiHandler implements IGuiHandler { } } + private WirelessGrid getWirelessGrid(EntityPlayer player, int hand) { + return new WirelessGrid(player.worldObj, player.getHeldItem(EnumHand.values()[hand])); + } + + private ContainerGrid getWirelessGridContainer(EntityPlayer player, int hand) { + return new ContainerGrid(player, getWirelessGrid(player, hand)); + } + + private ContainerGridFilter getGridFilterContainer(EntityPlayer player, int hand) { + return new ContainerGridFilter(player, player.getHeldItem(EnumHand.values()[hand])); + } + @Override public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { if (ID == RefinedStorageGui.WIRELESS_GRID) { @@ -116,20 +128,6 @@ public class GuiHandler implements IGuiHandler { } } - private ContainerGridFilter getGridFilterContainer(EntityPlayer player, int hand) { - return new ContainerGridFilter(player, player.getHeldItem(EnumHand.values()[hand])); - } - - private WirelessGrid getWirelessGrid(EntityPlayer player, int hand) { - return new WirelessGrid(player.worldObj, player.getHeldItem(EnumHand.values()[hand]), EnumHand.values()[hand]); - } - - private ContainerGrid getWirelessGridContainer(EntityPlayer player, int hand) { - WirelessGrid wirelessGrid = getWirelessGrid(player, hand); - - return new ContainerGrid(player, wirelessGrid); - } - private GuiGrid getWirelessGridGui(EntityPlayer player, int hand) { WirelessGrid wirelessGrid = getWirelessGrid(player, hand); diff --git a/src/main/java/refinedstorage/network/MessageWirelessGridSettingsUpdate.java b/src/main/java/refinedstorage/network/MessageWirelessGridSettingsUpdate.java index aa3a1919d..2729a1795 100755 --- a/src/main/java/refinedstorage/network/MessageWirelessGridSettingsUpdate.java +++ b/src/main/java/refinedstorage/network/MessageWirelessGridSettingsUpdate.java @@ -3,13 +3,13 @@ package refinedstorage.network; import io.netty.buffer.ByteBuf; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumHand; import net.minecraftforge.fml.common.network.simpleimpl.IMessage; -import refinedstorage.RefinedStorageItems; +import refinedstorage.container.ContainerGrid; +import refinedstorage.tile.grid.IGrid; import refinedstorage.tile.grid.TileGrid; +import refinedstorage.tile.grid.WirelessGrid; public class MessageWirelessGridSettingsUpdate extends MessageHandlerPlayerToServer implements IMessage { - private int hand; private int viewType; private int sortingDirection; private int sortingType; @@ -18,8 +18,7 @@ public class MessageWirelessGridSettingsUpdate extends MessageHandlerPlayerToSer public MessageWirelessGridSettingsUpdate() { } - public MessageWirelessGridSettingsUpdate(int hand, int viewType, int sortingDirection, int sortingType, int searchBoxMode) { - this.hand = hand; + public MessageWirelessGridSettingsUpdate(int viewType, int sortingDirection, int sortingType, int searchBoxMode) { this.viewType = viewType; this.sortingDirection = sortingDirection; this.sortingType = sortingType; @@ -28,7 +27,6 @@ public class MessageWirelessGridSettingsUpdate extends MessageHandlerPlayerToSer @Override public void fromBytes(ByteBuf buf) { - hand = buf.readInt(); viewType = buf.readInt(); sortingDirection = buf.readInt(); sortingType = buf.readInt(); @@ -37,7 +35,6 @@ public class MessageWirelessGridSettingsUpdate extends MessageHandlerPlayerToSer @Override public void toBytes(ByteBuf buf) { - buf.writeInt(hand); buf.writeInt(viewType); buf.writeInt(sortingDirection); buf.writeInt(sortingType); @@ -46,23 +43,27 @@ public class MessageWirelessGridSettingsUpdate extends MessageHandlerPlayerToSer @Override public void handle(MessageWirelessGridSettingsUpdate message, EntityPlayerMP player) { - ItemStack held = player.getHeldItem((message.hand < 0 || message.hand > EnumHand.values().length - 1) ? EnumHand.MAIN_HAND : EnumHand.values()[message.hand]); + if (player.openContainer instanceof ContainerGrid) { + IGrid grid = ((ContainerGrid) player.openContainer).getGrid(); - if (held != null && held.getItem() == RefinedStorageItems.WIRELESS_GRID && held.getTagCompound() != null) { - if (TileGrid.isValidViewType(message.viewType)) { - held.getTagCompound().setInteger(TileGrid.NBT_VIEW_TYPE, message.viewType); - } + if (grid instanceof WirelessGrid) { + ItemStack stack = ((WirelessGrid) grid).getStack(); - if (TileGrid.isValidSortingDirection(message.sortingDirection)) { - held.getTagCompound().setInteger(TileGrid.NBT_SORTING_DIRECTION, message.sortingDirection); - } + if (TileGrid.isValidViewType(message.viewType)) { + stack.getTagCompound().setInteger(TileGrid.NBT_VIEW_TYPE, message.viewType); + } - if (TileGrid.isValidSortingType(message.sortingType)) { - held.getTagCompound().setInteger(TileGrid.NBT_SORTING_TYPE, message.sortingType); - } + if (TileGrid.isValidSortingDirection(message.sortingDirection)) { + stack.getTagCompound().setInteger(TileGrid.NBT_SORTING_DIRECTION, message.sortingDirection); + } - if (TileGrid.isValidSearchBoxMode(message.searchBoxMode)) { - held.getTagCompound().setInteger(TileGrid.NBT_SEARCH_BOX_MODE, message.searchBoxMode); + if (TileGrid.isValidSortingType(message.sortingType)) { + stack.getTagCompound().setInteger(TileGrid.NBT_SORTING_TYPE, message.sortingType); + } + + if (TileGrid.isValidSearchBoxMode(message.searchBoxMode)) { + stack.getTagCompound().setInteger(TileGrid.NBT_SEARCH_BOX_MODE, message.searchBoxMode); + } } } } diff --git a/src/main/java/refinedstorage/tile/grid/WirelessGrid.java b/src/main/java/refinedstorage/tile/grid/WirelessGrid.java index 3d10a0992..9751def66 100755 --- a/src/main/java/refinedstorage/tile/grid/WirelessGrid.java +++ b/src/main/java/refinedstorage/tile/grid/WirelessGrid.java @@ -4,7 +4,6 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumHand; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import refinedstorage.RefinedStorage; @@ -24,7 +23,6 @@ import java.util.List; public class WirelessGrid implements IGrid { private World world; - private EnumHand hand; private ItemStack stack; private BlockPos controller; @@ -50,11 +48,10 @@ public class WirelessGrid implements IGrid { } }; - public WirelessGrid(World world, ItemStack stack, EnumHand hand) { + public WirelessGrid(World world, ItemStack stack) { this.world = world; this.stack = stack; - this.hand = hand; this.controller = new BlockPos(ItemWirelessGrid.getX(stack), ItemWirelessGrid.getY(stack), ItemWirelessGrid.getZ(stack)); @@ -70,6 +67,10 @@ public class WirelessGrid implements IGrid { } } + public ItemStack getStack() { + return stack; + } + @Override public EnumGridType getType() { return EnumGridType.NORMAL; @@ -109,28 +110,28 @@ public class WirelessGrid implements IGrid { @Override public void onViewTypeChanged(int type) { - RefinedStorage.INSTANCE.network.sendToServer(new MessageWirelessGridSettingsUpdate(hand.ordinal(), type, getSortingDirection(), getSortingType(), getSearchBoxMode())); + RefinedStorage.INSTANCE.network.sendToServer(new MessageWirelessGridSettingsUpdate(type, getSortingDirection(), getSortingType(), getSearchBoxMode())); this.viewType = type; } @Override public void onSortingTypeChanged(int type) { - RefinedStorage.INSTANCE.network.sendToServer(new MessageWirelessGridSettingsUpdate(hand.ordinal(), getViewType(), getSortingDirection(), type, getSearchBoxMode())); + RefinedStorage.INSTANCE.network.sendToServer(new MessageWirelessGridSettingsUpdate(getViewType(), getSortingDirection(), type, getSearchBoxMode())); this.sortingType = type; } @Override public void onSortingDirectionChanged(int direction) { - RefinedStorage.INSTANCE.network.sendToServer(new MessageWirelessGridSettingsUpdate(hand.ordinal(), getViewType(), direction, getSortingType(), getSearchBoxMode())); + RefinedStorage.INSTANCE.network.sendToServer(new MessageWirelessGridSettingsUpdate(getViewType(), direction, getSortingType(), getSearchBoxMode())); this.sortingDirection = direction; } @Override public void onSearchBoxModeChanged(int searchBoxMode) { - RefinedStorage.INSTANCE.network.sendToServer(new MessageWirelessGridSettingsUpdate(hand.ordinal(), getViewType(), getSortingDirection(), getSortingType(), searchBoxMode)); + RefinedStorage.INSTANCE.network.sendToServer(new MessageWirelessGridSettingsUpdate(getViewType(), getSortingDirection(), getSortingType(), searchBoxMode)); this.searchBoxMode = searchBoxMode; } From 649c457476cd98a66cefaa183bab9397a91355ab Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Wed, 3 Aug 2016 00:13:50 +0200 Subject: [PATCH 084/214] Actually filter based on compare/nbt --- CHANGELOG.md | 3 +++ .../gui/grid/GridFilteredItem.java | 21 +++++++++++++++++++ .../java/refinedstorage/gui/grid/GuiGrid.java | 6 +++--- .../ItemHandlerGridFilterInGrid.java | 16 ++++++++------ .../refinedstorage/item/ItemGridFilter.java | 3 ++- .../java/refinedstorage/tile/grid/IGrid.java | 4 ++-- .../refinedstorage/tile/grid/TileGrid.java | 5 +++-- .../tile/grid/WirelessGrid.java | 5 +++-- 8 files changed, 47 insertions(+), 16 deletions(-) create mode 100755 src/main/java/refinedstorage/gui/grid/GridFilteredItem.java diff --git a/CHANGELOG.md b/CHANGELOG.md index 41e370838..28edbd175 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,9 @@ **Features** - Added German translation by ChillUpX +- Each Grid Filter can now only filter 9 items +- Each Grid allows 4 Grid Filters instead of 1 +- Grid Filters can now be configured to compare on NBT and/ or damage ### 0.8.15 **Bugfixes** diff --git a/src/main/java/refinedstorage/gui/grid/GridFilteredItem.java b/src/main/java/refinedstorage/gui/grid/GridFilteredItem.java new file mode 100755 index 000000000..3e3505850 --- /dev/null +++ b/src/main/java/refinedstorage/gui/grid/GridFilteredItem.java @@ -0,0 +1,21 @@ +package refinedstorage.gui.grid; + +import net.minecraft.item.ItemStack; + +public class GridFilteredItem { + private ItemStack stack; + private int compare; + + public GridFilteredItem(ItemStack stack, int compare) { + this.stack = stack; + this.compare = compare; + } + + public ItemStack getStack() { + return stack; + } + + public int getCompare() { + return compare; + } +} diff --git a/src/main/java/refinedstorage/gui/grid/GuiGrid.java b/src/main/java/refinedstorage/gui/grid/GuiGrid.java index 4181770b5..a0406643d 100755 --- a/src/main/java/refinedstorage/gui/grid/GuiGrid.java +++ b/src/main/java/refinedstorage/gui/grid/GuiGrid.java @@ -100,12 +100,12 @@ public class GuiGrid extends GuiBase { while (t.hasNext()) { ClientStack stack = t.next(); - List filteredItems = grid.getFilteredItems(); + List filteredItems = grid.getFilteredItems(); boolean found = filteredItems.isEmpty(); - for (ItemStack item : filteredItems) { - if (CompareUtils.compareStackNoQuantity(stack.getStack(), item)) { + for (GridFilteredItem filteredItem : filteredItems) { + if (CompareUtils.compareStack(stack.getStack(), filteredItem.getStack(), filteredItem.getCompare())) { found = true; break; diff --git a/src/main/java/refinedstorage/inventory/ItemHandlerGridFilterInGrid.java b/src/main/java/refinedstorage/inventory/ItemHandlerGridFilterInGrid.java index a3393d0ac..a0182bf4a 100755 --- a/src/main/java/refinedstorage/inventory/ItemHandlerGridFilterInGrid.java +++ b/src/main/java/refinedstorage/inventory/ItemHandlerGridFilterInGrid.java @@ -2,13 +2,15 @@ package refinedstorage.inventory; import net.minecraft.item.ItemStack; import refinedstorage.RefinedStorageItems; +import refinedstorage.gui.grid.GridFilteredItem; +import refinedstorage.item.ItemGridFilter; import java.util.List; public class ItemHandlerGridFilterInGrid extends ItemHandlerBasic { - private List filteredItems; + private List filteredItems; - public ItemHandlerGridFilterInGrid(List filteredItems) { + public ItemHandlerGridFilterInGrid(List filteredItems) { super(4, new ItemValidatorBasic(RefinedStorageItems.GRID_FILTER)); this.filteredItems = filteredItems; @@ -21,14 +23,16 @@ public class ItemHandlerGridFilterInGrid extends ItemHandlerBasic { filteredItems.clear(); for (int i = 0; i < getSlots(); ++i) { - ItemStack stack = getStackInSlot(i); + ItemStack filter = getStackInSlot(i); - if (stack != null) { - ItemHandlerGridFilter items = new ItemHandlerGridFilter(stack); + if (filter != null) { + int compare = ItemGridFilter.getCompare(filter); + + ItemHandlerGridFilter items = new ItemHandlerGridFilter(filter); for (ItemStack item : items.getFilteredItems()) { if (item != null) { - filteredItems.add(item); + filteredItems.add(new GridFilteredItem(item, compare)); } } } diff --git a/src/main/java/refinedstorage/item/ItemGridFilter.java b/src/main/java/refinedstorage/item/ItemGridFilter.java index 6461662b5..001377a19 100755 --- a/src/main/java/refinedstorage/item/ItemGridFilter.java +++ b/src/main/java/refinedstorage/item/ItemGridFilter.java @@ -10,6 +10,7 @@ import net.minecraft.world.World; import refinedstorage.RefinedStorage; import refinedstorage.RefinedStorageGui; import refinedstorage.RefinedStorageItems; +import refinedstorage.api.storage.CompareUtils; import refinedstorage.inventory.ItemHandlerGridFilter; import java.util.List; @@ -48,7 +49,7 @@ public class ItemGridFilter extends ItemBase { } public static int getCompare(ItemStack stack) { - return (stack.hasTagCompound() && stack.getTagCompound().hasKey(NBT_COMPARE)) ? stack.getTagCompound().getInteger(NBT_COMPARE) : 0; + return (stack.hasTagCompound() && stack.getTagCompound().hasKey(NBT_COMPARE)) ? stack.getTagCompound().getInteger(NBT_COMPARE) : (CompareUtils.COMPARE_DAMAGE | CompareUtils.COMPARE_NBT); } public static void setCompare(ItemStack stack, int compare) { diff --git a/src/main/java/refinedstorage/tile/grid/IGrid.java b/src/main/java/refinedstorage/tile/grid/IGrid.java index 7b8262c6e..8f16c09e7 100755 --- a/src/main/java/refinedstorage/tile/grid/IGrid.java +++ b/src/main/java/refinedstorage/tile/grid/IGrid.java @@ -1,9 +1,9 @@ package refinedstorage.tile.grid; -import net.minecraft.item.ItemStack; import net.minecraft.util.math.BlockPos; import refinedstorage.api.network.IGridHandler; import refinedstorage.block.EnumGridType; +import refinedstorage.gui.grid.GridFilteredItem; import refinedstorage.inventory.ItemHandlerBasic; import refinedstorage.tile.config.IRedstoneModeConfig; @@ -32,7 +32,7 @@ public interface IGrid { void onSearchBoxModeChanged(int searchBoxMode); - List getFilteredItems(); + List getFilteredItems(); ItemHandlerBasic getFilter(); diff --git a/src/main/java/refinedstorage/tile/grid/TileGrid.java b/src/main/java/refinedstorage/tile/grid/TileGrid.java index 0f14802d5..2fe7ff4ef 100755 --- a/src/main/java/refinedstorage/tile/grid/TileGrid.java +++ b/src/main/java/refinedstorage/tile/grid/TileGrid.java @@ -20,6 +20,7 @@ import refinedstorage.api.storage.CompareUtils; import refinedstorage.block.BlockGrid; import refinedstorage.block.EnumGridType; import refinedstorage.container.ContainerGrid; +import refinedstorage.gui.grid.GridFilteredItem; import refinedstorage.inventory.ItemHandlerBasic; import refinedstorage.inventory.ItemHandlerGridFilterInGrid; import refinedstorage.inventory.ItemValidatorBasic; @@ -67,7 +68,7 @@ public class TileGrid extends TileNode implements IGrid { private InventoryCraftResult result = new InventoryCraftResult(); private ItemHandlerBasic patterns = new ItemHandlerBasic(2, this, new ItemValidatorBasic(RefinedStorageItems.PATTERN)); - private List filteredItems = new ArrayList(); + private List filteredItems = new ArrayList(); private ItemHandlerGridFilterInGrid filter = new ItemHandlerGridFilterInGrid(filteredItems); private EnumGridType type; @@ -137,7 +138,7 @@ public class TileGrid extends TileNode implements IGrid { } @Override - public List getFilteredItems() { + public List getFilteredItems() { return filteredItems; } diff --git a/src/main/java/refinedstorage/tile/grid/WirelessGrid.java b/src/main/java/refinedstorage/tile/grid/WirelessGrid.java index 9751def66..ceee15fc8 100755 --- a/src/main/java/refinedstorage/tile/grid/WirelessGrid.java +++ b/src/main/java/refinedstorage/tile/grid/WirelessGrid.java @@ -9,6 +9,7 @@ import net.minecraft.world.World; import refinedstorage.RefinedStorage; import refinedstorage.api.network.IGridHandler; import refinedstorage.block.EnumGridType; +import refinedstorage.gui.grid.GridFilteredItem; import refinedstorage.inventory.ItemHandlerBasic; import refinedstorage.inventory.ItemHandlerGridFilterInGrid; import refinedstorage.item.ItemWirelessGrid; @@ -32,7 +33,7 @@ public class WirelessGrid implements IGrid { private int sortingDirection; private int searchBoxMode; - private List filteredItems = new ArrayList(); + private List filteredItems = new ArrayList(); private ItemHandlerGridFilterInGrid filter = new ItemHandlerGridFilterInGrid(filteredItems) { @Override protected void onContentsChanged(int slot) { @@ -137,7 +138,7 @@ public class WirelessGrid implements IGrid { } @Override - public List getFilteredItems() { + public List getFilteredItems() { return filteredItems; } From 1ae429d05c5fbfac5313c04660df4849d752d239 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Thu, 4 Aug 2016 02:17:04 +0200 Subject: [PATCH 085/214] Update forge and tesla --- CHANGELOG.md | 2 ++ build.gradle | 6 +++--- src/main/java/refinedstorage/RefinedStorage.java | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 28edbd175..84ef1e90b 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,8 @@ - Each Grid Filter can now only filter 9 items - Each Grid allows 4 Grid Filters instead of 1 - Grid Filters can now be configured to compare on NBT and/ or damage +- Updated to Forge 2045 +- Updated Tesla ### 0.8.15 **Bugfixes** diff --git a/build.gradle b/build.gradle index 6acf39429..b7a450094 100755 --- a/build.gradle +++ b/build.gradle @@ -17,7 +17,7 @@ group = "refinedstorage" archivesBaseName = "refinedstorage" minecraft { - version = "1.10.2-12.18.1.2044" + version = "1.10.2-12.18.1.2045" runDir = "run" useDepAts = true mappings = "snapshot_20160518" @@ -38,8 +38,8 @@ repositories { dependencies { deobfCompile "mezz.jei:jei_1.10.2:3.7.+" - compile "net.darkhax.tesla:Tesla:1.10-1.2.0.34" - compile "net.industrial-craft:industrialcraft-2:2.6.26-ex110:api" + compile "net.darkhax.tesla:Tesla:1.10-1.2.+" + compile "net.industrial-craft:industrialcraft-2:2.6.27-ex110:api" } processResources { diff --git a/src/main/java/refinedstorage/RefinedStorage.java b/src/main/java/refinedstorage/RefinedStorage.java index bbe008368..7e37ff3d1 100755 --- a/src/main/java/refinedstorage/RefinedStorage.java +++ b/src/main/java/refinedstorage/RefinedStorage.java @@ -143,6 +143,6 @@ public final class RefinedStorage { } public static boolean hasTesla() { - return Loader.isModLoaded("Tesla"); + return Loader.isModLoaded("tesla"); } } From 8a0192e9f60a2576da80f9ceec4344da9329915b Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Thu, 4 Aug 2016 02:20:10 +0200 Subject: [PATCH 086/214] Controller doesn't need its own special package --- .../apiimpl/network/NetworkNodeGraph.java | 2 +- .../refinedstorage/block/BlockController.java | 2 +- .../refinedstorage/gui/GuiController.java | 9 +- .../java/refinedstorage/gui/GuiHandler.java | 1 - .../integration/ic2/IC2EnergyController.java | 2 +- .../item/ItemBlockController.java | 2 +- .../refinedstorage/item/ItemWirelessGrid.java | 2 +- .../refinedstorage/proxy/CommonProxy.java | 1 - .../tile/{controller => }/TileController.java | 52 +++- .../tile/controller/ClientNode.java | 30 -- .../DeepStorageUnitStorage.java | 113 ------- .../tile/externalstorage/DrawerStorage.java | 115 -------- .../tile/externalstorage/ExternalStorage.java | 39 --- .../externalstorage/ItemHandlerStorage.java | 84 ------ .../externalstorage/TileExternalStorage.java | 276 ------------------ .../tile/grid/WirelessGrid.java | 2 +- 16 files changed, 47 insertions(+), 685 deletions(-) rename src/main/java/refinedstorage/tile/{controller => }/TileController.java (95%) delete mode 100755 src/main/java/refinedstorage/tile/controller/ClientNode.java delete mode 100755 src/main/java/refinedstorage/tile/externalstorage/DeepStorageUnitStorage.java delete mode 100755 src/main/java/refinedstorage/tile/externalstorage/DrawerStorage.java delete mode 100755 src/main/java/refinedstorage/tile/externalstorage/ExternalStorage.java delete mode 100755 src/main/java/refinedstorage/tile/externalstorage/ItemHandlerStorage.java delete mode 100755 src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java diff --git a/src/main/java/refinedstorage/apiimpl/network/NetworkNodeGraph.java b/src/main/java/refinedstorage/apiimpl/network/NetworkNodeGraph.java index 9207e1b79..ad97744d2 100755 --- a/src/main/java/refinedstorage/apiimpl/network/NetworkNodeGraph.java +++ b/src/main/java/refinedstorage/apiimpl/network/NetworkNodeGraph.java @@ -7,8 +7,8 @@ import net.minecraft.world.World; import net.minecraftforge.common.DimensionManager; import refinedstorage.api.network.INetworkNode; import refinedstorage.api.network.INetworkNodeGraph; +import refinedstorage.tile.TileController; import refinedstorage.tile.TileNetworkTransmitter; -import refinedstorage.tile.controller.TileController; import java.util.*; diff --git a/src/main/java/refinedstorage/block/BlockController.java b/src/main/java/refinedstorage/block/BlockController.java index 16686409b..a7826fed7 100755 --- a/src/main/java/refinedstorage/block/BlockController.java +++ b/src/main/java/refinedstorage/block/BlockController.java @@ -22,7 +22,7 @@ import refinedstorage.RefinedStorageBlocks; import refinedstorage.RefinedStorageGui; import refinedstorage.api.network.NetworkUtils; import refinedstorage.item.ItemBlockController; -import refinedstorage.tile.controller.TileController; +import refinedstorage.tile.TileController; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/refinedstorage/gui/GuiController.java b/src/main/java/refinedstorage/gui/GuiController.java index fe61ac2a3..d28338ece 100755 --- a/src/main/java/refinedstorage/gui/GuiController.java +++ b/src/main/java/refinedstorage/gui/GuiController.java @@ -4,8 +4,7 @@ import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.RenderHelper; import refinedstorage.container.ContainerController; import refinedstorage.gui.sidebutton.SideButtonRedstoneMode; -import refinedstorage.tile.controller.ClientNode; -import refinedstorage.tile.controller.TileController; +import refinedstorage.tile.TileController; import java.util.List; @@ -61,13 +60,13 @@ public class GuiController extends GuiBase { RenderHelper.enableGUIStandardItemLighting(); - List nodes = controller.getClientNodes(); + List nodes = controller.getClientNodes(); - ClientNode nodeHovering = null; + TileController.ClientNode nodeHovering = null; for (int i = 0; i < 4; ++i) { if (slot < nodes.size()) { - ClientNode node = nodes.get(slot); + TileController.ClientNode node = nodes.get(slot); drawItem(x, y + 5, node.stack); diff --git a/src/main/java/refinedstorage/gui/GuiHandler.java b/src/main/java/refinedstorage/gui/GuiHandler.java index 415f2f3a8..b3cd9a6a6 100755 --- a/src/main/java/refinedstorage/gui/GuiHandler.java +++ b/src/main/java/refinedstorage/gui/GuiHandler.java @@ -11,7 +11,6 @@ import refinedstorage.RefinedStorageGui; import refinedstorage.container.*; import refinedstorage.gui.grid.GuiGrid; import refinedstorage.tile.*; -import refinedstorage.tile.controller.TileController; import refinedstorage.tile.grid.TileGrid; import refinedstorage.tile.grid.WirelessGrid; diff --git a/src/main/java/refinedstorage/integration/ic2/IC2EnergyController.java b/src/main/java/refinedstorage/integration/ic2/IC2EnergyController.java index 03ac96f9a..adea9ef83 100755 --- a/src/main/java/refinedstorage/integration/ic2/IC2EnergyController.java +++ b/src/main/java/refinedstorage/integration/ic2/IC2EnergyController.java @@ -2,7 +2,7 @@ package refinedstorage.integration.ic2; import ic2.api.energy.prefab.BasicSink; import net.minecraft.util.EnumFacing; -import refinedstorage.tile.controller.TileController; +import refinedstorage.tile.TileController; public class IC2EnergyController implements IIC2EnergyController { private BasicSink sink; diff --git a/src/main/java/refinedstorage/item/ItemBlockController.java b/src/main/java/refinedstorage/item/ItemBlockController.java index c5595fd11..1a77c1288 100755 --- a/src/main/java/refinedstorage/item/ItemBlockController.java +++ b/src/main/java/refinedstorage/item/ItemBlockController.java @@ -8,7 +8,7 @@ import net.minecraft.world.World; import refinedstorage.RefinedStorage; import refinedstorage.RefinedStorageBlocks; import refinedstorage.block.EnumControllerType; -import refinedstorage.tile.controller.TileController; +import refinedstorage.tile.TileController; import java.util.List; diff --git a/src/main/java/refinedstorage/item/ItemWirelessGrid.java b/src/main/java/refinedstorage/item/ItemWirelessGrid.java index 3f427476b..89348caab 100755 --- a/src/main/java/refinedstorage/item/ItemWirelessGrid.java +++ b/src/main/java/refinedstorage/item/ItemWirelessGrid.java @@ -26,7 +26,7 @@ import net.minecraftforge.fml.common.Optional; import refinedstorage.RefinedStorage; import refinedstorage.RefinedStorageBlocks; import refinedstorage.integration.ic2.IC2Integration; -import refinedstorage.tile.controller.TileController; +import refinedstorage.tile.TileController; import refinedstorage.tile.grid.TileGrid; import javax.annotation.Nullable; diff --git a/src/main/java/refinedstorage/proxy/CommonProxy.java b/src/main/java/refinedstorage/proxy/CommonProxy.java index 75b76fa3f..919e9c9ce 100755 --- a/src/main/java/refinedstorage/proxy/CommonProxy.java +++ b/src/main/java/refinedstorage/proxy/CommonProxy.java @@ -27,7 +27,6 @@ import refinedstorage.gui.GuiHandler; import refinedstorage.item.*; import refinedstorage.network.*; import refinedstorage.tile.*; -import refinedstorage.tile.controller.TileController; import refinedstorage.tile.externalstorage.TileExternalStorage; import refinedstorage.tile.grid.TileGrid; diff --git a/src/main/java/refinedstorage/tile/controller/TileController.java b/src/main/java/refinedstorage/tile/TileController.java similarity index 95% rename from src/main/java/refinedstorage/tile/controller/TileController.java rename to src/main/java/refinedstorage/tile/TileController.java index 900e5c0fb..0361627f2 100755 --- a/src/main/java/refinedstorage/tile/controller/TileController.java +++ b/src/main/java/refinedstorage/tile/TileController.java @@ -1,4 +1,4 @@ -package refinedstorage.tile.controller; +package refinedstorage.tile; import cofh.api.energy.EnergyStorage; import cofh.api.energy.IEnergyReceiver; @@ -47,9 +47,6 @@ import refinedstorage.integration.ic2.IIC2EnergyController; import refinedstorage.item.ItemPattern; import refinedstorage.network.MessageGridDelta; import refinedstorage.network.MessageGridUpdate; -import refinedstorage.tile.ISynchronizedContainer; -import refinedstorage.tile.TileBase; -import refinedstorage.tile.TileCrafter; import refinedstorage.tile.config.IRedstoneModeConfig; import refinedstorage.tile.config.RedstoneMode; import refinedstorage.tile.externalstorage.ExternalStorage; @@ -57,8 +54,8 @@ import refinedstorage.tile.externalstorage.ExternalStorage; import java.util.*; @Optional.InterfaceList({ - @Optional.Interface(iface = "net.darkhax.tesla.api.ITeslaConsumer", modid = "Tesla"), - @Optional.Interface(iface = "net.darkhax.tesla.api.ITeslaHolder", modid = "Tesla") + @Optional.Interface(iface = "net.darkhax.tesla.api.ITeslaConsumer", modid = "tesla"), + @Optional.Interface(iface = "net.darkhax.tesla.api.ITeslaHolder", modid = "tesla") }) public class TileController extends TileBase implements INetworkMaster, IEnergyReceiver, ITeslaHolder, ITeslaConsumer, ISynchronizedContainer, IRedstoneModeConfig { public static final String NBT_ENERGY = "Energy"; @@ -66,12 +63,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR private static final String NBT_CRAFTING_TASKS = "CraftingTasks"; - private GridHandler gridHandler = new GridHandler(this); - private WirelessGridHandler wirelessGridHandler = new WirelessGridHandler(this); - - private IGroupedStorage storage = new GroupedStorage(this); - - private Comparator sizeComparator = new Comparator() { + private static final Comparator SIZE_COMPARATOR = new Comparator() { @Override public int compare(IStorage left, IStorage right) { if (left.getStored() == right.getStored()) { @@ -82,7 +74,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR } }; - private Comparator priorityComparator = new Comparator() { + private static final Comparator PRIORITY_COMPARATOR = new Comparator() { @Override public int compare(IStorage left, IStorage right) { if (left.getPriority() == right.getPriority()) { @@ -93,7 +85,11 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR } }; + private GridHandler gridHandler = new GridHandler(this); + private WirelessGridHandler wirelessGridHandler = new WirelessGridHandler(this); + private INetworkNodeGraph nodeGraph = new NetworkNodeGraph(this); + private IGroupedStorage storage = new GroupedStorage(this); private List patterns = new ArrayList(); @@ -151,8 +147,8 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR energyEU.update(); if (canRun()) { - Collections.sort(storage.getStorages(), sizeComparator); - Collections.sort(storage.getStorages(), priorityComparator); + Collections.sort(storage.getStorages(), SIZE_COMPARATOR); + Collections.sort(storage.getStorages(), PRIORITY_COMPARATOR); for (ICraftingTask taskToCancel : craftingTasksToCancel) { taskToCancel.onCancelled(this); @@ -720,4 +716,30 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR public boolean hasCapability(Capability capability, EnumFacing facing) { return (RefinedStorage.hasTesla() && (capability == TeslaCapabilities.CAPABILITY_HOLDER || capability == TeslaCapabilities.CAPABILITY_CONSUMER)) || super.hasCapability(capability, facing); } + + public class ClientNode { + public ItemStack stack; + public int amount; + public int energyUsage; + + @Override + public boolean equals(Object other) { + if (this == other) { + return true; + } + + if (!(other instanceof ClientNode)) { + return false; + } + + return energyUsage == ((ClientNode) other).energyUsage && CompareUtils.compareStack(stack, ((ClientNode) other).stack); + } + + @Override + public int hashCode() { + int result = stack.hashCode(); + result = 31 * result + energyUsage; + return result; + } + } } diff --git a/src/main/java/refinedstorage/tile/controller/ClientNode.java b/src/main/java/refinedstorage/tile/controller/ClientNode.java deleted file mode 100755 index a1c73ffe6..000000000 --- a/src/main/java/refinedstorage/tile/controller/ClientNode.java +++ /dev/null @@ -1,30 +0,0 @@ -package refinedstorage.tile.controller; - -import net.minecraft.item.ItemStack; -import refinedstorage.api.storage.CompareUtils; - -public final class ClientNode { - public ItemStack stack; - public int amount; - public int energyUsage; - - @Override - public boolean equals(Object other) { - if (this == other) { - return true; - } - - if (!(other instanceof ClientNode)) { - return false; - } - - return energyUsage == ((ClientNode) other).energyUsage && CompareUtils.compareStack(stack, ((ClientNode) other).stack); - } - - @Override - public int hashCode() { - int result = stack.hashCode(); - result = 31 * result + energyUsage; - return result; - } -} diff --git a/src/main/java/refinedstorage/tile/externalstorage/DeepStorageUnitStorage.java b/src/main/java/refinedstorage/tile/externalstorage/DeepStorageUnitStorage.java deleted file mode 100755 index 24f1159b7..000000000 --- a/src/main/java/refinedstorage/tile/externalstorage/DeepStorageUnitStorage.java +++ /dev/null @@ -1,113 +0,0 @@ -package refinedstorage.tile.externalstorage; - -import net.minecraft.item.ItemStack; -import net.minecraftforge.items.ItemHandlerHelper; -import powercrystals.minefactoryreloaded.api.IDeepStorageUnit; -import refinedstorage.api.storage.CompareUtils; -import refinedstorage.tile.config.ModeFilter; - -import javax.annotation.Nonnull; -import java.util.Collections; -import java.util.List; - -public class DeepStorageUnitStorage extends ExternalStorage { - private TileExternalStorage externalStorage; - private IDeepStorageUnit unit; - - public DeepStorageUnitStorage(TileExternalStorage externalStorage, IDeepStorageUnit unit) { - this.externalStorage = externalStorage; - this.unit = unit; - } - - @Override - public int getCapacity() { - return unit.getMaxStoredCount(); - } - - @Override - public List getItems() { - if (unit.getStoredItemType() != null && unit.getStoredItemType().stackSize > 0) { - return Collections.singletonList(unit.getStoredItemType().copy()); - } - - return Collections.emptyList(); - } - - @Override - public ItemStack insertItem(@Nonnull ItemStack stack, int size, boolean simulate) { - if (ModeFilter.respectsMode(externalStorage.getFilters(), externalStorage, externalStorage.getCompare(), stack)) { - if (unit.getStoredItemType() != null) { - if (CompareUtils.compareStackNoQuantity(unit.getStoredItemType(), stack)) { - if (getStored() + size > unit.getMaxStoredCount()) { - int remainingSpace = getCapacity() - getStored(); - - if (remainingSpace <= 0) { - return ItemHandlerHelper.copyStackWithSize(stack, size); - } - - if (!simulate) { - unit.setStoredItemCount(unit.getStoredItemType().stackSize + remainingSpace); - } - - return ItemHandlerHelper.copyStackWithSize(stack, size - remainingSpace); - } else { - if (!simulate) { - unit.setStoredItemCount(unit.getStoredItemType().stackSize + size); - } - - return null; - } - } - } else { - if (getStored() + size > unit.getMaxStoredCount()) { - int remainingSpace = getCapacity() - getStored(); - - if (remainingSpace <= 0) { - return ItemHandlerHelper.copyStackWithSize(stack, size); - } - - if (!simulate) { - unit.setStoredItemType(stack.copy(), remainingSpace); - } - - return ItemHandlerHelper.copyStackWithSize(stack, size - remainingSpace); - } else { - if (!simulate) { - unit.setStoredItemType(stack.copy(), size); - } - - return null; - } - } - } - - return ItemHandlerHelper.copyStackWithSize(stack, size); - } - - @Override - public ItemStack extractItem(@Nonnull ItemStack stack, int size, int flags) { - if (CompareUtils.compareStack(stack, unit.getStoredItemType(), flags)) { - if (size > unit.getStoredItemType().stackSize) { - size = unit.getStoredItemType().stackSize; - } - - ItemStack stored = unit.getStoredItemType(); - - unit.setStoredItemCount(stored.stackSize - size); - - return ItemHandlerHelper.copyStackWithSize(stored, size); - } - - return null; - } - - @Override - public int getStored() { - return unit.getStoredItemType() != null ? unit.getStoredItemType().stackSize : 0; - } - - @Override - public int getPriority() { - return externalStorage.getPriority(); - } -} diff --git a/src/main/java/refinedstorage/tile/externalstorage/DrawerStorage.java b/src/main/java/refinedstorage/tile/externalstorage/DrawerStorage.java deleted file mode 100755 index 4b398d4d7..000000000 --- a/src/main/java/refinedstorage/tile/externalstorage/DrawerStorage.java +++ /dev/null @@ -1,115 +0,0 @@ -package refinedstorage.tile.externalstorage; - -import com.jaquadro.minecraft.storagedrawers.api.storage.IDrawer; -import com.jaquadro.minecraft.storagedrawers.api.storage.attribute.IVoidable; -import net.minecraft.item.ItemStack; -import net.minecraftforge.items.ItemHandlerHelper; -import refinedstorage.api.storage.CompareUtils; -import refinedstorage.tile.config.ModeFilter; - -import java.util.Collections; -import java.util.List; - -public class DrawerStorage extends ExternalStorage { - private TileExternalStorage externalStorage; - private IDrawer drawer; - - public DrawerStorage(TileExternalStorage externalStorage, IDrawer drawer) { - this.externalStorage = externalStorage; - this.drawer = drawer; - } - - @Override - public int getCapacity() { - return drawer.getMaxCapacity(); - } - - @Override - public List getItems() { - if (!drawer.isEmpty() && drawer.getStoredItemCount() > 0) { - return Collections.singletonList(drawer.getStoredItemCopy()); - } - - return Collections.emptyList(); - } - - public boolean isVoidable() { - return drawer instanceof IVoidable && ((IVoidable) drawer).isVoid(); - } - - @Override - public ItemStack insertItem(ItemStack stack, int size, boolean simulate) { - if (ModeFilter.respectsMode(externalStorage.getFilters(), externalStorage, externalStorage.getCompare(), stack) && drawer.canItemBeStored(stack)) { - if (!drawer.isEmpty()) { - if (getStored() + size > drawer.getMaxCapacity(stack)) { - int remainingSpace = getCapacity() - getStored(); - - if (remainingSpace <= 0) { - return isVoidable() ? null : ItemHandlerHelper.copyStackWithSize(stack, size); - } - - if (!simulate) { - drawer.setStoredItemCount(drawer.getStoredItemCount() + remainingSpace); - } - - return isVoidable() ? null : ItemHandlerHelper.copyStackWithSize(stack, size - remainingSpace); - } else { - if (!simulate) { - drawer.setStoredItemCount(drawer.getStoredItemCount() + size); - } - - return null; - } - } else { - if (getStored() + size > drawer.getMaxCapacity(stack)) { - int remainingSpace = getCapacity() - getStored(); - - if (remainingSpace <= 0) { - return isVoidable() ? null : ItemHandlerHelper.copyStackWithSize(stack, size); - } - - if (!simulate) { - drawer.setStoredItem(stack, remainingSpace); - } - - return isVoidable() ? null : ItemHandlerHelper.copyStackWithSize(stack, size - remainingSpace); - } else { - if (!simulate) { - drawer.setStoredItem(stack, size); - } - - return null; - } - } - } - - return ItemHandlerHelper.copyStackWithSize(stack, size); - } - - @Override - public ItemStack extractItem(ItemStack stack, int size, int flags) { - if (CompareUtils.compareStack(stack, drawer.getStoredItemPrototype(), flags) && drawer.canItemBeExtracted(stack)) { - if (size > drawer.getStoredItemCount()) { - size = drawer.getStoredItemCount(); - } - - ItemStack stored = drawer.getStoredItemPrototype(); - - drawer.setStoredItemCount(drawer.getStoredItemCount() - size); - - return ItemHandlerHelper.copyStackWithSize(stored, size); - } - - return null; - } - - @Override - public int getStored() { - return drawer.getStoredItemCount(); - } - - @Override - public int getPriority() { - return externalStorage.getPriority(); - } -} diff --git a/src/main/java/refinedstorage/tile/externalstorage/ExternalStorage.java b/src/main/java/refinedstorage/tile/externalstorage/ExternalStorage.java deleted file mode 100755 index 6ec709ebf..000000000 --- a/src/main/java/refinedstorage/tile/externalstorage/ExternalStorage.java +++ /dev/null @@ -1,39 +0,0 @@ -package refinedstorage.tile.externalstorage; - -import net.minecraft.item.ItemStack; -import refinedstorage.api.storage.CompareUtils; -import refinedstorage.api.storage.IStorage; - -import java.util.List; - -public abstract class ExternalStorage implements IStorage { - private List cache; - - public abstract int getCapacity(); - - public boolean updateCache() { - List items = getItems(); - - if (cache == null) { - cache = items; - } else if (items.size() != cache.size()) { - cache = items; - - return true; - } else { - for (int i = 0; i < items.size(); ++i) { - if (!CompareUtils.compareStack(items.get(i), cache.get(i))) { - cache = items; - - return true; - } - } - } - - return false; - } - - public void updateCacheForcefully() { - cache = getItems(); - } -} diff --git a/src/main/java/refinedstorage/tile/externalstorage/ItemHandlerStorage.java b/src/main/java/refinedstorage/tile/externalstorage/ItemHandlerStorage.java deleted file mode 100755 index 716ae16f7..000000000 --- a/src/main/java/refinedstorage/tile/externalstorage/ItemHandlerStorage.java +++ /dev/null @@ -1,84 +0,0 @@ -package refinedstorage.tile.externalstorage; - -import net.minecraft.item.ItemStack; -import net.minecraftforge.items.IItemHandler; -import net.minecraftforge.items.ItemHandlerHelper; -import refinedstorage.api.storage.CompareUtils; -import refinedstorage.tile.config.ModeFilter; - -import java.util.ArrayList; -import java.util.List; - -public class ItemHandlerStorage extends ExternalStorage { - private TileExternalStorage externalStorage; - private IItemHandler handler; - - public ItemHandlerStorage(TileExternalStorage externalStorage, IItemHandler handler) { - this.externalStorage = externalStorage; - this.handler = handler; - } - - @Override - public int getCapacity() { - return handler.getSlots() * 64; - } - - @Override - public List getItems() { - List items = new ArrayList(); - - for (int i = 0; i < handler.getSlots(); ++i) { - if (handler.getStackInSlot(i) != null && handler.getStackInSlot(i).getItem() != null) { - items.add(handler.getStackInSlot(i).copy()); - } - } - - return items; - } - - @Override - public ItemStack insertItem(ItemStack stack, int size, boolean simulate) { - if (ModeFilter.respectsMode(externalStorage.getFilters(), externalStorage, externalStorage.getCompare(), stack)) { - return ItemHandlerHelper.insertItem(handler, ItemHandlerHelper.copyStackWithSize(stack, size), simulate); - } - - return ItemHandlerHelper.copyStackWithSize(stack, size); - } - - @Override - public ItemStack extractItem(ItemStack stack, int size, int flags) { - for (int i = 0; i < handler.getSlots(); ++i) { - ItemStack slot = handler.getStackInSlot(i); - - if (slot != null && CompareUtils.compareStack(slot, stack, flags)) { - size = Math.min(size, slot.stackSize); - - ItemStack took = ItemHandlerHelper.copyStackWithSize(slot, size); - - handler.extractItem(i, size, false); - - return took; - } - } - - return null; - } - - @Override - public int getStored() { - int size = 0; - - for (int i = 0; i < handler.getSlots(); ++i) { - if (handler.getStackInSlot(i) != null) { - size += handler.getStackInSlot(i).stackSize; - } - } - - return size; - } - - @Override - public int getPriority() { - return externalStorage.getPriority(); - } -} diff --git a/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java b/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java deleted file mode 100755 index e553528e0..000000000 --- a/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java +++ /dev/null @@ -1,276 +0,0 @@ -package refinedstorage.tile.externalstorage; - -import com.jaquadro.minecraft.storagedrawers.api.storage.IDrawer; -import com.jaquadro.minecraft.storagedrawers.api.storage.IDrawerGroup; -import io.netty.buffer.ByteBuf; -import net.minecraft.inventory.Container; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraftforge.items.IItemHandler; -import powercrystals.minefactoryreloaded.api.IDeepStorageUnit; -import refinedstorage.RefinedStorage; -import refinedstorage.api.network.INetworkMaster; -import refinedstorage.api.storage.IStorage; -import refinedstorage.api.storage.IStorageProvider; -import refinedstorage.container.ContainerStorage; -import refinedstorage.inventory.ItemHandlerBasic; -import refinedstorage.network.MessagePriorityUpdate; -import refinedstorage.tile.IStorageGui; -import refinedstorage.tile.TileNode; -import refinedstorage.tile.config.ICompareConfig; -import refinedstorage.tile.config.IModeConfig; -import refinedstorage.tile.config.IRedstoneModeConfig; -import refinedstorage.tile.config.ModeConstants; - -import java.util.ArrayList; -import java.util.List; - -public class TileExternalStorage extends TileNode implements IStorageProvider, IStorageGui, ICompareConfig, IModeConfig { - private static final String NBT_PRIORITY = "Priority"; - private static final String NBT_COMPARE = "Compare"; - private static final String NBT_MODE = "Mode"; - - private ItemHandlerBasic filters = new ItemHandlerBasic(9, this); - - private int priority = 0; - private int compare = 0; - private int mode = ModeConstants.WHITELIST; - - private int stored; - private int capacity; - - private List storages = new ArrayList(); - private int lastDrawerCount; - - @Override - public int getEnergyUsage() { - return RefinedStorage.INSTANCE.externalStorageUsage + (storages.size() * RefinedStorage.INSTANCE.externalStoragePerStorageUsage); - } - - @Override - public void updateNode() { - } - - @Override - public void onConnectionChange(INetworkMaster network, boolean state) { - super.onConnectionChange(network, state); - - updateStorage(network); - - network.getStorage().rebuild(); - } - - @Override - public void update() { - if (!worldObj.isRemote && network != null) { - if (ticks % (20 * 4) == 0) { - boolean shouldRebuild = false; - - for (ExternalStorage storage : storages) { - if (storage.updateCache()) { - shouldRebuild = true; - } - } - - if (shouldRebuild) { - network.getStorage().rebuild(); - } - } - - if (getFacingTile() instanceof IDrawerGroup && lastDrawerCount != ((IDrawerGroup) getFacingTile()).getDrawerCount()) { - lastDrawerCount = ((IDrawerGroup) getFacingTile()).getDrawerCount(); - - updateStorage(network); - } - } - - super.update(); - } - - @Override - public void writeContainerData(ByteBuf buf) { - super.writeContainerData(buf); - - buf.writeInt(priority); - buf.writeInt(getStored()); - buf.writeInt(getCapacity()); - buf.writeInt(compare); - buf.writeInt(mode); - } - - @Override - public void readContainerData(ByteBuf buf) { - super.readContainerData(buf); - - priority = buf.readInt(); - stored = buf.readInt(); - capacity = buf.readInt(); - compare = buf.readInt(); - mode = buf.readInt(); - } - - @Override - public Class getContainer() { - return ContainerStorage.class; - } - - @Override - public void read(NBTTagCompound tag) { - super.read(tag); - - readItems(filters, 0, tag); - - if (tag.hasKey(NBT_PRIORITY)) { - priority = tag.getInteger(NBT_PRIORITY); - } - - if (tag.hasKey(NBT_COMPARE)) { - compare = tag.getInteger(NBT_COMPARE); - } - - if (tag.hasKey(NBT_MODE)) { - mode = tag.getInteger(NBT_MODE); - } - } - - @Override - public NBTTagCompound write(NBTTagCompound tag) { - super.write(tag); - - writeItems(filters, 0, tag); - - tag.setInteger(NBT_PRIORITY, priority); - tag.setInteger(NBT_COMPARE, compare); - tag.setInteger(NBT_MODE, mode); - - return tag; - } - - @Override - public int getCompare() { - return compare; - } - - @Override - public void setCompare(int compare) { - this.compare = compare; - - markDirty(); - } - - @Override - public int getMode() { - return mode; - } - - @Override - public void setMode(int mode) { - this.mode = mode; - - markDirty(); - } - - @Override - public int getPriority() { - return priority; - } - - public void setPriority(int priority) { - this.priority = priority; - - markDirty(); - } - - public void updateStorage(INetworkMaster network) { - storages.clear(); - - TileEntity facing = getFacingTile(); - - if (facing instanceof IDrawerGroup) { - IDrawerGroup group = (IDrawerGroup) facing; - - for (int i = 0; i < group.getDrawerCount(); ++i) { - if (group.isDrawerEnabled(i)) { - storages.add(new DrawerStorage(this, group.getDrawer(i))); - } - } - } else if (facing instanceof IDrawer) { - storages.add(new DrawerStorage(this, (IDrawer) facing)); - } else if (facing instanceof IDeepStorageUnit) { - storages.add(new DeepStorageUnitStorage(this, (IDeepStorageUnit) facing)); - } else { - IItemHandler handler = getItemHandler(facing, getDirection().getOpposite()); - - if (handler != null) { - storages.add(new ItemHandlerStorage(this, handler)); - } - } - - network.getStorage().rebuild(); - } - - @Override - public void addStorages(List storages) { - storages.addAll(this.storages); - } - - @Override - public String getGuiTitle() { - return "gui.refinedstorage:external_storage"; - } - - @Override - public IRedstoneModeConfig getRedstoneModeConfig() { - return this; - } - - @Override - public ICompareConfig getCompareConfig() { - return this; - } - - @Override - public IModeConfig getModeConfig() { - return this; - } - - @Override - public int getStored() { - if (!worldObj.isRemote) { - int stored = 0; - - for (ExternalStorage storage : storages) { - stored += storage.getStored(); - } - - return stored; - } - - return stored; - } - - @Override - public int getCapacity() { - if (!worldObj.isRemote) { - int capacity = 0; - - for (ExternalStorage storage : storages) { - capacity += storage.getCapacity(); - } - - return capacity; - } - - return capacity; - } - - @Override - public void onPriorityChanged(int priority) { - RefinedStorage.INSTANCE.network.sendToServer(new MessagePriorityUpdate(pos, priority)); - } - - @Override - public IItemHandler getFilters() { - return filters; - } -} diff --git a/src/main/java/refinedstorage/tile/grid/WirelessGrid.java b/src/main/java/refinedstorage/tile/grid/WirelessGrid.java index ceee15fc8..988c02c94 100755 --- a/src/main/java/refinedstorage/tile/grid/WirelessGrid.java +++ b/src/main/java/refinedstorage/tile/grid/WirelessGrid.java @@ -15,8 +15,8 @@ import refinedstorage.inventory.ItemHandlerGridFilterInGrid; import refinedstorage.item.ItemWirelessGrid; import refinedstorage.network.MessageWirelessGridSettingsUpdate; import refinedstorage.tile.TileBase; +import refinedstorage.tile.TileController; import refinedstorage.tile.config.IRedstoneModeConfig; -import refinedstorage.tile.controller.TileController; import java.util.ArrayList; import java.util.List; From 48cdd207f755a139d4613bdd50505ba457075f79 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Thu, 4 Aug 2016 02:21:01 +0200 Subject: [PATCH 087/214] Removed external storage classes by accident --- .../DeepStorageUnitStorage.java | 113 +++++++ .../tile/externalstorage/DrawerStorage.java | 115 ++++++++ .../tile/externalstorage/ExternalStorage.java | 39 +++ .../externalstorage/ItemHandlerStorage.java | 84 ++++++ .../externalstorage/TileExternalStorage.java | 276 ++++++++++++++++++ 5 files changed, 627 insertions(+) create mode 100755 src/main/java/refinedstorage/tile/externalstorage/DeepStorageUnitStorage.java create mode 100755 src/main/java/refinedstorage/tile/externalstorage/DrawerStorage.java create mode 100755 src/main/java/refinedstorage/tile/externalstorage/ExternalStorage.java create mode 100755 src/main/java/refinedstorage/tile/externalstorage/ItemHandlerStorage.java create mode 100755 src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java diff --git a/src/main/java/refinedstorage/tile/externalstorage/DeepStorageUnitStorage.java b/src/main/java/refinedstorage/tile/externalstorage/DeepStorageUnitStorage.java new file mode 100755 index 000000000..24f1159b7 --- /dev/null +++ b/src/main/java/refinedstorage/tile/externalstorage/DeepStorageUnitStorage.java @@ -0,0 +1,113 @@ +package refinedstorage.tile.externalstorage; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.items.ItemHandlerHelper; +import powercrystals.minefactoryreloaded.api.IDeepStorageUnit; +import refinedstorage.api.storage.CompareUtils; +import refinedstorage.tile.config.ModeFilter; + +import javax.annotation.Nonnull; +import java.util.Collections; +import java.util.List; + +public class DeepStorageUnitStorage extends ExternalStorage { + private TileExternalStorage externalStorage; + private IDeepStorageUnit unit; + + public DeepStorageUnitStorage(TileExternalStorage externalStorage, IDeepStorageUnit unit) { + this.externalStorage = externalStorage; + this.unit = unit; + } + + @Override + public int getCapacity() { + return unit.getMaxStoredCount(); + } + + @Override + public List getItems() { + if (unit.getStoredItemType() != null && unit.getStoredItemType().stackSize > 0) { + return Collections.singletonList(unit.getStoredItemType().copy()); + } + + return Collections.emptyList(); + } + + @Override + public ItemStack insertItem(@Nonnull ItemStack stack, int size, boolean simulate) { + if (ModeFilter.respectsMode(externalStorage.getFilters(), externalStorage, externalStorage.getCompare(), stack)) { + if (unit.getStoredItemType() != null) { + if (CompareUtils.compareStackNoQuantity(unit.getStoredItemType(), stack)) { + if (getStored() + size > unit.getMaxStoredCount()) { + int remainingSpace = getCapacity() - getStored(); + + if (remainingSpace <= 0) { + return ItemHandlerHelper.copyStackWithSize(stack, size); + } + + if (!simulate) { + unit.setStoredItemCount(unit.getStoredItemType().stackSize + remainingSpace); + } + + return ItemHandlerHelper.copyStackWithSize(stack, size - remainingSpace); + } else { + if (!simulate) { + unit.setStoredItemCount(unit.getStoredItemType().stackSize + size); + } + + return null; + } + } + } else { + if (getStored() + size > unit.getMaxStoredCount()) { + int remainingSpace = getCapacity() - getStored(); + + if (remainingSpace <= 0) { + return ItemHandlerHelper.copyStackWithSize(stack, size); + } + + if (!simulate) { + unit.setStoredItemType(stack.copy(), remainingSpace); + } + + return ItemHandlerHelper.copyStackWithSize(stack, size - remainingSpace); + } else { + if (!simulate) { + unit.setStoredItemType(stack.copy(), size); + } + + return null; + } + } + } + + return ItemHandlerHelper.copyStackWithSize(stack, size); + } + + @Override + public ItemStack extractItem(@Nonnull ItemStack stack, int size, int flags) { + if (CompareUtils.compareStack(stack, unit.getStoredItemType(), flags)) { + if (size > unit.getStoredItemType().stackSize) { + size = unit.getStoredItemType().stackSize; + } + + ItemStack stored = unit.getStoredItemType(); + + unit.setStoredItemCount(stored.stackSize - size); + + return ItemHandlerHelper.copyStackWithSize(stored, size); + } + + return null; + } + + @Override + public int getStored() { + return unit.getStoredItemType() != null ? unit.getStoredItemType().stackSize : 0; + } + + @Override + public int getPriority() { + return externalStorage.getPriority(); + } +} diff --git a/src/main/java/refinedstorage/tile/externalstorage/DrawerStorage.java b/src/main/java/refinedstorage/tile/externalstorage/DrawerStorage.java new file mode 100755 index 000000000..4b398d4d7 --- /dev/null +++ b/src/main/java/refinedstorage/tile/externalstorage/DrawerStorage.java @@ -0,0 +1,115 @@ +package refinedstorage.tile.externalstorage; + +import com.jaquadro.minecraft.storagedrawers.api.storage.IDrawer; +import com.jaquadro.minecraft.storagedrawers.api.storage.attribute.IVoidable; +import net.minecraft.item.ItemStack; +import net.minecraftforge.items.ItemHandlerHelper; +import refinedstorage.api.storage.CompareUtils; +import refinedstorage.tile.config.ModeFilter; + +import java.util.Collections; +import java.util.List; + +public class DrawerStorage extends ExternalStorage { + private TileExternalStorage externalStorage; + private IDrawer drawer; + + public DrawerStorage(TileExternalStorage externalStorage, IDrawer drawer) { + this.externalStorage = externalStorage; + this.drawer = drawer; + } + + @Override + public int getCapacity() { + return drawer.getMaxCapacity(); + } + + @Override + public List getItems() { + if (!drawer.isEmpty() && drawer.getStoredItemCount() > 0) { + return Collections.singletonList(drawer.getStoredItemCopy()); + } + + return Collections.emptyList(); + } + + public boolean isVoidable() { + return drawer instanceof IVoidable && ((IVoidable) drawer).isVoid(); + } + + @Override + public ItemStack insertItem(ItemStack stack, int size, boolean simulate) { + if (ModeFilter.respectsMode(externalStorage.getFilters(), externalStorage, externalStorage.getCompare(), stack) && drawer.canItemBeStored(stack)) { + if (!drawer.isEmpty()) { + if (getStored() + size > drawer.getMaxCapacity(stack)) { + int remainingSpace = getCapacity() - getStored(); + + if (remainingSpace <= 0) { + return isVoidable() ? null : ItemHandlerHelper.copyStackWithSize(stack, size); + } + + if (!simulate) { + drawer.setStoredItemCount(drawer.getStoredItemCount() + remainingSpace); + } + + return isVoidable() ? null : ItemHandlerHelper.copyStackWithSize(stack, size - remainingSpace); + } else { + if (!simulate) { + drawer.setStoredItemCount(drawer.getStoredItemCount() + size); + } + + return null; + } + } else { + if (getStored() + size > drawer.getMaxCapacity(stack)) { + int remainingSpace = getCapacity() - getStored(); + + if (remainingSpace <= 0) { + return isVoidable() ? null : ItemHandlerHelper.copyStackWithSize(stack, size); + } + + if (!simulate) { + drawer.setStoredItem(stack, remainingSpace); + } + + return isVoidable() ? null : ItemHandlerHelper.copyStackWithSize(stack, size - remainingSpace); + } else { + if (!simulate) { + drawer.setStoredItem(stack, size); + } + + return null; + } + } + } + + return ItemHandlerHelper.copyStackWithSize(stack, size); + } + + @Override + public ItemStack extractItem(ItemStack stack, int size, int flags) { + if (CompareUtils.compareStack(stack, drawer.getStoredItemPrototype(), flags) && drawer.canItemBeExtracted(stack)) { + if (size > drawer.getStoredItemCount()) { + size = drawer.getStoredItemCount(); + } + + ItemStack stored = drawer.getStoredItemPrototype(); + + drawer.setStoredItemCount(drawer.getStoredItemCount() - size); + + return ItemHandlerHelper.copyStackWithSize(stored, size); + } + + return null; + } + + @Override + public int getStored() { + return drawer.getStoredItemCount(); + } + + @Override + public int getPriority() { + return externalStorage.getPriority(); + } +} diff --git a/src/main/java/refinedstorage/tile/externalstorage/ExternalStorage.java b/src/main/java/refinedstorage/tile/externalstorage/ExternalStorage.java new file mode 100755 index 000000000..6ec709ebf --- /dev/null +++ b/src/main/java/refinedstorage/tile/externalstorage/ExternalStorage.java @@ -0,0 +1,39 @@ +package refinedstorage.tile.externalstorage; + +import net.minecraft.item.ItemStack; +import refinedstorage.api.storage.CompareUtils; +import refinedstorage.api.storage.IStorage; + +import java.util.List; + +public abstract class ExternalStorage implements IStorage { + private List cache; + + public abstract int getCapacity(); + + public boolean updateCache() { + List items = getItems(); + + if (cache == null) { + cache = items; + } else if (items.size() != cache.size()) { + cache = items; + + return true; + } else { + for (int i = 0; i < items.size(); ++i) { + if (!CompareUtils.compareStack(items.get(i), cache.get(i))) { + cache = items; + + return true; + } + } + } + + return false; + } + + public void updateCacheForcefully() { + cache = getItems(); + } +} diff --git a/src/main/java/refinedstorage/tile/externalstorage/ItemHandlerStorage.java b/src/main/java/refinedstorage/tile/externalstorage/ItemHandlerStorage.java new file mode 100755 index 000000000..716ae16f7 --- /dev/null +++ b/src/main/java/refinedstorage/tile/externalstorage/ItemHandlerStorage.java @@ -0,0 +1,84 @@ +package refinedstorage.tile.externalstorage; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.items.IItemHandler; +import net.minecraftforge.items.ItemHandlerHelper; +import refinedstorage.api.storage.CompareUtils; +import refinedstorage.tile.config.ModeFilter; + +import java.util.ArrayList; +import java.util.List; + +public class ItemHandlerStorage extends ExternalStorage { + private TileExternalStorage externalStorage; + private IItemHandler handler; + + public ItemHandlerStorage(TileExternalStorage externalStorage, IItemHandler handler) { + this.externalStorage = externalStorage; + this.handler = handler; + } + + @Override + public int getCapacity() { + return handler.getSlots() * 64; + } + + @Override + public List getItems() { + List items = new ArrayList(); + + for (int i = 0; i < handler.getSlots(); ++i) { + if (handler.getStackInSlot(i) != null && handler.getStackInSlot(i).getItem() != null) { + items.add(handler.getStackInSlot(i).copy()); + } + } + + return items; + } + + @Override + public ItemStack insertItem(ItemStack stack, int size, boolean simulate) { + if (ModeFilter.respectsMode(externalStorage.getFilters(), externalStorage, externalStorage.getCompare(), stack)) { + return ItemHandlerHelper.insertItem(handler, ItemHandlerHelper.copyStackWithSize(stack, size), simulate); + } + + return ItemHandlerHelper.copyStackWithSize(stack, size); + } + + @Override + public ItemStack extractItem(ItemStack stack, int size, int flags) { + for (int i = 0; i < handler.getSlots(); ++i) { + ItemStack slot = handler.getStackInSlot(i); + + if (slot != null && CompareUtils.compareStack(slot, stack, flags)) { + size = Math.min(size, slot.stackSize); + + ItemStack took = ItemHandlerHelper.copyStackWithSize(slot, size); + + handler.extractItem(i, size, false); + + return took; + } + } + + return null; + } + + @Override + public int getStored() { + int size = 0; + + for (int i = 0; i < handler.getSlots(); ++i) { + if (handler.getStackInSlot(i) != null) { + size += handler.getStackInSlot(i).stackSize; + } + } + + return size; + } + + @Override + public int getPriority() { + return externalStorage.getPriority(); + } +} diff --git a/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java b/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java new file mode 100755 index 000000000..e553528e0 --- /dev/null +++ b/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java @@ -0,0 +1,276 @@ +package refinedstorage.tile.externalstorage; + +import com.jaquadro.minecraft.storagedrawers.api.storage.IDrawer; +import com.jaquadro.minecraft.storagedrawers.api.storage.IDrawerGroup; +import io.netty.buffer.ByteBuf; +import net.minecraft.inventory.Container; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.items.IItemHandler; +import powercrystals.minefactoryreloaded.api.IDeepStorageUnit; +import refinedstorage.RefinedStorage; +import refinedstorage.api.network.INetworkMaster; +import refinedstorage.api.storage.IStorage; +import refinedstorage.api.storage.IStorageProvider; +import refinedstorage.container.ContainerStorage; +import refinedstorage.inventory.ItemHandlerBasic; +import refinedstorage.network.MessagePriorityUpdate; +import refinedstorage.tile.IStorageGui; +import refinedstorage.tile.TileNode; +import refinedstorage.tile.config.ICompareConfig; +import refinedstorage.tile.config.IModeConfig; +import refinedstorage.tile.config.IRedstoneModeConfig; +import refinedstorage.tile.config.ModeConstants; + +import java.util.ArrayList; +import java.util.List; + +public class TileExternalStorage extends TileNode implements IStorageProvider, IStorageGui, ICompareConfig, IModeConfig { + private static final String NBT_PRIORITY = "Priority"; + private static final String NBT_COMPARE = "Compare"; + private static final String NBT_MODE = "Mode"; + + private ItemHandlerBasic filters = new ItemHandlerBasic(9, this); + + private int priority = 0; + private int compare = 0; + private int mode = ModeConstants.WHITELIST; + + private int stored; + private int capacity; + + private List storages = new ArrayList(); + private int lastDrawerCount; + + @Override + public int getEnergyUsage() { + return RefinedStorage.INSTANCE.externalStorageUsage + (storages.size() * RefinedStorage.INSTANCE.externalStoragePerStorageUsage); + } + + @Override + public void updateNode() { + } + + @Override + public void onConnectionChange(INetworkMaster network, boolean state) { + super.onConnectionChange(network, state); + + updateStorage(network); + + network.getStorage().rebuild(); + } + + @Override + public void update() { + if (!worldObj.isRemote && network != null) { + if (ticks % (20 * 4) == 0) { + boolean shouldRebuild = false; + + for (ExternalStorage storage : storages) { + if (storage.updateCache()) { + shouldRebuild = true; + } + } + + if (shouldRebuild) { + network.getStorage().rebuild(); + } + } + + if (getFacingTile() instanceof IDrawerGroup && lastDrawerCount != ((IDrawerGroup) getFacingTile()).getDrawerCount()) { + lastDrawerCount = ((IDrawerGroup) getFacingTile()).getDrawerCount(); + + updateStorage(network); + } + } + + super.update(); + } + + @Override + public void writeContainerData(ByteBuf buf) { + super.writeContainerData(buf); + + buf.writeInt(priority); + buf.writeInt(getStored()); + buf.writeInt(getCapacity()); + buf.writeInt(compare); + buf.writeInt(mode); + } + + @Override + public void readContainerData(ByteBuf buf) { + super.readContainerData(buf); + + priority = buf.readInt(); + stored = buf.readInt(); + capacity = buf.readInt(); + compare = buf.readInt(); + mode = buf.readInt(); + } + + @Override + public Class getContainer() { + return ContainerStorage.class; + } + + @Override + public void read(NBTTagCompound tag) { + super.read(tag); + + readItems(filters, 0, tag); + + if (tag.hasKey(NBT_PRIORITY)) { + priority = tag.getInteger(NBT_PRIORITY); + } + + if (tag.hasKey(NBT_COMPARE)) { + compare = tag.getInteger(NBT_COMPARE); + } + + if (tag.hasKey(NBT_MODE)) { + mode = tag.getInteger(NBT_MODE); + } + } + + @Override + public NBTTagCompound write(NBTTagCompound tag) { + super.write(tag); + + writeItems(filters, 0, tag); + + tag.setInteger(NBT_PRIORITY, priority); + tag.setInteger(NBT_COMPARE, compare); + tag.setInteger(NBT_MODE, mode); + + return tag; + } + + @Override + public int getCompare() { + return compare; + } + + @Override + public void setCompare(int compare) { + this.compare = compare; + + markDirty(); + } + + @Override + public int getMode() { + return mode; + } + + @Override + public void setMode(int mode) { + this.mode = mode; + + markDirty(); + } + + @Override + public int getPriority() { + return priority; + } + + public void setPriority(int priority) { + this.priority = priority; + + markDirty(); + } + + public void updateStorage(INetworkMaster network) { + storages.clear(); + + TileEntity facing = getFacingTile(); + + if (facing instanceof IDrawerGroup) { + IDrawerGroup group = (IDrawerGroup) facing; + + for (int i = 0; i < group.getDrawerCount(); ++i) { + if (group.isDrawerEnabled(i)) { + storages.add(new DrawerStorage(this, group.getDrawer(i))); + } + } + } else if (facing instanceof IDrawer) { + storages.add(new DrawerStorage(this, (IDrawer) facing)); + } else if (facing instanceof IDeepStorageUnit) { + storages.add(new DeepStorageUnitStorage(this, (IDeepStorageUnit) facing)); + } else { + IItemHandler handler = getItemHandler(facing, getDirection().getOpposite()); + + if (handler != null) { + storages.add(new ItemHandlerStorage(this, handler)); + } + } + + network.getStorage().rebuild(); + } + + @Override + public void addStorages(List storages) { + storages.addAll(this.storages); + } + + @Override + public String getGuiTitle() { + return "gui.refinedstorage:external_storage"; + } + + @Override + public IRedstoneModeConfig getRedstoneModeConfig() { + return this; + } + + @Override + public ICompareConfig getCompareConfig() { + return this; + } + + @Override + public IModeConfig getModeConfig() { + return this; + } + + @Override + public int getStored() { + if (!worldObj.isRemote) { + int stored = 0; + + for (ExternalStorage storage : storages) { + stored += storage.getStored(); + } + + return stored; + } + + return stored; + } + + @Override + public int getCapacity() { + if (!worldObj.isRemote) { + int capacity = 0; + + for (ExternalStorage storage : storages) { + capacity += storage.getCapacity(); + } + + return capacity; + } + + return capacity; + } + + @Override + public void onPriorityChanged(int priority) { + RefinedStorage.INSTANCE.network.sendToServer(new MessagePriorityUpdate(pos, priority)); + } + + @Override + public IItemHandler getFilters() { + return filters; + } +} From d7e9d4f43b0b8ba087b02e21b87f6bf92ddee509 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Thu, 4 Aug 2016 02:23:29 +0200 Subject: [PATCH 088/214] Forgot to change mod id here --- src/main/java/refinedstorage/tile/TileController.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/refinedstorage/tile/TileController.java b/src/main/java/refinedstorage/tile/TileController.java index 0361627f2..4cef83c92 100755 --- a/src/main/java/refinedstorage/tile/TileController.java +++ b/src/main/java/refinedstorage/tile/TileController.java @@ -554,19 +554,19 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR return energy.getEnergyStored(); } - @Optional.Method(modid = "Tesla") + @Optional.Method(modid = "tesla") @Override public long getStoredPower() { return energy.getEnergyStored(); } - @Optional.Method(modid = "Tesla") + @Optional.Method(modid = "tesla") @Override public long getCapacity() { return energy.getMaxEnergyStored(); } - @Optional.Method(modid = "Tesla") + @Optional.Method(modid = "tesla") @Override public long givePower(long power, boolean simulated) { return energy.receiveEnergy((int) power, simulated); From 410e0ca1fe60b6cd26ed56e2a4868a088a51115d Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Thu, 4 Aug 2016 02:33:33 +0200 Subject: [PATCH 089/214] Improve Tesla integration --- .../java/refinedstorage/RefinedStorage.java | 5 -- .../java/refinedstorage/gui/grid/GuiGrid.java | 6 +- .../SideButtonGridSearchBoxMode.java | 4 +- ...ntroller.java => ControllerEnergyIC2.java} | 10 ++-- ...None.java => ControllerEnergyIC2None.java} | 2 +- ...troller.java => IControllerEnergyIC2.java} | 2 +- ...C2Integration.java => IntegrationIC2.java} | 2 +- ...EIIntegration.java => IntegrationJEI.java} | 4 +- .../tesla/ControllerEnergyTesla.java | 28 ++++++++++ .../integration/tesla/IntegrationTesla.java | 9 +++ .../tesla/WirelessGridEnergyTesla.java | 31 ++++++++++ .../refinedstorage/item/ItemWirelessGrid.java | 55 ++++++------------ .../refinedstorage/tile/TileController.java | 56 +++++++------------ 13 files changed, 118 insertions(+), 96 deletions(-) rename src/main/java/refinedstorage/integration/ic2/{IC2EnergyController.java => ControllerEnergyIC2.java} (64%) rename src/main/java/refinedstorage/integration/ic2/{IC2EnergyControllerNone.java => ControllerEnergyIC2None.java} (73%) rename src/main/java/refinedstorage/integration/ic2/{IIC2EnergyController.java => IControllerEnergyIC2.java} (73%) rename src/main/java/refinedstorage/integration/ic2/{IC2Integration.java => IntegrationIC2.java} (92%) rename src/main/java/refinedstorage/integration/jei/{JEIIntegration.java => IntegrationJEI.java} (92%) create mode 100755 src/main/java/refinedstorage/integration/tesla/ControllerEnergyTesla.java create mode 100755 src/main/java/refinedstorage/integration/tesla/IntegrationTesla.java create mode 100755 src/main/java/refinedstorage/integration/tesla/WirelessGridEnergyTesla.java diff --git a/src/main/java/refinedstorage/RefinedStorage.java b/src/main/java/refinedstorage/RefinedStorage.java index 7e37ff3d1..67c7ba9c6 100755 --- a/src/main/java/refinedstorage/RefinedStorage.java +++ b/src/main/java/refinedstorage/RefinedStorage.java @@ -4,7 +4,6 @@ import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraftforge.common.config.Configuration; -import net.minecraftforge.fml.common.Loader; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.common.Mod.EventHandler; import net.minecraftforge.fml.common.Mod.Instance; @@ -141,8 +140,4 @@ public final class RefinedStorage { public void postInit(FMLPostInitializationEvent e) { PROXY.postInit(e); } - - public static boolean hasTesla() { - return Loader.isModLoaded("tesla"); - } } diff --git a/src/main/java/refinedstorage/gui/grid/GuiGrid.java b/src/main/java/refinedstorage/gui/grid/GuiGrid.java index a0406643d..39b18c4aa 100755 --- a/src/main/java/refinedstorage/gui/grid/GuiGrid.java +++ b/src/main/java/refinedstorage/gui/grid/GuiGrid.java @@ -21,7 +21,7 @@ import refinedstorage.gui.Scrollbar; import refinedstorage.gui.grid.sorting.GridSortingName; import refinedstorage.gui.grid.sorting.GridSortingQuantity; import refinedstorage.gui.sidebutton.*; -import refinedstorage.integration.jei.JEIIntegration; +import refinedstorage.integration.jei.IntegrationJEI; import refinedstorage.network.MessageGridCraftingClear; import refinedstorage.network.MessageGridInsertHeld; import refinedstorage.network.MessageGridPatternCreate; @@ -394,8 +394,8 @@ public class GuiGrid extends GuiBase { } private void updateJEI() { - if (JEIIntegration.isLoaded() && (grid.getSearchBoxMode() == TileGrid.SEARCH_BOX_MODE_JEI_SYNCHRONIZED || grid.getSearchBoxMode() == TileGrid.SEARCH_BOX_MODE_JEI_SYNCHRONIZED_AUTOSELECTED)) { - JEIIntegration.INSTANCE.getRuntime().getItemListOverlay().setFilterText(searchField.getText()); + if (IntegrationJEI.isLoaded() && (grid.getSearchBoxMode() == TileGrid.SEARCH_BOX_MODE_JEI_SYNCHRONIZED || grid.getSearchBoxMode() == TileGrid.SEARCH_BOX_MODE_JEI_SYNCHRONIZED_AUTOSELECTED)) { + IntegrationJEI.INSTANCE.getRuntime().getItemListOverlay().setFilterText(searchField.getText()); } } diff --git a/src/main/java/refinedstorage/gui/sidebutton/SideButtonGridSearchBoxMode.java b/src/main/java/refinedstorage/gui/sidebutton/SideButtonGridSearchBoxMode.java index 0b376e4ae..7340b91d9 100755 --- a/src/main/java/refinedstorage/gui/sidebutton/SideButtonGridSearchBoxMode.java +++ b/src/main/java/refinedstorage/gui/sidebutton/SideButtonGridSearchBoxMode.java @@ -3,7 +3,7 @@ package refinedstorage.gui.sidebutton; import net.minecraft.util.text.TextFormatting; import refinedstorage.gui.GuiBase; import refinedstorage.gui.grid.GuiGrid; -import refinedstorage.integration.jei.JEIIntegration; +import refinedstorage.integration.jei.IntegrationJEI; import refinedstorage.tile.grid.TileGrid; public class SideButtonGridSearchBoxMode extends SideButton { @@ -31,7 +31,7 @@ public class SideButtonGridSearchBoxMode extends SideButton { if (mode == TileGrid.SEARCH_BOX_MODE_NORMAL) { mode = TileGrid.SEARCH_BOX_MODE_NORMAL_AUTOSELECTED; } else if (mode == TileGrid.SEARCH_BOX_MODE_NORMAL_AUTOSELECTED) { - if (JEIIntegration.isLoaded()) { + if (IntegrationJEI.isLoaded()) { mode = TileGrid.SEARCH_BOX_MODE_JEI_SYNCHRONIZED; } else { mode = TileGrid.SEARCH_BOX_MODE_NORMAL; diff --git a/src/main/java/refinedstorage/integration/ic2/IC2EnergyController.java b/src/main/java/refinedstorage/integration/ic2/ControllerEnergyIC2.java similarity index 64% rename from src/main/java/refinedstorage/integration/ic2/IC2EnergyController.java rename to src/main/java/refinedstorage/integration/ic2/ControllerEnergyIC2.java index adea9ef83..129b5af60 100755 --- a/src/main/java/refinedstorage/integration/ic2/IC2EnergyController.java +++ b/src/main/java/refinedstorage/integration/ic2/ControllerEnergyIC2.java @@ -4,19 +4,19 @@ import ic2.api.energy.prefab.BasicSink; import net.minecraft.util.EnumFacing; import refinedstorage.tile.TileController; -public class IC2EnergyController implements IIC2EnergyController { +public class ControllerEnergyIC2 implements IControllerEnergyIC2 { private BasicSink sink; - public IC2EnergyController(final TileController controller) { - this.sink = new BasicSink(controller, (int) IC2Integration.toEU(controller.getEnergy().getMaxEnergyStored()), Integer.MAX_VALUE) { + public ControllerEnergyIC2(final TileController controller) { + this.sink = new BasicSink(controller, (int) IntegrationIC2.toEU(controller.getEnergy().getMaxEnergyStored()), Integer.MAX_VALUE) { @Override public double getDemandedEnergy() { - return Math.max(0.0D, IC2Integration.toEU(controller.getEnergy().getMaxEnergyStored()) - IC2Integration.toEU(controller.getEnergy().getEnergyStored())); + return Math.max(0.0D, IntegrationIC2.toEU(controller.getEnergy().getMaxEnergyStored()) - IntegrationIC2.toEU(controller.getEnergy().getEnergyStored())); } @Override public double injectEnergy(EnumFacing directionFrom, double amount, double voltage) { - controller.getEnergy().setEnergyStored(controller.getEnergy().getEnergyStored() + IC2Integration.toRS(amount)); + controller.getEnergy().setEnergyStored(controller.getEnergy().getEnergyStored() + IntegrationIC2.toRS(amount)); return 0.0D; } diff --git a/src/main/java/refinedstorage/integration/ic2/IC2EnergyControllerNone.java b/src/main/java/refinedstorage/integration/ic2/ControllerEnergyIC2None.java similarity index 73% rename from src/main/java/refinedstorage/integration/ic2/IC2EnergyControllerNone.java rename to src/main/java/refinedstorage/integration/ic2/ControllerEnergyIC2None.java index d415ba09f..211f597e0 100755 --- a/src/main/java/refinedstorage/integration/ic2/IC2EnergyControllerNone.java +++ b/src/main/java/refinedstorage/integration/ic2/ControllerEnergyIC2None.java @@ -1,6 +1,6 @@ package refinedstorage.integration.ic2; -public class IC2EnergyControllerNone implements IIC2EnergyController { +public class ControllerEnergyIC2None implements IControllerEnergyIC2 { @Override public void invalidate() { } diff --git a/src/main/java/refinedstorage/integration/ic2/IIC2EnergyController.java b/src/main/java/refinedstorage/integration/ic2/IControllerEnergyIC2.java similarity index 73% rename from src/main/java/refinedstorage/integration/ic2/IIC2EnergyController.java rename to src/main/java/refinedstorage/integration/ic2/IControllerEnergyIC2.java index 1fb4e996e..3ef9d0761 100755 --- a/src/main/java/refinedstorage/integration/ic2/IIC2EnergyController.java +++ b/src/main/java/refinedstorage/integration/ic2/IControllerEnergyIC2.java @@ -1,6 +1,6 @@ package refinedstorage.integration.ic2; -public interface IIC2EnergyController { +public interface IControllerEnergyIC2 { void invalidate(); void update(); diff --git a/src/main/java/refinedstorage/integration/ic2/IC2Integration.java b/src/main/java/refinedstorage/integration/ic2/IntegrationIC2.java similarity index 92% rename from src/main/java/refinedstorage/integration/ic2/IC2Integration.java rename to src/main/java/refinedstorage/integration/ic2/IntegrationIC2.java index 6b83b1441..e41b656f4 100755 --- a/src/main/java/refinedstorage/integration/ic2/IC2Integration.java +++ b/src/main/java/refinedstorage/integration/ic2/IntegrationIC2.java @@ -2,7 +2,7 @@ package refinedstorage.integration.ic2; import net.minecraftforge.fml.common.Loader; -public final class IC2Integration { +public final class IntegrationIC2 { public static boolean isLoaded() { return Loader.isModLoaded("IC2"); } diff --git a/src/main/java/refinedstorage/integration/jei/JEIIntegration.java b/src/main/java/refinedstorage/integration/jei/IntegrationJEI.java similarity index 92% rename from src/main/java/refinedstorage/integration/jei/JEIIntegration.java rename to src/main/java/refinedstorage/integration/jei/IntegrationJEI.java index 62da17355..8dc68a29c 100755 --- a/src/main/java/refinedstorage/integration/jei/JEIIntegration.java +++ b/src/main/java/refinedstorage/integration/jei/IntegrationJEI.java @@ -9,8 +9,8 @@ import net.minecraftforge.fml.common.Loader; import refinedstorage.RefinedStorageBlocks; @JEIPlugin -public class JEIIntegration implements IModPlugin { - public static JEIIntegration INSTANCE; +public class IntegrationJEI implements IModPlugin { + public static IntegrationJEI INSTANCE; private IJeiRuntime runtime; diff --git a/src/main/java/refinedstorage/integration/tesla/ControllerEnergyTesla.java b/src/main/java/refinedstorage/integration/tesla/ControllerEnergyTesla.java new file mode 100755 index 000000000..578d96548 --- /dev/null +++ b/src/main/java/refinedstorage/integration/tesla/ControllerEnergyTesla.java @@ -0,0 +1,28 @@ +package refinedstorage.integration.tesla; + +import cofh.api.energy.EnergyStorage; +import net.darkhax.tesla.api.ITeslaConsumer; +import net.darkhax.tesla.api.ITeslaHolder; + +public class ControllerEnergyTesla implements ITeslaHolder, ITeslaConsumer { + private EnergyStorage energy; + + public ControllerEnergyTesla(EnergyStorage energy) { + this.energy = energy; + } + + @Override + public long givePower(long power, boolean simulated) { + return energy.receiveEnergy((int) power, simulated); + } + + @Override + public long getStoredPower() { + return energy.getEnergyStored(); + } + + @Override + public long getCapacity() { + return energy.getMaxEnergyStored(); + } +} diff --git a/src/main/java/refinedstorage/integration/tesla/IntegrationTesla.java b/src/main/java/refinedstorage/integration/tesla/IntegrationTesla.java new file mode 100755 index 000000000..5cee05796 --- /dev/null +++ b/src/main/java/refinedstorage/integration/tesla/IntegrationTesla.java @@ -0,0 +1,9 @@ +package refinedstorage.integration.tesla; + +import net.minecraftforge.fml.common.Loader; + +public final class IntegrationTesla { + public static boolean isLoaded() { + return Loader.isModLoaded("tesla"); + } +} diff --git a/src/main/java/refinedstorage/integration/tesla/WirelessGridEnergyTesla.java b/src/main/java/refinedstorage/integration/tesla/WirelessGridEnergyTesla.java new file mode 100755 index 000000000..9a469e7f2 --- /dev/null +++ b/src/main/java/refinedstorage/integration/tesla/WirelessGridEnergyTesla.java @@ -0,0 +1,31 @@ +package refinedstorage.integration.tesla; + +import net.darkhax.tesla.api.ITeslaConsumer; +import net.darkhax.tesla.api.ITeslaHolder; +import net.minecraft.item.ItemStack; +import refinedstorage.item.ItemWirelessGrid; + +public class WirelessGridEnergyTesla implements ITeslaHolder, ITeslaConsumer { + private ItemWirelessGrid wirelessGrid; + private ItemStack stack; + + public WirelessGridEnergyTesla(ItemWirelessGrid wirelessGrid, ItemStack stack) { + this.wirelessGrid = wirelessGrid; + this.stack = stack; + } + + @Override + public long getStoredPower() { + return wirelessGrid.getEnergyStored(stack); + } + + @Override + public long getCapacity() { + return wirelessGrid.getMaxEnergyStored(stack); + } + + @Override + public long givePower(long power, boolean simulated) { + return wirelessGrid.receiveEnergy(stack, (int) power, simulated); + } +} diff --git a/src/main/java/refinedstorage/item/ItemWirelessGrid.java b/src/main/java/refinedstorage/item/ItemWirelessGrid.java index 89348caab..fa1db8e04 100755 --- a/src/main/java/refinedstorage/item/ItemWirelessGrid.java +++ b/src/main/java/refinedstorage/item/ItemWirelessGrid.java @@ -3,8 +3,6 @@ package refinedstorage.item; import cofh.api.energy.ItemEnergyContainer; import ic2.api.item.IElectricItemManager; import ic2.api.item.ISpecialElectricItem; -import net.darkhax.tesla.api.ITeslaConsumer; -import net.darkhax.tesla.api.ITeslaHolder; import net.darkhax.tesla.capability.TeslaCapabilities; import net.minecraft.block.Block; import net.minecraft.client.resources.I18n; @@ -25,7 +23,9 @@ import net.minecraftforge.common.capabilities.ICapabilityProvider; import net.minecraftforge.fml.common.Optional; import refinedstorage.RefinedStorage; import refinedstorage.RefinedStorageBlocks; -import refinedstorage.integration.ic2.IC2Integration; +import refinedstorage.integration.ic2.IntegrationIC2; +import refinedstorage.integration.tesla.IntegrationTesla; +import refinedstorage.integration.tesla.WirelessGridEnergyTesla; import refinedstorage.tile.TileController; import refinedstorage.tile.grid.TileGrid; @@ -51,7 +51,7 @@ public class ItemWirelessGrid extends ItemEnergyContainer implements ISpecialEle addPropertyOverride(new ResourceLocation("connected"), new IItemPropertyGetter() { @Override public float apply(ItemStack stack, World world, EntityLivingBase entity) { - return (entity != null && hasValidNBT(stack) && getDimensionId(stack) == entity.dimension) ? 1.0f : 0.0f; + return (entity != null && isValid(stack) && getDimensionId(stack) == entity.dimension) ? 1.0f : 0.0f; } }); @@ -79,7 +79,7 @@ public class ItemWirelessGrid extends ItemEnergyContainer implements ISpecialEle @Override public double getDurabilityForDisplay(ItemStack stack) { - return 1d - ((double) getEnergyStored(stack) / (double) getMaxEnergyStored(stack)); + return 1D - ((double) getEnergyStored(stack) / (double) getMaxEnergyStored(stack)); } @Override @@ -109,7 +109,7 @@ public class ItemWirelessGrid extends ItemEnergyContainer implements ISpecialEle tooltip.add(I18n.format("misc.refinedstorage:energy_stored", getEnergyStored(stack), getMaxEnergyStored(stack))); } - if (hasValidNBT(stack)) { + if (isValid(stack)) { tooltip.add(I18n.format("misc.refinedstorage:wireless_grid.tooltip", getX(stack), getY(stack), getZ(stack))); } } @@ -144,7 +144,7 @@ public class ItemWirelessGrid extends ItemEnergyContainer implements ISpecialEle @Override public ActionResult onItemRightClick(ItemStack stack, World world, EntityPlayer player, EnumHand hand) { - if (!world.isRemote && hasValidNBT(stack) && getDimensionId(stack) == player.dimension) { + if (!world.isRemote && isValid(stack) && getDimensionId(stack) == player.dimension) { TileEntity tile = world.getTileEntity(new BlockPos(getX(stack), getY(stack), getZ(stack))); if (tile instanceof TileController) { @@ -193,7 +193,7 @@ public class ItemWirelessGrid extends ItemEnergyContainer implements ISpecialEle return stack.getTagCompound().getInteger(TileGrid.NBT_SEARCH_BOX_MODE); } - private static boolean hasValidNBT(ItemStack stack) { + private static boolean isValid(ItemStack stack) { return stack.hasTagCompound() && stack.getTagCompound().hasKey(NBT_CONTROLLER_X) && stack.getTagCompound().hasKey(NBT_CONTROLLER_Y) @@ -208,7 +208,7 @@ public class ItemWirelessGrid extends ItemEnergyContainer implements ISpecialEle @Override public boolean shouldCauseReequipAnimation(ItemStack oldStack, ItemStack newStack, boolean slotChanged) { if (oldStack.getItem() == newStack.getItem()) { - if (hasValidNBT(oldStack) && hasValidNBT(newStack)) { + if (isValid(oldStack) && isValid(newStack)) { if (getX(oldStack) == getX(newStack) && getY(oldStack) == getY(newStack) && getZ(oldStack) == getZ(newStack) && getDimensionId(oldStack) == getDimensionId(newStack)) { return false; } @@ -237,25 +237,25 @@ public class ItemWirelessGrid extends ItemEnergyContainer implements ISpecialEle @Optional.Method(modid = "IC2") @Override public double charge(ItemStack stack, double amount, int tier, boolean ignoreTransferLimit, boolean simulate) { - return IC2Integration.toEU(receiveEnergy(stack, IC2Integration.toRS(amount), simulate)); + return IntegrationIC2.toEU(receiveEnergy(stack, IntegrationIC2.toRS(amount), simulate)); } @Optional.Method(modid = "IC2") @Override public double discharge(ItemStack stack, double amount, int tier, boolean ignoreTransferLimit, boolean externally, boolean simulate) { - return IC2Integration.toEU(extractEnergy(stack, IC2Integration.toRS(amount), simulate)); + return IntegrationIC2.toEU(extractEnergy(stack, IntegrationIC2.toRS(amount), simulate)); } @Optional.Method(modid = "IC2") @Override public double getCharge(ItemStack stack) { - return IC2Integration.toEU(getEnergyStored(stack)); + return IntegrationIC2.toEU(getEnergyStored(stack)); } @Optional.Method(modid = "IC2") @Override public double getMaxCharge(ItemStack stack) { - return IC2Integration.toEU(getMaxEnergyStored(stack)); + return IntegrationIC2.toEU(getMaxEnergyStored(stack)); } @Optional.Method(modid = "IC2") @@ -288,29 +288,6 @@ public class ItemWirelessGrid extends ItemEnergyContainer implements ISpecialEle return Integer.MAX_VALUE; } - class TeslaEnergy implements ITeslaHolder, ITeslaConsumer { - private ItemStack stack; - - public TeslaEnergy(ItemStack stack) { - this.stack = stack; - } - - @Override - public long getStoredPower() { - return getEnergyStored(stack); - } - - @Override - public long getCapacity() { - return getMaxEnergyStored(stack); - } - - @Override - public long givePower(long power, boolean simulated) { - return receiveEnergy(stack, (int) power, simulated); - } - } - class WirelessGridCapabilityProvider implements ICapabilityProvider { private ItemStack stack; @@ -320,13 +297,13 @@ public class ItemWirelessGrid extends ItemEnergyContainer implements ISpecialEle @Override public boolean hasCapability(Capability capability, @Nullable EnumFacing facing) { - return RefinedStorage.hasTesla() && (capability == TeslaCapabilities.CAPABILITY_HOLDER || capability == TeslaCapabilities.CAPABILITY_CONSUMER); + return IntegrationTesla.isLoaded() && (capability == TeslaCapabilities.CAPABILITY_HOLDER || capability == TeslaCapabilities.CAPABILITY_CONSUMER); } @Override public T getCapability(Capability capability, @Nullable EnumFacing facing) { - if (RefinedStorage.hasTesla() && (capability == TeslaCapabilities.CAPABILITY_HOLDER || capability == TeslaCapabilities.CAPABILITY_CONSUMER)) { - return (T) new TeslaEnergy(stack); + if (IntegrationTesla.isLoaded() && (capability == TeslaCapabilities.CAPABILITY_HOLDER || capability == TeslaCapabilities.CAPABILITY_CONSUMER)) { + return (T) new WirelessGridEnergyTesla(ItemWirelessGrid.this, stack); } return null; diff --git a/src/main/java/refinedstorage/tile/TileController.java b/src/main/java/refinedstorage/tile/TileController.java index 4cef83c92..d6fcf6229 100755 --- a/src/main/java/refinedstorage/tile/TileController.java +++ b/src/main/java/refinedstorage/tile/TileController.java @@ -3,8 +3,6 @@ package refinedstorage.tile; import cofh.api.energy.EnergyStorage; import cofh.api.energy.IEnergyReceiver; import io.netty.buffer.ByteBuf; -import net.darkhax.tesla.api.ITeslaConsumer; -import net.darkhax.tesla.api.ITeslaHolder; import net.darkhax.tesla.capability.TeslaCapabilities; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.player.EntityPlayer; @@ -17,7 +15,6 @@ import net.minecraft.util.EnumFacing; import net.minecraft.util.math.BlockPos; import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.common.util.Constants; -import net.minecraftforge.fml.common.Optional; import net.minecraftforge.fml.common.network.ByteBufUtils; import net.minecraftforge.items.ItemHandlerHelper; import refinedstorage.RefinedStorage; @@ -40,10 +37,12 @@ import refinedstorage.block.BlockController; import refinedstorage.block.EnumControllerType; import refinedstorage.container.ContainerController; import refinedstorage.container.ContainerGrid; -import refinedstorage.integration.ic2.IC2EnergyController; -import refinedstorage.integration.ic2.IC2EnergyControllerNone; -import refinedstorage.integration.ic2.IC2Integration; -import refinedstorage.integration.ic2.IIC2EnergyController; +import refinedstorage.integration.ic2.ControllerEnergyIC2; +import refinedstorage.integration.ic2.ControllerEnergyIC2None; +import refinedstorage.integration.ic2.IControllerEnergyIC2; +import refinedstorage.integration.ic2.IntegrationIC2; +import refinedstorage.integration.tesla.ControllerEnergyTesla; +import refinedstorage.integration.tesla.IntegrationTesla; import refinedstorage.item.ItemPattern; import refinedstorage.network.MessageGridDelta; import refinedstorage.network.MessageGridUpdate; @@ -53,11 +52,7 @@ import refinedstorage.tile.externalstorage.ExternalStorage; import java.util.*; -@Optional.InterfaceList({ - @Optional.Interface(iface = "net.darkhax.tesla.api.ITeslaConsumer", modid = "tesla"), - @Optional.Interface(iface = "net.darkhax.tesla.api.ITeslaHolder", modid = "tesla") -}) -public class TileController extends TileBase implements INetworkMaster, IEnergyReceiver, ITeslaHolder, ITeslaConsumer, ISynchronizedContainer, IRedstoneModeConfig { +public class TileController extends TileBase implements INetworkMaster, IEnergyReceiver, ISynchronizedContainer, IRedstoneModeConfig { public static final String NBT_ENERGY = "Energy"; public static final String NBT_ENERGY_CAPACITY = "EnergyCapacity"; @@ -99,7 +94,8 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR private List craftingTasksToCancel = new ArrayList(); private EnergyStorage energy = new EnergyStorage(RefinedStorage.INSTANCE.controllerCapacity); - private IIC2EnergyController energyEU; + private IControllerEnergyIC2 energyEU; + private ControllerEnergyTesla energyTesla; private int energyUsage; private int lastEnergyDisplay; @@ -114,10 +110,14 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR private List clientNodes = new ArrayList(); public TileController() { - if (IC2Integration.isLoaded()) { - this.energyEU = new IC2EnergyController(this); + if (IntegrationIC2.isLoaded()) { + this.energyEU = new ControllerEnergyIC2(this); } else { - this.energyEU = new IC2EnergyControllerNone(); + this.energyEU = new ControllerEnergyIC2None(); + } + + if (IntegrationTesla.isLoaded()) { + this.energyTesla = new ControllerEnergyTesla(energy); } } @@ -554,24 +554,6 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR return energy.getEnergyStored(); } - @Optional.Method(modid = "tesla") - @Override - public long getStoredPower() { - return energy.getEnergyStored(); - } - - @Optional.Method(modid = "tesla") - @Override - public long getCapacity() { - return energy.getMaxEnergyStored(); - } - - @Optional.Method(modid = "tesla") - @Override - public long givePower(long power, boolean simulated) { - return energy.receiveEnergy((int) power, simulated); - } - public int getEnergyScaled(int i) { return (int) ((float) energy.getEnergyStored() / (float) energy.getMaxEnergyStored() * (float) i); } @@ -705,8 +687,8 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR @Override public T getCapability(Capability capability, EnumFacing facing) { - if (RefinedStorage.hasTesla() && (capability == TeslaCapabilities.CAPABILITY_HOLDER || capability == TeslaCapabilities.CAPABILITY_CONSUMER)) { - return (T) this; + if (energyTesla != null && (capability == TeslaCapabilities.CAPABILITY_HOLDER || capability == TeslaCapabilities.CAPABILITY_CONSUMER)) { + return (T) energyTesla; } return super.getCapability(capability, facing); @@ -714,7 +696,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR @Override public boolean hasCapability(Capability capability, EnumFacing facing) { - return (RefinedStorage.hasTesla() && (capability == TeslaCapabilities.CAPABILITY_HOLDER || capability == TeslaCapabilities.CAPABILITY_CONSUMER)) || super.hasCapability(capability, facing); + return (energyTesla != null && (capability == TeslaCapabilities.CAPABILITY_HOLDER || capability == TeslaCapabilities.CAPABILITY_CONSUMER)) || super.hasCapability(capability, facing); } public class ClientNode { From 25588300b010345f1907c81ed0cea0bad1eabb74 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Thu, 4 Aug 2016 02:37:12 +0200 Subject: [PATCH 090/214] Renames --- .../integration/jei/IntegrationJEI.java | 8 ++--- ...egory.java => RecipeCategorySolderer.java} | 6 ++-- .../jei/RecipeHandlerSolderer.java | 34 +++++++++++++++++++ ...ipeMaker.java => RecipeMakerSolderer.java} | 8 ++--- ...rapper.java => RecipeWrapperSolderer.java} | 8 ++--- .../jei/SoldererRecipeHandler.java | 34 ------------------- 6 files changed, 49 insertions(+), 49 deletions(-) rename src/main/java/refinedstorage/integration/jei/{SoldererRecipeCategory.java => RecipeCategorySolderer.java} (90%) create mode 100755 src/main/java/refinedstorage/integration/jei/RecipeHandlerSolderer.java rename src/main/java/refinedstorage/integration/jei/{SoldererRecipeMaker.java => RecipeMakerSolderer.java} (70%) rename src/main/java/refinedstorage/integration/jei/{SoldererRecipeWrapper.java => RecipeWrapperSolderer.java} (79%) delete mode 100755 src/main/java/refinedstorage/integration/jei/SoldererRecipeHandler.java diff --git a/src/main/java/refinedstorage/integration/jei/IntegrationJEI.java b/src/main/java/refinedstorage/integration/jei/IntegrationJEI.java index 8dc68a29c..88a7f7b35 100755 --- a/src/main/java/refinedstorage/integration/jei/IntegrationJEI.java +++ b/src/main/java/refinedstorage/integration/jei/IntegrationJEI.java @@ -20,13 +20,13 @@ public class IntegrationJEI implements IModPlugin { registry.getRecipeTransferRegistry().addRecipeTransferHandler(new RecipeTransferHandlerGrid()); - registry.addRecipeCategories(new SoldererRecipeCategory(registry.getJeiHelpers().getGuiHelper())); + registry.addRecipeCategories(new RecipeCategorySolderer(registry.getJeiHelpers().getGuiHelper())); - registry.addRecipeHandlers(new SoldererRecipeHandler()); + registry.addRecipeHandlers(new RecipeHandlerSolderer()); - registry.addRecipes(SoldererRecipeMaker.getRecipes()); + registry.addRecipes(RecipeMakerSolderer.getRecipes()); - registry.addRecipeCategoryCraftingItem(new ItemStack(RefinedStorageBlocks.SOLDERER), SoldererRecipeCategory.ID); + registry.addRecipeCategoryCraftingItem(new ItemStack(RefinedStorageBlocks.SOLDERER), RecipeCategorySolderer.ID); } @Override diff --git a/src/main/java/refinedstorage/integration/jei/SoldererRecipeCategory.java b/src/main/java/refinedstorage/integration/jei/RecipeCategorySolderer.java similarity index 90% rename from src/main/java/refinedstorage/integration/jei/SoldererRecipeCategory.java rename to src/main/java/refinedstorage/integration/jei/RecipeCategorySolderer.java index 077621927..6682cf506 100755 --- a/src/main/java/refinedstorage/integration/jei/SoldererRecipeCategory.java +++ b/src/main/java/refinedstorage/integration/jei/RecipeCategorySolderer.java @@ -11,12 +11,12 @@ import net.minecraft.client.resources.I18n; import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; -public class SoldererRecipeCategory implements IRecipeCategory { +public class RecipeCategorySolderer implements IRecipeCategory { public static final String ID = "refinedstorage.solderer"; private IDrawable background; - public SoldererRecipeCategory(IGuiHelper helper) { + public RecipeCategorySolderer(IGuiHelper helper) { background = helper.createDrawable(new ResourceLocation("refinedstorage", "textures/gui/solderer.png"), 8, 5, 162, 83); } @@ -58,7 +58,7 @@ public class SoldererRecipeCategory implements IRecipeCategory { group.init(3, false, 127 - 9, 38 - 6); - if (recipeWrapper instanceof SoldererRecipeWrapper) { + if (recipeWrapper instanceof RecipeWrapperSolderer) { for (int i = 0; i < 3; ++i) { group.set(i, (ItemStack) recipeWrapper.getInputs().get(i)); } diff --git a/src/main/java/refinedstorage/integration/jei/RecipeHandlerSolderer.java b/src/main/java/refinedstorage/integration/jei/RecipeHandlerSolderer.java new file mode 100755 index 000000000..95b511da2 --- /dev/null +++ b/src/main/java/refinedstorage/integration/jei/RecipeHandlerSolderer.java @@ -0,0 +1,34 @@ +package refinedstorage.integration.jei; + +import mezz.jei.api.recipe.IRecipeHandler; +import mezz.jei.api.recipe.IRecipeWrapper; + +import javax.annotation.Nonnull; + +public class RecipeHandlerSolderer implements IRecipeHandler { + @Override + public Class getRecipeClass() { + return RecipeWrapperSolderer.class; + } + + @Override + public String getRecipeCategoryUid() { + return RecipeCategorySolderer.ID; + } + + @Nonnull + @Override + public String getRecipeCategoryUid(@Nonnull RecipeWrapperSolderer recipe) { + return RecipeCategorySolderer.ID; + } + + @Override + public IRecipeWrapper getRecipeWrapper(RecipeWrapperSolderer recipe) { + return recipe; + } + + @Override + public boolean isRecipeValid(RecipeWrapperSolderer recipe) { + return true; + } +} diff --git a/src/main/java/refinedstorage/integration/jei/SoldererRecipeMaker.java b/src/main/java/refinedstorage/integration/jei/RecipeMakerSolderer.java similarity index 70% rename from src/main/java/refinedstorage/integration/jei/SoldererRecipeMaker.java rename to src/main/java/refinedstorage/integration/jei/RecipeMakerSolderer.java index 0fbcc01fa..769458340 100755 --- a/src/main/java/refinedstorage/integration/jei/SoldererRecipeMaker.java +++ b/src/main/java/refinedstorage/integration/jei/RecipeMakerSolderer.java @@ -7,9 +7,9 @@ import refinedstorage.api.solderer.ISoldererRecipe; import java.util.ArrayList; import java.util.List; -public class SoldererRecipeMaker { - public static List getRecipes() { - List recipes = new ArrayList(); +public final class RecipeMakerSolderer { + public static List getRecipes() { + List recipes = new ArrayList(); for (ISoldererRecipe recipe : RefinedStorageAPI.SOLDERER_REGISTRY.getRecipes()) { List inputs = new ArrayList(); @@ -20,7 +20,7 @@ public class SoldererRecipeMaker { ItemStack output = recipe.getResult(); - recipes.add(new SoldererRecipeWrapper(inputs, output)); + recipes.add(new RecipeWrapperSolderer(inputs, output)); } return recipes; diff --git a/src/main/java/refinedstorage/integration/jei/SoldererRecipeWrapper.java b/src/main/java/refinedstorage/integration/jei/RecipeWrapperSolderer.java similarity index 79% rename from src/main/java/refinedstorage/integration/jei/SoldererRecipeWrapper.java rename to src/main/java/refinedstorage/integration/jei/RecipeWrapperSolderer.java index 57988bb4e..ff649757f 100755 --- a/src/main/java/refinedstorage/integration/jei/SoldererRecipeWrapper.java +++ b/src/main/java/refinedstorage/integration/jei/RecipeWrapperSolderer.java @@ -6,11 +6,11 @@ import net.minecraft.item.ItemStack; import java.util.Collections; import java.util.List; -public class SoldererRecipeWrapper extends VanillaRecipeWrapper { +public class RecipeWrapperSolderer extends VanillaRecipeWrapper { private List inputs; private ItemStack output; - public SoldererRecipeWrapper(List inputs, ItemStack output) { + public RecipeWrapperSolderer(List inputs, ItemStack output) { this.inputs = inputs; this.output = output; } @@ -27,11 +27,11 @@ public class SoldererRecipeWrapper extends VanillaRecipeWrapper { @Override public boolean equals(Object obj) { - if (!(obj instanceof SoldererRecipeWrapper)) { + if (!(obj instanceof RecipeWrapperSolderer)) { return false; } - SoldererRecipeWrapper other = (SoldererRecipeWrapper) obj; + RecipeWrapperSolderer other = (RecipeWrapperSolderer) obj; for (int i = 0; i < inputs.size(); i++) { if (!ItemStack.areItemStacksEqual(inputs.get(i), other.inputs.get(i))) { diff --git a/src/main/java/refinedstorage/integration/jei/SoldererRecipeHandler.java b/src/main/java/refinedstorage/integration/jei/SoldererRecipeHandler.java deleted file mode 100755 index cee9fd08e..000000000 --- a/src/main/java/refinedstorage/integration/jei/SoldererRecipeHandler.java +++ /dev/null @@ -1,34 +0,0 @@ -package refinedstorage.integration.jei; - -import mezz.jei.api.recipe.IRecipeHandler; -import mezz.jei.api.recipe.IRecipeWrapper; - -import javax.annotation.Nonnull; - -public class SoldererRecipeHandler implements IRecipeHandler { - @Override - public Class getRecipeClass() { - return SoldererRecipeWrapper.class; - } - - @Override - public String getRecipeCategoryUid() { - return SoldererRecipeCategory.ID; - } - - @Nonnull - @Override - public String getRecipeCategoryUid(@Nonnull SoldererRecipeWrapper recipe) { - return SoldererRecipeCategory.ID; - } - - @Override - public IRecipeWrapper getRecipeWrapper(SoldererRecipeWrapper recipe) { - return recipe; - } - - @Override - public boolean isRecipeValid(SoldererRecipeWrapper recipe) { - return true; - } -} From 825eaed97575842dd1c303a568e9e162921626ea Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Fri, 5 Aug 2016 11:38:04 +0200 Subject: [PATCH 091/214] Import new GUI sync framework and make sure the code can use it --- .../container/ContainerBase.java | 9 +- .../container/ContainerConstructor.java | 4 +- .../container/ContainerController.java | 5 +- .../container/ContainerCrafter.java | 4 +- .../container/ContainerCraftingMonitor.java | 5 +- .../container/ContainerCraftingSettings.java | 2 +- .../container/ContainerDestructor.java | 4 +- .../container/ContainerDetector.java | 4 +- .../container/ContainerDiskDrive.java | 4 +- .../container/ContainerExporter.java | 4 +- .../container/ContainerGrid.java | 5 +- .../container/ContainerGridFilter.java | 2 +- .../container/ContainerImporter.java | 4 +- .../container/ContainerInterface.java | 4 +- .../ContainerNetworkTransmitter.java | 5 +- .../ContainerProcessingPatternEncoder.java | 4 +- .../container/ContainerRelay.java | 5 +- .../container/ContainerSolderer.java | 4 +- .../container/ContainerStorage.java | 9 +- .../ContainerWirelessTransmitter.java | 4 +- .../java/refinedstorage/gui/GuiHandler.java | 40 ++++---- .../network/MessageTileDataParameter.java | 51 ++++++++++ .../MessageTileDataParameterUpdate.java | 60 ++++++++++++ .../refinedstorage/proxy/CommonProxy.java | 6 ++ .../java/refinedstorage/tile/TileBase.java | 6 ++ .../tile/data/ContainerListener.java | 23 +++++ .../tile/data/ITileDataConsumer.java | 7 ++ .../tile/data/ITileDataProducer.java | 7 ++ .../tile/data/TileDataManager.java | 98 +++++++++++++++++++ .../tile/data/TileDataParameter.java | 42 ++++++++ 30 files changed, 372 insertions(+), 59 deletions(-) create mode 100755 src/main/java/refinedstorage/network/MessageTileDataParameter.java create mode 100755 src/main/java/refinedstorage/network/MessageTileDataParameterUpdate.java create mode 100755 src/main/java/refinedstorage/tile/data/ContainerListener.java create mode 100755 src/main/java/refinedstorage/tile/data/ITileDataConsumer.java create mode 100755 src/main/java/refinedstorage/tile/data/ITileDataProducer.java create mode 100755 src/main/java/refinedstorage/tile/data/TileDataManager.java create mode 100755 src/main/java/refinedstorage/tile/data/TileDataParameter.java diff --git a/src/main/java/refinedstorage/container/ContainerBase.java b/src/main/java/refinedstorage/container/ContainerBase.java index 830c93a15..c7ef765b3 100755 --- a/src/main/java/refinedstorage/container/ContainerBase.java +++ b/src/main/java/refinedstorage/container/ContainerBase.java @@ -10,12 +10,15 @@ import refinedstorage.api.storage.CompareUtils; import refinedstorage.container.slot.SlotDisabled; import refinedstorage.container.slot.SlotSpecimen; import refinedstorage.container.slot.SlotSpecimenLegacy; +import refinedstorage.tile.TileBase; import refinedstorage.tile.grid.WirelessGrid; public abstract class ContainerBase extends Container { + private TileBase tile; private EntityPlayer player; - public ContainerBase(EntityPlayer player) { + public ContainerBase(TileBase tile, EntityPlayer player) { + this.tile = tile; this.player = player; } @@ -23,6 +26,10 @@ public abstract class ContainerBase extends Container { return player; } + public TileBase getTile() { + return tile; + } + protected void addPlayerInventory(int xInventory, int yInventory) { int id = 0; diff --git a/src/main/java/refinedstorage/container/ContainerConstructor.java b/src/main/java/refinedstorage/container/ContainerConstructor.java index 18e8fd7fd..562fa6c0b 100755 --- a/src/main/java/refinedstorage/container/ContainerConstructor.java +++ b/src/main/java/refinedstorage/container/ContainerConstructor.java @@ -8,8 +8,8 @@ import refinedstorage.container.slot.SlotSpecimen; import refinedstorage.tile.TileConstructor; public class ContainerConstructor extends ContainerBase { - public ContainerConstructor(EntityPlayer player, TileConstructor constructor) { - super(player); + public ContainerConstructor(TileConstructor constructor, EntityPlayer player) { + super(constructor, player); for (int i = 0; i < 4; ++i) { addSlotToContainer(new SlotItemHandler(constructor.getUpgrades(), i, 187, 6 + (i * 18))); diff --git a/src/main/java/refinedstorage/container/ContainerController.java b/src/main/java/refinedstorage/container/ContainerController.java index 79b385d7b..e3595e993 100755 --- a/src/main/java/refinedstorage/container/ContainerController.java +++ b/src/main/java/refinedstorage/container/ContainerController.java @@ -1,10 +1,11 @@ package refinedstorage.container; import net.minecraft.entity.player.EntityPlayer; +import refinedstorage.tile.TileController; public class ContainerController extends ContainerBase { - public ContainerController(EntityPlayer player) { - super(player); + public ContainerController(TileController controller, EntityPlayer player) { + super(controller, player); addPlayerInventory(8, 99); } diff --git a/src/main/java/refinedstorage/container/ContainerCrafter.java b/src/main/java/refinedstorage/container/ContainerCrafter.java index f46c54dfb..0528c74f6 100755 --- a/src/main/java/refinedstorage/container/ContainerCrafter.java +++ b/src/main/java/refinedstorage/container/ContainerCrafter.java @@ -7,8 +7,8 @@ import net.minecraftforge.items.SlotItemHandler; import refinedstorage.tile.TileCrafter; public class ContainerCrafter extends ContainerStorage { - public ContainerCrafter(EntityPlayer player, TileCrafter crafter) { - super(player); + public ContainerCrafter(TileCrafter crafter, EntityPlayer player) { + super(crafter, player); for (int i = 0; i < 9; ++i) { addSlotToContainer(new SlotItemHandler(crafter.getPatterns(), i, 8 + (18 * i), 20)); diff --git a/src/main/java/refinedstorage/container/ContainerCraftingMonitor.java b/src/main/java/refinedstorage/container/ContainerCraftingMonitor.java index b39a7f9e5..e49888b50 100755 --- a/src/main/java/refinedstorage/container/ContainerCraftingMonitor.java +++ b/src/main/java/refinedstorage/container/ContainerCraftingMonitor.java @@ -1,10 +1,11 @@ package refinedstorage.container; import net.minecraft.entity.player.EntityPlayer; +import refinedstorage.tile.TileCraftingMonitor; public class ContainerCraftingMonitor extends ContainerBase { - public ContainerCraftingMonitor(EntityPlayer player) { - super(player); + public ContainerCraftingMonitor(TileCraftingMonitor craftingMonitor, EntityPlayer player) { + super(craftingMonitor, player); addPlayerInventory(8, 148); } diff --git a/src/main/java/refinedstorage/container/ContainerCraftingSettings.java b/src/main/java/refinedstorage/container/ContainerCraftingSettings.java index f2296d648..ff39fff7a 100755 --- a/src/main/java/refinedstorage/container/ContainerCraftingSettings.java +++ b/src/main/java/refinedstorage/container/ContainerCraftingSettings.java @@ -11,7 +11,7 @@ import javax.annotation.Nullable; public class ContainerCraftingSettings extends ContainerBase { public ContainerCraftingSettings(EntityPlayer player, final ItemStack stack) { - super(player); + super(null, player); final ItemStack slot = ItemHandlerHelper.copyStackWithSize(stack, 1); diff --git a/src/main/java/refinedstorage/container/ContainerDestructor.java b/src/main/java/refinedstorage/container/ContainerDestructor.java index 7e29698bd..5fc656d9a 100755 --- a/src/main/java/refinedstorage/container/ContainerDestructor.java +++ b/src/main/java/refinedstorage/container/ContainerDestructor.java @@ -8,8 +8,8 @@ import refinedstorage.container.slot.SlotSpecimen; import refinedstorage.tile.TileDestructor; public class ContainerDestructor extends ContainerBase { - public ContainerDestructor(EntityPlayer player, TileDestructor destructor) { - super(player); + public ContainerDestructor(TileDestructor destructor, EntityPlayer player) { + super(destructor, player); for (int i = 0; i < 4; ++i) { addSlotToContainer(new SlotItemHandler(destructor.getUpgrades(), i, 187, 6 + (i * 18))); diff --git a/src/main/java/refinedstorage/container/ContainerDetector.java b/src/main/java/refinedstorage/container/ContainerDetector.java index 2ca8c0e6a..a8059bd2c 100755 --- a/src/main/java/refinedstorage/container/ContainerDetector.java +++ b/src/main/java/refinedstorage/container/ContainerDetector.java @@ -7,8 +7,8 @@ import refinedstorage.container.slot.SlotSpecimen; import refinedstorage.tile.TileDetector; public class ContainerDetector extends ContainerBase { - public ContainerDetector(EntityPlayer player, TileDetector detector) { - super(player); + public ContainerDetector(TileDetector detector, EntityPlayer player) { + super(detector, player); addSlotToContainer(new SlotSpecimen(detector.getInventory(), 0, 107, 20)); diff --git a/src/main/java/refinedstorage/container/ContainerDiskDrive.java b/src/main/java/refinedstorage/container/ContainerDiskDrive.java index e3e421cb5..3319de5ab 100755 --- a/src/main/java/refinedstorage/container/ContainerDiskDrive.java +++ b/src/main/java/refinedstorage/container/ContainerDiskDrive.java @@ -7,8 +7,8 @@ import net.minecraftforge.items.SlotItemHandler; import refinedstorage.tile.TileDiskDrive; public class ContainerDiskDrive extends ContainerStorage { - public ContainerDiskDrive(EntityPlayer player, TileDiskDrive drive) { - super(player); + public ContainerDiskDrive(TileDiskDrive drive, EntityPlayer player) { + super(drive, player); for (int i = 0; i < 4; ++i) { addSlotToContainer(new SlotItemHandler(drive.getDisks(), i, 98 + (i * 18), 78)); diff --git a/src/main/java/refinedstorage/container/ContainerExporter.java b/src/main/java/refinedstorage/container/ContainerExporter.java index 5f90598c8..a413e9985 100755 --- a/src/main/java/refinedstorage/container/ContainerExporter.java +++ b/src/main/java/refinedstorage/container/ContainerExporter.java @@ -8,8 +8,8 @@ import refinedstorage.container.slot.SlotSpecimen; import refinedstorage.tile.TileExporter; public class ContainerExporter extends ContainerBase { - public ContainerExporter(EntityPlayer player, TileExporter exporter) { - super(player); + public ContainerExporter(TileExporter exporter, EntityPlayer player) { + super(exporter, player); for (int i = 0; i < 4; ++i) { addSlotToContainer(new SlotItemHandler(exporter.getUpgrades(), i, 187, 6 + (i * 18))); diff --git a/src/main/java/refinedstorage/container/ContainerGrid.java b/src/main/java/refinedstorage/container/ContainerGrid.java index a893a0919..c1aae68a4 100755 --- a/src/main/java/refinedstorage/container/ContainerGrid.java +++ b/src/main/java/refinedstorage/container/ContainerGrid.java @@ -6,6 +6,7 @@ import net.minecraft.item.ItemStack; import net.minecraftforge.items.SlotItemHandler; import refinedstorage.block.EnumGridType; import refinedstorage.container.slot.*; +import refinedstorage.tile.TileBase; import refinedstorage.tile.grid.IGrid; import refinedstorage.tile.grid.TileGrid; import refinedstorage.tile.grid.WirelessGrid; @@ -16,8 +17,8 @@ public class ContainerGrid extends ContainerBase { private SlotGridCraftingResult craftingResultSlot; private SlotDisabled patternResultSlot; - public ContainerGrid(EntityPlayer player, IGrid grid) { - super(player); + public ContainerGrid(IGrid grid, EntityPlayer player) { + super(grid instanceof TileBase ? (TileBase) grid : null, player); this.grid = grid; diff --git a/src/main/java/refinedstorage/container/ContainerGridFilter.java b/src/main/java/refinedstorage/container/ContainerGridFilter.java index 9d04a6b83..86acaa40b 100755 --- a/src/main/java/refinedstorage/container/ContainerGridFilter.java +++ b/src/main/java/refinedstorage/container/ContainerGridFilter.java @@ -11,7 +11,7 @@ public class ContainerGridFilter extends ContainerBase { private ItemStack stack; public ContainerGridFilter(EntityPlayer player, ItemStack stack) { - super(player); + super(null, player); this.stack = stack; this.filter = new ItemHandlerGridFilter(stack); diff --git a/src/main/java/refinedstorage/container/ContainerImporter.java b/src/main/java/refinedstorage/container/ContainerImporter.java index 50dfd53ad..8805c5c15 100755 --- a/src/main/java/refinedstorage/container/ContainerImporter.java +++ b/src/main/java/refinedstorage/container/ContainerImporter.java @@ -8,8 +8,8 @@ import refinedstorage.container.slot.SlotSpecimen; import refinedstorage.tile.TileImporter; public class ContainerImporter extends ContainerBase { - public ContainerImporter(EntityPlayer player, TileImporter importer) { - super(player); + public ContainerImporter(TileImporter importer, EntityPlayer player) { + super(importer, player); for (int i = 0; i < 4; ++i) { addSlotToContainer(new SlotItemHandler(importer.getUpgrades(), i, 187, 6 + (i * 18))); diff --git a/src/main/java/refinedstorage/container/ContainerInterface.java b/src/main/java/refinedstorage/container/ContainerInterface.java index e1dad439e..07aa7c911 100755 --- a/src/main/java/refinedstorage/container/ContainerInterface.java +++ b/src/main/java/refinedstorage/container/ContainerInterface.java @@ -9,8 +9,8 @@ import refinedstorage.container.slot.SlotSpecimen; import refinedstorage.tile.TileInterface; public class ContainerInterface extends ContainerBase { - public ContainerInterface(EntityPlayer player, TileInterface tile) { - super(player); + public ContainerInterface(TileInterface tile, EntityPlayer player) { + super(tile, player); for (int i = 0; i < 9; ++i) { addSlotToContainer(new SlotItemHandler(tile.getImportItems(), i, 8 + (18 * i), 20)); diff --git a/src/main/java/refinedstorage/container/ContainerNetworkTransmitter.java b/src/main/java/refinedstorage/container/ContainerNetworkTransmitter.java index 6946738bd..9de920677 100755 --- a/src/main/java/refinedstorage/container/ContainerNetworkTransmitter.java +++ b/src/main/java/refinedstorage/container/ContainerNetworkTransmitter.java @@ -7,10 +7,11 @@ import net.minecraftforge.items.SlotItemHandler; import refinedstorage.tile.TileNetworkTransmitter; public class ContainerNetworkTransmitter extends ContainerBase { - public ContainerNetworkTransmitter(EntityPlayer player, TileNetworkTransmitter networkTransmitter) { - super(player); + public ContainerNetworkTransmitter(TileNetworkTransmitter networkTransmitter, EntityPlayer player) { + super(networkTransmitter, player); addSlotToContainer(new SlotItemHandler(networkTransmitter.getNetworkCard(), 0, 8, 20)); + addSlotToContainer(new SlotItemHandler(networkTransmitter.getUpgrades(), 0, 187, 6)); addPlayerInventory(8, 55); diff --git a/src/main/java/refinedstorage/container/ContainerProcessingPatternEncoder.java b/src/main/java/refinedstorage/container/ContainerProcessingPatternEncoder.java index c998c2bf8..374dfaa55 100755 --- a/src/main/java/refinedstorage/container/ContainerProcessingPatternEncoder.java +++ b/src/main/java/refinedstorage/container/ContainerProcessingPatternEncoder.java @@ -9,8 +9,8 @@ import refinedstorage.container.slot.SlotSpecimen; import refinedstorage.tile.TileProcessingPatternEncoder; public class ContainerProcessingPatternEncoder extends ContainerBase { - public ContainerProcessingPatternEncoder(EntityPlayer player, TileProcessingPatternEncoder processingPatternEncoder) { - super(player); + public ContainerProcessingPatternEncoder(TileProcessingPatternEncoder processingPatternEncoder, EntityPlayer player) { + super(processingPatternEncoder, player); addSlotToContainer(new SlotItemHandler(processingPatternEncoder.getPatterns(), 0, 152, 18)); addSlotToContainer(new SlotOutput(processingPatternEncoder.getPatterns(), 1, 152, 58)); diff --git a/src/main/java/refinedstorage/container/ContainerRelay.java b/src/main/java/refinedstorage/container/ContainerRelay.java index 0c8a0a1de..234d2eb60 100755 --- a/src/main/java/refinedstorage/container/ContainerRelay.java +++ b/src/main/java/refinedstorage/container/ContainerRelay.java @@ -1,10 +1,11 @@ package refinedstorage.container; import net.minecraft.entity.player.EntityPlayer; +import refinedstorage.tile.TileRelay; public class ContainerRelay extends ContainerBase { - public ContainerRelay(EntityPlayer player) { - super(player); + public ContainerRelay(TileRelay relay, EntityPlayer player) { + super(relay, player); addPlayerInventory(8, 50); } diff --git a/src/main/java/refinedstorage/container/ContainerSolderer.java b/src/main/java/refinedstorage/container/ContainerSolderer.java index ee672a684..f27a565ab 100755 --- a/src/main/java/refinedstorage/container/ContainerSolderer.java +++ b/src/main/java/refinedstorage/container/ContainerSolderer.java @@ -9,8 +9,8 @@ import refinedstorage.container.slot.SlotOutput; import refinedstorage.tile.TileSolderer; public class ContainerSolderer extends ContainerBase { - public ContainerSolderer(EntityPlayer player, TileSolderer solderer) { - super(player); + public ContainerSolderer(TileSolderer solderer, EntityPlayer player) { + super(solderer, player); int x = 44; int y = 20; diff --git a/src/main/java/refinedstorage/container/ContainerStorage.java b/src/main/java/refinedstorage/container/ContainerStorage.java index 62dd6c897..24ea8343a 100755 --- a/src/main/java/refinedstorage/container/ContainerStorage.java +++ b/src/main/java/refinedstorage/container/ContainerStorage.java @@ -3,14 +3,15 @@ package refinedstorage.container; import net.minecraft.entity.player.EntityPlayer; import net.minecraftforge.items.IItemHandler; import refinedstorage.container.slot.SlotSpecimen; +import refinedstorage.tile.TileBase; public class ContainerStorage extends ContainerBase { - public ContainerStorage(EntityPlayer player) { - super(player); + public ContainerStorage(TileBase tile, EntityPlayer player) { + super(tile, player); } - public ContainerStorage(EntityPlayer player, IItemHandler filters) { - this(player); + public ContainerStorage(TileBase tile, EntityPlayer player, IItemHandler filters) { + this(tile, player); addSpecimenAndPlayerInventorySlots(filters); } diff --git a/src/main/java/refinedstorage/container/ContainerWirelessTransmitter.java b/src/main/java/refinedstorage/container/ContainerWirelessTransmitter.java index 729b6eeed..cb980c13c 100755 --- a/src/main/java/refinedstorage/container/ContainerWirelessTransmitter.java +++ b/src/main/java/refinedstorage/container/ContainerWirelessTransmitter.java @@ -7,8 +7,8 @@ import net.minecraftforge.items.SlotItemHandler; import refinedstorage.tile.TileWirelessTransmitter; public class ContainerWirelessTransmitter extends ContainerBase { - public ContainerWirelessTransmitter(EntityPlayer player, TileWirelessTransmitter wirelessTransmitter) { - super(player); + public ContainerWirelessTransmitter(TileWirelessTransmitter wirelessTransmitter, EntityPlayer player) { + super(wirelessTransmitter, player); for (int i = 0; i < 4; ++i) { addSlotToContainer(new SlotItemHandler(wirelessTransmitter.getUpgrades(), i, 187, 6 + (i * 18))); diff --git a/src/main/java/refinedstorage/gui/GuiHandler.java b/src/main/java/refinedstorage/gui/GuiHandler.java index b3cd9a6a6..ac8f37c65 100755 --- a/src/main/java/refinedstorage/gui/GuiHandler.java +++ b/src/main/java/refinedstorage/gui/GuiHandler.java @@ -18,39 +18,39 @@ public class GuiHandler implements IGuiHandler { private Container getContainer(int ID, EntityPlayer player, TileEntity tile) { switch (ID) { case RefinedStorageGui.CONTROLLER: - return new ContainerController(player); + return new ContainerController((TileController) tile, player); case RefinedStorageGui.GRID: - return new ContainerGrid(player, (TileGrid) tile); + return new ContainerGrid((TileGrid) tile, player); case RefinedStorageGui.DISK_DRIVE: - return new ContainerDiskDrive(player, (TileDiskDrive) tile); + return new ContainerDiskDrive((TileDiskDrive) tile, player); case RefinedStorageGui.IMPORTER: - return new ContainerImporter(player, (TileImporter) tile); + return new ContainerImporter((TileImporter) tile, player); case RefinedStorageGui.EXPORTER: - return new ContainerExporter(player, (TileExporter) tile); + return new ContainerExporter((TileExporter) tile, player); case RefinedStorageGui.DETECTOR: - return new ContainerDetector(player, (TileDetector) tile); + return new ContainerDetector((TileDetector) tile, player); case RefinedStorageGui.SOLDERER: - return new ContainerSolderer(player, (TileSolderer) tile); + return new ContainerSolderer((TileSolderer) tile, player); case RefinedStorageGui.DESTRUCTOR: - return new ContainerDestructor(player, (TileDestructor) tile); + return new ContainerDestructor((TileDestructor) tile, player); case RefinedStorageGui.CONSTRUCTOR: - return new ContainerConstructor(player, (TileConstructor) tile); + return new ContainerConstructor((TileConstructor) tile, player); case RefinedStorageGui.STORAGE: - return new ContainerStorage(player, ((IStorageGui) tile).getFilters()); + return new ContainerStorage((TileBase) tile, player, ((IStorageGui) tile).getFilters()); case RefinedStorageGui.RELAY: - return new ContainerRelay(player); + return new ContainerRelay((TileRelay) tile, player); case RefinedStorageGui.INTERFACE: - return new ContainerInterface(player, (TileInterface) tile); + return new ContainerInterface((TileInterface) tile, player); case RefinedStorageGui.CRAFTING_MONITOR: - return new ContainerCraftingMonitor(player); + return new ContainerCraftingMonitor((TileCraftingMonitor) tile, player); case RefinedStorageGui.WIRELESS_TRANSMITTER: - return new ContainerWirelessTransmitter(player, (TileWirelessTransmitter) tile); + return new ContainerWirelessTransmitter((TileWirelessTransmitter) tile, player); case RefinedStorageGui.CRAFTER: - return new ContainerCrafter(player, (TileCrafter) tile); + return new ContainerCrafter((TileCrafter) tile, player); case RefinedStorageGui.PROCESSING_PATTERN_ENCODER: - return new ContainerProcessingPatternEncoder(player, (TileProcessingPatternEncoder) tile); + return new ContainerProcessingPatternEncoder((TileProcessingPatternEncoder) tile, player); case RefinedStorageGui.NETWORK_TRANSMITTER: - return new ContainerNetworkTransmitter(player, (TileNetworkTransmitter) tile); + return new ContainerNetworkTransmitter((TileNetworkTransmitter) tile, player); default: return null; } @@ -61,7 +61,7 @@ public class GuiHandler implements IGuiHandler { } private ContainerGrid getWirelessGridContainer(EntityPlayer player, int hand) { - return new ContainerGrid(player, getWirelessGrid(player, hand)); + return new ContainerGrid(getWirelessGrid(player, hand), player); } private ContainerGridFilter getGridFilterContainer(EntityPlayer player, int hand) { @@ -128,8 +128,8 @@ public class GuiHandler implements IGuiHandler { } private GuiGrid getWirelessGridGui(EntityPlayer player, int hand) { - WirelessGrid wirelessGrid = getWirelessGrid(player, hand); + WirelessGrid grid = getWirelessGrid(player, hand); - return new GuiGrid(new ContainerGrid(player, wirelessGrid), wirelessGrid); + return new GuiGrid(new ContainerGrid(grid, player), grid); } } diff --git a/src/main/java/refinedstorage/network/MessageTileDataParameter.java b/src/main/java/refinedstorage/network/MessageTileDataParameter.java new file mode 100755 index 000000000..021183a6c --- /dev/null +++ b/src/main/java/refinedstorage/network/MessageTileDataParameter.java @@ -0,0 +1,51 @@ +package refinedstorage.network; + +import io.netty.buffer.ByteBuf; +import net.minecraft.network.PacketBuffer; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.fml.common.network.simpleimpl.IMessage; +import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler; +import net.minecraftforge.fml.common.network.simpleimpl.MessageContext; +import refinedstorage.tile.data.TileDataManager; +import refinedstorage.tile.data.TileDataParameter; + +import java.io.IOException; + +public class MessageTileDataParameter implements IMessage, IMessageHandler { + private TileEntity tile; + private TileDataParameter parameter; + + public MessageTileDataParameter() { + } + + public MessageTileDataParameter(TileEntity tile, TileDataParameter parameter) { + this.tile = tile; + this.parameter = parameter; + } + + @Override + public void fromBytes(ByteBuf buf) { + int id = buf.readInt(); + + TileDataParameter parameter = TileDataManager.getParameter(id); + + if (parameter != null) { + try { + parameter.setValue(parameter.getSerializer().read(new PacketBuffer(buf))); + } catch (IOException e) { + } + } + } + + @Override + public void toBytes(ByteBuf buf) { + buf.writeInt(parameter.getId()); + + parameter.getSerializer().write((PacketBuffer) buf, parameter.getValueProducer().getValue(tile)); + } + + @Override + public IMessage onMessage(MessageTileDataParameter message, MessageContext ctx) { + return null; + } +} diff --git a/src/main/java/refinedstorage/network/MessageTileDataParameterUpdate.java b/src/main/java/refinedstorage/network/MessageTileDataParameterUpdate.java new file mode 100755 index 000000000..46a97cf3c --- /dev/null +++ b/src/main/java/refinedstorage/network/MessageTileDataParameterUpdate.java @@ -0,0 +1,60 @@ +package refinedstorage.network; + +import io.netty.buffer.ByteBuf; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.inventory.Container; +import net.minecraft.network.PacketBuffer; +import net.minecraftforge.fml.common.network.simpleimpl.IMessage; +import refinedstorage.container.ContainerBase; +import refinedstorage.tile.data.ITileDataConsumer; +import refinedstorage.tile.data.TileDataManager; +import refinedstorage.tile.data.TileDataParameter; + +import java.io.IOException; + +public class MessageTileDataParameterUpdate extends MessageHandlerPlayerToServer implements IMessage { + private TileDataParameter parameter; + private Object value; + + public MessageTileDataParameterUpdate() { + } + + public MessageTileDataParameterUpdate(TileDataParameter parameter, Object value) { + this.parameter = parameter; + this.value = value; + } + + @Override + public void fromBytes(ByteBuf buf) { + int id = buf.readInt(); + + parameter = TileDataManager.getParameter(id); + + if (parameter != null) { + try { + value = parameter.getSerializer().read(new PacketBuffer(buf)); + } catch (IOException e) { + } + } + } + + @Override + public void toBytes(ByteBuf buf) { + buf.writeInt(parameter.getId()); + + parameter.getSerializer().write((PacketBuffer) buf, value); + } + + @Override + public void handle(MessageTileDataParameterUpdate message, EntityPlayerMP player) { + Container c = player.openContainer; + + if (c instanceof ContainerBase) { + ITileDataConsumer consumer = message.parameter.getValueConsumer(); + + if (consumer != null) { + consumer.setValue(((ContainerBase) c).getTile(), message.value); + } + } + } +} diff --git a/src/main/java/refinedstorage/proxy/CommonProxy.java b/src/main/java/refinedstorage/proxy/CommonProxy.java index 919e9c9ce..04431edd6 100755 --- a/src/main/java/refinedstorage/proxy/CommonProxy.java +++ b/src/main/java/refinedstorage/proxy/CommonProxy.java @@ -5,6 +5,7 @@ import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.fml.common.event.FMLInitializationEvent; import net.minecraftforge.fml.common.event.FMLPostInitializationEvent; import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; @@ -27,6 +28,7 @@ import refinedstorage.gui.GuiHandler; import refinedstorage.item.*; import refinedstorage.network.*; import refinedstorage.tile.*; +import refinedstorage.tile.data.ContainerListener; import refinedstorage.tile.externalstorage.TileExternalStorage; import refinedstorage.tile.grid.TileGrid; @@ -38,6 +40,8 @@ public class CommonProxy { int id = 0; + RefinedStorage.INSTANCE.network.registerMessage(MessageTileDataParameter.class, MessageTileDataParameter.class, id++, Side.CLIENT); + RefinedStorage.INSTANCE.network.registerMessage(MessageTileDataParameterUpdate.class, MessageTileDataParameterUpdate.class, id++, Side.SERVER); RefinedStorage.INSTANCE.network.registerMessage(MessageTileContainerUpdate.class, MessageTileContainerUpdate.class, id++, Side.CLIENT); RefinedStorage.INSTANCE.network.registerMessage(MessageRedstoneModeUpdate.class, MessageRedstoneModeUpdate.class, id++, Side.SERVER); RefinedStorage.INSTANCE.network.registerMessage(MessageGridInsertHeld.class, MessageGridInsertHeld.class, id++, Side.SERVER); @@ -61,6 +65,8 @@ public class CommonProxy { NetworkRegistry.INSTANCE.registerGuiHandler(RefinedStorage.INSTANCE, new GuiHandler()); + MinecraftForge.EVENT_BUS.register(new ContainerListener()); + GameRegistry.registerTileEntity(TileController.class, ID + ":controller"); GameRegistry.registerTileEntity(TileGrid.class, ID + ":grid"); GameRegistry.registerTileEntity(TileDiskDrive.class, ID + ":disk_drive"); diff --git a/src/main/java/refinedstorage/tile/TileBase.java b/src/main/java/refinedstorage/tile/TileBase.java index 796fd6836..834f5f8cd 100755 --- a/src/main/java/refinedstorage/tile/TileBase.java +++ b/src/main/java/refinedstorage/tile/TileBase.java @@ -22,6 +22,7 @@ import net.minecraftforge.items.wrapper.InvWrapper; import net.minecraftforge.items.wrapper.SidedInvWrapper; import refinedstorage.RefinedStorage; import refinedstorage.network.MessageTileContainerUpdate; +import refinedstorage.tile.data.TileDataManager; import javax.annotation.Nullable; @@ -33,6 +34,7 @@ public abstract class TileBase extends TileEntity implements ITickable { private EnumFacing direction = EnumFacing.NORTH; + protected TileDataManager dataManager = new TileDataManager(this); protected int ticks = 0; @Override @@ -64,6 +66,10 @@ public abstract class TileBase extends TileEntity implements ITickable { return direction; } + public TileDataManager getDataManager() { + return dataManager; + } + public NBTTagCompound write(NBTTagCompound tag) { tag.setInteger(NBT_DIRECTION, direction.ordinal()); diff --git a/src/main/java/refinedstorage/tile/data/ContainerListener.java b/src/main/java/refinedstorage/tile/data/ContainerListener.java new file mode 100755 index 000000000..e82717803 --- /dev/null +++ b/src/main/java/refinedstorage/tile/data/ContainerListener.java @@ -0,0 +1,23 @@ +package refinedstorage.tile.data; + +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.inventory.Container; +import net.minecraftforge.event.entity.player.PlayerContainerEvent; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import refinedstorage.container.ContainerBase; +import refinedstorage.tile.TileBase; + +public class ContainerListener { + @SubscribeEvent + public void onContainerOpen(PlayerContainerEvent.Open e) { + Container container = e.getContainer(); + + if (container instanceof ContainerBase) { + TileBase tile = ((ContainerBase) container).getTile(); + + if (tile != null && !tile.getWorld().isRemote) { + tile.getDataManager().sendParametersTo((EntityPlayerMP) e.getEntityPlayer()); + } + } + } +} diff --git a/src/main/java/refinedstorage/tile/data/ITileDataConsumer.java b/src/main/java/refinedstorage/tile/data/ITileDataConsumer.java new file mode 100755 index 000000000..03fafd823 --- /dev/null +++ b/src/main/java/refinedstorage/tile/data/ITileDataConsumer.java @@ -0,0 +1,7 @@ +package refinedstorage.tile.data; + +import net.minecraft.tileentity.TileEntity; + +public interface ITileDataConsumer { + void setValue(E tile, T value); +} diff --git a/src/main/java/refinedstorage/tile/data/ITileDataProducer.java b/src/main/java/refinedstorage/tile/data/ITileDataProducer.java new file mode 100755 index 000000000..1a8bd948c --- /dev/null +++ b/src/main/java/refinedstorage/tile/data/ITileDataProducer.java @@ -0,0 +1,7 @@ +package refinedstorage.tile.data; + +import net.minecraft.tileentity.TileEntity; + +public interface ITileDataProducer { + T getValue(E tile); +} diff --git a/src/main/java/refinedstorage/tile/data/TileDataManager.java b/src/main/java/refinedstorage/tile/data/TileDataManager.java new file mode 100755 index 000000000..9f1a80877 --- /dev/null +++ b/src/main/java/refinedstorage/tile/data/TileDataManager.java @@ -0,0 +1,98 @@ +package refinedstorage.tile.data; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.inventory.Container; +import net.minecraft.network.datasync.DataSerializer; +import net.minecraft.tileentity.TileEntity; +import refinedstorage.RefinedStorage; +import refinedstorage.container.ContainerBase; +import refinedstorage.network.MessageTileDataParameter; +import refinedstorage.network.MessageTileDataParameterUpdate; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class TileDataManager { + private static int PARAMETER_ID = 0; + private static Map PARAMETER_MAP = new HashMap(); + + private List parameters = new ArrayList(); + + private List watchedParameters = new ArrayList(); + private List watchedParametersCache = new ArrayList(); + + public static TileDataParameter createParameter(DataSerializer serializer, ITileDataProducer producer) { + return createParameter(serializer, producer, null); + } + + public static TileDataParameter createParameter(DataSerializer serializer, ITileDataProducer producer, ITileDataConsumer consumer) { + TileDataParameter parameter = new TileDataParameter(PARAMETER_ID++, serializer, producer, consumer); + + PARAMETER_MAP.put(parameter.getId(), parameter); + + return parameter; + } + + public static TileDataParameter getParameter(int id) { + return PARAMETER_MAP.get(id); + } + + public static void setParameter(TileDataParameter parameter, T value) { + RefinedStorage.INSTANCE.network.sendToServer(new MessageTileDataParameterUpdate(parameter, value)); + } + + private TileEntity tile; + + public TileDataManager(TileEntity tile) { + this.tile = tile; + } + + public void addParameter(TileDataParameter parameter) { + parameters.add(parameter); + } + + public void addWatchedParameter(TileDataParameter parameter) { + addParameter(parameter); + + watchedParameters.add(parameter); + watchedParametersCache.add(null); + } + + public void detectAndSendChanges() { + for (int i = 0; i < watchedParameters.size(); ++i) { + TileDataParameter parameter = watchedParameters.get(i); + + Object real = parameter.getValueProducer().getValue(tile); + Object cached = watchedParametersCache.get(i); + + if (!real.equals(cached)) { + watchedParametersCache.set(i, real); + + sendParameterToWatchers(parameter); + } + } + } + + public void sendParametersTo(EntityPlayerMP player) { + for (TileDataParameter parameter : parameters) { + sendParameter(player, parameter); + } + } + + public void sendParameter(EntityPlayerMP player, TileDataParameter parameter) { + RefinedStorage.INSTANCE.network.sendTo(new MessageTileDataParameter(tile, parameter), player); + } + + public void sendParameterToWatchers(TileDataParameter parameter) { + for (EntityPlayer player : tile.getWorld().playerEntities) { + Container container = player.openContainer; + + if (container instanceof ContainerBase && ((ContainerBase) container).getTile().getPos().equals(tile.getPos())) { + sendParameter((EntityPlayerMP) player, parameter); + } + } + } +} diff --git a/src/main/java/refinedstorage/tile/data/TileDataParameter.java b/src/main/java/refinedstorage/tile/data/TileDataParameter.java new file mode 100755 index 000000000..4a1a1bed7 --- /dev/null +++ b/src/main/java/refinedstorage/tile/data/TileDataParameter.java @@ -0,0 +1,42 @@ +package refinedstorage.tile.data; + +import net.minecraft.network.datasync.DataSerializer; + +public class TileDataParameter { + private int id; + private DataSerializer serializer; + private ITileDataProducer valueProducer; + private ITileDataConsumer valueConsumer; + private T value; + + public TileDataParameter(int id, DataSerializer serializer, ITileDataProducer producer, ITileDataConsumer consumer) { + this.id = id; + this.serializer = serializer; + this.valueProducer = producer; + this.valueConsumer = consumer; + } + + public int getId() { + return id; + } + + public DataSerializer getSerializer() { + return serializer; + } + + public ITileDataProducer getValueProducer() { + return valueProducer; + } + + public ITileDataConsumer getValueConsumer() { + return valueConsumer; + } + + public void setValue(T value) { + this.value = value; + } + + public T getValue() { + return value; + } +} \ No newline at end of file From c9d6443d06e0774d5dd6698ec2df02e3627b3ef7 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Fri, 5 Aug 2016 13:46:17 +0200 Subject: [PATCH 092/214] Switch to new GUI sync system, very buggy and untested --- .../gui/GuiCraftingMonitor.java | 1 + .../java/refinedstorage/gui/GuiDetector.java | 8 +- .../gui/GuiNetworkTransmitter.java | 4 +- .../java/refinedstorage/gui/GuiSolderer.java | 15 +- .../java/refinedstorage/gui/GuiStorage.java | 1 + .../gui/GuiWirelessTransmitter.java | 2 +- .../java/refinedstorage/gui/grid/GuiGrid.java | 1 + .../gui/sidebutton/SideButtonCompare.java | 4 +- .../sidebutton/SideButtonDetectorMode.java | 16 +- .../gui/sidebutton/SideButtonMode.java | 11 +- .../sidebutton/SideButtonRedstoneMode.java | 4 +- .../network/MessageCompareUpdate.java | 50 ------ .../network/MessageDetectorAmountUpdate.java | 50 ------ .../network/MessageDetectorModeUpdate.java | 58 ------- .../network/MessageGridSettingsUpdate.java | 76 --------- .../network/MessageModeToggle.java | 53 ------- .../network/MessagePriorityUpdate.java | 56 ------- .../network/MessageRedstoneModeUpdate.java | 48 ------ .../network/MessageTileContainerUpdate.java | 53 ------- .../refinedstorage/proxy/CommonProxy.java | 8 - .../tile/ISynchronizedContainer.java | 12 -- .../java/refinedstorage/tile/TileBase.java | 12 +- .../java/refinedstorage/tile/TileCable.java | 6 - .../refinedstorage/tile/TileConstructor.java | 39 ++--- .../refinedstorage/tile/TileController.java | 38 ++--- .../java/refinedstorage/tile/TileCrafter.java | 16 +- .../tile/TileCraftingMonitor.java | 16 +- .../refinedstorage/tile/TileDestructor.java | 52 +++---- .../refinedstorage/tile/TileDetector.java | 99 ++++++------ .../refinedstorage/tile/TileDiskDrive.java | 71 ++++----- .../refinedstorage/tile/TileExporter.java | 38 ++--- .../refinedstorage/tile/TileImporter.java | 53 +++---- .../refinedstorage/tile/TileInterface.java | 39 ++--- .../tile/TileNetworkReceiver.java | 6 - .../tile/TileNetworkTransmitter.java | 65 ++++---- .../java/refinedstorage/tile/TileNode.java | 38 +++-- .../java/refinedstorage/tile/TileRelay.java | 7 - .../refinedstorage/tile/TileSolderer.java | 56 +++---- .../java/refinedstorage/tile/TileStorage.java | 84 +++++----- .../tile/TileWirelessTransmitter.java | 18 ++- .../tile/config/ICompareConfig.java | 21 +++ .../tile/config/IModeConfig.java | 26 ++++ .../tile/config/IPrioritizable.java | 28 ++++ .../tile/config/ModeConstants.java | 6 - .../tile/config/ModeFilter.java | 4 +- .../externalstorage/TileExternalStorage.java | 101 ++++++------ .../refinedstorage/tile/grid/TileGrid.java | 146 +++++++++++------- 47 files changed, 573 insertions(+), 1043 deletions(-) delete mode 100755 src/main/java/refinedstorage/network/MessageCompareUpdate.java delete mode 100755 src/main/java/refinedstorage/network/MessageDetectorAmountUpdate.java delete mode 100755 src/main/java/refinedstorage/network/MessageDetectorModeUpdate.java delete mode 100755 src/main/java/refinedstorage/network/MessageGridSettingsUpdate.java delete mode 100755 src/main/java/refinedstorage/network/MessageModeToggle.java delete mode 100755 src/main/java/refinedstorage/network/MessagePriorityUpdate.java delete mode 100755 src/main/java/refinedstorage/network/MessageRedstoneModeUpdate.java delete mode 100755 src/main/java/refinedstorage/network/MessageTileContainerUpdate.java delete mode 100755 src/main/java/refinedstorage/tile/ISynchronizedContainer.java create mode 100755 src/main/java/refinedstorage/tile/config/IPrioritizable.java delete mode 100755 src/main/java/refinedstorage/tile/config/ModeConstants.java diff --git a/src/main/java/refinedstorage/gui/GuiCraftingMonitor.java b/src/main/java/refinedstorage/gui/GuiCraftingMonitor.java index 5c8f7cc5e..3123c60f1 100755 --- a/src/main/java/refinedstorage/gui/GuiCraftingMonitor.java +++ b/src/main/java/refinedstorage/gui/GuiCraftingMonitor.java @@ -13,6 +13,7 @@ import refinedstorage.tile.TileCraftingMonitor; import java.io.IOException; import java.util.Arrays; +// @TODO: Make it work public class GuiCraftingMonitor extends GuiBase { private static final int VISIBLE_ROWS = 3; diff --git a/src/main/java/refinedstorage/gui/GuiDetector.java b/src/main/java/refinedstorage/gui/GuiDetector.java index 053d7786a..4d6cc757e 100755 --- a/src/main/java/refinedstorage/gui/GuiDetector.java +++ b/src/main/java/refinedstorage/gui/GuiDetector.java @@ -2,13 +2,12 @@ package refinedstorage.gui; import com.google.common.primitives.Ints; import net.minecraft.client.gui.GuiTextField; -import refinedstorage.RefinedStorage; import refinedstorage.api.storage.CompareUtils; import refinedstorage.container.ContainerDetector; import refinedstorage.gui.sidebutton.SideButtonCompare; import refinedstorage.gui.sidebutton.SideButtonDetectorMode; -import refinedstorage.network.MessageDetectorAmountUpdate; import refinedstorage.tile.TileDetector; +import refinedstorage.tile.data.TileDataManager; import java.io.IOException; @@ -31,7 +30,8 @@ public class GuiDetector extends GuiBase { addSideButton(new SideButtonDetectorMode(detector)); amountField = new GuiTextField(0, fontRendererObj, x + 62 + 1, y + 23 + 1, 25, fontRendererObj.FONT_HEIGHT); - amountField.setText(String.valueOf(detector.getAmount())); + // @TODO: Change when the packet is received instead + amountField.setText(String.valueOf(TileDetector.AMOUNT.getValue())); amountField.setEnableBackgroundDrawing(false); amountField.setVisible(true); amountField.setTextColor(16777215); @@ -64,7 +64,7 @@ public class GuiDetector extends GuiBase { Integer result = Ints.tryParse(amountField.getText()); if (result != null) { - RefinedStorage.INSTANCE.network.sendToServer(new MessageDetectorAmountUpdate(detector, result)); + TileDataManager.setParameter(TileDetector.AMOUNT, result); } } else { super.keyTyped(character, keyCode); diff --git a/src/main/java/refinedstorage/gui/GuiNetworkTransmitter.java b/src/main/java/refinedstorage/gui/GuiNetworkTransmitter.java index 5713fca94..0c4018ba2 100755 --- a/src/main/java/refinedstorage/gui/GuiNetworkTransmitter.java +++ b/src/main/java/refinedstorage/gui/GuiNetworkTransmitter.java @@ -37,9 +37,9 @@ public class GuiNetworkTransmitter extends GuiBase { if (networkTransmitter.getNetworkCard().getStackInSlot(0) == null) { distance = t("gui.refinedstorage:network_transmitter.missing_card"); - } else if (!networkTransmitter.isDimensionSupported()) { + } else if (!TileNetworkTransmitter.RECEIVER_DIMENSION_SUPPORTED.getValue()) { distance = t("gui.refinedstorage:network_transmitter.missing_upgrade"); - } else if (!networkTransmitter.isSameDimension()) { + } else if (!networkTransmitter.isSameDimension()) { // @TODO: Wtf? distance = t("gui.refinedstorage:network_transmitter.dimension", networkTransmitter.getReceiverDimension()); } else { distance = t("gui.refinedstorage:network_transmitter.distance", networkTransmitter.getDistance()); diff --git a/src/main/java/refinedstorage/gui/GuiSolderer.java b/src/main/java/refinedstorage/gui/GuiSolderer.java index 8b63e7477..76c991ab8 100755 --- a/src/main/java/refinedstorage/gui/GuiSolderer.java +++ b/src/main/java/refinedstorage/gui/GuiSolderer.java @@ -29,7 +29,7 @@ public class GuiSolderer extends GuiBase { drawTexture(x, y, 0, 0, width, height); if (solderer.isWorking()) { - drawTexture(x + 83, y + 38 - 1, 212, 0, solderer.getProgressScaled(22), 15); + drawTexture(x + 83, y + 38 - 1, 212, 0, getProgressScaled(22), 15); } } @@ -39,7 +39,18 @@ public class GuiSolderer extends GuiBase { drawString(7, 77, t("container.inventory")); if (inBounds(83, 38, 22, 15, mouseX, mouseY) && solderer.isWorking()) { - drawTooltip(mouseX, mouseY, t("gui.refinedstorage:solderer.progress", solderer.getProgressScaled(100))); + drawTooltip(mouseX, mouseY, t("gui.refinedstorage:solderer.progress", getProgressScaled(100))); } } + + private int getProgressScaled(int scale) { + float progress = TileSolderer.PROGRESS.getValue(); + float duration = TileSolderer.DURATION.getValue(); + + if (progress > duration) { + return scale; + } + + return (int) (progress / duration * (float) scale); + } } diff --git a/src/main/java/refinedstorage/gui/GuiStorage.java b/src/main/java/refinedstorage/gui/GuiStorage.java index 963576e3d..43c7c56fc 100755 --- a/src/main/java/refinedstorage/gui/GuiStorage.java +++ b/src/main/java/refinedstorage/gui/GuiStorage.java @@ -49,6 +49,7 @@ public class GuiStorage extends GuiBase { } priorityField = new GuiTextField(0, fontRendererObj, x + 98 + 1, y + 54 + 1, 25, fontRendererObj.FONT_HEIGHT); + // @TODO: Only change this when packet is received priorityField.setText(String.valueOf(gui.getPriority())); priorityField.setEnableBackgroundDrawing(false); priorityField.setVisible(true); diff --git a/src/main/java/refinedstorage/gui/GuiWirelessTransmitter.java b/src/main/java/refinedstorage/gui/GuiWirelessTransmitter.java index b64fcca8c..b388b9d96 100755 --- a/src/main/java/refinedstorage/gui/GuiWirelessTransmitter.java +++ b/src/main/java/refinedstorage/gui/GuiWirelessTransmitter.java @@ -32,7 +32,7 @@ public class GuiWirelessTransmitter extends GuiBase { @Override public void drawForeground(int mouseX, int mouseY) { drawString(7, 7, t("gui.refinedstorage:wireless_transmitter")); - drawString(28, 25, t("gui.refinedstorage:wireless_transmitter.distance", wirelessTransmitter.getRange())); + drawString(28, 25, t("gui.refinedstorage:wireless_transmitter.distance", TileWirelessTransmitter.RANGE.getValue())); drawString(7, 43, t("container.inventory")); } } diff --git a/src/main/java/refinedstorage/gui/grid/GuiGrid.java b/src/main/java/refinedstorage/gui/grid/GuiGrid.java index 39b18c4aa..55d8f81ad 100755 --- a/src/main/java/refinedstorage/gui/grid/GuiGrid.java +++ b/src/main/java/refinedstorage/gui/grid/GuiGrid.java @@ -70,6 +70,7 @@ public class GuiGrid extends GuiBase { searchField.setVisible(true); searchField.setTextColor(16777215); + // @TODO: Only do this after packet updateSearchBoxFocus(grid.getSearchBoxMode()); } else { searchField.xPosition = sx; diff --git a/src/main/java/refinedstorage/gui/sidebutton/SideButtonCompare.java b/src/main/java/refinedstorage/gui/sidebutton/SideButtonCompare.java index 20eb21d19..752672626 100755 --- a/src/main/java/refinedstorage/gui/sidebutton/SideButtonCompare.java +++ b/src/main/java/refinedstorage/gui/sidebutton/SideButtonCompare.java @@ -1,10 +1,8 @@ package refinedstorage.gui.sidebutton; import net.minecraft.util.text.TextFormatting; -import refinedstorage.RefinedStorage; import refinedstorage.api.storage.CompareUtils; import refinedstorage.gui.GuiBase; -import refinedstorage.network.MessageCompareUpdate; import refinedstorage.tile.config.ICompareConfig; public class SideButtonCompare extends SideButton { @@ -48,6 +46,6 @@ public class SideButtonCompare extends SideButton { @Override public void actionPerformed() { - RefinedStorage.INSTANCE.network.sendToServer(new MessageCompareUpdate(config, config.getCompare() ^ mask)); + config.setCompare(config.getCompare() ^ mask); } } diff --git a/src/main/java/refinedstorage/gui/sidebutton/SideButtonDetectorMode.java b/src/main/java/refinedstorage/gui/sidebutton/SideButtonDetectorMode.java index 2382b3fbf..e82538d04 100755 --- a/src/main/java/refinedstorage/gui/sidebutton/SideButtonDetectorMode.java +++ b/src/main/java/refinedstorage/gui/sidebutton/SideButtonDetectorMode.java @@ -3,9 +3,7 @@ package refinedstorage.gui.sidebutton; import net.minecraft.init.Items; import net.minecraft.item.ItemStack; import net.minecraft.util.text.TextFormatting; -import refinedstorage.RefinedStorage; import refinedstorage.gui.GuiBase; -import refinedstorage.network.MessageDetectorModeUpdate; import refinedstorage.tile.TileDetector; public class SideButtonDetectorMode extends SideButton { @@ -17,7 +15,7 @@ public class SideButtonDetectorMode extends SideButton { @Override public String getTooltip(GuiBase gui) { - return TextFormatting.GREEN + gui.t("sidebutton.refinedstorage:detector.mode") + TextFormatting.RESET + "\n" + gui.t("sidebutton.refinedstorage:detector.mode." + detector.getMode()); + return TextFormatting.GREEN + gui.t("sidebutton.refinedstorage:detector.mode") + TextFormatting.RESET + "\n" + gui.t("sidebutton.refinedstorage:detector.mode." + TileDetector.MODE.getValue()); } @Override @@ -27,6 +25,16 @@ public class SideButtonDetectorMode extends SideButton { @Override public void actionPerformed() { - RefinedStorage.INSTANCE.network.sendToServer(new MessageDetectorModeUpdate(detector)); + int mode = TileDetector.MODE.getValue(); + + if (mode == TileDetector.MODE_EQUAL) { + mode = TileDetector.MODE_ABOVE; + } else if (mode == TileDetector.MODE_ABOVE) { + mode = TileDetector.MODE_UNDER; + } else if (mode == TileDetector.MODE_UNDER) { + mode = TileDetector.MODE_EQUAL; + } + + TileDetector.MODE.setValue(mode); } } diff --git a/src/main/java/refinedstorage/gui/sidebutton/SideButtonMode.java b/src/main/java/refinedstorage/gui/sidebutton/SideButtonMode.java index 97c854571..6c11cf840 100755 --- a/src/main/java/refinedstorage/gui/sidebutton/SideButtonMode.java +++ b/src/main/java/refinedstorage/gui/sidebutton/SideButtonMode.java @@ -1,11 +1,8 @@ package refinedstorage.gui.sidebutton; import net.minecraft.util.text.TextFormatting; -import refinedstorage.RefinedStorage; import refinedstorage.gui.GuiBase; -import refinedstorage.network.MessageModeToggle; import refinedstorage.tile.config.IModeConfig; -import refinedstorage.tile.config.ModeConstants; public class SideButtonMode extends SideButton { private IModeConfig config; @@ -16,7 +13,7 @@ public class SideButtonMode extends SideButton { @Override public String getTooltip(GuiBase gui) { - return TextFormatting.GREEN + gui.t("sidebutton.refinedstorage:mode") + TextFormatting.RESET + "\n" + gui.t("sidebutton.refinedstorage:mode." + (config.getMode() == ModeConstants.WHITELIST ? "whitelist" : "blacklist")); + return TextFormatting.GREEN + gui.t("sidebutton.refinedstorage:mode") + TextFormatting.RESET + "\n" + gui.t("sidebutton.refinedstorage:mode." + (config.getMode() == IModeConfig.WHITELIST ? "whitelist" : "blacklist")); } @Override @@ -25,9 +22,9 @@ public class SideButtonMode extends SideButton { int tx = 0; - if (config.getMode() == ModeConstants.WHITELIST) { + if (config.getMode() == IModeConfig.WHITELIST) { tx = 0; - } else if (config.getMode() == ModeConstants.BLACKLIST) { + } else if (config.getMode() == IModeConfig.BLACKLIST) { tx = 16; } @@ -36,6 +33,6 @@ public class SideButtonMode extends SideButton { @Override public void actionPerformed() { - RefinedStorage.INSTANCE.network.sendToServer(new MessageModeToggle(config)); + config.setMode(config.getMode() == IModeConfig.WHITELIST ? IModeConfig.BLACKLIST : IModeConfig.WHITELIST); } } diff --git a/src/main/java/refinedstorage/gui/sidebutton/SideButtonRedstoneMode.java b/src/main/java/refinedstorage/gui/sidebutton/SideButtonRedstoneMode.java index 8b1b5b5c4..5f04fb8d9 100755 --- a/src/main/java/refinedstorage/gui/sidebutton/SideButtonRedstoneMode.java +++ b/src/main/java/refinedstorage/gui/sidebutton/SideButtonRedstoneMode.java @@ -1,9 +1,7 @@ package refinedstorage.gui.sidebutton; import net.minecraft.util.text.TextFormatting; -import refinedstorage.RefinedStorage; import refinedstorage.gui.GuiBase; -import refinedstorage.network.MessageRedstoneModeUpdate; import refinedstorage.tile.config.IRedstoneModeConfig; public class SideButtonRedstoneMode extends SideButton { @@ -26,6 +24,6 @@ public class SideButtonRedstoneMode extends SideButton { @Override public void actionPerformed() { - RefinedStorage.INSTANCE.network.sendToServer(new MessageRedstoneModeUpdate(config)); + config.setRedstoneMode(config.getRedstoneMode().next()); } } diff --git a/src/main/java/refinedstorage/network/MessageCompareUpdate.java b/src/main/java/refinedstorage/network/MessageCompareUpdate.java deleted file mode 100755 index e3f09e3a7..000000000 --- a/src/main/java/refinedstorage/network/MessageCompareUpdate.java +++ /dev/null @@ -1,50 +0,0 @@ -package refinedstorage.network; - -import io.netty.buffer.ByteBuf; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.math.BlockPos; -import net.minecraftforge.fml.common.network.simpleimpl.IMessage; -import refinedstorage.tile.config.ICompareConfig; - -public class MessageCompareUpdate extends MessageHandlerPlayerToServer implements IMessage { - private int x; - private int y; - private int z; - private int compare; - - public MessageCompareUpdate() { - } - - public MessageCompareUpdate(ICompareConfig setting, int compare) { - this.x = ((TileEntity) setting).getPos().getX(); - this.y = ((TileEntity) setting).getPos().getY(); - this.z = ((TileEntity) setting).getPos().getZ(); - this.compare = compare; - } - - @Override - public void fromBytes(ByteBuf buf) { - x = buf.readInt(); - y = buf.readInt(); - z = buf.readInt(); - compare = buf.readInt(); - } - - @Override - public void toBytes(ByteBuf buf) { - buf.writeInt(x); - buf.writeInt(y); - buf.writeInt(z); - buf.writeInt(compare); - } - - @Override - public void handle(MessageCompareUpdate message, EntityPlayerMP player) { - TileEntity tile = player.worldObj.getTileEntity(new BlockPos(message.x, message.y, message.z)); - - if (tile instanceof ICompareConfig) { - ((ICompareConfig) tile).setCompare(message.compare); - } - } -} diff --git a/src/main/java/refinedstorage/network/MessageDetectorAmountUpdate.java b/src/main/java/refinedstorage/network/MessageDetectorAmountUpdate.java deleted file mode 100755 index 621237916..000000000 --- a/src/main/java/refinedstorage/network/MessageDetectorAmountUpdate.java +++ /dev/null @@ -1,50 +0,0 @@ -package refinedstorage.network; - -import io.netty.buffer.ByteBuf; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.math.BlockPos; -import net.minecraftforge.fml.common.network.simpleimpl.IMessage; -import refinedstorage.tile.TileDetector; - -public class MessageDetectorAmountUpdate extends MessageHandlerPlayerToServer implements IMessage { - private int x; - private int y; - private int z; - private int amount; - - public MessageDetectorAmountUpdate() { - } - - public MessageDetectorAmountUpdate(TileDetector detector, int amount) { - this.x = detector.getPos().getX(); - this.y = detector.getPos().getY(); - this.z = detector.getPos().getZ(); - this.amount = amount; - } - - @Override - public void fromBytes(ByteBuf buf) { - x = buf.readInt(); - y = buf.readInt(); - z = buf.readInt(); - amount = buf.readInt(); - } - - @Override - public void toBytes(ByteBuf buf) { - buf.writeInt(x); - buf.writeInt(y); - buf.writeInt(z); - buf.writeInt(amount); - } - - @Override - public void handle(MessageDetectorAmountUpdate message, EntityPlayerMP player) { - TileEntity tile = player.worldObj.getTileEntity(new BlockPos(message.x, message.y, message.z)); - - if (tile instanceof TileDetector && message.amount >= 0) { - ((TileDetector) tile).setAmount(message.amount); - } - } -} diff --git a/src/main/java/refinedstorage/network/MessageDetectorModeUpdate.java b/src/main/java/refinedstorage/network/MessageDetectorModeUpdate.java deleted file mode 100755 index 4b2905426..000000000 --- a/src/main/java/refinedstorage/network/MessageDetectorModeUpdate.java +++ /dev/null @@ -1,58 +0,0 @@ -package refinedstorage.network; - -import io.netty.buffer.ByteBuf; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.math.BlockPos; -import net.minecraftforge.fml.common.network.simpleimpl.IMessage; -import refinedstorage.tile.TileDetector; - -public class MessageDetectorModeUpdate extends MessageHandlerPlayerToServer implements IMessage { - private int x; - private int y; - private int z; - - public MessageDetectorModeUpdate() { - } - - public MessageDetectorModeUpdate(TileDetector detector) { - this.x = detector.getPos().getX(); - this.y = detector.getPos().getY(); - this.z = detector.getPos().getZ(); - } - - @Override - public void fromBytes(ByteBuf buf) { - x = buf.readInt(); - y = buf.readInt(); - z = buf.readInt(); - } - - @Override - public void toBytes(ByteBuf buf) { - buf.writeInt(x); - buf.writeInt(y); - buf.writeInt(z); - } - - @Override - public void handle(MessageDetectorModeUpdate message, EntityPlayerMP player) { - TileEntity tile = player.worldObj.getTileEntity(new BlockPos(message.x, message.y, message.z)); - - if (tile instanceof TileDetector) { - TileDetector detector = (TileDetector) tile; - - switch (detector.getMode()) { - case TileDetector.MODE_UNDER: - detector.setMode(TileDetector.MODE_EQUAL); - break; - case TileDetector.MODE_EQUAL: - detector.setMode(TileDetector.MODE_ABOVE); - break; - case TileDetector.MODE_ABOVE: - detector.setMode(TileDetector.MODE_UNDER); - break; - } - } - } -} diff --git a/src/main/java/refinedstorage/network/MessageGridSettingsUpdate.java b/src/main/java/refinedstorage/network/MessageGridSettingsUpdate.java deleted file mode 100755 index 09c2ac8bc..000000000 --- a/src/main/java/refinedstorage/network/MessageGridSettingsUpdate.java +++ /dev/null @@ -1,76 +0,0 @@ -package refinedstorage.network; - -import io.netty.buffer.ByteBuf; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.math.BlockPos; -import net.minecraftforge.fml.common.network.simpleimpl.IMessage; -import refinedstorage.tile.grid.TileGrid; - -public class MessageGridSettingsUpdate extends MessageHandlerPlayerToServer implements IMessage { - private int x; - private int y; - private int z; - private int viewType; - private int sortingDirection; - private int sortingType; - private int searchBoxMode; - - public MessageGridSettingsUpdate() { - } - - public MessageGridSettingsUpdate(TileGrid grid, int viewType, int sortingDirection, int sortingType, int searchBoxMode) { - this.x = grid.getPos().getX(); - this.y = grid.getPos().getY(); - this.z = grid.getPos().getZ(); - this.viewType = viewType; - this.sortingDirection = sortingDirection; - this.sortingType = sortingType; - this.searchBoxMode = searchBoxMode; - } - - @Override - public void fromBytes(ByteBuf buf) { - x = buf.readInt(); - y = buf.readInt(); - z = buf.readInt(); - viewType = buf.readInt(); - sortingDirection = buf.readInt(); - sortingType = buf.readInt(); - searchBoxMode = buf.readInt(); - } - - @Override - public void toBytes(ByteBuf buf) { - buf.writeInt(x); - buf.writeInt(y); - buf.writeInt(z); - buf.writeInt(viewType); - buf.writeInt(sortingDirection); - buf.writeInt(sortingType); - buf.writeInt(searchBoxMode); - } - - @Override - public void handle(MessageGridSettingsUpdate message, EntityPlayerMP player) { - TileEntity tile = player.worldObj.getTileEntity(new BlockPos(message.x, message.y, message.z)); - - if (tile instanceof TileGrid) { - if (TileGrid.isValidViewType(message.viewType)) { - ((TileGrid) tile).setViewType(message.viewType); - } - - if (TileGrid.isValidSortingDirection(message.sortingDirection)) { - ((TileGrid) tile).setSortingDirection(message.sortingDirection); - } - - if (TileGrid.isValidSortingType(message.sortingType)) { - ((TileGrid) tile).setSortingType(message.sortingType); - } - - if (TileGrid.isValidSearchBoxMode(message.searchBoxMode)) { - ((TileGrid) tile).setSearchBoxMode(message.searchBoxMode); - } - } - } -} diff --git a/src/main/java/refinedstorage/network/MessageModeToggle.java b/src/main/java/refinedstorage/network/MessageModeToggle.java deleted file mode 100755 index 4632c3b5d..000000000 --- a/src/main/java/refinedstorage/network/MessageModeToggle.java +++ /dev/null @@ -1,53 +0,0 @@ -package refinedstorage.network; - -import io.netty.buffer.ByteBuf; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.math.BlockPos; -import net.minecraftforge.fml.common.network.simpleimpl.IMessage; -import refinedstorage.tile.config.IModeConfig; -import refinedstorage.tile.config.ModeConstants; - -public class MessageModeToggle extends MessageHandlerPlayerToServer implements IMessage { - private int x; - private int y; - private int z; - - public MessageModeToggle() { - } - - public MessageModeToggle(IModeConfig mode) { - this.x = ((TileEntity) mode).getPos().getX(); - this.y = ((TileEntity) mode).getPos().getY(); - this.z = ((TileEntity) mode).getPos().getZ(); - } - - @Override - public void fromBytes(ByteBuf buf) { - x = buf.readInt(); - y = buf.readInt(); - z = buf.readInt(); - } - - @Override - public void toBytes(ByteBuf buf) { - buf.writeInt(x); - buf.writeInt(y); - buf.writeInt(z); - } - - @Override - public void handle(MessageModeToggle message, EntityPlayerMP player) { - TileEntity tile = player.worldObj.getTileEntity(new BlockPos(message.x, message.y, message.z)); - - if (tile instanceof IModeConfig) { - IModeConfig mode = (IModeConfig) tile; - - if (mode.getMode() == ModeConstants.WHITELIST) { - mode.setMode(ModeConstants.BLACKLIST); - } else { - mode.setMode(ModeConstants.WHITELIST); - } - } - } -} diff --git a/src/main/java/refinedstorage/network/MessagePriorityUpdate.java b/src/main/java/refinedstorage/network/MessagePriorityUpdate.java deleted file mode 100755 index 6d981a6b3..000000000 --- a/src/main/java/refinedstorage/network/MessagePriorityUpdate.java +++ /dev/null @@ -1,56 +0,0 @@ -package refinedstorage.network; - -import io.netty.buffer.ByteBuf; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.math.BlockPos; -import net.minecraftforge.fml.common.network.simpleimpl.IMessage; -import refinedstorage.tile.TileDiskDrive; -import refinedstorage.tile.TileStorage; -import refinedstorage.tile.externalstorage.TileExternalStorage; - -public class MessagePriorityUpdate extends MessageHandlerPlayerToServer implements IMessage { - private int x; - private int y; - private int z; - private int priority; - - public MessagePriorityUpdate() { - } - - public MessagePriorityUpdate(BlockPos pos, int priority) { - this.x = pos.getX(); - this.y = pos.getY(); - this.z = pos.getZ(); - this.priority = priority; - } - - @Override - public void fromBytes(ByteBuf buf) { - x = buf.readInt(); - y = buf.readInt(); - z = buf.readInt(); - priority = buf.readInt(); - } - - @Override - public void toBytes(ByteBuf buf) { - buf.writeInt(x); - buf.writeInt(y); - buf.writeInt(z); - buf.writeInt(priority); - } - - @Override - public void handle(MessagePriorityUpdate message, EntityPlayerMP player) { - TileEntity tile = player.worldObj.getTileEntity(new BlockPos(message.x, message.y, message.z)); - - if (tile instanceof TileStorage) { - ((TileStorage) tile).setPriority(message.priority); - } else if (tile instanceof TileExternalStorage) { - ((TileExternalStorage) tile).setPriority(message.priority); - } else if (tile instanceof TileDiskDrive) { - ((TileDiskDrive) tile).setPriority(message.priority); - } - } -} diff --git a/src/main/java/refinedstorage/network/MessageRedstoneModeUpdate.java b/src/main/java/refinedstorage/network/MessageRedstoneModeUpdate.java deleted file mode 100755 index ba6752aad..000000000 --- a/src/main/java/refinedstorage/network/MessageRedstoneModeUpdate.java +++ /dev/null @@ -1,48 +0,0 @@ -package refinedstorage.network; - -import io.netty.buffer.ByteBuf; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.math.BlockPos; -import net.minecraftforge.fml.common.network.simpleimpl.IMessage; -import refinedstorage.tile.config.IRedstoneModeConfig; - -public class MessageRedstoneModeUpdate extends MessageHandlerPlayerToServer implements IMessage { - private int x; - private int y; - private int z; - - public MessageRedstoneModeUpdate() { - } - - public MessageRedstoneModeUpdate(IRedstoneModeConfig setting) { - this.x = ((TileEntity) setting).getPos().getX(); - this.y = ((TileEntity) setting).getPos().getY(); - this.z = ((TileEntity) setting).getPos().getZ(); - } - - @Override - public void fromBytes(ByteBuf buf) { - x = buf.readInt(); - y = buf.readInt(); - z = buf.readInt(); - } - - @Override - public void toBytes(ByteBuf buf) { - buf.writeInt(x); - buf.writeInt(y); - buf.writeInt(z); - } - - @Override - public void handle(MessageRedstoneModeUpdate message, EntityPlayerMP player) { - TileEntity tile = player.worldObj.getTileEntity(new BlockPos(message.x, message.y, message.z)); - - if (tile instanceof IRedstoneModeConfig) { - IRedstoneModeConfig setting = (IRedstoneModeConfig) tile; - - setting.setRedstoneMode(setting.getRedstoneMode().next()); - } - } -} diff --git a/src/main/java/refinedstorage/network/MessageTileContainerUpdate.java b/src/main/java/refinedstorage/network/MessageTileContainerUpdate.java deleted file mode 100755 index 03880c1f5..000000000 --- a/src/main/java/refinedstorage/network/MessageTileContainerUpdate.java +++ /dev/null @@ -1,53 +0,0 @@ -package refinedstorage.network; - -import io.netty.buffer.ByteBuf; -import net.minecraft.client.Minecraft; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.math.BlockPos; -import net.minecraftforge.fml.common.network.simpleimpl.IMessage; -import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler; -import net.minecraftforge.fml.common.network.simpleimpl.MessageContext; -import refinedstorage.proxy.ClientProxy; -import refinedstorage.tile.ISynchronizedContainer; - -public class MessageTileContainerUpdate implements IMessage, IMessageHandler { - private TileEntity tile; - - public MessageTileContainerUpdate() { - } - - public MessageTileContainerUpdate(TileEntity tile) { - this.tile = tile; - } - - @Override - public void fromBytes(ByteBuf buf) { - int x = buf.readInt(); - int y = buf.readInt(); - int z = buf.readInt(); - - if (Minecraft.getMinecraft().theWorld != null) { - tile = ClientProxy.getWorld().getTileEntity(new BlockPos(x, y, z)); - - if (tile instanceof ISynchronizedContainer) { - ((ISynchronizedContainer) tile).readContainerData(buf); - } - } - } - - @Override - public void toBytes(ByteBuf buf) { - buf.writeInt(tile.getPos().getX()); - buf.writeInt(tile.getPos().getY()); - buf.writeInt(tile.getPos().getZ()); - - if (tile instanceof ISynchronizedContainer) { - ((ISynchronizedContainer) tile).writeContainerData(buf); - } - } - - @Override - public IMessage onMessage(MessageTileContainerUpdate message, MessageContext ctx) { - return null; - } -} diff --git a/src/main/java/refinedstorage/proxy/CommonProxy.java b/src/main/java/refinedstorage/proxy/CommonProxy.java index 04431edd6..695f832c8 100755 --- a/src/main/java/refinedstorage/proxy/CommonProxy.java +++ b/src/main/java/refinedstorage/proxy/CommonProxy.java @@ -42,17 +42,9 @@ public class CommonProxy { RefinedStorage.INSTANCE.network.registerMessage(MessageTileDataParameter.class, MessageTileDataParameter.class, id++, Side.CLIENT); RefinedStorage.INSTANCE.network.registerMessage(MessageTileDataParameterUpdate.class, MessageTileDataParameterUpdate.class, id++, Side.SERVER); - RefinedStorage.INSTANCE.network.registerMessage(MessageTileContainerUpdate.class, MessageTileContainerUpdate.class, id++, Side.CLIENT); - RefinedStorage.INSTANCE.network.registerMessage(MessageRedstoneModeUpdate.class, MessageRedstoneModeUpdate.class, id++, Side.SERVER); RefinedStorage.INSTANCE.network.registerMessage(MessageGridInsertHeld.class, MessageGridInsertHeld.class, id++, Side.SERVER); RefinedStorage.INSTANCE.network.registerMessage(MessageGridPull.class, MessageGridPull.class, id++, Side.SERVER); - RefinedStorage.INSTANCE.network.registerMessage(MessageCompareUpdate.class, MessageCompareUpdate.class, id++, Side.SERVER); - RefinedStorage.INSTANCE.network.registerMessage(MessageModeToggle.class, MessageModeToggle.class, id++, Side.SERVER); - RefinedStorage.INSTANCE.network.registerMessage(MessageDetectorModeUpdate.class, MessageDetectorModeUpdate.class, id++, Side.SERVER); - RefinedStorage.INSTANCE.network.registerMessage(MessageDetectorAmountUpdate.class, MessageDetectorAmountUpdate.class, id++, Side.SERVER); RefinedStorage.INSTANCE.network.registerMessage(MessageGridCraftingClear.class, MessageGridCraftingClear.class, id++, Side.SERVER); - RefinedStorage.INSTANCE.network.registerMessage(MessagePriorityUpdate.class, MessagePriorityUpdate.class, id++, Side.SERVER); - RefinedStorage.INSTANCE.network.registerMessage(MessageGridSettingsUpdate.class, MessageGridSettingsUpdate.class, id++, Side.SERVER); RefinedStorage.INSTANCE.network.registerMessage(MessageGridCraftingTransfer.class, MessageGridCraftingTransfer.class, id++, Side.SERVER); RefinedStorage.INSTANCE.network.registerMessage(MessageWirelessGridSettingsUpdate.class, MessageWirelessGridSettingsUpdate.class, id++, Side.SERVER); RefinedStorage.INSTANCE.network.registerMessage(MessageGridCraftingStart.class, MessageGridCraftingStart.class, id++, Side.SERVER); diff --git a/src/main/java/refinedstorage/tile/ISynchronizedContainer.java b/src/main/java/refinedstorage/tile/ISynchronizedContainer.java deleted file mode 100755 index c901ffc5e..000000000 --- a/src/main/java/refinedstorage/tile/ISynchronizedContainer.java +++ /dev/null @@ -1,12 +0,0 @@ -package refinedstorage.tile; - -import io.netty.buffer.ByteBuf; -import net.minecraft.inventory.Container; - -public interface ISynchronizedContainer { - void readContainerData(ByteBuf buf); - - void writeContainerData(ByteBuf buf); - - Class getContainer(); -} diff --git a/src/main/java/refinedstorage/tile/TileBase.java b/src/main/java/refinedstorage/tile/TileBase.java index 834f5f8cd..fe2ee1d04 100755 --- a/src/main/java/refinedstorage/tile/TileBase.java +++ b/src/main/java/refinedstorage/tile/TileBase.java @@ -1,8 +1,6 @@ package refinedstorage.tile; import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.inventory.IInventory; import net.minecraft.inventory.ISidedInventory; import net.minecraft.item.ItemStack; @@ -20,8 +18,6 @@ import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.wrapper.InvWrapper; import net.minecraftforge.items.wrapper.SidedInvWrapper; -import refinedstorage.RefinedStorage; -import refinedstorage.network.MessageTileContainerUpdate; import refinedstorage.tile.data.TileDataManager; import javax.annotation.Nullable; @@ -42,13 +38,7 @@ public abstract class TileBase extends TileEntity implements ITickable { if (!worldObj.isRemote) { ticks++; - if (this instanceof ISynchronizedContainer) { - for (EntityPlayer player : worldObj.playerEntities) { - if (((ISynchronizedContainer) this).getContainer() == player.openContainer.getClass()) { - RefinedStorage.INSTANCE.network.sendTo(new MessageTileContainerUpdate(this), (EntityPlayerMP) player); - } - } - } + dataManager.detectAndSendChanges(); } } diff --git a/src/main/java/refinedstorage/tile/TileCable.java b/src/main/java/refinedstorage/tile/TileCable.java index 305a9f76b..6fa1a35be 100755 --- a/src/main/java/refinedstorage/tile/TileCable.java +++ b/src/main/java/refinedstorage/tile/TileCable.java @@ -1,6 +1,5 @@ package refinedstorage.tile; -import net.minecraft.inventory.Container; import refinedstorage.RefinedStorage; public class TileCable extends TileNode { @@ -13,9 +12,4 @@ public class TileCable extends TileNode { public void updateNode() { // NO OP } - - @Override - public Class getContainer() { - return null; - } } diff --git a/src/main/java/refinedstorage/tile/TileConstructor.java b/src/main/java/refinedstorage/tile/TileConstructor.java index 7781062e4..e2f6c126a 100755 --- a/src/main/java/refinedstorage/tile/TileConstructor.java +++ b/src/main/java/refinedstorage/tile/TileConstructor.java @@ -1,9 +1,7 @@ package refinedstorage.tile; -import io.netty.buffer.ByteBuf; import net.minecraft.block.SoundType; import net.minecraft.block.state.IBlockState; -import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; @@ -14,14 +12,17 @@ import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; import refinedstorage.RefinedStorage; import refinedstorage.apiimpl.autocrafting.CraftingTaskScheduler; -import refinedstorage.container.ContainerConstructor; import refinedstorage.container.slot.SlotSpecimen; import refinedstorage.inventory.ItemHandlerBasic; import refinedstorage.inventory.ItemHandlerUpgrade; import refinedstorage.item.ItemUpgrade; import refinedstorage.tile.config.ICompareConfig; +import refinedstorage.tile.data.TileDataManager; +import refinedstorage.tile.data.TileDataParameter; public class TileConstructor extends TileNode implements ICompareConfig { + public static final TileDataParameter COMPARE = ICompareConfig.createConfigParameter(); + private static final String NBT_COMPARE = "Compare"; private static final int BASE_SPEED = 20; @@ -34,6 +35,7 @@ public class TileConstructor extends TileNode implements ICompareConfig { block = SlotSpecimen.getBlockState(worldObj, pos.offset(getDirection()), getStackInSlot(0)); } }; + private ItemHandlerUpgrade upgrades = new ItemHandlerUpgrade(4, this, ItemUpgrade.TYPE_SPEED, ItemUpgrade.TYPE_CRAFTING); private int compare = 0; @@ -41,6 +43,10 @@ public class TileConstructor extends TileNode implements ICompareConfig { private CraftingTaskScheduler scheduler = new CraftingTaskScheduler(this); + public TileConstructor() { + dataManager.addWatchedParameter(COMPARE); + } + @Override public int getEnergyUsage() { return RefinedStorage.INSTANCE.constructorUsage + upgrades.getEnergyUsage(); @@ -78,9 +84,13 @@ public class TileConstructor extends TileNode implements ICompareConfig { @Override public void setCompare(int compare) { - this.compare = compare; + if (worldObj.isRemote) { + TileDataManager.setParameter(COMPARE, compare); + } else { + this.compare = compare; - markDirty(); + markDirty(); + } } @Override @@ -111,25 +121,6 @@ public class TileConstructor extends TileNode implements ICompareConfig { return tag; } - @Override - public void readContainerData(ByteBuf buf) { - super.readContainerData(buf); - - compare = buf.readInt(); - } - - @Override - public void writeContainerData(ByteBuf buf) { - super.writeContainerData(buf); - - buf.writeInt(compare); - } - - @Override - public Class getContainer() { - return ContainerConstructor.class; - } - public IItemHandler getUpgrades() { return upgrades; } diff --git a/src/main/java/refinedstorage/tile/TileController.java b/src/main/java/refinedstorage/tile/TileController.java index d6fcf6229..7be78dec7 100755 --- a/src/main/java/refinedstorage/tile/TileController.java +++ b/src/main/java/refinedstorage/tile/TileController.java @@ -2,12 +2,9 @@ package refinedstorage.tile; import cofh.api.energy.EnergyStorage; import cofh.api.energy.IEnergyReceiver; -import io.netty.buffer.ByteBuf; import net.darkhax.tesla.capability.TeslaCapabilities; -import net.minecraft.block.state.IBlockState; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; @@ -15,7 +12,6 @@ import net.minecraft.util.EnumFacing; import net.minecraft.util.math.BlockPos; import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.common.util.Constants; -import net.minecraftforge.fml.common.network.ByteBufUtils; import net.minecraftforge.items.ItemHandlerHelper; import refinedstorage.RefinedStorage; import refinedstorage.RefinedStorageBlocks; @@ -35,7 +31,6 @@ import refinedstorage.apiimpl.network.WirelessGridHandler; import refinedstorage.apiimpl.storage.GroupedStorage; import refinedstorage.block.BlockController; import refinedstorage.block.EnumControllerType; -import refinedstorage.container.ContainerController; import refinedstorage.container.ContainerGrid; import refinedstorage.integration.ic2.ControllerEnergyIC2; import refinedstorage.integration.ic2.ControllerEnergyIC2None; @@ -52,32 +47,26 @@ import refinedstorage.tile.externalstorage.ExternalStorage; import java.util.*; -public class TileController extends TileBase implements INetworkMaster, IEnergyReceiver, ISynchronizedContainer, IRedstoneModeConfig { +public class TileController extends TileBase implements INetworkMaster, IEnergyReceiver, IRedstoneModeConfig { public static final String NBT_ENERGY = "Energy"; public static final String NBT_ENERGY_CAPACITY = "EnergyCapacity"; private static final String NBT_CRAFTING_TASKS = "CraftingTasks"; - private static final Comparator SIZE_COMPARATOR = new Comparator() { - @Override - public int compare(IStorage left, IStorage right) { - if (left.getStored() == right.getStored()) { - return 0; - } - - return (left.getStored() > right.getStored()) ? -1 : 1; + private static final Comparator SIZE_COMPARATOR = (left, right) -> { + if (left.getStored() == right.getStored()) { + return 0; } + + return (left.getStored() > right.getStored()) ? -1 : 1; }; - private static final Comparator PRIORITY_COMPARATOR = new Comparator() { - @Override - public int compare(IStorage left, IStorage right) { - if (left.getPriority() == right.getPriority()) { - return 0; - } - - return (left.getPriority() > right.getPriority()) ? -1 : 1; + private static final Comparator PRIORITY_COMPARATOR = (left, right) -> { + if (left.getPriority() == right.getPriority()) { + return 0; } + + return (left.getPriority() > right.getPriority()) ? -1 : 1; }; private GridHandler gridHandler = new GridHandler(this); @@ -613,7 +602,8 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR return type == null ? EnumControllerType.NORMAL : type; } - @Override + // @TODO: Make this work as well + /*@Override public void readContainerData(ByteBuf buf) { energy.setEnergyStored(buf.readInt()); this.energyUsage = buf.readInt(); @@ -683,7 +673,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR @Override public Class getContainer() { return ContainerController.class; - } + }*/ @Override public T getCapability(Capability capability, EnumFacing facing) { diff --git a/src/main/java/refinedstorage/tile/TileCrafter.java b/src/main/java/refinedstorage/tile/TileCrafter.java index 729c487f7..4c2b5334f 100755 --- a/src/main/java/refinedstorage/tile/TileCrafter.java +++ b/src/main/java/refinedstorage/tile/TileCrafter.java @@ -1,7 +1,5 @@ package refinedstorage.tile; -import net.minecraft.inventory.Container; -import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; import net.minecraftforge.common.capabilities.Capability; @@ -13,20 +11,13 @@ import refinedstorage.RefinedStorageItems; import refinedstorage.api.autocrafting.ICraftingPatternContainer; import refinedstorage.api.autocrafting.ICraftingTask; import refinedstorage.api.network.INetworkMaster; -import refinedstorage.container.ContainerCrafter; -import refinedstorage.inventory.IItemValidator; import refinedstorage.inventory.ItemHandlerBasic; import refinedstorage.inventory.ItemHandlerUpgrade; import refinedstorage.item.ItemPattern; import refinedstorage.item.ItemUpgrade; public class TileCrafter extends TileNode implements ICraftingPatternContainer { - private ItemHandlerBasic patterns = new ItemHandlerBasic(9, this, new IItemValidator() { - @Override - public boolean isValid(ItemStack stack) { - return stack.getItem() == RefinedStorageItems.PATTERN && ItemPattern.isValid(stack); - } - }) { + private ItemHandlerBasic patterns = new ItemHandlerBasic(9, this, stack -> (stack.getItem() == RefinedStorageItems.PATTERN && ItemPattern.isValid(stack))) { @Override protected void onContentsChanged(int slot) { super.onContentsChanged(slot); @@ -56,11 +47,6 @@ public class TileCrafter extends TileNode implements ICraftingPatternContainer { public void updateNode() { } - @Override - public Class getContainer() { - return ContainerCrafter.class; - } - @Override public void onConnectionChange(INetworkMaster network, boolean state) { if (!state) { diff --git a/src/main/java/refinedstorage/tile/TileCraftingMonitor.java b/src/main/java/refinedstorage/tile/TileCraftingMonitor.java index 4357bd91a..7d62ec87c 100755 --- a/src/main/java/refinedstorage/tile/TileCraftingMonitor.java +++ b/src/main/java/refinedstorage/tile/TileCraftingMonitor.java @@ -1,17 +1,12 @@ package refinedstorage.tile; -import io.netty.buffer.ByteBuf; -import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; -import net.minecraftforge.fml.common.network.ByteBufUtils; import refinedstorage.RefinedStorage; -import refinedstorage.api.autocrafting.ICraftingTask; -import refinedstorage.container.ContainerCraftingMonitor; import java.util.ArrayList; -import java.util.Collections; import java.util.List; +// @TODO: Make this work! public class TileCraftingMonitor extends TileNode { private List tasks = new ArrayList(); @@ -24,7 +19,7 @@ public class TileCraftingMonitor extends TileNode { public void updateNode() { } - @Override + /*@Override public void writeContainerData(ByteBuf buf) { super.writeContainerData(buf); @@ -66,17 +61,12 @@ public class TileCraftingMonitor extends TileNode { Collections.reverse(newTasks); tasks = newTasks; - } + }*/ public List getTasks() { return tasks; } - @Override - public Class getContainer() { - return ContainerCraftingMonitor.class; - } - public class ClientSideCraftingTask { public ItemStack output; public int id; diff --git a/src/main/java/refinedstorage/tile/TileDestructor.java b/src/main/java/refinedstorage/tile/TileDestructor.java index 23fc6bf98..e3ca31f5e 100755 --- a/src/main/java/refinedstorage/tile/TileDestructor.java +++ b/src/main/java/refinedstorage/tile/TileDestructor.java @@ -1,9 +1,7 @@ package refinedstorage.tile; -import io.netty.buffer.ByteBuf; import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; -import net.minecraft.inventory.Container; import net.minecraft.inventory.InventoryHelper; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; @@ -13,18 +11,21 @@ import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; import refinedstorage.RefinedStorage; -import refinedstorage.container.ContainerDestructor; import refinedstorage.inventory.ItemHandlerBasic; import refinedstorage.inventory.ItemHandlerUpgrade; import refinedstorage.item.ItemUpgrade; import refinedstorage.tile.config.ICompareConfig; import refinedstorage.tile.config.IModeConfig; -import refinedstorage.tile.config.ModeConstants; import refinedstorage.tile.config.ModeFilter; +import refinedstorage.tile.data.TileDataManager; +import refinedstorage.tile.data.TileDataParameter; import java.util.List; public class TileDestructor extends TileNode implements ICompareConfig, IModeConfig { + public static final TileDataParameter COMPARE = ICompareConfig.createConfigParameter(); + public static final TileDataParameter MODE = IModeConfig.createConfigParameter(); + private static final String NBT_COMPARE = "Compare"; private static final String NBT_MODE = "Mode"; @@ -34,7 +35,12 @@ public class TileDestructor extends TileNode implements ICompareConfig, IModeCon private ItemHandlerUpgrade upgrades = new ItemHandlerUpgrade(4, this, ItemUpgrade.TYPE_SPEED); private int compare = 0; - private int mode = ModeConstants.WHITELIST; + private int mode = IModeConfig.WHITELIST; + + public TileDestructor() { + dataManager.addWatchedParameter(COMPARE); + dataManager.addWatchedParameter(MODE); + } @Override public int getEnergyUsage() { @@ -81,9 +87,13 @@ public class TileDestructor extends TileNode implements ICompareConfig, IModeCon @Override public void setCompare(int compare) { - this.compare = compare; + if (worldObj.isRemote) { + TileDataManager.setParameter(COMPARE, compare); + } else { + this.compare = compare; - markDirty(); + markDirty(); + } } @Override @@ -93,9 +103,13 @@ public class TileDestructor extends TileNode implements ICompareConfig, IModeCon @Override public void setMode(int mode) { - this.mode = mode; + if (worldObj.isRemote) { + TileDataManager.setParameter(MODE, mode); + } else { + this.mode = mode; - markDirty(); + markDirty(); + } } @Override @@ -127,26 +141,6 @@ public class TileDestructor extends TileNode implements ICompareConfig, IModeCon return tag; } - @Override - public void readContainerData(ByteBuf buf) { - super.readContainerData(buf); - - compare = buf.readInt(); - mode = buf.readInt(); - } - - @Override - public void writeContainerData(ByteBuf buf) { - super.writeContainerData(buf); - - buf.writeInt(compare); - buf.writeInt(mode); - } - - public Class getContainer() { - return ContainerDestructor.class; - } - public IItemHandler getUpgrades() { return upgrades; } diff --git a/src/main/java/refinedstorage/tile/TileDetector.java b/src/main/java/refinedstorage/tile/TileDetector.java index b9ece57c2..063072889 100755 --- a/src/main/java/refinedstorage/tile/TileDetector.java +++ b/src/main/java/refinedstorage/tile/TileDetector.java @@ -1,20 +1,54 @@ package refinedstorage.tile; -import io.netty.buffer.ByteBuf; -import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.datasync.DataSerializers; import net.minecraftforge.items.IItemHandler; import refinedstorage.RefinedStorage; import refinedstorage.RefinedStorageBlocks; import refinedstorage.api.network.INetworkMaster; -import refinedstorage.container.ContainerDetector; import refinedstorage.inventory.ItemHandlerBasic; import refinedstorage.tile.config.ICompareConfig; import refinedstorage.tile.config.RedstoneMode; +import refinedstorage.tile.data.ITileDataConsumer; +import refinedstorage.tile.data.ITileDataProducer; +import refinedstorage.tile.data.TileDataManager; +import refinedstorage.tile.data.TileDataParameter; public class TileDetector extends TileNode implements ICompareConfig { - public static final int SPEED = 5; + public static final TileDataParameter COMPARE = ICompareConfig.createConfigParameter(); + + public static final TileDataParameter MODE = TileDataManager.createParameter(DataSerializers.VARINT, new ITileDataProducer() { + @Override + public Integer getValue(TileDetector tile) { + return tile.mode; + } + }, new ITileDataConsumer() { + @Override + public void setValue(TileDetector tile, Integer value) { + if (value == MODE_UNDER || value == MODE_EQUAL || value == MODE_ABOVE) { + tile.mode = value; + + tile.markDirty(); + } + } + }); + + public static final TileDataParameter AMOUNT = TileDataManager.createParameter(DataSerializers.VARINT, new ITileDataProducer() { + @Override + public Integer getValue(TileDetector tile) { + return tile.amount; + } + }, new ITileDataConsumer() { + @Override + public void setValue(TileDetector tile, Integer value) { + tile.amount = value; + + tile.markDirty(); + } + }); + + private static final int SPEED = 5; public static final int MODE_UNDER = 0; public static final int MODE_EQUAL = 1; @@ -34,6 +68,12 @@ public class TileDetector extends TileNode implements ICompareConfig { private boolean powered = false; private boolean wasPowered; + public TileDetector() { + dataManager.addWatchedParameter(COMPARE); + dataManager.addWatchedParameter(MODE); + dataManager.addWatchedParameter(AMOUNT); + } + @Override public int getEnergyUsage() { return RefinedStorage.INSTANCE.detectorUsage; @@ -107,29 +147,13 @@ public class TileDetector extends TileNode implements ICompareConfig { @Override public void setCompare(int compare) { - this.compare = compare; + if (worldObj.isRemote) { + TileDataManager.setParameter(COMPARE, compare); + } else { + this.compare = compare; - markDirty(); - } - - public int getMode() { - return mode; - } - - public void setMode(int mode) { - this.mode = mode; - - markDirty(); - } - - public int getAmount() { - return amount; - } - - public void setAmount(int amount) { - this.amount = amount; - - markDirty(); + markDirty(); + } } @Override @@ -180,29 +204,6 @@ public class TileDetector extends TileNode implements ICompareConfig { return tag; } - @Override - public void writeContainerData(ByteBuf buf) { - super.writeContainerData(buf); - - buf.writeInt(compare); - buf.writeInt(mode); - buf.writeInt(amount); - } - - @Override - public void readContainerData(ByteBuf buf) { - super.readContainerData(buf); - - compare = buf.readInt(); - mode = buf.readInt(); - amount = buf.readInt(); - } - - @Override - public Class getContainer() { - return ContainerDetector.class; - } - public IItemHandler getInventory() { return filter; } diff --git a/src/main/java/refinedstorage/tile/TileDiskDrive.java b/src/main/java/refinedstorage/tile/TileDiskDrive.java index 42ee7a690..ba03be060 100755 --- a/src/main/java/refinedstorage/tile/TileDiskDrive.java +++ b/src/main/java/refinedstorage/tile/TileDiskDrive.java @@ -1,7 +1,5 @@ package refinedstorage.tile; -import io.netty.buffer.ByteBuf; -import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; @@ -18,15 +16,19 @@ import refinedstorage.api.storage.IStorage; import refinedstorage.api.storage.IStorageProvider; import refinedstorage.apiimpl.storage.NBTStorage; import refinedstorage.block.EnumStorageType; -import refinedstorage.container.ContainerDiskDrive; import refinedstorage.inventory.ItemHandlerBasic; import refinedstorage.inventory.ItemValidatorBasic; -import refinedstorage.network.MessagePriorityUpdate; import refinedstorage.tile.config.*; +import refinedstorage.tile.data.TileDataManager; +import refinedstorage.tile.data.TileDataParameter; import java.util.List; -public class TileDiskDrive extends TileNode implements IStorageProvider, IStorageGui, ICompareConfig, IModeConfig { +public class TileDiskDrive extends TileNode implements IStorageProvider, IStorageGui, ICompareConfig, IModeConfig, IPrioritizable { + public static final TileDataParameter PRIORITY = IPrioritizable.createConfigParameter(); + public static final TileDataParameter COMPARE = ICompareConfig.createConfigParameter(); + public static final TileDataParameter MODE = IModeConfig.createConfigParameter(); + public class Storage extends NBTStorage { public Storage(ItemStack disk) { super(disk.getTagCompound(), EnumStorageType.getById(disk.getItemDamage()).getCapacity(), TileDiskDrive.this); @@ -89,15 +91,22 @@ public class TileDiskDrive extends TileNode implements IStorageProvider, IStorag return super.extractItem(slot, amount, simulate); } }; + private ItemHandlerBasic filters = new ItemHandlerBasic(9, this); private Storage storages[] = new Storage[8]; private int priority = 0; private int compare = 0; - private int mode = ModeConstants.WHITELIST; + private int mode = IModeConfig.WHITELIST; private int stored = 0; + public TileDiskDrive() { + dataManager.addWatchedParameter(PRIORITY); + dataManager.addWatchedParameter(COMPARE); + dataManager.addWatchedParameter(MODE); + } + @Override public void update() { if (!worldObj.isRemote) { @@ -208,29 +217,6 @@ public class TileDiskDrive extends TileNode implements IStorageProvider, IStorag super.readUpdate(tag); } - @Override - public void writeContainerData(ByteBuf buf) { - super.writeContainerData(buf); - - buf.writeInt(priority); - buf.writeInt(compare); - buf.writeInt(mode); - } - - @Override - public void readContainerData(ByteBuf buf) { - super.readContainerData(buf); - - priority = buf.readInt(); - compare = buf.readInt(); - mode = buf.readInt(); - } - - @Override - public Class getContainer() { - return ContainerDiskDrive.class; - } - @Override public int getCompare() { return compare; @@ -238,9 +224,13 @@ public class TileDiskDrive extends TileNode implements IStorageProvider, IStorag @Override public void setCompare(int compare) { - this.compare = compare; + if (worldObj.isRemote) { + TileDataManager.setParameter(COMPARE, compare); + } else { + this.compare = compare; - markDirty(); + markDirty(); + } } @Override @@ -250,9 +240,13 @@ public class TileDiskDrive extends TileNode implements IStorageProvider, IStorag @Override public void setMode(int mode) { - this.mode = mode; + if (worldObj.isRemote) { + TileDataManager.setParameter(MODE, mode); + } else { + this.mode = mode; - markDirty(); + markDirty(); + } } public int getStoredForDisplayServer() { @@ -310,16 +304,17 @@ public class TileDiskDrive extends TileNode implements IStorageProvider, IStorag return this; } - @Override - public void onPriorityChanged(int priority) { - RefinedStorage.INSTANCE.network.sendToServer(new MessagePriorityUpdate(pos, priority)); - } - @Override public int getPriority() { return priority; } + @Override + public void onPriorityChanged(int priority) { + TileDataManager.setParameter(PRIORITY, priority); + } + + @Override public void setPriority(int priority) { this.priority = priority; diff --git a/src/main/java/refinedstorage/tile/TileExporter.java b/src/main/java/refinedstorage/tile/TileExporter.java index 7c84f5f5d..e259aca3d 100755 --- a/src/main/java/refinedstorage/tile/TileExporter.java +++ b/src/main/java/refinedstorage/tile/TileExporter.java @@ -1,7 +1,5 @@ package refinedstorage.tile; -import io.netty.buffer.ByteBuf; -import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; @@ -11,13 +9,16 @@ import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.ItemHandlerHelper; import refinedstorage.RefinedStorage; import refinedstorage.apiimpl.autocrafting.CraftingTaskScheduler; -import refinedstorage.container.ContainerExporter; import refinedstorage.inventory.ItemHandlerBasic; import refinedstorage.inventory.ItemHandlerUpgrade; import refinedstorage.item.ItemUpgrade; import refinedstorage.tile.config.ICompareConfig; +import refinedstorage.tile.data.TileDataManager; +import refinedstorage.tile.data.TileDataParameter; public class TileExporter extends TileNode implements ICompareConfig { + public static final TileDataParameter COMPARE = ICompareConfig.createConfigParameter(); + private static final String NBT_COMPARE = "Compare"; private ItemHandlerBasic filters = new ItemHandlerBasic(9, this); @@ -27,6 +28,10 @@ public class TileExporter extends TileNode implements ICompareConfig { private CraftingTaskScheduler scheduler = new CraftingTaskScheduler(this); + public TileExporter() { + dataManager.addWatchedParameter(COMPARE); + } + @Override public int getEnergyUsage() { return RefinedStorage.INSTANCE.exporterUsage + upgrades.getEnergyUsage(); @@ -70,9 +75,13 @@ public class TileExporter extends TileNode implements ICompareConfig { @Override public void setCompare(int compare) { - this.compare = compare; + if (worldObj.isRemote) { + TileDataManager.setParameter(COMPARE, compare); + } else { + this.compare = compare; - markDirty(); + markDirty(); + } } @Override @@ -103,25 +112,6 @@ public class TileExporter extends TileNode implements ICompareConfig { return tag; } - @Override - public void readContainerData(ByteBuf buf) { - super.readContainerData(buf); - - compare = buf.readInt(); - } - - @Override - public void writeContainerData(ByteBuf buf) { - super.writeContainerData(buf); - - buf.writeInt(compare); - } - - @Override - public Class getContainer() { - return ContainerExporter.class; - } - public IItemHandler getFilters() { return filters; } diff --git a/src/main/java/refinedstorage/tile/TileImporter.java b/src/main/java/refinedstorage/tile/TileImporter.java index 6a23c3462..e98b2a80d 100755 --- a/src/main/java/refinedstorage/tile/TileImporter.java +++ b/src/main/java/refinedstorage/tile/TileImporter.java @@ -1,7 +1,5 @@ package refinedstorage.tile; -import io.netty.buffer.ByteBuf; -import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; @@ -9,16 +7,19 @@ import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; import refinedstorage.RefinedStorage; -import refinedstorage.container.ContainerImporter; import refinedstorage.inventory.ItemHandlerBasic; import refinedstorage.inventory.ItemHandlerUpgrade; import refinedstorage.item.ItemUpgrade; import refinedstorage.tile.config.ICompareConfig; import refinedstorage.tile.config.IModeConfig; -import refinedstorage.tile.config.ModeConstants; import refinedstorage.tile.config.ModeFilter; +import refinedstorage.tile.data.TileDataManager; +import refinedstorage.tile.data.TileDataParameter; public class TileImporter extends TileNode implements ICompareConfig, IModeConfig { + public static final TileDataParameter COMPARE = ICompareConfig.createConfigParameter(); + public static final TileDataParameter MODE = IModeConfig.createConfigParameter(); + private static final String NBT_COMPARE = "Compare"; private static final String NBT_MODE = "Mode"; @@ -26,10 +27,15 @@ public class TileImporter extends TileNode implements ICompareConfig, IModeConfi private ItemHandlerUpgrade upgrades = new ItemHandlerUpgrade(4, this, ItemUpgrade.TYPE_SPEED, ItemUpgrade.TYPE_STACK); private int compare = 0; - private int mode = ModeConstants.WHITELIST; + private int mode = IModeConfig.WHITELIST; private int currentSlot; + public TileImporter() { + dataManager.addWatchedParameter(COMPARE); + dataManager.addWatchedParameter(MODE); + } + @Override public int getEnergyUsage() { return RefinedStorage.INSTANCE.importerUsage + upgrades.getEnergyUsage(); @@ -75,9 +81,13 @@ public class TileImporter extends TileNode implements ICompareConfig, IModeConfi @Override public void setCompare(int compare) { - this.compare = compare; + if (worldObj.isRemote) { + TileDataManager.setParameter(COMPARE, compare); + } else { + this.compare = compare; - markDirty(); + markDirty(); + } } @Override @@ -87,9 +97,13 @@ public class TileImporter extends TileNode implements ICompareConfig, IModeConfi @Override public void setMode(int mode) { - this.mode = mode; + if (worldObj.isRemote) { + TileDataManager.setParameter(MODE, mode); + } else { + this.mode = mode; - markDirty(); + markDirty(); + } } @Override @@ -121,27 +135,6 @@ public class TileImporter extends TileNode implements ICompareConfig, IModeConfi return tag; } - @Override - public void readContainerData(ByteBuf buf) { - super.readContainerData(buf); - - compare = buf.readInt(); - mode = buf.readInt(); - } - - @Override - public void writeContainerData(ByteBuf buf) { - super.writeContainerData(buf); - - buf.writeInt(compare); - buf.writeInt(mode); - } - - @Override - public Class getContainer() { - return ContainerImporter.class; - } - public IItemHandler getUpgrades() { return upgrades; } diff --git a/src/main/java/refinedstorage/tile/TileInterface.java b/src/main/java/refinedstorage/tile/TileInterface.java index 13703ad11..bad2b55fb 100755 --- a/src/main/java/refinedstorage/tile/TileInterface.java +++ b/src/main/java/refinedstorage/tile/TileInterface.java @@ -1,7 +1,5 @@ package refinedstorage.tile; -import io.netty.buffer.ByteBuf; -import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; @@ -10,13 +8,16 @@ import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.wrapper.CombinedInvWrapper; import refinedstorage.RefinedStorage; -import refinedstorage.container.ContainerInterface; import refinedstorage.inventory.ItemHandlerBasic; import refinedstorage.inventory.ItemHandlerUpgrade; import refinedstorage.item.ItemUpgrade; import refinedstorage.tile.config.ICompareConfig; +import refinedstorage.tile.data.TileDataManager; +import refinedstorage.tile.data.TileDataParameter; public class TileInterface extends TileNode implements ICompareConfig { + public static final TileDataParameter COMPARE = ICompareConfig.createConfigParameter(); + private static final String NBT_COMPARE = "Compare"; private ItemHandlerBasic importItems = new ItemHandlerBasic(9, this); @@ -28,6 +29,10 @@ public class TileInterface extends TileNode implements ICompareConfig { private int currentSlot = 0; + public TileInterface() { + dataManager.addWatchedParameter(COMPARE); + } + @Override public int getEnergyUsage() { return RefinedStorage.INSTANCE.interfaceUsage + upgrades.getEnergyUsage(); @@ -96,9 +101,13 @@ public class TileInterface extends TileNode implements ICompareConfig { @Override public void setCompare(int compare) { - this.compare = compare; + if (worldObj.isRemote) { + TileDataManager.setParameter(COMPARE, compare); + } else { + this.compare = compare; - markDirty(); + markDirty(); + } } @Override @@ -129,26 +138,6 @@ public class TileInterface extends TileNode implements ICompareConfig { return tag; } - - @Override - public void readContainerData(ByteBuf buf) { - super.readContainerData(buf); - - compare = buf.readInt(); - } - - @Override - public void writeContainerData(ByteBuf buf) { - super.writeContainerData(buf); - - buf.writeInt(compare); - } - - @Override - public Class getContainer() { - return ContainerInterface.class; - } - public IItemHandler getImportItems() { return importItems; } diff --git a/src/main/java/refinedstorage/tile/TileNetworkReceiver.java b/src/main/java/refinedstorage/tile/TileNetworkReceiver.java index 3edbe7d30..37516f84b 100755 --- a/src/main/java/refinedstorage/tile/TileNetworkReceiver.java +++ b/src/main/java/refinedstorage/tile/TileNetworkReceiver.java @@ -1,6 +1,5 @@ package refinedstorage.tile; -import net.minecraft.inventory.Container; import refinedstorage.RefinedStorage; import refinedstorage.tile.config.RedstoneMode; @@ -14,11 +13,6 @@ public class TileNetworkReceiver extends TileNode { return RefinedStorage.INSTANCE.networkReceiverUsage; } - @Override - public Class getContainer() { - return null; - } - @Override public void setRedstoneMode(RedstoneMode mode) { // NO OP diff --git a/src/main/java/refinedstorage/tile/TileNetworkTransmitter.java b/src/main/java/refinedstorage/tile/TileNetworkTransmitter.java index 0b7dfff89..348713b6f 100755 --- a/src/main/java/refinedstorage/tile/TileNetworkTransmitter.java +++ b/src/main/java/refinedstorage/tile/TileNetworkTransmitter.java @@ -1,21 +1,43 @@ package refinedstorage.tile; -import io.netty.buffer.ByteBuf; -import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.datasync.DataSerializers; import net.minecraft.util.math.BlockPos; import refinedstorage.RefinedStorage; import refinedstorage.RefinedStorageItems; import refinedstorage.api.network.NetworkUtils; -import refinedstorage.container.ContainerNetworkTransmitter; import refinedstorage.inventory.ItemHandlerBasic; import refinedstorage.inventory.ItemHandlerUpgrade; import refinedstorage.inventory.ItemValidatorBasic; import refinedstorage.item.ItemNetworkCard; import refinedstorage.item.ItemUpgrade; +import refinedstorage.tile.data.ITileDataProducer; +import refinedstorage.tile.data.TileDataManager; +import refinedstorage.tile.data.TileDataParameter; public class TileNetworkTransmitter extends TileNode { + public static final TileDataParameter DISTANCE = TileDataManager.createParameter(DataSerializers.VARINT, new ITileDataProducer() { + @Override + public Integer getValue(TileNetworkTransmitter tile) { + return (tile.receiver != null && tile.isSameDimension()) ? tile.getDistance() : -1; + } + }); + + public static final TileDataParameter RECEIVER_DIMENSION = TileDataManager.createParameter(DataSerializers.VARINT, new ITileDataProducer() { + @Override + public Integer getValue(TileNetworkTransmitter tile) { + return tile.receiverDimension; + } + }); + + public static final TileDataParameter RECEIVER_DIMENSION_SUPPORTED = TileDataManager.createParameter(DataSerializers.BOOLEAN, new ITileDataProducer() { + @Override + public Boolean getValue(TileNetworkTransmitter tile) { + return tile.isDimensionSupported(); + } + }); + private ItemHandlerUpgrade upgrades = new ItemHandlerUpgrade(1, this, ItemUpgrade.TYPE_INTERDIMENSIONAL) { @Override protected void onContentsChanged(int slot) { @@ -50,11 +72,11 @@ public class TileNetworkTransmitter extends TileNode { private BlockPos receiver; private int receiverDimension; - // Used clientside - private int distance; - private boolean dimensionSupported; - public TileNetworkTransmitter() { + dataManager.addWatchedParameter(DISTANCE); + dataManager.addWatchedParameter(RECEIVER_DIMENSION); + dataManager.addWatchedParameter(RECEIVER_DIMENSION_SUPPORTED); + rebuildOnUpdateChange = true; } @@ -84,34 +106,11 @@ public class TileNetworkTransmitter extends TileNode { readItems(upgrades, 1, tag); } - @Override - public void writeContainerData(ByteBuf buf) { - super.writeContainerData(buf); - - buf.writeInt((receiver != null && isSameDimension()) ? getDistance() : -1); - buf.writeInt(receiverDimension); - buf.writeBoolean(isDimensionSupported()); - } - - @Override - public void readContainerData(ByteBuf buf) { - super.readContainerData(buf); - - distance = buf.readInt(); - receiverDimension = buf.readInt(); - dimensionSupported = buf.readBoolean(); - } - @Override public int getEnergyUsage() { return RefinedStorage.INSTANCE.networkTransmitterUsage + (isSameDimension() ? (int) Math.ceil(RefinedStorage.INSTANCE.networkTransmitterPerBlockUsage * getDistance()) : 0) + upgrades.getEnergyUsage(); } - @Override - public Class getContainer() { - return ContainerNetworkTransmitter.class; - } - public ItemHandlerBasic getNetworkCard() { return networkCard; } @@ -129,10 +128,6 @@ public class TileNetworkTransmitter extends TileNode { } public int getDistance() { - if (worldObj.isRemote) { - return distance; - } - if (receiver == null) { return 0; } @@ -145,6 +140,6 @@ public class TileNetworkTransmitter extends TileNode { } public boolean isDimensionSupported() { - return worldObj.isRemote ? dimensionSupported : (isSameDimension() || upgrades.hasUpgrade(ItemUpgrade.TYPE_INTERDIMENSIONAL)); + return isSameDimension() || upgrades.hasUpgrade(ItemUpgrade.TYPE_INTERDIMENSIONAL); } } diff --git a/src/main/java/refinedstorage/tile/TileNode.java b/src/main/java/refinedstorage/tile/TileNode.java index b0c35f2c9..b663c612e 100755 --- a/src/main/java/refinedstorage/tile/TileNode.java +++ b/src/main/java/refinedstorage/tile/TileNode.java @@ -1,8 +1,8 @@ package refinedstorage.tile; -import io.netty.buffer.ByteBuf; import net.minecraft.block.Block; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.datasync.DataSerializers; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import refinedstorage.api.network.INetworkMaster; @@ -11,8 +11,28 @@ import refinedstorage.api.network.NetworkUtils; import refinedstorage.block.BlockNode; import refinedstorage.tile.config.IRedstoneModeConfig; import refinedstorage.tile.config.RedstoneMode; +import refinedstorage.tile.data.ITileDataConsumer; +import refinedstorage.tile.data.ITileDataProducer; +import refinedstorage.tile.data.TileDataManager; +import refinedstorage.tile.data.TileDataParameter; + +public abstract class TileNode extends TileBase implements INetworkNode, IRedstoneModeConfig { + public static final TileDataParameter REDSTONE_MODE = TileDataManager.createParameter(DataSerializers.VARINT, new ITileDataProducer() { + @Override + public Integer getValue(TileNode tile) { + return tile.redstoneMode.id; + } + }, new ITileDataConsumer() { + @Override + public void setValue(TileNode tile, Integer value) { + RedstoneMode mode = RedstoneMode.getById(value); + + if (mode != null) { + tile.redstoneMode = mode; + } + } + }); -public abstract class TileNode extends TileBase implements INetworkNode, ISynchronizedContainer, IRedstoneModeConfig { private static final String NBT_CONNECTED = "Connected"; private RedstoneMode redstoneMode = RedstoneMode.IGNORE; @@ -23,6 +43,10 @@ public abstract class TileNode extends TileBase implements INetworkNode, ISynchr protected boolean connected; protected INetworkMaster network; + public TileNode() { + dataManager.addWatchedParameter(REDSTONE_MODE); + } + @Override public boolean canUpdate() { return redstoneMode.isEnabled(worldObj, pos); @@ -127,16 +151,6 @@ public abstract class TileNode extends TileBase implements INetworkNode, ISynchr markDirty(); } - @Override - public void readContainerData(ByteBuf buf) { - redstoneMode = RedstoneMode.getById(buf.readInt()); - } - - @Override - public void writeContainerData(ByteBuf buf) { - buf.writeInt(redstoneMode.id); - } - @Override public void read(NBTTagCompound tag) { super.read(tag); diff --git a/src/main/java/refinedstorage/tile/TileRelay.java b/src/main/java/refinedstorage/tile/TileRelay.java index 34e29e1f5..0c8a4d7ef 100755 --- a/src/main/java/refinedstorage/tile/TileRelay.java +++ b/src/main/java/refinedstorage/tile/TileRelay.java @@ -1,8 +1,6 @@ package refinedstorage.tile; -import net.minecraft.inventory.Container; import refinedstorage.RefinedStorage; -import refinedstorage.container.ContainerRelay; import refinedstorage.tile.config.RedstoneMode; public class TileRelay extends TileNode { @@ -25,9 +23,4 @@ public class TileRelay extends TileNode { public boolean canConduct() { return canUpdate(); } - - @Override - public Class getContainer() { - return ContainerRelay.class; - } } diff --git a/src/main/java/refinedstorage/tile/TileSolderer.java b/src/main/java/refinedstorage/tile/TileSolderer.java index 9f21c2ba2..3b45947b9 100755 --- a/src/main/java/refinedstorage/tile/TileSolderer.java +++ b/src/main/java/refinedstorage/tile/TileSolderer.java @@ -1,8 +1,7 @@ package refinedstorage.tile; -import io.netty.buffer.ByteBuf; -import net.minecraft.inventory.Container; 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.items.CapabilityItemHandler; @@ -13,13 +12,29 @@ import refinedstorage.api.RefinedStorageAPI; import refinedstorage.api.network.INetworkMaster; import refinedstorage.api.solderer.ISoldererRecipe; import refinedstorage.api.storage.CompareUtils; -import refinedstorage.container.ContainerSolderer; import refinedstorage.inventory.ItemHandlerBasic; import refinedstorage.inventory.ItemHandlerSolderer; import refinedstorage.inventory.ItemHandlerUpgrade; import refinedstorage.item.ItemUpgrade; +import refinedstorage.tile.data.ITileDataProducer; +import refinedstorage.tile.data.TileDataManager; +import refinedstorage.tile.data.TileDataParameter; public class TileSolderer extends TileNode { + public static final TileDataParameter DURATION = TileDataManager.createParameter(DataSerializers.VARINT, new ITileDataProducer() { + @Override + public Integer getValue(TileSolderer tile) { + return tile.recipe != null ? tile.recipe.getDuration() : 0; + } + }); + + public static final TileDataParameter PROGRESS = TileDataManager.createParameter(DataSerializers.VARINT, new ITileDataProducer() { + @Override + public Integer getValue(TileSolderer tile) { + return tile.progress; + } + }); + private static final String NBT_WORKING = "Working"; private static final String NBT_PROGRESS = "Progress"; @@ -31,7 +46,11 @@ public class TileSolderer extends TileNode { private boolean working = false; private int progress = 0; - private int duration; + + public TileSolderer() { + dataManager.addWatchedParameter(DURATION); + dataManager.addWatchedParameter(PROGRESS); + } @Override public int getEnergyUsage() { @@ -153,39 +172,10 @@ public class TileSolderer extends TileNode { super.readUpdate(tag); } - @Override - public void readContainerData(ByteBuf buf) { - super.readContainerData(buf); - - progress = buf.readInt(); - duration = buf.readInt(); - } - - @Override - public void writeContainerData(ByteBuf buf) { - super.writeContainerData(buf); - - buf.writeInt(progress); - buf.writeInt(recipe != null ? recipe.getDuration() : 0); - } - - @Override - public Class getContainer() { - return ContainerSolderer.class; - } - public boolean isWorking() { return working; } - public int getProgressScaled(int i) { - if (progress > duration) { - return i; - } - - return (int) ((float) progress / (float) duration * (float) i); - } - public ItemHandlerBasic getItems() { return items; } diff --git a/src/main/java/refinedstorage/tile/TileStorage.java b/src/main/java/refinedstorage/tile/TileStorage.java index aa31fd033..1db96775d 100755 --- a/src/main/java/refinedstorage/tile/TileStorage.java +++ b/src/main/java/refinedstorage/tile/TileStorage.java @@ -1,9 +1,8 @@ package refinedstorage.tile; -import io.netty.buffer.ByteBuf; -import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.datasync.DataSerializers; import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.ItemHandlerHelper; import refinedstorage.RefinedStorage; @@ -14,14 +13,25 @@ import refinedstorage.api.storage.IStorageProvider; import refinedstorage.apiimpl.storage.NBTStorage; import refinedstorage.block.BlockStorage; import refinedstorage.block.EnumStorageType; -import refinedstorage.container.ContainerStorage; import refinedstorage.inventory.ItemHandlerBasic; -import refinedstorage.network.MessagePriorityUpdate; import refinedstorage.tile.config.*; +import refinedstorage.tile.data.ITileDataProducer; +import refinedstorage.tile.data.TileDataManager; +import refinedstorage.tile.data.TileDataParameter; import java.util.List; -public class TileStorage extends TileNode implements IStorageProvider, IStorageGui, ICompareConfig, IModeConfig { +public class TileStorage extends TileNode implements IStorageProvider, IStorageGui, ICompareConfig, IModeConfig, IPrioritizable { + public static final TileDataParameter PRIORITY = IPrioritizable.createConfigParameter(); + public static final TileDataParameter COMPARE = ICompareConfig.createConfigParameter(); + public static final TileDataParameter MODE = IModeConfig.createConfigParameter(); + public static final TileDataParameter STORED = TileDataManager.createParameter(DataSerializers.VARINT, new ITileDataProducer() { + @Override + public Integer getValue(TileStorage tile) { + return NBTStorage.getStoredFromNBT(tile.storageTag); + } + }); + class Storage extends NBTStorage { public Storage() { super(TileStorage.this.getStorageTag(), TileStorage.this.getCapacity(), TileStorage.this); @@ -58,8 +68,14 @@ public class TileStorage extends TileNode implements IStorageProvider, IStorageG private int priority = 0; private int compare = 0; - private int mode = ModeConstants.WHITELIST; - private int stored; + private int mode = IModeConfig.WHITELIST; + + public TileStorage() { + dataManager.addWatchedParameter(PRIORITY); + dataManager.addWatchedParameter(COMPARE); + dataManager.addWatchedParameter(MODE); + dataManager.addWatchedParameter(STORED); + } @Override public int getEnergyUsage() { @@ -153,31 +169,6 @@ public class TileStorage extends TileNode implements IStorageProvider, IStorageG return type == null ? EnumStorageType.TYPE_1K : type; } - @Override - public void writeContainerData(ByteBuf buf) { - super.writeContainerData(buf); - - buf.writeInt(NBTStorage.getStoredFromNBT(storageTag)); - buf.writeInt(priority); - buf.writeInt(compare); - buf.writeInt(mode); - } - - @Override - public void readContainerData(ByteBuf buf) { - super.readContainerData(buf); - - stored = buf.readInt(); - priority = buf.readInt(); - compare = buf.readInt(); - mode = buf.readInt(); - } - - @Override - public Class getContainer() { - return ContainerStorage.class; - } - @Override public int getCompare() { return compare; @@ -185,9 +176,13 @@ public class TileStorage extends TileNode implements IStorageProvider, IStorageG @Override public void setCompare(int compare) { - this.compare = compare; + if (worldObj.isRemote) { + TileDataManager.setParameter(COMPARE, compare); + } else { + this.compare = compare; - markDirty(); + markDirty(); + } } @Override @@ -197,9 +192,13 @@ public class TileStorage extends TileNode implements IStorageProvider, IStorageG @Override public void setMode(int mode) { - this.mode = mode; + if (worldObj.isRemote) { + TileDataManager.setParameter(MODE, mode); + } else { + this.mode = mode; - markDirty(); + markDirty(); + } } @Override @@ -227,11 +226,6 @@ public class TileStorage extends TileNode implements IStorageProvider, IStorageG return this; } - @Override - public void onPriorityChanged(int priority) { - RefinedStorage.INSTANCE.network.sendToServer(new MessagePriorityUpdate(pos, priority)); - } - public NBTTagCompound getStorageTag() { return storageTag; } @@ -249,6 +243,12 @@ public class TileStorage extends TileNode implements IStorageProvider, IStorageG return priority; } + @Override + public void onPriorityChanged(int priority) { + TileDataManager.setParameter(PRIORITY, priority); + } + + @Override public void setPriority(int priority) { this.priority = priority; @@ -257,7 +257,7 @@ public class TileStorage extends TileNode implements IStorageProvider, IStorageG @Override public int getStored() { - return stored; + return (int) STORED.getValue(); } @Override diff --git a/src/main/java/refinedstorage/tile/TileWirelessTransmitter.java b/src/main/java/refinedstorage/tile/TileWirelessTransmitter.java index 2f487a7bd..12368e45e 100755 --- a/src/main/java/refinedstorage/tile/TileWirelessTransmitter.java +++ b/src/main/java/refinedstorage/tile/TileWirelessTransmitter.java @@ -1,7 +1,7 @@ package refinedstorage.tile; -import net.minecraft.inventory.Container; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.datasync.DataSerializers; import net.minecraft.util.EnumFacing; import net.minecraft.util.math.BlockPos; import net.minecraftforge.common.capabilities.Capability; @@ -9,12 +9,21 @@ import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; import refinedstorage.RefinedStorage; import refinedstorage.api.network.IWirelessTransmitter; -import refinedstorage.container.ContainerWirelessTransmitter; import refinedstorage.inventory.ItemHandlerBasic; import refinedstorage.inventory.ItemHandlerUpgrade; import refinedstorage.item.ItemUpgrade; +import refinedstorage.tile.data.ITileDataProducer; +import refinedstorage.tile.data.TileDataManager; +import refinedstorage.tile.data.TileDataParameter; public class TileWirelessTransmitter extends TileNode implements IWirelessTransmitter { + public static final TileDataParameter RANGE = TileDataManager.createParameter(DataSerializers.VARINT, new ITileDataProducer() { + @Override + public Integer getValue(TileWirelessTransmitter tile) { + return tile.getRange(); + } + }); + private ItemHandlerUpgrade upgrades = new ItemHandlerUpgrade(4, this, ItemUpgrade.TYPE_RANGE); @Override @@ -56,11 +65,6 @@ public class TileWirelessTransmitter extends TileNode implements IWirelessTransm return upgrades; } - @Override - public Class getContainer() { - return ContainerWirelessTransmitter.class; - } - @Override public IItemHandler getDroppedItems() { return upgrades; diff --git a/src/main/java/refinedstorage/tile/config/ICompareConfig.java b/src/main/java/refinedstorage/tile/config/ICompareConfig.java index 26da4637e..6a3f53110 100755 --- a/src/main/java/refinedstorage/tile/config/ICompareConfig.java +++ b/src/main/java/refinedstorage/tile/config/ICompareConfig.java @@ -1,6 +1,27 @@ package refinedstorage.tile.config; +import net.minecraft.network.datasync.DataSerializers; +import net.minecraft.tileentity.TileEntity; +import refinedstorage.tile.data.ITileDataConsumer; +import refinedstorage.tile.data.ITileDataProducer; +import refinedstorage.tile.data.TileDataManager; +import refinedstorage.tile.data.TileDataParameter; + public interface ICompareConfig { + static TileDataParameter createConfigParameter() { + return TileDataManager.createParameter(DataSerializers.VARINT, new ITileDataProducer() { + @Override + public Integer getValue(T tile) { + return ((ICompareConfig) tile).getCompare(); + } + }, new ITileDataConsumer() { + @Override + public void setValue(T tile, Integer value) { + ((ICompareConfig) tile).setCompare(value); + } + }); + } + int getCompare(); void setCompare(int compare); diff --git a/src/main/java/refinedstorage/tile/config/IModeConfig.java b/src/main/java/refinedstorage/tile/config/IModeConfig.java index cc7fa1ef0..b64dfdc52 100755 --- a/src/main/java/refinedstorage/tile/config/IModeConfig.java +++ b/src/main/java/refinedstorage/tile/config/IModeConfig.java @@ -1,6 +1,32 @@ package refinedstorage.tile.config; +import net.minecraft.network.datasync.DataSerializers; +import net.minecraft.tileentity.TileEntity; +import refinedstorage.tile.data.ITileDataConsumer; +import refinedstorage.tile.data.ITileDataProducer; +import refinedstorage.tile.data.TileDataManager; +import refinedstorage.tile.data.TileDataParameter; + public interface IModeConfig { + int WHITELIST = 0; + int BLACKLIST = 1; + + static TileDataParameter createConfigParameter() { + return TileDataManager.createParameter(DataSerializers.VARINT, new ITileDataProducer() { + @Override + public Integer getValue(T tile) { + return ((IModeConfig) tile).getMode(); + } + }, new ITileDataConsumer() { + @Override + public void setValue(T tile, Integer value) { + if (value == WHITELIST || value == BLACKLIST) { + ((IModeConfig) tile).setMode(value); + } + } + }); + } + void setMode(int mode); int getMode(); diff --git a/src/main/java/refinedstorage/tile/config/IPrioritizable.java b/src/main/java/refinedstorage/tile/config/IPrioritizable.java new file mode 100755 index 000000000..568fdb310 --- /dev/null +++ b/src/main/java/refinedstorage/tile/config/IPrioritizable.java @@ -0,0 +1,28 @@ +package refinedstorage.tile.config; + +import net.minecraft.network.datasync.DataSerializers; +import net.minecraft.tileentity.TileEntity; +import refinedstorage.tile.data.ITileDataConsumer; +import refinedstorage.tile.data.ITileDataProducer; +import refinedstorage.tile.data.TileDataManager; +import refinedstorage.tile.data.TileDataParameter; + +public interface IPrioritizable { + static TileDataParameter createConfigParameter() { + return TileDataManager.createParameter(DataSerializers.VARINT, new ITileDataProducer() { + @Override + public Integer getValue(T tile) { + return ((IPrioritizable) tile).getPriority(); + } + }, new ITileDataConsumer() { + @Override + public void setValue(T tile, Integer value) { + ((IPrioritizable) tile).setPriority(value); + } + }); + } + + int getPriority(); + + void setPriority(int priority); +} diff --git a/src/main/java/refinedstorage/tile/config/ModeConstants.java b/src/main/java/refinedstorage/tile/config/ModeConstants.java deleted file mode 100755 index 12dcc16f3..000000000 --- a/src/main/java/refinedstorage/tile/config/ModeConstants.java +++ /dev/null @@ -1,6 +0,0 @@ -package refinedstorage.tile.config; - -public final class ModeConstants { - public static final int WHITELIST = 0; - public static final int BLACKLIST = 1; -} diff --git a/src/main/java/refinedstorage/tile/config/ModeFilter.java b/src/main/java/refinedstorage/tile/config/ModeFilter.java index 461203bea..0b67892c4 100755 --- a/src/main/java/refinedstorage/tile/config/ModeFilter.java +++ b/src/main/java/refinedstorage/tile/config/ModeFilter.java @@ -6,7 +6,7 @@ import refinedstorage.api.storage.CompareUtils; public final class ModeFilter { public static boolean respectsMode(IItemHandler filters, IModeConfig mode, int compare, ItemStack stack) { - if (mode.getMode() == ModeConstants.WHITELIST) { + if (mode.getMode() == IModeConfig.WHITELIST) { int slots = 0; for (int i = 0; i < filters.getSlots(); ++i) { @@ -22,7 +22,7 @@ public final class ModeFilter { } return slots == 0; - } else if (mode.getMode() == ModeConstants.BLACKLIST) { + } else if (mode.getMode() == IModeConfig.BLACKLIST) { for (int i = 0; i < filters.getSlots(); ++i) { ItemStack slot = filters.getStackInSlot(i); diff --git a/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java b/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java index e553528e0..a76ed21b4 100755 --- a/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java +++ b/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java @@ -2,9 +2,8 @@ package refinedstorage.tile.externalstorage; import com.jaquadro.minecraft.storagedrawers.api.storage.IDrawer; import com.jaquadro.minecraft.storagedrawers.api.storage.IDrawerGroup; -import io.netty.buffer.ByteBuf; -import net.minecraft.inventory.Container; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.datasync.DataSerializers; import net.minecraft.tileentity.TileEntity; import net.minecraftforge.items.IItemHandler; import powercrystals.minefactoryreloaded.api.IDeepStorageUnit; @@ -12,20 +11,39 @@ import refinedstorage.RefinedStorage; import refinedstorage.api.network.INetworkMaster; import refinedstorage.api.storage.IStorage; import refinedstorage.api.storage.IStorageProvider; -import refinedstorage.container.ContainerStorage; import refinedstorage.inventory.ItemHandlerBasic; -import refinedstorage.network.MessagePriorityUpdate; import refinedstorage.tile.IStorageGui; import refinedstorage.tile.TileNode; import refinedstorage.tile.config.ICompareConfig; import refinedstorage.tile.config.IModeConfig; +import refinedstorage.tile.config.IPrioritizable; import refinedstorage.tile.config.IRedstoneModeConfig; -import refinedstorage.tile.config.ModeConstants; +import refinedstorage.tile.data.ITileDataProducer; +import refinedstorage.tile.data.TileDataManager; +import refinedstorage.tile.data.TileDataParameter; import java.util.ArrayList; import java.util.List; -public class TileExternalStorage extends TileNode implements IStorageProvider, IStorageGui, ICompareConfig, IModeConfig { +public class TileExternalStorage extends TileNode implements IStorageProvider, IStorageGui, ICompareConfig, IModeConfig, IPrioritizable { + public static final TileDataParameter PRIORITY = IPrioritizable.createConfigParameter(); + public static final TileDataParameter COMPARE = ICompareConfig.createConfigParameter(); + public static final TileDataParameter MODE = IModeConfig.createConfigParameter(); + + public static final TileDataParameter STORED = TileDataManager.createParameter(DataSerializers.VARINT, new ITileDataProducer() { + @Override + public Integer getValue(TileExternalStorage tile) { + return tile.getStored(); + } + }); + + public static final TileDataParameter CAPACITY = TileDataManager.createParameter(DataSerializers.VARINT, new ITileDataProducer() { + @Override + public Integer getValue(TileExternalStorage tile) { + return tile.getCapacity(); + } + }); + private static final String NBT_PRIORITY = "Priority"; private static final String NBT_COMPARE = "Compare"; private static final String NBT_MODE = "Mode"; @@ -34,14 +52,19 @@ public class TileExternalStorage extends TileNode implements IStorageProvider, I private int priority = 0; private int compare = 0; - private int mode = ModeConstants.WHITELIST; - - private int stored; - private int capacity; + private int mode = IModeConfig.WHITELIST; private List storages = new ArrayList(); private int lastDrawerCount; + public TileExternalStorage() { + dataManager.addWatchedParameter(PRIORITY); + dataManager.addWatchedParameter(COMPARE); + dataManager.addWatchedParameter(MODE); + dataManager.addWatchedParameter(STORED); + dataManager.addWatchedParameter(CAPACITY); + } + @Override public int getEnergyUsage() { return RefinedStorage.INSTANCE.externalStorageUsage + (storages.size() * RefinedStorage.INSTANCE.externalStoragePerStorageUsage); @@ -87,33 +110,6 @@ public class TileExternalStorage extends TileNode implements IStorageProvider, I super.update(); } - @Override - public void writeContainerData(ByteBuf buf) { - super.writeContainerData(buf); - - buf.writeInt(priority); - buf.writeInt(getStored()); - buf.writeInt(getCapacity()); - buf.writeInt(compare); - buf.writeInt(mode); - } - - @Override - public void readContainerData(ByteBuf buf) { - super.readContainerData(buf); - - priority = buf.readInt(); - stored = buf.readInt(); - capacity = buf.readInt(); - compare = buf.readInt(); - mode = buf.readInt(); - } - - @Override - public Class getContainer() { - return ContainerStorage.class; - } - @Override public void read(NBTTagCompound tag) { super.read(tag); @@ -175,6 +171,12 @@ public class TileExternalStorage extends TileNode implements IStorageProvider, I return priority; } + @Override + public void onPriorityChanged(int priority) { + TileDataManager.setParameter(PRIORITY, priority); + } + + @Override public void setPriority(int priority) { this.priority = priority; @@ -236,14 +238,10 @@ public class TileExternalStorage extends TileNode implements IStorageProvider, I @Override public int getStored() { - if (!worldObj.isRemote) { - int stored = 0; + int stored = 0; - for (ExternalStorage storage : storages) { - stored += storage.getStored(); - } - - return stored; + for (ExternalStorage storage : storages) { + stored += storage.getStored(); } return stored; @@ -251,24 +249,15 @@ public class TileExternalStorage extends TileNode implements IStorageProvider, I @Override public int getCapacity() { - if (!worldObj.isRemote) { - int capacity = 0; + int capacity = 0; - for (ExternalStorage storage : storages) { - capacity += storage.getCapacity(); - } - - return capacity; + for (ExternalStorage storage : storages) { + capacity += storage.getCapacity(); } return capacity; } - @Override - public void onPriorityChanged(int priority) { - RefinedStorage.INSTANCE.network.sendToServer(new MessagePriorityUpdate(pos, priority)); - } - @Override public IItemHandler getFilters() { return filters; diff --git a/src/main/java/refinedstorage/tile/grid/TileGrid.java b/src/main/java/refinedstorage/tile/grid/TileGrid.java index 2fe7ff4ef..66be251ba 100755 --- a/src/main/java/refinedstorage/tile/grid/TileGrid.java +++ b/src/main/java/refinedstorage/tile/grid/TileGrid.java @@ -1,12 +1,12 @@ package refinedstorage.tile.grid; -import io.netty.buffer.ByteBuf; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.inventory.*; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.CraftingManager; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.datasync.DataSerializers; import net.minecraft.util.math.BlockPos; import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.wrapper.CombinedInvWrapper; @@ -25,14 +25,81 @@ import refinedstorage.inventory.ItemHandlerBasic; import refinedstorage.inventory.ItemHandlerGridFilterInGrid; import refinedstorage.inventory.ItemValidatorBasic; import refinedstorage.item.ItemPattern; -import refinedstorage.network.MessageGridSettingsUpdate; import refinedstorage.tile.TileNode; import refinedstorage.tile.config.IRedstoneModeConfig; +import refinedstorage.tile.data.ITileDataConsumer; +import refinedstorage.tile.data.ITileDataProducer; +import refinedstorage.tile.data.TileDataManager; +import refinedstorage.tile.data.TileDataParameter; import java.util.ArrayList; import java.util.List; public class TileGrid extends TileNode implements IGrid { + public static final TileDataParameter VIEW_TYPE = TileDataManager.createParameter(DataSerializers.VARINT, new ITileDataProducer() { + @Override + public Integer getValue(TileGrid tile) { + return tile.viewType; + } + }, new ITileDataConsumer() { + @Override + public void setValue(TileGrid tile, Integer value) { + if (isValidViewType(value)) { + tile.viewType = value; + + tile.markDirty(); + } + } + }); + + public static final TileDataParameter SORTING_DIRECTION = TileDataManager.createParameter(DataSerializers.VARINT, new ITileDataProducer() { + @Override + public Integer getValue(TileGrid tile) { + return tile.sortingDirection; + } + }, new ITileDataConsumer() { + @Override + public void setValue(TileGrid tile, Integer value) { + if (isValidSortingDirection(value)) { + tile.sortingDirection = value; + + tile.markDirty(); + } + } + }); + + public static final TileDataParameter SORTING_TYPE = TileDataManager.createParameter(DataSerializers.VARINT, new ITileDataProducer() { + @Override + public Integer getValue(TileGrid tile) { + return tile.sortingType; + } + }, new ITileDataConsumer() { + @Override + public void setValue(TileGrid tile, Integer value) { + if (isValidSortingType(value)) { + tile.sortingType = value; + + tile.markDirty(); + } + } + }); + + public static final TileDataParameter SEARCH_BOX_MODE = TileDataManager.createParameter(DataSerializers.VARINT, new ITileDataProducer() { + @Override + public Integer getValue(TileGrid tile) { + return tile.searchBoxMode; + } + }, new ITileDataConsumer() { + @Override + public void setValue(TileGrid tile, Integer value) { + if (isValidSearchBoxMode(value)) { + tile.searchBoxMode = value; + + tile.markDirty(); + } + } + }); + public static final String NBT_VIEW_TYPE = "ViewType"; public static final String NBT_SORTING_DIRECTION = "SortingDirection"; public static final String NBT_SORTING_TYPE = "SortingType"; @@ -78,6 +145,13 @@ public class TileGrid extends TileNode implements IGrid { private int sortingType = SORTING_TYPE_NAME; private int searchBoxMode = SEARCH_BOX_MODE_NORMAL; + public TileGrid() { + dataManager.addWatchedParameter(VIEW_TYPE); + dataManager.addWatchedParameter(SORTING_DIRECTION); + dataManager.addWatchedParameter(SORTING_TYPE); + dataManager.addWatchedParameter(SEARCH_BOX_MODE); + } + @Override public int getEnergyUsage() { switch (getType()) { @@ -279,63 +353,42 @@ public class TileGrid extends TileNode implements IGrid { @Override public int getViewType() { - return viewType; - } - - public void setViewType(int type) { - this.viewType = type; - - markDirty(); + return worldObj.isRemote ? VIEW_TYPE.getValue() : viewType; } + @Override public int getSortingDirection() { - return sortingDirection; - } - - public void setSortingDirection(int sortingDirection) { - this.sortingDirection = sortingDirection; - - markDirty(); + return worldObj.isRemote ? SORTING_DIRECTION.getValue() : sortingDirection; } + @Override public int getSortingType() { - return sortingType; - } - - public void setSortingType(int sortingType) { - this.sortingType = sortingType; - - markDirty(); + return worldObj.isRemote ? SORTING_TYPE.getValue() : sortingType; } + @Override public int getSearchBoxMode() { - return searchBoxMode; - } - - public void setSearchBoxMode(int searchBoxMode) { - this.searchBoxMode = searchBoxMode; - - markDirty(); + return worldObj.isRemote ? SEARCH_BOX_MODE.getValue() : searchBoxMode; } @Override public void onViewTypeChanged(int type) { - RefinedStorage.INSTANCE.network.sendToServer(new MessageGridSettingsUpdate(this, type, sortingDirection, sortingType, searchBoxMode)); + TileDataManager.setParameter(VIEW_TYPE, type); } @Override public void onSortingTypeChanged(int type) { - RefinedStorage.INSTANCE.network.sendToServer(new MessageGridSettingsUpdate(this, viewType, sortingDirection, type, searchBoxMode)); + TileDataManager.setParameter(SORTING_TYPE, type); } @Override public void onSortingDirectionChanged(int direction) { - RefinedStorage.INSTANCE.network.sendToServer(new MessageGridSettingsUpdate(this, viewType, direction, sortingType, searchBoxMode)); + TileDataManager.setParameter(SORTING_DIRECTION, direction); } @Override public void onSearchBoxModeChanged(int searchBoxMode) { - RefinedStorage.INSTANCE.network.sendToServer(new MessageGridSettingsUpdate(this, viewType, sortingDirection, sortingType, searchBoxMode)); + TileDataManager.setParameter(SEARCH_BOX_MODE, searchBoxMode); } @Override @@ -384,31 +437,6 @@ public class TileGrid extends TileNode implements IGrid { return tag; } - @Override - public void writeContainerData(ByteBuf buf) { - super.writeContainerData(buf); - - buf.writeInt(viewType); - buf.writeInt(sortingDirection); - buf.writeInt(sortingType); - buf.writeInt(searchBoxMode); - } - - @Override - public void readContainerData(ByteBuf buf) { - super.readContainerData(buf); - - viewType = buf.readInt(); - sortingDirection = buf.readInt(); - sortingType = buf.readInt(); - searchBoxMode = buf.readInt(); - } - - @Override - public Class getContainer() { - return ContainerGrid.class; - } - @Override public IItemHandler getDroppedItems() { switch (getType()) { From 27ddf14fcba36e7634122a91b52fe07a20fb54a1 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Fri, 5 Aug 2016 14:16:17 +0200 Subject: [PATCH 093/214] Fix bugs with side buttons --- .../refinedstorage/gui/GuiConstructor.java | 12 +++---- .../refinedstorage/gui/GuiController.java | 3 +- .../java/refinedstorage/gui/GuiCrafter.java | 8 ++--- .../gui/GuiCraftingMonitor.java | 2 +- .../refinedstorage/gui/GuiDestructor.java | 14 +++----- .../java/refinedstorage/gui/GuiDetector.java | 13 +++---- .../java/refinedstorage/gui/GuiExporter.java | 12 +++---- .../java/refinedstorage/gui/GuiHandler.java | 20 +++++------ .../java/refinedstorage/gui/GuiImporter.java | 14 +++----- .../java/refinedstorage/gui/GuiInterface.java | 12 +++---- .../gui/GuiNetworkTransmitter.java | 16 ++++----- .../java/refinedstorage/gui/GuiRelay.java | 8 ++--- .../java/refinedstorage/gui/GuiSolderer.java | 2 +- .../gui/GuiWirelessTransmitter.java | 8 ++--- .../gui/sidebutton/SideButtonCompare.java | 15 ++++---- .../sidebutton/SideButtonDetectorMode.java | 6 ---- .../gui/sidebutton/SideButtonMode.java | 22 +++++------- .../sidebutton/SideButtonRedstoneMode.java | 16 +++++---- .../java/refinedstorage/tile/IStorageGui.java | 10 +++--- .../refinedstorage/tile/TileConstructor.java | 9 ++--- .../refinedstorage/tile/TileDestructor.java | 19 +++------- .../refinedstorage/tile/TileDetector.java | 8 ++--- .../refinedstorage/tile/TileDiskDrive.java | 35 ++++++++----------- .../refinedstorage/tile/TileExporter.java | 9 ++--- .../refinedstorage/tile/TileImporter.java | 19 +++------- .../refinedstorage/tile/TileInterface.java | 9 ++--- .../java/refinedstorage/tile/TileStorage.java | 35 ++++++++----------- .../tile/config/ModeFilter.java | 7 ++-- .../tile/config/RedstoneMode.java | 1 + .../DeepStorageUnitStorage.java | 2 +- .../tile/externalstorage/DrawerStorage.java | 2 +- .../externalstorage/ItemHandlerStorage.java | 2 +- .../externalstorage/TileExternalStorage.java | 13 ++++--- .../java/refinedstorage/tile/grid/IGrid.java | 4 +-- .../refinedstorage/tile/grid/TileGrid.java | 5 ++- .../tile/grid/WirelessGrid.java | 4 +-- 36 files changed, 150 insertions(+), 246 deletions(-) diff --git a/src/main/java/refinedstorage/gui/GuiConstructor.java b/src/main/java/refinedstorage/gui/GuiConstructor.java index 50a8f56c6..50bca551c 100755 --- a/src/main/java/refinedstorage/gui/GuiConstructor.java +++ b/src/main/java/refinedstorage/gui/GuiConstructor.java @@ -7,20 +7,16 @@ import refinedstorage.gui.sidebutton.SideButtonRedstoneMode; import refinedstorage.tile.TileConstructor; public class GuiConstructor extends GuiBase { - private TileConstructor constructor; - - public GuiConstructor(ContainerConstructor container, TileConstructor constructor) { + public GuiConstructor(ContainerConstructor container) { super(container, 211, 137); - - this.constructor = constructor; } @Override public void init(int x, int y) { - addSideButton(new SideButtonRedstoneMode(constructor)); + addSideButton(new SideButtonRedstoneMode(TileConstructor.REDSTONE_MODE)); - addSideButton(new SideButtonCompare(constructor, CompareUtils.COMPARE_DAMAGE)); - addSideButton(new SideButtonCompare(constructor, CompareUtils.COMPARE_NBT)); + addSideButton(new SideButtonCompare(TileConstructor.COMPARE, CompareUtils.COMPARE_DAMAGE)); + addSideButton(new SideButtonCompare(TileConstructor.COMPARE, CompareUtils.COMPARE_NBT)); } @Override diff --git a/src/main/java/refinedstorage/gui/GuiController.java b/src/main/java/refinedstorage/gui/GuiController.java index d28338ece..da24e5feb 100755 --- a/src/main/java/refinedstorage/gui/GuiController.java +++ b/src/main/java/refinedstorage/gui/GuiController.java @@ -3,7 +3,6 @@ package refinedstorage.gui; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.RenderHelper; import refinedstorage.container.ContainerController; -import refinedstorage.gui.sidebutton.SideButtonRedstoneMode; import refinedstorage.tile.TileController; import java.util.List; @@ -28,7 +27,7 @@ public class GuiController extends GuiBase { @Override public void init(int x, int y) { - addSideButton(new SideButtonRedstoneMode(controller)); + //addSideButton(new SideButtonRedstoneMode(controller)); } @Override diff --git a/src/main/java/refinedstorage/gui/GuiCrafter.java b/src/main/java/refinedstorage/gui/GuiCrafter.java index e26b43c06..7f578ebb3 100755 --- a/src/main/java/refinedstorage/gui/GuiCrafter.java +++ b/src/main/java/refinedstorage/gui/GuiCrafter.java @@ -5,17 +5,13 @@ import refinedstorage.gui.sidebutton.SideButtonRedstoneMode; import refinedstorage.tile.TileCrafter; public class GuiCrafter extends GuiBase { - private TileCrafter crafter; - - public GuiCrafter(ContainerCrafter container, TileCrafter crafter) { + public GuiCrafter(ContainerCrafter container) { super(container, 211, 137); - - this.crafter = crafter; } @Override public void init(int x, int y) { - addSideButton(new SideButtonRedstoneMode(crafter)); + addSideButton(new SideButtonRedstoneMode(TileCrafter.REDSTONE_MODE)); } @Override diff --git a/src/main/java/refinedstorage/gui/GuiCraftingMonitor.java b/src/main/java/refinedstorage/gui/GuiCraftingMonitor.java index 3123c60f1..e17c49717 100755 --- a/src/main/java/refinedstorage/gui/GuiCraftingMonitor.java +++ b/src/main/java/refinedstorage/gui/GuiCraftingMonitor.java @@ -41,7 +41,7 @@ public class GuiCraftingMonitor extends GuiBase { @Override public void init(int x, int y) { - addSideButton(new SideButtonRedstoneMode(craftingMonitor)); + addSideButton(new SideButtonRedstoneMode(TileCraftingMonitor.REDSTONE_MODE)); String cancel = t("gui.cancel"); String cancelAll = t("misc.refinedstorage:cancel_all"); diff --git a/src/main/java/refinedstorage/gui/GuiDestructor.java b/src/main/java/refinedstorage/gui/GuiDestructor.java index d755c27d2..24b62adaa 100755 --- a/src/main/java/refinedstorage/gui/GuiDestructor.java +++ b/src/main/java/refinedstorage/gui/GuiDestructor.java @@ -8,22 +8,18 @@ import refinedstorage.gui.sidebutton.SideButtonRedstoneMode; import refinedstorage.tile.TileDestructor; public class GuiDestructor extends GuiBase { - private TileDestructor destructor; - - public GuiDestructor(ContainerDestructor container, TileDestructor destructor) { + public GuiDestructor(ContainerDestructor container) { super(container, 211, 137); - - this.destructor = destructor; } @Override public void init(int x, int y) { - addSideButton(new SideButtonRedstoneMode(destructor)); + addSideButton(new SideButtonRedstoneMode(TileDestructor.REDSTONE_MODE)); - addSideButton(new SideButtonMode(destructor)); + addSideButton(new SideButtonMode(TileDestructor.MODE)); - addSideButton(new SideButtonCompare(destructor, CompareUtils.COMPARE_DAMAGE)); - addSideButton(new SideButtonCompare(destructor, CompareUtils.COMPARE_NBT)); + addSideButton(new SideButtonCompare(TileDestructor.COMPARE, CompareUtils.COMPARE_DAMAGE)); + addSideButton(new SideButtonCompare(TileDestructor.COMPARE, CompareUtils.COMPARE_NBT)); } @Override diff --git a/src/main/java/refinedstorage/gui/GuiDetector.java b/src/main/java/refinedstorage/gui/GuiDetector.java index 4d6cc757e..71213c481 100755 --- a/src/main/java/refinedstorage/gui/GuiDetector.java +++ b/src/main/java/refinedstorage/gui/GuiDetector.java @@ -6,28 +6,25 @@ import refinedstorage.api.storage.CompareUtils; import refinedstorage.container.ContainerDetector; import refinedstorage.gui.sidebutton.SideButtonCompare; import refinedstorage.gui.sidebutton.SideButtonDetectorMode; +import refinedstorage.tile.TileDestructor; import refinedstorage.tile.TileDetector; import refinedstorage.tile.data.TileDataManager; import java.io.IOException; public class GuiDetector extends GuiBase { - private TileDetector detector; - private GuiTextField amountField; - public GuiDetector(ContainerDetector container, TileDetector detector) { + public GuiDetector(ContainerDetector container) { super(container, 176, 137); - - this.detector = detector; } @Override public void init(int x, int y) { - addSideButton(new SideButtonCompare(detector, CompareUtils.COMPARE_DAMAGE)); - addSideButton(new SideButtonCompare(detector, CompareUtils.COMPARE_NBT)); + addSideButton(new SideButtonCompare(TileDestructor.COMPARE, CompareUtils.COMPARE_DAMAGE)); + addSideButton(new SideButtonCompare(TileDestructor.COMPARE, CompareUtils.COMPARE_NBT)); - addSideButton(new SideButtonDetectorMode(detector)); + addSideButton(new SideButtonDetectorMode()); amountField = new GuiTextField(0, fontRendererObj, x + 62 + 1, y + 23 + 1, 25, fontRendererObj.FONT_HEIGHT); // @TODO: Change when the packet is received instead diff --git a/src/main/java/refinedstorage/gui/GuiExporter.java b/src/main/java/refinedstorage/gui/GuiExporter.java index 30854d39d..387f8b612 100755 --- a/src/main/java/refinedstorage/gui/GuiExporter.java +++ b/src/main/java/refinedstorage/gui/GuiExporter.java @@ -7,20 +7,16 @@ import refinedstorage.gui.sidebutton.SideButtonRedstoneMode; import refinedstorage.tile.TileExporter; public class GuiExporter extends GuiBase { - private TileExporter exporter; - - public GuiExporter(ContainerExporter container, TileExporter exporter) { + public GuiExporter(ContainerExporter container) { super(container, 211, 137); - - this.exporter = exporter; } @Override public void init(int x, int y) { - addSideButton(new SideButtonRedstoneMode(exporter)); + addSideButton(new SideButtonRedstoneMode(TileExporter.REDSTONE_MODE)); - addSideButton(new SideButtonCompare(exporter, CompareUtils.COMPARE_DAMAGE)); - addSideButton(new SideButtonCompare(exporter, CompareUtils.COMPARE_NBT)); + addSideButton(new SideButtonCompare(TileExporter.COMPARE, CompareUtils.COMPARE_DAMAGE)); + addSideButton(new SideButtonCompare(TileExporter.COMPARE, CompareUtils.COMPARE_NBT)); } @Override diff --git a/src/main/java/refinedstorage/gui/GuiHandler.java b/src/main/java/refinedstorage/gui/GuiHandler.java index ac8f37c65..2745df7a4 100755 --- a/src/main/java/refinedstorage/gui/GuiHandler.java +++ b/src/main/java/refinedstorage/gui/GuiHandler.java @@ -93,35 +93,35 @@ public class GuiHandler implements IGuiHandler { case RefinedStorageGui.DISK_DRIVE: return new GuiStorage((ContainerStorage) getContainer(ID, player, tile), (IStorageGui) tile, "gui/disk_drive.png"); case RefinedStorageGui.IMPORTER: - return new GuiImporter((ContainerImporter) getContainer(ID, player, tile), (TileImporter) tile); + return new GuiImporter((ContainerImporter) getContainer(ID, player, tile)); case RefinedStorageGui.EXPORTER: - return new GuiExporter((ContainerExporter) getContainer(ID, player, tile), (TileExporter) tile); + return new GuiExporter((ContainerExporter) getContainer(ID, player, tile)); case RefinedStorageGui.DETECTOR: - return new GuiDetector((ContainerDetector) getContainer(ID, player, tile), (TileDetector) tile); + return new GuiDetector((ContainerDetector) getContainer(ID, player, tile)); case RefinedStorageGui.SOLDERER: return new GuiSolderer((ContainerSolderer) getContainer(ID, player, tile), (TileSolderer) tile); case RefinedStorageGui.DESTRUCTOR: - return new GuiDestructor((ContainerDestructor) getContainer(ID, player, tile), (TileDestructor) tile); + return new GuiDestructor((ContainerDestructor) getContainer(ID, player, tile)); case RefinedStorageGui.CONSTRUCTOR: - return new GuiConstructor((ContainerConstructor) getContainer(ID, player, tile), (TileConstructor) tile); + return new GuiConstructor((ContainerConstructor) getContainer(ID, player, tile)); case RefinedStorageGui.STORAGE: return new GuiStorage((ContainerStorage) getContainer(ID, player, tile), (IStorageGui) tile); case RefinedStorageGui.RELAY: - return new GuiRelay((ContainerRelay) getContainer(ID, player, tile), (TileRelay) tile); + return new GuiRelay((ContainerRelay) getContainer(ID, player, tile)); case RefinedStorageGui.INTERFACE: - return new GuiInterface((ContainerInterface) getContainer(ID, player, tile), (TileInterface) tile); + return new GuiInterface((ContainerInterface) getContainer(ID, player, tile)); case RefinedStorageGui.CRAFTING_MONITOR: return new GuiCraftingMonitor((ContainerCraftingMonitor) getContainer(ID, player, tile), (TileCraftingMonitor) tile); case RefinedStorageGui.WIRELESS_TRANSMITTER: - return new GuiWirelessTransmitter((ContainerWirelessTransmitter) getContainer(ID, player, tile), (TileWirelessTransmitter) tile); + return new GuiWirelessTransmitter((ContainerWirelessTransmitter) getContainer(ID, player, tile)); case RefinedStorageGui.CRAFTER: - return new GuiCrafter((ContainerCrafter) getContainer(ID, player, tile), (TileCrafter) tile); + return new GuiCrafter((ContainerCrafter) getContainer(ID, player, tile)); case RefinedStorageGui.PROCESSING_PATTERN_ENCODER: return new GuiProcessingPatternEncoder((ContainerProcessingPatternEncoder) getContainer(ID, player, tile), (TileProcessingPatternEncoder) tile); case RefinedStorageGui.GRID_FILTER: return new GuiGridFilter(getGridFilterContainer(player, x)); case RefinedStorageGui.NETWORK_TRANSMITTER: - return new GuiNetworkTransmitter((ContainerNetworkTransmitter) getContainer(ID, player, tile), (TileNetworkTransmitter) tile); + return new GuiNetworkTransmitter((ContainerNetworkTransmitter) getContainer(ID, player, tile)); default: return null; } diff --git a/src/main/java/refinedstorage/gui/GuiImporter.java b/src/main/java/refinedstorage/gui/GuiImporter.java index 688a25d35..384cbec40 100755 --- a/src/main/java/refinedstorage/gui/GuiImporter.java +++ b/src/main/java/refinedstorage/gui/GuiImporter.java @@ -8,22 +8,18 @@ import refinedstorage.gui.sidebutton.SideButtonRedstoneMode; import refinedstorage.tile.TileImporter; public class GuiImporter extends GuiBase { - private TileImporter importer; - - public GuiImporter(ContainerImporter container, TileImporter importer) { + public GuiImporter(ContainerImporter container) { super(container, 211, 137); - - this.importer = importer; } @Override public void init(int x, int y) { - addSideButton(new SideButtonRedstoneMode(importer)); + addSideButton(new SideButtonRedstoneMode(TileImporter.REDSTONE_MODE)); - addSideButton(new SideButtonMode(importer)); + addSideButton(new SideButtonMode(TileImporter.MODE)); - addSideButton(new SideButtonCompare(importer, CompareUtils.COMPARE_DAMAGE)); - addSideButton(new SideButtonCompare(importer, CompareUtils.COMPARE_NBT)); + addSideButton(new SideButtonCompare(TileImporter.COMPARE, CompareUtils.COMPARE_DAMAGE)); + addSideButton(new SideButtonCompare(TileImporter.COMPARE, CompareUtils.COMPARE_NBT)); } @Override diff --git a/src/main/java/refinedstorage/gui/GuiInterface.java b/src/main/java/refinedstorage/gui/GuiInterface.java index 7df115559..627456013 100755 --- a/src/main/java/refinedstorage/gui/GuiInterface.java +++ b/src/main/java/refinedstorage/gui/GuiInterface.java @@ -7,20 +7,16 @@ import refinedstorage.gui.sidebutton.SideButtonRedstoneMode; import refinedstorage.tile.TileInterface; public class GuiInterface extends GuiBase { - private TileInterface tile; - - public GuiInterface(ContainerInterface container, TileInterface tile) { + public GuiInterface(ContainerInterface container) { super(container, 211, 217); - - this.tile = tile; } @Override public void init(int x, int y) { - addSideButton(new SideButtonRedstoneMode(tile)); + addSideButton(new SideButtonRedstoneMode(TileInterface.REDSTONE_MODE)); - addSideButton(new SideButtonCompare(tile, CompareUtils.COMPARE_DAMAGE)); - addSideButton(new SideButtonCompare(tile, CompareUtils.COMPARE_NBT)); + addSideButton(new SideButtonCompare(TileInterface.COMPARE, CompareUtils.COMPARE_DAMAGE)); + addSideButton(new SideButtonCompare(TileInterface.COMPARE, CompareUtils.COMPARE_NBT)); } @Override diff --git a/src/main/java/refinedstorage/gui/GuiNetworkTransmitter.java b/src/main/java/refinedstorage/gui/GuiNetworkTransmitter.java index 0c4018ba2..ab204ebee 100755 --- a/src/main/java/refinedstorage/gui/GuiNetworkTransmitter.java +++ b/src/main/java/refinedstorage/gui/GuiNetworkTransmitter.java @@ -5,17 +5,13 @@ import refinedstorage.gui.sidebutton.SideButtonRedstoneMode; import refinedstorage.tile.TileNetworkTransmitter; public class GuiNetworkTransmitter extends GuiBase { - private TileNetworkTransmitter networkTransmitter; - - public GuiNetworkTransmitter(ContainerNetworkTransmitter container, TileNetworkTransmitter networkTransmitter) { + public GuiNetworkTransmitter(ContainerNetworkTransmitter container) { super(container, 210, 137); - - this.networkTransmitter = networkTransmitter; } @Override public void init(int x, int y) { - addSideButton(new SideButtonRedstoneMode(networkTransmitter)); + addSideButton(new SideButtonRedstoneMode(TileNetworkTransmitter.REDSTONE_MODE)); } @Override @@ -33,17 +29,19 @@ public class GuiNetworkTransmitter extends GuiBase { public void drawForeground(int mouseX, int mouseY) { drawString(7, 7, t("gui.refinedstorage:network_transmitter")); - String distance; + String distance = t("gui.refinedstorage:network_transmitter.missing_card"); + // @TODO: ... + /* if (networkTransmitter.getNetworkCard().getStackInSlot(0) == null) { distance = t("gui.refinedstorage:network_transmitter.missing_card"); } else if (!TileNetworkTransmitter.RECEIVER_DIMENSION_SUPPORTED.getValue()) { distance = t("gui.refinedstorage:network_transmitter.missing_upgrade"); - } else if (!networkTransmitter.isSameDimension()) { // @TODO: Wtf? + } else if (!networkTransmitter.isSameDimension()) { distance = t("gui.refinedstorage:network_transmitter.dimension", networkTransmitter.getReceiverDimension()); } else { distance = t("gui.refinedstorage:network_transmitter.distance", networkTransmitter.getDistance()); - } + }*/ drawString(51, 24, distance); drawString(7, 42, t("container.inventory")); diff --git a/src/main/java/refinedstorage/gui/GuiRelay.java b/src/main/java/refinedstorage/gui/GuiRelay.java index b50810d9b..604d4f506 100755 --- a/src/main/java/refinedstorage/gui/GuiRelay.java +++ b/src/main/java/refinedstorage/gui/GuiRelay.java @@ -5,17 +5,13 @@ import refinedstorage.gui.sidebutton.SideButtonRedstoneMode; import refinedstorage.tile.TileRelay; public class GuiRelay extends GuiBase { - private TileRelay relay; - - public GuiRelay(ContainerRelay container, TileRelay relay) { + public GuiRelay(ContainerRelay container) { super(container, 176, 131); - - this.relay = relay; } @Override public void init(int x, int y) { - addSideButton(new SideButtonRedstoneMode(relay)); + addSideButton(new SideButtonRedstoneMode(TileRelay.REDSTONE_MODE)); } @Override diff --git a/src/main/java/refinedstorage/gui/GuiSolderer.java b/src/main/java/refinedstorage/gui/GuiSolderer.java index 76c991ab8..1dfe957f2 100755 --- a/src/main/java/refinedstorage/gui/GuiSolderer.java +++ b/src/main/java/refinedstorage/gui/GuiSolderer.java @@ -15,7 +15,7 @@ public class GuiSolderer extends GuiBase { @Override public void init(int x, int y) { - addSideButton(new SideButtonRedstoneMode(solderer)); + addSideButton(new SideButtonRedstoneMode(TileSolderer.REDSTONE_MODE)); } @Override diff --git a/src/main/java/refinedstorage/gui/GuiWirelessTransmitter.java b/src/main/java/refinedstorage/gui/GuiWirelessTransmitter.java index b388b9d96..2b2dab4f7 100755 --- a/src/main/java/refinedstorage/gui/GuiWirelessTransmitter.java +++ b/src/main/java/refinedstorage/gui/GuiWirelessTransmitter.java @@ -5,17 +5,13 @@ import refinedstorage.gui.sidebutton.SideButtonRedstoneMode; import refinedstorage.tile.TileWirelessTransmitter; public class GuiWirelessTransmitter extends GuiBase { - private TileWirelessTransmitter wirelessTransmitter; - - public GuiWirelessTransmitter(ContainerWirelessTransmitter container, TileWirelessTransmitter wirelessTransmitter) { + public GuiWirelessTransmitter(ContainerWirelessTransmitter container) { super(container, 211, 137); - - this.wirelessTransmitter = wirelessTransmitter; } @Override public void init(int x, int y) { - addSideButton(new SideButtonRedstoneMode(wirelessTransmitter)); + addSideButton(new SideButtonRedstoneMode(TileWirelessTransmitter.REDSTONE_MODE)); } @Override diff --git a/src/main/java/refinedstorage/gui/sidebutton/SideButtonCompare.java b/src/main/java/refinedstorage/gui/sidebutton/SideButtonCompare.java index 752672626..aad6ddfda 100755 --- a/src/main/java/refinedstorage/gui/sidebutton/SideButtonCompare.java +++ b/src/main/java/refinedstorage/gui/sidebutton/SideButtonCompare.java @@ -3,14 +3,15 @@ package refinedstorage.gui.sidebutton; import net.minecraft.util.text.TextFormatting; import refinedstorage.api.storage.CompareUtils; import refinedstorage.gui.GuiBase; -import refinedstorage.tile.config.ICompareConfig; +import refinedstorage.tile.data.TileDataManager; +import refinedstorage.tile.data.TileDataParameter; public class SideButtonCompare extends SideButton { - private ICompareConfig config; + private TileDataParameter parameter; private int mask; - public SideButtonCompare(ICompareConfig config, int mask) { - this.config = config; + public SideButtonCompare(TileDataParameter parameter, int mask) { + this.parameter = parameter; this.mask = mask; } @@ -18,7 +19,7 @@ public class SideButtonCompare extends SideButton { public String getTooltip(GuiBase gui) { String tooltip = TextFormatting.YELLOW + gui.t("sidebutton.refinedstorage:compare." + mask) + TextFormatting.RESET + "\n"; - if ((config.getCompare() & mask) == mask) { + if ((parameter.getValue() & mask) == mask) { tooltip += gui.t("gui.yes"); } else { tooltip += gui.t("gui.no"); @@ -39,13 +40,13 @@ public class SideButtonCompare extends SideButton { ty = 48; } - int tx = (config.getCompare() & mask) == mask ? 0 : 16; + int tx = (parameter.getValue() & mask) == mask ? 0 : 16; gui.drawTexture(x, y + 1, tx, ty, 16, 16); } @Override public void actionPerformed() { - config.setCompare(config.getCompare() ^ mask); + TileDataManager.setParameter(parameter, parameter.getValue() ^ mask); } } diff --git a/src/main/java/refinedstorage/gui/sidebutton/SideButtonDetectorMode.java b/src/main/java/refinedstorage/gui/sidebutton/SideButtonDetectorMode.java index e82538d04..da46be00c 100755 --- a/src/main/java/refinedstorage/gui/sidebutton/SideButtonDetectorMode.java +++ b/src/main/java/refinedstorage/gui/sidebutton/SideButtonDetectorMode.java @@ -7,12 +7,6 @@ import refinedstorage.gui.GuiBase; import refinedstorage.tile.TileDetector; public class SideButtonDetectorMode extends SideButton { - private TileDetector detector; - - public SideButtonDetectorMode(TileDetector detector) { - this.detector = detector; - } - @Override public String getTooltip(GuiBase gui) { return TextFormatting.GREEN + gui.t("sidebutton.refinedstorage:detector.mode") + TextFormatting.RESET + "\n" + gui.t("sidebutton.refinedstorage:detector.mode." + TileDetector.MODE.getValue()); diff --git a/src/main/java/refinedstorage/gui/sidebutton/SideButtonMode.java b/src/main/java/refinedstorage/gui/sidebutton/SideButtonMode.java index 6c11cf840..368a55646 100755 --- a/src/main/java/refinedstorage/gui/sidebutton/SideButtonMode.java +++ b/src/main/java/refinedstorage/gui/sidebutton/SideButtonMode.java @@ -3,36 +3,30 @@ package refinedstorage.gui.sidebutton; import net.minecraft.util.text.TextFormatting; import refinedstorage.gui.GuiBase; import refinedstorage.tile.config.IModeConfig; +import refinedstorage.tile.data.TileDataManager; +import refinedstorage.tile.data.TileDataParameter; public class SideButtonMode extends SideButton { - private IModeConfig config; + private TileDataParameter parameter; - public SideButtonMode(IModeConfig config) { - this.config = config; + public SideButtonMode(TileDataParameter parameter) { + this.parameter = parameter; } @Override public String getTooltip(GuiBase gui) { - return TextFormatting.GREEN + gui.t("sidebutton.refinedstorage:mode") + TextFormatting.RESET + "\n" + gui.t("sidebutton.refinedstorage:mode." + (config.getMode() == IModeConfig.WHITELIST ? "whitelist" : "blacklist")); + return TextFormatting.GREEN + gui.t("sidebutton.refinedstorage:mode") + TextFormatting.RESET + "\n" + gui.t("sidebutton.refinedstorage:mode." + (parameter.getValue() == IModeConfig.WHITELIST ? "whitelist" : "blacklist")); } @Override public void draw(GuiBase gui, int x, int y) { gui.bindTexture("icons.png"); - int tx = 0; - - if (config.getMode() == IModeConfig.WHITELIST) { - tx = 0; - } else if (config.getMode() == IModeConfig.BLACKLIST) { - tx = 16; - } - - gui.drawTexture(x, y + 1, tx, 64, 16, 16); + gui.drawTexture(x, y + 1, parameter.getValue() == IModeConfig.WHITELIST ? 0 : 16, 64, 16, 16); } @Override public void actionPerformed() { - config.setMode(config.getMode() == IModeConfig.WHITELIST ? IModeConfig.BLACKLIST : IModeConfig.WHITELIST); + TileDataManager.setParameter(parameter, parameter.getValue() == IModeConfig.WHITELIST ? IModeConfig.BLACKLIST : IModeConfig.WHITELIST); } } diff --git a/src/main/java/refinedstorage/gui/sidebutton/SideButtonRedstoneMode.java b/src/main/java/refinedstorage/gui/sidebutton/SideButtonRedstoneMode.java index 5f04fb8d9..a891bf62a 100755 --- a/src/main/java/refinedstorage/gui/sidebutton/SideButtonRedstoneMode.java +++ b/src/main/java/refinedstorage/gui/sidebutton/SideButtonRedstoneMode.java @@ -2,28 +2,30 @@ package refinedstorage.gui.sidebutton; import net.minecraft.util.text.TextFormatting; import refinedstorage.gui.GuiBase; -import refinedstorage.tile.config.IRedstoneModeConfig; +import refinedstorage.tile.config.RedstoneMode; +import refinedstorage.tile.data.TileDataManager; +import refinedstorage.tile.data.TileDataParameter; public class SideButtonRedstoneMode extends SideButton { - private IRedstoneModeConfig config; + private TileDataParameter parameter; - public SideButtonRedstoneMode(IRedstoneModeConfig config) { - this.config = config; + public SideButtonRedstoneMode(TileDataParameter parameter) { + this.parameter = parameter; } @Override public String getTooltip(GuiBase gui) { - return TextFormatting.RED + gui.t("sidebutton.refinedstorage:redstone_mode") + TextFormatting.RESET + "\n" + gui.t("sidebutton.refinedstorage:redstone_mode." + config.getRedstoneMode().id); + return TextFormatting.RED + gui.t("sidebutton.refinedstorage:redstone_mode") + TextFormatting.RESET + "\n" + gui.t("sidebutton.refinedstorage:redstone_mode." + parameter.getValue()); } @Override public void draw(GuiBase gui, int x, int y) { gui.bindTexture("icons.png"); - gui.drawTexture(x, y + 1, config.getRedstoneMode().id * 16, 0, 16, 16); + gui.drawTexture(x, y + 1, parameter.getValue() * 16, 0, 16, 16); } @Override public void actionPerformed() { - config.setRedstoneMode(config.getRedstoneMode().next()); + TileDataManager.setParameter(parameter, RedstoneMode.getById(parameter.getValue()).next().id); } } diff --git a/src/main/java/refinedstorage/tile/IStorageGui.java b/src/main/java/refinedstorage/tile/IStorageGui.java index 257b802f0..7b512f985 100755 --- a/src/main/java/refinedstorage/tile/IStorageGui.java +++ b/src/main/java/refinedstorage/tile/IStorageGui.java @@ -1,9 +1,7 @@ package refinedstorage.tile; import net.minecraftforge.items.IItemHandler; -import refinedstorage.tile.config.ICompareConfig; -import refinedstorage.tile.config.IModeConfig; -import refinedstorage.tile.config.IRedstoneModeConfig; +import refinedstorage.tile.data.TileDataParameter; public interface IStorageGui { String getGuiTitle(); @@ -14,11 +12,11 @@ public interface IStorageGui { IItemHandler getFilters(); - IRedstoneModeConfig getRedstoneModeConfig(); + TileDataParameter getRedstoneModeConfig(); - ICompareConfig getCompareConfig(); + TileDataParameter getCompareConfig(); - IModeConfig getModeConfig(); + TileDataParameter getModeConfig(); int getStored(); diff --git a/src/main/java/refinedstorage/tile/TileConstructor.java b/src/main/java/refinedstorage/tile/TileConstructor.java index e2f6c126a..044d38f1d 100755 --- a/src/main/java/refinedstorage/tile/TileConstructor.java +++ b/src/main/java/refinedstorage/tile/TileConstructor.java @@ -17,7 +17,6 @@ import refinedstorage.inventory.ItemHandlerBasic; import refinedstorage.inventory.ItemHandlerUpgrade; import refinedstorage.item.ItemUpgrade; import refinedstorage.tile.config.ICompareConfig; -import refinedstorage.tile.data.TileDataManager; import refinedstorage.tile.data.TileDataParameter; public class TileConstructor extends TileNode implements ICompareConfig { @@ -84,13 +83,9 @@ public class TileConstructor extends TileNode implements ICompareConfig { @Override public void setCompare(int compare) { - if (worldObj.isRemote) { - TileDataManager.setParameter(COMPARE, compare); - } else { - this.compare = compare; + this.compare = compare; - markDirty(); - } + markDirty(); } @Override diff --git a/src/main/java/refinedstorage/tile/TileDestructor.java b/src/main/java/refinedstorage/tile/TileDestructor.java index e3ca31f5e..af7492654 100755 --- a/src/main/java/refinedstorage/tile/TileDestructor.java +++ b/src/main/java/refinedstorage/tile/TileDestructor.java @@ -17,7 +17,6 @@ import refinedstorage.item.ItemUpgrade; import refinedstorage.tile.config.ICompareConfig; import refinedstorage.tile.config.IModeConfig; import refinedstorage.tile.config.ModeFilter; -import refinedstorage.tile.data.TileDataManager; import refinedstorage.tile.data.TileDataParameter; import java.util.List; @@ -56,7 +55,7 @@ public class TileDestructor extends TileNode implements ICompareConfig, IModeCon ItemStack frontStack = frontBlockState.getBlock().getItem(worldObj, front, frontBlockState); if (frontStack != null) { - if (ModeFilter.respectsMode(filters, this, compare, frontStack)) { + if (ModeFilter.respectsMode(filters, mode, compare, frontStack)) { List drops = frontBlockState.getBlock().getDrops(worldObj, front, frontBlockState, 0); worldObj.playEvent(null, 2001, front, Block.getStateId(frontBlockState)); @@ -87,13 +86,9 @@ public class TileDestructor extends TileNode implements ICompareConfig, IModeCon @Override public void setCompare(int compare) { - if (worldObj.isRemote) { - TileDataManager.setParameter(COMPARE, compare); - } else { - this.compare = compare; + this.compare = compare; - markDirty(); - } + markDirty(); } @Override @@ -103,13 +98,9 @@ public class TileDestructor extends TileNode implements ICompareConfig, IModeCon @Override public void setMode(int mode) { - if (worldObj.isRemote) { - TileDataManager.setParameter(MODE, mode); - } else { - this.mode = mode; + this.mode = mode; - markDirty(); - } + markDirty(); } @Override diff --git a/src/main/java/refinedstorage/tile/TileDetector.java b/src/main/java/refinedstorage/tile/TileDetector.java index 063072889..7c71e11f5 100755 --- a/src/main/java/refinedstorage/tile/TileDetector.java +++ b/src/main/java/refinedstorage/tile/TileDetector.java @@ -147,13 +147,9 @@ public class TileDetector extends TileNode implements ICompareConfig { @Override public void setCompare(int compare) { - if (worldObj.isRemote) { - TileDataManager.setParameter(COMPARE, compare); - } else { - this.compare = compare; + this.compare = compare; - markDirty(); - } + markDirty(); } @Override diff --git a/src/main/java/refinedstorage/tile/TileDiskDrive.java b/src/main/java/refinedstorage/tile/TileDiskDrive.java index ba03be060..96a1e4a70 100755 --- a/src/main/java/refinedstorage/tile/TileDiskDrive.java +++ b/src/main/java/refinedstorage/tile/TileDiskDrive.java @@ -18,7 +18,10 @@ import refinedstorage.apiimpl.storage.NBTStorage; import refinedstorage.block.EnumStorageType; import refinedstorage.inventory.ItemHandlerBasic; import refinedstorage.inventory.ItemValidatorBasic; -import refinedstorage.tile.config.*; +import refinedstorage.tile.config.ICompareConfig; +import refinedstorage.tile.config.IModeConfig; +import refinedstorage.tile.config.IPrioritizable; +import refinedstorage.tile.config.ModeFilter; import refinedstorage.tile.data.TileDataManager; import refinedstorage.tile.data.TileDataParameter; @@ -41,7 +44,7 @@ public class TileDiskDrive extends TileNode implements IStorageProvider, IStorag @Override public ItemStack insertItem(ItemStack stack, int size, boolean simulate) { - if (!ModeFilter.respectsMode(getFilters(), getModeConfig(), getCompare(), stack)) { + if (!ModeFilter.respectsMode(getFilters(), mode, getCompare(), stack)) { return ItemHandlerHelper.copyStackWithSize(stack, size); } @@ -224,13 +227,9 @@ public class TileDiskDrive extends TileNode implements IStorageProvider, IStorag @Override public void setCompare(int compare) { - if (worldObj.isRemote) { - TileDataManager.setParameter(COMPARE, compare); - } else { - this.compare = compare; + this.compare = compare; - markDirty(); - } + markDirty(); } @Override @@ -240,13 +239,9 @@ public class TileDiskDrive extends TileNode implements IStorageProvider, IStorag @Override public void setMode(int mode) { - if (worldObj.isRemote) { - TileDataManager.setParameter(MODE, mode); - } else { - this.mode = mode; + this.mode = mode; - markDirty(); - } + markDirty(); } public int getStoredForDisplayServer() { @@ -290,18 +285,18 @@ public class TileDiskDrive extends TileNode implements IStorageProvider, IStorag } @Override - public IRedstoneModeConfig getRedstoneModeConfig() { - return this; + public TileDataParameter getRedstoneModeConfig() { + return REDSTONE_MODE; } @Override - public ICompareConfig getCompareConfig() { - return this; + public TileDataParameter getCompareConfig() { + return COMPARE; } @Override - public IModeConfig getModeConfig() { - return this; + public TileDataParameter getModeConfig() { + return MODE; } @Override diff --git a/src/main/java/refinedstorage/tile/TileExporter.java b/src/main/java/refinedstorage/tile/TileExporter.java index e259aca3d..5421d2e5a 100755 --- a/src/main/java/refinedstorage/tile/TileExporter.java +++ b/src/main/java/refinedstorage/tile/TileExporter.java @@ -13,7 +13,6 @@ import refinedstorage.inventory.ItemHandlerBasic; import refinedstorage.inventory.ItemHandlerUpgrade; import refinedstorage.item.ItemUpgrade; import refinedstorage.tile.config.ICompareConfig; -import refinedstorage.tile.data.TileDataManager; import refinedstorage.tile.data.TileDataParameter; public class TileExporter extends TileNode implements ICompareConfig { @@ -75,13 +74,9 @@ public class TileExporter extends TileNode implements ICompareConfig { @Override public void setCompare(int compare) { - if (worldObj.isRemote) { - TileDataManager.setParameter(COMPARE, compare); - } else { - this.compare = compare; + this.compare = compare; - markDirty(); - } + markDirty(); } @Override diff --git a/src/main/java/refinedstorage/tile/TileImporter.java b/src/main/java/refinedstorage/tile/TileImporter.java index e98b2a80d..055e48d84 100755 --- a/src/main/java/refinedstorage/tile/TileImporter.java +++ b/src/main/java/refinedstorage/tile/TileImporter.java @@ -13,7 +13,6 @@ import refinedstorage.item.ItemUpgrade; import refinedstorage.tile.config.ICompareConfig; import refinedstorage.tile.config.IModeConfig; import refinedstorage.tile.config.ModeFilter; -import refinedstorage.tile.data.TileDataManager; import refinedstorage.tile.data.TileDataParameter; public class TileImporter extends TileNode implements ICompareConfig, IModeConfig { @@ -56,7 +55,7 @@ public class TileImporter extends TileNode implements ICompareConfig, IModeConfi if (handler.getSlots() > 0) { ItemStack stack = handler.getStackInSlot(currentSlot); - if (stack == null || !ModeFilter.respectsMode(filters, this, compare, stack)) { + if (stack == null || !ModeFilter.respectsMode(filters, mode, compare, stack)) { currentSlot++; } else if (ticks % upgrades.getSpeed() == 0) { int quantity = upgrades.hasUpgrade(ItemUpgrade.TYPE_STACK) ? 64 : 1; @@ -81,13 +80,9 @@ public class TileImporter extends TileNode implements ICompareConfig, IModeConfi @Override public void setCompare(int compare) { - if (worldObj.isRemote) { - TileDataManager.setParameter(COMPARE, compare); - } else { - this.compare = compare; + this.compare = compare; - markDirty(); - } + markDirty(); } @Override @@ -97,13 +92,9 @@ public class TileImporter extends TileNode implements ICompareConfig, IModeConfi @Override public void setMode(int mode) { - if (worldObj.isRemote) { - TileDataManager.setParameter(MODE, mode); - } else { - this.mode = mode; + this.mode = mode; - markDirty(); - } + markDirty(); } @Override diff --git a/src/main/java/refinedstorage/tile/TileInterface.java b/src/main/java/refinedstorage/tile/TileInterface.java index bad2b55fb..5783604fc 100755 --- a/src/main/java/refinedstorage/tile/TileInterface.java +++ b/src/main/java/refinedstorage/tile/TileInterface.java @@ -12,7 +12,6 @@ import refinedstorage.inventory.ItemHandlerBasic; import refinedstorage.inventory.ItemHandlerUpgrade; import refinedstorage.item.ItemUpgrade; import refinedstorage.tile.config.ICompareConfig; -import refinedstorage.tile.data.TileDataManager; import refinedstorage.tile.data.TileDataParameter; public class TileInterface extends TileNode implements ICompareConfig { @@ -101,13 +100,9 @@ public class TileInterface extends TileNode implements ICompareConfig { @Override public void setCompare(int compare) { - if (worldObj.isRemote) { - TileDataManager.setParameter(COMPARE, compare); - } else { - this.compare = compare; + this.compare = compare; - markDirty(); - } + markDirty(); } @Override diff --git a/src/main/java/refinedstorage/tile/TileStorage.java b/src/main/java/refinedstorage/tile/TileStorage.java index 1db96775d..603afab0a 100755 --- a/src/main/java/refinedstorage/tile/TileStorage.java +++ b/src/main/java/refinedstorage/tile/TileStorage.java @@ -14,7 +14,10 @@ import refinedstorage.apiimpl.storage.NBTStorage; import refinedstorage.block.BlockStorage; import refinedstorage.block.EnumStorageType; import refinedstorage.inventory.ItemHandlerBasic; -import refinedstorage.tile.config.*; +import refinedstorage.tile.config.ICompareConfig; +import refinedstorage.tile.config.IModeConfig; +import refinedstorage.tile.config.IPrioritizable; +import refinedstorage.tile.config.ModeFilter; import refinedstorage.tile.data.ITileDataProducer; import refinedstorage.tile.data.TileDataManager; import refinedstorage.tile.data.TileDataParameter; @@ -44,7 +47,7 @@ public class TileStorage extends TileNode implements IStorageProvider, IStorageG @Override public ItemStack insertItem(ItemStack stack, int size, boolean simulate) { - if (!ModeFilter.respectsMode(filters, TileStorage.this, compare, stack)) { + if (!ModeFilter.respectsMode(filters, mode, compare, stack)) { return ItemHandlerHelper.copyStackWithSize(stack, size); } @@ -176,13 +179,9 @@ public class TileStorage extends TileNode implements IStorageProvider, IStorageG @Override public void setCompare(int compare) { - if (worldObj.isRemote) { - TileDataManager.setParameter(COMPARE, compare); - } else { - this.compare = compare; + this.compare = compare; - markDirty(); - } + markDirty(); } @Override @@ -192,13 +191,9 @@ public class TileStorage extends TileNode implements IStorageProvider, IStorageG @Override public void setMode(int mode) { - if (worldObj.isRemote) { - TileDataManager.setParameter(MODE, mode); - } else { - this.mode = mode; + this.mode = mode; - markDirty(); - } + markDirty(); } @Override @@ -212,18 +207,18 @@ public class TileStorage extends TileNode implements IStorageProvider, IStorageG } @Override - public IRedstoneModeConfig getRedstoneModeConfig() { - return this; + public TileDataParameter getRedstoneModeConfig() { + return REDSTONE_MODE; } @Override - public ICompareConfig getCompareConfig() { - return this; + public TileDataParameter getCompareConfig() { + return COMPARE; } @Override - public IModeConfig getModeConfig() { - return this; + public TileDataParameter getModeConfig() { + return MODE; } public NBTTagCompound getStorageTag() { diff --git a/src/main/java/refinedstorage/tile/config/ModeFilter.java b/src/main/java/refinedstorage/tile/config/ModeFilter.java index 0b67892c4..7fa90f9a5 100755 --- a/src/main/java/refinedstorage/tile/config/ModeFilter.java +++ b/src/main/java/refinedstorage/tile/config/ModeFilter.java @@ -4,9 +4,10 @@ import net.minecraft.item.ItemStack; import net.minecraftforge.items.IItemHandler; import refinedstorage.api.storage.CompareUtils; +// @TODO: Move into IModeConfig public final class ModeFilter { - public static boolean respectsMode(IItemHandler filters, IModeConfig mode, int compare, ItemStack stack) { - if (mode.getMode() == IModeConfig.WHITELIST) { + public static boolean respectsMode(IItemHandler filters, int mode, int compare, ItemStack stack) { + if (mode == IModeConfig.WHITELIST) { int slots = 0; for (int i = 0; i < filters.getSlots(); ++i) { @@ -22,7 +23,7 @@ public final class ModeFilter { } return slots == 0; - } else if (mode.getMode() == IModeConfig.BLACKLIST) { + } else if (mode == IModeConfig.BLACKLIST) { for (int i = 0; i < filters.getSlots(); ++i) { ItemStack slot = filters.getStackInSlot(i); diff --git a/src/main/java/refinedstorage/tile/config/RedstoneMode.java b/src/main/java/refinedstorage/tile/config/RedstoneMode.java index a0f1bbcc2..7586df4f0 100755 --- a/src/main/java/refinedstorage/tile/config/RedstoneMode.java +++ b/src/main/java/refinedstorage/tile/config/RedstoneMode.java @@ -39,6 +39,7 @@ public enum RedstoneMode { return false; } + // @TOOD: Remove id field public static RedstoneMode getById(int id) { for (RedstoneMode control : values()) { if (control.id == id) { diff --git a/src/main/java/refinedstorage/tile/externalstorage/DeepStorageUnitStorage.java b/src/main/java/refinedstorage/tile/externalstorage/DeepStorageUnitStorage.java index 24f1159b7..d95498851 100755 --- a/src/main/java/refinedstorage/tile/externalstorage/DeepStorageUnitStorage.java +++ b/src/main/java/refinedstorage/tile/externalstorage/DeepStorageUnitStorage.java @@ -35,7 +35,7 @@ public class DeepStorageUnitStorage extends ExternalStorage { @Override public ItemStack insertItem(@Nonnull ItemStack stack, int size, boolean simulate) { - if (ModeFilter.respectsMode(externalStorage.getFilters(), externalStorage, externalStorage.getCompare(), stack)) { + if (ModeFilter.respectsMode(externalStorage.getFilters(), externalStorage.getMode(), externalStorage.getCompare(), stack)) { if (unit.getStoredItemType() != null) { if (CompareUtils.compareStackNoQuantity(unit.getStoredItemType(), stack)) { if (getStored() + size > unit.getMaxStoredCount()) { diff --git a/src/main/java/refinedstorage/tile/externalstorage/DrawerStorage.java b/src/main/java/refinedstorage/tile/externalstorage/DrawerStorage.java index 4b398d4d7..4649b2442 100755 --- a/src/main/java/refinedstorage/tile/externalstorage/DrawerStorage.java +++ b/src/main/java/refinedstorage/tile/externalstorage/DrawerStorage.java @@ -39,7 +39,7 @@ public class DrawerStorage extends ExternalStorage { @Override public ItemStack insertItem(ItemStack stack, int size, boolean simulate) { - if (ModeFilter.respectsMode(externalStorage.getFilters(), externalStorage, externalStorage.getCompare(), stack) && drawer.canItemBeStored(stack)) { + if (ModeFilter.respectsMode(externalStorage.getFilters(), externalStorage.getMode(), externalStorage.getCompare(), stack) && drawer.canItemBeStored(stack)) { if (!drawer.isEmpty()) { if (getStored() + size > drawer.getMaxCapacity(stack)) { int remainingSpace = getCapacity() - getStored(); diff --git a/src/main/java/refinedstorage/tile/externalstorage/ItemHandlerStorage.java b/src/main/java/refinedstorage/tile/externalstorage/ItemHandlerStorage.java index 716ae16f7..5ad983092 100755 --- a/src/main/java/refinedstorage/tile/externalstorage/ItemHandlerStorage.java +++ b/src/main/java/refinedstorage/tile/externalstorage/ItemHandlerStorage.java @@ -38,7 +38,7 @@ public class ItemHandlerStorage extends ExternalStorage { @Override public ItemStack insertItem(ItemStack stack, int size, boolean simulate) { - if (ModeFilter.respectsMode(externalStorage.getFilters(), externalStorage, externalStorage.getCompare(), stack)) { + if (ModeFilter.respectsMode(externalStorage.getFilters(), externalStorage.getMode(), externalStorage.getCompare(), stack)) { return ItemHandlerHelper.insertItem(handler, ItemHandlerHelper.copyStackWithSize(stack, size), simulate); } diff --git a/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java b/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java index a76ed21b4..bebd2d650 100755 --- a/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java +++ b/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java @@ -17,7 +17,6 @@ import refinedstorage.tile.TileNode; import refinedstorage.tile.config.ICompareConfig; import refinedstorage.tile.config.IModeConfig; import refinedstorage.tile.config.IPrioritizable; -import refinedstorage.tile.config.IRedstoneModeConfig; import refinedstorage.tile.data.ITileDataProducer; import refinedstorage.tile.data.TileDataManager; import refinedstorage.tile.data.TileDataParameter; @@ -222,18 +221,18 @@ public class TileExternalStorage extends TileNode implements IStorageProvider, I } @Override - public IRedstoneModeConfig getRedstoneModeConfig() { - return this; + public TileDataParameter getRedstoneModeConfig() { + return REDSTONE_MODE; } @Override - public ICompareConfig getCompareConfig() { - return this; + public TileDataParameter getCompareConfig() { + return COMPARE; } @Override - public IModeConfig getModeConfig() { - return this; + public TileDataParameter getModeConfig() { + return MODE; } @Override diff --git a/src/main/java/refinedstorage/tile/grid/IGrid.java b/src/main/java/refinedstorage/tile/grid/IGrid.java index 8f16c09e7..a730b8f34 100755 --- a/src/main/java/refinedstorage/tile/grid/IGrid.java +++ b/src/main/java/refinedstorage/tile/grid/IGrid.java @@ -5,7 +5,7 @@ import refinedstorage.api.network.IGridHandler; import refinedstorage.block.EnumGridType; import refinedstorage.gui.grid.GridFilteredItem; import refinedstorage.inventory.ItemHandlerBasic; -import refinedstorage.tile.config.IRedstoneModeConfig; +import refinedstorage.tile.data.TileDataParameter; import java.util.List; @@ -36,7 +36,7 @@ public interface IGrid { ItemHandlerBasic getFilter(); - IRedstoneModeConfig getRedstoneModeConfig(); + TileDataParameter getRedstoneModeConfig(); boolean isConnected(); } diff --git a/src/main/java/refinedstorage/tile/grid/TileGrid.java b/src/main/java/refinedstorage/tile/grid/TileGrid.java index 66be251ba..93cc1e1bc 100755 --- a/src/main/java/refinedstorage/tile/grid/TileGrid.java +++ b/src/main/java/refinedstorage/tile/grid/TileGrid.java @@ -26,7 +26,6 @@ import refinedstorage.inventory.ItemHandlerGridFilterInGrid; import refinedstorage.inventory.ItemValidatorBasic; import refinedstorage.item.ItemPattern; import refinedstorage.tile.TileNode; -import refinedstorage.tile.config.IRedstoneModeConfig; import refinedstorage.tile.data.ITileDataConsumer; import refinedstorage.tile.data.ITileDataProducer; import refinedstorage.tile.data.TileDataManager; @@ -392,8 +391,8 @@ public class TileGrid extends TileNode implements IGrid { } @Override - public IRedstoneModeConfig getRedstoneModeConfig() { - return this; + public TileDataParameter getRedstoneModeConfig() { + return REDSTONE_MODE; } @Override diff --git a/src/main/java/refinedstorage/tile/grid/WirelessGrid.java b/src/main/java/refinedstorage/tile/grid/WirelessGrid.java index 988c02c94..82d33441e 100755 --- a/src/main/java/refinedstorage/tile/grid/WirelessGrid.java +++ b/src/main/java/refinedstorage/tile/grid/WirelessGrid.java @@ -16,7 +16,7 @@ import refinedstorage.item.ItemWirelessGrid; import refinedstorage.network.MessageWirelessGridSettingsUpdate; import refinedstorage.tile.TileBase; import refinedstorage.tile.TileController; -import refinedstorage.tile.config.IRedstoneModeConfig; +import refinedstorage.tile.data.TileDataParameter; import java.util.ArrayList; import java.util.List; @@ -148,7 +148,7 @@ public class WirelessGrid implements IGrid { } @Override - public IRedstoneModeConfig getRedstoneModeConfig() { + public TileDataParameter getRedstoneModeConfig() { return null; } From 5b5e2239a8655ebc1014507fb961265bdae104ff Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Fri, 5 Aug 2016 15:36:45 +0200 Subject: [PATCH 094/214] Sync controller redstone state and energy state --- .../refinedstorage/gui/GuiController.java | 5 +- .../gui/sidebutton/SideButtonMode.java | 8 +-- .../sidebutton/SideButtonRedstoneMode.java | 3 +- .../refinedstorage/tile/TileConstructor.java | 6 +- .../refinedstorage/tile/TileController.java | 55 +++++++++++---- .../refinedstorage/tile/TileDestructor.java | 15 ++-- .../refinedstorage/tile/TileDetector.java | 6 +- .../refinedstorage/tile/TileDiskDrive.java | 17 +++-- .../refinedstorage/tile/TileExporter.java | 6 +- .../refinedstorage/tile/TileImporter.java | 15 ++-- .../refinedstorage/tile/TileInterface.java | 6 +- .../java/refinedstorage/tile/TileNode.java | 26 ++----- .../java/refinedstorage/tile/TileStorage.java | 17 +++-- .../{ICompareConfig.java => IComparable.java} | 8 +-- .../tile/config/IFilterable.java | 68 +++++++++++++++++++ .../tile/config/IModeConfig.java | 33 --------- .../tile/config/IPrioritizable.java | 2 +- ...Config.java => IRedstoneConfigurable.java} | 2 +- .../tile/config/ModeFilter.java | 40 ----------- .../tile/config/RedstoneMode.java | 47 ++++++------- .../DeepStorageUnitStorage.java | 4 +- .../tile/externalstorage/DrawerStorage.java | 4 +- .../externalstorage/ItemHandlerStorage.java | 4 +- .../externalstorage/TileExternalStorage.java | 14 ++-- 24 files changed, 203 insertions(+), 208 deletions(-) rename src/main/java/refinedstorage/tile/config/{ICompareConfig.java => IComparable.java} (76%) create mode 100755 src/main/java/refinedstorage/tile/config/IFilterable.java delete mode 100755 src/main/java/refinedstorage/tile/config/IModeConfig.java rename src/main/java/refinedstorage/tile/config/{IRedstoneModeConfig.java => IRedstoneConfigurable.java} (74%) delete mode 100755 src/main/java/refinedstorage/tile/config/ModeFilter.java diff --git a/src/main/java/refinedstorage/gui/GuiController.java b/src/main/java/refinedstorage/gui/GuiController.java index da24e5feb..dd5b21000 100755 --- a/src/main/java/refinedstorage/gui/GuiController.java +++ b/src/main/java/refinedstorage/gui/GuiController.java @@ -3,6 +3,7 @@ package refinedstorage.gui; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.RenderHelper; import refinedstorage.container.ContainerController; +import refinedstorage.gui.sidebutton.SideButtonRedstoneMode; import refinedstorage.tile.TileController; import java.util.List; @@ -27,7 +28,7 @@ public class GuiController extends GuiBase { @Override public void init(int x, int y) { - //addSideButton(new SideButtonRedstoneMode(controller)); + addSideButton(new SideButtonRedstoneMode(TileController.REDSTONE_MODE)); } @Override @@ -99,7 +100,7 @@ public class GuiController extends GuiBase { } if (inBounds(barX, barY, barWidth, barHeight, mouseX, mouseY)) { - drawTooltip(mouseX, mouseY, t("misc.refinedstorage:energy_usage", controller.getEnergyUsage()) + "\n" + t("misc.refinedstorage:energy_stored", controller.getEnergy().getEnergyStored(), controller.getEnergy().getMaxEnergyStored())); + drawTooltip(mouseX, mouseY, t("misc.refinedstorage:energy_usage", TileController.ENERGY_USAGE.getValue()) + "\n" + t("misc.refinedstorage:energy_stored", TileController.ENERGY_STORED.getValue(), TileController.ENERGY_CAPACITY.getValue())); } } diff --git a/src/main/java/refinedstorage/gui/sidebutton/SideButtonMode.java b/src/main/java/refinedstorage/gui/sidebutton/SideButtonMode.java index 368a55646..e88283ad7 100755 --- a/src/main/java/refinedstorage/gui/sidebutton/SideButtonMode.java +++ b/src/main/java/refinedstorage/gui/sidebutton/SideButtonMode.java @@ -2,7 +2,7 @@ package refinedstorage.gui.sidebutton; import net.minecraft.util.text.TextFormatting; import refinedstorage.gui.GuiBase; -import refinedstorage.tile.config.IModeConfig; +import refinedstorage.tile.config.IFilterable; import refinedstorage.tile.data.TileDataManager; import refinedstorage.tile.data.TileDataParameter; @@ -15,18 +15,18 @@ public class SideButtonMode extends SideButton { @Override public String getTooltip(GuiBase gui) { - return TextFormatting.GREEN + gui.t("sidebutton.refinedstorage:mode") + TextFormatting.RESET + "\n" + gui.t("sidebutton.refinedstorage:mode." + (parameter.getValue() == IModeConfig.WHITELIST ? "whitelist" : "blacklist")); + return TextFormatting.GREEN + gui.t("sidebutton.refinedstorage:mode") + TextFormatting.RESET + "\n" + gui.t("sidebutton.refinedstorage:mode." + (parameter.getValue() == IFilterable.WHITELIST ? "whitelist" : "blacklist")); } @Override public void draw(GuiBase gui, int x, int y) { gui.bindTexture("icons.png"); - gui.drawTexture(x, y + 1, parameter.getValue() == IModeConfig.WHITELIST ? 0 : 16, 64, 16, 16); + gui.drawTexture(x, y + 1, parameter.getValue() == IFilterable.WHITELIST ? 0 : 16, 64, 16, 16); } @Override public void actionPerformed() { - TileDataManager.setParameter(parameter, parameter.getValue() == IModeConfig.WHITELIST ? IModeConfig.BLACKLIST : IModeConfig.WHITELIST); + TileDataManager.setParameter(parameter, parameter.getValue() == IFilterable.WHITELIST ? IFilterable.BLACKLIST : IFilterable.WHITELIST); } } diff --git a/src/main/java/refinedstorage/gui/sidebutton/SideButtonRedstoneMode.java b/src/main/java/refinedstorage/gui/sidebutton/SideButtonRedstoneMode.java index a891bf62a..77e499eb2 100755 --- a/src/main/java/refinedstorage/gui/sidebutton/SideButtonRedstoneMode.java +++ b/src/main/java/refinedstorage/gui/sidebutton/SideButtonRedstoneMode.java @@ -2,7 +2,6 @@ package refinedstorage.gui.sidebutton; import net.minecraft.util.text.TextFormatting; import refinedstorage.gui.GuiBase; -import refinedstorage.tile.config.RedstoneMode; import refinedstorage.tile.data.TileDataManager; import refinedstorage.tile.data.TileDataParameter; @@ -26,6 +25,6 @@ public class SideButtonRedstoneMode extends SideButton { @Override public void actionPerformed() { - TileDataManager.setParameter(parameter, RedstoneMode.getById(parameter.getValue()).next().id); + TileDataManager.setParameter(parameter, parameter.getValue() + 1); } } diff --git a/src/main/java/refinedstorage/tile/TileConstructor.java b/src/main/java/refinedstorage/tile/TileConstructor.java index 044d38f1d..ef4eb160f 100755 --- a/src/main/java/refinedstorage/tile/TileConstructor.java +++ b/src/main/java/refinedstorage/tile/TileConstructor.java @@ -16,11 +16,11 @@ import refinedstorage.container.slot.SlotSpecimen; import refinedstorage.inventory.ItemHandlerBasic; import refinedstorage.inventory.ItemHandlerUpgrade; import refinedstorage.item.ItemUpgrade; -import refinedstorage.tile.config.ICompareConfig; +import refinedstorage.tile.config.IComparable; import refinedstorage.tile.data.TileDataParameter; -public class TileConstructor extends TileNode implements ICompareConfig { - public static final TileDataParameter COMPARE = ICompareConfig.createConfigParameter(); +public class TileConstructor extends TileNode implements IComparable { + public static final TileDataParameter COMPARE = IComparable.createParameter(); private static final String NBT_COMPARE = "Compare"; diff --git a/src/main/java/refinedstorage/tile/TileController.java b/src/main/java/refinedstorage/tile/TileController.java index 7be78dec7..0ecf5f05a 100755 --- a/src/main/java/refinedstorage/tile/TileController.java +++ b/src/main/java/refinedstorage/tile/TileController.java @@ -8,6 +8,7 @@ import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; +import net.minecraft.network.datasync.DataSerializers; import net.minecraft.util.EnumFacing; import net.minecraft.util.math.BlockPos; import net.minecraftforge.common.capabilities.Capability; @@ -41,13 +42,39 @@ import refinedstorage.integration.tesla.IntegrationTesla; import refinedstorage.item.ItemPattern; import refinedstorage.network.MessageGridDelta; import refinedstorage.network.MessageGridUpdate; -import refinedstorage.tile.config.IRedstoneModeConfig; +import refinedstorage.tile.config.IRedstoneConfigurable; import refinedstorage.tile.config.RedstoneMode; +import refinedstorage.tile.data.ITileDataProducer; +import refinedstorage.tile.data.TileDataManager; +import refinedstorage.tile.data.TileDataParameter; import refinedstorage.tile.externalstorage.ExternalStorage; import java.util.*; -public class TileController extends TileBase implements INetworkMaster, IEnergyReceiver, IRedstoneModeConfig { +public class TileController extends TileBase implements INetworkMaster, IEnergyReceiver, IRedstoneConfigurable { + public static final TileDataParameter REDSTONE_MODE = RedstoneMode.createParameter(); + + public static final TileDataParameter ENERGY_USAGE = TileDataManager.createParameter(DataSerializers.VARINT, new ITileDataProducer() { + @Override + public Integer getValue(TileController tile) { + return tile.getEnergyUsage(); + } + }); + + public static final TileDataParameter ENERGY_STORED = TileDataManager.createParameter(DataSerializers.VARINT, new ITileDataProducer() { + @Override + public Integer getValue(TileController tile) { + return tile.getEnergy().getEnergyStored(); + } + }); + + public static final TileDataParameter ENERGY_CAPACITY = TileDataManager.createParameter(DataSerializers.VARINT, new ITileDataProducer() { + @Override + public Integer getValue(TileController tile) { + return tile.getEnergy().getMaxEnergyStored(); + } + }); + public static final String NBT_ENERGY = "Energy"; public static final String NBT_ENERGY_CAPACITY = "EnergyCapacity"; @@ -85,7 +112,6 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR private EnergyStorage energy = new EnergyStorage(RefinedStorage.INSTANCE.controllerCapacity); private IControllerEnergyIC2 energyEU; private ControllerEnergyTesla energyTesla; - private int energyUsage; private int lastEnergyDisplay; private int lastEnergyComparator; @@ -99,6 +125,11 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR private List clientNodes = new ArrayList(); public TileController() { + dataManager.addWatchedParameter(REDSTONE_MODE); + dataManager.addWatchedParameter(ENERGY_USAGE); + dataManager.addWatchedParameter(ENERGY_STORED); + dataManager.addParameter(ENERGY_CAPACITY); + if (IntegrationIC2.isLoaded()) { this.energyEU = new ControllerEnergyIC2(this); } else { @@ -500,7 +531,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR energy.writeToNBT(tag); - tag.setInteger(RedstoneMode.NBT, redstoneMode.id); + tag.setInteger(RedstoneMode.NBT, redstoneMode.ordinal()); NBTTagList list = new NBTTagList(); @@ -579,19 +610,15 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR @Override public int getEnergyUsage() { - if (!worldObj.isRemote) { - int usage = RefinedStorage.INSTANCE.controllerBaseUsage; + int usage = RefinedStorage.INSTANCE.controllerBaseUsage; - for (INetworkNode node : nodeGraph.all()) { - if (node.canUpdate()) { - usage += node.getEnergyUsage(); - } + for (INetworkNode node : nodeGraph.all()) { + if (node.canUpdate()) { + usage += node.getEnergyUsage(); } - - return usage; } - return energyUsage; + return usage; } public EnumControllerType getType() { @@ -602,7 +629,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR return type == null ? EnumControllerType.NORMAL : type; } - // @TODO: Make this work as well + // @TODO: Sync client nodes /*@Override public void readContainerData(ByteBuf buf) { energy.setEnergyStored(buf.readInt()); diff --git a/src/main/java/refinedstorage/tile/TileDestructor.java b/src/main/java/refinedstorage/tile/TileDestructor.java index af7492654..890398ec9 100755 --- a/src/main/java/refinedstorage/tile/TileDestructor.java +++ b/src/main/java/refinedstorage/tile/TileDestructor.java @@ -14,16 +14,15 @@ import refinedstorage.RefinedStorage; import refinedstorage.inventory.ItemHandlerBasic; import refinedstorage.inventory.ItemHandlerUpgrade; import refinedstorage.item.ItemUpgrade; -import refinedstorage.tile.config.ICompareConfig; -import refinedstorage.tile.config.IModeConfig; -import refinedstorage.tile.config.ModeFilter; +import refinedstorage.tile.config.IComparable; +import refinedstorage.tile.config.IFilterable; import refinedstorage.tile.data.TileDataParameter; import java.util.List; -public class TileDestructor extends TileNode implements ICompareConfig, IModeConfig { - public static final TileDataParameter COMPARE = ICompareConfig.createConfigParameter(); - public static final TileDataParameter MODE = IModeConfig.createConfigParameter(); +public class TileDestructor extends TileNode implements IComparable, IFilterable { + public static final TileDataParameter COMPARE = IComparable.createParameter(); + public static final TileDataParameter MODE = IFilterable.createParameter(); private static final String NBT_COMPARE = "Compare"; private static final String NBT_MODE = "Mode"; @@ -34,7 +33,7 @@ public class TileDestructor extends TileNode implements ICompareConfig, IModeCon private ItemHandlerUpgrade upgrades = new ItemHandlerUpgrade(4, this, ItemUpgrade.TYPE_SPEED); private int compare = 0; - private int mode = IModeConfig.WHITELIST; + private int mode = IFilterable.WHITELIST; public TileDestructor() { dataManager.addWatchedParameter(COMPARE); @@ -55,7 +54,7 @@ public class TileDestructor extends TileNode implements ICompareConfig, IModeCon ItemStack frontStack = frontBlockState.getBlock().getItem(worldObj, front, frontBlockState); if (frontStack != null) { - if (ModeFilter.respectsMode(filters, mode, compare, frontStack)) { + if (IFilterable.canTake(filters, mode, compare, frontStack)) { List drops = frontBlockState.getBlock().getDrops(worldObj, front, frontBlockState, 0); worldObj.playEvent(null, 2001, front, Block.getStateId(frontBlockState)); diff --git a/src/main/java/refinedstorage/tile/TileDetector.java b/src/main/java/refinedstorage/tile/TileDetector.java index 7c71e11f5..82aa9ef2b 100755 --- a/src/main/java/refinedstorage/tile/TileDetector.java +++ b/src/main/java/refinedstorage/tile/TileDetector.java @@ -8,15 +8,15 @@ import refinedstorage.RefinedStorage; import refinedstorage.RefinedStorageBlocks; import refinedstorage.api.network.INetworkMaster; import refinedstorage.inventory.ItemHandlerBasic; -import refinedstorage.tile.config.ICompareConfig; +import refinedstorage.tile.config.IComparable; import refinedstorage.tile.config.RedstoneMode; import refinedstorage.tile.data.ITileDataConsumer; import refinedstorage.tile.data.ITileDataProducer; import refinedstorage.tile.data.TileDataManager; import refinedstorage.tile.data.TileDataParameter; -public class TileDetector extends TileNode implements ICompareConfig { - public static final TileDataParameter COMPARE = ICompareConfig.createConfigParameter(); +public class TileDetector extends TileNode implements IComparable { + public static final TileDataParameter COMPARE = IComparable.createParameter(); public static final TileDataParameter MODE = TileDataManager.createParameter(DataSerializers.VARINT, new ITileDataProducer() { @Override diff --git a/src/main/java/refinedstorage/tile/TileDiskDrive.java b/src/main/java/refinedstorage/tile/TileDiskDrive.java index 96a1e4a70..fde147909 100755 --- a/src/main/java/refinedstorage/tile/TileDiskDrive.java +++ b/src/main/java/refinedstorage/tile/TileDiskDrive.java @@ -18,19 +18,18 @@ import refinedstorage.apiimpl.storage.NBTStorage; import refinedstorage.block.EnumStorageType; import refinedstorage.inventory.ItemHandlerBasic; import refinedstorage.inventory.ItemValidatorBasic; -import refinedstorage.tile.config.ICompareConfig; -import refinedstorage.tile.config.IModeConfig; +import refinedstorage.tile.config.IComparable; +import refinedstorage.tile.config.IFilterable; import refinedstorage.tile.config.IPrioritizable; -import refinedstorage.tile.config.ModeFilter; import refinedstorage.tile.data.TileDataManager; import refinedstorage.tile.data.TileDataParameter; import java.util.List; -public class TileDiskDrive extends TileNode implements IStorageProvider, IStorageGui, ICompareConfig, IModeConfig, IPrioritizable { - public static final TileDataParameter PRIORITY = IPrioritizable.createConfigParameter(); - public static final TileDataParameter COMPARE = ICompareConfig.createConfigParameter(); - public static final TileDataParameter MODE = IModeConfig.createConfigParameter(); +public class TileDiskDrive extends TileNode implements IStorageProvider, IStorageGui, IComparable, IFilterable, IPrioritizable { + public static final TileDataParameter PRIORITY = IPrioritizable.createParameter(); + public static final TileDataParameter COMPARE = IComparable.createParameter(); + public static final TileDataParameter MODE = IFilterable.createParameter(); public class Storage extends NBTStorage { public Storage(ItemStack disk) { @@ -44,7 +43,7 @@ public class TileDiskDrive extends TileNode implements IStorageProvider, IStorag @Override public ItemStack insertItem(ItemStack stack, int size, boolean simulate) { - if (!ModeFilter.respectsMode(getFilters(), mode, getCompare(), stack)) { + if (!IFilterable.canTake(getFilters(), mode, getCompare(), stack)) { return ItemHandlerHelper.copyStackWithSize(stack, size); } @@ -101,7 +100,7 @@ public class TileDiskDrive extends TileNode implements IStorageProvider, IStorag private int priority = 0; private int compare = 0; - private int mode = IModeConfig.WHITELIST; + private int mode = IFilterable.WHITELIST; private int stored = 0; public TileDiskDrive() { diff --git a/src/main/java/refinedstorage/tile/TileExporter.java b/src/main/java/refinedstorage/tile/TileExporter.java index 5421d2e5a..b6ccf906f 100755 --- a/src/main/java/refinedstorage/tile/TileExporter.java +++ b/src/main/java/refinedstorage/tile/TileExporter.java @@ -12,11 +12,11 @@ import refinedstorage.apiimpl.autocrafting.CraftingTaskScheduler; import refinedstorage.inventory.ItemHandlerBasic; import refinedstorage.inventory.ItemHandlerUpgrade; import refinedstorage.item.ItemUpgrade; -import refinedstorage.tile.config.ICompareConfig; +import refinedstorage.tile.config.IComparable; import refinedstorage.tile.data.TileDataParameter; -public class TileExporter extends TileNode implements ICompareConfig { - public static final TileDataParameter COMPARE = ICompareConfig.createConfigParameter(); +public class TileExporter extends TileNode implements IComparable { + public static final TileDataParameter COMPARE = IComparable.createParameter(); private static final String NBT_COMPARE = "Compare"; diff --git a/src/main/java/refinedstorage/tile/TileImporter.java b/src/main/java/refinedstorage/tile/TileImporter.java index 055e48d84..15a2c3129 100755 --- a/src/main/java/refinedstorage/tile/TileImporter.java +++ b/src/main/java/refinedstorage/tile/TileImporter.java @@ -10,14 +10,13 @@ import refinedstorage.RefinedStorage; import refinedstorage.inventory.ItemHandlerBasic; import refinedstorage.inventory.ItemHandlerUpgrade; import refinedstorage.item.ItemUpgrade; -import refinedstorage.tile.config.ICompareConfig; -import refinedstorage.tile.config.IModeConfig; -import refinedstorage.tile.config.ModeFilter; +import refinedstorage.tile.config.IComparable; +import refinedstorage.tile.config.IFilterable; import refinedstorage.tile.data.TileDataParameter; -public class TileImporter extends TileNode implements ICompareConfig, IModeConfig { - public static final TileDataParameter COMPARE = ICompareConfig.createConfigParameter(); - public static final TileDataParameter MODE = IModeConfig.createConfigParameter(); +public class TileImporter extends TileNode implements IComparable, IFilterable { + public static final TileDataParameter COMPARE = IComparable.createParameter(); + public static final TileDataParameter MODE = IFilterable.createParameter(); private static final String NBT_COMPARE = "Compare"; private static final String NBT_MODE = "Mode"; @@ -26,7 +25,7 @@ public class TileImporter extends TileNode implements ICompareConfig, IModeConfi private ItemHandlerUpgrade upgrades = new ItemHandlerUpgrade(4, this, ItemUpgrade.TYPE_SPEED, ItemUpgrade.TYPE_STACK); private int compare = 0; - private int mode = IModeConfig.WHITELIST; + private int mode = IFilterable.WHITELIST; private int currentSlot; @@ -55,7 +54,7 @@ public class TileImporter extends TileNode implements ICompareConfig, IModeConfi if (handler.getSlots() > 0) { ItemStack stack = handler.getStackInSlot(currentSlot); - if (stack == null || !ModeFilter.respectsMode(filters, mode, compare, stack)) { + if (stack == null || !IFilterable.canTake(filters, mode, compare, stack)) { currentSlot++; } else if (ticks % upgrades.getSpeed() == 0) { int quantity = upgrades.hasUpgrade(ItemUpgrade.TYPE_STACK) ? 64 : 1; diff --git a/src/main/java/refinedstorage/tile/TileInterface.java b/src/main/java/refinedstorage/tile/TileInterface.java index 5783604fc..3476c3330 100755 --- a/src/main/java/refinedstorage/tile/TileInterface.java +++ b/src/main/java/refinedstorage/tile/TileInterface.java @@ -11,11 +11,11 @@ import refinedstorage.RefinedStorage; import refinedstorage.inventory.ItemHandlerBasic; import refinedstorage.inventory.ItemHandlerUpgrade; import refinedstorage.item.ItemUpgrade; -import refinedstorage.tile.config.ICompareConfig; +import refinedstorage.tile.config.IComparable; import refinedstorage.tile.data.TileDataParameter; -public class TileInterface extends TileNode implements ICompareConfig { - public static final TileDataParameter COMPARE = ICompareConfig.createConfigParameter(); +public class TileInterface extends TileNode implements IComparable { + public static final TileDataParameter COMPARE = IComparable.createParameter(); private static final String NBT_COMPARE = "Compare"; diff --git a/src/main/java/refinedstorage/tile/TileNode.java b/src/main/java/refinedstorage/tile/TileNode.java index b663c612e..fa3236977 100755 --- a/src/main/java/refinedstorage/tile/TileNode.java +++ b/src/main/java/refinedstorage/tile/TileNode.java @@ -2,36 +2,18 @@ package refinedstorage.tile; import net.minecraft.block.Block; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.network.datasync.DataSerializers; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import refinedstorage.api.network.INetworkMaster; import refinedstorage.api.network.INetworkNode; import refinedstorage.api.network.NetworkUtils; import refinedstorage.block.BlockNode; -import refinedstorage.tile.config.IRedstoneModeConfig; +import refinedstorage.tile.config.IRedstoneConfigurable; import refinedstorage.tile.config.RedstoneMode; -import refinedstorage.tile.data.ITileDataConsumer; -import refinedstorage.tile.data.ITileDataProducer; -import refinedstorage.tile.data.TileDataManager; import refinedstorage.tile.data.TileDataParameter; -public abstract class TileNode extends TileBase implements INetworkNode, IRedstoneModeConfig { - public static final TileDataParameter REDSTONE_MODE = TileDataManager.createParameter(DataSerializers.VARINT, new ITileDataProducer() { - @Override - public Integer getValue(TileNode tile) { - return tile.redstoneMode.id; - } - }, new ITileDataConsumer() { - @Override - public void setValue(TileNode tile, Integer value) { - RedstoneMode mode = RedstoneMode.getById(value); - - if (mode != null) { - tile.redstoneMode = mode; - } - } - }); +public abstract class TileNode extends TileBase implements INetworkNode, IRedstoneConfigurable { + public static final TileDataParameter REDSTONE_MODE = RedstoneMode.createParameter(); private static final String NBT_CONNECTED = "Connected"; @@ -164,7 +146,7 @@ public abstract class TileNode extends TileBase implements INetworkNode, IRedsto public NBTTagCompound write(NBTTagCompound tag) { super.write(tag); - tag.setInteger(RedstoneMode.NBT, redstoneMode.id); + tag.setInteger(RedstoneMode.NBT, redstoneMode.ordinal()); return tag; } diff --git a/src/main/java/refinedstorage/tile/TileStorage.java b/src/main/java/refinedstorage/tile/TileStorage.java index 603afab0a..a11a647d2 100755 --- a/src/main/java/refinedstorage/tile/TileStorage.java +++ b/src/main/java/refinedstorage/tile/TileStorage.java @@ -14,20 +14,19 @@ import refinedstorage.apiimpl.storage.NBTStorage; import refinedstorage.block.BlockStorage; import refinedstorage.block.EnumStorageType; import refinedstorage.inventory.ItemHandlerBasic; -import refinedstorage.tile.config.ICompareConfig; -import refinedstorage.tile.config.IModeConfig; +import refinedstorage.tile.config.IComparable; +import refinedstorage.tile.config.IFilterable; import refinedstorage.tile.config.IPrioritizable; -import refinedstorage.tile.config.ModeFilter; import refinedstorage.tile.data.ITileDataProducer; import refinedstorage.tile.data.TileDataManager; import refinedstorage.tile.data.TileDataParameter; import java.util.List; -public class TileStorage extends TileNode implements IStorageProvider, IStorageGui, ICompareConfig, IModeConfig, IPrioritizable { - public static final TileDataParameter PRIORITY = IPrioritizable.createConfigParameter(); - public static final TileDataParameter COMPARE = ICompareConfig.createConfigParameter(); - public static final TileDataParameter MODE = IModeConfig.createConfigParameter(); +public class TileStorage extends TileNode implements IStorageProvider, IStorageGui, IComparable, IFilterable, IPrioritizable { + public static final TileDataParameter PRIORITY = IPrioritizable.createParameter(); + public static final TileDataParameter COMPARE = IComparable.createParameter(); + public static final TileDataParameter MODE = IFilterable.createParameter(); public static final TileDataParameter STORED = TileDataManager.createParameter(DataSerializers.VARINT, new ITileDataProducer() { @Override public Integer getValue(TileStorage tile) { @@ -47,7 +46,7 @@ public class TileStorage extends TileNode implements IStorageProvider, IStorageG @Override public ItemStack insertItem(ItemStack stack, int size, boolean simulate) { - if (!ModeFilter.respectsMode(filters, mode, compare, stack)) { + if (!IFilterable.canTake(filters, mode, compare, stack)) { return ItemHandlerHelper.copyStackWithSize(stack, size); } @@ -71,7 +70,7 @@ public class TileStorage extends TileNode implements IStorageProvider, IStorageG private int priority = 0; private int compare = 0; - private int mode = IModeConfig.WHITELIST; + private int mode = IFilterable.WHITELIST; public TileStorage() { dataManager.addWatchedParameter(PRIORITY); diff --git a/src/main/java/refinedstorage/tile/config/ICompareConfig.java b/src/main/java/refinedstorage/tile/config/IComparable.java similarity index 76% rename from src/main/java/refinedstorage/tile/config/ICompareConfig.java rename to src/main/java/refinedstorage/tile/config/IComparable.java index 6a3f53110..509845221 100755 --- a/src/main/java/refinedstorage/tile/config/ICompareConfig.java +++ b/src/main/java/refinedstorage/tile/config/IComparable.java @@ -7,17 +7,17 @@ import refinedstorage.tile.data.ITileDataProducer; import refinedstorage.tile.data.TileDataManager; import refinedstorage.tile.data.TileDataParameter; -public interface ICompareConfig { - static TileDataParameter createConfigParameter() { +public interface IComparable { + static TileDataParameter createParameter() { return TileDataManager.createParameter(DataSerializers.VARINT, new ITileDataProducer() { @Override public Integer getValue(T tile) { - return ((ICompareConfig) tile).getCompare(); + return ((IComparable) tile).getCompare(); } }, new ITileDataConsumer() { @Override public void setValue(T tile, Integer value) { - ((ICompareConfig) tile).setCompare(value); + ((IComparable) tile).setCompare(value); } }); } diff --git a/src/main/java/refinedstorage/tile/config/IFilterable.java b/src/main/java/refinedstorage/tile/config/IFilterable.java new file mode 100755 index 000000000..230d8b490 --- /dev/null +++ b/src/main/java/refinedstorage/tile/config/IFilterable.java @@ -0,0 +1,68 @@ +package refinedstorage.tile.config; + +import net.minecraft.item.ItemStack; +import net.minecraft.network.datasync.DataSerializers; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.items.IItemHandler; +import refinedstorage.api.storage.CompareUtils; +import refinedstorage.tile.data.ITileDataConsumer; +import refinedstorage.tile.data.ITileDataProducer; +import refinedstorage.tile.data.TileDataManager; +import refinedstorage.tile.data.TileDataParameter; + +public interface IFilterable { + int WHITELIST = 0; + int BLACKLIST = 1; + + static TileDataParameter createParameter() { + return TileDataManager.createParameter(DataSerializers.VARINT, new ITileDataProducer() { + @Override + public Integer getValue(T tile) { + return ((IFilterable) tile).getMode(); + } + }, new ITileDataConsumer() { + @Override + public void setValue(T tile, Integer value) { + if (value == WHITELIST || value == BLACKLIST) { + ((IFilterable) tile).setMode(value); + } + } + }); + } + + static boolean canTake(IItemHandler filters, int mode, int compare, ItemStack stack) { + if (mode == WHITELIST) { + int slots = 0; + + for (int i = 0; i < filters.getSlots(); ++i) { + ItemStack slot = filters.getStackInSlot(i); + + if (slot != null) { + slots++; + + if (CompareUtils.compareStack(slot, stack, compare)) { + return true; + } + } + } + + return slots == 0; + } else if (mode == BLACKLIST) { + for (int i = 0; i < filters.getSlots(); ++i) { + ItemStack slot = filters.getStackInSlot(i); + + if (slot != null && CompareUtils.compareStack(slot, stack, compare)) { + return false; + } + } + + return true; + } + + return false; + } + + void setMode(int mode); + + int getMode(); +} diff --git a/src/main/java/refinedstorage/tile/config/IModeConfig.java b/src/main/java/refinedstorage/tile/config/IModeConfig.java deleted file mode 100755 index b64dfdc52..000000000 --- a/src/main/java/refinedstorage/tile/config/IModeConfig.java +++ /dev/null @@ -1,33 +0,0 @@ -package refinedstorage.tile.config; - -import net.minecraft.network.datasync.DataSerializers; -import net.minecraft.tileentity.TileEntity; -import refinedstorage.tile.data.ITileDataConsumer; -import refinedstorage.tile.data.ITileDataProducer; -import refinedstorage.tile.data.TileDataManager; -import refinedstorage.tile.data.TileDataParameter; - -public interface IModeConfig { - int WHITELIST = 0; - int BLACKLIST = 1; - - static TileDataParameter createConfigParameter() { - return TileDataManager.createParameter(DataSerializers.VARINT, new ITileDataProducer() { - @Override - public Integer getValue(T tile) { - return ((IModeConfig) tile).getMode(); - } - }, new ITileDataConsumer() { - @Override - public void setValue(T tile, Integer value) { - if (value == WHITELIST || value == BLACKLIST) { - ((IModeConfig) tile).setMode(value); - } - } - }); - } - - void setMode(int mode); - - int getMode(); -} diff --git a/src/main/java/refinedstorage/tile/config/IPrioritizable.java b/src/main/java/refinedstorage/tile/config/IPrioritizable.java index 568fdb310..bd6bd3842 100755 --- a/src/main/java/refinedstorage/tile/config/IPrioritizable.java +++ b/src/main/java/refinedstorage/tile/config/IPrioritizable.java @@ -8,7 +8,7 @@ import refinedstorage.tile.data.TileDataManager; import refinedstorage.tile.data.TileDataParameter; public interface IPrioritizable { - static TileDataParameter createConfigParameter() { + static TileDataParameter createParameter() { return TileDataManager.createParameter(DataSerializers.VARINT, new ITileDataProducer() { @Override public Integer getValue(T tile) { diff --git a/src/main/java/refinedstorage/tile/config/IRedstoneModeConfig.java b/src/main/java/refinedstorage/tile/config/IRedstoneConfigurable.java similarity index 74% rename from src/main/java/refinedstorage/tile/config/IRedstoneModeConfig.java rename to src/main/java/refinedstorage/tile/config/IRedstoneConfigurable.java index 21d0dcd58..6a4e4d830 100755 --- a/src/main/java/refinedstorage/tile/config/IRedstoneModeConfig.java +++ b/src/main/java/refinedstorage/tile/config/IRedstoneConfigurable.java @@ -1,6 +1,6 @@ package refinedstorage.tile.config; -public interface IRedstoneModeConfig { +public interface IRedstoneConfigurable { RedstoneMode getRedstoneMode(); void setRedstoneMode(RedstoneMode mode); diff --git a/src/main/java/refinedstorage/tile/config/ModeFilter.java b/src/main/java/refinedstorage/tile/config/ModeFilter.java deleted file mode 100755 index 7fa90f9a5..000000000 --- a/src/main/java/refinedstorage/tile/config/ModeFilter.java +++ /dev/null @@ -1,40 +0,0 @@ -package refinedstorage.tile.config; - -import net.minecraft.item.ItemStack; -import net.minecraftforge.items.IItemHandler; -import refinedstorage.api.storage.CompareUtils; - -// @TODO: Move into IModeConfig -public final class ModeFilter { - public static boolean respectsMode(IItemHandler filters, int mode, int compare, ItemStack stack) { - if (mode == IModeConfig.WHITELIST) { - int slots = 0; - - for (int i = 0; i < filters.getSlots(); ++i) { - ItemStack slot = filters.getStackInSlot(i); - - if (slot != null) { - slots++; - - if (CompareUtils.compareStack(slot, stack, compare)) { - return true; - } - } - } - - return slots == 0; - } else if (mode == IModeConfig.BLACKLIST) { - for (int i = 0; i < filters.getSlots(); ++i) { - ItemStack slot = filters.getStackInSlot(i); - - if (slot != null && CompareUtils.compareStack(slot, stack, compare)) { - return false; - } - } - - return true; - } - - return false; - } -} diff --git a/src/main/java/refinedstorage/tile/config/RedstoneMode.java b/src/main/java/refinedstorage/tile/config/RedstoneMode.java index 7586df4f0..c2b212a72 100755 --- a/src/main/java/refinedstorage/tile/config/RedstoneMode.java +++ b/src/main/java/refinedstorage/tile/config/RedstoneMode.java @@ -1,31 +1,19 @@ package refinedstorage.tile.config; +import net.minecraft.network.datasync.DataSerializers; +import net.minecraft.tileentity.TileEntity; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; +import refinedstorage.tile.data.ITileDataConsumer; +import refinedstorage.tile.data.ITileDataProducer; +import refinedstorage.tile.data.TileDataManager; +import refinedstorage.tile.data.TileDataParameter; public enum RedstoneMode { - IGNORE(0), - HIGH(1), - LOW(2); + IGNORE, HIGH, LOW; public static final String NBT = "RedstoneMode"; - public final int id; - - RedstoneMode(int id) { - this.id = id; - } - - public RedstoneMode next() { - RedstoneMode next = getById(id + 1); - - if (next == null) { - return getById(0); - } - - return next; - } - public boolean isEnabled(World world, BlockPos pos) { switch (this) { case IGNORE: @@ -39,14 +27,21 @@ public enum RedstoneMode { return false; } - // @TOOD: Remove id field public static RedstoneMode getById(int id) { - for (RedstoneMode control : values()) { - if (control.id == id) { - return control; - } - } + return id < 0 || id >= values().length ? IGNORE : values()[id]; + } - return null; + public static TileDataParameter createParameter() { + return TileDataManager.createParameter(DataSerializers.VARINT, new ITileDataProducer() { + @Override + public Integer getValue(T tile) { + return ((IRedstoneConfigurable) tile).getRedstoneMode().ordinal(); + } + }, new ITileDataConsumer() { + @Override + public void setValue(T tile, Integer value) { + ((IRedstoneConfigurable) tile).setRedstoneMode(RedstoneMode.getById(value)); + } + }); } } diff --git a/src/main/java/refinedstorage/tile/externalstorage/DeepStorageUnitStorage.java b/src/main/java/refinedstorage/tile/externalstorage/DeepStorageUnitStorage.java index d95498851..77672cb07 100755 --- a/src/main/java/refinedstorage/tile/externalstorage/DeepStorageUnitStorage.java +++ b/src/main/java/refinedstorage/tile/externalstorage/DeepStorageUnitStorage.java @@ -4,7 +4,7 @@ import net.minecraft.item.ItemStack; import net.minecraftforge.items.ItemHandlerHelper; import powercrystals.minefactoryreloaded.api.IDeepStorageUnit; import refinedstorage.api.storage.CompareUtils; -import refinedstorage.tile.config.ModeFilter; +import refinedstorage.tile.config.IFilterable; import javax.annotation.Nonnull; import java.util.Collections; @@ -35,7 +35,7 @@ public class DeepStorageUnitStorage extends ExternalStorage { @Override public ItemStack insertItem(@Nonnull ItemStack stack, int size, boolean simulate) { - if (ModeFilter.respectsMode(externalStorage.getFilters(), externalStorage.getMode(), externalStorage.getCompare(), stack)) { + if (IFilterable.canTake(externalStorage.getFilters(), externalStorage.getMode(), externalStorage.getCompare(), stack)) { if (unit.getStoredItemType() != null) { if (CompareUtils.compareStackNoQuantity(unit.getStoredItemType(), stack)) { if (getStored() + size > unit.getMaxStoredCount()) { diff --git a/src/main/java/refinedstorage/tile/externalstorage/DrawerStorage.java b/src/main/java/refinedstorage/tile/externalstorage/DrawerStorage.java index 4649b2442..6572a4681 100755 --- a/src/main/java/refinedstorage/tile/externalstorage/DrawerStorage.java +++ b/src/main/java/refinedstorage/tile/externalstorage/DrawerStorage.java @@ -5,7 +5,7 @@ import com.jaquadro.minecraft.storagedrawers.api.storage.attribute.IVoidable; import net.minecraft.item.ItemStack; import net.minecraftforge.items.ItemHandlerHelper; import refinedstorage.api.storage.CompareUtils; -import refinedstorage.tile.config.ModeFilter; +import refinedstorage.tile.config.IFilterable; import java.util.Collections; import java.util.List; @@ -39,7 +39,7 @@ public class DrawerStorage extends ExternalStorage { @Override public ItemStack insertItem(ItemStack stack, int size, boolean simulate) { - if (ModeFilter.respectsMode(externalStorage.getFilters(), externalStorage.getMode(), externalStorage.getCompare(), stack) && drawer.canItemBeStored(stack)) { + if (IFilterable.canTake(externalStorage.getFilters(), externalStorage.getMode(), externalStorage.getCompare(), stack) && drawer.canItemBeStored(stack)) { if (!drawer.isEmpty()) { if (getStored() + size > drawer.getMaxCapacity(stack)) { int remainingSpace = getCapacity() - getStored(); diff --git a/src/main/java/refinedstorage/tile/externalstorage/ItemHandlerStorage.java b/src/main/java/refinedstorage/tile/externalstorage/ItemHandlerStorage.java index 5ad983092..3f1e5943e 100755 --- a/src/main/java/refinedstorage/tile/externalstorage/ItemHandlerStorage.java +++ b/src/main/java/refinedstorage/tile/externalstorage/ItemHandlerStorage.java @@ -4,7 +4,7 @@ import net.minecraft.item.ItemStack; import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.ItemHandlerHelper; import refinedstorage.api.storage.CompareUtils; -import refinedstorage.tile.config.ModeFilter; +import refinedstorage.tile.config.IFilterable; import java.util.ArrayList; import java.util.List; @@ -38,7 +38,7 @@ public class ItemHandlerStorage extends ExternalStorage { @Override public ItemStack insertItem(ItemStack stack, int size, boolean simulate) { - if (ModeFilter.respectsMode(externalStorage.getFilters(), externalStorage.getMode(), externalStorage.getCompare(), stack)) { + if (IFilterable.canTake(externalStorage.getFilters(), externalStorage.getMode(), externalStorage.getCompare(), stack)) { return ItemHandlerHelper.insertItem(handler, ItemHandlerHelper.copyStackWithSize(stack, size), simulate); } diff --git a/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java b/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java index bebd2d650..d75034b0f 100755 --- a/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java +++ b/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java @@ -14,8 +14,8 @@ import refinedstorage.api.storage.IStorageProvider; import refinedstorage.inventory.ItemHandlerBasic; import refinedstorage.tile.IStorageGui; import refinedstorage.tile.TileNode; -import refinedstorage.tile.config.ICompareConfig; -import refinedstorage.tile.config.IModeConfig; +import refinedstorage.tile.config.IComparable; +import refinedstorage.tile.config.IFilterable; import refinedstorage.tile.config.IPrioritizable; import refinedstorage.tile.data.ITileDataProducer; import refinedstorage.tile.data.TileDataManager; @@ -24,10 +24,10 @@ import refinedstorage.tile.data.TileDataParameter; import java.util.ArrayList; import java.util.List; -public class TileExternalStorage extends TileNode implements IStorageProvider, IStorageGui, ICompareConfig, IModeConfig, IPrioritizable { - public static final TileDataParameter PRIORITY = IPrioritizable.createConfigParameter(); - public static final TileDataParameter COMPARE = ICompareConfig.createConfigParameter(); - public static final TileDataParameter MODE = IModeConfig.createConfigParameter(); +public class TileExternalStorage extends TileNode implements IStorageProvider, IStorageGui, IComparable, IFilterable, IPrioritizable { + public static final TileDataParameter PRIORITY = IPrioritizable.createParameter(); + public static final TileDataParameter COMPARE = IComparable.createParameter(); + public static final TileDataParameter MODE = IFilterable.createParameter(); public static final TileDataParameter STORED = TileDataManager.createParameter(DataSerializers.VARINT, new ITileDataProducer() { @Override @@ -51,7 +51,7 @@ public class TileExternalStorage extends TileNode implements IStorageProvider, I private int priority = 0; private int compare = 0; - private int mode = IModeConfig.WHITELIST; + private int mode = IFilterable.WHITELIST; private List storages = new ArrayList(); private int lastDrawerCount; From 759361b35b7d8a6c64f9b952877e4008a2f67757 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Fri, 5 Aug 2016 16:05:48 +0200 Subject: [PATCH 095/214] Fix network transmitter gui --- .../java/refinedstorage/gui/GuiHandler.java | 2 +- .../gui/GuiNetworkTransmitter.java | 18 ++++++++++-------- .../tile/TileNetworkTransmitter.java | 4 ++-- 3 files changed, 13 insertions(+), 11 deletions(-) diff --git a/src/main/java/refinedstorage/gui/GuiHandler.java b/src/main/java/refinedstorage/gui/GuiHandler.java index 2745df7a4..0bb679263 100755 --- a/src/main/java/refinedstorage/gui/GuiHandler.java +++ b/src/main/java/refinedstorage/gui/GuiHandler.java @@ -121,7 +121,7 @@ public class GuiHandler implements IGuiHandler { case RefinedStorageGui.GRID_FILTER: return new GuiGridFilter(getGridFilterContainer(player, x)); case RefinedStorageGui.NETWORK_TRANSMITTER: - return new GuiNetworkTransmitter((ContainerNetworkTransmitter) getContainer(ID, player, tile)); + return new GuiNetworkTransmitter((ContainerNetworkTransmitter) getContainer(ID, player, tile), (TileNetworkTransmitter) tile); default: return null; } diff --git a/src/main/java/refinedstorage/gui/GuiNetworkTransmitter.java b/src/main/java/refinedstorage/gui/GuiNetworkTransmitter.java index ab204ebee..111343e9b 100755 --- a/src/main/java/refinedstorage/gui/GuiNetworkTransmitter.java +++ b/src/main/java/refinedstorage/gui/GuiNetworkTransmitter.java @@ -5,8 +5,12 @@ import refinedstorage.gui.sidebutton.SideButtonRedstoneMode; import refinedstorage.tile.TileNetworkTransmitter; public class GuiNetworkTransmitter extends GuiBase { - public GuiNetworkTransmitter(ContainerNetworkTransmitter container) { + private TileNetworkTransmitter networkTransmitter; + + public GuiNetworkTransmitter(ContainerNetworkTransmitter container, TileNetworkTransmitter networkTransmitter) { super(container, 210, 137); + + this.networkTransmitter = networkTransmitter; } @Override @@ -29,19 +33,17 @@ public class GuiNetworkTransmitter extends GuiBase { public void drawForeground(int mouseX, int mouseY) { drawString(7, 7, t("gui.refinedstorage:network_transmitter")); - String distance = t("gui.refinedstorage:network_transmitter.missing_card"); + String distance; - // @TODO: ... - /* if (networkTransmitter.getNetworkCard().getStackInSlot(0) == null) { distance = t("gui.refinedstorage:network_transmitter.missing_card"); } else if (!TileNetworkTransmitter.RECEIVER_DIMENSION_SUPPORTED.getValue()) { distance = t("gui.refinedstorage:network_transmitter.missing_upgrade"); - } else if (!networkTransmitter.isSameDimension()) { - distance = t("gui.refinedstorage:network_transmitter.dimension", networkTransmitter.getReceiverDimension()); + } else if (TileNetworkTransmitter.RECEIVER_DIMENSION.getValue() != networkTransmitter.getWorld().provider.getDimension()) { + distance = t("gui.refinedstorage:network_transmitter.dimension", TileNetworkTransmitter.RECEIVER_DIMENSION.getValue()); } else { - distance = t("gui.refinedstorage:network_transmitter.distance", networkTransmitter.getDistance()); - }*/ + distance = t("gui.refinedstorage:network_transmitter.distance", TileNetworkTransmitter.DISTANCE.getValue()); + } drawString(51, 24, distance); drawString(7, 42, t("container.inventory")); diff --git a/src/main/java/refinedstorage/tile/TileNetworkTransmitter.java b/src/main/java/refinedstorage/tile/TileNetworkTransmitter.java index 348713b6f..43525596c 100755 --- a/src/main/java/refinedstorage/tile/TileNetworkTransmitter.java +++ b/src/main/java/refinedstorage/tile/TileNetworkTransmitter.java @@ -17,14 +17,14 @@ import refinedstorage.tile.data.TileDataManager; import refinedstorage.tile.data.TileDataParameter; public class TileNetworkTransmitter extends TileNode { - public static final TileDataParameter DISTANCE = TileDataManager.createParameter(DataSerializers.VARINT, new ITileDataProducer() { + public static final TileDataParameter DISTANCE = TileDataManager.createParameter(DataSerializers.VARINT, new ITileDataProducer() { @Override public Integer getValue(TileNetworkTransmitter tile) { return (tile.receiver != null && tile.isSameDimension()) ? tile.getDistance() : -1; } }); - public static final TileDataParameter RECEIVER_DIMENSION = TileDataManager.createParameter(DataSerializers.VARINT, new ITileDataProducer() { + public static final TileDataParameter RECEIVER_DIMENSION = TileDataManager.createParameter(DataSerializers.VARINT, new ITileDataProducer() { @Override public Integer getValue(TileNetworkTransmitter tile) { return tile.receiverDimension; From 20b00a0c286cbe581b74e7118427e5ddd110dcf8 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Fri, 5 Aug 2016 16:20:08 +0200 Subject: [PATCH 096/214] Use listener on detector to avoid race conditions --- .../java/refinedstorage/gui/GuiDetector.java | 28 +++++++++---------- .../refinedstorage/tile/TileDetector.java | 23 +++++++++++---- .../tile/data/ITileDataListener.java | 5 ++++ .../tile/data/TileDataManager.java | 6 +++- .../tile/data/TileDataParameter.java | 13 ++++++++- 5 files changed, 53 insertions(+), 22 deletions(-) create mode 100755 src/main/java/refinedstorage/tile/data/ITileDataListener.java diff --git a/src/main/java/refinedstorage/gui/GuiDetector.java b/src/main/java/refinedstorage/gui/GuiDetector.java index 71213c481..230fa761c 100755 --- a/src/main/java/refinedstorage/gui/GuiDetector.java +++ b/src/main/java/refinedstorage/gui/GuiDetector.java @@ -6,14 +6,13 @@ import refinedstorage.api.storage.CompareUtils; import refinedstorage.container.ContainerDetector; import refinedstorage.gui.sidebutton.SideButtonCompare; import refinedstorage.gui.sidebutton.SideButtonDetectorMode; -import refinedstorage.tile.TileDestructor; import refinedstorage.tile.TileDetector; import refinedstorage.tile.data.TileDataManager; import java.io.IOException; public class GuiDetector extends GuiBase { - private GuiTextField amountField; + public static GuiTextField AMOUNT; public GuiDetector(ContainerDetector container) { super(container, 176, 137); @@ -21,19 +20,18 @@ public class GuiDetector extends GuiBase { @Override public void init(int x, int y) { - addSideButton(new SideButtonCompare(TileDestructor.COMPARE, CompareUtils.COMPARE_DAMAGE)); - addSideButton(new SideButtonCompare(TileDestructor.COMPARE, CompareUtils.COMPARE_NBT)); + addSideButton(new SideButtonCompare(TileDetector.COMPARE, CompareUtils.COMPARE_DAMAGE)); + addSideButton(new SideButtonCompare(TileDetector.COMPARE, CompareUtils.COMPARE_NBT)); addSideButton(new SideButtonDetectorMode()); - amountField = new GuiTextField(0, fontRendererObj, x + 62 + 1, y + 23 + 1, 25, fontRendererObj.FONT_HEIGHT); - // @TODO: Change when the packet is received instead - amountField.setText(String.valueOf(TileDetector.AMOUNT.getValue())); - amountField.setEnableBackgroundDrawing(false); - amountField.setVisible(true); - amountField.setTextColor(16777215); - amountField.setCanLoseFocus(false); - amountField.setFocused(true); + AMOUNT = new GuiTextField(0, fontRendererObj, x + 62 + 1, y + 23 + 1, 25, fontRendererObj.FONT_HEIGHT); + AMOUNT.setText(String.valueOf(TileDetector.AMOUNT.getValue())); + AMOUNT.setEnableBackgroundDrawing(false); + AMOUNT.setVisible(true); + AMOUNT.setTextColor(16777215); + AMOUNT.setCanLoseFocus(false); + AMOUNT.setFocused(true); } @Override @@ -46,7 +44,7 @@ public class GuiDetector extends GuiBase { drawTexture(x, y, 0, 0, width, height); - amountField.drawTextBox(); + AMOUNT.drawTextBox(); } @Override @@ -57,8 +55,8 @@ public class GuiDetector extends GuiBase { @Override protected void keyTyped(char character, int keyCode) throws IOException { - if (!checkHotbarKeys(keyCode) && amountField.textboxKeyTyped(character, keyCode)) { - Integer result = Ints.tryParse(amountField.getText()); + if (!checkHotbarKeys(keyCode) && AMOUNT.textboxKeyTyped(character, keyCode)) { + Integer result = Ints.tryParse(AMOUNT.getText()); if (result != null) { TileDataManager.setParameter(TileDetector.AMOUNT, result); diff --git a/src/main/java/refinedstorage/tile/TileDetector.java b/src/main/java/refinedstorage/tile/TileDetector.java index 82aa9ef2b..e1785415f 100755 --- a/src/main/java/refinedstorage/tile/TileDetector.java +++ b/src/main/java/refinedstorage/tile/TileDetector.java @@ -1,19 +1,21 @@ package refinedstorage.tile; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiScreen; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.network.datasync.DataSerializers; +import net.minecraftforge.fml.common.FMLCommonHandler; +import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.items.IItemHandler; import refinedstorage.RefinedStorage; import refinedstorage.RefinedStorageBlocks; import refinedstorage.api.network.INetworkMaster; +import refinedstorage.gui.GuiDetector; import refinedstorage.inventory.ItemHandlerBasic; import refinedstorage.tile.config.IComparable; import refinedstorage.tile.config.RedstoneMode; -import refinedstorage.tile.data.ITileDataConsumer; -import refinedstorage.tile.data.ITileDataProducer; -import refinedstorage.tile.data.TileDataManager; -import refinedstorage.tile.data.TileDataParameter; +import refinedstorage.tile.data.*; public class TileDetector extends TileNode implements IComparable { public static final TileDataParameter COMPARE = IComparable.createParameter(); @@ -34,7 +36,7 @@ public class TileDetector extends TileNode implements IComparable { } }); - public static final TileDataParameter AMOUNT = TileDataManager.createParameter(DataSerializers.VARINT, new ITileDataProducer() { + public static final TileDataParameter AMOUNT = TileDataManager.createParameter(DataSerializers.VARINT, new ITileDataProducer() { @Override public Integer getValue(TileDetector tile) { return tile.amount; @@ -46,6 +48,17 @@ public class TileDetector extends TileNode implements IComparable { tile.markDirty(); } + }, new ITileDataListener() { + @Override + public void onChanged() { + if (FMLCommonHandler.instance().getEffectiveSide() == Side.CLIENT) { + GuiScreen gui = Minecraft.getMinecraft().currentScreen; + + if (gui instanceof GuiDetector) { + ((GuiDetector) gui).AMOUNT.setText(String.valueOf(AMOUNT.getValue())); + } + } + } }); private static final int SPEED = 5; diff --git a/src/main/java/refinedstorage/tile/data/ITileDataListener.java b/src/main/java/refinedstorage/tile/data/ITileDataListener.java new file mode 100755 index 000000000..1786a5a60 --- /dev/null +++ b/src/main/java/refinedstorage/tile/data/ITileDataListener.java @@ -0,0 +1,5 @@ +package refinedstorage.tile.data; + +public interface ITileDataListener { + void onChanged(); +} diff --git a/src/main/java/refinedstorage/tile/data/TileDataManager.java b/src/main/java/refinedstorage/tile/data/TileDataManager.java index 9f1a80877..3a6c140f8 100755 --- a/src/main/java/refinedstorage/tile/data/TileDataManager.java +++ b/src/main/java/refinedstorage/tile/data/TileDataManager.java @@ -29,7 +29,11 @@ public class TileDataManager { } public static TileDataParameter createParameter(DataSerializer serializer, ITileDataProducer producer, ITileDataConsumer consumer) { - TileDataParameter parameter = new TileDataParameter(PARAMETER_ID++, serializer, producer, consumer); + return createParameter(serializer, producer, consumer, null); + } + + public static TileDataParameter createParameter(DataSerializer serializer, ITileDataProducer producer, ITileDataConsumer consumer, ITileDataListener listener) { + TileDataParameter parameter = new TileDataParameter(PARAMETER_ID++, serializer, producer, consumer, listener); PARAMETER_MAP.put(parameter.getId(), parameter); diff --git a/src/main/java/refinedstorage/tile/data/TileDataParameter.java b/src/main/java/refinedstorage/tile/data/TileDataParameter.java index 4a1a1bed7..b7e0911ca 100755 --- a/src/main/java/refinedstorage/tile/data/TileDataParameter.java +++ b/src/main/java/refinedstorage/tile/data/TileDataParameter.java @@ -2,18 +2,21 @@ package refinedstorage.tile.data; import net.minecraft.network.datasync.DataSerializer; +// @TODO: Annotate me better! public class TileDataParameter { private int id; private DataSerializer serializer; private ITileDataProducer valueProducer; private ITileDataConsumer valueConsumer; + private ITileDataListener listener; private T value; - public TileDataParameter(int id, DataSerializer serializer, ITileDataProducer producer, ITileDataConsumer consumer) { + public TileDataParameter(int id, DataSerializer serializer, ITileDataProducer producer, ITileDataConsumer consumer, ITileDataListener listener) { this.id = id; this.serializer = serializer; this.valueProducer = producer; this.valueConsumer = consumer; + this.listener = listener; } public int getId() { @@ -32,8 +35,16 @@ public class TileDataParameter { return valueConsumer; } + public ITileDataListener getListener() { + return listener; + } + public void setValue(T value) { this.value = value; + + if (listener != null) { + listener.onChanged(); + } } public T getValue() { From 7334bd7c42bad40f63d5a7f4d0d3d960f3280431 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Fri, 5 Aug 2016 16:35:37 +0200 Subject: [PATCH 097/214] Fixes issues #199 --- CHANGELOG.md | 3 ++ .../java/refinedstorage/gui/GuiStorage.java | 42 +++++++++---------- .../java/refinedstorage/gui/grid/GuiGrid.java | 40 +++++++++--------- .../SideButtonGridSearchBoxMode.java | 2 - .../java/refinedstorage/tile/IStorageGui.java | 12 +++--- .../refinedstorage/tile/TileDetector.java | 6 +-- .../refinedstorage/tile/TileDiskDrive.java | 17 ++++---- .../java/refinedstorage/tile/TileStorage.java | 16 +++---- .../tile/config/IPrioritizable.java | 21 ++++++++-- .../tile/data/ITileDataListener.java | 4 +- .../tile/data/TileDataParameter.java | 6 +-- .../externalstorage/TileExternalStorage.java | 16 +++---- .../refinedstorage/tile/grid/TileGrid.java | 15 +++++-- .../tile/grid/WirelessGrid.java | 3 ++ 14 files changed, 109 insertions(+), 94 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 84ef1e90b..3c60275eb 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,9 @@ ### 0.8.16 **Bugfixes** - Fixed issue with IC2 integration causing console spam +- Slight performance improvement in GUI's +- Fixed not being able to change some configs in blocks +- Fixed serverside configs not syncing up with clientside sometimes **Features** - Added German translation by ChillUpX diff --git a/src/main/java/refinedstorage/gui/GuiStorage.java b/src/main/java/refinedstorage/gui/GuiStorage.java index 43c7c56fc..b86f64a40 100755 --- a/src/main/java/refinedstorage/gui/GuiStorage.java +++ b/src/main/java/refinedstorage/gui/GuiStorage.java @@ -8,6 +8,7 @@ import refinedstorage.gui.sidebutton.SideButtonCompare; import refinedstorage.gui.sidebutton.SideButtonMode; import refinedstorage.gui.sidebutton.SideButtonRedstoneMode; import refinedstorage.tile.IStorageGui; +import refinedstorage.tile.data.TileDataManager; import java.io.IOException; @@ -15,7 +16,7 @@ public class GuiStorage extends GuiBase { private IStorageGui gui; private String texture; - private GuiTextField priorityField; + public static GuiTextField PRIORITY; private int barX = 8; private int barY = 54; @@ -35,27 +36,26 @@ public class GuiStorage extends GuiBase { @Override public void init(int x, int y) { - if (gui.getRedstoneModeConfig() != null) { - addSideButton(new SideButtonRedstoneMode(gui.getRedstoneModeConfig())); + if (gui.getRedstoneModeParameter() != null) { + addSideButton(new SideButtonRedstoneMode(gui.getRedstoneModeParameter())); } - if (gui.getModeConfig() != null) { - addSideButton(new SideButtonMode(gui.getModeConfig())); + if (gui.getFilterParameter() != null) { + addSideButton(new SideButtonMode(gui.getFilterParameter())); } - if (gui.getCompareConfig() != null) { - addSideButton(new SideButtonCompare(gui.getCompareConfig(), CompareUtils.COMPARE_DAMAGE)); - addSideButton(new SideButtonCompare(gui.getCompareConfig(), CompareUtils.COMPARE_NBT)); + if (gui.getCompareParameter() != null) { + addSideButton(new SideButtonCompare(gui.getCompareParameter(), CompareUtils.COMPARE_DAMAGE)); + addSideButton(new SideButtonCompare(gui.getCompareParameter(), CompareUtils.COMPARE_NBT)); } - priorityField = new GuiTextField(0, fontRendererObj, x + 98 + 1, y + 54 + 1, 25, fontRendererObj.FONT_HEIGHT); - // @TODO: Only change this when packet is received - priorityField.setText(String.valueOf(gui.getPriority())); - priorityField.setEnableBackgroundDrawing(false); - priorityField.setVisible(true); - priorityField.setTextColor(16777215); - priorityField.setCanLoseFocus(true); - priorityField.setFocused(false); + PRIORITY = new GuiTextField(0, fontRendererObj, x + 98 + 1, y + 54 + 1, 25, fontRendererObj.FONT_HEIGHT); + PRIORITY.setText(String.valueOf(gui.getPriorityParameter().getValue())); + PRIORITY.setEnableBackgroundDrawing(false); + PRIORITY.setVisible(true); + PRIORITY.setTextColor(16777215); + PRIORITY.setCanLoseFocus(true); + PRIORITY.setFocused(false); } @Override @@ -72,7 +72,7 @@ public class GuiStorage extends GuiBase { drawTexture(x + barX, y + barY + barHeight - barHeightNew, 179, barHeight - barHeightNew, barWidth, barHeightNew); - priorityField.drawTextBox(); + PRIORITY.drawTextBox(); } @Override @@ -97,16 +97,16 @@ public class GuiStorage extends GuiBase { protected void mouseClicked(int mouseX, int mouseY, int mouseButton) throws IOException { super.mouseClicked(mouseX, mouseY, mouseButton); - priorityField.mouseClicked(mouseX, mouseY, mouseButton); + PRIORITY.mouseClicked(mouseX, mouseY, mouseButton); } @Override protected void keyTyped(char character, int keyCode) throws IOException { - if (!checkHotbarKeys(keyCode) && priorityField.textboxKeyTyped(character, keyCode)) { - Integer result = Ints.tryParse(priorityField.getText()); + if (!checkHotbarKeys(keyCode) && PRIORITY.textboxKeyTyped(character, keyCode)) { + Integer result = Ints.tryParse(PRIORITY.getText()); if (result != null) { - gui.onPriorityChanged(result); + TileDataManager.setParameter(gui.getPriorityParameter(), result); } } else { super.keyTyped(character, keyCode); diff --git a/src/main/java/refinedstorage/gui/grid/GuiGrid.java b/src/main/java/refinedstorage/gui/grid/GuiGrid.java index 55d8f81ad..942dcd223 100755 --- a/src/main/java/refinedstorage/gui/grid/GuiGrid.java +++ b/src/main/java/refinedstorage/gui/grid/GuiGrid.java @@ -37,7 +37,7 @@ public class GuiGrid extends GuiBase { private GridSortingQuantity quantitySorting = new GridSortingQuantity(); private GridSortingName nameSorting = new GridSortingName(); - private GuiTextField searchField; + public static GuiTextField SEARCH_FIELD; private ContainerGrid container; private List items = new ArrayList(); @@ -64,17 +64,15 @@ public class GuiGrid extends GuiBase { int sx = x + 80 + 1; int sy = y + 6 + 1; - if (searchField == null) { - searchField = new GuiTextField(0, fontRendererObj, sx, sy, 88 - 6, fontRendererObj.FONT_HEIGHT); - searchField.setEnableBackgroundDrawing(false); - searchField.setVisible(true); - searchField.setTextColor(16777215); - - // @TODO: Only do this after packet - updateSearchBoxFocus(grid.getSearchBoxMode()); + if (SEARCH_FIELD == null) { + SEARCH_FIELD = new GuiTextField(0, fontRendererObj, sx, sy, 88 - 6, fontRendererObj.FONT_HEIGHT); + SEARCH_FIELD.setEnableBackgroundDrawing(false); + SEARCH_FIELD.setVisible(true); + SEARCH_FIELD.setTextColor(16777215); + updateSearchFieldFocus(grid.getSearchBoxMode()); } else { - searchField.xPosition = sx; - searchField.yPosition = sy; + SEARCH_FIELD.xPosition = sx; + SEARCH_FIELD.yPosition = sy; } addSideButton(new SideButtonGridViewType(grid)); @@ -94,7 +92,7 @@ public class GuiGrid extends GuiBase { if (grid.isConnected()) { items.addAll(RefinedStorage.INSTANCE.items); - String query = searchField.getText().trim().toLowerCase(); + String query = SEARCH_FIELD.getText().trim().toLowerCase(); Iterator t = items.iterator(); @@ -245,7 +243,7 @@ public class GuiGrid extends GuiBase { drawTexture(x + 152, y + 114, 240, ty * 16, 16, 16); } - searchField.drawTextBox(); + SEARCH_FIELD.drawTextBox(); } @Override @@ -330,11 +328,11 @@ public class GuiGrid extends GuiBase { public void mouseClicked(int mouseX, int mouseY, int clickedButton) throws IOException { super.mouseClicked(mouseX, mouseY, clickedButton); - searchField.mouseClicked(mouseX, mouseY, clickedButton); + SEARCH_FIELD.mouseClicked(mouseX, mouseY, clickedButton); if (clickedButton == 1 && inBounds(79, 5, 90, 12, mouseX - guiLeft, mouseY - guiTop)) { - searchField.setText(""); - searchField.setFocused(true); + SEARCH_FIELD.setText(""); + SEARCH_FIELD.setFocused(true); updateJEI(); } @@ -387,7 +385,7 @@ public class GuiGrid extends GuiBase { @Override protected void keyTyped(char character, int keyCode) throws IOException { - if (!checkHotbarKeys(keyCode) && searchField.textboxKeyTyped(character, keyCode)) { + if (!checkHotbarKeys(keyCode) && SEARCH_FIELD.textboxKeyTyped(character, keyCode)) { updateJEI(); } else { super.keyTyped(character, keyCode); @@ -396,12 +394,12 @@ public class GuiGrid extends GuiBase { private void updateJEI() { if (IntegrationJEI.isLoaded() && (grid.getSearchBoxMode() == TileGrid.SEARCH_BOX_MODE_JEI_SYNCHRONIZED || grid.getSearchBoxMode() == TileGrid.SEARCH_BOX_MODE_JEI_SYNCHRONIZED_AUTOSELECTED)) { - IntegrationJEI.INSTANCE.getRuntime().getItemListOverlay().setFilterText(searchField.getText()); + IntegrationJEI.INSTANCE.getRuntime().getItemListOverlay().setFilterText(SEARCH_FIELD.getText()); } } - public void updateSearchBoxFocus(int mode) { - searchField.setCanLoseFocus(!TileGrid.isSearchBoxModeWithAutoselection(mode)); - searchField.setFocused(TileGrid.isSearchBoxModeWithAutoselection(mode)); + public static void updateSearchFieldFocus(int mode) { + SEARCH_FIELD.setCanLoseFocus(!TileGrid.isSearchBoxModeWithAutoselection(mode)); + SEARCH_FIELD.setFocused(TileGrid.isSearchBoxModeWithAutoselection(mode)); } } diff --git a/src/main/java/refinedstorage/gui/sidebutton/SideButtonGridSearchBoxMode.java b/src/main/java/refinedstorage/gui/sidebutton/SideButtonGridSearchBoxMode.java index 7340b91d9..726d83d1c 100755 --- a/src/main/java/refinedstorage/gui/sidebutton/SideButtonGridSearchBoxMode.java +++ b/src/main/java/refinedstorage/gui/sidebutton/SideButtonGridSearchBoxMode.java @@ -43,7 +43,5 @@ public class SideButtonGridSearchBoxMode extends SideButton { } gui.getGrid().onSearchBoxModeChanged(mode); - - gui.updateSearchBoxFocus(mode); } } diff --git a/src/main/java/refinedstorage/tile/IStorageGui.java b/src/main/java/refinedstorage/tile/IStorageGui.java index 7b512f985..68eb5ae82 100755 --- a/src/main/java/refinedstorage/tile/IStorageGui.java +++ b/src/main/java/refinedstorage/tile/IStorageGui.java @@ -6,17 +6,15 @@ import refinedstorage.tile.data.TileDataParameter; public interface IStorageGui { String getGuiTitle(); - int getPriority(); - - void onPriorityChanged(int priority); - IItemHandler getFilters(); - TileDataParameter getRedstoneModeConfig(); + TileDataParameter getRedstoneModeParameter(); - TileDataParameter getCompareConfig(); + TileDataParameter getCompareParameter(); - TileDataParameter getModeConfig(); + TileDataParameter getFilterParameter(); + + TileDataParameter getPriorityParameter(); int getStored(); diff --git a/src/main/java/refinedstorage/tile/TileDetector.java b/src/main/java/refinedstorage/tile/TileDetector.java index e1785415f..9c65a1992 100755 --- a/src/main/java/refinedstorage/tile/TileDetector.java +++ b/src/main/java/refinedstorage/tile/TileDetector.java @@ -48,14 +48,14 @@ public class TileDetector extends TileNode implements IComparable { tile.markDirty(); } - }, new ITileDataListener() { + }, new ITileDataListener() { @Override - public void onChanged() { + public void onChanged(TileDataParameter parameter) { if (FMLCommonHandler.instance().getEffectiveSide() == Side.CLIENT) { GuiScreen gui = Minecraft.getMinecraft().currentScreen; if (gui instanceof GuiDetector) { - ((GuiDetector) gui).AMOUNT.setText(String.valueOf(AMOUNT.getValue())); + ((GuiDetector) gui).AMOUNT.setText(String.valueOf(parameter.getValue())); } } } diff --git a/src/main/java/refinedstorage/tile/TileDiskDrive.java b/src/main/java/refinedstorage/tile/TileDiskDrive.java index fde147909..e4ab58459 100755 --- a/src/main/java/refinedstorage/tile/TileDiskDrive.java +++ b/src/main/java/refinedstorage/tile/TileDiskDrive.java @@ -21,7 +21,6 @@ import refinedstorage.inventory.ItemValidatorBasic; import refinedstorage.tile.config.IComparable; import refinedstorage.tile.config.IFilterable; import refinedstorage.tile.config.IPrioritizable; -import refinedstorage.tile.data.TileDataManager; import refinedstorage.tile.data.TileDataParameter; import java.util.List; @@ -284,30 +283,30 @@ public class TileDiskDrive extends TileNode implements IStorageProvider, IStorag } @Override - public TileDataParameter getRedstoneModeConfig() { + public TileDataParameter getRedstoneModeParameter() { return REDSTONE_MODE; } @Override - public TileDataParameter getCompareConfig() { + public TileDataParameter getCompareParameter() { return COMPARE; } @Override - public TileDataParameter getModeConfig() { + public TileDataParameter getFilterParameter() { return MODE; } + @Override + public TileDataParameter getPriorityParameter() { + return PRIORITY; + } + @Override public int getPriority() { return priority; } - @Override - public void onPriorityChanged(int priority) { - TileDataManager.setParameter(PRIORITY, priority); - } - @Override public void setPriority(int priority) { this.priority = priority; diff --git a/src/main/java/refinedstorage/tile/TileStorage.java b/src/main/java/refinedstorage/tile/TileStorage.java index a11a647d2..69fb060d3 100755 --- a/src/main/java/refinedstorage/tile/TileStorage.java +++ b/src/main/java/refinedstorage/tile/TileStorage.java @@ -206,20 +206,25 @@ public class TileStorage extends TileNode implements IStorageProvider, IStorageG } @Override - public TileDataParameter getRedstoneModeConfig() { + public TileDataParameter getRedstoneModeParameter() { return REDSTONE_MODE; } @Override - public TileDataParameter getCompareConfig() { + public TileDataParameter getCompareParameter() { return COMPARE; } @Override - public TileDataParameter getModeConfig() { + public TileDataParameter getFilterParameter() { return MODE; } + @Override + public TileDataParameter getPriorityParameter() { + return PRIORITY; + } + public NBTTagCompound getStorageTag() { return storageTag; } @@ -237,11 +242,6 @@ public class TileStorage extends TileNode implements IStorageProvider, IStorageG return priority; } - @Override - public void onPriorityChanged(int priority) { - TileDataManager.setParameter(PRIORITY, priority); - } - @Override public void setPriority(int priority) { this.priority = priority; diff --git a/src/main/java/refinedstorage/tile/config/IPrioritizable.java b/src/main/java/refinedstorage/tile/config/IPrioritizable.java index bd6bd3842..54810bb49 100755 --- a/src/main/java/refinedstorage/tile/config/IPrioritizable.java +++ b/src/main/java/refinedstorage/tile/config/IPrioritizable.java @@ -1,11 +1,13 @@ package refinedstorage.tile.config; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiScreen; import net.minecraft.network.datasync.DataSerializers; import net.minecraft.tileentity.TileEntity; -import refinedstorage.tile.data.ITileDataConsumer; -import refinedstorage.tile.data.ITileDataProducer; -import refinedstorage.tile.data.TileDataManager; -import refinedstorage.tile.data.TileDataParameter; +import net.minecraftforge.fml.common.FMLCommonHandler; +import net.minecraftforge.fml.relauncher.Side; +import refinedstorage.gui.GuiStorage; +import refinedstorage.tile.data.*; public interface IPrioritizable { static TileDataParameter createParameter() { @@ -19,6 +21,17 @@ public interface IPrioritizable { public void setValue(T tile, Integer value) { ((IPrioritizable) tile).setPriority(value); } + }, new ITileDataListener() { + @Override + public void onChanged(TileDataParameter parameter) { + if (FMLCommonHandler.instance().getEffectiveSide() == Side.CLIENT) { + GuiScreen gui = Minecraft.getMinecraft().currentScreen; + + if (gui instanceof GuiStorage) { + ((GuiStorage) gui).PRIORITY.setText(String.valueOf(parameter.getValue())); + } + } + } }); } diff --git a/src/main/java/refinedstorage/tile/data/ITileDataListener.java b/src/main/java/refinedstorage/tile/data/ITileDataListener.java index 1786a5a60..79114d194 100755 --- a/src/main/java/refinedstorage/tile/data/ITileDataListener.java +++ b/src/main/java/refinedstorage/tile/data/ITileDataListener.java @@ -1,5 +1,5 @@ package refinedstorage.tile.data; -public interface ITileDataListener { - void onChanged(); +public interface ITileDataListener { + void onChanged(TileDataParameter parameter); } diff --git a/src/main/java/refinedstorage/tile/data/TileDataParameter.java b/src/main/java/refinedstorage/tile/data/TileDataParameter.java index b7e0911ca..bc63ca651 100755 --- a/src/main/java/refinedstorage/tile/data/TileDataParameter.java +++ b/src/main/java/refinedstorage/tile/data/TileDataParameter.java @@ -35,15 +35,11 @@ public class TileDataParameter { return valueConsumer; } - public ITileDataListener getListener() { - return listener; - } - public void setValue(T value) { this.value = value; if (listener != null) { - listener.onChanged(); + listener.onChanged(this); } } diff --git a/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java b/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java index d75034b0f..aedb3c872 100755 --- a/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java +++ b/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java @@ -170,11 +170,6 @@ public class TileExternalStorage extends TileNode implements IStorageProvider, I return priority; } - @Override - public void onPriorityChanged(int priority) { - TileDataManager.setParameter(PRIORITY, priority); - } - @Override public void setPriority(int priority) { this.priority = priority; @@ -221,20 +216,25 @@ public class TileExternalStorage extends TileNode implements IStorageProvider, I } @Override - public TileDataParameter getRedstoneModeConfig() { + public TileDataParameter getRedstoneModeParameter() { return REDSTONE_MODE; } @Override - public TileDataParameter getCompareConfig() { + public TileDataParameter getCompareParameter() { return COMPARE; } @Override - public TileDataParameter getModeConfig() { + public TileDataParameter getFilterParameter() { return MODE; } + @Override + public TileDataParameter getPriorityParameter() { + return PRIORITY; + } + @Override public int getStored() { int stored = 0; diff --git a/src/main/java/refinedstorage/tile/grid/TileGrid.java b/src/main/java/refinedstorage/tile/grid/TileGrid.java index 93cc1e1bc..d3199fac5 100755 --- a/src/main/java/refinedstorage/tile/grid/TileGrid.java +++ b/src/main/java/refinedstorage/tile/grid/TileGrid.java @@ -8,6 +8,8 @@ import net.minecraft.item.crafting.CraftingManager; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.network.datasync.DataSerializers; import net.minecraft.util.math.BlockPos; +import net.minecraftforge.fml.common.FMLCommonHandler; +import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.wrapper.CombinedInvWrapper; import net.minecraftforge.items.wrapper.InvWrapper; @@ -21,15 +23,13 @@ import refinedstorage.block.BlockGrid; import refinedstorage.block.EnumGridType; import refinedstorage.container.ContainerGrid; import refinedstorage.gui.grid.GridFilteredItem; +import refinedstorage.gui.grid.GuiGrid; import refinedstorage.inventory.ItemHandlerBasic; import refinedstorage.inventory.ItemHandlerGridFilterInGrid; import refinedstorage.inventory.ItemValidatorBasic; import refinedstorage.item.ItemPattern; import refinedstorage.tile.TileNode; -import refinedstorage.tile.data.ITileDataConsumer; -import refinedstorage.tile.data.ITileDataProducer; -import refinedstorage.tile.data.TileDataManager; -import refinedstorage.tile.data.TileDataParameter; +import refinedstorage.tile.data.*; import java.util.ArrayList; import java.util.List; @@ -97,6 +97,13 @@ public class TileGrid extends TileNode implements IGrid { tile.markDirty(); } } + }, new ITileDataListener() { + @Override + public void onChanged(TileDataParameter parameter) { + if (FMLCommonHandler.instance().getEffectiveSide() == Side.CLIENT) { + GuiGrid.updateSearchFieldFocus(parameter.getValue()); + } + } }); public static final String NBT_VIEW_TYPE = "ViewType"; diff --git a/src/main/java/refinedstorage/tile/grid/WirelessGrid.java b/src/main/java/refinedstorage/tile/grid/WirelessGrid.java index 82d33441e..0ec5255ee 100755 --- a/src/main/java/refinedstorage/tile/grid/WirelessGrid.java +++ b/src/main/java/refinedstorage/tile/grid/WirelessGrid.java @@ -10,6 +10,7 @@ import refinedstorage.RefinedStorage; import refinedstorage.api.network.IGridHandler; import refinedstorage.block.EnumGridType; import refinedstorage.gui.grid.GridFilteredItem; +import refinedstorage.gui.grid.GuiGrid; import refinedstorage.inventory.ItemHandlerBasic; import refinedstorage.inventory.ItemHandlerGridFilterInGrid; import refinedstorage.item.ItemWirelessGrid; @@ -135,6 +136,8 @@ public class WirelessGrid implements IGrid { RefinedStorage.INSTANCE.network.sendToServer(new MessageWirelessGridSettingsUpdate(getViewType(), getSortingDirection(), getSortingType(), searchBoxMode)); this.searchBoxMode = searchBoxMode; + + GuiGrid.updateSearchFieldFocus(searchBoxMode); } @Override From 37cbdffb0912504046b82b83bdd5bf64e58111eb Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Fri, 5 Aug 2016 16:47:34 +0200 Subject: [PATCH 098/214] Generic safety --- .../refinedstorage/tile/TileConstructor.java | 2 +- .../refinedstorage/tile/TileController.java | 2 +- .../refinedstorage/tile/TileDestructor.java | 4 ++-- .../refinedstorage/tile/TileDetector.java | 20 +++++++++---------- .../refinedstorage/tile/TileDiskDrive.java | 6 +++--- .../refinedstorage/tile/TileExporter.java | 2 +- .../refinedstorage/tile/TileImporter.java | 4 ++-- .../refinedstorage/tile/TileInterface.java | 2 +- .../java/refinedstorage/tile/TileStorage.java | 8 ++++---- .../tile/config/IComparable.java | 2 +- .../tile/config/IFilterable.java | 2 +- .../tile/config/RedstoneMode.java | 2 +- .../tile/data/TileDataManager.java | 8 ++++---- .../tile/data/TileDataParameter.java | 1 - .../refinedstorage/tile/grid/TileGrid.java | 14 ++++++------- 15 files changed, 39 insertions(+), 40 deletions(-) diff --git a/src/main/java/refinedstorage/tile/TileConstructor.java b/src/main/java/refinedstorage/tile/TileConstructor.java index ef4eb160f..5b80e653a 100755 --- a/src/main/java/refinedstorage/tile/TileConstructor.java +++ b/src/main/java/refinedstorage/tile/TileConstructor.java @@ -20,7 +20,7 @@ import refinedstorage.tile.config.IComparable; import refinedstorage.tile.data.TileDataParameter; public class TileConstructor extends TileNode implements IComparable { - public static final TileDataParameter COMPARE = IComparable.createParameter(); + public static final TileDataParameter COMPARE = IComparable.createParameter(); private static final String NBT_COMPARE = "Compare"; diff --git a/src/main/java/refinedstorage/tile/TileController.java b/src/main/java/refinedstorage/tile/TileController.java index 0ecf5f05a..5dd6de136 100755 --- a/src/main/java/refinedstorage/tile/TileController.java +++ b/src/main/java/refinedstorage/tile/TileController.java @@ -52,7 +52,7 @@ import refinedstorage.tile.externalstorage.ExternalStorage; import java.util.*; public class TileController extends TileBase implements INetworkMaster, IEnergyReceiver, IRedstoneConfigurable { - public static final TileDataParameter REDSTONE_MODE = RedstoneMode.createParameter(); + public static final TileDataParameter REDSTONE_MODE = RedstoneMode.createParameter(); public static final TileDataParameter ENERGY_USAGE = TileDataManager.createParameter(DataSerializers.VARINT, new ITileDataProducer() { @Override diff --git a/src/main/java/refinedstorage/tile/TileDestructor.java b/src/main/java/refinedstorage/tile/TileDestructor.java index 890398ec9..2dfc3023b 100755 --- a/src/main/java/refinedstorage/tile/TileDestructor.java +++ b/src/main/java/refinedstorage/tile/TileDestructor.java @@ -21,8 +21,8 @@ import refinedstorage.tile.data.TileDataParameter; import java.util.List; public class TileDestructor extends TileNode implements IComparable, IFilterable { - public static final TileDataParameter COMPARE = IComparable.createParameter(); - public static final TileDataParameter MODE = IFilterable.createParameter(); + public static final TileDataParameter COMPARE = IComparable.createParameter(); + public static final TileDataParameter MODE = IFilterable.createParameter(); private static final String NBT_COMPARE = "Compare"; private static final String NBT_MODE = "Mode"; diff --git a/src/main/java/refinedstorage/tile/TileDetector.java b/src/main/java/refinedstorage/tile/TileDetector.java index 9c65a1992..7b90ce4fc 100755 --- a/src/main/java/refinedstorage/tile/TileDetector.java +++ b/src/main/java/refinedstorage/tile/TileDetector.java @@ -15,10 +15,13 @@ import refinedstorage.gui.GuiDetector; import refinedstorage.inventory.ItemHandlerBasic; import refinedstorage.tile.config.IComparable; import refinedstorage.tile.config.RedstoneMode; -import refinedstorage.tile.data.*; +import refinedstorage.tile.data.ITileDataConsumer; +import refinedstorage.tile.data.ITileDataProducer; +import refinedstorage.tile.data.TileDataManager; +import refinedstorage.tile.data.TileDataParameter; public class TileDetector extends TileNode implements IComparable { - public static final TileDataParameter COMPARE = IComparable.createParameter(); + public static final TileDataParameter COMPARE = IComparable.createParameter(); public static final TileDataParameter MODE = TileDataManager.createParameter(DataSerializers.VARINT, new ITileDataProducer() { @Override @@ -48,15 +51,12 @@ public class TileDetector extends TileNode implements IComparable { tile.markDirty(); } - }, new ITileDataListener() { - @Override - public void onChanged(TileDataParameter parameter) { - if (FMLCommonHandler.instance().getEffectiveSide() == Side.CLIENT) { - GuiScreen gui = Minecraft.getMinecraft().currentScreen; + }, parameter -> { + if (FMLCommonHandler.instance().getEffectiveSide() == Side.CLIENT) { + GuiScreen gui = Minecraft.getMinecraft().currentScreen; - if (gui instanceof GuiDetector) { - ((GuiDetector) gui).AMOUNT.setText(String.valueOf(parameter.getValue())); - } + if (gui instanceof GuiDetector) { + ((GuiDetector) gui).AMOUNT.setText(String.valueOf(parameter.getValue())); } } }); diff --git a/src/main/java/refinedstorage/tile/TileDiskDrive.java b/src/main/java/refinedstorage/tile/TileDiskDrive.java index e4ab58459..c387ec04e 100755 --- a/src/main/java/refinedstorage/tile/TileDiskDrive.java +++ b/src/main/java/refinedstorage/tile/TileDiskDrive.java @@ -26,9 +26,9 @@ import refinedstorage.tile.data.TileDataParameter; import java.util.List; public class TileDiskDrive extends TileNode implements IStorageProvider, IStorageGui, IComparable, IFilterable, IPrioritizable { - public static final TileDataParameter PRIORITY = IPrioritizable.createParameter(); - public static final TileDataParameter COMPARE = IComparable.createParameter(); - public static final TileDataParameter MODE = IFilterable.createParameter(); + public static final TileDataParameter PRIORITY = IPrioritizable.createParameter(); + public static final TileDataParameter COMPARE = IComparable.createParameter(); + public static final TileDataParameter MODE = IFilterable.createParameter(); public class Storage extends NBTStorage { public Storage(ItemStack disk) { diff --git a/src/main/java/refinedstorage/tile/TileExporter.java b/src/main/java/refinedstorage/tile/TileExporter.java index b6ccf906f..882de9d76 100755 --- a/src/main/java/refinedstorage/tile/TileExporter.java +++ b/src/main/java/refinedstorage/tile/TileExporter.java @@ -16,7 +16,7 @@ import refinedstorage.tile.config.IComparable; import refinedstorage.tile.data.TileDataParameter; public class TileExporter extends TileNode implements IComparable { - public static final TileDataParameter COMPARE = IComparable.createParameter(); + public static final TileDataParameter COMPARE = IComparable.createParameter(); private static final String NBT_COMPARE = "Compare"; diff --git a/src/main/java/refinedstorage/tile/TileImporter.java b/src/main/java/refinedstorage/tile/TileImporter.java index 15a2c3129..11d33b94a 100755 --- a/src/main/java/refinedstorage/tile/TileImporter.java +++ b/src/main/java/refinedstorage/tile/TileImporter.java @@ -15,8 +15,8 @@ import refinedstorage.tile.config.IFilterable; import refinedstorage.tile.data.TileDataParameter; public class TileImporter extends TileNode implements IComparable, IFilterable { - public static final TileDataParameter COMPARE = IComparable.createParameter(); - public static final TileDataParameter MODE = IFilterable.createParameter(); + public static final TileDataParameter COMPARE = IComparable.createParameter(); + public static final TileDataParameter MODE = IFilterable.createParameter(); private static final String NBT_COMPARE = "Compare"; private static final String NBT_MODE = "Mode"; diff --git a/src/main/java/refinedstorage/tile/TileInterface.java b/src/main/java/refinedstorage/tile/TileInterface.java index 3476c3330..642fac8fc 100755 --- a/src/main/java/refinedstorage/tile/TileInterface.java +++ b/src/main/java/refinedstorage/tile/TileInterface.java @@ -15,7 +15,7 @@ import refinedstorage.tile.config.IComparable; import refinedstorage.tile.data.TileDataParameter; public class TileInterface extends TileNode implements IComparable { - public static final TileDataParameter COMPARE = IComparable.createParameter(); + public static final TileDataParameter COMPARE = IComparable.createParameter(); private static final String NBT_COMPARE = "Compare"; diff --git a/src/main/java/refinedstorage/tile/TileStorage.java b/src/main/java/refinedstorage/tile/TileStorage.java index 69fb060d3..43fa7a0c8 100755 --- a/src/main/java/refinedstorage/tile/TileStorage.java +++ b/src/main/java/refinedstorage/tile/TileStorage.java @@ -24,10 +24,10 @@ import refinedstorage.tile.data.TileDataParameter; import java.util.List; public class TileStorage extends TileNode implements IStorageProvider, IStorageGui, IComparable, IFilterable, IPrioritizable { - public static final TileDataParameter PRIORITY = IPrioritizable.createParameter(); - public static final TileDataParameter COMPARE = IComparable.createParameter(); - public static final TileDataParameter MODE = IFilterable.createParameter(); - public static final TileDataParameter STORED = TileDataManager.createParameter(DataSerializers.VARINT, new ITileDataProducer() { + public static final TileDataParameter PRIORITY = IPrioritizable.createParameter(); + public static final TileDataParameter COMPARE = IComparable.createParameter(); + public static final TileDataParameter MODE = IFilterable.createParameter(); + public static final TileDataParameter STORED = TileDataManager.createParameter(DataSerializers.VARINT, new ITileDataProducer() { @Override public Integer getValue(TileStorage tile) { return NBTStorage.getStoredFromNBT(tile.storageTag); diff --git a/src/main/java/refinedstorage/tile/config/IComparable.java b/src/main/java/refinedstorage/tile/config/IComparable.java index 509845221..4b5790915 100755 --- a/src/main/java/refinedstorage/tile/config/IComparable.java +++ b/src/main/java/refinedstorage/tile/config/IComparable.java @@ -8,7 +8,7 @@ import refinedstorage.tile.data.TileDataManager; import refinedstorage.tile.data.TileDataParameter; public interface IComparable { - static TileDataParameter createParameter() { + static TileDataParameter createParameter() { return TileDataManager.createParameter(DataSerializers.VARINT, new ITileDataProducer() { @Override public Integer getValue(T tile) { diff --git a/src/main/java/refinedstorage/tile/config/IFilterable.java b/src/main/java/refinedstorage/tile/config/IFilterable.java index 230d8b490..a60351b17 100755 --- a/src/main/java/refinedstorage/tile/config/IFilterable.java +++ b/src/main/java/refinedstorage/tile/config/IFilterable.java @@ -14,7 +14,7 @@ public interface IFilterable { int WHITELIST = 0; int BLACKLIST = 1; - static TileDataParameter createParameter() { + static TileDataParameter createParameter() { return TileDataManager.createParameter(DataSerializers.VARINT, new ITileDataProducer() { @Override public Integer getValue(T tile) { diff --git a/src/main/java/refinedstorage/tile/config/RedstoneMode.java b/src/main/java/refinedstorage/tile/config/RedstoneMode.java index c2b212a72..3710bd9f7 100755 --- a/src/main/java/refinedstorage/tile/config/RedstoneMode.java +++ b/src/main/java/refinedstorage/tile/config/RedstoneMode.java @@ -31,7 +31,7 @@ public enum RedstoneMode { return id < 0 || id >= values().length ? IGNORE : values()[id]; } - public static TileDataParameter createParameter() { + public static TileDataParameter createParameter() { return TileDataManager.createParameter(DataSerializers.VARINT, new ITileDataProducer() { @Override public Integer getValue(T tile) { diff --git a/src/main/java/refinedstorage/tile/data/TileDataManager.java b/src/main/java/refinedstorage/tile/data/TileDataManager.java index 3a6c140f8..af3186f9d 100755 --- a/src/main/java/refinedstorage/tile/data/TileDataManager.java +++ b/src/main/java/refinedstorage/tile/data/TileDataManager.java @@ -24,16 +24,16 @@ public class TileDataManager { private List watchedParameters = new ArrayList(); private List watchedParametersCache = new ArrayList(); - public static TileDataParameter createParameter(DataSerializer serializer, ITileDataProducer producer) { + public static TileDataParameter createParameter(DataSerializer serializer, ITileDataProducer producer) { return createParameter(serializer, producer, null); } - public static TileDataParameter createParameter(DataSerializer serializer, ITileDataProducer producer, ITileDataConsumer consumer) { + public static TileDataParameter createParameter(DataSerializer serializer, ITileDataProducer producer, ITileDataConsumer consumer) { return createParameter(serializer, producer, consumer, null); } - public static TileDataParameter createParameter(DataSerializer serializer, ITileDataProducer producer, ITileDataConsumer consumer, ITileDataListener listener) { - TileDataParameter parameter = new TileDataParameter(PARAMETER_ID++, serializer, producer, consumer, listener); + public static TileDataParameter createParameter(DataSerializer serializer, ITileDataProducer producer, ITileDataConsumer consumer, ITileDataListener listener) { + TileDataParameter parameter = new TileDataParameter<>(PARAMETER_ID++, serializer, producer, consumer, listener); PARAMETER_MAP.put(parameter.getId(), parameter); diff --git a/src/main/java/refinedstorage/tile/data/TileDataParameter.java b/src/main/java/refinedstorage/tile/data/TileDataParameter.java index bc63ca651..c1a1abd92 100755 --- a/src/main/java/refinedstorage/tile/data/TileDataParameter.java +++ b/src/main/java/refinedstorage/tile/data/TileDataParameter.java @@ -2,7 +2,6 @@ package refinedstorage.tile.data; import net.minecraft.network.datasync.DataSerializer; -// @TODO: Annotate me better! public class TileDataParameter { private int id; private DataSerializer serializer; diff --git a/src/main/java/refinedstorage/tile/grid/TileGrid.java b/src/main/java/refinedstorage/tile/grid/TileGrid.java index d3199fac5..087b76787 100755 --- a/src/main/java/refinedstorage/tile/grid/TileGrid.java +++ b/src/main/java/refinedstorage/tile/grid/TileGrid.java @@ -29,7 +29,10 @@ import refinedstorage.inventory.ItemHandlerGridFilterInGrid; import refinedstorage.inventory.ItemValidatorBasic; import refinedstorage.item.ItemPattern; import refinedstorage.tile.TileNode; -import refinedstorage.tile.data.*; +import refinedstorage.tile.data.ITileDataConsumer; +import refinedstorage.tile.data.ITileDataProducer; +import refinedstorage.tile.data.TileDataManager; +import refinedstorage.tile.data.TileDataParameter; import java.util.ArrayList; import java.util.List; @@ -97,12 +100,9 @@ public class TileGrid extends TileNode implements IGrid { tile.markDirty(); } } - }, new ITileDataListener() { - @Override - public void onChanged(TileDataParameter parameter) { - if (FMLCommonHandler.instance().getEffectiveSide() == Side.CLIENT) { - GuiGrid.updateSearchFieldFocus(parameter.getValue()); - } + }, parameter -> { + if (FMLCommonHandler.instance().getEffectiveSide() == Side.CLIENT) { + GuiGrid.updateSearchFieldFocus(parameter.getValue()); } }); From 0ca9e5fb14799343b1e7a3c347b184f9450ff9e7 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Fri, 5 Aug 2016 17:04:13 +0200 Subject: [PATCH 099/214] J8 fixes --- .../java/refinedstorage/RefinedStorage.java | 2 +- .../autocrafting/BasicCraftingTask.java | 2 +- .../apiimpl/network/NetworkNodeGraph.java | 16 +++++----- .../apiimpl/network/WirelessGridHandler.java | 4 +-- .../apiimpl/solderer/SoldererRegistry.java | 2 +- .../apiimpl/storage/GroupedStorage.java | 11 +++---- .../apiimpl/storage/NBTStorage.java | 2 +- .../refinedstorage/block/BlockController.java | 4 +-- .../java/refinedstorage/block/BlockGrid.java | 2 +- .../refinedstorage/block/BlockStorage.java | 4 +-- .../container/slot/SlotSpecimen.java | 4 +-- src/main/java/refinedstorage/gui/GuiBase.java | 8 ++--- .../java/refinedstorage/gui/grid/GuiGrid.java | 2 +- .../integration/jei/RecipeMakerSolderer.java | 4 +-- .../refinedstorage/item/ItemBlockStorage.java | 4 +-- .../java/refinedstorage/item/ItemCore.java | 2 +- .../refinedstorage/item/ItemGridFilter.java | 6 ++-- .../java/refinedstorage/item/ItemPattern.java | 6 ++-- .../refinedstorage/item/ItemProcessor.java | 2 +- .../refinedstorage/item/ItemStorageDisk.java | 8 ++--- .../refinedstorage/item/ItemStoragePart.java | 2 +- .../java/refinedstorage/item/ItemUpgrade.java | 2 +- .../refinedstorage/item/ItemWirelessGrid.java | 15 +++------- .../network/MessageGridUpdate.java | 2 +- .../network/MessageHandlerPlayerToServer.java | 7 +---- .../network/MessageTileDataParameter.java | 2 +- .../MessageTileDataParameterUpdate.java | 2 +- .../refinedstorage/tile/TileController.java | 30 ++++++++----------- .../java/refinedstorage/tile/TileCrafter.java | 9 ++---- .../tile/TileCraftingMonitor.java | 2 +- .../java/refinedstorage/tile/TileNode.java | 2 +- .../java/refinedstorage/tile/TileStorage.java | 2 +- .../tile/config/IPrioritizable.java | 20 ++++++------- .../tile/data/TileDataManager.java | 8 ++--- .../tile/data/TileDataParameter.java | 13 ++++---- .../externalstorage/ItemHandlerStorage.java | 2 +- .../externalstorage/TileExternalStorage.java | 2 +- .../refinedstorage/tile/grid/TileGrid.java | 4 +-- .../tile/grid/WirelessGrid.java | 2 +- 39 files changed, 98 insertions(+), 125 deletions(-) diff --git a/src/main/java/refinedstorage/RefinedStorage.java b/src/main/java/refinedstorage/RefinedStorage.java index 67c7ba9c6..96f39cba7 100755 --- a/src/main/java/refinedstorage/RefinedStorage.java +++ b/src/main/java/refinedstorage/RefinedStorage.java @@ -44,7 +44,7 @@ public final class RefinedStorage { } }; - public List items = new ArrayList(); + public List items = new ArrayList<>(); public int controllerBaseUsage; public int cableUsage; diff --git a/src/main/java/refinedstorage/apiimpl/autocrafting/BasicCraftingTask.java b/src/main/java/refinedstorage/apiimpl/autocrafting/BasicCraftingTask.java index 6f0f1f723..2cf382c64 100755 --- a/src/main/java/refinedstorage/apiimpl/autocrafting/BasicCraftingTask.java +++ b/src/main/java/refinedstorage/apiimpl/autocrafting/BasicCraftingTask.java @@ -26,7 +26,7 @@ public class BasicCraftingTask implements ICraftingTask { private boolean satisfied[]; private boolean checked[]; private boolean childTasks[]; - private List itemsTook = new ArrayList(); + private List itemsTook = new ArrayList<>(); private boolean updatedOnce; public BasicCraftingTask(ICraftingPattern pattern) { diff --git a/src/main/java/refinedstorage/apiimpl/network/NetworkNodeGraph.java b/src/main/java/refinedstorage/apiimpl/network/NetworkNodeGraph.java index ad97744d2..fbba0e23a 100755 --- a/src/main/java/refinedstorage/apiimpl/network/NetworkNodeGraph.java +++ b/src/main/java/refinedstorage/apiimpl/network/NetworkNodeGraph.java @@ -15,8 +15,8 @@ import java.util.*; public class NetworkNodeGraph implements INetworkNodeGraph { private TileController controller; - private List nodes = new ArrayList(); - private Set nodeHashes = new HashSet(); + private List nodes = new ArrayList<>(); + private Set nodeHashes = new HashSet<>(); public NetworkNodeGraph(TileController controller) { this.controller = controller; @@ -40,11 +40,11 @@ public class NetworkNodeGraph implements INetworkNodeGraph { World world = getWorld(); - List newNodes = new ArrayList(); - Set newNodeHashes = new HashSet(); + List newNodes = new ArrayList<>(); + Set newNodeHashes = new HashSet<>(); - Set checked = new HashSet(); - Queue toCheck = new ArrayDeque(); + Set checked = new HashSet<>(); + Queue toCheck = new ArrayDeque<>(); checked.add(start); toCheck.add(start); @@ -110,8 +110,8 @@ public class NetworkNodeGraph implements INetworkNodeGraph { } } - List oldNodes = new ArrayList(nodes); - Set oldNodeHashes = new HashSet(nodeHashes); + List oldNodes = new ArrayList<>(nodes); + Set oldNodeHashes = new HashSet<>(nodeHashes); this.nodes = newNodes; this.nodeHashes = newNodeHashes; diff --git a/src/main/java/refinedstorage/apiimpl/network/WirelessGridHandler.java b/src/main/java/refinedstorage/apiimpl/network/WirelessGridHandler.java index 5aee28fce..aabf4d052 100755 --- a/src/main/java/refinedstorage/apiimpl/network/WirelessGridHandler.java +++ b/src/main/java/refinedstorage/apiimpl/network/WirelessGridHandler.java @@ -20,8 +20,8 @@ public class WirelessGridHandler implements IWirelessGridHandler { private INetworkMaster network; - private List consumers = new ArrayList(); - private List consumersToRemove = new ArrayList(); + private List consumers = new ArrayList<>(); + private List consumersToRemove = new ArrayList<>(); public WirelessGridHandler(INetworkMaster network) { this.network = network; diff --git a/src/main/java/refinedstorage/apiimpl/solderer/SoldererRegistry.java b/src/main/java/refinedstorage/apiimpl/solderer/SoldererRegistry.java index 6a08d30c3..971b5aade 100755 --- a/src/main/java/refinedstorage/apiimpl/solderer/SoldererRegistry.java +++ b/src/main/java/refinedstorage/apiimpl/solderer/SoldererRegistry.java @@ -11,7 +11,7 @@ import java.util.ArrayList; import java.util.List; public class SoldererRegistry implements ISoldererRegistry { - private List recipes = new ArrayList(); + private List recipes = new ArrayList<>(); @Override public void addRecipe(@Nonnull ISoldererRecipe recipe) { diff --git a/src/main/java/refinedstorage/apiimpl/storage/GroupedStorage.java b/src/main/java/refinedstorage/apiimpl/storage/GroupedStorage.java index be2aa0b27..a2b26d99b 100755 --- a/src/main/java/refinedstorage/apiimpl/storage/GroupedStorage.java +++ b/src/main/java/refinedstorage/apiimpl/storage/GroupedStorage.java @@ -6,7 +6,6 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import refinedstorage.api.autocrafting.ICraftingPattern; import refinedstorage.api.network.INetworkMaster; -import refinedstorage.api.network.INetworkNode; import refinedstorage.api.network.NetworkUtils; import refinedstorage.api.storage.CompareUtils; import refinedstorage.api.storage.IGroupedStorage; @@ -21,7 +20,7 @@ import java.util.List; public class GroupedStorage implements IGroupedStorage { private INetworkMaster network; - private List storages = new ArrayList(); + private List storages = new ArrayList<>(); private Multimap stacks = ArrayListMultimap.create(); public GroupedStorage(INetworkMaster network) { @@ -32,11 +31,9 @@ public class GroupedStorage implements IGroupedStorage { public void rebuild() { storages.clear(); - for (INetworkNode node : network.getNodeGraph().all()) { - if (node.canUpdate() && node instanceof IStorageProvider) { - ((IStorageProvider) node).addStorages(storages); - } - } + network.getNodeGraph().all().stream() + .filter(node -> node.canUpdate() && node instanceof IStorageProvider) + .forEach(node -> ((IStorageProvider) node).addStorages(storages)); stacks.clear(); diff --git a/src/main/java/refinedstorage/apiimpl/storage/NBTStorage.java b/src/main/java/refinedstorage/apiimpl/storage/NBTStorage.java index d71a68137..a2c0cff6d 100755 --- a/src/main/java/refinedstorage/apiimpl/storage/NBTStorage.java +++ b/src/main/java/refinedstorage/apiimpl/storage/NBTStorage.java @@ -38,7 +38,7 @@ public abstract class NBTStorage implements IStorage { private int capacity; private TileEntity tile; - private List stacks = new ArrayList(); + private List stacks = new ArrayList<>(); /** * @param tag The NBT tag we are reading from and writing the amount stored to, has to be initialized with {@link NBTStorage#createNBT()} if it doesn't exist yet diff --git a/src/main/java/refinedstorage/block/BlockController.java b/src/main/java/refinedstorage/block/BlockController.java index a7826fed7..549f59587 100755 --- a/src/main/java/refinedstorage/block/BlockController.java +++ b/src/main/java/refinedstorage/block/BlockController.java @@ -36,7 +36,7 @@ public class BlockController extends BlockBase { } @Override - public void getSubBlocks(Item item, CreativeTabs tab, List subItems) { + public void getSubBlocks(Item item, CreativeTabs tab, List subItems) { for (int i = 0; i <= 1; i++) { subItems.add(ItemBlockController.createStackWithNBT(new ItemStack(item, 1, i))); } @@ -122,7 +122,7 @@ public class BlockController extends BlockBase { @Override public List getDrops(IBlockAccess world, BlockPos pos, IBlockState state, int fortune) { - List drops = new ArrayList(); + List drops = new ArrayList<>(); ItemStack stack = new ItemStack(RefinedStorageBlocks.CONTROLLER, 1, RefinedStorageBlocks.CONTROLLER.getMetaFromState(state)); diff --git a/src/main/java/refinedstorage/block/BlockGrid.java b/src/main/java/refinedstorage/block/BlockGrid.java index e653dd5b6..41e5841eb 100755 --- a/src/main/java/refinedstorage/block/BlockGrid.java +++ b/src/main/java/refinedstorage/block/BlockGrid.java @@ -32,7 +32,7 @@ public class BlockGrid extends BlockNode { } @Override - public void getSubBlocks(Item item, CreativeTabs tab, List subItems) { + public void getSubBlocks(Item item, CreativeTabs tab, List subItems) { for (int i = 0; i <= 2; i++) { subItems.add(new ItemStack(item, 1, i)); } diff --git a/src/main/java/refinedstorage/block/BlockStorage.java b/src/main/java/refinedstorage/block/BlockStorage.java index 02e4b7a5b..719d88895 100755 --- a/src/main/java/refinedstorage/block/BlockStorage.java +++ b/src/main/java/refinedstorage/block/BlockStorage.java @@ -34,7 +34,7 @@ public class BlockStorage extends BlockNode { } @Override - public void getSubBlocks(Item item, CreativeTabs tab, List subItems) { + public void getSubBlocks(Item item, CreativeTabs tab, List subItems) { for (int i = 0; i <= 4; ++i) { subItems.add(ItemBlockStorage.initNBT(new ItemStack(item, 1, i))); } @@ -91,7 +91,7 @@ public class BlockStorage extends BlockNode { public List getDrops(IBlockAccess world, BlockPos pos, IBlockState state, int fortune) { TileStorage storage = (TileStorage) world.getTileEntity(pos); - List drops = new ArrayList(); + List drops = new ArrayList<>(); ItemStack stack = new ItemStack(RefinedStorageBlocks.STORAGE, 1, RefinedStorageBlocks.STORAGE.getMetaFromState(state)); stack.setTagCompound(new NBTTagCompound()); diff --git a/src/main/java/refinedstorage/container/slot/SlotSpecimen.java b/src/main/java/refinedstorage/container/slot/SlotSpecimen.java index e936b08c4..9d4930a92 100755 --- a/src/main/java/refinedstorage/container/slot/SlotSpecimen.java +++ b/src/main/java/refinedstorage/container/slot/SlotSpecimen.java @@ -67,9 +67,7 @@ public class SlotSpecimen extends SlotItemHandler { Field f = ((ItemBlockSpecial) item).getClass().getDeclaredField("block"); f.setAccessible(true); return ((Block) f.get(item)).getDefaultState(); - } catch (IllegalAccessException e) { - // NO OP - } catch (NoSuchFieldException e) { + } catch (IllegalAccessException | NoSuchFieldException e) { // NO OP } } else if (item instanceof ItemBlock) { diff --git a/src/main/java/refinedstorage/gui/GuiBase.java b/src/main/java/refinedstorage/gui/GuiBase.java index 229140985..17824d823 100755 --- a/src/main/java/refinedstorage/gui/GuiBase.java +++ b/src/main/java/refinedstorage/gui/GuiBase.java @@ -21,7 +21,7 @@ public abstract class GuiBase extends GuiContainer { protected static final int SIDE_BUTTON_WIDTH = 20; protected static final int SIDE_BUTTON_HEIGHT = 20; - private List sideButtons = new ArrayList(); + private List sideButtons = new ArrayList<>(); private int lastButtonId = 0; private int lastSideButtonY = 6; @@ -136,11 +136,7 @@ public abstract class GuiBase extends GuiContainer { protected void actionPerformed(GuiButton button) throws IOException { super.actionPerformed(button); - for (SideButton sideButton : sideButtons) { - if (sideButton.getId() == button.id) { - sideButton.actionPerformed(); - } - } + sideButtons.stream().filter(b -> b.getId() == button.id).findFirst().ifPresent(s -> s.actionPerformed()); } public GuiButton addButton(int x, int y, int w, int h) { diff --git a/src/main/java/refinedstorage/gui/grid/GuiGrid.java b/src/main/java/refinedstorage/gui/grid/GuiGrid.java index 942dcd223..7ffcf2973 100755 --- a/src/main/java/refinedstorage/gui/grid/GuiGrid.java +++ b/src/main/java/refinedstorage/gui/grid/GuiGrid.java @@ -40,7 +40,7 @@ public class GuiGrid extends GuiBase { public static GuiTextField SEARCH_FIELD; private ContainerGrid container; - private List items = new ArrayList(); + private List items = new ArrayList<>(); private IGrid grid; private int slotNumber; diff --git a/src/main/java/refinedstorage/integration/jei/RecipeMakerSolderer.java b/src/main/java/refinedstorage/integration/jei/RecipeMakerSolderer.java index 769458340..727e66d01 100755 --- a/src/main/java/refinedstorage/integration/jei/RecipeMakerSolderer.java +++ b/src/main/java/refinedstorage/integration/jei/RecipeMakerSolderer.java @@ -9,10 +9,10 @@ import java.util.List; public final class RecipeMakerSolderer { public static List getRecipes() { - List recipes = new ArrayList(); + List recipes = new ArrayList<>(); for (ISoldererRecipe recipe : RefinedStorageAPI.SOLDERER_REGISTRY.getRecipes()) { - List inputs = new ArrayList(); + List inputs = new ArrayList<>(); inputs.add(recipe.getRow(0)); inputs.add(recipe.getRow(1)); diff --git a/src/main/java/refinedstorage/item/ItemBlockStorage.java b/src/main/java/refinedstorage/item/ItemBlockStorage.java index 8cb21a1a7..1de4ade44 100755 --- a/src/main/java/refinedstorage/item/ItemBlockStorage.java +++ b/src/main/java/refinedstorage/item/ItemBlockStorage.java @@ -55,10 +55,10 @@ public class ItemBlockStorage extends ItemBlockBase { InventoryHelper.spawnItemStack(world, player.getPosition().getX(), player.getPosition().getY(), player.getPosition().getZ(), processor); } - return new ActionResult(EnumActionResult.SUCCESS, new ItemStack(RefinedStorageBlocks.MACHINE_CASING)); + return new ActionResult<>(EnumActionResult.SUCCESS, new ItemStack(RefinedStorageBlocks.MACHINE_CASING)); } - return new ActionResult(EnumActionResult.PASS, stack); + return new ActionResult<>(EnumActionResult.PASS, stack); } private static boolean isValid(ItemStack stack) { diff --git a/src/main/java/refinedstorage/item/ItemCore.java b/src/main/java/refinedstorage/item/ItemCore.java index 9028b7aee..26515b552 100755 --- a/src/main/java/refinedstorage/item/ItemCore.java +++ b/src/main/java/refinedstorage/item/ItemCore.java @@ -18,7 +18,7 @@ public class ItemCore extends ItemBase { } @Override - public void getSubItems(Item item, CreativeTabs tab, List list) { + public void getSubItems(Item item, CreativeTabs tab, List list) { for (int i = 0; i < 2; ++i) { list.add(new ItemStack(item, 1, i)); } diff --git a/src/main/java/refinedstorage/item/ItemGridFilter.java b/src/main/java/refinedstorage/item/ItemGridFilter.java index 001377a19..24a3fbd9e 100755 --- a/src/main/java/refinedstorage/item/ItemGridFilter.java +++ b/src/main/java/refinedstorage/item/ItemGridFilter.java @@ -28,15 +28,15 @@ public class ItemGridFilter extends ItemBase { public ActionResult onItemRightClick(ItemStack stack, World world, EntityPlayer player, EnumHand hand) { if (!world.isRemote) { if (player.isSneaking()) { - return new ActionResult(EnumActionResult.SUCCESS, new ItemStack(RefinedStorageItems.GRID_FILTER)); + return new ActionResult<>(EnumActionResult.SUCCESS, new ItemStack(RefinedStorageItems.GRID_FILTER)); } player.openGui(RefinedStorage.INSTANCE, RefinedStorageGui.GRID_FILTER, world, hand.ordinal(), 0, 0); - return new ActionResult(EnumActionResult.SUCCESS, stack); + return new ActionResult<>(EnumActionResult.SUCCESS, stack); } - return new ActionResult(EnumActionResult.PASS, stack); + return new ActionResult<>(EnumActionResult.PASS, stack); } @Override diff --git a/src/main/java/refinedstorage/item/ItemPattern.java b/src/main/java/refinedstorage/item/ItemPattern.java index df3db4a88..ec129af2c 100755 --- a/src/main/java/refinedstorage/item/ItemPattern.java +++ b/src/main/java/refinedstorage/item/ItemPattern.java @@ -45,7 +45,7 @@ public class ItemPattern extends ItemBase { } public static void combineItems(List tooltip, ItemStack... stacks) { - Set combinedIndices = new HashSet(); + Set combinedIndices = new HashSet<>(); for (int i = 0; i < stacks.length; ++i) { if (stacks[i] != null && !combinedIndices.contains(i)) { @@ -73,10 +73,10 @@ public class ItemPattern extends ItemBase { @Override public ActionResult onItemRightClick(ItemStack stack, World world, EntityPlayer player, EnumHand hand) { if (!world.isRemote && player.isSneaking()) { - return new ActionResult(EnumActionResult.SUCCESS, new ItemStack(RefinedStorageItems.PATTERN)); + return new ActionResult<>(EnumActionResult.SUCCESS, new ItemStack(RefinedStorageItems.PATTERN)); } - return new ActionResult(EnumActionResult.PASS, stack); + return new ActionResult<>(EnumActionResult.PASS, stack); } public static void addInput(ItemStack pattern, ItemStack stack) { diff --git a/src/main/java/refinedstorage/item/ItemProcessor.java b/src/main/java/refinedstorage/item/ItemProcessor.java index b60613ff1..3e4d807e4 100755 --- a/src/main/java/refinedstorage/item/ItemProcessor.java +++ b/src/main/java/refinedstorage/item/ItemProcessor.java @@ -23,7 +23,7 @@ public class ItemProcessor extends ItemBase { } @Override - public void getSubItems(Item item, CreativeTabs tab, List list) { + public void getSubItems(Item item, CreativeTabs tab, List list) { for (int i = 0; i <= 6; ++i) { list.add(new ItemStack(item, 1, i)); } diff --git a/src/main/java/refinedstorage/item/ItemStorageDisk.java b/src/main/java/refinedstorage/item/ItemStorageDisk.java index 23ce83613..1558ee515 100755 --- a/src/main/java/refinedstorage/item/ItemStorageDisk.java +++ b/src/main/java/refinedstorage/item/ItemStorageDisk.java @@ -39,7 +39,7 @@ public class ItemStorageDisk extends ItemBase { } @Override - public void getSubItems(Item item, CreativeTabs tab, List list) { + public void getSubItems(Item item, CreativeTabs tab, List list) { for (int i = 0; i < 5; ++i) { list.add(NBTStorage.createStackWithNBT(new ItemStack(item, 1, i))); } @@ -75,7 +75,7 @@ public class ItemStorageDisk extends ItemBase { Item item = it.next(); if (item != RefinedStorageItems.STORAGE_DISK) { - List stacks = new ArrayList(); + List stacks = new ArrayList<>(); item.getSubItems(item, CreativeTabs.INVENTORY, stacks); @@ -113,10 +113,10 @@ public class ItemStorageDisk extends ItemBase { InventoryHelper.spawnItemStack(world, player.getPosition().getX(), player.getPosition().getY(), player.getPosition().getZ(), storagePart); } - return new ActionResult(EnumActionResult.SUCCESS, new ItemStack(RefinedStorageItems.STORAGE_HOUSING)); + return new ActionResult<>(EnumActionResult.SUCCESS, new ItemStack(RefinedStorageItems.STORAGE_HOUSING)); } - return new ActionResult(EnumActionResult.PASS, disk); + return new ActionResult<>(EnumActionResult.PASS, disk); } @Override diff --git a/src/main/java/refinedstorage/item/ItemStoragePart.java b/src/main/java/refinedstorage/item/ItemStoragePart.java index 509378f43..b643e9780 100755 --- a/src/main/java/refinedstorage/item/ItemStoragePart.java +++ b/src/main/java/refinedstorage/item/ItemStoragePart.java @@ -20,7 +20,7 @@ public class ItemStoragePart extends ItemBase { } @Override - public void getSubItems(Item item, CreativeTabs tab, List list) { + public void getSubItems(Item item, CreativeTabs tab, List list) { for (int i = 0; i <= 3; ++i) { list.add(new ItemStack(item, 1, i)); } diff --git a/src/main/java/refinedstorage/item/ItemUpgrade.java b/src/main/java/refinedstorage/item/ItemUpgrade.java index 863a1b337..7d12b0e5d 100755 --- a/src/main/java/refinedstorage/item/ItemUpgrade.java +++ b/src/main/java/refinedstorage/item/ItemUpgrade.java @@ -25,7 +25,7 @@ public class ItemUpgrade extends ItemBase { } @Override - public void getSubItems(Item item, CreativeTabs tab, List list) { + public void getSubItems(Item item, CreativeTabs tab, List list) { for (int i = 0; i <= 5; ++i) { list.add(new ItemStack(item, 1, i)); } diff --git a/src/main/java/refinedstorage/item/ItemWirelessGrid.java b/src/main/java/refinedstorage/item/ItemWirelessGrid.java index fa1db8e04..18bb0ed4a 100755 --- a/src/main/java/refinedstorage/item/ItemWirelessGrid.java +++ b/src/main/java/refinedstorage/item/ItemWirelessGrid.java @@ -9,7 +9,6 @@ import net.minecraft.client.resources.I18n; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.IItemPropertyGetter; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; @@ -48,18 +47,12 @@ public class ItemWirelessGrid extends ItemEnergyContainer implements ISpecialEle public ItemWirelessGrid() { super(3200); - addPropertyOverride(new ResourceLocation("connected"), new IItemPropertyGetter() { - @Override - public float apply(ItemStack stack, World world, EntityLivingBase entity) { - return (entity != null && isValid(stack) && getDimensionId(stack) == entity.dimension) ? 1.0f : 0.0f; - } - }); - setRegistryName(RefinedStorage.ID, "wireless_grid"); setMaxDamage(3200); setMaxStackSize(1); setHasSubtypes(true); setCreativeTab(RefinedStorage.INSTANCE.tab); + addPropertyOverride(new ResourceLocation("connected"), (stack, world, entity) -> (entity != null && isValid(stack) && getDimensionId(stack) == entity.dimension) ? 1.0f : 0.0f); } @Override @@ -93,7 +86,7 @@ public class ItemWirelessGrid extends ItemEnergyContainer implements ISpecialEle } @Override - public void getSubItems(Item item, CreativeTabs tab, List list) { + public void getSubItems(Item item, CreativeTabs tab, List list) { list.add(new ItemStack(item, 1, TYPE_NORMAL)); ItemStack fullyCharged = new ItemStack(item, 1, TYPE_NORMAL); @@ -149,7 +142,7 @@ public class ItemWirelessGrid extends ItemEnergyContainer implements ISpecialEle if (tile instanceof TileController) { if (((TileController) tile).getWirelessGridHandler().onOpen(player, hand)) { - return new ActionResult(EnumActionResult.SUCCESS, stack); + return new ActionResult<>(EnumActionResult.SUCCESS, stack); } else { player.addChatComponentMessage(new TextComponentTranslation("misc.refinedstorage:wireless_grid.out_of_range")); } @@ -158,7 +151,7 @@ public class ItemWirelessGrid extends ItemEnergyContainer implements ISpecialEle } } - return new ActionResult(EnumActionResult.PASS, stack); + return new ActionResult<>(EnumActionResult.PASS, stack); } public static int getDimensionId(ItemStack stack) { diff --git a/src/main/java/refinedstorage/network/MessageGridUpdate.java b/src/main/java/refinedstorage/network/MessageGridUpdate.java index bcf87f8ec..587bcfeb0 100755 --- a/src/main/java/refinedstorage/network/MessageGridUpdate.java +++ b/src/main/java/refinedstorage/network/MessageGridUpdate.java @@ -14,7 +14,7 @@ import java.util.List; public class MessageGridUpdate implements IMessage, IMessageHandler { private INetworkMaster network; - private List items = new ArrayList(); + private List items = new ArrayList<>(); public MessageGridUpdate() { } diff --git a/src/main/java/refinedstorage/network/MessageHandlerPlayerToServer.java b/src/main/java/refinedstorage/network/MessageHandlerPlayerToServer.java index 42dd45673..de261d388 100755 --- a/src/main/java/refinedstorage/network/MessageHandlerPlayerToServer.java +++ b/src/main/java/refinedstorage/network/MessageHandlerPlayerToServer.java @@ -10,12 +10,7 @@ public abstract class MessageHandlerPlayerToServer implement public IMessage onMessage(final T message, MessageContext context) { final EntityPlayerMP player = context.getServerHandler().playerEntity; - player.getServerWorld().addScheduledTask(new Runnable() { - @Override - public void run() { - handle(message, player); - } - }); + player.getServerWorld().addScheduledTask(() -> handle(message, player)); return null; } diff --git a/src/main/java/refinedstorage/network/MessageTileDataParameter.java b/src/main/java/refinedstorage/network/MessageTileDataParameter.java index 021183a6c..c57daa17f 100755 --- a/src/main/java/refinedstorage/network/MessageTileDataParameter.java +++ b/src/main/java/refinedstorage/network/MessageTileDataParameter.java @@ -32,7 +32,7 @@ public class MessageTileDataParameter implements IMessage, IMessageHandler patterns = new ArrayList(); + private List patterns = new ArrayList<>(); - private Stack craftingTasks = new Stack(); - private List craftingTasksToAddAsLast = new ArrayList(); - private List craftingTasksToAdd = new ArrayList(); - private List craftingTasksToCancel = new ArrayList(); + private Stack craftingTasks = new Stack<>(); + private List craftingTasksToAddAsLast = new ArrayList<>(); + private List craftingTasksToAdd = new ArrayList<>(); + private List craftingTasksToCancel = new ArrayList<>(); private EnergyStorage energy = new EnergyStorage(RefinedStorage.INSTANCE.controllerCapacity); private IControllerEnergyIC2 energyEU; @@ -122,7 +122,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR private RedstoneMode redstoneMode = RedstoneMode.IGNORE; - private List clientNodes = new ArrayList(); + private List clientNodes = new ArrayList<>(); public TileController() { dataManager.addWatchedParameter(REDSTONE_MODE); @@ -318,7 +318,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR @Override public List getPatterns(ItemStack pattern, int flags) { - List patterns = new ArrayList(); + List patterns = new ArrayList<>(); for (ICraftingPattern craftingPattern : getPatterns()) { for (ItemStack output : craftingPattern.getOutputs()) { @@ -391,11 +391,9 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR @Override public void sendStorageToClient() { - for (EntityPlayer player : worldObj.getMinecraftServer().getPlayerList().getPlayerList()) { - if (isWatchingGrid(player)) { - sendStorageToClient((EntityPlayerMP) player); - } - } + worldObj.getMinecraftServer().getPlayerList().getPlayerList().stream().filter(player -> isWatchingGrid(player)).forEach(player -> { + sendStorageToClient(player); + }); } @Override @@ -405,11 +403,9 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR @Override public void sendStorageDeltaToClient(ItemStack stack, int delta) { - for (EntityPlayer player : worldObj.getMinecraftServer().getPlayerList().getPlayerList()) { - if (isWatchingGrid(player)) { - RefinedStorage.INSTANCE.network.sendTo(new MessageGridDelta(this, stack, delta), (EntityPlayerMP) player); - } - } + worldObj.getMinecraftServer().getPlayerList().getPlayerList().stream().filter(player -> isWatchingGrid(player)).forEach(player -> { + RefinedStorage.INSTANCE.network.sendTo(new MessageGridDelta(this, stack, delta), player); + }); } private boolean isWatchingGrid(EntityPlayer player) { diff --git a/src/main/java/refinedstorage/tile/TileCrafter.java b/src/main/java/refinedstorage/tile/TileCrafter.java index 4c2b5334f..753721bed 100755 --- a/src/main/java/refinedstorage/tile/TileCrafter.java +++ b/src/main/java/refinedstorage/tile/TileCrafter.java @@ -9,7 +9,6 @@ import net.minecraftforge.items.wrapper.CombinedInvWrapper; import refinedstorage.RefinedStorage; import refinedstorage.RefinedStorageItems; import refinedstorage.api.autocrafting.ICraftingPatternContainer; -import refinedstorage.api.autocrafting.ICraftingTask; import refinedstorage.api.network.INetworkMaster; import refinedstorage.inventory.ItemHandlerBasic; import refinedstorage.inventory.ItemHandlerUpgrade; @@ -50,11 +49,9 @@ public class TileCrafter extends TileNode implements ICraftingPatternContainer { @Override public void onConnectionChange(INetworkMaster network, boolean state) { if (!state) { - for (ICraftingTask task : network.getCraftingTasks()) { - if (task.getPattern().getContainerPosition().equals(pos)) { - network.cancelCraftingTask(task); - } - } + network.getCraftingTasks().stream() + .filter(task -> task.getPattern().getContainerPosition().equals(pos)) + .forEach(network::cancelCraftingTask); } network.rebuildPatterns(); diff --git a/src/main/java/refinedstorage/tile/TileCraftingMonitor.java b/src/main/java/refinedstorage/tile/TileCraftingMonitor.java index 7d62ec87c..ed5ee141a 100755 --- a/src/main/java/refinedstorage/tile/TileCraftingMonitor.java +++ b/src/main/java/refinedstorage/tile/TileCraftingMonitor.java @@ -8,7 +8,7 @@ import java.util.List; // @TODO: Make this work! public class TileCraftingMonitor extends TileNode { - private List tasks = new ArrayList(); + private List tasks = new ArrayList<>(); @Override public int getEnergyUsage() { diff --git a/src/main/java/refinedstorage/tile/TileNode.java b/src/main/java/refinedstorage/tile/TileNode.java index fa3236977..ec4a2e1a8 100755 --- a/src/main/java/refinedstorage/tile/TileNode.java +++ b/src/main/java/refinedstorage/tile/TileNode.java @@ -13,7 +13,7 @@ import refinedstorage.tile.config.RedstoneMode; import refinedstorage.tile.data.TileDataParameter; public abstract class TileNode extends TileBase implements INetworkNode, IRedstoneConfigurable { - public static final TileDataParameter REDSTONE_MODE = RedstoneMode.createParameter(); + public static final TileDataParameter REDSTONE_MODE = RedstoneMode.createParameter(); private static final String NBT_CONNECTED = "Connected"; diff --git a/src/main/java/refinedstorage/tile/TileStorage.java b/src/main/java/refinedstorage/tile/TileStorage.java index 43fa7a0c8..55f79d572 100755 --- a/src/main/java/refinedstorage/tile/TileStorage.java +++ b/src/main/java/refinedstorage/tile/TileStorage.java @@ -251,7 +251,7 @@ public class TileStorage extends TileNode implements IStorageProvider, IStorageG @Override public int getStored() { - return (int) STORED.getValue(); + return STORED.getValue(); } @Override diff --git a/src/main/java/refinedstorage/tile/config/IPrioritizable.java b/src/main/java/refinedstorage/tile/config/IPrioritizable.java index 54810bb49..bb86fc427 100755 --- a/src/main/java/refinedstorage/tile/config/IPrioritizable.java +++ b/src/main/java/refinedstorage/tile/config/IPrioritizable.java @@ -7,10 +7,13 @@ import net.minecraft.tileentity.TileEntity; import net.minecraftforge.fml.common.FMLCommonHandler; import net.minecraftforge.fml.relauncher.Side; import refinedstorage.gui.GuiStorage; -import refinedstorage.tile.data.*; +import refinedstorage.tile.data.ITileDataConsumer; +import refinedstorage.tile.data.ITileDataProducer; +import refinedstorage.tile.data.TileDataManager; +import refinedstorage.tile.data.TileDataParameter; public interface IPrioritizable { - static TileDataParameter createParameter() { + static TileDataParameter createParameter() { return TileDataManager.createParameter(DataSerializers.VARINT, new ITileDataProducer() { @Override public Integer getValue(T tile) { @@ -21,15 +24,12 @@ public interface IPrioritizable { public void setValue(T tile, Integer value) { ((IPrioritizable) tile).setPriority(value); } - }, new ITileDataListener() { - @Override - public void onChanged(TileDataParameter parameter) { - if (FMLCommonHandler.instance().getEffectiveSide() == Side.CLIENT) { - GuiScreen gui = Minecraft.getMinecraft().currentScreen; + }, parameter -> { + if (FMLCommonHandler.instance().getEffectiveSide() == Side.CLIENT) { + GuiScreen gui = Minecraft.getMinecraft().currentScreen; - if (gui instanceof GuiStorage) { - ((GuiStorage) gui).PRIORITY.setText(String.valueOf(parameter.getValue())); - } + if (gui instanceof GuiStorage) { + ((GuiStorage) gui).PRIORITY.setText(String.valueOf(parameter.getValue())); } } }); diff --git a/src/main/java/refinedstorage/tile/data/TileDataManager.java b/src/main/java/refinedstorage/tile/data/TileDataManager.java index af3186f9d..aea7a0cb8 100755 --- a/src/main/java/refinedstorage/tile/data/TileDataManager.java +++ b/src/main/java/refinedstorage/tile/data/TileDataManager.java @@ -17,12 +17,12 @@ import java.util.Map; public class TileDataManager { private static int PARAMETER_ID = 0; - private static Map PARAMETER_MAP = new HashMap(); + private static Map PARAMETER_MAP = new HashMap<>(); - private List parameters = new ArrayList(); + private List parameters = new ArrayList<>(); - private List watchedParameters = new ArrayList(); - private List watchedParametersCache = new ArrayList(); + private List watchedParameters = new ArrayList<>(); + private List watchedParametersCache = new ArrayList<>(); public static TileDataParameter createParameter(DataSerializer serializer, ITileDataProducer producer) { return createParameter(serializer, producer, null); diff --git a/src/main/java/refinedstorage/tile/data/TileDataParameter.java b/src/main/java/refinedstorage/tile/data/TileDataParameter.java index c1a1abd92..66040e933 100755 --- a/src/main/java/refinedstorage/tile/data/TileDataParameter.java +++ b/src/main/java/refinedstorage/tile/data/TileDataParameter.java @@ -1,16 +1,17 @@ package refinedstorage.tile.data; import net.minecraft.network.datasync.DataSerializer; +import net.minecraft.tileentity.TileEntity; public class TileDataParameter { private int id; private DataSerializer serializer; - private ITileDataProducer valueProducer; - private ITileDataConsumer valueConsumer; - private ITileDataListener listener; + private ITileDataProducer valueProducer; + private ITileDataConsumer valueConsumer; + private ITileDataListener listener; private T value; - public TileDataParameter(int id, DataSerializer serializer, ITileDataProducer producer, ITileDataConsumer consumer, ITileDataListener listener) { + public TileDataParameter(int id, DataSerializer serializer, ITileDataProducer producer, ITileDataConsumer consumer, ITileDataListener listener) { this.id = id; this.serializer = serializer; this.valueProducer = producer; @@ -26,11 +27,11 @@ public class TileDataParameter { return serializer; } - public ITileDataProducer getValueProducer() { + public ITileDataProducer getValueProducer() { return valueProducer; } - public ITileDataConsumer getValueConsumer() { + public ITileDataConsumer getValueConsumer() { return valueConsumer; } diff --git a/src/main/java/refinedstorage/tile/externalstorage/ItemHandlerStorage.java b/src/main/java/refinedstorage/tile/externalstorage/ItemHandlerStorage.java index 3f1e5943e..09530a47a 100755 --- a/src/main/java/refinedstorage/tile/externalstorage/ItemHandlerStorage.java +++ b/src/main/java/refinedstorage/tile/externalstorage/ItemHandlerStorage.java @@ -25,7 +25,7 @@ public class ItemHandlerStorage extends ExternalStorage { @Override public List getItems() { - List items = new ArrayList(); + List items = new ArrayList<>(); for (int i = 0; i < handler.getSlots(); ++i) { if (handler.getStackInSlot(i) != null && handler.getStackInSlot(i).getItem() != null) { diff --git a/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java b/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java index aedb3c872..78c7a073e 100755 --- a/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java +++ b/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java @@ -53,7 +53,7 @@ public class TileExternalStorage extends TileNode implements IStorageProvider, I private int compare = 0; private int mode = IFilterable.WHITELIST; - private List storages = new ArrayList(); + private List storages = new ArrayList<>(); private int lastDrawerCount; public TileExternalStorage() { diff --git a/src/main/java/refinedstorage/tile/grid/TileGrid.java b/src/main/java/refinedstorage/tile/grid/TileGrid.java index 087b76787..e5a1e70b6 100755 --- a/src/main/java/refinedstorage/tile/grid/TileGrid.java +++ b/src/main/java/refinedstorage/tile/grid/TileGrid.java @@ -141,7 +141,7 @@ public class TileGrid extends TileNode implements IGrid { private InventoryCraftResult result = new InventoryCraftResult(); private ItemHandlerBasic patterns = new ItemHandlerBasic(2, this, new ItemValidatorBasic(RefinedStorageItems.PATTERN)); - private List filteredItems = new ArrayList(); + private List filteredItems = new ArrayList<>(); private ItemHandlerGridFilterInGrid filter = new ItemHandlerGridFilterInGrid(filteredItems); private EnumGridType type; @@ -259,7 +259,7 @@ public class TileGrid extends TileNode implements IGrid { } public void onCraftedShift(ContainerGrid container, EntityPlayer player) { - List craftedItemsList = new ArrayList(); + List craftedItemsList = new ArrayList<>(); int craftedItems = 0; ItemStack crafted = result.getStackInSlot(0); diff --git a/src/main/java/refinedstorage/tile/grid/WirelessGrid.java b/src/main/java/refinedstorage/tile/grid/WirelessGrid.java index 0ec5255ee..8b4155818 100755 --- a/src/main/java/refinedstorage/tile/grid/WirelessGrid.java +++ b/src/main/java/refinedstorage/tile/grid/WirelessGrid.java @@ -34,7 +34,7 @@ public class WirelessGrid implements IGrid { private int sortingDirection; private int searchBoxMode; - private List filteredItems = new ArrayList(); + private List filteredItems = new ArrayList<>(); private ItemHandlerGridFilterInGrid filter = new ItemHandlerGridFilterInGrid(filteredItems) { @Override protected void onContentsChanged(int slot) { From 61291959343dbf6f672848d0a25dc99c233c2615 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Fri, 5 Aug 2016 17:12:59 +0200 Subject: [PATCH 100/214] More general improvements --- src/main/java/refinedstorage/block/BlockBase.java | 4 ++-- src/main/java/refinedstorage/block/BlockCable.java | 14 +++++++------- .../java/refinedstorage/block/BlockController.java | 3 ++- .../java/refinedstorage/block/BlockDetector.java | 4 ++-- .../java/refinedstorage/block/BlockDiskDrive.java | 2 +- src/main/java/refinedstorage/block/BlockNode.java | 2 +- .../java/refinedstorage/block/BlockSolderer.java | 4 ++-- .../refinedstorage/block/EnumPlacementType.java | 2 +- .../refinedstorage/container/ContainerBase.java | 2 +- .../refinedstorage/container/ContainerDummy.java | 11 ----------- src/main/java/refinedstorage/gui/GuiBase.java | 2 +- .../java/refinedstorage/gui/GuiController.java | 2 +- .../refinedstorage/gui/GuiCraftingMonitor.java | 2 +- .../java/refinedstorage/tile/TileController.java | 12 ++++++------ .../tile/externalstorage/DrawerStorage.java | 2 +- .../tile/externalstorage/TileExternalStorage.java | 10 +++++----- 16 files changed, 34 insertions(+), 44 deletions(-) delete mode 100755 src/main/java/refinedstorage/container/ContainerDummy.java diff --git a/src/main/java/refinedstorage/block/BlockBase.java b/src/main/java/refinedstorage/block/BlockBase.java index 84708da07..ffd34a258 100755 --- a/src/main/java/refinedstorage/block/BlockBase.java +++ b/src/main/java/refinedstorage/block/BlockBase.java @@ -21,7 +21,7 @@ import refinedstorage.item.ItemBlockBase; import refinedstorage.tile.TileBase; public abstract class BlockBase extends Block { - public static final PropertyDirection DIRECTION = PropertyDirection.create("direction"); + private static final PropertyDirection DIRECTION = PropertyDirection.create("direction"); private String name; @@ -147,7 +147,7 @@ public abstract class BlockBase extends Block { world.setBlockToAir(pos); } - public EnumPlacementType getPlacementType() { + protected EnumPlacementType getPlacementType() { return EnumPlacementType.HORIZONTAL; } } diff --git a/src/main/java/refinedstorage/block/BlockCable.java b/src/main/java/refinedstorage/block/BlockCable.java index e301b8b24..be63c1310 100755 --- a/src/main/java/refinedstorage/block/BlockCable.java +++ b/src/main/java/refinedstorage/block/BlockCable.java @@ -16,12 +16,12 @@ import refinedstorage.tile.TileCable; public class BlockCable extends BlockNode { private static final AxisAlignedBB CABLE_AABB = new AxisAlignedBB(4 * (1F / 16F), 4 * (1F / 16F), 4 * (1F / 16F), 1 - 4 * (1F / 16F), 1 - 4 * (1F / 16F), 1 - 4 * (1F / 16F)); - public static final PropertyBool NORTH = PropertyBool.create("north"); - public static final PropertyBool EAST = PropertyBool.create("east"); - public static final PropertyBool SOUTH = PropertyBool.create("south"); - public static final PropertyBool WEST = PropertyBool.create("west"); - public static final PropertyBool UP = PropertyBool.create("up"); - public static final PropertyBool DOWN = PropertyBool.create("down"); + private static final PropertyBool NORTH = PropertyBool.create("north"); + private static final PropertyBool EAST = PropertyBool.create("east"); + private static final PropertyBool SOUTH = PropertyBool.create("south"); + private static final PropertyBool WEST = PropertyBool.create("west"); + private static final PropertyBool UP = PropertyBool.create("up"); + private static final PropertyBool DOWN = PropertyBool.create("down"); public BlockCable(String name) { super(name); @@ -91,7 +91,7 @@ public class BlockCable extends BlockNode { } @Override - public EnumPlacementType getPlacementType() { + protected EnumPlacementType getPlacementType() { return null; } } diff --git a/src/main/java/refinedstorage/block/BlockController.java b/src/main/java/refinedstorage/block/BlockController.java index 549f59587..ec991271c 100755 --- a/src/main/java/refinedstorage/block/BlockController.java +++ b/src/main/java/refinedstorage/block/BlockController.java @@ -29,7 +29,8 @@ import java.util.List; public class BlockController extends BlockBase { public static final PropertyEnum TYPE = PropertyEnum.create("type", EnumControllerType.class); - public static final PropertyInteger ENERGY = PropertyInteger.create("energy", 0, 7); + + private static final PropertyInteger ENERGY = PropertyInteger.create("energy", 0, 7); public BlockController() { super("controller"); diff --git a/src/main/java/refinedstorage/block/BlockDetector.java b/src/main/java/refinedstorage/block/BlockDetector.java index c29c2f6e4..2b40487d9 100755 --- a/src/main/java/refinedstorage/block/BlockDetector.java +++ b/src/main/java/refinedstorage/block/BlockDetector.java @@ -18,9 +18,9 @@ import refinedstorage.RefinedStorageGui; import refinedstorage.tile.TileDetector; public class BlockDetector extends BlockNode { - public static final AxisAlignedBB AABB_DETECTOR = new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 4D / 16D, 1.0D); + private static final AxisAlignedBB AABB_DETECTOR = new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 4D / 16D, 1.0D); - public static final PropertyBool POWERED = PropertyBool.create("powered"); + private static final PropertyBool POWERED = PropertyBool.create("powered"); public BlockDetector() { super("detector"); diff --git a/src/main/java/refinedstorage/block/BlockDiskDrive.java b/src/main/java/refinedstorage/block/BlockDiskDrive.java index 048beb1d4..35aa8c510 100755 --- a/src/main/java/refinedstorage/block/BlockDiskDrive.java +++ b/src/main/java/refinedstorage/block/BlockDiskDrive.java @@ -16,7 +16,7 @@ import refinedstorage.RefinedStorageGui; import refinedstorage.tile.TileDiskDrive; public class BlockDiskDrive extends BlockNode { - public static final PropertyInteger STORED = PropertyInteger.create("stored", 0, 7); + private static final PropertyInteger STORED = PropertyInteger.create("stored", 0, 7); public BlockDiskDrive() { super("disk_drive"); diff --git a/src/main/java/refinedstorage/block/BlockNode.java b/src/main/java/refinedstorage/block/BlockNode.java index 8156606eb..896f2cb65 100755 --- a/src/main/java/refinedstorage/block/BlockNode.java +++ b/src/main/java/refinedstorage/block/BlockNode.java @@ -15,7 +15,7 @@ import refinedstorage.api.network.NetworkUtils; import refinedstorage.tile.TileNode; public abstract class BlockNode extends BlockBase { - public static final PropertyBool CONNECTED = PropertyBool.create("connected"); + private static final PropertyBool CONNECTED = PropertyBool.create("connected"); public BlockNode(String name) { super(name); diff --git a/src/main/java/refinedstorage/block/BlockSolderer.java b/src/main/java/refinedstorage/block/BlockSolderer.java index b3f81f07a..a1508e167 100755 --- a/src/main/java/refinedstorage/block/BlockSolderer.java +++ b/src/main/java/refinedstorage/block/BlockSolderer.java @@ -17,9 +17,9 @@ import refinedstorage.RefinedStorageGui; import refinedstorage.tile.TileSolderer; public class BlockSolderer extends BlockNode { - public static final AxisAlignedBB AABB_SOLDERER = new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 14D / 16D, 1.0D); + private static final AxisAlignedBB AABB_SOLDERER = new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 14D / 16D, 1.0D); - public static final PropertyBool WORKING = PropertyBool.create("working"); + private static final PropertyBool WORKING = PropertyBool.create("working"); public BlockSolderer() { super("solderer"); diff --git a/src/main/java/refinedstorage/block/EnumPlacementType.java b/src/main/java/refinedstorage/block/EnumPlacementType.java index b95a51f47..34945559a 100755 --- a/src/main/java/refinedstorage/block/EnumPlacementType.java +++ b/src/main/java/refinedstorage/block/EnumPlacementType.java @@ -14,7 +14,7 @@ public enum EnumPlacementType { EnumFacing.WEST ); - public final EnumFacing[] allowed; + final EnumFacing[] allowed; EnumPlacementType(EnumFacing... allowed) { this.allowed = allowed; diff --git a/src/main/java/refinedstorage/container/ContainerBase.java b/src/main/java/refinedstorage/container/ContainerBase.java index c7ef765b3..896b211e5 100755 --- a/src/main/java/refinedstorage/container/ContainerBase.java +++ b/src/main/java/refinedstorage/container/ContainerBase.java @@ -107,7 +107,7 @@ public abstract class ContainerBase extends Container { return null; } - public ItemStack mergeItemStackToSpecimen(ItemStack stack, int begin, int end) { + protected ItemStack mergeItemStackToSpecimen(ItemStack stack, int begin, int end) { for (int i = begin; i < end; ++i) { if (CompareUtils.compareStackNoQuantity(getSlot(i).getStack(), stack)) { return null; diff --git a/src/main/java/refinedstorage/container/ContainerDummy.java b/src/main/java/refinedstorage/container/ContainerDummy.java deleted file mode 100755 index c9022f70b..000000000 --- a/src/main/java/refinedstorage/container/ContainerDummy.java +++ /dev/null @@ -1,11 +0,0 @@ -package refinedstorage.container; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.Container; - -public class ContainerDummy extends Container { - @Override - public boolean canInteractWith(EntityPlayer player) { - return false; - } -} diff --git a/src/main/java/refinedstorage/gui/GuiBase.java b/src/main/java/refinedstorage/gui/GuiBase.java index 17824d823..9e99022a8 100755 --- a/src/main/java/refinedstorage/gui/GuiBase.java +++ b/src/main/java/refinedstorage/gui/GuiBase.java @@ -136,7 +136,7 @@ public abstract class GuiBase extends GuiContainer { protected void actionPerformed(GuiButton button) throws IOException { super.actionPerformed(button); - sideButtons.stream().filter(b -> b.getId() == button.id).findFirst().ifPresent(s -> s.actionPerformed()); + sideButtons.stream().filter(b -> b.getId() == button.id).findFirst().ifPresent(SideButton::actionPerformed); } public GuiButton addButton(int x, int y, int w, int h) { diff --git a/src/main/java/refinedstorage/gui/GuiController.java b/src/main/java/refinedstorage/gui/GuiController.java index dd5b21000..5f3f323b7 100755 --- a/src/main/java/refinedstorage/gui/GuiController.java +++ b/src/main/java/refinedstorage/gui/GuiController.java @@ -104,7 +104,7 @@ public class GuiController extends GuiBase { } } - public int getOffset() { + private int getOffset() { return (int) Math.ceil(getScrollbar().getCurrentScroll() / 59f * (float) getRows()); } diff --git a/src/main/java/refinedstorage/gui/GuiCraftingMonitor.java b/src/main/java/refinedstorage/gui/GuiCraftingMonitor.java index e17c49717..1ee5c86a0 100755 --- a/src/main/java/refinedstorage/gui/GuiCraftingMonitor.java +++ b/src/main/java/refinedstorage/gui/GuiCraftingMonitor.java @@ -146,7 +146,7 @@ public class GuiCraftingMonitor extends GuiBase { } } - public int getOffset() { + private int getOffset() { return (int) Math.ceil(getScrollbar().getCurrentScroll() / 89f * (float) getRows()); } diff --git a/src/main/java/refinedstorage/tile/TileController.java b/src/main/java/refinedstorage/tile/TileController.java index 4f59b92b8..2c92ce535 100755 --- a/src/main/java/refinedstorage/tile/TileController.java +++ b/src/main/java/refinedstorage/tile/TileController.java @@ -391,9 +391,9 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR @Override public void sendStorageToClient() { - worldObj.getMinecraftServer().getPlayerList().getPlayerList().stream().filter(player -> isWatchingGrid(player)).forEach(player -> { - sendStorageToClient(player); - }); + worldObj.getMinecraftServer().getPlayerList().getPlayerList().stream() + .filter(this::isWatchingGrid) + .forEach(this::sendStorageToClient); } @Override @@ -403,9 +403,9 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR @Override public void sendStorageDeltaToClient(ItemStack stack, int delta) { - worldObj.getMinecraftServer().getPlayerList().getPlayerList().stream().filter(player -> isWatchingGrid(player)).forEach(player -> { - RefinedStorage.INSTANCE.network.sendTo(new MessageGridDelta(this, stack, delta), player); - }); + worldObj.getMinecraftServer().getPlayerList().getPlayerList().stream() + .filter(this::isWatchingGrid) + .forEach(player -> RefinedStorage.INSTANCE.network.sendTo(new MessageGridDelta(this, stack, delta), player)); } private boolean isWatchingGrid(EntityPlayer player) { diff --git a/src/main/java/refinedstorage/tile/externalstorage/DrawerStorage.java b/src/main/java/refinedstorage/tile/externalstorage/DrawerStorage.java index 6572a4681..9a4127daa 100755 --- a/src/main/java/refinedstorage/tile/externalstorage/DrawerStorage.java +++ b/src/main/java/refinedstorage/tile/externalstorage/DrawerStorage.java @@ -33,7 +33,7 @@ public class DrawerStorage extends ExternalStorage { return Collections.emptyList(); } - public boolean isVoidable() { + private boolean isVoidable() { return drawer instanceof IVoidable && ((IVoidable) drawer).isVoid(); } diff --git a/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java b/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java index 78c7a073e..f7ec81146 100755 --- a/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java +++ b/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java @@ -25,18 +25,18 @@ import java.util.ArrayList; import java.util.List; public class TileExternalStorage extends TileNode implements IStorageProvider, IStorageGui, IComparable, IFilterable, IPrioritizable { - public static final TileDataParameter PRIORITY = IPrioritizable.createParameter(); - public static final TileDataParameter COMPARE = IComparable.createParameter(); - public static final TileDataParameter MODE = IFilterable.createParameter(); + public static final TileDataParameter PRIORITY = IPrioritizable.createParameter(); + public static final TileDataParameter COMPARE = IComparable.createParameter(); + public static final TileDataParameter MODE = IFilterable.createParameter(); - public static final TileDataParameter STORED = TileDataManager.createParameter(DataSerializers.VARINT, new ITileDataProducer() { + public static final TileDataParameter STORED = TileDataManager.createParameter(DataSerializers.VARINT, new ITileDataProducer() { @Override public Integer getValue(TileExternalStorage tile) { return tile.getStored(); } }); - public static final TileDataParameter CAPACITY = TileDataManager.createParameter(DataSerializers.VARINT, new ITileDataProducer() { + public static final TileDataParameter CAPACITY = TileDataManager.createParameter(DataSerializers.VARINT, new ITileDataProducer() { @Override public Integer getValue(TileExternalStorage tile) { return tile.getCapacity(); From f410d17e883329203d6430d12fa747aa7e28b023 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sat, 6 Aug 2016 01:23:21 +0200 Subject: [PATCH 101/214] Initial MCMP support! --- build.gradle | 6 +- .../java/refinedstorage/block/BlockCable.java | 164 ++++++++++++++++-- .../block/BlockConstructor.java | 2 +- .../refinedstorage/block/BlockDestructor.java | 2 +- .../refinedstorage/block/BlockExporter.java | 2 +- .../block/BlockExternalStorage.java | 6 +- .../refinedstorage/block/BlockImporter.java | 2 +- .../java/refinedstorage/gui/grid/GuiGrid.java | 1 + .../refinedstorage/proxy/ClientProxy.java | 31 +++- .../refinedstorage/proxy/CommonProxy.java | 18 +- .../java/refinedstorage/tile/TileCable.java | 2 +- .../refinedstorage/tile/TileConstructor.java | 2 +- .../refinedstorage/tile/TileDestructor.java | 2 +- .../refinedstorage/tile/TileExporter.java | 2 +- .../refinedstorage/tile/TileImporter.java | 2 +- .../tile/TileMultipartNode.java | 148 ++++++++++++++++ .../externalstorage/TileExternalStorage.java | 4 +- 17 files changed, 363 insertions(+), 33 deletions(-) create mode 100755 src/main/java/refinedstorage/tile/TileMultipartNode.java diff --git a/build.gradle b/build.gradle index b7a450094..7744eda0c 100755 --- a/build.gradle +++ b/build.gradle @@ -17,7 +17,7 @@ group = "refinedstorage" archivesBaseName = "refinedstorage" minecraft { - version = "1.10.2-12.18.1.2045" + version = "1.10.2-12.18.1.2046" runDir = "run" useDepAts = true mappings = "snapshot_20160518" @@ -34,12 +34,16 @@ repositories { name = "ic2" url = "http://maven.ic2.player.to/" } + maven { + url "http://maven.amadornes.com/" + } } dependencies { deobfCompile "mezz.jei:jei_1.10.2:3.7.+" compile "net.darkhax.tesla:Tesla:1.10-1.2.+" compile "net.industrial-craft:industrialcraft-2:2.6.27-ex110:api" + deobfCompile "MCMultiPart:MCMultiPart:1.2.+:universal" } processResources { diff --git a/src/main/java/refinedstorage/block/BlockCable.java b/src/main/java/refinedstorage/block/BlockCable.java index be63c1310..7eca9eb20 100755 --- a/src/main/java/refinedstorage/block/BlockCable.java +++ b/src/main/java/refinedstorage/block/BlockCable.java @@ -1,19 +1,36 @@ package refinedstorage.block; +import mcmultipart.block.BlockCoverable; +import mcmultipart.block.BlockMultipartContainer; +import mcmultipart.microblock.IMicroblock; +import net.minecraft.block.material.Material; import net.minecraft.block.properties.PropertyBool; +import net.minecraft.block.properties.PropertyDirection; import net.minecraft.block.state.BlockStateContainer; import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.InventoryHelper; +import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockPos; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; +import net.minecraftforge.items.IItemHandler; +import refinedstorage.RefinedStorage; import refinedstorage.api.network.INetworkMaster; import refinedstorage.api.network.INetworkNode; +import refinedstorage.api.network.NetworkUtils; import refinedstorage.tile.TileBase; import refinedstorage.tile.TileCable; +import refinedstorage.tile.TileMultipartNode; +import refinedstorage.tile.TileNode; + +public class BlockCable extends BlockCoverable { + private static final PropertyDirection DIRECTION = PropertyDirection.create("direction"); -public class BlockCable extends BlockNode { private static final AxisAlignedBB CABLE_AABB = new AxisAlignedBB(4 * (1F / 16F), 4 * (1F / 16F), 4 * (1F / 16F), 1 - 4 * (1F / 16F), 1 - 4 * (1F / 16F), 1 - 4 * (1F / 16F)); private static final PropertyBool NORTH = PropertyBool.create("north"); @@ -23,50 +40,91 @@ public class BlockCable extends BlockNode { private static final PropertyBool UP = PropertyBool.create("up"); private static final PropertyBool DOWN = PropertyBool.create("down"); + private String name; + public BlockCable(String name) { - super(name); + super(Material.ROCK); + + this.name = name; setHardness(0.6F); + setRegistryName(RefinedStorage.ID, name); + setCreativeTab(RefinedStorage.INSTANCE.tab); + } + + @Override + public String getUnlocalizedName() { + return "block." + RefinedStorage.ID + ":" + name; + } + + public String getName() { + return name; } public BlockCable() { this("cable"); } + @Override + public boolean hasTileEntity(IBlockState state) { + return true; + } + @Override public TileEntity createTileEntity(World world, IBlockState state) { return new TileCable(); } - @Override - protected BlockStateContainer.Builder createBlockStateBuilder() { - return super.createBlockStateBuilder() - .add(NORTH) + protected BlockStateContainer createBlockState() { + BlockStateContainer.Builder builder = new BlockStateContainer.Builder(this); + + builder.add(NORTH) .add(EAST) .add(SOUTH) .add(WEST) .add(UP) - .add(DOWN); + .add(DOWN) + .add(BlockMultipartContainer.PROPERTY_MULTIPART_CONTAINER); + + if (getPlacementType() != null) { + builder.add(DIRECTION); + } + + return builder.build(); } @Override public IBlockState getActualState(IBlockState state, IBlockAccess world, BlockPos pos) { - return super.getActualState(state, world, pos) + state = super.getActualState(state, world, pos) .withProperty(NORTH, hasConnectionWith(world, pos, pos.north())) .withProperty(EAST, hasConnectionWith(world, pos, pos.east())) .withProperty(SOUTH, hasConnectionWith(world, pos, pos.south())) .withProperty(WEST, hasConnectionWith(world, pos, pos.west())) .withProperty(UP, hasConnectionWith(world, pos, pos.up())) .withProperty(DOWN, hasConnectionWith(world, pos, pos.down())); + + if (getPlacementType() != null) { + state = state.withProperty(DIRECTION, ((TileNode) world.getTileEntity(pos)).getDirection()); + } + + return state; } private boolean hasConnectionWith(IBlockAccess world, BlockPos basePos, BlockPos pos) { + TileMultipartNode baseTile = (TileMultipartNode) world.getTileEntity(basePos); TileEntity tile = world.getTileEntity(pos); if (tile instanceof INetworkMaster || tile instanceof INetworkNode) { + // Do not render a cable extension if the tile is blocked by a multipart + for (IMicroblock microblock : baseTile.getMicroblockContainer().getParts()) { + if (microblock instanceof IMicroblock.IFaceMicroblock && baseTile.getPos().offset(((IMicroblock.IFaceMicroblock) microblock).getFace()).equals(pos)) { + return false; + } + } + // Do not render a cable extension to on this position when we have a direction (like an exporter, importer or external storage) if (getPlacementType() != null) { - return ((TileBase) world.getTileEntity(basePos)).getFacingTile() != tile; + return baseTile.getFacingTile() != tile; } return true; @@ -90,8 +148,94 @@ public class BlockCable extends BlockNode { return false; } - @Override protected EnumPlacementType getPlacementType() { return null; } + + @Override + public IBlockState onBlockPlaced(World world, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase entity) { + IBlockState state = super.onBlockPlaced(world, pos, facing, hitX, hitY, hitZ, meta, entity); + + if (getPlacementType() != null) { + return state.withProperty(DIRECTION, getPlacementType().getFrom(facing, entity)); + } + + return state; + } + + @Override + public void onBlockPlacedBy(World world, BlockPos pos, IBlockState state, EntityLivingBase player, ItemStack stack) { + super.onBlockPlacedBy(world, pos, state, player, stack); + + if (getPlacementType() != null) { + ((TileBase) world.getTileEntity(pos)).setDirection(state.getValue(DIRECTION)); + } + + if (!world.isRemote) { + for (EnumFacing facing : EnumFacing.VALUES) { + TileEntity tile = world.getTileEntity(pos.offset(facing)); + + if (tile instanceof TileNode && ((TileNode) tile).isConnected()) { + NetworkUtils.rebuildGraph(((TileNode) tile).getNetwork()); + break; + } + } + } + } + + @Override + public void breakBlock(World world, BlockPos pos, IBlockState state) { + INetworkMaster network = null; + + if (!world.isRemote) { + TileEntity tile = world.getTileEntity(pos); + + if (tile instanceof TileNode) { + network = ((TileNode) tile).getNetwork(); + } + + if (tile instanceof TileBase && ((TileBase) tile).getDroppedItems() != null) { + IItemHandler handler = ((TileBase) tile).getDroppedItems(); + + for (int i = 0; i < handler.getSlots(); ++i) { + if (handler.getStackInSlot(i) != null) { + InventoryHelper.spawnItemStack(world, pos.getX(), pos.getY(), pos.getZ(), handler.getStackInSlot(i)); + } + } + } + } + + super.breakBlock(world, pos, state); + + if (network != null) { + NetworkUtils.rebuildGraph(network); + } + } + + @Override + public boolean removedByPlayerDefault(IBlockState state, World world, BlockPos pos, EntityPlayer player, boolean willHarvest) { + return willHarvest ? true : super.removedByPlayerDefault(state, world, pos, player, willHarvest); + } + + @Override + public void harvestBlockDefault(World world, EntityPlayer player, BlockPos pos, IBlockState state, TileEntity tile, ItemStack stack) { + super.harvestBlockDefault(world, player, pos, state, tile, stack); + + world.setBlockToAir(pos); + } + + @Override + public boolean rotateBlock(World world, BlockPos pos, EnumFacing axis) { + if (!world.isRemote && getPlacementType() != null) { + TileBase tile = (TileBase) world.getTileEntity(pos); + + tile.setDirection(getPlacementType().getNext(tile.getDirection())); + + tile.updateBlock(); + + return true; + } + + return false; + } } diff --git a/src/main/java/refinedstorage/block/BlockConstructor.java b/src/main/java/refinedstorage/block/BlockConstructor.java index d5a879d85..83e612259 100755 --- a/src/main/java/refinedstorage/block/BlockConstructor.java +++ b/src/main/java/refinedstorage/block/BlockConstructor.java @@ -23,7 +23,7 @@ public class BlockConstructor extends BlockCable { } @Override - public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) { + public boolean onBlockActivatedDefault(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) { if (!world.isRemote) { player.openGui(RefinedStorage.INSTANCE, RefinedStorageGui.CONSTRUCTOR, world, pos.getX(), pos.getY(), pos.getZ()); } diff --git a/src/main/java/refinedstorage/block/BlockDestructor.java b/src/main/java/refinedstorage/block/BlockDestructor.java index 77f81f85c..8eefd2eb3 100755 --- a/src/main/java/refinedstorage/block/BlockDestructor.java +++ b/src/main/java/refinedstorage/block/BlockDestructor.java @@ -23,7 +23,7 @@ public class BlockDestructor extends BlockCable { } @Override - public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) { + public boolean onBlockActivatedDefault(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) { if (!world.isRemote) { player.openGui(RefinedStorage.INSTANCE, RefinedStorageGui.DESTRUCTOR, world, pos.getX(), pos.getY(), pos.getZ()); } diff --git a/src/main/java/refinedstorage/block/BlockExporter.java b/src/main/java/refinedstorage/block/BlockExporter.java index 3b54455db..acd749c57 100755 --- a/src/main/java/refinedstorage/block/BlockExporter.java +++ b/src/main/java/refinedstorage/block/BlockExporter.java @@ -23,7 +23,7 @@ public class BlockExporter extends BlockCable { } @Override - public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) { + public boolean onBlockActivatedDefault(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) { if (!world.isRemote) { player.openGui(RefinedStorage.INSTANCE, RefinedStorageGui.EXPORTER, world, pos.getX(), pos.getY(), pos.getZ()); } diff --git a/src/main/java/refinedstorage/block/BlockExternalStorage.java b/src/main/java/refinedstorage/block/BlockExternalStorage.java index 54ad9a34e..3f7ca2d27 100755 --- a/src/main/java/refinedstorage/block/BlockExternalStorage.java +++ b/src/main/java/refinedstorage/block/BlockExternalStorage.java @@ -24,7 +24,7 @@ public class BlockExternalStorage extends BlockCable { } @Override - public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) { + public boolean onBlockActivatedDefault(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) { if (!world.isRemote) { player.openGui(RefinedStorage.INSTANCE, RefinedStorageGui.STORAGE, world, pos.getX(), pos.getY(), pos.getZ()); } @@ -33,8 +33,8 @@ public class BlockExternalStorage extends BlockCable { } @Override - public void neighborChanged(IBlockState state, World world, BlockPos pos, Block block) { - super.neighborChanged(state, world, pos, block); + public void onNeighborBlockChangeDefault(World world, BlockPos pos, IBlockState state, Block neighborBlock) { + super.onNeighborBlockChangeDefault(world, pos, state, neighborBlock); if (!world.isRemote) { TileExternalStorage externalStorage = (TileExternalStorage) world.getTileEntity(pos); diff --git a/src/main/java/refinedstorage/block/BlockImporter.java b/src/main/java/refinedstorage/block/BlockImporter.java index cae887e19..bcb082e9f 100755 --- a/src/main/java/refinedstorage/block/BlockImporter.java +++ b/src/main/java/refinedstorage/block/BlockImporter.java @@ -23,7 +23,7 @@ public class BlockImporter extends BlockCable { } @Override - public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) { + public boolean onBlockActivatedDefault(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) { if (!world.isRemote) { player.openGui(RefinedStorage.INSTANCE, RefinedStorageGui.IMPORTER, world, pos.getX(), pos.getY(), pos.getZ()); } diff --git a/src/main/java/refinedstorage/gui/grid/GuiGrid.java b/src/main/java/refinedstorage/gui/grid/GuiGrid.java index 7ffcf2973..70fb6295d 100755 --- a/src/main/java/refinedstorage/gui/grid/GuiGrid.java +++ b/src/main/java/refinedstorage/gui/grid/GuiGrid.java @@ -398,6 +398,7 @@ public class GuiGrid extends GuiBase { } } + // @TODO: This is buggy... public static void updateSearchFieldFocus(int mode) { SEARCH_FIELD.setCanLoseFocus(!TileGrid.isSearchBoxModeWithAutoselection(mode)); SEARCH_FIELD.setFocused(TileGrid.isSearchBoxModeWithAutoselection(mode)); diff --git a/src/main/java/refinedstorage/proxy/ClientProxy.java b/src/main/java/refinedstorage/proxy/ClientProxy.java index 58182e494..e2db9c271 100755 --- a/src/main/java/refinedstorage/proxy/ClientProxy.java +++ b/src/main/java/refinedstorage/proxy/ClientProxy.java @@ -1,30 +1,53 @@ package refinedstorage.proxy; -import net.minecraft.client.Minecraft; +import com.google.common.base.Predicate; +import mcmultipart.client.multipart.ModelMultipartContainer; import net.minecraft.client.renderer.block.model.ModelBakery; import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.client.renderer.block.statemap.StateMap; import net.minecraft.item.Item; +import net.minecraft.util.BlockRenderLayer; import net.minecraft.util.ResourceLocation; -import net.minecraft.world.World; +import net.minecraftforge.client.event.ModelBakeEvent; import net.minecraftforge.client.model.ModelLoader; +import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import refinedstorage.RefinedStorage; import refinedstorage.RefinedStorageBlocks; import refinedstorage.RefinedStorageItems; +import refinedstorage.block.BlockCable; import refinedstorage.block.EnumControllerType; import refinedstorage.block.EnumGridType; import refinedstorage.block.EnumStorageType; import refinedstorage.item.*; +import javax.annotation.Nullable; + public class ClientProxy extends CommonProxy { - public static World getWorld() { - return Minecraft.getMinecraft().theWorld; + @SubscribeEvent + public void onModelBake(ModelBakeEvent e) { + System.out.println("Model bake event called."); + for (ModelResourceLocation model : e.getModelRegistry().getKeys()) { + for (BlockCable cable : cables) { + if (model.getResourceDomain().equals(RefinedStorage.ID) && model.getResourcePath().equals(cable.getName()) && !model.getVariant().equals("inventory")) { + e.getModelRegistry().putObject(model, new ModelMultipartContainer(e.getModelRegistry().getObject(model), new Predicate() { + @Override + public boolean apply(@Nullable BlockRenderLayer input) { + return cable.canRenderInLayer(input); + } + })); + } + } + } } @Override public void preInit(FMLPreInitializationEvent e) { super.preInit(e); + MinecraftForge.EVENT_BUS.register(this); + // Item Variants ModelBakery.registerItemVariants(RefinedStorageItems.STORAGE_DISK, new ResourceLocation("refinedstorage:1k_storage_disk"), diff --git a/src/main/java/refinedstorage/proxy/CommonProxy.java b/src/main/java/refinedstorage/proxy/CommonProxy.java index 695f832c8..d3914690e 100755 --- a/src/main/java/refinedstorage/proxy/CommonProxy.java +++ b/src/main/java/refinedstorage/proxy/CommonProxy.java @@ -4,6 +4,7 @@ import net.minecraft.block.Block; import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.item.Item; +import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemStack; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.fml.common.event.FMLInitializationEvent; @@ -20,10 +21,7 @@ import refinedstorage.RefinedStorageItems; import refinedstorage.api.RefinedStorageAPI; import refinedstorage.apiimpl.solderer.*; import refinedstorage.apiimpl.storage.NBTStorage; -import refinedstorage.block.BlockBase; -import refinedstorage.block.EnumControllerType; -import refinedstorage.block.EnumGridType; -import refinedstorage.block.EnumStorageType; +import refinedstorage.block.*; import refinedstorage.gui.GuiHandler; import refinedstorage.item.*; import refinedstorage.network.*; @@ -32,9 +30,14 @@ import refinedstorage.tile.data.ContainerListener; import refinedstorage.tile.externalstorage.TileExternalStorage; import refinedstorage.tile.grid.TileGrid; +import java.util.ArrayList; +import java.util.List; + import static refinedstorage.RefinedStorage.ID; public class CommonProxy { + protected List cables = new ArrayList<>(); + public void preInit(FMLPreInitializationEvent e) { RefinedStorageAPI.SOLDERER_REGISTRY = new SoldererRegistry(); @@ -528,6 +531,13 @@ public class CommonProxy { GameRegistry.register(block.createItem()); } + private void registerBlock(BlockCable cable) { + GameRegistry.register(cable); + GameRegistry.register(new ItemBlock(cable).setRegistryName(cable.getRegistryName())); + + cables.add(cable); + } + private void registerItem(Item item) { GameRegistry.register(item); } diff --git a/src/main/java/refinedstorage/tile/TileCable.java b/src/main/java/refinedstorage/tile/TileCable.java index 6fa1a35be..b76b70a05 100755 --- a/src/main/java/refinedstorage/tile/TileCable.java +++ b/src/main/java/refinedstorage/tile/TileCable.java @@ -2,7 +2,7 @@ package refinedstorage.tile; import refinedstorage.RefinedStorage; -public class TileCable extends TileNode { +public class TileCable extends TileMultipartNode { @Override public int getEnergyUsage() { return RefinedStorage.INSTANCE.cableUsage; diff --git a/src/main/java/refinedstorage/tile/TileConstructor.java b/src/main/java/refinedstorage/tile/TileConstructor.java index 5b80e653a..d361a8502 100755 --- a/src/main/java/refinedstorage/tile/TileConstructor.java +++ b/src/main/java/refinedstorage/tile/TileConstructor.java @@ -19,7 +19,7 @@ import refinedstorage.item.ItemUpgrade; import refinedstorage.tile.config.IComparable; import refinedstorage.tile.data.TileDataParameter; -public class TileConstructor extends TileNode implements IComparable { +public class TileConstructor extends TileMultipartNode implements IComparable { public static final TileDataParameter COMPARE = IComparable.createParameter(); private static final String NBT_COMPARE = "Compare"; diff --git a/src/main/java/refinedstorage/tile/TileDestructor.java b/src/main/java/refinedstorage/tile/TileDestructor.java index 2dfc3023b..2424d46fc 100755 --- a/src/main/java/refinedstorage/tile/TileDestructor.java +++ b/src/main/java/refinedstorage/tile/TileDestructor.java @@ -20,7 +20,7 @@ import refinedstorage.tile.data.TileDataParameter; import java.util.List; -public class TileDestructor extends TileNode implements IComparable, IFilterable { +public class TileDestructor extends TileMultipartNode implements IComparable, IFilterable { public static final TileDataParameter COMPARE = IComparable.createParameter(); public static final TileDataParameter MODE = IFilterable.createParameter(); diff --git a/src/main/java/refinedstorage/tile/TileExporter.java b/src/main/java/refinedstorage/tile/TileExporter.java index 882de9d76..78c66e634 100755 --- a/src/main/java/refinedstorage/tile/TileExporter.java +++ b/src/main/java/refinedstorage/tile/TileExporter.java @@ -15,7 +15,7 @@ import refinedstorage.item.ItemUpgrade; import refinedstorage.tile.config.IComparable; import refinedstorage.tile.data.TileDataParameter; -public class TileExporter extends TileNode implements IComparable { +public class TileExporter extends TileMultipartNode implements IComparable { public static final TileDataParameter COMPARE = IComparable.createParameter(); private static final String NBT_COMPARE = "Compare"; diff --git a/src/main/java/refinedstorage/tile/TileImporter.java b/src/main/java/refinedstorage/tile/TileImporter.java index 11d33b94a..045dab5bf 100755 --- a/src/main/java/refinedstorage/tile/TileImporter.java +++ b/src/main/java/refinedstorage/tile/TileImporter.java @@ -14,7 +14,7 @@ import refinedstorage.tile.config.IComparable; import refinedstorage.tile.config.IFilterable; import refinedstorage.tile.data.TileDataParameter; -public class TileImporter extends TileNode implements IComparable, IFilterable { +public class TileImporter extends TileMultipartNode implements IComparable, IFilterable { public static final TileDataParameter COMPARE = IComparable.createParameter(); public static final TileDataParameter MODE = IFilterable.createParameter(); diff --git a/src/main/java/refinedstorage/tile/TileMultipartNode.java b/src/main/java/refinedstorage/tile/TileMultipartNode.java new file mode 100755 index 000000000..0e8e374b1 --- /dev/null +++ b/src/main/java/refinedstorage/tile/TileMultipartNode.java @@ -0,0 +1,148 @@ +package refinedstorage.tile; + +import mcmultipart.capabilities.ISlottedCapabilityProvider; +import mcmultipart.capabilities.MultipartCapabilityHelper; +import mcmultipart.microblock.IMicroblock; +import mcmultipart.microblock.IMicroblockContainerTile; +import mcmultipart.microblock.MicroblockContainer; +import mcmultipart.multipart.IMultipart; +import mcmultipart.multipart.PartSlot; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.common.capabilities.Capability; + +public abstract class TileMultipartNode extends TileNode implements IMicroblockContainerTile, ISlottedCapabilityProvider { + private MicroblockContainer container; + + @Override + public World getWorldIn() { + return getWorld(); + } + + @Override + public BlockPos getPosIn() { + return getPos(); + } + + @Override + public MicroblockContainer getMicroblockContainer() { + return container != null ? container : (container = new MicroblockContainer(this)); + } + + @Override + public boolean canAddMicroblock(IMicroblock microblock) { + return microblock instanceof IMicroblock.IFaceMicroblock; + } + + @Override + public void onMicroblocksChanged() { + markDirty(); + } + + @Override + public boolean hasCapability(Capability capability, EnumFacing facing) { + if (super.hasCapability(capability, facing)) { + return true; + } + + return MultipartCapabilityHelper.hasCapability(container, capability, facing); + } + + @Override + public T getCapability(Capability capability, EnumFacing facing) { + T impl = super.getCapability(capability, facing); + + if (impl != null) { + return impl; + } + + return MultipartCapabilityHelper.getCapability(container, capability, facing); + } + + @Override + public boolean hasCapability(Capability capability, PartSlot slot, EnumFacing facing) { + return container.hasCapability(capability, slot, facing); + } + + @Override + public T getCapability(Capability capability, PartSlot slot, EnumFacing facing) { + return container.getCapability(capability, slot, facing); + } + + @Override + public void onLoad() { + super.onLoad(); + + for (IMultipart part : getMicroblockContainer().getParts()) { + part.onLoaded(); + } + } + + @Override + public void onChunkUnload() { + super.onChunkUnload(); + + for (IMultipart part : getMicroblockContainer().getParts()) { + part.onUnloaded(); + } + } + + @Override + public NBTTagCompound write(NBTTagCompound tag) { + super.write(tag); + + getMicroblockContainer().getPartContainer().writeToNBT(tag); + + return tag; + } + + @Override + public void read(NBTTagCompound tag) { + super.read(tag); + + getMicroblockContainer().getPartContainer().readFromNBT(tag); + } + + @Override + public NBTTagCompound writeUpdate(NBTTagCompound tag) { + super.writeUpdate(tag); + + getMicroblockContainer().getPartContainer().writeToNBT(tag); + + return tag; + } + + @Override + public void readUpdate(NBTTagCompound tag) { + getMicroblockContainer().getPartContainer().readFromNBT(tag); + + super.readUpdate(tag); + } + + @Override + public boolean canRenderBreaking() { + return true; + } + + @Override + public boolean shouldRenderInPass(int pass) { + return true; + } + + @Override + public AxisAlignedBB getRenderBoundingBox() { + AxisAlignedBB bounds = super.getRenderBoundingBox().offset(-getPosIn().getX(), -getPosIn().getY(), -getPosIn().getZ()); + + for (IMultipart part : getMicroblockContainer().getParts()) { + AxisAlignedBB bb = part.getRenderBoundingBox(); + if (bb != null) { + bounds = bounds.union(bb); + } + } + + return bounds.offset(getPosIn().getX(), getPosIn().getY(), getPosIn().getZ()); + } +} \ No newline at end of file diff --git a/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java b/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java index f7ec81146..ba0165c82 100755 --- a/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java +++ b/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java @@ -13,7 +13,7 @@ import refinedstorage.api.storage.IStorage; import refinedstorage.api.storage.IStorageProvider; import refinedstorage.inventory.ItemHandlerBasic; import refinedstorage.tile.IStorageGui; -import refinedstorage.tile.TileNode; +import refinedstorage.tile.TileMultipartNode; import refinedstorage.tile.config.IComparable; import refinedstorage.tile.config.IFilterable; import refinedstorage.tile.config.IPrioritizable; @@ -24,7 +24,7 @@ import refinedstorage.tile.data.TileDataParameter; import java.util.ArrayList; import java.util.List; -public class TileExternalStorage extends TileNode implements IStorageProvider, IStorageGui, IComparable, IFilterable, IPrioritizable { +public class TileExternalStorage extends TileMultipartNode implements IStorageProvider, IStorageGui, IComparable, IFilterable, IPrioritizable { public static final TileDataParameter PRIORITY = IPrioritizable.createParameter(); public static final TileDataParameter COMPARE = IComparable.createParameter(); public static final TileDataParameter MODE = IFilterable.createParameter(); From c1081e6352b121af69dbf6ea8d72321fb427cad3 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sat, 6 Aug 2016 02:12:01 +0200 Subject: [PATCH 102/214] Check if multipart can conduct network signal --- .../api/network/INetworkNode.java | 4 +- .../apiimpl/network/NetworkNodeGraph.java | 4 +- .../java/refinedstorage/block/BlockCable.java | 40 ++++++------- .../tile/TileMultipartNode.java | 59 ++++++++++++++++++- .../java/refinedstorage/tile/TileNode.java | 3 +- .../java/refinedstorage/tile/TileRelay.java | 3 +- .../tile/TileWirelessTransmitter.java | 2 +- 7 files changed, 86 insertions(+), 29 deletions(-) diff --git a/src/main/java/refinedstorage/api/network/INetworkNode.java b/src/main/java/refinedstorage/api/network/INetworkNode.java index 4320b5e40..7937218fd 100755 --- a/src/main/java/refinedstorage/api/network/INetworkNode.java +++ b/src/main/java/refinedstorage/api/network/INetworkNode.java @@ -1,5 +1,6 @@ package refinedstorage.api.network; +import net.minecraft.util.EnumFacing; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; @@ -56,9 +57,10 @@ public interface INetworkNode { boolean canUpdate(); /** + * @param direction The direction to conduct to * @return Whether this node can conduct a network signal */ - boolean canConduct(); + boolean canConduct(EnumFacing direction); /** * @return The network diff --git a/src/main/java/refinedstorage/apiimpl/network/NetworkNodeGraph.java b/src/main/java/refinedstorage/apiimpl/network/NetworkNodeGraph.java index fbba0e23a..5efa54eb0 100755 --- a/src/main/java/refinedstorage/apiimpl/network/NetworkNodeGraph.java +++ b/src/main/java/refinedstorage/apiimpl/network/NetworkNodeGraph.java @@ -99,8 +99,8 @@ public class NetworkNodeGraph implements INetworkNodeGraph { } } - if (node.canConduct()) { - for (EnumFacing facing : EnumFacing.VALUES) { + for (EnumFacing facing : EnumFacing.VALUES) { + if (node.canConduct(facing)) { BlockPos pos = currentPos.offset(facing); if (checked.add(pos)) { diff --git a/src/main/java/refinedstorage/block/BlockCable.java b/src/main/java/refinedstorage/block/BlockCable.java index 7eca9eb20..44cbb3091 100755 --- a/src/main/java/refinedstorage/block/BlockCable.java +++ b/src/main/java/refinedstorage/block/BlockCable.java @@ -2,7 +2,6 @@ package refinedstorage.block; import mcmultipart.block.BlockCoverable; import mcmultipart.block.BlockMultipartContainer; -import mcmultipart.microblock.IMicroblock; import net.minecraft.block.material.Material; import net.minecraft.block.properties.PropertyBool; import net.minecraft.block.properties.PropertyDirection; @@ -96,12 +95,12 @@ public class BlockCable extends BlockCoverable { @Override public IBlockState getActualState(IBlockState state, IBlockAccess world, BlockPos pos) { state = super.getActualState(state, world, pos) - .withProperty(NORTH, hasConnectionWith(world, pos, pos.north())) - .withProperty(EAST, hasConnectionWith(world, pos, pos.east())) - .withProperty(SOUTH, hasConnectionWith(world, pos, pos.south())) - .withProperty(WEST, hasConnectionWith(world, pos, pos.west())) - .withProperty(UP, hasConnectionWith(world, pos, pos.up())) - .withProperty(DOWN, hasConnectionWith(world, pos, pos.down())); + .withProperty(NORTH, hasConnectionWith(world, pos, EnumFacing.NORTH)) + .withProperty(EAST, hasConnectionWith(world, pos, EnumFacing.EAST)) + .withProperty(SOUTH, hasConnectionWith(world, pos, EnumFacing.SOUTH)) + .withProperty(WEST, hasConnectionWith(world, pos, EnumFacing.WEST)) + .withProperty(UP, hasConnectionWith(world, pos, EnumFacing.UP)) + .withProperty(DOWN, hasConnectionWith(world, pos, EnumFacing.DOWN)); if (getPlacementType() != null) { state = state.withProperty(DIRECTION, ((TileNode) world.getTileEntity(pos)).getDirection()); @@ -110,24 +109,16 @@ public class BlockCable extends BlockCoverable { return state; } - private boolean hasConnectionWith(IBlockAccess world, BlockPos basePos, BlockPos pos) { - TileMultipartNode baseTile = (TileMultipartNode) world.getTileEntity(basePos); - TileEntity tile = world.getTileEntity(pos); + private boolean hasConnectionWith(IBlockAccess world, BlockPos pos, EnumFacing direction) { + TileEntity facing = world.getTileEntity(pos.offset(direction)); - if (tile instanceof INetworkMaster || tile instanceof INetworkNode) { - // Do not render a cable extension if the tile is blocked by a multipart - for (IMicroblock microblock : baseTile.getMicroblockContainer().getParts()) { - if (microblock instanceof IMicroblock.IFaceMicroblock && baseTile.getPos().offset(((IMicroblock.IFaceMicroblock) microblock).getFace()).equals(pos)) { - return false; - } - } - - // Do not render a cable extension to on this position when we have a direction (like an exporter, importer or external storage) + if (facing instanceof INetworkMaster || facing instanceof INetworkNode) { + /*// Do not render a cable extension to on this position when we have a direction (like an exporter, importer or external storage) if (getPlacementType() != null) { - return baseTile.getFacingTile() != tile; - } + return tile.getFacingTile() != facing; + }*/ - return true; + return !TileMultipartNode.hasBlockingMicroblock(world, pos, direction); } return false; @@ -171,12 +162,17 @@ public class BlockCable extends BlockCoverable { ((TileBase) world.getTileEntity(pos)).setDirection(state.getValue(DIRECTION)); } + attemptConnect(world, pos); + } + + public void attemptConnect(World world, BlockPos pos) { if (!world.isRemote) { for (EnumFacing facing : EnumFacing.VALUES) { TileEntity tile = world.getTileEntity(pos.offset(facing)); if (tile instanceof TileNode && ((TileNode) tile).isConnected()) { NetworkUtils.rebuildGraph(((TileNode) tile).getNetwork()); + break; } } diff --git a/src/main/java/refinedstorage/tile/TileMultipartNode.java b/src/main/java/refinedstorage/tile/TileMultipartNode.java index 0e8e374b1..2c997664b 100755 --- a/src/main/java/refinedstorage/tile/TileMultipartNode.java +++ b/src/main/java/refinedstorage/tile/TileMultipartNode.java @@ -6,13 +6,18 @@ import mcmultipart.microblock.IMicroblock; import mcmultipart.microblock.IMicroblockContainerTile; import mcmultipart.microblock.MicroblockContainer; import mcmultipart.multipart.IMultipart; +import mcmultipart.multipart.IMultipartContainer; import mcmultipart.multipart.PartSlot; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumFacing; import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.common.capabilities.Capability; +import refinedstorage.RefinedStorageBlocks; +import refinedstorage.api.network.NetworkUtils; public abstract class TileMultipartNode extends TileNode implements IMicroblockContainerTile, ISlottedCapabilityProvider { private MicroblockContainer container; @@ -29,7 +34,30 @@ public abstract class TileMultipartNode extends TileNode implements IMicroblockC @Override public MicroblockContainer getMicroblockContainer() { - return container != null ? container : (container = new MicroblockContainer(this)); + if (container == null) { + container = new MicroblockContainer(this); + container.getPartContainer().setListener(new IMultipartContainer.IMultipartContainerListener() { + @Override + public void onAddPartPre(IMultipart part) { + } + + @Override + public void onAddPartPost(IMultipart part) { + onMicroblocksChanged(); + } + + @Override + public void onRemovePartPre(IMultipart part) { + } + + @Override + public void onRemovePartPost(IMultipart part) { + onMicroblocksChanged(); + } + }); + } + + return container; } @Override @@ -40,6 +68,35 @@ public abstract class TileMultipartNode extends TileNode implements IMicroblockC @Override public void onMicroblocksChanged() { markDirty(); + + if (network != null) { + NetworkUtils.rebuildGraph(network); + } else { + RefinedStorageBlocks.CABLE.attemptConnect(worldObj, pos); + } + } + + public static boolean hasBlockingMicroblock(IBlockAccess world, BlockPos pos, EnumFacing direction) { + TileEntity tile = world.getTileEntity(pos); + + if (tile instanceof TileMultipartNode) { + for (IMicroblock microblock : ((TileMultipartNode) tile).getMicroblockContainer().getParts()) { + if (microblock instanceof IMicroblock.IFaceMicroblock) { + IMicroblock.IFaceMicroblock faceMicroblock = (IMicroblock.IFaceMicroblock) microblock; + + if (faceMicroblock.getFace() == direction && !faceMicroblock.isFaceHollow()) { + return true; + } + } + } + } + + return false; + } + + @Override + public boolean canConduct(EnumFacing direction) { + return !hasBlockingMicroblock(worldObj, pos, direction) && !hasBlockingMicroblock(worldObj, pos.offset(direction), direction.getOpposite()); } @Override diff --git a/src/main/java/refinedstorage/tile/TileNode.java b/src/main/java/refinedstorage/tile/TileNode.java index ec4a2e1a8..042891f0a 100755 --- a/src/main/java/refinedstorage/tile/TileNode.java +++ b/src/main/java/refinedstorage/tile/TileNode.java @@ -2,6 +2,7 @@ package refinedstorage.tile; import net.minecraft.block.Block; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import refinedstorage.api.network.INetworkMaster; @@ -93,7 +94,7 @@ public abstract class TileNode extends TileBase implements INetworkNode, IRedsto } @Override - public boolean canConduct() { + public boolean canConduct(EnumFacing direction) { return true; } diff --git a/src/main/java/refinedstorage/tile/TileRelay.java b/src/main/java/refinedstorage/tile/TileRelay.java index 0c8a4d7ef..d41e9788b 100755 --- a/src/main/java/refinedstorage/tile/TileRelay.java +++ b/src/main/java/refinedstorage/tile/TileRelay.java @@ -1,5 +1,6 @@ package refinedstorage.tile; +import net.minecraft.util.EnumFacing; import refinedstorage.RefinedStorage; import refinedstorage.tile.config.RedstoneMode; @@ -20,7 +21,7 @@ public class TileRelay extends TileNode { } @Override - public boolean canConduct() { + public boolean canConduct(EnumFacing direction) { return canUpdate(); } } diff --git a/src/main/java/refinedstorage/tile/TileWirelessTransmitter.java b/src/main/java/refinedstorage/tile/TileWirelessTransmitter.java index 12368e45e..ff5ba6bd1 100755 --- a/src/main/java/refinedstorage/tile/TileWirelessTransmitter.java +++ b/src/main/java/refinedstorage/tile/TileWirelessTransmitter.java @@ -71,7 +71,7 @@ public class TileWirelessTransmitter extends TileNode implements IWirelessTransm } @Override - public boolean canConduct() { + public boolean canConduct(EnumFacing direction) { return false; } From 23d997203d2ea06297f7224f6198a530b8827ecb Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sat, 6 Aug 2016 02:35:23 +0200 Subject: [PATCH 103/214] Fix cable extensions --- src/main/java/refinedstorage/block/BlockCable.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main/java/refinedstorage/block/BlockCable.java b/src/main/java/refinedstorage/block/BlockCable.java index 44cbb3091..12b7e7e6f 100755 --- a/src/main/java/refinedstorage/block/BlockCable.java +++ b/src/main/java/refinedstorage/block/BlockCable.java @@ -110,15 +110,16 @@ public class BlockCable extends BlockCoverable { } private boolean hasConnectionWith(IBlockAccess world, BlockPos pos, EnumFacing direction) { + TileMultipartNode tile = (TileMultipartNode) world.getTileEntity(pos); TileEntity facing = world.getTileEntity(pos.offset(direction)); if (facing instanceof INetworkMaster || facing instanceof INetworkNode) { - /*// Do not render a cable extension to on this position when we have a direction (like an exporter, importer or external storage) + // Do not render a cable extension where our cable "head" is (e.g. importer, exporter, external storage cubes). if (getPlacementType() != null) { return tile.getFacingTile() != facing; - }*/ + } - return !TileMultipartNode.hasBlockingMicroblock(world, pos, direction); + return !TileMultipartNode.hasBlockingMicroblock(world, pos, direction) && !TileMultipartNode.hasBlockingMicroblock(world, pos.offset(direction), direction.getOpposite()); } return false; From 2ee2573ee6ebe1a706f53624183646df8c2176a0 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sat, 6 Aug 2016 02:43:50 +0200 Subject: [PATCH 104/214] Only use getter when needed --- src/main/java/refinedstorage/block/BlockCable.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/refinedstorage/block/BlockCable.java b/src/main/java/refinedstorage/block/BlockCable.java index 12b7e7e6f..bedd42bf5 100755 --- a/src/main/java/refinedstorage/block/BlockCable.java +++ b/src/main/java/refinedstorage/block/BlockCable.java @@ -110,13 +110,12 @@ public class BlockCable extends BlockCoverable { } private boolean hasConnectionWith(IBlockAccess world, BlockPos pos, EnumFacing direction) { - TileMultipartNode tile = (TileMultipartNode) world.getTileEntity(pos); TileEntity facing = world.getTileEntity(pos.offset(direction)); if (facing instanceof INetworkMaster || facing instanceof INetworkNode) { // Do not render a cable extension where our cable "head" is (e.g. importer, exporter, external storage cubes). if (getPlacementType() != null) { - return tile.getFacingTile() != facing; + return ((TileMultipartNode) world.getTileEntity(pos)).getFacingTile() != facing; } return !TileMultipartNode.hasBlockingMicroblock(world, pos, direction) && !TileMultipartNode.hasBlockingMicroblock(world, pos.offset(direction), direction.getOpposite()); From 7604b7ce4e4f30027a02a6bd1c3bd630e8dde883 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sat, 6 Aug 2016 02:46:54 +0200 Subject: [PATCH 105/214] Update changelog --- CHANGELOG.md | 6 ++++-- build.gradle | 3 +++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3c60275eb..f809b1823 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,15 +5,17 @@ - Fixed issue with IC2 integration causing console spam - Slight performance improvement in GUI's - Fixed not being able to change some configs in blocks -- Fixed serverside configs not syncing up with clientside sometimes +- Fixed serverside configs not syncing up with clientside **Features** - Added German translation by ChillUpX - Each Grid Filter can now only filter 9 items - Each Grid allows 4 Grid Filters instead of 1 - Grid Filters can now be configured to compare on NBT and/ or damage -- Updated to Forge 2045 +- Updated to Forge 2046 - Updated Tesla +- Java 8 is now a requirement +- Added MCMultiPart integration ### 0.8.15 **Bugfixes** diff --git a/build.gradle b/build.gradle index 7744eda0c..6f57ab7b9 100755 --- a/build.gradle +++ b/build.gradle @@ -16,6 +16,9 @@ version = "0.8.16" group = "refinedstorage" archivesBaseName = "refinedstorage" +sourceCompatibility = 1.8 +targetCompatibility = 1.8 + minecraft { version = "1.10.2-12.18.1.2046" runDir = "run" From fd1cda1863e075c66d962a22cc6bf51d0606e5ed Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sat, 6 Aug 2016 14:00:07 +0200 Subject: [PATCH 106/214] Small improvements --- src/main/java/refinedstorage/block/BlockCable.java | 3 ++- src/main/java/refinedstorage/proxy/ClientProxy.java | 12 +----------- .../java/refinedstorage/tile/TileMultipartNode.java | 1 + 3 files changed, 4 insertions(+), 12 deletions(-) diff --git a/src/main/java/refinedstorage/block/BlockCable.java b/src/main/java/refinedstorage/block/BlockCable.java index bedd42bf5..82dd64ecb 100755 --- a/src/main/java/refinedstorage/block/BlockCable.java +++ b/src/main/java/refinedstorage/block/BlockCable.java @@ -74,6 +74,7 @@ public class BlockCable extends BlockCoverable { return new TileCable(); } + @Override protected BlockStateContainer createBlockState() { BlockStateContainer.Builder builder = new BlockStateContainer.Builder(this); @@ -113,7 +114,7 @@ public class BlockCable extends BlockCoverable { TileEntity facing = world.getTileEntity(pos.offset(direction)); if (facing instanceof INetworkMaster || facing instanceof INetworkNode) { - // Do not render a cable extension where our cable "head" is (e.g. importer, exporter, external storage cubes). + // Do not render a cable extension where our cable "head" is (e.g. importer, exporter, external storage heads). if (getPlacementType() != null) { return ((TileMultipartNode) world.getTileEntity(pos)).getFacingTile() != facing; } diff --git a/src/main/java/refinedstorage/proxy/ClientProxy.java b/src/main/java/refinedstorage/proxy/ClientProxy.java index e2db9c271..82a9439be 100755 --- a/src/main/java/refinedstorage/proxy/ClientProxy.java +++ b/src/main/java/refinedstorage/proxy/ClientProxy.java @@ -1,12 +1,10 @@ package refinedstorage.proxy; -import com.google.common.base.Predicate; import mcmultipart.client.multipart.ModelMultipartContainer; import net.minecraft.client.renderer.block.model.ModelBakery; import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.client.renderer.block.statemap.StateMap; import net.minecraft.item.Item; -import net.minecraft.util.BlockRenderLayer; import net.minecraft.util.ResourceLocation; import net.minecraftforge.client.event.ModelBakeEvent; import net.minecraftforge.client.model.ModelLoader; @@ -22,21 +20,13 @@ import refinedstorage.block.EnumGridType; import refinedstorage.block.EnumStorageType; import refinedstorage.item.*; -import javax.annotation.Nullable; - public class ClientProxy extends CommonProxy { @SubscribeEvent public void onModelBake(ModelBakeEvent e) { - System.out.println("Model bake event called."); for (ModelResourceLocation model : e.getModelRegistry().getKeys()) { for (BlockCable cable : cables) { if (model.getResourceDomain().equals(RefinedStorage.ID) && model.getResourcePath().equals(cable.getName()) && !model.getVariant().equals("inventory")) { - e.getModelRegistry().putObject(model, new ModelMultipartContainer(e.getModelRegistry().getObject(model), new Predicate() { - @Override - public boolean apply(@Nullable BlockRenderLayer input) { - return cable.canRenderInLayer(input); - } - })); + e.getModelRegistry().putObject(model, new ModelMultipartContainer(e.getModelRegistry().getObject(model), input -> cable.canRenderInLayer(input))); } } } diff --git a/src/main/java/refinedstorage/tile/TileMultipartNode.java b/src/main/java/refinedstorage/tile/TileMultipartNode.java index 2c997664b..993222560 100755 --- a/src/main/java/refinedstorage/tile/TileMultipartNode.java +++ b/src/main/java/refinedstorage/tile/TileMultipartNode.java @@ -36,6 +36,7 @@ public abstract class TileMultipartNode extends TileNode implements IMicroblockC public MicroblockContainer getMicroblockContainer() { if (container == null) { container = new MicroblockContainer(this); + container.getPartContainer().setListener(new IMultipartContainer.IMultipartContainerListener() { @Override public void onAddPartPre(IMultipart part) { From 4166a447bb79df4073c1fc7662eea02f1388e218 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sat, 6 Aug 2016 15:29:24 +0200 Subject: [PATCH 107/214] Allow any microblock --- src/main/java/refinedstorage/tile/TileMultipartNode.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/refinedstorage/tile/TileMultipartNode.java b/src/main/java/refinedstorage/tile/TileMultipartNode.java index 993222560..2095975e4 100755 --- a/src/main/java/refinedstorage/tile/TileMultipartNode.java +++ b/src/main/java/refinedstorage/tile/TileMultipartNode.java @@ -63,7 +63,7 @@ public abstract class TileMultipartNode extends TileNode implements IMicroblockC @Override public boolean canAddMicroblock(IMicroblock microblock) { - return microblock instanceof IMicroblock.IFaceMicroblock; + return true; } @Override From aab92bbb17dd70ae26d8cf3014986962b708ce4e Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sat, 6 Aug 2016 16:52:21 +0200 Subject: [PATCH 108/214] Give cables realistic bounds, still have to draw the correct box --- .../java/refinedstorage/block/BlockCable.java | 80 ++++++++++++++++++- 1 file changed, 79 insertions(+), 1 deletion(-) diff --git a/src/main/java/refinedstorage/block/BlockCable.java b/src/main/java/refinedstorage/block/BlockCable.java index 82dd64ecb..b8c234de7 100755 --- a/src/main/java/refinedstorage/block/BlockCable.java +++ b/src/main/java/refinedstorage/block/BlockCable.java @@ -1,5 +1,6 @@ package refinedstorage.block; +import com.google.common.collect.Lists; import mcmultipart.block.BlockCoverable; import mcmultipart.block.BlockMultipartContainer; import net.minecraft.block.material.Material; @@ -7,6 +8,7 @@ import net.minecraft.block.properties.PropertyBool; import net.minecraft.block.properties.PropertyDirection; import net.minecraft.block.state.BlockStateContainer; import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.InventoryHelper; @@ -15,6 +17,8 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumFacing; import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.RayTraceResult; +import net.minecraft.util.math.Vec3d; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraftforge.items.IItemHandler; @@ -27,6 +31,8 @@ import refinedstorage.tile.TileCable; import refinedstorage.tile.TileMultipartNode; import refinedstorage.tile.TileNode; +import java.util.List; + public class BlockCable extends BlockCoverable { private static final PropertyDirection DIRECTION = PropertyDirection.create("direction"); @@ -125,9 +131,81 @@ public class BlockCable extends BlockCoverable { return false; } - @Override + /*@Override public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess world, BlockPos pos) { return CABLE_AABB; + }*/ + + private static AxisAlignedBB createaabb(int fromx, int fromy, int fromz, int tox, int toy, int toz) { + return new AxisAlignedBB((float) fromx / 16F, (float) fromy / 16F, (float) fromz / 16F, (float) tox / 16F, (float) toy / 16F, (float) toz / 16F); + } + + private static AxisAlignedBB core = createaabb(6, 6, 6, 10, 10, 10); + private static AxisAlignedBB north = createaabb(6, 6, 0, 10, 10, 6); + private static AxisAlignedBB east = createaabb(10, 6, 6, 16, 10, 10); + private static AxisAlignedBB south = createaabb(6, 6, 10, 10, 10, 16); + private static AxisAlignedBB west = createaabb(0, 6, 6, 6, 10, 10); + private static AxisAlignedBB up = createaabb(6, 10, 6, 10, 16, 10); + private static AxisAlignedBB down = createaabb(6, 0, 6, 10, 6, 10); + + private static List getCollisionBoxList(IBlockState bstate) { + List list = Lists.newArrayList(); + + list.add(core); + + if (bstate.getValue(NORTH) == true) { + list.add(north); + } + if (bstate.getValue(EAST) == true) { + list.add(east); + } + if (bstate.getValue(SOUTH) == true) { + list.add(south); + } + if (bstate.getValue(WEST) == true) { + list.add(west); + } + if (bstate.getValue(UP) == true) { + list.add(up); + } + if (bstate.getValue(DOWN) == true) { + list.add(down); + } + + return list; + } + + + @Override + public void addCollisionBoxToListDefault(IBlockState state, World world, BlockPos pos, AxisAlignedBB entityBox, List collidingBoxes, Entity entityIn) { + for (AxisAlignedBB axisalignedbb : getCollisionBoxList(this.getActualState(state, world, pos))) { + addCollisionBoxToList(pos, entityBox, collidingBoxes, axisalignedbb); + } + } + + @Override + public RayTraceResult collisionRayTraceDefault(IBlockState state, World world, BlockPos pos, Vec3d start, Vec3d end) { + List list = Lists.newArrayList(); + + for (AxisAlignedBB axisalignedbb : getCollisionBoxList(this.getActualState(state, world, pos))) { + list.add(this.rayTrace(pos, start, end, axisalignedbb)); + } + + RayTraceResult raytraceresult1 = null; + double d1 = 0.0D; + + for (RayTraceResult raytraceresult : list) { + if (raytraceresult != null) { + double d0 = raytraceresult.hitVec.squareDistanceTo(end); + + if (d0 > d1) { + raytraceresult1 = raytraceresult; + d1 = d0; + } + } + } + + return raytraceresult1; } @Override From 0531ace39e339c791561b0a26c2f31dce2edfc6e Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sat, 6 Aug 2016 18:14:32 +0200 Subject: [PATCH 109/214] Draw the correct cable bounding box --- .../java/refinedstorage/block/BlockCable.java | 105 +++++++----------- .../refinedstorage/proxy/ClientProxy.java | 87 +++++++++++++++ 2 files changed, 130 insertions(+), 62 deletions(-) diff --git a/src/main/java/refinedstorage/block/BlockCable.java b/src/main/java/refinedstorage/block/BlockCable.java index b8c234de7..f8f9ec63f 100755 --- a/src/main/java/refinedstorage/block/BlockCable.java +++ b/src/main/java/refinedstorage/block/BlockCable.java @@ -1,8 +1,8 @@ package refinedstorage.block; -import com.google.common.collect.Lists; import mcmultipart.block.BlockCoverable; import mcmultipart.block.BlockMultipartContainer; +import mcmultipart.raytrace.RayTraceUtils; import net.minecraft.block.material.Material; import net.minecraft.block.properties.PropertyBool; import net.minecraft.block.properties.PropertyDirection; @@ -31,12 +31,23 @@ import refinedstorage.tile.TileCable; import refinedstorage.tile.TileMultipartNode; import refinedstorage.tile.TileNode; +import java.util.ArrayList; import java.util.List; public class BlockCable extends BlockCoverable { private static final PropertyDirection DIRECTION = PropertyDirection.create("direction"); - private static final AxisAlignedBB CABLE_AABB = new AxisAlignedBB(4 * (1F / 16F), 4 * (1F / 16F), 4 * (1F / 16F), 1 - 4 * (1F / 16F), 1 - 4 * (1F / 16F), 1 - 4 * (1F / 16F)); + protected static AxisAlignedBB createAABB(int fromX, int fromY, int fromZ, int toX, int toY, int toZ) { + return new AxisAlignedBB((float) fromX / 16F, (float) fromY / 16F, (float) fromZ / 16F, (float) toX / 16F, (float) toY / 16F, (float) toZ / 16F); + } + + private static AxisAlignedBB CORE_AABB = createAABB(6, 6, 6, 10, 10, 10); + private static AxisAlignedBB NORTH_AABB = createAABB(6, 6, 0, 10, 10, 6); + private static AxisAlignedBB EAST_AABB = createAABB(10, 6, 6, 16, 10, 10); + private static AxisAlignedBB SOUTH_AABB = createAABB(6, 6, 10, 10, 10, 16); + private static AxisAlignedBB WEST_AABB = createAABB(0, 6, 6, 6, 10, 10); + private static AxisAlignedBB UP_AABB = createAABB(6, 10, 6, 10, 16, 10); + private static AxisAlignedBB DOWN_AABB = createAABB(6, 0, 6, 10, 6, 10); private static final PropertyBool NORTH = PropertyBool.create("north"); private static final PropertyBool EAST = PropertyBool.create("east"); @@ -131,81 +142,51 @@ public class BlockCable extends BlockCoverable { return false; } - /*@Override - public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess world, BlockPos pos) { - return CABLE_AABB; - }*/ + public static List getCollisionBoxes(IBlockState state) { + List boxes = new ArrayList<>(); - private static AxisAlignedBB createaabb(int fromx, int fromy, int fromz, int tox, int toy, int toz) { - return new AxisAlignedBB((float) fromx / 16F, (float) fromy / 16F, (float) fromz / 16F, (float) tox / 16F, (float) toy / 16F, (float) toz / 16F); - } + boxes.add(CORE_AABB); - private static AxisAlignedBB core = createaabb(6, 6, 6, 10, 10, 10); - private static AxisAlignedBB north = createaabb(6, 6, 0, 10, 10, 6); - private static AxisAlignedBB east = createaabb(10, 6, 6, 16, 10, 10); - private static AxisAlignedBB south = createaabb(6, 6, 10, 10, 10, 16); - private static AxisAlignedBB west = createaabb(0, 6, 6, 6, 10, 10); - private static AxisAlignedBB up = createaabb(6, 10, 6, 10, 16, 10); - private static AxisAlignedBB down = createaabb(6, 0, 6, 10, 6, 10); - - private static List getCollisionBoxList(IBlockState bstate) { - List list = Lists.newArrayList(); - - list.add(core); - - if (bstate.getValue(NORTH) == true) { - list.add(north); - } - if (bstate.getValue(EAST) == true) { - list.add(east); - } - if (bstate.getValue(SOUTH) == true) { - list.add(south); - } - if (bstate.getValue(WEST) == true) { - list.add(west); - } - if (bstate.getValue(UP) == true) { - list.add(up); - } - if (bstate.getValue(DOWN) == true) { - list.add(down); + if (state.getValue(NORTH)) { + boxes.add(NORTH_AABB); } - return list; + if (state.getValue(EAST)) { + boxes.add(EAST_AABB); + } + + if (state.getValue(SOUTH)) { + boxes.add(SOUTH_AABB); + } + + if (state.getValue(WEST)) { + boxes.add(WEST_AABB); + } + + if (state.getValue(UP)) { + boxes.add(UP_AABB); + } + + if (state.getValue(DOWN)) { + boxes.add(DOWN_AABB); + } + + return boxes; } @Override public void addCollisionBoxToListDefault(IBlockState state, World world, BlockPos pos, AxisAlignedBB entityBox, List collidingBoxes, Entity entityIn) { - for (AxisAlignedBB axisalignedbb : getCollisionBoxList(this.getActualState(state, world, pos))) { - addCollisionBoxToList(pos, entityBox, collidingBoxes, axisalignedbb); + for (AxisAlignedBB aabb : getCollisionBoxes(this.getActualState(state, world, pos))) { + addCollisionBoxToList(pos, entityBox, collidingBoxes, aabb); } } @Override public RayTraceResult collisionRayTraceDefault(IBlockState state, World world, BlockPos pos, Vec3d start, Vec3d end) { - List list = Lists.newArrayList(); + RayTraceUtils.AdvancedRayTraceResult result = RayTraceUtils.collisionRayTrace(world, pos, start, end, getCollisionBoxes(this.getActualState(state, world, pos))); - for (AxisAlignedBB axisalignedbb : getCollisionBoxList(this.getActualState(state, world, pos))) { - list.add(this.rayTrace(pos, start, end, axisalignedbb)); - } - - RayTraceResult raytraceresult1 = null; - double d1 = 0.0D; - - for (RayTraceResult raytraceresult : list) { - if (raytraceresult != null) { - double d0 = raytraceresult.hitVec.squareDistanceTo(end); - - if (d0 > d1) { - raytraceresult1 = raytraceresult; - d1 = d0; - } - } - } - - return raytraceresult1; + return result != null ? result.hit : null; } @Override diff --git a/src/main/java/refinedstorage/proxy/ClientProxy.java b/src/main/java/refinedstorage/proxy/ClientProxy.java index 82a9439be..6f1c4aa6b 100755 --- a/src/main/java/refinedstorage/proxy/ClientProxy.java +++ b/src/main/java/refinedstorage/proxy/ClientProxy.java @@ -1,16 +1,26 @@ package refinedstorage.proxy; import mcmultipart.client.multipart.ModelMultipartContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.VertexBuffer; import net.minecraft.client.renderer.block.model.ModelBakery; import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.client.renderer.block.statemap.StateMap; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.BlockPos; +import net.minecraftforge.client.event.DrawBlockHighlightEvent; import net.minecraftforge.client.event.ModelBakeEvent; import net.minecraftforge.client.model.ModelLoader; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import org.lwjgl.opengl.GL11; import refinedstorage.RefinedStorage; import refinedstorage.RefinedStorageBlocks; import refinedstorage.RefinedStorageItems; @@ -20,6 +30,8 @@ import refinedstorage.block.EnumGridType; import refinedstorage.block.EnumStorageType; import refinedstorage.item.*; +import java.util.List; + public class ClientProxy extends CommonProxy { @SubscribeEvent public void onModelBake(ModelBakeEvent e) { @@ -32,6 +44,81 @@ public class ClientProxy extends CommonProxy { } } + @SubscribeEvent + public void onBlockDrawHighlight(DrawBlockHighlightEvent e) { + if (e.getTarget() == null || e.getTarget().getBlockPos() == null) { + return; + } + + BlockPos pos = e.getTarget().getBlockPos(); + + IBlockState state = e.getPlayer().getEntityWorld().getBlockState(pos); + + if (!(state.getBlock() instanceof BlockCable)) { + return; + } + + e.setCanceled(true); + + state = ((BlockCable) state.getBlock()).getActualState(state, e.getPlayer().worldObj, pos); + + drawSelectionBox(e.getPlayer(), BlockCable.getCollisionBoxes(state), e.getPartialTicks(), pos); + } + + private void drawSelectionBox(EntityPlayer player, List boxes, float partialTicks, BlockPos pos) { + GlStateManager.enableBlend(); + GlStateManager.tryBlendFuncSeparate(770, 771, 1, 0); + GlStateManager.color(0.0F, 0.0F, 0.0F, 0.4F); + GL11.glLineWidth(2.0F); + GlStateManager.disableTexture2D(); + GlStateManager.depthMask(false); + + double d0 = player.lastTickPosX + (player.posX - player.lastTickPosX) * (double) partialTicks; + double d1 = player.lastTickPosY + (player.posY - player.lastTickPosY) * (double) partialTicks; + double d2 = player.lastTickPosZ + (player.posZ - player.lastTickPosZ) * (double) partialTicks; + + for (AxisAlignedBB aabb : boxes) { + drawSelectionBoundingBox(aabb.expand(0.0020000000949949026D, 0.0020000000949949026D, 0.0020000000949949026D).offset(-d0, -d1, -d2).offset(pos.getX(), pos.getY(), pos.getZ())); + } + + GlStateManager.depthMask(true); + GlStateManager.enableTexture2D(); + GlStateManager.disableBlend(); + } + + private void drawSelectionBoundingBox(AxisAlignedBB aabb) { + Tessellator tessellator = Tessellator.getInstance(); + + VertexBuffer vertexbuffer = tessellator.getBuffer(); + + vertexbuffer.begin(3, DefaultVertexFormats.POSITION); + vertexbuffer.pos(aabb.minX, aabb.minY, aabb.minZ).endVertex(); + vertexbuffer.pos(aabb.maxX, aabb.minY, aabb.minZ).endVertex(); + vertexbuffer.pos(aabb.maxX, aabb.minY, aabb.maxZ).endVertex(); + vertexbuffer.pos(aabb.minX, aabb.minY, aabb.maxZ).endVertex(); + vertexbuffer.pos(aabb.minX, aabb.minY, aabb.minZ).endVertex(); + tessellator.draw(); + + vertexbuffer.begin(3, DefaultVertexFormats.POSITION); + vertexbuffer.pos(aabb.minX, aabb.maxY, aabb.minZ).endVertex(); + vertexbuffer.pos(aabb.maxX, aabb.maxY, aabb.minZ).endVertex(); + vertexbuffer.pos(aabb.maxX, aabb.maxY, aabb.maxZ).endVertex(); + vertexbuffer.pos(aabb.minX, aabb.maxY, aabb.maxZ).endVertex(); + vertexbuffer.pos(aabb.minX, aabb.maxY, aabb.minZ).endVertex(); + tessellator.draw(); + + vertexbuffer.begin(1, DefaultVertexFormats.POSITION); + vertexbuffer.pos(aabb.minX, aabb.minY, aabb.minZ).endVertex(); + vertexbuffer.pos(aabb.minX, aabb.maxY, aabb.minZ).endVertex(); + vertexbuffer.pos(aabb.maxX, aabb.minY, aabb.minZ).endVertex(); + vertexbuffer.pos(aabb.maxX, aabb.maxY, aabb.minZ).endVertex(); + vertexbuffer.pos(aabb.maxX, aabb.minY, aabb.maxZ).endVertex(); + vertexbuffer.pos(aabb.maxX, aabb.maxY, aabb.maxZ).endVertex(); + vertexbuffer.pos(aabb.minX, aabb.minY, aabb.maxZ).endVertex(); + vertexbuffer.pos(aabb.minX, aabb.maxY, aabb.maxZ).endVertex(); + tessellator.draw(); + } + @Override public void preInit(FMLPreInitializationEvent e) { super.preInit(e); From 0e1370115e30ac85f2bcee01b9d267fd31801aad Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sat, 6 Aug 2016 20:13:39 +0200 Subject: [PATCH 110/214] Draw union of all boxes instead --- .../refinedstorage/proxy/ClientProxy.java | 55 +++++++++++-------- 1 file changed, 31 insertions(+), 24 deletions(-) diff --git a/src/main/java/refinedstorage/proxy/ClientProxy.java b/src/main/java/refinedstorage/proxy/ClientProxy.java index 6f1c4aa6b..b9bb8d83a 100755 --- a/src/main/java/refinedstorage/proxy/ClientProxy.java +++ b/src/main/java/refinedstorage/proxy/ClientProxy.java @@ -77,10 +77,14 @@ public class ClientProxy extends CommonProxy { double d1 = player.lastTickPosY + (player.posY - player.lastTickPosY) * (double) partialTicks; double d2 = player.lastTickPosZ + (player.posZ - player.lastTickPosZ) * (double) partialTicks; - for (AxisAlignedBB aabb : boxes) { - drawSelectionBoundingBox(aabb.expand(0.0020000000949949026D, 0.0020000000949949026D, 0.0020000000949949026D).offset(-d0, -d1, -d2).offset(pos.getX(), pos.getY(), pos.getZ())); + AxisAlignedBB aabb = boxes.get(0); + + for (int i = 1; i < boxes.size(); ++i) { + aabb = aabb.union(boxes.get(i)); } + drawSelectionBoundingBox(aabb.expand(0.0020000000949949026D, 0.0020000000949949026D, 0.0020000000949949026D).offset(-d0, -d1, -d2).offset(pos.getX(), pos.getY(), pos.getZ())); + GlStateManager.depthMask(true); GlStateManager.enableTexture2D(); GlStateManager.disableBlend(); @@ -89,33 +93,36 @@ public class ClientProxy extends CommonProxy { private void drawSelectionBoundingBox(AxisAlignedBB aabb) { Tessellator tessellator = Tessellator.getInstance(); - VertexBuffer vertexbuffer = tessellator.getBuffer(); + VertexBuffer buffer = tessellator.getBuffer(); + + buffer.begin(3, DefaultVertexFormats.POSITION); + buffer.pos(aabb.minX, aabb.minY, aabb.minZ).endVertex(); + buffer.pos(aabb.maxX, aabb.minY, aabb.minZ).endVertex(); + buffer.pos(aabb.maxX, aabb.minY, aabb.maxZ).endVertex(); + buffer.pos(aabb.minX, aabb.minY, aabb.maxZ).endVertex(); + buffer.pos(aabb.minX, aabb.minY, aabb.minZ).endVertex(); - vertexbuffer.begin(3, DefaultVertexFormats.POSITION); - vertexbuffer.pos(aabb.minX, aabb.minY, aabb.minZ).endVertex(); - vertexbuffer.pos(aabb.maxX, aabb.minY, aabb.minZ).endVertex(); - vertexbuffer.pos(aabb.maxX, aabb.minY, aabb.maxZ).endVertex(); - vertexbuffer.pos(aabb.minX, aabb.minY, aabb.maxZ).endVertex(); - vertexbuffer.pos(aabb.minX, aabb.minY, aabb.minZ).endVertex(); tessellator.draw(); - vertexbuffer.begin(3, DefaultVertexFormats.POSITION); - vertexbuffer.pos(aabb.minX, aabb.maxY, aabb.minZ).endVertex(); - vertexbuffer.pos(aabb.maxX, aabb.maxY, aabb.minZ).endVertex(); - vertexbuffer.pos(aabb.maxX, aabb.maxY, aabb.maxZ).endVertex(); - vertexbuffer.pos(aabb.minX, aabb.maxY, aabb.maxZ).endVertex(); - vertexbuffer.pos(aabb.minX, aabb.maxY, aabb.minZ).endVertex(); + buffer.begin(3, DefaultVertexFormats.POSITION); + buffer.pos(aabb.minX, aabb.maxY, aabb.minZ).endVertex(); + buffer.pos(aabb.maxX, aabb.maxY, aabb.minZ).endVertex(); + buffer.pos(aabb.maxX, aabb.maxY, aabb.maxZ).endVertex(); + buffer.pos(aabb.minX, aabb.maxY, aabb.maxZ).endVertex(); + buffer.pos(aabb.minX, aabb.maxY, aabb.minZ).endVertex(); + tessellator.draw(); - vertexbuffer.begin(1, DefaultVertexFormats.POSITION); - vertexbuffer.pos(aabb.minX, aabb.minY, aabb.minZ).endVertex(); - vertexbuffer.pos(aabb.minX, aabb.maxY, aabb.minZ).endVertex(); - vertexbuffer.pos(aabb.maxX, aabb.minY, aabb.minZ).endVertex(); - vertexbuffer.pos(aabb.maxX, aabb.maxY, aabb.minZ).endVertex(); - vertexbuffer.pos(aabb.maxX, aabb.minY, aabb.maxZ).endVertex(); - vertexbuffer.pos(aabb.maxX, aabb.maxY, aabb.maxZ).endVertex(); - vertexbuffer.pos(aabb.minX, aabb.minY, aabb.maxZ).endVertex(); - vertexbuffer.pos(aabb.minX, aabb.maxY, aabb.maxZ).endVertex(); + buffer.begin(1, DefaultVertexFormats.POSITION); + buffer.pos(aabb.minX, aabb.minY, aabb.minZ).endVertex(); + buffer.pos(aabb.minX, aabb.maxY, aabb.minZ).endVertex(); + buffer.pos(aabb.maxX, aabb.minY, aabb.minZ).endVertex(); + buffer.pos(aabb.maxX, aabb.maxY, aabb.minZ).endVertex(); + buffer.pos(aabb.maxX, aabb.minY, aabb.maxZ).endVertex(); + buffer.pos(aabb.maxX, aabb.maxY, aabb.maxZ).endVertex(); + buffer.pos(aabb.minX, aabb.minY, aabb.maxZ).endVertex(); + buffer.pos(aabb.minX, aabb.maxY, aabb.maxZ).endVertex(); + tessellator.draw(); } From 5bd8bc1686a0d38d84e0aff0f3f4c1e75e0633fd Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sat, 6 Aug 2016 20:43:12 +0200 Subject: [PATCH 111/214] Better constructor / destructor collision --- .../java/refinedstorage/block/BlockCable.java | 17 ++++++- .../block/BlockConstructor.java | 51 +++++++++++++++++++ .../refinedstorage/block/BlockDestructor.java | 8 +++ .../refinedstorage/proxy/ClientProxy.java | 33 +++++++----- 4 files changed, 93 insertions(+), 16 deletions(-) diff --git a/src/main/java/refinedstorage/block/BlockCable.java b/src/main/java/refinedstorage/block/BlockCable.java index f8f9ec63f..70d111caa 100755 --- a/src/main/java/refinedstorage/block/BlockCable.java +++ b/src/main/java/refinedstorage/block/BlockCable.java @@ -32,10 +32,11 @@ import refinedstorage.tile.TileMultipartNode; import refinedstorage.tile.TileNode; import java.util.ArrayList; +import java.util.Collections; import java.util.List; public class BlockCable extends BlockCoverable { - private static final PropertyDirection DIRECTION = PropertyDirection.create("direction"); + protected static final PropertyDirection DIRECTION = PropertyDirection.create("direction"); protected static AxisAlignedBB createAABB(int fromX, int fromY, int fromZ, int toX, int toY, int toZ) { return new AxisAlignedBB((float) fromX / 16F, (float) fromY / 16F, (float) fromZ / 16F, (float) toX / 16F, (float) toY / 16F, (float) toZ / 16F); @@ -142,7 +143,7 @@ public class BlockCable extends BlockCoverable { return false; } - public static List getCollisionBoxes(IBlockState state) { + public List getUnionizedCollisionBoxes(IBlockState state) { List boxes = new ArrayList<>(); boxes.add(CORE_AABB); @@ -174,6 +175,18 @@ public class BlockCable extends BlockCoverable { return boxes; } + public List getNonUnionizedCollisionBoxes(IBlockState state) { + return Collections.emptyList(); + } + + public List getCollisionBoxes(IBlockState state) { + List boxes = new ArrayList<>(); + + boxes.addAll(getUnionizedCollisionBoxes(state)); + boxes.addAll(getNonUnionizedCollisionBoxes(state)); + + return boxes; + } @Override public void addCollisionBoxToListDefault(IBlockState state, World world, BlockPos pos, AxisAlignedBB entityBox, List collidingBoxes, Entity entityIn) { diff --git a/src/main/java/refinedstorage/block/BlockConstructor.java b/src/main/java/refinedstorage/block/BlockConstructor.java index 83e612259..f2820d624 100755 --- a/src/main/java/refinedstorage/block/BlockConstructor.java +++ b/src/main/java/refinedstorage/block/BlockConstructor.java @@ -6,17 +6,68 @@ import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumHand; +import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import refinedstorage.RefinedStorage; import refinedstorage.RefinedStorageGui; import refinedstorage.tile.TileConstructor; +import java.util.ArrayList; +import java.util.List; + public class BlockConstructor extends BlockCable { + public static final AxisAlignedBB HOLDER_NORTH_AABB = createAABB(7, 7, 2, 9, 9, 6); + public static final AxisAlignedBB HOLDER_EAST_AABB = createAABB(10, 7, 7, 14, 9, 9); + public static final AxisAlignedBB HOLDER_SOUTH_AABB = createAABB(7, 7, 10, 9, 9, 14); + public static final AxisAlignedBB HOLDER_WEST_AABB = createAABB(2, 7, 7, 6, 9, 9); + public static final AxisAlignedBB HOLDER_DOWN_AABB = createAABB(7, 2, 7, 9, 6, 9); + public static final AxisAlignedBB HOLDER_UP_AABB = createAABB(7, 10, 7, 9, 14, 9); + + public static final AxisAlignedBB HEAD_NORTH_AABB = createAABB(0, 0, 0, 16, 16, 2); + public static final AxisAlignedBB HEAD_EAST_AABB = createAABB(14, 0, 0, 16, 16, 16); + public static final AxisAlignedBB HEAD_SOUTH_AABB = createAABB(0, 0, 14, 16, 16, 16); + public static final AxisAlignedBB HEAD_WEST_AABB = createAABB(0, 0, 0, 2, 16, 16); + public static final AxisAlignedBB HEAD_DOWN_AABB = createAABB(0, 0, 0, 16, 2, 16); + public static final AxisAlignedBB HEAD_UP_AABB = createAABB(0, 14, 0, 16, 16, 16); + public BlockConstructor() { super("constructor"); } + public List getNonUnionizedCollisionBoxes(IBlockState state) { + List boxes = new ArrayList<>(); + + switch (state.getValue(DIRECTION)) { + case NORTH: + boxes.add(HOLDER_NORTH_AABB); + boxes.add(HEAD_NORTH_AABB); + break; + case EAST: + boxes.add(HOLDER_EAST_AABB); + boxes.add(HEAD_EAST_AABB); + break; + case SOUTH: + boxes.add(HOLDER_SOUTH_AABB); + boxes.add(HEAD_SOUTH_AABB); + break; + case WEST: + boxes.add(HOLDER_WEST_AABB); + boxes.add(HEAD_WEST_AABB); + break; + case UP: + boxes.add(HOLDER_UP_AABB); + boxes.add(HEAD_UP_AABB); + break; + case DOWN: + boxes.add(HOLDER_DOWN_AABB); + boxes.add(HEAD_DOWN_AABB); + break; + } + + return boxes; + } + @Override public TileEntity createTileEntity(World world, IBlockState state) { return new TileConstructor(); diff --git a/src/main/java/refinedstorage/block/BlockDestructor.java b/src/main/java/refinedstorage/block/BlockDestructor.java index 8eefd2eb3..040d665ba 100755 --- a/src/main/java/refinedstorage/block/BlockDestructor.java +++ b/src/main/java/refinedstorage/block/BlockDestructor.java @@ -6,12 +6,16 @@ import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumHand; +import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import refinedstorage.RefinedStorage; +import refinedstorage.RefinedStorageBlocks; import refinedstorage.RefinedStorageGui; import refinedstorage.tile.TileDestructor; +import java.util.List; + public class BlockDestructor extends BlockCable { public BlockDestructor() { super("destructor"); @@ -22,6 +26,10 @@ public class BlockDestructor extends BlockCable { return new TileDestructor(); } + public List getNonUnionizedCollisionBoxes(IBlockState state) { + return RefinedStorageBlocks.CONSTRUCTOR.getNonUnionizedCollisionBoxes(state); + } + @Override public boolean onBlockActivatedDefault(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) { if (!world.isRemote) { diff --git a/src/main/java/refinedstorage/proxy/ClientProxy.java b/src/main/java/refinedstorage/proxy/ClientProxy.java index b9bb8d83a..cb69a01b3 100755 --- a/src/main/java/refinedstorage/proxy/ClientProxy.java +++ b/src/main/java/refinedstorage/proxy/ClientProxy.java @@ -50,22 +50,23 @@ public class ClientProxy extends CommonProxy { return; } + EntityPlayer player = e.getPlayer(); + BlockPos pos = e.getTarget().getBlockPos(); - IBlockState state = e.getPlayer().getEntityWorld().getBlockState(pos); + IBlockState state = player.worldObj.getBlockState(pos); if (!(state.getBlock() instanceof BlockCable)) { return; } + state = ((BlockCable) state.getBlock()).getActualState(state, player.worldObj, pos); + + List unionized = ((BlockCable) state.getBlock()).getUnionizedCollisionBoxes(state); + List nonUnionized = ((BlockCable) state.getBlock()).getNonUnionizedCollisionBoxes(state); + e.setCanceled(true); - state = ((BlockCable) state.getBlock()).getActualState(state, e.getPlayer().worldObj, pos); - - drawSelectionBox(e.getPlayer(), BlockCable.getCollisionBoxes(state), e.getPartialTicks(), pos); - } - - private void drawSelectionBox(EntityPlayer player, List boxes, float partialTicks, BlockPos pos) { GlStateManager.enableBlend(); GlStateManager.tryBlendFuncSeparate(770, 771, 1, 0); GlStateManager.color(0.0F, 0.0F, 0.0F, 0.4F); @@ -73,17 +74,21 @@ public class ClientProxy extends CommonProxy { GlStateManager.disableTexture2D(); GlStateManager.depthMask(false); - double d0 = player.lastTickPosX + (player.posX - player.lastTickPosX) * (double) partialTicks; - double d1 = player.lastTickPosY + (player.posY - player.lastTickPosY) * (double) partialTicks; - double d2 = player.lastTickPosZ + (player.posZ - player.lastTickPosZ) * (double) partialTicks; + double d0 = player.lastTickPosX + (player.posX - player.lastTickPosX) * (double) e.getPartialTicks(); + double d1 = player.lastTickPosY + (player.posY - player.lastTickPosY) * (double) e.getPartialTicks(); + double d2 = player.lastTickPosZ + (player.posZ - player.lastTickPosZ) * (double) e.getPartialTicks(); - AxisAlignedBB aabb = boxes.get(0); + AxisAlignedBB unionizedAabb = unionized.get(0); - for (int i = 1; i < boxes.size(); ++i) { - aabb = aabb.union(boxes.get(i)); + for (int i = 1; i < unionized.size(); ++i) { + unionizedAabb = unionizedAabb.union(unionized.get(i)); } - drawSelectionBoundingBox(aabb.expand(0.0020000000949949026D, 0.0020000000949949026D, 0.0020000000949949026D).offset(-d0, -d1, -d2).offset(pos.getX(), pos.getY(), pos.getZ())); + drawSelectionBoundingBox(unionizedAabb.expand(0.0020000000949949026D, 0.0020000000949949026D, 0.0020000000949949026D).offset(-d0, -d1, -d2).offset(pos.getX(), pos.getY(), pos.getZ())); + + for (AxisAlignedBB aabb : nonUnionized) { + drawSelectionBoundingBox(aabb.expand(0.0020000000949949026D, 0.0020000000949949026D, 0.0020000000949949026D).offset(-d0, -d1, -d2).offset(pos.getX(), pos.getY(), pos.getZ())); + } GlStateManager.depthMask(true); GlStateManager.enableTexture2D(); From fbc9c975289380c8ea74f4a8a8b2c927a709ab82 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sat, 6 Aug 2016 20:55:28 +0200 Subject: [PATCH 112/214] Better external storage collision --- .../block/BlockConstructor.java | 3 +- .../refinedstorage/block/BlockDestructor.java | 1 + .../block/BlockExternalStorage.java | 45 +++++++++++++++++++ 3 files changed, 48 insertions(+), 1 deletion(-) diff --git a/src/main/java/refinedstorage/block/BlockConstructor.java b/src/main/java/refinedstorage/block/BlockConstructor.java index f2820d624..1a17fef82 100755 --- a/src/main/java/refinedstorage/block/BlockConstructor.java +++ b/src/main/java/refinedstorage/block/BlockConstructor.java @@ -21,8 +21,8 @@ public class BlockConstructor extends BlockCable { public static final AxisAlignedBB HOLDER_EAST_AABB = createAABB(10, 7, 7, 14, 9, 9); public static final AxisAlignedBB HOLDER_SOUTH_AABB = createAABB(7, 7, 10, 9, 9, 14); public static final AxisAlignedBB HOLDER_WEST_AABB = createAABB(2, 7, 7, 6, 9, 9); - public static final AxisAlignedBB HOLDER_DOWN_AABB = createAABB(7, 2, 7, 9, 6, 9); public static final AxisAlignedBB HOLDER_UP_AABB = createAABB(7, 10, 7, 9, 14, 9); + public static final AxisAlignedBB HOLDER_DOWN_AABB = createAABB(7, 2, 7, 9, 6, 9); public static final AxisAlignedBB HEAD_NORTH_AABB = createAABB(0, 0, 0, 16, 16, 2); public static final AxisAlignedBB HEAD_EAST_AABB = createAABB(14, 0, 0, 16, 16, 16); @@ -35,6 +35,7 @@ public class BlockConstructor extends BlockCable { super("constructor"); } + @Override public List getNonUnionizedCollisionBoxes(IBlockState state) { List boxes = new ArrayList<>(); diff --git a/src/main/java/refinedstorage/block/BlockDestructor.java b/src/main/java/refinedstorage/block/BlockDestructor.java index 040d665ba..24701b07f 100755 --- a/src/main/java/refinedstorage/block/BlockDestructor.java +++ b/src/main/java/refinedstorage/block/BlockDestructor.java @@ -26,6 +26,7 @@ public class BlockDestructor extends BlockCable { return new TileDestructor(); } + @Override public List getNonUnionizedCollisionBoxes(IBlockState state) { return RefinedStorageBlocks.CONSTRUCTOR.getNonUnionizedCollisionBoxes(state); } diff --git a/src/main/java/refinedstorage/block/BlockExternalStorage.java b/src/main/java/refinedstorage/block/BlockExternalStorage.java index 3f7ca2d27..25764e4eb 100755 --- a/src/main/java/refinedstorage/block/BlockExternalStorage.java +++ b/src/main/java/refinedstorage/block/BlockExternalStorage.java @@ -7,17 +7,62 @@ import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumHand; +import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import refinedstorage.RefinedStorage; import refinedstorage.RefinedStorageGui; import refinedstorage.tile.externalstorage.TileExternalStorage; +import java.util.ArrayList; +import java.util.List; + public class BlockExternalStorage extends BlockCable { + public static final AxisAlignedBB HEAD_NORTH_AABB = createAABB(3, 3, 0, 13, 13, 2); + public static final AxisAlignedBB HEAD_EAST_AABB = createAABB(14, 3, 3, 16, 13, 13); + public static final AxisAlignedBB HEAD_SOUTH_AABB = createAABB(3, 3, 14, 13, 13, 16); + public static final AxisAlignedBB HEAD_WEST_AABB = createAABB(0, 3, 3, 2, 13, 13); + public static final AxisAlignedBB HEAD_UP_AABB = createAABB(3, 14, 3, 13, 16, 13); + public static final AxisAlignedBB HEAD_DOWN_AABB = createAABB(3, 0, 3, 13, 2, 13); + public BlockExternalStorage() { super("external_storage"); } + @Override + public List getNonUnionizedCollisionBoxes(IBlockState state) { + List boxes = new ArrayList<>(); + + switch (state.getValue(DIRECTION)) { + case NORTH: + boxes.add(BlockConstructor.HOLDER_NORTH_AABB); + boxes.add(HEAD_NORTH_AABB); + break; + case EAST: + boxes.add(BlockConstructor.HOLDER_EAST_AABB); + boxes.add(HEAD_EAST_AABB); + break; + case SOUTH: + boxes.add(BlockConstructor.HOLDER_SOUTH_AABB); + boxes.add(HEAD_SOUTH_AABB); + break; + case WEST: + boxes.add(BlockConstructor.HOLDER_WEST_AABB); + boxes.add(HEAD_WEST_AABB); + break; + case UP: + boxes.add(BlockConstructor.HOLDER_UP_AABB); + boxes.add(HEAD_UP_AABB); + break; + case DOWN: + boxes.add(BlockConstructor.HOLDER_DOWN_AABB); + boxes.add(HEAD_DOWN_AABB); + break; + } + + return boxes; + } + @Override public TileEntity createTileEntity(World world, IBlockState state) { return new TileExternalStorage(); From c11d800bc972da464e783ac42db1dd754b3c3502 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sat, 6 Aug 2016 21:27:16 +0200 Subject: [PATCH 113/214] Better importer / exporter collision box --- .../refinedstorage/block/BlockExporter.java | 63 +++++++++++++++++++ .../refinedstorage/block/BlockImporter.java | 63 +++++++++++++++++++ 2 files changed, 126 insertions(+) diff --git a/src/main/java/refinedstorage/block/BlockExporter.java b/src/main/java/refinedstorage/block/BlockExporter.java index acd749c57..9e7dd9bcc 100755 --- a/src/main/java/refinedstorage/block/BlockExporter.java +++ b/src/main/java/refinedstorage/block/BlockExporter.java @@ -6,17 +6,80 @@ import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumHand; +import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import refinedstorage.RefinedStorage; import refinedstorage.RefinedStorageGui; import refinedstorage.tile.TileExporter; +import java.util.ArrayList; +import java.util.List; + public class BlockExporter extends BlockCable { + public static final AxisAlignedBB LINE_NORTH_1_AABB = createAABB(6, 6, 0, 10, 10, 2); + public static final AxisAlignedBB LINE_NORTH_2_AABB = createAABB(5, 5, 2, 11, 11, 4); + public static final AxisAlignedBB LINE_NORTH_3_AABB = createAABB(3, 3, 4, 13, 13, 6); + public static final AxisAlignedBB LINE_EAST_1_AABB = createAABB(14, 6, 6, 16, 10, 10); + public static final AxisAlignedBB LINE_EAST_2_AABB = createAABB(12, 5, 5, 14, 11, 11); + public static final AxisAlignedBB LINE_EAST_3_AABB = createAABB(10, 3, 3, 12, 13, 13); + public static final AxisAlignedBB LINE_SOUTH_1_AABB = createAABB(6, 6, 14, 10, 10, 16); + public static final AxisAlignedBB LINE_SOUTH_2_AABB = createAABB(5, 5, 12, 11, 11, 14); + public static final AxisAlignedBB LINE_SOUTH_3_AABB = createAABB(3, 3, 10, 13, 13, 12); + public static final AxisAlignedBB LINE_WEST_1_AABB = createAABB(0, 6, 6, 2, 10, 10); + public static final AxisAlignedBB LINE_WEST_2_AABB = createAABB(2, 5, 5, 4, 11, 11); + public static final AxisAlignedBB LINE_WEST_3_AABB = createAABB(4, 3, 3, 6, 13, 13); + public static final AxisAlignedBB LINE_UP_1_AABB = createAABB(6, 14, 6, 10, 16, 10); + public static final AxisAlignedBB LINE_UP_2_AABB = createAABB(5, 12, 5, 11, 14, 11); + public static final AxisAlignedBB LINE_UP_3_AABB = createAABB(3, 10, 3, 13, 12, 13); + public static final AxisAlignedBB LINE_DOWN_1_AABB = createAABB(6, 0, 6, 10, 2, 10); + public static final AxisAlignedBB LINE_DOWN_2_AABB = createAABB(5, 2, 5, 11, 4, 11); + public static final AxisAlignedBB LINE_DOWN_3_AABB = createAABB(3, 4, 3, 13, 6, 13); + public BlockExporter() { super("exporter"); } + @Override + public List getNonUnionizedCollisionBoxes(IBlockState state) { + List boxes = new ArrayList<>(); + + switch (state.getValue(DIRECTION)) { + case NORTH: + boxes.add(LINE_NORTH_1_AABB); + boxes.add(LINE_NORTH_2_AABB); + boxes.add(LINE_NORTH_3_AABB); + break; + case EAST: + boxes.add(LINE_EAST_1_AABB); + boxes.add(LINE_EAST_2_AABB); + boxes.add(LINE_EAST_3_AABB); + break; + case SOUTH: + boxes.add(LINE_SOUTH_1_AABB); + boxes.add(LINE_SOUTH_2_AABB); + boxes.add(LINE_SOUTH_3_AABB); + break; + case WEST: + boxes.add(LINE_WEST_1_AABB); + boxes.add(LINE_WEST_2_AABB); + boxes.add(LINE_WEST_3_AABB); + break; + case UP: + boxes.add(LINE_UP_1_AABB); + boxes.add(LINE_UP_2_AABB); + boxes.add(LINE_UP_3_AABB); + break; + case DOWN: + boxes.add(LINE_DOWN_1_AABB); + boxes.add(LINE_DOWN_2_AABB); + boxes.add(LINE_DOWN_3_AABB); + break; + } + + return boxes; + } + @Override public TileEntity createTileEntity(World world, IBlockState state) { return new TileExporter(); diff --git a/src/main/java/refinedstorage/block/BlockImporter.java b/src/main/java/refinedstorage/block/BlockImporter.java index bcb082e9f..d39e74d01 100755 --- a/src/main/java/refinedstorage/block/BlockImporter.java +++ b/src/main/java/refinedstorage/block/BlockImporter.java @@ -6,17 +6,80 @@ import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumFacing; import net.minecraft.util.EnumHand; +import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import refinedstorage.RefinedStorage; import refinedstorage.RefinedStorageGui; import refinedstorage.tile.TileImporter; +import java.util.ArrayList; +import java.util.List; + public class BlockImporter extends BlockCable { + public static final AxisAlignedBB LINE_NORTH_1_AABB = createAABB(6, 6, 4, 10, 10, 6); + public static final AxisAlignedBB LINE_NORTH_2_AABB = createAABB(5, 5, 2, 11, 11, 4); + public static final AxisAlignedBB LINE_NORTH_3_AABB = createAABB(3, 3, 0, 13, 13, 2); + public static final AxisAlignedBB LINE_EAST_1_AABB = createAABB(10, 6, 6, 12, 10, 10); + public static final AxisAlignedBB LINE_EAST_2_AABB = createAABB(12, 5, 5, 14, 11, 11); + public static final AxisAlignedBB LINE_EAST_3_AABB = createAABB(14, 3, 3, 16, 13, 13); + public static final AxisAlignedBB LINE_SOUTH_1_AABB = createAABB(6, 6, 10, 10, 10, 12); + public static final AxisAlignedBB LINE_SOUTH_2_AABB = createAABB(5, 5, 12, 11, 11, 14); + public static final AxisAlignedBB LINE_SOUTH_3_AABB = createAABB(3, 3, 14, 13, 13, 16); + public static final AxisAlignedBB LINE_WEST_1_AABB = createAABB(4, 6, 6, 6, 10, 10); + public static final AxisAlignedBB LINE_WEST_2_AABB = createAABB(2, 5, 5, 4, 11, 11); + public static final AxisAlignedBB LINE_WEST_3_AABB = createAABB(0, 3, 3, 2, 13, 13); + public static final AxisAlignedBB LINE_UP_1_AABB = createAABB(6, 10, 6, 10, 12, 10); + public static final AxisAlignedBB LINE_UP_2_AABB = createAABB(5, 12, 5, 11, 14, 11); + public static final AxisAlignedBB LINE_UP_3_AABB = createAABB(3, 14, 3, 13, 16, 13); + public static final AxisAlignedBB LINE_DOWN_1_AABB = createAABB(6, 4, 6, 10, 6, 10); + public static final AxisAlignedBB LINE_DOWN_2_AABB = createAABB(5, 2, 5, 11, 4, 11); + public static final AxisAlignedBB LINE_DOWN_3_AABB = createAABB(3, 0, 3, 13, 2, 13); + public BlockImporter() { super("importer"); } + @Override + public List getNonUnionizedCollisionBoxes(IBlockState state) { + List boxes = new ArrayList<>(); + + switch (state.getValue(DIRECTION)) { + case NORTH: + boxes.add(LINE_NORTH_1_AABB); + boxes.add(LINE_NORTH_2_AABB); + boxes.add(LINE_NORTH_3_AABB); + break; + case EAST: + boxes.add(LINE_EAST_1_AABB); + boxes.add(LINE_EAST_2_AABB); + boxes.add(LINE_EAST_3_AABB); + break; + case SOUTH: + boxes.add(LINE_SOUTH_1_AABB); + boxes.add(LINE_SOUTH_2_AABB); + boxes.add(LINE_SOUTH_3_AABB); + break; + case WEST: + boxes.add(LINE_WEST_1_AABB); + boxes.add(LINE_WEST_2_AABB); + boxes.add(LINE_WEST_3_AABB); + break; + case UP: + boxes.add(LINE_UP_1_AABB); + boxes.add(LINE_UP_2_AABB); + boxes.add(LINE_UP_3_AABB); + break; + case DOWN: + boxes.add(LINE_DOWN_1_AABB); + boxes.add(LINE_DOWN_2_AABB); + boxes.add(LINE_DOWN_3_AABB); + break; + } + + return boxes; + } + @Override public TileEntity createTileEntity(World world, IBlockState state) { return new TileImporter(); From aa8e49d2f9e03c70843f65093b02ec92dccb0811 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sat, 6 Aug 2016 21:44:12 +0200 Subject: [PATCH 114/214] Block certain side --- .../refinedstorage/tile/TileConstructor.java | 6 ++++++ .../refinedstorage/tile/TileDestructor.java | 6 ++++++ .../java/refinedstorage/tile/TileExporter.java | 6 ++++++ .../java/refinedstorage/tile/TileImporter.java | 6 ++++++ .../refinedstorage/tile/TileMultipartNode.java | 18 ++++++++++++------ .../externalstorage/TileExternalStorage.java | 6 ++++++ 6 files changed, 42 insertions(+), 6 deletions(-) diff --git a/src/main/java/refinedstorage/tile/TileConstructor.java b/src/main/java/refinedstorage/tile/TileConstructor.java index d361a8502..0165d673f 100755 --- a/src/main/java/refinedstorage/tile/TileConstructor.java +++ b/src/main/java/refinedstorage/tile/TileConstructor.java @@ -1,5 +1,6 @@ package refinedstorage.tile; +import mcmultipart.microblock.IMicroblock; import net.minecraft.block.SoundType; import net.minecraft.block.state.IBlockState; import net.minecraft.item.ItemStack; @@ -46,6 +47,11 @@ public class TileConstructor extends TileMultipartNode implements IComparable { dataManager.addWatchedParameter(COMPARE); } + @Override + public boolean canAddMicroblock(IMicroblock microblock) { + return !isBlockingMicroblock(microblock, getDirection()); + } + @Override public int getEnergyUsage() { return RefinedStorage.INSTANCE.constructorUsage + upgrades.getEnergyUsage(); diff --git a/src/main/java/refinedstorage/tile/TileDestructor.java b/src/main/java/refinedstorage/tile/TileDestructor.java index 2424d46fc..71651bde3 100755 --- a/src/main/java/refinedstorage/tile/TileDestructor.java +++ b/src/main/java/refinedstorage/tile/TileDestructor.java @@ -1,5 +1,6 @@ package refinedstorage.tile; +import mcmultipart.microblock.IMicroblock; import net.minecraft.block.Block; import net.minecraft.block.state.IBlockState; import net.minecraft.inventory.InventoryHelper; @@ -40,6 +41,11 @@ public class TileDestructor extends TileMultipartNode implements IComparable, IF dataManager.addWatchedParameter(MODE); } + @Override + public boolean canAddMicroblock(IMicroblock microblock) { + return !isBlockingMicroblock(microblock, getDirection()); + } + @Override public int getEnergyUsage() { return RefinedStorage.INSTANCE.destructorUsage + upgrades.getEnergyUsage(); diff --git a/src/main/java/refinedstorage/tile/TileExporter.java b/src/main/java/refinedstorage/tile/TileExporter.java index 78c66e634..489d505e2 100755 --- a/src/main/java/refinedstorage/tile/TileExporter.java +++ b/src/main/java/refinedstorage/tile/TileExporter.java @@ -1,5 +1,6 @@ package refinedstorage.tile; +import mcmultipart.microblock.IMicroblock; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; @@ -31,6 +32,11 @@ public class TileExporter extends TileMultipartNode implements IComparable { dataManager.addWatchedParameter(COMPARE); } + @Override + public boolean canAddMicroblock(IMicroblock microblock) { + return !isBlockingMicroblock(microblock, getDirection()); + } + @Override public int getEnergyUsage() { return RefinedStorage.INSTANCE.exporterUsage + upgrades.getEnergyUsage(); diff --git a/src/main/java/refinedstorage/tile/TileImporter.java b/src/main/java/refinedstorage/tile/TileImporter.java index 045dab5bf..0ad6f77f7 100755 --- a/src/main/java/refinedstorage/tile/TileImporter.java +++ b/src/main/java/refinedstorage/tile/TileImporter.java @@ -1,5 +1,6 @@ package refinedstorage.tile; +import mcmultipart.microblock.IMicroblock; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; @@ -34,6 +35,11 @@ public class TileImporter extends TileMultipartNode implements IComparable, IFil dataManager.addWatchedParameter(MODE); } + @Override + public boolean canAddMicroblock(IMicroblock microblock) { + return !isBlockingMicroblock(microblock, getDirection()); + } + @Override public int getEnergyUsage() { return RefinedStorage.INSTANCE.importerUsage + upgrades.getEnergyUsage(); diff --git a/src/main/java/refinedstorage/tile/TileMultipartNode.java b/src/main/java/refinedstorage/tile/TileMultipartNode.java index 2095975e4..6cdbe3c49 100755 --- a/src/main/java/refinedstorage/tile/TileMultipartNode.java +++ b/src/main/java/refinedstorage/tile/TileMultipartNode.java @@ -82,12 +82,8 @@ public abstract class TileMultipartNode extends TileNode implements IMicroblockC if (tile instanceof TileMultipartNode) { for (IMicroblock microblock : ((TileMultipartNode) tile).getMicroblockContainer().getParts()) { - if (microblock instanceof IMicroblock.IFaceMicroblock) { - IMicroblock.IFaceMicroblock faceMicroblock = (IMicroblock.IFaceMicroblock) microblock; - - if (faceMicroblock.getFace() == direction && !faceMicroblock.isFaceHollow()) { - return true; - } + if (isBlockingMicroblock(microblock, direction)) { + return true; } } } @@ -95,6 +91,16 @@ public abstract class TileMultipartNode extends TileNode implements IMicroblockC return false; } + public static boolean isBlockingMicroblock(IMicroblock microblock, EnumFacing direction) { + if (!(microblock instanceof IMicroblock.IFaceMicroblock)) { + return false; + } + + IMicroblock.IFaceMicroblock faceMicroblock = (IMicroblock.IFaceMicroblock) microblock; + + return faceMicroblock.getFace() == direction && !faceMicroblock.isFaceHollow(); + } + @Override public boolean canConduct(EnumFacing direction) { return !hasBlockingMicroblock(worldObj, pos, direction) && !hasBlockingMicroblock(worldObj, pos.offset(direction), direction.getOpposite()); diff --git a/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java b/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java index ba0165c82..b6f740d3d 100755 --- a/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java +++ b/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java @@ -2,6 +2,7 @@ package refinedstorage.tile.externalstorage; import com.jaquadro.minecraft.storagedrawers.api.storage.IDrawer; import com.jaquadro.minecraft.storagedrawers.api.storage.IDrawerGroup; +import mcmultipart.microblock.IMicroblock; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.network.datasync.DataSerializers; import net.minecraft.tileentity.TileEntity; @@ -64,6 +65,11 @@ public class TileExternalStorage extends TileMultipartNode implements IStoragePr dataManager.addWatchedParameter(CAPACITY); } + @Override + public boolean canAddMicroblock(IMicroblock microblock) { + return !isBlockingMicroblock(microblock, getDirection()); + } + @Override public int getEnergyUsage() { return RefinedStorage.INSTANCE.externalStorageUsage + (storages.size() * RefinedStorage.INSTANCE.externalStoragePerStorageUsage); From 122fd98db82375b1062b23e3652ef32e3b4f2edd Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sat, 6 Aug 2016 22:27:26 +0200 Subject: [PATCH 115/214] Fixed not being able to move inventory items in Grid GUI's to hotbar via the number keys, fixes #235 --- CHANGELOG.md | 1 + .../java/refinedstorage/gui/GuiStorage.java | 31 ++++++++------ .../java/refinedstorage/gui/grid/GuiGrid.java | 40 ++++++++++--------- .../SideButtonGridSearchBoxMode.java | 2 + .../tile/config/IPrioritizable.java | 9 +---- .../refinedstorage/tile/grid/TileGrid.java | 5 ++- .../tile/grid/WirelessGrid.java | 3 -- 7 files changed, 48 insertions(+), 43 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f809b1823..238c75989 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ - Slight performance improvement in GUI's - Fixed not being able to change some configs in blocks - Fixed serverside configs not syncing up with clientside +- Fixed not being able to move inventory items in Grid GUI's to hotbar via the number keys **Features** - Added German translation by ChillUpX diff --git a/src/main/java/refinedstorage/gui/GuiStorage.java b/src/main/java/refinedstorage/gui/GuiStorage.java index b86f64a40..a32eb9cba 100755 --- a/src/main/java/refinedstorage/gui/GuiStorage.java +++ b/src/main/java/refinedstorage/gui/GuiStorage.java @@ -16,7 +16,7 @@ public class GuiStorage extends GuiBase { private IStorageGui gui; private String texture; - public static GuiTextField PRIORITY; + private GuiTextField priorityField; private int barX = 8; private int barY = 54; @@ -49,13 +49,14 @@ public class GuiStorage extends GuiBase { addSideButton(new SideButtonCompare(gui.getCompareParameter(), CompareUtils.COMPARE_NBT)); } - PRIORITY = new GuiTextField(0, fontRendererObj, x + 98 + 1, y + 54 + 1, 25, fontRendererObj.FONT_HEIGHT); - PRIORITY.setText(String.valueOf(gui.getPriorityParameter().getValue())); - PRIORITY.setEnableBackgroundDrawing(false); - PRIORITY.setVisible(true); - PRIORITY.setTextColor(16777215); - PRIORITY.setCanLoseFocus(true); - PRIORITY.setFocused(false); + priorityField = new GuiTextField(0, fontRendererObj, x + 98 + 1, y + 54 + 1, 25, fontRendererObj.FONT_HEIGHT); + priorityField.setEnableBackgroundDrawing(false); + priorityField.setVisible(true); + priorityField.setTextColor(16777215); + priorityField.setCanLoseFocus(true); + priorityField.setFocused(false); + + updatePriority(gui.getPriorityParameter().getValue()); } @Override @@ -72,7 +73,7 @@ public class GuiStorage extends GuiBase { drawTexture(x + barX, y + barY + barHeight - barHeightNew, 179, barHeight - barHeightNew, barWidth, barHeightNew); - PRIORITY.drawTextBox(); + priorityField.drawTextBox(); } @Override @@ -97,13 +98,15 @@ public class GuiStorage extends GuiBase { protected void mouseClicked(int mouseX, int mouseY, int mouseButton) throws IOException { super.mouseClicked(mouseX, mouseY, mouseButton); - PRIORITY.mouseClicked(mouseX, mouseY, mouseButton); + priorityField.mouseClicked(mouseX, mouseY, mouseButton); } @Override protected void keyTyped(char character, int keyCode) throws IOException { - if (!checkHotbarKeys(keyCode) && PRIORITY.textboxKeyTyped(character, keyCode)) { - Integer result = Ints.tryParse(PRIORITY.getText()); + if (checkHotbarKeys(keyCode)) { + // NO OP + } else if (priorityField.textboxKeyTyped(character, keyCode)) { + Integer result = Ints.tryParse(priorityField.getText()); if (result != null) { TileDataManager.setParameter(gui.getPriorityParameter(), result); @@ -112,4 +115,8 @@ public class GuiStorage extends GuiBase { super.keyTyped(character, keyCode); } } + + public void updatePriority(int priority) { + priorityField.setText(String.valueOf(priority)); + } } diff --git a/src/main/java/refinedstorage/gui/grid/GuiGrid.java b/src/main/java/refinedstorage/gui/grid/GuiGrid.java index 70fb6295d..4c80f640a 100755 --- a/src/main/java/refinedstorage/gui/grid/GuiGrid.java +++ b/src/main/java/refinedstorage/gui/grid/GuiGrid.java @@ -37,7 +37,7 @@ public class GuiGrid extends GuiBase { private GridSortingQuantity quantitySorting = new GridSortingQuantity(); private GridSortingName nameSorting = new GridSortingName(); - public static GuiTextField SEARCH_FIELD; + private GuiTextField searchField; private ContainerGrid container; private List items = new ArrayList<>(); @@ -64,15 +64,16 @@ public class GuiGrid extends GuiBase { int sx = x + 80 + 1; int sy = y + 6 + 1; - if (SEARCH_FIELD == null) { - SEARCH_FIELD = new GuiTextField(0, fontRendererObj, sx, sy, 88 - 6, fontRendererObj.FONT_HEIGHT); - SEARCH_FIELD.setEnableBackgroundDrawing(false); - SEARCH_FIELD.setVisible(true); - SEARCH_FIELD.setTextColor(16777215); + if (searchField == null) { + searchField = new GuiTextField(0, fontRendererObj, sx, sy, 88 - 6, fontRendererObj.FONT_HEIGHT); + searchField.setEnableBackgroundDrawing(false); + searchField.setVisible(true); + searchField.setTextColor(16777215); + updateSearchFieldFocus(grid.getSearchBoxMode()); } else { - SEARCH_FIELD.xPosition = sx; - SEARCH_FIELD.yPosition = sy; + searchField.xPosition = sx; + searchField.yPosition = sy; } addSideButton(new SideButtonGridViewType(grid)); @@ -92,7 +93,7 @@ public class GuiGrid extends GuiBase { if (grid.isConnected()) { items.addAll(RefinedStorage.INSTANCE.items); - String query = SEARCH_FIELD.getText().trim().toLowerCase(); + String query = searchField.getText().trim().toLowerCase(); Iterator t = items.iterator(); @@ -243,7 +244,7 @@ public class GuiGrid extends GuiBase { drawTexture(x + 152, y + 114, 240, ty * 16, 16, 16); } - SEARCH_FIELD.drawTextBox(); + searchField.drawTextBox(); } @Override @@ -328,11 +329,11 @@ public class GuiGrid extends GuiBase { public void mouseClicked(int mouseX, int mouseY, int clickedButton) throws IOException { super.mouseClicked(mouseX, mouseY, clickedButton); - SEARCH_FIELD.mouseClicked(mouseX, mouseY, clickedButton); + searchField.mouseClicked(mouseX, mouseY, clickedButton); if (clickedButton == 1 && inBounds(79, 5, 90, 12, mouseX - guiLeft, mouseY - guiTop)) { - SEARCH_FIELD.setText(""); - SEARCH_FIELD.setFocused(true); + searchField.setText(""); + searchField.setFocused(true); updateJEI(); } @@ -385,7 +386,9 @@ public class GuiGrid extends GuiBase { @Override protected void keyTyped(char character, int keyCode) throws IOException { - if (!checkHotbarKeys(keyCode) && SEARCH_FIELD.textboxKeyTyped(character, keyCode)) { + if (checkHotbarKeys(keyCode)) { + // NO OP + } else if (searchField.textboxKeyTyped(character, keyCode)) { updateJEI(); } else { super.keyTyped(character, keyCode); @@ -394,13 +397,12 @@ public class GuiGrid extends GuiBase { private void updateJEI() { if (IntegrationJEI.isLoaded() && (grid.getSearchBoxMode() == TileGrid.SEARCH_BOX_MODE_JEI_SYNCHRONIZED || grid.getSearchBoxMode() == TileGrid.SEARCH_BOX_MODE_JEI_SYNCHRONIZED_AUTOSELECTED)) { - IntegrationJEI.INSTANCE.getRuntime().getItemListOverlay().setFilterText(SEARCH_FIELD.getText()); + IntegrationJEI.INSTANCE.getRuntime().getItemListOverlay().setFilterText(searchField.getText()); } } - // @TODO: This is buggy... - public static void updateSearchFieldFocus(int mode) { - SEARCH_FIELD.setCanLoseFocus(!TileGrid.isSearchBoxModeWithAutoselection(mode)); - SEARCH_FIELD.setFocused(TileGrid.isSearchBoxModeWithAutoselection(mode)); + public void updateSearchFieldFocus(int mode) { + searchField.setCanLoseFocus(!TileGrid.isSearchBoxModeWithAutoselection(mode)); + searchField.setFocused(TileGrid.isSearchBoxModeWithAutoselection(mode)); } } diff --git a/src/main/java/refinedstorage/gui/sidebutton/SideButtonGridSearchBoxMode.java b/src/main/java/refinedstorage/gui/sidebutton/SideButtonGridSearchBoxMode.java index 726d83d1c..2b8b14087 100755 --- a/src/main/java/refinedstorage/gui/sidebutton/SideButtonGridSearchBoxMode.java +++ b/src/main/java/refinedstorage/gui/sidebutton/SideButtonGridSearchBoxMode.java @@ -43,5 +43,7 @@ public class SideButtonGridSearchBoxMode extends SideButton { } gui.getGrid().onSearchBoxModeChanged(mode); + + gui.updateSearchFieldFocus(mode); } } diff --git a/src/main/java/refinedstorage/tile/config/IPrioritizable.java b/src/main/java/refinedstorage/tile/config/IPrioritizable.java index bb86fc427..7d5464eb0 100755 --- a/src/main/java/refinedstorage/tile/config/IPrioritizable.java +++ b/src/main/java/refinedstorage/tile/config/IPrioritizable.java @@ -1,7 +1,6 @@ package refinedstorage.tile.config; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiScreen; import net.minecraft.network.datasync.DataSerializers; import net.minecraft.tileentity.TileEntity; import net.minecraftforge.fml.common.FMLCommonHandler; @@ -25,12 +24,8 @@ public interface IPrioritizable { ((IPrioritizable) tile).setPriority(value); } }, parameter -> { - if (FMLCommonHandler.instance().getEffectiveSide() == Side.CLIENT) { - GuiScreen gui = Minecraft.getMinecraft().currentScreen; - - if (gui instanceof GuiStorage) { - ((GuiStorage) gui).PRIORITY.setText(String.valueOf(parameter.getValue())); - } + if (FMLCommonHandler.instance().getEffectiveSide() == Side.CLIENT && Minecraft.getMinecraft().currentScreen instanceof GuiStorage) { + ((GuiStorage) Minecraft.getMinecraft().currentScreen).updatePriority(parameter.getValue()); } }); } diff --git a/src/main/java/refinedstorage/tile/grid/TileGrid.java b/src/main/java/refinedstorage/tile/grid/TileGrid.java index e5a1e70b6..afc0f3a0f 100755 --- a/src/main/java/refinedstorage/tile/grid/TileGrid.java +++ b/src/main/java/refinedstorage/tile/grid/TileGrid.java @@ -1,5 +1,6 @@ package refinedstorage.tile.grid; +import net.minecraft.client.Minecraft; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.inventory.*; @@ -101,8 +102,8 @@ public class TileGrid extends TileNode implements IGrid { } } }, parameter -> { - if (FMLCommonHandler.instance().getEffectiveSide() == Side.CLIENT) { - GuiGrid.updateSearchFieldFocus(parameter.getValue()); + if (FMLCommonHandler.instance().getEffectiveSide() == Side.CLIENT && Minecraft.getMinecraft().currentScreen instanceof GuiGrid) { + ((GuiGrid) Minecraft.getMinecraft().currentScreen).updateSearchFieldFocus(parameter.getValue()); } }); diff --git a/src/main/java/refinedstorage/tile/grid/WirelessGrid.java b/src/main/java/refinedstorage/tile/grid/WirelessGrid.java index 8b4155818..30feedfca 100755 --- a/src/main/java/refinedstorage/tile/grid/WirelessGrid.java +++ b/src/main/java/refinedstorage/tile/grid/WirelessGrid.java @@ -10,7 +10,6 @@ import refinedstorage.RefinedStorage; import refinedstorage.api.network.IGridHandler; import refinedstorage.block.EnumGridType; import refinedstorage.gui.grid.GridFilteredItem; -import refinedstorage.gui.grid.GuiGrid; import refinedstorage.inventory.ItemHandlerBasic; import refinedstorage.inventory.ItemHandlerGridFilterInGrid; import refinedstorage.item.ItemWirelessGrid; @@ -136,8 +135,6 @@ public class WirelessGrid implements IGrid { RefinedStorage.INSTANCE.network.sendToServer(new MessageWirelessGridSettingsUpdate(getViewType(), getSortingDirection(), getSortingType(), searchBoxMode)); this.searchBoxMode = searchBoxMode; - - GuiGrid.updateSearchFieldFocus(searchBoxMode); } @Override From 56774d46748fc33cfac281427001069d49cf621d Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sat, 6 Aug 2016 22:56:30 +0200 Subject: [PATCH 116/214] Sort grid items on demand, fixes #247 --- .../java/refinedstorage/RefinedStorage.java | 6 -- .../java/refinedstorage/gui/grid/GuiGrid.java | 86 +++++++++++-------- .../network/MessageGridDelta.java | 11 ++- .../network/MessageGridUpdate.java | 5 +- .../tile/TileMultipartNode.java | 2 +- .../refinedstorage/tile/grid/TileGrid.java | 2 +- 6 files changed, 62 insertions(+), 50 deletions(-) diff --git a/src/main/java/refinedstorage/RefinedStorage.java b/src/main/java/refinedstorage/RefinedStorage.java index 96f39cba7..6ac2f587d 100755 --- a/src/main/java/refinedstorage/RefinedStorage.java +++ b/src/main/java/refinedstorage/RefinedStorage.java @@ -13,12 +13,8 @@ import net.minecraftforge.fml.common.event.FMLPostInitializationEvent; import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; import net.minecraftforge.fml.common.network.NetworkRegistry; import net.minecraftforge.fml.common.network.simpleimpl.SimpleNetworkWrapper; -import refinedstorage.gui.grid.ClientStack; import refinedstorage.proxy.CommonProxy; -import java.util.ArrayList; -import java.util.List; - @Mod(modid = RefinedStorage.ID, version = RefinedStorage.VERSION) public final class RefinedStorage { public static final String ID = "refinedstorage"; @@ -44,8 +40,6 @@ public final class RefinedStorage { } }; - public List items = new ArrayList<>(); - public int controllerBaseUsage; public int cableUsage; public int constructorUsage; diff --git a/src/main/java/refinedstorage/gui/grid/GuiGrid.java b/src/main/java/refinedstorage/gui/grid/GuiGrid.java index 4c80f640a..a8c2b28e7 100755 --- a/src/main/java/refinedstorage/gui/grid/GuiGrid.java +++ b/src/main/java/refinedstorage/gui/grid/GuiGrid.java @@ -1,5 +1,6 @@ package refinedstorage.gui.grid; +import net.minecraft.client.Minecraft; import net.minecraft.client.audio.PositionedSoundRecord; import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.gui.GuiTextField; @@ -10,7 +11,6 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.math.BlockPos; import net.minecraftforge.fml.common.FMLCommonHandler; -import org.apache.commons.lang3.StringUtils; import refinedstorage.RefinedStorage; import refinedstorage.api.network.GridExtractFlags; import refinedstorage.api.storage.CompareUtils; @@ -34,13 +34,15 @@ import java.io.IOException; import java.util.*; public class GuiGrid extends GuiBase { - private GridSortingQuantity quantitySorting = new GridSortingQuantity(); - private GridSortingName nameSorting = new GridSortingName(); + public static final GridSortingQuantity SORTING_QUANTITY = new GridSortingQuantity(); + public static final GridSortingName SORTING_NAME = new GridSortingName(); + + public static List ITEMS = new ArrayList<>(); + public static List SORTED_ITEMS = new ArrayList<>(); private GuiTextField searchField; private ContainerGrid container; - private List items = new ArrayList<>(); private IGrid grid; private int slotNumber; @@ -80,27 +82,38 @@ public class GuiGrid extends GuiBase { addSideButton(new SideButtonGridSortingDirection(grid)); addSideButton(new SideButtonGridSortingType(grid)); addSideButton(new SideButtonGridSearchBoxMode(this)); + + sortItems(); } public IGrid getGrid() { return grid; } - @Override - public void update(int x, int y) { - items.clear(); + public static void sortItems() { + GuiScreen screen = Minecraft.getMinecraft().currentScreen; - if (grid.isConnected()) { - items.addAll(RefinedStorage.INSTANCE.items); + if (!(screen instanceof GuiGrid)) { + return; + } - String query = searchField.getText().trim().toLowerCase(); + GuiGrid gui = (GuiGrid) screen; - Iterator t = items.iterator(); + System.out.println("Resorting!"); + + SORTED_ITEMS.clear(); + + if (gui.getGrid().isConnected()) { + SORTED_ITEMS.addAll(ITEMS); + + String query = gui.searchField.getText().trim().toLowerCase(); + + Iterator t = SORTED_ITEMS.iterator(); while (t.hasNext()) { ClientStack stack = t.next(); - List filteredItems = grid.getFilteredItems(); + List filteredItems = gui.getGrid().getFilteredItems(); boolean found = filteredItems.isEmpty(); @@ -118,11 +131,11 @@ public class GuiGrid extends GuiBase { continue; } - if (grid.getViewType() == TileGrid.VIEW_TYPE_NON_CRAFTABLES && stack.isCraftable()) { + if (gui.getGrid().getViewType() == TileGrid.VIEW_TYPE_NON_CRAFTABLES && stack.isCraftable()) { t.remove(); continue; - } else if (grid.getViewType() == TileGrid.VIEW_TYPE_CRAFTABLES && !stack.isCraftable()) { + } else if (gui.getGrid().getViewType() == TileGrid.VIEW_TYPE_CRAFTABLES && !stack.isCraftable()) { t.remove(); continue; @@ -151,30 +164,27 @@ public class GuiGrid extends GuiBase { t.remove(); } } - } else if (query.startsWith("#")) { - String tooltip = query.substring(1); - String tooltipFromItem = StringUtils.join(stack.getStack().getTooltip(container.getPlayer(), true), "\n"); - - if (!tooltipFromItem.contains(tooltip)) { - t.remove(); - } } else if (!stack.getStack().getDisplayName().toLowerCase().contains(query)) { t.remove(); } } - nameSorting.setSortingDirection(grid.getSortingDirection()); - quantitySorting.setSortingDirection(grid.getSortingDirection()); + SORTING_NAME.setSortingDirection(gui.getGrid().getSortingDirection()); + SORTING_QUANTITY.setSortingDirection(gui.getGrid().getSortingDirection()); - Collections.sort(items, nameSorting); + Collections.sort(SORTED_ITEMS, SORTING_NAME); - if (grid.getSortingType() == TileGrid.SORTING_TYPE_QUANTITY) { - Collections.sort(items, quantitySorting); + if (gui.getGrid().getSortingType() == TileGrid.SORTING_TYPE_QUANTITY) { + Collections.sort(SORTED_ITEMS, SORTING_QUANTITY); } } - getScrollbar().setCanScroll(getRows() > getVisibleRows()); - getScrollbar().setScrollDelta((float) getScrollbar().getScrollbarHeight() / (float) getRows()); + gui.getScrollbar().setCanScroll(gui.getRows() > gui.getVisibleRows()); + gui.getScrollbar().setScrollDelta((float) gui.getScrollbar().getScrollbarHeight() / (float) gui.getRows()); + } + + @Override + public void update(int x, int y) { } private int getOffset() { @@ -182,13 +192,13 @@ public class GuiGrid extends GuiBase { } private int getRows() { - int max = (int) Math.ceil((float) items.size() / 9f); + int max = (int) Math.ceil((float) SORTED_ITEMS.size() / 9f); return max < 0 ? 0 : max; } private boolean isOverSlotWithItem() { - return grid.isConnected() && isOverSlot() && slotNumber < items.size(); + return grid.isConnected() && isOverSlot() && slotNumber < SORTED_ITEMS.size(); } private boolean isOverSlot() { @@ -266,8 +276,8 @@ public class GuiGrid extends GuiBase { this.slotNumber = slot; } - if (slot < items.size()) { - drawItem(x, y, items.get(slot).getStack(), true, formatQuantity(items.get(slot).getStack().stackSize, slot)); + if (slot < SORTED_ITEMS.size()) { + drawItem(x, y, SORTED_ITEMS.get(slot).getStack(), true, formatQuantity(SORTED_ITEMS.get(slot).getStack().stackSize, slot)); } if (inBounds(x, y, 16, 16, mouseX, mouseY) || !grid.isConnected()) { @@ -295,7 +305,7 @@ public class GuiGrid extends GuiBase { } if (isOverSlotWithItem()) { - drawTooltip(mouseX, mouseY, items.get(slotNumber).getStack()); + drawTooltip(mouseX, mouseY, SORTED_ITEMS.get(slotNumber).getStack()); } if (isOverClear(mouseX, mouseY)) { @@ -335,6 +345,8 @@ public class GuiGrid extends GuiBase { searchField.setText(""); searchField.setFocused(true); + sortItems(); + updateJEI(); } @@ -357,8 +369,8 @@ public class GuiGrid extends GuiBase { } if (isOverSlotWithItem() && (held == null || (held != null && clickedButton == 2))) { - if (items.get(slotNumber).isCraftable() && (items.get(slotNumber).getStack().stackSize == 0 || (GuiScreen.isShiftKeyDown() && GuiScreen.isCtrlKeyDown()))) { - FMLCommonHandler.instance().showGuiScreen(new GuiCraftingSettings(this, container.getPlayer(), items.get(slotNumber))); + if (SORTED_ITEMS.get(slotNumber).isCraftable() && (SORTED_ITEMS.get(slotNumber).getStack().stackSize == 0 || (GuiScreen.isShiftKeyDown() && GuiScreen.isCtrlKeyDown()))) { + FMLCommonHandler.instance().showGuiScreen(new GuiCraftingSettings(this, container.getPlayer(), SORTED_ITEMS.get(slotNumber))); } else { int flags = 0; @@ -374,7 +386,7 @@ public class GuiGrid extends GuiBase { flags |= GridExtractFlags.EXTRACT_SINGLE; } - RefinedStorage.INSTANCE.network.sendToServer(new MessageGridPull(items.get(slotNumber).getId(), flags)); + RefinedStorage.INSTANCE.network.sendToServer(new MessageGridPull(SORTED_ITEMS.get(slotNumber).getId(), flags)); } } } @@ -390,6 +402,8 @@ public class GuiGrid extends GuiBase { // NO OP } else if (searchField.textboxKeyTyped(character, keyCode)) { updateJEI(); + + sortItems(); } else { super.keyTyped(character, keyCode); } diff --git a/src/main/java/refinedstorage/network/MessageGridDelta.java b/src/main/java/refinedstorage/network/MessageGridDelta.java index a11108c8e..662ffa33b 100755 --- a/src/main/java/refinedstorage/network/MessageGridDelta.java +++ b/src/main/java/refinedstorage/network/MessageGridDelta.java @@ -5,9 +5,9 @@ import net.minecraft.item.ItemStack; import net.minecraftforge.fml.common.network.simpleimpl.IMessage; import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler; import net.minecraftforge.fml.common.network.simpleimpl.MessageContext; -import refinedstorage.RefinedStorage; import refinedstorage.api.network.INetworkMaster; import refinedstorage.gui.grid.ClientStack; +import refinedstorage.gui.grid.GuiGrid; public class MessageGridDelta implements IMessage, IMessageHandler { private INetworkMaster network; @@ -39,19 +39,22 @@ public class MessageGridDelta implements IMessage, IMessageHandler Date: Sat, 6 Aug 2016 23:00:14 +0200 Subject: [PATCH 117/214] Update changelog --- CHANGELOG.md | 9 +++++---- src/main/java/refinedstorage/tile/grid/TileGrid.java | 2 +- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 238c75989..2c91e33d5 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,20 +3,21 @@ ### 0.8.16 **Bugfixes** - Fixed issue with IC2 integration causing console spam -- Slight performance improvement in GUI's +- Slight performance increase and network efficiency improvement in all GUI's +- Slight performance increase in Grid GUI - Fixed not being able to change some configs in blocks - Fixed serverside configs not syncing up with clientside - Fixed not being able to move inventory items in Grid GUI's to hotbar via the number keys +- Improved collisions of Cable parts **Features** - Added German translation by ChillUpX -- Each Grid Filter can now only filter 9 items -- Each Grid allows 4 Grid Filters instead of 1 +- Grid Filters can now only filter 9 items, but, Grids take 4 filters now instead - Grid Filters can now be configured to compare on NBT and/ or damage - Updated to Forge 2046 - Updated Tesla - Java 8 is now a requirement -- Added MCMultiPart integration +- Added MCMultiPart integration for Cables ### 0.8.15 **Bugfixes** diff --git a/src/main/java/refinedstorage/tile/grid/TileGrid.java b/src/main/java/refinedstorage/tile/grid/TileGrid.java index 31dc36218..afc0f3a0f 100755 --- a/src/main/java/refinedstorage/tile/grid/TileGrid.java +++ b/src/main/java/refinedstorage/tile/grid/TileGrid.java @@ -375,7 +375,7 @@ public class TileGrid extends TileNode implements IGrid { @Override public int getSearchBoxMode() { - return (worldObj != null && worldObj.isRemote) ? SEARCH_BOX_MODE.getValue() : searchBoxMode; + return worldObj.isRemote ? SEARCH_BOX_MODE.getValue() : searchBoxMode; } @Override From 9a932726ce4625fd4aa3c03c68015a4e6e8a145b Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sat, 6 Aug 2016 23:00:34 +0200 Subject: [PATCH 118/214] Remove print --- src/main/java/refinedstorage/gui/grid/GuiGrid.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/java/refinedstorage/gui/grid/GuiGrid.java b/src/main/java/refinedstorage/gui/grid/GuiGrid.java index a8c2b28e7..b287de644 100755 --- a/src/main/java/refinedstorage/gui/grid/GuiGrid.java +++ b/src/main/java/refinedstorage/gui/grid/GuiGrid.java @@ -99,8 +99,6 @@ public class GuiGrid extends GuiBase { GuiGrid gui = (GuiGrid) screen; - System.out.println("Resorting!"); - SORTED_ITEMS.clear(); if (gui.getGrid().isConnected()) { From 97d703f429498a55d665f1f709fdfb2162f3d377 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sat, 6 Aug 2016 23:17:36 +0200 Subject: [PATCH 119/214] Fixed Relays when being in "Ignore Redstone" mode using up energy, fixes #246 --- CHANGELOG.md | 1 + src/main/java/refinedstorage/block/BlockCable.java | 4 ++-- src/main/java/refinedstorage/gui/grid/GuiGrid.java | 4 ++++ src/main/java/refinedstorage/tile/TileRelay.java | 2 +- 4 files changed, 8 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2c91e33d5..65875a8ee 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ - Fixed not being able to change some configs in blocks - Fixed serverside configs not syncing up with clientside - Fixed not being able to move inventory items in Grid GUI's to hotbar via the number keys +- Fixed Relays when being in "Ignore Redstone" mode using up energy - Improved collisions of Cable parts **Features** diff --git a/src/main/java/refinedstorage/block/BlockCable.java b/src/main/java/refinedstorage/block/BlockCable.java index 70d111caa..ef407b0fc 100755 --- a/src/main/java/refinedstorage/block/BlockCable.java +++ b/src/main/java/refinedstorage/block/BlockCable.java @@ -133,8 +133,8 @@ public class BlockCable extends BlockCoverable { if (facing instanceof INetworkMaster || facing instanceof INetworkNode) { // Do not render a cable extension where our cable "head" is (e.g. importer, exporter, external storage heads). - if (getPlacementType() != null) { - return ((TileMultipartNode) world.getTileEntity(pos)).getFacingTile() != facing; + if (getPlacementType() != null && ((TileMultipartNode) world.getTileEntity(pos)).getFacingTile() == facing) { + return false; } return !TileMultipartNode.hasBlockingMicroblock(world, pos, direction) && !TileMultipartNode.hasBlockingMicroblock(world, pos.offset(direction), direction.getOpposite()); diff --git a/src/main/java/refinedstorage/gui/grid/GuiGrid.java b/src/main/java/refinedstorage/gui/grid/GuiGrid.java index b287de644..9c33d3db2 100755 --- a/src/main/java/refinedstorage/gui/grid/GuiGrid.java +++ b/src/main/java/refinedstorage/gui/grid/GuiGrid.java @@ -99,6 +99,10 @@ public class GuiGrid extends GuiBase { GuiGrid gui = (GuiGrid) screen; + if (gui.searchField == null) { + return; + } + SORTED_ITEMS.clear(); if (gui.getGrid().isConnected()) { diff --git a/src/main/java/refinedstorage/tile/TileRelay.java b/src/main/java/refinedstorage/tile/TileRelay.java index d41e9788b..37b0f971b 100755 --- a/src/main/java/refinedstorage/tile/TileRelay.java +++ b/src/main/java/refinedstorage/tile/TileRelay.java @@ -13,7 +13,7 @@ public class TileRelay extends TileNode { @Override public int getEnergyUsage() { - return RefinedStorage.INSTANCE.relayUsage; + return getRedstoneMode() == RedstoneMode.IGNORE ? 0 : RefinedStorage.INSTANCE.relayUsage; } @Override From 49df13e1e5e591452a4ffd69ab6a73d69cb06799 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sun, 7 Aug 2016 00:29:08 +0200 Subject: [PATCH 120/214] Lower event priority so stuff like C&B block highlighting works --- src/main/java/refinedstorage/proxy/ClientProxy.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/refinedstorage/proxy/ClientProxy.java b/src/main/java/refinedstorage/proxy/ClientProxy.java index cb69a01b3..20ad5f5b8 100755 --- a/src/main/java/refinedstorage/proxy/ClientProxy.java +++ b/src/main/java/refinedstorage/proxy/ClientProxy.java @@ -19,6 +19,7 @@ import net.minecraftforge.client.event.ModelBakeEvent; import net.minecraftforge.client.model.ModelLoader; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; +import net.minecraftforge.fml.common.eventhandler.EventPriority; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import org.lwjgl.opengl.GL11; import refinedstorage.RefinedStorage; @@ -44,7 +45,7 @@ public class ClientProxy extends CommonProxy { } } - @SubscribeEvent + @SubscribeEvent(priority = EventPriority.LOWEST) public void onBlockDrawHighlight(DrawBlockHighlightEvent e) { if (e.getTarget() == null || e.getTarget().getBlockPos() == null) { return; From 7ba960fd1ce7ae3147d47ea79011031e5f27d430 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sun, 7 Aug 2016 00:30:09 +0200 Subject: [PATCH 121/214] testing --- src/main/java/refinedstorage/block/BlockCable.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/refinedstorage/block/BlockCable.java b/src/main/java/refinedstorage/block/BlockCable.java index ef407b0fc..405886e94 100755 --- a/src/main/java/refinedstorage/block/BlockCable.java +++ b/src/main/java/refinedstorage/block/BlockCable.java @@ -198,7 +198,7 @@ public class BlockCable extends BlockCoverable { @Override public RayTraceResult collisionRayTraceDefault(IBlockState state, World world, BlockPos pos, Vec3d start, Vec3d end) { RayTraceUtils.AdvancedRayTraceResult result = RayTraceUtils.collisionRayTrace(world, pos, start, end, getCollisionBoxes(this.getActualState(state, world, pos))); - +//test? return result != null ? result.hit : null; } From f0b6844d5c7b5b56b691e2c4acb27ad131ca1e54 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sun, 7 Aug 2016 00:31:00 +0200 Subject: [PATCH 122/214] testing --- src/main/java/refinedstorage/block/BlockCable.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/refinedstorage/block/BlockCable.java b/src/main/java/refinedstorage/block/BlockCable.java index 405886e94..ef407b0fc 100755 --- a/src/main/java/refinedstorage/block/BlockCable.java +++ b/src/main/java/refinedstorage/block/BlockCable.java @@ -198,7 +198,7 @@ public class BlockCable extends BlockCoverable { @Override public RayTraceResult collisionRayTraceDefault(IBlockState state, World world, BlockPos pos, Vec3d start, Vec3d end) { RayTraceUtils.AdvancedRayTraceResult result = RayTraceUtils.collisionRayTrace(world, pos, start, end, getCollisionBoxes(this.getActualState(state, world, pos))); -//test? + return result != null ? result.hit : null; } From 7aa4e1a225770afbe06cc1326a64a21e4b6b13a0 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sun, 7 Aug 2016 01:10:46 +0200 Subject: [PATCH 123/214] You now have to click the actual cable part head in order to get the GUI open --- CHANGELOG.md | 1 + .../java/refinedstorage/block/BlockCable.java | 42 +++++++++++++------ .../block/BlockConstructor.java | 8 ++++ .../refinedstorage/block/BlockDestructor.java | 4 ++ .../refinedstorage/block/BlockExporter.java | 4 ++ .../block/BlockExternalStorage.java | 4 ++ .../refinedstorage/block/BlockImporter.java | 4 ++ 7 files changed, 54 insertions(+), 13 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 65875a8ee..48868d7bc 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ - Fixed not being able to move inventory items in Grid GUI's to hotbar via the number keys - Fixed Relays when being in "Ignore Redstone" mode using up energy - Improved collisions of Cable parts +- You now have to click the actual cable part head in order to get the GUI open **Features** - Added German translation by ChillUpX diff --git a/src/main/java/refinedstorage/block/BlockCable.java b/src/main/java/refinedstorage/block/BlockCable.java index ef407b0fc..a91e494e3 100755 --- a/src/main/java/refinedstorage/block/BlockCable.java +++ b/src/main/java/refinedstorage/block/BlockCable.java @@ -42,20 +42,20 @@ public class BlockCable extends BlockCoverable { return new AxisAlignedBB((float) fromX / 16F, (float) fromY / 16F, (float) fromZ / 16F, (float) toX / 16F, (float) toY / 16F, (float) toZ / 16F); } - private static AxisAlignedBB CORE_AABB = createAABB(6, 6, 6, 10, 10, 10); - private static AxisAlignedBB NORTH_AABB = createAABB(6, 6, 0, 10, 10, 6); - private static AxisAlignedBB EAST_AABB = createAABB(10, 6, 6, 16, 10, 10); - private static AxisAlignedBB SOUTH_AABB = createAABB(6, 6, 10, 10, 10, 16); - private static AxisAlignedBB WEST_AABB = createAABB(0, 6, 6, 6, 10, 10); - private static AxisAlignedBB UP_AABB = createAABB(6, 10, 6, 10, 16, 10); - private static AxisAlignedBB DOWN_AABB = createAABB(6, 0, 6, 10, 6, 10); + protected static AxisAlignedBB CORE_AABB = createAABB(6, 6, 6, 10, 10, 10); + protected static AxisAlignedBB NORTH_AABB = createAABB(6, 6, 0, 10, 10, 6); + protected static AxisAlignedBB EAST_AABB = createAABB(10, 6, 6, 16, 10, 10); + protected static AxisAlignedBB SOUTH_AABB = createAABB(6, 6, 10, 10, 10, 16); + protected static AxisAlignedBB WEST_AABB = createAABB(0, 6, 6, 6, 10, 10); + protected static AxisAlignedBB UP_AABB = createAABB(6, 10, 6, 10, 16, 10); + protected static AxisAlignedBB DOWN_AABB = createAABB(6, 0, 6, 10, 6, 10); - private static final PropertyBool NORTH = PropertyBool.create("north"); - private static final PropertyBool EAST = PropertyBool.create("east"); - private static final PropertyBool SOUTH = PropertyBool.create("south"); - private static final PropertyBool WEST = PropertyBool.create("west"); - private static final PropertyBool UP = PropertyBool.create("up"); - private static final PropertyBool DOWN = PropertyBool.create("down"); + protected static final PropertyBool NORTH = PropertyBool.create("north"); + protected static final PropertyBool EAST = PropertyBool.create("east"); + protected static final PropertyBool SOUTH = PropertyBool.create("south"); + protected static final PropertyBool WEST = PropertyBool.create("west"); + protected static final PropertyBool UP = PropertyBool.create("up"); + protected static final PropertyBool DOWN = PropertyBool.create("down"); private String name; @@ -143,6 +143,22 @@ public class BlockCable extends BlockCoverable { return false; } + private boolean isInAABB(AxisAlignedBB aabb, float hitX, float hitY, float hitZ) { + return hitX >= aabb.minX && hitX <= aabb.maxX && hitY >= aabb.minY && hitY <= aabb.maxY && hitZ >= aabb.minZ && hitZ <= aabb.maxZ; + } + + protected boolean hitCablePart(IBlockState state, World world, BlockPos pos, float hitX, float hitY, float hitZ) { + state = getActualState(state, world, pos); + + return isInAABB(CORE_AABB, hitX, hitY, hitZ) || + (state.getValue(NORTH) && isInAABB(NORTH_AABB, hitX, hitY, hitZ)) || + (state.getValue(EAST) && isInAABB(EAST_AABB, hitX, hitY, hitZ)) || + (state.getValue(SOUTH) && isInAABB(SOUTH_AABB, hitX, hitY, hitZ)) || + (state.getValue(WEST) && isInAABB(WEST_AABB, hitX, hitY, hitZ)) || + (state.getValue(UP) && isInAABB(UP_AABB, hitX, hitY, hitZ)) || + (state.getValue(DOWN) && isInAABB(DOWN_AABB, hitX, hitY, hitZ)); + } + public List getUnionizedCollisionBoxes(IBlockState state) { List boxes = new ArrayList<>(); diff --git a/src/main/java/refinedstorage/block/BlockConstructor.java b/src/main/java/refinedstorage/block/BlockConstructor.java index 1a17fef82..1f40403f4 100755 --- a/src/main/java/refinedstorage/block/BlockConstructor.java +++ b/src/main/java/refinedstorage/block/BlockConstructor.java @@ -74,8 +74,16 @@ public class BlockConstructor extends BlockCable { return new TileConstructor(); } + private boolean isInAABB(AxisAlignedBB aabb, float hitX, float hitY, float hitZ) { + return hitX >= aabb.minX && hitX <= aabb.maxX && hitY >= aabb.minY && hitY <= aabb.maxY && hitZ >= aabb.minZ && hitZ <= aabb.maxZ; + } + @Override public boolean onBlockActivatedDefault(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) { + if (hitCablePart(state, world, pos, hitX, hitY, hitZ)) { + return false; + } + if (!world.isRemote) { player.openGui(RefinedStorage.INSTANCE, RefinedStorageGui.CONSTRUCTOR, world, pos.getX(), pos.getY(), pos.getZ()); } diff --git a/src/main/java/refinedstorage/block/BlockDestructor.java b/src/main/java/refinedstorage/block/BlockDestructor.java index 24701b07f..a8978ff03 100755 --- a/src/main/java/refinedstorage/block/BlockDestructor.java +++ b/src/main/java/refinedstorage/block/BlockDestructor.java @@ -33,6 +33,10 @@ public class BlockDestructor extends BlockCable { @Override public boolean onBlockActivatedDefault(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) { + if (hitCablePart(state, world, pos, hitX, hitY, hitZ)) { + return false; + } + if (!world.isRemote) { player.openGui(RefinedStorage.INSTANCE, RefinedStorageGui.DESTRUCTOR, world, pos.getX(), pos.getY(), pos.getZ()); } diff --git a/src/main/java/refinedstorage/block/BlockExporter.java b/src/main/java/refinedstorage/block/BlockExporter.java index 9e7dd9bcc..b78aaef9f 100755 --- a/src/main/java/refinedstorage/block/BlockExporter.java +++ b/src/main/java/refinedstorage/block/BlockExporter.java @@ -87,6 +87,10 @@ public class BlockExporter extends BlockCable { @Override public boolean onBlockActivatedDefault(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) { + if (hitCablePart(state, world, pos, hitX, hitY, hitZ)) { + return false; + } + if (!world.isRemote) { player.openGui(RefinedStorage.INSTANCE, RefinedStorageGui.EXPORTER, world, pos.getX(), pos.getY(), pos.getZ()); } diff --git a/src/main/java/refinedstorage/block/BlockExternalStorage.java b/src/main/java/refinedstorage/block/BlockExternalStorage.java index 25764e4eb..37e0c6660 100755 --- a/src/main/java/refinedstorage/block/BlockExternalStorage.java +++ b/src/main/java/refinedstorage/block/BlockExternalStorage.java @@ -70,6 +70,10 @@ public class BlockExternalStorage extends BlockCable { @Override public boolean onBlockActivatedDefault(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) { + if (hitCablePart(state, world, pos, hitX, hitY, hitZ)) { + return false; + } + if (!world.isRemote) { player.openGui(RefinedStorage.INSTANCE, RefinedStorageGui.STORAGE, world, pos.getX(), pos.getY(), pos.getZ()); } diff --git a/src/main/java/refinedstorage/block/BlockImporter.java b/src/main/java/refinedstorage/block/BlockImporter.java index d39e74d01..0db3bd463 100755 --- a/src/main/java/refinedstorage/block/BlockImporter.java +++ b/src/main/java/refinedstorage/block/BlockImporter.java @@ -87,6 +87,10 @@ public class BlockImporter extends BlockCable { @Override public boolean onBlockActivatedDefault(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) { + if (hitCablePart(state, world, pos, hitX, hitY, hitZ)) { + return false; + } + if (!world.isRemote) { player.openGui(RefinedStorage.INSTANCE, RefinedStorageGui.IMPORTER, world, pos.getX(), pos.getY(), pos.getZ()); } From 4e0a0de50964e2bf73f1c34786d4afcc1cd6b84a Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sun, 7 Aug 2016 01:11:52 +0200 Subject: [PATCH 124/214] Remove duplicate method --- src/main/java/refinedstorage/block/BlockConstructor.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/main/java/refinedstorage/block/BlockConstructor.java b/src/main/java/refinedstorage/block/BlockConstructor.java index 1f40403f4..0ae765eda 100755 --- a/src/main/java/refinedstorage/block/BlockConstructor.java +++ b/src/main/java/refinedstorage/block/BlockConstructor.java @@ -74,10 +74,6 @@ public class BlockConstructor extends BlockCable { return new TileConstructor(); } - private boolean isInAABB(AxisAlignedBB aabb, float hitX, float hitY, float hitZ) { - return hitX >= aabb.minX && hitX <= aabb.maxX && hitY >= aabb.minY && hitY <= aabb.maxY && hitZ >= aabb.minZ && hitZ <= aabb.maxZ; - } - @Override public boolean onBlockActivatedDefault(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) { if (hitCablePart(state, world, pos, hitX, hitY, hitZ)) { From 257e5650ae5604506e4b0ae4ce54652144d742d3 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sun, 7 Aug 2016 22:04:55 +0200 Subject: [PATCH 125/214] Send controller nodes again with the new system --- .../apiimpl/network/NetworkNodeGraph.java | 12 ++ .../refinedstorage/gui/GuiController.java | 19 +-- .../java/refinedstorage/gui/GuiStorage.java | 4 +- .../java/refinedstorage/gui/grid/GuiGrid.java | 6 +- .../java/refinedstorage/tile/ClientNode.java | 52 ++++++ .../refinedstorage/tile/TileController.java | 151 +++++------------- .../tile/data/RefinedStorageSerializers.java | 44 +++++ 7 files changed, 167 insertions(+), 121 deletions(-) create mode 100755 src/main/java/refinedstorage/tile/ClientNode.java create mode 100755 src/main/java/refinedstorage/tile/data/RefinedStorageSerializers.java diff --git a/src/main/java/refinedstorage/apiimpl/network/NetworkNodeGraph.java b/src/main/java/refinedstorage/apiimpl/network/NetworkNodeGraph.java index 5efa54eb0..f2ca40c22 100755 --- a/src/main/java/refinedstorage/apiimpl/network/NetworkNodeGraph.java +++ b/src/main/java/refinedstorage/apiimpl/network/NetworkNodeGraph.java @@ -117,17 +117,27 @@ public class NetworkNodeGraph implements INetworkNodeGraph { this.nodeHashes = newNodeHashes; if (notify) { + boolean changed = false; + for (INetworkNode newNode : nodes) { if (!oldNodeHashes.contains(hashNode(newNode.getNodeWorld(), newNode))) { newNode.onConnected(controller); + + changed = true; } } for (INetworkNode oldNode : oldNodes) { if (!nodeHashes.contains(hashNode(oldNode.getNodeWorld(), oldNode))) { oldNode.onDisconnected(controller); + + changed = true; } } + + if (changed) { + controller.getDataManager().sendParameterToWatchers(TileController.NODES); + } } } @@ -151,6 +161,8 @@ public class NetworkNodeGraph implements INetworkNodeGraph { nodes.clear(); nodeHashes.clear(); + + controller.getDataManager().sendParameterToWatchers(TileController.NODES); } public World getWorld() { diff --git a/src/main/java/refinedstorage/gui/GuiController.java b/src/main/java/refinedstorage/gui/GuiController.java index 5f3f323b7..a584cfa8d 100755 --- a/src/main/java/refinedstorage/gui/GuiController.java +++ b/src/main/java/refinedstorage/gui/GuiController.java @@ -4,6 +4,7 @@ import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.RenderHelper; import refinedstorage.container.ContainerController; import refinedstorage.gui.sidebutton.SideButtonRedstoneMode; +import refinedstorage.tile.ClientNode; import refinedstorage.tile.TileController; import java.util.List; @@ -43,7 +44,7 @@ public class GuiController extends GuiBase { drawTexture(x, y, 0, 0, width, height); - int barHeightNew = controller.getEnergyScaled(barHeight); + int barHeightNew = TileController.getEnergyScaled(TileController.ENERGY_STORED.getValue(), TileController.ENERGY_CAPACITY.getValue(), barHeight); drawTexture(x + barX, y + barY + barHeight - barHeightNew, 178, barHeight - barHeightNew, barWidth, barHeightNew); } @@ -60,23 +61,23 @@ public class GuiController extends GuiBase { RenderHelper.enableGUIStandardItemLighting(); - List nodes = controller.getClientNodes(); + List nodes = TileController.NODES.getValue(); - TileController.ClientNode nodeHovering = null; + ClientNode nodeHovering = null; for (int i = 0; i < 4; ++i) { if (slot < nodes.size()) { - TileController.ClientNode node = nodes.get(slot); + ClientNode node = nodes.get(slot); - drawItem(x, y + 5, node.stack); + drawItem(x, y + 5, node.getStack()); float scale = 0.5f; GlStateManager.pushMatrix(); GlStateManager.scale(scale, scale, 1); - drawString(calculateOffsetOnScale(x + 1, scale), calculateOffsetOnScale(y - 2, scale), node.stack.getDisplayName()); - drawString(calculateOffsetOnScale(x + 21, scale), calculateOffsetOnScale(y + 10, scale), t("gui.refinedstorage:controller.machine_amount", node.amount)); + drawString(calculateOffsetOnScale(x + 1, scale), calculateOffsetOnScale(y - 2, scale), node.getStack().getDisplayName()); + drawString(calculateOffsetOnScale(x + 21, scale), calculateOffsetOnScale(y + 10, scale), t("gui.refinedstorage:controller.machine_amount", node.getAmount())); GlStateManager.popMatrix(); @@ -96,7 +97,7 @@ public class GuiController extends GuiBase { } if (nodeHovering != null) { - drawTooltip(mouseX, mouseY, t("misc.refinedstorage:energy_usage_minimal", nodeHovering.energyUsage)); + drawTooltip(mouseX, mouseY, t("misc.refinedstorage:energy_usage_minimal", nodeHovering.getEnergyUsage())); } if (inBounds(barX, barY, barWidth, barHeight, mouseX, mouseY)) { @@ -109,7 +110,7 @@ public class GuiController extends GuiBase { } private int getRows() { - int max = (int) Math.ceil((float) controller.getClientNodes().size() / (float) 2); + int max = (int) Math.ceil((float) TileController.NODES.getValue().size() / (float) 2); return max < 0 ? 0 : max; } diff --git a/src/main/java/refinedstorage/gui/GuiStorage.java b/src/main/java/refinedstorage/gui/GuiStorage.java index a32eb9cba..fff34ef1c 100755 --- a/src/main/java/refinedstorage/gui/GuiStorage.java +++ b/src/main/java/refinedstorage/gui/GuiStorage.java @@ -117,6 +117,8 @@ public class GuiStorage extends GuiBase { } public void updatePriority(int priority) { - priorityField.setText(String.valueOf(priority)); + if (priorityField != null) { + priorityField.setText(String.valueOf(priority)); + } } } diff --git a/src/main/java/refinedstorage/gui/grid/GuiGrid.java b/src/main/java/refinedstorage/gui/grid/GuiGrid.java index 9c33d3db2..64112fd03 100755 --- a/src/main/java/refinedstorage/gui/grid/GuiGrid.java +++ b/src/main/java/refinedstorage/gui/grid/GuiGrid.java @@ -418,7 +418,9 @@ public class GuiGrid extends GuiBase { } public void updateSearchFieldFocus(int mode) { - searchField.setCanLoseFocus(!TileGrid.isSearchBoxModeWithAutoselection(mode)); - searchField.setFocused(TileGrid.isSearchBoxModeWithAutoselection(mode)); + if (searchField != null) { + searchField.setCanLoseFocus(!TileGrid.isSearchBoxModeWithAutoselection(mode)); + searchField.setFocused(TileGrid.isSearchBoxModeWithAutoselection(mode)); + } } } diff --git a/src/main/java/refinedstorage/tile/ClientNode.java b/src/main/java/refinedstorage/tile/ClientNode.java new file mode 100755 index 000000000..47723884e --- /dev/null +++ b/src/main/java/refinedstorage/tile/ClientNode.java @@ -0,0 +1,52 @@ +package refinedstorage.tile; + +import net.minecraft.item.ItemStack; +import refinedstorage.api.storage.CompareUtils; + +public class ClientNode { + private ItemStack stack; + private int amount; + private int energyUsage; + + public ClientNode(ItemStack stack, int amount, int energyUsage) { + this.stack = stack; + this.amount = amount; + this.energyUsage = energyUsage; + } + + public ItemStack getStack() { + return stack; + } + + public int getAmount() { + return amount; + } + + public void setAmount(int amount) { + this.amount = amount; + } + + public int getEnergyUsage() { + return energyUsage; + } + + @Override + public boolean equals(Object other) { + if (this == other) { + return true; + } + + if (!(other instanceof ClientNode)) { + return false; + } + + return energyUsage == ((ClientNode) other).energyUsage && CompareUtils.compareStack(stack, ((ClientNode) other).stack); + } + + @Override + public int hashCode() { + int result = stack.hashCode(); + result = 31 * result + energyUsage; + return result; + } +} diff --git a/src/main/java/refinedstorage/tile/TileController.java b/src/main/java/refinedstorage/tile/TileController.java index 2c92ce535..427a92c8f 100755 --- a/src/main/java/refinedstorage/tile/TileController.java +++ b/src/main/java/refinedstorage/tile/TileController.java @@ -3,6 +3,7 @@ package refinedstorage.tile; import cofh.api.energy.EnergyStorage; import cofh.api.energy.IEnergyReceiver; import net.darkhax.tesla.capability.TeslaCapabilities; +import net.minecraft.block.state.IBlockState; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.ItemStack; @@ -45,6 +46,7 @@ import refinedstorage.network.MessageGridUpdate; import refinedstorage.tile.config.IRedstoneConfigurable; import refinedstorage.tile.config.RedstoneMode; import refinedstorage.tile.data.ITileDataProducer; +import refinedstorage.tile.data.RefinedStorageSerializers; import refinedstorage.tile.data.TileDataManager; import refinedstorage.tile.data.TileDataParameter; import refinedstorage.tile.externalstorage.ExternalStorage; @@ -75,6 +77,41 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR } }); + public static final TileDataParameter> NODES = TileDataManager.createParameter(RefinedStorageSerializers.CLIENT_NODE_SERIALIZER, new ITileDataProducer, TileController>() { + @Override + public List getValue(TileController tile) { + List nodes = new ArrayList<>(); + + for (INetworkNode node : tile.nodeGraph.all()) { + if (node.canUpdate()) { + IBlockState state = tile.worldObj.getBlockState(node.getPosition()); + + ClientNode clientNode = new ClientNode( + new ItemStack(state.getBlock(), 1, state.getBlock().getMetaFromState(state)), + 1, + node.getEnergyUsage() + ); + + if (clientNode.getStack().getItem() != null) { + if (nodes.contains(clientNode)) { + for (ClientNode other : nodes) { + if (other.equals(clientNode)) { + other.setAmount(other.getAmount() + 1); + + break; + } + } + } else { + nodes.add(clientNode); + } + } + } + } + + return nodes; + } + }); + public static final String NBT_ENERGY = "Energy"; public static final String NBT_ENERGY_CAPACITY = "EnergyCapacity"; @@ -122,13 +159,12 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR private RedstoneMode redstoneMode = RedstoneMode.IGNORE; - private List clientNodes = new ArrayList<>(); - public TileController() { dataManager.addWatchedParameter(REDSTONE_MODE); dataManager.addWatchedParameter(ENERGY_USAGE); dataManager.addWatchedParameter(ENERGY_STORED); dataManager.addParameter(ENERGY_CAPACITY); + dataManager.addParameter(NODES); if (IntegrationIC2.isLoaded()) { this.energyEU = new ControllerEnergyIC2(this); @@ -251,10 +287,6 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR super.invalidate(); } - public List getClientNodes() { - return clientNodes; - } - @Override public IGridHandler getGridHandler() { return gridHandler; @@ -570,16 +602,16 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR return energy.getEnergyStored(); } - public int getEnergyScaled(int i) { - return (int) ((float) energy.getEnergyStored() / (float) energy.getMaxEnergyStored() * (float) i); + public static int getEnergyScaled(int stored, int capacity, int scale) { + return (int) ((float) stored / (float) capacity * (float) scale); } public int getEnergyScaledForDisplay() { - return getEnergyScaled(7); + return getEnergyScaled(energy.getEnergyStored(), energy.getMaxEnergyStored(), 7); } public int getEnergyScaledForComparator() { - return getEnergyScaled(15); + return getEnergyScaled(energy.getEnergyStored(), energy.getMaxEnergyStored(), 15); } @Override @@ -625,79 +657,6 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR return type == null ? EnumControllerType.NORMAL : type; } - // @TODO: Sync client nodes - /*@Override - public void readContainerData(ByteBuf buf) { - energy.setEnergyStored(buf.readInt()); - this.energyUsage = buf.readInt(); - this.redstoneMode = RedstoneMode.getById(buf.readInt()); - - List nodes = new ArrayList(); - - int size = buf.readInt(); - - for (int i = 0; i < size; ++i) { - ClientNode node = new ClientNode(); - - node.energyUsage = buf.readInt(); - node.amount = buf.readInt(); - node.stack = ByteBufUtils.readItemStack(buf); - - nodes.add(node); - } - - this.clientNodes = nodes; - } - - @Override - public void writeContainerData(ByteBuf buf) { - buf.writeInt(energy.getEnergyStored()); - buf.writeInt(getEnergyUsage()); - - buf.writeInt(redstoneMode.id); - - List clientNodes = new ArrayList(); - - for (INetworkNode node : nodeGraph.all()) { - if (node.canUpdate()) { - IBlockState state = worldObj.getBlockState(node.getPosition()); - - ClientNode clientNode = new ClientNode(); - - clientNode.energyUsage = node.getEnergyUsage(); - clientNode.amount = 1; - clientNode.stack = new ItemStack(state.getBlock(), 1, state.getBlock().getMetaFromState(state)); - - if (clientNode.stack.getItem() != null) { - if (clientNodes.contains(clientNode)) { - for (ClientNode other : clientNodes) { - if (other.equals(clientNode)) { - other.amount++; - - break; - } - } - } else { - clientNodes.add(clientNode); - } - } - } - } - - buf.writeInt(clientNodes.size()); - - for (ClientNode node : clientNodes) { - buf.writeInt(node.energyUsage); - buf.writeInt(node.amount); - ByteBufUtils.writeItemStack(buf, node.stack); - } - } - - @Override - public Class getContainer() { - return ContainerController.class; - }*/ - @Override public T getCapability(Capability capability, EnumFacing facing) { if (energyTesla != null && (capability == TeslaCapabilities.CAPABILITY_HOLDER || capability == TeslaCapabilities.CAPABILITY_CONSUMER)) { @@ -711,30 +670,4 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR public boolean hasCapability(Capability capability, EnumFacing facing) { return (energyTesla != null && (capability == TeslaCapabilities.CAPABILITY_HOLDER || capability == TeslaCapabilities.CAPABILITY_CONSUMER)) || super.hasCapability(capability, facing); } - - public class ClientNode { - public ItemStack stack; - public int amount; - public int energyUsage; - - @Override - public boolean equals(Object other) { - if (this == other) { - return true; - } - - if (!(other instanceof ClientNode)) { - return false; - } - - return energyUsage == ((ClientNode) other).energyUsage && CompareUtils.compareStack(stack, ((ClientNode) other).stack); - } - - @Override - public int hashCode() { - int result = stack.hashCode(); - result = 31 * result + energyUsage; - return result; - } - } } diff --git a/src/main/java/refinedstorage/tile/data/RefinedStorageSerializers.java b/src/main/java/refinedstorage/tile/data/RefinedStorageSerializers.java new file mode 100755 index 000000000..f027ba319 --- /dev/null +++ b/src/main/java/refinedstorage/tile/data/RefinedStorageSerializers.java @@ -0,0 +1,44 @@ +package refinedstorage.tile.data; + +import net.minecraft.network.PacketBuffer; +import net.minecraft.network.datasync.DataParameter; +import net.minecraft.network.datasync.DataSerializer; +import net.minecraftforge.fml.common.network.ByteBufUtils; +import refinedstorage.tile.ClientNode; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +public final class RefinedStorageSerializers { + public static DataSerializer> CLIENT_NODE_SERIALIZER = new DataSerializer>() { + @Override + public void write(PacketBuffer buf, List nodes) { + buf.writeInt(nodes.size()); + + for (ClientNode node : nodes) { + ByteBufUtils.writeItemStack(buf, node.getStack()); + buf.writeInt(node.getAmount()); + buf.writeInt(node.getEnergyUsage()); + } + } + + @Override + public List read(PacketBuffer buf) throws IOException { + List nodes = new ArrayList<>(); + + int size = buf.readInt(); + + for (int i = 0; i < size; ++i) { + nodes.add(new ClientNode(ByteBufUtils.readItemStack(buf), buf.readInt(), buf.readInt())); + } + + return nodes; + } + + @Override + public DataParameter> createKey(int id) { + return null; + } + }; +} From b830b3c31ecf088aaf652f9e2587c996c2c3d73a Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sun, 7 Aug 2016 22:21:15 +0200 Subject: [PATCH 126/214] Do not render custom box if we are looking at a PartMOP --- src/main/java/refinedstorage/proxy/ClientProxy.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/main/java/refinedstorage/proxy/ClientProxy.java b/src/main/java/refinedstorage/proxy/ClientProxy.java index 20ad5f5b8..6d70cedfd 100755 --- a/src/main/java/refinedstorage/proxy/ClientProxy.java +++ b/src/main/java/refinedstorage/proxy/ClientProxy.java @@ -1,6 +1,8 @@ package refinedstorage.proxy; import mcmultipart.client.multipart.ModelMultipartContainer; +import mcmultipart.raytrace.PartMOP; +import mcmultipart.raytrace.RayTraceUtils; import net.minecraft.block.state.IBlockState; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.Tessellator; @@ -63,6 +65,10 @@ public class ClientProxy extends CommonProxy { state = ((BlockCable) state.getBlock()).getActualState(state, player.worldObj, pos); + if (((BlockCable) state.getBlock()).collisionRayTrace(state, player.worldObj, pos, RayTraceUtils.getStart(player), RayTraceUtils.getEnd(player)) instanceof PartMOP) { + return; + } + List unionized = ((BlockCable) state.getBlock()).getUnionizedCollisionBoxes(state); List nonUnionized = ((BlockCable) state.getBlock()).getNonUnionizedCollisionBoxes(state); From a341cc43193a6c43173700910057be7b19ab7eae Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Mon, 8 Aug 2016 02:16:12 +0200 Subject: [PATCH 127/214] Fixed Crafter facing bottom side on placement --- CHANGELOG.md | 1 + src/main/java/refinedstorage/block/BlockBase.java | 2 +- src/main/java/refinedstorage/block/BlockCable.java | 2 +- src/main/java/refinedstorage/block/BlockCrafter.java | 2 +- .../java/refinedstorage/block/EnumPlacementType.java | 10 +++++++++- 5 files changed, 13 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 48868d7bc..0fbb8ac74 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ - Fixed serverside configs not syncing up with clientside - Fixed not being able to move inventory items in Grid GUI's to hotbar via the number keys - Fixed Relays when being in "Ignore Redstone" mode using up energy +- Fixed Crafter facing bottom side on placement - Improved collisions of Cable parts - You now have to click the actual cable part head in order to get the GUI open diff --git a/src/main/java/refinedstorage/block/BlockBase.java b/src/main/java/refinedstorage/block/BlockBase.java index ffd34a258..85a76e380 100755 --- a/src/main/java/refinedstorage/block/BlockBase.java +++ b/src/main/java/refinedstorage/block/BlockBase.java @@ -103,7 +103,7 @@ public abstract class BlockBase extends Block { IBlockState state = super.onBlockPlaced(world, pos, facing, hitX, hitY, hitZ, meta, entity); if (getPlacementType() != null) { - return state.withProperty(DIRECTION, getPlacementType().getFrom(facing, entity)); + return state.withProperty(DIRECTION, getPlacementType().getFrom(facing, pos, entity)); } return state; diff --git a/src/main/java/refinedstorage/block/BlockCable.java b/src/main/java/refinedstorage/block/BlockCable.java index a91e494e3..e6a6285a4 100755 --- a/src/main/java/refinedstorage/block/BlockCable.java +++ b/src/main/java/refinedstorage/block/BlockCable.java @@ -237,7 +237,7 @@ public class BlockCable extends BlockCoverable { IBlockState state = super.onBlockPlaced(world, pos, facing, hitX, hitY, hitZ, meta, entity); if (getPlacementType() != null) { - return state.withProperty(DIRECTION, getPlacementType().getFrom(facing, entity)); + return state.withProperty(DIRECTION, getPlacementType().getFrom(facing, pos, entity)); } return state; diff --git a/src/main/java/refinedstorage/block/BlockCrafter.java b/src/main/java/refinedstorage/block/BlockCrafter.java index ad95c3552..23f33586a 100755 --- a/src/main/java/refinedstorage/block/BlockCrafter.java +++ b/src/main/java/refinedstorage/block/BlockCrafter.java @@ -33,7 +33,7 @@ public class BlockCrafter extends BlockNode { @Override public EnumPlacementType getPlacementType() { - return EnumPlacementType.ANY; + return EnumPlacementType.ANY_FACE_PLAYER; } public boolean hasConnectivityState() { diff --git a/src/main/java/refinedstorage/block/EnumPlacementType.java b/src/main/java/refinedstorage/block/EnumPlacementType.java index 34945559a..650c8f9e4 100755 --- a/src/main/java/refinedstorage/block/EnumPlacementType.java +++ b/src/main/java/refinedstorage/block/EnumPlacementType.java @@ -1,12 +1,17 @@ package refinedstorage.block; +import net.minecraft.block.BlockPistonBase; import net.minecraft.entity.EntityLivingBase; import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; public enum EnumPlacementType { ANY( EnumFacing.VALUES ), + ANY_FACE_PLAYER( + EnumFacing.VALUES + ), HORIZONTAL( EnumFacing.NORTH, EnumFacing.EAST, @@ -20,10 +25,12 @@ public enum EnumPlacementType { this.allowed = allowed; } - EnumFacing getFrom(EnumFacing facing, EntityLivingBase entity) { + EnumFacing getFrom(EnumFacing facing, BlockPos pos, EntityLivingBase entity) { switch (this) { case ANY: return facing.getOpposite(); + case ANY_FACE_PLAYER: + return BlockPistonBase.getFacingFromEntity(pos, entity); case HORIZONTAL: return entity.getHorizontalFacing().getOpposite(); default: @@ -34,6 +41,7 @@ public enum EnumPlacementType { EnumFacing getNext(EnumFacing previous) { switch (this) { case ANY: + case ANY_FACE_PLAYER: return previous.ordinal() + 1 >= EnumFacing.VALUES.length ? EnumFacing.VALUES[0] : EnumFacing.VALUES[previous.ordinal() + 1]; case HORIZONTAL: return previous.rotateYCCW(); From c80a6bf2a346d35d80bf6c2ec83e26beca0f7ce6 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Mon, 8 Aug 2016 02:17:01 +0200 Subject: [PATCH 128/214] Crafting monitor sync fix --- .../gui/GuiCraftingMonitor.java | 31 ++++--- .../tile/ClientCraftingTask.java | 39 ++++++++ .../refinedstorage/tile/TileController.java | 16 ++++ .../tile/TileCraftingMonitor.java | 89 ++++++------------- .../tile/data/RefinedStorageSerializers.java | 48 +++++++++- 5 files changed, 145 insertions(+), 78 deletions(-) create mode 100755 src/main/java/refinedstorage/tile/ClientCraftingTask.java diff --git a/src/main/java/refinedstorage/gui/GuiCraftingMonitor.java b/src/main/java/refinedstorage/gui/GuiCraftingMonitor.java index 1ee5c86a0..921ad6309 100755 --- a/src/main/java/refinedstorage/gui/GuiCraftingMonitor.java +++ b/src/main/java/refinedstorage/gui/GuiCraftingMonitor.java @@ -8,12 +8,13 @@ import refinedstorage.RefinedStorage; import refinedstorage.container.ContainerCraftingMonitor; import refinedstorage.gui.sidebutton.SideButtonRedstoneMode; import refinedstorage.network.MessageCraftingMonitorCancel; +import refinedstorage.tile.ClientCraftingTask; import refinedstorage.tile.TileCraftingMonitor; import java.io.IOException; import java.util.Arrays; +import java.util.List; -// @TODO: Make it work public class GuiCraftingMonitor extends GuiBase { private static final int VISIBLE_ROWS = 3; @@ -58,12 +59,12 @@ public class GuiCraftingMonitor extends GuiBase { getScrollbar().setCanScroll(getRows() > VISIBLE_ROWS); getScrollbar().setScrollDelta((float) getScrollbar().getScrollbarHeight() / (float) getRows()); - if (itemSelected >= craftingMonitor.getTasks().size()) { + if (itemSelected >= getTasks().size()) { itemSelected = -1; } cancelButton.enabled = itemSelected != -1; - cancelAllButton.enabled = craftingMonitor.getTasks().size() > 0; + cancelAllButton.enabled = getTasks().size() > 0; } @Override @@ -94,28 +95,28 @@ public class GuiCraftingMonitor extends GuiBase { renderItemSelection = false; for (int i = 0; i < 6; ++i) { - if (item < craftingMonitor.getTasks().size()) { + if (item < getTasks().size()) { if (item == itemSelected) { renderItemSelection = true; renderItemSelectionX = x; renderItemSelectionY = y; } - TileCraftingMonitor.ClientSideCraftingTask task = craftingMonitor.getTasks().get(i); + ClientCraftingTask task = getTasks().get(i); - drawItem(x + 4, y + 11, task.output); + drawItem(x + 4, y + 11, task.getOutput()); float scale = 0.5f; GlStateManager.pushMatrix(); GlStateManager.scale(scale, scale, 1); - drawString(calculateOffsetOnScale(x + 5, scale), calculateOffsetOnScale(y + 4, scale), task.output.getDisplayName()); + drawString(calculateOffsetOnScale(x + 5, scale), calculateOffsetOnScale(y + 4, scale), task.getOutput().getDisplayName()); GlStateManager.popMatrix(); - if (inBounds(x + 5, y + 10, 16, 16, mouseX, mouseY) && !task.info.trim().equals("")) { - lines = task.info.split("\n"); + if (inBounds(x + 5, y + 10, 16, 16, mouseX, mouseY) && !task.getInfo().trim().equals("")) { + lines = task.getInfo().split("\n"); for (int j = 0; j < lines.length; ++j) { String line = lines[j]; @@ -151,7 +152,7 @@ public class GuiCraftingMonitor extends GuiBase { } private int getRows() { - int max = (int) Math.ceil((float) craftingMonitor.getTasks().size() / (float) 2); + int max = (int) Math.ceil((float) getTasks().size() / (float) 2); return max < 0 ? 0 : max; } @@ -161,8 +162,8 @@ public class GuiCraftingMonitor extends GuiBase { super.actionPerformed(button); if (button == cancelButton && itemSelected != -1) { - RefinedStorage.INSTANCE.network.sendToServer(new MessageCraftingMonitorCancel(craftingMonitor, craftingMonitor.getTasks().get(itemSelected).id)); - } else if (button == cancelAllButton && craftingMonitor.getTasks().size() > 0) { + RefinedStorage.INSTANCE.network.sendToServer(new MessageCraftingMonitorCancel(craftingMonitor, getTasks().get(itemSelected).getId())); + } else if (button == cancelAllButton && getTasks().size() > 0) { RefinedStorage.INSTANCE.network.sendToServer(new MessageCraftingMonitorCancel(craftingMonitor, -1)); } } @@ -181,7 +182,7 @@ public class GuiCraftingMonitor extends GuiBase { int ix = 8 + (x * ITEM_WIDTH); int iy = 20 + (y * ITEM_HEIGHT); - if (inBounds(ix, iy, ITEM_WIDTH, ITEM_HEIGHT, mouseX - guiLeft, mouseY - guiTop) && item < craftingMonitor.getTasks().size()) { + if (inBounds(ix, iy, ITEM_WIDTH, ITEM_HEIGHT, mouseX - guiLeft, mouseY - guiTop) && item < getTasks().size()) { itemSelected = item; } @@ -190,4 +191,8 @@ public class GuiCraftingMonitor extends GuiBase { } } } + + private List getTasks() { + return TileCraftingMonitor.TASKS.getValue(); + } } diff --git a/src/main/java/refinedstorage/tile/ClientCraftingTask.java b/src/main/java/refinedstorage/tile/ClientCraftingTask.java new file mode 100755 index 000000000..d99f99055 --- /dev/null +++ b/src/main/java/refinedstorage/tile/ClientCraftingTask.java @@ -0,0 +1,39 @@ +package refinedstorage.tile; + +import net.minecraft.item.ItemStack; + +public class ClientCraftingTask { + private ItemStack output; + private int id; + private String info; + + // Used server-side while sending + private ItemStack[] outputs; + + public ClientCraftingTask(ItemStack output, int id, String info) { + this.output = output; + this.id = id; + this.info = info; + } + + public ClientCraftingTask(String info, ItemStack[] outputs) { + this.info = info; + this.outputs = outputs; + } + + public ItemStack getOutput() { + return output; + } + + public ItemStack[] getOutputs() { + return outputs; + } + + public int getId() { + return id; + } + + public String getInfo() { + return info; + } +} diff --git a/src/main/java/refinedstorage/tile/TileController.java b/src/main/java/refinedstorage/tile/TileController.java index 427a92c8f..3d2170e04 100755 --- a/src/main/java/refinedstorage/tile/TileController.java +++ b/src/main/java/refinedstorage/tile/TileController.java @@ -206,6 +206,8 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR Collections.sort(storage.getStorages(), SIZE_COMPARATOR); Collections.sort(storage.getStorages(), PRIORITY_COMPARATOR); + boolean craftingTasksChanged = !craftingTasksToAdd.isEmpty() || !craftingTasksToAddAsLast.isEmpty() || !craftingTasksToCancel.isEmpty(); + for (ICraftingTask taskToCancel : craftingTasksToCancel) { taskToCancel.onCancelled(this); } @@ -226,6 +228,10 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR craftingTasksToAddAsLast.clear(); updateTopCraftingTask(true); + + if (craftingTasksChanged) { + updateCraftingTasks(); + } } wirelessGridHandler.update(); @@ -264,6 +270,14 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR super.update(); } + private void updateCraftingTasks() { + for (INetworkNode node : nodeGraph.all()) { + if (node instanceof TileCraftingMonitor) { + ((TileCraftingMonitor) node).dataManager.sendParameterToWatchers(TileCraftingMonitor.TASKS); + } + } + } + private void updateTopCraftingTask(boolean withSpeed) { if (!craftingTasks.empty()) { markDirty(); @@ -276,6 +290,8 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR top.onDone(this); craftingTasks.pop(); + + updateCraftingTasks(); } } } diff --git a/src/main/java/refinedstorage/tile/TileCraftingMonitor.java b/src/main/java/refinedstorage/tile/TileCraftingMonitor.java index ed5ee141a..422e39d61 100755 --- a/src/main/java/refinedstorage/tile/TileCraftingMonitor.java +++ b/src/main/java/refinedstorage/tile/TileCraftingMonitor.java @@ -1,14 +1,35 @@ package refinedstorage.tile; -import net.minecraft.item.ItemStack; import refinedstorage.RefinedStorage; +import refinedstorage.tile.data.ITileDataProducer; +import refinedstorage.tile.data.RefinedStorageSerializers; +import refinedstorage.tile.data.TileDataManager; +import refinedstorage.tile.data.TileDataParameter; -import java.util.ArrayList; +import java.util.Collections; import java.util.List; +import java.util.stream.Collectors; -// @TODO: Make this work! public class TileCraftingMonitor extends TileNode { - private List tasks = new ArrayList<>(); + public static final TileDataParameter> TASKS = TileDataManager.createParameter(RefinedStorageSerializers.CLIENT_CRAFTING_TASK_SERIALIZER, new ITileDataProducer, TileCraftingMonitor>() { + @Override + public List getValue(TileCraftingMonitor tile) { + if (tile.connected) { + List tasks = tile.network.getCraftingTasks().stream().map(t -> new ClientCraftingTask( + t.getInfo(), + t.getPattern().getOutputs() + )).collect(Collectors.toList()); + + return tasks; + } else { + return Collections.emptyList(); + } + } + }); + + public TileCraftingMonitor() { + dataManager.addParameter(TASKS); + } @Override public int getEnergyUsage() { @@ -18,64 +39,4 @@ public class TileCraftingMonitor extends TileNode { @Override public void updateNode() { } - - /*@Override - public void writeContainerData(ByteBuf buf) { - super.writeContainerData(buf); - - if (connected) { - buf.writeInt(network.getCraftingTasks().size()); - - for (ICraftingTask task : network.getCraftingTasks()) { - ByteBufUtils.writeUTF8String(buf, task.getInfo()); - - buf.writeInt(task.getPattern().getOutputs().length); - - for (ItemStack output : task.getPattern().getOutputs()) { - ByteBufUtils.writeItemStack(buf, output); - } - } - } else { - buf.writeInt(0); - } - } - - @Override - public void readContainerData(ByteBuf buf) { - super.readContainerData(buf); - - int size = buf.readInt(); - - List newTasks = new ArrayList(); - - for (int i = 0; i < size; ++i) { - String info = ByteBufUtils.readUTF8String(buf); - - int outputs = buf.readInt(); - - for (int j = 0; j < outputs; ++j) { - newTasks.add(new ClientSideCraftingTask(ByteBufUtils.readItemStack(buf), i, info)); - } - } - - Collections.reverse(newTasks); - - tasks = newTasks; - }*/ - - public List getTasks() { - return tasks; - } - - public class ClientSideCraftingTask { - public ItemStack output; - public int id; - public String info; - - public ClientSideCraftingTask(ItemStack output, int id, String info) { - this.output = output; - this.id = id; - this.info = info; - } - } } diff --git a/src/main/java/refinedstorage/tile/data/RefinedStorageSerializers.java b/src/main/java/refinedstorage/tile/data/RefinedStorageSerializers.java index f027ba319..83ba9ae34 100755 --- a/src/main/java/refinedstorage/tile/data/RefinedStorageSerializers.java +++ b/src/main/java/refinedstorage/tile/data/RefinedStorageSerializers.java @@ -1,17 +1,20 @@ package refinedstorage.tile.data; +import net.minecraft.item.ItemStack; import net.minecraft.network.PacketBuffer; import net.minecraft.network.datasync.DataParameter; import net.minecraft.network.datasync.DataSerializer; import net.minecraftforge.fml.common.network.ByteBufUtils; +import refinedstorage.tile.ClientCraftingTask; import refinedstorage.tile.ClientNode; import java.io.IOException; import java.util.ArrayList; +import java.util.Collections; import java.util.List; public final class RefinedStorageSerializers { - public static DataSerializer> CLIENT_NODE_SERIALIZER = new DataSerializer>() { + public static final DataSerializer> CLIENT_NODE_SERIALIZER = new DataSerializer>() { @Override public void write(PacketBuffer buf, List nodes) { buf.writeInt(nodes.size()); @@ -41,4 +44,47 @@ public final class RefinedStorageSerializers { return null; } }; + + public static final DataSerializer> CLIENT_CRAFTING_TASK_SERIALIZER = new DataSerializer>() { + @Override + public void write(PacketBuffer buf, List tasks) { + buf.writeInt(tasks.size()); + + for (ClientCraftingTask task : tasks) { + ByteBufUtils.writeUTF8String(buf, task.getInfo()); + + buf.writeInt(task.getOutputs().length); + + for (ItemStack output : task.getOutputs()) { + ByteBufUtils.writeItemStack(buf, output); + } + } + } + + @Override + public List read(PacketBuffer buf) throws IOException { + int size = buf.readInt(); + + List tasks = new ArrayList<>(); + + for (int i = 0; i < size; ++i) { + String info = ByteBufUtils.readUTF8String(buf); + + int outputs = buf.readInt(); + + for (int j = 0; j < outputs; ++j) { + tasks.add(new ClientCraftingTask(ByteBufUtils.readItemStack(buf), i, info)); + } + } + + Collections.reverse(tasks); + + return tasks; + } + + @Override + public DataParameter> createKey(int id) { + return null; + } + }; } From ed7d0cd6c16180d9417910f4108f860d558ff71a Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Mon, 8 Aug 2016 02:23:21 +0200 Subject: [PATCH 129/214] Fix NPE with wireless grids --- .../java/refinedstorage/tile/data/TileDataManager.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/main/java/refinedstorage/tile/data/TileDataManager.java b/src/main/java/refinedstorage/tile/data/TileDataManager.java index aea7a0cb8..fa39d6b0f 100755 --- a/src/main/java/refinedstorage/tile/data/TileDataManager.java +++ b/src/main/java/refinedstorage/tile/data/TileDataManager.java @@ -9,6 +9,7 @@ import refinedstorage.RefinedStorage; import refinedstorage.container.ContainerBase; import refinedstorage.network.MessageTileDataParameter; import refinedstorage.network.MessageTileDataParameterUpdate; +import refinedstorage.tile.TileBase; import java.util.ArrayList; import java.util.HashMap; @@ -94,8 +95,12 @@ public class TileDataManager { for (EntityPlayer player : tile.getWorld().playerEntities) { Container container = player.openContainer; - if (container instanceof ContainerBase && ((ContainerBase) container).getTile().getPos().equals(tile.getPos())) { - sendParameter((EntityPlayerMP) player, parameter); + if (container instanceof ContainerBase) { + TileBase tile = ((ContainerBase) container).getTile(); + + if (tile != null && tile.getPos().equals(this.tile.getPos())) { + sendParameter((EntityPlayerMP) player, parameter); + } } } } From 509de0ccaa0fdc4b2e8cc194b5801a6c2fc8bc11 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Mon, 8 Aug 2016 02:50:50 +0200 Subject: [PATCH 130/214] Make MCMultiPart a hard requirement --- src/main/java/refinedstorage/RefinedStorage.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/refinedstorage/RefinedStorage.java b/src/main/java/refinedstorage/RefinedStorage.java index 6ac2f587d..f2ebce70f 100755 --- a/src/main/java/refinedstorage/RefinedStorage.java +++ b/src/main/java/refinedstorage/RefinedStorage.java @@ -15,10 +15,11 @@ import net.minecraftforge.fml.common.network.NetworkRegistry; import net.minecraftforge.fml.common.network.simpleimpl.SimpleNetworkWrapper; import refinedstorage.proxy.CommonProxy; -@Mod(modid = RefinedStorage.ID, version = RefinedStorage.VERSION) +@Mod(modid = RefinedStorage.ID, version = RefinedStorage.VERSION, dependencies = RefinedStorage.DEPENDENCIES) public final class RefinedStorage { public static final String ID = "refinedstorage"; public static final String VERSION = "0.8.16"; + public static final String DEPENDENCIES = "required-after:mcmultipart"; @SidedProxy(clientSide = "refinedstorage.proxy.ClientProxy", serverSide = "refinedstorage.proxy.ServerProxy") public static CommonProxy PROXY; From d831fea52efc43e5be26de28cd3afa30f01b5cae Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Mon, 8 Aug 2016 17:39:10 +0200 Subject: [PATCH 131/214] Fix cables parts not dropping inventory + NPE error because of lack of default params --- .../java/refinedstorage/block/BlockBase.java | 4 +-- .../java/refinedstorage/block/BlockCable.java | 28 ++++++++++++------- .../java/refinedstorage/tile/TileBase.java | 2 +- .../refinedstorage/tile/TileConstructor.java | 2 +- .../refinedstorage/tile/TileController.java | 2 +- .../java/refinedstorage/tile/TileCrafter.java | 2 +- .../tile/TileCraftingMonitor.java | 3 +- .../refinedstorage/tile/TileDestructor.java | 2 +- .../refinedstorage/tile/TileDiskDrive.java | 2 +- .../refinedstorage/tile/TileExporter.java | 2 +- .../refinedstorage/tile/TileImporter.java | 2 +- .../refinedstorage/tile/TileInterface.java | 2 +- .../tile/TileProcessingPatternEncoder.java | 2 +- .../refinedstorage/tile/TileSolderer.java | 2 +- .../tile/TileWirelessTransmitter.java | 2 +- .../tile/data/TileDataManager.java | 20 +++++++------ .../tile/data/TileDataParameter.java | 3 +- .../refinedstorage/tile/grid/TileGrid.java | 2 +- 18 files changed, 49 insertions(+), 35 deletions(-) diff --git a/src/main/java/refinedstorage/block/BlockBase.java b/src/main/java/refinedstorage/block/BlockBase.java index 85a76e380..9def51704 100755 --- a/src/main/java/refinedstorage/block/BlockBase.java +++ b/src/main/java/refinedstorage/block/BlockBase.java @@ -122,8 +122,8 @@ public abstract class BlockBase extends Block { public void breakBlock(World world, BlockPos pos, IBlockState state) { TileEntity tile = world.getTileEntity(pos); - if (tile instanceof TileBase && ((TileBase) tile).getDroppedItems() != null) { - IItemHandler handler = ((TileBase) tile).getDroppedItems(); + if (tile instanceof TileBase && ((TileBase) tile).getDrops() != null) { + IItemHandler handler = ((TileBase) tile).getDrops(); for (int i = 0; i < handler.getSlots(); ++i) { if (handler.getStackInSlot(i) != null) { diff --git a/src/main/java/refinedstorage/block/BlockCable.java b/src/main/java/refinedstorage/block/BlockCable.java index e6a6285a4..4b778d679 100755 --- a/src/main/java/refinedstorage/block/BlockCable.java +++ b/src/main/java/refinedstorage/block/BlockCable.java @@ -10,7 +10,6 @@ import net.minecraft.block.state.BlockStateContainer; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.InventoryHelper; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; @@ -279,8 +278,8 @@ public class BlockCable extends BlockCoverable { network = ((TileNode) tile).getNetwork(); } - if (tile instanceof TileBase && ((TileBase) tile).getDroppedItems() != null) { - IItemHandler handler = ((TileBase) tile).getDroppedItems(); + if (tile instanceof TileBase && ((TileBase) tile).getDrops() != null) { + IItemHandler handler = ((TileBase) tile).getDrops(); for (int i = 0; i < handler.getSlots(); ++i) { if (handler.getStackInSlot(i) != null) { @@ -298,15 +297,24 @@ public class BlockCable extends BlockCoverable { } @Override - public boolean removedByPlayerDefault(IBlockState state, World world, BlockPos pos, EntityPlayer player, boolean willHarvest) { - return willHarvest ? true : super.removedByPlayerDefault(state, world, pos, player, willHarvest); - } + public List getDropsDefault(IBlockAccess world, BlockPos pos, IBlockState state, int fortune) { + List drops = new ArrayList<>(); - @Override - public void harvestBlockDefault(World world, EntityPlayer player, BlockPos pos, IBlockState state, TileEntity tile, ItemStack stack) { - super.harvestBlockDefault(world, player, pos, state, tile, stack); + drops.add(new ItemStack(this, 1, getMetaFromState(state))); - world.setBlockToAir(pos); + TileEntity tile = world.getTileEntity(pos); + + if (tile instanceof TileBase && ((TileBase) tile).getDrops() != null) { + IItemHandler handler = ((TileBase) tile).getDrops(); + + for (int i = 0; i < handler.getSlots(); ++i) { + if (handler.getStackInSlot(i) != null) { + drops.add(handler.getStackInSlot(i)); + } + } + } + + return drops; } @Override diff --git a/src/main/java/refinedstorage/tile/TileBase.java b/src/main/java/refinedstorage/tile/TileBase.java index fe2ee1d04..fb7a92ac9 100755 --- a/src/main/java/refinedstorage/tile/TileBase.java +++ b/src/main/java/refinedstorage/tile/TileBase.java @@ -126,7 +126,7 @@ public abstract class TileBase extends TileEntity implements ITickable { return worldObj.getTileEntity(pos.offset(direction)); } - public IItemHandler getDroppedItems() { + public IItemHandler getDrops() { return null; } diff --git a/src/main/java/refinedstorage/tile/TileConstructor.java b/src/main/java/refinedstorage/tile/TileConstructor.java index 0165d673f..7f816800c 100755 --- a/src/main/java/refinedstorage/tile/TileConstructor.java +++ b/src/main/java/refinedstorage/tile/TileConstructor.java @@ -131,7 +131,7 @@ public class TileConstructor extends TileMultipartNode implements IComparable { } @Override - public IItemHandler getDroppedItems() { + public IItemHandler getDrops() { return upgrades; } diff --git a/src/main/java/refinedstorage/tile/TileController.java b/src/main/java/refinedstorage/tile/TileController.java index 3d2170e04..f3212cc49 100755 --- a/src/main/java/refinedstorage/tile/TileController.java +++ b/src/main/java/refinedstorage/tile/TileController.java @@ -110,7 +110,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR return nodes; } - }); + }, new ArrayList<>()); public static final String NBT_ENERGY = "Energy"; public static final String NBT_ENERGY_CAPACITY = "EnergyCapacity"; diff --git a/src/main/java/refinedstorage/tile/TileCrafter.java b/src/main/java/refinedstorage/tile/TileCrafter.java index 753721bed..300e7adf5 100755 --- a/src/main/java/refinedstorage/tile/TileCrafter.java +++ b/src/main/java/refinedstorage/tile/TileCrafter.java @@ -94,7 +94,7 @@ public class TileCrafter extends TileNode implements ICraftingPatternContainer { } @Override - public IItemHandler getDroppedItems() { + public IItemHandler getDrops() { return new CombinedInvWrapper(patterns, upgrades); } diff --git a/src/main/java/refinedstorage/tile/TileCraftingMonitor.java b/src/main/java/refinedstorage/tile/TileCraftingMonitor.java index 422e39d61..67875e4d8 100755 --- a/src/main/java/refinedstorage/tile/TileCraftingMonitor.java +++ b/src/main/java/refinedstorage/tile/TileCraftingMonitor.java @@ -6,6 +6,7 @@ import refinedstorage.tile.data.RefinedStorageSerializers; import refinedstorage.tile.data.TileDataManager; import refinedstorage.tile.data.TileDataParameter; +import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.stream.Collectors; @@ -25,7 +26,7 @@ public class TileCraftingMonitor extends TileNode { return Collections.emptyList(); } } - }); + }, new ArrayList<>()); public TileCraftingMonitor() { dataManager.addParameter(TASKS); diff --git a/src/main/java/refinedstorage/tile/TileDestructor.java b/src/main/java/refinedstorage/tile/TileDestructor.java index 71651bde3..6b9b05ebc 100755 --- a/src/main/java/refinedstorage/tile/TileDestructor.java +++ b/src/main/java/refinedstorage/tile/TileDestructor.java @@ -146,7 +146,7 @@ public class TileDestructor extends TileMultipartNode implements IComparable, IF } @Override - public IItemHandler getDroppedItems() { + public IItemHandler getDrops() { return upgrades; } diff --git a/src/main/java/refinedstorage/tile/TileDiskDrive.java b/src/main/java/refinedstorage/tile/TileDiskDrive.java index c387ec04e..c5e6e69ba 100755 --- a/src/main/java/refinedstorage/tile/TileDiskDrive.java +++ b/src/main/java/refinedstorage/tile/TileDiskDrive.java @@ -355,7 +355,7 @@ public class TileDiskDrive extends TileNode implements IStorageProvider, IStorag } @Override - public IItemHandler getDroppedItems() { + public IItemHandler getDrops() { return disks; } diff --git a/src/main/java/refinedstorage/tile/TileExporter.java b/src/main/java/refinedstorage/tile/TileExporter.java index 489d505e2..9b83d7e52 100755 --- a/src/main/java/refinedstorage/tile/TileExporter.java +++ b/src/main/java/refinedstorage/tile/TileExporter.java @@ -122,7 +122,7 @@ public class TileExporter extends TileMultipartNode implements IComparable { } @Override - public IItemHandler getDroppedItems() { + public IItemHandler getDrops() { return upgrades; } diff --git a/src/main/java/refinedstorage/tile/TileImporter.java b/src/main/java/refinedstorage/tile/TileImporter.java index 0ad6f77f7..8c4a1592f 100755 --- a/src/main/java/refinedstorage/tile/TileImporter.java +++ b/src/main/java/refinedstorage/tile/TileImporter.java @@ -140,7 +140,7 @@ public class TileImporter extends TileMultipartNode implements IComparable, IFil } @Override - public IItemHandler getDroppedItems() { + public IItemHandler getDrops() { return upgrades; } diff --git a/src/main/java/refinedstorage/tile/TileInterface.java b/src/main/java/refinedstorage/tile/TileInterface.java index 642fac8fc..6b6359ecb 100755 --- a/src/main/java/refinedstorage/tile/TileInterface.java +++ b/src/main/java/refinedstorage/tile/TileInterface.java @@ -150,7 +150,7 @@ public class TileInterface extends TileNode implements IComparable { } @Override - public IItemHandler getDroppedItems() { + public IItemHandler getDrops() { return new CombinedInvWrapper(importItems, exportItems, upgrades); } diff --git a/src/main/java/refinedstorage/tile/TileProcessingPatternEncoder.java b/src/main/java/refinedstorage/tile/TileProcessingPatternEncoder.java index 2a90c6dd1..d915efc8b 100755 --- a/src/main/java/refinedstorage/tile/TileProcessingPatternEncoder.java +++ b/src/main/java/refinedstorage/tile/TileProcessingPatternEncoder.java @@ -84,7 +84,7 @@ public class TileProcessingPatternEncoder extends TileBase { } @Override - public IItemHandler getDroppedItems() { + public IItemHandler getDrops() { return patterns; } diff --git a/src/main/java/refinedstorage/tile/TileSolderer.java b/src/main/java/refinedstorage/tile/TileSolderer.java index 3b45947b9..136c0dce6 100755 --- a/src/main/java/refinedstorage/tile/TileSolderer.java +++ b/src/main/java/refinedstorage/tile/TileSolderer.java @@ -185,7 +185,7 @@ public class TileSolderer extends TileNode { } @Override - public IItemHandler getDroppedItems() { + public IItemHandler getDrops() { return new CombinedInvWrapper(items, upgrades); } diff --git a/src/main/java/refinedstorage/tile/TileWirelessTransmitter.java b/src/main/java/refinedstorage/tile/TileWirelessTransmitter.java index ff5ba6bd1..9c83b27e3 100755 --- a/src/main/java/refinedstorage/tile/TileWirelessTransmitter.java +++ b/src/main/java/refinedstorage/tile/TileWirelessTransmitter.java @@ -66,7 +66,7 @@ public class TileWirelessTransmitter extends TileNode implements IWirelessTransm } @Override - public IItemHandler getDroppedItems() { + public IItemHandler getDrops() { return upgrades; } diff --git a/src/main/java/refinedstorage/tile/data/TileDataManager.java b/src/main/java/refinedstorage/tile/data/TileDataManager.java index fa39d6b0f..d1ab8ef43 100755 --- a/src/main/java/refinedstorage/tile/data/TileDataManager.java +++ b/src/main/java/refinedstorage/tile/data/TileDataManager.java @@ -26,15 +26,19 @@ public class TileDataManager { private List watchedParametersCache = new ArrayList<>(); public static TileDataParameter createParameter(DataSerializer serializer, ITileDataProducer producer) { - return createParameter(serializer, producer, null); + return createParameter(serializer, producer, null, null, null); + } + + public static TileDataParameter createParameter(DataSerializer serializer, ITileDataProducer producer, T defaultValue) { + return createParameter(serializer, producer, null, null, defaultValue); } public static TileDataParameter createParameter(DataSerializer serializer, ITileDataProducer producer, ITileDataConsumer consumer) { - return createParameter(serializer, producer, consumer, null); + return createParameter(serializer, producer, consumer, null, null); } - public static TileDataParameter createParameter(DataSerializer serializer, ITileDataProducer producer, ITileDataConsumer consumer, ITileDataListener listener) { - TileDataParameter parameter = new TileDataParameter<>(PARAMETER_ID++, serializer, producer, consumer, listener); + public static TileDataParameter createParameter(DataSerializer serializer, ITileDataProducer producer, ITileDataConsumer consumer, ITileDataListener listener, T defaultValue) { + TileDataParameter parameter = new TileDataParameter<>(PARAMETER_ID++, defaultValue, serializer, producer, consumer, listener); PARAMETER_MAP.put(parameter.getId(), parameter); @@ -55,11 +59,11 @@ public class TileDataManager { this.tile = tile; } - public void addParameter(TileDataParameter parameter) { + public void addParameter(TileDataParameter parameter) { parameters.add(parameter); } - public void addWatchedParameter(TileDataParameter parameter) { + public void addWatchedParameter(TileDataParameter parameter) { addParameter(parameter); watchedParameters.add(parameter); @@ -87,11 +91,11 @@ public class TileDataManager { } } - public void sendParameter(EntityPlayerMP player, TileDataParameter parameter) { + public void sendParameter(EntityPlayerMP player, TileDataParameter parameter) { RefinedStorage.INSTANCE.network.sendTo(new MessageTileDataParameter(tile, parameter), player); } - public void sendParameterToWatchers(TileDataParameter parameter) { + public void sendParameterToWatchers(TileDataParameter parameter) { for (EntityPlayer player : tile.getWorld().playerEntities) { Container container = player.openContainer; diff --git a/src/main/java/refinedstorage/tile/data/TileDataParameter.java b/src/main/java/refinedstorage/tile/data/TileDataParameter.java index 66040e933..9972f3dc1 100755 --- a/src/main/java/refinedstorage/tile/data/TileDataParameter.java +++ b/src/main/java/refinedstorage/tile/data/TileDataParameter.java @@ -11,8 +11,9 @@ public class TileDataParameter { private ITileDataListener listener; private T value; - public TileDataParameter(int id, DataSerializer serializer, ITileDataProducer producer, ITileDataConsumer consumer, ITileDataListener listener) { + public TileDataParameter(int id, T defaultValue, DataSerializer serializer, ITileDataProducer producer, ITileDataConsumer consumer, ITileDataListener listener) { this.id = id; + this.value = defaultValue; this.serializer = serializer; this.valueProducer = producer; this.valueConsumer = consumer; diff --git a/src/main/java/refinedstorage/tile/grid/TileGrid.java b/src/main/java/refinedstorage/tile/grid/TileGrid.java index afc0f3a0f..b8bce37a6 100755 --- a/src/main/java/refinedstorage/tile/grid/TileGrid.java +++ b/src/main/java/refinedstorage/tile/grid/TileGrid.java @@ -445,7 +445,7 @@ public class TileGrid extends TileNode implements IGrid { } @Override - public IItemHandler getDroppedItems() { + public IItemHandler getDrops() { switch (getType()) { case CRAFTING: return new CombinedInvWrapper(filter, new InvWrapper(matrix)); From 28cf57eb6ba1cdbabd398df2ccd205ecc5aedaa5 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Mon, 8 Aug 2016 18:40:23 +0200 Subject: [PATCH 132/214] Fix multipart issue on server --- src/main/java/refinedstorage/block/BlockCable.java | 5 +++++ src/main/java/refinedstorage/tile/TileDetector.java | 2 +- src/main/java/refinedstorage/tile/config/IPrioritizable.java | 2 +- src/main/java/refinedstorage/tile/grid/TileGrid.java | 2 +- 4 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/main/java/refinedstorage/block/BlockCable.java b/src/main/java/refinedstorage/block/BlockCable.java index 4b778d679..2d1570a75 100755 --- a/src/main/java/refinedstorage/block/BlockCable.java +++ b/src/main/java/refinedstorage/block/BlockCable.java @@ -210,6 +210,11 @@ public class BlockCable extends BlockCoverable { } } + @Override + public AxisAlignedBB getSelectedBoundingBoxDefault(IBlockState state, World worldIn, BlockPos pos) { + return state.getBoundingBox(worldIn, pos).offset(pos); + } + @Override public RayTraceResult collisionRayTraceDefault(IBlockState state, World world, BlockPos pos, Vec3d start, Vec3d end) { RayTraceUtils.AdvancedRayTraceResult result = RayTraceUtils.collisionRayTrace(world, pos, start, end, getCollisionBoxes(this.getActualState(state, world, pos))); diff --git a/src/main/java/refinedstorage/tile/TileDetector.java b/src/main/java/refinedstorage/tile/TileDetector.java index 7b90ce4fc..aafffaf37 100755 --- a/src/main/java/refinedstorage/tile/TileDetector.java +++ b/src/main/java/refinedstorage/tile/TileDetector.java @@ -59,7 +59,7 @@ public class TileDetector extends TileNode implements IComparable { ((GuiDetector) gui).AMOUNT.setText(String.valueOf(parameter.getValue())); } } - }); + }, 0); private static final int SPEED = 5; diff --git a/src/main/java/refinedstorage/tile/config/IPrioritizable.java b/src/main/java/refinedstorage/tile/config/IPrioritizable.java index 7d5464eb0..c2383a849 100755 --- a/src/main/java/refinedstorage/tile/config/IPrioritizable.java +++ b/src/main/java/refinedstorage/tile/config/IPrioritizable.java @@ -27,7 +27,7 @@ public interface IPrioritizable { if (FMLCommonHandler.instance().getEffectiveSide() == Side.CLIENT && Minecraft.getMinecraft().currentScreen instanceof GuiStorage) { ((GuiStorage) Minecraft.getMinecraft().currentScreen).updatePriority(parameter.getValue()); } - }); + }, 0); } int getPriority(); diff --git a/src/main/java/refinedstorage/tile/grid/TileGrid.java b/src/main/java/refinedstorage/tile/grid/TileGrid.java index b8bce37a6..872feb558 100755 --- a/src/main/java/refinedstorage/tile/grid/TileGrid.java +++ b/src/main/java/refinedstorage/tile/grid/TileGrid.java @@ -105,7 +105,7 @@ public class TileGrid extends TileNode implements IGrid { if (FMLCommonHandler.instance().getEffectiveSide() == Side.CLIENT && Minecraft.getMinecraft().currentScreen instanceof GuiGrid) { ((GuiGrid) Minecraft.getMinecraft().currentScreen).updateSearchFieldFocus(parameter.getValue()); } - }); + }, 0); public static final String NBT_VIEW_TYPE = "ViewType"; public static final String NBT_SORTING_DIRECTION = "SortingDirection"; From 776c56f087947517c3c9e4c74cec89a9098f9087 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Mon, 8 Aug 2016 18:45:36 +0200 Subject: [PATCH 133/214] Every tiledataparam needs a default value --- .../java/refinedstorage/tile/TileController.java | 10 +++++----- .../refinedstorage/tile/TileCraftingMonitor.java | 4 ++-- .../java/refinedstorage/tile/TileDetector.java | 6 +++--- .../tile/TileNetworkTransmitter.java | 6 +++--- .../java/refinedstorage/tile/TileSolderer.java | 4 ++-- src/main/java/refinedstorage/tile/TileStorage.java | 2 +- .../tile/TileWirelessTransmitter.java | 2 +- .../refinedstorage/tile/config/IComparable.java | 2 +- .../refinedstorage/tile/config/IFilterable.java | 2 +- .../refinedstorage/tile/config/IPrioritizable.java | 4 ++-- .../refinedstorage/tile/config/RedstoneMode.java | 2 +- .../refinedstorage/tile/data/TileDataManager.java | 14 +++++--------- .../tile/externalstorage/TileExternalStorage.java | 4 ++-- .../java/refinedstorage/tile/grid/TileGrid.java | 10 +++++----- 14 files changed, 34 insertions(+), 38 deletions(-) diff --git a/src/main/java/refinedstorage/tile/TileController.java b/src/main/java/refinedstorage/tile/TileController.java index f3212cc49..919e8e100 100755 --- a/src/main/java/refinedstorage/tile/TileController.java +++ b/src/main/java/refinedstorage/tile/TileController.java @@ -56,28 +56,28 @@ import java.util.*; public class TileController extends TileBase implements INetworkMaster, IEnergyReceiver, IRedstoneConfigurable { public static final TileDataParameter REDSTONE_MODE = RedstoneMode.createParameter(); - public static final TileDataParameter ENERGY_USAGE = TileDataManager.createParameter(DataSerializers.VARINT, new ITileDataProducer() { + public static final TileDataParameter ENERGY_USAGE = TileDataManager.createParameter(DataSerializers.VARINT, 0, new ITileDataProducer() { @Override public Integer getValue(TileController tile) { return tile.getEnergyUsage(); } }); - public static final TileDataParameter ENERGY_STORED = TileDataManager.createParameter(DataSerializers.VARINT, new ITileDataProducer() { + public static final TileDataParameter ENERGY_STORED = TileDataManager.createParameter(DataSerializers.VARINT, 0, new ITileDataProducer() { @Override public Integer getValue(TileController tile) { return tile.getEnergy().getEnergyStored(); } }); - public static final TileDataParameter ENERGY_CAPACITY = TileDataManager.createParameter(DataSerializers.VARINT, new ITileDataProducer() { + public static final TileDataParameter ENERGY_CAPACITY = TileDataManager.createParameter(DataSerializers.VARINT, 0, new ITileDataProducer() { @Override public Integer getValue(TileController tile) { return tile.getEnergy().getMaxEnergyStored(); } }); - public static final TileDataParameter> NODES = TileDataManager.createParameter(RefinedStorageSerializers.CLIENT_NODE_SERIALIZER, new ITileDataProducer, TileController>() { + public static final TileDataParameter> NODES = TileDataManager.createParameter(RefinedStorageSerializers.CLIENT_NODE_SERIALIZER, new ArrayList<>(), new ITileDataProducer, TileController>() { @Override public List getValue(TileController tile) { List nodes = new ArrayList<>(); @@ -110,7 +110,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR return nodes; } - }, new ArrayList<>()); + }); public static final String NBT_ENERGY = "Energy"; public static final String NBT_ENERGY_CAPACITY = "EnergyCapacity"; diff --git a/src/main/java/refinedstorage/tile/TileCraftingMonitor.java b/src/main/java/refinedstorage/tile/TileCraftingMonitor.java index 67875e4d8..e8b03f82c 100755 --- a/src/main/java/refinedstorage/tile/TileCraftingMonitor.java +++ b/src/main/java/refinedstorage/tile/TileCraftingMonitor.java @@ -12,7 +12,7 @@ import java.util.List; import java.util.stream.Collectors; public class TileCraftingMonitor extends TileNode { - public static final TileDataParameter> TASKS = TileDataManager.createParameter(RefinedStorageSerializers.CLIENT_CRAFTING_TASK_SERIALIZER, new ITileDataProducer, TileCraftingMonitor>() { + public static final TileDataParameter> TASKS = TileDataManager.createParameter(RefinedStorageSerializers.CLIENT_CRAFTING_TASK_SERIALIZER, new ArrayList<>(), new ITileDataProducer, TileCraftingMonitor>() { @Override public List getValue(TileCraftingMonitor tile) { if (tile.connected) { @@ -26,7 +26,7 @@ public class TileCraftingMonitor extends TileNode { return Collections.emptyList(); } } - }, new ArrayList<>()); + }); public TileCraftingMonitor() { dataManager.addParameter(TASKS); diff --git a/src/main/java/refinedstorage/tile/TileDetector.java b/src/main/java/refinedstorage/tile/TileDetector.java index aafffaf37..456294a7a 100755 --- a/src/main/java/refinedstorage/tile/TileDetector.java +++ b/src/main/java/refinedstorage/tile/TileDetector.java @@ -23,7 +23,7 @@ import refinedstorage.tile.data.TileDataParameter; public class TileDetector extends TileNode implements IComparable { public static final TileDataParameter COMPARE = IComparable.createParameter(); - public static final TileDataParameter MODE = TileDataManager.createParameter(DataSerializers.VARINT, new ITileDataProducer() { + public static final TileDataParameter MODE = TileDataManager.createParameter(DataSerializers.VARINT, 0, new ITileDataProducer() { @Override public Integer getValue(TileDetector tile) { return tile.mode; @@ -39,7 +39,7 @@ public class TileDetector extends TileNode implements IComparable { } }); - public static final TileDataParameter AMOUNT = TileDataManager.createParameter(DataSerializers.VARINT, new ITileDataProducer() { + public static final TileDataParameter AMOUNT = TileDataManager.createParameter(DataSerializers.VARINT, 0, new ITileDataProducer() { @Override public Integer getValue(TileDetector tile) { return tile.amount; @@ -59,7 +59,7 @@ public class TileDetector extends TileNode implements IComparable { ((GuiDetector) gui).AMOUNT.setText(String.valueOf(parameter.getValue())); } } - }, 0); + }); private static final int SPEED = 5; diff --git a/src/main/java/refinedstorage/tile/TileNetworkTransmitter.java b/src/main/java/refinedstorage/tile/TileNetworkTransmitter.java index 43525596c..558668af0 100755 --- a/src/main/java/refinedstorage/tile/TileNetworkTransmitter.java +++ b/src/main/java/refinedstorage/tile/TileNetworkTransmitter.java @@ -17,21 +17,21 @@ import refinedstorage.tile.data.TileDataManager; import refinedstorage.tile.data.TileDataParameter; public class TileNetworkTransmitter extends TileNode { - public static final TileDataParameter DISTANCE = TileDataManager.createParameter(DataSerializers.VARINT, new ITileDataProducer() { + public static final TileDataParameter DISTANCE = TileDataManager.createParameter(DataSerializers.VARINT, 0, new ITileDataProducer() { @Override public Integer getValue(TileNetworkTransmitter tile) { return (tile.receiver != null && tile.isSameDimension()) ? tile.getDistance() : -1; } }); - public static final TileDataParameter RECEIVER_DIMENSION = TileDataManager.createParameter(DataSerializers.VARINT, new ITileDataProducer() { + public static final TileDataParameter RECEIVER_DIMENSION = TileDataManager.createParameter(DataSerializers.VARINT, 0, new ITileDataProducer() { @Override public Integer getValue(TileNetworkTransmitter tile) { return tile.receiverDimension; } }); - public static final TileDataParameter RECEIVER_DIMENSION_SUPPORTED = TileDataManager.createParameter(DataSerializers.BOOLEAN, new ITileDataProducer() { + public static final TileDataParameter RECEIVER_DIMENSION_SUPPORTED = TileDataManager.createParameter(DataSerializers.BOOLEAN, false, new ITileDataProducer() { @Override public Boolean getValue(TileNetworkTransmitter tile) { return tile.isDimensionSupported(); diff --git a/src/main/java/refinedstorage/tile/TileSolderer.java b/src/main/java/refinedstorage/tile/TileSolderer.java index 136c0dce6..40f991881 100755 --- a/src/main/java/refinedstorage/tile/TileSolderer.java +++ b/src/main/java/refinedstorage/tile/TileSolderer.java @@ -21,14 +21,14 @@ import refinedstorage.tile.data.TileDataManager; import refinedstorage.tile.data.TileDataParameter; public class TileSolderer extends TileNode { - public static final TileDataParameter DURATION = TileDataManager.createParameter(DataSerializers.VARINT, new ITileDataProducer() { + public static final TileDataParameter DURATION = TileDataManager.createParameter(DataSerializers.VARINT, 0, new ITileDataProducer() { @Override public Integer getValue(TileSolderer tile) { return tile.recipe != null ? tile.recipe.getDuration() : 0; } }); - public static final TileDataParameter PROGRESS = TileDataManager.createParameter(DataSerializers.VARINT, new ITileDataProducer() { + public static final TileDataParameter PROGRESS = TileDataManager.createParameter(DataSerializers.VARINT, 0, new ITileDataProducer() { @Override public Integer getValue(TileSolderer tile) { return tile.progress; diff --git a/src/main/java/refinedstorage/tile/TileStorage.java b/src/main/java/refinedstorage/tile/TileStorage.java index 55f79d572..67540eef7 100755 --- a/src/main/java/refinedstorage/tile/TileStorage.java +++ b/src/main/java/refinedstorage/tile/TileStorage.java @@ -27,7 +27,7 @@ public class TileStorage extends TileNode implements IStorageProvider, IStorageG public static final TileDataParameter PRIORITY = IPrioritizable.createParameter(); public static final TileDataParameter COMPARE = IComparable.createParameter(); public static final TileDataParameter MODE = IFilterable.createParameter(); - public static final TileDataParameter STORED = TileDataManager.createParameter(DataSerializers.VARINT, new ITileDataProducer() { + public static final TileDataParameter STORED = TileDataManager.createParameter(DataSerializers.VARINT, 0, new ITileDataProducer() { @Override public Integer getValue(TileStorage tile) { return NBTStorage.getStoredFromNBT(tile.storageTag); diff --git a/src/main/java/refinedstorage/tile/TileWirelessTransmitter.java b/src/main/java/refinedstorage/tile/TileWirelessTransmitter.java index 9c83b27e3..55b97b849 100755 --- a/src/main/java/refinedstorage/tile/TileWirelessTransmitter.java +++ b/src/main/java/refinedstorage/tile/TileWirelessTransmitter.java @@ -17,7 +17,7 @@ import refinedstorage.tile.data.TileDataManager; import refinedstorage.tile.data.TileDataParameter; public class TileWirelessTransmitter extends TileNode implements IWirelessTransmitter { - public static final TileDataParameter RANGE = TileDataManager.createParameter(DataSerializers.VARINT, new ITileDataProducer() { + public static final TileDataParameter RANGE = TileDataManager.createParameter(DataSerializers.VARINT, 0, new ITileDataProducer() { @Override public Integer getValue(TileWirelessTransmitter tile) { return tile.getRange(); diff --git a/src/main/java/refinedstorage/tile/config/IComparable.java b/src/main/java/refinedstorage/tile/config/IComparable.java index 4b5790915..4a3afa805 100755 --- a/src/main/java/refinedstorage/tile/config/IComparable.java +++ b/src/main/java/refinedstorage/tile/config/IComparable.java @@ -9,7 +9,7 @@ import refinedstorage.tile.data.TileDataParameter; public interface IComparable { static TileDataParameter createParameter() { - return TileDataManager.createParameter(DataSerializers.VARINT, new ITileDataProducer() { + return TileDataManager.createParameter(DataSerializers.VARINT, 0, new ITileDataProducer() { @Override public Integer getValue(T tile) { return ((IComparable) tile).getCompare(); diff --git a/src/main/java/refinedstorage/tile/config/IFilterable.java b/src/main/java/refinedstorage/tile/config/IFilterable.java index a60351b17..16a69f92b 100755 --- a/src/main/java/refinedstorage/tile/config/IFilterable.java +++ b/src/main/java/refinedstorage/tile/config/IFilterable.java @@ -15,7 +15,7 @@ public interface IFilterable { int BLACKLIST = 1; static TileDataParameter createParameter() { - return TileDataManager.createParameter(DataSerializers.VARINT, new ITileDataProducer() { + return TileDataManager.createParameter(DataSerializers.VARINT, 0, new ITileDataProducer() { @Override public Integer getValue(T tile) { return ((IFilterable) tile).getMode(); diff --git a/src/main/java/refinedstorage/tile/config/IPrioritizable.java b/src/main/java/refinedstorage/tile/config/IPrioritizable.java index c2383a849..70f1dda84 100755 --- a/src/main/java/refinedstorage/tile/config/IPrioritizable.java +++ b/src/main/java/refinedstorage/tile/config/IPrioritizable.java @@ -13,7 +13,7 @@ import refinedstorage.tile.data.TileDataParameter; public interface IPrioritizable { static TileDataParameter createParameter() { - return TileDataManager.createParameter(DataSerializers.VARINT, new ITileDataProducer() { + return TileDataManager.createParameter(DataSerializers.VARINT, 0, new ITileDataProducer() { @Override public Integer getValue(T tile) { return ((IPrioritizable) tile).getPriority(); @@ -27,7 +27,7 @@ public interface IPrioritizable { if (FMLCommonHandler.instance().getEffectiveSide() == Side.CLIENT && Minecraft.getMinecraft().currentScreen instanceof GuiStorage) { ((GuiStorage) Minecraft.getMinecraft().currentScreen).updatePriority(parameter.getValue()); } - }, 0); + }); } int getPriority(); diff --git a/src/main/java/refinedstorage/tile/config/RedstoneMode.java b/src/main/java/refinedstorage/tile/config/RedstoneMode.java index 3710bd9f7..9a2eb85d3 100755 --- a/src/main/java/refinedstorage/tile/config/RedstoneMode.java +++ b/src/main/java/refinedstorage/tile/config/RedstoneMode.java @@ -32,7 +32,7 @@ public enum RedstoneMode { } public static TileDataParameter createParameter() { - return TileDataManager.createParameter(DataSerializers.VARINT, new ITileDataProducer() { + return TileDataManager.createParameter(DataSerializers.VARINT, 0, new ITileDataProducer() { @Override public Integer getValue(T tile) { return ((IRedstoneConfigurable) tile).getRedstoneMode().ordinal(); diff --git a/src/main/java/refinedstorage/tile/data/TileDataManager.java b/src/main/java/refinedstorage/tile/data/TileDataManager.java index d1ab8ef43..cee5ad105 100755 --- a/src/main/java/refinedstorage/tile/data/TileDataManager.java +++ b/src/main/java/refinedstorage/tile/data/TileDataManager.java @@ -25,19 +25,15 @@ public class TileDataManager { private List watchedParameters = new ArrayList<>(); private List watchedParametersCache = new ArrayList<>(); - public static TileDataParameter createParameter(DataSerializer serializer, ITileDataProducer producer) { - return createParameter(serializer, producer, null, null, null); + public static TileDataParameter createParameter(DataSerializer serializer, T defaultValue, ITileDataProducer producer) { + return createParameter(serializer, defaultValue, producer); } - public static TileDataParameter createParameter(DataSerializer serializer, ITileDataProducer producer, T defaultValue) { - return createParameter(serializer, producer, null, null, defaultValue); + public static TileDataParameter createParameter(DataSerializer serializer, T defaultValue, ITileDataProducer producer, ITileDataConsumer consumer) { + return createParameter(serializer, defaultValue, producer, consumer); } - public static TileDataParameter createParameter(DataSerializer serializer, ITileDataProducer producer, ITileDataConsumer consumer) { - return createParameter(serializer, producer, consumer, null, null); - } - - public static TileDataParameter createParameter(DataSerializer serializer, ITileDataProducer producer, ITileDataConsumer consumer, ITileDataListener listener, T defaultValue) { + public static TileDataParameter createParameter(DataSerializer serializer, T defaultValue, ITileDataProducer producer, ITileDataConsumer consumer, ITileDataListener listener) { TileDataParameter parameter = new TileDataParameter<>(PARAMETER_ID++, defaultValue, serializer, producer, consumer, listener); PARAMETER_MAP.put(parameter.getId(), parameter); diff --git a/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java b/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java index b6f740d3d..f2863064f 100755 --- a/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java +++ b/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java @@ -30,14 +30,14 @@ public class TileExternalStorage extends TileMultipartNode implements IStoragePr public static final TileDataParameter COMPARE = IComparable.createParameter(); public static final TileDataParameter MODE = IFilterable.createParameter(); - public static final TileDataParameter STORED = TileDataManager.createParameter(DataSerializers.VARINT, new ITileDataProducer() { + public static final TileDataParameter STORED = TileDataManager.createParameter(DataSerializers.VARINT, 0, new ITileDataProducer() { @Override public Integer getValue(TileExternalStorage tile) { return tile.getStored(); } }); - public static final TileDataParameter CAPACITY = TileDataManager.createParameter(DataSerializers.VARINT, new ITileDataProducer() { + public static final TileDataParameter CAPACITY = TileDataManager.createParameter(DataSerializers.VARINT, 0, new ITileDataProducer() { @Override public Integer getValue(TileExternalStorage tile) { return tile.getCapacity(); diff --git a/src/main/java/refinedstorage/tile/grid/TileGrid.java b/src/main/java/refinedstorage/tile/grid/TileGrid.java index 872feb558..efcb3f848 100755 --- a/src/main/java/refinedstorage/tile/grid/TileGrid.java +++ b/src/main/java/refinedstorage/tile/grid/TileGrid.java @@ -39,7 +39,7 @@ import java.util.ArrayList; import java.util.List; public class TileGrid extends TileNode implements IGrid { - public static final TileDataParameter VIEW_TYPE = TileDataManager.createParameter(DataSerializers.VARINT, new ITileDataProducer() { + public static final TileDataParameter VIEW_TYPE = TileDataManager.createParameter(DataSerializers.VARINT, 0, new ITileDataProducer() { @Override public Integer getValue(TileGrid tile) { return tile.viewType; @@ -55,7 +55,7 @@ public class TileGrid extends TileNode implements IGrid { } }); - public static final TileDataParameter SORTING_DIRECTION = TileDataManager.createParameter(DataSerializers.VARINT, new ITileDataProducer() { + public static final TileDataParameter SORTING_DIRECTION = TileDataManager.createParameter(DataSerializers.VARINT, 0, new ITileDataProducer() { @Override public Integer getValue(TileGrid tile) { return tile.sortingDirection; @@ -71,7 +71,7 @@ public class TileGrid extends TileNode implements IGrid { } }); - public static final TileDataParameter SORTING_TYPE = TileDataManager.createParameter(DataSerializers.VARINT, new ITileDataProducer() { + public static final TileDataParameter SORTING_TYPE = TileDataManager.createParameter(DataSerializers.VARINT, 0, new ITileDataProducer() { @Override public Integer getValue(TileGrid tile) { return tile.sortingType; @@ -87,7 +87,7 @@ public class TileGrid extends TileNode implements IGrid { } }); - public static final TileDataParameter SEARCH_BOX_MODE = TileDataManager.createParameter(DataSerializers.VARINT, new ITileDataProducer() { + public static final TileDataParameter SEARCH_BOX_MODE = TileDataManager.createParameter(DataSerializers.VARINT, 0, new ITileDataProducer() { @Override public Integer getValue(TileGrid tile) { return tile.searchBoxMode; @@ -105,7 +105,7 @@ public class TileGrid extends TileNode implements IGrid { if (FMLCommonHandler.instance().getEffectiveSide() == Side.CLIENT && Minecraft.getMinecraft().currentScreen instanceof GuiGrid) { ((GuiGrid) Minecraft.getMinecraft().currentScreen).updateSearchFieldFocus(parameter.getValue()); } - }, 0); + }); public static final String NBT_VIEW_TYPE = "ViewType"; public static final String NBT_SORTING_DIRECTION = "SortingDirection"; From 374fcab0125a3f8c40cd299aed3377d994ef34a8 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Mon, 8 Aug 2016 18:56:08 +0200 Subject: [PATCH 134/214] Rename param --- src/main/java/refinedstorage/block/BlockCable.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/refinedstorage/block/BlockCable.java b/src/main/java/refinedstorage/block/BlockCable.java index 2d1570a75..10380f445 100755 --- a/src/main/java/refinedstorage/block/BlockCable.java +++ b/src/main/java/refinedstorage/block/BlockCable.java @@ -211,8 +211,8 @@ public class BlockCable extends BlockCoverable { } @Override - public AxisAlignedBB getSelectedBoundingBoxDefault(IBlockState state, World worldIn, BlockPos pos) { - return state.getBoundingBox(worldIn, pos).offset(pos); + public AxisAlignedBB getSelectedBoundingBoxDefault(IBlockState state, World world, BlockPos pos) { + return state.getBoundingBox(world, pos).offset(pos); } @Override From 0f65462495f12cb0a154f8dcef539329d30f0700 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Mon, 8 Aug 2016 21:32:23 +0200 Subject: [PATCH 135/214] Improve docs --- .../java/refinedstorage/api/network/IGridHandler.java | 8 ++++---- .../java/refinedstorage/apiimpl/network/GridHandler.java | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/main/java/refinedstorage/api/network/IGridHandler.java b/src/main/java/refinedstorage/api/network/IGridHandler.java index 373c28e2f..df97764ed 100755 --- a/src/main/java/refinedstorage/api/network/IGridHandler.java +++ b/src/main/java/refinedstorage/api/network/IGridHandler.java @@ -12,11 +12,11 @@ public interface IGridHandler { /** * Called when a player tries to extract an item from the grid. * - * @param id The ID of the item we're trying to extract + * @param hash The hash of the item we're trying to extract, see {@link refinedstorage.api.network.NetworkUtils#getItemStackHashCode(ItemStack)} * @param flags How we are extracting, see {@link GridExtractFlags} * @param player The player that is attempting the extraction */ - void onExtract(int id, int flags, EntityPlayerMP player); + void onExtract(int hash, int flags, EntityPlayerMP player); /** * Called when a player tries to insert an item to the grid. @@ -38,10 +38,10 @@ public interface IGridHandler { /** * Called when a player requested crafting for an item. * - * @param id The ID of the item we're requesting crafting for + * @param hash The hash of the item we're requesting crafting for, see {@link refinedstorage.api.network.NetworkUtils#getItemStackHashCode(ItemStack)} * @param quantity The amount of that item that has to be crafted */ - void onCraftingRequested(int id, int quantity); + void onCraftingRequested(int hash, int quantity); /** * Called when a player wants to cancel a crafting task. diff --git a/src/main/java/refinedstorage/apiimpl/network/GridHandler.java b/src/main/java/refinedstorage/apiimpl/network/GridHandler.java index dcc2bb780..84c91db77 100755 --- a/src/main/java/refinedstorage/apiimpl/network/GridHandler.java +++ b/src/main/java/refinedstorage/apiimpl/network/GridHandler.java @@ -21,8 +21,8 @@ public class GridHandler implements IGridHandler { } @Override - public void onExtract(int id, int flags, EntityPlayerMP player) { - ItemStack item = network.getStorage().get(id); + public void onExtract(int hash, int flags, EntityPlayerMP player) { + ItemStack item = network.getStorage().get(hash); if (item == null) { return; @@ -113,12 +113,12 @@ public class GridHandler implements IGridHandler { } @Override - public void onCraftingRequested(int id, int quantity) { + public void onCraftingRequested(int hash, int quantity) { if (quantity <= 0 || quantity > MAX_CRAFTING_PER_REQUEST) { return; } - ItemStack stack = network.getStorage().get(id); + ItemStack stack = network.getStorage().get(hash); if (stack == null) { return; From 6838c09889961b6959a785bbd3b4214ba463b47b Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Mon, 8 Aug 2016 22:13:55 +0200 Subject: [PATCH 136/214] Fix parameter order --- src/main/java/refinedstorage/tile/data/TileDataManager.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/refinedstorage/tile/data/TileDataManager.java b/src/main/java/refinedstorage/tile/data/TileDataManager.java index cee5ad105..8e9a4eb59 100755 --- a/src/main/java/refinedstorage/tile/data/TileDataManager.java +++ b/src/main/java/refinedstorage/tile/data/TileDataManager.java @@ -26,11 +26,11 @@ public class TileDataManager { private List watchedParametersCache = new ArrayList<>(); public static TileDataParameter createParameter(DataSerializer serializer, T defaultValue, ITileDataProducer producer) { - return createParameter(serializer, defaultValue, producer); + return createParameter(serializer, defaultValue, producer, null); } public static TileDataParameter createParameter(DataSerializer serializer, T defaultValue, ITileDataProducer producer, ITileDataConsumer consumer) { - return createParameter(serializer, defaultValue, producer, consumer); + return createParameter(serializer, defaultValue, producer, consumer, null); } public static TileDataParameter createParameter(DataSerializer serializer, T defaultValue, ITileDataProducer producer, ITileDataConsumer consumer, ITileDataListener listener) { From 6d50db0f8ab369d1a54c1c3ef6c4ff21e965e996 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Mon, 8 Aug 2016 22:48:09 +0200 Subject: [PATCH 137/214] Forgot to add dataparam --- .../java/refinedstorage/tile/TileWirelessTransmitter.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/refinedstorage/tile/TileWirelessTransmitter.java b/src/main/java/refinedstorage/tile/TileWirelessTransmitter.java index 55b97b849..64a5d6fa0 100755 --- a/src/main/java/refinedstorage/tile/TileWirelessTransmitter.java +++ b/src/main/java/refinedstorage/tile/TileWirelessTransmitter.java @@ -26,6 +26,10 @@ public class TileWirelessTransmitter extends TileNode implements IWirelessTransm private ItemHandlerUpgrade upgrades = new ItemHandlerUpgrade(4, this, ItemUpgrade.TYPE_RANGE); + public TileWirelessTransmitter() { + dataManager.addWatchedParameter(RANGE); + } + @Override public int getEnergyUsage() { return RefinedStorage.INSTANCE.wirelessTransmitterUsage + upgrades.getEnergyUsage(); From ac3c5e6efa6b85746455ead4e8c142405d410437 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Mon, 8 Aug 2016 22:49:10 +0200 Subject: [PATCH 138/214] Document issue --- src/main/java/refinedstorage/block/BlockCable.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/refinedstorage/block/BlockCable.java b/src/main/java/refinedstorage/block/BlockCable.java index 10380f445..aaa6b65d4 100755 --- a/src/main/java/refinedstorage/block/BlockCable.java +++ b/src/main/java/refinedstorage/block/BlockCable.java @@ -210,6 +210,7 @@ public class BlockCable extends BlockCoverable { } } + // @TODO: MCMP issue #40 @Override public AxisAlignedBB getSelectedBoundingBoxDefault(IBlockState state, World world, BlockPos pos) { return state.getBoundingBox(world, pos).offset(pos); From 7e1edec3886f3fa7d1a9ae15fee74aa0a1893895 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Tue, 9 Aug 2016 00:15:55 +0200 Subject: [PATCH 139/214] RC1 --- build.gradle | 4 ++-- src/main/java/refinedstorage/RefinedStorage.java | 2 +- src/main/resources/mcmod.info | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/build.gradle b/build.gradle index 6f57ab7b9..3328e4583 100755 --- a/build.gradle +++ b/build.gradle @@ -12,7 +12,7 @@ buildscript { } apply plugin: 'net.minecraftforge.gradle.forge' -version = "0.8.16" +version = "0.8.16-rc1" group = "refinedstorage" archivesBaseName = "refinedstorage" @@ -45,7 +45,7 @@ repositories { dependencies { deobfCompile "mezz.jei:jei_1.10.2:3.7.+" compile "net.darkhax.tesla:Tesla:1.10-1.2.+" - compile "net.industrial-craft:industrialcraft-2:2.6.27-ex110:api" + compile "net.industrial-craft:industrialcraft-2:2.6.37-ex110:api" deobfCompile "MCMultiPart:MCMultiPart:1.2.+:universal" } diff --git a/src/main/java/refinedstorage/RefinedStorage.java b/src/main/java/refinedstorage/RefinedStorage.java index f2ebce70f..e3e02b99f 100755 --- a/src/main/java/refinedstorage/RefinedStorage.java +++ b/src/main/java/refinedstorage/RefinedStorage.java @@ -18,7 +18,7 @@ import refinedstorage.proxy.CommonProxy; @Mod(modid = RefinedStorage.ID, version = RefinedStorage.VERSION, dependencies = RefinedStorage.DEPENDENCIES) public final class RefinedStorage { public static final String ID = "refinedstorage"; - public static final String VERSION = "0.8.16"; + public static final String VERSION = "0.8.16-rc1"; public static final String DEPENDENCIES = "required-after:mcmultipart"; @SidedProxy(clientSide = "refinedstorage.proxy.ClientProxy", serverSide = "refinedstorage.proxy.ServerProxy") diff --git a/src/main/resources/mcmod.info b/src/main/resources/mcmod.info index 18741e379..842bf9062 100755 --- a/src/main/resources/mcmod.info +++ b/src/main/resources/mcmod.info @@ -3,7 +3,7 @@ "modid": "refinedstorage", "name": "Refined Storage", "description": "A Minecraft mod all about storage.", - "version": "0.8.16", + "version": "0.8.16-rc1", "mcversion": "1.10.2", "url": "", "updateUrl": "", From 8c9e5a3dff6a286c17704d2fa3fb8caa14bdc73c Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Tue, 9 Aug 2016 00:55:17 +0200 Subject: [PATCH 140/214] Fix grid sorting issues --- build.gradle | 2 +- src/main/java/refinedstorage/RefinedStorage.java | 2 +- src/main/java/refinedstorage/gui/grid/GuiGrid.java | 12 +++++++----- src/main/java/refinedstorage/tile/grid/TileGrid.java | 10 ++++------ .../java/refinedstorage/tile/grid/WirelessGrid.java | 7 +++++++ src/main/resources/mcmod.info | 2 +- 6 files changed, 21 insertions(+), 14 deletions(-) diff --git a/build.gradle b/build.gradle index 3328e4583..8da85eb7d 100755 --- a/build.gradle +++ b/build.gradle @@ -12,7 +12,7 @@ buildscript { } apply plugin: 'net.minecraftforge.gradle.forge' -version = "0.8.16-rc1" +version = "0.8.16" group = "refinedstorage" archivesBaseName = "refinedstorage" diff --git a/src/main/java/refinedstorage/RefinedStorage.java b/src/main/java/refinedstorage/RefinedStorage.java index e3e02b99f..f2ebce70f 100755 --- a/src/main/java/refinedstorage/RefinedStorage.java +++ b/src/main/java/refinedstorage/RefinedStorage.java @@ -18,7 +18,7 @@ import refinedstorage.proxy.CommonProxy; @Mod(modid = RefinedStorage.ID, version = RefinedStorage.VERSION, dependencies = RefinedStorage.DEPENDENCIES) public final class RefinedStorage { public static final String ID = "refinedstorage"; - public static final String VERSION = "0.8.16-rc1"; + public static final String VERSION = "0.8.16"; public static final String DEPENDENCIES = "required-after:mcmultipart"; @SidedProxy(clientSide = "refinedstorage.proxy.ClientProxy", serverSide = "refinedstorage.proxy.ServerProxy") diff --git a/src/main/java/refinedstorage/gui/grid/GuiGrid.java b/src/main/java/refinedstorage/gui/grid/GuiGrid.java index 64112fd03..3ca019d45 100755 --- a/src/main/java/refinedstorage/gui/grid/GuiGrid.java +++ b/src/main/java/refinedstorage/gui/grid/GuiGrid.java @@ -103,14 +103,14 @@ public class GuiGrid extends GuiBase { return; } - SORTED_ITEMS.clear(); + List sortedItems = new ArrayList<>(); if (gui.getGrid().isConnected()) { - SORTED_ITEMS.addAll(ITEMS); + sortedItems.addAll(ITEMS); String query = gui.searchField.getText().trim().toLowerCase(); - Iterator t = SORTED_ITEMS.iterator(); + Iterator t = sortedItems.iterator(); while (t.hasNext()) { ClientStack stack = t.next(); @@ -174,13 +174,15 @@ public class GuiGrid extends GuiBase { SORTING_NAME.setSortingDirection(gui.getGrid().getSortingDirection()); SORTING_QUANTITY.setSortingDirection(gui.getGrid().getSortingDirection()); - Collections.sort(SORTED_ITEMS, SORTING_NAME); + Collections.sort(sortedItems, SORTING_NAME); if (gui.getGrid().getSortingType() == TileGrid.SORTING_TYPE_QUANTITY) { - Collections.sort(SORTED_ITEMS, SORTING_QUANTITY); + Collections.sort(sortedItems, SORTING_QUANTITY); } } + SORTED_ITEMS = sortedItems; + gui.getScrollbar().setCanScroll(gui.getRows() > gui.getVisibleRows()); gui.getScrollbar().setScrollDelta((float) gui.getScrollbar().getScrollbarHeight() / (float) gui.getRows()); } diff --git a/src/main/java/refinedstorage/tile/grid/TileGrid.java b/src/main/java/refinedstorage/tile/grid/TileGrid.java index efcb3f848..ee443e58d 100755 --- a/src/main/java/refinedstorage/tile/grid/TileGrid.java +++ b/src/main/java/refinedstorage/tile/grid/TileGrid.java @@ -9,8 +9,6 @@ import net.minecraft.item.crafting.CraftingManager; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.network.datasync.DataSerializers; import net.minecraft.util.math.BlockPos; -import net.minecraftforge.fml.common.FMLCommonHandler; -import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.wrapper.CombinedInvWrapper; import net.minecraftforge.items.wrapper.InvWrapper; @@ -53,7 +51,7 @@ public class TileGrid extends TileNode implements IGrid { tile.markDirty(); } } - }); + }, parameter -> GuiGrid.sortItems()); public static final TileDataParameter SORTING_DIRECTION = TileDataManager.createParameter(DataSerializers.VARINT, 0, new ITileDataProducer() { @Override @@ -69,7 +67,7 @@ public class TileGrid extends TileNode implements IGrid { tile.markDirty(); } } - }); + }, parameter -> GuiGrid.sortItems()); public static final TileDataParameter SORTING_TYPE = TileDataManager.createParameter(DataSerializers.VARINT, 0, new ITileDataProducer() { @Override @@ -85,7 +83,7 @@ public class TileGrid extends TileNode implements IGrid { tile.markDirty(); } } - }); + }, parameter -> GuiGrid.sortItems()); public static final TileDataParameter SEARCH_BOX_MODE = TileDataManager.createParameter(DataSerializers.VARINT, 0, new ITileDataProducer() { @Override @@ -102,7 +100,7 @@ public class TileGrid extends TileNode implements IGrid { } } }, parameter -> { - if (FMLCommonHandler.instance().getEffectiveSide() == Side.CLIENT && Minecraft.getMinecraft().currentScreen instanceof GuiGrid) { + if (Minecraft.getMinecraft().currentScreen instanceof GuiGrid) { ((GuiGrid) Minecraft.getMinecraft().currentScreen).updateSearchFieldFocus(parameter.getValue()); } }); diff --git a/src/main/java/refinedstorage/tile/grid/WirelessGrid.java b/src/main/java/refinedstorage/tile/grid/WirelessGrid.java index 30feedfca..b96be90ba 100755 --- a/src/main/java/refinedstorage/tile/grid/WirelessGrid.java +++ b/src/main/java/refinedstorage/tile/grid/WirelessGrid.java @@ -10,6 +10,7 @@ import refinedstorage.RefinedStorage; import refinedstorage.api.network.IGridHandler; import refinedstorage.block.EnumGridType; import refinedstorage.gui.grid.GridFilteredItem; +import refinedstorage.gui.grid.GuiGrid; import refinedstorage.inventory.ItemHandlerBasic; import refinedstorage.inventory.ItemHandlerGridFilterInGrid; import refinedstorage.item.ItemWirelessGrid; @@ -114,6 +115,8 @@ public class WirelessGrid implements IGrid { RefinedStorage.INSTANCE.network.sendToServer(new MessageWirelessGridSettingsUpdate(type, getSortingDirection(), getSortingType(), getSearchBoxMode())); this.viewType = type; + + GuiGrid.sortItems(); } @Override @@ -121,6 +124,8 @@ public class WirelessGrid implements IGrid { RefinedStorage.INSTANCE.network.sendToServer(new MessageWirelessGridSettingsUpdate(getViewType(), getSortingDirection(), type, getSearchBoxMode())); this.sortingType = type; + + GuiGrid.sortItems(); } @Override @@ -128,6 +133,8 @@ public class WirelessGrid implements IGrid { RefinedStorage.INSTANCE.network.sendToServer(new MessageWirelessGridSettingsUpdate(getViewType(), direction, getSortingType(), getSearchBoxMode())); this.sortingDirection = direction; + + GuiGrid.sortItems(); } @Override diff --git a/src/main/resources/mcmod.info b/src/main/resources/mcmod.info index 842bf9062..18741e379 100755 --- a/src/main/resources/mcmod.info +++ b/src/main/resources/mcmod.info @@ -3,7 +3,7 @@ "modid": "refinedstorage", "name": "Refined Storage", "description": "A Minecraft mod all about storage.", - "version": "0.8.16-rc1", + "version": "0.8.16", "mcversion": "1.10.2", "url": "", "updateUrl": "", From fb3cd0e38ffd5d27bb3f25f9138543638fb7b926 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Tue, 9 Aug 2016 12:55:00 +0200 Subject: [PATCH 141/214] The MCMP bug is fixed --- src/main/java/refinedstorage/block/BlockCable.java | 11 +++++------ src/main/java/refinedstorage/proxy/ClientProxy.java | 3 +-- .../refinedstorage/tile/config/IPrioritizable.java | 4 +--- 3 files changed, 7 insertions(+), 11 deletions(-) diff --git a/src/main/java/refinedstorage/block/BlockCable.java b/src/main/java/refinedstorage/block/BlockCable.java index aaa6b65d4..2d5eac8a1 100755 --- a/src/main/java/refinedstorage/block/BlockCable.java +++ b/src/main/java/refinedstorage/block/BlockCable.java @@ -81,6 +81,11 @@ public class BlockCable extends BlockCoverable { this("cable"); } + @Override + public boolean canProvidePower(IBlockState state) { + return false; + } + @Override public boolean hasTileEntity(IBlockState state) { return true; @@ -210,12 +215,6 @@ public class BlockCable extends BlockCoverable { } } - // @TODO: MCMP issue #40 - @Override - public AxisAlignedBB getSelectedBoundingBoxDefault(IBlockState state, World world, BlockPos pos) { - return state.getBoundingBox(world, pos).offset(pos); - } - @Override public RayTraceResult collisionRayTraceDefault(IBlockState state, World world, BlockPos pos, Vec3d start, Vec3d end) { RayTraceUtils.AdvancedRayTraceResult result = RayTraceUtils.collisionRayTrace(world, pos, start, end, getCollisionBoxes(this.getActualState(state, world, pos))); diff --git a/src/main/java/refinedstorage/proxy/ClientProxy.java b/src/main/java/refinedstorage/proxy/ClientProxy.java index 6d70cedfd..9d3428c90 100755 --- a/src/main/java/refinedstorage/proxy/ClientProxy.java +++ b/src/main/java/refinedstorage/proxy/ClientProxy.java @@ -150,8 +150,7 @@ public class ClientProxy extends CommonProxy { new ResourceLocation("refinedstorage:4k_storage_disk"), new ResourceLocation("refinedstorage:16k_storage_disk"), new ResourceLocation("refinedstorage:64k_storage_disk"), - new ResourceLocation("refinedstorage:creative_storage_disk"), - new ResourceLocation("refinedstorage:debug_storage_disk") + new ResourceLocation("refinedstorage:creative_storage_disk") ); ModelBakery.registerItemVariants(RefinedStorageItems.STORAGE_PART, diff --git a/src/main/java/refinedstorage/tile/config/IPrioritizable.java b/src/main/java/refinedstorage/tile/config/IPrioritizable.java index 70f1dda84..0194638ac 100755 --- a/src/main/java/refinedstorage/tile/config/IPrioritizable.java +++ b/src/main/java/refinedstorage/tile/config/IPrioritizable.java @@ -3,8 +3,6 @@ package refinedstorage.tile.config; import net.minecraft.client.Minecraft; import net.minecraft.network.datasync.DataSerializers; import net.minecraft.tileentity.TileEntity; -import net.minecraftforge.fml.common.FMLCommonHandler; -import net.minecraftforge.fml.relauncher.Side; import refinedstorage.gui.GuiStorage; import refinedstorage.tile.data.ITileDataConsumer; import refinedstorage.tile.data.ITileDataProducer; @@ -24,7 +22,7 @@ public interface IPrioritizable { ((IPrioritizable) tile).setPriority(value); } }, parameter -> { - if (FMLCommonHandler.instance().getEffectiveSide() == Side.CLIENT && Minecraft.getMinecraft().currentScreen instanceof GuiStorage) { + if (Minecraft.getMinecraft().currentScreen instanceof GuiStorage) { ((GuiStorage) Minecraft.getMinecraft().currentScreen).updatePriority(parameter.getValue()); } }); From 840e5dfc384229427961a961257ee8f46c2e99b5 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Tue, 9 Aug 2016 13:33:36 +0200 Subject: [PATCH 142/214] Update dependencies --- build.gradle | 2 +- src/main/java/refinedstorage/RefinedStorage.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index 8da85eb7d..54d70602a 100755 --- a/build.gradle +++ b/build.gradle @@ -46,7 +46,7 @@ dependencies { deobfCompile "mezz.jei:jei_1.10.2:3.7.+" compile "net.darkhax.tesla:Tesla:1.10-1.2.+" compile "net.industrial-craft:industrialcraft-2:2.6.37-ex110:api" - deobfCompile "MCMultiPart:MCMultiPart:1.2.+:universal" + deobfCompile "MCMultiPart:MCMultiPart:1.2.1+:universal" } processResources { diff --git a/src/main/java/refinedstorage/RefinedStorage.java b/src/main/java/refinedstorage/RefinedStorage.java index f2ebce70f..c89aff5ba 100755 --- a/src/main/java/refinedstorage/RefinedStorage.java +++ b/src/main/java/refinedstorage/RefinedStorage.java @@ -19,7 +19,7 @@ import refinedstorage.proxy.CommonProxy; public final class RefinedStorage { public static final String ID = "refinedstorage"; public static final String VERSION = "0.8.16"; - public static final String DEPENDENCIES = "required-after:mcmultipart"; + public static final String DEPENDENCIES = "required-after:mcmultipart@[1.2.1,);"; @SidedProxy(clientSide = "refinedstorage.proxy.ClientProxy", serverSide = "refinedstorage.proxy.ServerProxy") public static CommonProxy PROXY; From 00c3bb6f92cea784ded0dbee146ec23773f71034 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Tue, 9 Aug 2016 14:29:21 +0200 Subject: [PATCH 143/214] Fix ext storage not syncing --- .../externalstorage/TileExternalStorage.java | 34 +++++++++---------- 1 file changed, 16 insertions(+), 18 deletions(-) diff --git a/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java b/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java index f2863064f..3586071a0 100755 --- a/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java +++ b/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java @@ -33,14 +33,26 @@ public class TileExternalStorage extends TileMultipartNode implements IStoragePr public static final TileDataParameter STORED = TileDataManager.createParameter(DataSerializers.VARINT, 0, new ITileDataProducer() { @Override public Integer getValue(TileExternalStorage tile) { - return tile.getStored(); + int stored = 0; + + for (ExternalStorage storage : tile.storages) { + stored += storage.getStored(); + } + + return stored; } }); public static final TileDataParameter CAPACITY = TileDataManager.createParameter(DataSerializers.VARINT, 0, new ITileDataProducer() { @Override public Integer getValue(TileExternalStorage tile) { - return tile.getCapacity(); + int capacity = 0; + + for (ExternalStorage storage : tile.storages) { + capacity += storage.getCapacity(); + } + + return capacity; } }); @@ -241,26 +253,12 @@ public class TileExternalStorage extends TileMultipartNode implements IStoragePr return PRIORITY; } - @Override public int getStored() { - int stored = 0; - - for (ExternalStorage storage : storages) { - stored += storage.getStored(); - } - - return stored; + return STORED.getValue(); } - @Override public int getCapacity() { - int capacity = 0; - - for (ExternalStorage storage : storages) { - capacity += storage.getCapacity(); - } - - return capacity; + return CAPACITY.getValue(); } @Override From 95be3b849474ace62f04db6fb9e8ae3cb7dd85ca Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Tue, 9 Aug 2016 15:13:30 +0200 Subject: [PATCH 144/214] Add shiftclick handler for containerstorage --- CHANGELOG.md | 3 ++- .../container/ContainerDiskDrive.java | 2 +- .../refinedstorage/container/ContainerStorage.java | 13 +++++++++++++ 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0fbb8ac74..9b72d6e6a 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,10 +17,11 @@ - Added German translation by ChillUpX - Grid Filters can now only filter 9 items, but, Grids take 4 filters now instead - Grid Filters can now be configured to compare on NBT and/ or damage +- It is now possible to shift click items to the Storage Device filters - Updated to Forge 2046 - Updated Tesla - Java 8 is now a requirement -- Added MCMultiPart integration for Cables +- Added MCMultiPart integration for Cable Parts ### 0.8.15 **Bugfixes** diff --git a/src/main/java/refinedstorage/container/ContainerDiskDrive.java b/src/main/java/refinedstorage/container/ContainerDiskDrive.java index 3319de5ab..8b90b9004 100755 --- a/src/main/java/refinedstorage/container/ContainerDiskDrive.java +++ b/src/main/java/refinedstorage/container/ContainerDiskDrive.java @@ -35,7 +35,7 @@ public class ContainerDiskDrive extends ContainerStorage { return null; } } else if (!mergeItemStack(stack, 0, 8, false)) { - return null; + return mergeItemStackToSpecimen(stack, 8, 8 + 9); } if (stack.stackSize == 0) { diff --git a/src/main/java/refinedstorage/container/ContainerStorage.java b/src/main/java/refinedstorage/container/ContainerStorage.java index 24ea8343a..c085903f7 100755 --- a/src/main/java/refinedstorage/container/ContainerStorage.java +++ b/src/main/java/refinedstorage/container/ContainerStorage.java @@ -1,6 +1,8 @@ package refinedstorage.container; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; import net.minecraftforge.items.IItemHandler; import refinedstorage.container.slot.SlotSpecimen; import refinedstorage.tile.TileBase; @@ -23,4 +25,15 @@ public class ContainerStorage extends ContainerBase { addPlayerInventory(8, 129); } + + @Override + public ItemStack transferStackInSlot(EntityPlayer player, int index) { + Slot slot = getSlot(index); + + if (slot != null && slot.getHasStack() && index >= 8) { + return mergeItemStackToSpecimen(slot.getStack(), 0, 9); + } + + return null; + } } From 796a65428344ad41dc459d4f478759da4723208e Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Tue, 9 Aug 2016 16:14:40 +0200 Subject: [PATCH 145/214] Fix client / server desync between tile parameters --- .../refinedstorage/proxy/CommonProxy.java | 55 +++++++++++-------- .../refinedstorage/tile/TileController.java | 9 ++- .../tile/TileCraftingMonitor.java | 3 +- .../refinedstorage/tile/TileDetector.java | 5 +- .../tile/TileNetworkTransmitter.java | 7 +-- .../refinedstorage/tile/TileSolderer.java | 5 +- .../java/refinedstorage/tile/TileStorage.java | 3 +- .../tile/TileWirelessTransmitter.java | 3 +- .../tile/config/IComparable.java | 3 +- .../tile/config/IFilterable.java | 3 +- .../tile/config/IPrioritizable.java | 3 +- .../tile/config/RedstoneMode.java | 3 +- .../tile/data/TileDataManager.java | 31 ++++------- .../tile/data/TileDataParameter.java | 15 ++++- .../externalstorage/TileExternalStorage.java | 5 +- .../refinedstorage/tile/grid/TileGrid.java | 8 +-- 16 files changed, 82 insertions(+), 79 deletions(-) diff --git a/src/main/java/refinedstorage/proxy/CommonProxy.java b/src/main/java/refinedstorage/proxy/CommonProxy.java index d3914690e..c22c00fe8 100755 --- a/src/main/java/refinedstorage/proxy/CommonProxy.java +++ b/src/main/java/refinedstorage/proxy/CommonProxy.java @@ -27,14 +27,13 @@ import refinedstorage.item.*; import refinedstorage.network.*; import refinedstorage.tile.*; import refinedstorage.tile.data.ContainerListener; +import refinedstorage.tile.data.TileDataManager; import refinedstorage.tile.externalstorage.TileExternalStorage; import refinedstorage.tile.grid.TileGrid; import java.util.ArrayList; import java.util.List; -import static refinedstorage.RefinedStorage.ID; - public class CommonProxy { protected List cables = new ArrayList<>(); @@ -62,26 +61,26 @@ public class CommonProxy { MinecraftForge.EVENT_BUS.register(new ContainerListener()); - GameRegistry.registerTileEntity(TileController.class, ID + ":controller"); - GameRegistry.registerTileEntity(TileGrid.class, ID + ":grid"); - GameRegistry.registerTileEntity(TileDiskDrive.class, ID + ":disk_drive"); - GameRegistry.registerTileEntity(TileExternalStorage.class, ID + ":external_storage"); - GameRegistry.registerTileEntity(TileImporter.class, ID + ":importer"); - GameRegistry.registerTileEntity(TileExporter.class, ID + ":exporter"); - GameRegistry.registerTileEntity(TileDetector.class, ID + ":detector"); - GameRegistry.registerTileEntity(TileSolderer.class, ID + ":solderer"); - GameRegistry.registerTileEntity(TileDestructor.class, ID + ":destructor"); - GameRegistry.registerTileEntity(TileConstructor.class, ID + ":constructor"); - GameRegistry.registerTileEntity(TileStorage.class, ID + ":storage"); - GameRegistry.registerTileEntity(TileRelay.class, ID + ":relay"); - GameRegistry.registerTileEntity(TileInterface.class, ID + ":interface"); - GameRegistry.registerTileEntity(TileCraftingMonitor.class, ID + ":crafting_monitor"); - GameRegistry.registerTileEntity(TileWirelessTransmitter.class, ID + ":wireless_transmitter"); - GameRegistry.registerTileEntity(TileCrafter.class, ID + ":crafter"); - GameRegistry.registerTileEntity(TileProcessingPatternEncoder.class, ID + ":processing_pattern_encoder"); - GameRegistry.registerTileEntity(TileCable.class, ID + ":cable"); - GameRegistry.registerTileEntity(TileNetworkReceiver.class, ID + ":network_receiver"); - GameRegistry.registerTileEntity(TileNetworkTransmitter.class, ID + ":network_transmitter"); + registerTile(TileController.class, "controller"); + registerTile(TileGrid.class, "grid"); + registerTile(TileDiskDrive.class, "disk_drive"); + registerTile(TileExternalStorage.class, "external_storage"); + registerTile(TileImporter.class, "importer"); + registerTile(TileExporter.class, "exporter"); + registerTile(TileDetector.class, "detector"); + registerTile(TileSolderer.class, "solderer"); + registerTile(TileDestructor.class, "destructor"); + registerTile(TileConstructor.class, "constructor"); + registerTile(TileStorage.class, "storage"); + registerTile(TileRelay.class, "relay"); + registerTile(TileInterface.class, "interface"); + registerTile(TileCraftingMonitor.class, "crafting_monitor"); + registerTile(TileWirelessTransmitter.class, "wireless_transmitter"); + registerTile(TileCrafter.class, "crafter"); + registerTile(TileProcessingPatternEncoder.class, "processing_pattern_encoder"); + registerTile(TileCable.class, "cable"); + registerTile(TileNetworkReceiver.class, "network_receiver"); + registerTile(TileNetworkTransmitter.class, "network_transmitter"); registerBlock(RefinedStorageBlocks.CONTROLLER); registerBlock(RefinedStorageBlocks.GRID); @@ -538,6 +537,18 @@ public class CommonProxy { cables.add(cable); } + private void registerTile(Class tile, String id) { + GameRegistry.registerTileEntity(tile, RefinedStorage.ID + ":" + id); + + try { + TileBase tileInstance = tile.newInstance(); + + tileInstance.getDataManager().getParameters().forEach(TileDataManager::registerParameter); + } catch (InstantiationException | IllegalAccessException e) { + e.printStackTrace(); + } + } + private void registerItem(Item item) { GameRegistry.register(item); } diff --git a/src/main/java/refinedstorage/tile/TileController.java b/src/main/java/refinedstorage/tile/TileController.java index 919e8e100..b722c2e0c 100755 --- a/src/main/java/refinedstorage/tile/TileController.java +++ b/src/main/java/refinedstorage/tile/TileController.java @@ -47,7 +47,6 @@ import refinedstorage.tile.config.IRedstoneConfigurable; import refinedstorage.tile.config.RedstoneMode; import refinedstorage.tile.data.ITileDataProducer; import refinedstorage.tile.data.RefinedStorageSerializers; -import refinedstorage.tile.data.TileDataManager; import refinedstorage.tile.data.TileDataParameter; import refinedstorage.tile.externalstorage.ExternalStorage; @@ -56,28 +55,28 @@ import java.util.*; public class TileController extends TileBase implements INetworkMaster, IEnergyReceiver, IRedstoneConfigurable { public static final TileDataParameter REDSTONE_MODE = RedstoneMode.createParameter(); - public static final TileDataParameter ENERGY_USAGE = TileDataManager.createParameter(DataSerializers.VARINT, 0, new ITileDataProducer() { + public static final TileDataParameter ENERGY_USAGE = new TileDataParameter<>(DataSerializers.VARINT, 0, new ITileDataProducer() { @Override public Integer getValue(TileController tile) { return tile.getEnergyUsage(); } }); - public static final TileDataParameter ENERGY_STORED = TileDataManager.createParameter(DataSerializers.VARINT, 0, new ITileDataProducer() { + public static final TileDataParameter ENERGY_STORED = new TileDataParameter<>(DataSerializers.VARINT, 0, new ITileDataProducer() { @Override public Integer getValue(TileController tile) { return tile.getEnergy().getEnergyStored(); } }); - public static final TileDataParameter ENERGY_CAPACITY = TileDataManager.createParameter(DataSerializers.VARINT, 0, new ITileDataProducer() { + public static final TileDataParameter ENERGY_CAPACITY = new TileDataParameter<>(DataSerializers.VARINT, 0, new ITileDataProducer() { @Override public Integer getValue(TileController tile) { return tile.getEnergy().getMaxEnergyStored(); } }); - public static final TileDataParameter> NODES = TileDataManager.createParameter(RefinedStorageSerializers.CLIENT_NODE_SERIALIZER, new ArrayList<>(), new ITileDataProducer, TileController>() { + public static final TileDataParameter> NODES = new TileDataParameter<>(RefinedStorageSerializers.CLIENT_NODE_SERIALIZER, new ArrayList<>(), new ITileDataProducer, TileController>() { @Override public List getValue(TileController tile) { List nodes = new ArrayList<>(); diff --git a/src/main/java/refinedstorage/tile/TileCraftingMonitor.java b/src/main/java/refinedstorage/tile/TileCraftingMonitor.java index e8b03f82c..bc66338e2 100755 --- a/src/main/java/refinedstorage/tile/TileCraftingMonitor.java +++ b/src/main/java/refinedstorage/tile/TileCraftingMonitor.java @@ -3,7 +3,6 @@ package refinedstorage.tile; import refinedstorage.RefinedStorage; import refinedstorage.tile.data.ITileDataProducer; import refinedstorage.tile.data.RefinedStorageSerializers; -import refinedstorage.tile.data.TileDataManager; import refinedstorage.tile.data.TileDataParameter; import java.util.ArrayList; @@ -12,7 +11,7 @@ import java.util.List; import java.util.stream.Collectors; public class TileCraftingMonitor extends TileNode { - public static final TileDataParameter> TASKS = TileDataManager.createParameter(RefinedStorageSerializers.CLIENT_CRAFTING_TASK_SERIALIZER, new ArrayList<>(), new ITileDataProducer, TileCraftingMonitor>() { + public static final TileDataParameter> TASKS = new TileDataParameter<>(RefinedStorageSerializers.CLIENT_CRAFTING_TASK_SERIALIZER, new ArrayList<>(), new ITileDataProducer, TileCraftingMonitor>() { @Override public List getValue(TileCraftingMonitor tile) { if (tile.connected) { diff --git a/src/main/java/refinedstorage/tile/TileDetector.java b/src/main/java/refinedstorage/tile/TileDetector.java index 456294a7a..6e8b6e7bf 100755 --- a/src/main/java/refinedstorage/tile/TileDetector.java +++ b/src/main/java/refinedstorage/tile/TileDetector.java @@ -17,13 +17,12 @@ import refinedstorage.tile.config.IComparable; import refinedstorage.tile.config.RedstoneMode; import refinedstorage.tile.data.ITileDataConsumer; import refinedstorage.tile.data.ITileDataProducer; -import refinedstorage.tile.data.TileDataManager; import refinedstorage.tile.data.TileDataParameter; public class TileDetector extends TileNode implements IComparable { public static final TileDataParameter COMPARE = IComparable.createParameter(); - public static final TileDataParameter MODE = TileDataManager.createParameter(DataSerializers.VARINT, 0, new ITileDataProducer() { + public static final TileDataParameter MODE = new TileDataParameter<>(DataSerializers.VARINT, 0, new ITileDataProducer() { @Override public Integer getValue(TileDetector tile) { return tile.mode; @@ -39,7 +38,7 @@ public class TileDetector extends TileNode implements IComparable { } }); - public static final TileDataParameter AMOUNT = TileDataManager.createParameter(DataSerializers.VARINT, 0, new ITileDataProducer() { + public static final TileDataParameter AMOUNT = new TileDataParameter<>(DataSerializers.VARINT, 0, new ITileDataProducer() { @Override public Integer getValue(TileDetector tile) { return tile.amount; diff --git a/src/main/java/refinedstorage/tile/TileNetworkTransmitter.java b/src/main/java/refinedstorage/tile/TileNetworkTransmitter.java index 558668af0..6203b352c 100755 --- a/src/main/java/refinedstorage/tile/TileNetworkTransmitter.java +++ b/src/main/java/refinedstorage/tile/TileNetworkTransmitter.java @@ -13,25 +13,24 @@ import refinedstorage.inventory.ItemValidatorBasic; import refinedstorage.item.ItemNetworkCard; import refinedstorage.item.ItemUpgrade; import refinedstorage.tile.data.ITileDataProducer; -import refinedstorage.tile.data.TileDataManager; import refinedstorage.tile.data.TileDataParameter; public class TileNetworkTransmitter extends TileNode { - public static final TileDataParameter DISTANCE = TileDataManager.createParameter(DataSerializers.VARINT, 0, new ITileDataProducer() { + public static final TileDataParameter DISTANCE = new TileDataParameter<>(DataSerializers.VARINT, 0, new ITileDataProducer() { @Override public Integer getValue(TileNetworkTransmitter tile) { return (tile.receiver != null && tile.isSameDimension()) ? tile.getDistance() : -1; } }); - public static final TileDataParameter RECEIVER_DIMENSION = TileDataManager.createParameter(DataSerializers.VARINT, 0, new ITileDataProducer() { + public static final TileDataParameter RECEIVER_DIMENSION = new TileDataParameter<>(DataSerializers.VARINT, 0, new ITileDataProducer() { @Override public Integer getValue(TileNetworkTransmitter tile) { return tile.receiverDimension; } }); - public static final TileDataParameter RECEIVER_DIMENSION_SUPPORTED = TileDataManager.createParameter(DataSerializers.BOOLEAN, false, new ITileDataProducer() { + public static final TileDataParameter RECEIVER_DIMENSION_SUPPORTED = new TileDataParameter<>(DataSerializers.BOOLEAN, false, new ITileDataProducer() { @Override public Boolean getValue(TileNetworkTransmitter tile) { return tile.isDimensionSupported(); diff --git a/src/main/java/refinedstorage/tile/TileSolderer.java b/src/main/java/refinedstorage/tile/TileSolderer.java index 40f991881..74e4c94ff 100755 --- a/src/main/java/refinedstorage/tile/TileSolderer.java +++ b/src/main/java/refinedstorage/tile/TileSolderer.java @@ -17,18 +17,17 @@ import refinedstorage.inventory.ItemHandlerSolderer; import refinedstorage.inventory.ItemHandlerUpgrade; import refinedstorage.item.ItemUpgrade; import refinedstorage.tile.data.ITileDataProducer; -import refinedstorage.tile.data.TileDataManager; import refinedstorage.tile.data.TileDataParameter; public class TileSolderer extends TileNode { - public static final TileDataParameter DURATION = TileDataManager.createParameter(DataSerializers.VARINT, 0, new ITileDataProducer() { + public static final TileDataParameter DURATION = new TileDataParameter<>(DataSerializers.VARINT, 0, new ITileDataProducer() { @Override public Integer getValue(TileSolderer tile) { return tile.recipe != null ? tile.recipe.getDuration() : 0; } }); - public static final TileDataParameter PROGRESS = TileDataManager.createParameter(DataSerializers.VARINT, 0, new ITileDataProducer() { + public static final TileDataParameter PROGRESS = new TileDataParameter<>(DataSerializers.VARINT, 0, new ITileDataProducer() { @Override public Integer getValue(TileSolderer tile) { return tile.progress; diff --git a/src/main/java/refinedstorage/tile/TileStorage.java b/src/main/java/refinedstorage/tile/TileStorage.java index 67540eef7..a9099c39f 100755 --- a/src/main/java/refinedstorage/tile/TileStorage.java +++ b/src/main/java/refinedstorage/tile/TileStorage.java @@ -18,7 +18,6 @@ import refinedstorage.tile.config.IComparable; import refinedstorage.tile.config.IFilterable; import refinedstorage.tile.config.IPrioritizable; import refinedstorage.tile.data.ITileDataProducer; -import refinedstorage.tile.data.TileDataManager; import refinedstorage.tile.data.TileDataParameter; import java.util.List; @@ -27,7 +26,7 @@ public class TileStorage extends TileNode implements IStorageProvider, IStorageG public static final TileDataParameter PRIORITY = IPrioritizable.createParameter(); public static final TileDataParameter COMPARE = IComparable.createParameter(); public static final TileDataParameter MODE = IFilterable.createParameter(); - public static final TileDataParameter STORED = TileDataManager.createParameter(DataSerializers.VARINT, 0, new ITileDataProducer() { + public static final TileDataParameter STORED = new TileDataParameter<>(DataSerializers.VARINT, 0, new ITileDataProducer() { @Override public Integer getValue(TileStorage tile) { return NBTStorage.getStoredFromNBT(tile.storageTag); diff --git a/src/main/java/refinedstorage/tile/TileWirelessTransmitter.java b/src/main/java/refinedstorage/tile/TileWirelessTransmitter.java index 64a5d6fa0..ed325040d 100755 --- a/src/main/java/refinedstorage/tile/TileWirelessTransmitter.java +++ b/src/main/java/refinedstorage/tile/TileWirelessTransmitter.java @@ -13,11 +13,10 @@ import refinedstorage.inventory.ItemHandlerBasic; import refinedstorage.inventory.ItemHandlerUpgrade; import refinedstorage.item.ItemUpgrade; import refinedstorage.tile.data.ITileDataProducer; -import refinedstorage.tile.data.TileDataManager; import refinedstorage.tile.data.TileDataParameter; public class TileWirelessTransmitter extends TileNode implements IWirelessTransmitter { - public static final TileDataParameter RANGE = TileDataManager.createParameter(DataSerializers.VARINT, 0, new ITileDataProducer() { + public static final TileDataParameter RANGE = new TileDataParameter<>(DataSerializers.VARINT, 0, new ITileDataProducer() { @Override public Integer getValue(TileWirelessTransmitter tile) { return tile.getRange(); diff --git a/src/main/java/refinedstorage/tile/config/IComparable.java b/src/main/java/refinedstorage/tile/config/IComparable.java index 4a3afa805..3c3c94366 100755 --- a/src/main/java/refinedstorage/tile/config/IComparable.java +++ b/src/main/java/refinedstorage/tile/config/IComparable.java @@ -4,12 +4,11 @@ import net.minecraft.network.datasync.DataSerializers; import net.minecraft.tileentity.TileEntity; import refinedstorage.tile.data.ITileDataConsumer; import refinedstorage.tile.data.ITileDataProducer; -import refinedstorage.tile.data.TileDataManager; import refinedstorage.tile.data.TileDataParameter; public interface IComparable { static TileDataParameter createParameter() { - return TileDataManager.createParameter(DataSerializers.VARINT, 0, new ITileDataProducer() { + return new TileDataParameter<>(DataSerializers.VARINT, 0, new ITileDataProducer() { @Override public Integer getValue(T tile) { return ((IComparable) tile).getCompare(); diff --git a/src/main/java/refinedstorage/tile/config/IFilterable.java b/src/main/java/refinedstorage/tile/config/IFilterable.java index 16a69f92b..6b2b7beb2 100755 --- a/src/main/java/refinedstorage/tile/config/IFilterable.java +++ b/src/main/java/refinedstorage/tile/config/IFilterable.java @@ -7,7 +7,6 @@ import net.minecraftforge.items.IItemHandler; import refinedstorage.api.storage.CompareUtils; import refinedstorage.tile.data.ITileDataConsumer; import refinedstorage.tile.data.ITileDataProducer; -import refinedstorage.tile.data.TileDataManager; import refinedstorage.tile.data.TileDataParameter; public interface IFilterable { @@ -15,7 +14,7 @@ public interface IFilterable { int BLACKLIST = 1; static TileDataParameter createParameter() { - return TileDataManager.createParameter(DataSerializers.VARINT, 0, new ITileDataProducer() { + return new TileDataParameter<>(DataSerializers.VARINT, 0, new ITileDataProducer() { @Override public Integer getValue(T tile) { return ((IFilterable) tile).getMode(); diff --git a/src/main/java/refinedstorage/tile/config/IPrioritizable.java b/src/main/java/refinedstorage/tile/config/IPrioritizable.java index 0194638ac..c23abf188 100755 --- a/src/main/java/refinedstorage/tile/config/IPrioritizable.java +++ b/src/main/java/refinedstorage/tile/config/IPrioritizable.java @@ -6,12 +6,11 @@ import net.minecraft.tileentity.TileEntity; import refinedstorage.gui.GuiStorage; import refinedstorage.tile.data.ITileDataConsumer; import refinedstorage.tile.data.ITileDataProducer; -import refinedstorage.tile.data.TileDataManager; import refinedstorage.tile.data.TileDataParameter; public interface IPrioritizable { static TileDataParameter createParameter() { - return TileDataManager.createParameter(DataSerializers.VARINT, 0, new ITileDataProducer() { + return new TileDataParameter<>(DataSerializers.VARINT, 0, new ITileDataProducer() { @Override public Integer getValue(T tile) { return ((IPrioritizable) tile).getPriority(); diff --git a/src/main/java/refinedstorage/tile/config/RedstoneMode.java b/src/main/java/refinedstorage/tile/config/RedstoneMode.java index 9a2eb85d3..3c43f4cde 100755 --- a/src/main/java/refinedstorage/tile/config/RedstoneMode.java +++ b/src/main/java/refinedstorage/tile/config/RedstoneMode.java @@ -6,7 +6,6 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import refinedstorage.tile.data.ITileDataConsumer; import refinedstorage.tile.data.ITileDataProducer; -import refinedstorage.tile.data.TileDataManager; import refinedstorage.tile.data.TileDataParameter; public enum RedstoneMode { @@ -32,7 +31,7 @@ public enum RedstoneMode { } public static TileDataParameter createParameter() { - return TileDataManager.createParameter(DataSerializers.VARINT, 0, new ITileDataProducer() { + return new TileDataParameter<>(DataSerializers.VARINT, 0, new ITileDataProducer() { @Override public Integer getValue(T tile) { return ((IRedstoneConfigurable) tile).getRedstoneMode().ordinal(); diff --git a/src/main/java/refinedstorage/tile/data/TileDataManager.java b/src/main/java/refinedstorage/tile/data/TileDataManager.java index 8e9a4eb59..a051bee4e 100755 --- a/src/main/java/refinedstorage/tile/data/TileDataManager.java +++ b/src/main/java/refinedstorage/tile/data/TileDataManager.java @@ -3,7 +3,6 @@ package refinedstorage.tile.data; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.inventory.Container; -import net.minecraft.network.datasync.DataSerializer; import net.minecraft.tileentity.TileEntity; import refinedstorage.RefinedStorage; import refinedstorage.container.ContainerBase; @@ -17,32 +16,22 @@ import java.util.List; import java.util.Map; public class TileDataManager { - private static int PARAMETER_ID = 0; - private static Map PARAMETER_MAP = new HashMap<>(); + private static int LAST_ID = 0; + private static Map REGISTRY = new HashMap<>(); private List parameters = new ArrayList<>(); private List watchedParameters = new ArrayList<>(); private List watchedParametersCache = new ArrayList<>(); - public static TileDataParameter createParameter(DataSerializer serializer, T defaultValue, ITileDataProducer producer) { - return createParameter(serializer, defaultValue, producer, null); + public static void registerParameter(TileDataParameter parameter) { + parameter.setId(LAST_ID); + + REGISTRY.put(LAST_ID++, parameter); } - public static TileDataParameter createParameter(DataSerializer serializer, T defaultValue, ITileDataProducer producer, ITileDataConsumer consumer) { - return createParameter(serializer, defaultValue, producer, consumer, null); - } - - public static TileDataParameter createParameter(DataSerializer serializer, T defaultValue, ITileDataProducer producer, ITileDataConsumer consumer, ITileDataListener listener) { - TileDataParameter parameter = new TileDataParameter<>(PARAMETER_ID++, defaultValue, serializer, producer, consumer, listener); - - PARAMETER_MAP.put(parameter.getId(), parameter); - - return parameter; - } - - public static TileDataParameter getParameter(int id) { - return PARAMETER_MAP.get(id); + public static TileDataParameter getParameter(int id) { + return REGISTRY.get(id); } public static void setParameter(TileDataParameter parameter, T value) { @@ -59,6 +48,10 @@ public class TileDataManager { parameters.add(parameter); } + public List getParameters() { + return parameters; + } + public void addWatchedParameter(TileDataParameter parameter) { addParameter(parameter); diff --git a/src/main/java/refinedstorage/tile/data/TileDataParameter.java b/src/main/java/refinedstorage/tile/data/TileDataParameter.java index 9972f3dc1..26e7aa0c1 100755 --- a/src/main/java/refinedstorage/tile/data/TileDataParameter.java +++ b/src/main/java/refinedstorage/tile/data/TileDataParameter.java @@ -11,8 +11,15 @@ public class TileDataParameter { private ITileDataListener listener; private T value; - public TileDataParameter(int id, T defaultValue, DataSerializer serializer, ITileDataProducer producer, ITileDataConsumer consumer, ITileDataListener listener) { - this.id = id; + public TileDataParameter(DataSerializer serializer, T defaultValue, ITileDataProducer producer) { + this(serializer, defaultValue, producer, null); + } + + public TileDataParameter(DataSerializer serializer, T defaultValue, ITileDataProducer producer, ITileDataConsumer consumer) { + this(serializer, defaultValue, producer, consumer, null); + } + + public TileDataParameter(DataSerializer serializer, T defaultValue, ITileDataProducer producer, ITileDataConsumer consumer, ITileDataListener listener) { this.value = defaultValue; this.serializer = serializer; this.valueProducer = producer; @@ -20,6 +27,10 @@ public class TileDataParameter { this.listener = listener; } + public void setId(int id) { + this.id = id; + } + public int getId() { return id; } diff --git a/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java b/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java index 3586071a0..abc96ce1f 100755 --- a/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java +++ b/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java @@ -19,7 +19,6 @@ import refinedstorage.tile.config.IComparable; import refinedstorage.tile.config.IFilterable; import refinedstorage.tile.config.IPrioritizable; import refinedstorage.tile.data.ITileDataProducer; -import refinedstorage.tile.data.TileDataManager; import refinedstorage.tile.data.TileDataParameter; import java.util.ArrayList; @@ -30,7 +29,7 @@ public class TileExternalStorage extends TileMultipartNode implements IStoragePr public static final TileDataParameter COMPARE = IComparable.createParameter(); public static final TileDataParameter MODE = IFilterable.createParameter(); - public static final TileDataParameter STORED = TileDataManager.createParameter(DataSerializers.VARINT, 0, new ITileDataProducer() { + public static final TileDataParameter STORED = new TileDataParameter<>(DataSerializers.VARINT, 0, new ITileDataProducer() { @Override public Integer getValue(TileExternalStorage tile) { int stored = 0; @@ -43,7 +42,7 @@ public class TileExternalStorage extends TileMultipartNode implements IStoragePr } }); - public static final TileDataParameter CAPACITY = TileDataManager.createParameter(DataSerializers.VARINT, 0, new ITileDataProducer() { + public static final TileDataParameter CAPACITY = new TileDataParameter<>(DataSerializers.VARINT, 0, new ITileDataProducer() { @Override public Integer getValue(TileExternalStorage tile) { int capacity = 0; diff --git a/src/main/java/refinedstorage/tile/grid/TileGrid.java b/src/main/java/refinedstorage/tile/grid/TileGrid.java index ee443e58d..2e84a0509 100755 --- a/src/main/java/refinedstorage/tile/grid/TileGrid.java +++ b/src/main/java/refinedstorage/tile/grid/TileGrid.java @@ -37,7 +37,7 @@ import java.util.ArrayList; import java.util.List; public class TileGrid extends TileNode implements IGrid { - public static final TileDataParameter VIEW_TYPE = TileDataManager.createParameter(DataSerializers.VARINT, 0, new ITileDataProducer() { + public static final TileDataParameter VIEW_TYPE = new TileDataParameter<>(DataSerializers.VARINT, 0, new ITileDataProducer() { @Override public Integer getValue(TileGrid tile) { return tile.viewType; @@ -53,7 +53,7 @@ public class TileGrid extends TileNode implements IGrid { } }, parameter -> GuiGrid.sortItems()); - public static final TileDataParameter SORTING_DIRECTION = TileDataManager.createParameter(DataSerializers.VARINT, 0, new ITileDataProducer() { + public static final TileDataParameter SORTING_DIRECTION = new TileDataParameter<>(DataSerializers.VARINT, 0, new ITileDataProducer() { @Override public Integer getValue(TileGrid tile) { return tile.sortingDirection; @@ -69,7 +69,7 @@ public class TileGrid extends TileNode implements IGrid { } }, parameter -> GuiGrid.sortItems()); - public static final TileDataParameter SORTING_TYPE = TileDataManager.createParameter(DataSerializers.VARINT, 0, new ITileDataProducer() { + public static final TileDataParameter SORTING_TYPE = new TileDataParameter<>(DataSerializers.VARINT, 0, new ITileDataProducer() { @Override public Integer getValue(TileGrid tile) { return tile.sortingType; @@ -85,7 +85,7 @@ public class TileGrid extends TileNode implements IGrid { } }, parameter -> GuiGrid.sortItems()); - public static final TileDataParameter SEARCH_BOX_MODE = TileDataManager.createParameter(DataSerializers.VARINT, 0, new ITileDataProducer() { + public static final TileDataParameter SEARCH_BOX_MODE = new TileDataParameter<>(DataSerializers.VARINT, 0, new ITileDataProducer() { @Override public Integer getValue(TileGrid tile) { return tile.searchBoxMode; From a0343299b77e503596f00de91db489029782314e Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Tue, 9 Aug 2016 21:13:33 +0200 Subject: [PATCH 146/214] Bump to 0.8.17 --- build.gradle | 2 +- src/main/java/refinedstorage/RefinedStorage.java | 2 +- src/main/resources/mcmod.info | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/build.gradle b/build.gradle index 54d70602a..cb8434ed9 100755 --- a/build.gradle +++ b/build.gradle @@ -12,7 +12,7 @@ buildscript { } apply plugin: 'net.minecraftforge.gradle.forge' -version = "0.8.16" +version = "0.8.17" group = "refinedstorage" archivesBaseName = "refinedstorage" diff --git a/src/main/java/refinedstorage/RefinedStorage.java b/src/main/java/refinedstorage/RefinedStorage.java index c89aff5ba..4c84aee91 100755 --- a/src/main/java/refinedstorage/RefinedStorage.java +++ b/src/main/java/refinedstorage/RefinedStorage.java @@ -18,7 +18,7 @@ import refinedstorage.proxy.CommonProxy; @Mod(modid = RefinedStorage.ID, version = RefinedStorage.VERSION, dependencies = RefinedStorage.DEPENDENCIES) public final class RefinedStorage { public static final String ID = "refinedstorage"; - public static final String VERSION = "0.8.16"; + public static final String VERSION = "0.8.17"; public static final String DEPENDENCIES = "required-after:mcmultipart@[1.2.1,);"; @SidedProxy(clientSide = "refinedstorage.proxy.ClientProxy", serverSide = "refinedstorage.proxy.ServerProxy") diff --git a/src/main/resources/mcmod.info b/src/main/resources/mcmod.info index 18741e379..8c951d5ba 100755 --- a/src/main/resources/mcmod.info +++ b/src/main/resources/mcmod.info @@ -3,7 +3,7 @@ "modid": "refinedstorage", "name": "Refined Storage", "description": "A Minecraft mod all about storage.", - "version": "0.8.16", + "version": "0.8.17", "mcversion": "1.10.2", "url": "", "updateUrl": "", From 2d1a559c529e97ed18d8843af0f54997b7139636 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Tue, 9 Aug 2016 21:14:49 +0200 Subject: [PATCH 147/214] Only resort from the gui thread, fixes #252 --- .../java/refinedstorage/gui/grid/GuiGrid.java | 42 ++++++++----------- .../network/MessageGridDelta.java | 4 +- .../network/MessageGridUpdate.java | 2 +- .../refinedstorage/tile/grid/TileGrid.java | 7 ++-- .../tile/grid/WirelessGrid.java | 6 +-- 5 files changed, 28 insertions(+), 33 deletions(-) diff --git a/src/main/java/refinedstorage/gui/grid/GuiGrid.java b/src/main/java/refinedstorage/gui/grid/GuiGrid.java index 3ca019d45..6f82c2c1d 100755 --- a/src/main/java/refinedstorage/gui/grid/GuiGrid.java +++ b/src/main/java/refinedstorage/gui/grid/GuiGrid.java @@ -1,6 +1,5 @@ package refinedstorage.gui.grid; -import net.minecraft.client.Minecraft; import net.minecraft.client.audio.PositionedSoundRecord; import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.gui.GuiTextField; @@ -40,6 +39,8 @@ public class GuiGrid extends GuiBase { public static List ITEMS = new ArrayList<>(); public static List SORTED_ITEMS = new ArrayList<>(); + public static boolean markedForSorting; + private GuiTextField searchField; private ContainerGrid container; @@ -90,32 +91,20 @@ public class GuiGrid extends GuiBase { return grid; } - public static void sortItems() { - GuiScreen screen = Minecraft.getMinecraft().currentScreen; - - if (!(screen instanceof GuiGrid)) { - return; - } - - GuiGrid gui = (GuiGrid) screen; - - if (gui.searchField == null) { - return; - } - + private void sortItems() { List sortedItems = new ArrayList<>(); - if (gui.getGrid().isConnected()) { + if (grid.isConnected()) { sortedItems.addAll(ITEMS); - String query = gui.searchField.getText().trim().toLowerCase(); + String query = searchField.getText().trim().toLowerCase(); Iterator t = sortedItems.iterator(); while (t.hasNext()) { ClientStack stack = t.next(); - List filteredItems = gui.getGrid().getFilteredItems(); + List filteredItems = grid.getFilteredItems(); boolean found = filteredItems.isEmpty(); @@ -133,11 +122,11 @@ public class GuiGrid extends GuiBase { continue; } - if (gui.getGrid().getViewType() == TileGrid.VIEW_TYPE_NON_CRAFTABLES && stack.isCraftable()) { + if (grid.getViewType() == TileGrid.VIEW_TYPE_NON_CRAFTABLES && stack.isCraftable()) { t.remove(); continue; - } else if (gui.getGrid().getViewType() == TileGrid.VIEW_TYPE_CRAFTABLES && !stack.isCraftable()) { + } else if (grid.getViewType() == TileGrid.VIEW_TYPE_CRAFTABLES && !stack.isCraftable()) { t.remove(); continue; @@ -171,24 +160,29 @@ public class GuiGrid extends GuiBase { } } - SORTING_NAME.setSortingDirection(gui.getGrid().getSortingDirection()); - SORTING_QUANTITY.setSortingDirection(gui.getGrid().getSortingDirection()); + SORTING_NAME.setSortingDirection(grid.getSortingDirection()); + SORTING_QUANTITY.setSortingDirection(grid.getSortingDirection()); Collections.sort(sortedItems, SORTING_NAME); - if (gui.getGrid().getSortingType() == TileGrid.SORTING_TYPE_QUANTITY) { + if (grid.getSortingType() == TileGrid.SORTING_TYPE_QUANTITY) { Collections.sort(sortedItems, SORTING_QUANTITY); } } SORTED_ITEMS = sortedItems; - gui.getScrollbar().setCanScroll(gui.getRows() > gui.getVisibleRows()); - gui.getScrollbar().setScrollDelta((float) gui.getScrollbar().getScrollbarHeight() / (float) gui.getRows()); + getScrollbar().setCanScroll(getRows() > getVisibleRows()); + getScrollbar().setScrollDelta((float) getScrollbar().getScrollbarHeight() / (float) getRows()); } @Override public void update(int x, int y) { + if (markedForSorting) { + markedForSorting = false; + + sortItems(); + } } private int getOffset() { diff --git a/src/main/java/refinedstorage/network/MessageGridDelta.java b/src/main/java/refinedstorage/network/MessageGridDelta.java index 662ffa33b..dbb765f82 100755 --- a/src/main/java/refinedstorage/network/MessageGridDelta.java +++ b/src/main/java/refinedstorage/network/MessageGridDelta.java @@ -47,14 +47,14 @@ public class MessageGridDelta implements IMessage, IMessageHandler GuiGrid.sortItems()); + }, parameter -> + GuiGrid.markedForSorting = true); public static final TileDataParameter SORTING_DIRECTION = new TileDataParameter<>(DataSerializers.VARINT, 0, new ITileDataProducer() { @Override @@ -67,7 +68,7 @@ public class TileGrid extends TileNode implements IGrid { tile.markDirty(); } } - }, parameter -> GuiGrid.sortItems()); + }, parameter -> GuiGrid.markedForSorting = true); public static final TileDataParameter SORTING_TYPE = new TileDataParameter<>(DataSerializers.VARINT, 0, new ITileDataProducer() { @Override @@ -83,7 +84,7 @@ public class TileGrid extends TileNode implements IGrid { tile.markDirty(); } } - }, parameter -> GuiGrid.sortItems()); + }, parameter -> GuiGrid.markedForSorting = true); public static final TileDataParameter SEARCH_BOX_MODE = new TileDataParameter<>(DataSerializers.VARINT, 0, new ITileDataProducer() { @Override diff --git a/src/main/java/refinedstorage/tile/grid/WirelessGrid.java b/src/main/java/refinedstorage/tile/grid/WirelessGrid.java index b96be90ba..1e3303833 100755 --- a/src/main/java/refinedstorage/tile/grid/WirelessGrid.java +++ b/src/main/java/refinedstorage/tile/grid/WirelessGrid.java @@ -116,7 +116,7 @@ public class WirelessGrid implements IGrid { this.viewType = type; - GuiGrid.sortItems(); + GuiGrid.markedForSorting = true; } @Override @@ -125,7 +125,7 @@ public class WirelessGrid implements IGrid { this.sortingType = type; - GuiGrid.sortItems(); + GuiGrid.markedForSorting = true; } @Override @@ -134,7 +134,7 @@ public class WirelessGrid implements IGrid { this.sortingDirection = direction; - GuiGrid.sortItems(); + GuiGrid.markedForSorting = true; } @Override From c3690f72a0b413a968c63e717ad50143ee6a292b Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Tue, 9 Aug 2016 21:25:28 +0200 Subject: [PATCH 148/214] More perf improvements to grid --- CHANGELOG.md | 4 ++++ src/main/java/refinedstorage/gui/grid/GuiGrid.java | 12 +++++++++--- .../refinedstorage/network/MessageGridDelta.java | 13 ++++++++----- .../refinedstorage/network/MessageGridUpdate.java | 9 +++++++-- .../java/refinedstorage/tile/grid/TileGrid.java | 7 +++---- .../java/refinedstorage/tile/grid/WirelessGrid.java | 6 +++--- 6 files changed, 34 insertions(+), 17 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9b72d6e6a..bc9fcc497 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Refined Storage Changelog +### 0.8.17 +**Bugfixes** +- Fixed Grid causing sorting lag on the client + ### 0.8.16 **Bugfixes** - Fixed issue with IC2 integration causing console spam diff --git a/src/main/java/refinedstorage/gui/grid/GuiGrid.java b/src/main/java/refinedstorage/gui/grid/GuiGrid.java index 6f82c2c1d..2b9a94ffa 100755 --- a/src/main/java/refinedstorage/gui/grid/GuiGrid.java +++ b/src/main/java/refinedstorage/gui/grid/GuiGrid.java @@ -1,5 +1,7 @@ package refinedstorage.gui.grid; +import com.google.common.collect.ArrayListMultimap; +import com.google.common.collect.Multimap; import net.minecraft.client.audio.PositionedSoundRecord; import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.gui.GuiTextField; @@ -36,10 +38,10 @@ public class GuiGrid extends GuiBase { public static final GridSortingQuantity SORTING_QUANTITY = new GridSortingQuantity(); public static final GridSortingName SORTING_NAME = new GridSortingName(); - public static List ITEMS = new ArrayList<>(); + public static Multimap ITEMS = ArrayListMultimap.create(); public static List SORTED_ITEMS = new ArrayList<>(); - public static boolean markedForSorting; + private static boolean markedForSorting; private GuiTextField searchField; @@ -48,6 +50,10 @@ public class GuiGrid extends GuiBase { private int slotNumber; + public static void markForSorting() { + markedForSorting = true; + } + public GuiGrid(ContainerGrid container, IGrid grid) { super(container, 227, (grid.getType() == EnumGridType.CRAFTING || grid.getType() == EnumGridType.PATTERN) ? 247 : 208); @@ -95,7 +101,7 @@ public class GuiGrid extends GuiBase { List sortedItems = new ArrayList<>(); if (grid.isConnected()) { - sortedItems.addAll(ITEMS); + sortedItems.addAll(ITEMS.values()); String query = searchField.getText().trim().toLowerCase(); diff --git a/src/main/java/refinedstorage/network/MessageGridDelta.java b/src/main/java/refinedstorage/network/MessageGridDelta.java index dbb765f82..27d961c94 100755 --- a/src/main/java/refinedstorage/network/MessageGridDelta.java +++ b/src/main/java/refinedstorage/network/MessageGridDelta.java @@ -1,6 +1,7 @@ package refinedstorage.network; import io.netty.buffer.ByteBuf; +import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraftforge.fml.common.network.simpleimpl.IMessage; import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler; @@ -39,22 +40,24 @@ public class MessageGridDelta implements IMessage, IMessageHandler - GuiGrid.markedForSorting = true); + }, parameter -> GuiGrid.markForSorting()); public static final TileDataParameter SORTING_DIRECTION = new TileDataParameter<>(DataSerializers.VARINT, 0, new ITileDataProducer() { @Override @@ -68,7 +67,7 @@ public class TileGrid extends TileNode implements IGrid { tile.markDirty(); } } - }, parameter -> GuiGrid.markedForSorting = true); + }, parameter -> GuiGrid.markForSorting()); public static final TileDataParameter SORTING_TYPE = new TileDataParameter<>(DataSerializers.VARINT, 0, new ITileDataProducer() { @Override @@ -84,7 +83,7 @@ public class TileGrid extends TileNode implements IGrid { tile.markDirty(); } } - }, parameter -> GuiGrid.markedForSorting = true); + }, parameter -> GuiGrid.markForSorting()); public static final TileDataParameter SEARCH_BOX_MODE = new TileDataParameter<>(DataSerializers.VARINT, 0, new ITileDataProducer() { @Override diff --git a/src/main/java/refinedstorage/tile/grid/WirelessGrid.java b/src/main/java/refinedstorage/tile/grid/WirelessGrid.java index 1e3303833..4981e7761 100755 --- a/src/main/java/refinedstorage/tile/grid/WirelessGrid.java +++ b/src/main/java/refinedstorage/tile/grid/WirelessGrid.java @@ -116,7 +116,7 @@ public class WirelessGrid implements IGrid { this.viewType = type; - GuiGrid.markedForSorting = true; + GuiGrid.markForSorting(); } @Override @@ -125,7 +125,7 @@ public class WirelessGrid implements IGrid { this.sortingType = type; - GuiGrid.markedForSorting = true; + GuiGrid.markForSorting(); } @Override @@ -134,7 +134,7 @@ public class WirelessGrid implements IGrid { this.sortingDirection = direction; - GuiGrid.markedForSorting = true; + GuiGrid.markForSorting(); } @Override From 4bbaf4e84442f59a5bab14221ee7da28e1ec13f8 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Tue, 9 Aug 2016 21:42:12 +0200 Subject: [PATCH 149/214] Small tweaks to combined items text --- src/main/java/refinedstorage/item/ItemGridFilter.java | 2 +- src/main/java/refinedstorage/item/ItemPattern.java | 10 ++++------ .../refinedstorage/models/item/debug_storage_disk.json | 6 ------ 3 files changed, 5 insertions(+), 13 deletions(-) delete mode 100755 src/main/resources/assets/refinedstorage/models/item/debug_storage_disk.json diff --git a/src/main/java/refinedstorage/item/ItemGridFilter.java b/src/main/java/refinedstorage/item/ItemGridFilter.java index 24a3fbd9e..81048e31e 100755 --- a/src/main/java/refinedstorage/item/ItemGridFilter.java +++ b/src/main/java/refinedstorage/item/ItemGridFilter.java @@ -45,7 +45,7 @@ public class ItemGridFilter extends ItemBase { ItemHandlerGridFilter items = new ItemHandlerGridFilter(stack); - ItemPattern.combineItems(tooltip, items.getFilteredItems()); + ItemPattern.combineItems(tooltip, false, items.getFilteredItems()); } public static int getCompare(ItemStack stack) { diff --git a/src/main/java/refinedstorage/item/ItemPattern.java b/src/main/java/refinedstorage/item/ItemPattern.java index ec129af2c..3ab1897aa 100755 --- a/src/main/java/refinedstorage/item/ItemPattern.java +++ b/src/main/java/refinedstorage/item/ItemPattern.java @@ -35,16 +35,16 @@ public class ItemPattern extends ItemBase { if (GuiScreen.isShiftKeyDown() || isProcessing(pattern)) { tooltip.add(TextFormatting.YELLOW + I18n.format("misc.refinedstorage:pattern.inputs") + TextFormatting.RESET); - combineItems(tooltip, getInputs(pattern)); + combineItems(tooltip, true, getInputs(pattern)); tooltip.add(TextFormatting.YELLOW + I18n.format("misc.refinedstorage:pattern.outputs") + TextFormatting.RESET); } - combineItems(tooltip, getOutputs(pattern)); + combineItems(tooltip, true, getOutputs(pattern)); } } - public static void combineItems(List tooltip, ItemStack... stacks) { + public static void combineItems(List tooltip, boolean displayAmount, ItemStack... stacks) { Set combinedIndices = new HashSet<>(); for (int i = 0; i < stacks.length; ++i) { @@ -61,9 +61,7 @@ public class ItemPattern extends ItemBase { } } - if (amount != 1) { - data += " (" + amount + "x)"; - } + data = (displayAmount ? (TextFormatting.WHITE + String.valueOf(amount) + " ") : "") + TextFormatting.GRAY + data; tooltip.add(data); } diff --git a/src/main/resources/assets/refinedstorage/models/item/debug_storage_disk.json b/src/main/resources/assets/refinedstorage/models/item/debug_storage_disk.json deleted file mode 100755 index 4119b149f..000000000 --- a/src/main/resources/assets/refinedstorage/models/item/debug_storage_disk.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "parent": "item/generated", - "textures": { - "layer0": "refinedstorage:items/debug_storage_disk" - } -} From d2f6f4b3d5e012ad067c6173800ecc3157dbb399 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Wed, 10 Aug 2016 15:34:28 +0200 Subject: [PATCH 150/214] Bump to 0.8.18 --- build.gradle | 2 +- src/main/java/refinedstorage/RefinedStorage.java | 2 +- src/main/resources/mcmod.info | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/build.gradle b/build.gradle index cb8434ed9..dab11105d 100755 --- a/build.gradle +++ b/build.gradle @@ -12,7 +12,7 @@ buildscript { } apply plugin: 'net.minecraftforge.gradle.forge' -version = "0.8.17" +version = "0.8.18" group = "refinedstorage" archivesBaseName = "refinedstorage" diff --git a/src/main/java/refinedstorage/RefinedStorage.java b/src/main/java/refinedstorage/RefinedStorage.java index 4c84aee91..171084f6c 100755 --- a/src/main/java/refinedstorage/RefinedStorage.java +++ b/src/main/java/refinedstorage/RefinedStorage.java @@ -18,7 +18,7 @@ import refinedstorage.proxy.CommonProxy; @Mod(modid = RefinedStorage.ID, version = RefinedStorage.VERSION, dependencies = RefinedStorage.DEPENDENCIES) public final class RefinedStorage { public static final String ID = "refinedstorage"; - public static final String VERSION = "0.8.17"; + public static final String VERSION = "0.8.18"; public static final String DEPENDENCIES = "required-after:mcmultipart@[1.2.1,);"; @SidedProxy(clientSide = "refinedstorage.proxy.ClientProxy", serverSide = "refinedstorage.proxy.ServerProxy") diff --git a/src/main/resources/mcmod.info b/src/main/resources/mcmod.info index 8c951d5ba..4cc90953e 100755 --- a/src/main/resources/mcmod.info +++ b/src/main/resources/mcmod.info @@ -3,7 +3,7 @@ "modid": "refinedstorage", "name": "Refined Storage", "description": "A Minecraft mod all about storage.", - "version": "0.8.17", + "version": "0.8.18", "mcversion": "1.10.2", "url": "", "updateUrl": "", From 8bfc73d9a0184c175abf9979d94db725111418b8 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Wed, 10 Aug 2016 15:41:01 +0200 Subject: [PATCH 151/214] Fixed detector mode not persisting, fixes #254 --- CHANGELOG.md | 4 ++++ .../refinedstorage/gui/sidebutton/SideButtonDetectorMode.java | 3 ++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bc9fcc497..f347c45a8 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Refined Storage Changelog +### 0.8.18 +**Bugfixes** +- Fixed detector mode not persisting + ### 0.8.17 **Bugfixes** - Fixed Grid causing sorting lag on the client diff --git a/src/main/java/refinedstorage/gui/sidebutton/SideButtonDetectorMode.java b/src/main/java/refinedstorage/gui/sidebutton/SideButtonDetectorMode.java index da46be00c..af47bcb84 100755 --- a/src/main/java/refinedstorage/gui/sidebutton/SideButtonDetectorMode.java +++ b/src/main/java/refinedstorage/gui/sidebutton/SideButtonDetectorMode.java @@ -5,6 +5,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.util.text.TextFormatting; import refinedstorage.gui.GuiBase; import refinedstorage.tile.TileDetector; +import refinedstorage.tile.data.TileDataManager; public class SideButtonDetectorMode extends SideButton { @Override @@ -29,6 +30,6 @@ public class SideButtonDetectorMode extends SideButton { mode = TileDetector.MODE_EQUAL; } - TileDetector.MODE.setValue(mode); + TileDataManager.setParameter(TileDetector.MODE, mode); } } From 11b429e28c34f606a4eb18da86c4a71b26e94fea Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Wed, 10 Aug 2016 21:22:40 +0200 Subject: [PATCH 152/214] Fixed bug where scrollbar didn't scroll correctly and thus hiding some items, fixes #245 --- CHANGELOG.md | 1 + .../refinedstorage/gui/GuiController.java | 14 +-- .../gui/GuiCraftingMonitor.java | 16 +--- .../java/refinedstorage/gui/Scrollbar.java | 92 ++++++++----------- .../java/refinedstorage/gui/grid/GuiGrid.java | 15 +-- .../refinedstorage/item/ItemStorageDisk.java | 2 +- .../refinedstorage/proxy/ClientProxy.java | 1 - 7 files changed, 55 insertions(+), 86 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f347c45a8..fc62ee566 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ ### 0.8.18 **Bugfixes** - Fixed detector mode not persisting +- Fixed bug where scrollbar didn't scroll correctly and thus hiding some items ### 0.8.17 **Bugfixes** diff --git a/src/main/java/refinedstorage/gui/GuiController.java b/src/main/java/refinedstorage/gui/GuiController.java index a584cfa8d..3dbe8532d 100755 --- a/src/main/java/refinedstorage/gui/GuiController.java +++ b/src/main/java/refinedstorage/gui/GuiController.java @@ -34,8 +34,8 @@ public class GuiController extends GuiBase { @Override public void update(int x, int y) { - getScrollbar().setCanScroll(getRows() > VISIBLE_ROWS); - getScrollbar().setScrollDelta((float) getScrollbar().getScrollbarHeight() / (float) getRows()); + getScrollbar().setEnabled(getRows() > VISIBLE_ROWS); + getScrollbar().setMaxOffset(getRows() - VISIBLE_ROWS); } @Override @@ -57,7 +57,7 @@ public class GuiController extends GuiBase { int x = 33; int y = 26; - int slot = getOffset() * 2; + int slot = getScrollbar().getOffset() * 2; RenderHelper.enableGUIStandardItemLighting(); @@ -105,13 +105,7 @@ public class GuiController extends GuiBase { } } - private int getOffset() { - return (int) Math.ceil(getScrollbar().getCurrentScroll() / 59f * (float) getRows()); - } - private int getRows() { - int max = (int) Math.ceil((float) TileController.NODES.getValue().size() / (float) 2); - - return max < 0 ? 0 : max; + return Math.max(0, (int) Math.ceil((float) TileController.NODES.getValue().size() / 2F)); } } diff --git a/src/main/java/refinedstorage/gui/GuiCraftingMonitor.java b/src/main/java/refinedstorage/gui/GuiCraftingMonitor.java index 921ad6309..571558414 100755 --- a/src/main/java/refinedstorage/gui/GuiCraftingMonitor.java +++ b/src/main/java/refinedstorage/gui/GuiCraftingMonitor.java @@ -56,8 +56,8 @@ public class GuiCraftingMonitor extends GuiBase { @Override public void update(int x, int y) { - getScrollbar().setCanScroll(getRows() > VISIBLE_ROWS); - getScrollbar().setScrollDelta((float) getScrollbar().getScrollbarHeight() / (float) getRows()); + getScrollbar().setEnabled(getRows() > VISIBLE_ROWS); + getScrollbar().setMaxOffset(getRows() - VISIBLE_ROWS); if (itemSelected >= getTasks().size()) { itemSelected = -1; @@ -86,7 +86,7 @@ public class GuiCraftingMonitor extends GuiBase { int x = 8; int y = 20; - int item = getOffset() * 2; + int item = getScrollbar().getOffset() * 2; RenderHelper.enableGUIStandardItemLighting(); @@ -147,14 +147,8 @@ public class GuiCraftingMonitor extends GuiBase { } } - private int getOffset() { - return (int) Math.ceil(getScrollbar().getCurrentScroll() / 89f * (float) getRows()); - } - private int getRows() { - int max = (int) Math.ceil((float) getTasks().size() / (float) 2); - - return max < 0 ? 0 : max; + return Math.max(0, (int) Math.ceil((float) getTasks().size() / (float) 2)); } @Override @@ -175,7 +169,7 @@ public class GuiCraftingMonitor extends GuiBase { if (mouseButton == 0 && inBounds(8, 20, 144, 90, mouseX - guiLeft, mouseY - guiTop)) { itemSelected = -1; - int item = getOffset() * 2; + int item = getScrollbar().getOffset() * 2; for (int y = 0; y < 3; ++y) { for (int x = 0; x < 2; ++x) { diff --git a/src/main/java/refinedstorage/gui/Scrollbar.java b/src/main/java/refinedstorage/gui/Scrollbar.java index f1fed1e0c..b82fa0f87 100755 --- a/src/main/java/refinedstorage/gui/Scrollbar.java +++ b/src/main/java/refinedstorage/gui/Scrollbar.java @@ -3,80 +3,56 @@ package refinedstorage.gui; import org.lwjgl.input.Mouse; public class Scrollbar { - private boolean canScroll = true; + private static final int SCROLLER_HEIGHT = 15; private int x; private int y; - private int scrollbarWidth; - private int scrollbarHeight; + private int width; + private int height; + private boolean enabled = false; - private float scrollDelta = 15f; + private int offset; + private int maxOffset; - private float currentScroll; private boolean wasClicking = false; private boolean isScrolling = false; - public Scrollbar(int x, int y, int scrollbarWidth, int scrollbarHeight) { + public Scrollbar(int x, int y, int width, int height) { this.x = x; this.y = y; - this.scrollbarWidth = scrollbarWidth; - this.scrollbarHeight = scrollbarHeight; + this.width = width; + this.height = height; } - public int getScrollbarWidth() { - return scrollbarWidth; + public int getWidth() { + return width; } - public int getScrollbarHeight() { - return scrollbarHeight; + public int getHeight() { + return height; } - public void setCanScroll(boolean canScroll) { - this.canScroll = canScroll; + public void setEnabled(boolean enabled) { + this.enabled = enabled; } - public boolean canScroll() { - return canScroll; - } - - public float getCurrentScroll() { - return currentScroll; - } - - public void setCurrentScroll(float newCurrentScroll) { - if (newCurrentScroll < 0) { - newCurrentScroll = 0; - } - - int scrollbarItselfHeight = 12; - - int max = scrollbarHeight - scrollbarItselfHeight - 3; - - if (newCurrentScroll > max) { - newCurrentScroll = max; - } - - currentScroll = newCurrentScroll; - } - - public void setScrollDelta(float delta) { - this.scrollDelta = delta; + public boolean isEnabled() { + return enabled; } public void draw(GuiBase gui) { gui.bindTexture("icons.png"); - gui.drawTexture(gui.getGuiLeft() + x, gui.getGuiTop() + y + (int) currentScroll, canScroll() ? 232 : 244, 0, 12, 15); + gui.drawTexture(gui.getGuiLeft() + x, gui.getGuiTop() + y + (int) Math.min(height - SCROLLER_HEIGHT, (float) offset / (float) maxOffset * (float) (height - SCROLLER_HEIGHT)), isEnabled() ? 232 : 244, 0, 12, 15); } public void update(GuiBase gui, int mouseX, int mouseY) { - if (!canScroll()) { + if (!isEnabled()) { isScrolling = false; wasClicking = false; - currentScroll = 0; } else { boolean down = Mouse.isButtonDown(0); - if (!wasClicking && down && gui.inBounds(x, y, scrollbarWidth, scrollbarHeight, mouseX, mouseY)) { + if (!wasClicking && down && gui.inBounds(x, y, width, height, mouseX, mouseY)) { isScrolling = true; } @@ -87,20 +63,32 @@ public class Scrollbar { wasClicking = down; if (isScrolling) { - setCurrentScroll(mouseY - 20); + setOffset((int) Math.floor((float) (mouseY - SCROLLER_HEIGHT) / (float) (height - SCROLLER_HEIGHT) * (float) maxOffset)); } } } public void wheel(int delta) { - if (canScroll()) { - delta = Math.max(Math.min(-delta, 1), -1); + if (isEnabled()) { + setOffset(offset + Math.max(Math.min(-delta, 1), -1)); + } + } - if (delta == -1) { - setCurrentScroll(currentScroll - scrollDelta); - } else if (delta == 1) { - setCurrentScroll(currentScroll + scrollDelta); - } + public void setMaxOffset(int maxOffset) { + this.maxOffset = maxOffset; + + if (offset > maxOffset) { + this.offset = Math.max(0, maxOffset); + } + } + + public int getOffset() { + return offset; + } + + public void setOffset(int offset) { + if (offset >= 0 && offset <= maxOffset) { + this.offset = offset; } } } diff --git a/src/main/java/refinedstorage/gui/grid/GuiGrid.java b/src/main/java/refinedstorage/gui/grid/GuiGrid.java index 2b9a94ffa..f1e8d2994 100755 --- a/src/main/java/refinedstorage/gui/grid/GuiGrid.java +++ b/src/main/java/refinedstorage/gui/grid/GuiGrid.java @@ -58,7 +58,6 @@ public class GuiGrid extends GuiBase { super(container, 227, (grid.getType() == EnumGridType.CRAFTING || grid.getType() == EnumGridType.PATTERN) ? 247 : 208); setScrollbar(new Scrollbar(174, 20, 12, (grid.getType() == EnumGridType.CRAFTING || grid.getType() == EnumGridType.PATTERN) ? 70 : 88)); - getScrollbar().setCanScroll(false); this.container = container; this.grid = grid; @@ -178,8 +177,8 @@ public class GuiGrid extends GuiBase { SORTED_ITEMS = sortedItems; - getScrollbar().setCanScroll(getRows() > getVisibleRows()); - getScrollbar().setScrollDelta((float) getScrollbar().getScrollbarHeight() / (float) getRows()); + getScrollbar().setEnabled(getRows() > getVisibleRows()); + getScrollbar().setMaxOffset(getRows() - getVisibleRows()); } @Override @@ -191,14 +190,8 @@ public class GuiGrid extends GuiBase { } } - private int getOffset() { - return (int) Math.ceil(getScrollbar().getCurrentScroll() / 70f * (float) getRows()); - } - private int getRows() { - int max = (int) Math.ceil((float) SORTED_ITEMS.size() / 9f); - - return max < 0 ? 0 : max; + return Math.max(0, (int) Math.ceil((float) SORTED_ITEMS.size() / 9F)); } private boolean isOverSlotWithItem() { @@ -271,7 +264,7 @@ public class GuiGrid extends GuiBase { this.slotNumber = -1; - int slot = getOffset() * 9; + int slot = getScrollbar().getOffset() * 9; RenderHelper.enableGUIStandardItemLighting(); diff --git a/src/main/java/refinedstorage/item/ItemStorageDisk.java b/src/main/java/refinedstorage/item/ItemStorageDisk.java index 1558ee515..7decff81f 100755 --- a/src/main/java/refinedstorage/item/ItemStorageDisk.java +++ b/src/main/java/refinedstorage/item/ItemStorageDisk.java @@ -50,7 +50,7 @@ public class ItemStorageDisk extends ItemBase { super.onUpdate(stack, world, entity, slot, selected); if (!stack.hasTagCompound()) { - if (stack.getItemDamage() == 5) { + if (stack.getItemDamage() == TYPE_DEBUG) { applyDebugDiskData(stack); } else { NBTStorage.createStackWithNBT(stack); diff --git a/src/main/java/refinedstorage/proxy/ClientProxy.java b/src/main/java/refinedstorage/proxy/ClientProxy.java index 9d3428c90..7cc90afa6 100755 --- a/src/main/java/refinedstorage/proxy/ClientProxy.java +++ b/src/main/java/refinedstorage/proxy/ClientProxy.java @@ -189,7 +189,6 @@ public class ClientProxy extends CommonProxy { ModelLoader.setCustomModelResourceLocation(RefinedStorageItems.STORAGE_DISK, ItemStorageDisk.TYPE_16K, new ModelResourceLocation("refinedstorage:16k_storage_disk", "inventory")); ModelLoader.setCustomModelResourceLocation(RefinedStorageItems.STORAGE_DISK, ItemStorageDisk.TYPE_64K, new ModelResourceLocation("refinedstorage:64k_storage_disk", "inventory")); ModelLoader.setCustomModelResourceLocation(RefinedStorageItems.STORAGE_DISK, ItemStorageDisk.TYPE_CREATIVE, new ModelResourceLocation("refinedstorage:creative_storage_disk", "inventory")); - ModelLoader.setCustomModelResourceLocation(RefinedStorageItems.STORAGE_DISK, ItemStorageDisk.TYPE_DEBUG, new ModelResourceLocation("refinedstorage:debug_storage_disk", "inventory")); ModelLoader.setCustomModelResourceLocation(RefinedStorageItems.STORAGE_PART, ItemStoragePart.TYPE_1K, new ModelResourceLocation("refinedstorage:1k_storage_part", "inventory")); ModelLoader.setCustomModelResourceLocation(RefinedStorageItems.STORAGE_PART, ItemStoragePart.TYPE_4K, new ModelResourceLocation("refinedstorage:4k_storage_part", "inventory")); From de510ba7053c00193acd93c030f95e59d1a42bb0 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Wed, 10 Aug 2016 23:32:20 +0200 Subject: [PATCH 153/214] Rename classes so they are prefixed with "item" to prepare for fluid storage --- .../api/network/INetworkMaster.java | 13 ++++--- .../api/network/NetworkUtils.java | 2 +- .../network/{ => grid}/GridExtractFlags.java | 2 +- .../IItemGridHandler.java} | 4 +- .../api/storage/IStorageProvider.java | 8 ++-- .../api/storage/{ => item}/CompareUtils.java | 2 +- .../IGroupedItemStorage.java} | 9 +++-- .../{IStorage.java => item/IItemStorage.java} | 5 ++- .../autocrafting/CraftingTaskScheduler.java | 2 +- .../autocrafting/ProcessingCraftingTask.java | 2 +- ...{GridHandler.java => ItemGridHandler.java} | 10 ++--- .../apiimpl/solderer/SoldererRegistry.java | 2 +- ...edStorage.java => GroupedItemStorage.java} | 18 ++++----- .../{NBTStorage.java => NBTItemStorage.java} | 18 ++++----- .../container/ContainerBase.java | 2 +- .../refinedstorage/gui/GuiConstructor.java | 2 +- .../refinedstorage/gui/GuiDestructor.java | 2 +- .../java/refinedstorage/gui/GuiDetector.java | 2 +- .../java/refinedstorage/gui/GuiExporter.java | 2 +- .../refinedstorage/gui/GuiGridFilter.java | 2 +- .../java/refinedstorage/gui/GuiImporter.java | 2 +- .../java/refinedstorage/gui/GuiInterface.java | 2 +- .../java/refinedstorage/gui/GuiStorage.java | 2 +- .../gui/grid/GuiCraftingSettings.java | 6 +-- .../java/refinedstorage/gui/grid/GuiGrid.java | 4 +- .../gui/sidebutton/SideButtonCompare.java | 2 +- .../refinedstorage/item/ItemBlockStorage.java | 10 ++--- .../refinedstorage/item/ItemGridFilter.java | 2 +- .../java/refinedstorage/item/ItemPattern.java | 2 +- .../refinedstorage/item/ItemStorageDisk.java | 20 +++++----- .../network/MessageGridCraftingStart.java | 4 +- .../network/MessageGridInsertHeld.java | 4 +- .../network/MessageGridPull.java | 4 +- .../refinedstorage/proxy/CommonProxy.java | 6 +-- .../java/refinedstorage/tile/ClientNode.java | 2 +- .../refinedstorage/tile/TileController.java | 37 ++++++++++--------- .../refinedstorage/tile/TileDiskDrive.java | 24 ++++++------ .../refinedstorage/tile/TileSolderer.java | 2 +- .../java/refinedstorage/tile/TileStorage.java | 20 +++++----- .../tile/config/IFilterable.java | 2 +- ...geUnitStorage.java => ItemStorageDSU.java} | 6 +-- ...werStorage.java => ItemStorageDrawer.java} | 6 +-- ...lStorage.java => ItemStorageExternal.java} | 6 +-- ...orage.java => ItemStorageItemHandler.java} | 6 +-- .../externalstorage/TileExternalStorage.java | 20 +++++----- .../java/refinedstorage/tile/grid/IGrid.java | 4 +- .../refinedstorage/tile/grid/TileGrid.java | 6 +-- .../tile/grid/WirelessGrid.java | 4 +- 48 files changed, 165 insertions(+), 159 deletions(-) rename src/main/java/refinedstorage/api/network/{ => grid}/GridExtractFlags.java (87%) rename src/main/java/refinedstorage/api/network/{IGridHandler.java => grid/IItemGridHandler.java} (95%) rename src/main/java/refinedstorage/api/storage/{ => item}/CompareUtils.java (98%) rename src/main/java/refinedstorage/api/storage/{IGroupedStorage.java => item/IGroupedItemStorage.java} (89%) rename src/main/java/refinedstorage/api/storage/{IStorage.java => item/IItemStorage.java} (93%) rename src/main/java/refinedstorage/apiimpl/network/{GridHandler.java => ItemGridHandler.java} (94%) rename src/main/java/refinedstorage/apiimpl/storage/{GroupedStorage.java => GroupedItemStorage.java} (86%) rename src/main/java/refinedstorage/apiimpl/storage/{NBTStorage.java => NBTItemStorage.java} (92%) rename src/main/java/refinedstorage/tile/externalstorage/{DeepStorageUnitStorage.java => ItemStorageDSU.java} (94%) rename src/main/java/refinedstorage/tile/externalstorage/{DrawerStorage.java => ItemStorageDrawer.java} (95%) rename src/main/java/refinedstorage/tile/externalstorage/{ExternalStorage.java => ItemStorageExternal.java} (81%) rename src/main/java/refinedstorage/tile/externalstorage/{ItemHandlerStorage.java => ItemStorageItemHandler.java} (91%) diff --git a/src/main/java/refinedstorage/api/network/INetworkMaster.java b/src/main/java/refinedstorage/api/network/INetworkMaster.java index 9b783a5a3..ca30d8dd0 100755 --- a/src/main/java/refinedstorage/api/network/INetworkMaster.java +++ b/src/main/java/refinedstorage/api/network/INetworkMaster.java @@ -6,8 +6,9 @@ import net.minecraft.item.ItemStack; import net.minecraft.util.math.BlockPos; import refinedstorage.api.autocrafting.ICraftingPattern; import refinedstorage.api.autocrafting.ICraftingTask; -import refinedstorage.api.storage.CompareUtils; -import refinedstorage.api.storage.IGroupedStorage; +import refinedstorage.api.network.grid.IItemGridHandler; +import refinedstorage.api.storage.item.CompareUtils; +import refinedstorage.api.storage.item.IGroupedItemStorage; import javax.annotation.Nonnull; import javax.annotation.Nullable; @@ -43,9 +44,9 @@ public interface INetworkMaster { INetworkNodeGraph getNodeGraph(); /** - * @return The {@link IGridHandler} for this network + * @return The {@link IItemGridHandler} for this network */ - IGridHandler getGridHandler(); + IItemGridHandler getGridHandler(); /** * @return The {@link IWirelessGridHandler} for this network @@ -53,9 +54,9 @@ public interface INetworkMaster { IWirelessGridHandler getWirelessGridHandler(); /** - * @return The {@link IGroupedStorage} of this network + * @return The {@link IGroupedItemStorage} of this network */ - IGroupedStorage getStorage(); + IGroupedItemStorage getStorage(); /** * @return The crafting tasks in this network, do NOT modify this list diff --git a/src/main/java/refinedstorage/api/network/NetworkUtils.java b/src/main/java/refinedstorage/api/network/NetworkUtils.java index b5bb88a47..3a1d56e1f 100755 --- a/src/main/java/refinedstorage/api/network/NetworkUtils.java +++ b/src/main/java/refinedstorage/api/network/NetworkUtils.java @@ -2,7 +2,7 @@ package refinedstorage.api.network; import net.minecraft.item.ItemStack; import refinedstorage.api.autocrafting.ICraftingPattern; -import refinedstorage.api.storage.CompareUtils; +import refinedstorage.api.storage.item.CompareUtils; /** * Utilities for network manipulation. diff --git a/src/main/java/refinedstorage/api/network/GridExtractFlags.java b/src/main/java/refinedstorage/api/network/grid/GridExtractFlags.java similarity index 87% rename from src/main/java/refinedstorage/api/network/GridExtractFlags.java rename to src/main/java/refinedstorage/api/network/grid/GridExtractFlags.java index 87064d6bb..43d9466e7 100755 --- a/src/main/java/refinedstorage/api/network/GridExtractFlags.java +++ b/src/main/java/refinedstorage/api/network/grid/GridExtractFlags.java @@ -1,4 +1,4 @@ -package refinedstorage.api.network; +package refinedstorage.api.network.grid; /** * Flags for knowing what extract action the player is performing, these can be combined. diff --git a/src/main/java/refinedstorage/api/network/IGridHandler.java b/src/main/java/refinedstorage/api/network/grid/IItemGridHandler.java similarity index 95% rename from src/main/java/refinedstorage/api/network/IGridHandler.java rename to src/main/java/refinedstorage/api/network/grid/IItemGridHandler.java index df97764ed..484a22dde 100755 --- a/src/main/java/refinedstorage/api/network/IGridHandler.java +++ b/src/main/java/refinedstorage/api/network/grid/IItemGridHandler.java @@ -1,4 +1,4 @@ -package refinedstorage.api.network; +package refinedstorage.api.network.grid; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.ItemStack; @@ -8,7 +8,7 @@ import javax.annotation.Nullable; /** * Defines the behavior of grids. */ -public interface IGridHandler { +public interface IItemGridHandler { /** * Called when a player tries to extract an item from the grid. * diff --git a/src/main/java/refinedstorage/api/storage/IStorageProvider.java b/src/main/java/refinedstorage/api/storage/IStorageProvider.java index fd10e65ea..ebc39d1da 100755 --- a/src/main/java/refinedstorage/api/storage/IStorageProvider.java +++ b/src/main/java/refinedstorage/api/storage/IStorageProvider.java @@ -1,5 +1,7 @@ package refinedstorage.api.storage; +import refinedstorage.api.storage.item.IItemStorage; + import java.util.List; /** @@ -7,9 +9,9 @@ import java.util.List; */ public interface IStorageProvider { /** - * Adds the storages that this storage provider provides. + * Adds the item storages that this storage provider provides. * - * @param storages The previously added storages + * @param storages The previously added item storages */ - void addStorages(List storages); + void addItemStorages(List storages); } diff --git a/src/main/java/refinedstorage/api/storage/CompareUtils.java b/src/main/java/refinedstorage/api/storage/item/CompareUtils.java similarity index 98% rename from src/main/java/refinedstorage/api/storage/CompareUtils.java rename to src/main/java/refinedstorage/api/storage/item/CompareUtils.java index 937e804bd..8b340c15e 100755 --- a/src/main/java/refinedstorage/api/storage/CompareUtils.java +++ b/src/main/java/refinedstorage/api/storage/item/CompareUtils.java @@ -1,4 +1,4 @@ -package refinedstorage.api.storage; +package refinedstorage.api.storage.item; import net.minecraft.item.ItemStack; import net.minecraftforge.oredict.OreDictionary; diff --git a/src/main/java/refinedstorage/api/storage/IGroupedStorage.java b/src/main/java/refinedstorage/api/storage/item/IGroupedItemStorage.java similarity index 89% rename from src/main/java/refinedstorage/api/storage/IGroupedStorage.java rename to src/main/java/refinedstorage/api/storage/item/IGroupedItemStorage.java index 887f823ed..55bd1ac22 100755 --- a/src/main/java/refinedstorage/api/storage/IGroupedStorage.java +++ b/src/main/java/refinedstorage/api/storage/item/IGroupedItemStorage.java @@ -1,7 +1,8 @@ -package refinedstorage.api.storage; +package refinedstorage.api.storage.item; import net.minecraft.item.ItemStack; import refinedstorage.api.network.INetworkMaster; +import refinedstorage.api.storage.IStorageProvider; import javax.annotation.Nonnull; import javax.annotation.Nullable; @@ -12,10 +13,10 @@ import java.util.List; * This holds all items from all the connected storages from a {@link INetworkMaster}. *

* Refined Storage uses this class mainly for use in Grids and Detectors to avoid querying - * individual {@link IStorage} constantly (performance impact) and to send and detect storage changes + * individual {@link IItemStorage} constantly (performance impact) and to send and detect storage changes * more efficiently. */ -public interface IGroupedStorage { +public interface IGroupedItemStorage { /** * Rebuilds the storages and items for a network. Typically called when a {@link IStorageProvider} is * added or removed from the network. @@ -71,5 +72,5 @@ public interface IGroupedStorage { /** * @return The storages connected to this network */ - List getStorages(); + List getStorages(); } diff --git a/src/main/java/refinedstorage/api/storage/IStorage.java b/src/main/java/refinedstorage/api/storage/item/IItemStorage.java similarity index 93% rename from src/main/java/refinedstorage/api/storage/IStorage.java rename to src/main/java/refinedstorage/api/storage/item/IItemStorage.java index 709be751d..5ceae03f4 100755 --- a/src/main/java/refinedstorage/api/storage/IStorage.java +++ b/src/main/java/refinedstorage/api/storage/item/IItemStorage.java @@ -1,6 +1,7 @@ -package refinedstorage.api.storage; +package refinedstorage.api.storage.item; import net.minecraft.item.ItemStack; +import refinedstorage.api.storage.IStorageProvider; import javax.annotation.Nonnull; import javax.annotation.Nullable; @@ -10,7 +11,7 @@ import java.util.List; * Represents a storage sink for the storage network. * Provide this through an {@link IStorageProvider}. */ -public interface IStorage { +public interface IItemStorage { /** * @return Items stored in this storage */ diff --git a/src/main/java/refinedstorage/apiimpl/autocrafting/CraftingTaskScheduler.java b/src/main/java/refinedstorage/apiimpl/autocrafting/CraftingTaskScheduler.java index 54342d0c4..47eb86931 100755 --- a/src/main/java/refinedstorage/apiimpl/autocrafting/CraftingTaskScheduler.java +++ b/src/main/java/refinedstorage/apiimpl/autocrafting/CraftingTaskScheduler.java @@ -5,7 +5,7 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import refinedstorage.api.autocrafting.ICraftingPattern; import refinedstorage.api.network.INetworkMaster; -import refinedstorage.api.storage.CompareUtils; +import refinedstorage.api.storage.item.CompareUtils; public class CraftingTaskScheduler { private static final String NBT_SCHEDULED = "CraftingTaskScheduled"; diff --git a/src/main/java/refinedstorage/apiimpl/autocrafting/ProcessingCraftingTask.java b/src/main/java/refinedstorage/apiimpl/autocrafting/ProcessingCraftingTask.java index 31f04b17a..f5fb0e38a 100755 --- a/src/main/java/refinedstorage/apiimpl/autocrafting/ProcessingCraftingTask.java +++ b/src/main/java/refinedstorage/apiimpl/autocrafting/ProcessingCraftingTask.java @@ -9,7 +9,7 @@ import refinedstorage.api.autocrafting.ICraftingPatternContainer; import refinedstorage.api.autocrafting.ICraftingTask; import refinedstorage.api.network.INetworkMaster; import refinedstorage.api.network.NetworkUtils; -import refinedstorage.api.storage.CompareUtils; +import refinedstorage.api.storage.item.CompareUtils; public class ProcessingCraftingTask implements ICraftingTask { public static final int ID = 1; diff --git a/src/main/java/refinedstorage/apiimpl/network/GridHandler.java b/src/main/java/refinedstorage/apiimpl/network/ItemGridHandler.java similarity index 94% rename from src/main/java/refinedstorage/apiimpl/network/GridHandler.java rename to src/main/java/refinedstorage/apiimpl/network/ItemGridHandler.java index 84c91db77..96f3d8ff6 100755 --- a/src/main/java/refinedstorage/apiimpl/network/GridHandler.java +++ b/src/main/java/refinedstorage/apiimpl/network/ItemGridHandler.java @@ -5,18 +5,18 @@ import net.minecraft.inventory.InventoryHelper; import net.minecraft.item.ItemStack; import refinedstorage.api.autocrafting.ICraftingPattern; import refinedstorage.api.autocrafting.ICraftingTask; -import refinedstorage.api.network.GridExtractFlags; -import refinedstorage.api.network.IGridHandler; import refinedstorage.api.network.INetworkMaster; import refinedstorage.api.network.NetworkUtils; -import refinedstorage.api.storage.CompareUtils; +import refinedstorage.api.network.grid.GridExtractFlags; +import refinedstorage.api.network.grid.IItemGridHandler; +import refinedstorage.api.storage.item.CompareUtils; -public class GridHandler implements IGridHandler { +public class ItemGridHandler implements IItemGridHandler { public static final int MAX_CRAFTING_PER_REQUEST = 500; private INetworkMaster network; - public GridHandler(INetworkMaster network) { + public ItemGridHandler(INetworkMaster network) { this.network = network; } diff --git a/src/main/java/refinedstorage/apiimpl/solderer/SoldererRegistry.java b/src/main/java/refinedstorage/apiimpl/solderer/SoldererRegistry.java index 971b5aade..04f0b5162 100755 --- a/src/main/java/refinedstorage/apiimpl/solderer/SoldererRegistry.java +++ b/src/main/java/refinedstorage/apiimpl/solderer/SoldererRegistry.java @@ -3,7 +3,7 @@ package refinedstorage.apiimpl.solderer; import net.minecraftforge.items.IItemHandler; import refinedstorage.api.solderer.ISoldererRecipe; import refinedstorage.api.solderer.ISoldererRegistry; -import refinedstorage.api.storage.CompareUtils; +import refinedstorage.api.storage.item.CompareUtils; import javax.annotation.Nonnull; import javax.annotation.Nullable; diff --git a/src/main/java/refinedstorage/apiimpl/storage/GroupedStorage.java b/src/main/java/refinedstorage/apiimpl/storage/GroupedItemStorage.java similarity index 86% rename from src/main/java/refinedstorage/apiimpl/storage/GroupedStorage.java rename to src/main/java/refinedstorage/apiimpl/storage/GroupedItemStorage.java index a2b26d99b..50c32c135 100755 --- a/src/main/java/refinedstorage/apiimpl/storage/GroupedStorage.java +++ b/src/main/java/refinedstorage/apiimpl/storage/GroupedItemStorage.java @@ -7,10 +7,10 @@ import net.minecraft.item.ItemStack; import refinedstorage.api.autocrafting.ICraftingPattern; import refinedstorage.api.network.INetworkMaster; import refinedstorage.api.network.NetworkUtils; -import refinedstorage.api.storage.CompareUtils; -import refinedstorage.api.storage.IGroupedStorage; -import refinedstorage.api.storage.IStorage; import refinedstorage.api.storage.IStorageProvider; +import refinedstorage.api.storage.item.CompareUtils; +import refinedstorage.api.storage.item.IGroupedItemStorage; +import refinedstorage.api.storage.item.IItemStorage; import javax.annotation.Nonnull; import javax.annotation.Nullable; @@ -18,12 +18,12 @@ import java.util.ArrayList; import java.util.Collection; import java.util.List; -public class GroupedStorage implements IGroupedStorage { +public class GroupedItemStorage implements IGroupedItemStorage { private INetworkMaster network; - private List storages = new ArrayList<>(); + private List storages = new ArrayList<>(); private Multimap stacks = ArrayListMultimap.create(); - public GroupedStorage(INetworkMaster network) { + public GroupedItemStorage(INetworkMaster network) { this.network = network; } @@ -33,11 +33,11 @@ public class GroupedStorage implements IGroupedStorage { network.getNodeGraph().all().stream() .filter(node -> node.canUpdate() && node instanceof IStorageProvider) - .forEach(node -> ((IStorageProvider) node).addStorages(storages)); + .forEach(node -> ((IStorageProvider) node).addItemStorages(storages)); stacks.clear(); - for (IStorage storage : storages) { + for (IItemStorage storage : storages) { for (ItemStack stack : storage.getItems()) { add(stack, true); } @@ -124,7 +124,7 @@ public class GroupedStorage implements IGroupedStorage { } @Override - public List getStorages() { + public List getStorages() { return storages; } } diff --git a/src/main/java/refinedstorage/apiimpl/storage/NBTStorage.java b/src/main/java/refinedstorage/apiimpl/storage/NBTItemStorage.java similarity index 92% rename from src/main/java/refinedstorage/apiimpl/storage/NBTStorage.java rename to src/main/java/refinedstorage/apiimpl/storage/NBTItemStorage.java index a2c0cff6d..df9508ed6 100755 --- a/src/main/java/refinedstorage/apiimpl/storage/NBTStorage.java +++ b/src/main/java/refinedstorage/apiimpl/storage/NBTItemStorage.java @@ -6,19 +6,19 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.tileentity.TileEntity; import net.minecraftforge.items.ItemHandlerHelper; -import refinedstorage.api.storage.CompareUtils; -import refinedstorage.api.storage.IStorage; +import refinedstorage.api.storage.item.CompareUtils; +import refinedstorage.api.storage.item.IItemStorage; import javax.annotation.Nullable; import java.util.ArrayList; import java.util.List; /** - * A implementation of {@link IStorage} that stores storage items in NBT. + * A implementation of {@link IItemStorage} that stores storage items in NBT. */ -public abstract class NBTStorage implements IStorage { +public abstract class NBTItemStorage implements IItemStorage { /** - * The current save protocol that is used. It's set to every {@link NBTStorage} to allow for + * The current save protocol that is used. It's set to every {@link NBTItemStorage} to allow for * safe backwards compatibility breaks. */ private static final int PROTOCOL = 1; @@ -41,11 +41,11 @@ public abstract class NBTStorage implements IStorage { private List stacks = new ArrayList<>(); /** - * @param tag The NBT tag we are reading from and writing the amount stored to, has to be initialized with {@link NBTStorage#createNBT()} if it doesn't exist yet + * @param tag The NBT tag we are reading from and writing the amount stored to, has to be initialized with {@link NBTItemStorage#createNBT()} if it doesn't exist yet * @param capacity The capacity of this storage, -1 for infinite capacity * @param tile A {@link TileEntity} that the NBT storage is in, will be marked dirty when the storage changes */ - public NBTStorage(NBTTagCompound tag, int capacity, @Nullable TileEntity tile) { + public NBTItemStorage(NBTTagCompound tag, int capacity, @Nullable TileEntity tile) { this.tag = tag; this.capacity = capacity; this.tile = tile; @@ -243,8 +243,8 @@ public abstract class NBTStorage implements IStorage { } /** - * @param stack The {@link ItemStack} to populate with the NBT tags from {@link NBTStorage#createNBT()} - * @return The provided {@link ItemStack} with NBT tags from {@link NBTStorage#createNBT()} + * @param stack The {@link ItemStack} to populate with the NBT tags from {@link NBTItemStorage#createNBT()} + * @return The provided {@link ItemStack} with NBT tags from {@link NBTItemStorage#createNBT()} */ public static ItemStack createStackWithNBT(ItemStack stack) { stack.setTagCompound(createNBT()); diff --git a/src/main/java/refinedstorage/container/ContainerBase.java b/src/main/java/refinedstorage/container/ContainerBase.java index 896b211e5..0a1e7f294 100755 --- a/src/main/java/refinedstorage/container/ContainerBase.java +++ b/src/main/java/refinedstorage/container/ContainerBase.java @@ -6,7 +6,7 @@ import net.minecraft.inventory.Container; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; import net.minecraftforge.items.ItemHandlerHelper; -import refinedstorage.api.storage.CompareUtils; +import refinedstorage.api.storage.item.CompareUtils; import refinedstorage.container.slot.SlotDisabled; import refinedstorage.container.slot.SlotSpecimen; import refinedstorage.container.slot.SlotSpecimenLegacy; diff --git a/src/main/java/refinedstorage/gui/GuiConstructor.java b/src/main/java/refinedstorage/gui/GuiConstructor.java index 50bca551c..7aed1efd5 100755 --- a/src/main/java/refinedstorage/gui/GuiConstructor.java +++ b/src/main/java/refinedstorage/gui/GuiConstructor.java @@ -1,6 +1,6 @@ package refinedstorage.gui; -import refinedstorage.api.storage.CompareUtils; +import refinedstorage.api.storage.item.CompareUtils; import refinedstorage.container.ContainerConstructor; import refinedstorage.gui.sidebutton.SideButtonCompare; import refinedstorage.gui.sidebutton.SideButtonRedstoneMode; diff --git a/src/main/java/refinedstorage/gui/GuiDestructor.java b/src/main/java/refinedstorage/gui/GuiDestructor.java index 24b62adaa..d703a3cd0 100755 --- a/src/main/java/refinedstorage/gui/GuiDestructor.java +++ b/src/main/java/refinedstorage/gui/GuiDestructor.java @@ -1,6 +1,6 @@ package refinedstorage.gui; -import refinedstorage.api.storage.CompareUtils; +import refinedstorage.api.storage.item.CompareUtils; import refinedstorage.container.ContainerDestructor; import refinedstorage.gui.sidebutton.SideButtonCompare; import refinedstorage.gui.sidebutton.SideButtonMode; diff --git a/src/main/java/refinedstorage/gui/GuiDetector.java b/src/main/java/refinedstorage/gui/GuiDetector.java index 230fa761c..10e746d6b 100755 --- a/src/main/java/refinedstorage/gui/GuiDetector.java +++ b/src/main/java/refinedstorage/gui/GuiDetector.java @@ -2,7 +2,7 @@ package refinedstorage.gui; import com.google.common.primitives.Ints; import net.minecraft.client.gui.GuiTextField; -import refinedstorage.api.storage.CompareUtils; +import refinedstorage.api.storage.item.CompareUtils; import refinedstorage.container.ContainerDetector; import refinedstorage.gui.sidebutton.SideButtonCompare; import refinedstorage.gui.sidebutton.SideButtonDetectorMode; diff --git a/src/main/java/refinedstorage/gui/GuiExporter.java b/src/main/java/refinedstorage/gui/GuiExporter.java index 387f8b612..31499faba 100755 --- a/src/main/java/refinedstorage/gui/GuiExporter.java +++ b/src/main/java/refinedstorage/gui/GuiExporter.java @@ -1,6 +1,6 @@ package refinedstorage.gui; -import refinedstorage.api.storage.CompareUtils; +import refinedstorage.api.storage.item.CompareUtils; import refinedstorage.container.ContainerExporter; import refinedstorage.gui.sidebutton.SideButtonCompare; import refinedstorage.gui.sidebutton.SideButtonRedstoneMode; diff --git a/src/main/java/refinedstorage/gui/GuiGridFilter.java b/src/main/java/refinedstorage/gui/GuiGridFilter.java index 8d6b119ed..0c8aa7f13 100755 --- a/src/main/java/refinedstorage/gui/GuiGridFilter.java +++ b/src/main/java/refinedstorage/gui/GuiGridFilter.java @@ -3,7 +3,7 @@ package refinedstorage.gui; import net.minecraft.client.gui.GuiButton; import net.minecraftforge.fml.client.config.GuiCheckBox; import refinedstorage.RefinedStorage; -import refinedstorage.api.storage.CompareUtils; +import refinedstorage.api.storage.item.CompareUtils; import refinedstorage.container.ContainerGridFilter; import refinedstorage.item.ItemGridFilter; import refinedstorage.network.MessageGridFilterUpdate; diff --git a/src/main/java/refinedstorage/gui/GuiImporter.java b/src/main/java/refinedstorage/gui/GuiImporter.java index 384cbec40..61cc6b9ff 100755 --- a/src/main/java/refinedstorage/gui/GuiImporter.java +++ b/src/main/java/refinedstorage/gui/GuiImporter.java @@ -1,6 +1,6 @@ package refinedstorage.gui; -import refinedstorage.api.storage.CompareUtils; +import refinedstorage.api.storage.item.CompareUtils; import refinedstorage.container.ContainerImporter; import refinedstorage.gui.sidebutton.SideButtonCompare; import refinedstorage.gui.sidebutton.SideButtonMode; diff --git a/src/main/java/refinedstorage/gui/GuiInterface.java b/src/main/java/refinedstorage/gui/GuiInterface.java index 627456013..fe907e5c8 100755 --- a/src/main/java/refinedstorage/gui/GuiInterface.java +++ b/src/main/java/refinedstorage/gui/GuiInterface.java @@ -1,6 +1,6 @@ package refinedstorage.gui; -import refinedstorage.api.storage.CompareUtils; +import refinedstorage.api.storage.item.CompareUtils; import refinedstorage.container.ContainerInterface; import refinedstorage.gui.sidebutton.SideButtonCompare; import refinedstorage.gui.sidebutton.SideButtonRedstoneMode; diff --git a/src/main/java/refinedstorage/gui/GuiStorage.java b/src/main/java/refinedstorage/gui/GuiStorage.java index fff34ef1c..c00cef7a9 100755 --- a/src/main/java/refinedstorage/gui/GuiStorage.java +++ b/src/main/java/refinedstorage/gui/GuiStorage.java @@ -2,7 +2,7 @@ package refinedstorage.gui; import com.google.common.primitives.Ints; import net.minecraft.client.gui.GuiTextField; -import refinedstorage.api.storage.CompareUtils; +import refinedstorage.api.storage.item.CompareUtils; import refinedstorage.container.ContainerStorage; import refinedstorage.gui.sidebutton.SideButtonCompare; import refinedstorage.gui.sidebutton.SideButtonMode; diff --git a/src/main/java/refinedstorage/gui/grid/GuiCraftingSettings.java b/src/main/java/refinedstorage/gui/grid/GuiCraftingSettings.java index 34a1cb349..09382cf51 100755 --- a/src/main/java/refinedstorage/gui/grid/GuiCraftingSettings.java +++ b/src/main/java/refinedstorage/gui/grid/GuiCraftingSettings.java @@ -7,7 +7,7 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraftforge.fml.client.FMLClientHandler; import org.lwjgl.input.Keyboard; import refinedstorage.RefinedStorage; -import refinedstorage.apiimpl.network.GridHandler; +import refinedstorage.apiimpl.network.ItemGridHandler; import refinedstorage.container.ContainerCraftingSettings; import refinedstorage.gui.GuiBase; import refinedstorage.network.MessageGridCraftingStart; @@ -110,7 +110,7 @@ public class GuiCraftingSettings extends GuiBase { int newAmount = Integer.parseInt(incrementButton.displayString); - newAmount = Math.min(Math.max(DEFAULT_AMOUNT, oldAmount + newAmount), GridHandler.MAX_CRAFTING_PER_REQUEST); + newAmount = Math.min(Math.max(DEFAULT_AMOUNT, oldAmount + newAmount), ItemGridHandler.MAX_CRAFTING_PER_REQUEST); amountField.setText(String.valueOf(newAmount)); @@ -123,7 +123,7 @@ public class GuiCraftingSettings extends GuiBase { private void startRequest() { Integer quantity = Ints.tryParse(amountField.getText()); - if (quantity != null && quantity > 0 && quantity <= GridHandler.MAX_CRAFTING_PER_REQUEST) { + if (quantity != null && quantity > 0 && quantity <= ItemGridHandler.MAX_CRAFTING_PER_REQUEST) { RefinedStorage.INSTANCE.network.sendToServer(new MessageGridCraftingStart(stack.getId(), quantity)); close(); diff --git a/src/main/java/refinedstorage/gui/grid/GuiGrid.java b/src/main/java/refinedstorage/gui/grid/GuiGrid.java index f1e8d2994..7a0f4e4bf 100755 --- a/src/main/java/refinedstorage/gui/grid/GuiGrid.java +++ b/src/main/java/refinedstorage/gui/grid/GuiGrid.java @@ -13,8 +13,8 @@ import net.minecraft.item.ItemStack; import net.minecraft.util.math.BlockPos; import net.minecraftforge.fml.common.FMLCommonHandler; import refinedstorage.RefinedStorage; -import refinedstorage.api.network.GridExtractFlags; -import refinedstorage.api.storage.CompareUtils; +import refinedstorage.api.network.grid.GridExtractFlags; +import refinedstorage.api.storage.item.CompareUtils; import refinedstorage.block.EnumGridType; import refinedstorage.container.ContainerGrid; import refinedstorage.gui.GuiBase; diff --git a/src/main/java/refinedstorage/gui/sidebutton/SideButtonCompare.java b/src/main/java/refinedstorage/gui/sidebutton/SideButtonCompare.java index aad6ddfda..c659fbeb2 100755 --- a/src/main/java/refinedstorage/gui/sidebutton/SideButtonCompare.java +++ b/src/main/java/refinedstorage/gui/sidebutton/SideButtonCompare.java @@ -1,7 +1,7 @@ package refinedstorage.gui.sidebutton; import net.minecraft.util.text.TextFormatting; -import refinedstorage.api.storage.CompareUtils; +import refinedstorage.api.storage.item.CompareUtils; import refinedstorage.gui.GuiBase; import refinedstorage.tile.data.TileDataManager; import refinedstorage.tile.data.TileDataParameter; diff --git a/src/main/java/refinedstorage/item/ItemBlockStorage.java b/src/main/java/refinedstorage/item/ItemBlockStorage.java index 1de4ade44..dc0b6b5c1 100755 --- a/src/main/java/refinedstorage/item/ItemBlockStorage.java +++ b/src/main/java/refinedstorage/item/ItemBlockStorage.java @@ -12,7 +12,7 @@ import net.minecraft.util.EnumHand; import net.minecraft.world.World; import refinedstorage.RefinedStorageBlocks; import refinedstorage.RefinedStorageItems; -import refinedstorage.apiimpl.storage.NBTStorage; +import refinedstorage.apiimpl.storage.NBTItemStorage; import refinedstorage.block.EnumStorageType; import refinedstorage.tile.TileStorage; @@ -31,9 +31,9 @@ public class ItemBlockStorage extends ItemBlockBase { NBTTagCompound tag = stack.getTagCompound().getCompoundTag(TileStorage.NBT_STORAGE); if (type == EnumStorageType.TYPE_CREATIVE) { - tooltip.add(I18n.format("misc.refinedstorage:storage.stored", NBTStorage.getStoredFromNBT(tag))); + tooltip.add(I18n.format("misc.refinedstorage:storage.stored", NBTItemStorage.getStoredFromNBT(tag))); } else { - tooltip.add(I18n.format("misc.refinedstorage:storage.stored_capacity", NBTStorage.getStoredFromNBT(tag), type.getCapacity())); + tooltip.add(I18n.format("misc.refinedstorage:storage.stored_capacity", NBTItemStorage.getStoredFromNBT(tag), type.getCapacity())); } } } @@ -42,7 +42,7 @@ public class ItemBlockStorage extends ItemBlockBase { public ActionResult onItemRightClick(ItemStack stack, World world, EntityPlayer player, EnumHand hand) { EnumStorageType type = EnumStorageType.getById(stack.getMetadata()); - if (type != null && isValid(stack) && NBTStorage.getStoredFromNBT(stack.getTagCompound().getCompoundTag(TileStorage.NBT_STORAGE)) == 0 && stack.getMetadata() != ItemStorageDisk.TYPE_CREATIVE && !world.isRemote && player.isSneaking()) { + if (type != null && isValid(stack) && NBTItemStorage.getStoredFromNBT(stack.getTagCompound().getCompoundTag(TileStorage.NBT_STORAGE)) == 0 && stack.getMetadata() != ItemStorageDisk.TYPE_CREATIVE && !world.isRemote && player.isSneaking()) { ItemStack storagePart = new ItemStack(RefinedStorageItems.STORAGE_PART, 1, stack.getMetadata()); if (!player.inventory.addItemStackToInventory(storagePart.copy())) { @@ -83,7 +83,7 @@ public class ItemBlockStorage extends ItemBlockBase { public static ItemStack initNBT(ItemStack stack) { NBTTagCompound tag = new NBTTagCompound(); - tag.setTag(TileStorage.NBT_STORAGE, NBTStorage.createNBT()); + tag.setTag(TileStorage.NBT_STORAGE, NBTItemStorage.createNBT()); stack.setTagCompound(tag); return stack; } diff --git a/src/main/java/refinedstorage/item/ItemGridFilter.java b/src/main/java/refinedstorage/item/ItemGridFilter.java index 81048e31e..0c2dd10c3 100755 --- a/src/main/java/refinedstorage/item/ItemGridFilter.java +++ b/src/main/java/refinedstorage/item/ItemGridFilter.java @@ -10,7 +10,7 @@ import net.minecraft.world.World; import refinedstorage.RefinedStorage; import refinedstorage.RefinedStorageGui; import refinedstorage.RefinedStorageItems; -import refinedstorage.api.storage.CompareUtils; +import refinedstorage.api.storage.item.CompareUtils; import refinedstorage.inventory.ItemHandlerGridFilter; import java.util.List; diff --git a/src/main/java/refinedstorage/item/ItemPattern.java b/src/main/java/refinedstorage/item/ItemPattern.java index 3ab1897aa..fb5c30c85 100755 --- a/src/main/java/refinedstorage/item/ItemPattern.java +++ b/src/main/java/refinedstorage/item/ItemPattern.java @@ -13,7 +13,7 @@ import net.minecraft.util.text.TextFormatting; import net.minecraft.world.World; import net.minecraftforge.common.util.Constants; import refinedstorage.RefinedStorageItems; -import refinedstorage.api.storage.CompareUtils; +import refinedstorage.api.storage.item.CompareUtils; import java.util.HashSet; import java.util.List; diff --git a/src/main/java/refinedstorage/item/ItemStorageDisk.java b/src/main/java/refinedstorage/item/ItemStorageDisk.java index 7decff81f..021f82122 100755 --- a/src/main/java/refinedstorage/item/ItemStorageDisk.java +++ b/src/main/java/refinedstorage/item/ItemStorageDisk.java @@ -13,7 +13,7 @@ import net.minecraft.util.EnumActionResult; import net.minecraft.util.EnumHand; import net.minecraft.world.World; import refinedstorage.RefinedStorageItems; -import refinedstorage.apiimpl.storage.NBTStorage; +import refinedstorage.apiimpl.storage.NBTItemStorage; import refinedstorage.block.EnumStorageType; import java.util.ArrayList; @@ -41,7 +41,7 @@ public class ItemStorageDisk extends ItemBase { @Override public void getSubItems(Item item, CreativeTabs tab, List list) { for (int i = 0; i < 5; ++i) { - list.add(NBTStorage.createStackWithNBT(new ItemStack(item, 1, i))); + list.add(NBTItemStorage.createStackWithNBT(new ItemStack(item, 1, i))); } } @@ -53,16 +53,16 @@ public class ItemStorageDisk extends ItemBase { if (stack.getItemDamage() == TYPE_DEBUG) { applyDebugDiskData(stack); } else { - NBTStorage.createStackWithNBT(stack); + NBTItemStorage.createStackWithNBT(stack); } } } private void applyDebugDiskData(ItemStack stack) { if (debugDiskTag == null) { - debugDiskTag = NBTStorage.createNBT(); + debugDiskTag = NBTItemStorage.createNBT(); - NBTStorage storage = new NBTStorage(debugDiskTag, -1, null) { + NBTItemStorage storage = new NBTItemStorage(debugDiskTag, -1, null) { @Override public int getPriority() { return 0; @@ -93,20 +93,20 @@ public class ItemStorageDisk extends ItemBase { @Override public void addInformation(ItemStack disk, EntityPlayer player, List tooltip, boolean advanced) { - if (NBTStorage.isValid(disk)) { + if (NBTItemStorage.isValid(disk)) { int capacity = EnumStorageType.getById(disk.getItemDamage()).getCapacity(); if (capacity == -1) { - tooltip.add(I18n.format("misc.refinedstorage:storage.stored", NBTStorage.getStoredFromNBT(disk.getTagCompound()))); + tooltip.add(I18n.format("misc.refinedstorage:storage.stored", NBTItemStorage.getStoredFromNBT(disk.getTagCompound()))); } else { - tooltip.add(I18n.format("misc.refinedstorage:storage.stored_capacity", NBTStorage.getStoredFromNBT(disk.getTagCompound()), capacity)); + tooltip.add(I18n.format("misc.refinedstorage:storage.stored_capacity", NBTItemStorage.getStoredFromNBT(disk.getTagCompound()), capacity)); } } } @Override public ActionResult onItemRightClick(ItemStack disk, World world, EntityPlayer player, EnumHand hand) { - if (!world.isRemote && player.isSneaking() && NBTStorage.isValid(disk) && NBTStorage.getStoredFromNBT(disk.getTagCompound()) == 0 && disk.getMetadata() != TYPE_CREATIVE) { + if (!world.isRemote && player.isSneaking() && NBTItemStorage.isValid(disk) && NBTItemStorage.getStoredFromNBT(disk.getTagCompound()) == 0 && disk.getMetadata() != TYPE_CREATIVE) { ItemStack storagePart = new ItemStack(RefinedStorageItems.STORAGE_PART, 1, disk.getMetadata()); if (!player.inventory.addItemStackToInventory(storagePart.copy())) { @@ -123,6 +123,6 @@ public class ItemStorageDisk extends ItemBase { public void onCreated(ItemStack stack, World world, EntityPlayer player) { super.onCreated(stack, world, player); - NBTStorage.createStackWithNBT(stack); + NBTItemStorage.createStackWithNBT(stack); } } diff --git a/src/main/java/refinedstorage/network/MessageGridCraftingStart.java b/src/main/java/refinedstorage/network/MessageGridCraftingStart.java index e0d610f9e..023e6c832 100755 --- a/src/main/java/refinedstorage/network/MessageGridCraftingStart.java +++ b/src/main/java/refinedstorage/network/MessageGridCraftingStart.java @@ -4,7 +4,7 @@ import io.netty.buffer.ByteBuf; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.inventory.Container; import net.minecraftforge.fml.common.network.simpleimpl.IMessage; -import refinedstorage.api.network.IGridHandler; +import refinedstorage.api.network.grid.IItemGridHandler; import refinedstorage.container.ContainerGrid; public class MessageGridCraftingStart extends MessageHandlerPlayerToServer implements IMessage { @@ -36,7 +36,7 @@ public class MessageGridCraftingStart extends MessageHandlerPlayerToServer implements IMessage { @@ -32,7 +32,7 @@ public class MessageGridInsertHeld extends MessageHandlerPlayerToServer implements IMessage { @@ -36,7 +36,7 @@ public class MessageGridPull extends MessageHandlerPlayerToServer SIZE_COMPARATOR = (left, right) -> { + private static final Comparator SIZE_COMPARATOR = (left, right) -> { if (left.getStored() == right.getStored()) { return 0; } @@ -124,7 +125,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR return (left.getStored() > right.getStored()) ? -1 : 1; }; - private static final Comparator PRIORITY_COMPARATOR = (left, right) -> { + private static final Comparator PRIORITY_COMPARATOR = (left, right) -> { if (left.getPriority() == right.getPriority()) { return 0; } @@ -132,11 +133,11 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR return (left.getPriority() > right.getPriority()) ? -1 : 1; }; - private GridHandler gridHandler = new GridHandler(this); + private ItemGridHandler gridHandler = new ItemGridHandler(this); private WirelessGridHandler wirelessGridHandler = new WirelessGridHandler(this); private INetworkNodeGraph nodeGraph = new NetworkNodeGraph(this); - private IGroupedStorage storage = new GroupedStorage(this); + private IGroupedItemStorage storage = new GroupedItemStorage(this); private List patterns = new ArrayList<>(); @@ -303,7 +304,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR } @Override - public IGridHandler getGridHandler() { + public IItemGridHandler getGridHandler() { return gridHandler; } @@ -319,7 +320,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR energyEU.onChunkUnload(); } - public IGroupedStorage getStorage() { + public IGroupedItemStorage getStorage() { return storage; } @@ -469,11 +470,11 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR ItemStack remainder = stack; - for (IStorage storage : this.storage.getStorages()) { + for (IItemStorage storage : this.storage.getStorages()) { remainder = storage.insertItem(remainder, size, simulate); - if (storage instanceof ExternalStorage && !simulate) { - ((ExternalStorage) storage).updateCacheForcefully(); + if (storage instanceof ItemStorageExternal && !simulate) { + ((ItemStorageExternal) storage).updateCacheForcefully(); } if (remainder == null) { @@ -507,12 +508,12 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR ItemStack newStack = null; - for (IStorage storage : this.storage.getStorages()) { + for (IItemStorage storage : this.storage.getStorages()) { ItemStack took = storage.extractItem(stack, requested - received, flags); if (took != null) { - if (storage instanceof ExternalStorage) { - ((ExternalStorage) storage).updateCacheForcefully(); + if (storage instanceof ItemStorageExternal) { + ((ItemStorageExternal) storage).updateCacheForcefully(); } if (newStack == null) { diff --git a/src/main/java/refinedstorage/tile/TileDiskDrive.java b/src/main/java/refinedstorage/tile/TileDiskDrive.java index c5e6e69ba..f42b256b0 100755 --- a/src/main/java/refinedstorage/tile/TileDiskDrive.java +++ b/src/main/java/refinedstorage/tile/TileDiskDrive.java @@ -12,9 +12,9 @@ import net.minecraftforge.items.ItemHandlerHelper; import refinedstorage.RefinedStorage; import refinedstorage.RefinedStorageItems; import refinedstorage.api.network.INetworkMaster; -import refinedstorage.api.storage.IStorage; import refinedstorage.api.storage.IStorageProvider; -import refinedstorage.apiimpl.storage.NBTStorage; +import refinedstorage.api.storage.item.IItemStorage; +import refinedstorage.apiimpl.storage.NBTItemStorage; import refinedstorage.block.EnumStorageType; import refinedstorage.inventory.ItemHandlerBasic; import refinedstorage.inventory.ItemValidatorBasic; @@ -30,8 +30,8 @@ public class TileDiskDrive extends TileNode implements IStorageProvider, IStorag public static final TileDataParameter COMPARE = IComparable.createParameter(); public static final TileDataParameter MODE = IFilterable.createParameter(); - public class Storage extends NBTStorage { - public Storage(ItemStack disk) { + public class ItemStorage extends NBTItemStorage { + public ItemStorage(ItemStack disk) { super(disk.getTagCompound(), EnumStorageType.getById(disk.getItemDamage()).getCapacity(), TileDiskDrive.this); } @@ -58,7 +58,7 @@ public class TileDiskDrive extends TileNode implements IStorageProvider, IStorag private ItemHandlerBasic disks = new ItemHandlerBasic(8, this, new ItemValidatorBasic(RefinedStorageItems.STORAGE_DISK) { @Override public boolean isValid(ItemStack disk) { - return super.isValid(disk) && NBTStorage.isValid(disk); + return super.isValid(disk) && NBTItemStorage.isValid(disk); } }) { @Override @@ -74,7 +74,7 @@ public class TileDiskDrive extends TileNode implements IStorageProvider, IStorag if (disk == null) { storages[slot] = null; } else { - storages[slot] = new Storage(disk); + storages[slot] = new ItemStorage(disk); } if (network != null) { @@ -95,7 +95,7 @@ public class TileDiskDrive extends TileNode implements IStorageProvider, IStorag private ItemHandlerBasic filters = new ItemHandlerBasic(9, this); - private Storage storages[] = new Storage[8]; + private ItemStorage storages[] = new ItemStorage[8]; private int priority = 0; private int compare = 0; @@ -139,7 +139,7 @@ public class TileDiskDrive extends TileNode implements IStorageProvider, IStorag } public void onBreak() { - for (Storage storage : this.storages) { + for (ItemStorage storage : this.storages) { if (storage != null) { storage.writeToNBT(); } @@ -154,8 +154,8 @@ public class TileDiskDrive extends TileNode implements IStorageProvider, IStorag } @Override - public void addStorages(List storages) { - for (IStorage storage : this.storages) { + public void addItemStorages(List storages) { + for (IItemStorage storage : this.storages) { if (storage != null) { storages.add(storage); } @@ -256,7 +256,7 @@ public class TileDiskDrive extends TileNode implements IStorageProvider, IStorag return 0; } - stored += NBTStorage.getStoredFromNBT(disk.getTagCompound()); + stored += NBTItemStorage.getStoredFromNBT(disk.getTagCompound()); storedMax += EnumStorageType.getById(disk.getItemDamage()).getCapacity(); } } @@ -322,7 +322,7 @@ public class TileDiskDrive extends TileNode implements IStorageProvider, IStorag ItemStack stack = disks.getStackInSlot(i); if (stack != null) { - stored += NBTStorage.getStoredFromNBT(stack.getTagCompound()); + stored += NBTItemStorage.getStoredFromNBT(stack.getTagCompound()); } } diff --git a/src/main/java/refinedstorage/tile/TileSolderer.java b/src/main/java/refinedstorage/tile/TileSolderer.java index 74e4c94ff..c4049faa3 100755 --- a/src/main/java/refinedstorage/tile/TileSolderer.java +++ b/src/main/java/refinedstorage/tile/TileSolderer.java @@ -11,7 +11,7 @@ import refinedstorage.RefinedStorage; import refinedstorage.api.RefinedStorageAPI; import refinedstorage.api.network.INetworkMaster; import refinedstorage.api.solderer.ISoldererRecipe; -import refinedstorage.api.storage.CompareUtils; +import refinedstorage.api.storage.item.CompareUtils; import refinedstorage.inventory.ItemHandlerBasic; import refinedstorage.inventory.ItemHandlerSolderer; import refinedstorage.inventory.ItemHandlerUpgrade; diff --git a/src/main/java/refinedstorage/tile/TileStorage.java b/src/main/java/refinedstorage/tile/TileStorage.java index a9099c39f..e02de166d 100755 --- a/src/main/java/refinedstorage/tile/TileStorage.java +++ b/src/main/java/refinedstorage/tile/TileStorage.java @@ -8,9 +8,9 @@ import net.minecraftforge.items.ItemHandlerHelper; import refinedstorage.RefinedStorage; import refinedstorage.RefinedStorageBlocks; import refinedstorage.api.network.INetworkMaster; -import refinedstorage.api.storage.IStorage; import refinedstorage.api.storage.IStorageProvider; -import refinedstorage.apiimpl.storage.NBTStorage; +import refinedstorage.api.storage.item.IItemStorage; +import refinedstorage.apiimpl.storage.NBTItemStorage; import refinedstorage.block.BlockStorage; import refinedstorage.block.EnumStorageType; import refinedstorage.inventory.ItemHandlerBasic; @@ -29,12 +29,12 @@ public class TileStorage extends TileNode implements IStorageProvider, IStorageG public static final TileDataParameter STORED = new TileDataParameter<>(DataSerializers.VARINT, 0, new ITileDataProducer() { @Override public Integer getValue(TileStorage tile) { - return NBTStorage.getStoredFromNBT(tile.storageTag); + return NBTItemStorage.getStoredFromNBT(tile.storageTag); } }); - class Storage extends NBTStorage { - public Storage() { + class ItemStorage extends NBTItemStorage { + public ItemStorage() { super(TileStorage.this.getStorageTag(), TileStorage.this.getCapacity(), TileStorage.this); } @@ -61,9 +61,9 @@ public class TileStorage extends TileNode implements IStorageProvider, IStorageG private ItemHandlerBasic filters = new ItemHandlerBasic(9, this); - private NBTTagCompound storageTag = NBTStorage.createNBT(); + private NBTTagCompound storageTag = NBTItemStorage.createNBT(); - private Storage storage; + private ItemStorage storage; private EnumStorageType type; @@ -92,7 +92,7 @@ public class TileStorage extends TileNode implements IStorageProvider, IStorageG super.update(); if (storage == null && storageTag != null) { - storage = new Storage(); + storage = new ItemStorage(); if (network != null) { network.getStorage().rebuild(); @@ -114,7 +114,7 @@ public class TileStorage extends TileNode implements IStorageProvider, IStorageG } @Override - public void addStorages(List storages) { + public void addItemStorages(List storages) { if (storage != null) { storages.add(storage); } @@ -232,7 +232,7 @@ public class TileStorage extends TileNode implements IStorageProvider, IStorageG this.storageTag = storageTag; } - public NBTStorage getStorage() { + public NBTItemStorage getStorage() { return storage; } diff --git a/src/main/java/refinedstorage/tile/config/IFilterable.java b/src/main/java/refinedstorage/tile/config/IFilterable.java index 6b2b7beb2..ebfcb883b 100755 --- a/src/main/java/refinedstorage/tile/config/IFilterable.java +++ b/src/main/java/refinedstorage/tile/config/IFilterable.java @@ -4,7 +4,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.network.datasync.DataSerializers; import net.minecraft.tileentity.TileEntity; import net.minecraftforge.items.IItemHandler; -import refinedstorage.api.storage.CompareUtils; +import refinedstorage.api.storage.item.CompareUtils; import refinedstorage.tile.data.ITileDataConsumer; import refinedstorage.tile.data.ITileDataProducer; import refinedstorage.tile.data.TileDataParameter; diff --git a/src/main/java/refinedstorage/tile/externalstorage/DeepStorageUnitStorage.java b/src/main/java/refinedstorage/tile/externalstorage/ItemStorageDSU.java similarity index 94% rename from src/main/java/refinedstorage/tile/externalstorage/DeepStorageUnitStorage.java rename to src/main/java/refinedstorage/tile/externalstorage/ItemStorageDSU.java index 77672cb07..c77a689e5 100755 --- a/src/main/java/refinedstorage/tile/externalstorage/DeepStorageUnitStorage.java +++ b/src/main/java/refinedstorage/tile/externalstorage/ItemStorageDSU.java @@ -3,18 +3,18 @@ package refinedstorage.tile.externalstorage; import net.minecraft.item.ItemStack; import net.minecraftforge.items.ItemHandlerHelper; import powercrystals.minefactoryreloaded.api.IDeepStorageUnit; -import refinedstorage.api.storage.CompareUtils; +import refinedstorage.api.storage.item.CompareUtils; import refinedstorage.tile.config.IFilterable; import javax.annotation.Nonnull; import java.util.Collections; import java.util.List; -public class DeepStorageUnitStorage extends ExternalStorage { +public class ItemStorageDSU extends ItemStorageExternal { private TileExternalStorage externalStorage; private IDeepStorageUnit unit; - public DeepStorageUnitStorage(TileExternalStorage externalStorage, IDeepStorageUnit unit) { + public ItemStorageDSU(TileExternalStorage externalStorage, IDeepStorageUnit unit) { this.externalStorage = externalStorage; this.unit = unit; } diff --git a/src/main/java/refinedstorage/tile/externalstorage/DrawerStorage.java b/src/main/java/refinedstorage/tile/externalstorage/ItemStorageDrawer.java similarity index 95% rename from src/main/java/refinedstorage/tile/externalstorage/DrawerStorage.java rename to src/main/java/refinedstorage/tile/externalstorage/ItemStorageDrawer.java index 9a4127daa..71871665f 100755 --- a/src/main/java/refinedstorage/tile/externalstorage/DrawerStorage.java +++ b/src/main/java/refinedstorage/tile/externalstorage/ItemStorageDrawer.java @@ -4,17 +4,17 @@ import com.jaquadro.minecraft.storagedrawers.api.storage.IDrawer; import com.jaquadro.minecraft.storagedrawers.api.storage.attribute.IVoidable; import net.minecraft.item.ItemStack; import net.minecraftforge.items.ItemHandlerHelper; -import refinedstorage.api.storage.CompareUtils; +import refinedstorage.api.storage.item.CompareUtils; import refinedstorage.tile.config.IFilterable; import java.util.Collections; import java.util.List; -public class DrawerStorage extends ExternalStorage { +public class ItemStorageDrawer extends ItemStorageExternal { private TileExternalStorage externalStorage; private IDrawer drawer; - public DrawerStorage(TileExternalStorage externalStorage, IDrawer drawer) { + public ItemStorageDrawer(TileExternalStorage externalStorage, IDrawer drawer) { this.externalStorage = externalStorage; this.drawer = drawer; } diff --git a/src/main/java/refinedstorage/tile/externalstorage/ExternalStorage.java b/src/main/java/refinedstorage/tile/externalstorage/ItemStorageExternal.java similarity index 81% rename from src/main/java/refinedstorage/tile/externalstorage/ExternalStorage.java rename to src/main/java/refinedstorage/tile/externalstorage/ItemStorageExternal.java index 6ec709ebf..71fe7d826 100755 --- a/src/main/java/refinedstorage/tile/externalstorage/ExternalStorage.java +++ b/src/main/java/refinedstorage/tile/externalstorage/ItemStorageExternal.java @@ -1,12 +1,12 @@ package refinedstorage.tile.externalstorage; import net.minecraft.item.ItemStack; -import refinedstorage.api.storage.CompareUtils; -import refinedstorage.api.storage.IStorage; +import refinedstorage.api.storage.item.CompareUtils; +import refinedstorage.api.storage.item.IItemStorage; import java.util.List; -public abstract class ExternalStorage implements IStorage { +public abstract class ItemStorageExternal implements IItemStorage { private List cache; public abstract int getCapacity(); diff --git a/src/main/java/refinedstorage/tile/externalstorage/ItemHandlerStorage.java b/src/main/java/refinedstorage/tile/externalstorage/ItemStorageItemHandler.java similarity index 91% rename from src/main/java/refinedstorage/tile/externalstorage/ItemHandlerStorage.java rename to src/main/java/refinedstorage/tile/externalstorage/ItemStorageItemHandler.java index 09530a47a..3ea54ec06 100755 --- a/src/main/java/refinedstorage/tile/externalstorage/ItemHandlerStorage.java +++ b/src/main/java/refinedstorage/tile/externalstorage/ItemStorageItemHandler.java @@ -3,17 +3,17 @@ package refinedstorage.tile.externalstorage; import net.minecraft.item.ItemStack; import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.ItemHandlerHelper; -import refinedstorage.api.storage.CompareUtils; +import refinedstorage.api.storage.item.CompareUtils; import refinedstorage.tile.config.IFilterable; import java.util.ArrayList; import java.util.List; -public class ItemHandlerStorage extends ExternalStorage { +public class ItemStorageItemHandler extends ItemStorageExternal { private TileExternalStorage externalStorage; private IItemHandler handler; - public ItemHandlerStorage(TileExternalStorage externalStorage, IItemHandler handler) { + public ItemStorageItemHandler(TileExternalStorage externalStorage, IItemHandler handler) { this.externalStorage = externalStorage; this.handler = handler; } diff --git a/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java b/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java index abc96ce1f..57d14b7d2 100755 --- a/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java +++ b/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java @@ -10,8 +10,8 @@ import net.minecraftforge.items.IItemHandler; import powercrystals.minefactoryreloaded.api.IDeepStorageUnit; import refinedstorage.RefinedStorage; import refinedstorage.api.network.INetworkMaster; -import refinedstorage.api.storage.IStorage; import refinedstorage.api.storage.IStorageProvider; +import refinedstorage.api.storage.item.IItemStorage; import refinedstorage.inventory.ItemHandlerBasic; import refinedstorage.tile.IStorageGui; import refinedstorage.tile.TileMultipartNode; @@ -34,7 +34,7 @@ public class TileExternalStorage extends TileMultipartNode implements IStoragePr public Integer getValue(TileExternalStorage tile) { int stored = 0; - for (ExternalStorage storage : tile.storages) { + for (ItemStorageExternal storage : tile.storages) { stored += storage.getStored(); } @@ -47,7 +47,7 @@ public class TileExternalStorage extends TileMultipartNode implements IStoragePr public Integer getValue(TileExternalStorage tile) { int capacity = 0; - for (ExternalStorage storage : tile.storages) { + for (ItemStorageExternal storage : tile.storages) { capacity += storage.getCapacity(); } @@ -65,7 +65,7 @@ public class TileExternalStorage extends TileMultipartNode implements IStoragePr private int compare = 0; private int mode = IFilterable.WHITELIST; - private List storages = new ArrayList<>(); + private List storages = new ArrayList<>(); private int lastDrawerCount; public TileExternalStorage() { @@ -105,7 +105,7 @@ public class TileExternalStorage extends TileMultipartNode implements IStoragePr if (ticks % (20 * 4) == 0) { boolean shouldRebuild = false; - for (ExternalStorage storage : storages) { + for (ItemStorageExternal storage : storages) { if (storage.updateCache()) { shouldRebuild = true; } @@ -204,18 +204,18 @@ public class TileExternalStorage extends TileMultipartNode implements IStoragePr for (int i = 0; i < group.getDrawerCount(); ++i) { if (group.isDrawerEnabled(i)) { - storages.add(new DrawerStorage(this, group.getDrawer(i))); + storages.add(new ItemStorageDrawer(this, group.getDrawer(i))); } } } else if (facing instanceof IDrawer) { - storages.add(new DrawerStorage(this, (IDrawer) facing)); + storages.add(new ItemStorageDrawer(this, (IDrawer) facing)); } else if (facing instanceof IDeepStorageUnit) { - storages.add(new DeepStorageUnitStorage(this, (IDeepStorageUnit) facing)); + storages.add(new ItemStorageDSU(this, (IDeepStorageUnit) facing)); } else { IItemHandler handler = getItemHandler(facing, getDirection().getOpposite()); if (handler != null) { - storages.add(new ItemHandlerStorage(this, handler)); + storages.add(new ItemStorageItemHandler(this, handler)); } } @@ -223,7 +223,7 @@ public class TileExternalStorage extends TileMultipartNode implements IStoragePr } @Override - public void addStorages(List storages) { + public void addItemStorages(List storages) { storages.addAll(this.storages); } diff --git a/src/main/java/refinedstorage/tile/grid/IGrid.java b/src/main/java/refinedstorage/tile/grid/IGrid.java index a730b8f34..a2d57de94 100755 --- a/src/main/java/refinedstorage/tile/grid/IGrid.java +++ b/src/main/java/refinedstorage/tile/grid/IGrid.java @@ -1,7 +1,7 @@ package refinedstorage.tile.grid; import net.minecraft.util.math.BlockPos; -import refinedstorage.api.network.IGridHandler; +import refinedstorage.api.network.grid.IItemGridHandler; import refinedstorage.block.EnumGridType; import refinedstorage.gui.grid.GridFilteredItem; import refinedstorage.inventory.ItemHandlerBasic; @@ -14,7 +14,7 @@ public interface IGrid { BlockPos getNetworkPosition(); - IGridHandler getGridHandler(); + IItemGridHandler getGridHandler(); int getViewType(); diff --git a/src/main/java/refinedstorage/tile/grid/TileGrid.java b/src/main/java/refinedstorage/tile/grid/TileGrid.java index 4d4534dd6..133d10da9 100755 --- a/src/main/java/refinedstorage/tile/grid/TileGrid.java +++ b/src/main/java/refinedstorage/tile/grid/TileGrid.java @@ -15,9 +15,9 @@ import net.minecraftforge.items.wrapper.InvWrapper; import refinedstorage.RefinedStorage; import refinedstorage.RefinedStorageBlocks; import refinedstorage.RefinedStorageItems; -import refinedstorage.api.network.IGridHandler; import refinedstorage.api.network.NetworkUtils; -import refinedstorage.api.storage.CompareUtils; +import refinedstorage.api.network.grid.IItemGridHandler; +import refinedstorage.api.storage.item.CompareUtils; import refinedstorage.block.BlockGrid; import refinedstorage.block.EnumGridType; import refinedstorage.container.ContainerGrid; @@ -195,7 +195,7 @@ public class TileGrid extends TileNode implements IGrid { } @Override - public IGridHandler getGridHandler() { + public IItemGridHandler getGridHandler() { return isConnected() ? network.getGridHandler() : null; } diff --git a/src/main/java/refinedstorage/tile/grid/WirelessGrid.java b/src/main/java/refinedstorage/tile/grid/WirelessGrid.java index 4981e7761..7d4ee08d1 100755 --- a/src/main/java/refinedstorage/tile/grid/WirelessGrid.java +++ b/src/main/java/refinedstorage/tile/grid/WirelessGrid.java @@ -7,7 +7,7 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import refinedstorage.RefinedStorage; -import refinedstorage.api.network.IGridHandler; +import refinedstorage.api.network.grid.IItemGridHandler; import refinedstorage.block.EnumGridType; import refinedstorage.gui.grid.GridFilteredItem; import refinedstorage.gui.grid.GuiGrid; @@ -84,7 +84,7 @@ public class WirelessGrid implements IGrid { } @Override - public IGridHandler getGridHandler() { + public IItemGridHandler getGridHandler() { TileController controller = getController(); return controller != null ? controller.getGridHandler() : null; From 86c15b2e4f8974b345cfd91da6c7f7706a130893 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Wed, 10 Aug 2016 23:36:52 +0200 Subject: [PATCH 154/214] More renames --- .../api/network/INetworkMaster.java | 10 ++--- .../apiimpl/network/ItemGridHandler.java | 4 +- .../apiimpl/network/WirelessGridHandler.java | 2 +- .../{ => item}/GroupedItemStorage.java | 10 ++--- .../ItemStorageNBT.java} | 14 +++---- .../refinedstorage/item/ItemBlockStorage.java | 10 ++--- .../refinedstorage/item/ItemStorageDisk.java | 20 +++++----- .../network/MessageCraftingMonitorCancel.java | 2 +- .../network/MessageGridUpdate.java | 4 +- .../refinedstorage/proxy/CommonProxy.java | 6 +-- .../refinedstorage/tile/TileController.java | 40 +++++++++---------- .../refinedstorage/tile/TileDetector.java | 2 +- .../refinedstorage/tile/TileDiskDrive.java | 14 +++---- .../java/refinedstorage/tile/TileStorage.java | 14 +++---- .../externalstorage/TileExternalStorage.java | 6 +-- .../refinedstorage/tile/grid/TileGrid.java | 4 +- .../tile/grid/WirelessGrid.java | 2 +- 17 files changed, 82 insertions(+), 82 deletions(-) rename src/main/java/refinedstorage/apiimpl/storage/{ => item}/GroupedItemStorage.java (91%) rename src/main/java/refinedstorage/apiimpl/storage/{NBTItemStorage.java => item/ItemStorageNBT.java} (94%) diff --git a/src/main/java/refinedstorage/api/network/INetworkMaster.java b/src/main/java/refinedstorage/api/network/INetworkMaster.java index ca30d8dd0..638337f03 100755 --- a/src/main/java/refinedstorage/api/network/INetworkMaster.java +++ b/src/main/java/refinedstorage/api/network/INetworkMaster.java @@ -46,7 +46,7 @@ public interface INetworkMaster { /** * @return The {@link IItemGridHandler} for this network */ - IItemGridHandler getGridHandler(); + IItemGridHandler getItemGridHandler(); /** * @return The {@link IWirelessGridHandler} for this network @@ -56,7 +56,7 @@ public interface INetworkMaster { /** * @return The {@link IGroupedItemStorage} of this network */ - IGroupedItemStorage getStorage(); + IGroupedItemStorage getItemStorage(); /** * @return The crafting tasks in this network, do NOT modify this list @@ -122,12 +122,12 @@ public interface INetworkMaster { /** * Sends a grid packet with all the items to all clients that are watching a grid. */ - void sendStorageToClient(); + void sendItemStorageToClient(); /** * Sends a grid packet with all the items to a specific player. */ - void sendStorageToClient(EntityPlayerMP player); + void sendItemStorageToClient(EntityPlayerMP player); /** * Sends a storage change to all clients that are watching a grid. @@ -135,7 +135,7 @@ public interface INetworkMaster { * @param stack The stack * @param delta The delta */ - void sendStorageDeltaToClient(ItemStack stack, int delta); + void sendItemStorageDeltaToClient(ItemStack stack, int delta); /** * Inserts an item to this network. diff --git a/src/main/java/refinedstorage/apiimpl/network/ItemGridHandler.java b/src/main/java/refinedstorage/apiimpl/network/ItemGridHandler.java index 96f3d8ff6..8973ab683 100755 --- a/src/main/java/refinedstorage/apiimpl/network/ItemGridHandler.java +++ b/src/main/java/refinedstorage/apiimpl/network/ItemGridHandler.java @@ -22,7 +22,7 @@ public class ItemGridHandler implements IItemGridHandler { @Override public void onExtract(int hash, int flags, EntityPlayerMP player) { - ItemStack item = network.getStorage().get(hash); + ItemStack item = network.getItemStorage().get(hash); if (item == null) { return; @@ -118,7 +118,7 @@ public class ItemGridHandler implements IItemGridHandler { return; } - ItemStack stack = network.getStorage().get(hash); + ItemStack stack = network.getItemStorage().get(hash); if (stack == null) { return; diff --git a/src/main/java/refinedstorage/apiimpl/network/WirelessGridHandler.java b/src/main/java/refinedstorage/apiimpl/network/WirelessGridHandler.java index aabf4d052..b203abe1d 100755 --- a/src/main/java/refinedstorage/apiimpl/network/WirelessGridHandler.java +++ b/src/main/java/refinedstorage/apiimpl/network/WirelessGridHandler.java @@ -59,7 +59,7 @@ public class WirelessGridHandler implements IWirelessGridHandler { player.openGui(RefinedStorage.INSTANCE, RefinedStorageGui.WIRELESS_GRID, player.worldObj, hand.ordinal(), 0, 0); - network.sendStorageToClient((EntityPlayerMP) player); + network.sendItemStorageToClient((EntityPlayerMP) player); drainEnergy(player, USAGE_OPEN); diff --git a/src/main/java/refinedstorage/apiimpl/storage/GroupedItemStorage.java b/src/main/java/refinedstorage/apiimpl/storage/item/GroupedItemStorage.java similarity index 91% rename from src/main/java/refinedstorage/apiimpl/storage/GroupedItemStorage.java rename to src/main/java/refinedstorage/apiimpl/storage/item/GroupedItemStorage.java index 50c32c135..090ca1557 100755 --- a/src/main/java/refinedstorage/apiimpl/storage/GroupedItemStorage.java +++ b/src/main/java/refinedstorage/apiimpl/storage/item/GroupedItemStorage.java @@ -1,4 +1,4 @@ -package refinedstorage.apiimpl.storage; +package refinedstorage.apiimpl.storage.item; import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.Multimap; @@ -51,7 +51,7 @@ public class GroupedItemStorage implements IGroupedItemStorage { } } - network.sendStorageToClient(); + network.sendItemStorageToClient(); } @Override @@ -61,7 +61,7 @@ public class GroupedItemStorage implements IGroupedItemStorage { otherStack.stackSize += stack.stackSize; if (!rebuilding) { - network.sendStorageDeltaToClient(stack, stack.stackSize); + network.sendItemStorageDeltaToClient(stack, stack.stackSize); } return; @@ -71,7 +71,7 @@ public class GroupedItemStorage implements IGroupedItemStorage { stacks.put(stack.getItem(), stack.copy()); if (!rebuilding) { - network.sendStorageDeltaToClient(stack, stack.stackSize); + network.sendItemStorageDeltaToClient(stack, stack.stackSize); } } @@ -87,7 +87,7 @@ public class GroupedItemStorage implements IGroupedItemStorage { } } - network.sendStorageDeltaToClient(stack, -stack.stackSize); + network.sendItemStorageDeltaToClient(stack, -stack.stackSize); return; } diff --git a/src/main/java/refinedstorage/apiimpl/storage/NBTItemStorage.java b/src/main/java/refinedstorage/apiimpl/storage/item/ItemStorageNBT.java similarity index 94% rename from src/main/java/refinedstorage/apiimpl/storage/NBTItemStorage.java rename to src/main/java/refinedstorage/apiimpl/storage/item/ItemStorageNBT.java index df9508ed6..d8f807feb 100755 --- a/src/main/java/refinedstorage/apiimpl/storage/NBTItemStorage.java +++ b/src/main/java/refinedstorage/apiimpl/storage/item/ItemStorageNBT.java @@ -1,4 +1,4 @@ -package refinedstorage.apiimpl.storage; +package refinedstorage.apiimpl.storage.item; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; @@ -16,9 +16,9 @@ import java.util.List; /** * A implementation of {@link IItemStorage} that stores storage items in NBT. */ -public abstract class NBTItemStorage implements IItemStorage { +public abstract class ItemStorageNBT implements IItemStorage { /** - * The current save protocol that is used. It's set to every {@link NBTItemStorage} to allow for + * The current save protocol that is used. It's set to every {@link ItemStorageNBT} to allow for * safe backwards compatibility breaks. */ private static final int PROTOCOL = 1; @@ -41,11 +41,11 @@ public abstract class NBTItemStorage implements IItemStorage { private List stacks = new ArrayList<>(); /** - * @param tag The NBT tag we are reading from and writing the amount stored to, has to be initialized with {@link NBTItemStorage#createNBT()} if it doesn't exist yet + * @param tag The NBT tag we are reading from and writing the amount stored to, has to be initialized with {@link ItemStorageNBT#createNBT()} if it doesn't exist yet * @param capacity The capacity of this storage, -1 for infinite capacity * @param tile A {@link TileEntity} that the NBT storage is in, will be marked dirty when the storage changes */ - public NBTItemStorage(NBTTagCompound tag, int capacity, @Nullable TileEntity tile) { + public ItemStorageNBT(NBTTagCompound tag, int capacity, @Nullable TileEntity tile) { this.tag = tag; this.capacity = capacity; this.tile = tile; @@ -243,8 +243,8 @@ public abstract class NBTItemStorage implements IItemStorage { } /** - * @param stack The {@link ItemStack} to populate with the NBT tags from {@link NBTItemStorage#createNBT()} - * @return The provided {@link ItemStack} with NBT tags from {@link NBTItemStorage#createNBT()} + * @param stack The {@link ItemStack} to populate with the NBT tags from {@link ItemStorageNBT#createNBT()} + * @return The provided {@link ItemStack} with NBT tags from {@link ItemStorageNBT#createNBT()} */ public static ItemStack createStackWithNBT(ItemStack stack) { stack.setTagCompound(createNBT()); diff --git a/src/main/java/refinedstorage/item/ItemBlockStorage.java b/src/main/java/refinedstorage/item/ItemBlockStorage.java index dc0b6b5c1..79e46babe 100755 --- a/src/main/java/refinedstorage/item/ItemBlockStorage.java +++ b/src/main/java/refinedstorage/item/ItemBlockStorage.java @@ -12,7 +12,7 @@ import net.minecraft.util.EnumHand; import net.minecraft.world.World; import refinedstorage.RefinedStorageBlocks; import refinedstorage.RefinedStorageItems; -import refinedstorage.apiimpl.storage.NBTItemStorage; +import refinedstorage.apiimpl.storage.item.ItemStorageNBT; import refinedstorage.block.EnumStorageType; import refinedstorage.tile.TileStorage; @@ -31,9 +31,9 @@ public class ItemBlockStorage extends ItemBlockBase { NBTTagCompound tag = stack.getTagCompound().getCompoundTag(TileStorage.NBT_STORAGE); if (type == EnumStorageType.TYPE_CREATIVE) { - tooltip.add(I18n.format("misc.refinedstorage:storage.stored", NBTItemStorage.getStoredFromNBT(tag))); + tooltip.add(I18n.format("misc.refinedstorage:storage.stored", ItemStorageNBT.getStoredFromNBT(tag))); } else { - tooltip.add(I18n.format("misc.refinedstorage:storage.stored_capacity", NBTItemStorage.getStoredFromNBT(tag), type.getCapacity())); + tooltip.add(I18n.format("misc.refinedstorage:storage.stored_capacity", ItemStorageNBT.getStoredFromNBT(tag), type.getCapacity())); } } } @@ -42,7 +42,7 @@ public class ItemBlockStorage extends ItemBlockBase { public ActionResult onItemRightClick(ItemStack stack, World world, EntityPlayer player, EnumHand hand) { EnumStorageType type = EnumStorageType.getById(stack.getMetadata()); - if (type != null && isValid(stack) && NBTItemStorage.getStoredFromNBT(stack.getTagCompound().getCompoundTag(TileStorage.NBT_STORAGE)) == 0 && stack.getMetadata() != ItemStorageDisk.TYPE_CREATIVE && !world.isRemote && player.isSneaking()) { + if (type != null && isValid(stack) && ItemStorageNBT.getStoredFromNBT(stack.getTagCompound().getCompoundTag(TileStorage.NBT_STORAGE)) == 0 && stack.getMetadata() != ItemStorageDisk.TYPE_CREATIVE && !world.isRemote && player.isSneaking()) { ItemStack storagePart = new ItemStack(RefinedStorageItems.STORAGE_PART, 1, stack.getMetadata()); if (!player.inventory.addItemStackToInventory(storagePart.copy())) { @@ -83,7 +83,7 @@ public class ItemBlockStorage extends ItemBlockBase { public static ItemStack initNBT(ItemStack stack) { NBTTagCompound tag = new NBTTagCompound(); - tag.setTag(TileStorage.NBT_STORAGE, NBTItemStorage.createNBT()); + tag.setTag(TileStorage.NBT_STORAGE, ItemStorageNBT.createNBT()); stack.setTagCompound(tag); return stack; } diff --git a/src/main/java/refinedstorage/item/ItemStorageDisk.java b/src/main/java/refinedstorage/item/ItemStorageDisk.java index 021f82122..644d4bdd8 100755 --- a/src/main/java/refinedstorage/item/ItemStorageDisk.java +++ b/src/main/java/refinedstorage/item/ItemStorageDisk.java @@ -13,7 +13,7 @@ import net.minecraft.util.EnumActionResult; import net.minecraft.util.EnumHand; import net.minecraft.world.World; import refinedstorage.RefinedStorageItems; -import refinedstorage.apiimpl.storage.NBTItemStorage; +import refinedstorage.apiimpl.storage.item.ItemStorageNBT; import refinedstorage.block.EnumStorageType; import java.util.ArrayList; @@ -41,7 +41,7 @@ public class ItemStorageDisk extends ItemBase { @Override public void getSubItems(Item item, CreativeTabs tab, List list) { for (int i = 0; i < 5; ++i) { - list.add(NBTItemStorage.createStackWithNBT(new ItemStack(item, 1, i))); + list.add(ItemStorageNBT.createStackWithNBT(new ItemStack(item, 1, i))); } } @@ -53,16 +53,16 @@ public class ItemStorageDisk extends ItemBase { if (stack.getItemDamage() == TYPE_DEBUG) { applyDebugDiskData(stack); } else { - NBTItemStorage.createStackWithNBT(stack); + ItemStorageNBT.createStackWithNBT(stack); } } } private void applyDebugDiskData(ItemStack stack) { if (debugDiskTag == null) { - debugDiskTag = NBTItemStorage.createNBT(); + debugDiskTag = ItemStorageNBT.createNBT(); - NBTItemStorage storage = new NBTItemStorage(debugDiskTag, -1, null) { + ItemStorageNBT storage = new ItemStorageNBT(debugDiskTag, -1, null) { @Override public int getPriority() { return 0; @@ -93,20 +93,20 @@ public class ItemStorageDisk extends ItemBase { @Override public void addInformation(ItemStack disk, EntityPlayer player, List tooltip, boolean advanced) { - if (NBTItemStorage.isValid(disk)) { + if (ItemStorageNBT.isValid(disk)) { int capacity = EnumStorageType.getById(disk.getItemDamage()).getCapacity(); if (capacity == -1) { - tooltip.add(I18n.format("misc.refinedstorage:storage.stored", NBTItemStorage.getStoredFromNBT(disk.getTagCompound()))); + tooltip.add(I18n.format("misc.refinedstorage:storage.stored", ItemStorageNBT.getStoredFromNBT(disk.getTagCompound()))); } else { - tooltip.add(I18n.format("misc.refinedstorage:storage.stored_capacity", NBTItemStorage.getStoredFromNBT(disk.getTagCompound()), capacity)); + tooltip.add(I18n.format("misc.refinedstorage:storage.stored_capacity", ItemStorageNBT.getStoredFromNBT(disk.getTagCompound()), capacity)); } } } @Override public ActionResult onItemRightClick(ItemStack disk, World world, EntityPlayer player, EnumHand hand) { - if (!world.isRemote && player.isSneaking() && NBTItemStorage.isValid(disk) && NBTItemStorage.getStoredFromNBT(disk.getTagCompound()) == 0 && disk.getMetadata() != TYPE_CREATIVE) { + if (!world.isRemote && player.isSneaking() && ItemStorageNBT.isValid(disk) && ItemStorageNBT.getStoredFromNBT(disk.getTagCompound()) == 0 && disk.getMetadata() != TYPE_CREATIVE) { ItemStack storagePart = new ItemStack(RefinedStorageItems.STORAGE_PART, 1, disk.getMetadata()); if (!player.inventory.addItemStackToInventory(storagePart.copy())) { @@ -123,6 +123,6 @@ public class ItemStorageDisk extends ItemBase { public void onCreated(ItemStack stack, World world, EntityPlayer player) { super.onCreated(stack, world, player); - NBTItemStorage.createStackWithNBT(stack); + ItemStorageNBT.createStackWithNBT(stack); } } diff --git a/src/main/java/refinedstorage/network/MessageCraftingMonitorCancel.java b/src/main/java/refinedstorage/network/MessageCraftingMonitorCancel.java index eb93f2ce0..48852412b 100755 --- a/src/main/java/refinedstorage/network/MessageCraftingMonitorCancel.java +++ b/src/main/java/refinedstorage/network/MessageCraftingMonitorCancel.java @@ -47,7 +47,7 @@ public class MessageCraftingMonitorCancel extends MessageHandlerPlayerToServer right.getPriority()) ? -1 : 1; }; - private ItemGridHandler gridHandler = new ItemGridHandler(this); + private ItemGridHandler itemGridHandler = new ItemGridHandler(this); private WirelessGridHandler wirelessGridHandler = new WirelessGridHandler(this); private INetworkNodeGraph nodeGraph = new NetworkNodeGraph(this); - private IGroupedItemStorage storage = new GroupedItemStorage(this); + private IGroupedItemStorage itemStorage = new GroupedItemStorage(this); private List patterns = new ArrayList<>(); @@ -203,8 +203,8 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR energyEU.update(); if (canRun()) { - Collections.sort(storage.getStorages(), SIZE_COMPARATOR); - Collections.sort(storage.getStorages(), PRIORITY_COMPARATOR); + Collections.sort(itemStorage.getStorages(), SIZE_COMPARATOR); + Collections.sort(itemStorage.getStorages(), PRIORITY_COMPARATOR); boolean craftingTasksChanged = !craftingTasksToAdd.isEmpty() || !craftingTasksToAddAsLast.isEmpty() || !craftingTasksToCancel.isEmpty(); @@ -304,8 +304,8 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR } @Override - public IItemGridHandler getGridHandler() { - return gridHandler; + public IItemGridHandler getItemGridHandler() { + return itemGridHandler; } @Override @@ -320,8 +320,8 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR energyEU.onChunkUnload(); } - public IGroupedItemStorage getStorage() { - return storage; + public IGroupedItemStorage getItemStorage() { + return itemStorage; } @Override @@ -396,7 +396,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR int score = 0; for (ItemStack input : patterns.get(i).getInputs()) { - ItemStack stored = storage.get(input, CompareUtils.COMPARE_DAMAGE | CompareUtils.COMPARE_NBT); + ItemStack stored = itemStorage.get(input, CompareUtils.COMPARE_DAMAGE | CompareUtils.COMPARE_NBT); score += stored != null ? stored.stackSize : 0; } @@ -434,23 +434,23 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR } } - storage.rebuild(); + itemStorage.rebuild(); } @Override - public void sendStorageToClient() { + public void sendItemStorageToClient() { worldObj.getMinecraftServer().getPlayerList().getPlayerList().stream() .filter(this::isWatchingGrid) - .forEach(this::sendStorageToClient); + .forEach(this::sendItemStorageToClient); } @Override - public void sendStorageToClient(EntityPlayerMP player) { + public void sendItemStorageToClient(EntityPlayerMP player) { RefinedStorage.INSTANCE.network.sendTo(new MessageGridUpdate(this), player); } @Override - public void sendStorageDeltaToClient(ItemStack stack, int delta) { + public void sendItemStorageDeltaToClient(ItemStack stack, int delta) { worldObj.getMinecraftServer().getPlayerList().getPlayerList().stream() .filter(this::isWatchingGrid) .forEach(player -> RefinedStorage.INSTANCE.network.sendTo(new MessageGridDelta(this, stack, delta), player)); @@ -462,7 +462,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR @Override public ItemStack insertItem(ItemStack stack, int size, boolean simulate) { - if (stack == null || stack.getItem() == null || storage.getStorages().isEmpty()) { + if (stack == null || stack.getItem() == null || itemStorage.getStorages().isEmpty()) { return ItemHandlerHelper.copyStackWithSize(stack, size); } @@ -470,7 +470,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR ItemStack remainder = stack; - for (IItemStorage storage : this.storage.getStorages()) { + for (IItemStorage storage : this.itemStorage.getStorages()) { remainder = storage.insertItem(remainder, size, simulate); if (storage instanceof ItemStorageExternal && !simulate) { @@ -495,7 +495,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR } } - storage.add(ItemHandlerHelper.copyStackWithSize(stack, inserted), false); + itemStorage.add(ItemHandlerHelper.copyStackWithSize(stack, inserted), false); } return remainder; @@ -508,7 +508,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR ItemStack newStack = null; - for (IItemStorage storage : this.storage.getStorages()) { + for (IItemStorage storage : this.itemStorage.getStorages()) { ItemStack took = storage.extractItem(stack, requested - received, flags); if (took != null) { @@ -531,7 +531,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR } if (newStack != null) { - storage.remove(newStack); + itemStorage.remove(newStack); } return newStack; diff --git a/src/main/java/refinedstorage/tile/TileDetector.java b/src/main/java/refinedstorage/tile/TileDetector.java index 6e8b6e7bf..b60234436 100755 --- a/src/main/java/refinedstorage/tile/TileDetector.java +++ b/src/main/java/refinedstorage/tile/TileDetector.java @@ -97,7 +97,7 @@ public class TileDetector extends TileNode implements IComparable { ItemStack slot = filter.getStackInSlot(0); if (slot != null) { - ItemStack stack = network.getStorage().get(slot, compare); + ItemStack stack = network.getItemStorage().get(slot, compare); if (stack != null) { switch (mode) { diff --git a/src/main/java/refinedstorage/tile/TileDiskDrive.java b/src/main/java/refinedstorage/tile/TileDiskDrive.java index f42b256b0..fabf13437 100755 --- a/src/main/java/refinedstorage/tile/TileDiskDrive.java +++ b/src/main/java/refinedstorage/tile/TileDiskDrive.java @@ -14,7 +14,7 @@ import refinedstorage.RefinedStorageItems; import refinedstorage.api.network.INetworkMaster; import refinedstorage.api.storage.IStorageProvider; import refinedstorage.api.storage.item.IItemStorage; -import refinedstorage.apiimpl.storage.NBTItemStorage; +import refinedstorage.apiimpl.storage.item.ItemStorageNBT; import refinedstorage.block.EnumStorageType; import refinedstorage.inventory.ItemHandlerBasic; import refinedstorage.inventory.ItemValidatorBasic; @@ -30,7 +30,7 @@ public class TileDiskDrive extends TileNode implements IStorageProvider, IStorag public static final TileDataParameter COMPARE = IComparable.createParameter(); public static final TileDataParameter MODE = IFilterable.createParameter(); - public class ItemStorage extends NBTItemStorage { + public class ItemStorage extends ItemStorageNBT { public ItemStorage(ItemStack disk) { super(disk.getTagCompound(), EnumStorageType.getById(disk.getItemDamage()).getCapacity(), TileDiskDrive.this); } @@ -58,7 +58,7 @@ public class TileDiskDrive extends TileNode implements IStorageProvider, IStorag private ItemHandlerBasic disks = new ItemHandlerBasic(8, this, new ItemValidatorBasic(RefinedStorageItems.STORAGE_DISK) { @Override public boolean isValid(ItemStack disk) { - return super.isValid(disk) && NBTItemStorage.isValid(disk); + return super.isValid(disk) && ItemStorageNBT.isValid(disk); } }) { @Override @@ -78,7 +78,7 @@ public class TileDiskDrive extends TileNode implements IStorageProvider, IStorag } if (network != null) { - network.getStorage().rebuild(); + network.getItemStorage().rebuild(); } } } @@ -150,7 +150,7 @@ public class TileDiskDrive extends TileNode implements IStorageProvider, IStorag public void onConnectionChange(INetworkMaster network, boolean state) { super.onConnectionChange(network, state); - network.getStorage().rebuild(); + network.getItemStorage().rebuild(); } @Override @@ -256,7 +256,7 @@ public class TileDiskDrive extends TileNode implements IStorageProvider, IStorag return 0; } - stored += NBTItemStorage.getStoredFromNBT(disk.getTagCompound()); + stored += ItemStorageNBT.getStoredFromNBT(disk.getTagCompound()); storedMax += EnumStorageType.getById(disk.getItemDamage()).getCapacity(); } } @@ -322,7 +322,7 @@ public class TileDiskDrive extends TileNode implements IStorageProvider, IStorag ItemStack stack = disks.getStackInSlot(i); if (stack != null) { - stored += NBTItemStorage.getStoredFromNBT(stack.getTagCompound()); + stored += ItemStorageNBT.getStoredFromNBT(stack.getTagCompound()); } } diff --git a/src/main/java/refinedstorage/tile/TileStorage.java b/src/main/java/refinedstorage/tile/TileStorage.java index e02de166d..b44830cdb 100755 --- a/src/main/java/refinedstorage/tile/TileStorage.java +++ b/src/main/java/refinedstorage/tile/TileStorage.java @@ -10,7 +10,7 @@ import refinedstorage.RefinedStorageBlocks; import refinedstorage.api.network.INetworkMaster; import refinedstorage.api.storage.IStorageProvider; import refinedstorage.api.storage.item.IItemStorage; -import refinedstorage.apiimpl.storage.NBTItemStorage; +import refinedstorage.apiimpl.storage.item.ItemStorageNBT; import refinedstorage.block.BlockStorage; import refinedstorage.block.EnumStorageType; import refinedstorage.inventory.ItemHandlerBasic; @@ -29,11 +29,11 @@ public class TileStorage extends TileNode implements IStorageProvider, IStorageG public static final TileDataParameter STORED = new TileDataParameter<>(DataSerializers.VARINT, 0, new ITileDataProducer() { @Override public Integer getValue(TileStorage tile) { - return NBTItemStorage.getStoredFromNBT(tile.storageTag); + return ItemStorageNBT.getStoredFromNBT(tile.storageTag); } }); - class ItemStorage extends NBTItemStorage { + class ItemStorage extends ItemStorageNBT { public ItemStorage() { super(TileStorage.this.getStorageTag(), TileStorage.this.getCapacity(), TileStorage.this); } @@ -61,7 +61,7 @@ public class TileStorage extends TileNode implements IStorageProvider, IStorageG private ItemHandlerBasic filters = new ItemHandlerBasic(9, this); - private NBTTagCompound storageTag = NBTItemStorage.createNBT(); + private NBTTagCompound storageTag = ItemStorageNBT.createNBT(); private ItemStorage storage; @@ -95,7 +95,7 @@ public class TileStorage extends TileNode implements IStorageProvider, IStorageG storage = new ItemStorage(); if (network != null) { - network.getStorage().rebuild(); + network.getItemStorage().rebuild(); } } } @@ -110,7 +110,7 @@ public class TileStorage extends TileNode implements IStorageProvider, IStorageG public void onConnectionChange(INetworkMaster network, boolean state) { super.onConnectionChange(network, state); - network.getStorage().rebuild(); + network.getItemStorage().rebuild(); } @Override @@ -232,7 +232,7 @@ public class TileStorage extends TileNode implements IStorageProvider, IStorageG this.storageTag = storageTag; } - public NBTItemStorage getStorage() { + public ItemStorageNBT getStorage() { return storage; } diff --git a/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java b/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java index 57d14b7d2..4f96620b0 100755 --- a/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java +++ b/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java @@ -96,7 +96,7 @@ public class TileExternalStorage extends TileMultipartNode implements IStoragePr updateStorage(network); - network.getStorage().rebuild(); + network.getItemStorage().rebuild(); } @Override @@ -112,7 +112,7 @@ public class TileExternalStorage extends TileMultipartNode implements IStoragePr } if (shouldRebuild) { - network.getStorage().rebuild(); + network.getItemStorage().rebuild(); } } @@ -219,7 +219,7 @@ public class TileExternalStorage extends TileMultipartNode implements IStoragePr } } - network.getStorage().rebuild(); + network.getItemStorage().rebuild(); } @Override diff --git a/src/main/java/refinedstorage/tile/grid/TileGrid.java b/src/main/java/refinedstorage/tile/grid/TileGrid.java index 133d10da9..2a4845557 100755 --- a/src/main/java/refinedstorage/tile/grid/TileGrid.java +++ b/src/main/java/refinedstorage/tile/grid/TileGrid.java @@ -190,13 +190,13 @@ public class TileGrid extends TileNode implements IGrid { public void onGridOpened(EntityPlayer player) { if (isConnected()) { - network.sendStorageToClient((EntityPlayerMP) player); + network.sendItemStorageToClient((EntityPlayerMP) player); } } @Override public IItemGridHandler getGridHandler() { - return isConnected() ? network.getGridHandler() : null; + return isConnected() ? network.getItemGridHandler() : null; } public InventoryCrafting getMatrix() { diff --git a/src/main/java/refinedstorage/tile/grid/WirelessGrid.java b/src/main/java/refinedstorage/tile/grid/WirelessGrid.java index 7d4ee08d1..64733131b 100755 --- a/src/main/java/refinedstorage/tile/grid/WirelessGrid.java +++ b/src/main/java/refinedstorage/tile/grid/WirelessGrid.java @@ -87,7 +87,7 @@ public class WirelessGrid implements IGrid { public IItemGridHandler getGridHandler() { TileController controller = getController(); - return controller != null ? controller.getGridHandler() : null; + return controller != null ? controller.getItemGridHandler() : null; } @Override From 786cdb7553f212e7ab7f81a6278b8c3ded34f51c Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Thu, 11 Aug 2016 00:03:11 +0200 Subject: [PATCH 155/214] Some more fixes --- .../java/refinedstorage/api/RefinedStorageAPI.java | 2 +- .../refinedstorage/api/network/INetworkMaster.java | 2 +- .../api/network/INetworkNodeGraph.java | 6 ++---- .../refinedstorage/api/network/NetworkUtils.java | 9 ++++++++- .../api/network/grid/IItemGridHandler.java | 2 +- .../api/storage/{item => }/CompareUtils.java | 4 ++-- .../api/storage/item/IGroupedItemStorage.java | 6 +++--- .../api/storage/item/IItemStorage.java | 1 + .../apiimpl/autocrafting/CraftingTaskScheduler.java | 2 +- .../autocrafting/ProcessingCraftingTask.java | 2 +- .../apiimpl/network/ItemGridHandler.java | 2 +- .../apiimpl/network/NetworkNodeGraph.java | 13 ++++--------- .../apiimpl/solderer/SoldererRegistry.java | 2 +- .../apiimpl/storage/item/GroupedItemStorage.java | 2 +- .../apiimpl/storage/item/ItemStorageNBT.java | 2 +- .../refinedstorage/container/ContainerBase.java | 2 +- .../refinedstorage/container/ContainerGrid.java | 4 ++-- .../java/refinedstorage/gui/GuiConstructor.java | 2 +- src/main/java/refinedstorage/gui/GuiDestructor.java | 2 +- src/main/java/refinedstorage/gui/GuiDetector.java | 2 +- src/main/java/refinedstorage/gui/GuiExporter.java | 2 +- src/main/java/refinedstorage/gui/GuiGridFilter.java | 2 +- src/main/java/refinedstorage/gui/GuiImporter.java | 2 +- src/main/java/refinedstorage/gui/GuiInterface.java | 2 +- src/main/java/refinedstorage/gui/GuiStorage.java | 2 +- src/main/java/refinedstorage/gui/grid/GuiGrid.java | 2 +- .../gui/sidebutton/SideButtonCompare.java | 2 +- .../java/refinedstorage/item/ItemGridFilter.java | 2 +- src/main/java/refinedstorage/item/ItemPattern.java | 2 +- .../network/MessageGridCraftingStart.java | 2 +- .../network/MessageGridInsertHeld.java | 2 +- .../refinedstorage/network/MessageGridPull.java | 2 +- src/main/java/refinedstorage/tile/ClientNode.java | 2 +- .../java/refinedstorage/tile/TileController.java | 2 +- src/main/java/refinedstorage/tile/TileSolderer.java | 2 +- .../refinedstorage/tile/config/IFilterable.java | 2 +- .../tile/externalstorage/ItemStorageDSU.java | 2 +- .../tile/externalstorage/ItemStorageDrawer.java | 2 +- .../tile/externalstorage/ItemStorageExternal.java | 2 +- .../externalstorage/ItemStorageItemHandler.java | 2 +- src/main/java/refinedstorage/tile/grid/IGrid.java | 2 +- .../java/refinedstorage/tile/grid/TileGrid.java | 4 ++-- .../java/refinedstorage/tile/grid/WirelessGrid.java | 2 +- 43 files changed, 59 insertions(+), 58 deletions(-) rename src/main/java/refinedstorage/api/storage/{item => }/CompareUtils.java (97%) diff --git a/src/main/java/refinedstorage/api/RefinedStorageAPI.java b/src/main/java/refinedstorage/api/RefinedStorageAPI.java index 8ae613dc1..ebef434ae 100755 --- a/src/main/java/refinedstorage/api/RefinedStorageAPI.java +++ b/src/main/java/refinedstorage/api/RefinedStorageAPI.java @@ -4,7 +4,7 @@ import refinedstorage.api.solderer.ISoldererRegistry; public final class RefinedStorageAPI { /** - * The solderer registry, set in pre-initialization. + * The solderer registry, set in pre-initialization */ public static ISoldererRegistry SOLDERER_REGISTRY; } diff --git a/src/main/java/refinedstorage/api/network/INetworkMaster.java b/src/main/java/refinedstorage/api/network/INetworkMaster.java index 638337f03..8e7877e88 100755 --- a/src/main/java/refinedstorage/api/network/INetworkMaster.java +++ b/src/main/java/refinedstorage/api/network/INetworkMaster.java @@ -7,7 +7,7 @@ import net.minecraft.util.math.BlockPos; import refinedstorage.api.autocrafting.ICraftingPattern; import refinedstorage.api.autocrafting.ICraftingTask; import refinedstorage.api.network.grid.IItemGridHandler; -import refinedstorage.api.storage.item.CompareUtils; +import refinedstorage.api.storage.CompareUtils; import refinedstorage.api.storage.item.IGroupedItemStorage; import javax.annotation.Nonnull; diff --git a/src/main/java/refinedstorage/api/network/INetworkNodeGraph.java b/src/main/java/refinedstorage/api/network/INetworkNodeGraph.java index 3b758e3d7..e63db1ae9 100755 --- a/src/main/java/refinedstorage/api/network/INetworkNodeGraph.java +++ b/src/main/java/refinedstorage/api/network/INetworkNodeGraph.java @@ -1,7 +1,7 @@ package refinedstorage.api.network; import net.minecraft.util.math.BlockPos; -import net.minecraft.world.WorldProvider; +import net.minecraft.world.World; import java.util.List; import java.util.Set; @@ -24,9 +24,7 @@ public interface INetworkNodeGraph { List all(); /** - * These hashes are calculated like this: 31 * {@link BlockPos#hashCode()} + {@link WorldProvider#getDimension()} - * - * @return A set of hashes of all connected nodes + * @return A set of hashes of all connected nodes, see {@link NetworkUtils#getNodeHashCode(World, INetworkNode)} */ Set allHashes(); diff --git a/src/main/java/refinedstorage/api/network/NetworkUtils.java b/src/main/java/refinedstorage/api/network/NetworkUtils.java index 3a1d56e1f..2c250ec31 100755 --- a/src/main/java/refinedstorage/api/network/NetworkUtils.java +++ b/src/main/java/refinedstorage/api/network/NetworkUtils.java @@ -1,8 +1,9 @@ package refinedstorage.api.network; import net.minecraft.item.ItemStack; +import net.minecraft.world.World; import refinedstorage.api.autocrafting.ICraftingPattern; -import refinedstorage.api.storage.item.CompareUtils; +import refinedstorage.api.storage.CompareUtils; /** * Utilities for network manipulation. @@ -27,4 +28,10 @@ public final class NetworkUtils { public static int getItemStackHashCode(ItemStack stack) { return stack.getItem().hashCode() * (stack.getItemDamage() + 1) * (stack.hasTagCompound() ? stack.getTagCompound().hashCode() : 1); } + + public static int getNodeHashCode(World world, INetworkNode node) { + int result = node.getPosition().hashCode(); + result = 31 * result + world.provider.getDimension(); + return result; + } } diff --git a/src/main/java/refinedstorage/api/network/grid/IItemGridHandler.java b/src/main/java/refinedstorage/api/network/grid/IItemGridHandler.java index 484a22dde..edbaa231b 100755 --- a/src/main/java/refinedstorage/api/network/grid/IItemGridHandler.java +++ b/src/main/java/refinedstorage/api/network/grid/IItemGridHandler.java @@ -6,7 +6,7 @@ import net.minecraft.item.ItemStack; import javax.annotation.Nullable; /** - * Defines the behavior of grids. + * Defines the behavior of item grids. */ public interface IItemGridHandler { /** diff --git a/src/main/java/refinedstorage/api/storage/item/CompareUtils.java b/src/main/java/refinedstorage/api/storage/CompareUtils.java similarity index 97% rename from src/main/java/refinedstorage/api/storage/item/CompareUtils.java rename to src/main/java/refinedstorage/api/storage/CompareUtils.java index 8b340c15e..83cfa7ffb 100755 --- a/src/main/java/refinedstorage/api/storage/item/CompareUtils.java +++ b/src/main/java/refinedstorage/api/storage/CompareUtils.java @@ -1,11 +1,11 @@ -package refinedstorage.api.storage.item; +package refinedstorage.api.storage; import net.minecraft.item.ItemStack; import net.minecraftforge.oredict.OreDictionary; import org.apache.commons.lang3.ArrayUtils; /** - * Utilities for comparing {@link ItemStack}. + * Utilities for comparing. */ public final class CompareUtils { public static final int COMPARE_DAMAGE = 1; diff --git a/src/main/java/refinedstorage/api/storage/item/IGroupedItemStorage.java b/src/main/java/refinedstorage/api/storage/item/IGroupedItemStorage.java index 55bd1ac22..310d71092 100755 --- a/src/main/java/refinedstorage/api/storage/item/IGroupedItemStorage.java +++ b/src/main/java/refinedstorage/api/storage/item/IGroupedItemStorage.java @@ -2,6 +2,7 @@ package refinedstorage.api.storage.item; import net.minecraft.item.ItemStack; import refinedstorage.api.network.INetworkMaster; +import refinedstorage.api.storage.CompareUtils; import refinedstorage.api.storage.IStorageProvider; import javax.annotation.Nonnull; @@ -18,8 +19,7 @@ import java.util.List; */ public interface IGroupedItemStorage { /** - * Rebuilds the storages and items for a network. Typically called when a {@link IStorageProvider} is - * added or removed from the network. + * Rebuilds the global item list. Typically called when a {@link IStorageProvider} is added or removed from the network. */ void rebuild(); @@ -70,7 +70,7 @@ public interface IGroupedItemStorage { Collection getStacks(); /** - * @return The storages connected to this network + * @return The item storages connected to this network */ List getStorages(); } diff --git a/src/main/java/refinedstorage/api/storage/item/IItemStorage.java b/src/main/java/refinedstorage/api/storage/item/IItemStorage.java index 5ceae03f4..8b6add79b 100755 --- a/src/main/java/refinedstorage/api/storage/item/IItemStorage.java +++ b/src/main/java/refinedstorage/api/storage/item/IItemStorage.java @@ -1,6 +1,7 @@ package refinedstorage.api.storage.item; import net.minecraft.item.ItemStack; +import refinedstorage.api.storage.CompareUtils; import refinedstorage.api.storage.IStorageProvider; import javax.annotation.Nonnull; diff --git a/src/main/java/refinedstorage/apiimpl/autocrafting/CraftingTaskScheduler.java b/src/main/java/refinedstorage/apiimpl/autocrafting/CraftingTaskScheduler.java index 47eb86931..54342d0c4 100755 --- a/src/main/java/refinedstorage/apiimpl/autocrafting/CraftingTaskScheduler.java +++ b/src/main/java/refinedstorage/apiimpl/autocrafting/CraftingTaskScheduler.java @@ -5,7 +5,7 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import refinedstorage.api.autocrafting.ICraftingPattern; import refinedstorage.api.network.INetworkMaster; -import refinedstorage.api.storage.item.CompareUtils; +import refinedstorage.api.storage.CompareUtils; public class CraftingTaskScheduler { private static final String NBT_SCHEDULED = "CraftingTaskScheduled"; diff --git a/src/main/java/refinedstorage/apiimpl/autocrafting/ProcessingCraftingTask.java b/src/main/java/refinedstorage/apiimpl/autocrafting/ProcessingCraftingTask.java index f5fb0e38a..31f04b17a 100755 --- a/src/main/java/refinedstorage/apiimpl/autocrafting/ProcessingCraftingTask.java +++ b/src/main/java/refinedstorage/apiimpl/autocrafting/ProcessingCraftingTask.java @@ -9,7 +9,7 @@ import refinedstorage.api.autocrafting.ICraftingPatternContainer; import refinedstorage.api.autocrafting.ICraftingTask; import refinedstorage.api.network.INetworkMaster; import refinedstorage.api.network.NetworkUtils; -import refinedstorage.api.storage.item.CompareUtils; +import refinedstorage.api.storage.CompareUtils; public class ProcessingCraftingTask implements ICraftingTask { public static final int ID = 1; diff --git a/src/main/java/refinedstorage/apiimpl/network/ItemGridHandler.java b/src/main/java/refinedstorage/apiimpl/network/ItemGridHandler.java index 8973ab683..4f9b27336 100755 --- a/src/main/java/refinedstorage/apiimpl/network/ItemGridHandler.java +++ b/src/main/java/refinedstorage/apiimpl/network/ItemGridHandler.java @@ -9,7 +9,7 @@ import refinedstorage.api.network.INetworkMaster; import refinedstorage.api.network.NetworkUtils; import refinedstorage.api.network.grid.GridExtractFlags; import refinedstorage.api.network.grid.IItemGridHandler; -import refinedstorage.api.storage.item.CompareUtils; +import refinedstorage.api.storage.CompareUtils; public class ItemGridHandler implements IItemGridHandler { public static final int MAX_CRAFTING_PER_REQUEST = 500; diff --git a/src/main/java/refinedstorage/apiimpl/network/NetworkNodeGraph.java b/src/main/java/refinedstorage/apiimpl/network/NetworkNodeGraph.java index f2ca40c22..562c98c35 100755 --- a/src/main/java/refinedstorage/apiimpl/network/NetworkNodeGraph.java +++ b/src/main/java/refinedstorage/apiimpl/network/NetworkNodeGraph.java @@ -7,6 +7,7 @@ import net.minecraft.world.World; import net.minecraftforge.common.DimensionManager; import refinedstorage.api.network.INetworkNode; import refinedstorage.api.network.INetworkNodeGraph; +import refinedstorage.api.network.NetworkUtils; import refinedstorage.tile.TileController; import refinedstorage.tile.TileNetworkTransmitter; @@ -22,12 +23,6 @@ public class NetworkNodeGraph implements INetworkNodeGraph { this.controller = controller; } - private int hashNode(World world, INetworkNode node) { - int result = node.getPosition().hashCode(); - result = 31 * result + world.provider.getDimension(); - return result; - } - @Override public void rebuild(BlockPos start, boolean notify) { if (!controller.canRun()) { @@ -71,7 +66,7 @@ public class NetworkNodeGraph implements INetworkNodeGraph { INetworkNode node = (INetworkNode) tile; newNodes.add(node); - newNodeHashes.add(hashNode(world, node)); + newNodeHashes.add(NetworkUtils.getNodeHashCode(world, node)); if (tile instanceof TileNetworkTransmitter) { final TileNetworkTransmitter transmitter = (TileNetworkTransmitter) tile; @@ -120,7 +115,7 @@ public class NetworkNodeGraph implements INetworkNodeGraph { boolean changed = false; for (INetworkNode newNode : nodes) { - if (!oldNodeHashes.contains(hashNode(newNode.getNodeWorld(), newNode))) { + if (!oldNodeHashes.contains(NetworkUtils.getNodeHashCode(newNode.getNodeWorld(), newNode))) { newNode.onConnected(controller); changed = true; @@ -128,7 +123,7 @@ public class NetworkNodeGraph implements INetworkNodeGraph { } for (INetworkNode oldNode : oldNodes) { - if (!nodeHashes.contains(hashNode(oldNode.getNodeWorld(), oldNode))) { + if (!nodeHashes.contains(NetworkUtils.getNodeHashCode(oldNode.getNodeWorld(), oldNode))) { oldNode.onDisconnected(controller); changed = true; diff --git a/src/main/java/refinedstorage/apiimpl/solderer/SoldererRegistry.java b/src/main/java/refinedstorage/apiimpl/solderer/SoldererRegistry.java index 04f0b5162..971b5aade 100755 --- a/src/main/java/refinedstorage/apiimpl/solderer/SoldererRegistry.java +++ b/src/main/java/refinedstorage/apiimpl/solderer/SoldererRegistry.java @@ -3,7 +3,7 @@ package refinedstorage.apiimpl.solderer; import net.minecraftforge.items.IItemHandler; import refinedstorage.api.solderer.ISoldererRecipe; import refinedstorage.api.solderer.ISoldererRegistry; -import refinedstorage.api.storage.item.CompareUtils; +import refinedstorage.api.storage.CompareUtils; import javax.annotation.Nonnull; import javax.annotation.Nullable; diff --git a/src/main/java/refinedstorage/apiimpl/storage/item/GroupedItemStorage.java b/src/main/java/refinedstorage/apiimpl/storage/item/GroupedItemStorage.java index 090ca1557..4c751672e 100755 --- a/src/main/java/refinedstorage/apiimpl/storage/item/GroupedItemStorage.java +++ b/src/main/java/refinedstorage/apiimpl/storage/item/GroupedItemStorage.java @@ -7,8 +7,8 @@ import net.minecraft.item.ItemStack; import refinedstorage.api.autocrafting.ICraftingPattern; import refinedstorage.api.network.INetworkMaster; import refinedstorage.api.network.NetworkUtils; +import refinedstorage.api.storage.CompareUtils; import refinedstorage.api.storage.IStorageProvider; -import refinedstorage.api.storage.item.CompareUtils; import refinedstorage.api.storage.item.IGroupedItemStorage; import refinedstorage.api.storage.item.IItemStorage; diff --git a/src/main/java/refinedstorage/apiimpl/storage/item/ItemStorageNBT.java b/src/main/java/refinedstorage/apiimpl/storage/item/ItemStorageNBT.java index d8f807feb..ab98cc810 100755 --- a/src/main/java/refinedstorage/apiimpl/storage/item/ItemStorageNBT.java +++ b/src/main/java/refinedstorage/apiimpl/storage/item/ItemStorageNBT.java @@ -6,7 +6,7 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.tileentity.TileEntity; import net.minecraftforge.items.ItemHandlerHelper; -import refinedstorage.api.storage.item.CompareUtils; +import refinedstorage.api.storage.CompareUtils; import refinedstorage.api.storage.item.IItemStorage; import javax.annotation.Nullable; diff --git a/src/main/java/refinedstorage/container/ContainerBase.java b/src/main/java/refinedstorage/container/ContainerBase.java index 0a1e7f294..896b211e5 100755 --- a/src/main/java/refinedstorage/container/ContainerBase.java +++ b/src/main/java/refinedstorage/container/ContainerBase.java @@ -6,7 +6,7 @@ import net.minecraft.inventory.Container; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; import net.minecraftforge.items.ItemHandlerHelper; -import refinedstorage.api.storage.item.CompareUtils; +import refinedstorage.api.storage.CompareUtils; import refinedstorage.container.slot.SlotDisabled; import refinedstorage.container.slot.SlotSpecimen; import refinedstorage.container.slot.SlotSpecimenLegacy; diff --git a/src/main/java/refinedstorage/container/ContainerGrid.java b/src/main/java/refinedstorage/container/ContainerGrid.java index c1aae68a4..a3c48e8f7 100755 --- a/src/main/java/refinedstorage/container/ContainerGrid.java +++ b/src/main/java/refinedstorage/container/ContainerGrid.java @@ -104,8 +104,8 @@ public class ContainerGrid extends ContainerBase { if (slot.getHasStack()) { if (slot == craftingResultSlot) { ((TileGrid) grid).onCraftedShift(this, player); - } else if (grid.getGridHandler() != null && slot != patternResultSlot && !(slot instanceof SlotSpecimenLegacy)) { - slot.putStack(grid.getGridHandler().onInsert(slot.getStack())); + } else if (grid.getHandler() != null && slot != patternResultSlot && !(slot instanceof SlotSpecimenLegacy)) { + slot.putStack(grid.getHandler().onInsert(slot.getStack())); detectAndSendChanges(); } diff --git a/src/main/java/refinedstorage/gui/GuiConstructor.java b/src/main/java/refinedstorage/gui/GuiConstructor.java index 7aed1efd5..50bca551c 100755 --- a/src/main/java/refinedstorage/gui/GuiConstructor.java +++ b/src/main/java/refinedstorage/gui/GuiConstructor.java @@ -1,6 +1,6 @@ package refinedstorage.gui; -import refinedstorage.api.storage.item.CompareUtils; +import refinedstorage.api.storage.CompareUtils; import refinedstorage.container.ContainerConstructor; import refinedstorage.gui.sidebutton.SideButtonCompare; import refinedstorage.gui.sidebutton.SideButtonRedstoneMode; diff --git a/src/main/java/refinedstorage/gui/GuiDestructor.java b/src/main/java/refinedstorage/gui/GuiDestructor.java index d703a3cd0..24b62adaa 100755 --- a/src/main/java/refinedstorage/gui/GuiDestructor.java +++ b/src/main/java/refinedstorage/gui/GuiDestructor.java @@ -1,6 +1,6 @@ package refinedstorage.gui; -import refinedstorage.api.storage.item.CompareUtils; +import refinedstorage.api.storage.CompareUtils; import refinedstorage.container.ContainerDestructor; import refinedstorage.gui.sidebutton.SideButtonCompare; import refinedstorage.gui.sidebutton.SideButtonMode; diff --git a/src/main/java/refinedstorage/gui/GuiDetector.java b/src/main/java/refinedstorage/gui/GuiDetector.java index 10e746d6b..230fa761c 100755 --- a/src/main/java/refinedstorage/gui/GuiDetector.java +++ b/src/main/java/refinedstorage/gui/GuiDetector.java @@ -2,7 +2,7 @@ package refinedstorage.gui; import com.google.common.primitives.Ints; import net.minecraft.client.gui.GuiTextField; -import refinedstorage.api.storage.item.CompareUtils; +import refinedstorage.api.storage.CompareUtils; import refinedstorage.container.ContainerDetector; import refinedstorage.gui.sidebutton.SideButtonCompare; import refinedstorage.gui.sidebutton.SideButtonDetectorMode; diff --git a/src/main/java/refinedstorage/gui/GuiExporter.java b/src/main/java/refinedstorage/gui/GuiExporter.java index 31499faba..387f8b612 100755 --- a/src/main/java/refinedstorage/gui/GuiExporter.java +++ b/src/main/java/refinedstorage/gui/GuiExporter.java @@ -1,6 +1,6 @@ package refinedstorage.gui; -import refinedstorage.api.storage.item.CompareUtils; +import refinedstorage.api.storage.CompareUtils; import refinedstorage.container.ContainerExporter; import refinedstorage.gui.sidebutton.SideButtonCompare; import refinedstorage.gui.sidebutton.SideButtonRedstoneMode; diff --git a/src/main/java/refinedstorage/gui/GuiGridFilter.java b/src/main/java/refinedstorage/gui/GuiGridFilter.java index 0c8aa7f13..8d6b119ed 100755 --- a/src/main/java/refinedstorage/gui/GuiGridFilter.java +++ b/src/main/java/refinedstorage/gui/GuiGridFilter.java @@ -3,7 +3,7 @@ package refinedstorage.gui; import net.minecraft.client.gui.GuiButton; import net.minecraftforge.fml.client.config.GuiCheckBox; import refinedstorage.RefinedStorage; -import refinedstorage.api.storage.item.CompareUtils; +import refinedstorage.api.storage.CompareUtils; import refinedstorage.container.ContainerGridFilter; import refinedstorage.item.ItemGridFilter; import refinedstorage.network.MessageGridFilterUpdate; diff --git a/src/main/java/refinedstorage/gui/GuiImporter.java b/src/main/java/refinedstorage/gui/GuiImporter.java index 61cc6b9ff..384cbec40 100755 --- a/src/main/java/refinedstorage/gui/GuiImporter.java +++ b/src/main/java/refinedstorage/gui/GuiImporter.java @@ -1,6 +1,6 @@ package refinedstorage.gui; -import refinedstorage.api.storage.item.CompareUtils; +import refinedstorage.api.storage.CompareUtils; import refinedstorage.container.ContainerImporter; import refinedstorage.gui.sidebutton.SideButtonCompare; import refinedstorage.gui.sidebutton.SideButtonMode; diff --git a/src/main/java/refinedstorage/gui/GuiInterface.java b/src/main/java/refinedstorage/gui/GuiInterface.java index fe907e5c8..627456013 100755 --- a/src/main/java/refinedstorage/gui/GuiInterface.java +++ b/src/main/java/refinedstorage/gui/GuiInterface.java @@ -1,6 +1,6 @@ package refinedstorage.gui; -import refinedstorage.api.storage.item.CompareUtils; +import refinedstorage.api.storage.CompareUtils; import refinedstorage.container.ContainerInterface; import refinedstorage.gui.sidebutton.SideButtonCompare; import refinedstorage.gui.sidebutton.SideButtonRedstoneMode; diff --git a/src/main/java/refinedstorage/gui/GuiStorage.java b/src/main/java/refinedstorage/gui/GuiStorage.java index c00cef7a9..fff34ef1c 100755 --- a/src/main/java/refinedstorage/gui/GuiStorage.java +++ b/src/main/java/refinedstorage/gui/GuiStorage.java @@ -2,7 +2,7 @@ package refinedstorage.gui; import com.google.common.primitives.Ints; import net.minecraft.client.gui.GuiTextField; -import refinedstorage.api.storage.item.CompareUtils; +import refinedstorage.api.storage.CompareUtils; import refinedstorage.container.ContainerStorage; import refinedstorage.gui.sidebutton.SideButtonCompare; import refinedstorage.gui.sidebutton.SideButtonMode; diff --git a/src/main/java/refinedstorage/gui/grid/GuiGrid.java b/src/main/java/refinedstorage/gui/grid/GuiGrid.java index 7a0f4e4bf..e18c55921 100755 --- a/src/main/java/refinedstorage/gui/grid/GuiGrid.java +++ b/src/main/java/refinedstorage/gui/grid/GuiGrid.java @@ -14,7 +14,7 @@ import net.minecraft.util.math.BlockPos; import net.minecraftforge.fml.common.FMLCommonHandler; import refinedstorage.RefinedStorage; import refinedstorage.api.network.grid.GridExtractFlags; -import refinedstorage.api.storage.item.CompareUtils; +import refinedstorage.api.storage.CompareUtils; import refinedstorage.block.EnumGridType; import refinedstorage.container.ContainerGrid; import refinedstorage.gui.GuiBase; diff --git a/src/main/java/refinedstorage/gui/sidebutton/SideButtonCompare.java b/src/main/java/refinedstorage/gui/sidebutton/SideButtonCompare.java index c659fbeb2..aad6ddfda 100755 --- a/src/main/java/refinedstorage/gui/sidebutton/SideButtonCompare.java +++ b/src/main/java/refinedstorage/gui/sidebutton/SideButtonCompare.java @@ -1,7 +1,7 @@ package refinedstorage.gui.sidebutton; import net.minecraft.util.text.TextFormatting; -import refinedstorage.api.storage.item.CompareUtils; +import refinedstorage.api.storage.CompareUtils; import refinedstorage.gui.GuiBase; import refinedstorage.tile.data.TileDataManager; import refinedstorage.tile.data.TileDataParameter; diff --git a/src/main/java/refinedstorage/item/ItemGridFilter.java b/src/main/java/refinedstorage/item/ItemGridFilter.java index 0c2dd10c3..81048e31e 100755 --- a/src/main/java/refinedstorage/item/ItemGridFilter.java +++ b/src/main/java/refinedstorage/item/ItemGridFilter.java @@ -10,7 +10,7 @@ import net.minecraft.world.World; import refinedstorage.RefinedStorage; import refinedstorage.RefinedStorageGui; import refinedstorage.RefinedStorageItems; -import refinedstorage.api.storage.item.CompareUtils; +import refinedstorage.api.storage.CompareUtils; import refinedstorage.inventory.ItemHandlerGridFilter; import java.util.List; diff --git a/src/main/java/refinedstorage/item/ItemPattern.java b/src/main/java/refinedstorage/item/ItemPattern.java index fb5c30c85..3ab1897aa 100755 --- a/src/main/java/refinedstorage/item/ItemPattern.java +++ b/src/main/java/refinedstorage/item/ItemPattern.java @@ -13,7 +13,7 @@ import net.minecraft.util.text.TextFormatting; import net.minecraft.world.World; import net.minecraftforge.common.util.Constants; import refinedstorage.RefinedStorageItems; -import refinedstorage.api.storage.item.CompareUtils; +import refinedstorage.api.storage.CompareUtils; import java.util.HashSet; import java.util.List; diff --git a/src/main/java/refinedstorage/network/MessageGridCraftingStart.java b/src/main/java/refinedstorage/network/MessageGridCraftingStart.java index 023e6c832..bb28f4106 100755 --- a/src/main/java/refinedstorage/network/MessageGridCraftingStart.java +++ b/src/main/java/refinedstorage/network/MessageGridCraftingStart.java @@ -36,7 +36,7 @@ public class MessageGridCraftingStart extends MessageHandlerPlayerToServer Date: Thu, 11 Aug 2016 12:37:00 +0200 Subject: [PATCH 156/214] Fixed Network Transmitter not dropping inventory when broken, fixes issue #257 --- CHANGELOG.md | 3 ++- .../java/refinedstorage/api/storage/item/IItemStorage.java | 2 +- .../java/refinedstorage/tile/TileNetworkTransmitter.java | 7 +++++++ 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fc62ee566..49886caeb 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,8 +2,9 @@ ### 0.8.18 **Bugfixes** -- Fixed detector mode not persisting +- Fixed Detector mode not persisting - Fixed bug where scrollbar didn't scroll correctly and thus hiding some items +- Fixed Network Transmitter not dropping inventory when broken ### 0.8.17 **Bugfixes** diff --git a/src/main/java/refinedstorage/api/storage/item/IItemStorage.java b/src/main/java/refinedstorage/api/storage/item/IItemStorage.java index 8b6add79b..75f9ca6e7 100755 --- a/src/main/java/refinedstorage/api/storage/item/IItemStorage.java +++ b/src/main/java/refinedstorage/api/storage/item/IItemStorage.java @@ -9,7 +9,7 @@ import javax.annotation.Nullable; import java.util.List; /** - * Represents a storage sink for the storage network. + * Represents an item storage sink for the storage network. * Provide this through an {@link IStorageProvider}. */ public interface IItemStorage { diff --git a/src/main/java/refinedstorage/tile/TileNetworkTransmitter.java b/src/main/java/refinedstorage/tile/TileNetworkTransmitter.java index 6203b352c..491d9591a 100755 --- a/src/main/java/refinedstorage/tile/TileNetworkTransmitter.java +++ b/src/main/java/refinedstorage/tile/TileNetworkTransmitter.java @@ -4,6 +4,8 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.network.datasync.DataSerializers; import net.minecraft.util.math.BlockPos; +import net.minecraftforge.items.IItemHandler; +import net.minecraftforge.items.wrapper.CombinedInvWrapper; import refinedstorage.RefinedStorage; import refinedstorage.RefinedStorageItems; import refinedstorage.api.network.NetworkUtils; @@ -118,6 +120,11 @@ public class TileNetworkTransmitter extends TileNode { return upgrades; } + @Override + public IItemHandler getDrops() { + return new CombinedInvWrapper(networkCard, upgrades); + } + public BlockPos getReceiver() { return receiver; } From 340587d2e3bd75bbeadc19136f56449e4ab86969 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Thu, 11 Aug 2016 12:39:49 +0200 Subject: [PATCH 157/214] Fix docs --- .../java/refinedstorage/api/storage/IStorageProvider.java | 2 +- .../java/refinedstorage/api/storage/item/IItemStorage.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/refinedstorage/api/storage/IStorageProvider.java b/src/main/java/refinedstorage/api/storage/IStorageProvider.java index ebc39d1da..8eeb148b4 100755 --- a/src/main/java/refinedstorage/api/storage/IStorageProvider.java +++ b/src/main/java/refinedstorage/api/storage/IStorageProvider.java @@ -5,7 +5,7 @@ import refinedstorage.api.storage.item.IItemStorage; import java.util.List; /** - * Represents a tile that provides storage to the network. Implement this on a tile that implements {@link refinedstorage.api.network.INetworkNode}. + * Represents a tile that provides storage to the network. Implement this on a tile that is a {@link refinedstorage.api.network.INetworkNode}. */ public interface IStorageProvider { /** diff --git a/src/main/java/refinedstorage/api/storage/item/IItemStorage.java b/src/main/java/refinedstorage/api/storage/item/IItemStorage.java index 75f9ca6e7..09e4343ae 100755 --- a/src/main/java/refinedstorage/api/storage/item/IItemStorage.java +++ b/src/main/java/refinedstorage/api/storage/item/IItemStorage.java @@ -19,7 +19,7 @@ public interface IItemStorage { List getItems(); /** - * Inserts an item to the storage network. + * Inserts an item to this storage. * * @param stack The stack prototype to insert, do NOT modify * @param size The amount of that prototype that has to be inserted @@ -30,7 +30,7 @@ public interface IItemStorage { ItemStack insertItem(@Nonnull ItemStack stack, int size, boolean simulate); /** - * Extracts an item from the storage network. + * Extracts an item from this storage. *

* If the stack we found in the system is smaller than the requested size, return the stack anyway. * For example: if this method is called for dirt (64x) while there is only dirt (32x), return the dirt (32x) anyway. From 8a23641388a8ca53617240ffdbe03bc1bdc07929 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Thu, 11 Aug 2016 12:43:15 +0200 Subject: [PATCH 158/214] Fix override --- .../tile/externalstorage/TileExternalStorage.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java b/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java index 4f96620b0..421fa3373 100755 --- a/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java +++ b/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java @@ -252,10 +252,12 @@ public class TileExternalStorage extends TileMultipartNode implements IStoragePr return PRIORITY; } + @Override public int getStored() { return STORED.getValue(); } + @Override public int getCapacity() { return CAPACITY.getValue(); } From 75fdf13cbfd596c4149b7ad79932ed6c3e4e4444 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Thu, 11 Aug 2016 23:29:26 +0200 Subject: [PATCH 159/214] Bump version to 0.8.19 --- build.gradle | 2 +- src/main/java/refinedstorage/RefinedStorage.java | 2 +- src/main/resources/mcmod.info | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/build.gradle b/build.gradle index dab11105d..287b9f973 100755 --- a/build.gradle +++ b/build.gradle @@ -12,7 +12,7 @@ buildscript { } apply plugin: 'net.minecraftforge.gradle.forge' -version = "0.8.18" +version = "0.8.19" group = "refinedstorage" archivesBaseName = "refinedstorage" diff --git a/src/main/java/refinedstorage/RefinedStorage.java b/src/main/java/refinedstorage/RefinedStorage.java index 171084f6c..e71ccbba1 100755 --- a/src/main/java/refinedstorage/RefinedStorage.java +++ b/src/main/java/refinedstorage/RefinedStorage.java @@ -18,7 +18,7 @@ import refinedstorage.proxy.CommonProxy; @Mod(modid = RefinedStorage.ID, version = RefinedStorage.VERSION, dependencies = RefinedStorage.DEPENDENCIES) public final class RefinedStorage { public static final String ID = "refinedstorage"; - public static final String VERSION = "0.8.18"; + public static final String VERSION = "0.8.19"; public static final String DEPENDENCIES = "required-after:mcmultipart@[1.2.1,);"; @SidedProxy(clientSide = "refinedstorage.proxy.ClientProxy", serverSide = "refinedstorage.proxy.ServerProxy") diff --git a/src/main/resources/mcmod.info b/src/main/resources/mcmod.info index 4cc90953e..010089b80 100755 --- a/src/main/resources/mcmod.info +++ b/src/main/resources/mcmod.info @@ -3,7 +3,7 @@ "modid": "refinedstorage", "name": "Refined Storage", "description": "A Minecraft mod all about storage.", - "version": "0.8.18", + "version": "0.8.19", "mcversion": "1.10.2", "url": "", "updateUrl": "", From 8f55352330f2debba491300260db6fb4969b6071 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Thu, 11 Aug 2016 23:32:05 +0200 Subject: [PATCH 160/214] Fixed item duplication bug with External Storage --- CHANGELOG.md | 5 +++++ .../storage/item/GroupedItemStorage.java | 2 +- .../ItemStorageItemHandler.java | 22 ++++++++++++++----- .../externalstorage/TileExternalStorage.java | 16 ++++++-------- 4 files changed, 30 insertions(+), 15 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 49886caeb..35e043950 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # Refined Storage Changelog +### 0.8.19 +**Bugfixes** +- Fixed item duplication bug with External Storage +- Fixed External Storage taking too long to update storage + ### 0.8.18 **Bugfixes** - Fixed Detector mode not persisting diff --git a/src/main/java/refinedstorage/apiimpl/storage/item/GroupedItemStorage.java b/src/main/java/refinedstorage/apiimpl/storage/item/GroupedItemStorage.java index 4c751672e..8977c1ff5 100755 --- a/src/main/java/refinedstorage/apiimpl/storage/item/GroupedItemStorage.java +++ b/src/main/java/refinedstorage/apiimpl/storage/item/GroupedItemStorage.java @@ -81,7 +81,7 @@ public class GroupedItemStorage implements IGroupedItemStorage { if (CompareUtils.compareStackNoQuantity(otherStack, stack)) { otherStack.stackSize -= stack.stackSize; - if (otherStack.stackSize == 0) { + if (otherStack.stackSize <= 0) { if (!NetworkUtils.hasPattern(network, stack)) { stacks.remove(otherStack.getItem(), otherStack); } diff --git a/src/main/java/refinedstorage/tile/externalstorage/ItemStorageItemHandler.java b/src/main/java/refinedstorage/tile/externalstorage/ItemStorageItemHandler.java index 3a7227cd7..a1dac4773 100755 --- a/src/main/java/refinedstorage/tile/externalstorage/ItemStorageItemHandler.java +++ b/src/main/java/refinedstorage/tile/externalstorage/ItemStorageItemHandler.java @@ -47,21 +47,33 @@ public class ItemStorageItemHandler extends ItemStorageExternal { @Override public ItemStack extractItem(ItemStack stack, int size, int flags) { + int remaining = size; + + ItemStack received = null; + for (int i = 0; i < handler.getSlots(); ++i) { ItemStack slot = handler.getStackInSlot(i); if (slot != null && CompareUtils.compareStack(slot, stack, flags)) { - size = Math.min(size, slot.stackSize); + ItemStack got = handler.extractItem(i, remaining, false); - ItemStack took = ItemHandlerHelper.copyStackWithSize(slot, size); + if (got != null) { + if (received == null) { + received = got; + } else { + received.stackSize += got.stackSize; + } - handler.extractItem(i, size, false); + remaining -= got.stackSize; - return took; + if (remaining == 0) { + break; + } + } } } - return null; + return received; } @Override diff --git a/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java b/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java index 421fa3373..2409535d7 100755 --- a/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java +++ b/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java @@ -102,18 +102,16 @@ public class TileExternalStorage extends TileMultipartNode implements IStoragePr @Override public void update() { if (!worldObj.isRemote && network != null) { - if (ticks % (20 * 4) == 0) { - boolean shouldRebuild = false; + boolean changeDetected = false; - for (ItemStorageExternal storage : storages) { - if (storage.updateCache()) { - shouldRebuild = true; - } + for (ItemStorageExternal storage : storages) { + if (storage.updateCache()) { + changeDetected = true; } + } - if (shouldRebuild) { - network.getItemStorage().rebuild(); - } + if (changeDetected) { + network.getItemStorage().rebuild(); } if (getFacingTile() instanceof IDrawerGroup && lastDrawerCount != ((IDrawerGroup) getFacingTile()).getDrawerCount()) { From 2ff2623b75d59bfad423c189becc0fda555ded81 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Thu, 11 Aug 2016 23:32:31 +0200 Subject: [PATCH 161/214] Fix compare --- .../refinedstorage/apiimpl/storage/item/GroupedItemStorage.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/refinedstorage/apiimpl/storage/item/GroupedItemStorage.java b/src/main/java/refinedstorage/apiimpl/storage/item/GroupedItemStorage.java index 8977c1ff5..4c751672e 100755 --- a/src/main/java/refinedstorage/apiimpl/storage/item/GroupedItemStorage.java +++ b/src/main/java/refinedstorage/apiimpl/storage/item/GroupedItemStorage.java @@ -81,7 +81,7 @@ public class GroupedItemStorage implements IGroupedItemStorage { if (CompareUtils.compareStackNoQuantity(otherStack, stack)) { otherStack.stackSize -= stack.stackSize; - if (otherStack.stackSize <= 0) { + if (otherStack.stackSize == 0) { if (!NetworkUtils.hasPattern(network, stack)) { stacks.remove(otherStack.getItem(), otherStack); } From c968eedff1f4a700788b8d4b2c6a19a70507c5c9 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Fri, 12 Aug 2016 02:26:40 +0200 Subject: [PATCH 162/214] Check if cap exists first --- src/main/java/refinedstorage/tile/TileBase.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/refinedstorage/tile/TileBase.java b/src/main/java/refinedstorage/tile/TileBase.java index fb7a92ac9..9cac1603a 100755 --- a/src/main/java/refinedstorage/tile/TileBase.java +++ b/src/main/java/refinedstorage/tile/TileBase.java @@ -205,7 +205,7 @@ public abstract class TileBase extends TileEntity implements ITickable { return null; } - IItemHandler handler = tile.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, side); + IItemHandler handler = tile.hasCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, side) ? tile.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY, side) : null; if (handler == null) { if (side != null && tile instanceof ISidedInventory) { From b90e3f75087a7179a90bfb45fa26081cb32ed0b0 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Fri, 12 Aug 2016 17:15:05 +0200 Subject: [PATCH 163/214] Version bump to 0.9 --- build.gradle | 2 +- src/main/java/refinedstorage/RefinedStorage.java | 2 +- src/main/resources/mcmod.info | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/build.gradle b/build.gradle index 287b9f973..29331e13a 100755 --- a/build.gradle +++ b/build.gradle @@ -12,7 +12,7 @@ buildscript { } apply plugin: 'net.minecraftforge.gradle.forge' -version = "0.8.19" +version = "0.9" group = "refinedstorage" archivesBaseName = "refinedstorage" diff --git a/src/main/java/refinedstorage/RefinedStorage.java b/src/main/java/refinedstorage/RefinedStorage.java index e71ccbba1..e65a4c11d 100755 --- a/src/main/java/refinedstorage/RefinedStorage.java +++ b/src/main/java/refinedstorage/RefinedStorage.java @@ -18,7 +18,7 @@ import refinedstorage.proxy.CommonProxy; @Mod(modid = RefinedStorage.ID, version = RefinedStorage.VERSION, dependencies = RefinedStorage.DEPENDENCIES) public final class RefinedStorage { public static final String ID = "refinedstorage"; - public static final String VERSION = "0.8.19"; + public static final String VERSION = "0.9"; public static final String DEPENDENCIES = "required-after:mcmultipart@[1.2.1,);"; @SidedProxy(clientSide = "refinedstorage.proxy.ClientProxy", serverSide = "refinedstorage.proxy.ServerProxy") diff --git a/src/main/resources/mcmod.info b/src/main/resources/mcmod.info index 010089b80..d352c688c 100755 --- a/src/main/resources/mcmod.info +++ b/src/main/resources/mcmod.info @@ -3,7 +3,7 @@ "modid": "refinedstorage", "name": "Refined Storage", "description": "A Minecraft mod all about storage.", - "version": "0.8.19", + "version": "0.9", "mcversion": "1.10.2", "url": "", "updateUrl": "", From 2d1cadffea6bc977570fc67ea9f27ba67f4e00e9 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Fri, 12 Aug 2016 17:58:01 +0200 Subject: [PATCH 164/214] Add all classes and methods regarding fluid storage --- .../api/network/INetworkMaster.java | 29 +++ .../api/network/grid/GridExtractFlags.java | 10 - .../api/network/grid/IItemGridHandler.java | 6 +- .../api/storage/IStorageProvider.java | 17 -- .../api/storage/fluid/IFluidStorage.java | 54 +++++ .../storage/fluid/IFluidStorageProvider.java | 15 ++ .../storage/fluid/IGroupedFluidStorage.java | 68 ++++++ .../api/storage/item/IGroupedItemStorage.java | 3 +- .../api/storage/item/IItemStorage.java | 6 +- .../storage/item/IItemStorageProvider.java | 15 ++ .../network/{ => grid}/ItemGridHandler.java | 12 +- .../storage/fluid/FluidStorageNBT.java | 212 ++++++++++++++++++ .../apiimpl/storage/fluid/FluidUtils.java | 11 + .../storage/fluid/GroupedFluidStorage.java | 93 ++++++++ .../storage/item/GroupedItemStorage.java | 6 +- .../gui/grid/GuiCraftingSettings.java | 2 +- .../java/refinedstorage/gui/grid/GuiGrid.java | 8 +- .../refinedstorage/tile/TileController.java | 79 ++++++- .../refinedstorage/tile/TileDiskDrive.java | 4 +- .../java/refinedstorage/tile/TileStorage.java | 4 +- .../externalstorage/TileExternalStorage.java | 4 +- 21 files changed, 603 insertions(+), 55 deletions(-) delete mode 100755 src/main/java/refinedstorage/api/network/grid/GridExtractFlags.java delete mode 100755 src/main/java/refinedstorage/api/storage/IStorageProvider.java create mode 100755 src/main/java/refinedstorage/api/storage/fluid/IFluidStorage.java create mode 100755 src/main/java/refinedstorage/api/storage/fluid/IFluidStorageProvider.java create mode 100755 src/main/java/refinedstorage/api/storage/fluid/IGroupedFluidStorage.java create mode 100755 src/main/java/refinedstorage/api/storage/item/IItemStorageProvider.java rename src/main/java/refinedstorage/apiimpl/network/{ => grid}/ItemGridHandler.java (90%) create mode 100755 src/main/java/refinedstorage/apiimpl/storage/fluid/FluidStorageNBT.java create mode 100755 src/main/java/refinedstorage/apiimpl/storage/fluid/FluidUtils.java create mode 100755 src/main/java/refinedstorage/apiimpl/storage/fluid/GroupedFluidStorage.java diff --git a/src/main/java/refinedstorage/api/network/INetworkMaster.java b/src/main/java/refinedstorage/api/network/INetworkMaster.java index 8e7877e88..b5178c2ed 100755 --- a/src/main/java/refinedstorage/api/network/INetworkMaster.java +++ b/src/main/java/refinedstorage/api/network/INetworkMaster.java @@ -4,10 +4,12 @@ import cofh.api.energy.EnergyStorage; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.ItemStack; import net.minecraft.util.math.BlockPos; +import net.minecraftforge.fluids.FluidStack; import refinedstorage.api.autocrafting.ICraftingPattern; import refinedstorage.api.autocrafting.ICraftingTask; import refinedstorage.api.network.grid.IItemGridHandler; import refinedstorage.api.storage.CompareUtils; +import refinedstorage.api.storage.fluid.IGroupedFluidStorage; import refinedstorage.api.storage.item.IGroupedItemStorage; import javax.annotation.Nonnull; @@ -58,6 +60,11 @@ public interface INetworkMaster { */ IGroupedItemStorage getItemStorage(); + /** + * @return The {@link IGroupedFluidStorage} of this network + */ + IGroupedFluidStorage getFluidStorage(); + /** * @return The crafting tasks in this network, do NOT modify this list */ @@ -158,4 +165,26 @@ public interface INetworkMaster { */ @Nullable ItemStack extractItem(@Nonnull ItemStack stack, int size, int flags); + + /** + * Inserts a fluid to this network. + * + * @param stack The stack prototype to insert, do NOT modify + * @param size The amount of that prototype that has to be inserted + * @param simulate If we are simulating + * @return null if the insert was successful, or an {@link FluidStack} with the remainder + */ + @Nullable + FluidStack insertFluid(@Nonnull FluidStack stack, int size, boolean simulate); + + /** + * Extracts a fluid from this network. + * + * @param stack The prototype of the stack to extract, do NOT modify + * @param size The amount of that prototype that has to be extracted + * @param flags The flags to compare on, see {@link CompareUtils} + * @return null if we didn't extract anything, or a {@link FluidStack} with the result + */ + @Nullable + FluidStack extractFluid(@Nonnull FluidStack stack, int size, int flags); } diff --git a/src/main/java/refinedstorage/api/network/grid/GridExtractFlags.java b/src/main/java/refinedstorage/api/network/grid/GridExtractFlags.java deleted file mode 100755 index 43d9466e7..000000000 --- a/src/main/java/refinedstorage/api/network/grid/GridExtractFlags.java +++ /dev/null @@ -1,10 +0,0 @@ -package refinedstorage.api.network.grid; - -/** - * Flags for knowing what extract action the player is performing, these can be combined. - */ -public final class GridExtractFlags { - public static final int EXTRACT_HALF = 1; - public static final int EXTRACT_SINGLE = 2; - public static final int EXTRACT_SHIFT = 4; -} diff --git a/src/main/java/refinedstorage/api/network/grid/IItemGridHandler.java b/src/main/java/refinedstorage/api/network/grid/IItemGridHandler.java index edbaa231b..a2a59327a 100755 --- a/src/main/java/refinedstorage/api/network/grid/IItemGridHandler.java +++ b/src/main/java/refinedstorage/api/network/grid/IItemGridHandler.java @@ -9,11 +9,15 @@ import javax.annotation.Nullable; * Defines the behavior of item grids. */ public interface IItemGridHandler { + int EXTRACT_HALF = 1; + int EXTRACT_SINGLE = 2; + int EXTRACT_SHIFT = 4; + /** * Called when a player tries to extract an item from the grid. * * @param hash The hash of the item we're trying to extract, see {@link refinedstorage.api.network.NetworkUtils#getItemStackHashCode(ItemStack)} - * @param flags How we are extracting, see {@link GridExtractFlags} + * @param flags How we are extracting * @param player The player that is attempting the extraction */ void onExtract(int hash, int flags, EntityPlayerMP player); diff --git a/src/main/java/refinedstorage/api/storage/IStorageProvider.java b/src/main/java/refinedstorage/api/storage/IStorageProvider.java deleted file mode 100755 index 8eeb148b4..000000000 --- a/src/main/java/refinedstorage/api/storage/IStorageProvider.java +++ /dev/null @@ -1,17 +0,0 @@ -package refinedstorage.api.storage; - -import refinedstorage.api.storage.item.IItemStorage; - -import java.util.List; - -/** - * Represents a tile that provides storage to the network. Implement this on a tile that is a {@link refinedstorage.api.network.INetworkNode}. - */ -public interface IStorageProvider { - /** - * Adds the item storages that this storage provider provides. - * - * @param storages The previously added item storages - */ - void addItemStorages(List storages); -} diff --git a/src/main/java/refinedstorage/api/storage/fluid/IFluidStorage.java b/src/main/java/refinedstorage/api/storage/fluid/IFluidStorage.java new file mode 100755 index 000000000..33c3e99a3 --- /dev/null +++ b/src/main/java/refinedstorage/api/storage/fluid/IFluidStorage.java @@ -0,0 +1,54 @@ +package refinedstorage.api.storage.fluid; + +import net.minecraftforge.fluids.FluidStack; +import refinedstorage.api.storage.CompareUtils; +import refinedstorage.api.storage.item.IItemStorageProvider; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import java.util.List; + +/** + * Represents a fluid storage sink for the storage network. + * Provide this through an {@link IItemStorageProvider}. + */ +public interface IFluidStorage { + /** + * @return Fluids stored in this storage + */ + List getStacks(); + + /** + * Inserts a fluid to this storage. + * + * @param stack The fluid prototype to insert, do NOT modify + * @param size The amount of that prototype that has to be inserted + * @param simulate If we are simulating + * @return null if the insert was successful, or a {@link FluidStack} with the remainder + */ + @Nullable + FluidStack insertFluid(@Nonnull FluidStack stack, int size, boolean simulate); + + /** + * Extracts a fluid from this storage. + *

+ * If the fluid we found in the system is smaller than the requested size, return that fluid anyway. + * + * @param stack A prototype of the fluid to extract, do NOT modify + * @param size The amount of that fluid that has to be extracted + * @param flags On what we are comparing to extract this fluid, see {@link CompareUtils} + * @return null if we didn't extract anything, or an {@link FluidStack} with the result + */ + @Nullable + FluidStack extractFluid(@Nonnull FluidStack stack, int size, int flags); + + /** + * @return The amount of fluids stored in this storage + */ + int getStored(); + + /** + * @return The priority of this storage + */ + int getPriority(); +} diff --git a/src/main/java/refinedstorage/api/storage/fluid/IFluidStorageProvider.java b/src/main/java/refinedstorage/api/storage/fluid/IFluidStorageProvider.java new file mode 100755 index 000000000..a26562f27 --- /dev/null +++ b/src/main/java/refinedstorage/api/storage/fluid/IFluidStorageProvider.java @@ -0,0 +1,15 @@ +package refinedstorage.api.storage.fluid; + +import java.util.List; + +/** + * Represents a tile that provides item storage to the network. Implement this on a tile that is a {@link refinedstorage.api.network.INetworkNode}. + */ +public interface IFluidStorageProvider { + /** + * Adds the fluid storages that this storage provider provides. + * + * @param storages The previously added fluid storages + */ + void addFluidStorages(List storages); +} diff --git a/src/main/java/refinedstorage/api/storage/fluid/IGroupedFluidStorage.java b/src/main/java/refinedstorage/api/storage/fluid/IGroupedFluidStorage.java new file mode 100755 index 000000000..ec12b05f9 --- /dev/null +++ b/src/main/java/refinedstorage/api/storage/fluid/IGroupedFluidStorage.java @@ -0,0 +1,68 @@ +package refinedstorage.api.storage.fluid; + +import net.minecraftforge.fluids.FluidStack; +import refinedstorage.api.network.INetworkMaster; +import refinedstorage.api.storage.CompareUtils; +import refinedstorage.api.storage.item.IItemStorageProvider; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import java.util.Collection; +import java.util.List; + +/** + * This holds all fluids from all the connected storages from a {@link INetworkMaster}. + *

+ * Refined Storage uses this class mainly for use in Grids and Detectors to avoid querying + * individual {@link IFluidStorage} constantly (performance impact) and to send and detect storage changes + * more efficiently. + */ +public interface IGroupedFluidStorage { + /** + * Rebuilds the global fluid list. Typically called when a {@link IItemStorageProvider} is added or removed from the network. + */ + void rebuild(); + + /** + * Adds an item to the global fluid list. + *

+ * Note that this doesn't modify any of the connected storages, but just modifies the global fluid list. + * Use {@link INetworkMaster#insertFluid(FluidStack, int, boolean)} to add a fluid to an actual storage. + *

+ * Will merge it with another fluid if it already exists. + * + * @param stack The fluid to add, do NOT modify + * @param rebuilding Whether this method is called while the storage is rebuilding + */ + void add(@Nonnull FluidStack stack, boolean rebuilding); + + /** + * Removes a fluid from the global fluid list. + *

+ * Note that this doesn't modify any of the connected storages, but just modifies the global fluid list. + * Use {@link INetworkMaster#extractFluid(FluidStack, int, int)} to remove an fluid from an actual storage. + * + * @param stack The fluid to remove, do NOT modify + */ + void remove(@Nonnull FluidStack stack); + + /** + * Gets a fluid from the network. + * + * @param stack The stack to find + * @param flags The flags to compare on, see {@link CompareUtils} + * @return Null if no fluid is found, or the {@link FluidStack}, do NOT modify + */ + @Nullable + FluidStack get(@Nonnull FluidStack stack, int flags); + + /** + * @return All fluids in this storage network + */ + Collection getStacks(); + + /** + * @return The fluid storages connected to this network + */ + List getStorages(); +} diff --git a/src/main/java/refinedstorage/api/storage/item/IGroupedItemStorage.java b/src/main/java/refinedstorage/api/storage/item/IGroupedItemStorage.java index 310d71092..c4f9291d5 100755 --- a/src/main/java/refinedstorage/api/storage/item/IGroupedItemStorage.java +++ b/src/main/java/refinedstorage/api/storage/item/IGroupedItemStorage.java @@ -3,7 +3,6 @@ package refinedstorage.api.storage.item; import net.minecraft.item.ItemStack; import refinedstorage.api.network.INetworkMaster; import refinedstorage.api.storage.CompareUtils; -import refinedstorage.api.storage.IStorageProvider; import javax.annotation.Nonnull; import javax.annotation.Nullable; @@ -19,7 +18,7 @@ import java.util.List; */ public interface IGroupedItemStorage { /** - * Rebuilds the global item list. Typically called when a {@link IStorageProvider} is added or removed from the network. + * Rebuilds the global item list. Typically called when a {@link IItemStorageProvider} is added or removed from the network. */ void rebuild(); diff --git a/src/main/java/refinedstorage/api/storage/item/IItemStorage.java b/src/main/java/refinedstorage/api/storage/item/IItemStorage.java index 09e4343ae..a30bb0134 100755 --- a/src/main/java/refinedstorage/api/storage/item/IItemStorage.java +++ b/src/main/java/refinedstorage/api/storage/item/IItemStorage.java @@ -2,7 +2,6 @@ package refinedstorage.api.storage.item; import net.minecraft.item.ItemStack; import refinedstorage.api.storage.CompareUtils; -import refinedstorage.api.storage.IStorageProvider; import javax.annotation.Nonnull; import javax.annotation.Nullable; @@ -10,7 +9,7 @@ import java.util.List; /** * Represents an item storage sink for the storage network. - * Provide this through an {@link IStorageProvider}. + * Provide this through an {@link IItemStorageProvider}. */ public interface IItemStorage { /** @@ -32,8 +31,7 @@ public interface IItemStorage { /** * Extracts an item from this storage. *

- * If the stack we found in the system is smaller than the requested size, return the stack anyway. - * For example: if this method is called for dirt (64x) while there is only dirt (32x), return the dirt (32x) anyway. + * If the stack we found in the system is smaller than the requested size, return that stack anyway. * * @param stack A prototype of the stack to extract, do NOT modify * @param size The amount of that prototype that has to be extracted diff --git a/src/main/java/refinedstorage/api/storage/item/IItemStorageProvider.java b/src/main/java/refinedstorage/api/storage/item/IItemStorageProvider.java new file mode 100755 index 000000000..e0e365df6 --- /dev/null +++ b/src/main/java/refinedstorage/api/storage/item/IItemStorageProvider.java @@ -0,0 +1,15 @@ +package refinedstorage.api.storage.item; + +import java.util.List; + +/** + * Represents a tile that provides item storage to the network. Implement this on a tile that is a {@link refinedstorage.api.network.INetworkNode}. + */ +public interface IItemStorageProvider { + /** + * Adds the item storages that this storage provider provides. + * + * @param storages The previously added item storages + */ + void addItemStorages(List storages); +} diff --git a/src/main/java/refinedstorage/apiimpl/network/ItemGridHandler.java b/src/main/java/refinedstorage/apiimpl/network/grid/ItemGridHandler.java similarity index 90% rename from src/main/java/refinedstorage/apiimpl/network/ItemGridHandler.java rename to src/main/java/refinedstorage/apiimpl/network/grid/ItemGridHandler.java index 4f9b27336..8a43432ef 100755 --- a/src/main/java/refinedstorage/apiimpl/network/ItemGridHandler.java +++ b/src/main/java/refinedstorage/apiimpl/network/grid/ItemGridHandler.java @@ -1,4 +1,4 @@ -package refinedstorage.apiimpl.network; +package refinedstorage.apiimpl.network.grid; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.inventory.InventoryHelper; @@ -7,9 +7,9 @@ import refinedstorage.api.autocrafting.ICraftingPattern; import refinedstorage.api.autocrafting.ICraftingTask; import refinedstorage.api.network.INetworkMaster; import refinedstorage.api.network.NetworkUtils; -import refinedstorage.api.network.grid.GridExtractFlags; import refinedstorage.api.network.grid.IItemGridHandler; import refinedstorage.api.storage.CompareUtils; +import refinedstorage.apiimpl.network.WirelessGridHandler; public class ItemGridHandler implements IItemGridHandler { public static final int MAX_CRAFTING_PER_REQUEST = 500; @@ -30,7 +30,7 @@ public class ItemGridHandler implements IItemGridHandler { int itemSize = item.stackSize; - boolean single = (flags & GridExtractFlags.EXTRACT_SINGLE) == GridExtractFlags.EXTRACT_SINGLE; + boolean single = (flags & EXTRACT_SINGLE) == EXTRACT_SINGLE; ItemStack held = player.inventory.getItemStack(); @@ -44,7 +44,7 @@ public class ItemGridHandler implements IItemGridHandler { int size = 64; - if ((flags & GridExtractFlags.EXTRACT_HALF) == GridExtractFlags.EXTRACT_HALF && itemSize > 1) { + if ((flags & EXTRACT_HALF) == EXTRACT_HALF && itemSize > 1) { size = itemSize / 2; if (size > 32) { @@ -52,7 +52,7 @@ public class ItemGridHandler implements IItemGridHandler { } } else if (single) { size = 1; - } else if ((flags & GridExtractFlags.EXTRACT_SHIFT) == GridExtractFlags.EXTRACT_SHIFT) { + } else if ((flags & EXTRACT_SHIFT) == EXTRACT_SHIFT) { // NO OP, the quantity already set (64) is needed for shift } @@ -61,7 +61,7 @@ public class ItemGridHandler implements IItemGridHandler { ItemStack took = NetworkUtils.extractItem(network, item, size); if (took != null) { - if ((flags & GridExtractFlags.EXTRACT_SHIFT) == GridExtractFlags.EXTRACT_SHIFT) { + if ((flags & EXTRACT_SHIFT) == EXTRACT_SHIFT) { if (!player.inventory.addItemStackToInventory(took.copy())) { InventoryHelper.spawnItemStack(player.worldObj, player.getPosition().getX(), player.getPosition().getY(), player.getPosition().getZ(), took); } diff --git a/src/main/java/refinedstorage/apiimpl/storage/fluid/FluidStorageNBT.java b/src/main/java/refinedstorage/apiimpl/storage/fluid/FluidStorageNBT.java new file mode 100755 index 000000000..ff1b81ac4 --- /dev/null +++ b/src/main/java/refinedstorage/apiimpl/storage/fluid/FluidStorageNBT.java @@ -0,0 +1,212 @@ +package refinedstorage.apiimpl.storage.fluid; + +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.fluids.FluidStack; +import refinedstorage.api.storage.fluid.IFluidStorage; + +import javax.annotation.Nullable; +import java.util.ArrayList; +import java.util.List; + +/** + * A implementation of {@link IFluidStorage} that stores storage fluids in NBT. + */ +public abstract class FluidStorageNBT implements IFluidStorage { + /** + * The current save protocol that is used. It's set to every {@link FluidStorageNBT} to allow for + * safe backwards compatibility breaks. + */ + private static final int PROTOCOL = 1; + + private static final String NBT_PROTOCOL = "Protocol"; + + private static final String NBT_FLUIDS = "Fluids"; + private static final String NBT_STORED = "Stored"; + + private NBTTagCompound tag; + private int capacity; + private TileEntity tile; + + private List stacks = new ArrayList<>(); + + /** + * @param tag The NBT tag we are reading from and writing the amount stored to, has to be initialized with {@link FluidStorageNBT#createNBT()} if it doesn't exist yet + * @param capacity The capacity of this storage, -1 for infinite capacity + * @param tile A {@link TileEntity} that the NBT storage is in, will be marked dirty when the storage changes + */ + public FluidStorageNBT(NBTTagCompound tag, int capacity, @Nullable TileEntity tile) { + this.tag = tag; + this.capacity = capacity; + this.tile = tile; + + readFromNBT(); + } + + public void readFromNBT() { + NBTTagList list = (NBTTagList) tag.getTag(NBT_FLUIDS); + + for (int i = 0; i < list.tagCount(); ++i) { + stacks.add(FluidStack.loadFluidStackFromNBT(list.getCompoundTagAt(i))); + } + } + + /** + * Writes the items to the NBT tag. + */ + public void writeToNBT() { + NBTTagList list = new NBTTagList(); + + for (FluidStack stack : stacks) { + list.appendTag(stack.writeToNBT(new NBTTagCompound())); + } + + tag.setTag(NBT_FLUIDS, list); + tag.setInteger(NBT_PROTOCOL, PROTOCOL); + } + + @Override + public List getStacks() { + return stacks; + } + + @Override + public FluidStack insertFluid(FluidStack stack, int size, boolean simulate) { + for (FluidStack otherStack : stacks) { + if (otherStack.isFluidEqual(stack)) { + if (getCapacity() != -1 && getStored() + size > getCapacity()) { + int remainingSpace = getCapacity() - getStored(); + + if (remainingSpace <= 0) { + return FluidUtils.copyStackWithSize(stack, size); + } + + if (!simulate) { + tag.setInteger(NBT_STORED, getStored() + remainingSpace); + + otherStack.amount += remainingSpace; + + onStorageChanged(); + } + + return FluidUtils.copyStackWithSize(otherStack, size - remainingSpace); + } else { + if (!simulate) { + tag.setInteger(NBT_STORED, getStored() + size); + + otherStack.amount += size; + + onStorageChanged(); + } + + return null; + } + } + } + + if (getCapacity() != -1 && getStored() + size > getCapacity()) { + int remainingSpace = getCapacity() - getStored(); + + if (remainingSpace <= 0) { + return FluidUtils.copyStackWithSize(stack, size); + } + + if (!simulate) { + tag.setInteger(NBT_STORED, getStored() + remainingSpace); + + stacks.add(FluidUtils.copyStackWithSize(stack, remainingSpace)); + + onStorageChanged(); + } + + return FluidUtils.copyStackWithSize(stack, size - remainingSpace); + } else { + if (!simulate) { + tag.setInteger(NBT_STORED, getStored() + size); + + stacks.add(FluidUtils.copyStackWithSize(stack, size)); + + onStorageChanged(); + } + + return null; + } + } + + @Override + public FluidStack extractFluid(FluidStack stack, int size, int flags) { + for (FluidStack otherStack : stacks) { + if (otherStack.isFluidEqual(stack)) { + if (size > otherStack.amount) { + size = otherStack.amount; + } + + if (otherStack.amount - size == 0) { + stacks.remove(otherStack); + } else { + otherStack.amount -= size; + } + + tag.setInteger(NBT_STORED, getStored() - size); + + onStorageChanged(); + + return FluidUtils.copyStackWithSize(otherStack, size); + } + } + + return null; + } + + public void onStorageChanged() { + if (tile != null) { + tile.markDirty(); + } + } + + @Override + public int getStored() { + return getStoredFromNBT(tag); + } + + public int getCapacity() { + return capacity; + } + + public NBTTagCompound getTag() { + return tag; + } + + public static int getStoredFromNBT(NBTTagCompound tag) { + return tag.getInteger(NBT_STORED); + } + + /* + * @return A NBT tag initialized with the fields that {@link NBTStorage} uses + */ + public static NBTTagCompound createNBT() { + NBTTagCompound tag = new NBTTagCompound(); + + tag.setTag(NBT_FLUIDS, new NBTTagList()); + tag.setInteger(NBT_STORED, 0); + tag.setInteger(NBT_PROTOCOL, PROTOCOL); + + return tag; + } + + public static boolean isValid(ItemStack stack) { + return stack.hasTagCompound() && stack.getTagCompound().hasKey(NBT_FLUIDS) && stack.getTagCompound().hasKey(NBT_STORED); + } + + /** + * @param stack The {@link ItemStack} to populate with the NBT tags from {@link FluidStorageNBT#createNBT()} + * @return The provided {@link ItemStack} with NBT tags from {@link FluidStorageNBT#createNBT()} + */ + public static ItemStack createStackWithNBT(ItemStack stack) { + stack.setTagCompound(createNBT()); + + return stack; + } +} diff --git a/src/main/java/refinedstorage/apiimpl/storage/fluid/FluidUtils.java b/src/main/java/refinedstorage/apiimpl/storage/fluid/FluidUtils.java new file mode 100755 index 000000000..2a84f3dac --- /dev/null +++ b/src/main/java/refinedstorage/apiimpl/storage/fluid/FluidUtils.java @@ -0,0 +1,11 @@ +package refinedstorage.apiimpl.storage.fluid; + +import net.minecraftforge.fluids.FluidStack; + +public final class FluidUtils { + public static FluidStack copyStackWithSize(FluidStack stack, int size) { + FluidStack copy = stack.copy(); + copy.amount = size; + return copy; + } +} diff --git a/src/main/java/refinedstorage/apiimpl/storage/fluid/GroupedFluidStorage.java b/src/main/java/refinedstorage/apiimpl/storage/fluid/GroupedFluidStorage.java new file mode 100755 index 000000000..eba08be93 --- /dev/null +++ b/src/main/java/refinedstorage/apiimpl/storage/fluid/GroupedFluidStorage.java @@ -0,0 +1,93 @@ +package refinedstorage.apiimpl.storage.fluid; + +import com.google.common.collect.ArrayListMultimap; +import com.google.common.collect.Multimap; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidStack; +import refinedstorage.api.network.INetworkMaster; +import refinedstorage.api.storage.fluid.IFluidStorage; +import refinedstorage.api.storage.fluid.IFluidStorageProvider; +import refinedstorage.api.storage.fluid.IGroupedFluidStorage; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +public class GroupedFluidStorage implements IGroupedFluidStorage { + private INetworkMaster network; + private List storages = new ArrayList<>(); + private Multimap stacks = ArrayListMultimap.create(); + + public GroupedFluidStorage(INetworkMaster network) { + this.network = network; + } + + @Override + public void rebuild() { + storages.clear(); + + network.getNodeGraph().all().stream() + .filter(node -> node.canUpdate() && node instanceof IFluidStorageProvider) + .forEach(node -> ((IFluidStorageProvider) node).addFluidStorages(storages)); + + stacks.clear(); + + for (IFluidStorage storage : storages) { + for (FluidStack stack : storage.getStacks()) { + add(stack, true); + } + } + } + + @Override + public void add(@Nonnull FluidStack stack, boolean rebuilding) { + for (FluidStack otherStack : stacks.get(stack.getFluid())) { + if (otherStack.isFluidEqual(stack)) { + otherStack.amount += stack.amount; + + return; + } + } + + stacks.put(stack.getFluid(), stack.copy()); + } + + @Override + public void remove(@Nonnull FluidStack stack) { + for (FluidStack otherStack : stacks.get(stack.getFluid())) { + if (otherStack.isFluidEqual(stack)) { + otherStack.amount -= stack.amount; + + if (otherStack.amount == 0) { + stacks.remove(otherStack.getFluid(), otherStack); + } + + return; + } + } + } + + @Override + @Nullable + public FluidStack get(@Nonnull FluidStack stack, int flags) { + for (FluidStack otherStack : stacks.get(stack.getFluid())) { + if (otherStack.isFluidEqual(stack)) { + return otherStack; + } + } + + return null; + } + + @Override + public Collection getStacks() { + return stacks.values(); + } + + @Override + public List getStorages() { + return storages; + } +} diff --git a/src/main/java/refinedstorage/apiimpl/storage/item/GroupedItemStorage.java b/src/main/java/refinedstorage/apiimpl/storage/item/GroupedItemStorage.java index 4c751672e..8fc055d89 100755 --- a/src/main/java/refinedstorage/apiimpl/storage/item/GroupedItemStorage.java +++ b/src/main/java/refinedstorage/apiimpl/storage/item/GroupedItemStorage.java @@ -8,9 +8,9 @@ import refinedstorage.api.autocrafting.ICraftingPattern; import refinedstorage.api.network.INetworkMaster; import refinedstorage.api.network.NetworkUtils; import refinedstorage.api.storage.CompareUtils; -import refinedstorage.api.storage.IStorageProvider; import refinedstorage.api.storage.item.IGroupedItemStorage; import refinedstorage.api.storage.item.IItemStorage; +import refinedstorage.api.storage.item.IItemStorageProvider; import javax.annotation.Nonnull; import javax.annotation.Nullable; @@ -32,8 +32,8 @@ public class GroupedItemStorage implements IGroupedItemStorage { storages.clear(); network.getNodeGraph().all().stream() - .filter(node -> node.canUpdate() && node instanceof IStorageProvider) - .forEach(node -> ((IStorageProvider) node).addItemStorages(storages)); + .filter(node -> node.canUpdate() && node instanceof IItemStorageProvider) + .forEach(node -> ((IItemStorageProvider) node).addItemStorages(storages)); stacks.clear(); diff --git a/src/main/java/refinedstorage/gui/grid/GuiCraftingSettings.java b/src/main/java/refinedstorage/gui/grid/GuiCraftingSettings.java index 09382cf51..279fa8013 100755 --- a/src/main/java/refinedstorage/gui/grid/GuiCraftingSettings.java +++ b/src/main/java/refinedstorage/gui/grid/GuiCraftingSettings.java @@ -7,7 +7,7 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraftforge.fml.client.FMLClientHandler; import org.lwjgl.input.Keyboard; import refinedstorage.RefinedStorage; -import refinedstorage.apiimpl.network.ItemGridHandler; +import refinedstorage.apiimpl.network.grid.ItemGridHandler; import refinedstorage.container.ContainerCraftingSettings; import refinedstorage.gui.GuiBase; import refinedstorage.network.MessageGridCraftingStart; diff --git a/src/main/java/refinedstorage/gui/grid/GuiGrid.java b/src/main/java/refinedstorage/gui/grid/GuiGrid.java index e18c55921..8a788be61 100755 --- a/src/main/java/refinedstorage/gui/grid/GuiGrid.java +++ b/src/main/java/refinedstorage/gui/grid/GuiGrid.java @@ -13,7 +13,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.util.math.BlockPos; import net.minecraftforge.fml.common.FMLCommonHandler; import refinedstorage.RefinedStorage; -import refinedstorage.api.network.grid.GridExtractFlags; +import refinedstorage.api.network.grid.IItemGridHandler; import refinedstorage.api.storage.CompareUtils; import refinedstorage.block.EnumGridType; import refinedstorage.container.ContainerGrid; @@ -372,15 +372,15 @@ public class GuiGrid extends GuiBase { int flags = 0; if (clickedButton == 1) { - flags |= GridExtractFlags.EXTRACT_HALF; + flags |= IItemGridHandler.EXTRACT_HALF; } if (GuiScreen.isShiftKeyDown()) { - flags |= GridExtractFlags.EXTRACT_SHIFT; + flags |= IItemGridHandler.EXTRACT_SHIFT; } if (clickedButton == 2) { - flags |= GridExtractFlags.EXTRACT_SINGLE; + flags |= IItemGridHandler.EXTRACT_SINGLE; } RefinedStorage.INSTANCE.network.sendToServer(new MessageGridPull(SORTED_ITEMS.get(slotNumber).getId(), flags)); diff --git a/src/main/java/refinedstorage/tile/TileController.java b/src/main/java/refinedstorage/tile/TileController.java index ac15d8034..be2ba1ede 100755 --- a/src/main/java/refinedstorage/tile/TileController.java +++ b/src/main/java/refinedstorage/tile/TileController.java @@ -14,6 +14,7 @@ import net.minecraft.util.EnumFacing; import net.minecraft.util.math.BlockPos; import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.common.util.Constants; +import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.items.ItemHandlerHelper; import refinedstorage.RefinedStorage; import refinedstorage.RefinedStorageBlocks; @@ -23,14 +24,18 @@ import refinedstorage.api.autocrafting.ICraftingTask; import refinedstorage.api.network.*; import refinedstorage.api.network.grid.IItemGridHandler; import refinedstorage.api.storage.CompareUtils; +import refinedstorage.api.storage.fluid.IFluidStorage; +import refinedstorage.api.storage.fluid.IGroupedFluidStorage; import refinedstorage.api.storage.item.IGroupedItemStorage; import refinedstorage.api.storage.item.IItemStorage; import refinedstorage.apiimpl.autocrafting.BasicCraftingTask; import refinedstorage.apiimpl.autocrafting.CraftingPattern; import refinedstorage.apiimpl.autocrafting.ProcessingCraftingTask; -import refinedstorage.apiimpl.network.ItemGridHandler; import refinedstorage.apiimpl.network.NetworkNodeGraph; import refinedstorage.apiimpl.network.WirelessGridHandler; +import refinedstorage.apiimpl.network.grid.ItemGridHandler; +import refinedstorage.apiimpl.storage.fluid.FluidUtils; +import refinedstorage.apiimpl.storage.fluid.GroupedFluidStorage; import refinedstorage.apiimpl.storage.item.GroupedItemStorage; import refinedstorage.block.BlockController; import refinedstorage.block.EnumControllerType; @@ -51,6 +56,8 @@ import refinedstorage.tile.data.RefinedStorageSerializers; import refinedstorage.tile.data.TileDataParameter; import refinedstorage.tile.externalstorage.ItemStorageExternal; +import javax.annotation.Nonnull; +import javax.annotation.Nullable; import java.util.*; public class TileController extends TileBase implements INetworkMaster, IEnergyReceiver, IRedstoneConfigurable { @@ -137,7 +144,9 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR private WirelessGridHandler wirelessGridHandler = new WirelessGridHandler(this); private INetworkNodeGraph nodeGraph = new NetworkNodeGraph(this); + private IGroupedItemStorage itemStorage = new GroupedItemStorage(this); + private IGroupedFluidStorage fluidStorage = new GroupedFluidStorage(this); private List patterns = new ArrayList<>(); @@ -324,6 +333,11 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR return itemStorage; } + @Override + public IGroupedFluidStorage getFluidStorage() { + return fluidStorage; + } + @Override public List getCraftingTasks() { return craftingTasks; @@ -537,6 +551,69 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR return newStack; } + @Nullable + @Override + public FluidStack insertFluid(@Nonnull FluidStack stack, int size, boolean simulate) { + if (stack == null || fluidStorage.getStorages().isEmpty()) { + return FluidUtils.copyStackWithSize(stack, size); + } + + int orginalSize = size; + + FluidStack remainder = stack; + + for (IFluidStorage storage : this.fluidStorage.getStorages()) { + remainder = storage.insertFluid(remainder, size, simulate); + + if (remainder == null) { + break; + } else { + size = remainder.amount; + } + } + + int inserted = remainder != null ? (orginalSize - remainder.amount) : orginalSize; + + if (!simulate && inserted > 0) { + fluidStorage.add(FluidUtils.copyStackWithSize(stack, inserted), false); + } + + return remainder; + } + + @Nullable + @Override + public FluidStack extractFluid(@Nonnull FluidStack stack, int size, int flags) { + int requested = size; + int received = 0; + + FluidStack newStack = null; + + for (IFluidStorage storage : this.fluidStorage.getStorages()) { + FluidStack took = storage.extractFluid(stack, requested - received, flags); + + if (took != null) { + if (newStack == null) { + newStack = took; + } else { + newStack.amount += took.amount; + } + + received += took.amount; + } + + if (requested == received) { + break; + } + } + + if (newStack != null) { + fluidStorage.remove(newStack); + } + + return newStack; + } + @Override public void readFromNBT(NBTTagCompound tag) { super.readFromNBT(tag); diff --git a/src/main/java/refinedstorage/tile/TileDiskDrive.java b/src/main/java/refinedstorage/tile/TileDiskDrive.java index fabf13437..f6219e41b 100755 --- a/src/main/java/refinedstorage/tile/TileDiskDrive.java +++ b/src/main/java/refinedstorage/tile/TileDiskDrive.java @@ -12,8 +12,8 @@ import net.minecraftforge.items.ItemHandlerHelper; import refinedstorage.RefinedStorage; import refinedstorage.RefinedStorageItems; import refinedstorage.api.network.INetworkMaster; -import refinedstorage.api.storage.IStorageProvider; import refinedstorage.api.storage.item.IItemStorage; +import refinedstorage.api.storage.item.IItemStorageProvider; import refinedstorage.apiimpl.storage.item.ItemStorageNBT; import refinedstorage.block.EnumStorageType; import refinedstorage.inventory.ItemHandlerBasic; @@ -25,7 +25,7 @@ import refinedstorage.tile.data.TileDataParameter; import java.util.List; -public class TileDiskDrive extends TileNode implements IStorageProvider, IStorageGui, IComparable, IFilterable, IPrioritizable { +public class TileDiskDrive extends TileNode implements IItemStorageProvider, IStorageGui, IComparable, IFilterable, IPrioritizable { public static final TileDataParameter PRIORITY = IPrioritizable.createParameter(); public static final TileDataParameter COMPARE = IComparable.createParameter(); public static final TileDataParameter MODE = IFilterable.createParameter(); diff --git a/src/main/java/refinedstorage/tile/TileStorage.java b/src/main/java/refinedstorage/tile/TileStorage.java index b44830cdb..ebdd29aea 100755 --- a/src/main/java/refinedstorage/tile/TileStorage.java +++ b/src/main/java/refinedstorage/tile/TileStorage.java @@ -8,8 +8,8 @@ import net.minecraftforge.items.ItemHandlerHelper; import refinedstorage.RefinedStorage; import refinedstorage.RefinedStorageBlocks; import refinedstorage.api.network.INetworkMaster; -import refinedstorage.api.storage.IStorageProvider; import refinedstorage.api.storage.item.IItemStorage; +import refinedstorage.api.storage.item.IItemStorageProvider; import refinedstorage.apiimpl.storage.item.ItemStorageNBT; import refinedstorage.block.BlockStorage; import refinedstorage.block.EnumStorageType; @@ -22,7 +22,7 @@ import refinedstorage.tile.data.TileDataParameter; import java.util.List; -public class TileStorage extends TileNode implements IStorageProvider, IStorageGui, IComparable, IFilterable, IPrioritizable { +public class TileStorage extends TileNode implements IItemStorageProvider, IStorageGui, IComparable, IFilterable, IPrioritizable { public static final TileDataParameter PRIORITY = IPrioritizable.createParameter(); public static final TileDataParameter COMPARE = IComparable.createParameter(); public static final TileDataParameter MODE = IFilterable.createParameter(); diff --git a/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java b/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java index 2409535d7..b5e079e20 100755 --- a/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java +++ b/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java @@ -10,8 +10,8 @@ import net.minecraftforge.items.IItemHandler; import powercrystals.minefactoryreloaded.api.IDeepStorageUnit; import refinedstorage.RefinedStorage; import refinedstorage.api.network.INetworkMaster; -import refinedstorage.api.storage.IStorageProvider; import refinedstorage.api.storage.item.IItemStorage; +import refinedstorage.api.storage.item.IItemStorageProvider; import refinedstorage.inventory.ItemHandlerBasic; import refinedstorage.tile.IStorageGui; import refinedstorage.tile.TileMultipartNode; @@ -24,7 +24,7 @@ import refinedstorage.tile.data.TileDataParameter; import java.util.ArrayList; import java.util.List; -public class TileExternalStorage extends TileMultipartNode implements IStorageProvider, IStorageGui, IComparable, IFilterable, IPrioritizable { +public class TileExternalStorage extends TileMultipartNode implements IItemStorageProvider, IStorageGui, IComparable, IFilterable, IPrioritizable { public static final TileDataParameter PRIORITY = IPrioritizable.createParameter(); public static final TileDataParameter COMPARE = IComparable.createParameter(); public static final TileDataParameter MODE = IFilterable.createParameter(); From 26c188bd66df2ba22c1b250fb0e9550e212f5665 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Fri, 12 Aug 2016 18:09:48 +0200 Subject: [PATCH 165/214] Fluid Storage Disks --- .../refinedstorage/RefinedStorageItems.java | 1 + .../solderer/SoldererRecipeStorage.java | 6 +- .../refinedstorage/block/BlockStorage.java | 6 +- .../block/EnumFluidStorageType.java | 52 +++++++++ ...rageType.java => EnumItemStorageType.java} | 104 +++++++++--------- .../refinedstorage/item/ItemBlockStorage.java | 8 +- .../item/ItemFluidStorageDisk.java | 65 +++++++++++ .../refinedstorage/item/ItemStorageDisk.java | 4 +- .../refinedstorage/proxy/ClientProxy.java | 12 +- .../refinedstorage/proxy/CommonProxy.java | 9 +- .../refinedstorage/tile/TileDiskDrive.java | 10 +- .../java/refinedstorage/tile/TileStorage.java | 10 +- .../assets/refinedstorage/lang/en_US.lang | 5 + 13 files changed, 208 insertions(+), 84 deletions(-) create mode 100755 src/main/java/refinedstorage/block/EnumFluidStorageType.java rename src/main/java/refinedstorage/block/{EnumStorageType.java => EnumItemStorageType.java} (74%) create mode 100755 src/main/java/refinedstorage/item/ItemFluidStorageDisk.java diff --git a/src/main/java/refinedstorage/RefinedStorageItems.java b/src/main/java/refinedstorage/RefinedStorageItems.java index a797b8eea..4ff98535a 100755 --- a/src/main/java/refinedstorage/RefinedStorageItems.java +++ b/src/main/java/refinedstorage/RefinedStorageItems.java @@ -15,4 +15,5 @@ public final class RefinedStorageItems { public static final ItemStorageHousing STORAGE_HOUSING = new ItemStorageHousing(); public static final ItemGridFilter GRID_FILTER = new ItemGridFilter(); public static final ItemNetworkCard NETWORK_CARD = new ItemNetworkCard(); + public static final ItemFluidStorageDisk FLUID_STORAGE_DISK = new ItemFluidStorageDisk(); } diff --git a/src/main/java/refinedstorage/apiimpl/solderer/SoldererRecipeStorage.java b/src/main/java/refinedstorage/apiimpl/solderer/SoldererRecipeStorage.java index 122b918d9..259b9f7cb 100755 --- a/src/main/java/refinedstorage/apiimpl/solderer/SoldererRecipeStorage.java +++ b/src/main/java/refinedstorage/apiimpl/solderer/SoldererRecipeStorage.java @@ -4,15 +4,15 @@ import net.minecraft.item.ItemStack; import refinedstorage.RefinedStorageBlocks; import refinedstorage.RefinedStorageItems; import refinedstorage.api.solderer.ISoldererRecipe; -import refinedstorage.block.EnumStorageType; +import refinedstorage.block.EnumItemStorageType; import refinedstorage.item.ItemBlockStorage; import refinedstorage.item.ItemProcessor; public class SoldererRecipeStorage implements ISoldererRecipe { - private EnumStorageType type; + private EnumItemStorageType type; private ItemStack[] rows; - public SoldererRecipeStorage(EnumStorageType type, int storagePart) { + public SoldererRecipeStorage(EnumItemStorageType type, int storagePart) { this.type = type; this.rows = new ItemStack[]{ new ItemStack(RefinedStorageItems.PROCESSOR, 1, ItemProcessor.TYPE_BASIC), diff --git a/src/main/java/refinedstorage/block/BlockStorage.java b/src/main/java/refinedstorage/block/BlockStorage.java index 719d88895..528fad467 100755 --- a/src/main/java/refinedstorage/block/BlockStorage.java +++ b/src/main/java/refinedstorage/block/BlockStorage.java @@ -25,7 +25,7 @@ import java.util.ArrayList; import java.util.List; public class BlockStorage extends BlockNode { - public static final PropertyEnum TYPE = PropertyEnum.create("type", EnumStorageType.class); + public static final PropertyEnum TYPE = PropertyEnum.create("type", EnumItemStorageType.class); public BlockStorage() { super("storage"); @@ -49,12 +49,12 @@ public class BlockStorage extends BlockNode { @Override public IBlockState getStateFromMeta(int meta) { - return getDefaultState().withProperty(TYPE, EnumStorageType.getById(meta)); + return getDefaultState().withProperty(TYPE, EnumItemStorageType.getById(meta)); } @Override public int getMetaFromState(IBlockState state) { - return ((EnumStorageType) state.getValue(TYPE)).getId(); + return ((EnumItemStorageType) state.getValue(TYPE)).getId(); } @Override diff --git a/src/main/java/refinedstorage/block/EnumFluidStorageType.java b/src/main/java/refinedstorage/block/EnumFluidStorageType.java new file mode 100755 index 000000000..ab60cf368 --- /dev/null +++ b/src/main/java/refinedstorage/block/EnumFluidStorageType.java @@ -0,0 +1,52 @@ +package refinedstorage.block; + +import net.minecraft.util.IStringSerializable; + +public enum EnumFluidStorageType implements IStringSerializable { + TYPE_64K(0, 64000, "64k"), + TYPE_128K(1, 128000, "128k"), + TYPE_256K(2, 256000, "256k"), + TYPE_512K(3, 512000, "512k"), + TYPE_CREATIVE(4, -1, "creative"); + + private int id; + private int capacity; + private String name; + + EnumFluidStorageType(int id, int capacity, String name) { + this.id = id; + this.capacity = capacity; + this.name = name; + } + + @Override + public String getName() { + return name; + } + + public int getId() { + return id; + } + + public int getCapacity() { + return capacity; + } + + @Override + public String toString() { + return name; + } + + public static EnumFluidStorageType getById(int id) { + if (id == 5) { + return TYPE_CREATIVE; + } + + for (EnumFluidStorageType type : EnumFluidStorageType.values()) { + if (type.getId() == id) { + return type; + } + } + return TYPE_CREATIVE; + } +} diff --git a/src/main/java/refinedstorage/block/EnumStorageType.java b/src/main/java/refinedstorage/block/EnumItemStorageType.java similarity index 74% rename from src/main/java/refinedstorage/block/EnumStorageType.java rename to src/main/java/refinedstorage/block/EnumItemStorageType.java index 9426057b1..b48b36d04 100755 --- a/src/main/java/refinedstorage/block/EnumStorageType.java +++ b/src/main/java/refinedstorage/block/EnumItemStorageType.java @@ -1,52 +1,52 @@ -package refinedstorage.block; - -import net.minecraft.util.IStringSerializable; - -public enum EnumStorageType implements IStringSerializable { - TYPE_1K(0, 1000, "1k"), - TYPE_4K(1, 4000, "4k"), - TYPE_16K(2, 16000, "16k"), - TYPE_64K(3, 64000, "64k"), - TYPE_CREATIVE(4, -1, "creative"); - - private int id; - private int capacity; - private String name; - - EnumStorageType(int id, int capacity, String name) { - this.id = id; - this.capacity = capacity; - this.name = name; - } - - @Override - public String getName() { - return name; - } - - public int getId() { - return id; - } - - public int getCapacity() { - return capacity; - } - - @Override - public String toString() { - return name; - } - - public static EnumStorageType getById(int id) { - if (id == 5) { - return TYPE_CREATIVE; - } - - for (EnumStorageType type : EnumStorageType.values()) { - if (type.getId() == id) { - return type; - } - } - return TYPE_CREATIVE; - } -} +package refinedstorage.block; + +import net.minecraft.util.IStringSerializable; + +public enum EnumItemStorageType implements IStringSerializable { + TYPE_1K(0, 1000, "1k"), + TYPE_4K(1, 4000, "4k"), + TYPE_16K(2, 16000, "16k"), + TYPE_64K(3, 64000, "64k"), + TYPE_CREATIVE(4, -1, "creative"); + + private int id; + private int capacity; + private String name; + + EnumItemStorageType(int id, int capacity, String name) { + this.id = id; + this.capacity = capacity; + this.name = name; + } + + @Override + public String getName() { + return name; + } + + public int getId() { + return id; + } + + public int getCapacity() { + return capacity; + } + + @Override + public String toString() { + return name; + } + + public static EnumItemStorageType getById(int id) { + if (id == 5) { + return TYPE_CREATIVE; + } + + for (EnumItemStorageType type : EnumItemStorageType.values()) { + if (type.getId() == id) { + return type; + } + } + return TYPE_CREATIVE; + } +} diff --git a/src/main/java/refinedstorage/item/ItemBlockStorage.java b/src/main/java/refinedstorage/item/ItemBlockStorage.java index 79e46babe..bab92210b 100755 --- a/src/main/java/refinedstorage/item/ItemBlockStorage.java +++ b/src/main/java/refinedstorage/item/ItemBlockStorage.java @@ -13,7 +13,7 @@ import net.minecraft.world.World; import refinedstorage.RefinedStorageBlocks; import refinedstorage.RefinedStorageItems; import refinedstorage.apiimpl.storage.item.ItemStorageNBT; -import refinedstorage.block.EnumStorageType; +import refinedstorage.block.EnumItemStorageType; import refinedstorage.tile.TileStorage; import java.util.List; @@ -25,12 +25,12 @@ public class ItemBlockStorage extends ItemBlockBase { @Override public void addInformation(ItemStack stack, EntityPlayer player, List tooltip, boolean advanced) { - EnumStorageType type = EnumStorageType.getById(stack.getMetadata()); + EnumItemStorageType type = EnumItemStorageType.getById(stack.getMetadata()); if (type != null && isValid(stack)) { NBTTagCompound tag = stack.getTagCompound().getCompoundTag(TileStorage.NBT_STORAGE); - if (type == EnumStorageType.TYPE_CREATIVE) { + if (type == EnumItemStorageType.TYPE_CREATIVE) { tooltip.add(I18n.format("misc.refinedstorage:storage.stored", ItemStorageNBT.getStoredFromNBT(tag))); } else { tooltip.add(I18n.format("misc.refinedstorage:storage.stored_capacity", ItemStorageNBT.getStoredFromNBT(tag), type.getCapacity())); @@ -40,7 +40,7 @@ public class ItemBlockStorage extends ItemBlockBase { @Override public ActionResult onItemRightClick(ItemStack stack, World world, EntityPlayer player, EnumHand hand) { - EnumStorageType type = EnumStorageType.getById(stack.getMetadata()); + EnumItemStorageType type = EnumItemStorageType.getById(stack.getMetadata()); if (type != null && isValid(stack) && ItemStorageNBT.getStoredFromNBT(stack.getTagCompound().getCompoundTag(TileStorage.NBT_STORAGE)) == 0 && stack.getMetadata() != ItemStorageDisk.TYPE_CREATIVE && !world.isRemote && player.isSneaking()) { ItemStack storagePart = new ItemStack(RefinedStorageItems.STORAGE_PART, 1, stack.getMetadata()); diff --git a/src/main/java/refinedstorage/item/ItemFluidStorageDisk.java b/src/main/java/refinedstorage/item/ItemFluidStorageDisk.java new file mode 100755 index 000000000..4aa2e99a8 --- /dev/null +++ b/src/main/java/refinedstorage/item/ItemFluidStorageDisk.java @@ -0,0 +1,65 @@ +package refinedstorage.item; + +import net.minecraft.client.resources.I18n; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; +import refinedstorage.apiimpl.storage.fluid.FluidStorageNBT; +import refinedstorage.block.EnumFluidStorageType; + +import java.util.List; + +public class ItemFluidStorageDisk extends ItemBase { + public static final int TYPE_64K = 0; + public static final int TYPE_128K = 1; + public static final int TYPE_256K = 2; + public static final int TYPE_512K = 3; + public static final int TYPE_CREATIVE = 4; + + public ItemFluidStorageDisk() { + super("fluid_storage_disk"); + + setMaxStackSize(1); + setHasSubtypes(true); + setMaxDamage(0); + } + + @Override + public void getSubItems(Item item, CreativeTabs tab, List list) { + for (int i = 0; i < 5; ++i) { + list.add(FluidStorageNBT.createStackWithNBT(new ItemStack(item, 1, i))); + } + } + + @Override + public void onUpdate(ItemStack stack, World world, Entity entity, int slot, boolean selected) { + super.onUpdate(stack, world, entity, slot, selected); + + if (!stack.hasTagCompound()) { + FluidStorageNBT.createStackWithNBT(stack); + } + } + + @Override + public void addInformation(ItemStack disk, EntityPlayer player, List tooltip, boolean advanced) { + if (FluidStorageNBT.isValid(disk)) { + int capacity = EnumFluidStorageType.getById(disk.getItemDamage()).getCapacity(); + + if (capacity == -1) { + tooltip.add(I18n.format("misc.refinedstorage:storage.stored", FluidStorageNBT.getStoredFromNBT(disk.getTagCompound()))); + } else { + tooltip.add(I18n.format("misc.refinedstorage:storage.stored_capacity", FluidStorageNBT.getStoredFromNBT(disk.getTagCompound()), capacity)); + } + } + } + + @Override + public void onCreated(ItemStack stack, World world, EntityPlayer player) { + super.onCreated(stack, world, player); + + FluidStorageNBT.createStackWithNBT(stack); + } +} diff --git a/src/main/java/refinedstorage/item/ItemStorageDisk.java b/src/main/java/refinedstorage/item/ItemStorageDisk.java index 644d4bdd8..b809b0cc7 100755 --- a/src/main/java/refinedstorage/item/ItemStorageDisk.java +++ b/src/main/java/refinedstorage/item/ItemStorageDisk.java @@ -14,7 +14,7 @@ import net.minecraft.util.EnumHand; import net.minecraft.world.World; import refinedstorage.RefinedStorageItems; import refinedstorage.apiimpl.storage.item.ItemStorageNBT; -import refinedstorage.block.EnumStorageType; +import refinedstorage.block.EnumItemStorageType; import java.util.ArrayList; import java.util.Iterator; @@ -94,7 +94,7 @@ public class ItemStorageDisk extends ItemBase { @Override public void addInformation(ItemStack disk, EntityPlayer player, List tooltip, boolean advanced) { if (ItemStorageNBT.isValid(disk)) { - int capacity = EnumStorageType.getById(disk.getItemDamage()).getCapacity(); + int capacity = EnumItemStorageType.getById(disk.getItemDamage()).getCapacity(); if (capacity == -1) { tooltip.add(I18n.format("misc.refinedstorage:storage.stored", ItemStorageNBT.getStoredFromNBT(disk.getTagCompound()))); diff --git a/src/main/java/refinedstorage/proxy/ClientProxy.java b/src/main/java/refinedstorage/proxy/ClientProxy.java index 7cc90afa6..0be843712 100755 --- a/src/main/java/refinedstorage/proxy/ClientProxy.java +++ b/src/main/java/refinedstorage/proxy/ClientProxy.java @@ -30,7 +30,7 @@ import refinedstorage.RefinedStorageItems; import refinedstorage.block.BlockCable; import refinedstorage.block.EnumControllerType; import refinedstorage.block.EnumGridType; -import refinedstorage.block.EnumStorageType; +import refinedstorage.block.EnumItemStorageType; import refinedstorage.item.*; import java.util.List; @@ -251,10 +251,10 @@ public class ClientProxy extends CommonProxy { ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.PROCESSING_PATTERN_ENCODER), 0, new ModelResourceLocation("refinedstorage:processing_pattern_encoder", "inventory")); ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.NETWORK_TRANSMITTER), 0, new ModelResourceLocation("refinedstorage:network_transmitter", "inventory")); ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.NETWORK_RECEIVER), 0, new ModelResourceLocation("refinedstorage:network_receiver", "inventory")); - ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.STORAGE), EnumStorageType.TYPE_1K.getId(), new ModelResourceLocation("refinedstorage:storage", "type=1k")); - ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.STORAGE), EnumStorageType.TYPE_4K.getId(), new ModelResourceLocation("refinedstorage:storage", "type=4k")); - ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.STORAGE), EnumStorageType.TYPE_16K.getId(), new ModelResourceLocation("refinedstorage:storage", "type=16k")); - ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.STORAGE), EnumStorageType.TYPE_64K.getId(), new ModelResourceLocation("refinedstorage:storage", "type=64k")); - ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.STORAGE), EnumStorageType.TYPE_CREATIVE.getId(), new ModelResourceLocation("refinedstorage:storage", "type=creative")); + ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.STORAGE), EnumItemStorageType.TYPE_1K.getId(), new ModelResourceLocation("refinedstorage:storage", "type=1k")); + ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.STORAGE), EnumItemStorageType.TYPE_4K.getId(), new ModelResourceLocation("refinedstorage:storage", "type=4k")); + ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.STORAGE), EnumItemStorageType.TYPE_16K.getId(), new ModelResourceLocation("refinedstorage:storage", "type=16k")); + ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.STORAGE), EnumItemStorageType.TYPE_64K.getId(), new ModelResourceLocation("refinedstorage:storage", "type=64k")); + ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.STORAGE), EnumItemStorageType.TYPE_CREATIVE.getId(), new ModelResourceLocation("refinedstorage:storage", "type=creative")); } } diff --git a/src/main/java/refinedstorage/proxy/CommonProxy.java b/src/main/java/refinedstorage/proxy/CommonProxy.java index 32bc17a7e..ce3775faa 100755 --- a/src/main/java/refinedstorage/proxy/CommonProxy.java +++ b/src/main/java/refinedstorage/proxy/CommonProxy.java @@ -116,6 +116,7 @@ public class CommonProxy { registerItem(RefinedStorageItems.UPGRADE); registerItem(RefinedStorageItems.GRID_FILTER); registerItem(RefinedStorageItems.NETWORK_CARD); + registerItem(RefinedStorageItems.FLUID_STORAGE_DISK); OreDictionary.registerOre("itemSilicon", RefinedStorageItems.SILICON); @@ -449,10 +450,10 @@ public class CommonProxy { ); // Storage Blocks - RefinedStorageAPI.SOLDERER_REGISTRY.addRecipe(new SoldererRecipeStorage(EnumStorageType.TYPE_1K, ItemStoragePart.TYPE_1K)); - RefinedStorageAPI.SOLDERER_REGISTRY.addRecipe(new SoldererRecipeStorage(EnumStorageType.TYPE_4K, ItemStoragePart.TYPE_4K)); - RefinedStorageAPI.SOLDERER_REGISTRY.addRecipe(new SoldererRecipeStorage(EnumStorageType.TYPE_16K, ItemStoragePart.TYPE_16K)); - RefinedStorageAPI.SOLDERER_REGISTRY.addRecipe(new SoldererRecipeStorage(EnumStorageType.TYPE_64K, ItemStoragePart.TYPE_64K)); + RefinedStorageAPI.SOLDERER_REGISTRY.addRecipe(new SoldererRecipeStorage(EnumItemStorageType.TYPE_1K, ItemStoragePart.TYPE_1K)); + RefinedStorageAPI.SOLDERER_REGISTRY.addRecipe(new SoldererRecipeStorage(EnumItemStorageType.TYPE_4K, ItemStoragePart.TYPE_4K)); + RefinedStorageAPI.SOLDERER_REGISTRY.addRecipe(new SoldererRecipeStorage(EnumItemStorageType.TYPE_16K, ItemStoragePart.TYPE_16K)); + RefinedStorageAPI.SOLDERER_REGISTRY.addRecipe(new SoldererRecipeStorage(EnumItemStorageType.TYPE_64K, ItemStoragePart.TYPE_64K)); // Crafting Monitor GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(RefinedStorageBlocks.CRAFTING_MONITOR), diff --git a/src/main/java/refinedstorage/tile/TileDiskDrive.java b/src/main/java/refinedstorage/tile/TileDiskDrive.java index f6219e41b..7371bcd5a 100755 --- a/src/main/java/refinedstorage/tile/TileDiskDrive.java +++ b/src/main/java/refinedstorage/tile/TileDiskDrive.java @@ -15,7 +15,7 @@ import refinedstorage.api.network.INetworkMaster; import refinedstorage.api.storage.item.IItemStorage; import refinedstorage.api.storage.item.IItemStorageProvider; import refinedstorage.apiimpl.storage.item.ItemStorageNBT; -import refinedstorage.block.EnumStorageType; +import refinedstorage.block.EnumItemStorageType; import refinedstorage.inventory.ItemHandlerBasic; import refinedstorage.inventory.ItemValidatorBasic; import refinedstorage.tile.config.IComparable; @@ -32,7 +32,7 @@ public class TileDiskDrive extends TileNode implements IItemStorageProvider, ISt public class ItemStorage extends ItemStorageNBT { public ItemStorage(ItemStack disk) { - super(disk.getTagCompound(), EnumStorageType.getById(disk.getItemDamage()).getCapacity(), TileDiskDrive.this); + super(disk.getTagCompound(), EnumItemStorageType.getById(disk.getItemDamage()).getCapacity(), TileDiskDrive.this); } @Override @@ -250,14 +250,14 @@ public class TileDiskDrive extends TileNode implements IItemStorageProvider, ISt ItemStack disk = disks.getStackInSlot(i); if (disk != null) { - int capacity = EnumStorageType.getById(disk.getItemDamage()).getCapacity(); + int capacity = EnumItemStorageType.getById(disk.getItemDamage()).getCapacity(); if (capacity == -1) { return 0; } stored += ItemStorageNBT.getStoredFromNBT(disk.getTagCompound()); - storedMax += EnumStorageType.getById(disk.getItemDamage()).getCapacity(); + storedMax += EnumItemStorageType.getById(disk.getItemDamage()).getCapacity(); } } @@ -337,7 +337,7 @@ public class TileDiskDrive extends TileNode implements IItemStorageProvider, ISt ItemStack stack = disks.getStackInSlot(i); if (stack != null) { - int diskCapacity = EnumStorageType.getById(stack.getItemDamage()).getCapacity(); + int diskCapacity = EnumItemStorageType.getById(stack.getItemDamage()).getCapacity(); if (diskCapacity == -1) { return -1; diff --git a/src/main/java/refinedstorage/tile/TileStorage.java b/src/main/java/refinedstorage/tile/TileStorage.java index ebdd29aea..3eecb87fe 100755 --- a/src/main/java/refinedstorage/tile/TileStorage.java +++ b/src/main/java/refinedstorage/tile/TileStorage.java @@ -12,7 +12,7 @@ import refinedstorage.api.storage.item.IItemStorage; import refinedstorage.api.storage.item.IItemStorageProvider; import refinedstorage.apiimpl.storage.item.ItemStorageNBT; import refinedstorage.block.BlockStorage; -import refinedstorage.block.EnumStorageType; +import refinedstorage.block.EnumItemStorageType; import refinedstorage.inventory.ItemHandlerBasic; import refinedstorage.tile.config.IComparable; import refinedstorage.tile.config.IFilterable; @@ -65,7 +65,7 @@ public class TileStorage extends TileNode implements IItemStorageProvider, IStor private ItemStorage storage; - private EnumStorageType type; + private EnumItemStorageType type; private int priority = 0; private int compare = 0; @@ -162,12 +162,12 @@ public class TileStorage extends TileNode implements IItemStorageProvider, IStor return tag; } - public EnumStorageType getType() { + public EnumItemStorageType getType() { if (type == null && worldObj.getBlockState(pos).getBlock() == RefinedStorageBlocks.STORAGE) { - this.type = ((EnumStorageType) worldObj.getBlockState(pos).getValue(BlockStorage.TYPE)); + this.type = ((EnumItemStorageType) worldObj.getBlockState(pos).getValue(BlockStorage.TYPE)); } - return type == null ? EnumStorageType.TYPE_1K : type; + return type == null ? EnumItemStorageType.TYPE_1K : type; } @Override diff --git a/src/main/resources/assets/refinedstorage/lang/en_US.lang b/src/main/resources/assets/refinedstorage/lang/en_US.lang index 9e98bb2f4..7f2a306d3 100755 --- a/src/main/resources/assets/refinedstorage/lang/en_US.lang +++ b/src/main/resources/assets/refinedstorage/lang/en_US.lang @@ -131,6 +131,11 @@ item.refinedstorage:storage_disk.2.name=16k Storage Disk item.refinedstorage:storage_disk.3.name=64k Storage Disk item.refinedstorage:storage_disk.4.name=Creative Storage Disk item.refinedstorage:storage_disk.5.name=Debug Storage Disk +item.refinedstorage:fluid_storage_disk.0.name=64k Fluid Storage Disk +item.refinedstorage:fluid_storage_disk.1.name=128k Fluid Storage Disk +item.refinedstorage:fluid_storage_disk.2.name=256k Fluid Storage Disk +item.refinedstorage:fluid_storage_disk.3.name=512k Fluid Storage Disk +item.refinedstorage:fluid_storage_disk.4.name=Creative Fluid Storage Disk item.refinedstorage:wireless_grid.0.name=Wireless Grid item.refinedstorage:wireless_grid.1.name=Creative Wireless Grid item.refinedstorage:quartz_enriched_iron.name=Quartz Enriched Iron From 2cb252ced73632e5a08e694f35c96e100febc57b Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sat, 13 Aug 2016 00:20:37 +0200 Subject: [PATCH 166/214] Make client stacks an interface --- .../refinedstorage/gui/grid/ClientStack.java | 47 --------- .../gui/grid/GuiCraftingSettings.java | 7 +- .../java/refinedstorage/gui/grid/GuiGrid.java | 55 +++++------ .../gui/grid/sorting/GridSorting.java | 4 +- .../gui/grid/sorting/GridSortingName.java | 8 +- .../gui/grid/sorting/GridSortingQuantity.java | 8 +- .../gui/grid/stack/ClientStackItem.java | 98 +++++++++++++++++++ .../gui/grid/stack/IClientStack.java | 17 ++++ .../network/MessageGridCraftingStart.java | 12 +-- .../network/MessageGridDelta.java | 13 ++- .../network/MessageGridPull.java | 12 +-- .../network/MessageGridUpdate.java | 10 +- .../refinedstorage/tile/TileController.java | 4 + 13 files changed, 180 insertions(+), 115 deletions(-) delete mode 100755 src/main/java/refinedstorage/gui/grid/ClientStack.java create mode 100755 src/main/java/refinedstorage/gui/grid/stack/ClientStackItem.java create mode 100755 src/main/java/refinedstorage/gui/grid/stack/IClientStack.java diff --git a/src/main/java/refinedstorage/gui/grid/ClientStack.java b/src/main/java/refinedstorage/gui/grid/ClientStack.java deleted file mode 100755 index 6532fa381..000000000 --- a/src/main/java/refinedstorage/gui/grid/ClientStack.java +++ /dev/null @@ -1,47 +0,0 @@ -package refinedstorage.gui.grid; - -import io.netty.buffer.ByteBuf; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraftforge.fml.common.network.ByteBufUtils; -import refinedstorage.api.network.INetworkMaster; -import refinedstorage.api.network.NetworkUtils; - -public class ClientStack { - private int id; - private ItemStack stack; - private boolean craftable; - - public ClientStack(ByteBuf buf) { - stack = new ItemStack(Item.getItemById(buf.readInt()), buf.readInt(), buf.readInt()); - stack.setTagCompound(ByteBufUtils.readTag(buf)); - id = buf.readInt(); - craftable = buf.readBoolean(); - } - - public int getId() { - return id; - } - - public ItemStack getStack() { - return stack; - } - - public boolean isCraftable() { - return craftable; - } - - @Override - public boolean equals(Object obj) { - return obj instanceof ClientStack && ((ClientStack) obj).getId() == id; - } - - public static void write(ByteBuf buf, INetworkMaster network, ItemStack stack) { - buf.writeInt(Item.getIdFromItem(stack.getItem())); - buf.writeInt(stack.stackSize); - buf.writeInt(stack.getItemDamage()); - ByteBufUtils.writeTag(buf, stack.getTagCompound()); - buf.writeInt(NetworkUtils.getItemStackHashCode(stack)); - buf.writeBoolean(NetworkUtils.hasPattern(network, stack)); - } -} diff --git a/src/main/java/refinedstorage/gui/grid/GuiCraftingSettings.java b/src/main/java/refinedstorage/gui/grid/GuiCraftingSettings.java index 279fa8013..3638645d0 100755 --- a/src/main/java/refinedstorage/gui/grid/GuiCraftingSettings.java +++ b/src/main/java/refinedstorage/gui/grid/GuiCraftingSettings.java @@ -10,6 +10,7 @@ import refinedstorage.RefinedStorage; import refinedstorage.apiimpl.network.grid.ItemGridHandler; import refinedstorage.container.ContainerCraftingSettings; import refinedstorage.gui.GuiBase; +import refinedstorage.gui.grid.stack.ClientStackItem; import refinedstorage.network.MessageGridCraftingStart; import java.io.IOException; @@ -19,12 +20,12 @@ public class GuiCraftingSettings extends GuiBase { private GuiTextField amountField; private GuiGrid gui; - private ClientStack stack; + private ClientStackItem stack; private GuiButton startButton; private GuiButton cancelButton; private GuiButton[] incrementButtons = new GuiButton[6]; - public GuiCraftingSettings(GuiGrid gui, EntityPlayer player, ClientStack stack) { + public GuiCraftingSettings(GuiGrid gui, EntityPlayer player, ClientStackItem stack) { super(new ContainerCraftingSettings(player, stack.getStack()), 172, 99); this.gui = gui; @@ -124,7 +125,7 @@ public class GuiCraftingSettings extends GuiBase { Integer quantity = Ints.tryParse(amountField.getText()); if (quantity != null && quantity > 0 && quantity <= ItemGridHandler.MAX_CRAFTING_PER_REQUEST) { - RefinedStorage.INSTANCE.network.sendToServer(new MessageGridCraftingStart(stack.getId(), quantity)); + RefinedStorage.INSTANCE.network.sendToServer(new MessageGridCraftingStart(stack.getHash(), quantity)); close(); } diff --git a/src/main/java/refinedstorage/gui/grid/GuiGrid.java b/src/main/java/refinedstorage/gui/grid/GuiGrid.java index 8a788be61..89dd33073 100755 --- a/src/main/java/refinedstorage/gui/grid/GuiGrid.java +++ b/src/main/java/refinedstorage/gui/grid/GuiGrid.java @@ -21,6 +21,8 @@ import refinedstorage.gui.GuiBase; import refinedstorage.gui.Scrollbar; import refinedstorage.gui.grid.sorting.GridSortingName; import refinedstorage.gui.grid.sorting.GridSortingQuantity; +import refinedstorage.gui.grid.stack.ClientStackItem; +import refinedstorage.gui.grid.stack.IClientStack; import refinedstorage.gui.sidebutton.*; import refinedstorage.integration.jei.IntegrationJEI; import refinedstorage.network.MessageGridCraftingClear; @@ -32,14 +34,17 @@ import refinedstorage.tile.grid.TileGrid; import refinedstorage.tile.grid.WirelessGrid; import java.io.IOException; -import java.util.*; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Iterator; +import java.util.List; public class GuiGrid extends GuiBase { public static final GridSortingQuantity SORTING_QUANTITY = new GridSortingQuantity(); public static final GridSortingName SORTING_NAME = new GridSortingName(); - public static Multimap ITEMS = ArrayListMultimap.create(); - public static List SORTED_ITEMS = new ArrayList<>(); + public static Multimap ITEMS = ArrayListMultimap.create(); + public static List SORTED_ITEMS = new ArrayList<>(); private static boolean markedForSorting; @@ -97,24 +102,24 @@ public class GuiGrid extends GuiBase { } private void sortItems() { - List sortedItems = new ArrayList<>(); + List sortedItems = new ArrayList<>(); if (grid.isConnected()) { sortedItems.addAll(ITEMS.values()); String query = searchField.getText().trim().toLowerCase(); - Iterator t = sortedItems.iterator(); + Iterator t = sortedItems.iterator(); while (t.hasNext()) { - ClientStack stack = t.next(); + IClientStack stack = t.next(); List filteredItems = grid.getFilteredItems(); boolean found = filteredItems.isEmpty(); for (GridFilteredItem filteredItem : filteredItems) { - if (CompareUtils.compareStack(stack.getStack(), filteredItem.getStack(), filteredItem.getCompare())) { + if (CompareUtils.compareStack(((ClientStackItem) stack).getStack(), filteredItem.getStack(), filteredItem.getCompare())) { found = true; break; @@ -141,7 +146,7 @@ public class GuiGrid extends GuiBase { String[] parts = query.split(" "); String modId = parts[0].substring(1); - String modIdFromItem = Item.REGISTRY.getNameForObject(stack.getStack().getItem()).getResourceDomain(); + String modIdFromItem = stack.getModId(); if (!modIdFromItem.contains(modId)) { t.remove(); @@ -156,11 +161,11 @@ public class GuiGrid extends GuiBase { } } - if (!stack.getStack().getDisplayName().toLowerCase().contains(itemFromMod.toString())) { + if (!stack.getName().toLowerCase().contains(itemFromMod.toString())) { t.remove(); } } - } else if (!stack.getStack().getDisplayName().toLowerCase().contains(query)) { + } else if (!stack.getName().toLowerCase().contains(query)) { t.remove(); } } @@ -274,7 +279,7 @@ public class GuiGrid extends GuiBase { } if (slot < SORTED_ITEMS.size()) { - drawItem(x, y, SORTED_ITEMS.get(slot).getStack(), true, formatQuantity(SORTED_ITEMS.get(slot).getStack().stackSize, slot)); + SORTED_ITEMS.get(slot).draw(this, x, y, GuiScreen.isShiftKeyDown() && slotNumber == slot); } if (inBounds(x, y, 16, 16, mouseX, mouseY) || !grid.isConnected()) { @@ -302,7 +307,7 @@ public class GuiGrid extends GuiBase { } if (isOverSlotWithItem()) { - drawTooltip(mouseX, mouseY, SORTED_ITEMS.get(slotNumber).getStack()); + drawTooltip(mouseX, mouseY, SORTED_ITEMS.get(slotNumber).getTooltip()); } if (isOverClear(mouseX, mouseY)) { @@ -314,24 +319,6 @@ public class GuiGrid extends GuiBase { } } - private String formatQuantity(int qty, int slot) { - if (slotNumber == slot && GuiScreen.isShiftKeyDown() && qty > 1) { - return String.valueOf(qty); - } - - if (qty >= 1000000) { - return String.format(Locale.US, "%.1f", (float) qty / 1000000).replace(".0", "") + "M"; - } else if (qty >= 1000) { - return String.format(Locale.US, "%.1f", (float) qty / 1000).replace(".0", "") + "K"; - } else if (qty == 1) { - return null; - } else if (qty == 0) { - return t("gui.refinedstorage:grid.craft"); - } else { - return String.valueOf(qty); - } - } - @Override public void mouseClicked(int mouseX, int mouseY, int clickedButton) throws IOException { super.mouseClicked(mouseX, mouseY, clickedButton); @@ -361,13 +348,15 @@ public class GuiGrid extends GuiBase { ItemStack held = container.getPlayer().inventory.getItemStack(); + ClientStackItem stack = (ClientStackItem) SORTED_ITEMS.get(slotNumber); + if (isOverSlotArea(mouseX - guiLeft, mouseY - guiTop) && held != null && (clickedButton == 0 || clickedButton == 1)) { RefinedStorage.INSTANCE.network.sendToServer(new MessageGridInsertHeld(clickedButton == 1)); } if (isOverSlotWithItem() && (held == null || (held != null && clickedButton == 2))) { - if (SORTED_ITEMS.get(slotNumber).isCraftable() && (SORTED_ITEMS.get(slotNumber).getStack().stackSize == 0 || (GuiScreen.isShiftKeyDown() && GuiScreen.isCtrlKeyDown()))) { - FMLCommonHandler.instance().showGuiScreen(new GuiCraftingSettings(this, container.getPlayer(), SORTED_ITEMS.get(slotNumber))); + if (SORTED_ITEMS.get(slotNumber).isCraftable() && (stack.getQuantity() == 0 || (GuiScreen.isShiftKeyDown() && GuiScreen.isCtrlKeyDown()))) { + FMLCommonHandler.instance().showGuiScreen(new GuiCraftingSettings(this, container.getPlayer(), stack)); } else { int flags = 0; @@ -383,7 +372,7 @@ public class GuiGrid extends GuiBase { flags |= IItemGridHandler.EXTRACT_SINGLE; } - RefinedStorage.INSTANCE.network.sendToServer(new MessageGridPull(SORTED_ITEMS.get(slotNumber).getId(), flags)); + RefinedStorage.INSTANCE.network.sendToServer(new MessageGridPull(stack.getHash(), flags)); } } } diff --git a/src/main/java/refinedstorage/gui/grid/sorting/GridSorting.java b/src/main/java/refinedstorage/gui/grid/sorting/GridSorting.java index 16d2c705e..b67451fe3 100755 --- a/src/main/java/refinedstorage/gui/grid/sorting/GridSorting.java +++ b/src/main/java/refinedstorage/gui/grid/sorting/GridSorting.java @@ -1,10 +1,10 @@ package refinedstorage.gui.grid.sorting; -import refinedstorage.gui.grid.ClientStack; +import refinedstorage.gui.grid.stack.IClientStack; import java.util.Comparator; -public abstract class GridSorting implements Comparator { +public abstract class GridSorting implements Comparator { protected int sortingDirection; public void setSortingDirection(int sortingDirection) { diff --git a/src/main/java/refinedstorage/gui/grid/sorting/GridSortingName.java b/src/main/java/refinedstorage/gui/grid/sorting/GridSortingName.java index 5139dab4f..c61701d55 100755 --- a/src/main/java/refinedstorage/gui/grid/sorting/GridSortingName.java +++ b/src/main/java/refinedstorage/gui/grid/sorting/GridSortingName.java @@ -1,13 +1,13 @@ package refinedstorage.gui.grid.sorting; -import refinedstorage.gui.grid.ClientStack; +import refinedstorage.gui.grid.stack.IClientStack; import refinedstorage.tile.grid.TileGrid; public class GridSortingName extends GridSorting { @Override - public int compare(ClientStack left, ClientStack right) { - String leftName = left.getStack().getDisplayName(); - String rightName = right.getStack().getDisplayName(); + public int compare(IClientStack left, IClientStack right) { + String leftName = left.getName(); + String rightName = right.getName(); if (sortingDirection == TileGrid.SORTING_DIRECTION_ASCENDING) { return leftName.compareTo(rightName); diff --git a/src/main/java/refinedstorage/gui/grid/sorting/GridSortingQuantity.java b/src/main/java/refinedstorage/gui/grid/sorting/GridSortingQuantity.java index 68fa6e4e5..d4b51b287 100755 --- a/src/main/java/refinedstorage/gui/grid/sorting/GridSortingQuantity.java +++ b/src/main/java/refinedstorage/gui/grid/sorting/GridSortingQuantity.java @@ -1,13 +1,13 @@ package refinedstorage.gui.grid.sorting; -import refinedstorage.gui.grid.ClientStack; +import refinedstorage.gui.grid.stack.IClientStack; import refinedstorage.tile.grid.TileGrid; public class GridSortingQuantity extends GridSorting { @Override - public int compare(ClientStack left, ClientStack right) { - int leftSize = left.getStack().stackSize; - int rightSize = right.getStack().stackSize; + public int compare(IClientStack left, IClientStack right) { + int leftSize = left.getQuantity(); + int rightSize = right.getQuantity(); if (leftSize != rightSize) { if (sortingDirection == TileGrid.SORTING_DIRECTION_ASCENDING) { diff --git a/src/main/java/refinedstorage/gui/grid/stack/ClientStackItem.java b/src/main/java/refinedstorage/gui/grid/stack/ClientStackItem.java new file mode 100755 index 000000000..ae3908859 --- /dev/null +++ b/src/main/java/refinedstorage/gui/grid/stack/ClientStackItem.java @@ -0,0 +1,98 @@ +package refinedstorage.gui.grid.stack; + +import io.netty.buffer.ByteBuf; +import joptsimple.internal.Strings; +import net.minecraft.client.resources.I18n; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraftforge.fml.common.network.ByteBufUtils; +import refinedstorage.api.network.INetworkMaster; +import refinedstorage.api.network.NetworkUtils; +import refinedstorage.gui.GuiBase; + +import java.util.Locale; + +public class ClientStackItem implements IClientStack { + private int hash; + private ItemStack stack; + private boolean craftable; + + public ClientStackItem(ByteBuf buf) { + stack = new ItemStack(Item.getItemById(buf.readInt()), buf.readInt(), buf.readInt()); + stack.setTagCompound(ByteBufUtils.readTag(buf)); + hash = buf.readInt(); + craftable = buf.readBoolean(); + } + + public int getHash() { + return hash; + } + + public ItemStack getStack() { + return stack; + } + + @Override + public boolean isCraftable() { + return craftable; + } + + @Override + public String getName() { + return stack.getDisplayName(); + } + + @Override + public String getModId() { + return Item.REGISTRY.getNameForObject(stack.getItem()).getResourceDomain(); + } + + @Override + public String getTooltip() { + return Strings.join(stack.getTooltip(null, true), "\n"); + } + + @Override + public int getQuantity() { + return stack.stackSize; + } + + private String getQuantityForDisplay(boolean advanced) { + int qty = stack.stackSize; + + if (advanced && qty > 1) { + return String.valueOf(qty); + } + + if (qty >= 1000000) { + return String.format(Locale.US, "%.1f", (float) qty / 1000000).replace(".0", "") + "M"; + } else if (qty >= 1000) { + return String.format(Locale.US, "%.1f", (float) qty / 1000).replace(".0", "") + "K"; + } else if (qty == 1) { + return null; + } else if (qty == 0) { + return I18n.format("gui.refinedstorage:grid.craft"); + } + + return String.valueOf(qty); + } + + @Override + public void draw(GuiBase gui, int x, int y, boolean isOverWithShift) { + gui.drawItem(x, y, stack, true, getQuantityForDisplay(isOverWithShift)); + } + + @Override + public boolean equals(Object obj) { + return obj instanceof IClientStack && ((ClientStackItem) obj).getHash() == hash; + } + + public static void write(ByteBuf buf, INetworkMaster network, ItemStack stack) { + buf.writeInt(Item.getIdFromItem(stack.getItem())); + buf.writeInt(stack.stackSize); + buf.writeInt(stack.getItemDamage()); + ByteBufUtils.writeTag(buf, stack.getTagCompound()); + buf.writeInt(NetworkUtils.getItemStackHashCode(stack)); + buf.writeBoolean(NetworkUtils.hasPattern(network, stack)); + } +} diff --git a/src/main/java/refinedstorage/gui/grid/stack/IClientStack.java b/src/main/java/refinedstorage/gui/grid/stack/IClientStack.java new file mode 100755 index 000000000..c5a0dc007 --- /dev/null +++ b/src/main/java/refinedstorage/gui/grid/stack/IClientStack.java @@ -0,0 +1,17 @@ +package refinedstorage.gui.grid.stack; + +import refinedstorage.gui.GuiBase; + +public interface IClientStack { + boolean isCraftable(); + + String getName(); + + String getModId(); + + String getTooltip(); + + int getQuantity(); + + void draw(GuiBase gui, int x, int y, boolean isOverWithShift); +} diff --git a/src/main/java/refinedstorage/network/MessageGridCraftingStart.java b/src/main/java/refinedstorage/network/MessageGridCraftingStart.java index bb28f4106..853d95a60 100755 --- a/src/main/java/refinedstorage/network/MessageGridCraftingStart.java +++ b/src/main/java/refinedstorage/network/MessageGridCraftingStart.java @@ -8,26 +8,26 @@ import refinedstorage.api.network.grid.IItemGridHandler; import refinedstorage.container.ContainerGrid; public class MessageGridCraftingStart extends MessageHandlerPlayerToServer implements IMessage { - private int id; + private int hash; private int quantity; public MessageGridCraftingStart() { } - public MessageGridCraftingStart(int id, int quantity) { - this.id = id; + public MessageGridCraftingStart(int hash, int quantity) { + this.hash = hash; this.quantity = quantity; } @Override public void fromBytes(ByteBuf buf) { - id = buf.readInt(); + hash = buf.readInt(); quantity = buf.readInt(); } @Override public void toBytes(ByteBuf buf) { - buf.writeInt(id); + buf.writeInt(hash); buf.writeInt(quantity); } @@ -39,7 +39,7 @@ public class MessageGridCraftingStart extends MessageHandlerPlayerToServer { private INetworkMaster network; private ItemStack stack; private int delta; - private ClientStack clientStack; + private ClientStackItem clientStack; public MessageGridDelta() { } @@ -28,13 +29,13 @@ public class MessageGridDelta implements IMessage, IMessageHandler implements IMessage { - private int id; + private int hash; private int flags; public MessageGridPull() { } - public MessageGridPull(int id, int flags) { - this.id = id; + public MessageGridPull(int hash, int flags) { + this.hash = hash; this.flags = flags; } @Override public void fromBytes(ByteBuf buf) { - id = buf.readInt(); + hash = buf.readInt(); flags = buf.readInt(); } @Override public void toBytes(ByteBuf buf) { - buf.writeInt(id); + buf.writeInt(hash); buf.writeInt(flags); } @@ -39,7 +39,7 @@ public class MessageGridPull extends MessageHandlerPlayerToServer { private INetworkMaster network; - private List items = new ArrayList<>(); + private List items = new ArrayList<>(); public MessageGridUpdate() { } @@ -28,7 +28,7 @@ public class MessageGridUpdate implements IMessage, IMessageHandler Date: Sat, 13 Aug 2016 01:32:13 +0200 Subject: [PATCH 167/214] Fluid Grid --- .../api/network/INetworkMaster.java | 20 ++++- .../storage/fluid/GroupedFluidStorage.java | 12 +++ .../java/refinedstorage/block/BlockGrid.java | 6 +- .../refinedstorage/block/EnumGridType.java | 3 +- .../container/ContainerGrid.java | 8 +- src/main/java/refinedstorage/gui/GuiBase.java | 42 +++++---- .../java/refinedstorage/gui/grid/GuiGrid.java | 83 ++++++++++-------- .../gui/grid/stack/ClientStackFluid.java | 64 ++++++++++++++ .../gui/grid/stack/ClientStackItem.java | 1 - .../gui/grid/stack/IClientStack.java | 2 - .../network/MessageGridFluidDelta.java | 61 +++++++++++++ .../network/MessageGridFluidUpdate.java | 56 ++++++++++++ ...idDelta.java => MessageGridItemDelta.java} | 13 ++- ...Update.java => MessageGridItemUpdate.java} | 14 +-- .../refinedstorage/proxy/CommonProxy.java | 6 +- .../refinedstorage/tile/TileController.java | 49 +++++++++-- .../refinedstorage/tile/grid/TileGrid.java | 6 +- .../assets/refinedstorage/lang/en_US.lang | 1 + .../textures/gui/fluid_grid.png | Bin 0 -> 1974 bytes 19 files changed, 354 insertions(+), 93 deletions(-) create mode 100755 src/main/java/refinedstorage/gui/grid/stack/ClientStackFluid.java create mode 100755 src/main/java/refinedstorage/network/MessageGridFluidDelta.java create mode 100755 src/main/java/refinedstorage/network/MessageGridFluidUpdate.java rename src/main/java/refinedstorage/network/{MessageGridDelta.java => MessageGridItemDelta.java} (77%) rename src/main/java/refinedstorage/network/{MessageGridUpdate.java => MessageGridItemUpdate.java} (72%) create mode 100755 src/main/resources/assets/refinedstorage/textures/gui/fluid_grid.png diff --git a/src/main/java/refinedstorage/api/network/INetworkMaster.java b/src/main/java/refinedstorage/api/network/INetworkMaster.java index b5178c2ed..9f94b5b25 100755 --- a/src/main/java/refinedstorage/api/network/INetworkMaster.java +++ b/src/main/java/refinedstorage/api/network/INetworkMaster.java @@ -137,13 +137,31 @@ public interface INetworkMaster { void sendItemStorageToClient(EntityPlayerMP player); /** - * Sends a storage change to all clients that are watching a grid. + * Sends a item storage change to all clients that are watching a grid. * * @param stack The stack * @param delta The delta */ void sendItemStorageDeltaToClient(ItemStack stack, int delta); + /** + * Sends a grid packet with all the fluids to all clients that are watching a grid. + */ + void sendFluidStorageToClient(); + + /** + * Sends a grid packet with all the fluids to a specific player. + */ + void sendFluidStorageToClient(EntityPlayerMP player); + + /** + * Sends a fluids storage change to all clients that are watching a grid. + * + * @param stack The stack + * @param delta The delta + */ + void sendFluidStorageDeltaToClient(FluidStack stack, int delta); + /** * Inserts an item to this network. * diff --git a/src/main/java/refinedstorage/apiimpl/storage/fluid/GroupedFluidStorage.java b/src/main/java/refinedstorage/apiimpl/storage/fluid/GroupedFluidStorage.java index eba08be93..44a504c8d 100755 --- a/src/main/java/refinedstorage/apiimpl/storage/fluid/GroupedFluidStorage.java +++ b/src/main/java/refinedstorage/apiimpl/storage/fluid/GroupedFluidStorage.java @@ -39,6 +39,8 @@ public class GroupedFluidStorage implements IGroupedFluidStorage { add(stack, true); } } + + network.sendFluidStorageToClient(); } @Override @@ -47,11 +49,19 @@ public class GroupedFluidStorage implements IGroupedFluidStorage { if (otherStack.isFluidEqual(stack)) { otherStack.amount += stack.amount; + if (!rebuilding) { + network.sendFluidStorageDeltaToClient(stack, stack.amount); + } + return; } } stacks.put(stack.getFluid(), stack.copy()); + + if (!rebuilding) { + network.sendFluidStorageDeltaToClient(stack, stack.amount); + } } @Override @@ -64,6 +74,8 @@ public class GroupedFluidStorage implements IGroupedFluidStorage { stacks.remove(otherStack.getFluid(), otherStack); } + network.sendFluidStorageDeltaToClient(stack, -stack.amount); + return; } } diff --git a/src/main/java/refinedstorage/block/BlockGrid.java b/src/main/java/refinedstorage/block/BlockGrid.java index 41e5841eb..7360a1124 100755 --- a/src/main/java/refinedstorage/block/BlockGrid.java +++ b/src/main/java/refinedstorage/block/BlockGrid.java @@ -33,7 +33,7 @@ public class BlockGrid extends BlockNode { @Override public void getSubBlocks(Item item, CreativeTabs tab, List subItems) { - for (int i = 0; i <= 2; i++) { + for (int i = 0; i <= 3; i++) { subItems.add(new ItemStack(item, 1, i)); } } @@ -47,12 +47,12 @@ public class BlockGrid extends BlockNode { @Override public IBlockState getStateFromMeta(int meta) { - return getDefaultState().withProperty(TYPE, meta == 0 ? EnumGridType.NORMAL : (meta == 1 ? EnumGridType.CRAFTING : EnumGridType.PATTERN)); + return getDefaultState().withProperty(TYPE, meta == 0 ? EnumGridType.NORMAL : (meta == 1 ? EnumGridType.CRAFTING : (meta == 2 ? EnumGridType.PATTERN : EnumGridType.FLUID))); } @Override public int getMetaFromState(IBlockState state) { - return state.getValue(TYPE) == EnumGridType.NORMAL ? 0 : (state.getValue(TYPE) == EnumGridType.CRAFTING ? 1 : 2); + return state.getValue(TYPE) == EnumGridType.NORMAL ? 0 : (state.getValue(TYPE) == EnumGridType.CRAFTING ? 1 : (state.getValue(TYPE) == EnumGridType.PATTERN ? 2 : 3)); } @Override diff --git a/src/main/java/refinedstorage/block/EnumGridType.java b/src/main/java/refinedstorage/block/EnumGridType.java index dc0d28de1..8c0293ae5 100755 --- a/src/main/java/refinedstorage/block/EnumGridType.java +++ b/src/main/java/refinedstorage/block/EnumGridType.java @@ -5,7 +5,8 @@ import net.minecraft.util.IStringSerializable; public enum EnumGridType implements IStringSerializable { NORMAL(0, "normal"), CRAFTING(1, "crafting"), - PATTERN(2, "pattern"); + PATTERN(2, "pattern"), + FLUID(3, "fluid"); private int id; private String name; diff --git a/src/main/java/refinedstorage/container/ContainerGrid.java b/src/main/java/refinedstorage/container/ContainerGrid.java index a3c48e8f7..e6c611dac 100755 --- a/src/main/java/refinedstorage/container/ContainerGrid.java +++ b/src/main/java/refinedstorage/container/ContainerGrid.java @@ -61,8 +61,10 @@ public class ContainerGrid extends ContainerBase { addSlotToContainer(new SlotOutput(((TileGrid) grid).getPatterns(), 1, 152, 132)); } - for (int i = 0; i < 4; ++i) { - addSlotToContainer(new SlotItemHandler(grid.getFilter(), i, 204, 6 + (18 * i))); + if (grid.getType() != EnumGridType.FLUID) { + for (int i = 0; i < 4; ++i) { + addSlotToContainer(new SlotItemHandler(grid.getFilter(), i, 204, 6 + (18 * i))); + } } } @@ -104,7 +106,7 @@ public class ContainerGrid extends ContainerBase { if (slot.getHasStack()) { if (slot == craftingResultSlot) { ((TileGrid) grid).onCraftedShift(this, player); - } else if (grid.getHandler() != null && slot != patternResultSlot && !(slot instanceof SlotSpecimenLegacy)) { + } else if (grid.getHandler() != null && slot != patternResultSlot && !(slot instanceof SlotSpecimenLegacy) && grid.getType() != EnumGridType.FLUID) { slot.putStack(grid.getHandler().onInsert(slot.getStack())); detectAndSendChanges(); diff --git a/src/main/java/refinedstorage/gui/GuiBase.java b/src/main/java/refinedstorage/gui/GuiBase.java index 9e99022a8..89ba17288 100755 --- a/src/main/java/refinedstorage/gui/GuiBase.java +++ b/src/main/java/refinedstorage/gui/GuiBase.java @@ -212,28 +212,32 @@ public abstract class GuiBase extends GuiContainer { itemRender.renderItemOverlayIntoGUI(fontRendererObj, stack, x, y, ""); if (text != null) { - GlStateManager.pushMatrix(); - GlStateManager.translate(x, y, 1); - GlStateManager.scale(0.5f, 0.5f, 1); - - GlStateManager.disableLighting(); - GlStateManager.disableRescaleNormal(); - GlStateManager.depthMask(false); - GlStateManager.enableBlend(); - GlStateManager.blendFunc(770, 771); - GlStateManager.disableDepth(); - - fontRendererObj.drawStringWithShadow(text, 30 - fontRendererObj.getStringWidth(text), 22, 16777215); - - GlStateManager.enableDepth(); - GlStateManager.enableTexture2D(); - GlStateManager.depthMask(true); - GlStateManager.enableLighting(); - GlStateManager.disableBlend(); - GlStateManager.popMatrix(); + drawQuantity(x, y, text); } } + public void drawQuantity(int x, int y, String qty) { + GlStateManager.pushMatrix(); + GlStateManager.translate(x, y, 1); + GlStateManager.scale(0.5f, 0.5f, 1); + + GlStateManager.disableLighting(); + GlStateManager.disableRescaleNormal(); + GlStateManager.depthMask(false); + GlStateManager.enableBlend(); + GlStateManager.blendFunc(770, 771); + GlStateManager.disableDepth(); + + fontRendererObj.drawStringWithShadow(qty, 30 - fontRendererObj.getStringWidth(qty), 22, 16777215); + + GlStateManager.enableDepth(); + GlStateManager.enableTexture2D(); + GlStateManager.depthMask(true); + GlStateManager.enableLighting(); + GlStateManager.disableBlend(); + GlStateManager.popMatrix(); + } + public void drawString(int x, int y, String message) { drawString(x, y, message, 4210752); } diff --git a/src/main/java/refinedstorage/gui/grid/GuiGrid.java b/src/main/java/refinedstorage/gui/grid/GuiGrid.java index 89dd33073..a8fcfaacf 100755 --- a/src/main/java/refinedstorage/gui/grid/GuiGrid.java +++ b/src/main/java/refinedstorage/gui/grid/GuiGrid.java @@ -11,6 +11,7 @@ import net.minecraft.init.SoundEvents; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.math.BlockPos; +import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fml.common.FMLCommonHandler; import refinedstorage.RefinedStorage; import refinedstorage.api.network.grid.IItemGridHandler; @@ -21,6 +22,7 @@ import refinedstorage.gui.GuiBase; import refinedstorage.gui.Scrollbar; import refinedstorage.gui.grid.sorting.GridSortingName; import refinedstorage.gui.grid.sorting.GridSortingQuantity; +import refinedstorage.gui.grid.stack.ClientStackFluid; import refinedstorage.gui.grid.stack.ClientStackItem; import refinedstorage.gui.grid.stack.IClientStack; import refinedstorage.gui.sidebutton.*; @@ -43,8 +45,10 @@ public class GuiGrid extends GuiBase { public static final GridSortingQuantity SORTING_QUANTITY = new GridSortingQuantity(); public static final GridSortingName SORTING_NAME = new GridSortingName(); - public static Multimap ITEMS = ArrayListMultimap.create(); - public static List SORTED_ITEMS = new ArrayList<>(); + public static Multimap ITEMS = ArrayListMultimap.create(); + public static Multimap FLUIDS = ArrayListMultimap.create(); + + public static List STACKS = new ArrayList<>(); private static boolean markedForSorting; @@ -62,7 +66,7 @@ public class GuiGrid extends GuiBase { public GuiGrid(ContainerGrid container, IGrid grid) { super(container, 227, (grid.getType() == EnumGridType.CRAFTING || grid.getType() == EnumGridType.PATTERN) ? 247 : 208); - setScrollbar(new Scrollbar(174, 20, 12, (grid.getType() == EnumGridType.CRAFTING || grid.getType() == EnumGridType.PATTERN) ? 70 : 88)); + setScrollbar(new Scrollbar(174, 20, 12, (grid.getType() == EnumGridType.CRAFTING || grid.getType() == EnumGridType.PATTERN || grid.getType() == EnumGridType.FLUID) ? 70 : 88)); this.container = container; this.grid = grid; @@ -89,7 +93,10 @@ public class GuiGrid extends GuiBase { searchField.yPosition = sy; } - addSideButton(new SideButtonGridViewType(grid)); + if (grid.getType() != EnumGridType.FLUID) { + addSideButton(new SideButtonGridViewType(grid)); + } + addSideButton(new SideButtonGridSortingDirection(grid)); addSideButton(new SideButtonGridSortingType(grid)); addSideButton(new SideButtonGridSearchBoxMode(this)); @@ -102,44 +109,46 @@ public class GuiGrid extends GuiBase { } private void sortItems() { - List sortedItems = new ArrayList<>(); + List stacks = new ArrayList<>(); if (grid.isConnected()) { - sortedItems.addAll(ITEMS.values()); + stacks.addAll(grid.getType() == EnumGridType.FLUID ? FLUIDS.values() : ITEMS.values()); String query = searchField.getText().trim().toLowerCase(); - Iterator t = sortedItems.iterator(); + Iterator t = stacks.iterator(); while (t.hasNext()) { IClientStack stack = t.next(); - List filteredItems = grid.getFilteredItems(); + if (grid.getType() != EnumGridType.FLUID) { + List filteredItems = grid.getFilteredItems(); - boolean found = filteredItems.isEmpty(); + boolean found = filteredItems.isEmpty(); - for (GridFilteredItem filteredItem : filteredItems) { - if (CompareUtils.compareStack(((ClientStackItem) stack).getStack(), filteredItem.getStack(), filteredItem.getCompare())) { - found = true; + for (GridFilteredItem filteredItem : filteredItems) { + if (CompareUtils.compareStack(((ClientStackItem) stack).getStack(), filteredItem.getStack(), filteredItem.getCompare())) { + found = true; - break; + break; + } } - } - if (!found) { - t.remove(); + if (!found) { + t.remove(); - continue; - } + continue; + } - if (grid.getViewType() == TileGrid.VIEW_TYPE_NON_CRAFTABLES && stack.isCraftable()) { - t.remove(); + if (grid.getViewType() == TileGrid.VIEW_TYPE_NON_CRAFTABLES && ((ClientStackItem) stack).isCraftable()) { + t.remove(); - continue; - } else if (grid.getViewType() == TileGrid.VIEW_TYPE_CRAFTABLES && !stack.isCraftable()) { - t.remove(); + continue; + } else if (grid.getViewType() == TileGrid.VIEW_TYPE_CRAFTABLES && !((ClientStackItem) stack).isCraftable()) { + t.remove(); - continue; + continue; + } } if (query.startsWith("@")) { @@ -173,14 +182,14 @@ public class GuiGrid extends GuiBase { SORTING_NAME.setSortingDirection(grid.getSortingDirection()); SORTING_QUANTITY.setSortingDirection(grid.getSortingDirection()); - Collections.sort(sortedItems, SORTING_NAME); + Collections.sort(stacks, SORTING_NAME); if (grid.getSortingType() == TileGrid.SORTING_TYPE_QUANTITY) { - Collections.sort(sortedItems, SORTING_QUANTITY); + Collections.sort(stacks, SORTING_QUANTITY); } } - SORTED_ITEMS = sortedItems; + STACKS = stacks; getScrollbar().setEnabled(getRows() > getVisibleRows()); getScrollbar().setMaxOffset(getRows() - getVisibleRows()); @@ -196,11 +205,11 @@ public class GuiGrid extends GuiBase { } private int getRows() { - return Math.max(0, (int) Math.ceil((float) SORTED_ITEMS.size() / 9F)); + return Math.max(0, (int) Math.ceil((float) STACKS.size() / 9F)); } private boolean isOverSlotWithItem() { - return grid.isConnected() && isOverSlot() && slotNumber < SORTED_ITEMS.size(); + return grid.isConnected() && isOverSlot() && slotNumber < STACKS.size(); } private boolean isOverSlot() { @@ -236,6 +245,8 @@ public class GuiGrid extends GuiBase { bindTexture("gui/crafting_grid.png"); } else if (grid.getType() == EnumGridType.PATTERN) { bindTexture("gui/pattern_grid.png"); + } else if (grid.getType() == EnumGridType.FLUID) { + bindTexture("gui/fluid_grid.png"); } else { bindTexture("gui/grid.png"); } @@ -278,8 +289,8 @@ public class GuiGrid extends GuiBase { this.slotNumber = slot; } - if (slot < SORTED_ITEMS.size()) { - SORTED_ITEMS.get(slot).draw(this, x, y, GuiScreen.isShiftKeyDown() && slotNumber == slot); + if (slot < STACKS.size()) { + STACKS.get(slot).draw(this, x, y, GuiScreen.isShiftKeyDown() && slotNumber == slot); } if (inBounds(x, y, 16, 16, mouseX, mouseY) || !grid.isConnected()) { @@ -307,7 +318,7 @@ public class GuiGrid extends GuiBase { } if (isOverSlotWithItem()) { - drawTooltip(mouseX, mouseY, SORTED_ITEMS.get(slotNumber).getTooltip()); + drawTooltip(mouseX, mouseY, STACKS.get(slotNumber).getTooltip()); } if (isOverClear(mouseX, mouseY)) { @@ -341,21 +352,21 @@ public class GuiGrid extends GuiBase { BlockPos gridPos = ((TileGrid) grid).getPos(); RefinedStorage.INSTANCE.network.sendToServer(new MessageGridPatternCreate(gridPos.getX(), gridPos.getY(), gridPos.getZ())); - } else if (grid.isConnected()) { + } else if (grid.isConnected() && grid.getType() != EnumGridType.FLUID) { if (clickedClear) { RefinedStorage.INSTANCE.network.sendToServer(new MessageGridCraftingClear((TileGrid) grid)); } ItemStack held = container.getPlayer().inventory.getItemStack(); - ClientStackItem stack = (ClientStackItem) SORTED_ITEMS.get(slotNumber); - if (isOverSlotArea(mouseX - guiLeft, mouseY - guiTop) && held != null && (clickedButton == 0 || clickedButton == 1)) { RefinedStorage.INSTANCE.network.sendToServer(new MessageGridInsertHeld(clickedButton == 1)); } if (isOverSlotWithItem() && (held == null || (held != null && clickedButton == 2))) { - if (SORTED_ITEMS.get(slotNumber).isCraftable() && (stack.getQuantity() == 0 || (GuiScreen.isShiftKeyDown() && GuiScreen.isCtrlKeyDown()))) { + ClientStackItem stack = (ClientStackItem) STACKS.get(slotNumber); + + if (stack.isCraftable() && (stack.getQuantity() == 0 || (GuiScreen.isShiftKeyDown() && GuiScreen.isCtrlKeyDown()))) { FMLCommonHandler.instance().showGuiScreen(new GuiCraftingSettings(this, container.getPlayer(), stack)); } else { int flags = 0; diff --git a/src/main/java/refinedstorage/gui/grid/stack/ClientStackFluid.java b/src/main/java/refinedstorage/gui/grid/stack/ClientStackFluid.java new file mode 100755 index 000000000..60d165993 --- /dev/null +++ b/src/main/java/refinedstorage/gui/grid/stack/ClientStackFluid.java @@ -0,0 +1,64 @@ +package refinedstorage.gui.grid.stack; + +import io.netty.buffer.ByteBuf; +import mezz.jei.gui.ingredients.FluidStackRenderer; +import net.minecraft.client.Minecraft; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fml.common.network.ByteBufUtils; +import refinedstorage.gui.GuiBase; + +import java.util.Locale; + +public class ClientStackFluid implements IClientStack { + private FluidStack stack; + private FluidStackRenderer renderer; + + public ClientStackFluid(ByteBuf buf) { + stack = new FluidStack(FluidRegistry.getFluid(ByteBufUtils.readUTF8String(buf)), buf.readInt(), ByteBufUtils.readTag(buf)); + renderer = new FluidStackRenderer(1000, false, 16, 16, null); + } + + public FluidStack getStack() { + return stack; + } + + @Override + public String getName() { + return stack.getFluid().getLocalizedName(stack); + } + + // @todo: ;-) + @Override + public String getModId() { + return "minecraft"; + } + + @Override + public String getTooltip() { + return stack.getFluid().getLocalizedName(stack); + } + + @Override + public int getQuantity() { + return stack.amount; + } + + @Override + public void draw(GuiBase gui, int x, int y, boolean isOverWithShift) { + renderer.draw(Minecraft.getMinecraft(), x, y, stack); + + gui.drawQuantity(x, y, String.format(Locale.US, "%.1f", (float) stack.amount / 1000).replace(".0", "") + "B"); + } + + @Override + public boolean equals(Object obj) { + return obj instanceof ClientStackFluid && ((ClientStackFluid) obj).getStack().isFluidEqual(stack); + } + + public static void write(ByteBuf buf, FluidStack stack) { + ByteBufUtils.writeUTF8String(buf, FluidRegistry.getFluidName(stack.getFluid())); + buf.writeInt(stack.amount); + ByteBufUtils.writeTag(buf, stack.tag); + } +} diff --git a/src/main/java/refinedstorage/gui/grid/stack/ClientStackItem.java b/src/main/java/refinedstorage/gui/grid/stack/ClientStackItem.java index ae3908859..b9b0ac9d9 100755 --- a/src/main/java/refinedstorage/gui/grid/stack/ClientStackItem.java +++ b/src/main/java/refinedstorage/gui/grid/stack/ClientStackItem.java @@ -32,7 +32,6 @@ public class ClientStackItem implements IClientStack { return stack; } - @Override public boolean isCraftable() { return craftable; } diff --git a/src/main/java/refinedstorage/gui/grid/stack/IClientStack.java b/src/main/java/refinedstorage/gui/grid/stack/IClientStack.java index c5a0dc007..e6820103b 100755 --- a/src/main/java/refinedstorage/gui/grid/stack/IClientStack.java +++ b/src/main/java/refinedstorage/gui/grid/stack/IClientStack.java @@ -3,8 +3,6 @@ package refinedstorage.gui.grid.stack; import refinedstorage.gui.GuiBase; public interface IClientStack { - boolean isCraftable(); - String getName(); String getModId(); diff --git a/src/main/java/refinedstorage/network/MessageGridFluidDelta.java b/src/main/java/refinedstorage/network/MessageGridFluidDelta.java new file mode 100755 index 000000000..a14070fee --- /dev/null +++ b/src/main/java/refinedstorage/network/MessageGridFluidDelta.java @@ -0,0 +1,61 @@ +package refinedstorage.network; + +import io.netty.buffer.ByteBuf; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fml.common.network.simpleimpl.IMessage; +import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler; +import net.minecraftforge.fml.common.network.simpleimpl.MessageContext; +import refinedstorage.gui.grid.GuiGrid; +import refinedstorage.gui.grid.stack.ClientStackFluid; + +public class MessageGridFluidDelta implements IMessage, IMessageHandler { + private FluidStack stack; + private int delta; + + private ClientStackFluid clientStack; + + public MessageGridFluidDelta() { + } + + public MessageGridFluidDelta(FluidStack stack, int delta) { + this.stack = stack; + this.delta = delta; + } + + @Override + public void fromBytes(ByteBuf buf) { + clientStack = new ClientStackFluid(buf); + delta = buf.readInt(); + } + + @Override + public void toBytes(ByteBuf buf) { + ClientStackFluid.write(buf, stack); + buf.writeInt(delta); + } + + @Override + public IMessage onMessage(MessageGridFluidDelta message, MessageContext ctx) { + Fluid fluid = message.clientStack.getStack().getFluid(); + + for (ClientStackFluid stack : GuiGrid.FLUIDS.get(fluid)) { + if (stack.equals(message.clientStack)) { + if (stack.getStack().amount + message.delta == 0) { + GuiGrid.FLUIDS.remove(fluid, stack); + } else { + stack.getStack().amount += message.delta; + } + + GuiGrid.markForSorting(); + + return null; + } + } + + GuiGrid.FLUIDS.put(fluid, message.clientStack); + GuiGrid.markForSorting(); + + return null; + } +} diff --git a/src/main/java/refinedstorage/network/MessageGridFluidUpdate.java b/src/main/java/refinedstorage/network/MessageGridFluidUpdate.java new file mode 100755 index 000000000..fa88d7c45 --- /dev/null +++ b/src/main/java/refinedstorage/network/MessageGridFluidUpdate.java @@ -0,0 +1,56 @@ +package refinedstorage.network; + +import io.netty.buffer.ByteBuf; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fml.common.network.simpleimpl.IMessage; +import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler; +import net.minecraftforge.fml.common.network.simpleimpl.MessageContext; +import refinedstorage.api.network.INetworkMaster; +import refinedstorage.gui.grid.GuiGrid; +import refinedstorage.gui.grid.stack.ClientStackFluid; + +import java.util.ArrayList; +import java.util.List; + +public class MessageGridFluidUpdate implements IMessage, IMessageHandler { + private INetworkMaster network; + private List stacks = new ArrayList<>(); + + public MessageGridFluidUpdate() { + } + + public MessageGridFluidUpdate(INetworkMaster network) { + this.network = network; + } + + @Override + public void fromBytes(ByteBuf buf) { + int items = buf.readInt(); + + for (int i = 0; i < items; ++i) { + this.stacks.add(new ClientStackFluid(buf)); + } + } + + @Override + public void toBytes(ByteBuf buf) { + buf.writeInt(network.getFluidStorage().getStacks().size()); + + for (FluidStack stack : network.getFluidStorage().getStacks()) { + ClientStackFluid.write(buf, stack); + } + } + + @Override + public IMessage onMessage(MessageGridFluidUpdate message, MessageContext ctx) { + GuiGrid.FLUIDS.clear(); + + for (ClientStackFluid item : message.stacks) { + GuiGrid.FLUIDS.put(item.getStack().getFluid(), item); + } + + GuiGrid.markForSorting(); + + return null; + } +} diff --git a/src/main/java/refinedstorage/network/MessageGridDelta.java b/src/main/java/refinedstorage/network/MessageGridItemDelta.java similarity index 77% rename from src/main/java/refinedstorage/network/MessageGridDelta.java rename to src/main/java/refinedstorage/network/MessageGridItemDelta.java index 89f4b19be..dc6e5c838 100755 --- a/src/main/java/refinedstorage/network/MessageGridDelta.java +++ b/src/main/java/refinedstorage/network/MessageGridItemDelta.java @@ -9,19 +9,18 @@ import net.minecraftforge.fml.common.network.simpleimpl.MessageContext; import refinedstorage.api.network.INetworkMaster; import refinedstorage.gui.grid.GuiGrid; import refinedstorage.gui.grid.stack.ClientStackItem; -import refinedstorage.gui.grid.stack.IClientStack; -public class MessageGridDelta implements IMessage, IMessageHandler { +public class MessageGridItemDelta implements IMessage, IMessageHandler { private INetworkMaster network; private ItemStack stack; private int delta; private ClientStackItem clientStack; - public MessageGridDelta() { + public MessageGridItemDelta() { } - public MessageGridDelta(INetworkMaster network, ItemStack stack, int delta) { + public MessageGridItemDelta(INetworkMaster network, ItemStack stack, int delta) { this.network = network; this.stack = stack; this.delta = delta; @@ -40,12 +39,10 @@ public class MessageGridDelta implements IMessage, IMessageHandler { +public class MessageGridItemUpdate implements IMessage, IMessageHandler { private INetworkMaster network; - private List items = new ArrayList<>(); + private List stacks = new ArrayList<>(); - public MessageGridUpdate() { + public MessageGridItemUpdate() { } - public MessageGridUpdate(INetworkMaster network) { + public MessageGridItemUpdate(INetworkMaster network) { this.network = network; } @@ -28,7 +28,7 @@ public class MessageGridUpdate implements IMessage, IMessageHandler isWatchingGrid(player, EnumGridType.NORMAL, EnumGridType.CRAFTING, EnumGridType.PATTERN)) .forEach(this::sendItemStorageToClient); } @Override public void sendItemStorageToClient(EntityPlayerMP player) { - RefinedStorage.INSTANCE.network.sendTo(new MessageGridUpdate(this), player); + RefinedStorage.INSTANCE.network.sendTo(new MessageGridItemUpdate(this), player); } @Override public void sendItemStorageDeltaToClient(ItemStack stack, int delta) { worldObj.getMinecraftServer().getPlayerList().getPlayerList().stream() - .filter(this::isWatchingGrid) - .forEach(player -> RefinedStorage.INSTANCE.network.sendTo(new MessageGridDelta(this, stack, delta), player)); + .filter(player -> isWatchingGrid(player, EnumGridType.NORMAL, EnumGridType.CRAFTING, EnumGridType.PATTERN)) + .forEach(player -> RefinedStorage.INSTANCE.network.sendTo(new MessageGridItemDelta(this, stack, delta), player)); } - private boolean isWatchingGrid(EntityPlayer player) { - return player.openContainer.getClass() == ContainerGrid.class && pos.equals(((ContainerGrid) player.openContainer).getGrid().getNetworkPosition()); + @Override + public void sendFluidStorageToClient() { + worldObj.getMinecraftServer().getPlayerList().getPlayerList().stream() + .filter(player -> isWatchingGrid(player, EnumGridType.FLUID)) + .forEach(this::sendFluidStorageToClient); + } + + @Override + public void sendFluidStorageToClient(EntityPlayerMP player) { + RefinedStorage.INSTANCE.network.sendTo(new MessageGridFluidUpdate(this), player); + } + + @Override + public void sendFluidStorageDeltaToClient(FluidStack stack, int delta) { + worldObj.getMinecraftServer().getPlayerList().getPlayerList().stream() + .filter(player -> isWatchingGrid(player, EnumGridType.FLUID)) + .forEach(player -> RefinedStorage.INSTANCE.network.sendTo(new MessageGridFluidDelta(stack, delta), player)); + } + + private boolean isWatchingGrid(EntityPlayer player, EnumGridType... types) { + if (player.openContainer.getClass() == ContainerGrid.class) { + IGrid grid = ((ContainerGrid) player.openContainer).getGrid(); + + if (pos.equals(grid.getNetworkPosition())) { + return Arrays.asList(types).contains(grid.getType()); + } + } + + return false; } @Override diff --git a/src/main/java/refinedstorage/tile/grid/TileGrid.java b/src/main/java/refinedstorage/tile/grid/TileGrid.java index ac4c04741..33fe14ca9 100755 --- a/src/main/java/refinedstorage/tile/grid/TileGrid.java +++ b/src/main/java/refinedstorage/tile/grid/TileGrid.java @@ -190,7 +190,11 @@ public class TileGrid extends TileNode implements IGrid { public void onGridOpened(EntityPlayer player) { if (isConnected()) { - network.sendItemStorageToClient((EntityPlayerMP) player); + if (getType() == EnumGridType.FLUID) { + network.sendFluidStorageToClient((EntityPlayerMP) player); + } else { + network.sendItemStorageToClient((EntityPlayerMP) player); + } } } diff --git a/src/main/resources/assets/refinedstorage/lang/en_US.lang b/src/main/resources/assets/refinedstorage/lang/en_US.lang index 7f2a306d3..842dc93c0 100755 --- a/src/main/resources/assets/refinedstorage/lang/en_US.lang +++ b/src/main/resources/assets/refinedstorage/lang/en_US.lang @@ -102,6 +102,7 @@ block.refinedstorage:cable.name=Cable block.refinedstorage:grid.0.name=Grid block.refinedstorage:grid.1.name=Crafting Grid block.refinedstorage:grid.2.name=Pattern Grid +block.refinedstorage:grid.3.name=Fluid Grid block.refinedstorage:disk_drive.name=Disk Drive block.refinedstorage:external_storage.name=External Storage block.refinedstorage:importer.name=Importer diff --git a/src/main/resources/assets/refinedstorage/textures/gui/fluid_grid.png b/src/main/resources/assets/refinedstorage/textures/gui/fluid_grid.png new file mode 100755 index 0000000000000000000000000000000000000000..5ba8ff87f4ed9db1dbf9de6163d126162c4a30d6 GIT binary patch literal 1974 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K58911MRQ8&P5D>38$lZxy-8q?;Kn_c~qpu?a z!^VE@KZ&di49pAxJ|V6^adUI?(9qEC?(Sp9j{X1tA1E>kMnhnPgh10{aTQRmDGBlm z1}6TI3>bpHv#SE5owL9rvY3H^?=T269?xHq0u+=iag8Vm&QB{TPb^AhC`ioAE78kK zEm1JhGte_MSj)wA09c~%dAc};RK&f#dofSgP@wIiYUcg_6Pdm1uK6B5dg`Nt&U}9l z<+H6fZM#-%SXH+B?zYa|d+(Ipwo`vs+L-(5`~N=`kq^ud9N!YFx1Q?_gJsUKd;AZA zuA0^#OwQ*h(0%pZpOb;1VUI^XC}~bO+{U7C-g-|Y!@BSPmx@l=|6t>H<{!ryCD=YZ zuD*WeTKzp6+o$^^IVRL+_u1Xg{rqLhZ#JN|%8BF1}QyoSPZITg7`~b5cAvO*Lg*5xm}D!?=NZXxqUKc?yV5!Cs!69 z;xE1ras-3iHV_E}FduG^k1d~UoE6M7p?Z4Q!@GWIudghVQdll0S~ugj8A#!W4Zuf7_8mIx1^>53$47H3=>J_Be!t$T;m@*@i}$$I zUuJx=vmLD6vbG7Rb;5Hwu?B`GzYU^V@4udS(`xHVwiC9O10OyOgSZZ=1Z*3SII!aV z;}y3>n4jER8d|Y^GDN-l+Z7)U-`NfdAP|6A0AdGV@yYxx2+sqRfLs7l3IYz0&^;gn zG)v*U?HYTAoz=Ob_ui*%^UGbu`047i6(6{xusY1)Ztgo^ynu9WFgws8zx40k+}q!Z zmuK1>SZ{Ax-NyFE;A8$<_Ivd{KSl1!SEaDJpA&63lgd0{XAXnWbY6#Nn;1{Tm@&*e o&8AR%lOaVFOo`AgM>FVdQ&MBb@0L_GHYXATM literal 0 HcmV?d00001 From 24a765f705c9e2e8acc0dec71c2a262e467c0e52 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sat, 13 Aug 2016 02:00:43 +0200 Subject: [PATCH 168/214] Add fluid grid handler --- .../api/network/INetworkMaster.java | 6 +++ .../api/network/NetworkUtils.java | 5 ++ .../api/network/grid/IFluidGridHandler.java | 36 ++++++++++++++ .../network/grid/FluidGridHandler.java | 33 +++++++++++++ .../container/ContainerGrid.java | 8 ++- .../java/refinedstorage/gui/grid/GuiGrid.java | 49 ++++++++++--------- .../gui/grid/stack/ClientStackFluid.java | 17 +++++-- .../gui/grid/stack/ClientStackItem.java | 9 ++-- .../gui/grid/stack/IClientStack.java | 2 + .../network/MessageGridCraftingStart.java | 2 +- .../network/MessageGridFluidInsertHeld.java | 34 +++++++++++++ .../network/MessageGridFluidPull.java | 46 +++++++++++++++++ ...ld.java => MessageGridItemInsertHeld.java} | 10 ++-- ...GridPull.java => MessageGridItemPull.java} | 10 ++-- .../refinedstorage/proxy/CommonProxy.java | 6 ++- .../refinedstorage/tile/TileController.java | 13 ++++- .../java/refinedstorage/tile/grid/IGrid.java | 5 +- .../refinedstorage/tile/grid/TileGrid.java | 8 ++- .../tile/grid/WirelessGrid.java | 8 ++- 19 files changed, 255 insertions(+), 52 deletions(-) create mode 100755 src/main/java/refinedstorage/api/network/grid/IFluidGridHandler.java create mode 100755 src/main/java/refinedstorage/apiimpl/network/grid/FluidGridHandler.java create mode 100755 src/main/java/refinedstorage/network/MessageGridFluidInsertHeld.java create mode 100755 src/main/java/refinedstorage/network/MessageGridFluidPull.java rename src/main/java/refinedstorage/network/{MessageGridInsertHeld.java => MessageGridItemInsertHeld.java} (73%) rename src/main/java/refinedstorage/network/{MessageGridPull.java => MessageGridItemPull.java} (76%) diff --git a/src/main/java/refinedstorage/api/network/INetworkMaster.java b/src/main/java/refinedstorage/api/network/INetworkMaster.java index 9f94b5b25..bf1288b1b 100755 --- a/src/main/java/refinedstorage/api/network/INetworkMaster.java +++ b/src/main/java/refinedstorage/api/network/INetworkMaster.java @@ -7,6 +7,7 @@ import net.minecraft.util.math.BlockPos; import net.minecraftforge.fluids.FluidStack; import refinedstorage.api.autocrafting.ICraftingPattern; import refinedstorage.api.autocrafting.ICraftingTask; +import refinedstorage.api.network.grid.IFluidGridHandler; import refinedstorage.api.network.grid.IItemGridHandler; import refinedstorage.api.storage.CompareUtils; import refinedstorage.api.storage.fluid.IGroupedFluidStorage; @@ -50,6 +51,11 @@ public interface INetworkMaster { */ IItemGridHandler getItemGridHandler(); + /** + * @return The {@link IFluidGridHandler} for this network + */ + IFluidGridHandler getFluidGridHandler(); + /** * @return The {@link IWirelessGridHandler} for this network */ diff --git a/src/main/java/refinedstorage/api/network/NetworkUtils.java b/src/main/java/refinedstorage/api/network/NetworkUtils.java index 2c250ec31..343e726d5 100755 --- a/src/main/java/refinedstorage/api/network/NetworkUtils.java +++ b/src/main/java/refinedstorage/api/network/NetworkUtils.java @@ -2,6 +2,7 @@ package refinedstorage.api.network; import net.minecraft.item.ItemStack; import net.minecraft.world.World; +import net.minecraftforge.fluids.FluidStack; import refinedstorage.api.autocrafting.ICraftingPattern; import refinedstorage.api.storage.CompareUtils; @@ -29,6 +30,10 @@ public final class NetworkUtils { return stack.getItem().hashCode() * (stack.getItemDamage() + 1) * (stack.hasTagCompound() ? stack.getTagCompound().hashCode() : 1); } + public static int getFluidStackHashCode(FluidStack stack) { + return stack.getFluid().hashCode() * (stack.tag != null ? stack.tag.hashCode() : 1); + } + public static int getNodeHashCode(World world, INetworkNode node) { int result = node.getPosition().hashCode(); result = 31 * result + world.provider.getDimension(); diff --git a/src/main/java/refinedstorage/api/network/grid/IFluidGridHandler.java b/src/main/java/refinedstorage/api/network/grid/IFluidGridHandler.java new file mode 100755 index 000000000..dde84a07a --- /dev/null +++ b/src/main/java/refinedstorage/api/network/grid/IFluidGridHandler.java @@ -0,0 +1,36 @@ +package refinedstorage.api.network.grid; + +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; + +import javax.annotation.Nullable; + +/** + * Defines the behavior of item grids. + */ +public interface IFluidGridHandler { + /** + * Called when a player tries to extract a fluid from the grid. + * + * @param hash The hash of the fluid we're trying to extract, see {@link refinedstorage.api.network.NetworkUtils#getFluidStackHashCode(net.minecraftforge.fluids.FluidStack)} + * @param shift If we're shift clicking + * @param player The player that is attempting the extraction + */ + void onExtract(int hash, boolean shift, EntityPlayerMP player); + + /** + * Called when a player tries to insert fluids to the grid. + * + * @param container A stack with a container we're trying to insert + * @return The remainder, or null if there is no remainder + */ + @Nullable + ItemStack onInsert(ItemStack container); + + /** + * Called when a player is trying to insert a fluid that it is holding in their hand in the GUI. + * + * @param player The player that is attempting the insert + */ + void onInsertHeldContainer(EntityPlayerMP player); +} diff --git a/src/main/java/refinedstorage/apiimpl/network/grid/FluidGridHandler.java b/src/main/java/refinedstorage/apiimpl/network/grid/FluidGridHandler.java new file mode 100755 index 000000000..0086c85e8 --- /dev/null +++ b/src/main/java/refinedstorage/apiimpl/network/grid/FluidGridHandler.java @@ -0,0 +1,33 @@ +package refinedstorage.apiimpl.network.grid; + +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import refinedstorage.api.network.INetworkMaster; +import refinedstorage.api.network.grid.IFluidGridHandler; + +import javax.annotation.Nullable; + +public class FluidGridHandler implements IFluidGridHandler { + private INetworkMaster network; + + public FluidGridHandler(INetworkMaster network) { + this.network = network; + } + + @Override + public void onExtract(int hash, boolean shift, EntityPlayerMP player) { + System.out.println("Extract " + hash); + } + + @Nullable + @Override + public ItemStack onInsert(ItemStack container) { + System.out.println("Insert " + container); + return container; + } + + @Override + public void onInsertHeldContainer(EntityPlayerMP player) { + System.out.println("Insert held!"); + } +} diff --git a/src/main/java/refinedstorage/container/ContainerGrid.java b/src/main/java/refinedstorage/container/ContainerGrid.java index e6c611dac..353ee34c3 100755 --- a/src/main/java/refinedstorage/container/ContainerGrid.java +++ b/src/main/java/refinedstorage/container/ContainerGrid.java @@ -106,8 +106,12 @@ public class ContainerGrid extends ContainerBase { if (slot.getHasStack()) { if (slot == craftingResultSlot) { ((TileGrid) grid).onCraftedShift(this, player); - } else if (grid.getHandler() != null && slot != patternResultSlot && !(slot instanceof SlotSpecimenLegacy) && grid.getType() != EnumGridType.FLUID) { - slot.putStack(grid.getHandler().onInsert(slot.getStack())); + } else if (slot != patternResultSlot && !(slot instanceof SlotSpecimenLegacy)) { + if (grid.getType() != EnumGridType.FLUID && grid.getItemHandler() != null) { + slot.putStack(grid.getItemHandler().onInsert(slot.getStack())); + } else if (grid.getType() == EnumGridType.FLUID && grid.getFluidHandler() != null) { + slot.putStack(grid.getFluidHandler().onInsert(slot.getStack())); + } detectAndSendChanges(); } diff --git a/src/main/java/refinedstorage/gui/grid/GuiGrid.java b/src/main/java/refinedstorage/gui/grid/GuiGrid.java index a8fcfaacf..bc7cdc264 100755 --- a/src/main/java/refinedstorage/gui/grid/GuiGrid.java +++ b/src/main/java/refinedstorage/gui/grid/GuiGrid.java @@ -27,10 +27,7 @@ import refinedstorage.gui.grid.stack.ClientStackItem; import refinedstorage.gui.grid.stack.IClientStack; import refinedstorage.gui.sidebutton.*; import refinedstorage.integration.jei.IntegrationJEI; -import refinedstorage.network.MessageGridCraftingClear; -import refinedstorage.network.MessageGridInsertHeld; -import refinedstorage.network.MessageGridPatternCreate; -import refinedstorage.network.MessageGridPull; +import refinedstorage.network.*; import refinedstorage.tile.grid.IGrid; import refinedstorage.tile.grid.TileGrid; import refinedstorage.tile.grid.WirelessGrid; @@ -352,7 +349,7 @@ public class GuiGrid extends GuiBase { BlockPos gridPos = ((TileGrid) grid).getPos(); RefinedStorage.INSTANCE.network.sendToServer(new MessageGridPatternCreate(gridPos.getX(), gridPos.getY(), gridPos.getZ())); - } else if (grid.isConnected() && grid.getType() != EnumGridType.FLUID) { + } else if (grid.isConnected()) { if (clickedClear) { RefinedStorage.INSTANCE.network.sendToServer(new MessageGridCraftingClear((TileGrid) grid)); } @@ -360,30 +357,34 @@ public class GuiGrid extends GuiBase { ItemStack held = container.getPlayer().inventory.getItemStack(); if (isOverSlotArea(mouseX - guiLeft, mouseY - guiTop) && held != null && (clickedButton == 0 || clickedButton == 1)) { - RefinedStorage.INSTANCE.network.sendToServer(new MessageGridInsertHeld(clickedButton == 1)); + RefinedStorage.INSTANCE.network.sendToServer(grid.getType() == EnumGridType.FLUID ? new MessageGridFluidInsertHeld() : new MessageGridItemInsertHeld(clickedButton == 1)); } if (isOverSlotWithItem() && (held == null || (held != null && clickedButton == 2))) { - ClientStackItem stack = (ClientStackItem) STACKS.get(slotNumber); + if (grid.getType() != EnumGridType.FLUID) { + ClientStackItem stack = (ClientStackItem) STACKS.get(slotNumber); - if (stack.isCraftable() && (stack.getQuantity() == 0 || (GuiScreen.isShiftKeyDown() && GuiScreen.isCtrlKeyDown()))) { - FMLCommonHandler.instance().showGuiScreen(new GuiCraftingSettings(this, container.getPlayer(), stack)); + if (stack.isCraftable() && (stack.getQuantity() == 0 || (GuiScreen.isShiftKeyDown() && GuiScreen.isCtrlKeyDown()))) { + FMLCommonHandler.instance().showGuiScreen(new GuiCraftingSettings(this, container.getPlayer(), stack)); + } else { + int flags = 0; + + if (clickedButton == 1) { + flags |= IItemGridHandler.EXTRACT_HALF; + } + + if (GuiScreen.isShiftKeyDown()) { + flags |= IItemGridHandler.EXTRACT_SHIFT; + } + + if (clickedButton == 2) { + flags |= IItemGridHandler.EXTRACT_SINGLE; + } + + RefinedStorage.INSTANCE.network.sendToServer(new MessageGridItemPull(stack.getHash(), flags)); + } } else { - int flags = 0; - - if (clickedButton == 1) { - flags |= IItemGridHandler.EXTRACT_HALF; - } - - if (GuiScreen.isShiftKeyDown()) { - flags |= IItemGridHandler.EXTRACT_SHIFT; - } - - if (clickedButton == 2) { - flags |= IItemGridHandler.EXTRACT_SINGLE; - } - - RefinedStorage.INSTANCE.network.sendToServer(new MessageGridPull(stack.getHash(), flags)); + RefinedStorage.INSTANCE.network.sendToServer(new MessageGridFluidPull(STACKS.get(slotNumber).getHash(), GuiScreen.isShiftKeyDown())); } } } diff --git a/src/main/java/refinedstorage/gui/grid/stack/ClientStackFluid.java b/src/main/java/refinedstorage/gui/grid/stack/ClientStackFluid.java index 60d165993..13e9b5d6d 100755 --- a/src/main/java/refinedstorage/gui/grid/stack/ClientStackFluid.java +++ b/src/main/java/refinedstorage/gui/grid/stack/ClientStackFluid.java @@ -6,32 +6,40 @@ import net.minecraft.client.Minecraft; import net.minecraftforge.fluids.FluidRegistry; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fml.common.network.ByteBufUtils; +import refinedstorage.api.network.NetworkUtils; import refinedstorage.gui.GuiBase; import java.util.Locale; public class ClientStackFluid implements IClientStack { + private int hash; private FluidStack stack; private FluidStackRenderer renderer; public ClientStackFluid(ByteBuf buf) { - stack = new FluidStack(FluidRegistry.getFluid(ByteBufUtils.readUTF8String(buf)), buf.readInt(), ByteBufUtils.readTag(buf)); - renderer = new FluidStackRenderer(1000, false, 16, 16, null); + this.hash = buf.readInt(); + this.stack = new FluidStack(FluidRegistry.getFluid(ByteBufUtils.readUTF8String(buf)), buf.readInt(), ByteBufUtils.readTag(buf)); + // @TODO: Switch to own implementation + this.renderer = new FluidStackRenderer(1000, false, 16, 16, null); } public FluidStack getStack() { return stack; } + @Override + public int getHash() { + return hash; + } + @Override public String getName() { return stack.getFluid().getLocalizedName(stack); } - // @todo: ;-) @Override public String getModId() { - return "minecraft"; + return stack.getFluid().getStill(stack).getResourceDomain(); } @Override @@ -57,6 +65,7 @@ public class ClientStackFluid implements IClientStack { } public static void write(ByteBuf buf, FluidStack stack) { + buf.writeInt(NetworkUtils.getFluidStackHashCode(stack)); ByteBufUtils.writeUTF8String(buf, FluidRegistry.getFluidName(stack.getFluid())); buf.writeInt(stack.amount); ByteBufUtils.writeTag(buf, stack.tag); diff --git a/src/main/java/refinedstorage/gui/grid/stack/ClientStackItem.java b/src/main/java/refinedstorage/gui/grid/stack/ClientStackItem.java index b9b0ac9d9..20eb9ea07 100755 --- a/src/main/java/refinedstorage/gui/grid/stack/ClientStackItem.java +++ b/src/main/java/refinedstorage/gui/grid/stack/ClientStackItem.java @@ -24,10 +24,6 @@ public class ClientStackItem implements IClientStack { craftable = buf.readBoolean(); } - public int getHash() { - return hash; - } - public ItemStack getStack() { return stack; } @@ -36,6 +32,11 @@ public class ClientStackItem implements IClientStack { return craftable; } + @Override + public int getHash() { + return hash; + } + @Override public String getName() { return stack.getDisplayName(); diff --git a/src/main/java/refinedstorage/gui/grid/stack/IClientStack.java b/src/main/java/refinedstorage/gui/grid/stack/IClientStack.java index e6820103b..8aae2cc32 100755 --- a/src/main/java/refinedstorage/gui/grid/stack/IClientStack.java +++ b/src/main/java/refinedstorage/gui/grid/stack/IClientStack.java @@ -3,6 +3,8 @@ package refinedstorage.gui.grid.stack; import refinedstorage.gui.GuiBase; public interface IClientStack { + int getHash(); + String getName(); String getModId(); diff --git a/src/main/java/refinedstorage/network/MessageGridCraftingStart.java b/src/main/java/refinedstorage/network/MessageGridCraftingStart.java index 853d95a60..e13ad0159 100755 --- a/src/main/java/refinedstorage/network/MessageGridCraftingStart.java +++ b/src/main/java/refinedstorage/network/MessageGridCraftingStart.java @@ -36,7 +36,7 @@ public class MessageGridCraftingStart extends MessageHandlerPlayerToServer implements IMessage { + public MessageGridFluidInsertHeld() { + } + + @Override + public void fromBytes(ByteBuf buf) { + } + + @Override + public void toBytes(ByteBuf buf) { + } + + @Override + public void handle(MessageGridFluidInsertHeld message, EntityPlayerMP player) { + Container container = player.openContainer; + + if (container instanceof ContainerGrid) { + IFluidGridHandler handler = ((ContainerGrid) container).getGrid().getFluidHandler(); + + if (handler != null) { + handler.onInsertHeldContainer(player); + } + } + } +} diff --git a/src/main/java/refinedstorage/network/MessageGridFluidPull.java b/src/main/java/refinedstorage/network/MessageGridFluidPull.java new file mode 100755 index 000000000..0210ef782 --- /dev/null +++ b/src/main/java/refinedstorage/network/MessageGridFluidPull.java @@ -0,0 +1,46 @@ +package refinedstorage.network; + +import io.netty.buffer.ByteBuf; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.inventory.Container; +import net.minecraftforge.fml.common.network.simpleimpl.IMessage; +import refinedstorage.api.network.grid.IFluidGridHandler; +import refinedstorage.container.ContainerGrid; + +public class MessageGridFluidPull extends MessageHandlerPlayerToServer implements IMessage { + private int hash; + private boolean shift; + + public MessageGridFluidPull() { + } + + public MessageGridFluidPull(int hash, boolean shift) { + this.hash = hash; + this.shift = shift; + } + + @Override + public void fromBytes(ByteBuf buf) { + hash = buf.readInt(); + shift = buf.readBoolean(); + } + + @Override + public void toBytes(ByteBuf buf) { + buf.writeInt(hash); + buf.writeBoolean(shift); + } + + @Override + public void handle(MessageGridFluidPull message, EntityPlayerMP player) { + Container container = player.openContainer; + + if (container instanceof ContainerGrid) { + IFluidGridHandler handler = ((ContainerGrid) container).getGrid().getFluidHandler(); + + if (handler != null) { + handler.onExtract(message.hash, message.shift, player); + } + } + } +} diff --git a/src/main/java/refinedstorage/network/MessageGridInsertHeld.java b/src/main/java/refinedstorage/network/MessageGridItemInsertHeld.java similarity index 73% rename from src/main/java/refinedstorage/network/MessageGridInsertHeld.java rename to src/main/java/refinedstorage/network/MessageGridItemInsertHeld.java index d931e944e..8aee35947 100755 --- a/src/main/java/refinedstorage/network/MessageGridInsertHeld.java +++ b/src/main/java/refinedstorage/network/MessageGridItemInsertHeld.java @@ -7,13 +7,13 @@ import net.minecraftforge.fml.common.network.simpleimpl.IMessage; import refinedstorage.api.network.grid.IItemGridHandler; import refinedstorage.container.ContainerGrid; -public class MessageGridInsertHeld extends MessageHandlerPlayerToServer implements IMessage { +public class MessageGridItemInsertHeld extends MessageHandlerPlayerToServer implements IMessage { private boolean single; - public MessageGridInsertHeld() { + public MessageGridItemInsertHeld() { } - public MessageGridInsertHeld(boolean single) { + public MessageGridItemInsertHeld(boolean single) { this.single = single; } @@ -28,11 +28,11 @@ public class MessageGridInsertHeld extends MessageHandlerPlayerToServer implements IMessage { +public class MessageGridItemPull extends MessageHandlerPlayerToServer implements IMessage { private int hash; private int flags; - public MessageGridPull() { + public MessageGridItemPull() { } - public MessageGridPull(int hash, int flags) { + public MessageGridItemPull(int hash, int flags) { this.hash = hash; this.flags = flags; } @@ -32,11 +32,11 @@ public class MessageGridPull extends MessageHandlerPlayerToServer Date: Sat, 13 Aug 2016 02:23:30 +0200 Subject: [PATCH 169/214] Insertion of fluids --- .../network/grid/FluidGridHandler.java | 23 +++++++- .../refinedstorage/tile/TileController.java | 4 -- .../refinedstorage/tile/TileDiskDrive.java | 57 +++++++++++++++---- 3 files changed, 67 insertions(+), 17 deletions(-) diff --git a/src/main/java/refinedstorage/apiimpl/network/grid/FluidGridHandler.java b/src/main/java/refinedstorage/apiimpl/network/grid/FluidGridHandler.java index 0086c85e8..1633fb8fc 100755 --- a/src/main/java/refinedstorage/apiimpl/network/grid/FluidGridHandler.java +++ b/src/main/java/refinedstorage/apiimpl/network/grid/FluidGridHandler.java @@ -2,6 +2,10 @@ package refinedstorage.apiimpl.network.grid; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.capability.CapabilityFluidHandler; +import net.minecraftforge.fluids.capability.IFluidHandler; import refinedstorage.api.network.INetworkMaster; import refinedstorage.api.network.grid.IFluidGridHandler; @@ -16,18 +20,31 @@ public class FluidGridHandler implements IFluidGridHandler { @Override public void onExtract(int hash, boolean shift, EntityPlayerMP player) { - System.out.println("Extract " + hash); + System.out.println("Extract " + hash + " (shift = " + shift + ")"); } @Nullable @Override public ItemStack onInsert(ItemStack container) { - System.out.println("Insert " + container); + if (container.hasCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, null)) { + IFluidHandler handler = container.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, null); + + FluidStack drainPre = handler.drain(Fluid.BUCKET_VOLUME, false); + + if (drainPre != null && network.insertFluid(drainPre, drainPre.amount, true) == null) { + FluidStack drain = handler.drain(Fluid.BUCKET_VOLUME, true); + + network.insertFluid(drain, drain.amount, false); + } + } + return container; } @Override public void onInsertHeldContainer(EntityPlayerMP player) { - System.out.println("Insert held!"); + onInsert(player.inventory.getItemStack()); + + player.updateHeldItem(); } } diff --git a/src/main/java/refinedstorage/tile/TileController.java b/src/main/java/refinedstorage/tile/TileController.java index b9ac7c202..a2add346b 100755 --- a/src/main/java/refinedstorage/tile/TileController.java +++ b/src/main/java/refinedstorage/tile/TileController.java @@ -14,7 +14,6 @@ import net.minecraft.util.EnumFacing; import net.minecraft.util.math.BlockPos; import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.common.util.Constants; -import net.minecraftforge.fluids.FluidRegistry; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.items.ItemHandlerHelper; import refinedstorage.RefinedStorage; @@ -184,9 +183,6 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR dataManager.addParameter(ENERGY_CAPACITY); dataManager.addParameter(NODES); - fluidStorage.add(new FluidStack(FluidRegistry.WATER, 1000 * 32), true); - fluidStorage.add(new FluidStack(FluidRegistry.LAVA, 1000 * 64), true); - if (IntegrationIC2.isLoaded()) { this.energyEU = new ControllerEnergyIC2(this); } else { diff --git a/src/main/java/refinedstorage/tile/TileDiskDrive.java b/src/main/java/refinedstorage/tile/TileDiskDrive.java index 7371bcd5a..94e80794f 100755 --- a/src/main/java/refinedstorage/tile/TileDiskDrive.java +++ b/src/main/java/refinedstorage/tile/TileDiskDrive.java @@ -12,9 +12,13 @@ import net.minecraftforge.items.ItemHandlerHelper; import refinedstorage.RefinedStorage; import refinedstorage.RefinedStorageItems; import refinedstorage.api.network.INetworkMaster; +import refinedstorage.api.storage.fluid.IFluidStorage; +import refinedstorage.api.storage.fluid.IFluidStorageProvider; import refinedstorage.api.storage.item.IItemStorage; import refinedstorage.api.storage.item.IItemStorageProvider; +import refinedstorage.apiimpl.storage.fluid.FluidStorageNBT; import refinedstorage.apiimpl.storage.item.ItemStorageNBT; +import refinedstorage.block.EnumFluidStorageType; import refinedstorage.block.EnumItemStorageType; import refinedstorage.inventory.ItemHandlerBasic; import refinedstorage.inventory.ItemValidatorBasic; @@ -25,7 +29,7 @@ import refinedstorage.tile.data.TileDataParameter; import java.util.List; -public class TileDiskDrive extends TileNode implements IItemStorageProvider, IStorageGui, IComparable, IFilterable, IPrioritizable { +public class TileDiskDrive extends TileNode implements IItemStorageProvider, IFluidStorageProvider, IStorageGui, IComparable, IFilterable, IPrioritizable { public static final TileDataParameter PRIORITY = IPrioritizable.createParameter(); public static final TileDataParameter COMPARE = IComparable.createParameter(); public static final TileDataParameter MODE = IFilterable.createParameter(); @@ -50,6 +54,18 @@ public class TileDiskDrive extends TileNode implements IItemStorageProvider, ISt } } + // @TODO: This is only temporary. Add fluid disk drive. + class FluidStorage extends FluidStorageNBT { + public FluidStorage(ItemStack disk) { + super(disk.getTagCompound(), EnumFluidStorageType.getById(disk.getItemDamage()).getCapacity(), TileDiskDrive.this); + } + + @Override + public int getPriority() { + return 0; + } + } + private static final String NBT_PRIORITY = "Priority"; private static final String NBT_COMPARE = "Compare"; private static final String NBT_MODE = "Mode"; @@ -60,6 +76,11 @@ public class TileDiskDrive extends TileNode implements IItemStorageProvider, ISt public boolean isValid(ItemStack disk) { return super.isValid(disk) && ItemStorageNBT.isValid(disk); } + }, new ItemValidatorBasic(RefinedStorageItems.FLUID_STORAGE_DISK) { + @Override + public boolean isValid(ItemStack disk) { + return super.isValid(disk) && FluidStorageNBT.isValid(disk); + } }) { @Override protected void onContentsChanged(int slot) { @@ -72,21 +93,27 @@ public class TileDiskDrive extends TileNode implements IItemStorageProvider, ISt ItemStack disk = getStackInSlot(slot); if (disk == null) { - storages[slot] = null; + itemStorages[slot] = null; + fluidStorages[slot] = null; } else { - storages[slot] = new ItemStorage(disk); + if (disk.getItem() == RefinedStorageItems.STORAGE_DISK) { + itemStorages[slot] = new ItemStorage(disk); + } else if (disk.getItem() == RefinedStorageItems.FLUID_STORAGE_DISK) { + fluidStorages[slot] = new FluidStorage(disk); + } } if (network != null) { network.getItemStorage().rebuild(); + network.getFluidStorage().rebuild(); } } } @Override public ItemStack extractItem(int slot, int amount, boolean simulate) { - if (storages[slot] != null) { - storages[slot].writeToNBT(); + if (itemStorages[slot] != null) { + itemStorages[slot].writeToNBT(); } return super.extractItem(slot, amount, simulate); @@ -95,7 +122,8 @@ public class TileDiskDrive extends TileNode implements IItemStorageProvider, ISt private ItemHandlerBasic filters = new ItemHandlerBasic(9, this); - private ItemStorage storages[] = new ItemStorage[8]; + private ItemStorage itemStorages[] = new ItemStorage[8]; + private FluidStorage fluidStorages[] = new FluidStorage[8]; private int priority = 0; private int compare = 0; @@ -139,7 +167,7 @@ public class TileDiskDrive extends TileNode implements IItemStorageProvider, ISt } public void onBreak() { - for (ItemStorage storage : this.storages) { + for (ItemStorage storage : this.itemStorages) { if (storage != null) { storage.writeToNBT(); } @@ -155,7 +183,16 @@ public class TileDiskDrive extends TileNode implements IItemStorageProvider, ISt @Override public void addItemStorages(List storages) { - for (IItemStorage storage : this.storages) { + for (IItemStorage storage : this.itemStorages) { + if (storage != null) { + storages.add(storage); + } + } + } + + @Override + public void addFluidStorages(List storages) { + for (IFluidStorage storage : this.fluidStorages) { if (storage != null) { storages.add(storage); } @@ -187,8 +224,8 @@ public class TileDiskDrive extends TileNode implements IItemStorageProvider, ISt super.write(tag); for (int i = 0; i < disks.getSlots(); ++i) { - if (storages[i] != null) { - storages[i].writeToNBT(); + if (itemStorages[i] != null) { + itemStorages[i].writeToNBT(); } } From e53498d79f3e6c8156374853f48293bb4b3af72a Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sat, 13 Aug 2016 02:37:04 +0200 Subject: [PATCH 170/214] Inserting from fluid grids --- .../api/network/NetworkUtils.java | 4 ++++ .../storage/fluid/IGroupedFluidStorage.java | 8 +++++++ .../network/grid/FluidGridHandler.java | 22 ++++++++++++++++++- .../storage/fluid/GroupedFluidStorage.java | 13 +++++++++++ .../java/refinedstorage/gui/grid/GuiGrid.java | 6 ++--- .../refinedstorage/tile/TileDiskDrive.java | 1 + 6 files changed, 50 insertions(+), 4 deletions(-) diff --git a/src/main/java/refinedstorage/api/network/NetworkUtils.java b/src/main/java/refinedstorage/api/network/NetworkUtils.java index 343e726d5..c576b1c20 100755 --- a/src/main/java/refinedstorage/api/network/NetworkUtils.java +++ b/src/main/java/refinedstorage/api/network/NetworkUtils.java @@ -14,6 +14,10 @@ public final class NetworkUtils { return network.extractItem(stack, size, CompareUtils.COMPARE_DAMAGE | CompareUtils.COMPARE_NBT); } + public static FluidStack extractFluid(INetworkMaster network, FluidStack stack, int size) { + return network.extractFluid(stack, size, CompareUtils.COMPARE_NBT); + } + public static ICraftingPattern getPattern(INetworkMaster network, ItemStack stack) { return network.getPattern(stack, CompareUtils.COMPARE_DAMAGE | CompareUtils.COMPARE_NBT); } diff --git a/src/main/java/refinedstorage/api/storage/fluid/IGroupedFluidStorage.java b/src/main/java/refinedstorage/api/storage/fluid/IGroupedFluidStorage.java index ec12b05f9..fef2a937f 100755 --- a/src/main/java/refinedstorage/api/storage/fluid/IGroupedFluidStorage.java +++ b/src/main/java/refinedstorage/api/storage/fluid/IGroupedFluidStorage.java @@ -56,6 +56,14 @@ public interface IGroupedFluidStorage { @Nullable FluidStack get(@Nonnull FluidStack stack, int flags); + /** + * Gets a fluid from the network by hash, see {@link refinedstorage.api.network.NetworkUtils#getFluidStackHashCode(FluidStack)}. + * + * @return Null if no fluid is found matching the hash, or the {@link FluidStack}, do NOT modify + */ + @Nullable + FluidStack get(int hash); + /** * @return All fluids in this storage network */ diff --git a/src/main/java/refinedstorage/apiimpl/network/grid/FluidGridHandler.java b/src/main/java/refinedstorage/apiimpl/network/grid/FluidGridHandler.java index 1633fb8fc..a0dfd1964 100755 --- a/src/main/java/refinedstorage/apiimpl/network/grid/FluidGridHandler.java +++ b/src/main/java/refinedstorage/apiimpl/network/grid/FluidGridHandler.java @@ -1,12 +1,15 @@ package refinedstorage.apiimpl.network.grid; import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.init.Items; +import net.minecraft.inventory.InventoryHelper; import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.capability.CapabilityFluidHandler; import net.minecraftforge.fluids.capability.IFluidHandler; import refinedstorage.api.network.INetworkMaster; +import refinedstorage.api.network.NetworkUtils; import refinedstorage.api.network.grid.IFluidGridHandler; import javax.annotation.Nullable; @@ -20,7 +23,24 @@ public class FluidGridHandler implements IFluidGridHandler { @Override public void onExtract(int hash, boolean shift, EntityPlayerMP player) { - System.out.println("Extract " + hash + " (shift = " + shift + ")"); + FluidStack stack = network.getFluidStorage().get(hash); + + if (stack != null) { + ItemStack bucket = NetworkUtils.extractItem(network, new ItemStack(Items.BUCKET), 1); + + if (bucket != null) { + bucket.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, null).fill(NetworkUtils.extractFluid(network, stack, 1000), true); + + if (shift) { + if (!player.inventory.addItemStackToInventory(bucket.copy())) { + InventoryHelper.spawnItemStack(player.worldObj, player.getPosition().getX(), player.getPosition().getY(), player.getPosition().getZ(), bucket); + } + } else { + player.inventory.setItemStack(bucket); + player.updateHeldItem(); + } + } + } } @Nullable diff --git a/src/main/java/refinedstorage/apiimpl/storage/fluid/GroupedFluidStorage.java b/src/main/java/refinedstorage/apiimpl/storage/fluid/GroupedFluidStorage.java index 44a504c8d..99ee93854 100755 --- a/src/main/java/refinedstorage/apiimpl/storage/fluid/GroupedFluidStorage.java +++ b/src/main/java/refinedstorage/apiimpl/storage/fluid/GroupedFluidStorage.java @@ -5,6 +5,7 @@ import com.google.common.collect.Multimap; import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidStack; import refinedstorage.api.network.INetworkMaster; +import refinedstorage.api.network.NetworkUtils; import refinedstorage.api.storage.fluid.IFluidStorage; import refinedstorage.api.storage.fluid.IFluidStorageProvider; import refinedstorage.api.storage.fluid.IGroupedFluidStorage; @@ -93,6 +94,18 @@ public class GroupedFluidStorage implements IGroupedFluidStorage { return null; } + @Override + @Nullable + public FluidStack get(int hash) { + for (FluidStack stack : this.stacks.values()) { + if (NetworkUtils.getFluidStackHashCode(stack) == hash) { + return stack; + } + } + + return null; + } + @Override public Collection getStacks() { return stacks.values(); diff --git a/src/main/java/refinedstorage/gui/grid/GuiGrid.java b/src/main/java/refinedstorage/gui/grid/GuiGrid.java index bc7cdc264..d37177c77 100755 --- a/src/main/java/refinedstorage/gui/grid/GuiGrid.java +++ b/src/main/java/refinedstorage/gui/grid/GuiGrid.java @@ -360,8 +360,8 @@ public class GuiGrid extends GuiBase { RefinedStorage.INSTANCE.network.sendToServer(grid.getType() == EnumGridType.FLUID ? new MessageGridFluidInsertHeld() : new MessageGridItemInsertHeld(clickedButton == 1)); } - if (isOverSlotWithItem() && (held == null || (held != null && clickedButton == 2))) { - if (grid.getType() != EnumGridType.FLUID) { + if (isOverSlotWithItem()) { + if (grid.getType() != EnumGridType.FLUID && (held == null || (held != null && clickedButton == 2))) { ClientStackItem stack = (ClientStackItem) STACKS.get(slotNumber); if (stack.isCraftable() && (stack.getQuantity() == 0 || (GuiScreen.isShiftKeyDown() && GuiScreen.isCtrlKeyDown()))) { @@ -383,7 +383,7 @@ public class GuiGrid extends GuiBase { RefinedStorage.INSTANCE.network.sendToServer(new MessageGridItemPull(stack.getHash(), flags)); } - } else { + } else if (grid.getType() == EnumGridType.FLUID && held == null) { RefinedStorage.INSTANCE.network.sendToServer(new MessageGridFluidPull(STACKS.get(slotNumber).getHash(), GuiScreen.isShiftKeyDown())); } } diff --git a/src/main/java/refinedstorage/tile/TileDiskDrive.java b/src/main/java/refinedstorage/tile/TileDiskDrive.java index 94e80794f..bcf4a0dfa 100755 --- a/src/main/java/refinedstorage/tile/TileDiskDrive.java +++ b/src/main/java/refinedstorage/tile/TileDiskDrive.java @@ -179,6 +179,7 @@ public class TileDiskDrive extends TileNode implements IItemStorageProvider, IFl super.onConnectionChange(network, state); network.getItemStorage().rebuild(); + network.getFluidStorage().rebuild(); } @Override From 97e10ac0a4134fcbd6c3e477401c6ed9a5095137 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sat, 13 Aug 2016 02:57:26 +0200 Subject: [PATCH 171/214] Take from inventory if no bucket is in the system --- .../network/grid/FluidGridHandler.java | 19 ++++++++++++++++++- .../java/refinedstorage/gui/grid/GuiGrid.java | 3 +-- .../refinedstorage/proxy/CommonProxy.java | 9 +++++++++ .../java/refinedstorage/tile/grid/IGrid.java | 2 ++ .../refinedstorage/tile/grid/TileGrid.java | 5 +++++ .../tile/grid/WirelessGrid.java | 5 +++++ .../assets/refinedstorage/lang/en_US.lang | 1 + 7 files changed, 41 insertions(+), 3 deletions(-) diff --git a/src/main/java/refinedstorage/apiimpl/network/grid/FluidGridHandler.java b/src/main/java/refinedstorage/apiimpl/network/grid/FluidGridHandler.java index a0dfd1964..e22fd83fb 100755 --- a/src/main/java/refinedstorage/apiimpl/network/grid/FluidGridHandler.java +++ b/src/main/java/refinedstorage/apiimpl/network/grid/FluidGridHandler.java @@ -11,10 +11,13 @@ import net.minecraftforge.fluids.capability.IFluidHandler; import refinedstorage.api.network.INetworkMaster; import refinedstorage.api.network.NetworkUtils; import refinedstorage.api.network.grid.IFluidGridHandler; +import refinedstorage.api.storage.CompareUtils; import javax.annotation.Nullable; public class FluidGridHandler implements IFluidGridHandler { + private static final ItemStack EMPTY_BUCKET = new ItemStack(Items.BUCKET); + private INetworkMaster network; public FluidGridHandler(INetworkMaster network) { @@ -26,7 +29,21 @@ public class FluidGridHandler implements IFluidGridHandler { FluidStack stack = network.getFluidStorage().get(hash); if (stack != null) { - ItemStack bucket = NetworkUtils.extractItem(network, new ItemStack(Items.BUCKET), 1); + ItemStack bucket = NetworkUtils.extractItem(network, EMPTY_BUCKET, 1); + + if (bucket == null) { + for (int i = 0; i < player.inventory.getSizeInventory(); ++i) { + ItemStack slot = player.inventory.getStackInSlot(i); + + if (CompareUtils.compareStack(EMPTY_BUCKET, slot)) { + bucket = slot; + + player.inventory.setInventorySlotContents(i, null); + + break; + } + } + } if (bucket != null) { bucket.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, null).fill(NetworkUtils.extractFluid(network, stack, 1000), true); diff --git a/src/main/java/refinedstorage/gui/grid/GuiGrid.java b/src/main/java/refinedstorage/gui/grid/GuiGrid.java index d37177c77..f7b4f2e28 100755 --- a/src/main/java/refinedstorage/gui/grid/GuiGrid.java +++ b/src/main/java/refinedstorage/gui/grid/GuiGrid.java @@ -30,7 +30,6 @@ import refinedstorage.integration.jei.IntegrationJEI; import refinedstorage.network.*; import refinedstorage.tile.grid.IGrid; import refinedstorage.tile.grid.TileGrid; -import refinedstorage.tile.grid.WirelessGrid; import java.io.IOException; import java.util.ArrayList; @@ -269,7 +268,7 @@ public class GuiGrid extends GuiBase { @Override public void drawForeground(int mouseX, int mouseY) { - drawString(7, 7, t(grid instanceof WirelessGrid ? "gui.refinedstorage:wireless_grid" : "gui.refinedstorage:grid")); + drawString(7, 7, t(grid.getGuiTitle())); drawString(7, (grid.getType() == EnumGridType.CRAFTING || grid.getType() == EnumGridType.PATTERN) ? 153 : 114, t("container.inventory")); int x = 8; diff --git a/src/main/java/refinedstorage/proxy/CommonProxy.java b/src/main/java/refinedstorage/proxy/CommonProxy.java index efc99c7e2..80ff35e92 100755 --- a/src/main/java/refinedstorage/proxy/CommonProxy.java +++ b/src/main/java/refinedstorage/proxy/CommonProxy.java @@ -252,6 +252,15 @@ public class CommonProxy { new ItemStack(RefinedStorageItems.PATTERN) )); + // Fluid Grid + RefinedStorageAPI.SOLDERER_REGISTRY.addRecipe(new SoldererRecipeBasic( + new ItemStack(RefinedStorageBlocks.GRID, 1, EnumGridType.FLUID.getId()), + 500, + new ItemStack(RefinedStorageItems.PROCESSOR, 1, ItemProcessor.TYPE_ADVANCED), + new ItemStack(RefinedStorageBlocks.GRID, 1, EnumGridType.FLUID.getId()), + new ItemStack(Items.BUCKET) + )); + // Wireless Grid GameRegistry.addRecipe(new ItemStack(RefinedStorageItems.WIRELESS_GRID, 1, ItemWirelessGrid.TYPE_NORMAL), "EPE", diff --git a/src/main/java/refinedstorage/tile/grid/IGrid.java b/src/main/java/refinedstorage/tile/grid/IGrid.java index 580904179..56bfd38ec 100755 --- a/src/main/java/refinedstorage/tile/grid/IGrid.java +++ b/src/main/java/refinedstorage/tile/grid/IGrid.java @@ -19,6 +19,8 @@ public interface IGrid { IFluidGridHandler getFluidHandler(); + String getGuiTitle(); + int getViewType(); int getSortingType(); diff --git a/src/main/java/refinedstorage/tile/grid/TileGrid.java b/src/main/java/refinedstorage/tile/grid/TileGrid.java index 3bb612858..759b39919 100755 --- a/src/main/java/refinedstorage/tile/grid/TileGrid.java +++ b/src/main/java/refinedstorage/tile/grid/TileGrid.java @@ -209,6 +209,11 @@ public class TileGrid extends TileNode implements IGrid { return isConnected() ? network.getFluidGridHandler() : null; } + @Override + public String getGuiTitle() { + return getType() == EnumGridType.FLUID ? "gui.refinedstorage:fluid_grid" : "gui.refinedstorage:grid"; + } + public InventoryCrafting getMatrix() { return matrix; } diff --git a/src/main/java/refinedstorage/tile/grid/WirelessGrid.java b/src/main/java/refinedstorage/tile/grid/WirelessGrid.java index 1e4bf4bc6..0cdd1722a 100755 --- a/src/main/java/refinedstorage/tile/grid/WirelessGrid.java +++ b/src/main/java/refinedstorage/tile/grid/WirelessGrid.java @@ -96,6 +96,11 @@ public class WirelessGrid implements IGrid { return null; } + @Override + public String getGuiTitle() { + return "gui.refinedstorage:wireless_grid"; + } + @Override public int getViewType() { return viewType; diff --git a/src/main/resources/assets/refinedstorage/lang/en_US.lang b/src/main/resources/assets/refinedstorage/lang/en_US.lang index 842dc93c0..967b2be81 100755 --- a/src/main/resources/assets/refinedstorage/lang/en_US.lang +++ b/src/main/resources/assets/refinedstorage/lang/en_US.lang @@ -7,6 +7,7 @@ gui.refinedstorage:grid=Grid gui.refinedstorage:grid.craft=Craft gui.refinedstorage:grid.pattern_create=Create Pattern gui.refinedstorage:wireless_grid=Wireless Grid +gui.refinedstorage:fluid_grid=Fluid Grid gui.refinedstorage:disk_drive=Drive gui.refinedstorage:external_storage=External Storage gui.refinedstorage:importer=Importer From 439aee0d62757920c1cadf06b0d6410a130c1112 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sat, 13 Aug 2016 03:20:35 +0200 Subject: [PATCH 172/214] Add recipes and fluid storage part --- .../refinedstorage/RefinedStorageItems.java | 1 + .../item/ItemFluidStoragePart.java | 28 ++++++++ .../refinedstorage/proxy/ClientProxy.java | 1 + .../refinedstorage/proxy/CommonProxy.java | 64 ++++++++++++++++++- .../assets/refinedstorage/lang/en_US.lang | 4 ++ 5 files changed, 97 insertions(+), 1 deletion(-) create mode 100755 src/main/java/refinedstorage/item/ItemFluidStoragePart.java diff --git a/src/main/java/refinedstorage/RefinedStorageItems.java b/src/main/java/refinedstorage/RefinedStorageItems.java index 4ff98535a..a4796a2a6 100755 --- a/src/main/java/refinedstorage/RefinedStorageItems.java +++ b/src/main/java/refinedstorage/RefinedStorageItems.java @@ -16,4 +16,5 @@ public final class RefinedStorageItems { public static final ItemGridFilter GRID_FILTER = new ItemGridFilter(); public static final ItemNetworkCard NETWORK_CARD = new ItemNetworkCard(); public static final ItemFluidStorageDisk FLUID_STORAGE_DISK = new ItemFluidStorageDisk(); + public static final ItemFluidStoragePart FLUID_STORAGE_PART = new ItemFluidStoragePart(); } diff --git a/src/main/java/refinedstorage/item/ItemFluidStoragePart.java b/src/main/java/refinedstorage/item/ItemFluidStoragePart.java new file mode 100755 index 000000000..bbf502d80 --- /dev/null +++ b/src/main/java/refinedstorage/item/ItemFluidStoragePart.java @@ -0,0 +1,28 @@ +package refinedstorage.item; + +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; + +import java.util.List; + +public class ItemFluidStoragePart extends ItemBase { + public static final int TYPE_64K = 0; + public static final int TYPE_128K = 1; + public static final int TYPE_256K = 2; + public static final int TYPE_512K = 3; + + public ItemFluidStoragePart() { + super("fluid_storage_part"); + + setHasSubtypes(true); + setMaxDamage(0); + } + + @Override + public void getSubItems(Item item, CreativeTabs tab, List list) { + for (int i = 0; i <= 3; ++i) { + list.add(new ItemStack(item, 1, i)); + } + } +} diff --git a/src/main/java/refinedstorage/proxy/ClientProxy.java b/src/main/java/refinedstorage/proxy/ClientProxy.java index 0be843712..d5695a78e 100755 --- a/src/main/java/refinedstorage/proxy/ClientProxy.java +++ b/src/main/java/refinedstorage/proxy/ClientProxy.java @@ -232,6 +232,7 @@ public class ClientProxy extends CommonProxy { ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.GRID), EnumGridType.NORMAL.getId(), new ModelResourceLocation("refinedstorage:grid", "inventory")); ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.GRID), EnumGridType.CRAFTING.getId(), new ModelResourceLocation("refinedstorage:grid", "inventory")); ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.GRID), EnumGridType.PATTERN.getId(), new ModelResourceLocation("refinedstorage:grid", "inventory")); + ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.GRID), EnumGridType.FLUID.getId(), new ModelResourceLocation("refinedstorage:grid", "inventory")); ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.MACHINE_CASING), 0, new ModelResourceLocation("refinedstorage:machine_casing", "inventory")); ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.EXPORTER), 0, new ModelResourceLocation("refinedstorage:exporter", "inventory")); ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.IMPORTER), 0, new ModelResourceLocation("refinedstorage:importer", "inventory")); diff --git a/src/main/java/refinedstorage/proxy/CommonProxy.java b/src/main/java/refinedstorage/proxy/CommonProxy.java index 80ff35e92..c5aeb01b6 100755 --- a/src/main/java/refinedstorage/proxy/CommonProxy.java +++ b/src/main/java/refinedstorage/proxy/CommonProxy.java @@ -121,6 +121,7 @@ public class CommonProxy { registerItem(RefinedStorageItems.GRID_FILTER); registerItem(RefinedStorageItems.NETWORK_CARD); registerItem(RefinedStorageItems.FLUID_STORAGE_DISK); + registerItem(RefinedStorageItems.FLUID_STORAGE_PART); OreDictionary.registerOre("itemSilicon", RefinedStorageItems.SILICON); @@ -257,7 +258,7 @@ public class CommonProxy { new ItemStack(RefinedStorageBlocks.GRID, 1, EnumGridType.FLUID.getId()), 500, new ItemStack(RefinedStorageItems.PROCESSOR, 1, ItemProcessor.TYPE_ADVANCED), - new ItemStack(RefinedStorageBlocks.GRID, 1, EnumGridType.FLUID.getId()), + new ItemStack(RefinedStorageBlocks.GRID, 1, EnumGridType.NORMAL.getId()), new ItemStack(Items.BUCKET) )); @@ -399,6 +400,47 @@ public class CommonProxy { 'S', new ItemStack(RefinedStorageItems.STORAGE_PART, 1, ItemStoragePart.TYPE_16K) ); + // Fluid Storage Parts + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(RefinedStorageItems.FLUID_STORAGE_PART, 1, ItemFluidStoragePart.TYPE_64K), + "SES", + "GRG", + "SGS", + 'R', new ItemStack(Items.BUCKET), + 'E', new ItemStack(RefinedStorageItems.QUARTZ_ENRICHED_IRON), + 'S', "itemSilicon", + 'G', "blockGlass" + )); + + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(RefinedStorageItems.FLUID_STORAGE_PART, 1, ItemFluidStoragePart.TYPE_128K), + "PEP", + "SRS", + "PSP", + 'R', new ItemStack(Items.BUCKET), + 'E', new ItemStack(RefinedStorageItems.QUARTZ_ENRICHED_IRON), + 'P', new ItemStack(RefinedStorageItems.PROCESSOR, 1, ItemProcessor.TYPE_BASIC), + 'S', new ItemStack(RefinedStorageItems.FLUID_STORAGE_PART, 1, ItemFluidStoragePart.TYPE_64K) + )); + + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(RefinedStorageItems.FLUID_STORAGE_PART, 1, ItemFluidStoragePart.TYPE_256K), + "PEP", + "SRS", + "PSP", + 'R', new ItemStack(Items.BUCKET), + 'E', new ItemStack(RefinedStorageItems.QUARTZ_ENRICHED_IRON), + 'P', new ItemStack(RefinedStorageItems.PROCESSOR, 1, ItemProcessor.TYPE_IMPROVED), + 'S', new ItemStack(RefinedStorageItems.FLUID_STORAGE_PART, 1, ItemFluidStoragePart.TYPE_128K) + )); + + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(RefinedStorageItems.FLUID_STORAGE_PART, 1, ItemFluidStoragePart.TYPE_512K), + "PEP", + "SRS", + "PSP", + 'R', new ItemStack(Items.BUCKET), + 'E', new ItemStack(RefinedStorageItems.QUARTZ_ENRICHED_IRON), + 'P', new ItemStack(RefinedStorageItems.PROCESSOR, 1, ItemProcessor.TYPE_ADVANCED), + 'S', new ItemStack(RefinedStorageItems.FLUID_STORAGE_PART, 1, ItemFluidStoragePart.TYPE_256K) + )); + // Storage Housing GameRegistry.addRecipe(new ShapedOreRecipe(ItemStorageNBT.createStackWithNBT(new ItemStack(RefinedStorageItems.STORAGE_HOUSING)), "GRG", @@ -429,6 +471,26 @@ public class CommonProxy { ); } + // Fluid Storage Parts + for (int type = 0; type <= 3; ++type) { + ItemStack disk = ItemStorageNBT.createStackWithNBT(new ItemStack(RefinedStorageItems.FLUID_STORAGE_DISK, 1, type)); + + GameRegistry.addRecipe(new ShapedOreRecipe(disk, + "GRG", + "RPR", + "EEE", + 'G', "blockGlass", + 'R', new ItemStack(Items.REDSTONE), + 'P', new ItemStack(RefinedStorageItems.FLUID_STORAGE_PART, 1, type), + 'E', new ItemStack(RefinedStorageItems.QUARTZ_ENRICHED_IRON) + )); + + GameRegistry.addShapelessRecipe(disk, + new ItemStack(RefinedStorageItems.STORAGE_HOUSING), + new ItemStack(RefinedStorageItems.FLUID_STORAGE_PART, 1, type) + ); + } + // Pattern GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(RefinedStorageItems.PATTERN), "GRG", diff --git a/src/main/resources/assets/refinedstorage/lang/en_US.lang b/src/main/resources/assets/refinedstorage/lang/en_US.lang index 967b2be81..a2e61612d 100755 --- a/src/main/resources/assets/refinedstorage/lang/en_US.lang +++ b/src/main/resources/assets/refinedstorage/lang/en_US.lang @@ -155,6 +155,10 @@ item.refinedstorage:storage_part.0.name=1k Storage Part item.refinedstorage:storage_part.1.name=4k Storage Part item.refinedstorage:storage_part.2.name=16k Storage Part item.refinedstorage:storage_part.3.name=64k Storage Part +item.refinedstorage:fluid_storage_part.0.name=64k Fluid Storage Part +item.refinedstorage:fluid_storage_part.1.name=128k Fluid Storage Part +item.refinedstorage:fluid_storage_part.2.name=256k Fluid Storage Part +item.refinedstorage:fluid_storage_part.3.name=512k Fluid Storage Part item.refinedstorage:pattern.name=Pattern item.refinedstorage:upgrade.0.name=Upgrade item.refinedstorage:upgrade.1.name=Range Upgrade From 1c73f93deb43a3fe24a3ec1cc63c123f63ddddcb Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sat, 13 Aug 2016 16:50:43 +0200 Subject: [PATCH 173/214] Fluid Disk Drive --- .../java/refinedstorage/RefinedStorage.java | 4 + .../refinedstorage/RefinedStorageBlocks.java | 3 +- .../refinedstorage/RefinedStorageGui.java | 1 + .../api/storage/CompareUtils.java | 31 ++ .../storage/fluid/FluidStorageNBT.java | 1 + .../block/BlockFluidDiskDrive.java | 58 +++ .../container/ContainerDiskDrive.java | 2 +- .../container/ContainerFluidDiskDrive.java | 50 +++ .../container/ContainerStorage.java | 8 +- .../container/slot/SlotFluidFilter.java | 19 + src/main/java/refinedstorage/gui/GuiBase.java | 23 ++ .../java/refinedstorage/gui/GuiHandler.java | 6 +- .../java/refinedstorage/gui/GuiStorage.java | 9 +- .../gui/grid/stack/ClientStackFluid.java | 7 +- .../inventory/ItemHandlerFluidFilter.java | 32 ++ .../refinedstorage/proxy/ClientProxy.java | 1 + .../refinedstorage/proxy/CommonProxy.java | 11 + .../java/refinedstorage/tile/IStorageGui.java | 4 + .../refinedstorage/tile/TileDiskDrive.java | 61 +-- .../tile/TileFluidDiskDrive.java | 380 ++++++++++++++++++ .../tile/config/IFilterable.java | 34 ++ .../assets/refinedstorage/lang/en_US.lang | 2 + 22 files changed, 682 insertions(+), 65 deletions(-) create mode 100755 src/main/java/refinedstorage/block/BlockFluidDiskDrive.java create mode 100755 src/main/java/refinedstorage/container/ContainerFluidDiskDrive.java create mode 100755 src/main/java/refinedstorage/container/slot/SlotFluidFilter.java create mode 100755 src/main/java/refinedstorage/inventory/ItemHandlerFluidFilter.java create mode 100755 src/main/java/refinedstorage/tile/TileFluidDiskDrive.java diff --git a/src/main/java/refinedstorage/RefinedStorage.java b/src/main/java/refinedstorage/RefinedStorage.java index e65a4c11d..deb0606e6 100755 --- a/src/main/java/refinedstorage/RefinedStorage.java +++ b/src/main/java/refinedstorage/RefinedStorage.java @@ -51,6 +51,8 @@ public final class RefinedStorage { public int detectorUsage; public int diskDriveUsage; public int diskDrivePerDiskUsage; + public int fluidDiskDriveUsage; + public int fluidDiskDrivePerDiskUsage; public int externalStorageUsage; public int externalStoragePerStorageUsage; public int exporterUsage; @@ -95,6 +97,8 @@ public final class RefinedStorage { detectorUsage = config.getInt("detector", "energy", 2, 0, Integer.MAX_VALUE, "The energy used by Detectors"); diskDriveUsage = config.getInt("diskDrive", "energy", 0, 0, Integer.MAX_VALUE, "The base energy used by Disk Drives"); diskDrivePerDiskUsage = config.getInt("diskDrivePerDisk", "energy", 1, 0, Integer.MAX_VALUE, "The additional energy used by Storage Disks in Disk Drives"); + fluidDiskDriveUsage = config.getInt("fluidDiskDrive", "energy", 0, 0, Integer.MAX_VALUE, "The base energy used by Fluid Disk Drives"); + fluidDiskDrivePerDiskUsage = config.getInt("fluidDiskDrivePerDisk", "energy", 1, 0, Integer.MAX_VALUE, "The additional energy used by Fluid Storage Disks in Fluid Disk Drives"); externalStorageUsage = config.getInt("externalStorage", "energy", 0, 0, Integer.MAX_VALUE, "The base energy used by External Storages"); externalStoragePerStorageUsage = config.getInt("externalStoragePerStorage", "energy", 1, 0, Integer.MAX_VALUE, "The additional energy used per connected storage to an External Storage"); exporterUsage = config.getInt("exporter", "energy", 1, 0, Integer.MAX_VALUE, "The energy used by Exporters"); diff --git a/src/main/java/refinedstorage/RefinedStorageBlocks.java b/src/main/java/refinedstorage/RefinedStorageBlocks.java index 48eeb0b85..44bfb25e2 100755 --- a/src/main/java/refinedstorage/RefinedStorageBlocks.java +++ b/src/main/java/refinedstorage/RefinedStorageBlocks.java @@ -24,4 +24,5 @@ public final class RefinedStorageBlocks { public static final BlockProcessingPatternEncoder PROCESSING_PATTERN_ENCODER = new BlockProcessingPatternEncoder(); public static final BlockNetworkTransmitter NETWORK_TRANSMITTER = new BlockNetworkTransmitter(); public static final BlockNetworkReceiver NETWORK_RECEIVER = new BlockNetworkReceiver(); -} + public static final BlockFluidDiskDrive FLUID_DISK_DRIVE = new BlockFluidDiskDrive(); +} \ No newline at end of file diff --git a/src/main/java/refinedstorage/RefinedStorageGui.java b/src/main/java/refinedstorage/RefinedStorageGui.java index 6fb65a6cc..4ff36a937 100755 --- a/src/main/java/refinedstorage/RefinedStorageGui.java +++ b/src/main/java/refinedstorage/RefinedStorageGui.java @@ -20,4 +20,5 @@ public final class RefinedStorageGui { public static final int PROCESSING_PATTERN_ENCODER = 16; public static final int GRID_FILTER = 17; public static final int NETWORK_TRANSMITTER = 18; + public static final int FLUID_DISK_DRIVE = 19; } diff --git a/src/main/java/refinedstorage/api/storage/CompareUtils.java b/src/main/java/refinedstorage/api/storage/CompareUtils.java index 83cfa7ffb..9b4a77c80 100755 --- a/src/main/java/refinedstorage/api/storage/CompareUtils.java +++ b/src/main/java/refinedstorage/api/storage/CompareUtils.java @@ -1,6 +1,7 @@ package refinedstorage.api.storage; import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.oredict.OreDictionary; import org.apache.commons.lang3.ArrayUtils; @@ -76,6 +77,36 @@ public final class CompareUtils { return true; } + /** + * Compares two stacks by the given flags. + * + * @param left The left stack + * @param right The right stack + * @param flags The flags to compare with + * @return Whether the left and right stack are equal + */ + public static boolean compareStack(FluidStack left, FluidStack right, int flags) { + if (left == null && right == null) { + return true; + } + + if ((left == null && right != null) || (left != null && right == null)) { + return false; + } + + if (left.getFluid() != right.getFluid()) { + return false; + } + + if ((flags & COMPARE_NBT) == COMPARE_NBT) { + if (!left.tag.equals(right)) { + return false; + } + } + + return true; + } + /** * Compares the NBT tags of two stacks. * diff --git a/src/main/java/refinedstorage/apiimpl/storage/fluid/FluidStorageNBT.java b/src/main/java/refinedstorage/apiimpl/storage/fluid/FluidStorageNBT.java index ff1b81ac4..9a86008e8 100755 --- a/src/main/java/refinedstorage/apiimpl/storage/fluid/FluidStorageNBT.java +++ b/src/main/java/refinedstorage/apiimpl/storage/fluid/FluidStorageNBT.java @@ -138,6 +138,7 @@ public abstract class FluidStorageNBT implements IFluidStorage { @Override public FluidStack extractFluid(FluidStack stack, int size, int flags) { for (FluidStack otherStack : stacks) { + // @TODO: Use flags everywhere if (otherStack.isFluidEqual(stack)) { if (size > otherStack.amount) { size = otherStack.amount; diff --git a/src/main/java/refinedstorage/block/BlockFluidDiskDrive.java b/src/main/java/refinedstorage/block/BlockFluidDiskDrive.java new file mode 100755 index 000000000..71e3ea8b7 --- /dev/null +++ b/src/main/java/refinedstorage/block/BlockFluidDiskDrive.java @@ -0,0 +1,58 @@ +package refinedstorage.block; + +import net.minecraft.block.properties.PropertyInteger; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import refinedstorage.RefinedStorage; +import refinedstorage.RefinedStorageGui; +import refinedstorage.tile.TileFluidDiskDrive; + +public class BlockFluidDiskDrive extends BlockNode { + private static final PropertyInteger STORED = PropertyInteger.create("stored", 0, 7); + + public BlockFluidDiskDrive() { + super("fluid_disk_drive"); + } + + @Override + public TileEntity createTileEntity(World world, IBlockState state) { + return new TileFluidDiskDrive(); + } + + @Override + public BlockStateContainer createBlockState() { + return createBlockStateBuilder() + .add(STORED) + .build(); + } + + @Override + public IBlockState getActualState(IBlockState state, IBlockAccess world, BlockPos pos) { + return super.getActualState(state, world, pos) + .withProperty(STORED, Math.max(0, ((TileFluidDiskDrive) world.getTileEntity(pos)).getStoredForDisplay())); + } + + @Override + public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) { + if (!world.isRemote) { + player.openGui(RefinedStorage.INSTANCE, RefinedStorageGui.FLUID_DISK_DRIVE, world, pos.getX(), pos.getY(), pos.getZ()); + } + + return true; + } + + @Override + public void breakBlock(World world, BlockPos pos, IBlockState state) { + ((TileFluidDiskDrive) world.getTileEntity(pos)).onBreak(); + + super.breakBlock(world, pos, state); + } +} diff --git a/src/main/java/refinedstorage/container/ContainerDiskDrive.java b/src/main/java/refinedstorage/container/ContainerDiskDrive.java index 8b90b9004..30e04e79f 100755 --- a/src/main/java/refinedstorage/container/ContainerDiskDrive.java +++ b/src/main/java/refinedstorage/container/ContainerDiskDrive.java @@ -18,7 +18,7 @@ public class ContainerDiskDrive extends ContainerStorage { addSlotToContainer(new SlotItemHandler(drive.getDisks(), 4 + i, 98 + (i * 18), 96)); } - addSpecimenAndPlayerInventorySlots(drive.getFilters()); + addFilterAndPlayerInventorySlots(drive.getFilters()); } @Override diff --git a/src/main/java/refinedstorage/container/ContainerFluidDiskDrive.java b/src/main/java/refinedstorage/container/ContainerFluidDiskDrive.java new file mode 100755 index 000000000..81e6ffa92 --- /dev/null +++ b/src/main/java/refinedstorage/container/ContainerFluidDiskDrive.java @@ -0,0 +1,50 @@ +package refinedstorage.container; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; +import net.minecraftforge.items.SlotItemHandler; +import refinedstorage.tile.TileFluidDiskDrive; + +public class ContainerFluidDiskDrive extends ContainerStorage { + public ContainerFluidDiskDrive(TileFluidDiskDrive drive, EntityPlayer player) { + super(drive, player); + + for (int i = 0; i < 4; ++i) { + addSlotToContainer(new SlotItemHandler(drive.getDisks(), i, 98 + (i * 18), 78)); + } + + for (int i = 0; i < 4; ++i) { + addSlotToContainer(new SlotItemHandler(drive.getDisks(), 4 + i, 98 + (i * 18), 96)); + } + + addFilterAndPlayerInventorySlots(drive.getFilters()); + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer player, int index) { + ItemStack stack = null; + + Slot slot = getSlot(index); + + if (slot != null && slot.getHasStack()) { + stack = slot.getStack(); + + if (index < 8) { + if (!mergeItemStack(stack, 8 + 9, inventorySlots.size(), false)) { + return null; + } + } else if (!mergeItemStack(stack, 0, 8, false)) { + return mergeItemStackToSpecimen(stack, 8, 8 + 9); + } + + if (stack.stackSize == 0) { + slot.putStack(null); + } else { + slot.onSlotChanged(); + } + } + + return stack; + } +} diff --git a/src/main/java/refinedstorage/container/ContainerStorage.java b/src/main/java/refinedstorage/container/ContainerStorage.java index c085903f7..87ed97ea4 100755 --- a/src/main/java/refinedstorage/container/ContainerStorage.java +++ b/src/main/java/refinedstorage/container/ContainerStorage.java @@ -4,7 +4,9 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; import net.minecraftforge.items.IItemHandler; +import refinedstorage.container.slot.SlotFluidFilter; import refinedstorage.container.slot.SlotSpecimen; +import refinedstorage.inventory.ItemHandlerFluidFilter; import refinedstorage.tile.TileBase; public class ContainerStorage extends ContainerBase { @@ -15,12 +17,12 @@ public class ContainerStorage extends ContainerBase { public ContainerStorage(TileBase tile, EntityPlayer player, IItemHandler filters) { this(tile, player); - addSpecimenAndPlayerInventorySlots(filters); + addFilterAndPlayerInventorySlots(filters); } - protected void addSpecimenAndPlayerInventorySlots(IItemHandler filters) { + protected void addFilterAndPlayerInventorySlots(IItemHandler filters) { for (int i = 0; i < 9; ++i) { - addSlotToContainer(new SlotSpecimen(filters, i, 8 + (18 * i), 20)); + addSlotToContainer(filters instanceof ItemHandlerFluidFilter ? new SlotFluidFilter(!getTile().getWorld().isRemote, filters, i, 8 + (18 * i), 20) : new SlotSpecimen(filters, i, 8 + (18 * i), 20)); } addPlayerInventory(8, 129); diff --git a/src/main/java/refinedstorage/container/slot/SlotFluidFilter.java b/src/main/java/refinedstorage/container/slot/SlotFluidFilter.java new file mode 100755 index 000000000..f32b051e4 --- /dev/null +++ b/src/main/java/refinedstorage/container/slot/SlotFluidFilter.java @@ -0,0 +1,19 @@ +package refinedstorage.container.slot; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.items.IItemHandler; + +public class SlotFluidFilter extends SlotSpecimen { + private boolean server; + + public SlotFluidFilter(boolean server, IItemHandler handler, int id, int x, int y) { + super(handler, id, x, y); + + this.server = server; + } + + @Override + public ItemStack getStack() { + return server ? super.getStack() : null; + } +} diff --git a/src/main/java/refinedstorage/gui/GuiBase.java b/src/main/java/refinedstorage/gui/GuiBase.java index 89ba17288..4495c42c2 100755 --- a/src/main/java/refinedstorage/gui/GuiBase.java +++ b/src/main/java/refinedstorage/gui/GuiBase.java @@ -1,16 +1,23 @@ package refinedstorage.gui; +import mezz.jei.gui.ingredients.FluidStackRenderer; import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.inventory.GuiContainer; import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.RenderHelper; import net.minecraft.client.resources.I18n; import net.minecraft.inventory.Container; +import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fml.client.config.GuiCheckBox; +import net.minecraftforge.items.SlotItemHandler; import org.lwjgl.input.Mouse; import refinedstorage.RefinedStorage; import refinedstorage.gui.sidebutton.SideButton; +import refinedstorage.inventory.ItemHandlerFluidFilter; import java.io.IOException; import java.util.ArrayList; @@ -18,6 +25,8 @@ import java.util.Arrays; import java.util.List; public abstract class GuiBase extends GuiContainer { + public static final FluidStackRenderer FLUID_RENDERER = new FluidStackRenderer(Fluid.BUCKET_VOLUME, false, 16, 16, null); + protected static final int SIDE_BUTTON_WIDTH = 20; protected static final int SIDE_BUTTON_HEIGHT = 20; @@ -116,6 +125,20 @@ public abstract class GuiBase extends GuiContainer { drawForeground(mouseX, mouseY); + RenderHelper.enableGUIStandardItemLighting(); + + for (int i = 0; i < inventorySlots.inventorySlots.size(); ++i) { + Slot slot = inventorySlots.inventorySlots.get(i); + + if (slot instanceof SlotItemHandler && ((SlotItemHandler) slot).getItemHandler() instanceof ItemHandlerFluidFilter) { + FluidStack stack = ((ItemHandlerFluidFilter) ((SlotItemHandler) slot).getItemHandler()).getFilters()[slot.getSlotIndex()]; + + if (stack != null) { + FLUID_RENDERER.draw(mc, slot.xDisplayPosition, slot.yDisplayPosition, stack); + } + } + } + if (sideButtonTooltip != null) { drawTooltip(mouseX, mouseY, sideButtonTooltip); } diff --git a/src/main/java/refinedstorage/gui/GuiHandler.java b/src/main/java/refinedstorage/gui/GuiHandler.java index 0bb679263..f876d2d74 100755 --- a/src/main/java/refinedstorage/gui/GuiHandler.java +++ b/src/main/java/refinedstorage/gui/GuiHandler.java @@ -23,6 +23,8 @@ public class GuiHandler implements IGuiHandler { return new ContainerGrid((TileGrid) tile, player); case RefinedStorageGui.DISK_DRIVE: return new ContainerDiskDrive((TileDiskDrive) tile, player); + case RefinedStorageGui.FLUID_DISK_DRIVE: + return new ContainerFluidDiskDrive((TileFluidDiskDrive) tile, player); case RefinedStorageGui.IMPORTER: return new ContainerImporter((TileImporter) tile, player); case RefinedStorageGui.EXPORTER: @@ -91,7 +93,9 @@ public class GuiHandler implements IGuiHandler { case RefinedStorageGui.WIRELESS_GRID: return getWirelessGridGui(player, x); case RefinedStorageGui.DISK_DRIVE: - return new GuiStorage((ContainerStorage) getContainer(ID, player, tile), (IStorageGui) tile, "gui/disk_drive.png"); + return new GuiStorage((ContainerDiskDrive) getContainer(ID, player, tile), (IStorageGui) tile, "gui/disk_drive.png"); + case RefinedStorageGui.FLUID_DISK_DRIVE: + return new GuiStorage((ContainerFluidDiskDrive) getContainer(ID, player, tile), (IStorageGui) tile, "gui/fluid_disk_drive.png"); case RefinedStorageGui.IMPORTER: return new GuiImporter((ContainerImporter) getContainer(ID, player, tile)); case RefinedStorageGui.EXPORTER: diff --git a/src/main/java/refinedstorage/gui/GuiStorage.java b/src/main/java/refinedstorage/gui/GuiStorage.java index fff34ef1c..562977721 100755 --- a/src/main/java/refinedstorage/gui/GuiStorage.java +++ b/src/main/java/refinedstorage/gui/GuiStorage.java @@ -45,8 +45,13 @@ public class GuiStorage extends GuiBase { } if (gui.getCompareParameter() != null) { - addSideButton(new SideButtonCompare(gui.getCompareParameter(), CompareUtils.COMPARE_DAMAGE)); - addSideButton(new SideButtonCompare(gui.getCompareParameter(), CompareUtils.COMPARE_NBT)); + if (gui.hasComparisonFor(CompareUtils.COMPARE_DAMAGE)) { + addSideButton(new SideButtonCompare(gui.getCompareParameter(), CompareUtils.COMPARE_DAMAGE)); + } + + if (gui.hasComparisonFor(CompareUtils.COMPARE_NBT)) { + addSideButton(new SideButtonCompare(gui.getCompareParameter(), CompareUtils.COMPARE_NBT)); + } } priorityField = new GuiTextField(0, fontRendererObj, x + 98 + 1, y + 54 + 1, 25, fontRendererObj.FONT_HEIGHT); diff --git a/src/main/java/refinedstorage/gui/grid/stack/ClientStackFluid.java b/src/main/java/refinedstorage/gui/grid/stack/ClientStackFluid.java index 13e9b5d6d..21915a964 100755 --- a/src/main/java/refinedstorage/gui/grid/stack/ClientStackFluid.java +++ b/src/main/java/refinedstorage/gui/grid/stack/ClientStackFluid.java @@ -1,8 +1,6 @@ package refinedstorage.gui.grid.stack; import io.netty.buffer.ByteBuf; -import mezz.jei.gui.ingredients.FluidStackRenderer; -import net.minecraft.client.Minecraft; import net.minecraftforge.fluids.FluidRegistry; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fml.common.network.ByteBufUtils; @@ -14,13 +12,10 @@ import java.util.Locale; public class ClientStackFluid implements IClientStack { private int hash; private FluidStack stack; - private FluidStackRenderer renderer; public ClientStackFluid(ByteBuf buf) { this.hash = buf.readInt(); this.stack = new FluidStack(FluidRegistry.getFluid(ByteBufUtils.readUTF8String(buf)), buf.readInt(), ByteBufUtils.readTag(buf)); - // @TODO: Switch to own implementation - this.renderer = new FluidStackRenderer(1000, false, 16, 16, null); } public FluidStack getStack() { @@ -54,7 +49,7 @@ public class ClientStackFluid implements IClientStack { @Override public void draw(GuiBase gui, int x, int y, boolean isOverWithShift) { - renderer.draw(Minecraft.getMinecraft(), x, y, stack); + GuiBase.FLUID_RENDERER.draw(gui.mc, x, y, stack); gui.drawQuantity(x, y, String.format(Locale.US, "%.1f", (float) stack.amount / 1000).replace(".0", "") + "B"); } diff --git a/src/main/java/refinedstorage/inventory/ItemHandlerFluidFilter.java b/src/main/java/refinedstorage/inventory/ItemHandlerFluidFilter.java new file mode 100755 index 000000000..90e34a23b --- /dev/null +++ b/src/main/java/refinedstorage/inventory/ItemHandlerFluidFilter.java @@ -0,0 +1,32 @@ +package refinedstorage.inventory; + +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.capability.CapabilityFluidHandler; + +public class ItemHandlerFluidFilter extends ItemHandlerBasic { + private FluidStack[] filters = new FluidStack[9]; + + public ItemHandlerFluidFilter(TileEntity tile) { + super(9, tile, (IItemValidator) s -> s.hasCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, null) && s.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, null).drain(Fluid.BUCKET_VOLUME, false) != null); + } + + @Override + protected void onContentsChanged(int slot) { + super.onContentsChanged(slot); + + ItemStack stack = getStackInSlot(slot); + + if (stack == null) { + filters[slot] = null; + } else { + filters[slot] = stack.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, null).drain(Fluid.BUCKET_VOLUME, false); + } + } + + public FluidStack[] getFilters() { + return filters; + } +} diff --git a/src/main/java/refinedstorage/proxy/ClientProxy.java b/src/main/java/refinedstorage/proxy/ClientProxy.java index d5695a78e..30c2acad5 100755 --- a/src/main/java/refinedstorage/proxy/ClientProxy.java +++ b/src/main/java/refinedstorage/proxy/ClientProxy.java @@ -238,6 +238,7 @@ public class ClientProxy extends CommonProxy { ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.IMPORTER), 0, new ModelResourceLocation("refinedstorage:importer", "inventory")); ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.EXTERNAL_STORAGE), 0, new ModelResourceLocation("refinedstorage:external_storage", "inventory")); ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.DISK_DRIVE), 0, new ModelResourceLocation("refinedstorage:disk_drive", "inventory")); + ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.FLUID_DISK_DRIVE), 0, new ModelResourceLocation("refinedstorage:disk_drive", "inventory")); ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.CONTROLLER), EnumControllerType.NORMAL.getId(), new ModelResourceLocation("refinedstorage:controller", "inventory")); ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.CONTROLLER), EnumControllerType.CREATIVE.getId(), new ModelResourceLocation("refinedstorage:creative_controller", "inventory")); ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.CONSTRUCTOR), 0, new ModelResourceLocation("refinedstorage:constructor", "inventory")); diff --git a/src/main/java/refinedstorage/proxy/CommonProxy.java b/src/main/java/refinedstorage/proxy/CommonProxy.java index c5aeb01b6..3a706bcea 100755 --- a/src/main/java/refinedstorage/proxy/CommonProxy.java +++ b/src/main/java/refinedstorage/proxy/CommonProxy.java @@ -85,6 +85,7 @@ public class CommonProxy { registerTile(TileCable.class, "cable"); registerTile(TileNetworkReceiver.class, "network_receiver"); registerTile(TileNetworkTransmitter.class, "network_transmitter"); + registerTile(TileFluidDiskDrive.class, "fluid_disk_drive"); registerBlock(RefinedStorageBlocks.CONTROLLER); registerBlock(RefinedStorageBlocks.GRID); @@ -107,6 +108,7 @@ public class CommonProxy { registerBlock(RefinedStorageBlocks.MACHINE_CASING); registerBlock(RefinedStorageBlocks.NETWORK_TRANSMITTER); registerBlock(RefinedStorageBlocks.NETWORK_RECEIVER); + registerBlock(RefinedStorageBlocks.FLUID_DISK_DRIVE); registerItem(RefinedStorageItems.QUARTZ_ENRICHED_IRON); registerItem(RefinedStorageItems.STORAGE_DISK); @@ -202,6 +204,15 @@ public class CommonProxy { new ItemStack(Blocks.CHEST) )); + // Fluid Disk Drive + RefinedStorageAPI.SOLDERER_REGISTRY.addRecipe(new SoldererRecipeBasic( + new ItemStack(RefinedStorageBlocks.FLUID_DISK_DRIVE), + 500, + new ItemStack(RefinedStorageItems.PROCESSOR, 1, ItemProcessor.TYPE_ADVANCED), + new ItemStack(RefinedStorageBlocks.MACHINE_CASING), + new ItemStack(Items.BUCKET) + )); + // Cable GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(RefinedStorageBlocks.CABLE, 12), "EEE", diff --git a/src/main/java/refinedstorage/tile/IStorageGui.java b/src/main/java/refinedstorage/tile/IStorageGui.java index 68eb5ae82..ded2b030e 100755 --- a/src/main/java/refinedstorage/tile/IStorageGui.java +++ b/src/main/java/refinedstorage/tile/IStorageGui.java @@ -12,6 +12,10 @@ public interface IStorageGui { TileDataParameter getCompareParameter(); + default boolean hasComparisonFor(int compare) { + return true; + } + TileDataParameter getFilterParameter(); TileDataParameter getPriorityParameter(); diff --git a/src/main/java/refinedstorage/tile/TileDiskDrive.java b/src/main/java/refinedstorage/tile/TileDiskDrive.java index bcf4a0dfa..d23fec347 100755 --- a/src/main/java/refinedstorage/tile/TileDiskDrive.java +++ b/src/main/java/refinedstorage/tile/TileDiskDrive.java @@ -12,13 +12,9 @@ import net.minecraftforge.items.ItemHandlerHelper; import refinedstorage.RefinedStorage; import refinedstorage.RefinedStorageItems; import refinedstorage.api.network.INetworkMaster; -import refinedstorage.api.storage.fluid.IFluidStorage; -import refinedstorage.api.storage.fluid.IFluidStorageProvider; import refinedstorage.api.storage.item.IItemStorage; import refinedstorage.api.storage.item.IItemStorageProvider; -import refinedstorage.apiimpl.storage.fluid.FluidStorageNBT; import refinedstorage.apiimpl.storage.item.ItemStorageNBT; -import refinedstorage.block.EnumFluidStorageType; import refinedstorage.block.EnumItemStorageType; import refinedstorage.inventory.ItemHandlerBasic; import refinedstorage.inventory.ItemValidatorBasic; @@ -29,7 +25,7 @@ import refinedstorage.tile.data.TileDataParameter; import java.util.List; -public class TileDiskDrive extends TileNode implements IItemStorageProvider, IFluidStorageProvider, IStorageGui, IComparable, IFilterable, IPrioritizable { +public class TileDiskDrive extends TileNode implements IItemStorageProvider, IStorageGui, IComparable, IFilterable, IPrioritizable { public static final TileDataParameter PRIORITY = IPrioritizable.createParameter(); public static final TileDataParameter COMPARE = IComparable.createParameter(); public static final TileDataParameter MODE = IFilterable.createParameter(); @@ -54,18 +50,6 @@ public class TileDiskDrive extends TileNode implements IItemStorageProvider, IFl } } - // @TODO: This is only temporary. Add fluid disk drive. - class FluidStorage extends FluidStorageNBT { - public FluidStorage(ItemStack disk) { - super(disk.getTagCompound(), EnumFluidStorageType.getById(disk.getItemDamage()).getCapacity(), TileDiskDrive.this); - } - - @Override - public int getPriority() { - return 0; - } - } - private static final String NBT_PRIORITY = "Priority"; private static final String NBT_COMPARE = "Compare"; private static final String NBT_MODE = "Mode"; @@ -76,44 +60,30 @@ public class TileDiskDrive extends TileNode implements IItemStorageProvider, IFl public boolean isValid(ItemStack disk) { return super.isValid(disk) && ItemStorageNBT.isValid(disk); } - }, new ItemValidatorBasic(RefinedStorageItems.FLUID_STORAGE_DISK) { - @Override - public boolean isValid(ItemStack disk) { - return super.isValid(disk) && FluidStorageNBT.isValid(disk); - } }) { @Override protected void onContentsChanged(int slot) { super.onContentsChanged(slot); - /** - * Can't use {@link net.minecraft.world.World#isRemote} here because when {@link TileDiskDrive#readFromNBT(NBTTagCompound)} is called there is no world set yet. - */ if (FMLCommonHandler.instance().getEffectiveSide() == Side.SERVER) { ItemStack disk = getStackInSlot(slot); if (disk == null) { - itemStorages[slot] = null; - fluidStorages[slot] = null; + storages[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); - } + storages[slot] = new ItemStorage(disk); } if (network != null) { network.getItemStorage().rebuild(); - network.getFluidStorage().rebuild(); } } } @Override public ItemStack extractItem(int slot, int amount, boolean simulate) { - if (itemStorages[slot] != null) { - itemStorages[slot].writeToNBT(); + if (storages[slot] != null) { + storages[slot].writeToNBT(); } return super.extractItem(slot, amount, simulate); @@ -122,8 +92,7 @@ public class TileDiskDrive extends TileNode implements IItemStorageProvider, IFl private ItemHandlerBasic filters = new ItemHandlerBasic(9, this); - private ItemStorage itemStorages[] = new ItemStorage[8]; - private FluidStorage fluidStorages[] = new FluidStorage[8]; + private ItemStorage storages[] = new ItemStorage[8]; private int priority = 0; private int compare = 0; @@ -167,7 +136,7 @@ public class TileDiskDrive extends TileNode implements IItemStorageProvider, IFl } public void onBreak() { - for (ItemStorage storage : this.itemStorages) { + for (ItemStorage storage : this.storages) { if (storage != null) { storage.writeToNBT(); } @@ -179,21 +148,11 @@ public class TileDiskDrive extends TileNode implements IItemStorageProvider, IFl super.onConnectionChange(network, state); network.getItemStorage().rebuild(); - network.getFluidStorage().rebuild(); } @Override public void addItemStorages(List storages) { - for (IItemStorage storage : this.itemStorages) { - if (storage != null) { - storages.add(storage); - } - } - } - - @Override - public void addFluidStorages(List storages) { - for (IFluidStorage storage : this.fluidStorages) { + for (IItemStorage storage : this.storages) { if (storage != null) { storages.add(storage); } @@ -225,8 +184,8 @@ public class TileDiskDrive extends TileNode implements IItemStorageProvider, IFl super.write(tag); for (int i = 0; i < disks.getSlots(); ++i) { - if (itemStorages[i] != null) { - itemStorages[i].writeToNBT(); + if (storages[i] != null) { + storages[i].writeToNBT(); } } diff --git a/src/main/java/refinedstorage/tile/TileFluidDiskDrive.java b/src/main/java/refinedstorage/tile/TileFluidDiskDrive.java new file mode 100755 index 000000000..9a59289e8 --- /dev/null +++ b/src/main/java/refinedstorage/tile/TileFluidDiskDrive.java @@ -0,0 +1,380 @@ +package refinedstorage.tile; + +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +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 refinedstorage.RefinedStorage; +import refinedstorage.RefinedStorageItems; +import refinedstorage.api.network.INetworkMaster; +import refinedstorage.api.storage.CompareUtils; +import refinedstorage.api.storage.fluid.IFluidStorage; +import refinedstorage.api.storage.fluid.IFluidStorageProvider; +import refinedstorage.apiimpl.storage.fluid.FluidStorageNBT; +import refinedstorage.apiimpl.storage.fluid.FluidUtils; +import refinedstorage.block.EnumFluidStorageType; +import refinedstorage.inventory.ItemHandlerBasic; +import refinedstorage.inventory.ItemHandlerFluidFilter; +import refinedstorage.inventory.ItemValidatorBasic; +import refinedstorage.tile.config.IComparable; +import refinedstorage.tile.config.IFilterable; +import refinedstorage.tile.config.IPrioritizable; +import refinedstorage.tile.data.TileDataParameter; + +import java.util.List; + +public class TileFluidDiskDrive extends TileNode implements IFluidStorageProvider, IStorageGui, IComparable, IFilterable, IPrioritizable { + public static final TileDataParameter PRIORITY = IPrioritizable.createParameter(); + public static final TileDataParameter COMPARE = IComparable.createParameter(); + public static final TileDataParameter MODE = IFilterable.createParameter(); + + public class FluidStorage extends FluidStorageNBT { + public FluidStorage(ItemStack disk) { + super(disk.getTagCompound(), EnumFluidStorageType.getById(disk.getItemDamage()).getCapacity(), TileFluidDiskDrive.this); + } + + @Override + public int getPriority() { + return priority; + } + + @Override + public FluidStack insertFluid(FluidStack stack, int size, boolean simulate) { + if (!IFilterable.canTakeFluids(filters, mode, getCompare(), stack)) { + return FluidUtils.copyStackWithSize(stack, size); + } + + return super.insertFluid(stack, size, simulate); + } + } + + private static final String NBT_PRIORITY = "Priority"; + private static final String NBT_COMPARE = "Compare"; + private static final String NBT_MODE = "Mode"; + private static final String NBT_STORED = "Stored"; + + private ItemHandlerBasic disks = new ItemHandlerBasic(8, this, new ItemValidatorBasic(RefinedStorageItems.FLUID_STORAGE_DISK) { + @Override + 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) { + ItemStack disk = getStackInSlot(slot); + + if (disk == null) { + storages[slot] = null; + } else { + storages[slot] = new FluidStorage(disk); + } + + if (network != null) { + network.getFluidStorage().rebuild(); + } + } + } + + @Override + public ItemStack extractItem(int slot, int amount, boolean simulate) { + if (storages[slot] != null) { + storages[slot].writeToNBT(); + } + + return super.extractItem(slot, amount, simulate); + } + }; + + private ItemHandlerFluidFilter filters = new ItemHandlerFluidFilter(this); + + private FluidStorage storages[] = new FluidStorage[8]; + + private int priority = 0; + private int compare = 0; + private int mode = IFilterable.WHITELIST; + private int stored = 0; + + public TileFluidDiskDrive() { + dataManager.addWatchedParameter(PRIORITY); + dataManager.addWatchedParameter(COMPARE); + dataManager.addWatchedParameter(MODE); + } + + @Override + public void update() { + if (!worldObj.isRemote) { + if (stored != getStoredForDisplayServer()) { + stored = getStoredForDisplayServer(); + + updateBlock(); + } + } + + super.update(); + } + + @Override + public int getEnergyUsage() { + int usage = RefinedStorage.INSTANCE.fluidDiskDriveUsage; + + for (int i = 0; i < disks.getSlots(); ++i) { + if (disks.getStackInSlot(i) != null) { + usage += RefinedStorage.INSTANCE.fluidDiskDrivePerDiskUsage; + } + } + + return usage; + } + + @Override + public void updateNode() { + } + + public void onBreak() { + for (FluidStorage storage : this.storages) { + if (storage != null) { + storage.writeToNBT(); + } + } + } + + @Override + public void onConnectionChange(INetworkMaster network, boolean state) { + super.onConnectionChange(network, state); + + network.getFluidStorage().rebuild(); + } + + @Override + public void addFluidStorages(List storages) { + for (IFluidStorage storage : this.storages) { + if (storage != null) { + storages.add(storage); + } + } + } + + @Override + public void read(NBTTagCompound tag) { + super.read(tag); + + readItems(disks, 0, tag); + readItems(filters, 1, tag); + + if (tag.hasKey(NBT_PRIORITY)) { + priority = tag.getInteger(NBT_PRIORITY); + } + + if (tag.hasKey(NBT_COMPARE)) { + compare = tag.getInteger(NBT_COMPARE); + } + + if (tag.hasKey(NBT_MODE)) { + mode = tag.getInteger(NBT_MODE); + } + } + + @Override + public NBTTagCompound write(NBTTagCompound tag) { + super.write(tag); + + for (int i = 0; i < disks.getSlots(); ++i) { + if (storages[i] != null) { + storages[i].writeToNBT(); + } + } + + writeItems(disks, 0, tag); + writeItems(filters, 1, tag); + + tag.setInteger(NBT_PRIORITY, priority); + tag.setInteger(NBT_COMPARE, compare); + tag.setInteger(NBT_MODE, mode); + + return tag; + } + + @Override + public NBTTagCompound writeUpdate(NBTTagCompound tag) { + super.writeUpdate(tag); + + tag.setInteger(NBT_STORED, stored); + + return tag; + } + + @Override + public void readUpdate(NBTTagCompound tag) { + stored = tag.getInteger(NBT_STORED); + + super.readUpdate(tag); + } + + @Override + public int getCompare() { + return compare; + } + + @Override + public void setCompare(int compare) { + this.compare = compare; + + markDirty(); + } + + @Override + public int getMode() { + return mode; + } + + @Override + public void setMode(int mode) { + this.mode = mode; + + markDirty(); + } + + public int getStoredForDisplayServer() { + float stored = 0; + float storedMax = 0; + + for (int i = 0; i < disks.getSlots(); ++i) { + ItemStack disk = disks.getStackInSlot(i); + + if (disk != null) { + int capacity = EnumFluidStorageType.getById(disk.getItemDamage()).getCapacity(); + + if (capacity == -1) { + return 0; + } + + stored += FluidStorageNBT.getStoredFromNBT(disk.getTagCompound()); + storedMax += EnumFluidStorageType.getById(disk.getItemDamage()).getCapacity(); + } + } + + if (storedMax == 0) { + return 0; + } + + return (int) Math.floor((stored / storedMax) * 7f); + } + + public int getStoredForDisplay() { + return stored; + } + + @Override + public String getGuiTitle() { + return "block.refinedstorage:fluid_disk_drive.name"; + } + + @Override + public IItemHandler getFilters() { + return filters; + } + + @Override + public TileDataParameter getRedstoneModeParameter() { + return REDSTONE_MODE; + } + + @Override + public TileDataParameter getCompareParameter() { + return COMPARE; + } + + @Override + public boolean hasComparisonFor(int compare) { + return compare == CompareUtils.COMPARE_NBT; + } + + @Override + public TileDataParameter getFilterParameter() { + return MODE; + } + + @Override + public TileDataParameter getPriorityParameter() { + return PRIORITY; + } + + @Override + public int getPriority() { + return priority; + } + + @Override + public void setPriority(int priority) { + this.priority = priority; + + markDirty(); + } + + @Override + public int getStored() { + int stored = 0; + + for (int i = 0; i < disks.getSlots(); ++i) { + ItemStack stack = disks.getStackInSlot(i); + + if (stack != null) { + stored += FluidStorageNBT.getStoredFromNBT(stack.getTagCompound()); + } + } + + return stored; + } + + @Override + public int getCapacity() { + int capacity = 0; + + for (int i = 0; i < disks.getSlots(); ++i) { + ItemStack stack = disks.getStackInSlot(i); + + if (stack != null) { + int diskCapacity = EnumFluidStorageType.getById(stack.getItemDamage()).getCapacity(); + + if (diskCapacity == -1) { + return -1; + } + + capacity += diskCapacity; + } + } + + return capacity; + } + + public IItemHandler getDisks() { + return disks; + } + + @Override + public IItemHandler getDrops() { + return disks; + } + + @Override + public T getCapability(Capability capability, EnumFacing facing) { + if (capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) { + return (T) disks; + } + + return super.getCapability(capability, facing); + } + + @Override + public boolean hasCapability(Capability capability, EnumFacing facing) { + return capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY || super.hasCapability(capability, facing); + } +} diff --git a/src/main/java/refinedstorage/tile/config/IFilterable.java b/src/main/java/refinedstorage/tile/config/IFilterable.java index 6b2b7beb2..e14100d11 100755 --- a/src/main/java/refinedstorage/tile/config/IFilterable.java +++ b/src/main/java/refinedstorage/tile/config/IFilterable.java @@ -3,8 +3,10 @@ package refinedstorage.tile.config; import net.minecraft.item.ItemStack; import net.minecraft.network.datasync.DataSerializers; import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.items.IItemHandler; import refinedstorage.api.storage.CompareUtils; +import refinedstorage.inventory.ItemHandlerFluidFilter; import refinedstorage.tile.data.ITileDataConsumer; import refinedstorage.tile.data.ITileDataProducer; import refinedstorage.tile.data.TileDataParameter; @@ -61,6 +63,38 @@ public interface IFilterable { return false; } + static boolean canTakeFluids(ItemHandlerFluidFilter filters, int mode, int compare, FluidStack stack) { + if (mode == WHITELIST) { + int slots = 0; + + for (int i = 0; i < filters.getSlots(); ++i) { + FluidStack slot = filters.getFilters()[i]; + + if (slot != null) { + slots++; + + if (CompareUtils.compareStack(slot, stack, compare)) { + return true; + } + } + } + + return slots == 0; + } else if (mode == BLACKLIST) { + for (int i = 0; i < filters.getSlots(); ++i) { + FluidStack slot = filters.getFilters()[i]; + + if (slot != null && CompareUtils.compareStack(slot, stack, compare)) { + return false; + } + } + + return true; + } + + return false; + } + void setMode(int mode); int getMode(); diff --git a/src/main/resources/assets/refinedstorage/lang/en_US.lang b/src/main/resources/assets/refinedstorage/lang/en_US.lang index a2e61612d..bdd963dd0 100755 --- a/src/main/resources/assets/refinedstorage/lang/en_US.lang +++ b/src/main/resources/assets/refinedstorage/lang/en_US.lang @@ -39,6 +39,7 @@ gui.refinedstorage:network_transmitter.distance=%d blocks gui.refinedstorage:network_transmitter.dimension=Dimension %d gui.refinedstorage:network_transmitter.missing_card=Missing Network Card gui.refinedstorage:network_transmitter.missing_upgrade=Insert upgrade +gui.refinedstorage:fluid_disk_drive=Fluid Disk Drive misc.refinedstorage:energy_stored=%d / %d RS misc.refinedstorage:energy_usage=Usage: %d RS/t @@ -126,6 +127,7 @@ block.refinedstorage:crafter.name=Crafter block.refinedstorage:processing_pattern_encoder.name=Processing Pattern Encoder block.refinedstorage:network_receiver.name=Network Receiver block.refinedstorage:network_transmitter.name=Network Transmitter +block.refinedstorage:fluid_disk_drive.name=Fluid Disk Drive item.refinedstorage:storage_disk.0.name=1k Storage Disk item.refinedstorage:storage_disk.1.name=4k Storage Disk From b7c39d64898f5d296af226466e9aa3eb18fc5ef9 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sat, 13 Aug 2016 17:13:08 +0200 Subject: [PATCH 174/214] Fixes --- .../api/storage/CompareUtils.java | 2 +- .../network/grid/FluidGridHandler.java | 6 ++--- .../storage/fluid/FluidStorageNBT.java | 4 +-- .../storage/fluid/GroupedFluidStorage.java | 3 ++- src/main/java/refinedstorage/gui/GuiBase.java | 1 + .../refinedstorage/tile/TileController.java | 27 ++++++++++++++++--- 6 files changed, 32 insertions(+), 11 deletions(-) diff --git a/src/main/java/refinedstorage/api/storage/CompareUtils.java b/src/main/java/refinedstorage/api/storage/CompareUtils.java index 9b4a77c80..83a5e7f28 100755 --- a/src/main/java/refinedstorage/api/storage/CompareUtils.java +++ b/src/main/java/refinedstorage/api/storage/CompareUtils.java @@ -99,7 +99,7 @@ public final class CompareUtils { } if ((flags & COMPARE_NBT) == COMPARE_NBT) { - if (!left.tag.equals(right)) { + if (left.tag != null && !left.tag.equals(right)) { return false; } } diff --git a/src/main/java/refinedstorage/apiimpl/network/grid/FluidGridHandler.java b/src/main/java/refinedstorage/apiimpl/network/grid/FluidGridHandler.java index e22fd83fb..b1b092987 100755 --- a/src/main/java/refinedstorage/apiimpl/network/grid/FluidGridHandler.java +++ b/src/main/java/refinedstorage/apiimpl/network/grid/FluidGridHandler.java @@ -35,10 +35,10 @@ public class FluidGridHandler implements IFluidGridHandler { for (int i = 0; i < player.inventory.getSizeInventory(); ++i) { ItemStack slot = player.inventory.getStackInSlot(i); - if (CompareUtils.compareStack(EMPTY_BUCKET, slot)) { - bucket = slot; + if (CompareUtils.compareStackNoQuantity(EMPTY_BUCKET, slot)) { + bucket = EMPTY_BUCKET.copy(); - player.inventory.setInventorySlotContents(i, null); + player.inventory.decrStackSize(i, 1); break; } diff --git a/src/main/java/refinedstorage/apiimpl/storage/fluid/FluidStorageNBT.java b/src/main/java/refinedstorage/apiimpl/storage/fluid/FluidStorageNBT.java index 9a86008e8..3ec3e60fd 100755 --- a/src/main/java/refinedstorage/apiimpl/storage/fluid/FluidStorageNBT.java +++ b/src/main/java/refinedstorage/apiimpl/storage/fluid/FluidStorageNBT.java @@ -5,6 +5,7 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.tileentity.TileEntity; import net.minecraftforge.fluids.FluidStack; +import refinedstorage.api.storage.CompareUtils; import refinedstorage.api.storage.fluid.IFluidStorage; import javax.annotation.Nullable; @@ -138,8 +139,7 @@ public abstract class FluidStorageNBT implements IFluidStorage { @Override public FluidStack extractFluid(FluidStack stack, int size, int flags) { for (FluidStack otherStack : stacks) { - // @TODO: Use flags everywhere - if (otherStack.isFluidEqual(stack)) { + if (CompareUtils.compareStack(otherStack, stack, flags)) { if (size > otherStack.amount) { size = otherStack.amount; } diff --git a/src/main/java/refinedstorage/apiimpl/storage/fluid/GroupedFluidStorage.java b/src/main/java/refinedstorage/apiimpl/storage/fluid/GroupedFluidStorage.java index 99ee93854..f143a562e 100755 --- a/src/main/java/refinedstorage/apiimpl/storage/fluid/GroupedFluidStorage.java +++ b/src/main/java/refinedstorage/apiimpl/storage/fluid/GroupedFluidStorage.java @@ -6,6 +6,7 @@ import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidStack; import refinedstorage.api.network.INetworkMaster; import refinedstorage.api.network.NetworkUtils; +import refinedstorage.api.storage.CompareUtils; import refinedstorage.api.storage.fluid.IFluidStorage; import refinedstorage.api.storage.fluid.IFluidStorageProvider; import refinedstorage.api.storage.fluid.IGroupedFluidStorage; @@ -86,7 +87,7 @@ public class GroupedFluidStorage implements IGroupedFluidStorage { @Nullable public FluidStack get(@Nonnull FluidStack stack, int flags) { for (FluidStack otherStack : stacks.get(stack.getFluid())) { - if (otherStack.isFluidEqual(stack)) { + if (CompareUtils.compareStack(otherStack, stack, flags)) { return otherStack; } } diff --git a/src/main/java/refinedstorage/gui/GuiBase.java b/src/main/java/refinedstorage/gui/GuiBase.java index 4495c42c2..9bb783161 100755 --- a/src/main/java/refinedstorage/gui/GuiBase.java +++ b/src/main/java/refinedstorage/gui/GuiBase.java @@ -25,6 +25,7 @@ import java.util.Arrays; import java.util.List; public abstract class GuiBase extends GuiContainer { + // @TODO: Don't depend on JEI public static final FluidStackRenderer FLUID_RENDERER = new FluidStackRenderer(Fluid.BUCKET_VOLUME, false, 16, 16, null); protected static final int SIDE_BUTTON_WIDTH = 20; diff --git a/src/main/java/refinedstorage/tile/TileController.java b/src/main/java/refinedstorage/tile/TileController.java index a2add346b..5c03467bf 100755 --- a/src/main/java/refinedstorage/tile/TileController.java +++ b/src/main/java/refinedstorage/tile/TileController.java @@ -130,7 +130,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR private static final String NBT_CRAFTING_TASKS = "CraftingTasks"; - private static final Comparator SIZE_COMPARATOR = (left, right) -> { + private static final Comparator ITEM_SIZE_COMPARATOR = (left, right) -> { if (left.getStored() == right.getStored()) { return 0; } @@ -138,7 +138,23 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR return (left.getStored() > right.getStored()) ? -1 : 1; }; - private static final Comparator PRIORITY_COMPARATOR = (left, right) -> { + private static final Comparator ITEM_PRIORITY_COMPARATOR = (left, right) -> { + if (left.getPriority() == right.getPriority()) { + return 0; + } + + return (left.getPriority() > right.getPriority()) ? -1 : 1; + }; + + private static final Comparator FLUID_SIZE_COMPARATOR = (left, right) -> { + if (left.getStored() == right.getStored()) { + return 0; + } + + return (left.getStored() > right.getStored()) ? -1 : 1; + }; + + private static final Comparator FLUID_PRIORITY_COMPARATOR = (left, right) -> { if (left.getPriority() == right.getPriority()) { return 0; } @@ -220,8 +236,11 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR energyEU.update(); if (canRun()) { - Collections.sort(itemStorage.getStorages(), SIZE_COMPARATOR); - Collections.sort(itemStorage.getStorages(), PRIORITY_COMPARATOR); + Collections.sort(itemStorage.getStorages(), ITEM_SIZE_COMPARATOR); + Collections.sort(itemStorage.getStorages(), ITEM_PRIORITY_COMPARATOR); + + Collections.sort(fluidStorage.getStorages(), FLUID_SIZE_COMPARATOR); + Collections.sort(fluidStorage.getStorages(), FLUID_PRIORITY_COMPARATOR); boolean craftingTasksChanged = !craftingTasksToAdd.isEmpty() || !craftingTasksToAddAsLast.isEmpty() || !craftingTasksToCancel.isEmpty(); From b153f56046e166c102f04cdbc7327d4fc3672d38 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sat, 13 Aug 2016 17:15:28 +0200 Subject: [PATCH 175/214] Renames --- .../container/ContainerStorage.java | 6 ++-- .../{SlotFluidFilter.java => SlotFluid.java} | 4 +-- src/main/java/refinedstorage/gui/GuiBase.java | 6 ++-- .../inventory/ItemHandlerFluid.java | 34 +++++++++++++++++++ .../inventory/ItemHandlerFluidFilter.java | 32 ----------------- .../tile/TileFluidDiskDrive.java | 4 +-- .../tile/config/IFilterable.java | 8 ++--- 7 files changed, 48 insertions(+), 46 deletions(-) rename src/main/java/refinedstorage/container/slot/{SlotFluidFilter.java => SlotFluid.java} (70%) create mode 100755 src/main/java/refinedstorage/inventory/ItemHandlerFluid.java delete mode 100755 src/main/java/refinedstorage/inventory/ItemHandlerFluidFilter.java diff --git a/src/main/java/refinedstorage/container/ContainerStorage.java b/src/main/java/refinedstorage/container/ContainerStorage.java index 87ed97ea4..da577ee27 100755 --- a/src/main/java/refinedstorage/container/ContainerStorage.java +++ b/src/main/java/refinedstorage/container/ContainerStorage.java @@ -4,9 +4,9 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; import net.minecraftforge.items.IItemHandler; -import refinedstorage.container.slot.SlotFluidFilter; +import refinedstorage.container.slot.SlotFluid; import refinedstorage.container.slot.SlotSpecimen; -import refinedstorage.inventory.ItemHandlerFluidFilter; +import refinedstorage.inventory.ItemHandlerFluid; import refinedstorage.tile.TileBase; public class ContainerStorage extends ContainerBase { @@ -22,7 +22,7 @@ public class ContainerStorage extends ContainerBase { protected void addFilterAndPlayerInventorySlots(IItemHandler filters) { for (int i = 0; i < 9; ++i) { - addSlotToContainer(filters instanceof ItemHandlerFluidFilter ? new SlotFluidFilter(!getTile().getWorld().isRemote, filters, i, 8 + (18 * i), 20) : new SlotSpecimen(filters, i, 8 + (18 * i), 20)); + addSlotToContainer(filters instanceof ItemHandlerFluid ? new SlotFluid(!getTile().getWorld().isRemote, filters, i, 8 + (18 * i), 20) : new SlotSpecimen(filters, i, 8 + (18 * i), 20)); } addPlayerInventory(8, 129); diff --git a/src/main/java/refinedstorage/container/slot/SlotFluidFilter.java b/src/main/java/refinedstorage/container/slot/SlotFluid.java similarity index 70% rename from src/main/java/refinedstorage/container/slot/SlotFluidFilter.java rename to src/main/java/refinedstorage/container/slot/SlotFluid.java index f32b051e4..4dec4bfa0 100755 --- a/src/main/java/refinedstorage/container/slot/SlotFluidFilter.java +++ b/src/main/java/refinedstorage/container/slot/SlotFluid.java @@ -3,10 +3,10 @@ package refinedstorage.container.slot; import net.minecraft.item.ItemStack; import net.minecraftforge.items.IItemHandler; -public class SlotFluidFilter extends SlotSpecimen { +public class SlotFluid extends SlotSpecimen { private boolean server; - public SlotFluidFilter(boolean server, IItemHandler handler, int id, int x, int y) { + public SlotFluid(boolean server, IItemHandler handler, int id, int x, int y) { super(handler, id, x, y); this.server = server; diff --git a/src/main/java/refinedstorage/gui/GuiBase.java b/src/main/java/refinedstorage/gui/GuiBase.java index 9bb783161..f66f66511 100755 --- a/src/main/java/refinedstorage/gui/GuiBase.java +++ b/src/main/java/refinedstorage/gui/GuiBase.java @@ -17,7 +17,7 @@ import net.minecraftforge.items.SlotItemHandler; import org.lwjgl.input.Mouse; import refinedstorage.RefinedStorage; import refinedstorage.gui.sidebutton.SideButton; -import refinedstorage.inventory.ItemHandlerFluidFilter; +import refinedstorage.inventory.ItemHandlerFluid; import java.io.IOException; import java.util.ArrayList; @@ -131,8 +131,8 @@ public abstract class GuiBase extends GuiContainer { for (int i = 0; i < inventorySlots.inventorySlots.size(); ++i) { Slot slot = inventorySlots.inventorySlots.get(i); - if (slot instanceof SlotItemHandler && ((SlotItemHandler) slot).getItemHandler() instanceof ItemHandlerFluidFilter) { - FluidStack stack = ((ItemHandlerFluidFilter) ((SlotItemHandler) slot).getItemHandler()).getFilters()[slot.getSlotIndex()]; + if (slot instanceof SlotItemHandler && ((SlotItemHandler) slot).getItemHandler() instanceof ItemHandlerFluid) { + FluidStack stack = ((ItemHandlerFluid) ((SlotItemHandler) slot).getItemHandler()).getFluids()[slot.getSlotIndex()]; if (stack != null) { FLUID_RENDERER.draw(mc, slot.xDisplayPosition, slot.yDisplayPosition, stack); diff --git a/src/main/java/refinedstorage/inventory/ItemHandlerFluid.java b/src/main/java/refinedstorage/inventory/ItemHandlerFluid.java new file mode 100755 index 000000000..d0014bf4f --- /dev/null +++ b/src/main/java/refinedstorage/inventory/ItemHandlerFluid.java @@ -0,0 +1,34 @@ +package refinedstorage.inventory; + +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.capability.CapabilityFluidHandler; + +public class ItemHandlerFluid extends ItemHandlerBasic { + private FluidStack[] fluids; + + public ItemHandlerFluid(int size, TileEntity tile) { + super(size, tile, (IItemValidator) s -> s.hasCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, null) && s.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, null).drain(Fluid.BUCKET_VOLUME, false) != null); + + this.fluids = new FluidStack[size]; + } + + @Override + protected void onContentsChanged(int slot) { + super.onContentsChanged(slot); + + ItemStack stack = getStackInSlot(slot); + + if (stack == null) { + fluids[slot] = null; + } else { + fluids[slot] = stack.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, null).drain(Fluid.BUCKET_VOLUME, false); + } + } + + public FluidStack[] getFluids() { + return fluids; + } +} diff --git a/src/main/java/refinedstorage/inventory/ItemHandlerFluidFilter.java b/src/main/java/refinedstorage/inventory/ItemHandlerFluidFilter.java deleted file mode 100755 index 90e34a23b..000000000 --- a/src/main/java/refinedstorage/inventory/ItemHandlerFluidFilter.java +++ /dev/null @@ -1,32 +0,0 @@ -package refinedstorage.inventory; - -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.capability.CapabilityFluidHandler; - -public class ItemHandlerFluidFilter extends ItemHandlerBasic { - private FluidStack[] filters = new FluidStack[9]; - - public ItemHandlerFluidFilter(TileEntity tile) { - super(9, tile, (IItemValidator) s -> s.hasCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, null) && s.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, null).drain(Fluid.BUCKET_VOLUME, false) != null); - } - - @Override - protected void onContentsChanged(int slot) { - super.onContentsChanged(slot); - - ItemStack stack = getStackInSlot(slot); - - if (stack == null) { - filters[slot] = null; - } else { - filters[slot] = stack.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, null).drain(Fluid.BUCKET_VOLUME, false); - } - } - - public FluidStack[] getFilters() { - return filters; - } -} diff --git a/src/main/java/refinedstorage/tile/TileFluidDiskDrive.java b/src/main/java/refinedstorage/tile/TileFluidDiskDrive.java index 9a59289e8..106e2157e 100755 --- a/src/main/java/refinedstorage/tile/TileFluidDiskDrive.java +++ b/src/main/java/refinedstorage/tile/TileFluidDiskDrive.java @@ -19,7 +19,7 @@ import refinedstorage.apiimpl.storage.fluid.FluidStorageNBT; import refinedstorage.apiimpl.storage.fluid.FluidUtils; import refinedstorage.block.EnumFluidStorageType; import refinedstorage.inventory.ItemHandlerBasic; -import refinedstorage.inventory.ItemHandlerFluidFilter; +import refinedstorage.inventory.ItemHandlerFluid; import refinedstorage.inventory.ItemValidatorBasic; import refinedstorage.tile.config.IComparable; import refinedstorage.tile.config.IFilterable; @@ -93,7 +93,7 @@ public class TileFluidDiskDrive extends TileNode implements IFluidStorageProvide } }; - private ItemHandlerFluidFilter filters = new ItemHandlerFluidFilter(this); + private ItemHandlerFluid filters = new ItemHandlerFluid(9, this); private FluidStorage storages[] = new FluidStorage[8]; diff --git a/src/main/java/refinedstorage/tile/config/IFilterable.java b/src/main/java/refinedstorage/tile/config/IFilterable.java index e14100d11..5f605f3f2 100755 --- a/src/main/java/refinedstorage/tile/config/IFilterable.java +++ b/src/main/java/refinedstorage/tile/config/IFilterable.java @@ -6,7 +6,7 @@ import net.minecraft.tileentity.TileEntity; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.items.IItemHandler; import refinedstorage.api.storage.CompareUtils; -import refinedstorage.inventory.ItemHandlerFluidFilter; +import refinedstorage.inventory.ItemHandlerFluid; import refinedstorage.tile.data.ITileDataConsumer; import refinedstorage.tile.data.ITileDataProducer; import refinedstorage.tile.data.TileDataParameter; @@ -63,12 +63,12 @@ public interface IFilterable { return false; } - static boolean canTakeFluids(ItemHandlerFluidFilter filters, int mode, int compare, FluidStack stack) { + static boolean canTakeFluids(ItemHandlerFluid filters, int mode, int compare, FluidStack stack) { if (mode == WHITELIST) { int slots = 0; for (int i = 0; i < filters.getSlots(); ++i) { - FluidStack slot = filters.getFilters()[i]; + FluidStack slot = filters.getFluids()[i]; if (slot != null) { slots++; @@ -82,7 +82,7 @@ public interface IFilterable { return slots == 0; } else if (mode == BLACKLIST) { for (int i = 0; i < filters.getSlots(); ++i) { - FluidStack slot = filters.getFilters()[i]; + FluidStack slot = filters.getFluids()[i]; if (slot != null && CompareUtils.compareStack(slot, stack, compare)) { return false; From 980c5ddf1ad5c0a3da2ba548363999d870d72182 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sat, 13 Aug 2016 17:16:55 +0200 Subject: [PATCH 176/214] Add energy usage for fluid grids --- src/main/java/refinedstorage/RefinedStorage.java | 2 ++ src/main/java/refinedstorage/tile/grid/TileGrid.java | 2 ++ 2 files changed, 4 insertions(+) diff --git a/src/main/java/refinedstorage/RefinedStorage.java b/src/main/java/refinedstorage/RefinedStorage.java index deb0606e6..34a5f9d5b 100755 --- a/src/main/java/refinedstorage/RefinedStorage.java +++ b/src/main/java/refinedstorage/RefinedStorage.java @@ -65,6 +65,7 @@ public final class RefinedStorage { public int gridUsage; public int craftingGridUsage; public int patternGridUsage; + public int fluidGridUsage; public int networkTransmitterUsage; public float networkTransmitterPerBlockUsage; public int networkReceiverUsage; @@ -111,6 +112,7 @@ public final class RefinedStorage { gridUsage = config.getInt("grid", "energy", 2, 0, Integer.MAX_VALUE, "The energy used by Grids"); craftingGridUsage = config.getInt("craftingGrid", "energy", 4, 0, Integer.MAX_VALUE, "The energy used by Crafting Grids"); patternGridUsage = config.getInt("patternGrid", "energy", 3, 0, Integer.MAX_VALUE, "The energy used by Pattern Grids"); + fluidGridUsage = config.getInt("fluidGrid", "energy", 2, 0, Integer.MAX_VALUE, "The energy used by Fluid Grids"); networkTransmitterUsage = config.getInt("networkTransmitter", "energy", 50, 0, Integer.MAX_VALUE, "The base energy used by Network Transmitters"); networkTransmitterPerBlockUsage = config.getFloat("networkTransmitterPerBlock", "energy", 4, 0, Float.MAX_VALUE, "The additional energy per block that the Network Transmitter uses, gets rounded up"); networkReceiverUsage = config.getInt("networkReceiver", "energy", 15, 0, Integer.MAX_VALUE, "The energy used by Network Receivers"); diff --git a/src/main/java/refinedstorage/tile/grid/TileGrid.java b/src/main/java/refinedstorage/tile/grid/TileGrid.java index 759b39919..dc79472e0 100755 --- a/src/main/java/refinedstorage/tile/grid/TileGrid.java +++ b/src/main/java/refinedstorage/tile/grid/TileGrid.java @@ -167,6 +167,8 @@ public class TileGrid extends TileNode implements IGrid { return RefinedStorage.INSTANCE.craftingGridUsage; case PATTERN: return RefinedStorage.INSTANCE.patternGridUsage; + case FLUID: + return RefinedStorage.INSTANCE.fluidGridUsage; default: return 0; } From 214cd6e179979d0a1351e6d255e0a9d104d12f33 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sat, 13 Aug 2016 19:27:52 +0200 Subject: [PATCH 177/214] Fluid Constructor --- .../java/refinedstorage/RefinedStorage.java | 2 + .../refinedstorage/RefinedStorageBlocks.java | 1 + .../refinedstorage/RefinedStorageGui.java | 1 + .../java/refinedstorage/block/BlockCable.java | 8 +- .../block/BlockConstructor.java | 6 +- .../block/BlockFluidConstructor.java | 37 +++++ .../container/ContainerFluidConstructor.java | 49 +++++++ .../container/ContainerStorage.java | 4 +- ...{SlotFluid.java => SlotSpecimenFluid.java} | 4 +- .../gui/GuiFluidConstructor.java | 37 +++++ .../java/refinedstorage/gui/GuiHandler.java | 12 +- .../java/refinedstorage/gui/grid/GuiGrid.java | 4 +- .../refinedstorage/proxy/ClientProxy.java | 3 +- .../refinedstorage/proxy/CommonProxy.java | 14 ++ .../tile/TileFluidConstructor.java | 132 ++++++++++++++++++ .../blockstates/constructor.json | 2 +- .../blockstates/destructor.json | 2 +- .../refinedstorage/blockstates/exporter.json | 2 +- .../blockstates/external_storage.json | 2 +- .../blockstates/fluid_constructor.json | 83 +++++++++++ .../refinedstorage/blockstates/importer.json | 2 +- .../assets/refinedstorage/lang/en_US.lang | 2 + ...er_external_storage.png => cable_part.png} | Bin .../textures/blocks/fluid_constructor.png | Bin 0 -> 711 bytes .../textures/gui/fluid_grid.png | Bin 1974 -> 0 bytes 25 files changed, 387 insertions(+), 22 deletions(-) create mode 100755 src/main/java/refinedstorage/block/BlockFluidConstructor.java create mode 100755 src/main/java/refinedstorage/container/ContainerFluidConstructor.java rename src/main/java/refinedstorage/container/slot/{SlotFluid.java => SlotSpecimenFluid.java} (69%) create mode 100755 src/main/java/refinedstorage/gui/GuiFluidConstructor.java create mode 100755 src/main/java/refinedstorage/tile/TileFluidConstructor.java create mode 100755 src/main/resources/assets/refinedstorage/blockstates/fluid_constructor.json rename src/main/resources/assets/refinedstorage/textures/blocks/{importer_exporter_external_storage.png => cable_part.png} (100%) create mode 100755 src/main/resources/assets/refinedstorage/textures/blocks/fluid_constructor.png delete mode 100755 src/main/resources/assets/refinedstorage/textures/gui/fluid_grid.png diff --git a/src/main/java/refinedstorage/RefinedStorage.java b/src/main/java/refinedstorage/RefinedStorage.java index 34a5f9d5b..3c3d26f9a 100755 --- a/src/main/java/refinedstorage/RefinedStorage.java +++ b/src/main/java/refinedstorage/RefinedStorage.java @@ -44,6 +44,7 @@ public final class RefinedStorage { public int controllerBaseUsage; public int cableUsage; public int constructorUsage; + public int fluidConstructorUsage; public int crafterUsage; public int crafterPerPatternUsage; public int craftingMonitorUsage; @@ -91,6 +92,7 @@ public final class RefinedStorage { controllerBaseUsage = config.getInt("controllerBase", "energy", 0, 0, Integer.MAX_VALUE, "The base energy used by the Controller"); cableUsage = config.getInt("cable", "energy", 0, 0, Integer.MAX_VALUE, "The energy used by Cables"); constructorUsage = config.getInt("constructor", "energy", 1, 0, Integer.MAX_VALUE, "The energy used by Constructors"); + fluidConstructorUsage = config.getInt("fluidConstructor", "energy", 1, 0, Integer.MAX_VALUE, "The energy used by Fluid Constructors"); crafterUsage = config.getInt("crafter", "energy", 2, 0, Integer.MAX_VALUE, "The base energy used by Crafters"); crafterPerPatternUsage = config.getInt("crafterPerPattern", "energy", 1, 0, Integer.MAX_VALUE, "The additional energy used per Pattern in a Crafter"); craftingMonitorUsage = config.getInt("craftingMonitor", "energy", 2, 0, Integer.MAX_VALUE, "The energy used by Crafting Monitors"); diff --git a/src/main/java/refinedstorage/RefinedStorageBlocks.java b/src/main/java/refinedstorage/RefinedStorageBlocks.java index 44bfb25e2..33394ade9 100755 --- a/src/main/java/refinedstorage/RefinedStorageBlocks.java +++ b/src/main/java/refinedstorage/RefinedStorageBlocks.java @@ -25,4 +25,5 @@ public final class RefinedStorageBlocks { public static final BlockNetworkTransmitter NETWORK_TRANSMITTER = new BlockNetworkTransmitter(); public static final BlockNetworkReceiver NETWORK_RECEIVER = new BlockNetworkReceiver(); public static final BlockFluidDiskDrive FLUID_DISK_DRIVE = new BlockFluidDiskDrive(); + public static final BlockFluidConstructor FLUID_CONSTRUCTOR = new BlockFluidConstructor(); } \ No newline at end of file diff --git a/src/main/java/refinedstorage/RefinedStorageGui.java b/src/main/java/refinedstorage/RefinedStorageGui.java index 4ff36a937..4d70c70e9 100755 --- a/src/main/java/refinedstorage/RefinedStorageGui.java +++ b/src/main/java/refinedstorage/RefinedStorageGui.java @@ -21,4 +21,5 @@ public final class RefinedStorageGui { public static final int GRID_FILTER = 17; public static final int NETWORK_TRANSMITTER = 18; public static final int FLUID_DISK_DRIVE = 19; + public static final int FLUID_CONSTRUCTOR = 20; } diff --git a/src/main/java/refinedstorage/block/BlockCable.java b/src/main/java/refinedstorage/block/BlockCable.java index 2d5eac8a1..66849d5d7 100755 --- a/src/main/java/refinedstorage/block/BlockCable.java +++ b/src/main/java/refinedstorage/block/BlockCable.java @@ -68,6 +68,10 @@ public class BlockCable extends BlockCoverable { setCreativeTab(RefinedStorage.INSTANCE.tab); } + public BlockCable() { + this("cable"); + } + @Override public String getUnlocalizedName() { return "block." + RefinedStorage.ID + ":" + name; @@ -77,10 +81,6 @@ public class BlockCable extends BlockCoverable { return name; } - public BlockCable() { - this("cable"); - } - @Override public boolean canProvidePower(IBlockState state) { return false; diff --git a/src/main/java/refinedstorage/block/BlockConstructor.java b/src/main/java/refinedstorage/block/BlockConstructor.java index 0ae765eda..35e6476d7 100755 --- a/src/main/java/refinedstorage/block/BlockConstructor.java +++ b/src/main/java/refinedstorage/block/BlockConstructor.java @@ -31,8 +31,12 @@ public class BlockConstructor extends BlockCable { public static final AxisAlignedBB HEAD_DOWN_AABB = createAABB(0, 0, 0, 16, 2, 16); public static final AxisAlignedBB HEAD_UP_AABB = createAABB(0, 14, 0, 16, 16, 16); + public BlockConstructor(String name) { + super(name); + } + public BlockConstructor() { - super("constructor"); + this("constructor"); } @Override diff --git a/src/main/java/refinedstorage/block/BlockFluidConstructor.java b/src/main/java/refinedstorage/block/BlockFluidConstructor.java new file mode 100755 index 000000000..40d6c39cf --- /dev/null +++ b/src/main/java/refinedstorage/block/BlockFluidConstructor.java @@ -0,0 +1,37 @@ +package refinedstorage.block; + +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import refinedstorage.RefinedStorage; +import refinedstorage.RefinedStorageGui; +import refinedstorage.tile.TileFluidConstructor; + +public class BlockFluidConstructor extends BlockConstructor { + public BlockFluidConstructor() { + super("fluid_constructor"); + } + + @Override + public TileEntity createTileEntity(World world, IBlockState state) { + return new TileFluidConstructor(); + } + + @Override + public boolean onBlockActivatedDefault(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) { + if (hitCablePart(state, world, pos, hitX, hitY, hitZ)) { + return false; + } + + if (!world.isRemote) { + player.openGui(RefinedStorage.INSTANCE, RefinedStorageGui.FLUID_CONSTRUCTOR, world, pos.getX(), pos.getY(), pos.getZ()); + } + + return true; + } +} diff --git a/src/main/java/refinedstorage/container/ContainerFluidConstructor.java b/src/main/java/refinedstorage/container/ContainerFluidConstructor.java new file mode 100755 index 000000000..8d1c1745c --- /dev/null +++ b/src/main/java/refinedstorage/container/ContainerFluidConstructor.java @@ -0,0 +1,49 @@ +package refinedstorage.container; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; +import net.minecraftforge.items.SlotItemHandler; +import refinedstorage.container.slot.SlotSpecimenFluid; +import refinedstorage.tile.TileFluidConstructor; + +public class ContainerFluidConstructor extends ContainerBase { + public ContainerFluidConstructor(TileFluidConstructor fluidConstructor, EntityPlayer player) { + super(fluidConstructor, player); + + for (int i = 0; i < 4; ++i) { + addSlotToContainer(new SlotItemHandler(fluidConstructor.getUpgrades(), i, 187, 6 + (i * 18))); + } + + addSlotToContainer(new SlotSpecimenFluid(!fluidConstructor.getWorld().isRemote, fluidConstructor.getFilter(), 0, 80, 20)); + + addPlayerInventory(8, 55); + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer player, int index) { + ItemStack stack = null; + + Slot slot = getSlot(index); + + if (slot != null && slot.getHasStack()) { + stack = slot.getStack(); + + if (index < 4) { + if (!mergeItemStack(stack, 4, inventorySlots.size(), false)) { + return null; + } + } else if (!mergeItemStack(stack, 0, 4, false)) { + return mergeItemStackToSpecimen(stack, 4, 4 + 1); + } + + if (stack.stackSize == 0) { + slot.putStack(null); + } else { + slot.onSlotChanged(); + } + } + + return stack; + } +} diff --git a/src/main/java/refinedstorage/container/ContainerStorage.java b/src/main/java/refinedstorage/container/ContainerStorage.java index da577ee27..3b76687fa 100755 --- a/src/main/java/refinedstorage/container/ContainerStorage.java +++ b/src/main/java/refinedstorage/container/ContainerStorage.java @@ -4,8 +4,8 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; import net.minecraftforge.items.IItemHandler; -import refinedstorage.container.slot.SlotFluid; import refinedstorage.container.slot.SlotSpecimen; +import refinedstorage.container.slot.SlotSpecimenFluid; import refinedstorage.inventory.ItemHandlerFluid; import refinedstorage.tile.TileBase; @@ -22,7 +22,7 @@ public class ContainerStorage extends ContainerBase { protected void addFilterAndPlayerInventorySlots(IItemHandler filters) { for (int i = 0; i < 9; ++i) { - addSlotToContainer(filters instanceof ItemHandlerFluid ? new SlotFluid(!getTile().getWorld().isRemote, filters, i, 8 + (18 * i), 20) : new SlotSpecimen(filters, i, 8 + (18 * i), 20)); + addSlotToContainer(filters instanceof ItemHandlerFluid ? new SlotSpecimenFluid(!getTile().getWorld().isRemote, filters, i, 8 + (18 * i), 20) : new SlotSpecimen(filters, i, 8 + (18 * i), 20)); } addPlayerInventory(8, 129); diff --git a/src/main/java/refinedstorage/container/slot/SlotFluid.java b/src/main/java/refinedstorage/container/slot/SlotSpecimenFluid.java similarity index 69% rename from src/main/java/refinedstorage/container/slot/SlotFluid.java rename to src/main/java/refinedstorage/container/slot/SlotSpecimenFluid.java index 4dec4bfa0..66d0eded1 100755 --- a/src/main/java/refinedstorage/container/slot/SlotFluid.java +++ b/src/main/java/refinedstorage/container/slot/SlotSpecimenFluid.java @@ -3,10 +3,10 @@ package refinedstorage.container.slot; import net.minecraft.item.ItemStack; import net.minecraftforge.items.IItemHandler; -public class SlotFluid extends SlotSpecimen { +public class SlotSpecimenFluid extends SlotSpecimen { private boolean server; - public SlotFluid(boolean server, IItemHandler handler, int id, int x, int y) { + public SlotSpecimenFluid(boolean server, IItemHandler handler, int id, int x, int y) { super(handler, id, x, y); this.server = server; diff --git a/src/main/java/refinedstorage/gui/GuiFluidConstructor.java b/src/main/java/refinedstorage/gui/GuiFluidConstructor.java new file mode 100755 index 000000000..1e5307f4d --- /dev/null +++ b/src/main/java/refinedstorage/gui/GuiFluidConstructor.java @@ -0,0 +1,37 @@ +package refinedstorage.gui; + +import refinedstorage.api.storage.CompareUtils; +import refinedstorage.container.ContainerFluidConstructor; +import refinedstorage.gui.sidebutton.SideButtonCompare; +import refinedstorage.gui.sidebutton.SideButtonRedstoneMode; +import refinedstorage.tile.TileFluidConstructor; + +public class GuiFluidConstructor extends GuiBase { + public GuiFluidConstructor(ContainerFluidConstructor container) { + super(container, 211, 137); + } + + @Override + public void init(int x, int y) { + addSideButton(new SideButtonRedstoneMode(TileFluidConstructor.REDSTONE_MODE)); + + addSideButton(new SideButtonCompare(TileFluidConstructor.COMPARE, CompareUtils.COMPARE_NBT)); + } + + @Override + public void update(int x, int y) { + } + + @Override + public void drawBackground(int x, int y, int mouseX, int mouseY) { + bindTexture("gui/constructor.png"); + + drawTexture(x, y, 0, 0, width, height); + } + + @Override + public void drawForeground(int mouseX, int mouseY) { + drawString(7, 7, t("gui.refinedstorage:fluid_constructor")); + 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 f876d2d74..425c3f11f 100755 --- a/src/main/java/refinedstorage/gui/GuiHandler.java +++ b/src/main/java/refinedstorage/gui/GuiHandler.java @@ -23,8 +23,6 @@ public class GuiHandler implements IGuiHandler { return new ContainerGrid((TileGrid) tile, player); case RefinedStorageGui.DISK_DRIVE: return new ContainerDiskDrive((TileDiskDrive) tile, player); - case RefinedStorageGui.FLUID_DISK_DRIVE: - return new ContainerFluidDiskDrive((TileFluidDiskDrive) tile, player); case RefinedStorageGui.IMPORTER: return new ContainerImporter((TileImporter) tile, player); case RefinedStorageGui.EXPORTER: @@ -53,6 +51,10 @@ public class GuiHandler implements IGuiHandler { return new ContainerProcessingPatternEncoder((TileProcessingPatternEncoder) tile, player); case RefinedStorageGui.NETWORK_TRANSMITTER: return new ContainerNetworkTransmitter((TileNetworkTransmitter) tile, player); + case RefinedStorageGui.FLUID_DISK_DRIVE: + return new ContainerFluidDiskDrive((TileFluidDiskDrive) tile, player); + case RefinedStorageGui.FLUID_CONSTRUCTOR: + return new ContainerFluidConstructor((TileFluidConstructor) tile, player); default: return null; } @@ -94,8 +96,6 @@ public class GuiHandler implements IGuiHandler { return getWirelessGridGui(player, x); case RefinedStorageGui.DISK_DRIVE: return new GuiStorage((ContainerDiskDrive) getContainer(ID, player, tile), (IStorageGui) tile, "gui/disk_drive.png"); - case RefinedStorageGui.FLUID_DISK_DRIVE: - return new GuiStorage((ContainerFluidDiskDrive) getContainer(ID, player, tile), (IStorageGui) tile, "gui/fluid_disk_drive.png"); case RefinedStorageGui.IMPORTER: return new GuiImporter((ContainerImporter) getContainer(ID, player, tile)); case RefinedStorageGui.EXPORTER: @@ -126,6 +126,10 @@ public class GuiHandler implements IGuiHandler { return new GuiGridFilter(getGridFilterContainer(player, x)); case RefinedStorageGui.NETWORK_TRANSMITTER: return new GuiNetworkTransmitter((ContainerNetworkTransmitter) getContainer(ID, player, tile), (TileNetworkTransmitter) tile); + case RefinedStorageGui.FLUID_DISK_DRIVE: + return new GuiStorage((ContainerFluidDiskDrive) getContainer(ID, player, tile), (IStorageGui) tile, "gui/disk_drive.png"); + case RefinedStorageGui.FLUID_CONSTRUCTOR: + return new GuiFluidConstructor((ContainerFluidConstructor) getContainer(ID, player, tile)); default: return null; } diff --git a/src/main/java/refinedstorage/gui/grid/GuiGrid.java b/src/main/java/refinedstorage/gui/grid/GuiGrid.java index f7b4f2e28..f0e8c1b5d 100755 --- a/src/main/java/refinedstorage/gui/grid/GuiGrid.java +++ b/src/main/java/refinedstorage/gui/grid/GuiGrid.java @@ -60,7 +60,7 @@ public class GuiGrid extends GuiBase { } public GuiGrid(ContainerGrid container, IGrid grid) { - super(container, 227, (grid.getType() == EnumGridType.CRAFTING || grid.getType() == EnumGridType.PATTERN) ? 247 : 208); + super(container, grid.getType() == EnumGridType.FLUID ? 193 : 227, (grid.getType() == EnumGridType.CRAFTING || grid.getType() == EnumGridType.PATTERN) ? 247 : 208); setScrollbar(new Scrollbar(174, 20, 12, (grid.getType() == EnumGridType.CRAFTING || grid.getType() == EnumGridType.PATTERN || grid.getType() == EnumGridType.FLUID) ? 70 : 88)); @@ -241,8 +241,6 @@ public class GuiGrid extends GuiBase { bindTexture("gui/crafting_grid.png"); } else if (grid.getType() == EnumGridType.PATTERN) { bindTexture("gui/pattern_grid.png"); - } else if (grid.getType() == EnumGridType.FLUID) { - bindTexture("gui/fluid_grid.png"); } else { bindTexture("gui/grid.png"); } diff --git a/src/main/java/refinedstorage/proxy/ClientProxy.java b/src/main/java/refinedstorage/proxy/ClientProxy.java index 30c2acad5..3fcb573fa 100755 --- a/src/main/java/refinedstorage/proxy/ClientProxy.java +++ b/src/main/java/refinedstorage/proxy/ClientProxy.java @@ -238,7 +238,6 @@ public class ClientProxy extends CommonProxy { ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.IMPORTER), 0, new ModelResourceLocation("refinedstorage:importer", "inventory")); ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.EXTERNAL_STORAGE), 0, new ModelResourceLocation("refinedstorage:external_storage", "inventory")); ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.DISK_DRIVE), 0, new ModelResourceLocation("refinedstorage:disk_drive", "inventory")); - ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.FLUID_DISK_DRIVE), 0, new ModelResourceLocation("refinedstorage:disk_drive", "inventory")); ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.CONTROLLER), EnumControllerType.NORMAL.getId(), new ModelResourceLocation("refinedstorage:controller", "inventory")); ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.CONTROLLER), EnumControllerType.CREATIVE.getId(), new ModelResourceLocation("refinedstorage:creative_controller", "inventory")); ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.CONSTRUCTOR), 0, new ModelResourceLocation("refinedstorage:constructor", "inventory")); @@ -258,5 +257,7 @@ public class ClientProxy extends CommonProxy { ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.STORAGE), EnumItemStorageType.TYPE_16K.getId(), new ModelResourceLocation("refinedstorage:storage", "type=16k")); ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.STORAGE), EnumItemStorageType.TYPE_64K.getId(), new ModelResourceLocation("refinedstorage:storage", "type=64k")); ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.STORAGE), EnumItemStorageType.TYPE_CREATIVE.getId(), new ModelResourceLocation("refinedstorage:storage", "type=creative")); + ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.FLUID_DISK_DRIVE), 0, new ModelResourceLocation("refinedstorage:disk_drive", "inventory")); + ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.FLUID_CONSTRUCTOR), 0, new ModelResourceLocation("refinedstorage:fluid_constructor", "inventory")); } } diff --git a/src/main/java/refinedstorage/proxy/CommonProxy.java b/src/main/java/refinedstorage/proxy/CommonProxy.java index 3a706bcea..8e81028df 100755 --- a/src/main/java/refinedstorage/proxy/CommonProxy.java +++ b/src/main/java/refinedstorage/proxy/CommonProxy.java @@ -86,6 +86,7 @@ public class CommonProxy { registerTile(TileNetworkReceiver.class, "network_receiver"); registerTile(TileNetworkTransmitter.class, "network_transmitter"); registerTile(TileFluidDiskDrive.class, "fluid_disk_drive"); + registerTile(TileFluidConstructor.class, "fluid_constructor"); registerBlock(RefinedStorageBlocks.CONTROLLER); registerBlock(RefinedStorageBlocks.GRID); @@ -109,6 +110,7 @@ public class CommonProxy { registerBlock(RefinedStorageBlocks.NETWORK_TRANSMITTER); registerBlock(RefinedStorageBlocks.NETWORK_RECEIVER); registerBlock(RefinedStorageBlocks.FLUID_DISK_DRIVE); + registerBlock(RefinedStorageBlocks.FLUID_CONSTRUCTOR); registerItem(RefinedStorageItems.QUARTZ_ENRICHED_IRON); registerItem(RefinedStorageItems.STORAGE_DISK); @@ -358,6 +360,18 @@ public class CommonProxy { 'I', new ItemStack(RefinedStorageItems.PROCESSOR, 1, ItemProcessor.TYPE_IMPROVED) ); + // Fluid Constructor + GameRegistry.addShapedRecipe(new ItemStack(RefinedStorageBlocks.FLUID_CONSTRUCTOR), + "ECE", + "RMR", + "EIE", + 'E', new ItemStack(RefinedStorageItems.QUARTZ_ENRICHED_IRON), + 'C', new ItemStack(RefinedStorageItems.CORE, 1, ItemCore.TYPE_CONSTRUCTION), + 'R', new ItemStack(Items.BUCKET), + 'M', new ItemStack(RefinedStorageBlocks.CABLE), + 'I', new ItemStack(RefinedStorageItems.PROCESSOR, 1, ItemProcessor.TYPE_IMPROVED) + ); + // Detector GameRegistry.addRecipe(new ItemStack(RefinedStorageBlocks.DETECTOR), "ECE", diff --git a/src/main/java/refinedstorage/tile/TileFluidConstructor.java b/src/main/java/refinedstorage/tile/TileFluidConstructor.java new file mode 100755 index 000000000..d57d7c0eb --- /dev/null +++ b/src/main/java/refinedstorage/tile/TileFluidConstructor.java @@ -0,0 +1,132 @@ +package refinedstorage.tile; + +import mcmultipart.microblock.IMicroblock; +import net.minecraft.block.Block; +import net.minecraft.block.state.IBlockState; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.items.CapabilityItemHandler; +import net.minecraftforge.items.IItemHandler; +import refinedstorage.RefinedStorage; +import refinedstorage.inventory.ItemHandlerFluid; +import refinedstorage.inventory.ItemHandlerUpgrade; +import refinedstorage.item.ItemUpgrade; +import refinedstorage.tile.config.IComparable; +import refinedstorage.tile.data.TileDataParameter; + +public class TileFluidConstructor extends TileMultipartNode implements IComparable { + public static final TileDataParameter COMPARE = IComparable.createParameter(); + + private static final String NBT_COMPARE = "Compare"; + + private static final int BASE_SPEED = 20; + + private ItemHandlerFluid filter = new ItemHandlerFluid(1, this); + + private ItemHandlerUpgrade upgrades = new ItemHandlerUpgrade(4, this, ItemUpgrade.TYPE_SPEED); + + private int compare = 0; + + public TileFluidConstructor() { + dataManager.addWatchedParameter(COMPARE); + } + + @Override + public boolean canAddMicroblock(IMicroblock microblock) { + return !isBlockingMicroblock(microblock, getDirection()); + } + + @Override + public int getEnergyUsage() { + return RefinedStorage.INSTANCE.fluidConstructorUsage + upgrades.getEnergyUsage(); + } + + @Override + public void updateNode() { + FluidStack stack = filter.getFluids()[0]; + + if (stack != null && ticks % upgrades.getSpeed(BASE_SPEED, 4) == 0) { + BlockPos front = pos.offset(getDirection()); + + Block block = stack.getFluid().getBlock(); + + if (worldObj.isAirBlock(front) && block.canPlaceBlockAt(worldObj, front)) { + FluidStack took = network.extractFluid(stack, Fluid.BUCKET_VOLUME, compare); + + if (took != null) { + IBlockState state = block.getDefaultState(); + + // @TODO: This doesn't cause the block to flow? + worldObj.setBlockState(front, state, 1 | 2); + } + } + } + } + + @Override + public int getCompare() { + return compare; + } + + @Override + public void setCompare(int compare) { + this.compare = compare; + + markDirty(); + } + + @Override + public void read(NBTTagCompound tag) { + super.read(tag); + + if (tag.hasKey(NBT_COMPARE)) { + compare = tag.getInteger(NBT_COMPARE); + } + + readItems(filter, 0, tag); + readItems(upgrades, 1, tag); + } + + @Override + public NBTTagCompound write(NBTTagCompound tag) { + super.write(tag); + + tag.setInteger(NBT_COMPARE, compare); + + writeItems(filter, 0, tag); + writeItems(upgrades, 1, tag); + + return tag; + } + + public IItemHandler getUpgrades() { + return upgrades; + } + + public IItemHandler getFilter() { + return filter; + } + + @Override + public IItemHandler getDrops() { + return upgrades; + } + + @Override + public T getCapability(Capability capability, EnumFacing facing) { + if (capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) { + return (T) upgrades; + } + + return super.getCapability(capability, facing); + } + + @Override + public boolean hasCapability(Capability capability, EnumFacing facing) { + return capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY || super.hasCapability(capability, facing); + } +} diff --git a/src/main/resources/assets/refinedstorage/blockstates/constructor.json b/src/main/resources/assets/refinedstorage/blockstates/constructor.json index 147bb6734..5af28062c 100755 --- a/src/main/resources/assets/refinedstorage/blockstates/constructor.json +++ b/src/main/resources/assets/refinedstorage/blockstates/constructor.json @@ -5,7 +5,7 @@ "all": "refinedstorage:blocks/cable", "particle": "refinedstorage:blocks/cable", "front": "refinedstorage:blocks/constructor", - "line": "refinedstorage:blocks/importer_exporter_external_storage" + "line": "refinedstorage:blocks/cable_part" }, "model": "refinedstorage:cable_core", "uvlock": true diff --git a/src/main/resources/assets/refinedstorage/blockstates/destructor.json b/src/main/resources/assets/refinedstorage/blockstates/destructor.json index b8f2b82f7..e625d0e07 100755 --- a/src/main/resources/assets/refinedstorage/blockstates/destructor.json +++ b/src/main/resources/assets/refinedstorage/blockstates/destructor.json @@ -5,7 +5,7 @@ "all": "refinedstorage:blocks/cable", "particle": "refinedstorage:blocks/cable", "front": "refinedstorage:blocks/destructor", - "line": "refinedstorage:blocks/importer_exporter_external_storage" + "line": "refinedstorage:blocks/cable_part" }, "model": "refinedstorage:cable_core", "uvlock": true diff --git a/src/main/resources/assets/refinedstorage/blockstates/exporter.json b/src/main/resources/assets/refinedstorage/blockstates/exporter.json index 8cb54ce29..a0f233ebd 100755 --- a/src/main/resources/assets/refinedstorage/blockstates/exporter.json +++ b/src/main/resources/assets/refinedstorage/blockstates/exporter.json @@ -4,7 +4,7 @@ "textures": { "all": "refinedstorage:blocks/cable", "particle": "refinedstorage:blocks/cable", - "line": "refinedstorage:blocks/importer_exporter_external_storage" + "line": "refinedstorage:blocks/cable_part" }, "model": "refinedstorage:cable_core", "uvlock": true diff --git a/src/main/resources/assets/refinedstorage/blockstates/external_storage.json b/src/main/resources/assets/refinedstorage/blockstates/external_storage.json index d5499367e..adf5b62a1 100755 --- a/src/main/resources/assets/refinedstorage/blockstates/external_storage.json +++ b/src/main/resources/assets/refinedstorage/blockstates/external_storage.json @@ -4,7 +4,7 @@ "textures": { "all": "refinedstorage:blocks/cable", "particle": "refinedstorage:blocks/cable", - "line": "refinedstorage:blocks/importer_exporter_external_storage" + "line": "refinedstorage:blocks/cable_part" }, "model": "refinedstorage:cable_core", "uvlock": true diff --git a/src/main/resources/assets/refinedstorage/blockstates/fluid_constructor.json b/src/main/resources/assets/refinedstorage/blockstates/fluid_constructor.json new file mode 100755 index 000000000..b64780cba --- /dev/null +++ b/src/main/resources/assets/refinedstorage/blockstates/fluid_constructor.json @@ -0,0 +1,83 @@ +{ + "forge_marker": 1, + "defaults": { + "textures": { + "all": "refinedstorage:blocks/cable", + "particle": "refinedstorage:blocks/cable", + "front": "refinedstorage:blocks/fluid_constructor", + "line": "refinedstorage:blocks/cable_part" + }, + "model": "refinedstorage:cable_core", + "uvlock": true + }, + "variants": { + "inventory": [ + { + "model": "refinedstorage:constructor_destructor", + "transform": "forge:default-block" + } + ], + "direction": { + "north": { + "submodel": "refinedstorage:constructor_destructor_north" + }, + "east": { + "submodel": "refinedstorage:constructor_destructor_east" + }, + "south": { + "submodel": "refinedstorage:constructor_destructor_south" + }, + "west": { + "submodel": "refinedstorage:constructor_destructor_west" + }, + "up": { + "submodel": "refinedstorage:constructor_destructor_up" + }, + "down": { + "submodel": "refinedstorage:constructor_destructor_down" + } + }, + "north": { + "true": { + "submodel": "refinedstorage:cable_north" + }, + "false": { + } + }, + "east": { + "true": { + "submodel": "refinedstorage:cable_east" + }, + "false": { + } + }, + "south": { + "true": { + "submodel": "refinedstorage:cable_south" + }, + "false": { + } + }, + "west": { + "true": { + "submodel": "refinedstorage:cable_west" + }, + "false": { + } + }, + "up": { + "true": { + "submodel": "refinedstorage:cable_up" + }, + "false": { + } + }, + "down": { + "true": { + "submodel": "refinedstorage:cable_down" + }, + "false": { + } + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/refinedstorage/blockstates/importer.json b/src/main/resources/assets/refinedstorage/blockstates/importer.json index a131e1e27..ccbadf616 100755 --- a/src/main/resources/assets/refinedstorage/blockstates/importer.json +++ b/src/main/resources/assets/refinedstorage/blockstates/importer.json @@ -4,7 +4,7 @@ "textures": { "all": "refinedstorage:blocks/cable", "particle": "refinedstorage:blocks/cable", - "line": "refinedstorage:blocks/importer_exporter_external_storage" + "line": "refinedstorage:blocks/cable_part" }, "model": "refinedstorage:cable_core", "uvlock": true diff --git a/src/main/resources/assets/refinedstorage/lang/en_US.lang b/src/main/resources/assets/refinedstorage/lang/en_US.lang index bdd963dd0..f60cf3519 100755 --- a/src/main/resources/assets/refinedstorage/lang/en_US.lang +++ b/src/main/resources/assets/refinedstorage/lang/en_US.lang @@ -40,6 +40,7 @@ gui.refinedstorage:network_transmitter.dimension=Dimension %d gui.refinedstorage:network_transmitter.missing_card=Missing Network Card gui.refinedstorage:network_transmitter.missing_upgrade=Insert upgrade gui.refinedstorage:fluid_disk_drive=Fluid Disk Drive +gui.refinedstorage:fluid_constructor=Fluid Constructor misc.refinedstorage:energy_stored=%d / %d RS misc.refinedstorage:energy_usage=Usage: %d RS/t @@ -128,6 +129,7 @@ block.refinedstorage:processing_pattern_encoder.name=Processing Pattern Encoder block.refinedstorage:network_receiver.name=Network Receiver block.refinedstorage:network_transmitter.name=Network Transmitter block.refinedstorage:fluid_disk_drive.name=Fluid Disk Drive +block.refinedstorage:fluid_constructor.name=Fluid Constructor item.refinedstorage:storage_disk.0.name=1k Storage Disk item.refinedstorage:storage_disk.1.name=4k Storage Disk diff --git a/src/main/resources/assets/refinedstorage/textures/blocks/importer_exporter_external_storage.png b/src/main/resources/assets/refinedstorage/textures/blocks/cable_part.png similarity index 100% rename from src/main/resources/assets/refinedstorage/textures/blocks/importer_exporter_external_storage.png rename to src/main/resources/assets/refinedstorage/textures/blocks/cable_part.png diff --git a/src/main/resources/assets/refinedstorage/textures/blocks/fluid_constructor.png b/src/main/resources/assets/refinedstorage/textures/blocks/fluid_constructor.png new file mode 100755 index 0000000000000000000000000000000000000000..02c91d41dc1bca35c96961a08304e41a30a709ef GIT binary patch literal 711 zcmV;&0yzDNP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02y>eSaefwW^{L9 za%BK;VQFr3E^cLXAT%y8E-^5z3JSmg00K8jL_t(IPmPh=PU27$hWGQ-auOItqJ%J< zrYI5zGcz|{&Iy6GP!NS^sPss{DCNS_3y}!4&=cUyo6JJUT$_A*<=@@^zt&2M2;wLn zO(znWWHPhApUq^x9Uq@$vnL1XFHjE;zY?F02qF_tX5#U5EOvlWsn5tYcqfr4fuQl~ z^7QBF`R_B-|KjoW@nP`*;(mU=4nznP4ktkM=lwN{zA{&oh0>e%ZfCd3s{-^Ey}S7x z*!K3KC>l+H>X@Ay`=)DkyLPu@ciL84G9}rT1yc|$QL-hdVB6h|pin3VN;YLMiMlB0 zf?x=|!MF4lJ7t@ClQr3E>$+()mlHxC(ek(k(64Q`WlI)KQL-dx%o!YS@c?IWtj+>p z^Z5d3Ipr;|%Cu)~SU{f1(o7OQt>yITmq;eMME9a8hQ(jQ0`T)?8E`l@(Q>V~ z-(H*4&a|_NTCGlNC9OhgOm0N|9+BT)3O|O$mB;PgTCem@9QY=}FgJ#|aNOf?cyZhf t0|6NAbb0|;7*IMDzA literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/refinedstorage/textures/gui/fluid_grid.png b/src/main/resources/assets/refinedstorage/textures/gui/fluid_grid.png deleted file mode 100755 index 5ba8ff87f4ed9db1dbf9de6163d126162c4a30d6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1974 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K58911MRQ8&P5D>38$lZxy-8q?;Kn_c~qpu?a z!^VE@KZ&di49pAxJ|V6^adUI?(9qEC?(Sp9j{X1tA1E>kMnhnPgh10{aTQRmDGBlm z1}6TI3>bpHv#SE5owL9rvY3H^?=T269?xHq0u+=iag8Vm&QB{TPb^AhC`ioAE78kK zEm1JhGte_MSj)wA09c~%dAc};RK&f#dofSgP@wIiYUcg_6Pdm1uK6B5dg`Nt&U}9l z<+H6fZM#-%SXH+B?zYa|d+(Ipwo`vs+L-(5`~N=`kq^ud9N!YFx1Q?_gJsUKd;AZA zuA0^#OwQ*h(0%pZpOb;1VUI^XC}~bO+{U7C-g-|Y!@BSPmx@l=|6t>H<{!ryCD=YZ zuD*WeTKzp6+o$^^IVRL+_u1Xg{rqLhZ#JN|%8BF1}QyoSPZITg7`~b5cAvO*Lg*5xm}D!?=NZXxqUKc?yV5!Cs!69 z;xE1ras-3iHV_E}FduG^k1d~UoE6M7p?Z4Q!@GWIudghVQdll0S~ugj8A#!W4Zuf7_8mIx1^>53$47H3=>J_Be!t$T;m@*@i}$$I zUuJx=vmLD6vbG7Rb;5Hwu?B`GzYU^V@4udS(`xHVwiC9O10OyOgSZZ=1Z*3SII!aV z;}y3>n4jER8d|Y^GDN-l+Z7)U-`NfdAP|6A0AdGV@yYxx2+sqRfLs7l3IYz0&^;gn zG)v*U?HYTAoz=Ob_ui*%^UGbu`047i6(6{xusY1)Ztgo^ynu9WFgws8zx40k+}q!Z zmuK1>SZ{Ax-NyFE;A8$<_Ivd{KSl1!SEaDJpA&63lgd0{XAXnWbY6#Nn;1{Tm@&*e o&8AR%lOaVFOo`AgM>FVdQ&MBb@0L_GHYXATM From e9b864b1027d2009076304a3bf779cfa120b6717 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sat, 13 Aug 2016 20:55:10 +0200 Subject: [PATCH 178/214] Fluid Destructor --- .../java/refinedstorage/RefinedStorage.java | 2 + .../refinedstorage/RefinedStorageBlocks.java | 1 + .../refinedstorage/RefinedStorageGui.java | 1 + .../refinedstorage/block/BlockDestructor.java | 6 +- .../block/BlockFluidDestructor.java | 37 ++++ .../container/ContainerFluidDestructor.java | 51 ++++++ .../gui/GuiFluidDestructor.java | 40 +++++ .../java/refinedstorage/gui/GuiHandler.java | 4 + .../refinedstorage/proxy/ClientProxy.java | 1 + .../refinedstorage/proxy/CommonProxy.java | 14 ++ .../tile/TileFluidDestructor.java | 162 ++++++++++++++++++ .../blockstates/fluid_destructor.json | 83 +++++++++ .../assets/refinedstorage/lang/en_US.lang | 2 + .../textures/blocks/controller_7.png | Bin 798 -> 799 bytes .../textures/blocks/fluid_destructor.png | Bin 0 -> 638 bytes .../assets/refinedstorage/textures/icons.png | Bin 2972 -> 3729 bytes 16 files changed, 403 insertions(+), 1 deletion(-) create mode 100755 src/main/java/refinedstorage/block/BlockFluidDestructor.java create mode 100755 src/main/java/refinedstorage/container/ContainerFluidDestructor.java create mode 100755 src/main/java/refinedstorage/gui/GuiFluidDestructor.java create mode 100755 src/main/java/refinedstorage/tile/TileFluidDestructor.java create mode 100755 src/main/resources/assets/refinedstorage/blockstates/fluid_destructor.json create mode 100755 src/main/resources/assets/refinedstorage/textures/blocks/fluid_destructor.png diff --git a/src/main/java/refinedstorage/RefinedStorage.java b/src/main/java/refinedstorage/RefinedStorage.java index 3c3d26f9a..105a4a828 100755 --- a/src/main/java/refinedstorage/RefinedStorage.java +++ b/src/main/java/refinedstorage/RefinedStorage.java @@ -49,6 +49,7 @@ public final class RefinedStorage { public int crafterPerPatternUsage; public int craftingMonitorUsage; public int destructorUsage; + public int fluidDestructorUsage; public int detectorUsage; public int diskDriveUsage; public int diskDrivePerDiskUsage; @@ -97,6 +98,7 @@ public final class RefinedStorage { crafterPerPatternUsage = config.getInt("crafterPerPattern", "energy", 1, 0, Integer.MAX_VALUE, "The additional energy used per Pattern in a Crafter"); craftingMonitorUsage = config.getInt("craftingMonitor", "energy", 2, 0, Integer.MAX_VALUE, "The energy used by Crafting Monitors"); destructorUsage = config.getInt("destructor", "energy", 1, 0, Integer.MAX_VALUE, "The energy used by Destructors"); + fluidDestructorUsage = config.getInt("fluidDestructor", "energy", 1, 0, Integer.MAX_VALUE, "The energy used by Fluid Destructors"); detectorUsage = config.getInt("detector", "energy", 2, 0, Integer.MAX_VALUE, "The energy used by Detectors"); diskDriveUsage = config.getInt("diskDrive", "energy", 0, 0, Integer.MAX_VALUE, "The base energy used by Disk Drives"); diskDrivePerDiskUsage = config.getInt("diskDrivePerDisk", "energy", 1, 0, Integer.MAX_VALUE, "The additional energy used by Storage Disks in Disk Drives"); diff --git a/src/main/java/refinedstorage/RefinedStorageBlocks.java b/src/main/java/refinedstorage/RefinedStorageBlocks.java index 33394ade9..0abad81c3 100755 --- a/src/main/java/refinedstorage/RefinedStorageBlocks.java +++ b/src/main/java/refinedstorage/RefinedStorageBlocks.java @@ -26,4 +26,5 @@ public final class RefinedStorageBlocks { public static final BlockNetworkReceiver NETWORK_RECEIVER = new BlockNetworkReceiver(); public static final BlockFluidDiskDrive FLUID_DISK_DRIVE = new BlockFluidDiskDrive(); public static final BlockFluidConstructor FLUID_CONSTRUCTOR = new BlockFluidConstructor(); + public static final BlockFluidDestructor FLUID_DESTRUCTOR = new BlockFluidDestructor(); } \ No newline at end of file diff --git a/src/main/java/refinedstorage/RefinedStorageGui.java b/src/main/java/refinedstorage/RefinedStorageGui.java index 4d70c70e9..697d347b0 100755 --- a/src/main/java/refinedstorage/RefinedStorageGui.java +++ b/src/main/java/refinedstorage/RefinedStorageGui.java @@ -22,4 +22,5 @@ public final class RefinedStorageGui { public static final int NETWORK_TRANSMITTER = 18; public static final int FLUID_DISK_DRIVE = 19; public static final int FLUID_CONSTRUCTOR = 20; + public static final int FLUID_DESTRUCTOR = 21; } diff --git a/src/main/java/refinedstorage/block/BlockDestructor.java b/src/main/java/refinedstorage/block/BlockDestructor.java index a8978ff03..306b31418 100755 --- a/src/main/java/refinedstorage/block/BlockDestructor.java +++ b/src/main/java/refinedstorage/block/BlockDestructor.java @@ -17,8 +17,12 @@ import refinedstorage.tile.TileDestructor; import java.util.List; public class BlockDestructor extends BlockCable { + public BlockDestructor(String name) { + super(name); + } + public BlockDestructor() { - super("destructor"); + this("destructor"); } @Override diff --git a/src/main/java/refinedstorage/block/BlockFluidDestructor.java b/src/main/java/refinedstorage/block/BlockFluidDestructor.java new file mode 100755 index 000000000..2a0c8999d --- /dev/null +++ b/src/main/java/refinedstorage/block/BlockFluidDestructor.java @@ -0,0 +1,37 @@ +package refinedstorage.block; + +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import refinedstorage.RefinedStorage; +import refinedstorage.RefinedStorageGui; +import refinedstorage.tile.TileFluidDestructor; + +public class BlockFluidDestructor extends BlockDestructor { + public BlockFluidDestructor() { + super("fluid_destructor"); + } + + @Override + public TileEntity createTileEntity(World world, IBlockState state) { + return new TileFluidDestructor(); + } + + @Override + public boolean onBlockActivatedDefault(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) { + if (hitCablePart(state, world, pos, hitX, hitY, hitZ)) { + return false; + } + + if (!world.isRemote) { + player.openGui(RefinedStorage.INSTANCE, RefinedStorageGui.FLUID_DESTRUCTOR, world, pos.getX(), pos.getY(), pos.getZ()); + } + + return true; + } +} diff --git a/src/main/java/refinedstorage/container/ContainerFluidDestructor.java b/src/main/java/refinedstorage/container/ContainerFluidDestructor.java new file mode 100755 index 000000000..3cd84f2e7 --- /dev/null +++ b/src/main/java/refinedstorage/container/ContainerFluidDestructor.java @@ -0,0 +1,51 @@ +package refinedstorage.container; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; +import net.minecraftforge.items.SlotItemHandler; +import refinedstorage.container.slot.SlotSpecimenFluid; +import refinedstorage.tile.TileFluidDestructor; + +public class ContainerFluidDestructor extends ContainerBase { + public ContainerFluidDestructor(TileFluidDestructor fluidDestructor, EntityPlayer player) { + super(fluidDestructor, player); + + for (int i = 0; i < 4; ++i) { + addSlotToContainer(new SlotItemHandler(fluidDestructor.getUpgrades(), i, 187, 6 + (i * 18))); + } + + for (int i = 0; i < 9; ++i) { + addSlotToContainer(new SlotSpecimenFluid(!fluidDestructor.getWorld().isRemote, fluidDestructor.getInventory(), i, 8 + (18 * i), 20)); + } + + addPlayerInventory(8, 55); + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer player, int index) { + ItemStack stack = null; + + Slot slot = getSlot(index); + + if (slot != null && slot.getHasStack()) { + stack = slot.getStack(); + + if (index < 4) { + if (!mergeItemStack(stack, 4 + 9, inventorySlots.size(), false)) { + return null; + } + } else if (!mergeItemStack(stack, 0, 4, false)) { + return mergeItemStackToSpecimen(stack, 4, 4 + 9); + } + + if (stack.stackSize == 0) { + slot.putStack(null); + } else { + slot.onSlotChanged(); + } + } + + return stack; + } +} diff --git a/src/main/java/refinedstorage/gui/GuiFluidDestructor.java b/src/main/java/refinedstorage/gui/GuiFluidDestructor.java new file mode 100755 index 000000000..676997d89 --- /dev/null +++ b/src/main/java/refinedstorage/gui/GuiFluidDestructor.java @@ -0,0 +1,40 @@ +package refinedstorage.gui; + +import refinedstorage.api.storage.CompareUtils; +import refinedstorage.container.ContainerFluidDestructor; +import refinedstorage.gui.sidebutton.SideButtonCompare; +import refinedstorage.gui.sidebutton.SideButtonMode; +import refinedstorage.gui.sidebutton.SideButtonRedstoneMode; +import refinedstorage.tile.TileFluidDestructor; + +public class GuiFluidDestructor extends GuiBase { + public GuiFluidDestructor(ContainerFluidDestructor container) { + super(container, 211, 137); + } + + @Override + public void init(int x, int y) { + addSideButton(new SideButtonRedstoneMode(TileFluidDestructor.REDSTONE_MODE)); + + addSideButton(new SideButtonMode(TileFluidDestructor.MODE)); + + addSideButton(new SideButtonCompare(TileFluidDestructor.COMPARE, CompareUtils.COMPARE_NBT)); + } + + @Override + public void update(int x, int y) { + } + + @Override + public void drawBackground(int x, int y, int mouseX, int mouseY) { + bindTexture("gui/destructor.png"); + + drawTexture(x, y, 0, 0, width, height); + } + + @Override + public void drawForeground(int mouseX, int mouseY) { + drawString(7, 7, t("gui.refinedstorage:fluid_destructor")); + 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 425c3f11f..a2f5c02e5 100755 --- a/src/main/java/refinedstorage/gui/GuiHandler.java +++ b/src/main/java/refinedstorage/gui/GuiHandler.java @@ -55,6 +55,8 @@ public class GuiHandler implements IGuiHandler { return new ContainerFluidDiskDrive((TileFluidDiskDrive) tile, player); case RefinedStorageGui.FLUID_CONSTRUCTOR: return new ContainerFluidConstructor((TileFluidConstructor) tile, player); + case RefinedStorageGui.FLUID_DESTRUCTOR: + return new ContainerFluidDestructor((TileFluidDestructor) tile, player); default: return null; } @@ -130,6 +132,8 @@ public class GuiHandler implements IGuiHandler { return new GuiStorage((ContainerFluidDiskDrive) getContainer(ID, player, tile), (IStorageGui) tile, "gui/disk_drive.png"); case RefinedStorageGui.FLUID_CONSTRUCTOR: return new GuiFluidConstructor((ContainerFluidConstructor) getContainer(ID, player, tile)); + case RefinedStorageGui.FLUID_DESTRUCTOR: + return new GuiFluidDestructor((ContainerFluidDestructor) getContainer(ID, player, tile)); default: return null; } diff --git a/src/main/java/refinedstorage/proxy/ClientProxy.java b/src/main/java/refinedstorage/proxy/ClientProxy.java index 3fcb573fa..73c4f6a07 100755 --- a/src/main/java/refinedstorage/proxy/ClientProxy.java +++ b/src/main/java/refinedstorage/proxy/ClientProxy.java @@ -259,5 +259,6 @@ public class ClientProxy extends CommonProxy { ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.STORAGE), EnumItemStorageType.TYPE_CREATIVE.getId(), new ModelResourceLocation("refinedstorage:storage", "type=creative")); ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.FLUID_DISK_DRIVE), 0, new ModelResourceLocation("refinedstorage:disk_drive", "inventory")); ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.FLUID_CONSTRUCTOR), 0, new ModelResourceLocation("refinedstorage:fluid_constructor", "inventory")); + ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.FLUID_DESTRUCTOR), 0, new ModelResourceLocation("refinedstorage:fluid_destructor", "inventory")); } } diff --git a/src/main/java/refinedstorage/proxy/CommonProxy.java b/src/main/java/refinedstorage/proxy/CommonProxy.java index 8e81028df..c8da6af95 100755 --- a/src/main/java/refinedstorage/proxy/CommonProxy.java +++ b/src/main/java/refinedstorage/proxy/CommonProxy.java @@ -87,6 +87,7 @@ public class CommonProxy { registerTile(TileNetworkTransmitter.class, "network_transmitter"); registerTile(TileFluidDiskDrive.class, "fluid_disk_drive"); registerTile(TileFluidConstructor.class, "fluid_constructor"); + registerTile(TileFluidDestructor.class, "fluid_destructor"); registerBlock(RefinedStorageBlocks.CONTROLLER); registerBlock(RefinedStorageBlocks.GRID); @@ -111,6 +112,7 @@ public class CommonProxy { registerBlock(RefinedStorageBlocks.NETWORK_RECEIVER); registerBlock(RefinedStorageBlocks.FLUID_DISK_DRIVE); registerBlock(RefinedStorageBlocks.FLUID_CONSTRUCTOR); + registerBlock(RefinedStorageBlocks.FLUID_DESTRUCTOR); registerItem(RefinedStorageItems.QUARTZ_ENRICHED_IRON); registerItem(RefinedStorageItems.STORAGE_DISK); @@ -348,6 +350,18 @@ public class CommonProxy { 'I', new ItemStack(RefinedStorageItems.PROCESSOR, 1, ItemProcessor.TYPE_IMPROVED) ); + // Fluid Destructor + GameRegistry.addShapedRecipe(new ItemStack(RefinedStorageBlocks.DESTRUCTOR), + "EDE", + "RMR", + "EIE", + 'E', new ItemStack(RefinedStorageItems.QUARTZ_ENRICHED_IRON), + 'D', new ItemStack(RefinedStorageItems.CORE, 1, ItemCore.TYPE_DESTRUCTION), + 'R', new ItemStack(Items.BUCKET), + 'M', new ItemStack(RefinedStorageBlocks.CABLE), + 'I', new ItemStack(RefinedStorageItems.PROCESSOR, 1, ItemProcessor.TYPE_IMPROVED) + ); + // Constructor GameRegistry.addShapedRecipe(new ItemStack(RefinedStorageBlocks.CONSTRUCTOR), "ECE", diff --git a/src/main/java/refinedstorage/tile/TileFluidDestructor.java b/src/main/java/refinedstorage/tile/TileFluidDestructor.java new file mode 100755 index 000000000..e39fb7547 --- /dev/null +++ b/src/main/java/refinedstorage/tile/TileFluidDestructor.java @@ -0,0 +1,162 @@ +package refinedstorage.tile; + +import mcmultipart.microblock.IMicroblock; +import net.minecraft.block.Block; +import net.minecraft.block.BlockLiquid; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.math.BlockPos; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.IFluidBlock; +import net.minecraftforge.fluids.capability.IFluidHandler; +import net.minecraftforge.fluids.capability.wrappers.BlockLiquidWrapper; +import net.minecraftforge.fluids.capability.wrappers.FluidBlockWrapper; +import net.minecraftforge.items.CapabilityItemHandler; +import net.minecraftforge.items.IItemHandler; +import refinedstorage.RefinedStorage; +import refinedstorage.inventory.ItemHandlerFluid; +import refinedstorage.inventory.ItemHandlerUpgrade; +import refinedstorage.item.ItemUpgrade; +import refinedstorage.tile.config.IComparable; +import refinedstorage.tile.config.IFilterable; +import refinedstorage.tile.data.TileDataParameter; + +public class TileFluidDestructor extends TileMultipartNode implements IComparable, IFilterable { + public static final TileDataParameter COMPARE = IComparable.createParameter(); + public static final TileDataParameter MODE = IFilterable.createParameter(); + + private static final String NBT_COMPARE = "Compare"; + private static final String NBT_MODE = "Mode"; + + private static final int BASE_SPEED = 20; + + private ItemHandlerFluid filters = new ItemHandlerFluid(9, this); + private ItemHandlerUpgrade upgrades = new ItemHandlerUpgrade(4, this, ItemUpgrade.TYPE_SPEED); + + private int compare = 0; + private int mode = IFilterable.WHITELIST; + + public TileFluidDestructor() { + dataManager.addWatchedParameter(COMPARE); + dataManager.addWatchedParameter(MODE); + } + + @Override + public boolean canAddMicroblock(IMicroblock microblock) { + return !isBlockingMicroblock(microblock, getDirection()); + } + + @Override + public int getEnergyUsage() { + return RefinedStorage.INSTANCE.fluidDestructorUsage + upgrades.getEnergyUsage(); + } + + @Override + public void updateNode() { + if (ticks % upgrades.getSpeed(BASE_SPEED, 4) == 0) { + BlockPos front = pos.offset(getDirection()); + + Block frontBlock = worldObj.getBlockState(front).getBlock(); + + IFluidHandler handler = null; + + if (frontBlock instanceof BlockLiquid) { + handler = new BlockLiquidWrapper((BlockLiquid) frontBlock, worldObj, front); + } else if (frontBlock instanceof IFluidBlock) { + handler = new FluidBlockWrapper((IFluidBlock) frontBlock, worldObj, front); + } + + if (handler != null) { + FluidStack stack = handler.drain(Fluid.BUCKET_VOLUME, false); + + if (IFilterable.canTakeFluids(filters, mode, compare, stack) && network.insertFluid(stack, stack.amount, true) == null) { + FluidStack drained = handler.drain(Fluid.BUCKET_VOLUME, true); + + network.insertFluid(drained, drained.amount, false); + } + } + } + } + + @Override + public int getCompare() { + return compare; + } + + @Override + public void setCompare(int compare) { + this.compare = compare; + + markDirty(); + } + + @Override + public int getMode() { + return mode; + } + + @Override + public void setMode(int mode) { + this.mode = mode; + + markDirty(); + } + + @Override + public void read(NBTTagCompound tag) { + super.read(tag); + + if (tag.hasKey(NBT_COMPARE)) { + compare = tag.getInteger(NBT_COMPARE); + } + + if (tag.hasKey(NBT_MODE)) { + mode = tag.getInteger(NBT_MODE); + } + + readItems(filters, 0, tag); + readItems(upgrades, 1, tag); + } + + @Override + public NBTTagCompound write(NBTTagCompound tag) { + super.write(tag); + + tag.setInteger(NBT_COMPARE, compare); + tag.setInteger(NBT_MODE, mode); + + writeItems(filters, 0, tag); + writeItems(upgrades, 1, tag); + + return tag; + } + + public IItemHandler getUpgrades() { + return upgrades; + } + + public IItemHandler getInventory() { + return filters; + } + + @Override + public IItemHandler getDrops() { + return upgrades; + } + + @Override + public T getCapability(Capability capability, EnumFacing facing) { + if (capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) { + return (T) upgrades; + } + + return super.getCapability(capability, facing); + } + + @Override + public boolean hasCapability(Capability capability, EnumFacing facing) { + return capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY || super.hasCapability(capability, facing); + } +} diff --git a/src/main/resources/assets/refinedstorage/blockstates/fluid_destructor.json b/src/main/resources/assets/refinedstorage/blockstates/fluid_destructor.json new file mode 100755 index 000000000..77d6c66b5 --- /dev/null +++ b/src/main/resources/assets/refinedstorage/blockstates/fluid_destructor.json @@ -0,0 +1,83 @@ +{ + "forge_marker": 1, + "defaults": { + "textures": { + "all": "refinedstorage:blocks/cable", + "particle": "refinedstorage:blocks/cable", + "front": "refinedstorage:blocks/fluid_destructor", + "line": "refinedstorage:blocks/cable_part" + }, + "model": "refinedstorage:cable_core", + "uvlock": true + }, + "variants": { + "inventory": [ + { + "model": "refinedstorage:constructor_destructor", + "transform": "forge:default-block" + } + ], + "direction": { + "north": { + "submodel": "refinedstorage:constructor_destructor_north" + }, + "east": { + "submodel": "refinedstorage:constructor_destructor_east" + }, + "south": { + "submodel": "refinedstorage:constructor_destructor_south" + }, + "west": { + "submodel": "refinedstorage:constructor_destructor_west" + }, + "up": { + "submodel": "refinedstorage:constructor_destructor_up" + }, + "down": { + "submodel": "refinedstorage:constructor_destructor_down" + } + }, + "north": { + "true": { + "submodel": "refinedstorage:cable_north" + }, + "false": { + } + }, + "east": { + "true": { + "submodel": "refinedstorage:cable_east" + }, + "false": { + } + }, + "south": { + "true": { + "submodel": "refinedstorage:cable_south" + }, + "false": { + } + }, + "west": { + "true": { + "submodel": "refinedstorage:cable_west" + }, + "false": { + } + }, + "up": { + "true": { + "submodel": "refinedstorage:cable_up" + }, + "false": { + } + }, + "down": { + "true": { + "submodel": "refinedstorage:cable_down" + }, + "false": { + } + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/refinedstorage/lang/en_US.lang b/src/main/resources/assets/refinedstorage/lang/en_US.lang index f60cf3519..0f4806dcd 100755 --- a/src/main/resources/assets/refinedstorage/lang/en_US.lang +++ b/src/main/resources/assets/refinedstorage/lang/en_US.lang @@ -41,6 +41,7 @@ gui.refinedstorage:network_transmitter.missing_card=Missing Network Card gui.refinedstorage:network_transmitter.missing_upgrade=Insert upgrade gui.refinedstorage:fluid_disk_drive=Fluid Disk Drive gui.refinedstorage:fluid_constructor=Fluid Constructor +gui.refinedstorage:fluid_destructor=Fluid Destructor misc.refinedstorage:energy_stored=%d / %d RS misc.refinedstorage:energy_usage=Usage: %d RS/t @@ -130,6 +131,7 @@ block.refinedstorage:network_receiver.name=Network Receiver block.refinedstorage:network_transmitter.name=Network Transmitter block.refinedstorage:fluid_disk_drive.name=Fluid Disk Drive block.refinedstorage:fluid_constructor.name=Fluid Constructor +block.refinedstorage:fluid_destructor.name=Fluid Destructor item.refinedstorage:storage_disk.0.name=1k Storage Disk item.refinedstorage:storage_disk.1.name=4k Storage Disk diff --git a/src/main/resources/assets/refinedstorage/textures/blocks/controller_7.png b/src/main/resources/assets/refinedstorage/textures/blocks/controller_7.png index 203a34401fdcbaa7de1c4a5bdc193114cef155dc..e4b82d6e0e276c0ac2cb2b5a4bda7f7015f6e5d7 100755 GIT binary patch delta 35 rcmbQoHlJ;R4c`F<2EGG~S=Tx_85kHOCwfV<85*qR;ySP~YYP(qwXq6K delta 34 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 Date: Sat, 13 Aug 2016 20:59:44 +0200 Subject: [PATCH 179/214] Fluid Destructor --- .../assets/refinedstorage/textures/icons.png | Bin 3729 -> 2972 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/main/resources/assets/refinedstorage/textures/icons.png b/src/main/resources/assets/refinedstorage/textures/icons.png index 993d2949ab6cbde285b39efc91f2a88a46783773..87821afebcf8c32b63580d8ccc614e6982256216 100755 GIT binary patch literal 2972 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 Date: Sat, 13 Aug 2016 22:33:11 +0200 Subject: [PATCH 180/214] Fluid Importer --- .../java/refinedstorage/RefinedStorage.java | 2 + .../refinedstorage/RefinedStorageBlocks.java | 1 + .../refinedstorage/RefinedStorageGui.java | 1 + .../block/BlockFluidImporter.java | 37 +++++ .../refinedstorage/block/BlockImporter.java | 6 +- .../container/ContainerFluidImporter.java | 51 +++++++ .../refinedstorage/gui/GuiFluidImporter.java | 40 +++++ .../java/refinedstorage/gui/GuiHandler.java | 4 + .../refinedstorage/proxy/ClientProxy.java | 1 + .../refinedstorage/proxy/CommonProxy.java | 10 ++ .../java/refinedstorage/tile/TileBase.java | 19 +++ .../tile/TileFluidDestructor.java | 2 +- .../tile/TileFluidImporter.java | 142 ++++++++++++++++++ .../blockstates/fluid_importer.json | 82 ++++++++++ .../assets/refinedstorage/lang/en_US.lang | 2 + 15 files changed, 398 insertions(+), 2 deletions(-) create mode 100755 src/main/java/refinedstorage/block/BlockFluidImporter.java create mode 100755 src/main/java/refinedstorage/container/ContainerFluidImporter.java create mode 100755 src/main/java/refinedstorage/gui/GuiFluidImporter.java create mode 100755 src/main/java/refinedstorage/tile/TileFluidImporter.java create mode 100755 src/main/resources/assets/refinedstorage/blockstates/fluid_importer.json diff --git a/src/main/java/refinedstorage/RefinedStorage.java b/src/main/java/refinedstorage/RefinedStorage.java index 105a4a828..b3d749c36 100755 --- a/src/main/java/refinedstorage/RefinedStorage.java +++ b/src/main/java/refinedstorage/RefinedStorage.java @@ -59,6 +59,7 @@ public final class RefinedStorage { public int externalStoragePerStorageUsage; public int exporterUsage; public int importerUsage; + public int fluidImporterUsage; public int interfaceUsage; public int relayUsage; public int soldererUsage; @@ -108,6 +109,7 @@ public final class RefinedStorage { externalStoragePerStorageUsage = config.getInt("externalStoragePerStorage", "energy", 1, 0, Integer.MAX_VALUE, "The additional energy used per connected storage to an External Storage"); exporterUsage = config.getInt("exporter", "energy", 1, 0, Integer.MAX_VALUE, "The energy used by Exporters"); importerUsage = config.getInt("importer", "energy", 1, 0, Integer.MAX_VALUE, "The energy used by Importers"); + fluidImporterUsage = config.getInt("fluidImporter", "energy", 1, 0, Integer.MAX_VALUE, "The energy used by Fluid Importers"); interfaceUsage = config.getInt("interface", "energy", 3, 0, Integer.MAX_VALUE, "The energy used by Interfaces"); relayUsage = config.getInt("relay", "energy", 1, 0, Integer.MAX_VALUE, "The energy used by Relays"); soldererUsage = config.getInt("solderer", "energy", 3, 0, Integer.MAX_VALUE, "The energy used by Solderers"); diff --git a/src/main/java/refinedstorage/RefinedStorageBlocks.java b/src/main/java/refinedstorage/RefinedStorageBlocks.java index 0abad81c3..422e2df0d 100755 --- a/src/main/java/refinedstorage/RefinedStorageBlocks.java +++ b/src/main/java/refinedstorage/RefinedStorageBlocks.java @@ -27,4 +27,5 @@ public final class RefinedStorageBlocks { public static final BlockFluidDiskDrive FLUID_DISK_DRIVE = new BlockFluidDiskDrive(); public static final BlockFluidConstructor FLUID_CONSTRUCTOR = new BlockFluidConstructor(); public static final BlockFluidDestructor FLUID_DESTRUCTOR = new BlockFluidDestructor(); + public static final BlockFluidImporter FLUID_IMPORTER = new BlockFluidImporter(); } \ No newline at end of file diff --git a/src/main/java/refinedstorage/RefinedStorageGui.java b/src/main/java/refinedstorage/RefinedStorageGui.java index 697d347b0..900d19510 100755 --- a/src/main/java/refinedstorage/RefinedStorageGui.java +++ b/src/main/java/refinedstorage/RefinedStorageGui.java @@ -23,4 +23,5 @@ public final class RefinedStorageGui { public static final int FLUID_DISK_DRIVE = 19; public static final int FLUID_CONSTRUCTOR = 20; public static final int FLUID_DESTRUCTOR = 21; + public static final int FLUID_IMPORTER = 22; } diff --git a/src/main/java/refinedstorage/block/BlockFluidImporter.java b/src/main/java/refinedstorage/block/BlockFluidImporter.java new file mode 100755 index 000000000..b9857e581 --- /dev/null +++ b/src/main/java/refinedstorage/block/BlockFluidImporter.java @@ -0,0 +1,37 @@ +package refinedstorage.block; + +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import refinedstorage.RefinedStorage; +import refinedstorage.RefinedStorageGui; +import refinedstorage.tile.TileFluidImporter; + +public class BlockFluidImporter extends BlockImporter { + public BlockFluidImporter() { + super("fluid_importer"); + } + + @Override + public TileEntity createTileEntity(World world, IBlockState state) { + return new TileFluidImporter(); + } + + @Override + public boolean onBlockActivatedDefault(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) { + if (hitCablePart(state, world, pos, hitX, hitY, hitZ)) { + return false; + } + + if (!world.isRemote) { + player.openGui(RefinedStorage.INSTANCE, RefinedStorageGui.FLUID_IMPORTER, world, pos.getX(), pos.getY(), pos.getZ()); + } + + return true; + } +} diff --git a/src/main/java/refinedstorage/block/BlockImporter.java b/src/main/java/refinedstorage/block/BlockImporter.java index 0db3bd463..1e574576e 100755 --- a/src/main/java/refinedstorage/block/BlockImporter.java +++ b/src/main/java/refinedstorage/block/BlockImporter.java @@ -36,8 +36,12 @@ public class BlockImporter extends BlockCable { public static final AxisAlignedBB LINE_DOWN_2_AABB = createAABB(5, 2, 5, 11, 4, 11); public static final AxisAlignedBB LINE_DOWN_3_AABB = createAABB(3, 0, 3, 13, 2, 13); + public BlockImporter(String name) { + super(name); + } + public BlockImporter() { - super("importer"); + this("importer"); } @Override diff --git a/src/main/java/refinedstorage/container/ContainerFluidImporter.java b/src/main/java/refinedstorage/container/ContainerFluidImporter.java new file mode 100755 index 000000000..b3d04d2c4 --- /dev/null +++ b/src/main/java/refinedstorage/container/ContainerFluidImporter.java @@ -0,0 +1,51 @@ +package refinedstorage.container; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; +import net.minecraftforge.items.SlotItemHandler; +import refinedstorage.container.slot.SlotSpecimenFluid; +import refinedstorage.tile.TileFluidImporter; + +public class ContainerFluidImporter extends ContainerBase { + public ContainerFluidImporter(TileFluidImporter fluidImporter, EntityPlayer player) { + super(fluidImporter, player); + + for (int i = 0; i < 4; ++i) { + addSlotToContainer(new SlotItemHandler(fluidImporter.getUpgrades(), i, 187, 6 + (i * 18))); + } + + for (int i = 0; i < 9; ++i) { + addSlotToContainer(new SlotSpecimenFluid(!fluidImporter.getWorld().isRemote, fluidImporter.getFilters(), i, 8 + (18 * i), 20)); + } + + addPlayerInventory(8, 55); + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer player, int index) { + ItemStack stack = null; + + Slot slot = getSlot(index); + + if (slot != null && slot.getHasStack()) { + stack = slot.getStack(); + + if (index < 4) { + if (!mergeItemStack(stack, 4 + 9, inventorySlots.size(), false)) { + return null; + } + } else if (!mergeItemStack(stack, 0, 4, false)) { + return mergeItemStackToSpecimen(stack, 4, 4 + 9); + } + + if (stack.stackSize == 0) { + slot.putStack(null); + } else { + slot.onSlotChanged(); + } + } + + return stack; + } +} diff --git a/src/main/java/refinedstorage/gui/GuiFluidImporter.java b/src/main/java/refinedstorage/gui/GuiFluidImporter.java new file mode 100755 index 000000000..1eb2859da --- /dev/null +++ b/src/main/java/refinedstorage/gui/GuiFluidImporter.java @@ -0,0 +1,40 @@ +package refinedstorage.gui; + +import refinedstorage.api.storage.CompareUtils; +import refinedstorage.container.ContainerFluidImporter; +import refinedstorage.gui.sidebutton.SideButtonCompare; +import refinedstorage.gui.sidebutton.SideButtonMode; +import refinedstorage.gui.sidebutton.SideButtonRedstoneMode; +import refinedstorage.tile.TileFluidImporter; + +public class GuiFluidImporter extends GuiBase { + public GuiFluidImporter(ContainerFluidImporter container) { + super(container, 211, 137); + } + + @Override + public void init(int x, int y) { + addSideButton(new SideButtonRedstoneMode(TileFluidImporter.REDSTONE_MODE)); + + addSideButton(new SideButtonMode(TileFluidImporter.MODE)); + + addSideButton(new SideButtonCompare(TileFluidImporter.COMPARE, CompareUtils.COMPARE_NBT)); + } + + @Override + public void update(int x, int y) { + } + + @Override + public void drawBackground(int x, int y, int mouseX, int mouseY) { + bindTexture("gui/importer.png"); + + drawTexture(x, y, 0, 0, width, height); + } + + @Override + public void drawForeground(int mouseX, int mouseY) { + drawString(7, 7, t("gui.refinedstorage:fluid_importer")); + 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 a2f5c02e5..6a62e62ca 100755 --- a/src/main/java/refinedstorage/gui/GuiHandler.java +++ b/src/main/java/refinedstorage/gui/GuiHandler.java @@ -57,6 +57,8 @@ public class GuiHandler implements IGuiHandler { return new ContainerFluidConstructor((TileFluidConstructor) tile, player); case RefinedStorageGui.FLUID_DESTRUCTOR: return new ContainerFluidDestructor((TileFluidDestructor) tile, player); + case RefinedStorageGui.FLUID_IMPORTER: + return new ContainerFluidImporter((TileFluidImporter) tile, player); default: return null; } @@ -134,6 +136,8 @@ public class GuiHandler implements IGuiHandler { return new GuiFluidConstructor((ContainerFluidConstructor) getContainer(ID, player, tile)); case RefinedStorageGui.FLUID_DESTRUCTOR: return new GuiFluidDestructor((ContainerFluidDestructor) getContainer(ID, player, tile)); + case RefinedStorageGui.FLUID_IMPORTER: + return new GuiFluidImporter((ContainerFluidImporter) getContainer(ID, player, tile)); default: return null; } diff --git a/src/main/java/refinedstorage/proxy/ClientProxy.java b/src/main/java/refinedstorage/proxy/ClientProxy.java index 73c4f6a07..061248e64 100755 --- a/src/main/java/refinedstorage/proxy/ClientProxy.java +++ b/src/main/java/refinedstorage/proxy/ClientProxy.java @@ -260,5 +260,6 @@ public class ClientProxy extends CommonProxy { ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.FLUID_DISK_DRIVE), 0, new ModelResourceLocation("refinedstorage:disk_drive", "inventory")); ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.FLUID_CONSTRUCTOR), 0, new ModelResourceLocation("refinedstorage:fluid_constructor", "inventory")); ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.FLUID_DESTRUCTOR), 0, new ModelResourceLocation("refinedstorage:fluid_destructor", "inventory")); + ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.FLUID_IMPORTER), 0, new ModelResourceLocation("refinedstorage:fluid_importer", "inventory")); } } diff --git a/src/main/java/refinedstorage/proxy/CommonProxy.java b/src/main/java/refinedstorage/proxy/CommonProxy.java index c8da6af95..f849504dd 100755 --- a/src/main/java/refinedstorage/proxy/CommonProxy.java +++ b/src/main/java/refinedstorage/proxy/CommonProxy.java @@ -88,6 +88,7 @@ public class CommonProxy { registerTile(TileFluidDiskDrive.class, "fluid_disk_drive"); registerTile(TileFluidConstructor.class, "fluid_constructor"); registerTile(TileFluidDestructor.class, "fluid_destructor"); + registerTile(TileFluidImporter.class, "fluid_importer"); registerBlock(RefinedStorageBlocks.CONTROLLER); registerBlock(RefinedStorageBlocks.GRID); @@ -113,6 +114,7 @@ public class CommonProxy { registerBlock(RefinedStorageBlocks.FLUID_DISK_DRIVE); registerBlock(RefinedStorageBlocks.FLUID_CONSTRUCTOR); registerBlock(RefinedStorageBlocks.FLUID_DESTRUCTOR); + registerBlock(RefinedStorageBlocks.FLUID_IMPORTER); registerItem(RefinedStorageItems.QUARTZ_ENRICHED_IRON); registerItem(RefinedStorageItems.STORAGE_DISK); @@ -331,6 +333,14 @@ public class CommonProxy { new ItemStack(RefinedStorageItems.PROCESSOR, 1, ItemProcessor.TYPE_IMPROVED) ); + // Fluid Importer + GameRegistry.addShapelessRecipe(new ItemStack(RefinedStorageBlocks.FLUID_IMPORTER), + new ItemStack(RefinedStorageBlocks.CABLE), + new ItemStack(RefinedStorageItems.CORE, 1, ItemCore.TYPE_CONSTRUCTION), + new ItemStack(RefinedStorageItems.PROCESSOR, 1, ItemProcessor.TYPE_IMPROVED), + new ItemStack(Items.BUCKET) + ); + // Exporter GameRegistry.addShapelessRecipe(new ItemStack(RefinedStorageBlocks.EXPORTER), new ItemStack(RefinedStorageBlocks.CABLE), diff --git a/src/main/java/refinedstorage/tile/TileBase.java b/src/main/java/refinedstorage/tile/TileBase.java index 9cac1603a..dce0d386b 100755 --- a/src/main/java/refinedstorage/tile/TileBase.java +++ b/src/main/java/refinedstorage/tile/TileBase.java @@ -14,6 +14,9 @@ import net.minecraft.util.ITickable; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.minecraftforge.common.util.Constants; +import net.minecraftforge.fluids.capability.CapabilityFluidHandler; +import net.minecraftforge.fluids.capability.IFluidHandler; +import net.minecraftforge.fluids.capability.wrappers.FluidHandlerWrapper; import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.wrapper.InvWrapper; @@ -217,4 +220,20 @@ public abstract class TileBase extends TileEntity implements ITickable { return handler; } + + protected IFluidHandler getFluidHandler(TileEntity tile, EnumFacing side) { + if (tile == null) { + return null; + } + + IFluidHandler handler = null; + + if (tile.hasCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, side)) { + handler = tile.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, side); + } else if (tile instanceof net.minecraftforge.fluids.IFluidHandler) { + handler = new FluidHandlerWrapper((net.minecraftforge.fluids.IFluidHandler) tile, side); + } + + return handler; + } } diff --git a/src/main/java/refinedstorage/tile/TileFluidDestructor.java b/src/main/java/refinedstorage/tile/TileFluidDestructor.java index e39fb7547..521f41d65 100755 --- a/src/main/java/refinedstorage/tile/TileFluidDestructor.java +++ b/src/main/java/refinedstorage/tile/TileFluidDestructor.java @@ -71,7 +71,7 @@ public class TileFluidDestructor extends TileMultipartNode implements IComparabl if (handler != null) { FluidStack stack = handler.drain(Fluid.BUCKET_VOLUME, false); - if (IFilterable.canTakeFluids(filters, mode, compare, stack) && network.insertFluid(stack, stack.amount, true) == null) { + if (stack != null && IFilterable.canTakeFluids(filters, mode, compare, stack) && network.insertFluid(stack, stack.amount, true) == null) { FluidStack drained = handler.drain(Fluid.BUCKET_VOLUME, true); network.insertFluid(drained, drained.amount, false); diff --git a/src/main/java/refinedstorage/tile/TileFluidImporter.java b/src/main/java/refinedstorage/tile/TileFluidImporter.java new file mode 100755 index 000000000..f737beb31 --- /dev/null +++ b/src/main/java/refinedstorage/tile/TileFluidImporter.java @@ -0,0 +1,142 @@ +package refinedstorage.tile; + +import mcmultipart.microblock.IMicroblock; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.capability.IFluidHandler; +import net.minecraftforge.items.CapabilityItemHandler; +import net.minecraftforge.items.IItemHandler; +import refinedstorage.RefinedStorage; +import refinedstorage.inventory.ItemHandlerFluid; +import refinedstorage.inventory.ItemHandlerUpgrade; +import refinedstorage.item.ItemUpgrade; +import refinedstorage.tile.config.IComparable; +import refinedstorage.tile.config.IFilterable; +import refinedstorage.tile.data.TileDataParameter; + +public class TileFluidImporter extends TileMultipartNode implements IComparable, IFilterable { + public static final TileDataParameter COMPARE = IComparable.createParameter(); + public static final TileDataParameter MODE = IFilterable.createParameter(); + + private static final String NBT_COMPARE = "Compare"; + private static final String NBT_MODE = "Mode"; + + private ItemHandlerFluid filters = new ItemHandlerFluid(9, this); + private ItemHandlerUpgrade upgrades = new ItemHandlerUpgrade(4, this, ItemUpgrade.TYPE_SPEED); + + private int compare = 0; + private int mode = IFilterable.WHITELIST; + + public TileFluidImporter() { + dataManager.addWatchedParameter(COMPARE); + dataManager.addWatchedParameter(MODE); + } + + @Override + public boolean canAddMicroblock(IMicroblock microblock) { + return !isBlockingMicroblock(microblock, getDirection()); + } + + @Override + public int getEnergyUsage() { + return RefinedStorage.INSTANCE.fluidImporterUsage + upgrades.getEnergyUsage(); + } + + @Override + public void updateNode() { + IFluidHandler handler = getFluidHandler(getFacingTile(), getDirection().getOpposite()); + + if (handler != null) { + FluidStack stack = handler.drain(Fluid.BUCKET_VOLUME, false); + + if (stack != null && IFilterable.canTakeFluids(filters, mode, compare, stack) && network.insertFluid(stack, stack.amount, true) == null) { + FluidStack drain = handler.drain(Fluid.BUCKET_VOLUME, true); + + network.insertFluid(drain, drain.amount, false); + } + } + } + + @Override + public int getCompare() { + return compare; + } + + @Override + public void setCompare(int compare) { + this.compare = compare; + + markDirty(); + } + + @Override + public int getMode() { + return mode; + } + + @Override + public void setMode(int mode) { + this.mode = mode; + + markDirty(); + } + + @Override + public void read(NBTTagCompound tag) { + super.read(tag); + + if (tag.hasKey(NBT_COMPARE)) { + compare = tag.getInteger(NBT_COMPARE); + } + + if (tag.hasKey(NBT_MODE)) { + mode = tag.getInteger(NBT_MODE); + } + + readItems(filters, 0, tag); + readItems(upgrades, 1, tag); + } + + @Override + public NBTTagCompound write(NBTTagCompound tag) { + super.write(tag); + + tag.setInteger(NBT_COMPARE, compare); + tag.setInteger(NBT_MODE, mode); + + writeItems(filters, 0, tag); + writeItems(upgrades, 1, tag); + + return tag; + } + + public IItemHandler getUpgrades() { + return upgrades; + } + + public IItemHandler getFilters() { + return filters; + } + + @Override + public IItemHandler getDrops() { + return upgrades; + } + + @Override + public T getCapability(Capability capability, EnumFacing facing) { + if (capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) { + return (T) upgrades; + } + + return super.getCapability(capability, facing); + } + + @Override + public boolean hasCapability(Capability capability, EnumFacing facing) { + return capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY || super.hasCapability(capability, facing); + } +} diff --git a/src/main/resources/assets/refinedstorage/blockstates/fluid_importer.json b/src/main/resources/assets/refinedstorage/blockstates/fluid_importer.json new file mode 100755 index 000000000..ccbadf616 --- /dev/null +++ b/src/main/resources/assets/refinedstorage/blockstates/fluid_importer.json @@ -0,0 +1,82 @@ +{ + "forge_marker": 1, + "defaults": { + "textures": { + "all": "refinedstorage:blocks/cable", + "particle": "refinedstorage:blocks/cable", + "line": "refinedstorage:blocks/cable_part" + }, + "model": "refinedstorage:cable_core", + "uvlock": true + }, + "variants": { + "inventory": [ + { + "model": "refinedstorage:importer", + "transform": "forge:default-block" + } + ], + "direction": { + "north": { + "submodel": "refinedstorage:importer_north" + }, + "east": { + "submodel": "refinedstorage:importer_east" + }, + "south": { + "submodel": "refinedstorage:importer_south" + }, + "west": { + "submodel": "refinedstorage:importer_west" + }, + "up": { + "submodel": "refinedstorage:importer_up" + }, + "down": { + "submodel": "refinedstorage:importer_down" + } + }, + "north": { + "true": { + "submodel": "refinedstorage:cable_north" + }, + "false": { + } + }, + "east": { + "true": { + "submodel": "refinedstorage:cable_east" + }, + "false": { + } + }, + "south": { + "true": { + "submodel": "refinedstorage:cable_south" + }, + "false": { + } + }, + "west": { + "true": { + "submodel": "refinedstorage:cable_west" + }, + "false": { + } + }, + "up": { + "true": { + "submodel": "refinedstorage:cable_up" + }, + "false": { + } + }, + "down": { + "true": { + "submodel": "refinedstorage:cable_down" + }, + "false": { + } + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/refinedstorage/lang/en_US.lang b/src/main/resources/assets/refinedstorage/lang/en_US.lang index 0f4806dcd..fdc440480 100755 --- a/src/main/resources/assets/refinedstorage/lang/en_US.lang +++ b/src/main/resources/assets/refinedstorage/lang/en_US.lang @@ -42,6 +42,7 @@ gui.refinedstorage:network_transmitter.missing_upgrade=Insert upgrade gui.refinedstorage:fluid_disk_drive=Fluid Disk Drive gui.refinedstorage:fluid_constructor=Fluid Constructor gui.refinedstorage:fluid_destructor=Fluid Destructor +gui.refinedstorage:fluid_importer=Fluid Importer misc.refinedstorage:energy_stored=%d / %d RS misc.refinedstorage:energy_usage=Usage: %d RS/t @@ -132,6 +133,7 @@ block.refinedstorage:network_transmitter.name=Network Transmitter block.refinedstorage:fluid_disk_drive.name=Fluid Disk Drive block.refinedstorage:fluid_constructor.name=Fluid Constructor block.refinedstorage:fluid_destructor.name=Fluid Destructor +block.refinedstorage:fluid_importer.name=Fluid Importer item.refinedstorage:storage_disk.0.name=1k Storage Disk item.refinedstorage:storage_disk.1.name=4k Storage Disk From 184c588a7ab864f9d4ff824bf477f205a0237da5 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sun, 14 Aug 2016 00:58:05 +0200 Subject: [PATCH 181/214] Remove all specialized fluid tiles to the "real" tile with a toggle for fluids/items --- .../java/refinedstorage/RefinedStorage.java | 6 - .../refinedstorage/RefinedStorageBlocks.java | 3 - .../refinedstorage/RefinedStorageGui.java | 3 - .../block/BlockFluidConstructor.java | 37 ---- .../block/BlockFluidDestructor.java | 37 ---- .../block/BlockFluidImporter.java | 37 ---- .../container/ContainerBase.java | 2 +- .../container/ContainerConstructor.java | 3 +- .../container/ContainerDestructor.java | 3 +- .../container/ContainerFluidConstructor.java | 49 ------ .../container/ContainerFluidDestructor.java | 51 ------ .../container/ContainerFluidImporter.java | 51 ------ .../container/ContainerImporter.java | 4 +- .../container/slot/SlotSpecimenFluid.java | 23 +-- .../container/slot/SlotSpecimenType.java | 40 +++++ .../refinedstorage/gui/GuiConstructor.java | 3 + .../refinedstorage/gui/GuiDestructor.java | 3 + .../gui/GuiFluidConstructor.java | 37 ---- .../gui/GuiFluidDestructor.java | 40 ----- .../refinedstorage/gui/GuiFluidImporter.java | 40 ----- .../java/refinedstorage/gui/GuiHandler.java | 12 -- .../java/refinedstorage/gui/GuiImporter.java | 3 + .../gui/sidebutton/SideButtonType.java | 29 ++++ .../refinedstorage/proxy/ClientProxy.java | 3 - .../refinedstorage/proxy/CommonProxy.java | 38 ---- .../refinedstorage/tile/TileConstructor.java | 97 ++++++++--- .../refinedstorage/tile/TileDestructor.java | 107 +++++++++--- .../tile/TileFluidConstructor.java | 132 -------------- .../tile/TileFluidDestructor.java | 162 ------------------ .../tile/TileFluidImporter.java | 142 --------------- .../refinedstorage/tile/TileImporter.java | 103 +++++++---- .../refinedstorage/tile/config/IType.java | 40 +++++ .../blockstates/fluid_constructor.json | 83 --------- .../blockstates/fluid_destructor.json | 83 --------- .../blockstates/fluid_importer.json | 82 --------- .../assets/refinedstorage/lang/en_US.lang | 10 +- .../textures/blocks/fluid_constructor.png | Bin 711 -> 0 bytes .../textures/blocks/fluid_destructor.png | Bin 638 -> 0 bytes 38 files changed, 372 insertions(+), 1226 deletions(-) delete mode 100755 src/main/java/refinedstorage/block/BlockFluidConstructor.java delete mode 100755 src/main/java/refinedstorage/block/BlockFluidDestructor.java delete mode 100755 src/main/java/refinedstorage/block/BlockFluidImporter.java delete mode 100755 src/main/java/refinedstorage/container/ContainerFluidConstructor.java delete mode 100755 src/main/java/refinedstorage/container/ContainerFluidDestructor.java delete mode 100755 src/main/java/refinedstorage/container/ContainerFluidImporter.java create mode 100755 src/main/java/refinedstorage/container/slot/SlotSpecimenType.java delete mode 100755 src/main/java/refinedstorage/gui/GuiFluidConstructor.java delete mode 100755 src/main/java/refinedstorage/gui/GuiFluidDestructor.java delete mode 100755 src/main/java/refinedstorage/gui/GuiFluidImporter.java create mode 100755 src/main/java/refinedstorage/gui/sidebutton/SideButtonType.java delete mode 100755 src/main/java/refinedstorage/tile/TileFluidConstructor.java delete mode 100755 src/main/java/refinedstorage/tile/TileFluidDestructor.java delete mode 100755 src/main/java/refinedstorage/tile/TileFluidImporter.java create mode 100755 src/main/java/refinedstorage/tile/config/IType.java delete mode 100755 src/main/resources/assets/refinedstorage/blockstates/fluid_constructor.json delete mode 100755 src/main/resources/assets/refinedstorage/blockstates/fluid_destructor.json delete mode 100755 src/main/resources/assets/refinedstorage/blockstates/fluid_importer.json delete mode 100755 src/main/resources/assets/refinedstorage/textures/blocks/fluid_constructor.png delete mode 100755 src/main/resources/assets/refinedstorage/textures/blocks/fluid_destructor.png diff --git a/src/main/java/refinedstorage/RefinedStorage.java b/src/main/java/refinedstorage/RefinedStorage.java index b3d749c36..34a5f9d5b 100755 --- a/src/main/java/refinedstorage/RefinedStorage.java +++ b/src/main/java/refinedstorage/RefinedStorage.java @@ -44,12 +44,10 @@ public final class RefinedStorage { public int controllerBaseUsage; public int cableUsage; public int constructorUsage; - public int fluidConstructorUsage; public int crafterUsage; public int crafterPerPatternUsage; public int craftingMonitorUsage; public int destructorUsage; - public int fluidDestructorUsage; public int detectorUsage; public int diskDriveUsage; public int diskDrivePerDiskUsage; @@ -59,7 +57,6 @@ public final class RefinedStorage { public int externalStoragePerStorageUsage; public int exporterUsage; public int importerUsage; - public int fluidImporterUsage; public int interfaceUsage; public int relayUsage; public int soldererUsage; @@ -94,12 +91,10 @@ public final class RefinedStorage { controllerBaseUsage = config.getInt("controllerBase", "energy", 0, 0, Integer.MAX_VALUE, "The base energy used by the Controller"); cableUsage = config.getInt("cable", "energy", 0, 0, Integer.MAX_VALUE, "The energy used by Cables"); constructorUsage = config.getInt("constructor", "energy", 1, 0, Integer.MAX_VALUE, "The energy used by Constructors"); - fluidConstructorUsage = config.getInt("fluidConstructor", "energy", 1, 0, Integer.MAX_VALUE, "The energy used by Fluid Constructors"); crafterUsage = config.getInt("crafter", "energy", 2, 0, Integer.MAX_VALUE, "The base energy used by Crafters"); crafterPerPatternUsage = config.getInt("crafterPerPattern", "energy", 1, 0, Integer.MAX_VALUE, "The additional energy used per Pattern in a Crafter"); craftingMonitorUsage = config.getInt("craftingMonitor", "energy", 2, 0, Integer.MAX_VALUE, "The energy used by Crafting Monitors"); destructorUsage = config.getInt("destructor", "energy", 1, 0, Integer.MAX_VALUE, "The energy used by Destructors"); - fluidDestructorUsage = config.getInt("fluidDestructor", "energy", 1, 0, Integer.MAX_VALUE, "The energy used by Fluid Destructors"); detectorUsage = config.getInt("detector", "energy", 2, 0, Integer.MAX_VALUE, "The energy used by Detectors"); diskDriveUsage = config.getInt("diskDrive", "energy", 0, 0, Integer.MAX_VALUE, "The base energy used by Disk Drives"); diskDrivePerDiskUsage = config.getInt("diskDrivePerDisk", "energy", 1, 0, Integer.MAX_VALUE, "The additional energy used by Storage Disks in Disk Drives"); @@ -109,7 +104,6 @@ public final class RefinedStorage { externalStoragePerStorageUsage = config.getInt("externalStoragePerStorage", "energy", 1, 0, Integer.MAX_VALUE, "The additional energy used per connected storage to an External Storage"); exporterUsage = config.getInt("exporter", "energy", 1, 0, Integer.MAX_VALUE, "The energy used by Exporters"); importerUsage = config.getInt("importer", "energy", 1, 0, Integer.MAX_VALUE, "The energy used by Importers"); - fluidImporterUsage = config.getInt("fluidImporter", "energy", 1, 0, Integer.MAX_VALUE, "The energy used by Fluid Importers"); interfaceUsage = config.getInt("interface", "energy", 3, 0, Integer.MAX_VALUE, "The energy used by Interfaces"); relayUsage = config.getInt("relay", "energy", 1, 0, Integer.MAX_VALUE, "The energy used by Relays"); soldererUsage = config.getInt("solderer", "energy", 3, 0, Integer.MAX_VALUE, "The energy used by Solderers"); diff --git a/src/main/java/refinedstorage/RefinedStorageBlocks.java b/src/main/java/refinedstorage/RefinedStorageBlocks.java index 422e2df0d..44bfb25e2 100755 --- a/src/main/java/refinedstorage/RefinedStorageBlocks.java +++ b/src/main/java/refinedstorage/RefinedStorageBlocks.java @@ -25,7 +25,4 @@ public final class RefinedStorageBlocks { public static final BlockNetworkTransmitter NETWORK_TRANSMITTER = new BlockNetworkTransmitter(); public static final BlockNetworkReceiver NETWORK_RECEIVER = new BlockNetworkReceiver(); public static final BlockFluidDiskDrive FLUID_DISK_DRIVE = new BlockFluidDiskDrive(); - public static final BlockFluidConstructor FLUID_CONSTRUCTOR = new BlockFluidConstructor(); - public static final BlockFluidDestructor FLUID_DESTRUCTOR = new BlockFluidDestructor(); - public static final BlockFluidImporter FLUID_IMPORTER = new BlockFluidImporter(); } \ No newline at end of file diff --git a/src/main/java/refinedstorage/RefinedStorageGui.java b/src/main/java/refinedstorage/RefinedStorageGui.java index 900d19510..4ff36a937 100755 --- a/src/main/java/refinedstorage/RefinedStorageGui.java +++ b/src/main/java/refinedstorage/RefinedStorageGui.java @@ -21,7 +21,4 @@ public final class RefinedStorageGui { public static final int GRID_FILTER = 17; public static final int NETWORK_TRANSMITTER = 18; public static final int FLUID_DISK_DRIVE = 19; - public static final int FLUID_CONSTRUCTOR = 20; - public static final int FLUID_DESTRUCTOR = 21; - public static final int FLUID_IMPORTER = 22; } diff --git a/src/main/java/refinedstorage/block/BlockFluidConstructor.java b/src/main/java/refinedstorage/block/BlockFluidConstructor.java deleted file mode 100755 index 40d6c39cf..000000000 --- a/src/main/java/refinedstorage/block/BlockFluidConstructor.java +++ /dev/null @@ -1,37 +0,0 @@ -package refinedstorage.block; - -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.EnumHand; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; -import refinedstorage.RefinedStorage; -import refinedstorage.RefinedStorageGui; -import refinedstorage.tile.TileFluidConstructor; - -public class BlockFluidConstructor extends BlockConstructor { - public BlockFluidConstructor() { - super("fluid_constructor"); - } - - @Override - public TileEntity createTileEntity(World world, IBlockState state) { - return new TileFluidConstructor(); - } - - @Override - public boolean onBlockActivatedDefault(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) { - if (hitCablePart(state, world, pos, hitX, hitY, hitZ)) { - return false; - } - - if (!world.isRemote) { - player.openGui(RefinedStorage.INSTANCE, RefinedStorageGui.FLUID_CONSTRUCTOR, world, pos.getX(), pos.getY(), pos.getZ()); - } - - return true; - } -} diff --git a/src/main/java/refinedstorage/block/BlockFluidDestructor.java b/src/main/java/refinedstorage/block/BlockFluidDestructor.java deleted file mode 100755 index 2a0c8999d..000000000 --- a/src/main/java/refinedstorage/block/BlockFluidDestructor.java +++ /dev/null @@ -1,37 +0,0 @@ -package refinedstorage.block; - -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.EnumHand; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; -import refinedstorage.RefinedStorage; -import refinedstorage.RefinedStorageGui; -import refinedstorage.tile.TileFluidDestructor; - -public class BlockFluidDestructor extends BlockDestructor { - public BlockFluidDestructor() { - super("fluid_destructor"); - } - - @Override - public TileEntity createTileEntity(World world, IBlockState state) { - return new TileFluidDestructor(); - } - - @Override - public boolean onBlockActivatedDefault(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) { - if (hitCablePart(state, world, pos, hitX, hitY, hitZ)) { - return false; - } - - if (!world.isRemote) { - player.openGui(RefinedStorage.INSTANCE, RefinedStorageGui.FLUID_DESTRUCTOR, world, pos.getX(), pos.getY(), pos.getZ()); - } - - return true; - } -} diff --git a/src/main/java/refinedstorage/block/BlockFluidImporter.java b/src/main/java/refinedstorage/block/BlockFluidImporter.java deleted file mode 100755 index b9857e581..000000000 --- a/src/main/java/refinedstorage/block/BlockFluidImporter.java +++ /dev/null @@ -1,37 +0,0 @@ -package refinedstorage.block; - -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.EnumHand; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.World; -import refinedstorage.RefinedStorage; -import refinedstorage.RefinedStorageGui; -import refinedstorage.tile.TileFluidImporter; - -public class BlockFluidImporter extends BlockImporter { - public BlockFluidImporter() { - super("fluid_importer"); - } - - @Override - public TileEntity createTileEntity(World world, IBlockState state) { - return new TileFluidImporter(); - } - - @Override - public boolean onBlockActivatedDefault(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) { - if (hitCablePart(state, world, pos, hitX, hitY, hitZ)) { - return false; - } - - if (!world.isRemote) { - player.openGui(RefinedStorage.INSTANCE, RefinedStorageGui.FLUID_IMPORTER, world, pos.getX(), pos.getY(), pos.getZ()); - } - - return true; - } -} diff --git a/src/main/java/refinedstorage/container/ContainerBase.java b/src/main/java/refinedstorage/container/ContainerBase.java index 896b211e5..3a9cf64ad 100755 --- a/src/main/java/refinedstorage/container/ContainerBase.java +++ b/src/main/java/refinedstorage/container/ContainerBase.java @@ -115,7 +115,7 @@ public abstract class ContainerBase extends Container { } for (int i = begin; i < end; ++i) { - if (!getSlot(i).getHasStack()) { + if (!getSlot(i).getHasStack() && getSlot(i).isItemValid(stack)) { getSlot(i).putStack(ItemHandlerHelper.copyStackWithSize(stack, 1)); getSlot(i).onSlotChanged(); diff --git a/src/main/java/refinedstorage/container/ContainerConstructor.java b/src/main/java/refinedstorage/container/ContainerConstructor.java index 562fa6c0b..de12f58ed 100755 --- a/src/main/java/refinedstorage/container/ContainerConstructor.java +++ b/src/main/java/refinedstorage/container/ContainerConstructor.java @@ -5,6 +5,7 @@ import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; import net.minecraftforge.items.SlotItemHandler; import refinedstorage.container.slot.SlotSpecimen; +import refinedstorage.container.slot.SlotSpecimenType; import refinedstorage.tile.TileConstructor; public class ContainerConstructor extends ContainerBase { @@ -15,7 +16,7 @@ public class ContainerConstructor extends ContainerBase { addSlotToContainer(new SlotItemHandler(constructor.getUpgrades(), i, 187, 6 + (i * 18))); } - addSlotToContainer(new SlotSpecimen(constructor.getFilter(), 0, 80, 20, SlotSpecimen.SPECIMEN_BLOCK)); + addSlotToContainer(new SlotSpecimenType(constructor, 0, 80, 20, SlotSpecimen.SPECIMEN_BLOCK)); addPlayerInventory(8, 55); } diff --git a/src/main/java/refinedstorage/container/ContainerDestructor.java b/src/main/java/refinedstorage/container/ContainerDestructor.java index 5fc656d9a..b56f1ff86 100755 --- a/src/main/java/refinedstorage/container/ContainerDestructor.java +++ b/src/main/java/refinedstorage/container/ContainerDestructor.java @@ -5,6 +5,7 @@ import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; import net.minecraftforge.items.SlotItemHandler; import refinedstorage.container.slot.SlotSpecimen; +import refinedstorage.container.slot.SlotSpecimenType; import refinedstorage.tile.TileDestructor; public class ContainerDestructor extends ContainerBase { @@ -16,7 +17,7 @@ public class ContainerDestructor extends ContainerBase { } for (int i = 0; i < 9; ++i) { - addSlotToContainer(new SlotSpecimen(destructor.getInventory(), i, 8 + (18 * i), 20, SlotSpecimen.SPECIMEN_BLOCK)); + addSlotToContainer(new SlotSpecimenType(destructor, i, 8 + (18 * i), 20, SlotSpecimen.SPECIMEN_BLOCK)); } addPlayerInventory(8, 55); diff --git a/src/main/java/refinedstorage/container/ContainerFluidConstructor.java b/src/main/java/refinedstorage/container/ContainerFluidConstructor.java deleted file mode 100755 index 8d1c1745c..000000000 --- a/src/main/java/refinedstorage/container/ContainerFluidConstructor.java +++ /dev/null @@ -1,49 +0,0 @@ -package refinedstorage.container; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.Slot; -import net.minecraft.item.ItemStack; -import net.minecraftforge.items.SlotItemHandler; -import refinedstorage.container.slot.SlotSpecimenFluid; -import refinedstorage.tile.TileFluidConstructor; - -public class ContainerFluidConstructor extends ContainerBase { - public ContainerFluidConstructor(TileFluidConstructor fluidConstructor, EntityPlayer player) { - super(fluidConstructor, player); - - for (int i = 0; i < 4; ++i) { - addSlotToContainer(new SlotItemHandler(fluidConstructor.getUpgrades(), i, 187, 6 + (i * 18))); - } - - addSlotToContainer(new SlotSpecimenFluid(!fluidConstructor.getWorld().isRemote, fluidConstructor.getFilter(), 0, 80, 20)); - - addPlayerInventory(8, 55); - } - - @Override - public ItemStack transferStackInSlot(EntityPlayer player, int index) { - ItemStack stack = null; - - Slot slot = getSlot(index); - - if (slot != null && slot.getHasStack()) { - stack = slot.getStack(); - - if (index < 4) { - if (!mergeItemStack(stack, 4, inventorySlots.size(), false)) { - return null; - } - } else if (!mergeItemStack(stack, 0, 4, false)) { - return mergeItemStackToSpecimen(stack, 4, 4 + 1); - } - - if (stack.stackSize == 0) { - slot.putStack(null); - } else { - slot.onSlotChanged(); - } - } - - return stack; - } -} diff --git a/src/main/java/refinedstorage/container/ContainerFluidDestructor.java b/src/main/java/refinedstorage/container/ContainerFluidDestructor.java deleted file mode 100755 index 3cd84f2e7..000000000 --- a/src/main/java/refinedstorage/container/ContainerFluidDestructor.java +++ /dev/null @@ -1,51 +0,0 @@ -package refinedstorage.container; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.Slot; -import net.minecraft.item.ItemStack; -import net.minecraftforge.items.SlotItemHandler; -import refinedstorage.container.slot.SlotSpecimenFluid; -import refinedstorage.tile.TileFluidDestructor; - -public class ContainerFluidDestructor extends ContainerBase { - public ContainerFluidDestructor(TileFluidDestructor fluidDestructor, EntityPlayer player) { - super(fluidDestructor, player); - - for (int i = 0; i < 4; ++i) { - addSlotToContainer(new SlotItemHandler(fluidDestructor.getUpgrades(), i, 187, 6 + (i * 18))); - } - - for (int i = 0; i < 9; ++i) { - addSlotToContainer(new SlotSpecimenFluid(!fluidDestructor.getWorld().isRemote, fluidDestructor.getInventory(), i, 8 + (18 * i), 20)); - } - - addPlayerInventory(8, 55); - } - - @Override - public ItemStack transferStackInSlot(EntityPlayer player, int index) { - ItemStack stack = null; - - Slot slot = getSlot(index); - - if (slot != null && slot.getHasStack()) { - stack = slot.getStack(); - - if (index < 4) { - if (!mergeItemStack(stack, 4 + 9, inventorySlots.size(), false)) { - return null; - } - } else if (!mergeItemStack(stack, 0, 4, false)) { - return mergeItemStackToSpecimen(stack, 4, 4 + 9); - } - - if (stack.stackSize == 0) { - slot.putStack(null); - } else { - slot.onSlotChanged(); - } - } - - return stack; - } -} diff --git a/src/main/java/refinedstorage/container/ContainerFluidImporter.java b/src/main/java/refinedstorage/container/ContainerFluidImporter.java deleted file mode 100755 index b3d04d2c4..000000000 --- a/src/main/java/refinedstorage/container/ContainerFluidImporter.java +++ /dev/null @@ -1,51 +0,0 @@ -package refinedstorage.container; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.Slot; -import net.minecraft.item.ItemStack; -import net.minecraftforge.items.SlotItemHandler; -import refinedstorage.container.slot.SlotSpecimenFluid; -import refinedstorage.tile.TileFluidImporter; - -public class ContainerFluidImporter extends ContainerBase { - public ContainerFluidImporter(TileFluidImporter fluidImporter, EntityPlayer player) { - super(fluidImporter, player); - - for (int i = 0; i < 4; ++i) { - addSlotToContainer(new SlotItemHandler(fluidImporter.getUpgrades(), i, 187, 6 + (i * 18))); - } - - for (int i = 0; i < 9; ++i) { - addSlotToContainer(new SlotSpecimenFluid(!fluidImporter.getWorld().isRemote, fluidImporter.getFilters(), i, 8 + (18 * i), 20)); - } - - addPlayerInventory(8, 55); - } - - @Override - public ItemStack transferStackInSlot(EntityPlayer player, int index) { - ItemStack stack = null; - - Slot slot = getSlot(index); - - if (slot != null && slot.getHasStack()) { - stack = slot.getStack(); - - if (index < 4) { - if (!mergeItemStack(stack, 4 + 9, inventorySlots.size(), false)) { - return null; - } - } else if (!mergeItemStack(stack, 0, 4, false)) { - return mergeItemStackToSpecimen(stack, 4, 4 + 9); - } - - if (stack.stackSize == 0) { - slot.putStack(null); - } else { - slot.onSlotChanged(); - } - } - - return stack; - } -} diff --git a/src/main/java/refinedstorage/container/ContainerImporter.java b/src/main/java/refinedstorage/container/ContainerImporter.java index 8805c5c15..01e5f805b 100755 --- a/src/main/java/refinedstorage/container/ContainerImporter.java +++ b/src/main/java/refinedstorage/container/ContainerImporter.java @@ -4,7 +4,7 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; import net.minecraftforge.items.SlotItemHandler; -import refinedstorage.container.slot.SlotSpecimen; +import refinedstorage.container.slot.SlotSpecimenType; import refinedstorage.tile.TileImporter; public class ContainerImporter extends ContainerBase { @@ -16,7 +16,7 @@ public class ContainerImporter extends ContainerBase { } for (int i = 0; i < 9; ++i) { - addSlotToContainer(new SlotSpecimen(importer.getFilters(), i, 8 + (18 * i), 20)); + addSlotToContainer(new SlotSpecimenType(importer, i, 8 + (18 * i), 20)); } addPlayerInventory(8, 55); diff --git a/src/main/java/refinedstorage/container/slot/SlotSpecimenFluid.java b/src/main/java/refinedstorage/container/slot/SlotSpecimenFluid.java index 66d0eded1..c319c700c 100755 --- a/src/main/java/refinedstorage/container/slot/SlotSpecimenFluid.java +++ b/src/main/java/refinedstorage/container/slot/SlotSpecimenFluid.java @@ -1,19 +1,14 @@ package refinedstorage.container.slot; -import net.minecraft.item.ItemStack; import net.minecraftforge.items.IItemHandler; +import net.minecraftforge.items.SlotItemHandler; -public class SlotSpecimenFluid extends SlotSpecimen { - private boolean server; - - public SlotSpecimenFluid(boolean server, IItemHandler handler, int id, int x, int y) { - super(handler, id, x, y); - - this.server = server; +/** + * Created by Raoul on 13/08/2016. + */ +// @TODO: REMOVAL +public class SlotSpecimenFluid extends SlotItemHandler { + public SlotSpecimenFluid(boolean b, IItemHandler filters, int i, int i1, int i2) { + super(filters, i, i1, i2); } - - @Override - public ItemStack getStack() { - return server ? super.getStack() : null; - } -} +} \ No newline at end of file diff --git a/src/main/java/refinedstorage/container/slot/SlotSpecimenType.java b/src/main/java/refinedstorage/container/slot/SlotSpecimenType.java new file mode 100755 index 000000000..1111fd026 --- /dev/null +++ b/src/main/java/refinedstorage/container/slot/SlotSpecimenType.java @@ -0,0 +1,40 @@ +package refinedstorage.container.slot; + +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.items.IItemHandler; +import refinedstorage.tile.config.IType; + +public class SlotSpecimenType extends SlotSpecimen { + private IType type; + + public SlotSpecimenType(IType type, int id, int x, int y, int flags) { + super(null, id, x, y, flags); + + this.type = type; + } + + public SlotSpecimenType(IType type, int id, int x, int y) { + this(type, id, x, y, 0); + } + + @Override + public IItemHandler getItemHandler() { + return type.getFilterInventory(); + } + + @Override + public boolean isWithSize() { + return super.isWithSize() && type.getType() != IType.FLUIDS; + } + + @Override + public boolean isBlockOnly() { + return super.isBlockOnly() && type.getType() == IType.ITEMS; + } + + @Override + public ItemStack getStack() { + return (type.getType() == IType.ITEMS || !((TileEntity) type).getWorld().isRemote) ? super.getStack() : null; + } +} diff --git a/src/main/java/refinedstorage/gui/GuiConstructor.java b/src/main/java/refinedstorage/gui/GuiConstructor.java index 50bca551c..b99b7b3cf 100755 --- a/src/main/java/refinedstorage/gui/GuiConstructor.java +++ b/src/main/java/refinedstorage/gui/GuiConstructor.java @@ -4,6 +4,7 @@ import refinedstorage.api.storage.CompareUtils; import refinedstorage.container.ContainerConstructor; import refinedstorage.gui.sidebutton.SideButtonCompare; import refinedstorage.gui.sidebutton.SideButtonRedstoneMode; +import refinedstorage.gui.sidebutton.SideButtonType; import refinedstorage.tile.TileConstructor; public class GuiConstructor extends GuiBase { @@ -15,6 +16,8 @@ public class GuiConstructor extends GuiBase { public void init(int x, int y) { addSideButton(new SideButtonRedstoneMode(TileConstructor.REDSTONE_MODE)); + addSideButton(new SideButtonType(TileConstructor.TYPE)); + addSideButton(new SideButtonCompare(TileConstructor.COMPARE, CompareUtils.COMPARE_DAMAGE)); addSideButton(new SideButtonCompare(TileConstructor.COMPARE, CompareUtils.COMPARE_NBT)); } diff --git a/src/main/java/refinedstorage/gui/GuiDestructor.java b/src/main/java/refinedstorage/gui/GuiDestructor.java index 24b62adaa..ce2e861e9 100755 --- a/src/main/java/refinedstorage/gui/GuiDestructor.java +++ b/src/main/java/refinedstorage/gui/GuiDestructor.java @@ -5,6 +5,7 @@ import refinedstorage.container.ContainerDestructor; import refinedstorage.gui.sidebutton.SideButtonCompare; import refinedstorage.gui.sidebutton.SideButtonMode; import refinedstorage.gui.sidebutton.SideButtonRedstoneMode; +import refinedstorage.gui.sidebutton.SideButtonType; import refinedstorage.tile.TileDestructor; public class GuiDestructor extends GuiBase { @@ -16,6 +17,8 @@ public class GuiDestructor extends GuiBase { public void init(int x, int y) { addSideButton(new SideButtonRedstoneMode(TileDestructor.REDSTONE_MODE)); + addSideButton(new SideButtonType(TileDestructor.TYPE)); + addSideButton(new SideButtonMode(TileDestructor.MODE)); addSideButton(new SideButtonCompare(TileDestructor.COMPARE, CompareUtils.COMPARE_DAMAGE)); diff --git a/src/main/java/refinedstorage/gui/GuiFluidConstructor.java b/src/main/java/refinedstorage/gui/GuiFluidConstructor.java deleted file mode 100755 index 1e5307f4d..000000000 --- a/src/main/java/refinedstorage/gui/GuiFluidConstructor.java +++ /dev/null @@ -1,37 +0,0 @@ -package refinedstorage.gui; - -import refinedstorage.api.storage.CompareUtils; -import refinedstorage.container.ContainerFluidConstructor; -import refinedstorage.gui.sidebutton.SideButtonCompare; -import refinedstorage.gui.sidebutton.SideButtonRedstoneMode; -import refinedstorage.tile.TileFluidConstructor; - -public class GuiFluidConstructor extends GuiBase { - public GuiFluidConstructor(ContainerFluidConstructor container) { - super(container, 211, 137); - } - - @Override - public void init(int x, int y) { - addSideButton(new SideButtonRedstoneMode(TileFluidConstructor.REDSTONE_MODE)); - - addSideButton(new SideButtonCompare(TileFluidConstructor.COMPARE, CompareUtils.COMPARE_NBT)); - } - - @Override - public void update(int x, int y) { - } - - @Override - public void drawBackground(int x, int y, int mouseX, int mouseY) { - bindTexture("gui/constructor.png"); - - drawTexture(x, y, 0, 0, width, height); - } - - @Override - public void drawForeground(int mouseX, int mouseY) { - drawString(7, 7, t("gui.refinedstorage:fluid_constructor")); - drawString(7, 43, t("container.inventory")); - } -} diff --git a/src/main/java/refinedstorage/gui/GuiFluidDestructor.java b/src/main/java/refinedstorage/gui/GuiFluidDestructor.java deleted file mode 100755 index 676997d89..000000000 --- a/src/main/java/refinedstorage/gui/GuiFluidDestructor.java +++ /dev/null @@ -1,40 +0,0 @@ -package refinedstorage.gui; - -import refinedstorage.api.storage.CompareUtils; -import refinedstorage.container.ContainerFluidDestructor; -import refinedstorage.gui.sidebutton.SideButtonCompare; -import refinedstorage.gui.sidebutton.SideButtonMode; -import refinedstorage.gui.sidebutton.SideButtonRedstoneMode; -import refinedstorage.tile.TileFluidDestructor; - -public class GuiFluidDestructor extends GuiBase { - public GuiFluidDestructor(ContainerFluidDestructor container) { - super(container, 211, 137); - } - - @Override - public void init(int x, int y) { - addSideButton(new SideButtonRedstoneMode(TileFluidDestructor.REDSTONE_MODE)); - - addSideButton(new SideButtonMode(TileFluidDestructor.MODE)); - - addSideButton(new SideButtonCompare(TileFluidDestructor.COMPARE, CompareUtils.COMPARE_NBT)); - } - - @Override - public void update(int x, int y) { - } - - @Override - public void drawBackground(int x, int y, int mouseX, int mouseY) { - bindTexture("gui/destructor.png"); - - drawTexture(x, y, 0, 0, width, height); - } - - @Override - public void drawForeground(int mouseX, int mouseY) { - drawString(7, 7, t("gui.refinedstorage:fluid_destructor")); - drawString(7, 43, t("container.inventory")); - } -} diff --git a/src/main/java/refinedstorage/gui/GuiFluidImporter.java b/src/main/java/refinedstorage/gui/GuiFluidImporter.java deleted file mode 100755 index 1eb2859da..000000000 --- a/src/main/java/refinedstorage/gui/GuiFluidImporter.java +++ /dev/null @@ -1,40 +0,0 @@ -package refinedstorage.gui; - -import refinedstorage.api.storage.CompareUtils; -import refinedstorage.container.ContainerFluidImporter; -import refinedstorage.gui.sidebutton.SideButtonCompare; -import refinedstorage.gui.sidebutton.SideButtonMode; -import refinedstorage.gui.sidebutton.SideButtonRedstoneMode; -import refinedstorage.tile.TileFluidImporter; - -public class GuiFluidImporter extends GuiBase { - public GuiFluidImporter(ContainerFluidImporter container) { - super(container, 211, 137); - } - - @Override - public void init(int x, int y) { - addSideButton(new SideButtonRedstoneMode(TileFluidImporter.REDSTONE_MODE)); - - addSideButton(new SideButtonMode(TileFluidImporter.MODE)); - - addSideButton(new SideButtonCompare(TileFluidImporter.COMPARE, CompareUtils.COMPARE_NBT)); - } - - @Override - public void update(int x, int y) { - } - - @Override - public void drawBackground(int x, int y, int mouseX, int mouseY) { - bindTexture("gui/importer.png"); - - drawTexture(x, y, 0, 0, width, height); - } - - @Override - public void drawForeground(int mouseX, int mouseY) { - drawString(7, 7, t("gui.refinedstorage:fluid_importer")); - 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 6a62e62ca..9ffe9f67e 100755 --- a/src/main/java/refinedstorage/gui/GuiHandler.java +++ b/src/main/java/refinedstorage/gui/GuiHandler.java @@ -53,12 +53,6 @@ public class GuiHandler implements IGuiHandler { return new ContainerNetworkTransmitter((TileNetworkTransmitter) tile, player); case RefinedStorageGui.FLUID_DISK_DRIVE: return new ContainerFluidDiskDrive((TileFluidDiskDrive) tile, player); - case RefinedStorageGui.FLUID_CONSTRUCTOR: - return new ContainerFluidConstructor((TileFluidConstructor) tile, player); - case RefinedStorageGui.FLUID_DESTRUCTOR: - return new ContainerFluidDestructor((TileFluidDestructor) tile, player); - case RefinedStorageGui.FLUID_IMPORTER: - return new ContainerFluidImporter((TileFluidImporter) tile, player); default: return null; } @@ -132,12 +126,6 @@ public class GuiHandler implements IGuiHandler { return new GuiNetworkTransmitter((ContainerNetworkTransmitter) getContainer(ID, player, tile), (TileNetworkTransmitter) tile); case RefinedStorageGui.FLUID_DISK_DRIVE: return new GuiStorage((ContainerFluidDiskDrive) getContainer(ID, player, tile), (IStorageGui) tile, "gui/disk_drive.png"); - case RefinedStorageGui.FLUID_CONSTRUCTOR: - return new GuiFluidConstructor((ContainerFluidConstructor) getContainer(ID, player, tile)); - case RefinedStorageGui.FLUID_DESTRUCTOR: - return new GuiFluidDestructor((ContainerFluidDestructor) getContainer(ID, player, tile)); - case RefinedStorageGui.FLUID_IMPORTER: - return new GuiFluidImporter((ContainerFluidImporter) getContainer(ID, player, tile)); default: return null; } diff --git a/src/main/java/refinedstorage/gui/GuiImporter.java b/src/main/java/refinedstorage/gui/GuiImporter.java index 384cbec40..77b1c7c6f 100755 --- a/src/main/java/refinedstorage/gui/GuiImporter.java +++ b/src/main/java/refinedstorage/gui/GuiImporter.java @@ -5,6 +5,7 @@ import refinedstorage.container.ContainerImporter; import refinedstorage.gui.sidebutton.SideButtonCompare; import refinedstorage.gui.sidebutton.SideButtonMode; import refinedstorage.gui.sidebutton.SideButtonRedstoneMode; +import refinedstorage.gui.sidebutton.SideButtonType; import refinedstorage.tile.TileImporter; public class GuiImporter extends GuiBase { @@ -16,6 +17,8 @@ public class GuiImporter extends GuiBase { public void init(int x, int y) { addSideButton(new SideButtonRedstoneMode(TileImporter.REDSTONE_MODE)); + addSideButton(new SideButtonType(TileImporter.TYPE)); + addSideButton(new SideButtonMode(TileImporter.MODE)); addSideButton(new SideButtonCompare(TileImporter.COMPARE, CompareUtils.COMPARE_DAMAGE)); diff --git a/src/main/java/refinedstorage/gui/sidebutton/SideButtonType.java b/src/main/java/refinedstorage/gui/sidebutton/SideButtonType.java new file mode 100755 index 000000000..d0a2e158e --- /dev/null +++ b/src/main/java/refinedstorage/gui/sidebutton/SideButtonType.java @@ -0,0 +1,29 @@ +package refinedstorage.gui.sidebutton; + +import net.minecraft.util.text.TextFormatting; +import refinedstorage.gui.GuiBase; +import refinedstorage.tile.config.IType; +import refinedstorage.tile.data.TileDataManager; +import refinedstorage.tile.data.TileDataParameter; + +public class SideButtonType extends SideButton { + private TileDataParameter type; + + public SideButtonType(TileDataParameter type) { + this.type = type; + } + + @Override + public String getTooltip(GuiBase gui) { + return TextFormatting.GREEN + gui.t("sidebutton.refinedstorage:type") + TextFormatting.RESET + "\n" + gui.t("sidebutton.refinedstorage:type." + type.getValue()); + } + + @Override + public void draw(GuiBase gui, int x, int y) { + } + + @Override + public void actionPerformed() { + TileDataManager.setParameter(type, type.getValue() == IType.ITEMS ? IType.FLUIDS : IType.ITEMS); + } +} diff --git a/src/main/java/refinedstorage/proxy/ClientProxy.java b/src/main/java/refinedstorage/proxy/ClientProxy.java index 061248e64..d656f5f58 100755 --- a/src/main/java/refinedstorage/proxy/ClientProxy.java +++ b/src/main/java/refinedstorage/proxy/ClientProxy.java @@ -258,8 +258,5 @@ public class ClientProxy extends CommonProxy { ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.STORAGE), EnumItemStorageType.TYPE_64K.getId(), new ModelResourceLocation("refinedstorage:storage", "type=64k")); ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.STORAGE), EnumItemStorageType.TYPE_CREATIVE.getId(), new ModelResourceLocation("refinedstorage:storage", "type=creative")); ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.FLUID_DISK_DRIVE), 0, new ModelResourceLocation("refinedstorage:disk_drive", "inventory")); - ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.FLUID_CONSTRUCTOR), 0, new ModelResourceLocation("refinedstorage:fluid_constructor", "inventory")); - ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.FLUID_DESTRUCTOR), 0, new ModelResourceLocation("refinedstorage:fluid_destructor", "inventory")); - ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.FLUID_IMPORTER), 0, new ModelResourceLocation("refinedstorage:fluid_importer", "inventory")); } } diff --git a/src/main/java/refinedstorage/proxy/CommonProxy.java b/src/main/java/refinedstorage/proxy/CommonProxy.java index f849504dd..3a706bcea 100755 --- a/src/main/java/refinedstorage/proxy/CommonProxy.java +++ b/src/main/java/refinedstorage/proxy/CommonProxy.java @@ -86,9 +86,6 @@ public class CommonProxy { registerTile(TileNetworkReceiver.class, "network_receiver"); registerTile(TileNetworkTransmitter.class, "network_transmitter"); registerTile(TileFluidDiskDrive.class, "fluid_disk_drive"); - registerTile(TileFluidConstructor.class, "fluid_constructor"); - registerTile(TileFluidDestructor.class, "fluid_destructor"); - registerTile(TileFluidImporter.class, "fluid_importer"); registerBlock(RefinedStorageBlocks.CONTROLLER); registerBlock(RefinedStorageBlocks.GRID); @@ -112,9 +109,6 @@ public class CommonProxy { registerBlock(RefinedStorageBlocks.NETWORK_TRANSMITTER); registerBlock(RefinedStorageBlocks.NETWORK_RECEIVER); registerBlock(RefinedStorageBlocks.FLUID_DISK_DRIVE); - registerBlock(RefinedStorageBlocks.FLUID_CONSTRUCTOR); - registerBlock(RefinedStorageBlocks.FLUID_DESTRUCTOR); - registerBlock(RefinedStorageBlocks.FLUID_IMPORTER); registerItem(RefinedStorageItems.QUARTZ_ENRICHED_IRON); registerItem(RefinedStorageItems.STORAGE_DISK); @@ -333,14 +327,6 @@ public class CommonProxy { new ItemStack(RefinedStorageItems.PROCESSOR, 1, ItemProcessor.TYPE_IMPROVED) ); - // Fluid Importer - GameRegistry.addShapelessRecipe(new ItemStack(RefinedStorageBlocks.FLUID_IMPORTER), - new ItemStack(RefinedStorageBlocks.CABLE), - new ItemStack(RefinedStorageItems.CORE, 1, ItemCore.TYPE_CONSTRUCTION), - new ItemStack(RefinedStorageItems.PROCESSOR, 1, ItemProcessor.TYPE_IMPROVED), - new ItemStack(Items.BUCKET) - ); - // Exporter GameRegistry.addShapelessRecipe(new ItemStack(RefinedStorageBlocks.EXPORTER), new ItemStack(RefinedStorageBlocks.CABLE), @@ -360,18 +346,6 @@ public class CommonProxy { 'I', new ItemStack(RefinedStorageItems.PROCESSOR, 1, ItemProcessor.TYPE_IMPROVED) ); - // Fluid Destructor - GameRegistry.addShapedRecipe(new ItemStack(RefinedStorageBlocks.DESTRUCTOR), - "EDE", - "RMR", - "EIE", - 'E', new ItemStack(RefinedStorageItems.QUARTZ_ENRICHED_IRON), - 'D', new ItemStack(RefinedStorageItems.CORE, 1, ItemCore.TYPE_DESTRUCTION), - 'R', new ItemStack(Items.BUCKET), - 'M', new ItemStack(RefinedStorageBlocks.CABLE), - 'I', new ItemStack(RefinedStorageItems.PROCESSOR, 1, ItemProcessor.TYPE_IMPROVED) - ); - // Constructor GameRegistry.addShapedRecipe(new ItemStack(RefinedStorageBlocks.CONSTRUCTOR), "ECE", @@ -384,18 +358,6 @@ public class CommonProxy { 'I', new ItemStack(RefinedStorageItems.PROCESSOR, 1, ItemProcessor.TYPE_IMPROVED) ); - // Fluid Constructor - GameRegistry.addShapedRecipe(new ItemStack(RefinedStorageBlocks.FLUID_CONSTRUCTOR), - "ECE", - "RMR", - "EIE", - 'E', new ItemStack(RefinedStorageItems.QUARTZ_ENRICHED_IRON), - 'C', new ItemStack(RefinedStorageItems.CORE, 1, ItemCore.TYPE_CONSTRUCTION), - 'R', new ItemStack(Items.BUCKET), - 'M', new ItemStack(RefinedStorageBlocks.CABLE), - 'I', new ItemStack(RefinedStorageItems.PROCESSOR, 1, ItemProcessor.TYPE_IMPROVED) - ); - // Detector GameRegistry.addRecipe(new ItemStack(RefinedStorageBlocks.DETECTOR), "ECE", diff --git a/src/main/java/refinedstorage/tile/TileConstructor.java b/src/main/java/refinedstorage/tile/TileConstructor.java index 7f816800c..9939502d8 100755 --- a/src/main/java/refinedstorage/tile/TileConstructor.java +++ b/src/main/java/refinedstorage/tile/TileConstructor.java @@ -1,6 +1,7 @@ package refinedstorage.tile; import mcmultipart.microblock.IMicroblock; +import net.minecraft.block.Block; import net.minecraft.block.SoundType; import net.minecraft.block.state.IBlockState; import net.minecraft.item.ItemStack; @@ -9,25 +10,31 @@ import net.minecraft.util.EnumFacing; import net.minecraft.util.SoundCategory; import net.minecraft.util.math.BlockPos; import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; import refinedstorage.RefinedStorage; import refinedstorage.apiimpl.autocrafting.CraftingTaskScheduler; import refinedstorage.container.slot.SlotSpecimen; import refinedstorage.inventory.ItemHandlerBasic; +import refinedstorage.inventory.ItemHandlerFluid; import refinedstorage.inventory.ItemHandlerUpgrade; import refinedstorage.item.ItemUpgrade; import refinedstorage.tile.config.IComparable; +import refinedstorage.tile.config.IType; import refinedstorage.tile.data.TileDataParameter; -public class TileConstructor extends TileMultipartNode implements IComparable { +public class TileConstructor extends TileMultipartNode implements IComparable, IType { public static final TileDataParameter COMPARE = IComparable.createParameter(); + public static final TileDataParameter TYPE = IType.createParameter(); private static final String NBT_COMPARE = "Compare"; + private static final String NBT_TYPE = "Type"; private static final int BASE_SPEED = 20; - private ItemHandlerBasic filter = new ItemHandlerBasic(1, this) { + private ItemHandlerBasic itemFilters = new ItemHandlerBasic(1, this) { @Override protected void onContentsChanged(int slot) { super.onContentsChanged(slot); @@ -35,16 +42,20 @@ public class TileConstructor extends TileMultipartNode implements IComparable { block = SlotSpecimen.getBlockState(worldObj, pos.offset(getDirection()), getStackInSlot(0)); } }; + private ItemHandlerFluid fluidFilters = new ItemHandlerFluid(1, this); private ItemHandlerUpgrade upgrades = new ItemHandlerUpgrade(4, this, ItemUpgrade.TYPE_SPEED, ItemUpgrade.TYPE_CRAFTING); private int compare = 0; + private int type = IType.ITEMS; + private IBlockState block; private CraftingTaskScheduler scheduler = new CraftingTaskScheduler(this); public TileConstructor() { dataManager.addWatchedParameter(COMPARE); + dataManager.addWatchedParameter(TYPE); } @Override @@ -59,23 +70,45 @@ public class TileConstructor extends TileMultipartNode implements IComparable { @Override public void updateNode() { - if (block != null && ticks % upgrades.getSpeed(BASE_SPEED, 4) == 0) { - BlockPos front = pos.offset(getDirection()); + if (ticks % upgrades.getSpeed(BASE_SPEED, 4) == 0) { + if (type == IType.ITEMS && block != null) { + BlockPos front = pos.offset(getDirection()); - if (worldObj.isAirBlock(front) && block.getBlock().canPlaceBlockAt(worldObj, front)) { - ItemStack took = network.extractItem(filter.getStackInSlot(0), 1, compare); + if (worldObj.isAirBlock(front) && block.getBlock().canPlaceBlockAt(worldObj, front)) { + ItemStack took = network.extractItem(itemFilters.getStackInSlot(0), 1, compare); - if (took != null) { - scheduler.resetSchedule(); - worldObj.setBlockState(front, block.getBlock().getStateFromMeta(took.getMetadata()), 1 | 2); - // From ItemBlock.onItemUse - SoundType blockSound = block.getBlock().getSoundType(); - worldObj.playSound(null, front, blockSound.getPlaceSound(), SoundCategory.BLOCKS, (blockSound.getVolume() + 1.0F) / 2.0F, blockSound.getPitch() * 0.8F); - } else if (upgrades.hasUpgrade(ItemUpgrade.TYPE_CRAFTING)) { - ItemStack craft = filter.getStackInSlot(0); + if (took != null) { + scheduler.resetSchedule(); + worldObj.setBlockState(front, block.getBlock().getStateFromMeta(took.getMetadata()), 1 | 2); + // From ItemBlock.onItemUse + SoundType blockSound = block.getBlock().getSoundType(); + worldObj.playSound(null, front, blockSound.getPlaceSound(), SoundCategory.BLOCKS, (blockSound.getVolume() + 1.0F) / 2.0F, blockSound.getPitch() * 0.8F); + } else if (upgrades.hasUpgrade(ItemUpgrade.TYPE_CRAFTING)) { + ItemStack craft = itemFilters.getStackInSlot(0); - if (scheduler.canSchedule(compare, craft)) { - scheduler.schedule(network, compare, craft); + if (scheduler.canSchedule(compare, craft)) { + scheduler.schedule(network, compare, craft); + } + } + } + } else if (type == IType.FLUIDS) { + FluidStack stack = fluidFilters.getFluids()[0]; + + if (stack != null) { + BlockPos front = pos.offset(getDirection()); + + Block block = stack.getFluid().getBlock(); + + + if (worldObj.isAirBlock(front) && block.canPlaceBlockAt(worldObj, front)) { + FluidStack took = network.extractFluid(stack, Fluid.BUCKET_VOLUME, compare); + + if (took != null) { + IBlockState state = block.getDefaultState(); + + // @TODO: This doesn't cause the block to flow? + worldObj.setBlockState(front, state, 1 | 2); + } } } } @@ -102,8 +135,13 @@ public class TileConstructor extends TileMultipartNode implements IComparable { compare = tag.getInteger(NBT_COMPARE); } - readItems(filter, 0, tag); + if (tag.hasKey(NBT_TYPE)) { + type = tag.getInteger(NBT_TYPE); + } + + readItems(itemFilters, 0, tag); readItems(upgrades, 1, tag); + readItems(fluidFilters, 2, tag); scheduler.read(tag); } @@ -113,9 +151,11 @@ public class TileConstructor extends TileMultipartNode implements IComparable { super.write(tag); tag.setInteger(NBT_COMPARE, compare); + tag.setInteger(NBT_TYPE, type); - writeItems(filter, 0, tag); + writeItems(itemFilters, 0, tag); writeItems(upgrades, 1, tag); + writeItems(fluidFilters, 2, tag); scheduler.writeToNBT(tag); @@ -126,15 +166,28 @@ public class TileConstructor extends TileMultipartNode implements IComparable { return upgrades; } - public IItemHandler getFilter() { - return filter; - } - @Override public IItemHandler getDrops() { return upgrades; } + @Override + public int getType() { + return worldObj.isRemote ? TYPE.getValue() : type; + } + + @Override + public void setType(int type) { + this.type = type; + + markDirty(); + } + + @Override + public IItemHandler getFilterInventory() { + return getType() == IType.ITEMS ? itemFilters : fluidFilters; + } + @Override public T getCapability(Capability capability, EnumFacing facing) { if (capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) { diff --git a/src/main/java/refinedstorage/tile/TileDestructor.java b/src/main/java/refinedstorage/tile/TileDestructor.java index 6b9b05ebc..5c99e96d0 100755 --- a/src/main/java/refinedstorage/tile/TileDestructor.java +++ b/src/main/java/refinedstorage/tile/TileDestructor.java @@ -2,6 +2,7 @@ package refinedstorage.tile; import mcmultipart.microblock.IMicroblock; import net.minecraft.block.Block; +import net.minecraft.block.BlockLiquid; import net.minecraft.block.state.IBlockState; import net.minecraft.inventory.InventoryHelper; import net.minecraft.item.ItemStack; @@ -9,36 +10,50 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; import net.minecraft.util.math.BlockPos; import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.IFluidBlock; +import net.minecraftforge.fluids.capability.IFluidHandler; +import net.minecraftforge.fluids.capability.wrappers.BlockLiquidWrapper; +import net.minecraftforge.fluids.capability.wrappers.FluidBlockWrapper; import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; import refinedstorage.RefinedStorage; import refinedstorage.inventory.ItemHandlerBasic; +import refinedstorage.inventory.ItemHandlerFluid; import refinedstorage.inventory.ItemHandlerUpgrade; import refinedstorage.item.ItemUpgrade; import refinedstorage.tile.config.IComparable; import refinedstorage.tile.config.IFilterable; +import refinedstorage.tile.config.IType; import refinedstorage.tile.data.TileDataParameter; import java.util.List; -public class TileDestructor extends TileMultipartNode implements IComparable, IFilterable { +public class TileDestructor extends TileMultipartNode 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(); private static final String NBT_COMPARE = "Compare"; private static final String NBT_MODE = "Mode"; + private static final String NBT_TYPE = "Type"; private static final int BASE_SPEED = 20; - private ItemHandlerBasic filters = new ItemHandlerBasic(9, this); + private ItemHandlerBasic itemFilters = new ItemHandlerBasic(9, this); + private ItemHandlerFluid fluidFilters = new ItemHandlerFluid(9, this); + private ItemHandlerUpgrade upgrades = new ItemHandlerUpgrade(4, this, ItemUpgrade.TYPE_SPEED); private int compare = 0; private int mode = IFilterable.WHITELIST; + private int type = IType.ITEMS; public TileDestructor() { dataManager.addWatchedParameter(COMPARE); dataManager.addWatchedParameter(MODE); + dataManager.addWatchedParameter(TYPE); } @Override @@ -54,32 +69,56 @@ public class TileDestructor extends TileMultipartNode implements IComparable, IF @Override public void updateNode() { if (ticks % upgrades.getSpeed(BASE_SPEED, 4) == 0) { - BlockPos front = pos.offset(getDirection()); + if (type == IType.ITEMS) { + BlockPos front = pos.offset(getDirection()); - IBlockState frontBlockState = worldObj.getBlockState(front); - ItemStack frontStack = frontBlockState.getBlock().getItem(worldObj, front, frontBlockState); + IBlockState frontBlockState = worldObj.getBlockState(front); + ItemStack frontStack = frontBlockState.getBlock().getItem(worldObj, front, frontBlockState); - if (frontStack != null) { - if (IFilterable.canTake(filters, mode, compare, frontStack)) { - List drops = frontBlockState.getBlock().getDrops(worldObj, front, frontBlockState, 0); + if (frontStack != null) { + if (IFilterable.canTake(itemFilters, mode, compare, frontStack)) { + List drops = frontBlockState.getBlock().getDrops(worldObj, front, frontBlockState, 0); - worldObj.playEvent(null, 2001, front, Block.getStateId(frontBlockState)); - worldObj.setBlockToAir(front); + worldObj.playEvent(null, 2001, front, Block.getStateId(frontBlockState)); + worldObj.setBlockToAir(front); - for (ItemStack drop : drops) { - // We check if the controller isn't null here because when a destructor faces a node and removes it - // it will essentially remove this block itself from the network without knowing - if (network == null) { - InventoryHelper.spawnItemStack(worldObj, front.getX(), front.getY(), front.getZ(), drop); - } else { - ItemStack remainder = network.insertItem(drop, drop.stackSize, false); + for (ItemStack drop : drops) { + // We check if the controller isn't null here because when a destructor faces a node and removes it + // it will essentially remove this block itself from the network without knowing + if (network == null) { + InventoryHelper.spawnItemStack(worldObj, front.getX(), front.getY(), front.getZ(), drop); + } else { + ItemStack remainder = network.insertItem(drop, drop.stackSize, false); - if (remainder != null) { - InventoryHelper.spawnItemStack(worldObj, front.getX(), front.getY(), front.getZ(), remainder); + if (remainder != null) { + InventoryHelper.spawnItemStack(worldObj, front.getX(), front.getY(), front.getZ(), remainder); + } } } } } + } else if (type == IType.FLUIDS) { + BlockPos front = pos.offset(getDirection()); + + Block frontBlock = worldObj.getBlockState(front).getBlock(); + + IFluidHandler handler = null; + + if (frontBlock instanceof BlockLiquid) { + handler = new BlockLiquidWrapper((BlockLiquid) frontBlock, worldObj, front); + } else if (frontBlock instanceof IFluidBlock) { + handler = new FluidBlockWrapper((IFluidBlock) frontBlock, worldObj, front); + } + + if (handler != null) { + FluidStack stack = handler.drain(Fluid.BUCKET_VOLUME, false); + + if (stack != null && IFilterable.canTakeFluids(fluidFilters, mode, compare, stack) && network.insertFluid(stack, stack.amount, true) == null) { + FluidStack drained = handler.drain(Fluid.BUCKET_VOLUME, true); + + network.insertFluid(drained, drained.amount, false); + } + } } } } @@ -120,8 +159,13 @@ public class TileDestructor extends TileMultipartNode implements IComparable, IF mode = tag.getInteger(NBT_MODE); } - readItems(filters, 0, tag); + if (tag.hasKey(NBT_TYPE)) { + type = tag.getInteger(NBT_TYPE); + } + + readItems(itemFilters, 0, tag); readItems(upgrades, 1, tag); + readItems(fluidFilters, 2, tag); } @Override @@ -130,9 +174,11 @@ public class TileDestructor extends TileMultipartNode implements IComparable, IF tag.setInteger(NBT_COMPARE, compare); tag.setInteger(NBT_MODE, mode); + tag.setInteger(NBT_TYPE, type); - writeItems(filters, 0, tag); + writeItems(itemFilters, 0, tag); writeItems(upgrades, 1, tag); + writeItems(fluidFilters, 2, tag); return tag; } @@ -142,7 +188,7 @@ public class TileDestructor extends TileMultipartNode implements IComparable, IF } public IItemHandler getInventory() { - return filters; + return itemFilters; } @Override @@ -150,6 +196,23 @@ public class TileDestructor extends TileMultipartNode implements IComparable, IF return upgrades; } + @Override + public int getType() { + return worldObj.isRemote ? TYPE.getValue() : type; + } + + @Override + public void setType(int type) { + this.type = type; + + markDirty(); + } + + @Override + public IItemHandler getFilterInventory() { + return getType() == IType.ITEMS ? itemFilters : fluidFilters; + } + @Override public T getCapability(Capability capability, EnumFacing facing) { if (capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) { diff --git a/src/main/java/refinedstorage/tile/TileFluidConstructor.java b/src/main/java/refinedstorage/tile/TileFluidConstructor.java deleted file mode 100755 index d57d7c0eb..000000000 --- a/src/main/java/refinedstorage/tile/TileFluidConstructor.java +++ /dev/null @@ -1,132 +0,0 @@ -package refinedstorage.tile; - -import mcmultipart.microblock.IMicroblock; -import net.minecraft.block.Block; -import net.minecraft.block.state.IBlockState; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.math.BlockPos; -import net.minecraftforge.common.capabilities.Capability; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.items.CapabilityItemHandler; -import net.minecraftforge.items.IItemHandler; -import refinedstorage.RefinedStorage; -import refinedstorage.inventory.ItemHandlerFluid; -import refinedstorage.inventory.ItemHandlerUpgrade; -import refinedstorage.item.ItemUpgrade; -import refinedstorage.tile.config.IComparable; -import refinedstorage.tile.data.TileDataParameter; - -public class TileFluidConstructor extends TileMultipartNode implements IComparable { - public static final TileDataParameter COMPARE = IComparable.createParameter(); - - private static final String NBT_COMPARE = "Compare"; - - private static final int BASE_SPEED = 20; - - private ItemHandlerFluid filter = new ItemHandlerFluid(1, this); - - private ItemHandlerUpgrade upgrades = new ItemHandlerUpgrade(4, this, ItemUpgrade.TYPE_SPEED); - - private int compare = 0; - - public TileFluidConstructor() { - dataManager.addWatchedParameter(COMPARE); - } - - @Override - public boolean canAddMicroblock(IMicroblock microblock) { - return !isBlockingMicroblock(microblock, getDirection()); - } - - @Override - public int getEnergyUsage() { - return RefinedStorage.INSTANCE.fluidConstructorUsage + upgrades.getEnergyUsage(); - } - - @Override - public void updateNode() { - FluidStack stack = filter.getFluids()[0]; - - if (stack != null && ticks % upgrades.getSpeed(BASE_SPEED, 4) == 0) { - BlockPos front = pos.offset(getDirection()); - - Block block = stack.getFluid().getBlock(); - - if (worldObj.isAirBlock(front) && block.canPlaceBlockAt(worldObj, front)) { - FluidStack took = network.extractFluid(stack, Fluid.BUCKET_VOLUME, compare); - - if (took != null) { - IBlockState state = block.getDefaultState(); - - // @TODO: This doesn't cause the block to flow? - worldObj.setBlockState(front, state, 1 | 2); - } - } - } - } - - @Override - public int getCompare() { - return compare; - } - - @Override - public void setCompare(int compare) { - this.compare = compare; - - markDirty(); - } - - @Override - public void read(NBTTagCompound tag) { - super.read(tag); - - if (tag.hasKey(NBT_COMPARE)) { - compare = tag.getInteger(NBT_COMPARE); - } - - readItems(filter, 0, tag); - readItems(upgrades, 1, tag); - } - - @Override - public NBTTagCompound write(NBTTagCompound tag) { - super.write(tag); - - tag.setInteger(NBT_COMPARE, compare); - - writeItems(filter, 0, tag); - writeItems(upgrades, 1, tag); - - return tag; - } - - public IItemHandler getUpgrades() { - return upgrades; - } - - public IItemHandler getFilter() { - return filter; - } - - @Override - public IItemHandler getDrops() { - return upgrades; - } - - @Override - public T getCapability(Capability capability, EnumFacing facing) { - if (capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) { - return (T) upgrades; - } - - return super.getCapability(capability, facing); - } - - @Override - public boolean hasCapability(Capability capability, EnumFacing facing) { - return capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY || super.hasCapability(capability, facing); - } -} diff --git a/src/main/java/refinedstorage/tile/TileFluidDestructor.java b/src/main/java/refinedstorage/tile/TileFluidDestructor.java deleted file mode 100755 index 521f41d65..000000000 --- a/src/main/java/refinedstorage/tile/TileFluidDestructor.java +++ /dev/null @@ -1,162 +0,0 @@ -package refinedstorage.tile; - -import mcmultipart.microblock.IMicroblock; -import net.minecraft.block.Block; -import net.minecraft.block.BlockLiquid; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.math.BlockPos; -import net.minecraftforge.common.capabilities.Capability; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.IFluidBlock; -import net.minecraftforge.fluids.capability.IFluidHandler; -import net.minecraftforge.fluids.capability.wrappers.BlockLiquidWrapper; -import net.minecraftforge.fluids.capability.wrappers.FluidBlockWrapper; -import net.minecraftforge.items.CapabilityItemHandler; -import net.minecraftforge.items.IItemHandler; -import refinedstorage.RefinedStorage; -import refinedstorage.inventory.ItemHandlerFluid; -import refinedstorage.inventory.ItemHandlerUpgrade; -import refinedstorage.item.ItemUpgrade; -import refinedstorage.tile.config.IComparable; -import refinedstorage.tile.config.IFilterable; -import refinedstorage.tile.data.TileDataParameter; - -public class TileFluidDestructor extends TileMultipartNode implements IComparable, IFilterable { - public static final TileDataParameter COMPARE = IComparable.createParameter(); - public static final TileDataParameter MODE = IFilterable.createParameter(); - - private static final String NBT_COMPARE = "Compare"; - private static final String NBT_MODE = "Mode"; - - private static final int BASE_SPEED = 20; - - private ItemHandlerFluid filters = new ItemHandlerFluid(9, this); - private ItemHandlerUpgrade upgrades = new ItemHandlerUpgrade(4, this, ItemUpgrade.TYPE_SPEED); - - private int compare = 0; - private int mode = IFilterable.WHITELIST; - - public TileFluidDestructor() { - dataManager.addWatchedParameter(COMPARE); - dataManager.addWatchedParameter(MODE); - } - - @Override - public boolean canAddMicroblock(IMicroblock microblock) { - return !isBlockingMicroblock(microblock, getDirection()); - } - - @Override - public int getEnergyUsage() { - return RefinedStorage.INSTANCE.fluidDestructorUsage + upgrades.getEnergyUsage(); - } - - @Override - public void updateNode() { - if (ticks % upgrades.getSpeed(BASE_SPEED, 4) == 0) { - BlockPos front = pos.offset(getDirection()); - - Block frontBlock = worldObj.getBlockState(front).getBlock(); - - IFluidHandler handler = null; - - if (frontBlock instanceof BlockLiquid) { - handler = new BlockLiquidWrapper((BlockLiquid) frontBlock, worldObj, front); - } else if (frontBlock instanceof IFluidBlock) { - handler = new FluidBlockWrapper((IFluidBlock) frontBlock, worldObj, front); - } - - if (handler != null) { - FluidStack stack = handler.drain(Fluid.BUCKET_VOLUME, false); - - if (stack != null && IFilterable.canTakeFluids(filters, mode, compare, stack) && network.insertFluid(stack, stack.amount, true) == null) { - FluidStack drained = handler.drain(Fluid.BUCKET_VOLUME, true); - - network.insertFluid(drained, drained.amount, false); - } - } - } - } - - @Override - public int getCompare() { - return compare; - } - - @Override - public void setCompare(int compare) { - this.compare = compare; - - markDirty(); - } - - @Override - public int getMode() { - return mode; - } - - @Override - public void setMode(int mode) { - this.mode = mode; - - markDirty(); - } - - @Override - public void read(NBTTagCompound tag) { - super.read(tag); - - if (tag.hasKey(NBT_COMPARE)) { - compare = tag.getInteger(NBT_COMPARE); - } - - if (tag.hasKey(NBT_MODE)) { - mode = tag.getInteger(NBT_MODE); - } - - readItems(filters, 0, tag); - readItems(upgrades, 1, tag); - } - - @Override - public NBTTagCompound write(NBTTagCompound tag) { - super.write(tag); - - tag.setInteger(NBT_COMPARE, compare); - tag.setInteger(NBT_MODE, mode); - - writeItems(filters, 0, tag); - writeItems(upgrades, 1, tag); - - return tag; - } - - public IItemHandler getUpgrades() { - return upgrades; - } - - public IItemHandler getInventory() { - return filters; - } - - @Override - public IItemHandler getDrops() { - return upgrades; - } - - @Override - public T getCapability(Capability capability, EnumFacing facing) { - if (capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) { - return (T) upgrades; - } - - return super.getCapability(capability, facing); - } - - @Override - public boolean hasCapability(Capability capability, EnumFacing facing) { - return capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY || super.hasCapability(capability, facing); - } -} diff --git a/src/main/java/refinedstorage/tile/TileFluidImporter.java b/src/main/java/refinedstorage/tile/TileFluidImporter.java deleted file mode 100755 index f737beb31..000000000 --- a/src/main/java/refinedstorage/tile/TileFluidImporter.java +++ /dev/null @@ -1,142 +0,0 @@ -package refinedstorage.tile; - -import mcmultipart.microblock.IMicroblock; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumFacing; -import net.minecraftforge.common.capabilities.Capability; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.capability.IFluidHandler; -import net.minecraftforge.items.CapabilityItemHandler; -import net.minecraftforge.items.IItemHandler; -import refinedstorage.RefinedStorage; -import refinedstorage.inventory.ItemHandlerFluid; -import refinedstorage.inventory.ItemHandlerUpgrade; -import refinedstorage.item.ItemUpgrade; -import refinedstorage.tile.config.IComparable; -import refinedstorage.tile.config.IFilterable; -import refinedstorage.tile.data.TileDataParameter; - -public class TileFluidImporter extends TileMultipartNode implements IComparable, IFilterable { - public static final TileDataParameter COMPARE = IComparable.createParameter(); - public static final TileDataParameter MODE = IFilterable.createParameter(); - - private static final String NBT_COMPARE = "Compare"; - private static final String NBT_MODE = "Mode"; - - private ItemHandlerFluid filters = new ItemHandlerFluid(9, this); - private ItemHandlerUpgrade upgrades = new ItemHandlerUpgrade(4, this, ItemUpgrade.TYPE_SPEED); - - private int compare = 0; - private int mode = IFilterable.WHITELIST; - - public TileFluidImporter() { - dataManager.addWatchedParameter(COMPARE); - dataManager.addWatchedParameter(MODE); - } - - @Override - public boolean canAddMicroblock(IMicroblock microblock) { - return !isBlockingMicroblock(microblock, getDirection()); - } - - @Override - public int getEnergyUsage() { - return RefinedStorage.INSTANCE.fluidImporterUsage + upgrades.getEnergyUsage(); - } - - @Override - public void updateNode() { - IFluidHandler handler = getFluidHandler(getFacingTile(), getDirection().getOpposite()); - - if (handler != null) { - FluidStack stack = handler.drain(Fluid.BUCKET_VOLUME, false); - - if (stack != null && IFilterable.canTakeFluids(filters, mode, compare, stack) && network.insertFluid(stack, stack.amount, true) == null) { - FluidStack drain = handler.drain(Fluid.BUCKET_VOLUME, true); - - network.insertFluid(drain, drain.amount, false); - } - } - } - - @Override - public int getCompare() { - return compare; - } - - @Override - public void setCompare(int compare) { - this.compare = compare; - - markDirty(); - } - - @Override - public int getMode() { - return mode; - } - - @Override - public void setMode(int mode) { - this.mode = mode; - - markDirty(); - } - - @Override - public void read(NBTTagCompound tag) { - super.read(tag); - - if (tag.hasKey(NBT_COMPARE)) { - compare = tag.getInteger(NBT_COMPARE); - } - - if (tag.hasKey(NBT_MODE)) { - mode = tag.getInteger(NBT_MODE); - } - - readItems(filters, 0, tag); - readItems(upgrades, 1, tag); - } - - @Override - public NBTTagCompound write(NBTTagCompound tag) { - super.write(tag); - - tag.setInteger(NBT_COMPARE, compare); - tag.setInteger(NBT_MODE, mode); - - writeItems(filters, 0, tag); - writeItems(upgrades, 1, tag); - - return tag; - } - - public IItemHandler getUpgrades() { - return upgrades; - } - - public IItemHandler getFilters() { - return filters; - } - - @Override - public IItemHandler getDrops() { - return upgrades; - } - - @Override - public T getCapability(Capability capability, EnumFacing facing) { - if (capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) { - return (T) upgrades; - } - - return super.getCapability(capability, facing); - } - - @Override - public boolean hasCapability(Capability capability, EnumFacing facing) { - return capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY || super.hasCapability(capability, facing); - } -} diff --git a/src/main/java/refinedstorage/tile/TileImporter.java b/src/main/java/refinedstorage/tile/TileImporter.java index 8c4a1592f..ccfb54f0d 100755 --- a/src/main/java/refinedstorage/tile/TileImporter.java +++ b/src/main/java/refinedstorage/tile/TileImporter.java @@ -5,34 +5,45 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.capability.IFluidHandler; import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; import refinedstorage.RefinedStorage; import refinedstorage.inventory.ItemHandlerBasic; +import refinedstorage.inventory.ItemHandlerFluid; import refinedstorage.inventory.ItemHandlerUpgrade; import refinedstorage.item.ItemUpgrade; import refinedstorage.tile.config.IComparable; import refinedstorage.tile.config.IFilterable; +import refinedstorage.tile.config.IType; import refinedstorage.tile.data.TileDataParameter; -public class TileImporter extends TileMultipartNode implements IComparable, IFilterable { +public class TileImporter extends TileMultipartNode 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(); private static final String NBT_COMPARE = "Compare"; private static final String NBT_MODE = "Mode"; + private static final String NBT_TYPE = "Type"; + + private ItemHandlerBasic itemFilters = new ItemHandlerBasic(9, this); + private ItemHandlerFluid fluidFilters = new ItemHandlerFluid(9, this); - private ItemHandlerBasic filters = new ItemHandlerBasic(9, this); private ItemHandlerUpgrade upgrades = new ItemHandlerUpgrade(4, this, ItemUpgrade.TYPE_SPEED, ItemUpgrade.TYPE_STACK); private int compare = 0; private int mode = IFilterable.WHITELIST; + private int type = IType.ITEMS; private int currentSlot; public TileImporter() { dataManager.addWatchedParameter(COMPARE); dataManager.addWatchedParameter(MODE); + dataManager.addWatchedParameter(TYPE); } @Override @@ -47,32 +58,46 @@ public class TileImporter extends TileMultipartNode implements IComparable, IFil @Override public void updateNode() { - IItemHandler handler = getItemHandler(getFacingTile(), getDirection().getOpposite()); + if (type == IType.ITEMS) { + IItemHandler handler = getItemHandler(getFacingTile(), getDirection().getOpposite()); - if (getFacingTile() instanceof TileDiskDrive || handler == null) { - return; - } + if (getFacingTile() instanceof TileDiskDrive || handler == null) { + return; + } - if (currentSlot >= handler.getSlots()) { - currentSlot = 0; - } + if (currentSlot >= handler.getSlots()) { + currentSlot = 0; + } - if (handler.getSlots() > 0) { - ItemStack stack = handler.getStackInSlot(currentSlot); + if (handler.getSlots() > 0) { + ItemStack stack = handler.getStackInSlot(currentSlot); - if (stack == null || !IFilterable.canTake(filters, mode, compare, stack)) { - currentSlot++; - } else if (ticks % upgrades.getSpeed() == 0) { - int quantity = upgrades.hasUpgrade(ItemUpgrade.TYPE_STACK) ? 64 : 1; - - ItemStack result = handler.extractItem(currentSlot, quantity, true); - - if (result != null && network.insertItem(result, result.stackSize, true) == null) { - network.insertItem(result, result.stackSize, false); - - handler.extractItem(currentSlot, quantity, false); - } else { + if (stack == null || !IFilterable.canTake(itemFilters, mode, compare, stack)) { currentSlot++; + } else if (ticks % upgrades.getSpeed() == 0) { + int quantity = upgrades.hasUpgrade(ItemUpgrade.TYPE_STACK) ? 64 : 1; + + ItemStack result = handler.extractItem(currentSlot, quantity, true); + + if (result != null && network.insertItem(result, result.stackSize, true) == null) { + network.insertItem(result, result.stackSize, false); + + handler.extractItem(currentSlot, quantity, false); + } else { + currentSlot++; + } + } + } + } else if (type == IType.FLUIDS && ticks % upgrades.getSpeed() == 0) { + IFluidHandler handler = getFluidHandler(getFacingTile(), getDirection().getOpposite()); + + if (handler != null) { + FluidStack stack = handler.drain(Fluid.BUCKET_VOLUME, false); + + if (stack != null && IFilterable.canTakeFluids(fluidFilters, mode, compare, stack) && network.insertFluid(stack, stack.amount, true) == null) { + FluidStack drain = handler.drain(Fluid.BUCKET_VOLUME, true); + + network.insertFluid(drain, drain.amount, false); } } } @@ -114,8 +139,13 @@ public class TileImporter extends TileMultipartNode implements IComparable, IFil mode = tag.getInteger(NBT_MODE); } - readItems(filters, 0, tag); + if (tag.hasKey(NBT_TYPE)) { + type = tag.getInteger(NBT_TYPE); + } + + readItems(itemFilters, 0, tag); readItems(upgrades, 1, tag); + readItems(fluidFilters, 2, tag); } @Override @@ -124,9 +154,11 @@ public class TileImporter extends TileMultipartNode implements IComparable, IFil tag.setInteger(NBT_COMPARE, compare); tag.setInteger(NBT_MODE, mode); + tag.setInteger(NBT_TYPE, type); - writeItems(filters, 0, tag); + writeItems(itemFilters, 0, tag); writeItems(upgrades, 1, tag); + writeItems(fluidFilters, 2, tag); return tag; } @@ -135,15 +167,28 @@ public class TileImporter extends TileMultipartNode implements IComparable, IFil return upgrades; } - public IItemHandler getFilters() { - return filters; - } - @Override public IItemHandler getDrops() { return upgrades; } + @Override + public int getType() { + return worldObj.isRemote ? TYPE.getValue() : type; + } + + @Override + public void setType(int type) { + this.type = type; + + markDirty(); + } + + @Override + public IItemHandler getFilterInventory() { + return getType() == IType.ITEMS ? itemFilters : fluidFilters; + } + @Override public T getCapability(Capability capability, EnumFacing facing) { if (capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) { diff --git a/src/main/java/refinedstorage/tile/config/IType.java b/src/main/java/refinedstorage/tile/config/IType.java new file mode 100755 index 000000000..63db8ccdc --- /dev/null +++ b/src/main/java/refinedstorage/tile/config/IType.java @@ -0,0 +1,40 @@ +package refinedstorage.tile.config; + +import net.minecraft.network.datasync.DataSerializers; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.items.IItemHandler; +import refinedstorage.container.ContainerBase; +import refinedstorage.tile.data.ITileDataConsumer; +import refinedstorage.tile.data.ITileDataProducer; +import refinedstorage.tile.data.TileDataParameter; + +public interface IType { + int ITEMS = 0; + int FLUIDS = 1; + + static TileDataParameter createParameter() { + return new TileDataParameter<>(DataSerializers.VARINT, ITEMS, new ITileDataProducer() { + @Override + public Integer getValue(T tile) { + return ((IType) tile).getType(); + } + }, new ITileDataConsumer() { + @Override + public void setValue(T tile, Integer value) { + if (value == 0 || value == 1) { + ((IType) tile).setType(value); + + tile.getWorld().playerEntities.stream() + .filter(p -> p.openContainer instanceof ContainerBase && ((ContainerBase) p.openContainer).getTile().getPos().equals(tile.getPos())) + .forEach(p -> p.openContainer.detectAndSendChanges()); + } + } + }); + } + + int getType(); + + void setType(int type); + + IItemHandler getFilterInventory(); +} diff --git a/src/main/resources/assets/refinedstorage/blockstates/fluid_constructor.json b/src/main/resources/assets/refinedstorage/blockstates/fluid_constructor.json deleted file mode 100755 index b64780cba..000000000 --- a/src/main/resources/assets/refinedstorage/blockstates/fluid_constructor.json +++ /dev/null @@ -1,83 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "textures": { - "all": "refinedstorage:blocks/cable", - "particle": "refinedstorage:blocks/cable", - "front": "refinedstorage:blocks/fluid_constructor", - "line": "refinedstorage:blocks/cable_part" - }, - "model": "refinedstorage:cable_core", - "uvlock": true - }, - "variants": { - "inventory": [ - { - "model": "refinedstorage:constructor_destructor", - "transform": "forge:default-block" - } - ], - "direction": { - "north": { - "submodel": "refinedstorage:constructor_destructor_north" - }, - "east": { - "submodel": "refinedstorage:constructor_destructor_east" - }, - "south": { - "submodel": "refinedstorage:constructor_destructor_south" - }, - "west": { - "submodel": "refinedstorage:constructor_destructor_west" - }, - "up": { - "submodel": "refinedstorage:constructor_destructor_up" - }, - "down": { - "submodel": "refinedstorage:constructor_destructor_down" - } - }, - "north": { - "true": { - "submodel": "refinedstorage:cable_north" - }, - "false": { - } - }, - "east": { - "true": { - "submodel": "refinedstorage:cable_east" - }, - "false": { - } - }, - "south": { - "true": { - "submodel": "refinedstorage:cable_south" - }, - "false": { - } - }, - "west": { - "true": { - "submodel": "refinedstorage:cable_west" - }, - "false": { - } - }, - "up": { - "true": { - "submodel": "refinedstorage:cable_up" - }, - "false": { - } - }, - "down": { - "true": { - "submodel": "refinedstorage:cable_down" - }, - "false": { - } - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/refinedstorage/blockstates/fluid_destructor.json b/src/main/resources/assets/refinedstorage/blockstates/fluid_destructor.json deleted file mode 100755 index 77d6c66b5..000000000 --- a/src/main/resources/assets/refinedstorage/blockstates/fluid_destructor.json +++ /dev/null @@ -1,83 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "textures": { - "all": "refinedstorage:blocks/cable", - "particle": "refinedstorage:blocks/cable", - "front": "refinedstorage:blocks/fluid_destructor", - "line": "refinedstorage:blocks/cable_part" - }, - "model": "refinedstorage:cable_core", - "uvlock": true - }, - "variants": { - "inventory": [ - { - "model": "refinedstorage:constructor_destructor", - "transform": "forge:default-block" - } - ], - "direction": { - "north": { - "submodel": "refinedstorage:constructor_destructor_north" - }, - "east": { - "submodel": "refinedstorage:constructor_destructor_east" - }, - "south": { - "submodel": "refinedstorage:constructor_destructor_south" - }, - "west": { - "submodel": "refinedstorage:constructor_destructor_west" - }, - "up": { - "submodel": "refinedstorage:constructor_destructor_up" - }, - "down": { - "submodel": "refinedstorage:constructor_destructor_down" - } - }, - "north": { - "true": { - "submodel": "refinedstorage:cable_north" - }, - "false": { - } - }, - "east": { - "true": { - "submodel": "refinedstorage:cable_east" - }, - "false": { - } - }, - "south": { - "true": { - "submodel": "refinedstorage:cable_south" - }, - "false": { - } - }, - "west": { - "true": { - "submodel": "refinedstorage:cable_west" - }, - "false": { - } - }, - "up": { - "true": { - "submodel": "refinedstorage:cable_up" - }, - "false": { - } - }, - "down": { - "true": { - "submodel": "refinedstorage:cable_down" - }, - "false": { - } - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/refinedstorage/blockstates/fluid_importer.json b/src/main/resources/assets/refinedstorage/blockstates/fluid_importer.json deleted file mode 100755 index ccbadf616..000000000 --- a/src/main/resources/assets/refinedstorage/blockstates/fluid_importer.json +++ /dev/null @@ -1,82 +0,0 @@ -{ - "forge_marker": 1, - "defaults": { - "textures": { - "all": "refinedstorage:blocks/cable", - "particle": "refinedstorage:blocks/cable", - "line": "refinedstorage:blocks/cable_part" - }, - "model": "refinedstorage:cable_core", - "uvlock": true - }, - "variants": { - "inventory": [ - { - "model": "refinedstorage:importer", - "transform": "forge:default-block" - } - ], - "direction": { - "north": { - "submodel": "refinedstorage:importer_north" - }, - "east": { - "submodel": "refinedstorage:importer_east" - }, - "south": { - "submodel": "refinedstorage:importer_south" - }, - "west": { - "submodel": "refinedstorage:importer_west" - }, - "up": { - "submodel": "refinedstorage:importer_up" - }, - "down": { - "submodel": "refinedstorage:importer_down" - } - }, - "north": { - "true": { - "submodel": "refinedstorage:cable_north" - }, - "false": { - } - }, - "east": { - "true": { - "submodel": "refinedstorage:cable_east" - }, - "false": { - } - }, - "south": { - "true": { - "submodel": "refinedstorage:cable_south" - }, - "false": { - } - }, - "west": { - "true": { - "submodel": "refinedstorage:cable_west" - }, - "false": { - } - }, - "up": { - "true": { - "submodel": "refinedstorage:cable_up" - }, - "false": { - } - }, - "down": { - "true": { - "submodel": "refinedstorage:cable_down" - }, - "false": { - } - } - } -} \ No newline at end of file diff --git a/src/main/resources/assets/refinedstorage/lang/en_US.lang b/src/main/resources/assets/refinedstorage/lang/en_US.lang index fdc440480..a8c5292fc 100755 --- a/src/main/resources/assets/refinedstorage/lang/en_US.lang +++ b/src/main/resources/assets/refinedstorage/lang/en_US.lang @@ -40,9 +40,6 @@ gui.refinedstorage:network_transmitter.dimension=Dimension %d gui.refinedstorage:network_transmitter.missing_card=Missing Network Card gui.refinedstorage:network_transmitter.missing_upgrade=Insert upgrade gui.refinedstorage:fluid_disk_drive=Fluid Disk Drive -gui.refinedstorage:fluid_constructor=Fluid Constructor -gui.refinedstorage:fluid_destructor=Fluid Destructor -gui.refinedstorage:fluid_importer=Fluid Importer misc.refinedstorage:energy_stored=%d / %d RS misc.refinedstorage:energy_usage=Usage: %d RS/t @@ -96,6 +93,10 @@ sidebutton.refinedstorage:mode=Mode sidebutton.refinedstorage:mode.whitelist=Whitelist sidebutton.refinedstorage:mode.blacklist=Blacklist +sidebutton.refinedstorage:type=Type +sidebutton.refinedstorage:type.0=Items +sidebutton.refinedstorage:type.1=Fluids + sidebutton.refinedstorage:detector.mode=Mode sidebutton.refinedstorage:detector.mode.0=Emit signal when under the amount sidebutton.refinedstorage:detector.mode.1=Emit signal when on the amount @@ -131,9 +132,6 @@ block.refinedstorage:processing_pattern_encoder.name=Processing Pattern Encoder block.refinedstorage:network_receiver.name=Network Receiver block.refinedstorage:network_transmitter.name=Network Transmitter block.refinedstorage:fluid_disk_drive.name=Fluid Disk Drive -block.refinedstorage:fluid_constructor.name=Fluid Constructor -block.refinedstorage:fluid_destructor.name=Fluid Destructor -block.refinedstorage:fluid_importer.name=Fluid Importer item.refinedstorage:storage_disk.0.name=1k Storage Disk item.refinedstorage:storage_disk.1.name=4k Storage Disk diff --git a/src/main/resources/assets/refinedstorage/textures/blocks/fluid_constructor.png b/src/main/resources/assets/refinedstorage/textures/blocks/fluid_constructor.png deleted file mode 100755 index 02c91d41dc1bca35c96961a08304e41a30a709ef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 711 zcmV;&0yzDNP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02y>eSaefwW^{L9 za%BK;VQFr3E^cLXAT%y8E-^5z3JSmg00K8jL_t(IPmPh=PU27$hWGQ-auOItqJ%J< zrYI5zGcz|{&Iy6GP!NS^sPss{DCNS_3y}!4&=cUyo6JJUT$_A*<=@@^zt&2M2;wLn zO(znWWHPhApUq^x9Uq@$vnL1XFHjE;zY?F02qF_tX5#U5EOvlWsn5tYcqfr4fuQl~ z^7QBF`R_B-|KjoW@nP`*;(mU=4nznP4ktkM=lwN{zA{&oh0>e%ZfCd3s{-^Ey}S7x z*!K3KC>l+H>X@Ay`=)DkyLPu@ciL84G9}rT1yc|$QL-hdVB6h|pin3VN;YLMiMlB0 zf?x=|!MF4lJ7t@ClQr3E>$+()mlHxC(ek(k(64Q`WlI)KQL-dx%o!YS@c?IWtj+>p z^Z5d3Ipr;|%Cu)~SU{f1(o7OQt>yITmq;eMME9a8hQ(jQ0`T)?8E`l@(Q>V~ z-(H*4&a|_NTCGlNC9OhgOm0N|9+BT)3O|O$mB;PgTCem@9QY=}FgJ#|aNOf?cyZhf t0|6NAbb0|;7*IMDzA diff --git a/src/main/resources/assets/refinedstorage/textures/blocks/fluid_destructor.png b/src/main/resources/assets/refinedstorage/textures/blocks/fluid_destructor.png deleted file mode 100755 index 545ff282d084ef7983e014bb544714b627ba374a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 638 zcmV-^0)hRBP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02y>eSaefwW^{L9 za%BK;VQFr3E^cLXAT%y8E-^5z3JSmg00HhvL_t(IPmPgVZ=ygP#pm--M69~4HLWqO zx5d_yuFdYg^vhKWqR?OgalG{U)-SVVX3)1iK(o(HeoW5HoHPGpB${^BZ4Y}rz2Dc* z&quoc=lc3)G`hJM{=#~B`CI#OrD=M%uXnq{PUnIQ20uyh{fo5P8o|T)X7~1%yuR}1 zX9)K61Py^Lgm`)R474=TZ1$k|dcB8fyNxN`Jw5`l*@*QT@YO2WYZsRx2JwAfc3nAzv(55F}Bwrxd_;dfFn5Mkk#Rh9bM>LBM=J2}2-!pUvmY^Ag_| z4-e^t#&?o_2xPCOESDmR5Kf;!Y_Zs58w3EhN~K29DF{$1&?hT~dSbam7?tu?$fFo+ zwR(e`oHU_!l*Xu=J&(817%S@KLvmoNBT%l^(g~g?=JWq+e19LiuJAkt;W!C?hUdXn zDjkt(wGI_eCVVy%j>D%@X4`*FGd-D3W6R>U%_b87Te*BpRP`HF;yCc-4%~47pJm0S z$#G(u05(ObkYW+vJ4awP12KF^+IE_>tPjIrh7pg)AGf!#6$*zWt(E=l%yj{G-87SR zi0|&;W8*P5jNGHDN1v6xNI^a%lB7yfQI<=ELRpqo3 Date: Sun, 14 Aug 2016 01:20:31 +0200 Subject: [PATCH 182/214] Fix slot issues --- .../container/ContainerBase.java | 28 ++++++++++++++----- .../container/slot/SlotSpecimen.java | 2 +- .../container/slot/SlotSpecimenFluid.java | 25 +++++++++++------ .../container/slot/SlotSpecimenType.java | 4 +++ 4 files changed, 43 insertions(+), 16 deletions(-) diff --git a/src/main/java/refinedstorage/container/ContainerBase.java b/src/main/java/refinedstorage/container/ContainerBase.java index 3a9cf64ad..6e6953cd2 100755 --- a/src/main/java/refinedstorage/container/ContainerBase.java +++ b/src/main/java/refinedstorage/container/ContainerBase.java @@ -7,9 +7,7 @@ import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; import net.minecraftforge.items.ItemHandlerHelper; import refinedstorage.api.storage.CompareUtils; -import refinedstorage.container.slot.SlotDisabled; -import refinedstorage.container.slot.SlotSpecimen; -import refinedstorage.container.slot.SlotSpecimenLegacy; +import refinedstorage.container.slot.*; import refinedstorage.tile.TileBase; import refinedstorage.tile.grid.WirelessGrid; @@ -109,15 +107,17 @@ public abstract class ContainerBase extends Container { protected ItemStack mergeItemStackToSpecimen(ItemStack stack, int begin, int end) { for (int i = begin; i < end; ++i) { - if (CompareUtils.compareStackNoQuantity(getSlot(i).getStack(), stack)) { + if (CompareUtils.compareStackNoQuantity(getStackFromSlot(getSlot(i)), stack)) { return null; } } for (int i = begin; i < end; ++i) { - if (!getSlot(i).getHasStack() && getSlot(i).isItemValid(stack)) { - getSlot(i).putStack(ItemHandlerHelper.copyStackWithSize(stack, 1)); - getSlot(i).onSlotChanged(); + Slot slot = getSlot(i); + + if (getStackFromSlot(slot) == null && slot.isItemValid(stack)) { + slot.putStack(ItemHandlerHelper.copyStackWithSize(stack, 1)); + slot.onSlotChanged(); return null; } @@ -126,6 +126,20 @@ public abstract class ContainerBase extends Container { return null; } + private ItemStack getStackFromSlot(Slot slot) { + ItemStack stackInSlot = slot.getStack(); + + if (stackInSlot == null) { + if (slot instanceof SlotSpecimenFluid) { + stackInSlot = ((SlotSpecimenFluid) slot).getRealStack(); + } else if (slot instanceof SlotSpecimenType) { + stackInSlot = ((SlotSpecimenType) slot).getRealStack(); + } + } + + return stackInSlot; + } + @Override public boolean canInteractWith(EntityPlayer player) { return true; diff --git a/src/main/java/refinedstorage/container/slot/SlotSpecimen.java b/src/main/java/refinedstorage/container/slot/SlotSpecimen.java index 9d4930a92..c96aaedf0 100755 --- a/src/main/java/refinedstorage/container/slot/SlotSpecimen.java +++ b/src/main/java/refinedstorage/container/slot/SlotSpecimen.java @@ -38,7 +38,7 @@ public class SlotSpecimen extends SlotItemHandler { @Override public boolean isItemValid(ItemStack stack) { - return isBlockOnly() ? (stack.getItem() instanceof ItemBlock || stack.getItem() instanceof ItemBlockSpecial || stack.getItem() instanceof IPlantable) : true; + return super.isItemValid(stack) && (isBlockOnly() ? (stack.getItem() instanceof ItemBlock || stack.getItem() instanceof ItemBlockSpecial || stack.getItem() instanceof IPlantable) : true); } @Override diff --git a/src/main/java/refinedstorage/container/slot/SlotSpecimenFluid.java b/src/main/java/refinedstorage/container/slot/SlotSpecimenFluid.java index c319c700c..fb3917535 100755 --- a/src/main/java/refinedstorage/container/slot/SlotSpecimenFluid.java +++ b/src/main/java/refinedstorage/container/slot/SlotSpecimenFluid.java @@ -1,14 +1,23 @@ package refinedstorage.container.slot; +import net.minecraft.item.ItemStack; import net.minecraftforge.items.IItemHandler; -import net.minecraftforge.items.SlotItemHandler; -/** - * Created by Raoul on 13/08/2016. - */ -// @TODO: REMOVAL -public class SlotSpecimenFluid extends SlotItemHandler { - public SlotSpecimenFluid(boolean b, IItemHandler filters, int i, int i1, int i2) { - super(filters, i, i1, i2); +public class SlotSpecimenFluid extends SlotSpecimen { + private boolean server; + + public SlotSpecimenFluid(boolean server, IItemHandler handler, int id, int x, int y) { + super(handler, id, x, y); + + this.server = server; + } + + @Override + public ItemStack getStack() { + return server ? super.getStack() : null; + } + + public ItemStack getRealStack() { + return super.getStack(); } } \ No newline at end of file diff --git a/src/main/java/refinedstorage/container/slot/SlotSpecimenType.java b/src/main/java/refinedstorage/container/slot/SlotSpecimenType.java index 1111fd026..a0a20cb62 100755 --- a/src/main/java/refinedstorage/container/slot/SlotSpecimenType.java +++ b/src/main/java/refinedstorage/container/slot/SlotSpecimenType.java @@ -37,4 +37,8 @@ public class SlotSpecimenType extends SlotSpecimen { public ItemStack getStack() { return (type.getType() == IType.ITEMS || !((TileEntity) type).getWorld().isRemote) ? super.getStack() : null; } + + public ItemStack getRealStack() { + return super.getStack(); + } } From eb04cf584c1cf1ed3ce07cac22cd83ce01ca0e07 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sun, 14 Aug 2016 01:51:32 +0200 Subject: [PATCH 183/214] Update changelog from 0.8.19 --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 35e043950..9a5bd363b 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,8 @@ **Bugfixes** - Fixed item duplication bug with External Storage - Fixed External Storage taking too long to update storage +- Fixed crash with Grid +- Fixed crash when shift clicking unsupported item in a slot ### 0.8.18 **Bugfixes** From 27334da37757209a891b12adc5c376d67f1356ee Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sun, 14 Aug 2016 01:52:09 +0200 Subject: [PATCH 184/214] Backport fix from 0.8.19 --- src/main/java/refinedstorage/gui/grid/GuiGrid.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/refinedstorage/gui/grid/GuiGrid.java b/src/main/java/refinedstorage/gui/grid/GuiGrid.java index f0e8c1b5d..eea5f1c57 100755 --- a/src/main/java/refinedstorage/gui/grid/GuiGrid.java +++ b/src/main/java/refinedstorage/gui/grid/GuiGrid.java @@ -108,7 +108,7 @@ public class GuiGrid extends GuiBase { List stacks = new ArrayList<>(); if (grid.isConnected()) { - stacks.addAll(grid.getType() == EnumGridType.FLUID ? FLUIDS.values() : ITEMS.values()); + stacks.addAll(grid.getType() == EnumGridType.FLUID ? new ArrayList<>(FLUIDS.values()) : new ArrayList<>(ITEMS.values())); String query = searchField.getText().trim().toLowerCase(); From 2fafe4930e54434441f7a19e7f3a749270e918a6 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sun, 14 Aug 2016 04:11:32 +0200 Subject: [PATCH 185/214] Fluid mode in exporter --- .../container/ContainerExporter.java | 4 +- .../java/refinedstorage/gui/GuiExporter.java | 3 + .../refinedstorage/tile/TileExporter.java | 99 ++++++++++++++----- 3 files changed, 81 insertions(+), 25 deletions(-) diff --git a/src/main/java/refinedstorage/container/ContainerExporter.java b/src/main/java/refinedstorage/container/ContainerExporter.java index a413e9985..c3b29a4f5 100755 --- a/src/main/java/refinedstorage/container/ContainerExporter.java +++ b/src/main/java/refinedstorage/container/ContainerExporter.java @@ -4,7 +4,7 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; import net.minecraftforge.items.SlotItemHandler; -import refinedstorage.container.slot.SlotSpecimen; +import refinedstorage.container.slot.SlotSpecimenType; import refinedstorage.tile.TileExporter; public class ContainerExporter extends ContainerBase { @@ -16,7 +16,7 @@ public class ContainerExporter extends ContainerBase { } for (int i = 0; i < 9; ++i) { - addSlotToContainer(new SlotSpecimen(exporter.getFilters(), i, 8 + (18 * i), 20)); + addSlotToContainer(new SlotSpecimenType(exporter, i, 8 + (18 * i), 20)); } addPlayerInventory(8, 55); diff --git a/src/main/java/refinedstorage/gui/GuiExporter.java b/src/main/java/refinedstorage/gui/GuiExporter.java index 387f8b612..edef72ec0 100755 --- a/src/main/java/refinedstorage/gui/GuiExporter.java +++ b/src/main/java/refinedstorage/gui/GuiExporter.java @@ -4,6 +4,7 @@ import refinedstorage.api.storage.CompareUtils; import refinedstorage.container.ContainerExporter; import refinedstorage.gui.sidebutton.SideButtonCompare; import refinedstorage.gui.sidebutton.SideButtonRedstoneMode; +import refinedstorage.gui.sidebutton.SideButtonType; import refinedstorage.tile.TileExporter; public class GuiExporter extends GuiBase { @@ -15,6 +16,8 @@ public class GuiExporter extends GuiBase { public void init(int x, int y) { addSideButton(new SideButtonRedstoneMode(TileExporter.REDSTONE_MODE)); + addSideButton(new SideButtonType(TileExporter.TYPE)); + addSideButton(new SideButtonCompare(TileExporter.COMPARE, CompareUtils.COMPARE_DAMAGE)); addSideButton(new SideButtonCompare(TileExporter.COMPARE, CompareUtils.COMPARE_NBT)); } diff --git a/src/main/java/refinedstorage/tile/TileExporter.java b/src/main/java/refinedstorage/tile/TileExporter.java index 9b83d7e52..e5ac6209b 100755 --- a/src/main/java/refinedstorage/tile/TileExporter.java +++ b/src/main/java/refinedstorage/tile/TileExporter.java @@ -5,31 +5,42 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.capability.IFluidHandler; import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.ItemHandlerHelper; import refinedstorage.RefinedStorage; import refinedstorage.apiimpl.autocrafting.CraftingTaskScheduler; import refinedstorage.inventory.ItemHandlerBasic; +import refinedstorage.inventory.ItemHandlerFluid; import refinedstorage.inventory.ItemHandlerUpgrade; import refinedstorage.item.ItemUpgrade; import refinedstorage.tile.config.IComparable; +import refinedstorage.tile.config.IType; import refinedstorage.tile.data.TileDataParameter; -public class TileExporter extends TileMultipartNode implements IComparable { +public class TileExporter extends TileMultipartNode implements IComparable, IType { public static final TileDataParameter COMPARE = IComparable.createParameter(); + public static final TileDataParameter TYPE = IType.createParameter(); private static final String NBT_COMPARE = "Compare"; + private static final String NBT_TYPE = "Type"; + + private ItemHandlerBasic itemFilters = new ItemHandlerBasic(9, this); + private ItemHandlerFluid fluidFilters = new ItemHandlerFluid(9, this); - private ItemHandlerBasic filters = new ItemHandlerBasic(9, this); private ItemHandlerUpgrade upgrades = new ItemHandlerUpgrade(4, this, ItemUpgrade.TYPE_SPEED, ItemUpgrade.TYPE_CRAFTING, ItemUpgrade.TYPE_STACK); private int compare = 0; + private int type = IType.ITEMS; private CraftingTaskScheduler scheduler = new CraftingTaskScheduler(this); public TileExporter() { dataManager.addWatchedParameter(COMPARE); + dataManager.addWatchedParameter(TYPE); } @Override @@ -44,28 +55,50 @@ public class TileExporter extends TileMultipartNode implements IComparable { @Override public void updateNode() { - IItemHandler handler = getItemHandler(getFacingTile(), getDirection().getOpposite()); + if (ticks % upgrades.getSpeed() == 0) { + if (type == IType.ITEMS) { + IItemHandler handler = getItemHandler(getFacingTile(), getDirection().getOpposite()); - int size = upgrades.hasUpgrade(ItemUpgrade.TYPE_STACK) ? 64 : 1; + int size = upgrades.hasUpgrade(ItemUpgrade.TYPE_STACK) ? 64 : 1; - if (handler != null && ticks % upgrades.getSpeed() == 0) { - for (int i = 0; i < filters.getSlots(); ++i) { - ItemStack slot = filters.getStackInSlot(i); + if (handler != null) { + for (int i = 0; i < itemFilters.getSlots(); ++i) { + ItemStack slot = itemFilters.getStackInSlot(i); - if (slot != null) { - ItemStack took = network.extractItem(slot, size, compare); + if (slot != null) { + ItemStack took = network.extractItem(slot, size, compare); - if (took != null) { - scheduler.resetSchedule(); + if (took != null) { + scheduler.resetSchedule(); - ItemStack remainder = ItemHandlerHelper.insertItem(handler, took, false); + ItemStack remainder = ItemHandlerHelper.insertItem(handler, took, false); - if (remainder != null) { - network.insertItem(remainder, remainder.stackSize, false); + if (remainder != null) { + network.insertItem(remainder, remainder.stackSize, false); + } + } else if (upgrades.hasUpgrade(ItemUpgrade.TYPE_CRAFTING)) { + if (scheduler.canSchedule(compare, slot)) { + scheduler.schedule(network, compare, slot); + } + } } - } else if (upgrades.hasUpgrade(ItemUpgrade.TYPE_CRAFTING)) { - if (scheduler.canSchedule(compare, slot)) { - scheduler.schedule(network, compare, slot); + } + } + } else if (type == IType.FLUIDS) { + IFluidHandler handler = getFluidHandler(getFacingTile(), getDirection().getOpposite()); + + if (handler != null) { + for (FluidStack stack : fluidFilters.getFluids()) { + if (stack != null) { + FluidStack took = network.extractFluid(stack, Fluid.BUCKET_VOLUME, compare); + + if (took != null) { + int remainder = Fluid.BUCKET_VOLUME - handler.fill(took, true); + + if (remainder > 0) { + network.insertFluid(took, remainder, false); + } + } } } } @@ -93,8 +126,13 @@ public class TileExporter extends TileMultipartNode implements IComparable { compare = tag.getInteger(NBT_COMPARE); } - readItems(filters, 0, tag); + if (tag.hasKey(NBT_TYPE)) { + type = tag.getInteger(NBT_TYPE); + } + + readItems(itemFilters, 0, tag); readItems(upgrades, 1, tag); + readItems(fluidFilters, 2, tag); scheduler.read(tag); } @@ -104,19 +142,17 @@ public class TileExporter extends TileMultipartNode implements IComparable { super.write(tag); tag.setInteger(NBT_COMPARE, compare); + tag.setInteger(NBT_TYPE, type); - writeItems(filters, 0, tag); + writeItems(itemFilters, 0, tag); writeItems(upgrades, 1, tag); + writeItems(fluidFilters, 2, tag); scheduler.writeToNBT(tag); return tag; } - public IItemHandler getFilters() { - return filters; - } - public IItemHandler getUpgrades() { return upgrades; } @@ -126,6 +162,23 @@ public class TileExporter extends TileMultipartNode implements IComparable { return upgrades; } + @Override + public int getType() { + return worldObj.isRemote ? TYPE.getValue() : type; + } + + @Override + public void setType(int type) { + this.type = type; + + markDirty(); + } + + @Override + public IItemHandler getFilterInventory() { + return getType() == IType.ITEMS ? itemFilters : fluidFilters; + } + @Override public T getCapability(Capability capability, EnumFacing facing) { if (capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) { From b6de32a8fbab3b5895d2d278d0b7586ee5590e8a Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sun, 14 Aug 2016 04:28:34 +0200 Subject: [PATCH 186/214] Fluid Detector --- .../container/ContainerDetector.java | 4 +- .../java/refinedstorage/gui/GuiDetector.java | 7 +- .../refinedstorage/tile/TileDetector.java | 105 +++++++++++++----- 3 files changed, 83 insertions(+), 33 deletions(-) diff --git a/src/main/java/refinedstorage/container/ContainerDetector.java b/src/main/java/refinedstorage/container/ContainerDetector.java index a8059bd2c..555131202 100755 --- a/src/main/java/refinedstorage/container/ContainerDetector.java +++ b/src/main/java/refinedstorage/container/ContainerDetector.java @@ -3,14 +3,14 @@ package refinedstorage.container; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; -import refinedstorage.container.slot.SlotSpecimen; +import refinedstorage.container.slot.SlotSpecimenType; import refinedstorage.tile.TileDetector; public class ContainerDetector extends ContainerBase { public ContainerDetector(TileDetector detector, EntityPlayer player) { super(detector, player); - addSlotToContainer(new SlotSpecimen(detector.getInventory(), 0, 107, 20)); + addSlotToContainer(new SlotSpecimenType(detector, 0, 107, 20)); addPlayerInventory(8, 55); } diff --git a/src/main/java/refinedstorage/gui/GuiDetector.java b/src/main/java/refinedstorage/gui/GuiDetector.java index 230fa761c..5bc5048dd 100755 --- a/src/main/java/refinedstorage/gui/GuiDetector.java +++ b/src/main/java/refinedstorage/gui/GuiDetector.java @@ -6,6 +6,7 @@ import refinedstorage.api.storage.CompareUtils; import refinedstorage.container.ContainerDetector; import refinedstorage.gui.sidebutton.SideButtonCompare; import refinedstorage.gui.sidebutton.SideButtonDetectorMode; +import refinedstorage.gui.sidebutton.SideButtonType; import refinedstorage.tile.TileDetector; import refinedstorage.tile.data.TileDataManager; @@ -20,11 +21,13 @@ public class GuiDetector extends GuiBase { @Override public void init(int x, int y) { - addSideButton(new SideButtonCompare(TileDetector.COMPARE, CompareUtils.COMPARE_DAMAGE)); - addSideButton(new SideButtonCompare(TileDetector.COMPARE, CompareUtils.COMPARE_NBT)); + addSideButton(new SideButtonType(TileDetector.TYPE)); addSideButton(new SideButtonDetectorMode()); + addSideButton(new SideButtonCompare(TileDetector.COMPARE, CompareUtils.COMPARE_DAMAGE)); + addSideButton(new SideButtonCompare(TileDetector.COMPARE, CompareUtils.COMPARE_NBT)); + AMOUNT = new GuiTextField(0, fontRendererObj, x + 62 + 1, y + 23 + 1, 25, fontRendererObj.FONT_HEIGHT); AMOUNT.setText(String.valueOf(TileDetector.AMOUNT.getValue())); AMOUNT.setEnableBackgroundDrawing(false); diff --git a/src/main/java/refinedstorage/tile/TileDetector.java b/src/main/java/refinedstorage/tile/TileDetector.java index b60234436..b7b903b5c 100755 --- a/src/main/java/refinedstorage/tile/TileDetector.java +++ b/src/main/java/refinedstorage/tile/TileDetector.java @@ -5,6 +5,7 @@ import net.minecraft.client.gui.GuiScreen; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.network.datasync.DataSerializers; +import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fml.common.FMLCommonHandler; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.items.IItemHandler; @@ -13,14 +14,17 @@ import refinedstorage.RefinedStorageBlocks; import refinedstorage.api.network.INetworkMaster; import refinedstorage.gui.GuiDetector; import refinedstorage.inventory.ItemHandlerBasic; +import refinedstorage.inventory.ItemHandlerFluid; import refinedstorage.tile.config.IComparable; +import refinedstorage.tile.config.IType; import refinedstorage.tile.config.RedstoneMode; import refinedstorage.tile.data.ITileDataConsumer; import refinedstorage.tile.data.ITileDataProducer; import refinedstorage.tile.data.TileDataParameter; -public class TileDetector extends TileNode implements IComparable { +public class TileDetector extends TileNode implements IComparable, IType { public static final TileDataParameter COMPARE = IComparable.createParameter(); + public static final TileDataParameter TYPE = IType.createParameter(); public static final TileDataParameter MODE = new TileDataParameter<>(DataSerializers.VARINT, 0, new ITileDataProducer() { @Override @@ -70,10 +74,13 @@ public class TileDetector extends TileNode implements IComparable { private static final String NBT_MODE = "Mode"; private static final String NBT_AMOUNT = "Amount"; private static final String NBT_POWERED = "Powered"; + private static final String NBT_TYPE = "Type"; - private ItemHandlerBasic filter = new ItemHandlerBasic(1, this); + private ItemHandlerBasic itemFilters = new ItemHandlerBasic(1, this); + private ItemHandlerFluid fluidFilters = new ItemHandlerFluid(1, this); private int compare = 0; + private int type = IType.ITEMS; private int mode = MODE_EQUAL; private int amount = 0; @@ -82,6 +89,7 @@ public class TileDetector extends TileNode implements IComparable { public TileDetector() { dataManager.addWatchedParameter(COMPARE); + dataManager.addWatchedParameter(TYPE); dataManager.addWatchedParameter(MODE); dataManager.addWatchedParameter(AMOUNT); } @@ -94,34 +102,26 @@ public class TileDetector extends TileNode implements IComparable { @Override public void updateNode() { if (ticks % SPEED == 0) { - ItemStack slot = filter.getStackInSlot(0); + if (type == IType.ITEMS) { + ItemStack slot = itemFilters.getStackInSlot(0); - if (slot != null) { - ItemStack stack = network.getItemStorage().get(slot, compare); + if (slot != null) { + ItemStack stack = network.getItemStorage().get(slot, compare); - if (stack != null) { - switch (mode) { - case MODE_UNDER: - powered = stack.stackSize < amount; - break; - case MODE_EQUAL: - powered = stack.stackSize == amount; - break; - case MODE_ABOVE: - powered = stack.stackSize > amount; - break; - } + powered = isPowered(stack == null ? null : stack.stackSize); } else { - if (mode == MODE_UNDER && amount != 0) { - powered = true; - } else if (mode == MODE_EQUAL && amount == 0) { - powered = true; - } else { - powered = false; - } + powered = false; + } + } else if (type == IType.FLUIDS) { + FluidStack slot = fluidFilters.getFluids()[0]; + + if (slot != null) { + FluidStack stack = network.getFluidStorage().get(slot, compare); + + powered = isPowered(stack == null ? null : stack.amount); + } else { + powered = false; } - } else { - powered = false; } } } @@ -152,6 +152,29 @@ public class TileDetector extends TileNode implements IComparable { return powered; } + public boolean isPowered(Integer size) { + if (size != null) { + switch (mode) { + case MODE_UNDER: + return size < amount; + case MODE_EQUAL: + return size == amount; + case MODE_ABOVE: + return size > amount; + } + } else { + if (mode == MODE_UNDER && amount != 0) { + return true; + } else if (mode == MODE_EQUAL && amount == 0) { + return true; + } else { + return false; + } + } + + return false; + } + @Override public int getCompare() { return compare; @@ -180,7 +203,12 @@ public class TileDetector extends TileNode implements IComparable { amount = tag.getInteger(NBT_AMOUNT); } - readItems(filter, 0, tag); + if (tag.hasKey(NBT_TYPE)) { + type = tag.getInteger(NBT_TYPE); + } + + readItems(itemFilters, 0, tag); + readItems(fluidFilters, 1, tag); } @Override @@ -190,8 +218,10 @@ public class TileDetector extends TileNode implements IComparable { tag.setInteger(NBT_COMPARE, compare); tag.setInteger(NBT_MODE, mode); tag.setInteger(NBT_AMOUNT, amount); + tag.setInteger(NBT_TYPE, type); - writeItems(filter, 0, tag); + writeItems(itemFilters, 0, tag); + writeItems(fluidFilters, 1, tag); return tag; } @@ -213,11 +243,28 @@ public class TileDetector extends TileNode implements IComparable { } public IItemHandler getInventory() { - return filter; + return itemFilters; } @Override public void setRedstoneMode(RedstoneMode mode) { // NO OP } + + @Override + public int getType() { + return worldObj.isRemote ? TYPE.getValue() : type; + } + + @Override + public void setType(int type) { + this.type = type; + + markDirty(); + } + + @Override + public IItemHandler getFilterInventory() { + return getType() == IType.ITEMS ? itemFilters : fluidFilters; + } } From 8db790ade1029482708295916c6d023926151905 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sun, 14 Aug 2016 14:54:01 +0200 Subject: [PATCH 187/214] Simple fluid interface block & gui --- .../refinedstorage/RefinedStorageBlocks.java | 1 + .../refinedstorage/RefinedStorageGui.java | 1 + .../block/BlockFluidInterface.java | 43 +++++++ .../container/ContainerFluidInterface.java | 20 ++++ .../refinedstorage/gui/GuiFluidInterface.java | 35 ++++++ .../java/refinedstorage/gui/GuiHandler.java | 4 + .../refinedstorage/proxy/CommonProxy.java | 11 ++ .../tile/TileFluidInterface.java | 106 ++++++++++++++++++ .../assets/refinedstorage/lang/en_US.lang | 4 + 9 files changed, 225 insertions(+) create mode 100755 src/main/java/refinedstorage/block/BlockFluidInterface.java create mode 100755 src/main/java/refinedstorage/container/ContainerFluidInterface.java create mode 100755 src/main/java/refinedstorage/gui/GuiFluidInterface.java create mode 100755 src/main/java/refinedstorage/tile/TileFluidInterface.java diff --git a/src/main/java/refinedstorage/RefinedStorageBlocks.java b/src/main/java/refinedstorage/RefinedStorageBlocks.java index 44bfb25e2..57e502b9c 100755 --- a/src/main/java/refinedstorage/RefinedStorageBlocks.java +++ b/src/main/java/refinedstorage/RefinedStorageBlocks.java @@ -25,4 +25,5 @@ public final class RefinedStorageBlocks { public static final BlockNetworkTransmitter NETWORK_TRANSMITTER = new BlockNetworkTransmitter(); public static final BlockNetworkReceiver NETWORK_RECEIVER = new BlockNetworkReceiver(); public static final BlockFluidDiskDrive FLUID_DISK_DRIVE = new BlockFluidDiskDrive(); + public static final BlockFluidInterface FLUID_INTERFACE = new BlockFluidInterface(); } \ No newline at end of file diff --git a/src/main/java/refinedstorage/RefinedStorageGui.java b/src/main/java/refinedstorage/RefinedStorageGui.java index 4ff36a937..66cb97da5 100755 --- a/src/main/java/refinedstorage/RefinedStorageGui.java +++ b/src/main/java/refinedstorage/RefinedStorageGui.java @@ -21,4 +21,5 @@ public final class RefinedStorageGui { public static final int GRID_FILTER = 17; public static final int NETWORK_TRANSMITTER = 18; public static final int FLUID_DISK_DRIVE = 19; + public static final int FLUID_INTERFACE = 20; } diff --git a/src/main/java/refinedstorage/block/BlockFluidInterface.java b/src/main/java/refinedstorage/block/BlockFluidInterface.java new file mode 100755 index 000000000..e7be93f32 --- /dev/null +++ b/src/main/java/refinedstorage/block/BlockFluidInterface.java @@ -0,0 +1,43 @@ +package refinedstorage.block; + +import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import refinedstorage.RefinedStorage; +import refinedstorage.RefinedStorageGui; +import refinedstorage.tile.TileFluidInterface; + +public class BlockFluidInterface extends BlockNode { + public BlockFluidInterface() { + super("fluid_interface"); + } + + @Override + public TileEntity createTileEntity(World world, IBlockState state) { + return new TileFluidInterface(); + } + + @Override + public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) { + if (!world.isRemote) { + player.openGui(RefinedStorage.INSTANCE, RefinedStorageGui.FLUID_INTERFACE, world, pos.getX(), pos.getY(), pos.getZ()); + } + + return true; + } + + @Override + public boolean hasConnectivityState() { + return true; + } + + @Override + public EnumPlacementType getPlacementType() { + return null; + } +} diff --git a/src/main/java/refinedstorage/container/ContainerFluidInterface.java b/src/main/java/refinedstorage/container/ContainerFluidInterface.java new file mode 100755 index 000000000..38fbd6a3a --- /dev/null +++ b/src/main/java/refinedstorage/container/ContainerFluidInterface.java @@ -0,0 +1,20 @@ +package refinedstorage.container; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraftforge.items.SlotItemHandler; +import refinedstorage.tile.TileFluidInterface; + +public class ContainerFluidInterface extends ContainerBase { + public ContainerFluidInterface(TileFluidInterface fluidInterface, EntityPlayer player) { + super(fluidInterface, player); + + for (int i = 0; i < 4; ++i) { + addSlotToContainer(new SlotItemHandler(fluidInterface.getUpgrades(), i, 187, 6 + (i * 18))); + } + + addSlotToContainer(new SlotItemHandler(fluidInterface.getBuckets(), 0, 44, 32)); + addSlotToContainer(new SlotItemHandler(fluidInterface.getBuckets(), 1, 116, 32)); + + addPlayerInventory(8, 122); + } +} diff --git a/src/main/java/refinedstorage/gui/GuiFluidInterface.java b/src/main/java/refinedstorage/gui/GuiFluidInterface.java new file mode 100755 index 000000000..4a3715574 --- /dev/null +++ b/src/main/java/refinedstorage/gui/GuiFluidInterface.java @@ -0,0 +1,35 @@ +package refinedstorage.gui; + +import refinedstorage.container.ContainerFluidInterface; +import refinedstorage.gui.sidebutton.SideButtonRedstoneMode; +import refinedstorage.tile.TileFluidInterface; + +public class GuiFluidInterface extends GuiBase { + public GuiFluidInterface(ContainerFluidInterface container) { + super(container, 211, 204); + } + + @Override + public void init(int x, int y) { + addSideButton(new SideButtonRedstoneMode(TileFluidInterface.REDSTONE_MODE)); + } + + @Override + public void update(int x, int y) { + } + + @Override + public void drawBackground(int x, int y, int mouseX, int mouseY) { + bindTexture("gui/fluid_interface.png"); + + drawTexture(x, y, 0, 0, width, height); + } + + @Override + public void drawForeground(int mouseX, int mouseY) { + drawString(7, 7, t("gui.refinedstorage:fluid_interface")); + drawString(43 + 4, 20, t("gui.refinedstorage:fluid_interface.in")); + drawString(115 + 1, 20, t("gui.refinedstorage:fluid_interface.out")); + drawString(7, 111, t("container.inventory")); + } +} diff --git a/src/main/java/refinedstorage/gui/GuiHandler.java b/src/main/java/refinedstorage/gui/GuiHandler.java index 9ffe9f67e..812811bba 100755 --- a/src/main/java/refinedstorage/gui/GuiHandler.java +++ b/src/main/java/refinedstorage/gui/GuiHandler.java @@ -53,6 +53,8 @@ public class GuiHandler implements IGuiHandler { return new ContainerNetworkTransmitter((TileNetworkTransmitter) tile, player); case RefinedStorageGui.FLUID_DISK_DRIVE: return new ContainerFluidDiskDrive((TileFluidDiskDrive) tile, player); + case RefinedStorageGui.FLUID_INTERFACE: + return new ContainerFluidInterface((TileFluidInterface) tile, player); default: return null; } @@ -126,6 +128,8 @@ public class GuiHandler implements IGuiHandler { return new GuiNetworkTransmitter((ContainerNetworkTransmitter) getContainer(ID, player, tile), (TileNetworkTransmitter) tile); case RefinedStorageGui.FLUID_DISK_DRIVE: return new GuiStorage((ContainerFluidDiskDrive) getContainer(ID, player, tile), (IStorageGui) tile, "gui/disk_drive.png"); + case RefinedStorageGui.FLUID_INTERFACE: + return new GuiFluidInterface((ContainerFluidInterface) getContainer(ID, player, tile)); default: return null; } diff --git a/src/main/java/refinedstorage/proxy/CommonProxy.java b/src/main/java/refinedstorage/proxy/CommonProxy.java index 3a706bcea..2b2353c15 100755 --- a/src/main/java/refinedstorage/proxy/CommonProxy.java +++ b/src/main/java/refinedstorage/proxy/CommonProxy.java @@ -86,6 +86,7 @@ public class CommonProxy { registerTile(TileNetworkReceiver.class, "network_receiver"); registerTile(TileNetworkTransmitter.class, "network_transmitter"); registerTile(TileFluidDiskDrive.class, "fluid_disk_drive"); + registerTile(TileFluidInterface.class, "fluid_interface"); registerBlock(RefinedStorageBlocks.CONTROLLER); registerBlock(RefinedStorageBlocks.GRID); @@ -109,6 +110,7 @@ public class CommonProxy { registerBlock(RefinedStorageBlocks.NETWORK_TRANSMITTER); registerBlock(RefinedStorageBlocks.NETWORK_RECEIVER); registerBlock(RefinedStorageBlocks.FLUID_DISK_DRIVE); + registerBlock(RefinedStorageBlocks.FLUID_INTERFACE); registerItem(RefinedStorageItems.QUARTZ_ENRICHED_IRON); registerItem(RefinedStorageItems.STORAGE_DISK); @@ -561,6 +563,15 @@ public class CommonProxy { new ItemStack(RefinedStorageBlocks.EXPORTER) )); + // Fluid Interface + RefinedStorageAPI.SOLDERER_REGISTRY.addRecipe(new SoldererRecipeBasic( + new ItemStack(RefinedStorageBlocks.FLUID_INTERFACE), + 200, + new ItemStack(Items.BUCKET), + new ItemStack(RefinedStorageBlocks.INTERFACE), + new ItemStack(Items.BUCKET) + )); + // Grid Filter GameRegistry.addShapedRecipe(new ItemStack(RefinedStorageItems.GRID_FILTER), "EPE", diff --git a/src/main/java/refinedstorage/tile/TileFluidInterface.java b/src/main/java/refinedstorage/tile/TileFluidInterface.java new file mode 100755 index 000000000..bcbf3d607 --- /dev/null +++ b/src/main/java/refinedstorage/tile/TileFluidInterface.java @@ -0,0 +1,106 @@ +package refinedstorage.tile; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.fluids.FluidTank; +import net.minecraftforge.fluids.capability.CapabilityFluidHandler; +import refinedstorage.inventory.ItemHandlerBasic; +import refinedstorage.inventory.ItemHandlerUpgrade; +import refinedstorage.item.ItemUpgrade; + +public class TileFluidInterface extends TileNode { + private static final String NBT_TANK_IN = "TankIn"; + private static final String NBT_TANK_OUT = "TankOut"; + + private FluidTank tankIn = new FluidTank(16000) { + @Override + protected void onContentsChanged() { + super.onContentsChanged(); + + markDirty(); + } + }; + + private FluidTank tankOut = new FluidTank(16000) { + @Override + protected void onContentsChanged() { + super.onContentsChanged(); + + markDirty(); + } + }; + + private ItemHandlerBasic buckets = new ItemHandlerBasic(2, this); + + private ItemHandlerUpgrade upgrades = new ItemHandlerUpgrade(4, this, ItemUpgrade.TYPE_SPEED); + + public TileFluidInterface() { + tankIn.setCanDrain(false); + tankIn.setCanFill(true); + + tankOut.setCanDrain(true); + tankOut.setCanFill(false); + } + + @Override + public NBTTagCompound write(NBTTagCompound tag) { + super.write(tag); + + writeItems(upgrades, 0, tag); + writeItems(buckets, 1, tag); + + tag.setTag(NBT_TANK_IN, tankIn.writeToNBT(new NBTTagCompound())); + tag.setTag(NBT_TANK_OUT, tankOut.writeToNBT(new NBTTagCompound())); + + return tag; + } + + @Override + public void read(NBTTagCompound tag) { + super.read(tag); + + readItems(upgrades, 0, tag); + readItems(buckets, 1, tag); + + if (tag.hasKey(NBT_TANK_IN)) { + tankIn.readFromNBT(tag.getCompoundTag(NBT_TANK_IN)); + } + + if (tag.hasKey(NBT_TANK_OUT)) { + tankOut.readFromNBT(tag.getCompoundTag(NBT_TANK_OUT)); + } + } + + public ItemHandlerUpgrade getUpgrades() { + return upgrades; + } + + public ItemHandlerBasic getBuckets() { + return buckets; + } + + @Override + public boolean hasCapability(Capability capability, EnumFacing facing) { + return capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY || super.hasCapability(capability, facing); + } + + @Override + public T getCapability(Capability capability, EnumFacing facing) { + if (capability == CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY) { + return facing == EnumFacing.DOWN ? (T) tankOut : (T) tankIn; + } + + return super.getCapability(capability, facing); + } + + @Override + public void updateNode() { + + } + + @Override + public int getEnergyUsage() { + return 0; // @TODO: x + } +} diff --git a/src/main/resources/assets/refinedstorage/lang/en_US.lang b/src/main/resources/assets/refinedstorage/lang/en_US.lang index a8c5292fc..002841704 100755 --- a/src/main/resources/assets/refinedstorage/lang/en_US.lang +++ b/src/main/resources/assets/refinedstorage/lang/en_US.lang @@ -40,6 +40,9 @@ gui.refinedstorage:network_transmitter.dimension=Dimension %d gui.refinedstorage:network_transmitter.missing_card=Missing Network Card gui.refinedstorage:network_transmitter.missing_upgrade=Insert upgrade gui.refinedstorage:fluid_disk_drive=Fluid Disk Drive +gui.refinedstorage:fluid_interface=Fluid Interface +gui.refinedstorage:fluid_interface.in=In +gui.refinedstorage:fluid_interface.out=Out misc.refinedstorage:energy_stored=%d / %d RS misc.refinedstorage:energy_usage=Usage: %d RS/t @@ -132,6 +135,7 @@ block.refinedstorage:processing_pattern_encoder.name=Processing Pattern Encoder block.refinedstorage:network_receiver.name=Network Receiver block.refinedstorage:network_transmitter.name=Network Transmitter block.refinedstorage:fluid_disk_drive.name=Fluid Disk Drive +block.refinedstorage:fluid_interface.name=Fluid Interface item.refinedstorage:storage_disk.0.name=1k Storage Disk item.refinedstorage:storage_disk.1.name=4k Storage Disk From fd24960d8c2faa0603662cc2170fdfde1f33d62f Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sun, 14 Aug 2016 18:51:45 +0200 Subject: [PATCH 188/214] Fluid Interface Exporting --- .../java/refinedstorage/RefinedStorage.java | 2 + .../container/ContainerFluidInterface.java | 5 +- src/main/java/refinedstorage/gui/GuiBase.java | 27 ++--- .../refinedstorage/gui/GuiFluidInterface.java | 15 +++ .../tile/TileFluidInterface.java | 108 ++++++++++++++++-- .../tile/data/RefinedStorageSerializers.java | 30 +++++ 6 files changed, 158 insertions(+), 29 deletions(-) diff --git a/src/main/java/refinedstorage/RefinedStorage.java b/src/main/java/refinedstorage/RefinedStorage.java index 34a5f9d5b..70df829b6 100755 --- a/src/main/java/refinedstorage/RefinedStorage.java +++ b/src/main/java/refinedstorage/RefinedStorage.java @@ -58,6 +58,7 @@ public final class RefinedStorage { public int exporterUsage; public int importerUsage; public int interfaceUsage; + public int fluidInterfaceUsage; public int relayUsage; public int soldererUsage; public int storageUsage; @@ -105,6 +106,7 @@ public final class RefinedStorage { exporterUsage = config.getInt("exporter", "energy", 1, 0, Integer.MAX_VALUE, "The energy used by Exporters"); importerUsage = config.getInt("importer", "energy", 1, 0, Integer.MAX_VALUE, "The energy used by Importers"); interfaceUsage = config.getInt("interface", "energy", 3, 0, Integer.MAX_VALUE, "The energy used by Interfaces"); + fluidInterfaceUsage = config.getInt("fluidInterface", "energy", 3, 0, Integer.MAX_VALUE, "The energy used by Fluid Interfaces"); relayUsage = config.getInt("relay", "energy", 1, 0, Integer.MAX_VALUE, "The energy used by Relays"); soldererUsage = config.getInt("solderer", "energy", 3, 0, Integer.MAX_VALUE, "The energy used by Solderers"); storageUsage = config.getInt("storage", "energy", 1, 0, Integer.MAX_VALUE, "The energy used by Storage Blocks"); diff --git a/src/main/java/refinedstorage/container/ContainerFluidInterface.java b/src/main/java/refinedstorage/container/ContainerFluidInterface.java index 38fbd6a3a..244bf54da 100755 --- a/src/main/java/refinedstorage/container/ContainerFluidInterface.java +++ b/src/main/java/refinedstorage/container/ContainerFluidInterface.java @@ -2,6 +2,7 @@ package refinedstorage.container; import net.minecraft.entity.player.EntityPlayer; import net.minecraftforge.items.SlotItemHandler; +import refinedstorage.container.slot.SlotSpecimenFluid; import refinedstorage.tile.TileFluidInterface; public class ContainerFluidInterface extends ContainerBase { @@ -12,8 +13,8 @@ public class ContainerFluidInterface extends ContainerBase { addSlotToContainer(new SlotItemHandler(fluidInterface.getUpgrades(), i, 187, 6 + (i * 18))); } - addSlotToContainer(new SlotItemHandler(fluidInterface.getBuckets(), 0, 44, 32)); - addSlotToContainer(new SlotItemHandler(fluidInterface.getBuckets(), 1, 116, 32)); + addSlotToContainer(new SlotItemHandler(fluidInterface.getIn(), 0, 44, 32)); + addSlotToContainer(new SlotSpecimenFluid(!fluidInterface.getWorld().isRemote, fluidInterface.getOut(), 0, 116, 32)); addPlayerInventory(8, 122); } diff --git a/src/main/java/refinedstorage/gui/GuiBase.java b/src/main/java/refinedstorage/gui/GuiBase.java index f66f66511..091839e1a 100755 --- a/src/main/java/refinedstorage/gui/GuiBase.java +++ b/src/main/java/refinedstorage/gui/GuiBase.java @@ -4,7 +4,6 @@ import mezz.jei.gui.ingredients.FluidStackRenderer; import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.inventory.GuiContainer; import net.minecraft.client.renderer.GlStateManager; -import net.minecraft.client.renderer.RenderHelper; import net.minecraft.client.resources.I18n; import net.minecraft.inventory.Container; import net.minecraft.inventory.Slot; @@ -100,6 +99,18 @@ public abstract class GuiBase extends GuiContainer { drawBackground(guiLeft, guiTop, mouseX, mouseY); + for (int i = 0; i < inventorySlots.inventorySlots.size(); ++i) { + Slot slot = inventorySlots.inventorySlots.get(i); + + if (slot instanceof SlotItemHandler && ((SlotItemHandler) slot).getItemHandler() instanceof ItemHandlerFluid) { + FluidStack stack = ((ItemHandlerFluid) ((SlotItemHandler) slot).getItemHandler()).getFluids()[slot.getSlotIndex()]; + + if (stack != null) { + FLUID_RENDERER.draw(mc, guiLeft + slot.xDisplayPosition, guiTop + slot.yDisplayPosition, stack); + } + } + } + if (scrollbar != null) { GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F); @@ -126,20 +137,6 @@ public abstract class GuiBase extends GuiContainer { drawForeground(mouseX, mouseY); - RenderHelper.enableGUIStandardItemLighting(); - - for (int i = 0; i < inventorySlots.inventorySlots.size(); ++i) { - Slot slot = inventorySlots.inventorySlots.get(i); - - if (slot instanceof SlotItemHandler && ((SlotItemHandler) slot).getItemHandler() instanceof ItemHandlerFluid) { - FluidStack stack = ((ItemHandlerFluid) ((SlotItemHandler) slot).getItemHandler()).getFluids()[slot.getSlotIndex()]; - - if (stack != null) { - FLUID_RENDERER.draw(mc, slot.xDisplayPosition, slot.yDisplayPosition, stack); - } - } - } - if (sideButtonTooltip != null) { drawTooltip(mouseX, mouseY, sideButtonTooltip); } diff --git a/src/main/java/refinedstorage/gui/GuiFluidInterface.java b/src/main/java/refinedstorage/gui/GuiFluidInterface.java index 4a3715574..4a15b69aa 100755 --- a/src/main/java/refinedstorage/gui/GuiFluidInterface.java +++ b/src/main/java/refinedstorage/gui/GuiFluidInterface.java @@ -1,10 +1,15 @@ package refinedstorage.gui; +import mezz.jei.gui.ingredients.FluidStackRenderer; +import refinedstorage.api.storage.CompareUtils; import refinedstorage.container.ContainerFluidInterface; +import refinedstorage.gui.sidebutton.SideButtonCompare; import refinedstorage.gui.sidebutton.SideButtonRedstoneMode; import refinedstorage.tile.TileFluidInterface; public class GuiFluidInterface extends GuiBase { + private static final FluidStackRenderer TANK_IN_RENDERER = new FluidStackRenderer(TileFluidInterface.TANK_CAPACITY, true, 12, 47, null); + public GuiFluidInterface(ContainerFluidInterface container) { super(container, 211, 204); } @@ -12,6 +17,8 @@ public class GuiFluidInterface extends GuiBase { @Override public void init(int x, int y) { addSideButton(new SideButtonRedstoneMode(TileFluidInterface.REDSTONE_MODE)); + + addSideButton(new SideButtonCompare(TileFluidInterface.COMPARE, CompareUtils.COMPARE_NBT)); } @Override @@ -23,6 +30,14 @@ public class GuiFluidInterface extends GuiBase { bindTexture("gui/fluid_interface.png"); drawTexture(x, y, 0, 0, width, height); + + if (TileFluidInterface.TANK_IN.getValue() != null) { + TANK_IN_RENDERER.draw(mc, x + 46, y + 56, TileFluidInterface.TANK_IN.getValue()); + } + + if (TileFluidInterface.TANK_OUT.getValue() != null) { + TANK_IN_RENDERER.draw(mc, x + 118, y + 56, TileFluidInterface.TANK_OUT.getValue()); + } } @Override diff --git a/src/main/java/refinedstorage/tile/TileFluidInterface.java b/src/main/java/refinedstorage/tile/TileFluidInterface.java index bcbf3d607..67266764d 100755 --- a/src/main/java/refinedstorage/tile/TileFluidInterface.java +++ b/src/main/java/refinedstorage/tile/TileFluidInterface.java @@ -3,39 +3,81 @@ package refinedstorage.tile; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.FluidTank; import net.minecraftforge.fluids.capability.CapabilityFluidHandler; +import refinedstorage.RefinedStorage; import refinedstorage.inventory.ItemHandlerBasic; +import refinedstorage.inventory.ItemHandlerFluid; import refinedstorage.inventory.ItemHandlerUpgrade; import refinedstorage.item.ItemUpgrade; +import refinedstorage.tile.config.IComparable; +import refinedstorage.tile.data.ITileDataProducer; +import refinedstorage.tile.data.RefinedStorageSerializers; +import refinedstorage.tile.data.TileDataParameter; -public class TileFluidInterface extends TileNode { +public class TileFluidInterface extends TileNode implements IComparable { + public static final int TANK_CAPACITY = 16000; + + public static final TileDataParameter COMPARE = IComparable.createParameter(); + + public static final TileDataParameter TANK_IN = new TileDataParameter<>(RefinedStorageSerializers.FLUID_STACK_SERIALIZER, null, new ITileDataProducer() { + @Override + public FluidStack getValue(TileFluidInterface tile) { + return tile.tankIn.getFluid(); + } + }); + + public static final TileDataParameter TANK_OUT = new TileDataParameter<>(RefinedStorageSerializers.FLUID_STACK_SERIALIZER, null, new ITileDataProducer() { + @Override + public FluidStack getValue(TileFluidInterface tile) { + return tile.tankOut.getFluid(); + } + }); + + private static final String NBT_COMPARE = "Compare"; private static final String NBT_TANK_IN = "TankIn"; private static final String NBT_TANK_OUT = "TankOut"; - private FluidTank tankIn = new FluidTank(16000) { + private int compare = 0; + + private FluidTank tankIn = new FluidTank(TANK_CAPACITY) { @Override protected void onContentsChanged() { super.onContentsChanged(); + if (worldObj != null && !worldObj.isRemote) { + dataManager.sendParameterToWatchers(TANK_IN); + } + markDirty(); } }; - private FluidTank tankOut = new FluidTank(16000) { + private FluidTank tankOut = new FluidTank(TANK_CAPACITY) { @Override protected void onContentsChanged() { super.onContentsChanged(); + if (worldObj != null && !worldObj.isRemote) { + dataManager.sendParameterToWatchers(TANK_OUT); + } + markDirty(); } }; - private ItemHandlerBasic buckets = new ItemHandlerBasic(2, this); + private ItemHandlerBasic in = new ItemHandlerBasic(1, this); + private ItemHandlerFluid out = new ItemHandlerFluid(1, this); private ItemHandlerUpgrade upgrades = new ItemHandlerUpgrade(4, this, ItemUpgrade.TYPE_SPEED); public TileFluidInterface() { + dataManager.addWatchedParameter(COMPARE); + dataManager.addParameter(TANK_IN); + dataManager.addParameter(TANK_OUT); + tankIn.setCanDrain(false); tankIn.setCanFill(true); @@ -43,16 +85,49 @@ public class TileFluidInterface extends TileNode { tankOut.setCanFill(false); } + @Override + public void updateNode() { + if (ticks % upgrades.getSpeed() == 0) { + FluidStack stack = out.getFluids()[0]; + + if (tankOut.getFluid() != null && (stack == null || (tankOut.getFluid().getFluid() != stack.getFluid()))) { + FluidStack remainder = tankOut.drainInternal(Fluid.BUCKET_VOLUME, true); + + if (remainder != null) { + network.insertFluid(remainder, remainder.amount, false); + } + } else if (stack != null) { + FluidStack result = network.extractFluid(stack, Fluid.BUCKET_VOLUME, compare); + + if (result != null) { + int remainder = Fluid.BUCKET_VOLUME - tankOut.fillInternal(result, true); + + if (remainder > 0) { + network.insertFluid(stack, remainder, false); + } + } + } + } + } + + @Override + public int getEnergyUsage() { + return RefinedStorage.INSTANCE.fluidInterfaceUsage; + } + @Override public NBTTagCompound write(NBTTagCompound tag) { super.write(tag); writeItems(upgrades, 0, tag); - writeItems(buckets, 1, tag); + writeItems(in, 1, tag); + writeItems(out, 2, tag); tag.setTag(NBT_TANK_IN, tankIn.writeToNBT(new NBTTagCompound())); tag.setTag(NBT_TANK_OUT, tankOut.writeToNBT(new NBTTagCompound())); + tag.setInteger(NBT_COMPARE, compare); + return tag; } @@ -61,7 +136,8 @@ public class TileFluidInterface extends TileNode { super.read(tag); readItems(upgrades, 0, tag); - readItems(buckets, 1, tag); + readItems(in, 1, tag); + readItems(out, 2, tag); if (tag.hasKey(NBT_TANK_IN)) { tankIn.readFromNBT(tag.getCompoundTag(NBT_TANK_IN)); @@ -70,14 +146,22 @@ public class TileFluidInterface extends TileNode { if (tag.hasKey(NBT_TANK_OUT)) { tankOut.readFromNBT(tag.getCompoundTag(NBT_TANK_OUT)); } + + if (tag.hasKey(NBT_COMPARE)) { + compare = tag.getInteger(NBT_COMPARE); + } } public ItemHandlerUpgrade getUpgrades() { return upgrades; } - public ItemHandlerBasic getBuckets() { - return buckets; + public ItemHandlerBasic getIn() { + return in; + } + + public ItemHandlerFluid getOut() { + return out; } @Override @@ -95,12 +179,12 @@ public class TileFluidInterface extends TileNode { } @Override - public void updateNode() { - + public int getCompare() { + return compare; } @Override - public int getEnergyUsage() { - return 0; // @TODO: x + public void setCompare(int compare) { + this.compare = compare; } } diff --git a/src/main/java/refinedstorage/tile/data/RefinedStorageSerializers.java b/src/main/java/refinedstorage/tile/data/RefinedStorageSerializers.java index 83ba9ae34..6f0608691 100755 --- a/src/main/java/refinedstorage/tile/data/RefinedStorageSerializers.java +++ b/src/main/java/refinedstorage/tile/data/RefinedStorageSerializers.java @@ -4,6 +4,8 @@ import net.minecraft.item.ItemStack; import net.minecraft.network.PacketBuffer; import net.minecraft.network.datasync.DataParameter; import net.minecraft.network.datasync.DataSerializer; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fml.common.network.ByteBufUtils; import refinedstorage.tile.ClientCraftingTask; import refinedstorage.tile.ClientNode; @@ -87,4 +89,32 @@ public final class RefinedStorageSerializers { return null; } }; + + public static final DataSerializer FLUID_STACK_SERIALIZER = new DataSerializer() { + @Override + public void write(PacketBuffer buf, FluidStack value) { + if (value == null) { + buf.writeBoolean(false); + } else { + buf.writeBoolean(true); + ByteBufUtils.writeUTF8String(buf, FluidRegistry.getFluidName(value)); + buf.writeInt(value.amount); + buf.writeNBTTagCompoundToBuffer(value.tag); + } + } + + @Override + public FluidStack read(PacketBuffer buf) throws IOException { + if (buf.readBoolean()) { + return new FluidStack(FluidRegistry.getFluid(ByteBufUtils.readUTF8String(buf)), buf.readInt(), buf.readNBTTagCompoundFromBuffer()); + } + + return null; + } + + @Override + public DataParameter createKey(int id) { + return null; + } + }; } From 12ddca4973ff1d36c04be46edb87aad25bf00945 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sun, 14 Aug 2016 20:46:04 +0200 Subject: [PATCH 189/214] Insert stuff in fluid interface --- .../network/grid/FluidGridHandler.java | 16 +++++-------- .../apiimpl/storage/fluid/FluidUtils.java | 14 +++++++++++ .../inventory/ItemHandlerFluid.java | 7 +++--- .../refinedstorage/tile/TileConstructor.java | 1 - .../tile/TileFluidInterface.java | 24 ++++++++++++++++++- 5 files changed, 46 insertions(+), 16 deletions(-) diff --git a/src/main/java/refinedstorage/apiimpl/network/grid/FluidGridHandler.java b/src/main/java/refinedstorage/apiimpl/network/grid/FluidGridHandler.java index b1b092987..abe949063 100755 --- a/src/main/java/refinedstorage/apiimpl/network/grid/FluidGridHandler.java +++ b/src/main/java/refinedstorage/apiimpl/network/grid/FluidGridHandler.java @@ -7,11 +7,11 @@ import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.capability.CapabilityFluidHandler; -import net.minecraftforge.fluids.capability.IFluidHandler; import refinedstorage.api.network.INetworkMaster; import refinedstorage.api.network.NetworkUtils; import refinedstorage.api.network.grid.IFluidGridHandler; import refinedstorage.api.storage.CompareUtils; +import refinedstorage.apiimpl.storage.fluid.FluidUtils; import javax.annotation.Nullable; @@ -46,7 +46,7 @@ public class FluidGridHandler implements IFluidGridHandler { } if (bucket != null) { - bucket.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, null).fill(NetworkUtils.extractFluid(network, stack, 1000), true); + bucket.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, null).fill(NetworkUtils.extractFluid(network, stack, Fluid.BUCKET_VOLUME), true); if (shift) { if (!player.inventory.addItemStackToInventory(bucket.copy())) { @@ -63,16 +63,12 @@ public class FluidGridHandler implements IFluidGridHandler { @Nullable @Override public ItemStack onInsert(ItemStack container) { - if (container.hasCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, null)) { - IFluidHandler handler = container.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, null); + FluidStack stack = FluidUtils.getFluidFromStack(container, true); - FluidStack drainPre = handler.drain(Fluid.BUCKET_VOLUME, false); + if (stack != null && network.insertFluid(stack, stack.amount, true) == null) { + FluidStack drained = FluidUtils.getFluidFromStack(container, false); - if (drainPre != null && network.insertFluid(drainPre, drainPre.amount, true) == null) { - FluidStack drain = handler.drain(Fluid.BUCKET_VOLUME, true); - - network.insertFluid(drain, drain.amount, false); - } + network.insertFluid(drained, drained.amount, false); } return container; diff --git a/src/main/java/refinedstorage/apiimpl/storage/fluid/FluidUtils.java b/src/main/java/refinedstorage/apiimpl/storage/fluid/FluidUtils.java index 2a84f3dac..382d62173 100755 --- a/src/main/java/refinedstorage/apiimpl/storage/fluid/FluidUtils.java +++ b/src/main/java/refinedstorage/apiimpl/storage/fluid/FluidUtils.java @@ -1,6 +1,10 @@ package refinedstorage.apiimpl.storage.fluid; +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.IFluidContainerItem; +import net.minecraftforge.fluids.capability.CapabilityFluidHandler; public final class FluidUtils { public static FluidStack copyStackWithSize(FluidStack stack, int size) { @@ -8,4 +12,14 @@ public final class FluidUtils { copy.amount = size; return copy; } + + public static FluidStack getFluidFromStack(ItemStack stack, boolean simulate) { + if (stack.hasCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, null)) { + return stack.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, null).drain(Fluid.BUCKET_VOLUME, !simulate); + } else if (stack.getItem() instanceof IFluidContainerItem) { + return ((IFluidContainerItem) stack.getItem()).drain(stack, Fluid.BUCKET_VOLUME, !simulate); + } + + return null; + } } diff --git a/src/main/java/refinedstorage/inventory/ItemHandlerFluid.java b/src/main/java/refinedstorage/inventory/ItemHandlerFluid.java index d0014bf4f..20f370abf 100755 --- a/src/main/java/refinedstorage/inventory/ItemHandlerFluid.java +++ b/src/main/java/refinedstorage/inventory/ItemHandlerFluid.java @@ -2,15 +2,14 @@ package refinedstorage.inventory; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; -import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.capability.CapabilityFluidHandler; +import refinedstorage.apiimpl.storage.fluid.FluidUtils; public class ItemHandlerFluid extends ItemHandlerBasic { private FluidStack[] fluids; public ItemHandlerFluid(int size, TileEntity tile) { - super(size, tile, (IItemValidator) s -> s.hasCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, null) && s.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, null).drain(Fluid.BUCKET_VOLUME, false) != null); + super(size, tile, s -> FluidUtils.getFluidFromStack(s, true) != null); this.fluids = new FluidStack[size]; } @@ -24,7 +23,7 @@ public class ItemHandlerFluid extends ItemHandlerBasic { if (stack == null) { fluids[slot] = null; } else { - fluids[slot] = stack.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, null).drain(Fluid.BUCKET_VOLUME, false); + fluids[slot] = FluidUtils.getFluidFromStack(stack, false); } } diff --git a/src/main/java/refinedstorage/tile/TileConstructor.java b/src/main/java/refinedstorage/tile/TileConstructor.java index 9939502d8..2edd39de0 100755 --- a/src/main/java/refinedstorage/tile/TileConstructor.java +++ b/src/main/java/refinedstorage/tile/TileConstructor.java @@ -99,7 +99,6 @@ public class TileConstructor extends TileMultipartNode implements IComparable, I Block block = stack.getFluid().getBlock(); - if (worldObj.isAirBlock(front) && block.canPlaceBlockAt(worldObj, front)) { FluidStack took = network.extractFluid(stack, Fluid.BUCKET_VOLUME, compare); diff --git a/src/main/java/refinedstorage/tile/TileFluidInterface.java b/src/main/java/refinedstorage/tile/TileFluidInterface.java index 67266764d..20e7fe944 100755 --- a/src/main/java/refinedstorage/tile/TileFluidInterface.java +++ b/src/main/java/refinedstorage/tile/TileFluidInterface.java @@ -1,5 +1,6 @@ package refinedstorage.tile; +import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; import net.minecraftforge.common.capabilities.Capability; @@ -8,6 +9,7 @@ import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.FluidTank; import net.minecraftforge.fluids.capability.CapabilityFluidHandler; import refinedstorage.RefinedStorage; +import refinedstorage.apiimpl.storage.fluid.FluidUtils; import refinedstorage.inventory.ItemHandlerBasic; import refinedstorage.inventory.ItemHandlerFluid; import refinedstorage.inventory.ItemHandlerUpgrade; @@ -68,7 +70,7 @@ public class TileFluidInterface extends TileNode implements IComparable { } }; - private ItemHandlerBasic in = new ItemHandlerBasic(1, this); + private ItemHandlerBasic in = new ItemHandlerBasic(1, this, s -> FluidUtils.getFluidFromStack(s, true) != null); private ItemHandlerFluid out = new ItemHandlerFluid(1, this); private ItemHandlerUpgrade upgrades = new ItemHandlerUpgrade(4, this, ItemUpgrade.TYPE_SPEED); @@ -87,7 +89,27 @@ public class TileFluidInterface extends TileNode implements IComparable { @Override public void updateNode() { + ItemStack container = in.getStackInSlot(0); + + if (container != null) { + FluidStack fluid = FluidUtils.getFluidFromStack(container, true); + + if (fluid != null && tankIn.fillInternal(fluid, false) == fluid.amount) { + tankIn.fillInternal(FluidUtils.getFluidFromStack(container, false), true); + } + } + if (ticks % upgrades.getSpeed() == 0) { + FluidStack drained = tankIn.drainInternal(Fluid.BUCKET_VOLUME, true); + + if (drained != null) { + FluidStack remainder = network.insertFluid(drained, drained.amount, false); + + if (remainder != null) { + tankIn.fillInternal(remainder, true); + } + } + FluidStack stack = out.getFluids()[0]; if (tankOut.getFluid() != null && (stack == null || (tankOut.getFluid().getFluid() != stack.getFluid()))) { From 5a51303a48ba76c0a09e24333938d2b35429335c Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sun, 14 Aug 2016 21:05:09 +0200 Subject: [PATCH 190/214] fix --- src/main/java/refinedstorage/tile/TileFluidInterface.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/refinedstorage/tile/TileFluidInterface.java b/src/main/java/refinedstorage/tile/TileFluidInterface.java index 20e7fe944..965334d66 100755 --- a/src/main/java/refinedstorage/tile/TileFluidInterface.java +++ b/src/main/java/refinedstorage/tile/TileFluidInterface.java @@ -70,7 +70,7 @@ public class TileFluidInterface extends TileNode implements IComparable { } }; - private ItemHandlerBasic in = new ItemHandlerBasic(1, this, s -> FluidUtils.getFluidFromStack(s, true) != null); + private ItemHandlerBasic in = new ItemHandlerBasic(1, this); private ItemHandlerFluid out = new ItemHandlerFluid(1, this); private ItemHandlerUpgrade upgrades = new ItemHandlerUpgrade(4, this, ItemUpgrade.TYPE_SPEED); From 475d19d9d4bd99a3ed43f8dbe8e505d796f547e5 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Mon, 15 Aug 2016 16:07:51 +0200 Subject: [PATCH 191/214] Remove fluid disk drive, put that logic into disk drives --- .../refinedstorage/RefinedStorageBlocks.java | 1 - .../refinedstorage/RefinedStorageGui.java | 4 +- .../block/BlockExternalStorage.java | 2 +- .../block/BlockFluidDiskDrive.java | 58 --- .../container/ContainerCrafter.java | 2 +- .../container/ContainerDiskDrive.java | 9 +- .../container/ContainerExternalStorage.java | 30 ++ .../container/ContainerFluidDiskDrive.java | 50 --- .../container/ContainerStorage.java | 17 +- .../java/refinedstorage/gui/GuiHandler.java | 13 +- .../java/refinedstorage/gui/GuiStorage.java | 20 +- .../refinedstorage/proxy/ClientProxy.java | 1 - .../refinedstorage/proxy/CommonProxy.java | 11 - .../java/refinedstorage/tile/IStorageGui.java | 6 +- .../refinedstorage/tile/TileDiskDrive.java | 154 +++++-- .../tile/TileFluidDiskDrive.java | 380 ------------------ .../java/refinedstorage/tile/TileStorage.java | 5 + .../externalstorage/TileExternalStorage.java | 6 + 18 files changed, 201 insertions(+), 568 deletions(-) delete mode 100755 src/main/java/refinedstorage/block/BlockFluidDiskDrive.java create mode 100755 src/main/java/refinedstorage/container/ContainerExternalStorage.java delete mode 100755 src/main/java/refinedstorage/container/ContainerFluidDiskDrive.java delete mode 100755 src/main/java/refinedstorage/tile/TileFluidDiskDrive.java diff --git a/src/main/java/refinedstorage/RefinedStorageBlocks.java b/src/main/java/refinedstorage/RefinedStorageBlocks.java index 57e502b9c..113e8f3d8 100755 --- a/src/main/java/refinedstorage/RefinedStorageBlocks.java +++ b/src/main/java/refinedstorage/RefinedStorageBlocks.java @@ -24,6 +24,5 @@ public final class RefinedStorageBlocks { public static final BlockProcessingPatternEncoder PROCESSING_PATTERN_ENCODER = new BlockProcessingPatternEncoder(); public static final BlockNetworkTransmitter NETWORK_TRANSMITTER = new BlockNetworkTransmitter(); public static final BlockNetworkReceiver NETWORK_RECEIVER = new BlockNetworkReceiver(); - public static final BlockFluidDiskDrive FLUID_DISK_DRIVE = new BlockFluidDiskDrive(); public static final BlockFluidInterface FLUID_INTERFACE = new BlockFluidInterface(); } \ No newline at end of file diff --git a/src/main/java/refinedstorage/RefinedStorageGui.java b/src/main/java/refinedstorage/RefinedStorageGui.java index 66cb97da5..4cb2a2354 100755 --- a/src/main/java/refinedstorage/RefinedStorageGui.java +++ b/src/main/java/refinedstorage/RefinedStorageGui.java @@ -20,6 +20,6 @@ public final class RefinedStorageGui { public static final int PROCESSING_PATTERN_ENCODER = 16; public static final int GRID_FILTER = 17; public static final int NETWORK_TRANSMITTER = 18; - public static final int FLUID_DISK_DRIVE = 19; - public static final int FLUID_INTERFACE = 20; + public static final int FLUID_INTERFACE = 19; + public static final int EXTERNAL_STORAGE = 20; } diff --git a/src/main/java/refinedstorage/block/BlockExternalStorage.java b/src/main/java/refinedstorage/block/BlockExternalStorage.java index 37e0c6660..a41a50c27 100755 --- a/src/main/java/refinedstorage/block/BlockExternalStorage.java +++ b/src/main/java/refinedstorage/block/BlockExternalStorage.java @@ -75,7 +75,7 @@ public class BlockExternalStorage extends BlockCable { } if (!world.isRemote) { - player.openGui(RefinedStorage.INSTANCE, RefinedStorageGui.STORAGE, world, pos.getX(), pos.getY(), pos.getZ()); + player.openGui(RefinedStorage.INSTANCE, RefinedStorageGui.EXTERNAL_STORAGE, world, pos.getX(), pos.getY(), pos.getZ()); } return true; diff --git a/src/main/java/refinedstorage/block/BlockFluidDiskDrive.java b/src/main/java/refinedstorage/block/BlockFluidDiskDrive.java deleted file mode 100755 index 71e3ea8b7..000000000 --- a/src/main/java/refinedstorage/block/BlockFluidDiskDrive.java +++ /dev/null @@ -1,58 +0,0 @@ -package refinedstorage.block; - -import net.minecraft.block.properties.PropertyInteger; -import net.minecraft.block.state.BlockStateContainer; -import net.minecraft.block.state.IBlockState; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.EnumHand; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.IBlockAccess; -import net.minecraft.world.World; -import refinedstorage.RefinedStorage; -import refinedstorage.RefinedStorageGui; -import refinedstorage.tile.TileFluidDiskDrive; - -public class BlockFluidDiskDrive extends BlockNode { - private static final PropertyInteger STORED = PropertyInteger.create("stored", 0, 7); - - public BlockFluidDiskDrive() { - super("fluid_disk_drive"); - } - - @Override - public TileEntity createTileEntity(World world, IBlockState state) { - return new TileFluidDiskDrive(); - } - - @Override - public BlockStateContainer createBlockState() { - return createBlockStateBuilder() - .add(STORED) - .build(); - } - - @Override - public IBlockState getActualState(IBlockState state, IBlockAccess world, BlockPos pos) { - return super.getActualState(state, world, pos) - .withProperty(STORED, Math.max(0, ((TileFluidDiskDrive) world.getTileEntity(pos)).getStoredForDisplay())); - } - - @Override - public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) { - if (!world.isRemote) { - player.openGui(RefinedStorage.INSTANCE, RefinedStorageGui.FLUID_DISK_DRIVE, world, pos.getX(), pos.getY(), pos.getZ()); - } - - return true; - } - - @Override - public void breakBlock(World world, BlockPos pos, IBlockState state) { - ((TileFluidDiskDrive) world.getTileEntity(pos)).onBreak(); - - super.breakBlock(world, pos, state); - } -} diff --git a/src/main/java/refinedstorage/container/ContainerCrafter.java b/src/main/java/refinedstorage/container/ContainerCrafter.java index 0528c74f6..c7d44e702 100755 --- a/src/main/java/refinedstorage/container/ContainerCrafter.java +++ b/src/main/java/refinedstorage/container/ContainerCrafter.java @@ -6,7 +6,7 @@ import net.minecraft.item.ItemStack; import net.minecraftforge.items.SlotItemHandler; import refinedstorage.tile.TileCrafter; -public class ContainerCrafter extends ContainerStorage { +public class ContainerCrafter extends ContainerBase { public ContainerCrafter(TileCrafter crafter, EntityPlayer player) { super(crafter, player); diff --git a/src/main/java/refinedstorage/container/ContainerDiskDrive.java b/src/main/java/refinedstorage/container/ContainerDiskDrive.java index 30e04e79f..a39801384 100755 --- a/src/main/java/refinedstorage/container/ContainerDiskDrive.java +++ b/src/main/java/refinedstorage/container/ContainerDiskDrive.java @@ -4,9 +4,10 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; import net.minecraftforge.items.SlotItemHandler; +import refinedstorage.container.slot.SlotSpecimenType; import refinedstorage.tile.TileDiskDrive; -public class ContainerDiskDrive extends ContainerStorage { +public class ContainerDiskDrive extends ContainerBase { public ContainerDiskDrive(TileDiskDrive drive, EntityPlayer player) { super(drive, player); @@ -18,7 +19,11 @@ public class ContainerDiskDrive extends ContainerStorage { addSlotToContainer(new SlotItemHandler(drive.getDisks(), 4 + i, 98 + (i * 18), 96)); } - addFilterAndPlayerInventorySlots(drive.getFilters()); + for (int i = 0; i < 9; ++i) { + addSlotToContainer(new SlotSpecimenType(drive, i, 8 + (18 * i), 20)); + } + + addPlayerInventory(8, 129); } @Override diff --git a/src/main/java/refinedstorage/container/ContainerExternalStorage.java b/src/main/java/refinedstorage/container/ContainerExternalStorage.java new file mode 100755 index 000000000..d147b750d --- /dev/null +++ b/src/main/java/refinedstorage/container/ContainerExternalStorage.java @@ -0,0 +1,30 @@ +package refinedstorage.container; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; +import refinedstorage.container.slot.SlotSpecimen; +import refinedstorage.tile.externalstorage.TileExternalStorage; + +public class ContainerExternalStorage extends ContainerBase { + public ContainerExternalStorage(TileExternalStorage tile, EntityPlayer player) { + super(tile, player); + + for (int i = 0; i < 9; ++i) { + addSlotToContainer(new SlotSpecimen(tile.getFilters(), i, 8 + (18 * i), 20)); + } + + addPlayerInventory(8, 129); + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer player, int index) { + Slot slot = getSlot(index); + + if (slot != null && slot.getHasStack() && index >= 8) { + return mergeItemStackToSpecimen(slot.getStack(), 0, 9); + } + + return null; + } +} diff --git a/src/main/java/refinedstorage/container/ContainerFluidDiskDrive.java b/src/main/java/refinedstorage/container/ContainerFluidDiskDrive.java deleted file mode 100755 index 81e6ffa92..000000000 --- a/src/main/java/refinedstorage/container/ContainerFluidDiskDrive.java +++ /dev/null @@ -1,50 +0,0 @@ -package refinedstorage.container; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.Slot; -import net.minecraft.item.ItemStack; -import net.minecraftforge.items.SlotItemHandler; -import refinedstorage.tile.TileFluidDiskDrive; - -public class ContainerFluidDiskDrive extends ContainerStorage { - public ContainerFluidDiskDrive(TileFluidDiskDrive drive, EntityPlayer player) { - super(drive, player); - - for (int i = 0; i < 4; ++i) { - addSlotToContainer(new SlotItemHandler(drive.getDisks(), i, 98 + (i * 18), 78)); - } - - for (int i = 0; i < 4; ++i) { - addSlotToContainer(new SlotItemHandler(drive.getDisks(), 4 + i, 98 + (i * 18), 96)); - } - - addFilterAndPlayerInventorySlots(drive.getFilters()); - } - - @Override - public ItemStack transferStackInSlot(EntityPlayer player, int index) { - ItemStack stack = null; - - Slot slot = getSlot(index); - - if (slot != null && slot.getHasStack()) { - stack = slot.getStack(); - - if (index < 8) { - if (!mergeItemStack(stack, 8 + 9, inventorySlots.size(), false)) { - return null; - } - } else if (!mergeItemStack(stack, 0, 8, false)) { - return mergeItemStackToSpecimen(stack, 8, 8 + 9); - } - - if (stack.stackSize == 0) { - slot.putStack(null); - } else { - slot.onSlotChanged(); - } - } - - return stack; - } -} diff --git a/src/main/java/refinedstorage/container/ContainerStorage.java b/src/main/java/refinedstorage/container/ContainerStorage.java index 3b76687fa..01f93d584 100755 --- a/src/main/java/refinedstorage/container/ContainerStorage.java +++ b/src/main/java/refinedstorage/container/ContainerStorage.java @@ -3,26 +3,15 @@ package refinedstorage.container; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; -import net.minecraftforge.items.IItemHandler; import refinedstorage.container.slot.SlotSpecimen; -import refinedstorage.container.slot.SlotSpecimenFluid; -import refinedstorage.inventory.ItemHandlerFluid; -import refinedstorage.tile.TileBase; +import refinedstorage.tile.TileStorage; public class ContainerStorage extends ContainerBase { - public ContainerStorage(TileBase tile, EntityPlayer player) { + public ContainerStorage(TileStorage tile, EntityPlayer player) { super(tile, player); - } - public ContainerStorage(TileBase tile, EntityPlayer player, IItemHandler filters) { - this(tile, player); - - addFilterAndPlayerInventorySlots(filters); - } - - protected void addFilterAndPlayerInventorySlots(IItemHandler filters) { for (int i = 0; i < 9; ++i) { - addSlotToContainer(filters instanceof ItemHandlerFluid ? new SlotSpecimenFluid(!getTile().getWorld().isRemote, filters, i, 8 + (18 * i), 20) : new SlotSpecimen(filters, i, 8 + (18 * i), 20)); + addSlotToContainer(new SlotSpecimen(tile.getFilters(), i, 8 + (18 * i), 20)); } addPlayerInventory(8, 129); diff --git a/src/main/java/refinedstorage/gui/GuiHandler.java b/src/main/java/refinedstorage/gui/GuiHandler.java index 812811bba..5f7adcb08 100755 --- a/src/main/java/refinedstorage/gui/GuiHandler.java +++ b/src/main/java/refinedstorage/gui/GuiHandler.java @@ -11,6 +11,7 @@ import refinedstorage.RefinedStorageGui; import refinedstorage.container.*; import refinedstorage.gui.grid.GuiGrid; import refinedstorage.tile.*; +import refinedstorage.tile.externalstorage.TileExternalStorage; import refinedstorage.tile.grid.TileGrid; import refinedstorage.tile.grid.WirelessGrid; @@ -36,7 +37,9 @@ public class GuiHandler implements IGuiHandler { case RefinedStorageGui.CONSTRUCTOR: return new ContainerConstructor((TileConstructor) tile, player); case RefinedStorageGui.STORAGE: - return new ContainerStorage((TileBase) tile, player, ((IStorageGui) tile).getFilters()); + return new ContainerStorage((TileStorage) tile, player); + case RefinedStorageGui.EXTERNAL_STORAGE: + return new ContainerExternalStorage((TileExternalStorage) tile, player); case RefinedStorageGui.RELAY: return new ContainerRelay((TileRelay) tile, player); case RefinedStorageGui.INTERFACE: @@ -51,8 +54,6 @@ public class GuiHandler implements IGuiHandler { return new ContainerProcessingPatternEncoder((TileProcessingPatternEncoder) tile, player); case RefinedStorageGui.NETWORK_TRANSMITTER: return new ContainerNetworkTransmitter((TileNetworkTransmitter) tile, player); - case RefinedStorageGui.FLUID_DISK_DRIVE: - return new ContainerFluidDiskDrive((TileFluidDiskDrive) tile, player); case RefinedStorageGui.FLUID_INTERFACE: return new ContainerFluidInterface((TileFluidInterface) tile, player); default: @@ -109,7 +110,9 @@ public class GuiHandler implements IGuiHandler { case RefinedStorageGui.CONSTRUCTOR: return new GuiConstructor((ContainerConstructor) getContainer(ID, player, tile)); case RefinedStorageGui.STORAGE: - return new GuiStorage((ContainerStorage) getContainer(ID, player, tile), (IStorageGui) tile); + return new GuiStorage((ContainerStorage) getContainer(ID, player, tile), (TileStorage) tile); + case RefinedStorageGui.EXTERNAL_STORAGE: + return new GuiStorage((ContainerExternalStorage) getContainer(ID, player, tile), (TileExternalStorage) tile); case RefinedStorageGui.RELAY: return new GuiRelay((ContainerRelay) getContainer(ID, player, tile)); case RefinedStorageGui.INTERFACE: @@ -126,8 +129,6 @@ public class GuiHandler implements IGuiHandler { return new GuiGridFilter(getGridFilterContainer(player, x)); case RefinedStorageGui.NETWORK_TRANSMITTER: return new GuiNetworkTransmitter((ContainerNetworkTransmitter) getContainer(ID, player, tile), (TileNetworkTransmitter) tile); - case RefinedStorageGui.FLUID_DISK_DRIVE: - return new GuiStorage((ContainerFluidDiskDrive) getContainer(ID, player, tile), (IStorageGui) tile, "gui/disk_drive.png"); case RefinedStorageGui.FLUID_INTERFACE: return new GuiFluidInterface((ContainerFluidInterface) getContainer(ID, player, tile)); default: diff --git a/src/main/java/refinedstorage/gui/GuiStorage.java b/src/main/java/refinedstorage/gui/GuiStorage.java index 562977721..631f0d5e2 100755 --- a/src/main/java/refinedstorage/gui/GuiStorage.java +++ b/src/main/java/refinedstorage/gui/GuiStorage.java @@ -3,10 +3,11 @@ package refinedstorage.gui; import com.google.common.primitives.Ints; import net.minecraft.client.gui.GuiTextField; import refinedstorage.api.storage.CompareUtils; -import refinedstorage.container.ContainerStorage; +import refinedstorage.container.ContainerBase; import refinedstorage.gui.sidebutton.SideButtonCompare; import refinedstorage.gui.sidebutton.SideButtonMode; import refinedstorage.gui.sidebutton.SideButtonRedstoneMode; +import refinedstorage.gui.sidebutton.SideButtonType; import refinedstorage.tile.IStorageGui; import refinedstorage.tile.data.TileDataManager; @@ -23,14 +24,14 @@ public class GuiStorage extends GuiBase { private int barWidth = 16; private int barHeight = 58; - public GuiStorage(ContainerStorage container, IStorageGui gui, String texture) { + public GuiStorage(ContainerBase container, IStorageGui gui, String texture) { super(container, 176, 211); this.gui = gui; this.texture = texture; } - public GuiStorage(ContainerStorage container, IStorageGui gui) { + public GuiStorage(ContainerBase container, IStorageGui gui) { this(container, gui, "gui/storage.png"); } @@ -40,18 +41,17 @@ public class GuiStorage extends GuiBase { addSideButton(new SideButtonRedstoneMode(gui.getRedstoneModeParameter())); } + if (gui.getTypeParameter() != null) { + addSideButton(new SideButtonType(gui.getTypeParameter())); + } + if (gui.getFilterParameter() != null) { addSideButton(new SideButtonMode(gui.getFilterParameter())); } if (gui.getCompareParameter() != null) { - if (gui.hasComparisonFor(CompareUtils.COMPARE_DAMAGE)) { - addSideButton(new SideButtonCompare(gui.getCompareParameter(), CompareUtils.COMPARE_DAMAGE)); - } - - if (gui.hasComparisonFor(CompareUtils.COMPARE_NBT)) { - addSideButton(new SideButtonCompare(gui.getCompareParameter(), CompareUtils.COMPARE_NBT)); - } + addSideButton(new SideButtonCompare(gui.getCompareParameter(), CompareUtils.COMPARE_DAMAGE)); + addSideButton(new SideButtonCompare(gui.getCompareParameter(), CompareUtils.COMPARE_NBT)); } priorityField = new GuiTextField(0, fontRendererObj, x + 98 + 1, y + 54 + 1, 25, fontRendererObj.FONT_HEIGHT); diff --git a/src/main/java/refinedstorage/proxy/ClientProxy.java b/src/main/java/refinedstorage/proxy/ClientProxy.java index d656f5f58..d5695a78e 100755 --- a/src/main/java/refinedstorage/proxy/ClientProxy.java +++ b/src/main/java/refinedstorage/proxy/ClientProxy.java @@ -257,6 +257,5 @@ public class ClientProxy extends CommonProxy { ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.STORAGE), EnumItemStorageType.TYPE_16K.getId(), new ModelResourceLocation("refinedstorage:storage", "type=16k")); ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.STORAGE), EnumItemStorageType.TYPE_64K.getId(), new ModelResourceLocation("refinedstorage:storage", "type=64k")); ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.STORAGE), EnumItemStorageType.TYPE_CREATIVE.getId(), new ModelResourceLocation("refinedstorage:storage", "type=creative")); - ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.FLUID_DISK_DRIVE), 0, new ModelResourceLocation("refinedstorage:disk_drive", "inventory")); } } diff --git a/src/main/java/refinedstorage/proxy/CommonProxy.java b/src/main/java/refinedstorage/proxy/CommonProxy.java index 2b2353c15..3c5ebbd82 100755 --- a/src/main/java/refinedstorage/proxy/CommonProxy.java +++ b/src/main/java/refinedstorage/proxy/CommonProxy.java @@ -85,7 +85,6 @@ public class CommonProxy { registerTile(TileCable.class, "cable"); registerTile(TileNetworkReceiver.class, "network_receiver"); registerTile(TileNetworkTransmitter.class, "network_transmitter"); - registerTile(TileFluidDiskDrive.class, "fluid_disk_drive"); registerTile(TileFluidInterface.class, "fluid_interface"); registerBlock(RefinedStorageBlocks.CONTROLLER); @@ -109,7 +108,6 @@ public class CommonProxy { registerBlock(RefinedStorageBlocks.MACHINE_CASING); registerBlock(RefinedStorageBlocks.NETWORK_TRANSMITTER); registerBlock(RefinedStorageBlocks.NETWORK_RECEIVER); - registerBlock(RefinedStorageBlocks.FLUID_DISK_DRIVE); registerBlock(RefinedStorageBlocks.FLUID_INTERFACE); registerItem(RefinedStorageItems.QUARTZ_ENRICHED_IRON); @@ -206,15 +204,6 @@ public class CommonProxy { new ItemStack(Blocks.CHEST) )); - // Fluid Disk Drive - RefinedStorageAPI.SOLDERER_REGISTRY.addRecipe(new SoldererRecipeBasic( - new ItemStack(RefinedStorageBlocks.FLUID_DISK_DRIVE), - 500, - new ItemStack(RefinedStorageItems.PROCESSOR, 1, ItemProcessor.TYPE_ADVANCED), - new ItemStack(RefinedStorageBlocks.MACHINE_CASING), - new ItemStack(Items.BUCKET) - )); - // Cable GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(RefinedStorageBlocks.CABLE, 12), "EEE", diff --git a/src/main/java/refinedstorage/tile/IStorageGui.java b/src/main/java/refinedstorage/tile/IStorageGui.java index ded2b030e..3f5071497 100755 --- a/src/main/java/refinedstorage/tile/IStorageGui.java +++ b/src/main/java/refinedstorage/tile/IStorageGui.java @@ -8,14 +8,12 @@ public interface IStorageGui { IItemHandler getFilters(); + TileDataParameter getTypeParameter(); + TileDataParameter getRedstoneModeParameter(); TileDataParameter getCompareParameter(); - default boolean hasComparisonFor(int compare) { - return true; - } - TileDataParameter getFilterParameter(); TileDataParameter getPriorityParameter(); diff --git a/src/main/java/refinedstorage/tile/TileDiskDrive.java b/src/main/java/refinedstorage/tile/TileDiskDrive.java index d23fec347..95e63f5af 100755 --- a/src/main/java/refinedstorage/tile/TileDiskDrive.java +++ b/src/main/java/refinedstorage/tile/TileDiskDrive.java @@ -4,6 +4,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; 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; @@ -12,23 +13,31 @@ import net.minecraftforge.items.ItemHandlerHelper; import refinedstorage.RefinedStorage; import refinedstorage.RefinedStorageItems; import refinedstorage.api.network.INetworkMaster; +import refinedstorage.api.storage.fluid.IFluidStorage; +import refinedstorage.api.storage.fluid.IFluidStorageProvider; import refinedstorage.api.storage.item.IItemStorage; import refinedstorage.api.storage.item.IItemStorageProvider; +import refinedstorage.apiimpl.storage.fluid.FluidStorageNBT; +import refinedstorage.apiimpl.storage.fluid.FluidUtils; import refinedstorage.apiimpl.storage.item.ItemStorageNBT; +import refinedstorage.block.EnumFluidStorageType; import refinedstorage.block.EnumItemStorageType; import refinedstorage.inventory.ItemHandlerBasic; +import refinedstorage.inventory.ItemHandlerFluid; import refinedstorage.inventory.ItemValidatorBasic; import refinedstorage.tile.config.IComparable; import refinedstorage.tile.config.IFilterable; import refinedstorage.tile.config.IPrioritizable; +import refinedstorage.tile.config.IType; import refinedstorage.tile.data.TileDataParameter; import java.util.List; -public class TileDiskDrive extends TileNode implements IItemStorageProvider, IStorageGui, IComparable, IFilterable, IPrioritizable { +public class TileDiskDrive extends TileNode implements IItemStorageProvider, IFluidStorageProvider, IStorageGui, IComparable, IFilterable, IPrioritizable, IType { public static final TileDataParameter PRIORITY = IPrioritizable.createParameter(); public static final TileDataParameter COMPARE = IComparable.createParameter(); public static final TileDataParameter MODE = IFilterable.createParameter(); + public static final TileDataParameter TYPE = IType.createParameter(); public class ItemStorage extends ItemStorageNBT { public ItemStorage(ItemStack disk) { @@ -42,7 +51,7 @@ public class TileDiskDrive extends TileNode implements IItemStorageProvider, ISt @Override public ItemStack insertItem(ItemStack stack, int size, boolean simulate) { - if (!IFilterable.canTake(getFilters(), mode, getCompare(), stack)) { + if (!IFilterable.canTake(itemFilters, mode, getCompare(), stack)) { return ItemHandlerHelper.copyStackWithSize(stack, size); } @@ -50,16 +59,42 @@ public class TileDiskDrive extends TileNode implements IItemStorageProvider, ISt } } + public class FluidStorage extends FluidStorageNBT { + public FluidStorage(ItemStack disk) { + super(disk.getTagCompound(), EnumFluidStorageType.getById(disk.getItemDamage()).getCapacity(), TileDiskDrive.this); + } + + @Override + public int getPriority() { + return priority; + } + + @Override + public FluidStack insertFluid(FluidStack stack, int size, boolean simulate) { + if (!IFilterable.canTakeFluids(fluidFilters, mode, getCompare(), stack)) { + return FluidUtils.copyStackWithSize(stack, size); + } + + return super.insertFluid(stack, size, simulate); + } + } + private static final String NBT_PRIORITY = "Priority"; private static final String NBT_COMPARE = "Compare"; private static final String NBT_MODE = "Mode"; private static final String NBT_STORED = "Stored"; + private static final String NBT_TYPE = "Type"; private ItemHandlerBasic disks = new ItemHandlerBasic(8, this, new ItemValidatorBasic(RefinedStorageItems.STORAGE_DISK) { @Override public boolean isValid(ItemStack disk) { return super.isValid(disk) && ItemStorageNBT.isValid(disk); } + }, new ItemValidatorBasic(RefinedStorageItems.FLUID_STORAGE_DISK) { + @Override + public boolean isValid(ItemStack disk) { + return super.isValid(disk) && FluidStorageNBT.isValid(disk); + } }) { @Override protected void onContentsChanged(int slot) { @@ -69,40 +104,56 @@ public class TileDiskDrive extends TileNode implements IItemStorageProvider, ISt ItemStack disk = getStackInSlot(slot); if (disk == null) { - storages[slot] = null; + itemStorages[slot] = null; + fluidStorages[slot] = null; } else { - storages[slot] = new ItemStorage(disk); + if (disk.getItem() == RefinedStorageItems.STORAGE_DISK) { + itemStorages[slot] = new ItemStorage(disk); + } else if (disk.getItem() == RefinedStorageItems.FLUID_STORAGE_DISK) { + fluidStorages[slot] = new FluidStorage(disk); + } } if (network != null) { network.getItemStorage().rebuild(); + network.getFluidStorage().rebuild(); } } } @Override public ItemStack extractItem(int slot, int amount, boolean simulate) { - if (storages[slot] != null) { - storages[slot].writeToNBT(); + if (itemStorages[slot] != null) { + itemStorages[slot].writeToNBT(); } + if (fluidStorages[slot] != null) { + fluidStorages[slot].writeToNBT(); + } + + return super.extractItem(slot, amount, simulate); } }; - private ItemHandlerBasic filters = new ItemHandlerBasic(9, this); + private ItemHandlerBasic itemFilters = new ItemHandlerBasic(9, this); + private ItemHandlerFluid fluidFilters = new ItemHandlerFluid(9, this); - private ItemStorage storages[] = new ItemStorage[8]; + private ItemStorage itemStorages[] = new ItemStorage[8]; + private FluidStorage fluidStorages[] = new FluidStorage[8]; private int priority = 0; private int compare = 0; private int mode = IFilterable.WHITELIST; + private int type = IType.ITEMS; + private int stored = 0; public TileDiskDrive() { dataManager.addWatchedParameter(PRIORITY); dataManager.addWatchedParameter(COMPARE); dataManager.addWatchedParameter(MODE); + dataManager.addWatchedParameter(TYPE); } @Override @@ -136,7 +187,13 @@ public class TileDiskDrive extends TileNode implements IItemStorageProvider, ISt } public void onBreak() { - for (ItemStorage storage : this.storages) { + for (ItemStorage storage : this.itemStorages) { + if (storage != null) { + storage.writeToNBT(); + } + } + + for (FluidStorage storage : this.fluidStorages) { if (storage != null) { storage.writeToNBT(); } @@ -148,11 +205,21 @@ public class TileDiskDrive extends TileNode implements IItemStorageProvider, ISt super.onConnectionChange(network, state); network.getItemStorage().rebuild(); + network.getFluidStorage().rebuild(); } @Override public void addItemStorages(List storages) { - for (IItemStorage storage : this.storages) { + for (IItemStorage storage : this.itemStorages) { + if (storage != null) { + storages.add(storage); + } + } + } + + @Override + public void addFluidStorages(List storages) { + for (IFluidStorage storage : this.fluidStorages) { if (storage != null) { storages.add(storage); } @@ -164,7 +231,8 @@ public class TileDiskDrive extends TileNode implements IItemStorageProvider, ISt super.read(tag); readItems(disks, 0, tag); - readItems(filters, 1, tag); + readItems(itemFilters, 1, tag); + readItems(fluidFilters, 2, tag); if (tag.hasKey(NBT_PRIORITY)) { priority = tag.getInteger(NBT_PRIORITY); @@ -177,6 +245,10 @@ public class TileDiskDrive extends TileNode implements IItemStorageProvider, ISt if (tag.hasKey(NBT_MODE)) { mode = tag.getInteger(NBT_MODE); } + + if (tag.hasKey(NBT_TYPE)) { + type = tag.getInteger(NBT_TYPE); + } } @Override @@ -184,17 +256,23 @@ public class TileDiskDrive extends TileNode implements IItemStorageProvider, ISt super.write(tag); for (int i = 0; i < disks.getSlots(); ++i) { - if (storages[i] != null) { - storages[i].writeToNBT(); + if (itemStorages[i] != null) { + itemStorages[i].writeToNBT(); + } + + if (fluidStorages[i] != null) { + fluidStorages[i].writeToNBT(); } } writeItems(disks, 0, tag); - writeItems(filters, 1, tag); + writeItems(itemFilters, 1, tag); + writeItems(fluidFilters, 2, tag); tag.setInteger(NBT_PRIORITY, priority); tag.setInteger(NBT_COMPARE, compare); tag.setInteger(NBT_MODE, mode); + tag.setInteger(NBT_TYPE, type); return tag; } @@ -241,28 +319,28 @@ public class TileDiskDrive extends TileNode implements IItemStorageProvider, ISt public int getStoredForDisplayServer() { float stored = 0; - float storedMax = 0; + float capacity = 0; for (int i = 0; i < disks.getSlots(); ++i) { ItemStack disk = disks.getStackInSlot(i); if (disk != null) { - int capacity = EnumItemStorageType.getById(disk.getItemDamage()).getCapacity(); + int diskCapacity = disk.getItem() == RefinedStorageItems.STORAGE_DISK ? EnumItemStorageType.getById(disk.getItemDamage()).getCapacity() : EnumFluidStorageType.getById(disk.getItemDamage()).getCapacity(); if (capacity == -1) { return 0; } - stored += ItemStorageNBT.getStoredFromNBT(disk.getTagCompound()); - storedMax += EnumItemStorageType.getById(disk.getItemDamage()).getCapacity(); + stored += disk.getItem() == RefinedStorageItems.STORAGE_DISK ? ItemStorageNBT.getStoredFromNBT(disk.getTagCompound()) : FluidStorageNBT.getStoredFromNBT(disk.getTagCompound()); + capacity += diskCapacity; } } - if (storedMax == 0) { + if (capacity == 0) { return 0; } - return (int) Math.floor((stored / storedMax) * 7f); + return (int) Math.floor((stored / capacity) * 7F); } public int getStoredForDisplay() { @@ -276,7 +354,12 @@ public class TileDiskDrive extends TileNode implements IItemStorageProvider, ISt @Override public IItemHandler getFilters() { - return filters; + return itemFilters; + } + + @Override + public TileDataParameter getTypeParameter() { + return TYPE; } @Override @@ -316,10 +399,10 @@ public class TileDiskDrive extends TileNode implements IItemStorageProvider, ISt int stored = 0; for (int i = 0; i < disks.getSlots(); ++i) { - ItemStack stack = disks.getStackInSlot(i); + ItemStack disk = disks.getStackInSlot(i); - if (stack != null) { - stored += ItemStorageNBT.getStoredFromNBT(stack.getTagCompound()); + if (disk != null) { + stored += disk.getItem() == RefinedStorageItems.STORAGE_DISK ? ItemStorageNBT.getStoredFromNBT(disk.getTagCompound()) : FluidStorageNBT.getStoredFromNBT(disk.getTagCompound()); } } @@ -331,10 +414,10 @@ public class TileDiskDrive extends TileNode implements IItemStorageProvider, ISt int capacity = 0; for (int i = 0; i < disks.getSlots(); ++i) { - ItemStack stack = disks.getStackInSlot(i); + ItemStack disk = disks.getStackInSlot(i); - if (stack != null) { - int diskCapacity = EnumItemStorageType.getById(stack.getItemDamage()).getCapacity(); + if (disk != null) { + int diskCapacity = disk.getItem() == RefinedStorageItems.STORAGE_DISK ? EnumItemStorageType.getById(disk.getItemDamage()).getCapacity() : EnumFluidStorageType.getById(disk.getItemDamage()).getCapacity(); if (diskCapacity == -1) { return -1; @@ -351,6 +434,23 @@ public class TileDiskDrive extends TileNode implements IItemStorageProvider, ISt return disks; } + @Override + public int getType() { + return worldObj.isRemote ? TYPE.getValue() : type; + } + + @Override + public void setType(int type) { + this.type = type; + + markDirty(); + } + + @Override + public IItemHandler getFilterInventory() { + return getType() == IType.ITEMS ? itemFilters : fluidFilters; + } + @Override public IItemHandler getDrops() { return disks; diff --git a/src/main/java/refinedstorage/tile/TileFluidDiskDrive.java b/src/main/java/refinedstorage/tile/TileFluidDiskDrive.java deleted file mode 100755 index 106e2157e..000000000 --- a/src/main/java/refinedstorage/tile/TileFluidDiskDrive.java +++ /dev/null @@ -1,380 +0,0 @@ -package refinedstorage.tile; - -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -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 refinedstorage.RefinedStorage; -import refinedstorage.RefinedStorageItems; -import refinedstorage.api.network.INetworkMaster; -import refinedstorage.api.storage.CompareUtils; -import refinedstorage.api.storage.fluid.IFluidStorage; -import refinedstorage.api.storage.fluid.IFluidStorageProvider; -import refinedstorage.apiimpl.storage.fluid.FluidStorageNBT; -import refinedstorage.apiimpl.storage.fluid.FluidUtils; -import refinedstorage.block.EnumFluidStorageType; -import refinedstorage.inventory.ItemHandlerBasic; -import refinedstorage.inventory.ItemHandlerFluid; -import refinedstorage.inventory.ItemValidatorBasic; -import refinedstorage.tile.config.IComparable; -import refinedstorage.tile.config.IFilterable; -import refinedstorage.tile.config.IPrioritizable; -import refinedstorage.tile.data.TileDataParameter; - -import java.util.List; - -public class TileFluidDiskDrive extends TileNode implements IFluidStorageProvider, IStorageGui, IComparable, IFilterable, IPrioritizable { - public static final TileDataParameter PRIORITY = IPrioritizable.createParameter(); - public static final TileDataParameter COMPARE = IComparable.createParameter(); - public static final TileDataParameter MODE = IFilterable.createParameter(); - - public class FluidStorage extends FluidStorageNBT { - public FluidStorage(ItemStack disk) { - super(disk.getTagCompound(), EnumFluidStorageType.getById(disk.getItemDamage()).getCapacity(), TileFluidDiskDrive.this); - } - - @Override - public int getPriority() { - return priority; - } - - @Override - public FluidStack insertFluid(FluidStack stack, int size, boolean simulate) { - if (!IFilterable.canTakeFluids(filters, mode, getCompare(), stack)) { - return FluidUtils.copyStackWithSize(stack, size); - } - - return super.insertFluid(stack, size, simulate); - } - } - - private static final String NBT_PRIORITY = "Priority"; - private static final String NBT_COMPARE = "Compare"; - private static final String NBT_MODE = "Mode"; - private static final String NBT_STORED = "Stored"; - - private ItemHandlerBasic disks = new ItemHandlerBasic(8, this, new ItemValidatorBasic(RefinedStorageItems.FLUID_STORAGE_DISK) { - @Override - 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) { - ItemStack disk = getStackInSlot(slot); - - if (disk == null) { - storages[slot] = null; - } else { - storages[slot] = new FluidStorage(disk); - } - - if (network != null) { - network.getFluidStorage().rebuild(); - } - } - } - - @Override - public ItemStack extractItem(int slot, int amount, boolean simulate) { - if (storages[slot] != null) { - storages[slot].writeToNBT(); - } - - return super.extractItem(slot, amount, simulate); - } - }; - - private ItemHandlerFluid filters = new ItemHandlerFluid(9, this); - - private FluidStorage storages[] = new FluidStorage[8]; - - private int priority = 0; - private int compare = 0; - private int mode = IFilterable.WHITELIST; - private int stored = 0; - - public TileFluidDiskDrive() { - dataManager.addWatchedParameter(PRIORITY); - dataManager.addWatchedParameter(COMPARE); - dataManager.addWatchedParameter(MODE); - } - - @Override - public void update() { - if (!worldObj.isRemote) { - if (stored != getStoredForDisplayServer()) { - stored = getStoredForDisplayServer(); - - updateBlock(); - } - } - - super.update(); - } - - @Override - public int getEnergyUsage() { - int usage = RefinedStorage.INSTANCE.fluidDiskDriveUsage; - - for (int i = 0; i < disks.getSlots(); ++i) { - if (disks.getStackInSlot(i) != null) { - usage += RefinedStorage.INSTANCE.fluidDiskDrivePerDiskUsage; - } - } - - return usage; - } - - @Override - public void updateNode() { - } - - public void onBreak() { - for (FluidStorage storage : this.storages) { - if (storage != null) { - storage.writeToNBT(); - } - } - } - - @Override - public void onConnectionChange(INetworkMaster network, boolean state) { - super.onConnectionChange(network, state); - - network.getFluidStorage().rebuild(); - } - - @Override - public void addFluidStorages(List storages) { - for (IFluidStorage storage : this.storages) { - if (storage != null) { - storages.add(storage); - } - } - } - - @Override - public void read(NBTTagCompound tag) { - super.read(tag); - - readItems(disks, 0, tag); - readItems(filters, 1, tag); - - if (tag.hasKey(NBT_PRIORITY)) { - priority = tag.getInteger(NBT_PRIORITY); - } - - if (tag.hasKey(NBT_COMPARE)) { - compare = tag.getInteger(NBT_COMPARE); - } - - if (tag.hasKey(NBT_MODE)) { - mode = tag.getInteger(NBT_MODE); - } - } - - @Override - public NBTTagCompound write(NBTTagCompound tag) { - super.write(tag); - - for (int i = 0; i < disks.getSlots(); ++i) { - if (storages[i] != null) { - storages[i].writeToNBT(); - } - } - - writeItems(disks, 0, tag); - writeItems(filters, 1, tag); - - tag.setInteger(NBT_PRIORITY, priority); - tag.setInteger(NBT_COMPARE, compare); - tag.setInteger(NBT_MODE, mode); - - return tag; - } - - @Override - public NBTTagCompound writeUpdate(NBTTagCompound tag) { - super.writeUpdate(tag); - - tag.setInteger(NBT_STORED, stored); - - return tag; - } - - @Override - public void readUpdate(NBTTagCompound tag) { - stored = tag.getInteger(NBT_STORED); - - super.readUpdate(tag); - } - - @Override - public int getCompare() { - return compare; - } - - @Override - public void setCompare(int compare) { - this.compare = compare; - - markDirty(); - } - - @Override - public int getMode() { - return mode; - } - - @Override - public void setMode(int mode) { - this.mode = mode; - - markDirty(); - } - - public int getStoredForDisplayServer() { - float stored = 0; - float storedMax = 0; - - for (int i = 0; i < disks.getSlots(); ++i) { - ItemStack disk = disks.getStackInSlot(i); - - if (disk != null) { - int capacity = EnumFluidStorageType.getById(disk.getItemDamage()).getCapacity(); - - if (capacity == -1) { - return 0; - } - - stored += FluidStorageNBT.getStoredFromNBT(disk.getTagCompound()); - storedMax += EnumFluidStorageType.getById(disk.getItemDamage()).getCapacity(); - } - } - - if (storedMax == 0) { - return 0; - } - - return (int) Math.floor((stored / storedMax) * 7f); - } - - public int getStoredForDisplay() { - return stored; - } - - @Override - public String getGuiTitle() { - return "block.refinedstorage:fluid_disk_drive.name"; - } - - @Override - public IItemHandler getFilters() { - return filters; - } - - @Override - public TileDataParameter getRedstoneModeParameter() { - return REDSTONE_MODE; - } - - @Override - public TileDataParameter getCompareParameter() { - return COMPARE; - } - - @Override - public boolean hasComparisonFor(int compare) { - return compare == CompareUtils.COMPARE_NBT; - } - - @Override - public TileDataParameter getFilterParameter() { - return MODE; - } - - @Override - public TileDataParameter getPriorityParameter() { - return PRIORITY; - } - - @Override - public int getPriority() { - return priority; - } - - @Override - public void setPriority(int priority) { - this.priority = priority; - - markDirty(); - } - - @Override - public int getStored() { - int stored = 0; - - for (int i = 0; i < disks.getSlots(); ++i) { - ItemStack stack = disks.getStackInSlot(i); - - if (stack != null) { - stored += FluidStorageNBT.getStoredFromNBT(stack.getTagCompound()); - } - } - - return stored; - } - - @Override - public int getCapacity() { - int capacity = 0; - - for (int i = 0; i < disks.getSlots(); ++i) { - ItemStack stack = disks.getStackInSlot(i); - - if (stack != null) { - int diskCapacity = EnumFluidStorageType.getById(stack.getItemDamage()).getCapacity(); - - if (diskCapacity == -1) { - return -1; - } - - capacity += diskCapacity; - } - } - - return capacity; - } - - public IItemHandler getDisks() { - return disks; - } - - @Override - public IItemHandler getDrops() { - return disks; - } - - @Override - public T getCapability(Capability capability, EnumFacing facing) { - if (capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) { - return (T) disks; - } - - return super.getCapability(capability, facing); - } - - @Override - public boolean hasCapability(Capability capability, EnumFacing facing) { - return capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY || super.hasCapability(capability, facing); - } -} diff --git a/src/main/java/refinedstorage/tile/TileStorage.java b/src/main/java/refinedstorage/tile/TileStorage.java index 3eecb87fe..c041207e3 100755 --- a/src/main/java/refinedstorage/tile/TileStorage.java +++ b/src/main/java/refinedstorage/tile/TileStorage.java @@ -204,6 +204,11 @@ public class TileStorage extends TileNode implements IItemStorageProvider, IStor return filters; } + @Override + public TileDataParameter getTypeParameter() { + return null; + } + @Override public TileDataParameter getRedstoneModeParameter() { return REDSTONE_MODE; diff --git a/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java b/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java index b5e079e20..0691ceabc 100755 --- a/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java +++ b/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java @@ -264,4 +264,10 @@ public class TileExternalStorage extends TileMultipartNode implements IItemStora public IItemHandler getFilters() { return filters; } + + // @TODO: Implement + @Override + public TileDataParameter getTypeParameter() { + return null; + } } From cc432d1656b91d3c0f82382407c3d8d72993156f Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Mon, 15 Aug 2016 17:14:03 +0200 Subject: [PATCH 192/214] Fluid External Storage --- .../java/refinedstorage/RefinedStorage.java | 4 - .../apiimpl/storage/fluid/FluidUtils.java | 4 + .../container/ContainerExternalStorage.java | 4 +- .../java/refinedstorage/tile/IStorageGui.java | 3 - .../refinedstorage/tile/TileController.java | 9 ++ .../refinedstorage/tile/TileDiskDrive.java | 5 - .../java/refinedstorage/tile/TileStorage.java | 10 +- .../externalstorage/FluidStorageExternal.java | 93 +++++++++++++ .../tile/externalstorage/ItemStorageDSU.java | 2 +- .../externalstorage/ItemStorageDrawer.java | 2 +- .../ItemStorageItemHandler.java | 2 +- .../externalstorage/TileExternalStorage.java | 125 ++++++++++++++---- .../assets/refinedstorage/lang/en_US.lang | 2 - 13 files changed, 215 insertions(+), 50 deletions(-) create mode 100755 src/main/java/refinedstorage/tile/externalstorage/FluidStorageExternal.java diff --git a/src/main/java/refinedstorage/RefinedStorage.java b/src/main/java/refinedstorage/RefinedStorage.java index 70df829b6..4a1265527 100755 --- a/src/main/java/refinedstorage/RefinedStorage.java +++ b/src/main/java/refinedstorage/RefinedStorage.java @@ -51,8 +51,6 @@ public final class RefinedStorage { public int detectorUsage; public int diskDriveUsage; public int diskDrivePerDiskUsage; - public int fluidDiskDriveUsage; - public int fluidDiskDrivePerDiskUsage; public int externalStorageUsage; public int externalStoragePerStorageUsage; public int exporterUsage; @@ -99,8 +97,6 @@ public final class RefinedStorage { detectorUsage = config.getInt("detector", "energy", 2, 0, Integer.MAX_VALUE, "The energy used by Detectors"); diskDriveUsage = config.getInt("diskDrive", "energy", 0, 0, Integer.MAX_VALUE, "The base energy used by Disk Drives"); diskDrivePerDiskUsage = config.getInt("diskDrivePerDisk", "energy", 1, 0, Integer.MAX_VALUE, "The additional energy used by Storage Disks in Disk Drives"); - fluidDiskDriveUsage = config.getInt("fluidDiskDrive", "energy", 0, 0, Integer.MAX_VALUE, "The base energy used by Fluid Disk Drives"); - fluidDiskDrivePerDiskUsage = config.getInt("fluidDiskDrivePerDisk", "energy", 1, 0, Integer.MAX_VALUE, "The additional energy used by Fluid Storage Disks in Fluid Disk Drives"); externalStorageUsage = config.getInt("externalStorage", "energy", 0, 0, Integer.MAX_VALUE, "The base energy used by External Storages"); externalStoragePerStorageUsage = config.getInt("externalStoragePerStorage", "energy", 1, 0, Integer.MAX_VALUE, "The additional energy used per connected storage to an External Storage"); exporterUsage = config.getInt("exporter", "energy", 1, 0, Integer.MAX_VALUE, "The energy used by Exporters"); diff --git a/src/main/java/refinedstorage/apiimpl/storage/fluid/FluidUtils.java b/src/main/java/refinedstorage/apiimpl/storage/fluid/FluidUtils.java index 382d62173..2845370d9 100755 --- a/src/main/java/refinedstorage/apiimpl/storage/fluid/FluidUtils.java +++ b/src/main/java/refinedstorage/apiimpl/storage/fluid/FluidUtils.java @@ -13,6 +13,10 @@ public final class FluidUtils { return copy; } + public static FluidStack copy(FluidStack stack) { + return stack == null ? null : stack.copy(); + } + public static FluidStack getFluidFromStack(ItemStack stack, boolean simulate) { if (stack.hasCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, null)) { return stack.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, null).drain(Fluid.BUCKET_VOLUME, !simulate); diff --git a/src/main/java/refinedstorage/container/ContainerExternalStorage.java b/src/main/java/refinedstorage/container/ContainerExternalStorage.java index d147b750d..248cb990e 100755 --- a/src/main/java/refinedstorage/container/ContainerExternalStorage.java +++ b/src/main/java/refinedstorage/container/ContainerExternalStorage.java @@ -3,7 +3,7 @@ package refinedstorage.container; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; -import refinedstorage.container.slot.SlotSpecimen; +import refinedstorage.container.slot.SlotSpecimenType; import refinedstorage.tile.externalstorage.TileExternalStorage; public class ContainerExternalStorage extends ContainerBase { @@ -11,7 +11,7 @@ public class ContainerExternalStorage extends ContainerBase { super(tile, player); for (int i = 0; i < 9; ++i) { - addSlotToContainer(new SlotSpecimen(tile.getFilters(), i, 8 + (18 * i), 20)); + addSlotToContainer(new SlotSpecimenType(tile, i, 8 + (18 * i), 20)); } addPlayerInventory(8, 129); diff --git a/src/main/java/refinedstorage/tile/IStorageGui.java b/src/main/java/refinedstorage/tile/IStorageGui.java index 3f5071497..62b962f7c 100755 --- a/src/main/java/refinedstorage/tile/IStorageGui.java +++ b/src/main/java/refinedstorage/tile/IStorageGui.java @@ -1,13 +1,10 @@ package refinedstorage.tile; -import net.minecraftforge.items.IItemHandler; import refinedstorage.tile.data.TileDataParameter; public interface IStorageGui { String getGuiTitle(); - IItemHandler getFilters(); - TileDataParameter getTypeParameter(); TileDataParameter getRedstoneModeParameter(); diff --git a/src/main/java/refinedstorage/tile/TileController.java b/src/main/java/refinedstorage/tile/TileController.java index 5c03467bf..f056e7b19 100755 --- a/src/main/java/refinedstorage/tile/TileController.java +++ b/src/main/java/refinedstorage/tile/TileController.java @@ -59,6 +59,7 @@ import refinedstorage.tile.config.RedstoneMode; import refinedstorage.tile.data.ITileDataProducer; import refinedstorage.tile.data.RefinedStorageSerializers; import refinedstorage.tile.data.TileDataParameter; +import refinedstorage.tile.externalstorage.FluidStorageExternal; import refinedstorage.tile.externalstorage.ItemStorageExternal; import refinedstorage.tile.grid.IGrid; @@ -624,6 +625,10 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR for (IFluidStorage storage : this.fluidStorage.getStorages()) { remainder = storage.insertFluid(remainder, size, simulate); + if (storage instanceof FluidStorageExternal && !simulate) { + ((FluidStorageExternal) storage).updateCacheForcefully(); + } + if (remainder == null) { break; } else { @@ -652,6 +657,10 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR FluidStack took = storage.extractFluid(stack, requested - received, flags); if (took != null) { + if (storage instanceof FluidStorageExternal) { + ((FluidStorageExternal) storage).updateCacheForcefully(); + } + if (newStack == null) { newStack = took; } else { diff --git a/src/main/java/refinedstorage/tile/TileDiskDrive.java b/src/main/java/refinedstorage/tile/TileDiskDrive.java index 95e63f5af..c25982b79 100755 --- a/src/main/java/refinedstorage/tile/TileDiskDrive.java +++ b/src/main/java/refinedstorage/tile/TileDiskDrive.java @@ -352,11 +352,6 @@ public class TileDiskDrive extends TileNode implements IItemStorageProvider, IFl return "block.refinedstorage:disk_drive.name"; } - @Override - public IItemHandler getFilters() { - return itemFilters; - } - @Override public TileDataParameter getTypeParameter() { return TYPE; diff --git a/src/main/java/refinedstorage/tile/TileStorage.java b/src/main/java/refinedstorage/tile/TileStorage.java index c041207e3..5e07fa8bd 100755 --- a/src/main/java/refinedstorage/tile/TileStorage.java +++ b/src/main/java/refinedstorage/tile/TileStorage.java @@ -3,7 +3,6 @@ package refinedstorage.tile; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.network.datasync.DataSerializers; -import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.ItemHandlerHelper; import refinedstorage.RefinedStorage; import refinedstorage.RefinedStorageBlocks; @@ -199,11 +198,6 @@ public class TileStorage extends TileNode implements IItemStorageProvider, IStor return "block.refinedstorage:storage." + getType().getId() + ".name"; } - @Override - public IItemHandler getFilters() { - return filters; - } - @Override public TileDataParameter getTypeParameter() { return null; @@ -241,6 +235,10 @@ public class TileStorage extends TileNode implements IItemStorageProvider, IStor return storage; } + public ItemHandlerBasic getFilters() { + return filters; + } + @Override public int getPriority() { return priority; diff --git a/src/main/java/refinedstorage/tile/externalstorage/FluidStorageExternal.java b/src/main/java/refinedstorage/tile/externalstorage/FluidStorageExternal.java new file mode 100755 index 000000000..d78cbd3b7 --- /dev/null +++ b/src/main/java/refinedstorage/tile/externalstorage/FluidStorageExternal.java @@ -0,0 +1,93 @@ +package refinedstorage.tile.externalstorage; + +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.capability.IFluidHandler; +import net.minecraftforge.fluids.capability.IFluidTankProperties; +import refinedstorage.api.storage.CompareUtils; +import refinedstorage.api.storage.fluid.IFluidStorage; +import refinedstorage.apiimpl.storage.fluid.FluidUtils; +import refinedstorage.tile.config.IFilterable; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import java.util.Collections; +import java.util.List; + +public class FluidStorageExternal implements IFluidStorage { + private FluidStack cache; + + private TileExternalStorage externalStorage; + private IFluidHandler handler; + private IFluidTankProperties properties; + + public FluidStorageExternal(TileExternalStorage externalStorage, IFluidHandler handler, IFluidTankProperties properties) { + this.externalStorage = externalStorage; + this.handler = handler; + this.properties = properties; + } + + @Override + public List getStacks() { + return properties.getContents() == null ? Collections.emptyList() : Collections.singletonList(properties.getContents().copy()); + } + + @Nullable + @Override + public FluidStack insertFluid(@Nonnull FluidStack stack, int size, boolean simulate) { + if (IFilterable.canTakeFluids(externalStorage.getFluidFilters(), externalStorage.getMode(), externalStorage.getCompare(), stack) && properties.canFillFluidType(stack)) { + int filled = handler.fill(FluidUtils.copyStackWithSize(stack, size), !simulate); + + if (filled == size) { + return null; + } + + return FluidUtils.copyStackWithSize(stack, size - filled); + } + + return FluidUtils.copyStackWithSize(stack, size); + } + + @Nullable + @Override + public FluidStack extractFluid(@Nonnull FluidStack stack, int size, int flags) { + FluidStack toDrain = FluidUtils.copyStackWithSize(stack, size); + + if (CompareUtils.compareStack(properties.getContents(), toDrain, flags)) { + return handler.drain(toDrain, true); + } + + return null; + } + + @Override + public int getStored() { + return properties.getContents() != null ? properties.getContents().amount : 0; + } + + public int getCapacity() { + return properties.getCapacity(); + } + + @Override + public int getPriority() { + return externalStorage.getPriority(); + } + + public boolean updateCache() { + FluidStack stack = properties.getContents(); + + if (cache == null) { + cache = FluidUtils.copy(stack); + } else if (!CompareUtils.compareStack(stack, cache, CompareUtils.COMPARE_NBT)) { + cache = FluidUtils.copy(stack); + + return true; + } + + return false; + } + + public void updateCacheForcefully() { + cache = FluidUtils.copy(properties.getContents()); + } +} diff --git a/src/main/java/refinedstorage/tile/externalstorage/ItemStorageDSU.java b/src/main/java/refinedstorage/tile/externalstorage/ItemStorageDSU.java index 5ebc46d65..4523fe739 100755 --- a/src/main/java/refinedstorage/tile/externalstorage/ItemStorageDSU.java +++ b/src/main/java/refinedstorage/tile/externalstorage/ItemStorageDSU.java @@ -35,7 +35,7 @@ public class ItemStorageDSU extends ItemStorageExternal { @Override public ItemStack insertItem(@Nonnull ItemStack stack, int size, boolean simulate) { - if (IFilterable.canTake(externalStorage.getFilters(), externalStorage.getMode(), externalStorage.getCompare(), stack)) { + if (IFilterable.canTake(externalStorage.getItemFilters(), externalStorage.getMode(), externalStorage.getCompare(), stack)) { if (unit.getStoredItemType() != null) { if (CompareUtils.compareStackNoQuantity(unit.getStoredItemType(), stack)) { if (getStored() + size > unit.getMaxStoredCount()) { diff --git a/src/main/java/refinedstorage/tile/externalstorage/ItemStorageDrawer.java b/src/main/java/refinedstorage/tile/externalstorage/ItemStorageDrawer.java index e1342d3ee..c40f38c22 100755 --- a/src/main/java/refinedstorage/tile/externalstorage/ItemStorageDrawer.java +++ b/src/main/java/refinedstorage/tile/externalstorage/ItemStorageDrawer.java @@ -39,7 +39,7 @@ public class ItemStorageDrawer extends ItemStorageExternal { @Override public ItemStack insertItem(ItemStack stack, int size, boolean simulate) { - if (IFilterable.canTake(externalStorage.getFilters(), externalStorage.getMode(), externalStorage.getCompare(), stack) && drawer.canItemBeStored(stack)) { + if (IFilterable.canTake(externalStorage.getItemFilters(), externalStorage.getMode(), externalStorage.getCompare(), stack) && drawer.canItemBeStored(stack)) { if (!drawer.isEmpty()) { if (getStored() + size > drawer.getMaxCapacity(stack)) { int remainingSpace = getCapacity() - getStored(); diff --git a/src/main/java/refinedstorage/tile/externalstorage/ItemStorageItemHandler.java b/src/main/java/refinedstorage/tile/externalstorage/ItemStorageItemHandler.java index a1dac4773..efa400c2a 100755 --- a/src/main/java/refinedstorage/tile/externalstorage/ItemStorageItemHandler.java +++ b/src/main/java/refinedstorage/tile/externalstorage/ItemStorageItemHandler.java @@ -38,7 +38,7 @@ public class ItemStorageItemHandler extends ItemStorageExternal { @Override public ItemStack insertItem(ItemStack stack, int size, boolean simulate) { - if (IFilterable.canTake(externalStorage.getFilters(), externalStorage.getMode(), externalStorage.getCompare(), stack)) { + if (IFilterable.canTake(externalStorage.getItemFilters(), externalStorage.getMode(), externalStorage.getCompare(), stack)) { return ItemHandlerHelper.insertItem(handler, ItemHandlerHelper.copyStackWithSize(stack, size), simulate); } diff --git a/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java b/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java index 0691ceabc..cd0e2cf66 100755 --- a/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java +++ b/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java @@ -6,35 +6,46 @@ import mcmultipart.microblock.IMicroblock; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.network.datasync.DataSerializers; import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.fluids.capability.IFluidHandler; +import net.minecraftforge.fluids.capability.IFluidTankProperties; import net.minecraftforge.items.IItemHandler; import powercrystals.minefactoryreloaded.api.IDeepStorageUnit; import refinedstorage.RefinedStorage; import refinedstorage.api.network.INetworkMaster; +import refinedstorage.api.storage.fluid.IFluidStorage; +import refinedstorage.api.storage.fluid.IFluidStorageProvider; import refinedstorage.api.storage.item.IItemStorage; import refinedstorage.api.storage.item.IItemStorageProvider; import refinedstorage.inventory.ItemHandlerBasic; +import refinedstorage.inventory.ItemHandlerFluid; import refinedstorage.tile.IStorageGui; import refinedstorage.tile.TileMultipartNode; import refinedstorage.tile.config.IComparable; import refinedstorage.tile.config.IFilterable; import refinedstorage.tile.config.IPrioritizable; +import refinedstorage.tile.config.IType; import refinedstorage.tile.data.ITileDataProducer; import refinedstorage.tile.data.TileDataParameter; import java.util.ArrayList; import java.util.List; -public class TileExternalStorage extends TileMultipartNode implements IItemStorageProvider, IStorageGui, IComparable, IFilterable, IPrioritizable { +public class TileExternalStorage extends TileMultipartNode implements IItemStorageProvider, IFluidStorageProvider, IStorageGui, IComparable, IFilterable, IPrioritizable, IType { public static final TileDataParameter PRIORITY = IPrioritizable.createParameter(); 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 STORED = new TileDataParameter<>(DataSerializers.VARINT, 0, new ITileDataProducer() { @Override public Integer getValue(TileExternalStorage tile) { int stored = 0; - for (ItemStorageExternal storage : tile.storages) { + for (ItemStorageExternal storage : tile.itemStorages) { + stored += storage.getStored(); + } + + for (FluidStorageExternal storage : tile.fluidStorages) { stored += storage.getStored(); } @@ -47,7 +58,11 @@ public class TileExternalStorage extends TileMultipartNode implements IItemStora public Integer getValue(TileExternalStorage tile) { int capacity = 0; - for (ItemStorageExternal storage : tile.storages) { + for (ItemStorageExternal storage : tile.itemStorages) { + capacity += storage.getCapacity(); + } + + for (FluidStorageExternal storage : tile.fluidStorages) { capacity += storage.getCapacity(); } @@ -58,14 +73,19 @@ public class TileExternalStorage extends TileMultipartNode implements IItemStora private static final String NBT_PRIORITY = "Priority"; private static final String NBT_COMPARE = "Compare"; private static final String NBT_MODE = "Mode"; + private static final String NBT_TYPE = "Type"; - private ItemHandlerBasic filters = new ItemHandlerBasic(9, this); + private ItemHandlerBasic itemFilters = new ItemHandlerBasic(9, this); + private ItemHandlerFluid fluidFilters = new ItemHandlerFluid(9, this); private int priority = 0; private int compare = 0; private int mode = IFilterable.WHITELIST; + private int type = IType.ITEMS; + + private List itemStorages = new ArrayList<>(); + private List fluidStorages = new ArrayList<>(); - private List storages = new ArrayList<>(); private int lastDrawerCount; public TileExternalStorage() { @@ -74,6 +94,7 @@ public class TileExternalStorage extends TileMultipartNode implements IItemStora dataManager.addWatchedParameter(MODE); dataManager.addWatchedParameter(STORED); dataManager.addWatchedParameter(CAPACITY); + dataManager.addWatchedParameter(TYPE); } @Override @@ -83,7 +104,7 @@ public class TileExternalStorage extends TileMultipartNode implements IItemStora @Override public int getEnergyUsage() { - return RefinedStorage.INSTANCE.externalStorageUsage + (storages.size() * RefinedStorage.INSTANCE.externalStoragePerStorageUsage); + return RefinedStorage.INSTANCE.externalStorageUsage + ((itemStorages.size() + fluidStorages.size()) * RefinedStorage.INSTANCE.externalStoragePerStorageUsage); } @Override @@ -97,23 +118,35 @@ public class TileExternalStorage extends TileMultipartNode implements IItemStora updateStorage(network); network.getItemStorage().rebuild(); + network.getFluidStorage().rebuild(); } @Override public void update() { if (!worldObj.isRemote && network != null) { - boolean changeDetected = false; + boolean itemChangeDetected = false, fluidChangeDetected = false; - for (ItemStorageExternal storage : storages) { + for (ItemStorageExternal storage : itemStorages) { if (storage.updateCache()) { - changeDetected = true; + itemChangeDetected = true; } } - if (changeDetected) { + for (FluidStorageExternal storage : fluidStorages) { + if (storage.updateCache()) { + fluidChangeDetected = true; + } + } + + if (itemChangeDetected) { network.getItemStorage().rebuild(); } + // @TODO: This is broken? + if (fluidChangeDetected) { + network.getFluidStorage().rebuild(); + } + if (getFacingTile() instanceof IDrawerGroup && lastDrawerCount != ((IDrawerGroup) getFacingTile()).getDrawerCount()) { lastDrawerCount = ((IDrawerGroup) getFacingTile()).getDrawerCount(); @@ -128,7 +161,8 @@ public class TileExternalStorage extends TileMultipartNode implements IItemStora public void read(NBTTagCompound tag) { super.read(tag); - readItems(filters, 0, tag); + readItems(itemFilters, 0, tag); + readItems(fluidFilters, 1, tag); if (tag.hasKey(NBT_PRIORITY)) { priority = tag.getInteger(NBT_PRIORITY); @@ -141,17 +175,23 @@ public class TileExternalStorage extends TileMultipartNode implements IItemStora if (tag.hasKey(NBT_MODE)) { mode = tag.getInteger(NBT_MODE); } + + if (tag.hasKey(NBT_TYPE)) { + type = tag.getInteger(NBT_TYPE); + } } @Override public NBTTagCompound write(NBTTagCompound tag) { super.write(tag); - writeItems(filters, 0, tag); + writeItems(itemFilters, 0, tag); + writeItems(fluidFilters, 1, tag); tag.setInteger(NBT_PRIORITY, priority); tag.setInteger(NBT_COMPARE, compare); tag.setInteger(NBT_MODE, mode); + tag.setInteger(NBT_TYPE, type); return tag; } @@ -193,7 +233,8 @@ public class TileExternalStorage extends TileMultipartNode implements IItemStora } public void updateStorage(INetworkMaster network) { - storages.clear(); + itemStorages.clear(); + fluidStorages.clear(); TileEntity facing = getFacingTile(); @@ -202,27 +243,41 @@ public class TileExternalStorage extends TileMultipartNode implements IItemStora for (int i = 0; i < group.getDrawerCount(); ++i) { if (group.isDrawerEnabled(i)) { - storages.add(new ItemStorageDrawer(this, group.getDrawer(i))); + itemStorages.add(new ItemStorageDrawer(this, group.getDrawer(i))); } } } else if (facing instanceof IDrawer) { - storages.add(new ItemStorageDrawer(this, (IDrawer) facing)); + itemStorages.add(new ItemStorageDrawer(this, (IDrawer) facing)); } else if (facing instanceof IDeepStorageUnit) { - storages.add(new ItemStorageDSU(this, (IDeepStorageUnit) facing)); + itemStorages.add(new ItemStorageDSU(this, (IDeepStorageUnit) facing)); } else { - IItemHandler handler = getItemHandler(facing, getDirection().getOpposite()); + IItemHandler itemHandler = getItemHandler(facing, getDirection().getOpposite()); - if (handler != null) { - storages.add(new ItemStorageItemHandler(this, handler)); + if (itemHandler != null) { + itemStorages.add(new ItemStorageItemHandler(this, itemHandler)); + } + + IFluidHandler fluidHandler = getFluidHandler(facing, getDirection().getOpposite()); + + if (fluidHandler != null) { + for (IFluidTankProperties property : fluidHandler.getTankProperties()) { + fluidStorages.add(new FluidStorageExternal(this, fluidHandler, property)); + } } } network.getItemStorage().rebuild(); + network.getFluidStorage().rebuild(); } @Override public void addItemStorages(List storages) { - storages.addAll(this.storages); + storages.addAll(this.itemStorages); + } + + @Override + public void addFluidStorages(List storages) { + storages.addAll(this.fluidStorages); } @Override @@ -261,13 +316,33 @@ public class TileExternalStorage extends TileMultipartNode implements IItemStora } @Override - public IItemHandler getFilters() { - return filters; + public TileDataParameter getTypeParameter() { + return TYPE; } - // @TODO: Implement + @Override - public TileDataParameter getTypeParameter() { - return null; + public int getType() { + return worldObj.isRemote ? TYPE.getValue() : type; + } + + @Override + public void setType(int type) { + this.type = type; + + markDirty(); + } + + @Override + public IItemHandler getFilterInventory() { + return getType() == IType.ITEMS ? itemFilters : fluidFilters; + } + + public ItemHandlerBasic getItemFilters() { + return itemFilters; + } + + public ItemHandlerFluid getFluidFilters() { + return fluidFilters; } } diff --git a/src/main/resources/assets/refinedstorage/lang/en_US.lang b/src/main/resources/assets/refinedstorage/lang/en_US.lang index 002841704..deaac37c7 100755 --- a/src/main/resources/assets/refinedstorage/lang/en_US.lang +++ b/src/main/resources/assets/refinedstorage/lang/en_US.lang @@ -39,7 +39,6 @@ gui.refinedstorage:network_transmitter.distance=%d blocks gui.refinedstorage:network_transmitter.dimension=Dimension %d gui.refinedstorage:network_transmitter.missing_card=Missing Network Card gui.refinedstorage:network_transmitter.missing_upgrade=Insert upgrade -gui.refinedstorage:fluid_disk_drive=Fluid Disk Drive gui.refinedstorage:fluid_interface=Fluid Interface gui.refinedstorage:fluid_interface.in=In gui.refinedstorage:fluid_interface.out=Out @@ -134,7 +133,6 @@ block.refinedstorage:crafter.name=Crafter block.refinedstorage:processing_pattern_encoder.name=Processing Pattern Encoder block.refinedstorage:network_receiver.name=Network Receiver block.refinedstorage:network_transmitter.name=Network Transmitter -block.refinedstorage:fluid_disk_drive.name=Fluid Disk Drive block.refinedstorage:fluid_interface.name=Fluid Interface item.refinedstorage:storage_disk.0.name=1k Storage Disk From c754ba909dd2fef3d3e7db992042494f03a3833e Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Mon, 15 Aug 2016 19:45:26 +0200 Subject: [PATCH 193/214] Added ISSUE_TEMPLATE --- .github/ISSUE_TEMPLATE.md | 21 ++++++++++++++++++ .../textures/gui/fluid_interface.png | Bin 0 -> 2061 bytes 2 files changed, 21 insertions(+) create mode 100755 .github/ISSUE_TEMPLATE.md create mode 100755 src/main/resources/assets/refinedstorage/textures/gui/fluid_interface.png diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md new file mode 100755 index 000000000..550935f38 --- /dev/null +++ b/.github/ISSUE_TEMPLATE.md @@ -0,0 +1,21 @@ +#### Issue description: + +#### What happens: + +#### What you expected to happen: + +#### Steps to reproduce: +1. +2. +3. +... + +#### Version **(Make sure you are on the latest version before reporting)**: + +- Minecraft: 1.10.2 +- Forge: +- Refined Storage: + +#### If a (crash)log is relevant for this issue, link it here + +[pastebin/gist/etc link here] \ No newline at end of file diff --git a/src/main/resources/assets/refinedstorage/textures/gui/fluid_interface.png b/src/main/resources/assets/refinedstorage/textures/gui/fluid_interface.png new file mode 100755 index 0000000000000000000000000000000000000000..b4338e12a535bf3a80ab633469cf04d16e880420 GIT binary patch literal 2061 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K58911MRQ8&P5Fo{p?&#~tz_78O`%fY(0|PTd zfKP}kP~6pE2Pzl^qaiR{L*U7CX(dob zDGBlm2B!9r3>bpHv#SE*nX|wnvY3H^Z!ZWly8oWA7APoL;u=vBoS#-wo>-L1P>`6J zSE84fTB2a0XP{?ju$GJK0I)p5+8&5bNB;Pf?t7Lzg;dl-wIIuGa`c=(;EYNv0j_`Rl*_aWbG=B{s8-X9V0(*`K(5M#nHmEm7a zT_LalZ3u0+e_zn*w&;d+Kl?7+WGH#Rvp@i-sN=l0H3P#5_KIJJqJi4xGX7#`V2EY> zB3?GpPsXP_Zi(>judF*>7K+urxU%rx4EBb53{|(6o?8pVJGr)qI zyCEKEzI4OB<|R?@Ip*>?e4k%j&idkCF~gGRCqOenUc1K+q8<1}K?Oa-g_X{X0h|Z^ z_FcHVhq*V*D{tYJ!`sW#_2woB8I5)t#CHOt+!9ESY48E_^r3Ht=d{DIMO|e z`Gwc)>)3fFF$(5x`3>$hu0&90i@iV;LyG-ic`z)VS*-YLA;j?$P z>1U+6!<2)Rz}XCM%Zjss4opyHVEDi*U>6qgdfl}TkC$7_U;m5Yvi#ZHg^%Ue>I&s@^izopr08#skyZ`_I literal 0 HcmV?d00001 From 54b82c40c6952f1a33533c2541cc3b1fc19709d0 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Mon, 15 Aug 2016 19:46:31 +0200 Subject: [PATCH 194/214] Added ISSUE_TEMPLATE --- .github/ISSUE_TEMPLATE.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md index 550935f38..9049acaef 100755 --- a/.github/ISSUE_TEMPLATE.md +++ b/.github/ISSUE_TEMPLATE.md @@ -10,12 +10,12 @@ 3. ... -#### Version **(Make sure you are on the latest version before reporting)**: +#### Version (Make sure you are on the latest version before reporting): - Minecraft: 1.10.2 - Forge: - Refined Storage: -#### If a (crash)log is relevant for this issue, link it here +#### If a (crash)log is relevant for this issue, link it here: [pastebin/gist/etc link here] \ No newline at end of file From ecc454917765822a120981fb8979b1dd72b045ed Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Mon, 15 Aug 2016 21:36:00 +0200 Subject: [PATCH 195/214] Fluid Storage Block --- .../java/refinedstorage/RefinedStorage.java | 2 + .../refinedstorage/RefinedStorageBlocks.java | 1 + .../refinedstorage/RefinedStorageGui.java | 1 + .../solderer/SoldererRecipeFluidStorage.java | 38 +++ .../block/BlockFluidStorage.java | 114 ++++++++ .../refinedstorage/block/BlockStorage.java | 2 +- .../container/ContainerFluidStorage.java | 30 ++ .../java/refinedstorage/gui/GuiHandler.java | 4 + .../item/ItemBlockFluidStorage.java | 90 ++++++ .../item/ItemFluidStorageDisk.java | 20 ++ .../refinedstorage/proxy/CommonProxy.java | 8 + .../refinedstorage/tile/TileFluidStorage.java | 264 ++++++++++++++++++ .../assets/refinedstorage/lang/en_US.lang | 5 + 13 files changed, 578 insertions(+), 1 deletion(-) create mode 100755 src/main/java/refinedstorage/apiimpl/solderer/SoldererRecipeFluidStorage.java create mode 100755 src/main/java/refinedstorage/block/BlockFluidStorage.java create mode 100755 src/main/java/refinedstorage/container/ContainerFluidStorage.java create mode 100755 src/main/java/refinedstorage/item/ItemBlockFluidStorage.java create mode 100755 src/main/java/refinedstorage/tile/TileFluidStorage.java diff --git a/src/main/java/refinedstorage/RefinedStorage.java b/src/main/java/refinedstorage/RefinedStorage.java index 4a1265527..1a0eade82 100755 --- a/src/main/java/refinedstorage/RefinedStorage.java +++ b/src/main/java/refinedstorage/RefinedStorage.java @@ -60,6 +60,7 @@ public final class RefinedStorage { public int relayUsage; public int soldererUsage; public int storageUsage; + public int fluidStorageUsage; public int wirelessTransmitterUsage; public int gridUsage; public int craftingGridUsage; @@ -106,6 +107,7 @@ public final class RefinedStorage { relayUsage = config.getInt("relay", "energy", 1, 0, Integer.MAX_VALUE, "The energy used by Relays"); soldererUsage = config.getInt("solderer", "energy", 3, 0, Integer.MAX_VALUE, "The energy used by Solderers"); storageUsage = config.getInt("storage", "energy", 1, 0, Integer.MAX_VALUE, "The energy used by Storage Blocks"); + fluidStorageUsage = config.getInt("fluidStorage", "energy", 1, 0, Integer.MAX_VALUE, "The energy used by Fluid Storage Blocks"); wirelessTransmitterUsage = config.getInt("wirelessTransmitter", "energy", 8, 0, Integer.MAX_VALUE, "The energy used by Wireless Transmitters"); gridUsage = config.getInt("grid", "energy", 2, 0, Integer.MAX_VALUE, "The energy used by Grids"); craftingGridUsage = config.getInt("craftingGrid", "energy", 4, 0, Integer.MAX_VALUE, "The energy used by Crafting Grids"); diff --git a/src/main/java/refinedstorage/RefinedStorageBlocks.java b/src/main/java/refinedstorage/RefinedStorageBlocks.java index 113e8f3d8..b28804898 100755 --- a/src/main/java/refinedstorage/RefinedStorageBlocks.java +++ b/src/main/java/refinedstorage/RefinedStorageBlocks.java @@ -25,4 +25,5 @@ public final class RefinedStorageBlocks { public static final BlockNetworkTransmitter NETWORK_TRANSMITTER = new BlockNetworkTransmitter(); public static final BlockNetworkReceiver NETWORK_RECEIVER = new BlockNetworkReceiver(); public static final BlockFluidInterface FLUID_INTERFACE = new BlockFluidInterface(); + public static final BlockFluidStorage FLUID_STORAGE = new BlockFluidStorage(); } \ No newline at end of file diff --git a/src/main/java/refinedstorage/RefinedStorageGui.java b/src/main/java/refinedstorage/RefinedStorageGui.java index 4cb2a2354..0bf90311d 100755 --- a/src/main/java/refinedstorage/RefinedStorageGui.java +++ b/src/main/java/refinedstorage/RefinedStorageGui.java @@ -22,4 +22,5 @@ public final class RefinedStorageGui { public static final int NETWORK_TRANSMITTER = 18; public static final int FLUID_INTERFACE = 19; public static final int EXTERNAL_STORAGE = 20; + public static final int FLUID_STORAGE = 21; } diff --git a/src/main/java/refinedstorage/apiimpl/solderer/SoldererRecipeFluidStorage.java b/src/main/java/refinedstorage/apiimpl/solderer/SoldererRecipeFluidStorage.java new file mode 100755 index 000000000..08da59181 --- /dev/null +++ b/src/main/java/refinedstorage/apiimpl/solderer/SoldererRecipeFluidStorage.java @@ -0,0 +1,38 @@ +package refinedstorage.apiimpl.solderer; + +import net.minecraft.item.ItemStack; +import refinedstorage.RefinedStorageBlocks; +import refinedstorage.RefinedStorageItems; +import refinedstorage.api.solderer.ISoldererRecipe; +import refinedstorage.block.EnumFluidStorageType; +import refinedstorage.item.ItemBlockFluidStorage; +import refinedstorage.item.ItemProcessor; + +public class SoldererRecipeFluidStorage implements ISoldererRecipe { + private EnumFluidStorageType type; + private ItemStack[] rows; + + public SoldererRecipeFluidStorage(EnumFluidStorageType type, int storagePart) { + this.type = type; + this.rows = new ItemStack[]{ + new ItemStack(RefinedStorageItems.PROCESSOR, 1, ItemProcessor.TYPE_BASIC), + new ItemStack(RefinedStorageBlocks.MACHINE_CASING), + new ItemStack(RefinedStorageItems.FLUID_STORAGE_PART, 1, storagePart) + }; + } + + @Override + public ItemStack getRow(int row) { + return rows[row]; + } + + @Override + public ItemStack getResult() { + return ItemBlockFluidStorage.initNBT(new ItemStack(RefinedStorageBlocks.FLUID_STORAGE, 1, type.getId())); + } + + @Override + public int getDuration() { + return 200; + } +} diff --git a/src/main/java/refinedstorage/block/BlockFluidStorage.java b/src/main/java/refinedstorage/block/BlockFluidStorage.java new file mode 100755 index 000000000..774c57818 --- /dev/null +++ b/src/main/java/refinedstorage/block/BlockFluidStorage.java @@ -0,0 +1,114 @@ +package refinedstorage.block; + +import net.minecraft.block.properties.PropertyEnum; +import net.minecraft.block.state.BlockStateContainer; +import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import refinedstorage.RefinedStorage; +import refinedstorage.RefinedStorageBlocks; +import refinedstorage.RefinedStorageGui; +import refinedstorage.item.ItemBlockFluidStorage; +import refinedstorage.tile.TileFluidStorage; + +import java.util.ArrayList; +import java.util.List; + +public class BlockFluidStorage extends BlockNode { + public static final PropertyEnum TYPE = PropertyEnum.create("type", EnumFluidStorageType.class); + + public BlockFluidStorage() { + super("fluid_storage"); + + setHardness(5.8F); + } + + @Override + public void getSubBlocks(Item item, CreativeTabs tab, List subItems) { + for (int i = 0; i <= 4; ++i) { + subItems.add(ItemBlockFluidStorage.initNBT(new ItemStack(item, 1, i))); + } + } + + @Override + protected BlockStateContainer createBlockState() { + return createBlockStateBuilder() + .add(TYPE) + .build(); + } + + @Override + public IBlockState getStateFromMeta(int meta) { + return getDefaultState().withProperty(TYPE, EnumFluidStorageType.getById(meta)); + } + + @Override + public int getMetaFromState(IBlockState state) { + return ((EnumFluidStorageType) state.getValue(TYPE)).getId(); + } + + @Override + public TileEntity createTileEntity(World world, IBlockState state) { + return new TileFluidStorage(); + } + + @Override + public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) { + if (!world.isRemote) { + player.openGui(RefinedStorage.INSTANCE, RefinedStorageGui.FLUID_STORAGE, world, pos.getX(), pos.getY(), pos.getZ()); + } + + return true; + } + + @Override + public void onBlockPlacedBy(World world, BlockPos pos, IBlockState state, EntityLivingBase player, ItemStack stack) { + super.onBlockPlacedBy(world, pos, state, player, stack); + + if (!world.isRemote && stack.hasTagCompound() && stack.getTagCompound().hasKey(TileFluidStorage.NBT_STORAGE)) { + ((TileFluidStorage) world.getTileEntity(pos)).setStorageTag(stack.getTagCompound().getCompoundTag(TileFluidStorage.NBT_STORAGE)); + } + } + + @Override + public void breakBlock(World world, BlockPos pos, IBlockState state) { + ((TileFluidStorage) world.getTileEntity(pos)).onBreak(); + + super.breakBlock(world, pos, state); + } + + @Override + public List getDrops(IBlockAccess world, BlockPos pos, IBlockState state, int fortune) { + TileFluidStorage storage = (TileFluidStorage) world.getTileEntity(pos); + + List drops = new ArrayList<>(); + + ItemStack stack = new ItemStack(RefinedStorageBlocks.FLUID_STORAGE, 1, getMetaFromState(state)); + stack.setTagCompound(new NBTTagCompound()); + stack.getTagCompound().setTag(TileFluidStorage.NBT_STORAGE, storage.getStorageTag()); + + drops.add(stack); + + return drops; + } + + @Override + public Item createItem() { + return new ItemBlockFluidStorage(); + } + + @Override + public EnumPlacementType getPlacementType() { + return null; + } +} diff --git a/src/main/java/refinedstorage/block/BlockStorage.java b/src/main/java/refinedstorage/block/BlockStorage.java index 528fad467..c2880d805 100755 --- a/src/main/java/refinedstorage/block/BlockStorage.java +++ b/src/main/java/refinedstorage/block/BlockStorage.java @@ -93,7 +93,7 @@ public class BlockStorage extends BlockNode { List drops = new ArrayList<>(); - ItemStack stack = new ItemStack(RefinedStorageBlocks.STORAGE, 1, RefinedStorageBlocks.STORAGE.getMetaFromState(state)); + ItemStack stack = new ItemStack(RefinedStorageBlocks.STORAGE, 1, getMetaFromState(state)); stack.setTagCompound(new NBTTagCompound()); stack.getTagCompound().setTag(TileStorage.NBT_STORAGE, storage.getStorageTag()); diff --git a/src/main/java/refinedstorage/container/ContainerFluidStorage.java b/src/main/java/refinedstorage/container/ContainerFluidStorage.java new file mode 100755 index 000000000..85f8a4445 --- /dev/null +++ b/src/main/java/refinedstorage/container/ContainerFluidStorage.java @@ -0,0 +1,30 @@ +package refinedstorage.container; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; +import refinedstorage.container.slot.SlotSpecimenFluid; +import refinedstorage.tile.TileFluidStorage; + +public class ContainerFluidStorage extends ContainerBase { + public ContainerFluidStorage(TileFluidStorage tile, EntityPlayer player) { + super(tile, player); + + for (int i = 0; i < 9; ++i) { + addSlotToContainer(new SlotSpecimenFluid(!tile.getWorld().isRemote, tile.getFilters(), i, 8 + (18 * i), 20)); + } + + addPlayerInventory(8, 129); + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer player, int index) { + Slot slot = getSlot(index); + + if (slot != null && slot.getHasStack() && index >= 8) { + return mergeItemStackToSpecimen(slot.getStack(), 0, 9); + } + + return null; + } +} diff --git a/src/main/java/refinedstorage/gui/GuiHandler.java b/src/main/java/refinedstorage/gui/GuiHandler.java index 5f7adcb08..899719eeb 100755 --- a/src/main/java/refinedstorage/gui/GuiHandler.java +++ b/src/main/java/refinedstorage/gui/GuiHandler.java @@ -56,6 +56,8 @@ public class GuiHandler implements IGuiHandler { return new ContainerNetworkTransmitter((TileNetworkTransmitter) tile, player); case RefinedStorageGui.FLUID_INTERFACE: return new ContainerFluidInterface((TileFluidInterface) tile, player); + case RefinedStorageGui.FLUID_STORAGE: + return new ContainerFluidStorage((TileFluidStorage) tile, player); default: return null; } @@ -131,6 +133,8 @@ public class GuiHandler implements IGuiHandler { return new GuiNetworkTransmitter((ContainerNetworkTransmitter) getContainer(ID, player, tile), (TileNetworkTransmitter) tile); case RefinedStorageGui.FLUID_INTERFACE: return new GuiFluidInterface((ContainerFluidInterface) getContainer(ID, player, tile)); + case RefinedStorageGui.FLUID_STORAGE: + return new GuiStorage((ContainerFluidStorage) getContainer(ID, player, tile), (TileFluidStorage) tile); default: return null; } diff --git a/src/main/java/refinedstorage/item/ItemBlockFluidStorage.java b/src/main/java/refinedstorage/item/ItemBlockFluidStorage.java new file mode 100755 index 000000000..f4d484798 --- /dev/null +++ b/src/main/java/refinedstorage/item/ItemBlockFluidStorage.java @@ -0,0 +1,90 @@ +package refinedstorage.item; + +import net.minecraft.client.resources.I18n; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.InventoryHelper; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.ActionResult; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumHand; +import net.minecraft.world.World; +import refinedstorage.RefinedStorageBlocks; +import refinedstorage.RefinedStorageItems; +import refinedstorage.apiimpl.storage.fluid.FluidStorageNBT; +import refinedstorage.block.EnumFluidStorageType; +import refinedstorage.tile.TileFluidStorage; + +import java.util.List; + +public class ItemBlockFluidStorage extends ItemBlockBase { + public ItemBlockFluidStorage() { + super(RefinedStorageBlocks.FLUID_STORAGE, true); + } + + @Override + public void addInformation(ItemStack stack, EntityPlayer player, List tooltip, boolean advanced) { + EnumFluidStorageType type = EnumFluidStorageType.getById(stack.getMetadata()); + + if (type != null && isValid(stack)) { + NBTTagCompound tag = stack.getTagCompound().getCompoundTag(TileFluidStorage.NBT_STORAGE); + + if (type == EnumFluidStorageType.TYPE_CREATIVE) { + tooltip.add(I18n.format("misc.refinedstorage:storage.stored", FluidStorageNBT.getStoredFromNBT(tag))); + } else { + tooltip.add(I18n.format("misc.refinedstorage:storage.stored_capacity", FluidStorageNBT.getStoredFromNBT(tag), type.getCapacity())); + } + } + } + + @Override + public ActionResult onItemRightClick(ItemStack stack, World world, EntityPlayer player, EnumHand hand) { + EnumFluidStorageType type = EnumFluidStorageType.getById(stack.getMetadata()); + + if (type != null && isValid(stack) && FluidStorageNBT.getStoredFromNBT(stack.getTagCompound().getCompoundTag(TileFluidStorage.NBT_STORAGE)) == 0 && stack.getMetadata() != ItemFluidStorageDisk.TYPE_CREATIVE && !world.isRemote && player.isSneaking()) { + ItemStack storagePart = new ItemStack(RefinedStorageItems.FLUID_STORAGE_PART, 1, stack.getMetadata()); + + if (!player.inventory.addItemStackToInventory(storagePart.copy())) { + InventoryHelper.spawnItemStack(world, player.getPosition().getX(), player.getPosition().getY(), player.getPosition().getZ(), storagePart); + } + + ItemStack processor = new ItemStack(RefinedStorageItems.PROCESSOR, 1, ItemProcessor.TYPE_BASIC); + + if (!player.inventory.addItemStackToInventory(processor.copy())) { + InventoryHelper.spawnItemStack(world, player.getPosition().getX(), player.getPosition().getY(), player.getPosition().getZ(), processor); + } + + return new ActionResult<>(EnumActionResult.SUCCESS, new ItemStack(RefinedStorageBlocks.MACHINE_CASING)); + } + + return new ActionResult<>(EnumActionResult.PASS, stack); + } + + private static boolean isValid(ItemStack stack) { + return stack.getTagCompound() != null && stack.getTagCompound().hasKey(TileFluidStorage.NBT_STORAGE); + } + + @Override + public void onUpdate(ItemStack stack, World world, Entity entity, int slot, boolean selected) { + super.onUpdate(stack, world, entity, slot, selected); + + if (!stack.hasTagCompound()) { + initNBT(stack); + } + } + + @Override + public void onCreated(ItemStack stack, World world, EntityPlayer player) { + super.onCreated(stack, world, player); + + initNBT(stack); + } + + public static ItemStack initNBT(ItemStack stack) { + NBTTagCompound tag = new NBTTagCompound(); + tag.setTag(TileFluidStorage.NBT_STORAGE, FluidStorageNBT.createNBT()); + stack.setTagCompound(tag); + return stack; + } +} diff --git a/src/main/java/refinedstorage/item/ItemFluidStorageDisk.java b/src/main/java/refinedstorage/item/ItemFluidStorageDisk.java index 4aa2e99a8..d33e4463b 100755 --- a/src/main/java/refinedstorage/item/ItemFluidStorageDisk.java +++ b/src/main/java/refinedstorage/item/ItemFluidStorageDisk.java @@ -4,9 +4,14 @@ import net.minecraft.client.resources.I18n; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.InventoryHelper; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import net.minecraft.util.ActionResult; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumHand; import net.minecraft.world.World; +import refinedstorage.RefinedStorageItems; import refinedstorage.apiimpl.storage.fluid.FluidStorageNBT; import refinedstorage.block.EnumFluidStorageType; @@ -43,6 +48,21 @@ public class ItemFluidStorageDisk extends ItemBase { } } + @Override + public ActionResult onItemRightClick(ItemStack disk, World world, EntityPlayer player, EnumHand hand) { + if (!world.isRemote && player.isSneaking() && FluidStorageNBT.isValid(disk) && FluidStorageNBT.getStoredFromNBT(disk.getTagCompound()) == 0 && disk.getMetadata() != TYPE_CREATIVE) { + ItemStack storagePart = new ItemStack(RefinedStorageItems.FLUID_STORAGE_PART, 1, disk.getMetadata()); + + if (!player.inventory.addItemStackToInventory(storagePart.copy())) { + InventoryHelper.spawnItemStack(world, player.getPosition().getX(), player.getPosition().getY(), player.getPosition().getZ(), storagePart); + } + + return new ActionResult<>(EnumActionResult.SUCCESS, new ItemStack(RefinedStorageItems.STORAGE_HOUSING)); + } + + return new ActionResult<>(EnumActionResult.PASS, disk); + } + @Override public void addInformation(ItemStack disk, EntityPlayer player, List tooltip, boolean advanced) { if (FluidStorageNBT.isValid(disk)) { diff --git a/src/main/java/refinedstorage/proxy/CommonProxy.java b/src/main/java/refinedstorage/proxy/CommonProxy.java index 3c5ebbd82..96da659e5 100755 --- a/src/main/java/refinedstorage/proxy/CommonProxy.java +++ b/src/main/java/refinedstorage/proxy/CommonProxy.java @@ -86,6 +86,7 @@ public class CommonProxy { registerTile(TileNetworkReceiver.class, "network_receiver"); registerTile(TileNetworkTransmitter.class, "network_transmitter"); registerTile(TileFluidInterface.class, "fluid_interface"); + registerTile(TileFluidStorage.class, "fluid_storage"); registerBlock(RefinedStorageBlocks.CONTROLLER); registerBlock(RefinedStorageBlocks.GRID); @@ -109,6 +110,7 @@ public class CommonProxy { registerBlock(RefinedStorageBlocks.NETWORK_TRANSMITTER); registerBlock(RefinedStorageBlocks.NETWORK_RECEIVER); registerBlock(RefinedStorageBlocks.FLUID_INTERFACE); + registerBlock(RefinedStorageBlocks.FLUID_STORAGE); registerItem(RefinedStorageItems.QUARTZ_ENRICHED_IRON); registerItem(RefinedStorageItems.STORAGE_DISK); @@ -532,6 +534,12 @@ public class CommonProxy { RefinedStorageAPI.SOLDERER_REGISTRY.addRecipe(new SoldererRecipeStorage(EnumItemStorageType.TYPE_16K, ItemStoragePart.TYPE_16K)); RefinedStorageAPI.SOLDERER_REGISTRY.addRecipe(new SoldererRecipeStorage(EnumItemStorageType.TYPE_64K, ItemStoragePart.TYPE_64K)); + // Fluid Storage Blocks + RefinedStorageAPI.SOLDERER_REGISTRY.addRecipe(new SoldererRecipeFluidStorage(EnumFluidStorageType.TYPE_64K, ItemFluidStoragePart.TYPE_64K)); + RefinedStorageAPI.SOLDERER_REGISTRY.addRecipe(new SoldererRecipeFluidStorage(EnumFluidStorageType.TYPE_128K, ItemFluidStoragePart.TYPE_128K)); + RefinedStorageAPI.SOLDERER_REGISTRY.addRecipe(new SoldererRecipeFluidStorage(EnumFluidStorageType.TYPE_256K, ItemFluidStoragePart.TYPE_256K)); + RefinedStorageAPI.SOLDERER_REGISTRY.addRecipe(new SoldererRecipeFluidStorage(EnumFluidStorageType.TYPE_512K, ItemFluidStoragePart.TYPE_512K)); + // Crafting Monitor GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(RefinedStorageBlocks.CRAFTING_MONITOR), "EGE", diff --git a/src/main/java/refinedstorage/tile/TileFluidStorage.java b/src/main/java/refinedstorage/tile/TileFluidStorage.java new file mode 100755 index 000000000..cedf6479b --- /dev/null +++ b/src/main/java/refinedstorage/tile/TileFluidStorage.java @@ -0,0 +1,264 @@ +package refinedstorage.tile; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.datasync.DataSerializers; +import net.minecraftforge.fluids.FluidStack; +import refinedstorage.RefinedStorage; +import refinedstorage.RefinedStorageBlocks; +import refinedstorage.api.network.INetworkMaster; +import refinedstorage.api.storage.fluid.IFluidStorage; +import refinedstorage.api.storage.fluid.IFluidStorageProvider; +import refinedstorage.apiimpl.storage.fluid.FluidStorageNBT; +import refinedstorage.apiimpl.storage.fluid.FluidUtils; +import refinedstorage.block.BlockFluidStorage; +import refinedstorage.block.EnumFluidStorageType; +import refinedstorage.inventory.ItemHandlerFluid; +import refinedstorage.tile.config.IComparable; +import refinedstorage.tile.config.IFilterable; +import refinedstorage.tile.config.IPrioritizable; +import refinedstorage.tile.data.ITileDataProducer; +import refinedstorage.tile.data.TileDataParameter; + +import java.util.List; + +public class TileFluidStorage extends TileNode implements IFluidStorageProvider, IStorageGui, IComparable, IFilterable, IPrioritizable { + public static final TileDataParameter PRIORITY = IPrioritizable.createParameter(); + public static final TileDataParameter COMPARE = IComparable.createParameter(); + public static final TileDataParameter MODE = IFilterable.createParameter(); + public static final TileDataParameter STORED = new TileDataParameter<>(DataSerializers.VARINT, 0, new ITileDataProducer() { + @Override + public Integer getValue(TileFluidStorage tile) { + return FluidStorageNBT.getStoredFromNBT(tile.storageTag); + } + }); + + class FluidStorage extends FluidStorageNBT { + public FluidStorage() { + super(TileFluidStorage.this.getStorageTag(), TileFluidStorage.this.getCapacity(), TileFluidStorage.this); + } + + @Override + public int getPriority() { + return priority; + } + + @Override + public FluidStack insertFluid(FluidStack stack, int size, boolean simulate) { + if (!IFilterable.canTakeFluids(filters, mode, compare, stack)) { + return FluidUtils.copyStackWithSize(stack, size); + } + + return super.insertFluid(stack, size, simulate); + } + } + + public static final String NBT_STORAGE = "Storage"; + + private static final String NBT_PRIORITY = "Priority"; + private static final String NBT_COMPARE = "Compare"; + private static final String NBT_MODE = "Mode"; + + private ItemHandlerFluid filters = new ItemHandlerFluid(9, this); + + private NBTTagCompound storageTag = FluidStorageNBT.createNBT(); + + private FluidStorage storage; + + private EnumFluidStorageType type; + + private int priority = 0; + private int compare = 0; + private int mode = IFilterable.WHITELIST; + + public TileFluidStorage() { + dataManager.addWatchedParameter(PRIORITY); + dataManager.addWatchedParameter(COMPARE); + dataManager.addWatchedParameter(MODE); + dataManager.addWatchedParameter(STORED); + } + + @Override + public int getEnergyUsage() { + return RefinedStorage.INSTANCE.fluidStorageUsage; + } + + @Override + public void updateNode() { + } + + @Override + public void update() { + super.update(); + + if (storage == null && storageTag != null) { + storage = new FluidStorage(); + + if (network != null) { + network.getFluidStorage().rebuild(); + } + } + } + + public void onBreak() { + if (storage != null) { + storage.writeToNBT(); + } + } + + @Override + public void onConnectionChange(INetworkMaster network, boolean state) { + super.onConnectionChange(network, state); + + network.getFluidStorage().rebuild(); + } + + @Override + public void addFluidStorages(List storages) { + if (storage != null) { + storages.add(storage); + } + } + + @Override + public void read(NBTTagCompound tag) { + super.read(tag); + + readItems(filters, 0, tag); + + if (tag.hasKey(NBT_PRIORITY)) { + priority = tag.getInteger(NBT_PRIORITY); + } + + if (tag.hasKey(NBT_STORAGE)) { + storageTag = tag.getCompoundTag(NBT_STORAGE); + } + + if (tag.hasKey(NBT_COMPARE)) { + compare = tag.getInteger(NBT_COMPARE); + } + + if (tag.hasKey(NBT_MODE)) { + mode = tag.getInteger(NBT_MODE); + } + } + + @Override + public NBTTagCompound write(NBTTagCompound tag) { + super.write(tag); + + writeItems(filters, 0, tag); + + tag.setInteger(NBT_PRIORITY, priority); + + if (storage != null) { + storage.writeToNBT(); + } + + tag.setTag(NBT_STORAGE, storageTag); + tag.setInteger(NBT_COMPARE, compare); + tag.setInteger(NBT_MODE, mode); + + return tag; + } + + public EnumFluidStorageType getType() { + if (type == null && worldObj.getBlockState(pos).getBlock() == RefinedStorageBlocks.FLUID_STORAGE) { + this.type = ((EnumFluidStorageType) worldObj.getBlockState(pos).getValue(BlockFluidStorage.TYPE)); + } + + return type == null ? EnumFluidStorageType.TYPE_64K : type; + } + + @Override + public int getCompare() { + return compare; + } + + @Override + public void setCompare(int compare) { + this.compare = compare; + + markDirty(); + } + + @Override + public int getMode() { + return mode; + } + + @Override + public void setMode(int mode) { + this.mode = mode; + + markDirty(); + } + + @Override + public String getGuiTitle() { + return "block.refinedstorage:fluid_storage." + getType().getId() + ".name"; + } + + @Override + public TileDataParameter getTypeParameter() { + return null; + } + + @Override + public TileDataParameter getRedstoneModeParameter() { + return REDSTONE_MODE; + } + + @Override + public TileDataParameter getCompareParameter() { + return COMPARE; + } + + @Override + public TileDataParameter getFilterParameter() { + return MODE; + } + + @Override + public TileDataParameter getPriorityParameter() { + return PRIORITY; + } + + public NBTTagCompound getStorageTag() { + return storageTag; + } + + public void setStorageTag(NBTTagCompound storageTag) { + this.storageTag = storageTag; + } + + public FluidStorageNBT getStorage() { + return storage; + } + + public ItemHandlerFluid getFilters() { + return filters; + } + + @Override + public int getPriority() { + return priority; + } + + @Override + public void setPriority(int priority) { + this.priority = priority; + + markDirty(); + } + + @Override + public int getStored() { + return STORED.getValue(); + } + + @Override + public int getCapacity() { + return getType().getCapacity(); + } +} + diff --git a/src/main/resources/assets/refinedstorage/lang/en_US.lang b/src/main/resources/assets/refinedstorage/lang/en_US.lang index deaac37c7..d9a0dbaad 100755 --- a/src/main/resources/assets/refinedstorage/lang/en_US.lang +++ b/src/main/resources/assets/refinedstorage/lang/en_US.lang @@ -134,6 +134,11 @@ block.refinedstorage:processing_pattern_encoder.name=Processing Pattern Encoder block.refinedstorage:network_receiver.name=Network Receiver block.refinedstorage:network_transmitter.name=Network Transmitter block.refinedstorage:fluid_interface.name=Fluid Interface +block.refinedstorage:fluid_storage.0.name=64k Fluid Storage Block +block.refinedstorage:fluid_storage.1.name=128k Fluid Storage Block +block.refinedstorage:fluid_storage.2.name=256k Fluid Storage Block +block.refinedstorage:fluid_storage.3.name=512k Fluid Storage Block +block.refinedstorage:fluid_storage.4.name=Creative Fluid Storage Block item.refinedstorage:storage_disk.0.name=1k Storage Disk item.refinedstorage:storage_disk.1.name=4k Storage Disk From 5c5212e86a75902b08c83ac61717a028246bfe5f Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Mon, 15 Aug 2016 22:01:07 +0200 Subject: [PATCH 196/214] Add shiftclickhandler for fluid interface --- .../container/ContainerFluidInterface.java | 29 +++++++++++++++++++ .../refinedstorage/gui/GuiFluidInterface.java | 8 +++++ 2 files changed, 37 insertions(+) diff --git a/src/main/java/refinedstorage/container/ContainerFluidInterface.java b/src/main/java/refinedstorage/container/ContainerFluidInterface.java index 244bf54da..3c535c3db 100755 --- a/src/main/java/refinedstorage/container/ContainerFluidInterface.java +++ b/src/main/java/refinedstorage/container/ContainerFluidInterface.java @@ -1,6 +1,8 @@ package refinedstorage.container; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; import net.minecraftforge.items.SlotItemHandler; import refinedstorage.container.slot.SlotSpecimenFluid; import refinedstorage.tile.TileFluidInterface; @@ -18,4 +20,31 @@ public class ContainerFluidInterface extends ContainerBase { addPlayerInventory(8, 122); } + + @Override + public ItemStack transferStackInSlot(EntityPlayer player, int index) { + ItemStack stack = null; + + Slot slot = getSlot(index); + + if (slot != null && slot.getHasStack()) { + stack = slot.getStack(); + + if (index < 4 + 2) { + if (!mergeItemStack(stack, 4 + 2, inventorySlots.size(), false)) { + return null; + } + } else if (!mergeItemStack(stack, 0, 4 + 2, false)) { + return null; + } + + if (stack.stackSize == 0) { + slot.putStack(null); + } else { + slot.onSlotChanged(); + } + } + + return stack; + } } diff --git a/src/main/java/refinedstorage/gui/GuiFluidInterface.java b/src/main/java/refinedstorage/gui/GuiFluidInterface.java index 4a15b69aa..9f2d9ce9c 100755 --- a/src/main/java/refinedstorage/gui/GuiFluidInterface.java +++ b/src/main/java/refinedstorage/gui/GuiFluidInterface.java @@ -46,5 +46,13 @@ public class GuiFluidInterface extends GuiBase { drawString(43 + 4, 20, t("gui.refinedstorage:fluid_interface.in")); drawString(115 + 1, 20, t("gui.refinedstorage:fluid_interface.out")); drawString(7, 111, t("container.inventory")); + + if (inBounds(46, 56, 12, 47, mouseX, mouseY) && TileFluidInterface.TANK_IN.getValue() != null) { + drawTooltip(mouseX, mouseY, TileFluidInterface.TANK_IN.getValue().getLocalizedName() + "\n" + TileFluidInterface.TANK_IN.getValue().amount + " mB"); + } + + if (inBounds(118, 56, 12, 47, mouseX, mouseY) && TileFluidInterface.TANK_OUT.getValue() != null) { + drawTooltip(mouseX, mouseY, TileFluidInterface.TANK_OUT.getValue().getLocalizedName() + "\n" + TileFluidInterface.TANK_OUT.getValue().amount + " mB"); + } } } From dc636e5d127039dc5cf230eab5bad8ffd851bbb8 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Mon, 15 Aug 2016 22:17:25 +0200 Subject: [PATCH 197/214] Add texture cache --- src/main/java/refinedstorage/gui/GuiBase.java | 14 ++++++++++---- .../textures/gui/fluid_interface.png | Bin 2061 -> 2038 bytes 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/main/java/refinedstorage/gui/GuiBase.java b/src/main/java/refinedstorage/gui/GuiBase.java index 091839e1a..5fb5887da 100755 --- a/src/main/java/refinedstorage/gui/GuiBase.java +++ b/src/main/java/refinedstorage/gui/GuiBase.java @@ -19,11 +19,11 @@ import refinedstorage.gui.sidebutton.SideButton; import refinedstorage.inventory.ItemHandlerFluid; import java.io.IOException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; +import java.util.*; public abstract class GuiBase extends GuiContainer { + private static final Map TEXTURE_CACHE = new HashMap<>(); + // @TODO: Don't depend on JEI public static final FluidStackRenderer FLUID_RENDERER = new FluidStackRenderer(Fluid.BUCKET_VOLUME, false, 16, 16, null); @@ -204,7 +204,13 @@ public abstract class GuiBase extends GuiContainer { } public void bindTexture(String base, String file) { - mc.getTextureManager().bindTexture(new ResourceLocation(base, "textures/" + file)); + String id = base + ":" + file; + + if (!TEXTURE_CACHE.containsKey(id)) { + TEXTURE_CACHE.put(id, new ResourceLocation(base, "textures/" + file)); + } + + mc.getTextureManager().bindTexture(TEXTURE_CACHE.get(id)); } public void drawItem(int x, int y, ItemStack stack) { diff --git a/src/main/resources/assets/refinedstorage/textures/gui/fluid_interface.png b/src/main/resources/assets/refinedstorage/textures/gui/fluid_interface.png index b4338e12a535bf3a80ab633469cf04d16e880420..864ca9e796cddfa17976166cc0d9b3b65554c778 100755 GIT binary patch literal 2038 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K58911MRQ8&P5Fo{p?&#~tz_78O`%fY(0|PTd zfKP}kP~62^QA&dRf`N&DBm;)v@9e6; zXy+{Oh%9Dc;M)Vjj8pd%c>)C`OI#yLg7ec#$`gxH8440J^GfvcQcDy}^bGV24c2mT z9RQXn(Vi}jAr*0N?>6S$GLT?+xMj-s`jlxil+zYA2)|LgR=?a+jMMO(x>-nmcKhkn z7t2rU%Gn?L`Kj%6!Mo+R|JufX&T3q^{I~u8nD_6G&Z=~)w-Mi9gDz(7?d7Wan-V21XW-ZZU_3kBtm> zzRzL!DfzUNr@(7=!}q7@Q?7ruPMB%!1QdfSZ>VMbvE!_-{2u8?uVOyhR5O2YDn1(i z@BX(+7NEgfG8kDT;68td*NGU8QTqeMwT0*4fi*c7bc~~)QGF!+opeD=JlPgyMtH%N|0mx#`fT}-YvcZ zELVgX^ry~}E6xg)Kcn2hP|i@lPr1Z|;UCM%t@i}2WEifWZ>?r8_zU(1)XDeNfi`j+ z@LmdZ9|NPsRxL&?#+LhnzqY<$xbMi&_R?>@2xCHwS^4i9xAHY_Xdc+{PQ7s7jyT3u zs$hL@-U|V>u_T<;WCR)Dx7G{D6KK#3V&YJ6FlYE9Dw4~d!1RhE;bvGvDpSF$*xyVx z|9*e*{r>-?jWzR|`5?P@t%jN%EJ+-+waL_Ictph8*8BbNkC& zKt_XYyL%OEE0|O9XZ;O#>q`<1wbNq`@0C3ka}lUv&*f)Q`(|#J6$B{gTe~DWM4f>6VkF literal 2061 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K58911MRQ8&P5Fo{p?&#~tz_78O`%fY(0|PTd zfKP}kP~6pE2Pzl^qaiR{L*U7CX(dob zDGBlm2B!9r3>bpHv#SE*nX|wnvY3H^Z!ZWly8oWA7APoL;u=vBoS#-wo>-L1P>`6J zSE84fTB2a0XP{?ju$GJK0I)p5+8&5bNB;Pf?t7Lzg;dl-wIIuGa`c=(;EYNv0j_`Rl*_aWbG=B{s8-X9V0(*`K(5M#nHmEm7a zT_LalZ3u0+e_zn*w&;d+Kl?7+WGH#Rvp@i-sN=l0H3P#5_KIJJqJi4xGX7#`V2EY> zB3?GpPsXP_Zi(>judF*>7K+urxU%rx4EBb53{|(6o?8pVJGr)qI zyCEKEzI4OB<|R?@Ip*>?e4k%j&idkCF~gGRCqOenUc1K+q8<1}K?Oa-g_X{X0h|Z^ z_FcHVhq*V*D{tYJ!`sW#_2woB8I5)t#CHOt+!9ESY48E_^r3Ht=d{DIMO|e z`Gwc)>)3fFF$(5x`3>$hu0&90i@iV;LyG-ic`z)VS*-YLA;j?$P z>1U+6!<2)Rz}XCM%Zjss4opyHVEDi*U>6qgdfl}TkC$7_U;m5Yvi#ZHg^%Ue>I&s@^izopr08#skyZ`_I From 005812629f92da27a2da409e0f2feac3b4c7ec9b Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Tue, 16 Aug 2016 19:31:38 +0200 Subject: [PATCH 198/214] Misc. improvements --- .../network/grid/FluidGridHandler.java | 6 +- .../apiimpl/storage/fluid/FluidRenderer.java | 126 ++++++++++++++++++ src/main/java/refinedstorage/gui/GuiBase.java | 5 +- .../refinedstorage/gui/GuiFluidInterface.java | 8 +- .../inventory/ItemHandlerFluid.java | 5 +- 5 files changed, 139 insertions(+), 11 deletions(-) create mode 100755 src/main/java/refinedstorage/apiimpl/storage/fluid/FluidRenderer.java diff --git a/src/main/java/refinedstorage/apiimpl/network/grid/FluidGridHandler.java b/src/main/java/refinedstorage/apiimpl/network/grid/FluidGridHandler.java index abe949063..8bef0453c 100755 --- a/src/main/java/refinedstorage/apiimpl/network/grid/FluidGridHandler.java +++ b/src/main/java/refinedstorage/apiimpl/network/grid/FluidGridHandler.java @@ -4,7 +4,9 @@ import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.init.Items; import net.minecraft.inventory.InventoryHelper; import net.minecraft.item.ItemStack; +import net.minecraftforge.common.ForgeModContainer; import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidRegistry; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.capability.CapabilityFluidHandler; import refinedstorage.api.network.INetworkMaster; @@ -16,7 +18,7 @@ import refinedstorage.apiimpl.storage.fluid.FluidUtils; import javax.annotation.Nullable; public class FluidGridHandler implements IFluidGridHandler { - private static final ItemStack EMPTY_BUCKET = new ItemStack(Items.BUCKET); + private static final ItemStack EMPTY_BUCKET = new ItemStack(FluidRegistry.isUniversalBucketEnabled() ? ForgeModContainer.getInstance().universalBucket : Items.BUCKET); private INetworkMaster network; @@ -28,7 +30,7 @@ public class FluidGridHandler implements IFluidGridHandler { public void onExtract(int hash, boolean shift, EntityPlayerMP player) { FluidStack stack = network.getFluidStorage().get(hash); - if (stack != null) { + if (stack != null && (stack.getFluid() == FluidRegistry.WATER || stack.getFluid() == FluidRegistry.LAVA || FluidRegistry.getBucketFluids().contains(stack.getFluid()))) { ItemStack bucket = NetworkUtils.extractItem(network, EMPTY_BUCKET, 1); if (bucket == null) { diff --git a/src/main/java/refinedstorage/apiimpl/storage/fluid/FluidRenderer.java b/src/main/java/refinedstorage/apiimpl/storage/fluid/FluidRenderer.java new file mode 100755 index 000000000..a5c486aad --- /dev/null +++ b/src/main/java/refinedstorage/apiimpl/storage/fluid/FluidRenderer.java @@ -0,0 +1,126 @@ +package refinedstorage.apiimpl.storage.fluid; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.VertexBuffer; +import net.minecraft.client.renderer.texture.TextureAtlasSprite; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidStack; + +/** + * This fluid renderer is copied over from JEI because Forge lacks a utility method for rendering fluids. + * + * @link https://github.com/mezz/JustEnoughItems/blob/1.10/src/main/java/mezz/jei/gui/ingredients/FluidStackRenderer.java + */ +public class FluidRenderer { + private static final int TEX_WIDTH = 16; + private static final int TEX_HEIGHT = 16; + private static final int MIN_FLUID_HEIGHT = 1; + + private final int capacityMb; + private final int width; + private final int height; + + public FluidRenderer(int capacityMb, int width, int height) { + this.capacityMb = capacityMb; + this.width = width; + this.height = height; + } + + public void draw(Minecraft minecraft, final int xPosition, final int yPosition, FluidStack fluidStack) { + GlStateManager.enableBlend(); + GlStateManager.enableAlpha(); + + drawFluid(minecraft, xPosition, yPosition, fluidStack); + + GlStateManager.color(1, 1, 1, 1); + + GlStateManager.disableAlpha(); + GlStateManager.disableBlend(); + } + + private void drawFluid(Minecraft minecraft, final int xPosition, final int yPosition, FluidStack fluidStack) { + if (fluidStack == null) { + return; + } + Fluid fluid = fluidStack.getFluid(); + if (fluid == null) { + return; + } + + TextureMap textureMapBlocks = minecraft.getTextureMapBlocks(); + ResourceLocation fluidStill = fluid.getStill(); + TextureAtlasSprite fluidStillSprite = null; + if (fluidStill != null) { + fluidStillSprite = textureMapBlocks.getTextureExtry(fluidStill.toString()); + } + if (fluidStillSprite == null) { + fluidStillSprite = textureMapBlocks.getMissingSprite(); + } + + int fluidColor = fluid.getColor(fluidStack); + + int scaledAmount = (fluidStack.amount * height) / capacityMb; + if (fluidStack.amount > 0 && scaledAmount < MIN_FLUID_HEIGHT) { + scaledAmount = MIN_FLUID_HEIGHT; + } + if (scaledAmount > height) { + scaledAmount = height; + } + + minecraft.renderEngine.bindTexture(TextureMap.LOCATION_BLOCKS_TEXTURE); + setGLColorFromInt(fluidColor); + + final int xTileCount = width / TEX_WIDTH; + final int xRemainder = width - (xTileCount * TEX_WIDTH); + final int yTileCount = scaledAmount / TEX_HEIGHT; + final int yRemainder = scaledAmount - (yTileCount * TEX_HEIGHT); + + final int yStart = yPosition + height; + + for (int xTile = 0; xTile <= xTileCount; xTile++) { + for (int yTile = 0; yTile <= yTileCount; yTile++) { + int width = (xTile == xTileCount) ? xRemainder : TEX_WIDTH; + int height = (yTile == yTileCount) ? yRemainder : TEX_HEIGHT; + int x = xPosition + (xTile * TEX_WIDTH); + int y = yStart - ((yTile + 1) * TEX_HEIGHT); + if (width > 0 && height > 0) { + int maskTop = TEX_HEIGHT - height; + int maskRight = TEX_WIDTH - width; + + drawFluidTexture(x, y, fluidStillSprite, maskTop, maskRight, 100); + } + } + } + } + + private static void setGLColorFromInt(int color) { + float red = (color >> 16 & 0xFF) / 255.0F; + float green = (color >> 8 & 0xFF) / 255.0F; + float blue = (color & 0xFF) / 255.0F; + + GlStateManager.color(red, green, blue, 1.0F); + } + + private static void drawFluidTexture(double xCoord, double yCoord, TextureAtlasSprite textureSprite, int maskTop, int maskRight, double zLevel) { + double uMin = (double) textureSprite.getMinU(); + double uMax = (double) textureSprite.getMaxU(); + double vMin = (double) textureSprite.getMinV(); + double vMax = (double) textureSprite.getMaxV(); + uMax = uMax - (maskRight / 16.0 * (uMax - uMin)); + vMax = vMax - (maskTop / 16.0 * (vMax - vMin)); + + Tessellator tessellator = Tessellator.getInstance(); + VertexBuffer vertexBuffer = tessellator.getBuffer(); + vertexBuffer.begin(7, DefaultVertexFormats.POSITION_TEX); + vertexBuffer.pos(xCoord, yCoord + 16, zLevel).tex(uMin, vMax).endVertex(); + vertexBuffer.pos(xCoord + 16 - maskRight, yCoord + 16, zLevel).tex(uMax, vMax).endVertex(); + vertexBuffer.pos(xCoord + 16 - maskRight, yCoord + maskTop, zLevel).tex(uMax, vMin).endVertex(); + vertexBuffer.pos(xCoord, yCoord + maskTop, zLevel).tex(uMin, vMin).endVertex(); + tessellator.draw(); + } +} diff --git a/src/main/java/refinedstorage/gui/GuiBase.java b/src/main/java/refinedstorage/gui/GuiBase.java index 5fb5887da..10af8c5c3 100755 --- a/src/main/java/refinedstorage/gui/GuiBase.java +++ b/src/main/java/refinedstorage/gui/GuiBase.java @@ -1,6 +1,5 @@ package refinedstorage.gui; -import mezz.jei.gui.ingredients.FluidStackRenderer; import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.inventory.GuiContainer; import net.minecraft.client.renderer.GlStateManager; @@ -15,6 +14,7 @@ import net.minecraftforge.fml.client.config.GuiCheckBox; import net.minecraftforge.items.SlotItemHandler; import org.lwjgl.input.Mouse; import refinedstorage.RefinedStorage; +import refinedstorage.apiimpl.storage.fluid.FluidRenderer; import refinedstorage.gui.sidebutton.SideButton; import refinedstorage.inventory.ItemHandlerFluid; @@ -24,8 +24,7 @@ import java.util.*; public abstract class GuiBase extends GuiContainer { private static final Map TEXTURE_CACHE = new HashMap<>(); - // @TODO: Don't depend on JEI - public static final FluidStackRenderer FLUID_RENDERER = new FluidStackRenderer(Fluid.BUCKET_VOLUME, false, 16, 16, null); + public static final FluidRenderer FLUID_RENDERER = new FluidRenderer(Fluid.BUCKET_VOLUME, 16, 16); protected static final int SIDE_BUTTON_WIDTH = 20; protected static final int SIDE_BUTTON_HEIGHT = 20; diff --git a/src/main/java/refinedstorage/gui/GuiFluidInterface.java b/src/main/java/refinedstorage/gui/GuiFluidInterface.java index 9f2d9ce9c..61945d0ab 100755 --- a/src/main/java/refinedstorage/gui/GuiFluidInterface.java +++ b/src/main/java/refinedstorage/gui/GuiFluidInterface.java @@ -1,14 +1,14 @@ package refinedstorage.gui; -import mezz.jei.gui.ingredients.FluidStackRenderer; import refinedstorage.api.storage.CompareUtils; +import refinedstorage.apiimpl.storage.fluid.FluidRenderer; import refinedstorage.container.ContainerFluidInterface; import refinedstorage.gui.sidebutton.SideButtonCompare; import refinedstorage.gui.sidebutton.SideButtonRedstoneMode; import refinedstorage.tile.TileFluidInterface; public class GuiFluidInterface extends GuiBase { - private static final FluidStackRenderer TANK_IN_RENDERER = new FluidStackRenderer(TileFluidInterface.TANK_CAPACITY, true, 12, 47, null); + private static final FluidRenderer TANK_RENDERER = new FluidRenderer(TileFluidInterface.TANK_CAPACITY, 12, 47); public GuiFluidInterface(ContainerFluidInterface container) { super(container, 211, 204); @@ -32,11 +32,11 @@ public class GuiFluidInterface extends GuiBase { drawTexture(x, y, 0, 0, width, height); if (TileFluidInterface.TANK_IN.getValue() != null) { - TANK_IN_RENDERER.draw(mc, x + 46, y + 56, TileFluidInterface.TANK_IN.getValue()); + TANK_RENDERER.draw(mc, x + 46, y + 56, TileFluidInterface.TANK_IN.getValue()); } if (TileFluidInterface.TANK_OUT.getValue() != null) { - TANK_IN_RENDERER.draw(mc, x + 118, y + 56, TileFluidInterface.TANK_OUT.getValue()); + TANK_RENDERER.draw(mc, x + 118, y + 56, TileFluidInterface.TANK_OUT.getValue()); } } diff --git a/src/main/java/refinedstorage/inventory/ItemHandlerFluid.java b/src/main/java/refinedstorage/inventory/ItemHandlerFluid.java index 20f370abf..5e6f98bbf 100755 --- a/src/main/java/refinedstorage/inventory/ItemHandlerFluid.java +++ b/src/main/java/refinedstorage/inventory/ItemHandlerFluid.java @@ -3,13 +3,14 @@ package refinedstorage.inventory; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.items.ItemHandlerHelper; import refinedstorage.apiimpl.storage.fluid.FluidUtils; public class ItemHandlerFluid extends ItemHandlerBasic { private FluidStack[] fluids; public ItemHandlerFluid(int size, TileEntity tile) { - super(size, tile, s -> FluidUtils.getFluidFromStack(s, true) != null); + super(size, tile, s -> FluidUtils.getFluidFromStack(ItemHandlerHelper.copyStackWithSize(s, 1), true) != null); this.fluids = new FluidStack[size]; } @@ -23,7 +24,7 @@ public class ItemHandlerFluid extends ItemHandlerBasic { if (stack == null) { fluids[slot] = null; } else { - fluids[slot] = FluidUtils.getFluidFromStack(stack, false); + fluids[slot] = FluidUtils.getFluidFromStack(ItemHandlerHelper.copyStackWithSize(stack, 1), true); } } From 86f110162d8adf87424d124177fe0659a593a583 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Tue, 16 Aug 2016 20:12:49 +0200 Subject: [PATCH 199/214] Fixes --- .../refinedstorage/apiimpl/network/grid/FluidGridHandler.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/refinedstorage/apiimpl/network/grid/FluidGridHandler.java b/src/main/java/refinedstorage/apiimpl/network/grid/FluidGridHandler.java index 8bef0453c..c08972037 100755 --- a/src/main/java/refinedstorage/apiimpl/network/grid/FluidGridHandler.java +++ b/src/main/java/refinedstorage/apiimpl/network/grid/FluidGridHandler.java @@ -4,7 +4,6 @@ import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.init.Items; import net.minecraft.inventory.InventoryHelper; import net.minecraft.item.ItemStack; -import net.minecraftforge.common.ForgeModContainer; import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidRegistry; import net.minecraftforge.fluids.FluidStack; @@ -18,7 +17,7 @@ import refinedstorage.apiimpl.storage.fluid.FluidUtils; import javax.annotation.Nullable; public class FluidGridHandler implements IFluidGridHandler { - private static final ItemStack EMPTY_BUCKET = new ItemStack(FluidRegistry.isUniversalBucketEnabled() ? ForgeModContainer.getInstance().universalBucket : Items.BUCKET); + private static final ItemStack EMPTY_BUCKET = new ItemStack(Items.BUCKET); private INetworkMaster network; From 226b5d37845c59f6f940799c007de55099f91b0a Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Tue, 16 Aug 2016 21:54:19 +0200 Subject: [PATCH 200/214] Update deps + add nullcheck in fluidstorage --- build.gradle | 6 +++--- .../apiimpl/storage/fluid/FluidStorageNBT.java | 6 +++++- .../java/refinedstorage/container/ContainerStorage.java | 1 + src/main/java/refinedstorage/tile/TileConstructor.java | 8 +++----- 4 files changed, 12 insertions(+), 9 deletions(-) diff --git a/build.gradle b/build.gradle index 29331e13a..bb988c5ac 100755 --- a/build.gradle +++ b/build.gradle @@ -20,7 +20,7 @@ sourceCompatibility = 1.8 targetCompatibility = 1.8 minecraft { - version = "1.10.2-12.18.1.2046" + version = "1.10.2-12.18.1.2065" runDir = "run" useDepAts = true mappings = "snapshot_20160518" @@ -43,9 +43,9 @@ repositories { } dependencies { - deobfCompile "mezz.jei:jei_1.10.2:3.7.+" + deobfCompile "mezz.jei:jei_1.10.2:3.9.+" compile "net.darkhax.tesla:Tesla:1.10-1.2.+" - compile "net.industrial-craft:industrialcraft-2:2.6.37-ex110:api" + compile "net.industrial-craft:industrialcraft-2:2.6.41-ex110:api" deobfCompile "MCMultiPart:MCMultiPart:1.2.1+:universal" } diff --git a/src/main/java/refinedstorage/apiimpl/storage/fluid/FluidStorageNBT.java b/src/main/java/refinedstorage/apiimpl/storage/fluid/FluidStorageNBT.java index 3ec3e60fd..8760ef1e8 100755 --- a/src/main/java/refinedstorage/apiimpl/storage/fluid/FluidStorageNBT.java +++ b/src/main/java/refinedstorage/apiimpl/storage/fluid/FluidStorageNBT.java @@ -50,7 +50,11 @@ public abstract class FluidStorageNBT implements IFluidStorage { NBTTagList list = (NBTTagList) tag.getTag(NBT_FLUIDS); for (int i = 0; i < list.tagCount(); ++i) { - stacks.add(FluidStack.loadFluidStackFromNBT(list.getCompoundTagAt(i))); + FluidStack stack = FluidStack.loadFluidStackFromNBT(list.getCompoundTagAt(i)); + + if (stack != null) { + stacks.add(stack); + } } } diff --git a/src/main/java/refinedstorage/container/ContainerStorage.java b/src/main/java/refinedstorage/container/ContainerStorage.java index 01f93d584..e65a0b32b 100755 --- a/src/main/java/refinedstorage/container/ContainerStorage.java +++ b/src/main/java/refinedstorage/container/ContainerStorage.java @@ -6,6 +6,7 @@ import net.minecraft.item.ItemStack; import refinedstorage.container.slot.SlotSpecimen; import refinedstorage.tile.TileStorage; +//bla public class ContainerStorage extends ContainerBase { public ContainerStorage(TileStorage tile, EntityPlayer player) { super(tile, player); diff --git a/src/main/java/refinedstorage/tile/TileConstructor.java b/src/main/java/refinedstorage/tile/TileConstructor.java index 2edd39de0..dafef1053 100755 --- a/src/main/java/refinedstorage/tile/TileConstructor.java +++ b/src/main/java/refinedstorage/tile/TileConstructor.java @@ -94,7 +94,7 @@ public class TileConstructor extends TileMultipartNode implements IComparable, I } else if (type == IType.FLUIDS) { FluidStack stack = fluidFilters.getFluids()[0]; - if (stack != null) { + if (stack != null && stack.getFluid().canBePlacedInWorld()) { BlockPos front = pos.offset(getDirection()); Block block = stack.getFluid().getBlock(); @@ -103,10 +103,8 @@ public class TileConstructor extends TileMultipartNode implements IComparable, I FluidStack took = network.extractFluid(stack, Fluid.BUCKET_VOLUME, compare); if (took != null) { - IBlockState state = block.getDefaultState(); - - // @TODO: This doesn't cause the block to flow? - worldObj.setBlockState(front, state, 1 | 2); + // @TODO: Won't update + worldObj.setBlockState(front, block.getDefaultState(), 11); } } } From 62e9ad5ac2155453fa7949baab399927fee70de6 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Tue, 16 Aug 2016 21:54:39 +0200 Subject: [PATCH 201/214] Remove comment --- src/main/java/refinedstorage/container/ContainerStorage.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/refinedstorage/container/ContainerStorage.java b/src/main/java/refinedstorage/container/ContainerStorage.java index e65a0b32b..01f93d584 100755 --- a/src/main/java/refinedstorage/container/ContainerStorage.java +++ b/src/main/java/refinedstorage/container/ContainerStorage.java @@ -6,7 +6,6 @@ import net.minecraft.item.ItemStack; import refinedstorage.container.slot.SlotSpecimen; import refinedstorage.tile.TileStorage; -//bla public class ContainerStorage extends ContainerBase { public ContainerStorage(TileStorage tile, EntityPlayer player) { super(tile, player); From 46a4e354c16563a5d3eb8bd49af20ab37b5ae65b Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Tue, 16 Aug 2016 22:14:34 +0200 Subject: [PATCH 202/214] Enable the universal bucket --- src/main/java/refinedstorage/RefinedStorage.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/java/refinedstorage/RefinedStorage.java b/src/main/java/refinedstorage/RefinedStorage.java index 1a0eade82..2baebdd51 100755 --- a/src/main/java/refinedstorage/RefinedStorage.java +++ b/src/main/java/refinedstorage/RefinedStorage.java @@ -4,6 +4,7 @@ import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraftforge.common.config.Configuration; +import net.minecraftforge.fluids.FluidRegistry; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.common.Mod.EventHandler; import net.minecraftforge.fml.common.Mod.Instance; @@ -41,6 +42,10 @@ public final class RefinedStorage { } }; + static { + FluidRegistry.enableUniversalBucket(); + } + public int controllerBaseUsage; public int cableUsage; public int constructorUsage; From 55847c3c3f757a44940927d2927960b25768d43d Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Tue, 16 Aug 2016 23:01:40 +0200 Subject: [PATCH 203/214] Add models and textures for all the new blocks and items --- .../refinedstorage/proxy/ClientProxy.java | 37 ++++++++++++++++-- .../blockstates/fluid_interface.json | 25 ++++++++++++ .../blockstates/fluid_storage.json | 36 +++++++++++++++++ .../models/item/128k_fluid_storage_disk.json | 6 +++ .../models/item/128k_fluid_storage_part.json | 6 +++ .../models/item/256k_fluid_storage_disk.json | 6 +++ .../models/item/256k_fluid_storage_part.json | 6 +++ .../models/item/512k_fluid_storage_disk.json | 6 +++ .../models/item/512k_fluid_storage_part.json | 6 +++ .../models/item/64k_fluid_storage_disk.json | 6 +++ .../models/item/64k_fluid_storage_part.json | 6 +++ .../item/creative_fluid_storage_disk.json | 6 +++ .../blocks/128k_fluid_storage_block.png | Bin 0 -> 253 bytes .../blocks/256k_fluid_storage_block.png | Bin 0 -> 264 bytes .../blocks/512k_fluid_storage_block.png | Bin 0 -> 250 bytes .../blocks/64k_fluid_storage_block.png | Bin 0 -> 239 bytes .../blocks/creative_fluid_storage_block.png | Bin 0 -> 250 bytes .../blocks/fluid_interface_connected.png | Bin 0 -> 215 bytes .../blocks/fluid_interface_disconnected.png | Bin 0 -> 223 bytes .../items/128k_fluid_storage_disk.png | Bin 0 -> 253 bytes .../items/128k_fluid_storage_part.png | Bin 0 -> 253 bytes .../items/256k_fluid_storage_disk.png | Bin 0 -> 264 bytes .../items/256k_fluid_storage_part.png | Bin 0 -> 264 bytes .../items/512k_fluid_storage_disk.png | Bin 0 -> 250 bytes .../items/512k_fluid_storage_part.png | Bin 0 -> 250 bytes .../textures/items/64k_fluid_storage_disk.png | Bin 0 -> 239 bytes .../textures/items/64k_fluid_storage_part.png | Bin 0 -> 239 bytes .../items/creative_fluid_storage_disk.png | Bin 0 -> 250 bytes 28 files changed, 148 insertions(+), 4 deletions(-) create mode 100755 src/main/resources/assets/refinedstorage/blockstates/fluid_interface.json create mode 100755 src/main/resources/assets/refinedstorage/blockstates/fluid_storage.json create mode 100755 src/main/resources/assets/refinedstorage/models/item/128k_fluid_storage_disk.json create mode 100755 src/main/resources/assets/refinedstorage/models/item/128k_fluid_storage_part.json create mode 100755 src/main/resources/assets/refinedstorage/models/item/256k_fluid_storage_disk.json create mode 100755 src/main/resources/assets/refinedstorage/models/item/256k_fluid_storage_part.json create mode 100755 src/main/resources/assets/refinedstorage/models/item/512k_fluid_storage_disk.json create mode 100755 src/main/resources/assets/refinedstorage/models/item/512k_fluid_storage_part.json create mode 100755 src/main/resources/assets/refinedstorage/models/item/64k_fluid_storage_disk.json create mode 100755 src/main/resources/assets/refinedstorage/models/item/64k_fluid_storage_part.json create mode 100755 src/main/resources/assets/refinedstorage/models/item/creative_fluid_storage_disk.json create mode 100755 src/main/resources/assets/refinedstorage/textures/blocks/128k_fluid_storage_block.png create mode 100755 src/main/resources/assets/refinedstorage/textures/blocks/256k_fluid_storage_block.png create mode 100755 src/main/resources/assets/refinedstorage/textures/blocks/512k_fluid_storage_block.png create mode 100755 src/main/resources/assets/refinedstorage/textures/blocks/64k_fluid_storage_block.png create mode 100755 src/main/resources/assets/refinedstorage/textures/blocks/creative_fluid_storage_block.png create mode 100755 src/main/resources/assets/refinedstorage/textures/blocks/fluid_interface_connected.png create mode 100755 src/main/resources/assets/refinedstorage/textures/blocks/fluid_interface_disconnected.png create mode 100755 src/main/resources/assets/refinedstorage/textures/items/128k_fluid_storage_disk.png create mode 100755 src/main/resources/assets/refinedstorage/textures/items/128k_fluid_storage_part.png create mode 100755 src/main/resources/assets/refinedstorage/textures/items/256k_fluid_storage_disk.png create mode 100755 src/main/resources/assets/refinedstorage/textures/items/256k_fluid_storage_part.png create mode 100755 src/main/resources/assets/refinedstorage/textures/items/512k_fluid_storage_disk.png create mode 100755 src/main/resources/assets/refinedstorage/textures/items/512k_fluid_storage_part.png create mode 100755 src/main/resources/assets/refinedstorage/textures/items/64k_fluid_storage_disk.png create mode 100755 src/main/resources/assets/refinedstorage/textures/items/64k_fluid_storage_part.png create mode 100755 src/main/resources/assets/refinedstorage/textures/items/creative_fluid_storage_disk.png diff --git a/src/main/java/refinedstorage/proxy/ClientProxy.java b/src/main/java/refinedstorage/proxy/ClientProxy.java index d5695a78e..47e87b205 100755 --- a/src/main/java/refinedstorage/proxy/ClientProxy.java +++ b/src/main/java/refinedstorage/proxy/ClientProxy.java @@ -27,10 +27,7 @@ import org.lwjgl.opengl.GL11; import refinedstorage.RefinedStorage; import refinedstorage.RefinedStorageBlocks; import refinedstorage.RefinedStorageItems; -import refinedstorage.block.BlockCable; -import refinedstorage.block.EnumControllerType; -import refinedstorage.block.EnumGridType; -import refinedstorage.block.EnumItemStorageType; +import refinedstorage.block.*; import refinedstorage.item.*; import java.util.List; @@ -160,6 +157,21 @@ public class ClientProxy extends CommonProxy { new ResourceLocation("refinedstorage:64k_storage_part") ); + ModelBakery.registerItemVariants(RefinedStorageItems.FLUID_STORAGE_DISK, + new ResourceLocation("refinedstorage:64k_fluid_storage_disk"), + new ResourceLocation("refinedstorage:128k_fluid_storage_disk"), + new ResourceLocation("refinedstorage:256k_fluid_storage_disk"), + new ResourceLocation("refinedstorage:512k_fluid_storage_disk"), + new ResourceLocation("refinedstorage:creative_fluid_storage_disk") + ); + + ModelBakery.registerItemVariants(RefinedStorageItems.FLUID_STORAGE_PART, + new ResourceLocation("refinedstorage:64k_fluid_storage_part"), + new ResourceLocation("refinedstorage:128k_fluid_storage_part"), + new ResourceLocation("refinedstorage:256k_fluid_storage_part"), + new ResourceLocation("refinedstorage:512k_fluid_storage_part") + ); + ModelBakery.registerItemVariants(RefinedStorageItems.PROCESSOR, new ResourceLocation("refinedstorage:basic_printed_processor"), new ResourceLocation("refinedstorage:improved_printed_processor"), @@ -195,6 +207,17 @@ public class ClientProxy extends CommonProxy { ModelLoader.setCustomModelResourceLocation(RefinedStorageItems.STORAGE_PART, ItemStoragePart.TYPE_16K, new ModelResourceLocation("refinedstorage:16k_storage_part", "inventory")); ModelLoader.setCustomModelResourceLocation(RefinedStorageItems.STORAGE_PART, ItemStoragePart.TYPE_64K, new ModelResourceLocation("refinedstorage:64k_storage_part", "inventory")); + ModelLoader.setCustomModelResourceLocation(RefinedStorageItems.FLUID_STORAGE_DISK, ItemFluidStorageDisk.TYPE_64K, new ModelResourceLocation("refinedstorage:64k_fluid_storage_disk", "inventory")); + ModelLoader.setCustomModelResourceLocation(RefinedStorageItems.FLUID_STORAGE_DISK, ItemFluidStorageDisk.TYPE_128K, new ModelResourceLocation("refinedstorage:128k_fluid_storage_disk", "inventory")); + ModelLoader.setCustomModelResourceLocation(RefinedStorageItems.FLUID_STORAGE_DISK, ItemFluidStorageDisk.TYPE_256K, new ModelResourceLocation("refinedstorage:256k_fluid_storage_disk", "inventory")); + ModelLoader.setCustomModelResourceLocation(RefinedStorageItems.FLUID_STORAGE_DISK, ItemFluidStorageDisk.TYPE_512K, new ModelResourceLocation("refinedstorage:512k_fluid_storage_disk", "inventory")); + ModelLoader.setCustomModelResourceLocation(RefinedStorageItems.FLUID_STORAGE_DISK, ItemFluidStorageDisk.TYPE_CREATIVE, new ModelResourceLocation("refinedstorage:creative_fluid_storage_disk", "inventory")); + + ModelLoader.setCustomModelResourceLocation(RefinedStorageItems.FLUID_STORAGE_PART, ItemFluidStoragePart.TYPE_64K, new ModelResourceLocation("refinedstorage:64k_fluid_storage_part", "inventory")); + ModelLoader.setCustomModelResourceLocation(RefinedStorageItems.FLUID_STORAGE_PART, ItemFluidStoragePart.TYPE_128K, new ModelResourceLocation("refinedstorage:128k_fluid_storage_part", "inventory")); + ModelLoader.setCustomModelResourceLocation(RefinedStorageItems.FLUID_STORAGE_PART, ItemFluidStoragePart.TYPE_256K, new ModelResourceLocation("refinedstorage:256k_fluid_storage_part", "inventory")); + ModelLoader.setCustomModelResourceLocation(RefinedStorageItems.FLUID_STORAGE_PART, ItemFluidStoragePart.TYPE_512K, new ModelResourceLocation("refinedstorage:512k_fluid_storage_part", "inventory")); + ModelLoader.setCustomModelResourceLocation(RefinedStorageItems.PROCESSOR, ItemProcessor.TYPE_PRINTED_BASIC, new ModelResourceLocation("refinedstorage:basic_printed_processor", "inventory")); ModelLoader.setCustomModelResourceLocation(RefinedStorageItems.PROCESSOR, ItemProcessor.TYPE_PRINTED_IMPROVED, new ModelResourceLocation("refinedstorage:improved_printed_processor", "inventory")); ModelLoader.setCustomModelResourceLocation(RefinedStorageItems.PROCESSOR, ItemProcessor.TYPE_PRINTED_ADVANCED, new ModelResourceLocation("refinedstorage:advanced_printed_processor", "inventory")); @@ -246,6 +269,7 @@ public class ClientProxy extends CommonProxy { ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.DETECTOR), 0, new ModelResourceLocation("refinedstorage:detector", "inventory")); ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.RELAY), 0, new ModelResourceLocation("refinedstorage:relay", "inventory")); ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.INTERFACE), 0, new ModelResourceLocation("refinedstorage:interface", "inventory")); + ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.FLUID_INTERFACE), 0, new ModelResourceLocation("refinedstorage:fluid_interface", "inventory")); ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.WIRELESS_TRANSMITTER), 0, new ModelResourceLocation("refinedstorage:wireless_transmitter", "inventory")); ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.CRAFTING_MONITOR), 0, new ModelResourceLocation("refinedstorage:crafting_monitor", "inventory")); ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.CRAFTER), 0, new ModelResourceLocation("refinedstorage:crafter", "inventory")); @@ -257,5 +281,10 @@ public class ClientProxy extends CommonProxy { ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.STORAGE), EnumItemStorageType.TYPE_16K.getId(), new ModelResourceLocation("refinedstorage:storage", "type=16k")); ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.STORAGE), EnumItemStorageType.TYPE_64K.getId(), new ModelResourceLocation("refinedstorage:storage", "type=64k")); ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.STORAGE), EnumItemStorageType.TYPE_CREATIVE.getId(), new ModelResourceLocation("refinedstorage:storage", "type=creative")); + ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.FLUID_STORAGE), EnumFluidStorageType.TYPE_64K.getId(), new ModelResourceLocation("refinedstorage:fluid_storage", "type=64k")); + ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.FLUID_STORAGE), EnumFluidStorageType.TYPE_128K.getId(), new ModelResourceLocation("refinedstorage:fluid_storage", "type=128k")); + ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.FLUID_STORAGE), EnumFluidStorageType.TYPE_256K.getId(), new ModelResourceLocation("refinedstorage:fluid_storage", "type=256k")); + ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.FLUID_STORAGE), EnumFluidStorageType.TYPE_512K.getId(), new ModelResourceLocation("refinedstorage:fluid_storage", "type=512k")); + ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.FLUID_STORAGE), EnumFluidStorageType.TYPE_CREATIVE.getId(), new ModelResourceLocation("refinedstorage:fluid_storage", "type=creative")); } } diff --git a/src/main/resources/assets/refinedstorage/blockstates/fluid_interface.json b/src/main/resources/assets/refinedstorage/blockstates/fluid_interface.json new file mode 100755 index 000000000..e51a496b8 --- /dev/null +++ b/src/main/resources/assets/refinedstorage/blockstates/fluid_interface.json @@ -0,0 +1,25 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "cube_all", + "textures": { + "all": "refinedstorage:blocks/fluid_interface_disconnected" + } + }, + "variants": { + "inventory": [ + { + "transform": "forge:default-block" + } + ], + "connected": { + "true": { + "textures": { + "all": "refinedstorage:blocks/fluid_interface_connected" + } + }, + "false": { + } + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/refinedstorage/blockstates/fluid_storage.json b/src/main/resources/assets/refinedstorage/blockstates/fluid_storage.json new file mode 100755 index 000000000..a6dfa7feb --- /dev/null +++ b/src/main/resources/assets/refinedstorage/blockstates/fluid_storage.json @@ -0,0 +1,36 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "cube_all", + "transform": "forge:default-block" + }, + "variants": { + "type": { + "64k": { + "textures": { + "all": "refinedstorage:blocks/64k_fluid_storage_block" + } + }, + "128k": { + "textures": { + "all": "refinedstorage:blocks/128k_fluid_storage_block" + } + }, + "256k": { + "textures": { + "all": "refinedstorage:blocks/256k_fluid_storage_block" + } + }, + "512k": { + "textures": { + "all": "refinedstorage:blocks/512k_fluid_storage_block" + } + }, + "creative": { + "textures": { + "all": "refinedstorage:blocks/creative_fluid_storage_block" + } + } + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/refinedstorage/models/item/128k_fluid_storage_disk.json b/src/main/resources/assets/refinedstorage/models/item/128k_fluid_storage_disk.json new file mode 100755 index 000000000..8503c025d --- /dev/null +++ b/src/main/resources/assets/refinedstorage/models/item/128k_fluid_storage_disk.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "refinedstorage:items/128k_fluid_storage_disk" + } +} diff --git a/src/main/resources/assets/refinedstorage/models/item/128k_fluid_storage_part.json b/src/main/resources/assets/refinedstorage/models/item/128k_fluid_storage_part.json new file mode 100755 index 000000000..6a0f26529 --- /dev/null +++ b/src/main/resources/assets/refinedstorage/models/item/128k_fluid_storage_part.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "refinedstorage:items/128k_fluid_storage_part" + } +} diff --git a/src/main/resources/assets/refinedstorage/models/item/256k_fluid_storage_disk.json b/src/main/resources/assets/refinedstorage/models/item/256k_fluid_storage_disk.json new file mode 100755 index 000000000..b01ab7929 --- /dev/null +++ b/src/main/resources/assets/refinedstorage/models/item/256k_fluid_storage_disk.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "refinedstorage:items/256k_fluid_storage_disk" + } +} diff --git a/src/main/resources/assets/refinedstorage/models/item/256k_fluid_storage_part.json b/src/main/resources/assets/refinedstorage/models/item/256k_fluid_storage_part.json new file mode 100755 index 000000000..c15cbf508 --- /dev/null +++ b/src/main/resources/assets/refinedstorage/models/item/256k_fluid_storage_part.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "refinedstorage:items/256k_fluid_storage_part" + } +} diff --git a/src/main/resources/assets/refinedstorage/models/item/512k_fluid_storage_disk.json b/src/main/resources/assets/refinedstorage/models/item/512k_fluid_storage_disk.json new file mode 100755 index 000000000..c915ab76b --- /dev/null +++ b/src/main/resources/assets/refinedstorage/models/item/512k_fluid_storage_disk.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "refinedstorage:items/512k_fluid_storage_disk" + } +} diff --git a/src/main/resources/assets/refinedstorage/models/item/512k_fluid_storage_part.json b/src/main/resources/assets/refinedstorage/models/item/512k_fluid_storage_part.json new file mode 100755 index 000000000..04771a814 --- /dev/null +++ b/src/main/resources/assets/refinedstorage/models/item/512k_fluid_storage_part.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "refinedstorage:items/512k_fluid_storage_part" + } +} diff --git a/src/main/resources/assets/refinedstorage/models/item/64k_fluid_storage_disk.json b/src/main/resources/assets/refinedstorage/models/item/64k_fluid_storage_disk.json new file mode 100755 index 000000000..7d84a85f7 --- /dev/null +++ b/src/main/resources/assets/refinedstorage/models/item/64k_fluid_storage_disk.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "refinedstorage:items/64k_fluid_storage_disk" + } +} diff --git a/src/main/resources/assets/refinedstorage/models/item/64k_fluid_storage_part.json b/src/main/resources/assets/refinedstorage/models/item/64k_fluid_storage_part.json new file mode 100755 index 000000000..1e8e6fc0b --- /dev/null +++ b/src/main/resources/assets/refinedstorage/models/item/64k_fluid_storage_part.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "refinedstorage:items/64k_fluid_storage_part" + } +} diff --git a/src/main/resources/assets/refinedstorage/models/item/creative_fluid_storage_disk.json b/src/main/resources/assets/refinedstorage/models/item/creative_fluid_storage_disk.json new file mode 100755 index 000000000..90d5cf800 --- /dev/null +++ b/src/main/resources/assets/refinedstorage/models/item/creative_fluid_storage_disk.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "refinedstorage:items/creative_fluid_storage_disk" + } +} diff --git a/src/main/resources/assets/refinedstorage/textures/blocks/128k_fluid_storage_block.png b/src/main/resources/assets/refinedstorage/textures/blocks/128k_fluid_storage_block.png new file mode 100755 index 0000000000000000000000000000000000000000..4bf722d41620cecfe1923d82e49996b45923d7d7 GIT binary patch literal 253 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLCF%=h?3y^w370~qEv>0#LT=By}Z;C1rt33 zJwt=FTwDi$igG<&978Ppr}jiMH7Ibf?EJqpx41KWg{l08hQ&SeS11&*hqUp&j9rrw zCvty7A=}4e3^glrwG}F^l?h242y*ECz_KdgdAWjT$M)1~-#BCr))Wg#c&XiC@RwiN r^jEyT*Ce_)Y8ul8%gfwh+Q~85$$IZpp2hqETFl_->gTe~DWM4f;}=qC literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/refinedstorage/textures/blocks/256k_fluid_storage_block.png b/src/main/resources/assets/refinedstorage/textures/blocks/256k_fluid_storage_block.png new file mode 100755 index 0000000000000000000000000000000000000000..93ab532fb4e46ac91ead74f2673a55f76e776deb GIT binary patch literal 264 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLCF%=h?3y^w370~qEv>0#LT=By}Z;C1rt33 zJwt=FTwDi$iYh!^978PpTYCb97z|mQtN(jPA6X)@`MvYx337s#$J5*<%Qa~*xNw#D zP2pHylylinH1Bj%xyX}sA2hx>YcWK$R&{iQpAuJlp(r=w_g?4bqs+y3B-ZD9Zc}?; zY$Nqk^UJ5G3!DOzo(T(vUUT|!Ea1Q$t766OrW5Q7ZW_M!-O&$nJ%gvKpUXO@geCw| C|5$ne literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/refinedstorage/textures/blocks/512k_fluid_storage_block.png b/src/main/resources/assets/refinedstorage/textures/blocks/512k_fluid_storage_block.png new file mode 100755 index 0000000000000000000000000000000000000000..d759dc3e1cf0e55a615444b4716473e3b2af3e36 GIT binary patch literal 250 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLCF%=h?3y^w370~qEv>0#LT=By}Z;C1rt33 zJwt=FTwDi$in2Ui978Pp*Y*VR9Z=wK-ur*4Y|sh=*^4RfnKLtU|4xd`c)P;JN$Bpf z?fXO(IAqSoi&=PvGT4hU=se68ztm{1b5U{UTTVZniLTaxN$l^NHnb_Zvz{uEIAnOb oF*$fH*WbhhA^(Ftr!M_wKEEaOxV&xUO`xp|p00i_>zopr0Fo0#LT=By}Z;C1rt33 zJwt=FTwDi$isC(8978Pp&-OU-H7M|~{QSQ>`|P8DTWv1>=NixGJlZh5rq)2t!}ICB zj`>!GkM&A+uQmLran}Bo=0WvLFTF5jruDzGj&v@*F=>Lun>oQ84>`S#&Fq@?#bJ)z emOt+rZ?e{Gbi1Z^`K%hyDh5wiKbLh*2~7a;zEgz& literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/refinedstorage/textures/blocks/creative_fluid_storage_block.png b/src/main/resources/assets/refinedstorage/textures/blocks/creative_fluid_storage_block.png new file mode 100755 index 0000000000000000000000000000000000000000..87e71fcc04614b719e1a8e9f51a0d12470ed1c16 GIT binary patch literal 250 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLCF%=h?3y^w370~qEv>0#LT=By}Z;C1rt33 zJwt=FTwDi$in2Ui978Ppr*?ab9WdZvD*o@i+)X3&bM;)&1($#MYnZ5~35Y+t)cbzg z;fkP7a}(I31bQZKST`dg?o0#LT=By}Z;C1rt33 zJwt=FTwDi$irhV2978PplYjUtEtto~W-7wM9>AM%$$^FaM2><(#sSuXtOHBgce5!R zSjBi*;gHmY0}HM(utY53%sSwb!Qjel*l0#LT=By}Z;C1rt33 zJwt=FTwDi$iu^rY978Pp@18N_V^H8=cKHAQrPmS#PTs}M+c}&f8Nw3Z_Ar_qjDESU zD$!>04`~;Lm;QF`*E6{!Y~O|du;c3ZC}1$3#p+y>#m(ufGSwKQSyq)Tn>0t{1JGy& MPgg&ebxsLQ08-aPE&u=k literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/refinedstorage/textures/items/128k_fluid_storage_disk.png b/src/main/resources/assets/refinedstorage/textures/items/128k_fluid_storage_disk.png new file mode 100755 index 0000000000000000000000000000000000000000..4bf722d41620cecfe1923d82e49996b45923d7d7 GIT binary patch literal 253 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLCF%=h?3y^w370~qEv>0#LT=By}Z;C1rt33 zJwt=FTwDi$igG<&978Ppr}jiMH7Ibf?EJqpx41KWg{l08hQ&SeS11&*hqUp&j9rrw zCvty7A=}4e3^glrwG}F^l?h242y*ECz_KdgdAWjT$M)1~-#BCr))Wg#c&XiC@RwiN r^jEyT*Ce_)Y8ul8%gfwh+Q~85$$IZpp2hqETFl_->gTe~DWM4f;}=qC literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/refinedstorage/textures/items/128k_fluid_storage_part.png b/src/main/resources/assets/refinedstorage/textures/items/128k_fluid_storage_part.png new file mode 100755 index 0000000000000000000000000000000000000000..4bf722d41620cecfe1923d82e49996b45923d7d7 GIT binary patch literal 253 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLCF%=h?3y^w370~qEv>0#LT=By}Z;C1rt33 zJwt=FTwDi$igG<&978Ppr}jiMH7Ibf?EJqpx41KWg{l08hQ&SeS11&*hqUp&j9rrw zCvty7A=}4e3^glrwG}F^l?h242y*ECz_KdgdAWjT$M)1~-#BCr))Wg#c&XiC@RwiN r^jEyT*Ce_)Y8ul8%gfwh+Q~85$$IZpp2hqETFl_->gTe~DWM4f;}=qC literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/refinedstorage/textures/items/256k_fluid_storage_disk.png b/src/main/resources/assets/refinedstorage/textures/items/256k_fluid_storage_disk.png new file mode 100755 index 0000000000000000000000000000000000000000..93ab532fb4e46ac91ead74f2673a55f76e776deb GIT binary patch literal 264 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLCF%=h?3y^w370~qEv>0#LT=By}Z;C1rt33 zJwt=FTwDi$iYh!^978PpTYCb97z|mQtN(jPA6X)@`MvYx337s#$J5*<%Qa~*xNw#D zP2pHylylinH1Bj%xyX}sA2hx>YcWK$R&{iQpAuJlp(r=w_g?4bqs+y3B-ZD9Zc}?; zY$Nqk^UJ5G3!DOzo(T(vUUT|!Ea1Q$t766OrW5Q7ZW_M!-O&$nJ%gvKpUXO@geCw| C|5$ne literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/refinedstorage/textures/items/256k_fluid_storage_part.png b/src/main/resources/assets/refinedstorage/textures/items/256k_fluid_storage_part.png new file mode 100755 index 0000000000000000000000000000000000000000..93ab532fb4e46ac91ead74f2673a55f76e776deb GIT binary patch literal 264 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLCF%=h?3y^w370~qEv>0#LT=By}Z;C1rt33 zJwt=FTwDi$iYh!^978PpTYCb97z|mQtN(jPA6X)@`MvYx337s#$J5*<%Qa~*xNw#D zP2pHylylinH1Bj%xyX}sA2hx>YcWK$R&{iQpAuJlp(r=w_g?4bqs+y3B-ZD9Zc}?; zY$Nqk^UJ5G3!DOzo(T(vUUT|!Ea1Q$t766OrW5Q7ZW_M!-O&$nJ%gvKpUXO@geCw| C|5$ne literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/refinedstorage/textures/items/512k_fluid_storage_disk.png b/src/main/resources/assets/refinedstorage/textures/items/512k_fluid_storage_disk.png new file mode 100755 index 0000000000000000000000000000000000000000..d759dc3e1cf0e55a615444b4716473e3b2af3e36 GIT binary patch literal 250 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLCF%=h?3y^w370~qEv>0#LT=By}Z;C1rt33 zJwt=FTwDi$in2Ui978Pp*Y*VR9Z=wK-ur*4Y|sh=*^4RfnKLtU|4xd`c)P;JN$Bpf z?fXO(IAqSoi&=PvGT4hU=se68ztm{1b5U{UTTVZniLTaxN$l^NHnb_Zvz{uEIAnOb oF*$fH*WbhhA^(Ftr!M_wKEEaOxV&xUO`xp|p00i_>zopr0Fo0#LT=By}Z;C1rt33 zJwt=FTwDi$in2Ui978Pp*Y*VR9Z=wK-ur*4Y|sh=*^4RfnKLtU|4xd`c)P;JN$Bpf z?fXO(IAqSoi&=PvGT4hU=se68ztm{1b5U{UTTVZniLTaxN$l^NHnb_Zvz{uEIAnOb oF*$fH*WbhhA^(Ftr!M_wKEEaOxV&xUO`xp|p00i_>zopr0Fo0#LT=By}Z;C1rt33 zJwt=FTwDi$isC(8978Pp&-OU-H7M|~{QSQ>`|P8DTWv1>=NixGJlZh5rq)2t!}ICB zj`>!GkM&A+uQmLran}Bo=0WvLFTF5jruDzGj&v@*F=>Lun>oQ84>`S#&Fq@?#bJ)z emOt+rZ?e{Gbi1Z^`K%hyDh5wiKbLh*2~7a;zEgz& literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/refinedstorage/textures/items/64k_fluid_storage_part.png b/src/main/resources/assets/refinedstorage/textures/items/64k_fluid_storage_part.png new file mode 100755 index 0000000000000000000000000000000000000000..bc7093ac4c855562d2e97cfde53b55e1375eb514 GIT binary patch literal 239 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLCF%=h?3y^w370~qEv>0#LT=By}Z;C1rt33 zJwt=FTwDi$isC(8978Pp&-OU-H7M|~{QSQ>`|P8DTWv1>=NixGJlZh5rq)2t!}ICB zj`>!GkM&A+uQmLran}Bo=0WvLFTF5jruDzGj&v@*F=>Lun>oQ84>`S#&Fq@?#bJ)z emOt+rZ?e{Gbi1Z^`K%hyDh5wiKbLh*2~7a;zEgz& literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/refinedstorage/textures/items/creative_fluid_storage_disk.png b/src/main/resources/assets/refinedstorage/textures/items/creative_fluid_storage_disk.png new file mode 100755 index 0000000000000000000000000000000000000000..87e71fcc04614b719e1a8e9f51a0d12470ed1c16 GIT binary patch literal 250 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucLCF%=h?3y^w370~qEv>0#LT=By}Z;C1rt33 zJwt=FTwDi$in2Ui978Ppr*?ab9WdZvD*o@i+)X3&bM;)&1($#MYnZ5~35Y+t)cbzg z;fkP7a}(I31bQZKST`dg?o Date: Tue, 16 Aug 2016 23:37:23 +0200 Subject: [PATCH 204/214] Make wireless grid usage configurable, fixes #263 --- CHANGELOG.md | 5 +++++ .../java/refinedstorage/RefinedStorage.java | 10 ++++++++++ .../api/network/grid/IItemGridHandler.java | 9 +++++---- .../apiimpl/network/WirelessGridHandler.java | 17 ++++++++++------- .../apiimpl/network/grid/ItemGridHandler.java | 16 ++++++++++------ .../refinedstorage/container/ContainerGrid.java | 3 ++- .../network/MessageGridItemInsertHeld.java | 2 +- 7 files changed, 43 insertions(+), 19 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9a5bd363b..a3815cc01 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # Refined Storage Changelog +### 0.9 +**Features** +- Added fluid storage +- Usage of Wireless Grid is now configurable + ### 0.8.19 **Bugfixes** - Fixed item duplication bug with External Storage diff --git a/src/main/java/refinedstorage/RefinedStorage.java b/src/main/java/refinedstorage/RefinedStorage.java index 2baebdd51..e9c70edce 100755 --- a/src/main/java/refinedstorage/RefinedStorage.java +++ b/src/main/java/refinedstorage/RefinedStorage.java @@ -81,6 +81,11 @@ public final class RefinedStorage { public int wirelessTransmitterBaseRange; public int wirelessTransmitterRangePerUpgrade; + public boolean wirelessGridUsesEnergy; + public int wirelessGridOpenUsage; + public int wirelessGridExtractUsage; + public int wirelessGridInsertUsage; + public int rangeUpgradeUsage; public int speedUpgradeUsage; public int craftingUpgradeUsage; @@ -128,6 +133,11 @@ public final class RefinedStorage { wirelessTransmitterBaseRange = config.getInt("range", "wirelessTransmitter", 16, 0, Integer.MAX_VALUE, "The base range of the Wireless Transmitter"); wirelessTransmitterRangePerUpgrade = config.getInt("rangePerUpgrade", "wirelessTransmitter", 8, 0, Integer.MAX_VALUE, "The additional range per Range Upgrade in the Wireless Transmitter"); + wirelessGridUsesEnergy = config.getBoolean("usesEnergy", "wirelessGrid", true, "Whether the Wireless Grid uses energy"); + wirelessGridOpenUsage = config.getInt("open", "wirelessGrid", 30, 0, Integer.MAX_VALUE, "The energy used by the Wireless Grid to open"); + wirelessGridInsertUsage = config.getInt("insert", "wirelessGrid", 3, 0, Integer.MAX_VALUE, "The energy used by the Wireless Grid to insert items"); + wirelessGridExtractUsage = config.getInt("extract", "wirelessGrid", 3, 0, Integer.MAX_VALUE, "The energy used by the Wireless Grid to extract items"); + rangeUpgradeUsage = config.getInt("range", "upgrades", 8, 0, Integer.MAX_VALUE, "The additional energy used per Range Upgrade"); speedUpgradeUsage = config.getInt("speed", "upgrades", 2, 0, Integer.MAX_VALUE, "The additional energy used per Speed Upgrade"); craftingUpgradeUsage = config.getInt("crafting", "upgrades", 5, 0, Integer.MAX_VALUE, "The additional energy used per Crafting Upgrade"); diff --git a/src/main/java/refinedstorage/api/network/grid/IItemGridHandler.java b/src/main/java/refinedstorage/api/network/grid/IItemGridHandler.java index a2a59327a..c9a5db79d 100755 --- a/src/main/java/refinedstorage/api/network/grid/IItemGridHandler.java +++ b/src/main/java/refinedstorage/api/network/grid/IItemGridHandler.java @@ -25,19 +25,20 @@ public interface IItemGridHandler { /** * Called when a player tries to insert an item to the grid. * - * @param stack The item we're trying to insert + * @param player The player that is attempting the insert + * @param stack The item we're trying to insert * @return The remainder, or null if there is no remainder */ @Nullable - ItemStack onInsert(ItemStack stack); + ItemStack onInsert(EntityPlayerMP player, ItemStack stack); /** * Called when a player is trying to insert an item that it is holding in their hand in the GUI. * - * @param single If we are only inserting 1 item * @param player The player that is attempting the insert + * @param single If we are only inserting 1 item */ - void onInsertHeldItem(boolean single, EntityPlayerMP player); + void onInsertHeldItem(EntityPlayerMP player, boolean single); /** * Called when a player requested crafting for an item. diff --git a/src/main/java/refinedstorage/apiimpl/network/WirelessGridHandler.java b/src/main/java/refinedstorage/apiimpl/network/WirelessGridHandler.java index b203abe1d..15f3d1d97 100755 --- a/src/main/java/refinedstorage/apiimpl/network/WirelessGridHandler.java +++ b/src/main/java/refinedstorage/apiimpl/network/WirelessGridHandler.java @@ -2,6 +2,7 @@ package refinedstorage.apiimpl.network; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; import net.minecraft.util.EnumHand; import refinedstorage.RefinedStorage; import refinedstorage.RefinedStorageGui; @@ -14,10 +15,6 @@ import java.util.Iterator; import java.util.List; public class WirelessGridHandler implements IWirelessGridHandler { - public static final int USAGE_OPEN = 30; - public static final int USAGE_EXTRACT = 3; - public static final int USAGE_INSERT = 3; - private INetworkMaster network; private List consumers = new ArrayList<>(); @@ -55,13 +52,19 @@ public class WirelessGridHandler implements IWirelessGridHandler { return false; } - consumers.add(new WirelessGridConsumer(player, player.getHeldItem(hand))); + ItemStack stack = player.getHeldItem(hand); + + if (RefinedStorage.INSTANCE.wirelessGridUsesEnergy && stack.getItemDamage() != ItemWirelessGrid.TYPE_CREATIVE && RefinedStorageItems.WIRELESS_GRID.getEnergyStored(stack) <= RefinedStorage.INSTANCE.wirelessGridOpenUsage) { + return true; + } + + consumers.add(new WirelessGridConsumer(player, stack)); player.openGui(RefinedStorage.INSTANCE, RefinedStorageGui.WIRELESS_GRID, player.worldObj, hand.ordinal(), 0, 0); network.sendItemStorageToClient((EntityPlayerMP) player); - drainEnergy(player, USAGE_OPEN); + drainEnergy(player, RefinedStorage.INSTANCE.wirelessGridOpenUsage); return true; } @@ -79,7 +82,7 @@ public class WirelessGridHandler implements IWirelessGridHandler { public void drainEnergy(EntityPlayer player, int energy) { IWirelessGridConsumer consumer = getConsumer(player); - if (consumer != null) { + if (consumer != null && RefinedStorage.INSTANCE.wirelessGridUsesEnergy) { ItemWirelessGrid item = RefinedStorageItems.WIRELESS_GRID; if (consumer.getStack().getItemDamage() != ItemWirelessGrid.TYPE_CREATIVE) { diff --git a/src/main/java/refinedstorage/apiimpl/network/grid/ItemGridHandler.java b/src/main/java/refinedstorage/apiimpl/network/grid/ItemGridHandler.java index 8a43432ef..282f7f2a5 100755 --- a/src/main/java/refinedstorage/apiimpl/network/grid/ItemGridHandler.java +++ b/src/main/java/refinedstorage/apiimpl/network/grid/ItemGridHandler.java @@ -3,13 +3,13 @@ package refinedstorage.apiimpl.network.grid; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.inventory.InventoryHelper; import net.minecraft.item.ItemStack; +import refinedstorage.RefinedStorage; import refinedstorage.api.autocrafting.ICraftingPattern; import refinedstorage.api.autocrafting.ICraftingTask; import refinedstorage.api.network.INetworkMaster; import refinedstorage.api.network.NetworkUtils; import refinedstorage.api.network.grid.IItemGridHandler; import refinedstorage.api.storage.CompareUtils; -import refinedstorage.apiimpl.network.WirelessGridHandler; public class ItemGridHandler implements IItemGridHandler { public static final int MAX_CRAFTING_PER_REQUEST = 500; @@ -75,17 +75,21 @@ public class ItemGridHandler implements IItemGridHandler { player.updateHeldItem(); } - network.getWirelessGridHandler().drainEnergy(player, WirelessGridHandler.USAGE_EXTRACT); + network.getWirelessGridHandler().drainEnergy(player, RefinedStorage.INSTANCE.wirelessGridExtractUsage); } } @Override - public ItemStack onInsert(ItemStack stack) { - return network.insertItem(stack, stack.stackSize, false); + public ItemStack onInsert(EntityPlayerMP player, ItemStack stack) { + ItemStack remainder = network.insertItem(stack, stack.stackSize, false); + + network.getWirelessGridHandler().drainEnergy(player, RefinedStorage.INSTANCE.wirelessGridInsertUsage); + + return remainder; } @Override - public void onInsertHeldItem(boolean single, EntityPlayerMP player) { + public void onInsertHeldItem(EntityPlayerMP player, boolean single) { if (player.inventory.getItemStack() == null) { return; } @@ -109,7 +113,7 @@ public class ItemGridHandler implements IItemGridHandler { player.updateHeldItem(); - network.getWirelessGridHandler().drainEnergy(player, WirelessGridHandler.USAGE_INSERT); + network.getWirelessGridHandler().drainEnergy(player, RefinedStorage.INSTANCE.wirelessGridInsertUsage); } @Override diff --git a/src/main/java/refinedstorage/container/ContainerGrid.java b/src/main/java/refinedstorage/container/ContainerGrid.java index 353ee34c3..9f366c112 100755 --- a/src/main/java/refinedstorage/container/ContainerGrid.java +++ b/src/main/java/refinedstorage/container/ContainerGrid.java @@ -1,6 +1,7 @@ package refinedstorage.container; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; import net.minecraftforge.items.SlotItemHandler; @@ -108,7 +109,7 @@ public class ContainerGrid extends ContainerBase { ((TileGrid) grid).onCraftedShift(this, player); } else if (slot != patternResultSlot && !(slot instanceof SlotSpecimenLegacy)) { if (grid.getType() != EnumGridType.FLUID && grid.getItemHandler() != null) { - slot.putStack(grid.getItemHandler().onInsert(slot.getStack())); + slot.putStack(grid.getItemHandler().onInsert((EntityPlayerMP) player, slot.getStack())); } else if (grid.getType() == EnumGridType.FLUID && grid.getFluidHandler() != null) { slot.putStack(grid.getFluidHandler().onInsert(slot.getStack())); } diff --git a/src/main/java/refinedstorage/network/MessageGridItemInsertHeld.java b/src/main/java/refinedstorage/network/MessageGridItemInsertHeld.java index 8aee35947..0e3265ee0 100755 --- a/src/main/java/refinedstorage/network/MessageGridItemInsertHeld.java +++ b/src/main/java/refinedstorage/network/MessageGridItemInsertHeld.java @@ -35,7 +35,7 @@ public class MessageGridItemInsertHeld extends MessageHandlerPlayerToServer Date: Tue, 16 Aug 2016 23:51:49 +0200 Subject: [PATCH 205/214] Use buckets from fluid storage in autocrafting --- .../autocrafting/BasicCraftingTask.java | 3 +- .../autocrafting/ProcessingCraftingTask.java | 3 +- .../network/grid/FluidGridHandler.java | 12 +++---- .../apiimpl/storage/fluid/FluidUtils.java | 32 +++++++++++++++++++ 4 files changed, 40 insertions(+), 10 deletions(-) diff --git a/src/main/java/refinedstorage/apiimpl/autocrafting/BasicCraftingTask.java b/src/main/java/refinedstorage/apiimpl/autocrafting/BasicCraftingTask.java index 2cf382c64..9191dd3de 100755 --- a/src/main/java/refinedstorage/apiimpl/autocrafting/BasicCraftingTask.java +++ b/src/main/java/refinedstorage/apiimpl/autocrafting/BasicCraftingTask.java @@ -10,6 +10,7 @@ import refinedstorage.api.autocrafting.ICraftingPattern; import refinedstorage.api.autocrafting.ICraftingTask; import refinedstorage.api.network.INetworkMaster; import refinedstorage.api.network.NetworkUtils; +import refinedstorage.apiimpl.storage.fluid.FluidUtils; import java.util.ArrayList; import java.util.List; @@ -68,7 +69,7 @@ public class BasicCraftingTask implements ICraftingTask { if (!satisfied[i]) { done = false; - ItemStack took = NetworkUtils.extractItem(network, input, 1); + ItemStack took = FluidUtils.extractItemOrIfBucketLookInFluids(network, input, 1); if (took != null) { itemsTook.add(took); diff --git a/src/main/java/refinedstorage/apiimpl/autocrafting/ProcessingCraftingTask.java b/src/main/java/refinedstorage/apiimpl/autocrafting/ProcessingCraftingTask.java index 31f04b17a..e22ce9ce4 100755 --- a/src/main/java/refinedstorage/apiimpl/autocrafting/ProcessingCraftingTask.java +++ b/src/main/java/refinedstorage/apiimpl/autocrafting/ProcessingCraftingTask.java @@ -10,6 +10,7 @@ import refinedstorage.api.autocrafting.ICraftingTask; import refinedstorage.api.network.INetworkMaster; import refinedstorage.api.network.NetworkUtils; import refinedstorage.api.storage.CompareUtils; +import refinedstorage.apiimpl.storage.fluid.FluidUtils; public class ProcessingCraftingTask implements ICraftingTask { public static final int ID = 1; @@ -53,7 +54,7 @@ public class ProcessingCraftingTask implements ICraftingTask { for (int i = 0; i < inserted.length; ++i) { if (!inserted[i]) { ItemStack input = pattern.getInputs()[i]; - ItemStack took = NetworkUtils.extractItem(network, input, 1); + ItemStack took = FluidUtils.extractItemOrIfBucketLookInFluids(network, input, 1); if (took != null) { if (ItemHandlerHelper.insertItem(container.getConnectedItems(), took, true) == null) { diff --git a/src/main/java/refinedstorage/apiimpl/network/grid/FluidGridHandler.java b/src/main/java/refinedstorage/apiimpl/network/grid/FluidGridHandler.java index c08972037..afae15666 100755 --- a/src/main/java/refinedstorage/apiimpl/network/grid/FluidGridHandler.java +++ b/src/main/java/refinedstorage/apiimpl/network/grid/FluidGridHandler.java @@ -1,11 +1,9 @@ package refinedstorage.apiimpl.network.grid; import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.init.Items; import net.minecraft.inventory.InventoryHelper; import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidRegistry; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.capability.CapabilityFluidHandler; import refinedstorage.api.network.INetworkMaster; @@ -17,8 +15,6 @@ import refinedstorage.apiimpl.storage.fluid.FluidUtils; import javax.annotation.Nullable; public class FluidGridHandler implements IFluidGridHandler { - private static final ItemStack EMPTY_BUCKET = new ItemStack(Items.BUCKET); - private INetworkMaster network; public FluidGridHandler(INetworkMaster network) { @@ -29,15 +25,15 @@ public class FluidGridHandler implements IFluidGridHandler { public void onExtract(int hash, boolean shift, EntityPlayerMP player) { FluidStack stack = network.getFluidStorage().get(hash); - if (stack != null && (stack.getFluid() == FluidRegistry.WATER || stack.getFluid() == FluidRegistry.LAVA || FluidRegistry.getBucketFluids().contains(stack.getFluid()))) { - ItemStack bucket = NetworkUtils.extractItem(network, EMPTY_BUCKET, 1); + if (stack != null && FluidUtils.hasFluidBucket(stack)) { + ItemStack bucket = FluidUtils.extractBucket(network); if (bucket == null) { for (int i = 0; i < player.inventory.getSizeInventory(); ++i) { ItemStack slot = player.inventory.getStackInSlot(i); - if (CompareUtils.compareStackNoQuantity(EMPTY_BUCKET, slot)) { - bucket = EMPTY_BUCKET.copy(); + if (CompareUtils.compareStackNoQuantity(FluidUtils.EMPTY_BUCKET, slot)) { + bucket = FluidUtils.EMPTY_BUCKET.copy(); player.inventory.decrStackSize(i, 1); diff --git a/src/main/java/refinedstorage/apiimpl/storage/fluid/FluidUtils.java b/src/main/java/refinedstorage/apiimpl/storage/fluid/FluidUtils.java index 2845370d9..145817fec 100755 --- a/src/main/java/refinedstorage/apiimpl/storage/fluid/FluidUtils.java +++ b/src/main/java/refinedstorage/apiimpl/storage/fluid/FluidUtils.java @@ -1,12 +1,18 @@ package refinedstorage.apiimpl.storage.fluid; +import net.minecraft.init.Items; import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidRegistry; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.IFluidContainerItem; import net.minecraftforge.fluids.capability.CapabilityFluidHandler; +import refinedstorage.api.network.INetworkMaster; +import refinedstorage.api.network.NetworkUtils; public final class FluidUtils { + public static final ItemStack EMPTY_BUCKET = new ItemStack(Items.BUCKET); + public static FluidStack copyStackWithSize(FluidStack stack, int size) { FluidStack copy = stack.copy(); copy.amount = size; @@ -26,4 +32,30 @@ public final class FluidUtils { return null; } + + public static boolean hasFluidBucket(FluidStack stack) { + return stack.getFluid() == FluidRegistry.WATER || stack.getFluid() == FluidRegistry.LAVA || FluidRegistry.getBucketFluids().contains(stack.getFluid()); + } + + public static ItemStack extractItemOrIfBucketLookInFluids(INetworkMaster network, ItemStack stack, int size) { + ItemStack result = NetworkUtils.extractItem(network, stack, size); + + if (result == null && stack.hasCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, null)) { + FluidStack fluidStack = getFluidFromStack(stack, true); + + if (fluidStack != null && hasFluidBucket(fluidStack)) { + result = extractBucket(network); + + if (result != null) { + result.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, null).fill(NetworkUtils.extractFluid(network, fluidStack, Fluid.BUCKET_VOLUME), true); + } + } + } + + return result; + } + + public static ItemStack extractBucket(INetworkMaster network) { + return NetworkUtils.extractItem(network, EMPTY_BUCKET, 1); + } } From 122ea38e8acd508a2e25f89911f63e6af1d82e9a Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Tue, 16 Aug 2016 23:57:20 +0200 Subject: [PATCH 206/214] Start autocrafting task for buckets if no buckets are in the system --- .../refinedstorage/apiimpl/storage/fluid/FluidUtils.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/main/java/refinedstorage/apiimpl/storage/fluid/FluidUtils.java b/src/main/java/refinedstorage/apiimpl/storage/fluid/FluidUtils.java index 145817fec..512b0016f 100755 --- a/src/main/java/refinedstorage/apiimpl/storage/fluid/FluidUtils.java +++ b/src/main/java/refinedstorage/apiimpl/storage/fluid/FluidUtils.java @@ -7,6 +7,7 @@ import net.minecraftforge.fluids.FluidRegistry; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.IFluidContainerItem; import net.minecraftforge.fluids.capability.CapabilityFluidHandler; +import refinedstorage.api.autocrafting.ICraftingPattern; import refinedstorage.api.network.INetworkMaster; import refinedstorage.api.network.NetworkUtils; @@ -48,6 +49,12 @@ public final class FluidUtils { if (result != null) { result.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, null).fill(NetworkUtils.extractFluid(network, fluidStack, Fluid.BUCKET_VOLUME), true); + } else { + ICraftingPattern pattern = NetworkUtils.getPattern(network, EMPTY_BUCKET); + + if (pattern != null) { + network.addCraftingTask(network.createCraftingTask(pattern)); + } } } } From 57c9c59754b95e718a88ac4486fef900e0b43011 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Wed, 17 Aug 2016 00:11:30 +0200 Subject: [PATCH 207/214] Fix grid crashes, fixes issues #271 and #266 --- CHANGELOG.md | 3 +++ src/main/java/refinedstorage/gui/grid/GuiGrid.java | 9 +++++---- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a3815cc01..5f6df7b3e 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,9 @@ # Refined Storage Changelog ### 0.9 +**Bugfixes** +- Fixed crash with Grid + **Features** - Added fluid storage - Usage of Wireless Grid is now configurable diff --git a/src/main/java/refinedstorage/gui/grid/GuiGrid.java b/src/main/java/refinedstorage/gui/grid/GuiGrid.java index eea5f1c57..066c1495f 100755 --- a/src/main/java/refinedstorage/gui/grid/GuiGrid.java +++ b/src/main/java/refinedstorage/gui/grid/GuiGrid.java @@ -1,7 +1,8 @@ package refinedstorage.gui.grid; import com.google.common.collect.ArrayListMultimap; -import com.google.common.collect.Multimap; +import com.google.common.collect.ListMultimap; +import com.google.common.collect.Multimaps; import net.minecraft.client.audio.PositionedSoundRecord; import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.gui.GuiTextField; @@ -41,8 +42,8 @@ public class GuiGrid extends GuiBase { public static final GridSortingQuantity SORTING_QUANTITY = new GridSortingQuantity(); public static final GridSortingName SORTING_NAME = new GridSortingName(); - public static Multimap ITEMS = ArrayListMultimap.create(); - public static Multimap FLUIDS = ArrayListMultimap.create(); + public static final ListMultimap ITEMS = Multimaps.synchronizedListMultimap(ArrayListMultimap.create()); + public static final ListMultimap FLUIDS = Multimaps.synchronizedListMultimap(ArrayListMultimap.create()); public static List STACKS = new ArrayList<>(); @@ -108,7 +109,7 @@ public class GuiGrid extends GuiBase { List stacks = new ArrayList<>(); if (grid.isConnected()) { - stacks.addAll(grid.getType() == EnumGridType.FLUID ? new ArrayList<>(FLUIDS.values()) : new ArrayList<>(ITEMS.values())); + stacks.addAll(grid.getType() == EnumGridType.FLUID ? FLUIDS.values() : ITEMS.values()); String query = searchField.getText().trim().toLowerCase(); From a6b5d78e518063f45d0857e6d9515e02315bd642 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Wed, 17 Aug 2016 00:17:07 +0200 Subject: [PATCH 208/214] Add todos --- .../apiimpl/autocrafting/BasicCraftingTask.java | 4 ++-- .../java/refinedstorage/gui/sidebutton/SideButtonType.java | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/refinedstorage/apiimpl/autocrafting/BasicCraftingTask.java b/src/main/java/refinedstorage/apiimpl/autocrafting/BasicCraftingTask.java index 9191dd3de..9f6dc854f 100755 --- a/src/main/java/refinedstorage/apiimpl/autocrafting/BasicCraftingTask.java +++ b/src/main/java/refinedstorage/apiimpl/autocrafting/BasicCraftingTask.java @@ -94,7 +94,7 @@ public class BasicCraftingTask implements ICraftingTask { return done; } - // @todo: handle no space + // @TODO: Handle no space @Override public void onDone(INetworkMaster network) { for (ItemStack output : pattern.getOutputs()) { @@ -108,7 +108,7 @@ public class BasicCraftingTask implements ICraftingTask { } } - // @todo: handle no space + // @TODO: Handle no space @Override public void onCancelled(INetworkMaster network) { for (ItemStack took : itemsTook) { diff --git a/src/main/java/refinedstorage/gui/sidebutton/SideButtonType.java b/src/main/java/refinedstorage/gui/sidebutton/SideButtonType.java index d0a2e158e..4072419ab 100755 --- a/src/main/java/refinedstorage/gui/sidebutton/SideButtonType.java +++ b/src/main/java/refinedstorage/gui/sidebutton/SideButtonType.java @@ -6,6 +6,7 @@ import refinedstorage.tile.config.IType; import refinedstorage.tile.data.TileDataManager; import refinedstorage.tile.data.TileDataParameter; +// @TODO: Add icons public class SideButtonType extends SideButton { private TileDataParameter type; From 61e5d9711165c996f1c4b29f1888b8d75a674356 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Wed, 17 Aug 2016 00:21:37 +0200 Subject: [PATCH 209/214] Update changelog --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5f6df7b3e..cce3df578 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,7 +6,7 @@ **Features** - Added fluid storage -- Usage of Wireless Grid is now configurable +- Energy usage of Wireless Grid is now configurable ### 0.8.19 **Bugfixes** From 76087528018f00a0eaf4ff117d8a79b344aba0da Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Wed, 17 Aug 2016 16:02:51 +0200 Subject: [PATCH 210/214] Special case vanilla liquids --- .../java/refinedstorage/tile/TileConstructor.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/main/java/refinedstorage/tile/TileConstructor.java b/src/main/java/refinedstorage/tile/TileConstructor.java index dafef1053..eadaea436 100755 --- a/src/main/java/refinedstorage/tile/TileConstructor.java +++ b/src/main/java/refinedstorage/tile/TileConstructor.java @@ -4,6 +4,7 @@ import mcmultipart.microblock.IMicroblock; import net.minecraft.block.Block; import net.minecraft.block.SoundType; import net.minecraft.block.state.IBlockState; +import net.minecraft.init.Blocks; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; @@ -103,8 +104,15 @@ public class TileConstructor extends TileMultipartNode implements IComparable, I FluidStack took = network.extractFluid(stack, Fluid.BUCKET_VOLUME, compare); if (took != null) { - // @TODO: Won't update - worldObj.setBlockState(front, block.getDefaultState(), 11); + IBlockState state = block.getDefaultState(); + + if (state.getBlock() == Blocks.WATER) { + state = Blocks.FLOWING_WATER.getDefaultState(); + } else if (state.getBlock() == Blocks.LAVA) { + state = Blocks.FLOWING_LAVA.getDefaultState(); + } + + worldObj.setBlockState(front, state, 1 | 2); } } } From 6f34e7b986e90dc709e8af935f1eeb39402f1c0a Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Wed, 17 Aug 2016 17:08:53 +0200 Subject: [PATCH 211/214] Priority field can now display 4 digits at a time, fixes #272 --- CHANGELOG.md | 1 + src/main/java/refinedstorage/gui/GuiStorage.java | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index cce3df578..1a67470e8 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ ### 0.9 **Bugfixes** - Fixed crash with Grid +- Priority field can now display 4 digits at a time **Features** - Added fluid storage diff --git a/src/main/java/refinedstorage/gui/GuiStorage.java b/src/main/java/refinedstorage/gui/GuiStorage.java index 631f0d5e2..631da0bb7 100755 --- a/src/main/java/refinedstorage/gui/GuiStorage.java +++ b/src/main/java/refinedstorage/gui/GuiStorage.java @@ -54,7 +54,7 @@ public class GuiStorage extends GuiBase { addSideButton(new SideButtonCompare(gui.getCompareParameter(), CompareUtils.COMPARE_NBT)); } - priorityField = new GuiTextField(0, fontRendererObj, x + 98 + 1, y + 54 + 1, 25, fontRendererObj.FONT_HEIGHT); + priorityField = new GuiTextField(0, fontRendererObj, x + 98 + 1, y + 54 + 1, 29, fontRendererObj.FONT_HEIGHT); priorityField.setEnableBackgroundDrawing(false); priorityField.setVisible(true); priorityField.setTextColor(16777215); From 1ee7936bcbef632b06c06bc379b33933d10111b5 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Wed, 17 Aug 2016 17:09:49 +0200 Subject: [PATCH 212/214] Also detector amount field, fixes #272 --- CHANGELOG.md | 2 +- src/main/java/refinedstorage/gui/GuiDetector.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1a67470e8..853c54273 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,7 @@ ### 0.9 **Bugfixes** - Fixed crash with Grid -- Priority field can now display 4 digits at a time +- Priority field and detector amount field can now display 4 digits at a time **Features** - Added fluid storage diff --git a/src/main/java/refinedstorage/gui/GuiDetector.java b/src/main/java/refinedstorage/gui/GuiDetector.java index 5bc5048dd..9b9317653 100755 --- a/src/main/java/refinedstorage/gui/GuiDetector.java +++ b/src/main/java/refinedstorage/gui/GuiDetector.java @@ -28,7 +28,7 @@ public class GuiDetector extends GuiBase { addSideButton(new SideButtonCompare(TileDetector.COMPARE, CompareUtils.COMPARE_DAMAGE)); addSideButton(new SideButtonCompare(TileDetector.COMPARE, CompareUtils.COMPARE_NBT)); - AMOUNT = new GuiTextField(0, fontRendererObj, x + 62 + 1, y + 23 + 1, 25, fontRendererObj.FONT_HEIGHT); + AMOUNT = new GuiTextField(0, fontRendererObj, x + 62 + 1, y + 23 + 1, 29, fontRendererObj.FONT_HEIGHT); AMOUNT.setText(String.valueOf(TileDetector.AMOUNT.getValue())); AMOUNT.setEnableBackgroundDrawing(false); AMOUNT.setVisible(true); From 4c72f48dbbf8b0782c50ff1565fd05426e8f3089 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Fri, 19 Aug 2016 02:22:57 +0200 Subject: [PATCH 213/214] Fixed Grid Filter only updating the Grid when reopening the GUI --- CHANGELOG.md | 5 +++++ .../apiimpl/autocrafting/CraftingTaskScheduler.java | 2 +- .../inventory/ItemHandlerGridFilterInGrid.java | 7 +++++++ src/main/java/refinedstorage/tile/TileConstructor.java | 2 +- src/main/java/refinedstorage/tile/TileExporter.java | 2 +- 5 files changed, 15 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 853c54273..e90696985 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,12 +3,17 @@ ### 0.9 **Bugfixes** - Fixed crash with Grid +- Fixed Grid Filter only updating the Grid when reopening the GUI - Priority field and detector amount field can now display 4 digits at a time **Features** - Added fluid storage - Energy usage of Wireless Grid is now configurable +### 0.8.20 +**Bugfixes** +- Fixed crash with Grid + ### 0.8.19 **Bugfixes** - Fixed item duplication bug with External Storage diff --git a/src/main/java/refinedstorage/apiimpl/autocrafting/CraftingTaskScheduler.java b/src/main/java/refinedstorage/apiimpl/autocrafting/CraftingTaskScheduler.java index 54342d0c4..ac3d20738 100755 --- a/src/main/java/refinedstorage/apiimpl/autocrafting/CraftingTaskScheduler.java +++ b/src/main/java/refinedstorage/apiimpl/autocrafting/CraftingTaskScheduler.java @@ -39,7 +39,7 @@ public class CraftingTaskScheduler { tile.markDirty(); } - public void writeToNBT(NBTTagCompound tag) { + public void write(NBTTagCompound tag) { if (scheduledItem != null) { tag.setTag(NBT_SCHEDULED, scheduledItem.serializeNBT()); } else { diff --git a/src/main/java/refinedstorage/inventory/ItemHandlerGridFilterInGrid.java b/src/main/java/refinedstorage/inventory/ItemHandlerGridFilterInGrid.java index a0182bf4a..b729a33d7 100755 --- a/src/main/java/refinedstorage/inventory/ItemHandlerGridFilterInGrid.java +++ b/src/main/java/refinedstorage/inventory/ItemHandlerGridFilterInGrid.java @@ -1,8 +1,11 @@ package refinedstorage.inventory; import net.minecraft.item.ItemStack; +import net.minecraftforge.fml.common.FMLCommonHandler; +import net.minecraftforge.fml.relauncher.Side; import refinedstorage.RefinedStorageItems; import refinedstorage.gui.grid.GridFilteredItem; +import refinedstorage.gui.grid.GuiGrid; import refinedstorage.item.ItemGridFilter; import java.util.List; @@ -37,5 +40,9 @@ public class ItemHandlerGridFilterInGrid extends ItemHandlerBasic { } } } + + if (FMLCommonHandler.instance().getSide() == Side.CLIENT) { + GuiGrid.markForSorting(); + } } } diff --git a/src/main/java/refinedstorage/tile/TileConstructor.java b/src/main/java/refinedstorage/tile/TileConstructor.java index eadaea436..d66a2ff0a 100755 --- a/src/main/java/refinedstorage/tile/TileConstructor.java +++ b/src/main/java/refinedstorage/tile/TileConstructor.java @@ -162,7 +162,7 @@ public class TileConstructor extends TileMultipartNode implements IComparable, I writeItems(upgrades, 1, tag); writeItems(fluidFilters, 2, tag); - scheduler.writeToNBT(tag); + scheduler.write(tag); return tag; } diff --git a/src/main/java/refinedstorage/tile/TileExporter.java b/src/main/java/refinedstorage/tile/TileExporter.java index e5ac6209b..3e4079b6d 100755 --- a/src/main/java/refinedstorage/tile/TileExporter.java +++ b/src/main/java/refinedstorage/tile/TileExporter.java @@ -148,7 +148,7 @@ public class TileExporter extends TileMultipartNode implements IComparable, ITyp writeItems(upgrades, 1, tag); writeItems(fluidFilters, 2, tag); - scheduler.writeToNBT(tag); + scheduler.write(tag); return tag; } From 2e3f08a5e4090019959a3ba599ce32ca852e7809 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Fri, 19 Aug 2016 02:56:25 +0200 Subject: [PATCH 214/214] Fix grid crash and translucent cable config --- src/main/java/refinedstorage/RefinedStorage.java | 4 ++++ src/main/java/refinedstorage/block/BlockCable.java | 6 ++++++ .../java/refinedstorage/gui/grid/stack/ClientStackItem.java | 3 ++- 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/main/java/refinedstorage/RefinedStorage.java b/src/main/java/refinedstorage/RefinedStorage.java index e9c70edce..c37c5b77b 100755 --- a/src/main/java/refinedstorage/RefinedStorage.java +++ b/src/main/java/refinedstorage/RefinedStorage.java @@ -92,6 +92,8 @@ public final class RefinedStorage { public int stackUpgradeUsage; public int interdimensionalUpgradeUsage; + public boolean translucentCables; + @EventHandler public void preInit(FMLPreInitializationEvent e) { PROXY.preInit(e); @@ -144,6 +146,8 @@ public final class RefinedStorage { stackUpgradeUsage = config.getInt("stack", "upgrades", 12, 0, Integer.MAX_VALUE, "The additional energy used per Stack Upgrade"); interdimensionalUpgradeUsage = config.getInt("interdimensional", "upgrades", 1000, 0, Integer.MAX_VALUE, "The additional energy used by the Interdimensional Upgrade"); + translucentCables = config.getBoolean("translucentCables", "misc", false, "For resource pack makers that want a translucent cable"); + config.save(); } diff --git a/src/main/java/refinedstorage/block/BlockCable.java b/src/main/java/refinedstorage/block/BlockCable.java index 66849d5d7..0c11019d1 100755 --- a/src/main/java/refinedstorage/block/BlockCable.java +++ b/src/main/java/refinedstorage/block/BlockCable.java @@ -13,6 +13,7 @@ import net.minecraft.entity.EntityLivingBase; import net.minecraft.inventory.InventoryHelper; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.BlockRenderLayer; import net.minecraft.util.EnumFacing; import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockPos; @@ -336,4 +337,9 @@ public class BlockCable extends BlockCoverable { return false; } + + @Override + public BlockRenderLayer getBlockLayer() { + return RefinedStorage.INSTANCE.translucentCables ? BlockRenderLayer.TRANSLUCENT : super.getBlockLayer(); + } } diff --git a/src/main/java/refinedstorage/gui/grid/stack/ClientStackItem.java b/src/main/java/refinedstorage/gui/grid/stack/ClientStackItem.java index 20eb9ea07..346f54bdf 100755 --- a/src/main/java/refinedstorage/gui/grid/stack/ClientStackItem.java +++ b/src/main/java/refinedstorage/gui/grid/stack/ClientStackItem.java @@ -2,6 +2,7 @@ package refinedstorage.gui.grid.stack; import io.netty.buffer.ByteBuf; import joptsimple.internal.Strings; +import net.minecraft.client.Minecraft; import net.minecraft.client.resources.I18n; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; @@ -49,7 +50,7 @@ public class ClientStackItem implements IClientStack { @Override public String getTooltip() { - return Strings.join(stack.getTooltip(null, true), "\n"); + return Strings.join(stack.getTooltip(Minecraft.getMinecraft().thePlayer, true), "\n"); } @Override