From fc4eb5f5938d71a717b22685598d30ee33ff10e3 Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Tue, 18 Jul 2017 22:40:31 +0200 Subject: [PATCH] Fixed Wireless Crafting Monitor remaining in network item list --- CHANGELOG.md | 1 + .../api/network/item/INetworkItemHandler.java | 5 --- .../network/item/NetworkItemHandler.java | 34 ++++--------------- .../node/NetworkNodeCraftingMonitor.java | 5 +++ .../container/ContainerCraftingMonitor.java | 9 +++++ .../refinedstorage/tile/TileController.java | 2 -- .../craftingmonitor/ICraftingMonitor.java | 3 ++ .../WirelessCraftingMonitor.java | 10 ++++++ 8 files changed, 34 insertions(+), 35 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ecb9fe7b2..7ff04ba43 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ ### 1.5.13 - Fixed Wireless Fluid Grid not using up energy (raoulvdberge) +- Fixed Wireless Crafting Monitor remaining in network item list (raoulvdberge) ### 1.5.12 - The Network Transmitter now uses 1 FE/t per block instead of 4 FE/t (raoulvdberge) 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 ec6a7d0bf..637ceacb6 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 @@ -10,11 +10,6 @@ import javax.annotation.Nullable; * It stores which player is currently using what network item. */ public interface INetworkItemHandler { - /** - * Called every network tick. - */ - void update(); - /** * Called when a player opens a network item. * 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 3be5a021f..320599f71 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 @@ -10,26 +10,18 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.util.EnumHand; import net.minecraft.util.text.TextComponentTranslation; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; public class NetworkItemHandler implements INetworkItemHandler { private INetwork network; - private List items = new ArrayList<>(); - private List itemsToRemove = new ArrayList<>(); + private Map items = new ConcurrentHashMap<>(); public NetworkItemHandler(INetwork network) { this.network = network; } - @Override - public void update() { - items.removeAll(itemsToRemove); - itemsToRemove.clear(); - } - @Override public void onOpen(EntityPlayer player, EnumHand hand) { boolean inRange = false; @@ -57,31 +49,17 @@ public class NetworkItemHandler implements INetworkItemHandler { INetworkItem item = ((INetworkItemProvider) player.getHeldItem(hand).getItem()).provide(this, player, player.getHeldItem(hand)); if (item.onOpen(network, player, hand)) { - items.add(item); + items.put(player, item); } } @Override public void onClose(EntityPlayer player) { - INetworkItem item = getItem(player); - - if (item != null) { - itemsToRemove.add(item); - } + items.remove(player); } @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; + return items.get(player); } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeCraftingMonitor.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeCraftingMonitor.java index 975c7162a..24e166470 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeCraftingMonitor.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeCraftingMonitor.java @@ -128,6 +128,11 @@ public class NetworkNodeCraftingMonitor extends NetworkNode implements ICrafting TileDataManager.setParameter(TileCraftingMonitor.VIEW_AUTOMATED, viewAutomated); } + @Override + public void onClosed(EntityPlayer player) { + // NO OP + } + public void setViewAutomated(boolean viewAutomated) { this.viewAutomated = viewAutomated; } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/container/ContainerCraftingMonitor.java b/src/main/java/com/raoulvdberge/refinedstorage/container/ContainerCraftingMonitor.java index f217be14d..9eb40bada 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/container/ContainerCraftingMonitor.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/container/ContainerCraftingMonitor.java @@ -25,6 +25,15 @@ public class ContainerCraftingMonitor extends ContainerBase { addPlayerInventory(8, 148); } + @Override + public void onContainerClosed(EntityPlayer player) { + super.onContainerClosed(player); + + if (!player.getEntityWorld().isRemote) { + craftingMonitor.onClosed(player); + } + } + public ICraftingMonitor getCraftingMonitor() { return craftingMonitor; } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/TileController.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/TileController.java index a8139f762..b81bc4c81 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/TileController.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/TileController.java @@ -207,8 +207,6 @@ public class TileController extends TileBase implements ITickable, INetwork, IRe } } - networkItemHandler.update(); - if (getType() == ControllerType.NORMAL) { if (!RS.INSTANCE.config.controllerUsesEnergy) { energy.setEnergyStored(energy.getMaxEnergyStored()); 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 eda8b02f1..b69b55320 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/craftingmonitor/ICraftingMonitor.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/craftingmonitor/ICraftingMonitor.java @@ -4,6 +4,7 @@ import com.raoulvdberge.refinedstorage.api.autocrafting.task.ICraftingTask; import com.raoulvdberge.refinedstorage.api.util.IFilter; import com.raoulvdberge.refinedstorage.inventory.ItemHandlerBase; import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.util.math.BlockPos; @@ -31,4 +32,6 @@ public interface ICraftingMonitor { void onViewAutomatedChanged(boolean viewAutomated); boolean isActive(); + + void onClosed(EntityPlayer player); } 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 9e9fa232e..10b4176d0 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/craftingmonitor/WirelessCraftingMonitor.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/craftingmonitor/WirelessCraftingMonitor.java @@ -10,6 +10,7 @@ import com.raoulvdberge.refinedstorage.item.ItemWirelessCraftingMonitor; import com.raoulvdberge.refinedstorage.network.MessageWirelessCraftingMonitorViewAutomated; import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter; import com.raoulvdberge.refinedstorage.util.StackUtils; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; @@ -138,4 +139,13 @@ public class WirelessCraftingMonitor implements ICraftingMonitor { public boolean isActive() { return true; } + + @Override + public void onClosed(EntityPlayer player) { + INetwork network = getNetwork(); + + if (network != null) { + network.getNetworkItemHandler().onClose(player); + } + } }