From cef892f19953a86ab5d8e189f1470a9d04ebd36f Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Tue, 11 Dec 2018 22:00:49 +0100 Subject: [PATCH] Rewrite network item system. Added keybindings to open wireless items. The default one set to open a Wireless Grid is CTRL + G. --- CHANGELOG.md | 1 + .../raoulvdberge/refinedstorage/RSGui.java | 49 ++++----- .../refinedstorage/RSKeyBindings.java | 8 ++ .../refinedstorage/api/IRSAPI.java | 19 +--- .../api/network/grid/GridFactoryType.java | 15 +++ .../api/network/grid/IGridFactory.java | 49 +++++++++ .../api/network/grid/IGridManager.java | 58 ++++++++++ .../grid/wireless/IWirelessGridFactory.java | 23 ---- .../grid/wireless/IWirelessGridRegistry.java | 28 ----- .../api/network/item/INetworkItem.java | 15 +-- .../api/network/item/INetworkItemHandler.java | 14 ++- .../api/network/item/NetworkItemAction.java | 36 ------- .../refinedstorage/apiimpl/API.java | 19 +--- .../network/grid/GridFactoryGridBlock.java | 44 ++++++++ .../network/grid/GridFactoryPortableGrid.java | 38 +++++++ .../grid/GridFactoryPortableGridBlock.java | 44 ++++++++ .../grid/GridFactoryWirelessFluidGrid.java | 38 +++++++ .../network/grid/GridFactoryWirelessGrid.java | 38 +++++++ .../apiimpl/network/grid/GridManager.java | 100 ++++++++++++++++++ .../apiimpl/network/grid/GridOpenHandler.java | 42 ++++++++ .../grid/handler/FluidGridHandler.java | 14 +-- .../network/grid/handler/ItemGridHandler.java | 26 +---- .../WirelessGridFactoryPortableGrid.java | 17 --- .../WirelessGridFactoryWirelessFluidGrid.java | 17 --- .../WirelessGridFactoryWirelessGrid.java | 17 --- .../grid/wireless/WirelessGridRegistry.java | 26 ----- .../network/item/NetworkItemHandler.java | 19 +++- .../NetworkItemWirelessCraftingMonitor.java | 25 ++--- .../item/NetworkItemWirelessFluidGrid.java | 22 +--- .../network/item/NetworkItemWirelessGrid.java | 22 +--- .../apiimpl/network/node/NetworkNodeGrid.java | 11 +- .../refinedstorage/block/BlockGrid.java | 6 +- .../refinedstorage/block/BlockNodeProxy.java | 10 +- .../block/BlockPortableGrid.java | 5 +- .../refinedstorage/gui/GuiHandler.java | 54 ++-------- .../refinedstorage/gui/KeyInputListener.java | 43 ++++++++ .../refinedstorage/item/ItemNetworkItem.java | 2 +- .../item/ItemWirelessCraftingMonitor.java | 10 +- .../item/itemblock/ItemBlockPortableGrid.java | 3 +- .../network/MessageGridOpen.java | 93 ++++++++++++++++ .../network/MessageNetworkItemOpen.java | 43 ++++++++ .../refinedstorage/proxy/ProxyClient.java | 2 + .../refinedstorage/proxy/ProxyCommon.java | 18 ++-- .../WirelessCraftingMonitor.java | 6 +- .../tile/grid/WirelessFluidGrid.java | 6 +- .../tile/grid/WirelessGrid.java | 6 +- .../tile/grid/portable/TilePortableGrid.java | 2 + .../assets/refinedstorage/lang/en_us.lang | 4 + 48 files changed, 803 insertions(+), 404 deletions(-) create mode 100644 src/main/java/com/raoulvdberge/refinedstorage/api/network/grid/GridFactoryType.java create mode 100644 src/main/java/com/raoulvdberge/refinedstorage/api/network/grid/IGridFactory.java create mode 100644 src/main/java/com/raoulvdberge/refinedstorage/api/network/grid/IGridManager.java delete mode 100644 src/main/java/com/raoulvdberge/refinedstorage/api/network/grid/wireless/IWirelessGridFactory.java delete mode 100644 src/main/java/com/raoulvdberge/refinedstorage/api/network/grid/wireless/IWirelessGridRegistry.java delete mode 100644 src/main/java/com/raoulvdberge/refinedstorage/api/network/item/NetworkItemAction.java create mode 100644 src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/GridFactoryGridBlock.java create mode 100644 src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/GridFactoryPortableGrid.java create mode 100644 src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/GridFactoryPortableGridBlock.java create mode 100644 src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/GridFactoryWirelessFluidGrid.java create mode 100644 src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/GridFactoryWirelessGrid.java create mode 100644 src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/GridManager.java create mode 100644 src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/GridOpenHandler.java delete mode 100644 src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/wireless/WirelessGridFactoryPortableGrid.java delete mode 100644 src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/wireless/WirelessGridFactoryWirelessFluidGrid.java delete mode 100644 src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/wireless/WirelessGridFactoryWirelessGrid.java delete mode 100644 src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/wireless/WirelessGridRegistry.java create mode 100644 src/main/java/com/raoulvdberge/refinedstorage/gui/KeyInputListener.java create mode 100644 src/main/java/com/raoulvdberge/refinedstorage/network/MessageGridOpen.java create mode 100644 src/main/java/com/raoulvdberge/refinedstorage/network/MessageNetworkItemOpen.java diff --git a/CHANGELOG.md b/CHANGELOG.md index 0dd9f820b..460c98618 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ ### 1.6.13 - Fixed Interface with Crafting Upgrade being stuck if an earlier item configuration has missing items or fluids (raoulvdberge) +- Added keybindings to open wireless items. The default one set to open a Wireless Grid is CTRL + G (raoulvdberge) ### 1.6.12 - Increased the speed of autocrafting (raoulvdberge) diff --git a/src/main/java/com/raoulvdberge/refinedstorage/RSGui.java b/src/main/java/com/raoulvdberge/refinedstorage/RSGui.java index d9ad81f82..76e2a3781 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/RSGui.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/RSGui.java @@ -2,30 +2,27 @@ package com.raoulvdberge.refinedstorage; public final class RSGui { public static final int CONTROLLER = 0; - public static final int GRID = 1; - public static final int DISK_DRIVE = 2; - public static final int IMPORTER = 3; - public static final int EXPORTER = 4; - public static final int DETECTOR = 5; - public static final int DESTRUCTOR = 7; - public static final int CONSTRUCTOR = 8; - public static final int STORAGE = 9; - public static final int RELAY = 10; - public static final int INTERFACE = 11; - public static final int WIRELESS_GRID = 12; - public static final int CRAFTING_MONITOR = 13; - public static final int WIRELESS_TRANSMITTER = 14; - public static final int CRAFTER = 15; - public static final int FILTER = 16; - public static final int NETWORK_TRANSMITTER = 17; - public static final int FLUID_INTERFACE = 18; - public static final int EXTERNAL_STORAGE = 19; - public static final int FLUID_STORAGE = 20; - public static final int DISK_MANIPULATOR = 21; - public static final int WIRELESS_CRAFTING_MONITOR = 22; - public static final int READER_WRITER = 23; - public static final int SECURITY_MANAGER = 24; - public static final int STORAGE_MONITOR = 25; - public static final int PORTABLE_GRID = 26; - public static final int CRAFTER_MANAGER = 27; + public static final int DISK_DRIVE = 1; + public static final int IMPORTER = 2; + public static final int EXPORTER = 3; + public static final int DETECTOR = 4; + public static final int DESTRUCTOR = 5; + public static final int CONSTRUCTOR = 6; + public static final int STORAGE = 7; + public static final int RELAY = 8; + public static final int INTERFACE = 9; + public static final int CRAFTING_MONITOR = 10; + public static final int WIRELESS_TRANSMITTER = 11; + public static final int CRAFTER = 12; + public static final int FILTER = 13; + public static final int NETWORK_TRANSMITTER = 14; + public static final int FLUID_INTERFACE = 15; + public static final int EXTERNAL_STORAGE = 16; + public static final int FLUID_STORAGE = 17; + public static final int DISK_MANIPULATOR = 18; + public static final int WIRELESS_CRAFTING_MONITOR = 19; + public static final int READER_WRITER = 20; + public static final int SECURITY_MANAGER = 21; + public static final int STORAGE_MONITOR = 22; + public static final int CRAFTER_MANAGER = 23; } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/RSKeyBindings.java b/src/main/java/com/raoulvdberge/refinedstorage/RSKeyBindings.java index 15e9fbf49..53012113f 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/RSKeyBindings.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/RSKeyBindings.java @@ -9,9 +9,17 @@ import org.lwjgl.input.Keyboard; public final class RSKeyBindings { public static final KeyBinding FOCUS_SEARCH_BAR = new KeyBinding("key.refinedstorage.focusSearchBar", KeyConflictContext.GUI, Keyboard.KEY_TAB, "Refined Storage"); public static final KeyBinding CLEAR_GRID_CRAFTING_MATRIX = new KeyBinding("key.refinedstorage.clearGridCraftingMatrix", KeyConflictContext.GUI, KeyModifier.CONTROL, Keyboard.KEY_X, "Refined Storage"); + public static final KeyBinding OPEN_WIRELESS_GRID = new KeyBinding("key.refinedstorage.openWirelessGrid", KeyConflictContext.IN_GAME, KeyModifier.CONTROL, Keyboard.KEY_G, "Refined Storage"); + public static final KeyBinding OPEN_WIRELESS_FLUID_GRID = new KeyBinding("key.refinedstorage.openWirelessFluidGrid", KeyConflictContext.IN_GAME, 0, "Refined Storage"); + public static final KeyBinding OPEN_PORTABLE_GRID = new KeyBinding("key.refinedstorage.openPortableGrid", KeyConflictContext.IN_GAME, 0, "Refined Storage"); + public static final KeyBinding OPEN_WIRELESS_CRAFTING_MONITOR = new KeyBinding("key.refinedstorage.openWirelessCraftingMonitor", KeyConflictContext.IN_GAME, 0, "Refined Storage"); public static void init() { ClientRegistry.registerKeyBinding(FOCUS_SEARCH_BAR); ClientRegistry.registerKeyBinding(CLEAR_GRID_CRAFTING_MATRIX); + ClientRegistry.registerKeyBinding(OPEN_WIRELESS_GRID); + ClientRegistry.registerKeyBinding(OPEN_WIRELESS_FLUID_GRID); + ClientRegistry.registerKeyBinding(OPEN_PORTABLE_GRID); + ClientRegistry.registerKeyBinding(OPEN_WIRELESS_CRAFTING_MONITOR); } } \ No newline at end of file diff --git a/src/main/java/com/raoulvdberge/refinedstorage/api/IRSAPI.java b/src/main/java/com/raoulvdberge/refinedstorage/api/IRSAPI.java index 464796d88..405b6843d 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/api/IRSAPI.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/api/IRSAPI.java @@ -8,8 +8,7 @@ import com.raoulvdberge.refinedstorage.api.autocrafting.registry.ICraftingTaskRe import com.raoulvdberge.refinedstorage.api.autocrafting.task.CraftingTaskReadException; import com.raoulvdberge.refinedstorage.api.autocrafting.task.ICraftingRequestInfo; import com.raoulvdberge.refinedstorage.api.network.INetwork; -import com.raoulvdberge.refinedstorage.api.network.grid.wireless.IWirelessGridFactory; -import com.raoulvdberge.refinedstorage.api.network.grid.wireless.IWirelessGridRegistry; +import com.raoulvdberge.refinedstorage.api.network.grid.IGridManager; import com.raoulvdberge.refinedstorage.api.network.node.INetworkNode; import com.raoulvdberge.refinedstorage.api.network.node.INetworkNodeManager; import com.raoulvdberge.refinedstorage.api.network.node.INetworkNodeRegistry; @@ -25,10 +24,8 @@ import com.raoulvdberge.refinedstorage.api.util.IComparer; import com.raoulvdberge.refinedstorage.api.util.IOneSixMigrationHelper; import com.raoulvdberge.refinedstorage.api.util.IQuantityFormatter; import com.raoulvdberge.refinedstorage.api.util.IStackList; -import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumHand; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import net.minecraftforge.fluids.FluidStack; @@ -121,10 +118,10 @@ public interface IRSAPI { ICraftingMonitorElementList createCraftingMonitorElementList(); /** - * @return the wireless grid registry + * @return the grid manager */ @Nonnull - IWirelessGridRegistry getWirelessGridRegistry(); + IGridManager getGridManager(); /** * @return the storage disk registry @@ -218,16 +215,6 @@ public interface IRSAPI { */ List getPatternRenderHandlers(); - /** - * Opens a wireless grid for the given player. - * - * @param player the player - * @param hand the hand where the wireless grid is in - * @param networkDimension the dimension of the bound network - * @param id the id of the wireless grid, as returned in {@link IWirelessGridRegistry#add(IWirelessGridFactory)} - */ - void openWirelessGrid(EntityPlayer player, EnumHand hand, int networkDimension, int id); - /** * Notifies the neighbors of a node that there is a node placed at the given position. * diff --git a/src/main/java/com/raoulvdberge/refinedstorage/api/network/grid/GridFactoryType.java b/src/main/java/com/raoulvdberge/refinedstorage/api/network/grid/GridFactoryType.java new file mode 100644 index 000000000..889f0fff1 --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/api/network/grid/GridFactoryType.java @@ -0,0 +1,15 @@ +package com.raoulvdberge.refinedstorage.api.network.grid; + +/** + * The type of grid factory. + */ +public enum GridFactoryType { + /** + * A grid factory for item stacks. + */ + STACK, + /** + * A grid factory for blocks with a position. + */ + BLOCK +} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/api/network/grid/IGridFactory.java b/src/main/java/com/raoulvdberge/refinedstorage/api/network/grid/IGridFactory.java new file mode 100644 index 000000000..c2849f92d --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/api/network/grid/IGridFactory.java @@ -0,0 +1,49 @@ +package com.raoulvdberge.refinedstorage.api.network.grid; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +import javax.annotation.Nullable; + +/** + * Creates a grid. + */ +public interface IGridFactory { + /** + * Creates a grid from a stack. Used when {@link #getType()} is STACK. + * + * @param player the player + * @param stack the stack + * @return the grid, or null if a problem occurred + */ + @Nullable + IGrid createFromStack(EntityPlayer player, ItemStack stack); + + /** + * Creates a grid from a block. Used when {@link #getType()} is BLOCK. + * + * @param player the player + * @param pos the block position + * @return the grid, or null if a problem occurred + */ + @Nullable + IGrid createFromBlock(EntityPlayer player, BlockPos pos); + + /** + * Returns a possible tile for this grid if {@link #getType()} is BLOCK. + * + * @param world the world + * @param pos the position + * @return the tile, or null if no tile is required + */ + @Nullable + TileEntity getRelevantTile(World world, BlockPos pos); + + /** + * @return the type + */ + GridFactoryType getType(); +} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/api/network/grid/IGridManager.java b/src/main/java/com/raoulvdberge/refinedstorage/api/network/grid/IGridManager.java new file mode 100644 index 000000000..2bb42bb97 --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/api/network/grid/IGridManager.java @@ -0,0 +1,58 @@ +package com.raoulvdberge.refinedstorage.api.network.grid; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; +import org.apache.commons.lang3.tuple.Pair; + +import javax.annotation.Nullable; + +/** + * Manages {@link IGridFactory} instances and has code that opens grids. + */ +public interface IGridManager { + /** + * @param factory the factory + * @return the id of this factory + */ + int add(IGridFactory factory); + + /** + * @param id the id of the factory + * @return the factory, or null if no factory was found + */ + @Nullable + IGridFactory get(int id); + + /** + * Opens a grid. Can only be called on the server. + * + * @param id the grid factory id as returned from {@link #add(IGridFactory)} + * @param player the player + * @param pos the block position + */ + void openGrid(int id, EntityPlayerMP player, BlockPos pos); + + /** + * Opens a grid. Can only be called on the server. + * + * @param id the grid factory id as returned from {@link #add(IGridFactory)} + * @param player the player + * @param stack the stack + */ + void openGrid(int id, EntityPlayerMP player, ItemStack stack); + + /** + * Creates a grid. + * + * @param id the grid factory id as returned from {@link #add(IGridFactory)} + * @param player the player + * @param stack the stack, if there is one + * @param pos the block position, if there is one + * @return a grid, or null if an error has occurred + */ + @Nullable + Pair createGrid(int id, EntityPlayer player, @Nullable ItemStack stack, @Nullable BlockPos pos); +} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/api/network/grid/wireless/IWirelessGridFactory.java b/src/main/java/com/raoulvdberge/refinedstorage/api/network/grid/wireless/IWirelessGridFactory.java deleted file mode 100644 index 90b95c64d..000000000 --- a/src/main/java/com/raoulvdberge/refinedstorage/api/network/grid/wireless/IWirelessGridFactory.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.raoulvdberge.refinedstorage.api.network.grid.wireless; - -import com.raoulvdberge.refinedstorage.api.network.grid.IGrid; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.util.EnumHand; - -import javax.annotation.Nonnull; - -/** - * A factory interface for a wireless grid. - */ -public interface IWirelessGridFactory { - /** - * Creates a new wireless grid. - * - * @param player the player - * @param hand the hand - * @param networkDimension the network dimension of the grid - * @return the grid - */ - @Nonnull - IGrid create(EntityPlayer player, EnumHand hand, int networkDimension); -} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/api/network/grid/wireless/IWirelessGridRegistry.java b/src/main/java/com/raoulvdberge/refinedstorage/api/network/grid/wireless/IWirelessGridRegistry.java deleted file mode 100644 index aa982bbe6..000000000 --- a/src/main/java/com/raoulvdberge/refinedstorage/api/network/grid/wireless/IWirelessGridRegistry.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.raoulvdberge.refinedstorage.api.network.grid.wireless; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.util.EnumHand; - -import javax.annotation.Nullable; - -/** - * A registry for wireless grid factories. - */ -public interface IWirelessGridRegistry { - /** - * Registers a new wireless grid factory. - * - * @param factory the factory - * @return the id of this new wireless grid, use this id in {@link com.raoulvdberge.refinedstorage.api.IRSAPI#openWirelessGrid(EntityPlayer, EnumHand, int, int)}. - */ - int add(IWirelessGridFactory factory); - - /** - * Gets a wireless grid factory by id. - * - * @param id the id, as returned by {@link #add(IWirelessGridFactory)} - * @return the wireless grid factory, or null if none is found - */ - @Nullable - IWirelessGridFactory get(int id); -} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/api/network/item/INetworkItem.java b/src/main/java/com/raoulvdberge/refinedstorage/api/network/item/INetworkItem.java index 6a825bac7..ea81830fa 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/api/network/item/INetworkItem.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/api/network/item/INetworkItem.java @@ -2,7 +2,6 @@ package com.raoulvdberge.refinedstorage.api.network.item; import com.raoulvdberge.refinedstorage.api.network.INetwork; import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.util.EnumHand; /** * Represents a network item (an item that is connected to the network somehow). @@ -16,19 +15,15 @@ public interface INetworkItem { EntityPlayer getPlayer(); /** - * Called when the network item is opened. + * Called when the network item is being opened. * * @param network the network - * @param player the player - * @param hand the hand - * @return true if the network item can be opened, false otherwise + * @return true if the item can be opened, false otherwise */ - boolean onOpen(INetwork network, EntityPlayer player, EnumHand hand); + boolean onOpen(INetwork network); /** - * Called when an action occurs that is defined in {@link NetworkItemAction} and the network item is in use. - * - * @param action the action + * @param energy the energy to extract */ - void onAction(NetworkItemAction action); + void drainEnergy(int energy); } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/api/network/item/INetworkItemHandler.java b/src/main/java/com/raoulvdberge/refinedstorage/api/network/item/INetworkItemHandler.java index 637ceacb6..295dfff16 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/api/network/item/INetworkItemHandler.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/api/network/item/INetworkItemHandler.java @@ -1,7 +1,7 @@ package com.raoulvdberge.refinedstorage.api.network.item; import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.util.EnumHand; +import net.minecraft.item.ItemStack; import javax.annotation.Nullable; @@ -14,16 +14,16 @@ public interface INetworkItemHandler { * Called when a player opens a network item. * * @param player the player that opened the network item - * @param hand the hand the player opened it with + * @param stack the stack that has been opened */ - void onOpen(EntityPlayer player, EnumHand hand); + void open(EntityPlayer player, ItemStack stack); /** * Called when the player closes a network item. * * @param player the player that closed the network item */ - void onClose(EntityPlayer player); + void close(EntityPlayer player); /** * Returns a {@link INetworkItem} for a player. @@ -33,4 +33,10 @@ public interface INetworkItemHandler { */ @Nullable INetworkItem getItem(EntityPlayer player); + + /** + * @param player the player + * @param energy energy to extract + */ + void drainEnergy(EntityPlayer player, int energy); } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/api/network/item/NetworkItemAction.java b/src/main/java/com/raoulvdberge/refinedstorage/api/network/item/NetworkItemAction.java deleted file mode 100644 index ee73b60cb..000000000 --- a/src/main/java/com/raoulvdberge/refinedstorage/api/network/item/NetworkItemAction.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.raoulvdberge.refinedstorage.api.network.item; - -/** - * Represents an network item action. - * Called with {@link INetworkItem#onAction(NetworkItemAction)}. - */ -public enum NetworkItemAction { - /** - * Used when an item is inserted in a grid. - */ - ITEM_INSERTED, - /** - * Used when an item is extracted in a grid. - */ - ITEM_EXTRACTED, - /** - * Used when an item is crafted in a crafting grid (regular crafting, not autocrafting). - */ - ITEM_CRAFTED, - /** - * Used when a fluid is inserted in a grid. - */ - FLUID_INSERTED, - /** - * Used when a fluid is extracted in a grid. - */ - FLUID_EXTRACTED, - /** - * Used when a crafting task is cancelled in a crafting monitor. - */ - CRAFTING_TASK_CANCELLED, - /** - * Used when all crafting tasks are cancelled in a crafting monitor. - */ - CRAFTING_TASK_ALL_CANCELLED -} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/API.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/API.java index 48e4f41e8..fc2f96867 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/API.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/API.java @@ -1,7 +1,5 @@ package com.raoulvdberge.refinedstorage.apiimpl; -import com.raoulvdberge.refinedstorage.RS; -import com.raoulvdberge.refinedstorage.RSGui; import com.raoulvdberge.refinedstorage.api.IRSAPI; import com.raoulvdberge.refinedstorage.api.RSAPIInject; import com.raoulvdberge.refinedstorage.api.autocrafting.ICraftingPatternRenderHandler; @@ -12,7 +10,7 @@ import com.raoulvdberge.refinedstorage.api.autocrafting.registry.ICraftingTaskRe import com.raoulvdberge.refinedstorage.api.autocrafting.task.CraftingTaskReadException; import com.raoulvdberge.refinedstorage.api.autocrafting.task.ICraftingRequestInfo; import com.raoulvdberge.refinedstorage.api.network.INetwork; -import com.raoulvdberge.refinedstorage.api.network.grid.wireless.IWirelessGridRegistry; +import com.raoulvdberge.refinedstorage.api.network.grid.IGridManager; import com.raoulvdberge.refinedstorage.api.network.node.INetworkNode; import com.raoulvdberge.refinedstorage.api.network.node.INetworkNodeManager; import com.raoulvdberge.refinedstorage.api.network.node.INetworkNodeProxy; @@ -33,20 +31,18 @@ import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.preview.CraftingPrev import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.registry.CraftingTaskRegistry; import com.raoulvdberge.refinedstorage.apiimpl.network.NetworkNodeManager; import com.raoulvdberge.refinedstorage.apiimpl.network.NetworkNodeRegistry; -import com.raoulvdberge.refinedstorage.apiimpl.network.grid.wireless.WirelessGridRegistry; +import com.raoulvdberge.refinedstorage.apiimpl.network.grid.GridManager; import com.raoulvdberge.refinedstorage.apiimpl.network.readerwriter.ReaderWriterChannel; import com.raoulvdberge.refinedstorage.apiimpl.network.readerwriter.ReaderWriterHandlerRegistry; import com.raoulvdberge.refinedstorage.apiimpl.storage.disk.*; import com.raoulvdberge.refinedstorage.apiimpl.util.*; import com.raoulvdberge.refinedstorage.capability.CapabilityNetworkNodeProxy; -import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTBase; import net.minecraft.nbt.NBTTagCompound; 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.minecraft.world.storage.MapStorage; @@ -67,7 +63,7 @@ public class API implements IRSAPI { private ICraftingMonitorElementRegistry craftingMonitorElementRegistry = new CraftingMonitorElementRegistry(); private ICraftingPreviewElementRegistry craftingPreviewElementRegistry = new CraftingPreviewElementRegistry(); private IReaderWriterHandlerRegistry readerWriterHandlerRegistry = new ReaderWriterHandlerRegistry(); - private IWirelessGridRegistry gridRegistry = new WirelessGridRegistry(); + private IGridManager gridManager = new GridManager(); private IStorageDiskRegistry storageDiskRegistry = new StorageDiskRegistry(); private IStorageDiskSync storageDiskSync = new StorageDiskSync(); private IOneSixMigrationHelper oneSixMigrationHelper = new OneSixMigrationHelper(); @@ -185,8 +181,8 @@ public class API implements IRSAPI { @Nonnull @Override - public IWirelessGridRegistry getWirelessGridRegistry() { - return gridRegistry; + public IGridManager getGridManager() { + return gridManager; } @Nonnull @@ -277,11 +273,6 @@ public class API implements IRSAPI { return patternRenderHandlers; } - @Override - public void openWirelessGrid(EntityPlayer player, EnumHand hand, int networkDimension, int id) { - player.openGui(RS.INSTANCE, RSGui.WIRELESS_GRID, player.getEntityWorld(), hand.ordinal(), networkDimension, id); - } - @Override public void discoverNode(World world, BlockPos pos) { for (EnumFacing facing : EnumFacing.VALUES) { diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/GridFactoryGridBlock.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/GridFactoryGridBlock.java new file mode 100644 index 000000000..3bf330ee8 --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/GridFactoryGridBlock.java @@ -0,0 +1,44 @@ +package com.raoulvdberge.refinedstorage.apiimpl.network.grid; + +import com.raoulvdberge.refinedstorage.api.network.grid.GridFactoryType; +import com.raoulvdberge.refinedstorage.api.network.grid.IGrid; +import com.raoulvdberge.refinedstorage.api.network.grid.IGridFactory; +import com.raoulvdberge.refinedstorage.tile.grid.TileGrid; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +import javax.annotation.Nullable; + +public class GridFactoryGridBlock implements IGridFactory { + @Override + @Nullable + public IGrid createFromStack(EntityPlayer player, ItemStack stack) { + return null; + } + + @Override + @Nullable + public IGrid createFromBlock(EntityPlayer player, BlockPos pos) { + TileEntity tile = getRelevantTile(player.world, pos); + + if (tile instanceof TileGrid) { + return ((TileGrid) tile).getNode(); + } + + return null; + } + + @Nullable + @Override + public TileEntity getRelevantTile(World world, BlockPos pos) { + return world.getTileEntity(pos); + } + + @Override + public GridFactoryType getType() { + return GridFactoryType.BLOCK; + } +} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/GridFactoryPortableGrid.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/GridFactoryPortableGrid.java new file mode 100644 index 000000000..af0765606 --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/GridFactoryPortableGrid.java @@ -0,0 +1,38 @@ +package com.raoulvdberge.refinedstorage.apiimpl.network.grid; + +import com.raoulvdberge.refinedstorage.api.network.grid.GridFactoryType; +import com.raoulvdberge.refinedstorage.api.network.grid.IGrid; +import com.raoulvdberge.refinedstorage.api.network.grid.IGridFactory; +import com.raoulvdberge.refinedstorage.tile.grid.portable.PortableGrid; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +import javax.annotation.Nullable; + +public class GridFactoryPortableGrid implements IGridFactory { + @Nullable + @Override + public IGrid createFromStack(EntityPlayer player, ItemStack stack) { + return new PortableGrid(player, stack); + } + + @Nullable + @Override + public IGrid createFromBlock(EntityPlayer player, BlockPos pos) { + return null; + } + + @Nullable + @Override + public TileEntity getRelevantTile(World world, BlockPos pos) { + return null; + } + + @Override + public GridFactoryType getType() { + return GridFactoryType.STACK; + } +} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/GridFactoryPortableGridBlock.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/GridFactoryPortableGridBlock.java new file mode 100644 index 000000000..74093edb5 --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/GridFactoryPortableGridBlock.java @@ -0,0 +1,44 @@ +package com.raoulvdberge.refinedstorage.apiimpl.network.grid; + +import com.raoulvdberge.refinedstorage.api.network.grid.GridFactoryType; +import com.raoulvdberge.refinedstorage.api.network.grid.IGrid; +import com.raoulvdberge.refinedstorage.api.network.grid.IGridFactory; +import com.raoulvdberge.refinedstorage.tile.grid.portable.TilePortableGrid; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +import javax.annotation.Nullable; + +public class GridFactoryPortableGridBlock implements IGridFactory { + @Override + @Nullable + public IGrid createFromStack(EntityPlayer player, ItemStack stack) { + return null; + } + + @Override + @Nullable + public IGrid createFromBlock(EntityPlayer player, BlockPos pos) { + TileEntity tile = getRelevantTile(player.world, pos); + + if (tile instanceof TilePortableGrid) { + return (TilePortableGrid) tile; + } + + return null; + } + + @Nullable + @Override + public TileEntity getRelevantTile(World world, BlockPos pos) { + return world.getTileEntity(pos); + } + + @Override + public GridFactoryType getType() { + return GridFactoryType.BLOCK; + } +} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/GridFactoryWirelessFluidGrid.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/GridFactoryWirelessFluidGrid.java new file mode 100644 index 000000000..b36d4cda6 --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/GridFactoryWirelessFluidGrid.java @@ -0,0 +1,38 @@ +package com.raoulvdberge.refinedstorage.apiimpl.network.grid; + +import com.raoulvdberge.refinedstorage.api.network.grid.GridFactoryType; +import com.raoulvdberge.refinedstorage.api.network.grid.IGrid; +import com.raoulvdberge.refinedstorage.api.network.grid.IGridFactory; +import com.raoulvdberge.refinedstorage.tile.grid.WirelessFluidGrid; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +import javax.annotation.Nullable; + +public class GridFactoryWirelessFluidGrid implements IGridFactory { + @Nullable + @Override + public IGrid createFromStack(EntityPlayer player, ItemStack stack) { + return new WirelessFluidGrid(stack); + } + + @Nullable + @Override + public IGrid createFromBlock(EntityPlayer player, BlockPos pos) { + return null; + } + + @Nullable + @Override + public TileEntity getRelevantTile(World world, BlockPos pos) { + return null; + } + + @Override + public GridFactoryType getType() { + return GridFactoryType.STACK; + } +} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/GridFactoryWirelessGrid.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/GridFactoryWirelessGrid.java new file mode 100644 index 000000000..2de94328e --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/GridFactoryWirelessGrid.java @@ -0,0 +1,38 @@ +package com.raoulvdberge.refinedstorage.apiimpl.network.grid; + +import com.raoulvdberge.refinedstorage.api.network.grid.GridFactoryType; +import com.raoulvdberge.refinedstorage.api.network.grid.IGrid; +import com.raoulvdberge.refinedstorage.api.network.grid.IGridFactory; +import com.raoulvdberge.refinedstorage.tile.grid.WirelessGrid; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; + +import javax.annotation.Nullable; + +public class GridFactoryWirelessGrid implements IGridFactory { + @Nullable + @Override + public IGrid createFromStack(EntityPlayer player, ItemStack stack) { + return new WirelessGrid(stack); + } + + @Nullable + @Override + public IGrid createFromBlock(EntityPlayer player, BlockPos pos) { + return null; + } + + @Nullable + @Override + public TileEntity getRelevantTile(World world, BlockPos pos) { + return null; + } + + @Override + public GridFactoryType getType() { + return GridFactoryType.STACK; + } +} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/GridManager.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/GridManager.java new file mode 100644 index 000000000..d57bcfd4c --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/GridManager.java @@ -0,0 +1,100 @@ +package com.raoulvdberge.refinedstorage.apiimpl.network.grid; + +import com.raoulvdberge.refinedstorage.RS; +import com.raoulvdberge.refinedstorage.api.network.grid.IGrid; +import com.raoulvdberge.refinedstorage.api.network.grid.IGridFactory; +import com.raoulvdberge.refinedstorage.api.network.grid.IGridManager; +import com.raoulvdberge.refinedstorage.container.ContainerGrid; +import com.raoulvdberge.refinedstorage.gui.ResizableDisplayDummy; +import com.raoulvdberge.refinedstorage.network.MessageGridOpen; +import com.raoulvdberge.refinedstorage.tile.TileBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.event.entity.player.PlayerContainerEvent; +import org.apache.commons.lang3.tuple.Pair; + +import javax.annotation.Nullable; +import java.util.ArrayList; +import java.util.List; + +public class GridManager implements IGridManager { + private List factories = new ArrayList<>(); + + @Override + public int add(IGridFactory factory) { + factories.add(factory); + + return factories.size() - 1; + } + + @Override + @Nullable + public IGridFactory get(int id) { + if (id < 0 || id >= factories.size()) { + return null; + } + + return factories.get(id); + } + + @Override + public void openGrid(int id, EntityPlayerMP player, BlockPos pos) { + openGrid(id, player, null, pos); + } + + @Override + public void openGrid(int id, EntityPlayerMP player, ItemStack stack) { + openGrid(id, player, stack, null); + } + + private void openGrid(int id, EntityPlayerMP player, @Nullable ItemStack stack, @Nullable BlockPos pos) { + Pair grid = createGrid(id, player, stack, pos); + if (grid == null) { + return; + } + + // @Volatile: FMLNetworkHandler#openGui + player.getNextWindowId(); + player.closeContainer(); + + player.openContainer = new ContainerGrid(grid.getLeft(), new ResizableDisplayDummy(), grid.getRight() instanceof TileBase ? (TileBase) grid.getRight() : null, player); + player.openContainer.windowId = player.currentWindowId; + player.openContainer.addListener(player); + + MinecraftForge.EVENT_BUS.post(new PlayerContainerEvent.Open(player, player.openContainer)); + + RS.INSTANCE.network.sendTo(new MessageGridOpen(player.currentWindowId, pos, id, stack), player); + } + + @Override + @Nullable + public Pair createGrid(int id, EntityPlayer player, @Nullable ItemStack stack, @Nullable BlockPos pos) { + IGridFactory factory = get(id); + + if (factory == null) { + return null; + } + + IGrid grid = null; + TileEntity tile = factory.getRelevantTile(player.world, pos); + + switch (factory.getType()) { + case STACK: + grid = factory.createFromStack(player, stack); + break; + case BLOCK: + grid = factory.createFromBlock(player, pos); + break; + } + + if (grid == null) { + return null; + } + + return Pair.of(grid, tile); + } +} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/GridOpenHandler.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/GridOpenHandler.java new file mode 100644 index 000000000..5d2caf245 --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/GridOpenHandler.java @@ -0,0 +1,42 @@ +package com.raoulvdberge.refinedstorage.apiimpl.network.grid; + +import com.raoulvdberge.refinedstorage.api.network.grid.IGrid; +import com.raoulvdberge.refinedstorage.apiimpl.API; +import com.raoulvdberge.refinedstorage.container.ContainerGrid; +import com.raoulvdberge.refinedstorage.gui.grid.GuiGrid; +import com.raoulvdberge.refinedstorage.network.MessageGridOpen; +import com.raoulvdberge.refinedstorage.tile.TileBase; +import net.minecraft.client.Minecraft; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.fml.client.FMLClientHandler; +import org.apache.commons.lang3.tuple.Pair; + +public class GridOpenHandler implements Runnable { + private MessageGridOpen message; + + public GridOpenHandler(MessageGridOpen message) { + this.message = message; + } + + @Override + public void run() { + EntityPlayer player = Minecraft.getMinecraft().player; + + Pair grid = API.instance().getGridManager().createGrid(message.getGridId(), player, message.getStack(), message.getPos()); + + if (grid == null) { + return; + } + + GuiGrid gui = new GuiGrid(null, grid.getLeft()); + + // @Volatile: Just set the windowId: from OpenGuiHandler#process + player.openContainer = new ContainerGrid(grid.getLeft(), gui, grid.getRight() instanceof TileBase ? (TileBase) grid.getRight() : null, player); + player.openContainer.windowId = message.getWindowId(); + + gui.inventorySlots = player.openContainer; + + FMLClientHandler.instance().showGuiScreen(gui); + } +} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/handler/FluidGridHandler.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/handler/FluidGridHandler.java index 507f5024e..9c5fb7765 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/handler/FluidGridHandler.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/handler/FluidGridHandler.java @@ -6,8 +6,6 @@ import com.raoulvdberge.refinedstorage.api.autocrafting.task.ICraftingTask; import com.raoulvdberge.refinedstorage.api.autocrafting.task.ICraftingTaskError; import com.raoulvdberge.refinedstorage.api.network.INetwork; import com.raoulvdberge.refinedstorage.api.network.grid.handler.IFluidGridHandler; -import com.raoulvdberge.refinedstorage.api.network.item.INetworkItem; -import com.raoulvdberge.refinedstorage.api.network.item.NetworkItemAction; import com.raoulvdberge.refinedstorage.api.network.security.Permission; import com.raoulvdberge.refinedstorage.api.util.Action; import com.raoulvdberge.refinedstorage.api.util.IStackList; @@ -78,11 +76,7 @@ public class FluidGridHandler implements IFluidGridHandler { player.updateHeldItem(); } - INetworkItem networkItem = network.getNetworkItemHandler().getItem(player); - - if (networkItem != null) { - networkItem.onAction(NetworkItemAction.FLUID_EXTRACTED); - } + network.getNetworkItemHandler().drainEnergy(player, RS.INSTANCE.config.wirelessFluidGridExtractUsage); } } } @@ -103,11 +97,7 @@ public class FluidGridHandler implements IFluidGridHandler { network.insertFluid(result.getValue(), result.getValue().amount, Action.PERFORM); - INetworkItem networkItem = network.getNetworkItemHandler().getItem(player); - - if (networkItem != null) { - networkItem.onAction(NetworkItemAction.FLUID_INSERTED); - } + network.getNetworkItemHandler().drainEnergy(player, RS.INSTANCE.config.wirelessFluidGridInsertUsage); return result.getLeft(); } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/handler/ItemGridHandler.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/handler/ItemGridHandler.java index 94bd6b50d..e160768d4 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/handler/ItemGridHandler.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/handler/ItemGridHandler.java @@ -6,8 +6,6 @@ import com.raoulvdberge.refinedstorage.api.autocrafting.task.ICraftingTask; import com.raoulvdberge.refinedstorage.api.autocrafting.task.ICraftingTaskError; import com.raoulvdberge.refinedstorage.api.network.INetwork; import com.raoulvdberge.refinedstorage.api.network.grid.handler.IItemGridHandler; -import com.raoulvdberge.refinedstorage.api.network.item.INetworkItem; -import com.raoulvdberge.refinedstorage.api.network.item.NetworkItemAction; import com.raoulvdberge.refinedstorage.api.network.security.Permission; import com.raoulvdberge.refinedstorage.api.util.Action; import com.raoulvdberge.refinedstorage.api.util.IStackList; @@ -108,11 +106,7 @@ public class ItemGridHandler implements IItemGridHandler { } } - INetworkItem networkItem = network.getNetworkItemHandler().getItem(player); - - if (networkItem != null) { - networkItem.onAction(NetworkItemAction.ITEM_EXTRACTED); - } + network.getNetworkItemHandler().drainEnergy(player, RS.INSTANCE.config.wirelessGridExtractUsage); } } @@ -126,11 +120,7 @@ public class ItemGridHandler implements IItemGridHandler { ItemStack remainder = network.insertItem(stack, stack.getCount(), Action.PERFORM); - INetworkItem networkItem = network.getNetworkItemHandler().getItem(player); - - if (networkItem != null) { - networkItem.onAction(NetworkItemAction.ITEM_INSERTED); - } + network.getNetworkItemHandler().drainEnergy(player, RS.INSTANCE.config.wirelessGridInsertUsage); return remainder; } @@ -162,11 +152,7 @@ public class ItemGridHandler implements IItemGridHandler { player.updateHeldItem(); - INetworkItem networkItem = network.getNetworkItemHandler().getItem(player); - - if (networkItem != null) { - networkItem.onAction(NetworkItemAction.ITEM_INSERTED); - } + network.getNetworkItemHandler().drainEnergy(player, RS.INSTANCE.config.wirelessGridInsertUsage); } @Override @@ -257,10 +243,6 @@ public class ItemGridHandler implements IItemGridHandler { network.getCraftingManager().cancel(id); - INetworkItem networkItem = network.getNetworkItemHandler().getItem(player); - - if (networkItem != null) { - networkItem.onAction(id == null ? NetworkItemAction.CRAFTING_TASK_ALL_CANCELLED : NetworkItemAction.CRAFTING_TASK_CANCELLED); - } + network.getNetworkItemHandler().drainEnergy(player, id == null ? RS.INSTANCE.config.wirelessCraftingMonitorCancelAllUsage : RS.INSTANCE.config.wirelessCraftingMonitorCancelUsage); } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/wireless/WirelessGridFactoryPortableGrid.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/wireless/WirelessGridFactoryPortableGrid.java deleted file mode 100644 index 9c66ffca3..000000000 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/wireless/WirelessGridFactoryPortableGrid.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.raoulvdberge.refinedstorage.apiimpl.network.grid.wireless; - -import com.raoulvdberge.refinedstorage.api.network.grid.IGrid; -import com.raoulvdberge.refinedstorage.api.network.grid.wireless.IWirelessGridFactory; -import com.raoulvdberge.refinedstorage.tile.grid.portable.PortableGrid; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.util.EnumHand; - -import javax.annotation.Nonnull; - -public class WirelessGridFactoryPortableGrid implements IWirelessGridFactory { - @Nonnull - @Override - public IGrid create(EntityPlayer player, EnumHand hand, int networkDimension) { - return new PortableGrid(player, player.getHeldItem(hand)); - } -} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/wireless/WirelessGridFactoryWirelessFluidGrid.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/wireless/WirelessGridFactoryWirelessFluidGrid.java deleted file mode 100644 index 50b6b9b5f..000000000 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/wireless/WirelessGridFactoryWirelessFluidGrid.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.raoulvdberge.refinedstorage.apiimpl.network.grid.wireless; - -import com.raoulvdberge.refinedstorage.api.network.grid.IGrid; -import com.raoulvdberge.refinedstorage.api.network.grid.wireless.IWirelessGridFactory; -import com.raoulvdberge.refinedstorage.tile.grid.WirelessFluidGrid; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.util.EnumHand; - -import javax.annotation.Nonnull; - -public class WirelessGridFactoryWirelessFluidGrid implements IWirelessGridFactory { - @Nonnull - @Override - public IGrid create(EntityPlayer player, EnumHand hand, int networkDimension) { - return new WirelessFluidGrid(networkDimension, player.getHeldItem(hand)); - } -} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/wireless/WirelessGridFactoryWirelessGrid.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/wireless/WirelessGridFactoryWirelessGrid.java deleted file mode 100644 index e67a4d8df..000000000 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/wireless/WirelessGridFactoryWirelessGrid.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.raoulvdberge.refinedstorage.apiimpl.network.grid.wireless; - -import com.raoulvdberge.refinedstorage.api.network.grid.IGrid; -import com.raoulvdberge.refinedstorage.api.network.grid.wireless.IWirelessGridFactory; -import com.raoulvdberge.refinedstorage.tile.grid.WirelessGrid; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.util.EnumHand; - -import javax.annotation.Nonnull; - -public class WirelessGridFactoryWirelessGrid implements IWirelessGridFactory { - @Nonnull - @Override - public IGrid create(EntityPlayer player, EnumHand hand, int networkDimension) { - return new WirelessGrid(networkDimension, player.getHeldItem(hand)); - } -} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/wireless/WirelessGridRegistry.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/wireless/WirelessGridRegistry.java deleted file mode 100644 index c7c242990..000000000 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/wireless/WirelessGridRegistry.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.raoulvdberge.refinedstorage.apiimpl.network.grid.wireless; - -import com.raoulvdberge.refinedstorage.api.network.grid.wireless.IWirelessGridFactory; -import com.raoulvdberge.refinedstorage.api.network.grid.wireless.IWirelessGridRegistry; - -import javax.annotation.Nullable; -import java.util.HashMap; -import java.util.Map; - -public class WirelessGridRegistry implements IWirelessGridRegistry { - private int lastId = 0; - private Map factories = new HashMap<>(); - - @Override - public int add(IWirelessGridFactory factory) { - factories.put(lastId, factory); - - return lastId++; - } - - @Nullable - @Override - public IWirelessGridFactory get(int id) { - return factories.get(id); - } -} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/item/NetworkItemHandler.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/item/NetworkItemHandler.java index 320599f71..b09276e5b 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/item/NetworkItemHandler.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/item/NetworkItemHandler.java @@ -7,7 +7,7 @@ import com.raoulvdberge.refinedstorage.api.network.item.INetworkItemHandler; import com.raoulvdberge.refinedstorage.api.network.item.INetworkItemProvider; import com.raoulvdberge.refinedstorage.api.network.node.INetworkNode; import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.util.EnumHand; +import net.minecraft.item.ItemStack; import net.minecraft.util.text.TextComponentTranslation; import java.util.Map; @@ -23,7 +23,7 @@ public class NetworkItemHandler implements INetworkItemHandler { } @Override - public void onOpen(EntityPlayer player, EnumHand hand) { + public void open(EntityPlayer player, ItemStack stack) { boolean inRange = false; for (INetworkNode node : network.getNodeGraph().all()) { @@ -46,15 +46,15 @@ public class NetworkItemHandler implements INetworkItemHandler { return; } - INetworkItem item = ((INetworkItemProvider) player.getHeldItem(hand).getItem()).provide(this, player, player.getHeldItem(hand)); + INetworkItem item = ((INetworkItemProvider) stack.getItem()).provide(this, player, stack); - if (item.onOpen(network, player, hand)) { + if (item.onOpen(network)) { items.put(player, item); } } @Override - public void onClose(EntityPlayer player) { + public void close(EntityPlayer player) { items.remove(player); } @@ -62,4 +62,13 @@ public class NetworkItemHandler implements INetworkItemHandler { public INetworkItem getItem(EntityPlayer player) { return items.get(player); } + + @Override + public void drainEnergy(EntityPlayer player, int energy) { + INetworkItem item = getItem(player); + + if (item != null) { + item.drainEnergy(energy); + } + } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/item/NetworkItemWirelessCraftingMonitor.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/item/NetworkItemWirelessCraftingMonitor.java index 47ccadbfd..dcba8a988 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/item/NetworkItemWirelessCraftingMonitor.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/item/NetworkItemWirelessCraftingMonitor.java @@ -5,13 +5,11 @@ import com.raoulvdberge.refinedstorage.RSGui; import com.raoulvdberge.refinedstorage.api.network.INetwork; import com.raoulvdberge.refinedstorage.api.network.item.INetworkItem; import com.raoulvdberge.refinedstorage.api.network.item.INetworkItemHandler; -import com.raoulvdberge.refinedstorage.api.network.item.NetworkItemAction; import com.raoulvdberge.refinedstorage.api.network.security.Permission; import com.raoulvdberge.refinedstorage.item.ItemWirelessCraftingMonitor; import com.raoulvdberge.refinedstorage.util.WorldUtils; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumHand; import net.minecraftforge.energy.CapabilityEnergy; import net.minecraftforge.energy.IEnergyStorage; @@ -19,11 +17,13 @@ public class NetworkItemWirelessCraftingMonitor implements INetworkItem { private INetworkItemHandler handler; private EntityPlayer player; private ItemStack stack; + private int invIndex; - public NetworkItemWirelessCraftingMonitor(INetworkItemHandler handler, EntityPlayer player, ItemStack stack) { + public NetworkItemWirelessCraftingMonitor(INetworkItemHandler handler, EntityPlayer player, ItemStack stack, int invIndex) { this.handler = handler; this.player = player; this.stack = stack; + this.invIndex = invIndex; } @Override @@ -32,7 +32,7 @@ public class NetworkItemWirelessCraftingMonitor implements INetworkItem { } @Override - public boolean onOpen(INetwork network, EntityPlayer player, EnumHand hand) { + public boolean onOpen(INetwork network) { if (RS.INSTANCE.config.wirelessCraftingMonitorUsesEnergy && stack.getItemDamage() != ItemWirelessCraftingMonitor.TYPE_CREATIVE && stack.getCapability(CapabilityEnergy.ENERGY, null).getEnergyStored() <= RS.INSTANCE.config.wirelessCraftingMonitorOpenUsage) { return false; } @@ -43,7 +43,7 @@ public class NetworkItemWirelessCraftingMonitor implements INetworkItem { return false; } - player.openGui(RS.INSTANCE, RSGui.WIRELESS_CRAFTING_MONITOR, player.getEntityWorld(), hand.ordinal(), network.world().provider.getDimension(), 0); + player.openGui(RS.INSTANCE, RSGui.WIRELESS_CRAFTING_MONITOR, player.getEntityWorld(), invIndex, 0, 0); drainEnergy(RS.INSTANCE.config.wirelessCraftingMonitorOpenUsage); @@ -51,25 +51,14 @@ public class NetworkItemWirelessCraftingMonitor implements INetworkItem { } @Override - public void onAction(NetworkItemAction action) { - switch (action) { - case CRAFTING_TASK_CANCELLED: - drainEnergy(RS.INSTANCE.config.wirelessCraftingMonitorCancelUsage); - break; - case CRAFTING_TASK_ALL_CANCELLED: - drainEnergy(RS.INSTANCE.config.wirelessCraftingMonitorCancelAllUsage); - break; - } - } - - private void drainEnergy(int energy) { + public void drainEnergy(int energy) { if (RS.INSTANCE.config.wirelessCraftingMonitorUsesEnergy && stack.getItemDamage() != ItemWirelessCraftingMonitor.TYPE_CREATIVE) { IEnergyStorage energyStorage = stack.getCapability(CapabilityEnergy.ENERGY, null); energyStorage.extractEnergy(energy, false); if (energyStorage.getEnergyStored() <= 0) { - handler.onClose(player); + handler.close(player); player.closeScreen(); } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/item/NetworkItemWirelessFluidGrid.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/item/NetworkItemWirelessFluidGrid.java index 8a7ec043a..4ad168cec 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/item/NetworkItemWirelessFluidGrid.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/item/NetworkItemWirelessFluidGrid.java @@ -4,15 +4,14 @@ import com.raoulvdberge.refinedstorage.RS; import com.raoulvdberge.refinedstorage.api.network.INetwork; import com.raoulvdberge.refinedstorage.api.network.item.INetworkItem; import com.raoulvdberge.refinedstorage.api.network.item.INetworkItemHandler; -import com.raoulvdberge.refinedstorage.api.network.item.NetworkItemAction; import com.raoulvdberge.refinedstorage.api.network.security.Permission; import com.raoulvdberge.refinedstorage.apiimpl.API; import com.raoulvdberge.refinedstorage.item.ItemWirelessFluidGrid; import com.raoulvdberge.refinedstorage.tile.grid.WirelessFluidGrid; import com.raoulvdberge.refinedstorage.util.WorldUtils; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumHand; import net.minecraftforge.energy.CapabilityEnergy; import net.minecraftforge.energy.IEnergyStorage; @@ -33,7 +32,7 @@ public class NetworkItemWirelessFluidGrid implements INetworkItem { } @Override - public boolean onOpen(INetwork network, EntityPlayer player, EnumHand hand) { + public boolean onOpen(INetwork network) { if (RS.INSTANCE.config.wirelessFluidGridUsesEnergy && stack.getItemDamage() != ItemWirelessFluidGrid.TYPE_CREATIVE && stack.getCapability(CapabilityEnergy.ENERGY, null).getEnergyStored() <= RS.INSTANCE.config.wirelessFluidGridOpenUsage) { return false; } @@ -44,7 +43,7 @@ public class NetworkItemWirelessFluidGrid implements INetworkItem { return false; } - API.instance().openWirelessGrid(player, hand, network.world().provider.getDimension(), WirelessFluidGrid.ID); + API.instance().getGridManager().openGrid(WirelessFluidGrid.ID, (EntityPlayerMP) player, stack); drainEnergy(RS.INSTANCE.config.wirelessFluidGridOpenUsage); @@ -52,25 +51,14 @@ public class NetworkItemWirelessFluidGrid implements INetworkItem { } @Override - public void onAction(NetworkItemAction action) { - switch (action) { - case FLUID_INSERTED: - drainEnergy(RS.INSTANCE.config.wirelessFluidGridInsertUsage); - break; - case FLUID_EXTRACTED: - drainEnergy(RS.INSTANCE.config.wirelessFluidGridExtractUsage); - break; - } - } - - private void drainEnergy(int energy) { + public void drainEnergy(int energy) { if (RS.INSTANCE.config.wirelessFluidGridUsesEnergy && stack.getItemDamage() != ItemWirelessFluidGrid.TYPE_CREATIVE) { IEnergyStorage energyStorage = stack.getCapability(CapabilityEnergy.ENERGY, null); energyStorage.extractEnergy(energy, false); if (energyStorage.getEnergyStored() <= 0) { - handler.onClose(player); + handler.close(player); player.closeScreen(); } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/item/NetworkItemWirelessGrid.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/item/NetworkItemWirelessGrid.java index 0a08738a9..acc96798a 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/item/NetworkItemWirelessGrid.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/item/NetworkItemWirelessGrid.java @@ -4,15 +4,14 @@ import com.raoulvdberge.refinedstorage.RS; import com.raoulvdberge.refinedstorage.api.network.INetwork; import com.raoulvdberge.refinedstorage.api.network.item.INetworkItem; import com.raoulvdberge.refinedstorage.api.network.item.INetworkItemHandler; -import com.raoulvdberge.refinedstorage.api.network.item.NetworkItemAction; import com.raoulvdberge.refinedstorage.api.network.security.Permission; import com.raoulvdberge.refinedstorage.apiimpl.API; import com.raoulvdberge.refinedstorage.item.ItemWirelessGrid; import com.raoulvdberge.refinedstorage.tile.grid.WirelessGrid; import com.raoulvdberge.refinedstorage.util.WorldUtils; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumHand; import net.minecraftforge.energy.CapabilityEnergy; import net.minecraftforge.energy.IEnergyStorage; @@ -33,7 +32,7 @@ public class NetworkItemWirelessGrid implements INetworkItem { } @Override - public boolean onOpen(INetwork network, EntityPlayer player, EnumHand hand) { + public boolean onOpen(INetwork network) { if (RS.INSTANCE.config.wirelessGridUsesEnergy && stack.getItemDamage() != ItemWirelessGrid.TYPE_CREATIVE && stack.getCapability(CapabilityEnergy.ENERGY, null).getEnergyStored() <= RS.INSTANCE.config.wirelessGridOpenUsage) { return false; } @@ -44,7 +43,7 @@ public class NetworkItemWirelessGrid implements INetworkItem { return false; } - API.instance().openWirelessGrid(player, hand, network.world().provider.getDimension(), WirelessGrid.ID); + API.instance().getGridManager().openGrid(WirelessGrid.ID, (EntityPlayerMP) player, stack); drainEnergy(RS.INSTANCE.config.wirelessGridOpenUsage); @@ -52,25 +51,14 @@ public class NetworkItemWirelessGrid implements INetworkItem { } @Override - public void onAction(NetworkItemAction action) { - switch (action) { - case ITEM_INSERTED: - drainEnergy(RS.INSTANCE.config.wirelessGridInsertUsage); - break; - case ITEM_EXTRACTED: - drainEnergy(RS.INSTANCE.config.wirelessGridExtractUsage); - break; - } - } - - private void drainEnergy(int energy) { + public void drainEnergy(int energy) { if (RS.INSTANCE.config.wirelessGridUsesEnergy && stack.getItemDamage() != ItemWirelessGrid.TYPE_CREATIVE) { IEnergyStorage energyStorage = stack.getCapability(CapabilityEnergy.ENERGY, null); energyStorage.extractEnergy(energy, false); if (energyStorage.getEnergyStored() <= 0) { - handler.onClose(player); + handler.close(player); player.closeScreen(); } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeGrid.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeGrid.java index 1a06f541b..891306bb9 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeGrid.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeGrid.java @@ -7,8 +7,6 @@ import com.raoulvdberge.refinedstorage.api.network.INetwork; import com.raoulvdberge.refinedstorage.api.network.grid.*; import com.raoulvdberge.refinedstorage.api.network.grid.handler.IFluidGridHandler; import com.raoulvdberge.refinedstorage.api.network.grid.handler.IItemGridHandler; -import com.raoulvdberge.refinedstorage.api.network.item.INetworkItem; -import com.raoulvdberge.refinedstorage.api.network.item.NetworkItemAction; import com.raoulvdberge.refinedstorage.api.network.security.Permission; import com.raoulvdberge.refinedstorage.api.storage.IStorageCache; import com.raoulvdberge.refinedstorage.api.storage.IStorageCacheListener; @@ -58,6 +56,7 @@ import java.util.Set; public class NetworkNodeGrid extends NetworkNode implements IGridNetworkAware, IType { public static final String ID = "grid"; + public static int FACTORY_ID = 0; public static final String NBT_VIEW_TYPE = "ViewType"; public static final String NBT_SORTING_DIRECTION = "SortingDirection"; @@ -496,14 +495,6 @@ public class NetworkNodeGrid extends NetworkNode implements IGridNetworkAware, I } grid.onCraftingMatrixChanged(); - - if (network != null) { - INetworkItem networkItem = network.getNetworkItemHandler().getItem(player); - - if (networkItem != null) { - networkItem.onAction(NetworkItemAction.ITEM_CRAFTED); - } - } } @Override diff --git a/src/main/java/com/raoulvdberge/refinedstorage/block/BlockGrid.java b/src/main/java/com/raoulvdberge/refinedstorage/block/BlockGrid.java index 7f4cef18c..f10f48841 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/block/BlockGrid.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/block/BlockGrid.java @@ -1,8 +1,9 @@ package com.raoulvdberge.refinedstorage.block; import com.raoulvdberge.refinedstorage.RS; -import com.raoulvdberge.refinedstorage.RSGui; import com.raoulvdberge.refinedstorage.api.network.grid.GridType; +import com.raoulvdberge.refinedstorage.apiimpl.API; +import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNodeGrid; import com.raoulvdberge.refinedstorage.block.info.BlockDirection; import com.raoulvdberge.refinedstorage.block.info.BlockInfoBuilder; import com.raoulvdberge.refinedstorage.item.itemblock.ItemBlockBase; @@ -15,6 +16,7 @@ import net.minecraft.block.state.IBlockState; import net.minecraft.client.renderer.block.model.ModelResourceLocation; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.BlockRenderLayer; @@ -89,7 +91,7 @@ public class BlockGrid extends BlockNode { @Override public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ) { - return openNetworkGui(RSGui.GRID, player, world, pos, side); + return openNetworkGui(player, world, pos, side, () -> API.instance().getGridManager().openGrid(NetworkNodeGrid.FACTORY_ID, (EntityPlayerMP) player, pos)); } @Override diff --git a/src/main/java/com/raoulvdberge/refinedstorage/block/BlockNodeProxy.java b/src/main/java/com/raoulvdberge/refinedstorage/block/BlockNodeProxy.java index fbf28bd9b..209a7fb26 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/block/BlockNodeProxy.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/block/BlockNodeProxy.java @@ -58,6 +58,14 @@ public abstract class BlockNodeProxy extends BlockBase { } protected boolean openNetworkGui(int guiId, EntityPlayer player, World world, BlockPos pos, EnumFacing facing, Permission... permissions) { + return openNetworkGui(player, world, pos, facing, () -> player.openGui(info.getModObject(), guiId, world, pos.getX(), pos.getY(), pos.getZ()), permissions); + } + + protected boolean openNetworkGui(EntityPlayer player, World world, BlockPos pos, EnumFacing facing, Runnable action) { + return openNetworkGui(player, world, pos, facing, action, Permission.MODIFY); + } + + protected boolean openNetworkGui(EntityPlayer player, World world, BlockPos pos, EnumFacing facing, Runnable action, Permission... permissions) { if (world.isRemote) { return true; } @@ -79,7 +87,7 @@ public abstract class BlockNodeProxy extends BlockBase { } } - player.openGui(info.getModObject(), guiId, world, pos.getX(), pos.getY(), pos.getZ()); + action.run(); return true; } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/block/BlockPortableGrid.java b/src/main/java/com/raoulvdberge/refinedstorage/block/BlockPortableGrid.java index 6d1963299..220b5eb37 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/block/BlockPortableGrid.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/block/BlockPortableGrid.java @@ -1,7 +1,7 @@ package com.raoulvdberge.refinedstorage.block; import com.raoulvdberge.refinedstorage.RS; -import com.raoulvdberge.refinedstorage.RSGui; +import com.raoulvdberge.refinedstorage.apiimpl.API; import com.raoulvdberge.refinedstorage.block.enums.PortableGridDiskState; import com.raoulvdberge.refinedstorage.block.enums.PortableGridType; import com.raoulvdberge.refinedstorage.block.info.BlockDirection; @@ -21,6 +21,7 @@ import net.minecraft.block.state.IBlockState; import net.minecraft.client.renderer.block.statemap.StateMap; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; @@ -131,7 +132,7 @@ public class BlockPortableGrid extends BlockBase { @Override public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, EnumFacing side, float hitX, float hitY, float hitZ) { if (!world.isRemote) { - player.openGui(RS.INSTANCE, RSGui.PORTABLE_GRID, world, pos.getX(), pos.getY(), pos.getZ()); + API.instance().getGridManager().openGrid(TilePortableGrid.FACTORY_ID, (EntityPlayerMP) player, pos); ((TilePortableGrid) world.getTileEntity(pos)).onOpened(); } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiHandler.java b/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiHandler.java index 2ce172cef..7d18490cc 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiHandler.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiHandler.java @@ -1,17 +1,12 @@ package com.raoulvdberge.refinedstorage.gui; import com.raoulvdberge.refinedstorage.RSGui; -import com.raoulvdberge.refinedstorage.api.network.grid.IGrid; -import com.raoulvdberge.refinedstorage.apiimpl.API; import com.raoulvdberge.refinedstorage.apiimpl.network.node.IGuiReaderWriter; import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNodeCraftingMonitor; import com.raoulvdberge.refinedstorage.container.*; -import com.raoulvdberge.refinedstorage.gui.grid.GuiGrid; import com.raoulvdberge.refinedstorage.tile.*; import com.raoulvdberge.refinedstorage.tile.craftingmonitor.TileCraftingMonitor; import com.raoulvdberge.refinedstorage.tile.craftingmonitor.WirelessCraftingMonitor; -import com.raoulvdberge.refinedstorage.tile.grid.TileGrid; -import com.raoulvdberge.refinedstorage.tile.grid.portable.TilePortableGrid; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.tileentity.TileEntity; @@ -25,10 +20,6 @@ public class GuiHandler implements IGuiHandler { switch (ID) { case RSGui.CONTROLLER: return new ContainerController((TileController) tile, player); - case RSGui.GRID: - return new ContainerGrid(((TileGrid) tile).getNode(), new ResizableDisplayDummy(), (TileGrid) tile, player); - case RSGui.PORTABLE_GRID: - return new ContainerGrid((TilePortableGrid) tile, new ResizableDisplayDummy(), (TilePortableGrid) tile, player); case RSGui.DISK_DRIVE: return new ContainerDiskDrive((TileDiskDrive) tile, player); case RSGui.IMPORTER: @@ -78,12 +69,10 @@ public class GuiHandler implements IGuiHandler { @Override public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { - if (ID == RSGui.WIRELESS_GRID) { - return getGridContainer(player, x, y, z); - } else if (ID == RSGui.FILTER) { + if (ID == RSGui.FILTER) { return getFilterContainer(player, x); } else if (ID == RSGui.WIRELESS_CRAFTING_MONITOR) { - return getCraftingMonitorContainer(player, x, y); + return getCraftingMonitorContainer(player, x); } return getContainer(ID, player, world.getTileEntity(new BlockPos(x, y, z))); @@ -96,15 +85,6 @@ public class GuiHandler implements IGuiHandler { switch (ID) { case RSGui.CONTROLLER: return new GuiController((ContainerController) getContainer(ID, player, tile), (TileController) tile); - case RSGui.GRID: - case RSGui.PORTABLE_GRID: { - IGrid grid = ID == RSGui.GRID ? ((TileGrid) tile).getNode() : (TilePortableGrid) tile; - GuiGrid gui = new GuiGrid(null, grid); - gui.inventorySlots = new ContainerGrid(grid, gui, null, player); - return gui; - } - case RSGui.WIRELESS_GRID: - return getGridGui(player, x, y, z); case RSGui.DISK_DRIVE: return new GuiStorage((ContainerDiskDrive) getContainer(ID, player, tile), ((TileDiskDrive) tile).getNode(), "gui/disk_drive.png"); case RSGui.IMPORTER: @@ -146,7 +126,7 @@ public class GuiHandler implements IGuiHandler { case RSGui.DISK_MANIPULATOR: return new GuiDiskManipulator((ContainerDiskManipulator) getContainer(ID, player, tile)); case RSGui.WIRELESS_CRAFTING_MONITOR: - return getCraftingMonitorGui(player, x, y); + return getWirelessCraftingMonitorGui(player, x); case RSGui.READER_WRITER: return new GuiReaderWriter((ContainerReaderWriter) getContainer(ID, player, tile), (IGuiReaderWriter) ((TileNode) tile).getNode()); case RSGui.SECURITY_MANAGER: @@ -162,36 +142,20 @@ public class GuiHandler implements IGuiHandler { } } - private IGrid getGrid(EntityPlayer player, int hand, int networkDimension, int id) { - return API.instance().getWirelessGridRegistry().get(id).create(player, EnumHand.values()[hand], networkDimension); + private WirelessCraftingMonitor getWirelessCraftingMonitor(EntityPlayer player, int invIndex) { + return new WirelessCraftingMonitor(player.inventory.getStackInSlot(invIndex)); } - private GuiGrid getGridGui(EntityPlayer player, int hand, int networkDimension, int id) { - IGrid grid = getGrid(player, hand, networkDimension, id); - - GuiGrid gui = new GuiGrid(null, grid); - gui.inventorySlots = new ContainerGrid(grid, gui, null, player); - return gui; - } - - private ContainerGrid getGridContainer(EntityPlayer player, int hand, int networkDimension, int id) { - return new ContainerGrid(getGrid(player, hand, networkDimension, id), new ResizableDisplayDummy(), null, player); - } - - private WirelessCraftingMonitor getCraftingMonitor(EntityPlayer player, int hand, int networkDimension) { - return new WirelessCraftingMonitor(networkDimension, player.getHeldItem(EnumHand.values()[hand])); - } - - private GuiCraftingMonitor getCraftingMonitorGui(EntityPlayer player, int hand, int networkDimension) { - WirelessCraftingMonitor craftingMonitor = getCraftingMonitor(player, hand, networkDimension); + private GuiCraftingMonitor getWirelessCraftingMonitorGui(EntityPlayer player, int invIndex) { + WirelessCraftingMonitor craftingMonitor = getWirelessCraftingMonitor(player, invIndex); GuiCraftingMonitor gui = new GuiCraftingMonitor(null, craftingMonitor); gui.inventorySlots = new ContainerCraftingMonitor(craftingMonitor, null, player); return gui; } - private ContainerCraftingMonitor getCraftingMonitorContainer(EntityPlayer player, int hand, int networkDimension) { - return new ContainerCraftingMonitor(getCraftingMonitor(player, hand, networkDimension), null, player); + private ContainerCraftingMonitor getCraftingMonitorContainer(EntityPlayer player, int invIndex) { + return new ContainerCraftingMonitor(getWirelessCraftingMonitor(player, invIndex), null, player); } private ContainerFilter getFilterContainer(EntityPlayer player, int hand) { diff --git a/src/main/java/com/raoulvdberge/refinedstorage/gui/KeyInputListener.java b/src/main/java/com/raoulvdberge/refinedstorage/gui/KeyInputListener.java new file mode 100644 index 000000000..6ab481e2d --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/gui/KeyInputListener.java @@ -0,0 +1,43 @@ +package com.raoulvdberge.refinedstorage.gui; + +import com.raoulvdberge.refinedstorage.RS; +import com.raoulvdberge.refinedstorage.RSBlocks; +import com.raoulvdberge.refinedstorage.RSItems; +import com.raoulvdberge.refinedstorage.RSKeyBindings; +import com.raoulvdberge.refinedstorage.network.MessageNetworkItemOpen; +import net.minecraft.client.Minecraft; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; +import net.minecraftforge.fml.common.gameevent.InputEvent; + +public class KeyInputListener { + @SubscribeEvent + public void onKeyInput(InputEvent.KeyInputEvent e) { + InventoryPlayer inv = Minecraft.getMinecraft().player.inventory; + + if (RSKeyBindings.OPEN_WIRELESS_GRID.isKeyDown()) { + findAndOpen(inv, RSItems.WIRELESS_GRID); + } else if (RSKeyBindings.OPEN_WIRELESS_FLUID_GRID.isKeyDown()) { + findAndOpen(inv, RSItems.WIRELESS_FLUID_GRID); + } else if (RSKeyBindings.OPEN_PORTABLE_GRID.isKeyDown()) { + findAndOpen(inv, Item.getItemFromBlock(RSBlocks.PORTABLE_GRID)); + } else if (RSKeyBindings.OPEN_WIRELESS_CRAFTING_MONITOR.isKeyDown()) { + findAndOpen(inv, RSItems.WIRELESS_CRAFTING_MONITOR); + } + } + + private void findAndOpen(IInventory inv, Item search) { + for (int i = 0; i < inv.getSizeInventory(); ++i) { + ItemStack slot = inv.getStackInSlot(i); + + if (slot.getItem() == search) { + RS.INSTANCE.network.sendToServer(new MessageNetworkItemOpen(i)); + + return; + } + } + } +} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/item/ItemNetworkItem.java b/src/main/java/com/raoulvdberge/refinedstorage/item/ItemNetworkItem.java index dc67599ea..d5a89c061 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/item/ItemNetworkItem.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/item/ItemNetworkItem.java @@ -47,7 +47,7 @@ public abstract class ItemNetworkItem extends ItemEnergyItem implements INetwork ItemStack stack = player.getHeldItem(hand); if (!world.isRemote) { - applyNetwork(stack, n -> n.getNetworkItemHandler().onOpen(player, hand), player::sendMessage); + applyNetwork(stack, n -> n.getNetworkItemHandler().open(player, player.getHeldItem(hand)), player::sendMessage); } return ActionResult.newResult(EnumActionResult.SUCCESS, stack); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/item/ItemWirelessCraftingMonitor.java b/src/main/java/com/raoulvdberge/refinedstorage/item/ItemWirelessCraftingMonitor.java index 76b6e3541..7b18bd590 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/item/ItemWirelessCraftingMonitor.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/item/ItemWirelessCraftingMonitor.java @@ -34,7 +34,15 @@ public class ItemWirelessCraftingMonitor extends ItemNetworkItem { @Override @Nonnull public INetworkItem provide(INetworkItemHandler handler, EntityPlayer player, ItemStack stack) { - return new NetworkItemWirelessCraftingMonitor(handler, player, stack); + int invIndex = 0; + for (int i = 0; i < player.inventory.getSizeInventory(); ++i) { + if (player.inventory.getStackInSlot(i) == stack) { + invIndex = i; + break; + } + } + + return new NetworkItemWirelessCraftingMonitor(handler, player, stack, invIndex); } public static Optional getTabSelected(ItemStack stack) { diff --git a/src/main/java/com/raoulvdberge/refinedstorage/item/itemblock/ItemBlockPortableGrid.java b/src/main/java/com/raoulvdberge/refinedstorage/item/itemblock/ItemBlockPortableGrid.java index 44992cc94..bc5bc9931 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/item/itemblock/ItemBlockPortableGrid.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/item/itemblock/ItemBlockPortableGrid.java @@ -8,6 +8,7 @@ import com.raoulvdberge.refinedstorage.tile.grid.portable.PortableGrid; import net.minecraft.client.resources.I18n; import net.minecraft.client.util.ITooltipFlag; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.ItemStack; import net.minecraft.util.ActionResult; import net.minecraft.util.EnumActionResult; @@ -29,7 +30,7 @@ public class ItemBlockPortableGrid extends ItemBlockEnergyItem { ItemStack stack = player.getHeldItem(hand); if (!world.isRemote) { - API.instance().openWirelessGrid(player, hand, world.provider.getDimension(), PortableGrid.ID); + API.instance().getGridManager().openGrid(PortableGrid.ID, (EntityPlayerMP) player, stack); } return ActionResult.newResult(EnumActionResult.SUCCESS, stack); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/network/MessageGridOpen.java b/src/main/java/com/raoulvdberge/refinedstorage/network/MessageGridOpen.java new file mode 100644 index 000000000..0d1bc3a20 --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/network/MessageGridOpen.java @@ -0,0 +1,93 @@ +package com.raoulvdberge.refinedstorage.network; + +import com.raoulvdberge.refinedstorage.apiimpl.network.grid.GridOpenHandler; +import io.netty.buffer.ByteBuf; +import net.minecraft.client.Minecraft; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.BlockPos; +import net.minecraftforge.fml.common.network.ByteBufUtils; +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 javax.annotation.Nullable; + +public class MessageGridOpen implements IMessage, IMessageHandler { + private int windowId; + @Nullable + private BlockPos pos; + @Nullable + private ItemStack stack; + private int gridId; + + public MessageGridOpen() { + } + + public MessageGridOpen(int windowId, @Nullable BlockPos pos, int gridId, @Nullable ItemStack stack) { + if (pos == null && stack == null) { + throw new IllegalArgumentException("Can't be both null"); + } + + this.windowId = windowId; + this.pos = pos; + this.stack = stack; + this.gridId = gridId; + } + + @Override + public void fromBytes(ByteBuf buf) { + windowId = buf.readInt(); + gridId = buf.readInt(); + + if (buf.readBoolean()) { + pos = new BlockPos(buf.readInt(), buf.readInt(), buf.readInt()); + } + + if (buf.readBoolean()) { + stack = ByteBufUtils.readItemStack(buf); + } + } + + @Override + public void toBytes(ByteBuf buf) { + buf.writeInt(windowId); + buf.writeInt(gridId); + + buf.writeBoolean(pos != null); + if (pos != null) { + buf.writeInt(pos.getX()); + buf.writeInt(pos.getY()); + buf.writeInt(pos.getZ()); + } + + buf.writeBoolean(stack != null); + if (stack != null) { + ByteBufUtils.writeItemStack(buf, stack); + } + } + + public int getWindowId() { + return windowId; + } + + @Nullable + public BlockPos getPos() { + return pos; + } + + @Nullable + public ItemStack getStack() { + return stack; + } + + public int getGridId() { + return gridId; + } + + @Override + public IMessage onMessage(MessageGridOpen message, MessageContext ctx) { + Minecraft.getMinecraft().addScheduledTask(new GridOpenHandler(message)); + + return null; + } +} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/network/MessageNetworkItemOpen.java b/src/main/java/com/raoulvdberge/refinedstorage/network/MessageNetworkItemOpen.java new file mode 100644 index 000000000..0faaa97e7 --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/network/MessageNetworkItemOpen.java @@ -0,0 +1,43 @@ +package com.raoulvdberge.refinedstorage.network; + +import com.raoulvdberge.refinedstorage.RSBlocks; +import com.raoulvdberge.refinedstorage.apiimpl.API; +import com.raoulvdberge.refinedstorage.item.ItemNetworkItem; +import com.raoulvdberge.refinedstorage.tile.grid.portable.PortableGrid; +import io.netty.buffer.ByteBuf; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraftforge.fml.common.network.simpleimpl.IMessage; + +public class MessageNetworkItemOpen extends MessageHandlerPlayerToServer implements IMessage { + private int slotId; + + public MessageNetworkItemOpen() { + } + + public MessageNetworkItemOpen(int slotId) { + this.slotId = slotId; + } + + @Override + protected void handle(MessageNetworkItemOpen message, EntityPlayerMP player) { + ItemStack stack = player.inventory.getStackInSlot(message.slotId); + + if (stack.getItem() instanceof ItemNetworkItem) { + ((ItemNetworkItem) stack.getItem()).applyNetwork(stack, n -> n.getNetworkItemHandler().open(player, player.inventory.getStackInSlot(message.slotId)), player::sendMessage); + } else if (stack.getItem() == Item.getItemFromBlock(RSBlocks.PORTABLE_GRID)) { // @Hack + API.instance().getGridManager().openGrid(PortableGrid.ID, player, stack); + } + } + + @Override + public void fromBytes(ByteBuf buf) { + slotId = buf.readInt(); + } + + @Override + public void toBytes(ByteBuf buf) { + buf.writeInt(slotId); + } +} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyClient.java b/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyClient.java index 29a6f414f..561ab3cd1 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyClient.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyClient.java @@ -2,6 +2,7 @@ package com.raoulvdberge.refinedstorage.proxy; import com.raoulvdberge.refinedstorage.RSKeyBindings; import com.raoulvdberge.refinedstorage.block.BlockBase; +import com.raoulvdberge.refinedstorage.gui.KeyInputListener; import com.raoulvdberge.refinedstorage.item.ItemBase; import com.raoulvdberge.refinedstorage.render.IModelRegistration; import com.raoulvdberge.refinedstorage.render.collision.BlockHighlightListener; @@ -45,6 +46,7 @@ public class ProxyClient extends ProxyCommon implements IModelRegistration { super.preInit(e); MinecraftForge.EVENT_BUS.register(new BlockHighlightListener()); + MinecraftForge.EVENT_BUS.register(new KeyInputListener()); } @Override diff --git a/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyCommon.java b/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyCommon.java index e0d45199f..dd4048b51 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyCommon.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyCommon.java @@ -13,10 +13,9 @@ import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.preview.CraftingPrev import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.preview.CraftingPreviewElementItemStack; import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.registry.CraftingTaskFactory; import com.raoulvdberge.refinedstorage.apiimpl.network.NetworkNodeListener; -import com.raoulvdberge.refinedstorage.apiimpl.network.grid.wireless.WirelessGridFactoryPortableGrid; -import com.raoulvdberge.refinedstorage.apiimpl.network.grid.wireless.WirelessGridFactoryWirelessFluidGrid; -import com.raoulvdberge.refinedstorage.apiimpl.network.grid.wireless.WirelessGridFactoryWirelessGrid; +import com.raoulvdberge.refinedstorage.apiimpl.network.grid.*; import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNode; +import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNodeGrid; import com.raoulvdberge.refinedstorage.apiimpl.network.readerwriter.ReaderWriterHandlerFluids; import com.raoulvdberge.refinedstorage.apiimpl.network.readerwriter.ReaderWriterHandlerItems; import com.raoulvdberge.refinedstorage.apiimpl.network.readerwriter.ReaderWriterHandlerRedstone; @@ -52,6 +51,7 @@ import com.raoulvdberge.refinedstorage.tile.data.TileDataManager; import com.raoulvdberge.refinedstorage.tile.grid.WirelessFluidGrid; import com.raoulvdberge.refinedstorage.tile.grid.WirelessGrid; import com.raoulvdberge.refinedstorage.tile.grid.portable.PortableGrid; +import com.raoulvdberge.refinedstorage.tile.grid.portable.TilePortableGrid; import com.raoulvdberge.refinedstorage.util.StackUtils; import net.minecraft.block.Block; import net.minecraft.client.Minecraft; @@ -91,6 +91,12 @@ public class ProxyCommon { API.deliver(e.getAsmData()); + NetworkNodeGrid.FACTORY_ID = API.instance().getGridManager().add(new GridFactoryGridBlock()); + WirelessGrid.ID = API.instance().getGridManager().add(new GridFactoryWirelessGrid()); + WirelessFluidGrid.ID = API.instance().getGridManager().add(new GridFactoryWirelessFluidGrid()); + TilePortableGrid.FACTORY_ID = API.instance().getGridManager().add(new GridFactoryPortableGridBlock()); + PortableGrid.ID = API.instance().getGridManager().add(new GridFactoryPortableGrid()); + API.instance().getCraftingTaskRegistry().add(CraftingTaskFactory.ID, new CraftingTaskFactory()); API.instance().getCraftingMonitorElementRegistry().add(CraftingMonitorElementItemRender.ID, buf -> new CraftingMonitorElementItemRender(StackUtils.readItemStack(buf), buf.readInt(), buf.readInt(), buf.readInt(), buf.readInt(), buf.readInt())); @@ -184,6 +190,8 @@ public class ProxyCommon { RS.INSTANCE.network.registerMessage(MessageSlotFilterSet.class, MessageSlotFilterSet.class, id++, Side.SERVER); RS.INSTANCE.network.registerMessage(MessageSlotFilterSetFluid.class, MessageSlotFilterSetFluid.class, id++, Side.SERVER); RS.INSTANCE.network.registerMessage(MessageSlotFilterFluidUpdate.class, MessageSlotFilterFluidUpdate.class, id++, Side.CLIENT); + RS.INSTANCE.network.registerMessage(MessageGridOpen.class, MessageGridOpen.class, id++, Side.CLIENT); + RS.INSTANCE.network.registerMessage(MessageNetworkItemOpen.class, MessageNetworkItemOpen.class, id++, Side.SERVER); NetworkRegistry.INSTANCE.registerGuiHandler(RS.INSTANCE, new GuiHandler()); @@ -252,10 +260,6 @@ public class ProxyCommon { GameRegistry.addSmelting(new ItemStack(RSItems.PROCESSOR, 1, ItemProcessor.TYPE_CUT_IMPROVED), new ItemStack(RSItems.PROCESSOR, 1, ItemProcessor.TYPE_IMPROVED), 0.5F); GameRegistry.addSmelting(new ItemStack(RSItems.PROCESSOR, 1, ItemProcessor.TYPE_CUT_ADVANCED), new ItemStack(RSItems.PROCESSOR, 1, ItemProcessor.TYPE_ADVANCED), 0.5F); - WirelessGrid.ID = API.instance().getWirelessGridRegistry().add(new WirelessGridFactoryWirelessGrid()); - WirelessFluidGrid.ID = API.instance().getWirelessGridRegistry().add(new WirelessGridFactoryWirelessFluidGrid()); - PortableGrid.ID = API.instance().getWirelessGridRegistry().add(new WirelessGridFactoryPortableGrid()); - if (IntegrationOC.isLoaded()) { DriverNetwork.register(); } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/craftingmonitor/WirelessCraftingMonitor.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/craftingmonitor/WirelessCraftingMonitor.java index c98a9e717..1fb44a4e7 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/craftingmonitor/WirelessCraftingMonitor.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/craftingmonitor/WirelessCraftingMonitor.java @@ -29,9 +29,9 @@ public class WirelessCraftingMonitor implements ICraftingMonitor { private int tabPage; private Optional tabSelected; - public WirelessCraftingMonitor(int networkDimension, ItemStack stack) { + public WirelessCraftingMonitor(ItemStack stack) { this.stack = stack; - this.networkDimension = networkDimension; + this.networkDimension = ItemWirelessCraftingMonitor.getDimensionId(stack); this.network = new BlockPos(ItemWirelessCraftingMonitor.getX(stack), ItemWirelessCraftingMonitor.getY(stack), ItemWirelessCraftingMonitor.getZ(stack)); this.tabPage = ItemWirelessCraftingMonitor.getTabPage(stack); this.tabSelected = ItemWirelessCraftingMonitor.getTabSelected(stack); @@ -105,7 +105,7 @@ public class WirelessCraftingMonitor implements ICraftingMonitor { INetwork network = getNetwork(); if (network != null) { - network.getNetworkItemHandler().onClose(player); + network.getNetworkItemHandler().close(player); } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/WirelessFluidGrid.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/WirelessFluidGrid.java index dc7cbc309..1e8fa82a8 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/WirelessFluidGrid.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/WirelessFluidGrid.java @@ -62,8 +62,8 @@ public class WirelessFluidGrid implements IGridNetworkAware { } }; - public WirelessFluidGrid(int networkDimension, ItemStack stack) { - this.networkDimension = networkDimension; + public WirelessFluidGrid(ItemStack stack) { + this.networkDimension = ItemWirelessFluidGrid.getDimensionId(stack); this.network = new BlockPos(ItemWirelessFluidGrid.getX(stack), ItemWirelessFluidGrid.getY(stack), ItemWirelessFluidGrid.getZ(stack)); this.stack = stack; @@ -299,7 +299,7 @@ public class WirelessFluidGrid implements IGridNetworkAware { INetwork network = getNetwork(); if (network != null) { - network.getNetworkItemHandler().onClose(player); + network.getNetworkItemHandler().close(player); } } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/WirelessGrid.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/WirelessGrid.java index 9dfae61ed..440d63b4a 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/WirelessGrid.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/WirelessGrid.java @@ -63,8 +63,8 @@ public class WirelessGrid implements IGridNetworkAware { } }; - public WirelessGrid(int networkDimension, ItemStack stack) { - this.networkDimension = networkDimension; + public WirelessGrid(ItemStack stack) { + this.networkDimension = ItemWirelessGrid.getDimensionId(stack); this.network = new BlockPos(ItemWirelessGrid.getX(stack), ItemWirelessGrid.getY(stack), ItemWirelessGrid.getZ(stack)); this.stack = stack; @@ -305,7 +305,7 @@ public class WirelessGrid implements IGridNetworkAware { INetwork network = getNetwork(); if (network != null) { - network.getNetworkItemHandler().onClose(player); + network.getNetworkItemHandler().close(player); } } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/portable/TilePortableGrid.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/portable/TilePortableGrid.java index 371994da4..cac5b5fab 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/portable/TilePortableGrid.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/portable/TilePortableGrid.java @@ -62,6 +62,8 @@ import java.util.ArrayList; import java.util.List; public class TilePortableGrid extends TileBase implements IGrid, IPortableGrid, IRedstoneConfigurable, IStorageDiskContainerContext, IPortableGrid.IPortableGridRenderInfo { + public static int FACTORY_ID; + public static final TileDataParameter REDSTONE_MODE = RedstoneMode.createParameter(); private static final TileDataParameter ENERGY_STORED = new TileDataParameter<>(DataSerializers.VARINT, 0, t -> t.energyStorage.getEnergyStored()); private static final TileDataParameter SORTING_DIRECTION = new TileDataParameter<>(DataSerializers.VARINT, 0, TilePortableGrid::getSortingDirection, (t, v) -> { diff --git a/src/main/resources/assets/refinedstorage/lang/en_us.lang b/src/main/resources/assets/refinedstorage/lang/en_us.lang index 38d8222f9..453744a5d 100644 --- a/src/main/resources/assets/refinedstorage/lang/en_us.lang +++ b/src/main/resources/assets/refinedstorage/lang/en_us.lang @@ -3,6 +3,10 @@ itemGroup.refinedstorage.covers=Refined Storage Covers key.refinedstorage.focusSearchBar=Focus Grid Search Bar key.refinedstorage.clearGridCraftingMatrix=Clear Grid Crafting Matrix +key.refinedstorage.openWirelessGrid=Open Wireless Grid +key.refinedstorage.openWirelessFluidGrid=Open Wireless Fluid Grid +key.refinedstorage.openPortableGrid=Open Portable Grid +key.refinedstorage.openWirelessCraftingMonitor=Open Wireless Crafting Monitor gui.refinedstorage:controller.0=Controller gui.refinedstorage:controller.1=Creative Controller