Fixed Wireless Crafting Monitor remaining in network item list

This commit is contained in:
raoulvdberge
2017-07-18 22:40:31 +02:00
parent 4dc2e2e970
commit fc4eb5f593
8 changed files with 34 additions and 35 deletions

View File

@@ -2,6 +2,7 @@
### 1.5.13 ### 1.5.13
- Fixed Wireless Fluid Grid not using up energy (raoulvdberge) - Fixed Wireless Fluid Grid not using up energy (raoulvdberge)
- Fixed Wireless Crafting Monitor remaining in network item list (raoulvdberge)
### 1.5.12 ### 1.5.12
- The Network Transmitter now uses 1 FE/t per block instead of 4 FE/t (raoulvdberge) - The Network Transmitter now uses 1 FE/t per block instead of 4 FE/t (raoulvdberge)

View File

@@ -10,11 +10,6 @@ import javax.annotation.Nullable;
* It stores which player is currently using what network item. * It stores which player is currently using what network item.
*/ */
public interface INetworkItemHandler { public interface INetworkItemHandler {
/**
* Called every network tick.
*/
void update();
/** /**
* Called when a player opens a network item. * Called when a player opens a network item.
* *

View File

@@ -10,26 +10,18 @@ import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.util.EnumHand; import net.minecraft.util.EnumHand;
import net.minecraft.util.text.TextComponentTranslation; import net.minecraft.util.text.TextComponentTranslation;
import java.util.ArrayList; import java.util.Map;
import java.util.Iterator; import java.util.concurrent.ConcurrentHashMap;
import java.util.List;
public class NetworkItemHandler implements INetworkItemHandler { public class NetworkItemHandler implements INetworkItemHandler {
private INetwork network; private INetwork network;
private List<INetworkItem> items = new ArrayList<>(); private Map<EntityPlayer, INetworkItem> items = new ConcurrentHashMap<>();
private List<INetworkItem> itemsToRemove = new ArrayList<>();
public NetworkItemHandler(INetwork network) { public NetworkItemHandler(INetwork network) {
this.network = network; this.network = network;
} }
@Override
public void update() {
items.removeAll(itemsToRemove);
itemsToRemove.clear();
}
@Override @Override
public void onOpen(EntityPlayer player, EnumHand hand) { public void onOpen(EntityPlayer player, EnumHand hand) {
boolean inRange = false; 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)); INetworkItem item = ((INetworkItemProvider) player.getHeldItem(hand).getItem()).provide(this, player, player.getHeldItem(hand));
if (item.onOpen(network, player, hand)) { if (item.onOpen(network, player, hand)) {
items.add(item); items.put(player, item);
} }
} }
@Override @Override
public void onClose(EntityPlayer player) { public void onClose(EntityPlayer player) {
INetworkItem item = getItem(player); items.remove(player);
if (item != null) {
itemsToRemove.add(item);
}
} }
@Override @Override
public INetworkItem getItem(EntityPlayer player) { public INetworkItem getItem(EntityPlayer player) {
Iterator<INetworkItem> it = items.iterator(); return items.get(player);
while (it.hasNext()) {
INetworkItem item = it.next();
if (item.getPlayer() == player) {
return item;
}
}
return null;
} }
} }

View File

@@ -128,6 +128,11 @@ public class NetworkNodeCraftingMonitor extends NetworkNode implements ICrafting
TileDataManager.setParameter(TileCraftingMonitor.VIEW_AUTOMATED, viewAutomated); TileDataManager.setParameter(TileCraftingMonitor.VIEW_AUTOMATED, viewAutomated);
} }
@Override
public void onClosed(EntityPlayer player) {
// NO OP
}
public void setViewAutomated(boolean viewAutomated) { public void setViewAutomated(boolean viewAutomated) {
this.viewAutomated = viewAutomated; this.viewAutomated = viewAutomated;
} }

View File

@@ -25,6 +25,15 @@ public class ContainerCraftingMonitor extends ContainerBase {
addPlayerInventory(8, 148); addPlayerInventory(8, 148);
} }
@Override
public void onContainerClosed(EntityPlayer player) {
super.onContainerClosed(player);
if (!player.getEntityWorld().isRemote) {
craftingMonitor.onClosed(player);
}
}
public ICraftingMonitor getCraftingMonitor() { public ICraftingMonitor getCraftingMonitor() {
return craftingMonitor; return craftingMonitor;
} }

View File

@@ -207,8 +207,6 @@ public class TileController extends TileBase implements ITickable, INetwork, IRe
} }
} }
networkItemHandler.update();
if (getType() == ControllerType.NORMAL) { if (getType() == ControllerType.NORMAL) {
if (!RS.INSTANCE.config.controllerUsesEnergy) { if (!RS.INSTANCE.config.controllerUsesEnergy) {
energy.setEnergyStored(energy.getMaxEnergyStored()); energy.setEnergyStored(energy.getMaxEnergyStored());

View File

@@ -4,6 +4,7 @@ import com.raoulvdberge.refinedstorage.api.autocrafting.task.ICraftingTask;
import com.raoulvdberge.refinedstorage.api.util.IFilter; import com.raoulvdberge.refinedstorage.api.util.IFilter;
import com.raoulvdberge.refinedstorage.inventory.ItemHandlerBase; import com.raoulvdberge.refinedstorage.inventory.ItemHandlerBase;
import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter; import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
@@ -31,4 +32,6 @@ public interface ICraftingMonitor {
void onViewAutomatedChanged(boolean viewAutomated); void onViewAutomatedChanged(boolean viewAutomated);
boolean isActive(); boolean isActive();
void onClosed(EntityPlayer player);
} }

View File

@@ -10,6 +10,7 @@ import com.raoulvdberge.refinedstorage.item.ItemWirelessCraftingMonitor;
import com.raoulvdberge.refinedstorage.network.MessageWirelessCraftingMonitorViewAutomated; import com.raoulvdberge.refinedstorage.network.MessageWirelessCraftingMonitorViewAutomated;
import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter; import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter;
import com.raoulvdberge.refinedstorage.util.StackUtils; import com.raoulvdberge.refinedstorage.util.StackUtils;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagCompound;
@@ -138,4 +139,13 @@ public class WirelessCraftingMonitor implements ICraftingMonitor {
public boolean isActive() { public boolean isActive() {
return true; return true;
} }
@Override
public void onClosed(EntityPlayer player) {
INetwork network = getNetwork();
if (network != null) {
network.getNetworkItemHandler().onClose(player);
}
}
} }