diff --git a/src/main/java/com/raoulvdberge/refinedstorage/RSConfig.java b/src/main/java/com/raoulvdberge/refinedstorage/RSConfig.java index e8358bfba..b566562c2 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/RSConfig.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/RSConfig.java @@ -64,6 +64,13 @@ public final class RSConfig { public int wirelessGridInsertUsage; //endregion + //region Wireless Crafting Monitor + public boolean wirelessCraftingMonitorUsesEnergy; + public int wirelessCraftingMonitorOpenUsage; + public int wirelessCraftingMonitorCancelUsage; + public int wirelessCraftingMonitorCancelAllUsage; + //endregion + //region Upgrades public int rangeUpgradeUsage; public int speedUpgradeUsage; @@ -79,6 +86,7 @@ public final class RSConfig { private static final String CONTROLLER = "controller"; private static final String WIRELESS_TRANSMITTER = "wirelessTransmitter"; private static final String WIRELESS_GRID = "wirelessGrid"; + private static final String WIRELESS_CRAFTING_MONITOR = "wirelessCraftingMonitor"; private static final String UPGRADES = "upgrades"; private static final String MISC = "misc"; //endregion @@ -153,6 +161,13 @@ public final class RSConfig { wirelessGridExtractUsage = config.getInt("extract", WIRELESS_GRID, 3, 0, Integer.MAX_VALUE, "The energy used by the Wireless Grid to extract items"); //endregion + //region Wireless Grid + wirelessCraftingMonitorUsesEnergy = config.getBoolean("usesEnergy", WIRELESS_CRAFTING_MONITOR, true, "Whether the Wireless Crafting Monitor uses energy"); + wirelessCraftingMonitorOpenUsage = config.getInt("open", WIRELESS_CRAFTING_MONITOR, 35, 0, Integer.MAX_VALUE, "The energy used by the Wireless Crafting Monitor to open"); + wirelessCraftingMonitorCancelUsage = config.getInt("cancel", WIRELESS_CRAFTING_MONITOR, 4, 0, Integer.MAX_VALUE, "The energy used by the Wireless Crafting Monitor to cancel a task"); + wirelessCraftingMonitorCancelAllUsage = config.getInt("cancelAll", WIRELESS_CRAFTING_MONITOR, 5, 0, Integer.MAX_VALUE, "The energy used by the Wireless Crafting Monitor to cancel all tasks"); + //endregion + //region Upgrades rangeUpgradeUsage = config.getInt("range", UPGRADES, 8, 0, Integer.MAX_VALUE, "The additional energy used per Range Upgrade"); speedUpgradeUsage = config.getInt("speed", UPGRADES, 2, 0, Integer.MAX_VALUE, "The additional energy used per Speed Upgrade"); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/RSGui.java b/src/main/java/com/raoulvdberge/refinedstorage/RSGui.java index 99d1abc9e..6a7426b7b 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/RSGui.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/RSGui.java @@ -24,4 +24,5 @@ public final class RSGui { public static final int EXTERNAL_STORAGE = 20; public static final int FLUID_STORAGE = 21; public static final int DISK_MANIPULATOR = 22; + public static final int WIRELESS_CRAFTING_MONITOR = 23; } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/RSItems.java b/src/main/java/com/raoulvdberge/refinedstorage/RSItems.java index 3f10bfea5..a1ae5ae75 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/RSItems.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/RSItems.java @@ -18,4 +18,5 @@ public final class RSItems { public static final ItemFluidStorageDisk FLUID_STORAGE_DISK = new ItemFluidStorageDisk(); public static final ItemFluidStoragePart FLUID_STORAGE_PART = new ItemFluidStoragePart(); public static final ItemWrench WRENCH = new ItemWrench(); + public static final ItemWirelessCraftingMonitor WIRELESS_CRAFTING_MONITOR = new ItemWirelessCraftingMonitor(); } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/api/network/grid/IItemGridHandler.java b/src/main/java/com/raoulvdberge/refinedstorage/api/network/grid/IItemGridHandler.java index c82937e3c..6dfed2734 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/api/network/grid/IItemGridHandler.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/api/network/grid/IItemGridHandler.java @@ -60,7 +60,8 @@ public interface IItemGridHandler { /** * Called when a player wants to cancel a crafting task. * - * @param id the task id, or -1 to cancel all tasks + * @param player the player that requested the cance + * @param id the task id, or -1 to cancel all tasks */ - void onCraftingCancelRequested(int id); + void onCraftingCancelRequested(EntityPlayerMP player, int id); } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/ItemGridHandler.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/ItemGridHandler.java index 59676b136..5b4d03021 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/ItemGridHandler.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/grid/ItemGridHandler.java @@ -7,6 +7,7 @@ import com.raoulvdberge.refinedstorage.api.network.grid.IItemGridHandler; import com.raoulvdberge.refinedstorage.api.network.item.INetworkItem; import com.raoulvdberge.refinedstorage.apiimpl.API; import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.task.CraftingTask; +import com.raoulvdberge.refinedstorage.apiimpl.network.item.NetworkItemWirelessCraftingMonitor; import com.raoulvdberge.refinedstorage.apiimpl.network.item.NetworkItemWirelessGrid; import com.raoulvdberge.refinedstorage.network.MessageGridCraftingPreviewResponse; import net.minecraft.entity.player.EntityPlayerMP; @@ -169,7 +170,7 @@ public class ItemGridHandler implements IItemGridHandler { } @Override - public void onCraftingCancelRequested(int id) { + public void onCraftingCancelRequested(EntityPlayerMP player, int id) { if (id >= 0 && id < network.getCraftingTasks().size()) { network.cancelCraftingTask(network.getCraftingTasks().get(id)); } else if (id == -1) { @@ -177,5 +178,11 @@ public class ItemGridHandler implements IItemGridHandler { network.cancelCraftingTask(task); } } + + INetworkItem networkItem = network.getNetworkItemHandler().getItem(player); + + if (networkItem != null && networkItem instanceof NetworkItemWirelessCraftingMonitor) { + ((NetworkItemWirelessCraftingMonitor) networkItem).drainEnergy(id == -1 ? RS.INSTANCE.config.wirelessCraftingMonitorCancelAllUsage : RS.INSTANCE.config.wirelessCraftingMonitorCancelUsage); + } } } 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 8f6d4e2b7..5355e20ac 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 @@ -60,10 +60,10 @@ public class NetworkItemHandler implements INetworkItemHandler { if (item.onOpen(network, player, controllerWorld, hand)) { items.add(item); - return false; + return true; } - return true; + return false; } @Override 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 new file mode 100755 index 000000000..86efb2ffe --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/item/NetworkItemWirelessCraftingMonitor.java @@ -0,0 +1,61 @@ +package com.raoulvdberge.refinedstorage.apiimpl.network.item; + +import com.raoulvdberge.refinedstorage.RS; +import com.raoulvdberge.refinedstorage.RSGui; +import com.raoulvdberge.refinedstorage.RSItems; +import com.raoulvdberge.refinedstorage.api.network.INetworkMaster; +import com.raoulvdberge.refinedstorage.api.network.item.INetworkItem; +import com.raoulvdberge.refinedstorage.api.network.item.INetworkItemHandler; +import com.raoulvdberge.refinedstorage.item.ItemWirelessCraftingMonitor; +import com.raoulvdberge.refinedstorage.item.ItemWirelessGrid; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumHand; +import net.minecraft.world.World; + +public class NetworkItemWirelessCraftingMonitor implements INetworkItem { + private INetworkItemHandler handler; + private EntityPlayer player; + private ItemStack stack; + + public NetworkItemWirelessCraftingMonitor(INetworkItemHandler handler, EntityPlayer player, ItemStack stack) { + this.handler = handler; + this.player = player; + this.stack = stack; + } + + @Override + public EntityPlayer getPlayer() { + return player; + } + + @Override + public boolean onOpen(INetworkMaster network, EntityPlayer player, World controllerWorld, EnumHand hand) { + if (RS.INSTANCE.config.wirelessCraftingMonitorUsesEnergy && stack.getItemDamage() != ItemWirelessCraftingMonitor.TYPE_CREATIVE && RSItems.WIRELESS_CRAFTING_MONITOR.getEnergyStored(stack) <= RS.INSTANCE.config.wirelessCraftingMonitorOpenUsage) { + return false; + } + + player.openGui(RS.INSTANCE, RSGui.WIRELESS_CRAFTING_MONITOR, player.worldObj, hand.ordinal(), controllerWorld.provider.getDimension(), 0); + + network.sendCraftingMonitorUpdate((EntityPlayerMP) player); + + drainEnergy(RS.INSTANCE.config.wirelessCraftingMonitorOpenUsage); + + return true; + } + + public void drainEnergy(int energy) { + if (RS.INSTANCE.config.wirelessCraftingMonitorUsesEnergy && stack.getItemDamage() != ItemWirelessCraftingMonitor.TYPE_CREATIVE) { + ItemWirelessGrid item = RSItems.WIRELESS_GRID; + + item.extractEnergy(stack, energy, false); + + if (item.getEnergyStored(stack) <= 0) { + handler.onClose(player); + + player.closeScreen(); + } + } + } +} \ No newline at end of file diff --git a/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiHandler.java b/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiHandler.java index 4d85729a0..238e60422 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiHandler.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiHandler.java @@ -5,6 +5,7 @@ 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.externalstorage.TileExternalStorage; import com.raoulvdberge.refinedstorage.tile.grid.TileGrid; import com.raoulvdberge.refinedstorage.tile.grid.WirelessGrid; @@ -72,6 +73,8 @@ public class GuiHandler implements IGuiHandler { return getWirelessGridContainer(player, x, y); } else if (ID == RSGui.GRID_FILTER) { return getGridFilterContainer(player, x); + } else if (ID == RSGui.WIRELESS_CRAFTING_MONITOR) { + return getWirelessCraftingMonitorContainer(player, x, y); } return getContainer(ID, player, world.getTileEntity(new BlockPos(x, y, z))); @@ -128,6 +131,8 @@ public class GuiHandler implements IGuiHandler { return new GuiStorage((ContainerFluidStorage) getContainer(ID, player, tile), (TileFluidStorage) tile); case RSGui.DISK_MANIPULATOR: return new GuiDiskManipulator((ContainerDiskManipulator) getContainer(ID, player, tile)); + case RSGui.WIRELESS_CRAFTING_MONITOR: + return getWirelessCraftingMonitorGui(player, x, y); default: return null; } @@ -147,6 +152,20 @@ public class GuiHandler implements IGuiHandler { return new ContainerGrid(getWirelessGrid(player, hand, controllerDimension), player); } + private WirelessCraftingMonitor getWirelessCraftingMonitor(EntityPlayer player, int hand, int controllerDimension) { + return new WirelessCraftingMonitor(controllerDimension, player.getHeldItem(EnumHand.values()[hand])); + } + + private GuiCraftingMonitor getWirelessCraftingMonitorGui(EntityPlayer player, int hand, int controllerDimension) { + WirelessCraftingMonitor craftingMonitor = getWirelessCraftingMonitor(player, hand, controllerDimension); + + return new GuiCraftingMonitor(new ContainerCraftingMonitor(craftingMonitor, player)); + } + + private ContainerCraftingMonitor getWirelessCraftingMonitorContainer(EntityPlayer player, int hand, int controllerDimension) { + return new ContainerCraftingMonitor(getWirelessCraftingMonitor(player, hand, controllerDimension), player); + } + private ContainerGridFilter getGridFilterContainer(EntityPlayer player, int hand) { return new ContainerGridFilter(player, player.getHeldItem(EnumHand.values()[hand])); } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/item/ItemWirelessCraftingMonitor.java b/src/main/java/com/raoulvdberge/refinedstorage/item/ItemWirelessCraftingMonitor.java new file mode 100755 index 000000000..c4b9204ea --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/item/ItemWirelessCraftingMonitor.java @@ -0,0 +1,18 @@ +package com.raoulvdberge.refinedstorage.item; + +import com.raoulvdberge.refinedstorage.api.network.item.INetworkItem; +import com.raoulvdberge.refinedstorage.api.network.item.INetworkItemHandler; +import com.raoulvdberge.refinedstorage.apiimpl.network.item.NetworkItemWirelessCraftingMonitor; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; + +public class ItemWirelessCraftingMonitor extends ItemNetworkItem { + public ItemWirelessCraftingMonitor() { + super("wireless_crafting_monitor"); + } + + @Override + public INetworkItem provide(INetworkItemHandler handler, EntityPlayer player, ItemStack stack) { + return new NetworkItemWirelessCraftingMonitor(handler, player, stack); + } +} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/network/MessageCraftingMonitorCancel.java b/src/main/java/com/raoulvdberge/refinedstorage/network/MessageCraftingMonitorCancel.java index b0f30b83a..470e5aa0c 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/network/MessageCraftingMonitorCancel.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/network/MessageCraftingMonitorCancel.java @@ -28,7 +28,7 @@ public class MessageCraftingMonitorCancel extends MessageHandlerPlayerToServer elements = craftingTasks.stream().flatMap(t -> t.getCraftingMonitorElements().stream()).collect(Collectors.toList()); + List elements = getElements(); worldObj.getMinecraftServer().getPlayerList().getPlayerList().stream() .filter(player -> player.openContainer instanceof ContainerCraftingMonitor) @@ -338,7 +338,11 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR @Override public void sendCraftingMonitorUpdate(EntityPlayerMP player) { - RS.INSTANCE.network.sendTo(new MessageCraftingMonitorElements(craftingTasks.stream().flatMap(t -> t.getCraftingMonitorElements().stream()).collect(Collectors.toList())), player); + RS.INSTANCE.network.sendTo(new MessageCraftingMonitorElements(getElements()), player); + } + + private List getElements() { + return craftingTasks.stream().flatMap(t -> t.getCraftingMonitorElements().stream()).collect(Collectors.toList()); } @Override diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/craftingmonitor/ICraftingMonitor.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/craftingmonitor/ICraftingMonitor.java index 5a8dd8e63..69082bd57 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/craftingmonitor/ICraftingMonitor.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/craftingmonitor/ICraftingMonitor.java @@ -1,5 +1,7 @@ package com.raoulvdberge.refinedstorage.tile.craftingmonitor; +import net.minecraft.entity.player.EntityPlayerMP; + public interface ICraftingMonitor { - void onCancelled(int id); + void onCancelled(EntityPlayerMP player, int id); } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/craftingmonitor/TileCraftingMonitor.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/craftingmonitor/TileCraftingMonitor.java index 4a565440c..7252c690f 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/craftingmonitor/TileCraftingMonitor.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/craftingmonitor/TileCraftingMonitor.java @@ -21,9 +21,9 @@ public class TileCraftingMonitor extends TileNode implements ICraftingMonitor { } @Override - public void onCancelled(int id) { + public void onCancelled(EntityPlayerMP player, int id) { if (isConnected()) { - network.getItemGridHandler().onCraftingCancelRequested(id); + network.getItemGridHandler().onCraftingCancelRequested(player, id); } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/craftingmonitor/WirelessCraftingMonitor.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/craftingmonitor/WirelessCraftingMonitor.java new file mode 100755 index 000000000..da5958453 --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/craftingmonitor/WirelessCraftingMonitor.java @@ -0,0 +1,41 @@ +package com.raoulvdberge.refinedstorage.tile.craftingmonitor; + +import com.raoulvdberge.refinedstorage.item.ItemWirelessCraftingMonitor; +import com.raoulvdberge.refinedstorage.tile.TileController; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraftforge.common.DimensionManager; + +public class WirelessCraftingMonitor implements ICraftingMonitor { + private int controllerDimension; + private BlockPos controller; + + public WirelessCraftingMonitor(int controllerDimension, ItemStack stack) { + this.controllerDimension = controllerDimension; + this.controller = new BlockPos(ItemWirelessCraftingMonitor.getX(stack), ItemWirelessCraftingMonitor.getY(stack), ItemWirelessCraftingMonitor.getZ(stack)); + } + + @Override + public void onCancelled(EntityPlayerMP player, int id) { + TileController controller = getController(); + + if (controller != null) { + controller.getItemGridHandler().onCraftingCancelRequested(player, id); + } + } + + private TileController getController() { + World world = DimensionManager.getWorld(controllerDimension); + + if (world != null) { + TileEntity tile = world.getTileEntity(controller); + + return tile instanceof TileController ? (TileController) tile : null; + } + + return null; + } +} diff --git a/src/main/resources/assets/refinedstorage/lang/en_US.lang b/src/main/resources/assets/refinedstorage/lang/en_US.lang index ab103df79..9ab8cc8d5 100755 --- a/src/main/resources/assets/refinedstorage/lang/en_US.lang +++ b/src/main/resources/assets/refinedstorage/lang/en_US.lang @@ -194,6 +194,8 @@ item.refinedstorage:fluid_storage_disk.4.name=Creative Fluid Storage Disk item.refinedstorage:fluid_storage_disk.5.name=Debug Fluid Storage Disk item.refinedstorage:wireless_grid.0.name=Wireless Grid item.refinedstorage:wireless_grid.1.name=Creative Wireless Grid +item.refinedstorage:wireless_crafting_monitor.0.name=Wireless Crafting Monitor +item.refinedstorage:wireless_crafting_monitor.1.name=Creative Wireless Crafting Monitor item.refinedstorage:quartz_enriched_iron.name=Quartz Enriched Iron item.refinedstorage:core.0.name=Construction Core item.refinedstorage:core.1.name=Destruction Core diff --git a/src/main/resources/assets/refinedstorage/models/item/wireless_crafting_monitor.json b/src/main/resources/assets/refinedstorage/models/item/wireless_crafting_monitor.json new file mode 100755 index 000000000..c3f70358e --- /dev/null +++ b/src/main/resources/assets/refinedstorage/models/item/wireless_crafting_monitor.json @@ -0,0 +1,20 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "refinedstorage:items/wireless_crafting_monitor_disconnected" + }, + "overrides": [ + { + "predicate": { + "connected": 0 + }, + "model": "refinedstorage:item/wireless_crafting_monitor_disconnected" + }, + { + "predicate": { + "connected": 1 + }, + "model": "refinedstorage:item/wireless_crafting_monitor_connected" + } + ] +} diff --git a/src/main/resources/assets/refinedstorage/models/item/wireless_crafting_monitor_connected.json b/src/main/resources/assets/refinedstorage/models/item/wireless_crafting_monitor_connected.json new file mode 100755 index 000000000..452a42568 --- /dev/null +++ b/src/main/resources/assets/refinedstorage/models/item/wireless_crafting_monitor_connected.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "refinedstorage:items/wireless_crafting_monitor_connected" + } +} diff --git a/src/main/resources/assets/refinedstorage/models/item/wireless_crafting_monitor_disconnected.json b/src/main/resources/assets/refinedstorage/models/item/wireless_crafting_monitor_disconnected.json new file mode 100755 index 000000000..47c0fc24c --- /dev/null +++ b/src/main/resources/assets/refinedstorage/models/item/wireless_crafting_monitor_disconnected.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "refinedstorage:items/wireless_crafting_monitor_disconnected" + } +} diff --git a/src/main/resources/assets/refinedstorage/textures/items/wireless_crafting_monitor_connected.png b/src/main/resources/assets/refinedstorage/textures/items/wireless_crafting_monitor_connected.png new file mode 100755 index 000000000..5d6dcd71d Binary files /dev/null and b/src/main/resources/assets/refinedstorage/textures/items/wireless_crafting_monitor_connected.png differ diff --git a/src/main/resources/assets/refinedstorage/textures/items/wireless_crafting_monitor_disconnected.png b/src/main/resources/assets/refinedstorage/textures/items/wireless_crafting_monitor_disconnected.png new file mode 100755 index 000000000..cdcc3143f Binary files /dev/null and b/src/main/resources/assets/refinedstorage/textures/items/wireless_crafting_monitor_disconnected.png differ