diff --git a/src/main/java/com/raoulvdberge/refinedstorage/api/IRSAPI.java b/src/main/java/com/raoulvdberge/refinedstorage/api/IRSAPI.java
index cd50f25b4..f8d0dbf3f 100755
--- a/src/main/java/com/raoulvdberge/refinedstorage/api/IRSAPI.java
+++ b/src/main/java/com/raoulvdberge/refinedstorage/api/IRSAPI.java
@@ -96,6 +96,8 @@ public interface IRSAPI {
IReaderWriterHandlerRegistry getReaderWriterHandlerRegistry();
/**
+ * @param name the name of the channel
+ * @param network the network
* @return a new reader writer channel
*/
@Nonnull
diff --git a/src/main/java/com/raoulvdberge/refinedstorage/api/autocrafting/ICraftingManager.java b/src/main/java/com/raoulvdberge/refinedstorage/api/autocrafting/ICraftingManager.java
index a09d77967..0b03f2dba 100644
--- a/src/main/java/com/raoulvdberge/refinedstorage/api/autocrafting/ICraftingManager.java
+++ b/src/main/java/com/raoulvdberge/refinedstorage/api/autocrafting/ICraftingManager.java
@@ -3,6 +3,7 @@ package com.raoulvdberge.refinedstorage.api.autocrafting;
import com.raoulvdberge.refinedstorage.api.autocrafting.task.ICraftingTask;
import com.raoulvdberge.refinedstorage.api.util.IComparer;
import com.raoulvdberge.refinedstorage.api.util.IStackList;
+import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
@@ -216,4 +217,23 @@ public interface ICraftingManager {
* @return the written tag
*/
NBTTagCompound writeToNBT(NBTTagCompound tag);
+
+ /**
+ * Makes the network send a crafting monitor update to all players as soon as it can.
+ */
+ void markCraftingMonitorForUpdate();
+
+ /**
+ * Sends a crafting monitor update to all players that are watching a crafting monitor.
+ *
+ * WARNING: In most cases, you should just use {@link ICraftingManager#markCraftingMonitorForUpdate()}, if not, you can get high bandwidth usage.
+ */
+ void sendCraftingMonitorUpdate();
+
+ /**
+ * Sends a crafting monitor update to a specific player.
+ *
+ * @param player the player
+ */
+ void sendCraftingMonitorUpdate(EntityPlayerMP player);
}
diff --git a/src/main/java/com/raoulvdberge/refinedstorage/api/network/INetwork.java b/src/main/java/com/raoulvdberge/refinedstorage/api/network/INetwork.java
index 58c4b7a7d..984e10f68 100644
--- a/src/main/java/com/raoulvdberge/refinedstorage/api/network/INetwork.java
+++ b/src/main/java/com/raoulvdberge/refinedstorage/api/network/INetwork.java
@@ -4,13 +4,12 @@ import com.raoulvdberge.refinedstorage.api.autocrafting.ICraftingManager;
import com.raoulvdberge.refinedstorage.api.network.grid.handler.IFluidGridHandler;
import com.raoulvdberge.refinedstorage.api.network.grid.handler.IItemGridHandler;
import com.raoulvdberge.refinedstorage.api.network.item.INetworkItemHandler;
-import com.raoulvdberge.refinedstorage.api.network.readerwriter.IReaderWriterChannel;
+import com.raoulvdberge.refinedstorage.api.network.readerwriter.IReaderWriterManager;
import com.raoulvdberge.refinedstorage.api.network.security.ISecurityManager;
import com.raoulvdberge.refinedstorage.api.storage.IStorage;
import com.raoulvdberge.refinedstorage.api.storage.IStorageCache;
import com.raoulvdberge.refinedstorage.api.storage.IStorageTracker;
import com.raoulvdberge.refinedstorage.api.util.IComparer;
-import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.item.ItemStack;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
@@ -80,57 +79,9 @@ public interface INetwork {
IStorageCache getFluidStorageCache();
/**
- * Makes the network send a crafting monitor update to all players as soon as it can.
+ * @return the {@link IReaderWriterManager} of this network
*/
- void markCraftingMonitorForUpdate();
-
- /**
- * Sends a crafting monitor update to all players that are watching a crafting monitor.
- *
- * WARNING: In most cases, you should just use {@link INetwork#markCraftingMonitorForUpdate()}, if not,
- * you can get high bandwidth usage.
- */
- void sendCraftingMonitorUpdate();
-
- /**
- * Sends a crafting monitor update to a specific player.
- *
- * @param player the player
- */
- void sendCraftingMonitorUpdate(EntityPlayerMP player);
-
- /**
- * @param name the name of the reader writer channel
- * @return the reader writer channel, or null if nothing was found
- */
- @Nullable
- IReaderWriterChannel getReaderWriterChannel(String name);
-
- /**
- * Adds a new reader writer channel.
- *
- * @param name the name of this channel
- */
- void addReaderWriterChannel(String name);
-
- /**
- * Removes a reader writer channel.
- *
- * @param name the name of the channel to remove
- */
- void removeReaderWriterChannel(String name);
-
- /**
- * Sends a reader writer channel update to all players watching a reader or writer.
- */
- void sendReaderWriterChannelUpdate();
-
- /**
- * Sends a reader writer channel update to a specific player.
- *
- * @param player the player to send to
- */
- void sendReaderWriterChannelUpdate(EntityPlayerMP player);
+ IReaderWriterManager getReaderWriterManager();
/**
* Inserts an item in this network.
diff --git a/src/main/java/com/raoulvdberge/refinedstorage/api/network/grid/IGrid.java b/src/main/java/com/raoulvdberge/refinedstorage/api/network/grid/IGrid.java
index 52d8d26d0..6b371ee5b 100644
--- a/src/main/java/com/raoulvdberge/refinedstorage/api/network/grid/IGrid.java
+++ b/src/main/java/com/raoulvdberge/refinedstorage/api/network/grid/IGrid.java
@@ -50,6 +50,7 @@ public interface IGrid {
GridType getType();
/**
+ * @param player the player to create a listener for
* @return a listener for this grid, will be attached to the storage cache in {@link #getStorageCache()}
*/
IStorageCacheListener createListener(EntityPlayerMP player);
diff --git a/src/main/java/com/raoulvdberge/refinedstorage/api/network/grid/handler/IFluidGridHandler.java b/src/main/java/com/raoulvdberge/refinedstorage/api/network/grid/handler/IFluidGridHandler.java
index 328f50533..6f0eec45e 100644
--- a/src/main/java/com/raoulvdberge/refinedstorage/api/network/grid/handler/IFluidGridHandler.java
+++ b/src/main/java/com/raoulvdberge/refinedstorage/api/network/grid/handler/IFluidGridHandler.java
@@ -23,6 +23,7 @@ public interface IFluidGridHandler {
/**
* Called when a player tries to insert fluids in the grid.
*
+ * @param player the player
* @param container a stack with a fluid container we're trying to insert
* @return the remainder, or null if there is no remainder
*/
diff --git a/src/main/java/com/raoulvdberge/refinedstorage/api/network/readerwriter/IReaderWriterManager.java b/src/main/java/com/raoulvdberge/refinedstorage/api/network/readerwriter/IReaderWriterManager.java
new file mode 100644
index 000000000..6f7e7b284
--- /dev/null
+++ b/src/main/java/com/raoulvdberge/refinedstorage/api/network/readerwriter/IReaderWriterManager.java
@@ -0,0 +1,59 @@
+package com.raoulvdberge.refinedstorage.api.network.readerwriter;
+
+import net.minecraft.entity.player.EntityPlayerMP;
+import net.minecraft.nbt.NBTTagCompound;
+
+import javax.annotation.Nullable;
+
+/**
+ * A manager for the reader writer.
+ */
+public interface IReaderWriterManager {
+ /**
+ * Updates the channels.
+ */
+ void update();
+
+ /**
+ * @param name the name of the channel
+ * @return the channel, or null if nothing was found
+ */
+ @Nullable
+ IReaderWriterChannel getChannel(String name);
+
+ /**
+ * Adds a new channel.
+ *
+ * @param name the name of this channel
+ */
+ void addChannel(String name);
+
+ /**
+ * Removes a channel.
+ *
+ * @param name the name of the channel to remove
+ */
+ void removeChannel(String name);
+
+ /**
+ * Sends a channel update to all players watching a reader or writer.
+ */
+ void sendUpdate();
+
+ /**
+ * Sends a channel update to a specific player.
+ *
+ * @param player the player to send to
+ */
+ void sendUpdateTo(EntityPlayerMP player);
+
+ /**
+ * @param tag the tag to write to
+ */
+ void writeToNBT(NBTTagCompound tag);
+
+ /**
+ * @param tag the tag to read from
+ */
+ void readFromNBT(NBTTagCompound tag);
+}
diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/CraftingManager.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/CraftingManager.java
index 863cc1e3f..64a21dbdc 100644
--- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/CraftingManager.java
+++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/CraftingManager.java
@@ -1,5 +1,6 @@
package com.raoulvdberge.refinedstorage.apiimpl.autocrafting;
+import com.raoulvdberge.refinedstorage.RS;
import com.raoulvdberge.refinedstorage.api.autocrafting.*;
import com.raoulvdberge.refinedstorage.api.autocrafting.registry.ICraftingTaskFactory;
import com.raoulvdberge.refinedstorage.api.autocrafting.task.ICraftingStep;
@@ -10,7 +11,10 @@ import com.raoulvdberge.refinedstorage.api.network.node.INetworkNodeProxy;
import com.raoulvdberge.refinedstorage.api.util.IComparer;
import com.raoulvdberge.refinedstorage.api.util.IStackList;
import com.raoulvdberge.refinedstorage.apiimpl.API;
+import com.raoulvdberge.refinedstorage.container.ContainerCraftingMonitor;
+import com.raoulvdberge.refinedstorage.network.MessageCraftingMonitorElements;
import com.raoulvdberge.refinedstorage.tile.TileController;
+import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
@@ -37,6 +41,8 @@ public class CraftingManager implements ICraftingManager {
private List craftingTasksToRead = new ArrayList<>();
private List runningSteps = new ArrayList<>();
+ private boolean craftingMonitorUpdateRequested;
+
private int ticks;
public CraftingManager(TileController network) {
@@ -195,10 +201,16 @@ public class CraftingManager implements ICraftingManager {
.collect(Collectors.toList());
if (craftingTasksChanged) {
- network.getNetwork().markCraftingMonitorForUpdate();
+ markCraftingMonitorForUpdate();
}
}
}
+
+ if (craftingMonitorUpdateRequested) {
+ craftingMonitorUpdateRequested = false;
+
+ sendCraftingMonitorUpdate();
+ }
}
@Override
@@ -246,7 +258,7 @@ public class CraftingManager implements ICraftingManager {
add(task);
- network.markCraftingMonitorForUpdate();
+ markCraftingMonitorForUpdate();
return task;
}
@@ -280,6 +292,23 @@ public class CraftingManager implements ICraftingManager {
craftingTasks.forEach(t -> t.getMissing().clear());
}
+ @Override
+ public void markCraftingMonitorForUpdate() {
+ craftingMonitorUpdateRequested = true;
+ }
+
+ @Override
+ public void sendCraftingMonitorUpdate() {
+ network.world().getMinecraftServer().getPlayerList().getPlayers().stream()
+ .filter(player -> player.openContainer instanceof ContainerCraftingMonitor && network.getPosition().equals(((ContainerCraftingMonitor) player.openContainer).getCraftingMonitor().getNetworkPosition()))
+ .forEach(player -> RS.INSTANCE.network.sendTo(new MessageCraftingMonitorElements(((ContainerCraftingMonitor) player.openContainer).getCraftingMonitor()), player));
+ }
+
+ @Override
+ public void sendCraftingMonitorUpdate(EntityPlayerMP player) {
+ RS.INSTANCE.network.sendTo(new MessageCraftingMonitorElements(((ContainerCraftingMonitor) player.openContainer).getCraftingMonitor()), player);
+ }
+
private static ICraftingTask readCraftingTask(INetwork network, NBTTagCompound tag) {
ItemStack stack = new ItemStack(tag.getCompoundTag(ICraftingTask.NBT_PATTERN_STACK));
diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/CraftingStep.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/CraftingStep.java
index df1f98dab..9c92059e1 100755
--- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/CraftingStep.java
+++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/CraftingStep.java
@@ -183,7 +183,7 @@ public abstract class CraftingStep implements ICraftingStep {
stack.shrink(toReceive);
- network.markCraftingMonitorForUpdate();
+ network.getCraftingManager().markCraftingMonitorForUpdate();
if (stack.isEmpty()) {
return true;
diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/CraftingTask.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/CraftingTask.java
index 506c67033..52f13df29 100755
--- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/CraftingTask.java
+++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/autocrafting/task/CraftingTask.java
@@ -408,7 +408,7 @@ public class CraftingTask implements ICraftingTask {
}
}
- network.markCraftingMonitorForUpdate();
+ network.getCraftingManager().markCraftingMonitorForUpdate();
}
@Override
@@ -493,7 +493,7 @@ public class CraftingTask implements ICraftingTask {
usedContainers.put(container, timesUsed);
- network.markCraftingMonitorForUpdate();
+ network.getCraftingManager().markCraftingMonitorForUpdate();
}
}
}
@@ -542,7 +542,7 @@ public class CraftingTask implements ICraftingTask {
calculate();
}
- network.markCraftingMonitorForUpdate();
+ network.getCraftingManager().markCraftingMonitorForUpdate();
}
}
diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/item/NetworkItemWirelessCraftingMonitor.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/item/NetworkItemWirelessCraftingMonitor.java
index 62a390a47..2fc4816f2 100755
--- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/item/NetworkItemWirelessCraftingMonitor.java
+++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/item/NetworkItemWirelessCraftingMonitor.java
@@ -46,7 +46,7 @@ public class NetworkItemWirelessCraftingMonitor implements INetworkItem {
player.openGui(RS.INSTANCE, RSGui.WIRELESS_CRAFTING_MONITOR, player.getEntityWorld(), hand.ordinal(), network.world().provider.getDimension(), 0);
- network.sendCraftingMonitorUpdate((EntityPlayerMP) player);
+ network.getCraftingManager().sendCraftingMonitorUpdate((EntityPlayerMP) player);
drainEnergy(RS.INSTANCE.config.wirelessCraftingMonitorOpenUsage);
diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/IGuiReaderWriter.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/IGuiReaderWriter.java
index 9bfc939e4..bd21777a6 100644
--- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/IGuiReaderWriter.java
+++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/IGuiReaderWriter.java
@@ -22,7 +22,7 @@ public interface IGuiReaderWriter {
INetwork network = getNetwork();
if (network != null && !name.isEmpty()) {
- network.addReaderWriterChannel(name);
+ network.getReaderWriterManager().addChannel(name);
}
}
@@ -30,7 +30,7 @@ public interface IGuiReaderWriter {
INetwork network = getNetwork();
if (network != null && !name.isEmpty()) {
- network.removeReaderWriterChannel(name);
+ network.getReaderWriterManager().removeChannel(name);
}
}
}
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 24e166470..b1ef908dc 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
@@ -34,7 +34,7 @@ public class NetworkNodeCraftingMonitor extends NetworkNode implements ICrafting
filterListener.accept(slot);
if (network != null) {
- network.sendCraftingMonitorUpdate();
+ network.getCraftingManager().sendCraftingMonitorUpdate();
}
});
@@ -92,7 +92,7 @@ public class NetworkNodeCraftingMonitor extends NetworkNode implements ICrafting
public void onOpened(EntityPlayer player) {
if (network != null) {
- network.sendCraftingMonitorUpdate((EntityPlayerMP) player);
+ network.getCraftingManager().sendCraftingMonitorUpdate((EntityPlayerMP) player);
}
}
diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeReader.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeReader.java
index 8887c7913..61f2cfcb9 100755
--- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeReader.java
+++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeReader.java
@@ -86,7 +86,7 @@ public class NetworkNodeReader extends NetworkNode implements IReader, IGuiReade
public void onOpened(EntityPlayer entity) {
if (network != null) {
- network.sendReaderWriterChannelUpdate((EntityPlayerMP) entity);
+ network.getReaderWriterManager().sendUpdateTo((EntityPlayerMP) entity);
}
}
}
diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeWriter.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeWriter.java
index 708234756..e146a6785 100755
--- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeWriter.java
+++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeWriter.java
@@ -66,7 +66,7 @@ public class NetworkNodeWriter extends NetworkNode implements IWriter, IGuiReade
@Override
public void setChannel(String channel) {
if (network != null && channel.equals("")) {
- IReaderWriterChannel networkChannel = network.getReaderWriterChannel(this.channel);
+ IReaderWriterChannel networkChannel = network.getReaderWriterManager().getChannel(this.channel);
if (networkChannel != null) {
for (IReaderWriterHandler handler : networkChannel.getHandlers()) {
@@ -118,7 +118,7 @@ public class NetworkNodeWriter extends NetworkNode implements IWriter, IGuiReade
public void onOpened(EntityPlayer entity) {
if (network != null) {
- network.sendReaderWriterChannelUpdate((EntityPlayerMP) entity);
+ network.getReaderWriterManager().sendUpdateTo((EntityPlayerMP) entity);
}
}
}
diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/readerwriter/ReaderWriterManager.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/readerwriter/ReaderWriterManager.java
new file mode 100644
index 000000000..e9f19a212
--- /dev/null
+++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/readerwriter/ReaderWriterManager.java
@@ -0,0 +1,122 @@
+package com.raoulvdberge.refinedstorage.apiimpl.network.readerwriter;
+
+import com.raoulvdberge.refinedstorage.RS;
+import com.raoulvdberge.refinedstorage.api.network.INetwork;
+import com.raoulvdberge.refinedstorage.api.network.readerwriter.IReaderWriterChannel;
+import com.raoulvdberge.refinedstorage.api.network.readerwriter.IReaderWriterHandler;
+import com.raoulvdberge.refinedstorage.api.network.readerwriter.IReaderWriterManager;
+import com.raoulvdberge.refinedstorage.apiimpl.API;
+import com.raoulvdberge.refinedstorage.container.ContainerReaderWriter;
+import com.raoulvdberge.refinedstorage.network.MessageReaderWriterUpdate;
+import net.minecraft.entity.player.EntityPlayerMP;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.nbt.NBTTagList;
+import net.minecraftforge.common.util.Constants;
+
+import javax.annotation.Nullable;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Map;
+
+public class ReaderWriterManager implements IReaderWriterManager {
+ private static final String NBT_CHANNELS = "ReaderWriterChannels";
+ private static final String NBT_NAME = "Name";
+
+ private INetwork network;
+ private Runnable listener;
+ private Map channels = new HashMap<>();
+
+ public ReaderWriterManager(INetwork network, Runnable listener) {
+ this.network = network;
+ this.listener = listener;
+ }
+
+ @Override
+ public void update() {
+ for (IReaderWriterChannel channel : channels.values()) {
+ for (IReaderWriterHandler handler : channel.getHandlers()) {
+ handler.update(channel);
+ }
+ }
+ }
+
+ @Nullable
+ @Override
+ public IReaderWriterChannel getChannel(String name) {
+ return channels.get(name);
+ }
+
+ @Override
+ public void addChannel(String name) {
+ channels.put(name, API.instance().createReaderWriterChannel(name, network));
+
+ listener.run();
+
+ sendUpdate();
+ }
+
+ @Override
+ public void removeChannel(String name) {
+ IReaderWriterChannel channel = getChannel(name);
+
+ if (channel != null) {
+ channel.getReaders().forEach(reader -> reader.setChannel(""));
+ channel.getWriters().forEach(writer -> writer.setChannel(""));
+
+ channels.remove(name);
+
+ listener.run();
+
+ sendUpdate();
+ }
+ }
+
+ @Override
+ public void sendUpdate() {
+ // @todo: Move to a listener system
+ network.world().getMinecraftServer().getPlayerList().getPlayers().stream()
+ .filter(player -> player.openContainer instanceof ContainerReaderWriter &&
+ ((ContainerReaderWriter) player.openContainer).getReaderWriter().getNetwork() != null &&
+ network.getPosition().equals(((ContainerReaderWriter) player.openContainer).getReaderWriter().getNetwork().getPosition()))
+ .forEach(this::sendUpdateTo);
+ }
+
+ @Override
+ public void sendUpdateTo(EntityPlayerMP player) {
+ RS.INSTANCE.network.sendTo(new MessageReaderWriterUpdate(new ArrayList<>(channels.keySet())), player);
+ }
+
+ @Override
+ public void writeToNBT(NBTTagCompound tag) {
+ NBTTagList readerWriterChannelsList = new NBTTagList();
+
+ for (Map.Entry entry : channels.entrySet()) {
+ NBTTagCompound channelTag = entry.getValue().writeToNBT(new NBTTagCompound());
+
+ channelTag.setString(NBT_NAME, entry.getKey());
+
+ readerWriterChannelsList.appendTag(channelTag);
+ }
+
+ tag.setTag(NBT_CHANNELS, readerWriterChannelsList);
+ }
+
+ @Override
+ public void readFromNBT(NBTTagCompound tag) {
+ if (tag.hasKey(NBT_CHANNELS)) {
+ NBTTagList readerWriterChannelsList = tag.getTagList(NBT_CHANNELS, Constants.NBT.TAG_COMPOUND);
+
+ for (int i = 0; i < readerWriterChannelsList.tagCount(); ++i) {
+ NBTTagCompound channelTag = readerWriterChannelsList.getCompoundTagAt(i);
+
+ String name = channelTag.getString(NBT_NAME);
+
+ IReaderWriterChannel channel = API.instance().createReaderWriterChannel(name, network);
+
+ channel.readFromNBT(channelTag);
+
+ channels.put(name, channel);
+ }
+ }
+ }
+}
diff --git a/src/main/java/com/raoulvdberge/refinedstorage/block/BlockReader.java b/src/main/java/com/raoulvdberge/refinedstorage/block/BlockReader.java
index 90bc11e74..61c76da0e 100755
--- a/src/main/java/com/raoulvdberge/refinedstorage/block/BlockReader.java
+++ b/src/main/java/com/raoulvdberge/refinedstorage/block/BlockReader.java
@@ -39,7 +39,7 @@ public class BlockReader extends BlockCable {
if (player.isSneaking()) {
if (reader.getNetwork() != null) {
- IReaderWriterChannel channel = reader.getNetwork().getReaderWriterChannel(reader.getChannel());
+ IReaderWriterChannel channel = reader.getNetwork().getReaderWriterManager().getChannel(reader.getChannel());
if (channel != null) {
channel.getHandlers().stream().map(h -> h.getStatusReader(reader, channel)).flatMap(List::stream).forEach(player::sendMessage);
diff --git a/src/main/java/com/raoulvdberge/refinedstorage/block/BlockWriter.java b/src/main/java/com/raoulvdberge/refinedstorage/block/BlockWriter.java
index cf3303d2d..01bb811d0 100755
--- a/src/main/java/com/raoulvdberge/refinedstorage/block/BlockWriter.java
+++ b/src/main/java/com/raoulvdberge/refinedstorage/block/BlockWriter.java
@@ -40,7 +40,7 @@ public class BlockWriter extends BlockCable {
if (player.isSneaking()) {
if (writer.getNetwork() != null) {
- IReaderWriterChannel channel = writer.getNetwork().getReaderWriterChannel(writer.getChannel());
+ IReaderWriterChannel channel = writer.getNetwork().getReaderWriterManager().getChannel(writer.getChannel());
if (channel != null) {
channel.getHandlers().stream().map(h -> h.getStatusWriter(writer, channel)).flatMap(List::stream).forEach(player::sendMessage);
diff --git a/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiCraftingMonitor.java b/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiCraftingMonitor.java
index 63117e416..9aa7465f9 100755
--- a/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiCraftingMonitor.java
+++ b/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiCraftingMonitor.java
@@ -19,13 +19,11 @@ import java.util.Collections;
import java.util.List;
public class GuiCraftingMonitor extends GuiBase {
- public static List ELEMENTS = Collections.emptyList();
-
public class CraftingMonitorElementDrawers extends ElementDrawers {
- private IElementDrawer overlayDrawer = (x, y, colour) -> {
+ private IElementDrawer overlayDrawer = (x, y, color) -> {
GlStateManager.color(1, 1, 1, 1);
GlStateManager.disableLighting();
- drawRect(x, y, x + ITEM_WIDTH, y + ITEM_HEIGHT - 1, colour);
+ drawRect(x, y, x + ITEM_WIDTH, y + ITEM_HEIGHT - 1, color);
};
@Override
@@ -43,11 +41,11 @@ public class GuiCraftingMonitor extends GuiBase {
private GuiButton cancelAllButton;
private ICraftingMonitor craftingMonitor;
+ private List elements = Collections.emptyList();
private IElementDrawers drawers = new CraftingMonitorElementDrawers();
private int itemSelected = -1;
-
private int itemSelectedX = -1;
private int itemSelectedY = -1;
@@ -58,8 +56,12 @@ public class GuiCraftingMonitor extends GuiBase {
this.scrollbar = new Scrollbar(157, 20, 12, 89);
}
+ public void setElements(List elements) {
+ this.elements = elements;
+ }
+
private List getElements() {
- return craftingMonitor.isActive() ? ELEMENTS : Collections.emptyList();
+ return craftingMonitor.isActive() ? elements : Collections.emptyList();
}
@Override
diff --git a/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiDetector.java b/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiDetector.java
index f6997c2ae..a42dab4d7 100755
--- a/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiDetector.java
+++ b/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiDetector.java
@@ -13,7 +13,7 @@ import net.minecraft.client.gui.GuiTextField;
import java.io.IOException;
public class GuiDetector extends GuiBase {
- public static GuiTextField AMOUNT;
+ private GuiTextField amount;
public GuiDetector(ContainerDetector container) {
super(container, 176, 137);
@@ -29,13 +29,13 @@ public class GuiDetector extends GuiBase {
addSideButton(new SideButtonCompare(this, TileDetector.COMPARE, IComparer.COMPARE_NBT));
addSideButton(new SideButtonCompare(this, TileDetector.COMPARE, IComparer.COMPARE_OREDICT));
- AMOUNT = new GuiTextField(0, fontRenderer, x + 41 + 1, y + 23 + 1, 50, fontRenderer.FONT_HEIGHT);
- AMOUNT.setText(String.valueOf(TileDetector.AMOUNT.getValue()));
- AMOUNT.setEnableBackgroundDrawing(false);
- AMOUNT.setVisible(true);
- AMOUNT.setTextColor(16777215);
- AMOUNT.setCanLoseFocus(true);
- AMOUNT.setFocused(false);
+ amount = new GuiTextField(0, fontRenderer, x + 41 + 1, y + 23 + 1, 50, fontRenderer.FONT_HEIGHT);
+ amount.setText(String.valueOf(TileDetector.AMOUNT.getValue()));
+ amount.setEnableBackgroundDrawing(false);
+ amount.setVisible(true);
+ amount.setTextColor(16777215);
+ amount.setCanLoseFocus(true);
+ amount.setFocused(false);
}
@Override
@@ -48,7 +48,7 @@ public class GuiDetector extends GuiBase {
drawTexture(x, y, 0, 0, screenWidth, screenHeight);
- AMOUNT.drawTextBox();
+ amount.drawTextBox();
}
@Override
@@ -59,8 +59,8 @@ public class GuiDetector extends GuiBase {
@Override
protected void keyTyped(char character, int keyCode) throws IOException {
- if (!checkHotbarKeys(keyCode) && AMOUNT.textboxKeyTyped(character, keyCode)) {
- Integer result = Ints.tryParse(AMOUNT.getText());
+ if (!checkHotbarKeys(keyCode) && amount.textboxKeyTyped(character, keyCode)) {
+ Integer result = Ints.tryParse(amount.getText());
if (result != null) {
TileDataManager.setParameter(TileDetector.AMOUNT, result);
@@ -74,6 +74,10 @@ public class GuiDetector extends GuiBase {
protected void mouseClicked(int mouseX, int mouseY, int mouseButton) throws IOException {
super.mouseClicked(mouseX, mouseY, mouseButton);
- AMOUNT.mouseClicked(mouseX, mouseY, mouseButton);
+ amount.mouseClicked(mouseX, mouseY, mouseButton);
+ }
+
+ public GuiTextField getAmount() {
+ return amount;
}
}
diff --git a/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiReaderWriter.java b/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiReaderWriter.java
index df85fd377..68fd750c9 100755
--- a/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiReaderWriter.java
+++ b/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiReaderWriter.java
@@ -18,20 +18,19 @@ import java.util.Collections;
import java.util.List;
public class GuiReaderWriter extends GuiBase {
- public static List CHANNELS = Collections.emptyList();
-
private static final int VISIBLE_ROWS = 4;
private static final int ITEM_WIDTH = 143;
private static final int ITEM_HEIGHT = 18;
+ private List channels = Collections.emptyList();
+
private GuiButton add;
private GuiButton remove;
private GuiTextField name;
private IGuiReaderWriter readerWriter;
private int itemSelected = -1;
-
private int itemSelectedX = -1;
private int itemSelectedY = -1;
@@ -58,6 +57,14 @@ public class GuiReaderWriter extends GuiBase {
updateSelection(readerWriter.getChannelParameter().getValue());
}
+ private List getChannels() {
+ return readerWriter.isActive() ? channels : Collections.emptyList();
+ }
+
+ public void setChannels(List channels) {
+ this.channels = channels;
+ }
+
@Override
public void update(int x, int y) {
if (scrollbar != null) {
@@ -152,9 +159,9 @@ public class GuiReaderWriter extends GuiBase {
@Override
protected void keyTyped(char character, int keyCode) throws IOException {
if (keyCode == Keyboard.KEY_DELETE) {
- sendRemove();
+ onRemove();
} else if (name.isFocused() && keyCode == Keyboard.KEY_RETURN) {
- sendAdd();
+ onAdd();
} else if (!checkHotbarKeys(keyCode) && name.textboxKeyTyped(character, keyCode)) {
// NO OP
} else {
@@ -167,13 +174,13 @@ public class GuiReaderWriter extends GuiBase {
super.actionPerformed(button);
if (button == add) {
- sendAdd();
+ onAdd();
} else if (button == remove) {
- sendRemove();
+ onRemove();
}
}
- private void sendAdd() {
+ private void onAdd() {
String name = this.name.getText().trim();
if (!name.isEmpty()) {
@@ -181,7 +188,7 @@ public class GuiReaderWriter extends GuiBase {
}
}
- private void sendRemove() {
+ private void onRemove() {
String name = this.name.getText().trim();
if (!name.isEmpty()) {
@@ -193,8 +200,4 @@ public class GuiReaderWriter extends GuiBase {
this.itemSelected = getChannels().indexOf(channel);
this.name.setText(itemSelected != -1 ? getChannels().get(itemSelected) : "");
}
-
- private List getChannels() {
- return readerWriter.isActive() ? CHANNELS : Collections.emptyList();
- }
}
diff --git a/src/main/java/com/raoulvdberge/refinedstorage/network/MessageCraftingMonitorElements.java b/src/main/java/com/raoulvdberge/refinedstorage/network/MessageCraftingMonitorElements.java
index 5dc19a7c7..f6ccdb974 100755
--- a/src/main/java/com/raoulvdberge/refinedstorage/network/MessageCraftingMonitorElements.java
+++ b/src/main/java/com/raoulvdberge/refinedstorage/network/MessageCraftingMonitorElements.java
@@ -3,6 +3,7 @@ package com.raoulvdberge.refinedstorage.network;
import com.raoulvdberge.refinedstorage.api.autocrafting.craftingmonitor.ICraftingMonitorElement;
import com.raoulvdberge.refinedstorage.api.autocrafting.task.ICraftingTask;
import com.raoulvdberge.refinedstorage.apiimpl.API;
+import com.raoulvdberge.refinedstorage.gui.GuiBase;
import com.raoulvdberge.refinedstorage.gui.GuiCraftingMonitor;
import com.raoulvdberge.refinedstorage.gui.grid.filtering.GridFilterFilter;
import com.raoulvdberge.refinedstorage.tile.craftingmonitor.ICraftingMonitor;
@@ -70,7 +71,9 @@ public class MessageCraftingMonitorElements implements IMessage, IMessageHandler
@Override
public IMessage onMessage(MessageCraftingMonitorElements message, MessageContext ctx) {
- GuiCraftingMonitor.ELEMENTS = message.elements;
+ GuiBase.executeLater(GuiCraftingMonitor.class, craftingMonitor -> {
+ craftingMonitor.setElements(message.elements);
+ });
return null;
}
diff --git a/src/main/java/com/raoulvdberge/refinedstorage/network/MessageReaderWriterUpdate.java b/src/main/java/com/raoulvdberge/refinedstorage/network/MessageReaderWriterUpdate.java
index 2fa3ca36b..aa09aed71 100755
--- a/src/main/java/com/raoulvdberge/refinedstorage/network/MessageReaderWriterUpdate.java
+++ b/src/main/java/com/raoulvdberge/refinedstorage/network/MessageReaderWriterUpdate.java
@@ -1,5 +1,6 @@
package com.raoulvdberge.refinedstorage.network;
+import com.raoulvdberge.refinedstorage.gui.GuiBase;
import com.raoulvdberge.refinedstorage.gui.GuiReaderWriter;
import io.netty.buffer.ByteBuf;
import net.minecraftforge.fml.common.network.ByteBufUtils;
@@ -8,22 +9,20 @@ import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler;
import net.minecraftforge.fml.common.network.simpleimpl.MessageContext;
import java.util.ArrayList;
-import java.util.Collection;
+import java.util.List;
public class MessageReaderWriterUpdate implements IMessage, IMessageHandler {
- private Collection channels;
+ private List channels = new ArrayList<>();
public MessageReaderWriterUpdate() {
}
- public MessageReaderWriterUpdate(Collection channels) {
+ public MessageReaderWriterUpdate(List channels) {
this.channels = channels;
}
@Override
public void fromBytes(ByteBuf buf) {
- this.channels = new ArrayList<>();
-
int size = buf.readInt();
for (int i = 0; i < size; ++i) {
@@ -42,7 +41,7 @@ public class MessageReaderWriterUpdate implements IMessage, IMessageHandler) message.channels;
+ GuiBase.executeLater(GuiReaderWriter.class, readerWriter -> readerWriter.setChannels(message.channels));
return null;
}
diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/TileController.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/TileController.java
index 24d01bcbb..bb8fe81b7 100755
--- a/src/main/java/com/raoulvdberge/refinedstorage/tile/TileController.java
+++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/TileController.java
@@ -11,14 +11,12 @@ import com.raoulvdberge.refinedstorage.api.network.grid.handler.IItemGridHandler
import com.raoulvdberge.refinedstorage.api.network.item.INetworkItemHandler;
import com.raoulvdberge.refinedstorage.api.network.node.INetworkNode;
import com.raoulvdberge.refinedstorage.api.network.node.INetworkNodeProxy;
-import com.raoulvdberge.refinedstorage.api.network.readerwriter.IReaderWriterChannel;
-import com.raoulvdberge.refinedstorage.api.network.readerwriter.IReaderWriterHandler;
+import com.raoulvdberge.refinedstorage.api.network.readerwriter.IReaderWriterManager;
import com.raoulvdberge.refinedstorage.api.network.security.ISecurityManager;
import com.raoulvdberge.refinedstorage.api.storage.AccessType;
import com.raoulvdberge.refinedstorage.api.storage.IStorage;
import com.raoulvdberge.refinedstorage.api.storage.IStorageCache;
import com.raoulvdberge.refinedstorage.api.storage.IStorageTracker;
-import com.raoulvdberge.refinedstorage.apiimpl.API;
import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.CraftingManager;
import com.raoulvdberge.refinedstorage.apiimpl.network.NetworkNodeGraph;
import com.raoulvdberge.refinedstorage.apiimpl.network.grid.handler.FluidGridHandler;
@@ -26,6 +24,7 @@ import com.raoulvdberge.refinedstorage.apiimpl.network.grid.handler.ItemGridHand
import com.raoulvdberge.refinedstorage.apiimpl.network.item.NetworkItemHandler;
import com.raoulvdberge.refinedstorage.apiimpl.network.node.externalstorage.StorageFluidExternal;
import com.raoulvdberge.refinedstorage.apiimpl.network.node.externalstorage.StorageItemExternal;
+import com.raoulvdberge.refinedstorage.apiimpl.network.readerwriter.ReaderWriterManager;
import com.raoulvdberge.refinedstorage.apiimpl.network.security.SecurityManager;
import com.raoulvdberge.refinedstorage.apiimpl.storage.StorageCacheFluid;
import com.raoulvdberge.refinedstorage.apiimpl.storage.StorageCacheItem;
@@ -35,11 +34,7 @@ import com.raoulvdberge.refinedstorage.block.BlockController;
import com.raoulvdberge.refinedstorage.block.ControllerEnergyType;
import com.raoulvdberge.refinedstorage.block.ControllerType;
import com.raoulvdberge.refinedstorage.capability.CapabilityNetworkNodeProxy;
-import com.raoulvdberge.refinedstorage.container.ContainerCraftingMonitor;
-import com.raoulvdberge.refinedstorage.container.ContainerReaderWriter;
import com.raoulvdberge.refinedstorage.integration.forgeenergy.EnergyForge;
-import com.raoulvdberge.refinedstorage.network.MessageCraftingMonitorElements;
-import com.raoulvdberge.refinedstorage.network.MessageReaderWriterUpdate;
import com.raoulvdberge.refinedstorage.tile.config.IRedstoneConfigurable;
import com.raoulvdberge.refinedstorage.tile.config.RedstoneMode;
import com.raoulvdberge.refinedstorage.tile.data.RSSerializers;
@@ -47,11 +42,9 @@ import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter;
import com.raoulvdberge.refinedstorage.util.StackUtils;
import com.raoulvdberge.refinedstorage.util.WorldUtils;
import net.minecraft.block.state.IBlockState;
-import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
-import net.minecraft.nbt.NBTTagList;
import net.minecraft.network.datasync.DataSerializers;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.ITickable;
@@ -65,7 +58,9 @@ import net.minecraftforge.items.ItemHandlerHelper;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.List;
import java.util.function.Predicate;
public class TileController extends TileBase implements ITickable, INetwork, IRedstoneConfigurable, INetworkNode, INetworkNodeProxy {
@@ -116,9 +111,6 @@ public class TileController extends TileBase implements ITickable, INetwork, IRe
public static final String NBT_ENERGY_CAPACITY = "EnergyCapacity";
public static final String NBT_ENERGY_TYPE = "EnergyType";
- private static final String NBT_READER_WRITER_CHANNELS = "ReaderWriterChannels";
- private static final String NBT_READER_WRITER_NAME = "Name";
-
private static final String NBT_ITEM_STORAGE_TRACKER = "ItemStorageTracker";
private static final String NBT_FLUID_STORAGE_TRACKER = "FluidStorageTracker";
@@ -139,7 +131,7 @@ public class TileController extends TileBase implements ITickable, INetwork, IRe
private IStorageCache fluidStorage = new StorageCacheFluid(this);
private StorageTrackerFluid fluidStorageTracker = new StorageTrackerFluid(this::markDirty);
- private Map readerWriterChannels = new HashMap<>();
+ private IReaderWriterManager readerWriterManager = new ReaderWriterManager(this, this::markDirty);
private EnergyForge energy = new EnergyForge(RS.INSTANCE.config.controllerCapacity);
@@ -147,8 +139,6 @@ public class TileController extends TileBase implements ITickable, INetwork, IRe
private boolean couldRun;
private int ticksSinceUpdateChanged;
- private boolean craftingMonitorUpdateRequested;
-
private ControllerType type;
private ControllerEnergyType energyType = ControllerEnergyType.OFF;
@@ -197,21 +187,11 @@ public class TileController extends TileBase implements ITickable, INetwork, IRe
if (canRun()) {
craftingManager.update();
- for (IReaderWriterChannel channel : readerWriterChannels.values()) {
- for (IReaderWriterHandler handler : channel.getHandlers()) {
- handler.update(channel);
- }
- }
+ readerWriterManager.update();
- if (!craftingManager.getTasks().isEmpty() || !readerWriterChannels.isEmpty()) {
+ if (!craftingManager.getTasks().isEmpty()) {
markDirty();
}
-
- if (craftingMonitorUpdateRequested) {
- craftingMonitorUpdateRequested = false;
-
- sendCraftingMonitorUpdate();
- }
}
if (getType() == ControllerType.NORMAL) {
@@ -293,61 +273,8 @@ public class TileController extends TileBase implements ITickable, INetwork, IRe
}
@Override
- public void markCraftingMonitorForUpdate() {
- craftingMonitorUpdateRequested = true;
- }
-
- @Override
- public void sendCraftingMonitorUpdate() {
- world.getMinecraftServer().getPlayerList().getPlayers().stream()
- .filter(player -> player.openContainer instanceof ContainerCraftingMonitor && pos.equals(((ContainerCraftingMonitor) player.openContainer).getCraftingMonitor().getNetworkPosition()))
- .forEach(player -> RS.INSTANCE.network.sendTo(new MessageCraftingMonitorElements(((ContainerCraftingMonitor) player.openContainer).getCraftingMonitor()), player));
- }
-
- @Override
- public void sendCraftingMonitorUpdate(EntityPlayerMP player) {
- RS.INSTANCE.network.sendTo(new MessageCraftingMonitorElements(((ContainerCraftingMonitor) player.openContainer).getCraftingMonitor()), player);
- }
-
- @Nullable
- @Override
- public IReaderWriterChannel getReaderWriterChannel(String name) {
- return readerWriterChannels.get(name);
- }
-
- @Override
- public void addReaderWriterChannel(String name) {
- readerWriterChannels.put(name, API.instance().createReaderWriterChannel(name, this));
-
- sendReaderWriterChannelUpdate();
- }
-
- @Override
- public void removeReaderWriterChannel(String name) {
- IReaderWriterChannel channel = getReaderWriterChannel(name);
-
- if (channel != null) {
- channel.getReaders().forEach(reader -> reader.setChannel(""));
- channel.getWriters().forEach(writer -> writer.setChannel(""));
-
- readerWriterChannels.remove(name);
-
- sendReaderWriterChannelUpdate();
- }
- }
-
- @Override
- public void sendReaderWriterChannelUpdate() {
- world.getMinecraftServer().getPlayerList().getPlayers().stream()
- .filter(player -> player.openContainer instanceof ContainerReaderWriter &&
- ((ContainerReaderWriter) player.openContainer).getReaderWriter().getNetwork() != null &&
- pos.equals(((ContainerReaderWriter) player.openContainer).getReaderWriter().getNetwork().getPosition()))
- .forEach(this::sendReaderWriterChannelUpdate);
- }
-
- @Override
- public void sendReaderWriterChannelUpdate(EntityPlayerMP player) {
- RS.INSTANCE.network.sendTo(new MessageReaderWriterUpdate(readerWriterChannels.keySet()), player);
+ public IReaderWriterManager getReaderWriterManager() {
+ return readerWriterManager;
}
@Override
@@ -557,21 +484,7 @@ public class TileController extends TileBase implements ITickable, INetwork, IRe
craftingManager.readFromNBT(tag);
- if (tag.hasKey(NBT_READER_WRITER_CHANNELS)) {
- NBTTagList readerWriterChannelsList = tag.getTagList(NBT_READER_WRITER_CHANNELS, Constants.NBT.TAG_COMPOUND);
-
- for (int i = 0; i < readerWriterChannelsList.tagCount(); ++i) {
- NBTTagCompound channelTag = readerWriterChannelsList.getCompoundTagAt(i);
-
- String name = channelTag.getString(NBT_READER_WRITER_NAME);
-
- IReaderWriterChannel channel = API.instance().createReaderWriterChannel(name, this);
-
- channel.readFromNBT(channelTag);
-
- readerWriterChannels.put(name, channel);
- }
- }
+ readerWriterManager.readFromNBT(tag);
if (tag.hasKey(NBT_ITEM_STORAGE_TRACKER)) {
itemStorageTracker.readFromNBT(tag.getTagList(NBT_ITEM_STORAGE_TRACKER, Constants.NBT.TAG_COMPOUND));
@@ -592,17 +505,7 @@ public class TileController extends TileBase implements ITickable, INetwork, IRe
craftingManager.writeToNBT(tag);
- NBTTagList readerWriterChannelsList = new NBTTagList();
-
- for (Map.Entry entry : readerWriterChannels.entrySet()) {
- NBTTagCompound channelTag = entry.getValue().writeToNBT(new NBTTagCompound());
-
- channelTag.setString(NBT_READER_WRITER_NAME, entry.getKey());
-
- readerWriterChannelsList.appendTag(channelTag);
- }
-
- tag.setTag(NBT_READER_WRITER_CHANNELS, readerWriterChannelsList);
+ readerWriterManager.writeToNBT(tag);
tag.setTag(NBT_ITEM_STORAGE_TRACKER, itemStorageTracker.serializeNBT());
tag.setTag(NBT_FLUID_STORAGE_TRACKER, fluidStorageTracker.serializeNBT());
diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/TileDetector.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/TileDetector.java
index 674d8d06e..5d763754d 100755
--- a/src/main/java/com/raoulvdberge/refinedstorage/tile/TileDetector.java
+++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/TileDetector.java
@@ -1,18 +1,15 @@
package com.raoulvdberge.refinedstorage.tile;
import com.raoulvdberge.refinedstorage.apiimpl.network.node.NetworkNodeDetector;
+import com.raoulvdberge.refinedstorage.gui.GuiBase;
import com.raoulvdberge.refinedstorage.gui.GuiDetector;
import com.raoulvdberge.refinedstorage.tile.config.IComparable;
import com.raoulvdberge.refinedstorage.tile.config.IType;
import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter;
-import net.minecraft.client.Minecraft;
-import net.minecraft.client.gui.GuiScreen;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.network.datasync.DataSerializers;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
-import net.minecraftforge.fml.common.FMLCommonHandler;
-import net.minecraftforge.fml.relauncher.Side;
import javax.annotation.Nonnull;
@@ -30,15 +27,7 @@ public class TileDetector extends TileNode {
public static final TileDataParameter AMOUNT = new TileDataParameter<>(DataSerializers.VARINT, 0, t -> t.getNode().getAmount(), (t, v) -> {
t.getNode().setAmount(v);
t.getNode().markDirty();
- }, p -> {
- if (FMLCommonHandler.instance().getEffectiveSide() == Side.CLIENT) {
- GuiScreen gui = Minecraft.getMinecraft().currentScreen;
-
- if (gui instanceof GuiDetector) {
- GuiDetector.AMOUNT.setText(String.valueOf(p));
- }
- }
- });
+ }, p -> GuiBase.executeLater(GuiDetector.class, detector -> detector.getAmount().setText(String.valueOf(p))));
public TileDetector() {
dataManager.addWatchedParameter(COMPARE);
diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/TileReader.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/TileReader.java
index 157b2a19e..5381713a6 100755
--- a/src/main/java/com/raoulvdberge/refinedstorage/tile/TileReader.java
+++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/TileReader.java
@@ -72,7 +72,7 @@ public class TileReader extends TileNode {
return false;
}
- IReaderWriterChannel channel = reader.getNetwork().getReaderWriterChannel(reader.getChannel());
+ IReaderWriterChannel channel = reader.getNetwork().getReaderWriterManager().getChannel(reader.getChannel());
if (channel == null) {
return false;
@@ -106,7 +106,7 @@ public class TileReader extends TileNode {
return null;
}
- IReaderWriterChannel channel = reader.getNetwork().getReaderWriterChannel(reader.getChannel());
+ IReaderWriterChannel channel = reader.getNetwork().getReaderWriterManager().getChannel(reader.getChannel());
if (channel == null) {
return null;
diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/TileWriter.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/TileWriter.java
index 56e7e31ee..fc29242a3 100755
--- a/src/main/java/com/raoulvdberge/refinedstorage/tile/TileWriter.java
+++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/TileWriter.java
@@ -56,7 +56,7 @@ public class TileWriter extends TileNode {
return false;
}
- IReaderWriterChannel channel = writer.getNetwork().getReaderWriterChannel(writer.getChannel());
+ IReaderWriterChannel channel = writer.getNetwork().getReaderWriterManager().getChannel(writer.getChannel());
if (channel == null) {
return false;
@@ -90,7 +90,7 @@ public class TileWriter extends TileNode {
return null;
}
- IReaderWriterChannel channel = writer.getNetwork().getReaderWriterChannel(writer.getChannel());
+ IReaderWriterChannel channel = writer.getNetwork().getReaderWriterManager().getChannel(writer.getChannel());
if (channel == null) {
return null;
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 ccff786b2..83c87a524 100755
--- a/src/main/java/com/raoulvdberge/refinedstorage/tile/craftingmonitor/TileCraftingMonitor.java
+++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/craftingmonitor/TileCraftingMonitor.java
@@ -18,7 +18,7 @@ public class TileCraftingMonitor extends TileNode {
INetwork network = t.getNode().getNetwork();
if (network != null) {
- network.sendCraftingMonitorUpdate();
+ network.getCraftingManager().sendCraftingMonitorUpdate();
}
});
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 10b4176d0..57597b2d0 100755
--- a/src/main/java/com/raoulvdberge/refinedstorage/tile/craftingmonitor/WirelessCraftingMonitor.java
+++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/craftingmonitor/WirelessCraftingMonitor.java
@@ -46,7 +46,7 @@ public class WirelessCraftingMonitor implements ICraftingMonitor {
INetwork network = getNetwork();
if (network != null) {
- network.sendCraftingMonitorUpdate();
+ network.getCraftingManager().sendCraftingMonitorUpdate();
}
}
};
diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/portable/TilePortableGrid.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/portable/TilePortableGrid.java
index ac7da3adf..a99aac76b 100644
--- a/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/portable/TilePortableGrid.java
+++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/grid/portable/TilePortableGrid.java
@@ -78,11 +78,7 @@ public class TilePortableGrid extends TileBase implements IGrid, IPortableGrid,
t.setSearchBoxMode(v);
t.markDirty();
}
- }, p -> {
- if (Minecraft.getMinecraft().currentScreen instanceof GuiGrid) {
- ((GuiGrid) Minecraft.getMinecraft().currentScreen).updateSearchFieldFocus(p);
- }
- });
+ }, p -> GuiBase.executeLater(GuiGrid.class, grid -> grid.updateSearchFieldFocus(p)));
public static final TileDataParameter SIZE = new TileDataParameter<>(DataSerializers.VARINT, 0, TilePortableGrid::getSize, (t, v) -> {
if (IGrid.isValidSize(v)) {
t.setSize(v);