From 9842726f3f2f789e445a35745cfe43f64da8cff9 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Fri, 4 Nov 2016 12:20:10 +0100 Subject: [PATCH] Refactor wireless grid API to allow for easy implementation of wireless crafting monitors --- .../api/network/INetworkMaster.java | 5 +- .../api/network/IWirelessGridConsumer.java | 19 -- .../api/network/IWirelessGridHandler.java | 51 --- .../api/network/item/INetworkItem.java | 27 ++ .../api/network/item/INetworkItemHandler.java | 43 +++ .../network/item/INetworkItemProvider.java | 19 ++ .../apiimpl/network/WirelessGridConsumer.java | 25 -- .../apiimpl/network/WirelessGridHandler.java | 115 ------- .../apiimpl/network/grid/ItemGridHandler.java | 20 +- .../network/item/NetworkItemHandler.java | 92 ++++++ .../network/item/NetworkItemWirelessGrid.java | 60 ++++ ...Forge.java => NetworkItemEnergyForge.java} | 4 +- ...Tesla.java => NetworkItemEnergyTesla.java} | 4 +- .../refinedstorage/item/ItemNetworkItem.java | 298 ++++++++++++++++++ .../refinedstorage/item/ItemWirelessGrid.java | 292 +---------------- .../refinedstorage/tile/TileController.java | 12 +- .../tile/grid/WirelessGrid.java | 2 +- .../assets/refinedstorage/lang/de_DE.lang | 6 +- .../assets/refinedstorage/lang/en_US.lang | 6 +- .../assets/refinedstorage/lang/fr_FR.lang | 4 +- .../assets/refinedstorage/lang/nl_NL.lang | 6 +- .../assets/refinedstorage/lang/pt_BR.lang | 4 +- .../assets/refinedstorage/lang/ru_RU.lang | 6 +- .../assets/refinedstorage/lang/zh_CN.lang | 6 +- 24 files changed, 598 insertions(+), 528 deletions(-) delete mode 100755 src/main/java/com/raoulvdberge/refinedstorage/api/network/IWirelessGridConsumer.java delete mode 100755 src/main/java/com/raoulvdberge/refinedstorage/api/network/IWirelessGridHandler.java create mode 100755 src/main/java/com/raoulvdberge/refinedstorage/api/network/item/INetworkItem.java create mode 100755 src/main/java/com/raoulvdberge/refinedstorage/api/network/item/INetworkItemHandler.java create mode 100755 src/main/java/com/raoulvdberge/refinedstorage/api/network/item/INetworkItemProvider.java delete mode 100755 src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/WirelessGridConsumer.java delete mode 100755 src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/WirelessGridHandler.java create mode 100755 src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/item/NetworkItemHandler.java create mode 100755 src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/item/NetworkItemWirelessGrid.java rename src/main/java/com/raoulvdberge/refinedstorage/integration/forgeenergy/{WirelessGridEnergyForge.java => NetworkItemEnergyForge.java} (89%) rename src/main/java/com/raoulvdberge/refinedstorage/integration/tesla/{WirelessGridEnergyTesla.java => NetworkItemEnergyTesla.java} (83%) create mode 100755 src/main/java/com/raoulvdberge/refinedstorage/item/ItemNetworkItem.java diff --git a/src/main/java/com/raoulvdberge/refinedstorage/api/network/INetworkMaster.java b/src/main/java/com/raoulvdberge/refinedstorage/api/network/INetworkMaster.java index ae997076b..496bd93dd 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/api/network/INetworkMaster.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/api/network/INetworkMaster.java @@ -5,6 +5,7 @@ import com.raoulvdberge.refinedstorage.api.autocrafting.ICraftingPattern; import com.raoulvdberge.refinedstorage.api.autocrafting.task.ICraftingTask; import com.raoulvdberge.refinedstorage.api.network.grid.IFluidGridHandler; import com.raoulvdberge.refinedstorage.api.network.grid.IItemGridHandler; +import com.raoulvdberge.refinedstorage.api.network.item.INetworkItemHandler; import com.raoulvdberge.refinedstorage.api.storage.fluid.IFluidStorageCache; import com.raoulvdberge.refinedstorage.api.storage.item.IItemStorageCache; import com.raoulvdberge.refinedstorage.api.util.IComparer; @@ -59,9 +60,9 @@ public interface INetworkMaster { IFluidGridHandler getFluidGridHandler(); /** - * @return the {@link IWirelessGridHandler} of this network + * @return the {@link INetworkItemHandler} of this network */ - IWirelessGridHandler getWirelessGridHandler(); + INetworkItemHandler getNetworkItemHandler(); /** * @return the {@link IItemStorageCache} of this network diff --git a/src/main/java/com/raoulvdberge/refinedstorage/api/network/IWirelessGridConsumer.java b/src/main/java/com/raoulvdberge/refinedstorage/api/network/IWirelessGridConsumer.java deleted file mode 100755 index 6975e95a0..000000000 --- a/src/main/java/com/raoulvdberge/refinedstorage/api/network/IWirelessGridConsumer.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.raoulvdberge.refinedstorage.api.network; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; - -/** - * Represents a player using a wireless grid. - */ -public interface IWirelessGridConsumer { - /** - * @return the player using the wireless grid - */ - EntityPlayer getPlayer(); - - /** - * @return the wireless grid stack - */ - ItemStack getStack(); -} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/api/network/IWirelessGridHandler.java b/src/main/java/com/raoulvdberge/refinedstorage/api/network/IWirelessGridHandler.java deleted file mode 100755 index 4d433d3a7..000000000 --- a/src/main/java/com/raoulvdberge/refinedstorage/api/network/IWirelessGridHandler.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.raoulvdberge.refinedstorage.api.network; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.util.EnumHand; -import net.minecraft.world.World; - -import javax.annotation.Nullable; - -/** - * Defines behavior of wireless grids. - */ -public interface IWirelessGridHandler { - /** - * Called every network tick. - */ - void update(); - - /** - * Called when a player opens a wireless grid. - * - * @param player the player that opened the wireless grid - * @param controllerWorld the world of the controller - * @param hand the hand the player opened it with - * @return true if the opening was successful, false otherwise - */ - boolean onOpen(EntityPlayer player, World controllerWorld, EnumHand hand); - - /** - * Called when the player closes a wireless grid. - * - * @param player the player that closed the grid - */ - void onClose(EntityPlayer player); - - /** - * Drains energy from the wireless grid of a player. - * - * @param player the player that is using the wireless grid to drain energy from - * @param energy the amount of energy that has to be drained - */ - void drainEnergy(EntityPlayer player, int energy); - - /** - * Returns a {@link IWirelessGridConsumer} for a player. - * - * @param player the player to get the wireless grid consumer for - * @return the {@link IWirelessGridConsumer} that corresponds to a player, or null if the player isn't using a wireless grid - */ - @Nullable - IWirelessGridConsumer getConsumer(EntityPlayer player); -} 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 new file mode 100755 index 000000000..43f2c8cf1 --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/api/network/item/INetworkItem.java @@ -0,0 +1,27 @@ +package com.raoulvdberge.refinedstorage.api.network.item; + +import com.raoulvdberge.refinedstorage.api.network.INetworkMaster; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.EnumHand; +import net.minecraft.world.World; + +/** + * Represents a network item. + */ +public interface INetworkItem { + /** + * @return the player using the network item + */ + EntityPlayer getPlayer(); + + /** + * Called when the network item is opened. + * + * @param network the network + * @param player the player + * @param controllerWorld the world where the controller is in + * @param hand the hand + * @return whether the network item can be opened + */ + boolean onOpen(INetworkMaster network, EntityPlayer player, World controllerWorld, EnumHand hand); +} 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 new file mode 100755 index 000000000..52dfde97e --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/api/network/item/INetworkItemHandler.java @@ -0,0 +1,43 @@ +package com.raoulvdberge.refinedstorage.api.network.item; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.EnumHand; +import net.minecraft.world.World; + +import javax.annotation.Nullable; + +/** + * Handles network items. + */ +public interface INetworkItemHandler { + /** + * Called every network tick. + */ + void update(); + + /** + * Called when a player opens a network item. + * + * @param player the player that opened the network item + * @param controllerWorld the world of the controller + * @param hand the hand the player opened it with + * @return true if the opening was successful, false otherwise + */ + boolean onOpen(EntityPlayer player, World controllerWorld, EnumHand hand); + + /** + * Called when the player closes a network item. + * + * @param player the player that closed the network item + */ + void onClose(EntityPlayer player); + + /** + * Returns a {@link INetworkItem} for a player. + * + * @param player the player to get the network item for + * @return the {@link INetworkItem} that corresponds to a player, or null if the player isn't using a network item + */ + @Nullable + INetworkItem getItem(EntityPlayer player); +} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/api/network/item/INetworkItemProvider.java b/src/main/java/com/raoulvdberge/refinedstorage/api/network/item/INetworkItemProvider.java new file mode 100755 index 000000000..e39a6b548 --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/api/network/item/INetworkItemProvider.java @@ -0,0 +1,19 @@ +package com.raoulvdberge.refinedstorage.api.network.item; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; + +/** + * Provider for network items. Implement this on the item. + */ +public interface INetworkItemProvider { + /** + * Creates a network item for the given item stack. + * + * @param handler the network item handlelr + * @param player the player + * @param stack the stack + * @return the network item + */ + INetworkItem provide(INetworkItemHandler handler, EntityPlayer player, ItemStack stack); +} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/WirelessGridConsumer.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/WirelessGridConsumer.java deleted file mode 100755 index dc97397f6..000000000 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/WirelessGridConsumer.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.raoulvdberge.refinedstorage.apiimpl.network; - -import com.raoulvdberge.refinedstorage.api.network.IWirelessGridConsumer; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; - -public class WirelessGridConsumer implements IWirelessGridConsumer { - private EntityPlayer player; - private ItemStack stack; - - public WirelessGridConsumer(EntityPlayer player, ItemStack stack) { - this.player = player; - this.stack = stack; - } - - @Override - public EntityPlayer getPlayer() { - return player; - } - - @Override - public ItemStack getStack() { - return stack; - } -} \ No newline at end of file diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/WirelessGridHandler.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/WirelessGridHandler.java deleted file mode 100755 index 055bd4dde..000000000 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/WirelessGridHandler.java +++ /dev/null @@ -1,115 +0,0 @@ -package com.raoulvdberge.refinedstorage.apiimpl.network; - -import com.raoulvdberge.refinedstorage.RS; -import com.raoulvdberge.refinedstorage.RSGui; -import com.raoulvdberge.refinedstorage.RSItems; -import com.raoulvdberge.refinedstorage.api.network.*; -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; - -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; - -public class WirelessGridHandler implements IWirelessGridHandler { - private INetworkMaster network; - - private List consumers = new ArrayList<>(); - private List consumersToRemove = new ArrayList<>(); - - public WirelessGridHandler(INetworkMaster network) { - this.network = network; - } - - @Override - public void update() { - consumers.removeAll(consumersToRemove); - consumersToRemove.clear(); - } - - @Override - public boolean onOpen(EntityPlayer player, World controllerWorld, EnumHand hand) { - boolean inRange = false; - - for (INetworkNode node : network.getNodeGraph().all()) { - if (node instanceof IWirelessTransmitter && node.getNodeWorld().provider.getDimension() == player.dimension) { - IWirelessTransmitter transmitter = (IWirelessTransmitter) node; - - double distance = Math.sqrt(Math.pow(transmitter.getOrigin().getX() - player.posX, 2) + Math.pow(transmitter.getOrigin().getY() - player.posY, 2) + Math.pow(transmitter.getOrigin().getZ() - player.posZ, 2)); - - if (distance < transmitter.getRange()) { - inRange = true; - - break; - } - } - } - - if (!inRange) { - return false; - } - - ItemStack stack = player.getHeldItem(hand); - - if (RS.INSTANCE.config.wirelessGridUsesEnergy && stack.getItemDamage() != ItemWirelessGrid.TYPE_CREATIVE && RSItems.WIRELESS_GRID.getEnergyStored(stack) <= RS.INSTANCE.config.wirelessGridOpenUsage) { - return true; - } - - consumers.add(new WirelessGridConsumer(player, stack)); - - player.openGui(RS.INSTANCE, RSGui.WIRELESS_GRID, player.worldObj, hand.ordinal(), controllerWorld.provider.getDimension(), 0); - - network.sendItemStorageToClient((EntityPlayerMP) player); - - drainEnergy(player, RS.INSTANCE.config.wirelessGridOpenUsage); - - return true; - } - - @Override - public void onClose(EntityPlayer player) { - IWirelessGridConsumer consumer = getConsumer(player); - - if (consumer != null) { - consumersToRemove.add(consumer); - } - } - - @Override - public void drainEnergy(EntityPlayer player, int energy) { - IWirelessGridConsumer consumer = getConsumer(player); - - if (consumer != null && RS.INSTANCE.config.wirelessGridUsesEnergy) { - ItemWirelessGrid item = RSItems.WIRELESS_GRID; - - if (consumer.getStack().getItemDamage() != ItemWirelessGrid.TYPE_CREATIVE) { - item.extractEnergy(consumer.getStack(), energy, false); - - if (item.getEnergyStored(consumer.getStack()) <= 0) { - onClose(player); - - consumer.getPlayer().closeScreen(); - } - } - } - } - - @Override - public IWirelessGridConsumer getConsumer(EntityPlayer player) { - Iterator it = consumers.iterator(); - - while (it.hasNext()) { - IWirelessGridConsumer consumer = it.next(); - - if (consumer.getPlayer() == player) { - return consumer; - } - } - - return null; - } -} 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 23ae80c44..59676b136 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 @@ -4,8 +4,10 @@ import com.raoulvdberge.refinedstorage.RS; import com.raoulvdberge.refinedstorage.api.autocrafting.task.ICraftingTask; import com.raoulvdberge.refinedstorage.api.network.INetworkMaster; 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.NetworkItemWirelessGrid; import com.raoulvdberge.refinedstorage.network.MessageGridCraftingPreviewResponse; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.ItemStack; @@ -78,7 +80,11 @@ public class ItemGridHandler implements IItemGridHandler { player.updateHeldItem(); } - network.getWirelessGridHandler().drainEnergy(player, RS.INSTANCE.config.wirelessGridExtractUsage); + INetworkItem networkItem = network.getNetworkItemHandler().getItem(player); + + if (networkItem != null && networkItem instanceof NetworkItemWirelessGrid) { + ((NetworkItemWirelessGrid) networkItem).drainEnergy(RS.INSTANCE.config.wirelessGridExtractUsage); + } } } @@ -86,7 +92,11 @@ public class ItemGridHandler implements IItemGridHandler { public ItemStack onInsert(EntityPlayerMP player, ItemStack stack) { ItemStack remainder = network.insertItem(stack, stack.stackSize, false); - network.getWirelessGridHandler().drainEnergy(player, RS.INSTANCE.config.wirelessGridInsertUsage); + INetworkItem networkItem = network.getNetworkItemHandler().getItem(player); + + if (networkItem != null && networkItem instanceof NetworkItemWirelessGrid) { + ((NetworkItemWirelessGrid) networkItem).drainEnergy(RS.INSTANCE.config.wirelessGridInsertUsage); + } return remainder; } @@ -116,7 +126,11 @@ public class ItemGridHandler implements IItemGridHandler { player.updateHeldItem(); - network.getWirelessGridHandler().drainEnergy(player, RS.INSTANCE.config.wirelessGridInsertUsage); + INetworkItem networkItem = network.getNetworkItemHandler().getItem(player); + + if (networkItem != null && networkItem instanceof NetworkItemWirelessGrid) { + ((NetworkItemWirelessGrid) networkItem).drainEnergy(RS.INSTANCE.config.wirelessGridInsertUsage); + } } @Override 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 new file mode 100755 index 000000000..8f6d4e2b7 --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/item/NetworkItemHandler.java @@ -0,0 +1,92 @@ +package com.raoulvdberge.refinedstorage.apiimpl.network.item; + +import com.raoulvdberge.refinedstorage.api.network.INetworkMaster; +import com.raoulvdberge.refinedstorage.api.network.INetworkNode; +import com.raoulvdberge.refinedstorage.api.network.IWirelessTransmitter; +import com.raoulvdberge.refinedstorage.api.network.item.INetworkItem; +import com.raoulvdberge.refinedstorage.api.network.item.INetworkItemHandler; +import com.raoulvdberge.refinedstorage.api.network.item.INetworkItemProvider; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumHand; +import net.minecraft.world.World; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +public class NetworkItemHandler implements INetworkItemHandler { + private INetworkMaster network; + + private List items = new ArrayList<>(); + private List itemsToRemove = new ArrayList<>(); + + public NetworkItemHandler(INetworkMaster network) { + this.network = network; + } + + @Override + public void update() { + items.removeAll(itemsToRemove); + itemsToRemove.clear(); + } + + @Override + public boolean onOpen(EntityPlayer player, World controllerWorld, EnumHand hand) { + boolean inRange = false; + + for (INetworkNode node : network.getNodeGraph().all()) { + if (node instanceof IWirelessTransmitter && node.getNodeWorld().provider.getDimension() == player.dimension) { + IWirelessTransmitter transmitter = (IWirelessTransmitter) node; + + double distance = Math.sqrt(Math.pow(transmitter.getOrigin().getX() - player.posX, 2) + Math.pow(transmitter.getOrigin().getY() - player.posY, 2) + Math.pow(transmitter.getOrigin().getZ() - player.posZ, 2)); + + if (distance < transmitter.getRange()) { + inRange = true; + + break; + } + } + } + + if (!inRange) { + return false; + } + + ItemStack stack = player.getHeldItem(hand); + + INetworkItem item = ((INetworkItemProvider) stack.getItem()).provide(this, player, stack); + + if (item.onOpen(network, player, controllerWorld, hand)) { + items.add(item); + + return false; + } + + return true; + } + + @Override + public void onClose(EntityPlayer player) { + INetworkItem item = getItem(player); + + if (item != null) { + itemsToRemove.add(item); + } + } + + @Override + public INetworkItem getItem(EntityPlayer player) { + Iterator it = items.iterator(); + + while (it.hasNext()) { + INetworkItem item = it.next(); + + if (item.getPlayer() == player) { + return item; + } + } + + return null; + } +} 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 new file mode 100755 index 000000000..401bdddb3 --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/item/NetworkItemWirelessGrid.java @@ -0,0 +1,60 @@ +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.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 NetworkItemWirelessGrid implements INetworkItem { + private INetworkItemHandler handler; + private EntityPlayer player; + private ItemStack stack; + + public NetworkItemWirelessGrid(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.wirelessGridUsesEnergy && stack.getItemDamage() != ItemWirelessGrid.TYPE_CREATIVE && RSItems.WIRELESS_GRID.getEnergyStored(stack) <= RS.INSTANCE.config.wirelessGridOpenUsage) { + return false; + } + + player.openGui(RS.INSTANCE, RSGui.WIRELESS_GRID, player.worldObj, hand.ordinal(), controllerWorld.provider.getDimension(), 0); + + network.sendItemStorageToClient((EntityPlayerMP) player); + + drainEnergy(RS.INSTANCE.config.wirelessGridOpenUsage); + + return true; + } + + public void drainEnergy(int energy) { + if (RS.INSTANCE.config.wirelessGridUsesEnergy && stack.getItemDamage() != ItemWirelessGrid.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/integration/forgeenergy/WirelessGridEnergyForge.java b/src/main/java/com/raoulvdberge/refinedstorage/integration/forgeenergy/NetworkItemEnergyForge.java similarity index 89% rename from src/main/java/com/raoulvdberge/refinedstorage/integration/forgeenergy/WirelessGridEnergyForge.java rename to src/main/java/com/raoulvdberge/refinedstorage/integration/forgeenergy/NetworkItemEnergyForge.java index 0e2dcbc30..762cfbcd5 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/integration/forgeenergy/WirelessGridEnergyForge.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/integration/forgeenergy/NetworkItemEnergyForge.java @@ -4,10 +4,10 @@ import com.raoulvdberge.refinedstorage.RSItems; import net.minecraft.item.ItemStack; import net.minecraftforge.energy.IEnergyStorage; -public class WirelessGridEnergyForge implements IEnergyStorage { +public class NetworkItemEnergyForge implements IEnergyStorage { private ItemStack stack; - public WirelessGridEnergyForge(ItemStack stack) { + public NetworkItemEnergyForge(ItemStack stack) { this.stack = stack; } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/integration/tesla/WirelessGridEnergyTesla.java b/src/main/java/com/raoulvdberge/refinedstorage/integration/tesla/NetworkItemEnergyTesla.java similarity index 83% rename from src/main/java/com/raoulvdberge/refinedstorage/integration/tesla/WirelessGridEnergyTesla.java rename to src/main/java/com/raoulvdberge/refinedstorage/integration/tesla/NetworkItemEnergyTesla.java index 2bd7656d6..836f383cd 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/integration/tesla/WirelessGridEnergyTesla.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/integration/tesla/NetworkItemEnergyTesla.java @@ -5,10 +5,10 @@ import net.darkhax.tesla.api.ITeslaConsumer; import net.darkhax.tesla.api.ITeslaHolder; import net.minecraft.item.ItemStack; -public class WirelessGridEnergyTesla implements ITeslaHolder, ITeslaConsumer { +public class NetworkItemEnergyTesla implements ITeslaHolder, ITeslaConsumer { private ItemStack stack; - public WirelessGridEnergyTesla(ItemStack stack) { + public NetworkItemEnergyTesla(ItemStack stack) { this.stack = stack; } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/item/ItemNetworkItem.java b/src/main/java/com/raoulvdberge/refinedstorage/item/ItemNetworkItem.java new file mode 100755 index 000000000..a98b92093 --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/item/ItemNetworkItem.java @@ -0,0 +1,298 @@ +package com.raoulvdberge.refinedstorage.item; + +import cofh.api.energy.ItemEnergyContainer; +import com.raoulvdberge.refinedstorage.RS; +import com.raoulvdberge.refinedstorage.RSBlocks; +import com.raoulvdberge.refinedstorage.api.network.item.INetworkItemProvider; +import com.raoulvdberge.refinedstorage.integration.forgeenergy.NetworkItemEnergyForge; +import com.raoulvdberge.refinedstorage.integration.ic2.IntegrationIC2; +import com.raoulvdberge.refinedstorage.integration.tesla.IntegrationTesla; +import com.raoulvdberge.refinedstorage.integration.tesla.NetworkItemEnergyTesla; +import com.raoulvdberge.refinedstorage.tile.TileController; +import com.raoulvdberge.refinedstorage.tile.grid.TileGrid; +import ic2.api.item.IElectricItemManager; +import ic2.api.item.ISpecialElectricItem; +import net.darkhax.tesla.capability.TeslaCapabilities; +import net.minecraft.block.Block; +import net.minecraft.client.resources.I18n; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.*; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.TextComponentTranslation; +import net.minecraft.world.World; +import net.minecraftforge.common.DimensionManager; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.capabilities.ICapabilityProvider; +import net.minecraftforge.energy.CapabilityEnergy; +import net.minecraftforge.fml.common.Optional; + +import javax.annotation.Nullable; +import java.util.List; + +@Optional.InterfaceList({ + @Optional.Interface(iface = "ic2.api.item.ISpecialElectricItem", modid = "IC2"), + @Optional.Interface(iface = "ic2.api.item.IElectricItemManager", modid = "IC2") +}) +public abstract class ItemNetworkItem extends ItemEnergyContainer implements INetworkItemProvider, ISpecialElectricItem, IElectricItemManager { + public static final int TYPE_NORMAL = 0; + public static final int TYPE_CREATIVE = 1; + + private static final String NBT_CONTROLLER_X = "ControllerX"; + private static final String NBT_CONTROLLER_Y = "ControllerY"; + private static final String NBT_CONTROLLER_Z = "ControllerZ"; + private static final String NBT_DIMENSION_ID = "DimensionID"; + + public ItemNetworkItem(String name) { + super(3200); + + setRegistryName(RS.ID, name); + setMaxDamage(3200); + setMaxStackSize(1); + setHasSubtypes(true); + setCreativeTab(RS.INSTANCE.tab); + addPropertyOverride(new ResourceLocation("connected"), (stack, world, entity) -> (entity != null && isValid(stack)) ? 1.0f : 0.0f); + } + + @Override + public ActionResult onItemRightClick(ItemStack stack, World world, EntityPlayer player, EnumHand hand) { + if (!world.isRemote && isValid(stack)) { + World controllerWorld = DimensionManager.getWorld(getDimensionId(stack)); + + TileEntity controller; + + if (controllerWorld != null && ((controller = controllerWorld.getTileEntity(new BlockPos(getX(stack), getY(stack), getZ(stack)))) instanceof TileController)) { + if (((TileController) controller).getNetworkItemHandler().onOpen(player, controllerWorld, hand)) { + return new ActionResult<>(EnumActionResult.SUCCESS, stack); + } else { + player.addChatComponentMessage(new TextComponentTranslation("misc.refinedstorage:network_item.out_of_range")); + } + } else { + player.addChatComponentMessage(new TextComponentTranslation("misc.refinedstorage:network_item.not_found")); + } + } + + return super.onItemRightClick(stack, world, player, hand); + } + + @Override + public ICapabilityProvider initCapabilities(ItemStack stack, NBTTagCompound nbt) { + return new NetworkItemCapabilityProvider(stack); + } + + @Override + public boolean isDamageable() { + return true; + } + + @Override + public boolean isRepairable() { + return false; + } + + @Override + public double getDurabilityForDisplay(ItemStack stack) { + return 1D - ((double) getEnergyStored(stack) / (double) getMaxEnergyStored(stack)); + } + + @Override + public boolean isDamaged(ItemStack stack) { + return stack.getItemDamage() != TYPE_CREATIVE; + } + + @Override + public void setDamage(ItemStack stack, int damage) { + // NO OP + } + + @Override + public void getSubItems(Item item, CreativeTabs tab, List list) { + list.add(new ItemStack(item, 1, TYPE_NORMAL)); + + ItemStack fullyCharged = new ItemStack(item, 1, TYPE_NORMAL); + receiveEnergy(fullyCharged, getMaxEnergyStored(fullyCharged), false); + list.add(fullyCharged); + + list.add(new ItemStack(item, 1, TYPE_CREATIVE)); + } + + @Override + public void addInformation(ItemStack stack, EntityPlayer player, List tooltip, boolean advanced) { + super.addInformation(stack, player, tooltip, advanced); + + if (stack.getItemDamage() != TYPE_CREATIVE) { + tooltip.add(I18n.format("misc.refinedstorage:energy_stored", getEnergyStored(stack), getMaxEnergyStored(stack))); + } + + if (isValid(stack)) { + tooltip.add(I18n.format("misc.refinedstorage:network_item.tooltip", getX(stack), getY(stack), getZ(stack))); + } + } + + @Override + public EnumActionResult onItemUse(ItemStack stack, EntityPlayer player, World world, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) { + Block block = world.getBlockState(pos).getBlock(); + + if (block == RSBlocks.CONTROLLER) { + NBTTagCompound tag = stack.getTagCompound(); + + if (tag == null) { + tag = new NBTTagCompound(); + } + + tag.setInteger(NBT_CONTROLLER_X, pos.getX()); + tag.setInteger(NBT_CONTROLLER_Y, pos.getY()); + tag.setInteger(NBT_CONTROLLER_Z, pos.getZ()); + tag.setInteger(NBT_DIMENSION_ID, player.dimension); + tag.setInteger(TileGrid.NBT_VIEW_TYPE, TileGrid.VIEW_TYPE_NORMAL); + tag.setInteger(TileGrid.NBT_SORTING_DIRECTION, TileGrid.SORTING_DIRECTION_DESCENDING); + tag.setInteger(TileGrid.NBT_SORTING_TYPE, TileGrid.SORTING_TYPE_NAME); + tag.setInteger(TileGrid.NBT_SEARCH_BOX_MODE, TileGrid.SEARCH_BOX_MODE_NORMAL); + + stack.setTagCompound(tag); + + return EnumActionResult.SUCCESS; + } + + return EnumActionResult.PASS; + } + + public static int getDimensionId(ItemStack stack) { + return stack.getTagCompound().getInteger(NBT_DIMENSION_ID); + } + + public static int getX(ItemStack stack) { + return stack.getTagCompound().getInteger(NBT_CONTROLLER_X); + } + + public static int getY(ItemStack stack) { + return stack.getTagCompound().getInteger(NBT_CONTROLLER_Y); + } + + public static int getZ(ItemStack stack) { + return stack.getTagCompound().getInteger(NBT_CONTROLLER_Z); + } + + @Override + public boolean shouldCauseReequipAnimation(ItemStack oldStack, ItemStack newStack, boolean slotChanged) { + if (oldStack.getItem() == newStack.getItem()) { + if (isValid(oldStack) && isValid(newStack)) { + if (getX(oldStack) == getX(newStack) && getY(oldStack) == getY(newStack) && getZ(oldStack) == getZ(newStack) && getDimensionId(oldStack) == getDimensionId(newStack)) { + return false; + } + } + } + + return super.shouldCauseReequipAnimation(oldStack, newStack, slotChanged); + } + + @Override + public String getUnlocalizedName() { + return "item." + RS.ID + ":" + getRegistryName().getResourcePath(); + } + + @Override + public String getUnlocalizedName(ItemStack stack) { + return getUnlocalizedName() + "." + stack.getItemDamage(); + } + + @Optional.Method(modid = "IC2") + @Override + public IElectricItemManager getManager(ItemStack stack) { + return this; + } + + @Optional.Method(modid = "IC2") + @Override + public double charge(ItemStack stack, double amount, int tier, boolean ignoreTransferLimit, boolean simulate) { + return IntegrationIC2.toEU(receiveEnergy(stack, IntegrationIC2.toRS(amount), simulate)); + } + + @Optional.Method(modid = "IC2") + @Override + public double discharge(ItemStack stack, double amount, int tier, boolean ignoreTransferLimit, boolean externally, boolean simulate) { + return IntegrationIC2.toEU(extractEnergy(stack, IntegrationIC2.toRS(amount), simulate)); + } + + @Optional.Method(modid = "IC2") + @Override + public double getCharge(ItemStack stack) { + return IntegrationIC2.toEU(getEnergyStored(stack)); + } + + @Optional.Method(modid = "IC2") + @Override + public double getMaxCharge(ItemStack stack) { + return IntegrationIC2.toEU(getMaxEnergyStored(stack)); + } + + @Optional.Method(modid = "IC2") + @Override + public boolean canUse(ItemStack stack, double amount) { + return true; + } + + @Optional.Method(modid = "IC2") + @Override + public boolean use(ItemStack stack, double amount, EntityLivingBase entity) { + return true; + } + + @Optional.Method(modid = "IC2") + @Override + public void chargeFromArmor(ItemStack stack, EntityLivingBase entity) { + // NO OP + } + + @Optional.Method(modid = "IC2") + @Override + public String getToolTip(ItemStack stack) { + return null; + } + + @Optional.Method(modid = "IC2") + @Override + public int getTier(ItemStack stack) { + return Integer.MAX_VALUE; + } + + public boolean isValid(ItemStack stack) { + return stack.hasTagCompound() + && stack.getTagCompound().hasKey(NBT_CONTROLLER_X) + && stack.getTagCompound().hasKey(NBT_CONTROLLER_Y) + && stack.getTagCompound().hasKey(NBT_CONTROLLER_Z) + && stack.getTagCompound().hasKey(NBT_DIMENSION_ID); + } + + private class NetworkItemCapabilityProvider implements ICapabilityProvider { + private ItemStack stack; + + public NetworkItemCapabilityProvider(ItemStack stack) { + this.stack = stack; + } + + @Override + public boolean hasCapability(Capability capability, @Nullable EnumFacing facing) { + return capability == CapabilityEnergy.ENERGY || + (IntegrationTesla.isLoaded() && (capability == TeslaCapabilities.CAPABILITY_HOLDER || capability == TeslaCapabilities.CAPABILITY_CONSUMER)); + } + + @Override + public T getCapability(Capability capability, @Nullable EnumFacing facing) { + if (capability == CapabilityEnergy.ENERGY) { + return (T) new NetworkItemEnergyForge(stack); + } + + if (IntegrationTesla.isLoaded() && (capability == TeslaCapabilities.CAPABILITY_HOLDER || capability == TeslaCapabilities.CAPABILITY_CONSUMER)) { + return (T) new NetworkItemEnergyTesla(stack); + } + + return null; + } + } +} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/item/ItemWirelessGrid.java b/src/main/java/com/raoulvdberge/refinedstorage/item/ItemWirelessGrid.java index 49614d89b..a2f9bf394 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/item/ItemWirelessGrid.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/item/ItemWirelessGrid.java @@ -1,180 +1,15 @@ package com.raoulvdberge.refinedstorage.item; -import cofh.api.energy.ItemEnergyContainer; -import com.raoulvdberge.refinedstorage.RS; -import com.raoulvdberge.refinedstorage.RSBlocks; -import com.raoulvdberge.refinedstorage.integration.forgeenergy.WirelessGridEnergyForge; -import com.raoulvdberge.refinedstorage.integration.ic2.IntegrationIC2; -import com.raoulvdberge.refinedstorage.integration.tesla.IntegrationTesla; -import com.raoulvdberge.refinedstorage.integration.tesla.WirelessGridEnergyTesla; -import com.raoulvdberge.refinedstorage.tile.TileController; +import com.raoulvdberge.refinedstorage.api.network.item.INetworkItem; +import com.raoulvdberge.refinedstorage.api.network.item.INetworkItemHandler; +import com.raoulvdberge.refinedstorage.apiimpl.network.item.NetworkItemWirelessGrid; import com.raoulvdberge.refinedstorage.tile.grid.TileGrid; -import ic2.api.item.IElectricItemManager; -import ic2.api.item.ISpecialElectricItem; -import net.darkhax.tesla.capability.TeslaCapabilities; -import net.minecraft.block.Block; -import net.minecraft.client.resources.I18n; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.*; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.text.TextComponentTranslation; -import net.minecraft.world.World; -import net.minecraftforge.common.DimensionManager; -import net.minecraftforge.common.capabilities.Capability; -import net.minecraftforge.common.capabilities.ICapabilityProvider; -import net.minecraftforge.energy.CapabilityEnergy; -import net.minecraftforge.fml.common.Optional; - -import javax.annotation.Nullable; -import java.util.List; - -@Optional.InterfaceList({ - @Optional.Interface(iface = "ic2.api.item.ISpecialElectricItem", modid = "IC2"), - @Optional.Interface(iface = "ic2.api.item.IElectricItemManager", modid = "IC2") -}) -public class ItemWirelessGrid extends ItemEnergyContainer implements ISpecialElectricItem, IElectricItemManager { - public static final int TYPE_NORMAL = 0; - public static final int TYPE_CREATIVE = 1; - - private static final String NBT_CONTROLLER_X = "ControllerX"; - private static final String NBT_CONTROLLER_Y = "ControllerY"; - private static final String NBT_CONTROLLER_Z = "ControllerZ"; - private static final String NBT_DIMENSION_ID = "DimensionID"; +public class ItemWirelessGrid extends ItemNetworkItem { public ItemWirelessGrid() { - super(3200); - - setRegistryName(RS.ID, "wireless_grid"); - setMaxDamage(3200); - setMaxStackSize(1); - setHasSubtypes(true); - setCreativeTab(RS.INSTANCE.tab); - addPropertyOverride(new ResourceLocation("connected"), (stack, world, entity) -> (entity != null && isValid(stack)) ? 1.0f : 0.0f); - } - - @Override - public ICapabilityProvider initCapabilities(ItemStack stack, NBTTagCompound nbt) { - return new WirelessGridCapabilityProvider(stack); - } - - @Override - public boolean isDamageable() { - return true; - } - - @Override - public boolean isRepairable() { - return false; - } - - @Override - public double getDurabilityForDisplay(ItemStack stack) { - return 1D - ((double) getEnergyStored(stack) / (double) getMaxEnergyStored(stack)); - } - - @Override - public boolean isDamaged(ItemStack stack) { - return stack.getItemDamage() != TYPE_CREATIVE; - } - - @Override - public void setDamage(ItemStack stack, int damage) { - // NO OP - } - - @Override - public void getSubItems(Item item, CreativeTabs tab, List list) { - list.add(new ItemStack(item, 1, TYPE_NORMAL)); - - ItemStack fullyCharged = new ItemStack(item, 1, TYPE_NORMAL); - receiveEnergy(fullyCharged, getMaxEnergyStored(fullyCharged), false); - list.add(fullyCharged); - - list.add(new ItemStack(item, 1, TYPE_CREATIVE)); - } - - @Override - public void addInformation(ItemStack stack, EntityPlayer player, List tooltip, boolean advanced) { - super.addInformation(stack, player, tooltip, advanced); - - if (stack.getItemDamage() != TYPE_CREATIVE) { - tooltip.add(I18n.format("misc.refinedstorage:energy_stored", getEnergyStored(stack), getMaxEnergyStored(stack))); - } - - if (isValid(stack)) { - tooltip.add(I18n.format("misc.refinedstorage:wireless_grid.tooltip", getX(stack), getY(stack), getZ(stack))); - } - } - - @Override - public EnumActionResult onItemUse(ItemStack stack, EntityPlayer player, World world, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) { - Block block = world.getBlockState(pos).getBlock(); - - if (block == RSBlocks.CONTROLLER) { - NBTTagCompound tag = stack.getTagCompound(); - - if (tag == null) { - tag = new NBTTagCompound(); - } - - tag.setInteger(NBT_CONTROLLER_X, pos.getX()); - tag.setInteger(NBT_CONTROLLER_Y, pos.getY()); - tag.setInteger(NBT_CONTROLLER_Z, pos.getZ()); - tag.setInteger(NBT_DIMENSION_ID, player.dimension); - tag.setInteger(TileGrid.NBT_VIEW_TYPE, TileGrid.VIEW_TYPE_NORMAL); - tag.setInteger(TileGrid.NBT_SORTING_DIRECTION, TileGrid.SORTING_DIRECTION_DESCENDING); - tag.setInteger(TileGrid.NBT_SORTING_TYPE, TileGrid.SORTING_TYPE_NAME); - tag.setInteger(TileGrid.NBT_SEARCH_BOX_MODE, TileGrid.SEARCH_BOX_MODE_NORMAL); - - stack.setTagCompound(tag); - - return EnumActionResult.SUCCESS; - } - - return EnumActionResult.PASS; - } - - @Override - public ActionResult onItemRightClick(ItemStack stack, World world, EntityPlayer player, EnumHand hand) { - if (!world.isRemote && isValid(stack)) { - World controllerWorld = DimensionManager.getWorld(getDimensionId(stack)); - - TileEntity controller; - - if (controllerWorld != null && ((controller = controllerWorld.getTileEntity(new BlockPos(getX(stack), getY(stack), getZ(stack)))) instanceof TileController)) { - if (((TileController) controller).getWirelessGridHandler().onOpen(player, controllerWorld, hand)) { - return new ActionResult<>(EnumActionResult.SUCCESS, stack); - } else { - player.addChatComponentMessage(new TextComponentTranslation("misc.refinedstorage:wireless_grid.out_of_range")); - } - } else { - player.addChatComponentMessage(new TextComponentTranslation("misc.refinedstorage:wireless_grid.not_found")); - } - } - - return super.onItemRightClick(stack, world, player, hand); - } - - public static int getDimensionId(ItemStack stack) { - return stack.getTagCompound().getInteger(NBT_DIMENSION_ID); - } - - public static int getX(ItemStack stack) { - return stack.getTagCompound().getInteger(NBT_CONTROLLER_X); - } - - public static int getY(ItemStack stack) { - return stack.getTagCompound().getInteger(NBT_CONTROLLER_Y); - } - - public static int getZ(ItemStack stack) { - return stack.getTagCompound().getInteger(NBT_CONTROLLER_Z); + super("wireless_grid"); } public static int getViewType(ItemStack stack) { @@ -193,12 +28,8 @@ public class ItemWirelessGrid extends ItemEnergyContainer implements ISpecialEle return stack.getTagCompound().getInteger(TileGrid.NBT_SEARCH_BOX_MODE); } - private static boolean isValid(ItemStack stack) { - return stack.hasTagCompound() - && stack.getTagCompound().hasKey(NBT_CONTROLLER_X) - && stack.getTagCompound().hasKey(NBT_CONTROLLER_Y) - && stack.getTagCompound().hasKey(NBT_CONTROLLER_Z) - && stack.getTagCompound().hasKey(NBT_DIMENSION_ID) + public boolean isValid(ItemStack stack) { + return super.isValid(stack) && stack.getTagCompound().hasKey(TileGrid.NBT_VIEW_TYPE) && stack.getTagCompound().hasKey(TileGrid.NBT_SORTING_DIRECTION) && stack.getTagCompound().hasKey(TileGrid.NBT_SORTING_TYPE) @@ -206,112 +37,7 @@ public class ItemWirelessGrid extends ItemEnergyContainer implements ISpecialEle } @Override - public boolean shouldCauseReequipAnimation(ItemStack oldStack, ItemStack newStack, boolean slotChanged) { - if (oldStack.getItem() == newStack.getItem()) { - if (isValid(oldStack) && isValid(newStack)) { - if (getX(oldStack) == getX(newStack) && getY(oldStack) == getY(newStack) && getZ(oldStack) == getZ(newStack) && getDimensionId(oldStack) == getDimensionId(newStack)) { - return false; - } - } - } - - return super.shouldCauseReequipAnimation(oldStack, newStack, slotChanged); - } - - @Override - public String getUnlocalizedName() { - return "item." + RS.ID + ":wireless_grid"; - } - - @Override - public String getUnlocalizedName(ItemStack stack) { - return getUnlocalizedName() + "." + stack.getItemDamage(); - } - - @Optional.Method(modid = "IC2") - @Override - public IElectricItemManager getManager(ItemStack stack) { - return this; - } - - @Optional.Method(modid = "IC2") - @Override - public double charge(ItemStack stack, double amount, int tier, boolean ignoreTransferLimit, boolean simulate) { - return IntegrationIC2.toEU(receiveEnergy(stack, IntegrationIC2.toRS(amount), simulate)); - } - - @Optional.Method(modid = "IC2") - @Override - public double discharge(ItemStack stack, double amount, int tier, boolean ignoreTransferLimit, boolean externally, boolean simulate) { - return IntegrationIC2.toEU(extractEnergy(stack, IntegrationIC2.toRS(amount), simulate)); - } - - @Optional.Method(modid = "IC2") - @Override - public double getCharge(ItemStack stack) { - return IntegrationIC2.toEU(getEnergyStored(stack)); - } - - @Optional.Method(modid = "IC2") - @Override - public double getMaxCharge(ItemStack stack) { - return IntegrationIC2.toEU(getMaxEnergyStored(stack)); - } - - @Optional.Method(modid = "IC2") - @Override - public boolean canUse(ItemStack stack, double amount) { - return true; - } - - @Optional.Method(modid = "IC2") - @Override - public boolean use(ItemStack stack, double amount, EntityLivingBase entity) { - return true; - } - - @Optional.Method(modid = "IC2") - @Override - public void chargeFromArmor(ItemStack stack, EntityLivingBase entity) { - // NO OP - } - - @Optional.Method(modid = "IC2") - @Override - public String getToolTip(ItemStack stack) { - return null; - } - - @Optional.Method(modid = "IC2") - @Override - public int getTier(ItemStack stack) { - return Integer.MAX_VALUE; - } - - class WirelessGridCapabilityProvider implements ICapabilityProvider { - private ItemStack stack; - - public WirelessGridCapabilityProvider(ItemStack stack) { - this.stack = stack; - } - - @Override - public boolean hasCapability(Capability capability, @Nullable EnumFacing facing) { - return capability == CapabilityEnergy.ENERGY || - (IntegrationTesla.isLoaded() && (capability == TeslaCapabilities.CAPABILITY_HOLDER || capability == TeslaCapabilities.CAPABILITY_CONSUMER)); - } - - @Override - public T getCapability(Capability capability, @Nullable EnumFacing facing) { - if (capability == CapabilityEnergy.ENERGY) { - return (T) new WirelessGridEnergyForge(stack); - } - - if (IntegrationTesla.isLoaded() && (capability == TeslaCapabilities.CAPABILITY_HOLDER || capability == TeslaCapabilities.CAPABILITY_CONSUMER)) { - return (T) new WirelessGridEnergyTesla(stack); - } - - return null; - } + public INetworkItem provide(INetworkItemHandler handler, EntityPlayer player, ItemStack stack) { + return new NetworkItemWirelessGrid(handler, player, stack); } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/TileController.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/TileController.java index f37db28f2..78e204444 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/TileController.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/TileController.java @@ -14,9 +14,9 @@ import com.raoulvdberge.refinedstorage.api.autocrafting.task.ICraftingTask; import com.raoulvdberge.refinedstorage.api.network.INetworkMaster; import com.raoulvdberge.refinedstorage.api.network.INetworkNode; import com.raoulvdberge.refinedstorage.api.network.INetworkNodeGraph; -import com.raoulvdberge.refinedstorage.api.network.IWirelessGridHandler; import com.raoulvdberge.refinedstorage.api.network.grid.IFluidGridHandler; import com.raoulvdberge.refinedstorage.api.network.grid.IItemGridHandler; +import com.raoulvdberge.refinedstorage.api.network.item.INetworkItemHandler; import com.raoulvdberge.refinedstorage.api.storage.AccessType; import com.raoulvdberge.refinedstorage.api.storage.IStorage; import com.raoulvdberge.refinedstorage.api.storage.fluid.IFluidStorage; @@ -27,9 +27,9 @@ import com.raoulvdberge.refinedstorage.api.util.IComparer; import com.raoulvdberge.refinedstorage.api.util.IItemStackList; import com.raoulvdberge.refinedstorage.apiimpl.API; import com.raoulvdberge.refinedstorage.apiimpl.network.NetworkNodeGraph; -import com.raoulvdberge.refinedstorage.apiimpl.network.WirelessGridHandler; import com.raoulvdberge.refinedstorage.apiimpl.network.grid.FluidGridHandler; import com.raoulvdberge.refinedstorage.apiimpl.network.grid.ItemGridHandler; +import com.raoulvdberge.refinedstorage.apiimpl.network.item.NetworkItemHandler; import com.raoulvdberge.refinedstorage.apiimpl.storage.fluid.FluidStorageCache; import com.raoulvdberge.refinedstorage.apiimpl.storage.item.ItemStorageCache; import com.raoulvdberge.refinedstorage.block.BlockController; @@ -158,7 +158,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR private IItemGridHandler itemGridHandler = new ItemGridHandler(this); private IFluidGridHandler fluidGridHandler = new FluidGridHandler(this); - private IWirelessGridHandler wirelessGridHandler = new WirelessGridHandler(this); + private INetworkItemHandler networkItemHandler = new NetworkItemHandler(this); private INetworkNodeGraph nodeGraph = new NetworkNodeGraph(this); @@ -296,7 +296,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR } - wirelessGridHandler.update(); + networkItemHandler.update(); if (getType() == EnumControllerType.NORMAL) { if (!RS.INSTANCE.config.controllerUsesEnergy) { @@ -349,8 +349,8 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR } @Override - public IWirelessGridHandler getWirelessGridHandler() { - return wirelessGridHandler; + public INetworkItemHandler getNetworkItemHandler() { + return networkItemHandler; } @Override 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 101caac87..0f66a076b 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/WirelessGrid.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/WirelessGrid.java @@ -180,7 +180,7 @@ public class WirelessGrid implements IGrid { TileController controller = getController(); if (controller != null) { - controller.getWirelessGridHandler().onClose(player); + controller.getNetworkItemHandler().onClose(player); } } diff --git a/src/main/resources/assets/refinedstorage/lang/de_DE.lang b/src/main/resources/assets/refinedstorage/lang/de_DE.lang index faa7a3933..a680f9603 100755 --- a/src/main/resources/assets/refinedstorage/lang/de_DE.lang +++ b/src/main/resources/assets/refinedstorage/lang/de_DE.lang @@ -50,9 +50,9 @@ misc.refinedstorage:storage.stored_minimal=%s misc.refinedstorage:storage.stored_capacity_minimal=%s / %s misc.refinedstorage:storage.full=%d%% voll -misc.refinedstorage:wireless_grid.tooltip=Verbunden mit %d, %d, %d. -misc.refinedstorage:wireless_grid.out_of_range=Es gibt keine Verbindung zu einem kabellosen Übermittler. -misc.refinedstorage:wireless_grid.not_found=Controller konnte nicht gefunden werden. +misc.refinedstorage:network_item.tooltip=Verbunden mit %d, %d, %d. +misc.refinedstorage:network_item.out_of_range=Es gibt keine Verbindung zu einem kabellosen Übermittler. +misc.refinedstorage:network_item.not_found=Controller konnte nicht gefunden werden. misc.refinedstorage:network_card.tooltip=Verbunden mit %d, %d, %d. diff --git a/src/main/resources/assets/refinedstorage/lang/en_US.lang b/src/main/resources/assets/refinedstorage/lang/en_US.lang index a6ec064e3..ab103df79 100755 --- a/src/main/resources/assets/refinedstorage/lang/en_US.lang +++ b/src/main/resources/assets/refinedstorage/lang/en_US.lang @@ -63,9 +63,9 @@ misc.refinedstorage:storage.stored_minimal=%s misc.refinedstorage:storage.stored_capacity_minimal=%s / %s misc.refinedstorage:storage.full=%d%% full -misc.refinedstorage:wireless_grid.tooltip=Linked to %d, %d, %d. -misc.refinedstorage:wireless_grid.out_of_range=There is no Wireless Transmitter in range. -misc.refinedstorage:wireless_grid.not_found=Controller not found. +misc.refinedstorage:network_item.tooltip=Linked to %d, %d, %d. +misc.refinedstorage:network_item.out_of_range=There is no Wireless Transmitter in range. +misc.refinedstorage:network_item.not_found=Controller not found. misc.refinedstorage:network_card.tooltip=Linked to %d, %d, %d. diff --git a/src/main/resources/assets/refinedstorage/lang/fr_FR.lang b/src/main/resources/assets/refinedstorage/lang/fr_FR.lang index f389a9024..68f4c543d 100755 --- a/src/main/resources/assets/refinedstorage/lang/fr_FR.lang +++ b/src/main/resources/assets/refinedstorage/lang/fr_FR.lang @@ -38,8 +38,8 @@ misc.refinedstorage:storage.stored_minimal=%s misc.refinedstorage:storage.stored_capacity_minimal=%s / %s misc.refinedstorage:storage.full=%d%% plein -misc.refinedstorage:wireless_grid.out_of_range=Il n'y a pas un Émetteur sans Fil dans la gamme. -misc.refinedstorage:wireless_grid.not_found=Contrôleur non trouvé. +misc.refinedstorage:network_item.out_of_range=Il n'y a pas un Émetteur sans Fil dans la gamme. +misc.refinedstorage:network_item.not_found=Contrôleur non trouvé. misc.refinedstorage:pattern.inputs=Inputs misc.refinedstorage:pattern.outputs=Outputs diff --git a/src/main/resources/assets/refinedstorage/lang/nl_NL.lang b/src/main/resources/assets/refinedstorage/lang/nl_NL.lang index e8ad0e984..8291d7504 100755 --- a/src/main/resources/assets/refinedstorage/lang/nl_NL.lang +++ b/src/main/resources/assets/refinedstorage/lang/nl_NL.lang @@ -52,9 +52,9 @@ misc.refinedstorage:storage.stored_minimal=%s misc.refinedstorage:storage.stored_capacity_minimal=%s / %s misc.refinedstorage:storage.full=%d%% vol -misc.refinedstorage:wireless_grid.tooltip=Gelinkt aan %d, %d, %d. -misc.refinedstorage:wireless_grid.out_of_range=Er is geen Draadloze Zender binnen bereik. -misc.refinedstorage:wireless_grid.not_found=Controller niet gevonden. +misc.refinedstorage:network_item.tooltip=Gelinkt aan %d, %d, %d. +misc.refinedstorage:network_item.out_of_range=Er is geen Draadloze Zender binnen bereik. +misc.refinedstorage:network_item.not_found=Controller niet gevonden. misc.refinedstorage:network_card.tooltip=Gelinkt aan %d, %d, %d. diff --git a/src/main/resources/assets/refinedstorage/lang/pt_BR.lang b/src/main/resources/assets/refinedstorage/lang/pt_BR.lang index 048a88c19..dc7ad224b 100755 --- a/src/main/resources/assets/refinedstorage/lang/pt_BR.lang +++ b/src/main/resources/assets/refinedstorage/lang/pt_BR.lang @@ -38,8 +38,8 @@ misc.refinedstorage:storage.stored_minimal=%s misc.refinedstorage:storage.stored_capacity_minimal=%s / %s misc.refinedstorage:storage.full=%d%% full -misc.refinedstorage:wireless_grid.out_of_range=Não há Transmissor Sem Fio na gama. -misc.refinedstorage:wireless_grid.not_found=Controlador não encontrado. +misc.refinedstorage:network_item.out_of_range=Não há Transmissor Sem Fio na gama. +misc.refinedstorage:network_item.not_found=Controlador não encontrado. misc.refinedstorage:pattern.inputs=Entrada misc.refinedstorage:pattern.outputs=Saída diff --git a/src/main/resources/assets/refinedstorage/lang/ru_RU.lang b/src/main/resources/assets/refinedstorage/lang/ru_RU.lang index 012e734f7..97d8174dd 100755 --- a/src/main/resources/assets/refinedstorage/lang/ru_RU.lang +++ b/src/main/resources/assets/refinedstorage/lang/ru_RU.lang @@ -50,9 +50,9 @@ misc.refinedstorage:storage.stored_minimal=%s misc.refinedstorage:storage.stored_capacity_minimal=%s / %s misc.refinedstorage:storage.full=%d%% полный -misc.refinedstorage:wireless_grid.tooltip=Привязано к %d, %d, %d. -misc.refinedstorage:wireless_grid.out_of_range=Не найден Передатчик -misc.refinedstorage:wireless_grid.not_found=Не найден Контроллер +misc.refinedstorage:network_item.tooltip=Привязано к %d, %d, %d. +misc.refinedstorage:network_item.out_of_range=Не найден Передатчик +misc.refinedstorage:network_item.not_found=Не найден Контроллер misc.refinedstorage:network_card.tooltip=Привязано к %d, %d, %d. diff --git a/src/main/resources/assets/refinedstorage/lang/zh_CN.lang b/src/main/resources/assets/refinedstorage/lang/zh_CN.lang index 2db71e467..ce4b9c1aa 100755 --- a/src/main/resources/assets/refinedstorage/lang/zh_CN.lang +++ b/src/main/resources/assets/refinedstorage/lang/zh_CN.lang @@ -52,9 +52,9 @@ misc.refinedstorage:storage.stored_minimal=%s misc.refinedstorage:storage.stored_capacity_minimal=%s / %s misc.refinedstorage:storage.full=%d%% 已使用 -misc.refinedstorage:wireless_grid.tooltip=连接到 %d, %d, %d. -misc.refinedstorage:wireless_grid.out_of_range=在范围内没有可以接入的无线访问点. -misc.refinedstorage:wireless_grid.not_found=没寻找到控制器. +misc.refinedstorage:network_item.tooltip=连接到 %d, %d, %d. +misc.refinedstorage:network_item.out_of_range=在范围内没有可以接入的无线访问点. +misc.refinedstorage:network_item.not_found=没寻找到控制器. misc.refinedstorage:network_card.tooltip=连接到 %d, %d, %d.