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);