From d2678b90db3f5081dc4f2003a86d3288c4600b6e Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Fri, 1 Apr 2016 01:41:01 +0200 Subject: [PATCH] Wireless Grid changes The wireless grid used to be a hack, just opening the block's GUI it was bound to. Now it is bound to a controller, which means a grid is no longer needed on the network to actually use a wireless grid. Thanks to this I can also easily implement the wireless grid as an RF item (I now have the ability to throw the player out of the GUI when needed, for example: power is up) --- .../refinedstorage/RefinedStorageGui.java | 1 + .../java/refinedstorage/block/BlockGrid.java | 2 +- .../refinedstorage/block/EnumGridType.java | 4 +- .../container/ContainerGrid.java | 22 +++-- .../slot/SlotGridCraftingResult.java | 2 +- src/main/java/refinedstorage/gui/GuiGrid.java | 17 ++-- .../java/refinedstorage/gui/GuiHandler.java | 27 ++++++ .../SideButtonGridSearchBoxMode.java | 11 ++- .../SideButtonGridSortingDirection.java | 11 ++- .../sidebutton/SideButtonGridSortingType.java | 11 ++- .../refinedstorage/item/ItemWirelessGrid.java | 49 +++++++---- .../network/MessageGridCraftingClear.java | 2 +- .../network/MessageGridCraftingPush.java | 2 +- .../network/MessageGridCraftingTransfer.java | 2 +- .../network/MessageGridSettingsUpdate.java | 2 +- .../MessageWirelessGridSettingsUpdate.java | 62 +++++++++++++ .../refinedstorage/proxy/CommonProxy.java | 2 + .../refinedstorage/tile/TileController.java | 59 ++++++++++++- .../java/refinedstorage/tile/grid/IGrid.java | 27 ++++++ .../tile/{ => grid}/TileGrid.java | 28 +++++- .../tile/grid/WirelessGrid.java | 86 +++++++++++++++++++ .../assets/refinedstorage/lang/en_US.lang | 5 +- .../assets/refinedstorage/lang/nl_NL.lang | 7 +- 23 files changed, 375 insertions(+), 66 deletions(-) create mode 100755 src/main/java/refinedstorage/network/MessageWirelessGridSettingsUpdate.java create mode 100755 src/main/java/refinedstorage/tile/grid/IGrid.java rename src/main/java/refinedstorage/tile/{ => grid}/TileGrid.java (88%) create mode 100755 src/main/java/refinedstorage/tile/grid/WirelessGrid.java diff --git a/src/main/java/refinedstorage/RefinedStorageGui.java b/src/main/java/refinedstorage/RefinedStorageGui.java index 646e4815e..bf9ba4959 100755 --- a/src/main/java/refinedstorage/RefinedStorageGui.java +++ b/src/main/java/refinedstorage/RefinedStorageGui.java @@ -13,4 +13,5 @@ public final class RefinedStorageGui { public static final int STORAGE = 11; public static final int RELAY = 12; public static final int INTERFACE = 13; + public static final int WIRELESS_GRID = 14; } diff --git a/src/main/java/refinedstorage/block/BlockGrid.java b/src/main/java/refinedstorage/block/BlockGrid.java index 1a3980d77..1bb905a13 100755 --- a/src/main/java/refinedstorage/block/BlockGrid.java +++ b/src/main/java/refinedstorage/block/BlockGrid.java @@ -15,7 +15,7 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import refinedstorage.RefinedStorage; import refinedstorage.RefinedStorageGui; -import refinedstorage.tile.TileGrid; +import refinedstorage.tile.grid.TileGrid; import java.util.List; diff --git a/src/main/java/refinedstorage/block/EnumGridType.java b/src/main/java/refinedstorage/block/EnumGridType.java index e2c6ff308..daef604a3 100755 --- a/src/main/java/refinedstorage/block/EnumGridType.java +++ b/src/main/java/refinedstorage/block/EnumGridType.java @@ -4,7 +4,8 @@ import net.minecraft.util.IStringSerializable; public enum EnumGridType implements IStringSerializable { NORMAL(0, "normal"), - CRAFTING(1, "crafting"); + CRAFTING(1, "crafting"), + WIRELESS(2, "wireless"); private int id; private String name; @@ -27,5 +28,4 @@ public enum EnumGridType implements IStringSerializable { public String toString() { return name; } - } diff --git a/src/main/java/refinedstorage/container/ContainerGrid.java b/src/main/java/refinedstorage/container/ContainerGrid.java index 09ea57ede..2aefdf39a 100755 --- a/src/main/java/refinedstorage/container/ContainerGrid.java +++ b/src/main/java/refinedstorage/container/ContainerGrid.java @@ -6,7 +6,8 @@ import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; import refinedstorage.block.EnumGridType; import refinedstorage.container.slot.SlotGridCraftingResult; -import refinedstorage.tile.TileGrid; +import refinedstorage.tile.grid.IGrid; +import refinedstorage.tile.grid.TileGrid; import java.util.ArrayList; import java.util.List; @@ -14,9 +15,9 @@ import java.util.List; public class ContainerGrid extends ContainerBase { private List craftingSlots = new ArrayList(); - private TileGrid grid; + private IGrid grid; - public ContainerGrid(EntityPlayer player, TileGrid grid) { + public ContainerGrid(EntityPlayer player, IGrid grid) { super(player); this.grid = grid; @@ -28,7 +29,7 @@ public class ContainerGrid extends ContainerBase { int y = 106; for (int i = 0; i < 9; ++i) { - Slot slot = new Slot(grid.getCraftingInventory(), i, x, y); + Slot slot = new Slot(((TileGrid) grid).getCraftingInventory(), i, x, y); craftingSlots.add(slot); @@ -42,12 +43,12 @@ public class ContainerGrid extends ContainerBase { } } - addSlotToContainer(new SlotGridCraftingResult(this, player, grid.getCraftingInventory(), grid.getCraftingResultInventory(), grid, 0, 133 + 4, 120 + 4)); + addSlotToContainer(new SlotGridCraftingResult(this, player, ((TileGrid) grid).getCraftingInventory(), ((TileGrid) grid).getCraftingResultInventory(), (TileGrid) grid, 0, 133 + 4, 120 + 4)); } } public TileGrid getGrid() { - return grid; + return (TileGrid) grid; } public List getCraftingSlots() { @@ -73,4 +74,13 @@ public class ContainerGrid extends ContainerBase { } } } + + @Override + public void onContainerClosed(EntityPlayer player) { + super.onContainerClosed(player); + + if (grid.getType() == EnumGridType.WIRELESS && grid.isConnected()) { + grid.getController().onCloseWirelessGrid(player); + } + } } diff --git a/src/main/java/refinedstorage/container/slot/SlotGridCraftingResult.java b/src/main/java/refinedstorage/container/slot/SlotGridCraftingResult.java index 3bf56c7b5..940b27b45 100755 --- a/src/main/java/refinedstorage/container/slot/SlotGridCraftingResult.java +++ b/src/main/java/refinedstorage/container/slot/SlotGridCraftingResult.java @@ -7,7 +7,7 @@ import net.minecraft.inventory.SlotCrafting; import net.minecraft.item.ItemStack; import net.minecraftforge.fml.common.FMLCommonHandler; import refinedstorage.container.ContainerGrid; -import refinedstorage.tile.TileGrid; +import refinedstorage.tile.grid.TileGrid; public class SlotGridCraftingResult extends SlotCrafting { private ContainerGrid container; diff --git a/src/main/java/refinedstorage/gui/GuiGrid.java b/src/main/java/refinedstorage/gui/GuiGrid.java index 52980fcdd..267a6c401 100755 --- a/src/main/java/refinedstorage/gui/GuiGrid.java +++ b/src/main/java/refinedstorage/gui/GuiGrid.java @@ -21,14 +21,15 @@ import refinedstorage.network.MessageStoragePull; import refinedstorage.network.MessageStoragePush; import refinedstorage.storage.StorageItem; import refinedstorage.tile.TileController; -import refinedstorage.tile.TileGrid; +import refinedstorage.tile.grid.IGrid; +import refinedstorage.tile.grid.TileGrid; import java.io.IOException; import java.util.*; public class GuiGrid extends GuiBase { private ContainerGrid container; - private TileGrid grid; + private IGrid grid; private List items = new ArrayList(); @@ -39,7 +40,7 @@ public class GuiGrid extends GuiBase { private Scrollbar scrollbar; - public GuiGrid(ContainerGrid container, TileGrid grid) { + public GuiGrid(ContainerGrid container, IGrid grid) { super(container, 193, grid.getType() == EnumGridType.CRAFTING ? 256 : 208); this.container = container; @@ -49,7 +50,9 @@ public class GuiGrid extends GuiBase { @Override public void init(int x, int y) { - addSideButton(new SideButtonRedstoneMode(grid)); + if (grid.getRedstoneModeSetting() != null) { + addSideButton(new SideButtonRedstoneMode(grid.getRedstoneModeSetting())); + } addSideButton(new SideButtonGridSortingDirection(grid)); addSideButton(new SideButtonGridSortingType(grid)); @@ -162,7 +165,7 @@ public class GuiGrid extends GuiBase { public void drawForeground(int mouseX, int mouseY) { scrollbar.update(this, mouseX, mouseY); - drawString(7, 7, t("gui.refinedstorage:grid")); + drawString(7, 7, t(grid.getType() == EnumGridType.WIRELESS ? "gui.refinedstorage:wireless_grid" : "gui.refinedstorage:grid")); if (grid.getType() == EnumGridType.CRAFTING) { drawString(7, 94, t("container.crafting")); @@ -271,7 +274,7 @@ public class GuiGrid extends GuiBase { RefinedStorage.NETWORK.sendToServer(new MessageStoragePull(controller.getPos().getX(), controller.getPos().getY(), controller.getPos().getZ(), hoveringItemId, flags)); } else if (clickedClear) { - RefinedStorage.NETWORK.sendToServer(new MessageGridCraftingClear(grid)); + RefinedStorage.NETWORK.sendToServer(new MessageGridCraftingClear((TileGrid) grid)); } else { for (Slot slot : container.getPlayerInventorySlots()) { if (inBounds(slot.xDisplayPosition, slot.yDisplayPosition, 16, 16, mouseX - guiLeft, mouseY - guiTop)) { @@ -285,7 +288,7 @@ public class GuiGrid extends GuiBase { for (Slot slot : container.getCraftingSlots()) { if (inBounds(slot.xDisplayPosition, slot.yDisplayPosition, 16, 16, mouseX - guiLeft, mouseY - guiTop)) { if (GuiScreen.isShiftKeyDown()) { - RefinedStorage.NETWORK.sendToServer(new MessageGridCraftingPush(grid, slot.getSlotIndex())); + RefinedStorage.NETWORK.sendToServer(new MessageGridCraftingPush((TileGrid) grid, slot.getSlotIndex())); } } } diff --git a/src/main/java/refinedstorage/gui/GuiHandler.java b/src/main/java/refinedstorage/gui/GuiHandler.java index 04f8ccf15..19461d667 100755 --- a/src/main/java/refinedstorage/gui/GuiHandler.java +++ b/src/main/java/refinedstorage/gui/GuiHandler.java @@ -3,6 +3,7 @@ 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; @@ -10,6 +11,8 @@ import refinedstorage.RefinedStorageGui; import refinedstorage.container.*; import refinedstorage.storage.IStorageGui; import refinedstorage.tile.*; +import refinedstorage.tile.grid.TileGrid; +import refinedstorage.tile.grid.WirelessGrid; public class GuiHandler implements IGuiHandler { private Container getContainer(int ID, EntityPlayer player, TileEntity tile) { @@ -45,9 +48,31 @@ public class GuiHandler implements IGuiHandler { @Override public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { + if (ID == RefinedStorageGui.WIRELESS_GRID) { + return getWirelessGridContainer(world, player, x); + } + return getContainer(ID, player, world.getTileEntity(new BlockPos(x, y, z))); } + private WirelessGrid getWirelessGrid(World world, EntityPlayer player, int hand) { + EnumHand realHand = hand == 0 ? EnumHand.MAIN_HAND : EnumHand.OFF_HAND; + + return new WirelessGrid(player.getHeldItem(realHand), realHand, world); + } + + private ContainerGrid getWirelessGridContainer(World world, EntityPlayer player, int hand) { + WirelessGrid wirelessGrid = getWirelessGrid(world, player, hand); + + return new ContainerGrid(player, wirelessGrid); + } + + private GuiGrid getWirelessGridGui(World world, EntityPlayer player, int hand) { + WirelessGrid wirelessGrid = getWirelessGrid(world, 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)); @@ -57,6 +82,8 @@ public class GuiHandler implements IGuiHandler { return new GuiController((ContainerController) getContainer(ID, player, tile), (TileController) tile); case RefinedStorageGui.GRID: return new GuiGrid((ContainerGrid) getContainer(ID, player, tile), (TileGrid) tile); + case RefinedStorageGui.WIRELESS_GRID: + return getWirelessGridGui(world, player, x); case RefinedStorageGui.DISK_DRIVE: return new GuiStorage((ContainerStorage) getContainer(ID, player, tile), (IStorageGui) tile, "gui/disk_drive.png"); case RefinedStorageGui.IMPORTER: diff --git a/src/main/java/refinedstorage/gui/sidebutton/SideButtonGridSearchBoxMode.java b/src/main/java/refinedstorage/gui/sidebutton/SideButtonGridSearchBoxMode.java index 18e670f9d..42f362f9b 100755 --- a/src/main/java/refinedstorage/gui/sidebutton/SideButtonGridSearchBoxMode.java +++ b/src/main/java/refinedstorage/gui/sidebutton/SideButtonGridSearchBoxMode.java @@ -1,15 +1,14 @@ package refinedstorage.gui.sidebutton; import net.minecraft.util.text.TextFormatting; -import refinedstorage.RefinedStorage; import refinedstorage.gui.GuiBase; -import refinedstorage.network.MessageGridSettingsUpdate; -import refinedstorage.tile.TileGrid; +import refinedstorage.tile.grid.IGrid; +import refinedstorage.tile.grid.TileGrid; public class SideButtonGridSearchBoxMode extends SideButton { - private TileGrid grid; + private IGrid grid; - public SideButtonGridSearchBoxMode(TileGrid grid) { + public SideButtonGridSearchBoxMode(IGrid grid) { this.grid = grid; } @@ -39,6 +38,6 @@ public class SideButtonGridSearchBoxMode extends SideButton { mode = TileGrid.SEARCH_BOX_MODE_NORMAL; } - RefinedStorage.NETWORK.sendToServer(new MessageGridSettingsUpdate(grid, grid.getSortingDirection(), grid.getSortingType(), mode)); + grid.onSearchBoxModeChanged(mode); } } diff --git a/src/main/java/refinedstorage/gui/sidebutton/SideButtonGridSortingDirection.java b/src/main/java/refinedstorage/gui/sidebutton/SideButtonGridSortingDirection.java index af1540f08..0fe678ef8 100755 --- a/src/main/java/refinedstorage/gui/sidebutton/SideButtonGridSortingDirection.java +++ b/src/main/java/refinedstorage/gui/sidebutton/SideButtonGridSortingDirection.java @@ -1,15 +1,14 @@ package refinedstorage.gui.sidebutton; import net.minecraft.util.text.TextFormatting; -import refinedstorage.RefinedStorage; import refinedstorage.gui.GuiBase; -import refinedstorage.network.MessageGridSettingsUpdate; -import refinedstorage.tile.TileGrid; +import refinedstorage.tile.grid.IGrid; +import refinedstorage.tile.grid.TileGrid; public class SideButtonGridSortingDirection extends SideButton { - private TileGrid grid; + private IGrid grid; - public SideButtonGridSortingDirection(TileGrid grid) { + public SideButtonGridSortingDirection(IGrid grid) { this.grid = grid; } @@ -39,6 +38,6 @@ public class SideButtonGridSortingDirection extends SideButton { dir = TileGrid.SORTING_DIRECTION_ASCENDING; } - RefinedStorage.NETWORK.sendToServer(new MessageGridSettingsUpdate(grid, dir, grid.getSortingType(), grid.getSearchBoxMode())); + grid.onSortingDirectionChanged(dir); } } diff --git a/src/main/java/refinedstorage/gui/sidebutton/SideButtonGridSortingType.java b/src/main/java/refinedstorage/gui/sidebutton/SideButtonGridSortingType.java index 8e02f4b18..3668dcc21 100755 --- a/src/main/java/refinedstorage/gui/sidebutton/SideButtonGridSortingType.java +++ b/src/main/java/refinedstorage/gui/sidebutton/SideButtonGridSortingType.java @@ -1,15 +1,14 @@ package refinedstorage.gui.sidebutton; import net.minecraft.util.text.TextFormatting; -import refinedstorage.RefinedStorage; import refinedstorage.gui.GuiBase; -import refinedstorage.network.MessageGridSettingsUpdate; -import refinedstorage.tile.TileGrid; +import refinedstorage.tile.grid.IGrid; +import refinedstorage.tile.grid.TileGrid; public class SideButtonGridSortingType extends SideButton { - private TileGrid grid; + private IGrid grid; - public SideButtonGridSortingType(TileGrid grid) { + public SideButtonGridSortingType(IGrid grid) { this.grid = grid; } @@ -39,6 +38,6 @@ public class SideButtonGridSortingType extends SideButton { type = TileGrid.SORTING_TYPE_QUANTITY; } - RefinedStorage.NETWORK.sendToServer(new MessageGridSettingsUpdate(grid, grid.getSortingDirection(), type, grid.getSearchBoxMode())); + grid.onSortingTypeChanged(type); } } diff --git a/src/main/java/refinedstorage/item/ItemWirelessGrid.java b/src/main/java/refinedstorage/item/ItemWirelessGrid.java index 25debec53..87a211ebe 100755 --- a/src/main/java/refinedstorage/item/ItemWirelessGrid.java +++ b/src/main/java/refinedstorage/item/ItemWirelessGrid.java @@ -13,17 +13,19 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.util.text.TextComponentString; import net.minecraft.util.text.translation.I18n; import net.minecraft.world.World; -import refinedstorage.RefinedStorage; import refinedstorage.RefinedStorageBlocks; -import refinedstorage.RefinedStorageGui; -import refinedstorage.tile.TileGrid; +import refinedstorage.tile.TileController; +import refinedstorage.tile.grid.TileGrid; import java.util.List; public class ItemWirelessGrid extends ItemBase { - public static final String NBT_GRID_X = "GridX"; - public static final String NBT_GRID_Y = "GridY"; - public static final String NBT_GRID_Z = "GridZ"; + public static final String NBT_CONTROLLER_X = "ControllerX"; + public static final String NBT_CONTROLLER_Y = "ControllerY"; + public static final String NBT_CONTROLLER_Z = "ControllerZ"; + 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"; public ItemWirelessGrid() { super("wireless_grid"); @@ -44,12 +46,15 @@ public class ItemWirelessGrid extends ItemBase { public EnumActionResult onItemUse(ItemStack stack, EntityPlayer playerIn, World worldIn, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) { Block block = worldIn.getBlockState(pos).getBlock(); - if (block == RefinedStorageBlocks.GRID) { + if (block == RefinedStorageBlocks.CONTROLLER) { NBTTagCompound tag = new NBTTagCompound(); - tag.setInteger(NBT_GRID_X, pos.getX()); - tag.setInteger(NBT_GRID_Y, pos.getY()); - tag.setInteger(NBT_GRID_Z, pos.getZ()); + tag.setInteger(NBT_CONTROLLER_X, pos.getX()); + tag.setInteger(NBT_CONTROLLER_Y, pos.getY()); + tag.setInteger(NBT_CONTROLLER_Z, pos.getZ()); + 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); stack.setTagCompound(tag); @@ -66,8 +71,8 @@ public class ItemWirelessGrid extends ItemBase { if (isInRange(stack, player)) { TileEntity tile = world.getTileEntity(new BlockPos(getX(stack), getY(stack), getZ(stack))); - if (tile instanceof TileGrid) { - player.openGui(RefinedStorage.INSTANCE, RefinedStorageGui.GRID, world, tile.getPos().getX(), tile.getPos().getY(), tile.getPos().getZ()); + if (tile instanceof TileController) { + ((TileController) tile).onOpenWirelessGrid(player, hand); return new ActionResult(EnumActionResult.PASS, stack); } else { @@ -87,15 +92,27 @@ public class ItemWirelessGrid extends ItemBase { } public static int getX(ItemStack stack) { - return stack.getTagCompound().getInteger(NBT_GRID_X); + return stack.getTagCompound().getInteger(NBT_CONTROLLER_X); } public static int getY(ItemStack stack) { - return stack.getTagCompound().getInteger(NBT_GRID_Y); + return stack.getTagCompound().getInteger(NBT_CONTROLLER_Y); } public static int getZ(ItemStack stack) { - return stack.getTagCompound().getInteger(NBT_GRID_Z); + return stack.getTagCompound().getInteger(NBT_CONTROLLER_Z); + } + + public static int getSortingType(ItemStack stack) { + return stack.getTagCompound().getInteger(NBT_SORTING_TYPE); + } + + public static int getSortingDirection(ItemStack stack) { + return stack.getTagCompound().getInteger(NBT_SORTING_DIRECTION); + } + + public static int getSearchBoxMode(ItemStack stack) { + return stack.getTagCompound().getInteger(NBT_SEARCH_BOX_MODE); } public static boolean isInRange(ItemStack stack, EntityPlayer player) { @@ -103,6 +120,6 @@ public class ItemWirelessGrid extends ItemBase { } public static boolean isValid(ItemStack stack) { - return stack.hasTagCompound() && stack.getTagCompound().hasKey(NBT_GRID_X) && stack.getTagCompound().hasKey(NBT_GRID_Y) && stack.getTagCompound().hasKey(NBT_GRID_Z); + return stack.hasTagCompound() && stack.getTagCompound().hasKey(NBT_CONTROLLER_X) && stack.getTagCompound().hasKey(NBT_CONTROLLER_Y) && stack.getTagCompound().hasKey(NBT_CONTROLLER_Z); } } diff --git a/src/main/java/refinedstorage/network/MessageGridCraftingClear.java b/src/main/java/refinedstorage/network/MessageGridCraftingClear.java index ef3bc8cf3..4538c9787 100755 --- a/src/main/java/refinedstorage/network/MessageGridCraftingClear.java +++ b/src/main/java/refinedstorage/network/MessageGridCraftingClear.java @@ -7,7 +7,7 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.util.math.BlockPos; import net.minecraftforge.fml.common.network.simpleimpl.IMessage; import refinedstorage.block.EnumGridType; -import refinedstorage.tile.TileGrid; +import refinedstorage.tile.grid.TileGrid; public class MessageGridCraftingClear extends MessageHandlerPlayerToServer implements IMessage { private int x; diff --git a/src/main/java/refinedstorage/network/MessageGridCraftingPush.java b/src/main/java/refinedstorage/network/MessageGridCraftingPush.java index 6fc60fe59..eab765869 100755 --- a/src/main/java/refinedstorage/network/MessageGridCraftingPush.java +++ b/src/main/java/refinedstorage/network/MessageGridCraftingPush.java @@ -7,7 +7,7 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.util.math.BlockPos; import net.minecraftforge.fml.common.network.simpleimpl.IMessage; import refinedstorage.block.EnumGridType; -import refinedstorage.tile.TileGrid; +import refinedstorage.tile.grid.TileGrid; public class MessageGridCraftingPush extends MessageHandlerPlayerToServer implements IMessage { private int x; diff --git a/src/main/java/refinedstorage/network/MessageGridCraftingTransfer.java b/src/main/java/refinedstorage/network/MessageGridCraftingTransfer.java index 135d09a6e..69e5e3c2d 100755 --- a/src/main/java/refinedstorage/network/MessageGridCraftingTransfer.java +++ b/src/main/java/refinedstorage/network/MessageGridCraftingTransfer.java @@ -10,7 +10,7 @@ import net.minecraftforge.fml.common.network.ByteBufUtils; import net.minecraftforge.fml.common.network.simpleimpl.IMessage; import refinedstorage.block.EnumGridType; import refinedstorage.container.ContainerGrid; -import refinedstorage.tile.TileGrid; +import refinedstorage.tile.grid.TileGrid; public class MessageGridCraftingTransfer extends MessageHandlerPlayerToServer implements IMessage { private NBTTagCompound recipe; diff --git a/src/main/java/refinedstorage/network/MessageGridSettingsUpdate.java b/src/main/java/refinedstorage/network/MessageGridSettingsUpdate.java index 66d5ad038..65d348a27 100755 --- a/src/main/java/refinedstorage/network/MessageGridSettingsUpdate.java +++ b/src/main/java/refinedstorage/network/MessageGridSettingsUpdate.java @@ -5,7 +5,7 @@ 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.TileGrid; +import refinedstorage.tile.grid.TileGrid; public class MessageGridSettingsUpdate extends MessageHandlerPlayerToServer implements IMessage { private int x; diff --git a/src/main/java/refinedstorage/network/MessageWirelessGridSettingsUpdate.java b/src/main/java/refinedstorage/network/MessageWirelessGridSettingsUpdate.java new file mode 100755 index 000000000..88c8eab9a --- /dev/null +++ b/src/main/java/refinedstorage/network/MessageWirelessGridSettingsUpdate.java @@ -0,0 +1,62 @@ +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.item.ItemWirelessGrid; +import refinedstorage.tile.grid.TileGrid; + +public class MessageWirelessGridSettingsUpdate extends MessageHandlerPlayerToServer implements IMessage { + private int hand; + private int sortingDirection; + private int sortingType; + private int searchBoxMode; + + public MessageWirelessGridSettingsUpdate() { + } + + public MessageWirelessGridSettingsUpdate(int hand, int sortingDirection, int sortingType, int searchBoxMode) { + this.hand = hand; + this.sortingDirection = sortingDirection; + this.sortingType = sortingType; + this.searchBoxMode = searchBoxMode; + } + + @Override + public void fromBytes(ByteBuf buf) { + hand = buf.readInt(); + sortingDirection = buf.readInt(); + sortingType = buf.readInt(); + searchBoxMode = buf.readInt(); + } + + @Override + public void toBytes(ByteBuf buf) { + buf.writeInt(hand); + buf.writeInt(sortingDirection); + buf.writeInt(sortingType); + buf.writeInt(searchBoxMode); + } + + @Override + public void handle(MessageWirelessGridSettingsUpdate message, EntityPlayerMP player) { + ItemStack held = player.getHeldItem(hand == 1 ? EnumHand.OFF_HAND : EnumHand.MAIN_HAND); + + if (held != null && held.getItem() == RefinedStorageItems.WIRELESS_GRID && held.getTagCompound() != null) { + if (message.sortingDirection == TileGrid.SORTING_DIRECTION_ASCENDING || message.sortingDirection == TileGrid.SORTING_DIRECTION_DESCENDING) { + held.getTagCompound().setInteger(ItemWirelessGrid.NBT_SORTING_DIRECTION, message.sortingDirection); + } + + if (message.sortingType == TileGrid.SORTING_TYPE_QUANTITY || message.sortingType == TileGrid.SORTING_TYPE_NAME) { + held.getTagCompound().setInteger(ItemWirelessGrid.NBT_SORTING_TYPE, message.sortingType); + } + + if (message.searchBoxMode == TileGrid.SEARCH_BOX_MODE_NORMAL || message.searchBoxMode == TileGrid.SEARCH_BOX_MODE_JEI_SYNCHRONIZED) { + held.getTagCompound().setInteger(ItemWirelessGrid.NBT_SEARCH_BOX_MODE, message.searchBoxMode); + } + } + } +} diff --git a/src/main/java/refinedstorage/proxy/CommonProxy.java b/src/main/java/refinedstorage/proxy/CommonProxy.java index 4df5be14c..2c2d6d0fe 100755 --- a/src/main/java/refinedstorage/proxy/CommonProxy.java +++ b/src/main/java/refinedstorage/proxy/CommonProxy.java @@ -20,6 +20,7 @@ import refinedstorage.item.*; import refinedstorage.network.*; import refinedstorage.storage.NBTStorage; import refinedstorage.tile.*; +import refinedstorage.tile.grid.TileGrid; import refinedstorage.tile.solderer.*; import static refinedstorage.RefinedStorage.ID; @@ -39,6 +40,7 @@ public class CommonProxy { RefinedStorage.NETWORK.registerMessage(MessageGridSettingsUpdate.class, MessageGridSettingsUpdate.class, 11, Side.SERVER); RefinedStorage.NETWORK.registerMessage(MessageGridCraftingPush.class, MessageGridCraftingPush.class, 12, Side.SERVER); RefinedStorage.NETWORK.registerMessage(MessageGridCraftingTransfer.class, MessageGridCraftingTransfer.class, 13, Side.SERVER); + RefinedStorage.NETWORK.registerMessage(MessageWirelessGridSettingsUpdate.class, MessageWirelessGridSettingsUpdate.class, 14, Side.SERVER); NetworkRegistry.INSTANCE.registerGuiHandler(RefinedStorage.INSTANCE, new GuiHandler()); diff --git a/src/main/java/refinedstorage/tile/TileController.java b/src/main/java/refinedstorage/tile/TileController.java index a0e081fe1..12e15600d 100755 --- a/src/main/java/refinedstorage/tile/TileController.java +++ b/src/main/java/refinedstorage/tile/TileController.java @@ -3,12 +3,16 @@ package refinedstorage.tile; import cofh.api.energy.EnergyStorage; import cofh.api.energy.IEnergyReceiver; import io.netty.buffer.ByteBuf; +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.EnumFacing; +import net.minecraft.util.EnumHand; import net.minecraft.util.math.BlockPos; +import refinedstorage.RefinedStorage; import refinedstorage.RefinedStorageBlocks; +import refinedstorage.RefinedStorageGui; import refinedstorage.block.BlockController; import refinedstorage.block.EnumControllerType; import refinedstorage.storage.IStorage; @@ -18,14 +22,19 @@ import refinedstorage.tile.settings.IRedstoneModeSetting; import refinedstorage.tile.settings.RedstoneMode; import refinedstorage.util.InventoryUtils; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import java.util.List; +import java.util.*; public class TileController extends TileBase implements IEnergyReceiver, INetworkTile, IRedstoneModeSetting { + public class WirelessGridConsumer { + public EntityPlayer player; + public EnumHand hand; + public ItemStack wirelessGrid; + } + private List items = new ArrayList(); private List storages = new ArrayList(); + private List wirelessGridConsumers = new ArrayList(); + private List wirelessGridConsumersMarkedForRemoval = new ArrayList(); private RedstoneMode redstoneMode = RedstoneMode.IGNORE; @@ -107,6 +116,19 @@ public class TileController extends TileBase implements IEnergyReceiver, INetwor } } + wirelessGridConsumers.removeAll(wirelessGridConsumersMarkedForRemoval); + wirelessGridConsumersMarkedForRemoval.clear(); + + Iterator it = wirelessGridConsumers.iterator(); + while (it.hasNext()) { + WirelessGridConsumer consumer = it.next(); + + if (!InventoryUtils.compareStack(consumer.wirelessGrid, consumer.player.getHeldItem(consumer.hand))) { + onCloseWirelessGrid(consumer.player); + consumer.player.closeScreen(); + } + } + if (lastEnergy != energy.getEnergyStored()) { worldObj.updateComparatorOutputLevel(pos, RefinedStorageBlocks.CONTROLLER); } @@ -248,6 +270,35 @@ public class TileController extends TileBase implements IEnergyReceiver, INetwor return newStack; } + public void onOpenWirelessGrid(EntityPlayer player, EnumHand hand) { + WirelessGridConsumer consumer = new WirelessGridConsumer(); + consumer.hand = hand; + consumer.player = player; + consumer.wirelessGrid = player.getHeldItem(hand); + wirelessGridConsumers.add(consumer); + + player.openGui(RefinedStorage.INSTANCE, RefinedStorageGui.WIRELESS_GRID, worldObj, hand == EnumHand.OFF_HAND ? 1 : 0, 0, 0); + } + + public void onCloseWirelessGrid(EntityPlayer player) { + WirelessGridConsumer consumer = getWirelessGridConsumer(player); + + if (consumer != null) { + wirelessGridConsumersMarkedForRemoval.add(consumer); + } + } + + public WirelessGridConsumer getWirelessGridConsumer(EntityPlayer player) { + Iterator it = wirelessGridConsumers.iterator(); + while (it.hasNext()) { + WirelessGridConsumer consumer = it.next(); + if (consumer.player == player) { + return consumer; + } + } + return null; + } + @Override public void readFromNBT(NBTTagCompound nbt) { super.readFromNBT(nbt); diff --git a/src/main/java/refinedstorage/tile/grid/IGrid.java b/src/main/java/refinedstorage/tile/grid/IGrid.java new file mode 100755 index 000000000..0406c8373 --- /dev/null +++ b/src/main/java/refinedstorage/tile/grid/IGrid.java @@ -0,0 +1,27 @@ +package refinedstorage.tile.grid; + +import refinedstorage.block.EnumGridType; +import refinedstorage.tile.TileController; +import refinedstorage.tile.settings.IRedstoneModeSetting; + +public interface IGrid { + EnumGridType getType(); + + TileController getController(); + + int getSortingType(); + + int getSortingDirection(); + + int getSearchBoxMode(); + + void onSortingTypeChanged(int type); + + void onSortingDirectionChanged(int direction); + + void onSearchBoxModeChanged(int searchBoxMode); + + IRedstoneModeSetting getRedstoneModeSetting(); + + boolean isConnected(); +} diff --git a/src/main/java/refinedstorage/tile/TileGrid.java b/src/main/java/refinedstorage/tile/grid/TileGrid.java similarity index 88% rename from src/main/java/refinedstorage/tile/TileGrid.java rename to src/main/java/refinedstorage/tile/grid/TileGrid.java index 928149317..ab6891320 100755 --- a/src/main/java/refinedstorage/tile/TileGrid.java +++ b/src/main/java/refinedstorage/tile/grid/TileGrid.java @@ -1,4 +1,4 @@ -package refinedstorage.tile; +package refinedstorage.tile.grid; import io.netty.buffer.ByteBuf; import net.minecraft.entity.player.EntityPlayer; @@ -8,17 +8,21 @@ import net.minecraft.inventory.InventoryCrafting; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.CraftingManager; import net.minecraft.nbt.NBTTagCompound; +import refinedstorage.RefinedStorage; import refinedstorage.RefinedStorageBlocks; import refinedstorage.block.BlockGrid; import refinedstorage.block.EnumGridType; import refinedstorage.container.ContainerGrid; import refinedstorage.inventory.InventorySimple; +import refinedstorage.network.MessageGridSettingsUpdate; +import refinedstorage.tile.TileMachine; +import refinedstorage.tile.settings.IRedstoneModeSetting; import refinedstorage.util.InventoryUtils; import java.util.ArrayList; import java.util.List; -public class TileGrid extends TileMachine { +public class TileGrid extends TileMachine implements IGrid { 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"; @@ -185,6 +189,26 @@ public class TileGrid extends TileMachine { return searchBoxMode; } + @Override + public void onSortingTypeChanged(int type) { + RefinedStorage.NETWORK.sendToServer(new MessageGridSettingsUpdate(this, sortingDirection, type, searchBoxMode)); + } + + @Override + public void onSortingDirectionChanged(int direction) { + RefinedStorage.NETWORK.sendToServer(new MessageGridSettingsUpdate(this, direction, sortingType, searchBoxMode)); + } + + @Override + public void onSearchBoxModeChanged(int searchBoxMode) { + RefinedStorage.NETWORK.sendToServer(new MessageGridSettingsUpdate(this, sortingDirection, sortingType, searchBoxMode)); + } + + @Override + public IRedstoneModeSetting getRedstoneModeSetting() { + return this; + } + public void setSearchBoxMode(int searchBoxMode) { this.searchBoxMode = searchBoxMode; } diff --git a/src/main/java/refinedstorage/tile/grid/WirelessGrid.java b/src/main/java/refinedstorage/tile/grid/WirelessGrid.java new file mode 100755 index 000000000..2e67077fe --- /dev/null +++ b/src/main/java/refinedstorage/tile/grid/WirelessGrid.java @@ -0,0 +1,86 @@ +package refinedstorage.tile.grid; + +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import refinedstorage.RefinedStorage; +import refinedstorage.block.EnumGridType; +import refinedstorage.item.ItemWirelessGrid; +import refinedstorage.network.MessageWirelessGridSettingsUpdate; +import refinedstorage.tile.TileController; +import refinedstorage.tile.settings.IRedstoneModeSetting; + +public class WirelessGrid implements IGrid { + private ItemStack stack; + private EnumHand hand; + private World world; + private int sortingType; + private int sortingDirection; + private int searchBoxMode; + + public WirelessGrid(ItemStack stack, EnumHand hand, World world) { + this.stack = stack; + this.hand = hand; + this.world = world; + this.sortingType = ItemWirelessGrid.getSortingType(stack); + this.sortingDirection = ItemWirelessGrid.getSortingDirection(stack); + this.searchBoxMode = ItemWirelessGrid.getSearchBoxMode(stack); + } + + @Override + public EnumGridType getType() { + return EnumGridType.WIRELESS; + } + + @Override + public TileController getController() { + return (TileController) world.getTileEntity(new BlockPos(ItemWirelessGrid.getX(stack), ItemWirelessGrid.getY(stack), ItemWirelessGrid.getZ(stack))); + } + + @Override + public int getSortingType() { + return sortingType; + } + + @Override + public int getSortingDirection() { + return sortingDirection; + } + + @Override + public int getSearchBoxMode() { + return searchBoxMode; + } + + @Override + public void onSortingTypeChanged(int type) { + RefinedStorage.NETWORK.sendToServer(new MessageWirelessGridSettingsUpdate(hand == EnumHand.OFF_HAND ? 1 : 0, getSortingDirection(), type, getSearchBoxMode())); + + this.sortingType = type; + } + + @Override + public void onSortingDirectionChanged(int direction) { + RefinedStorage.NETWORK.sendToServer(new MessageWirelessGridSettingsUpdate(hand == EnumHand.OFF_HAND ? 1 : 0, direction, getSortingType(), getSearchBoxMode())); + + this.sortingDirection = direction; + } + + @Override + public void onSearchBoxModeChanged(int searchBoxMode) { + RefinedStorage.NETWORK.sendToServer(new MessageWirelessGridSettingsUpdate(hand == EnumHand.OFF_HAND ? 1 : 0, getSortingDirection(), getSortingType(), searchBoxMode)); + + this.searchBoxMode = searchBoxMode; + } + + @Override + public IRedstoneModeSetting getRedstoneModeSetting() { + return null; + } + + @Override + public boolean isConnected() { + return getController() instanceof TileController; + } +} diff --git a/src/main/resources/assets/refinedstorage/lang/en_US.lang b/src/main/resources/assets/refinedstorage/lang/en_US.lang index 944d76393..32fce5224 100755 --- a/src/main/resources/assets/refinedstorage/lang/en_US.lang +++ b/src/main/resources/assets/refinedstorage/lang/en_US.lang @@ -6,6 +6,7 @@ gui.refinedstorage:controller.machine_position.x=X: %d gui.refinedstorage:controller.machine_position.y=Y: %d gui.refinedstorage:controller.machine_position.z=Z: %d gui.refinedstorage:grid=Grid +gui.refinedstorage:wireless_grid=Wireless Grid gui.refinedstorage:disk_drive=Drive gui.refinedstorage:external_storage=External Storage gui.refinedstorage:importer=Importer @@ -31,8 +32,8 @@ 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=Grid out of range. -misc.refinedstorage:wireless_grid.not_found=Grid not found. +misc.refinedstorage:wireless_grid.out_of_range=Controller out of range. +misc.refinedstorage:wireless_grid.not_found=Controller not found. misc.refinedstorage:yes=Yes misc.refinedstorage:no=No diff --git a/src/main/resources/assets/refinedstorage/lang/nl_NL.lang b/src/main/resources/assets/refinedstorage/lang/nl_NL.lang index ef922a6ab..377f9bf30 100755 --- a/src/main/resources/assets/refinedstorage/lang/nl_NL.lang +++ b/src/main/resources/assets/refinedstorage/lang/nl_NL.lang @@ -6,6 +6,7 @@ gui.refinedstorage:controller.machine_position.x=X: %d gui.refinedstorage:controller.machine_position.y=Y: %d gui.refinedstorage:controller.machine_position.z=Z: %d gui.refinedstorage:grid=Rooster +gui.refinedstorage:wireless_grid=Draadloos Rooster gui.refinedstorage:disk_drive=Schijf gui.refinedstorage:external_storage=Externe Opslag gui.refinedstorage:importer=Importeur @@ -31,8 +32,8 @@ 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.out_of_range=Rooster buiten bereik. -misc.refinedstorage:wireless_grid.not_found=Rooster werd niet gevonden. +misc.refinedstorage:wireless_grid.out_of_range=Controller buiten bereik. +misc.refinedstorage:wireless_grid.not_found=Controller werd niet gevonden. misc.refinedstorage:yes=Ja misc.refinedstorage:no=Nee @@ -93,7 +94,7 @@ item.refinedstorage:storage_disk.1.name=4k Opslagschijf item.refinedstorage:storage_disk.2.name=16k Opslagschijf item.refinedstorage:storage_disk.3.name=64k Opslagschijf item.refinedstorage:storage_disk.4.name=Creative Opslagschijf -item.refinedstorage:wireless_grid.name=Draadloze Rooster +item.refinedstorage:wireless_grid.name=Draadloos Rooster item.refinedstorage:quartz_enriched_iron.name=Quartz Verrijkt Iron item.refinedstorage:core.0.name=Constructie Core item.refinedstorage:core.1.name=Destructie Core