From 0c19860bbaa19b0f159192fa7d9c6c8aeccfcf96 Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Mon, 18 Jun 2018 18:56:24 +0200 Subject: [PATCH] Move reader writer updating to a listener based system. --- .../readerwriter/IReaderWriterChannel.java | 2 +- .../readerwriter/IReaderWriterHandler.java | 2 +- .../readerwriter/IReaderWriterListener.java | 16 +++++++ .../readerwriter/IReaderWriterManager.java | 23 +++++---- .../network/node/NetworkNodeReader.java | 8 ---- .../network/node/NetworkNodeWriter.java | 8 ---- .../readerwriter/ReaderWriterChannel.java | 4 +- .../ReaderWriterHandlerFluids.java | 2 +- .../ReaderWriterHandlerItems.java | 2 +- .../ReaderWriterHandlerRedstone.java | 2 +- .../readerwriter/ReaderWriterManager.java | 48 ++++++++----------- .../refinedstorage/block/BlockReader.java | 4 +- .../refinedstorage/block/BlockWriter.java | 4 +- .../container/ContainerReaderWriter.java | 44 ++++++++++++++++- .../refinedstorage/gui/GuiReaderWriter.java | 11 +++-- .../ReaderWriterHandlerForgeEnergy.java | 2 +- .../network/MessageReaderWriterUpdate.java | 5 +- .../refinedstorage/tile/TileController.java | 18 +++++-- .../refinedstorage/tile/TileReader.java | 2 +- 19 files changed, 133 insertions(+), 74 deletions(-) create mode 100644 src/main/java/com/raoulvdberge/refinedstorage/api/network/readerwriter/IReaderWriterListener.java diff --git a/src/main/java/com/raoulvdberge/refinedstorage/api/network/readerwriter/IReaderWriterChannel.java b/src/main/java/com/raoulvdberge/refinedstorage/api/network/readerwriter/IReaderWriterChannel.java index a2bfb1fdc..aa3ac190e 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/api/network/readerwriter/IReaderWriterChannel.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/api/network/readerwriter/IReaderWriterChannel.java @@ -29,7 +29,7 @@ public interface IReaderWriterChannel { * @param tag the tag to write to * @return the written tag */ - NBTTagCompound writeToNBT(NBTTagCompound tag); + NBTTagCompound writeToNbt(NBTTagCompound tag); /** * Reads this channel from NBT. diff --git a/src/main/java/com/raoulvdberge/refinedstorage/api/network/readerwriter/IReaderWriterHandler.java b/src/main/java/com/raoulvdberge/refinedstorage/api/network/readerwriter/IReaderWriterHandler.java index 9965cc870..393de1e0c 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/api/network/readerwriter/IReaderWriterHandler.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/api/network/readerwriter/IReaderWriterHandler.java @@ -59,7 +59,7 @@ public interface IReaderWriterHandler { * @param tag the tag to write to * @return the written tag */ - NBTTagCompound writeToNBT(NBTTagCompound tag); + NBTTagCompound writeToNbt(NBTTagCompound tag); /** * @return the id of this writer, as assigned to the {@link IReaderWriterHandlerRegistry} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/api/network/readerwriter/IReaderWriterListener.java b/src/main/java/com/raoulvdberge/refinedstorage/api/network/readerwriter/IReaderWriterListener.java new file mode 100644 index 000000000..b985d5344 --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/api/network/readerwriter/IReaderWriterListener.java @@ -0,0 +1,16 @@ +package com.raoulvdberge.refinedstorage.api.network.readerwriter; + +/** + * A listener for reader writers. + */ +public interface IReaderWriterListener { + /** + * Called when the listener is attached. + */ + void onAttached(); + + /** + * Called when a reader writer channel has changed. + */ + void onChanged(); +} 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 index 6f7e7b284..dc3edafc0 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/api/network/readerwriter/IReaderWriterManager.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/api/network/readerwriter/IReaderWriterManager.java @@ -1,9 +1,9 @@ package com.raoulvdberge.refinedstorage.api.network.readerwriter; -import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.nbt.NBTTagCompound; import javax.annotation.Nullable; +import java.util.Collection; /** * A manager for the reader writer. @@ -36,24 +36,31 @@ public interface IReaderWriterManager { void removeChannel(String name); /** - * Sends a channel update to all players watching a reader or writer. + * @return a collection of channels */ - void sendUpdate(); + Collection getChannels(); /** - * Sends a channel update to a specific player. + * Adds a listener. * - * @param player the player to send to + * @param listener the listener */ - void sendUpdateTo(EntityPlayerMP player); + void addListener(IReaderWriterListener listener); + + /** + * Removes a listener. + * + * @param listener the listener + */ + void removeListener(IReaderWriterListener listener); /** * @param tag the tag to write to */ - void writeToNBT(NBTTagCompound tag); + void writeToNbt(NBTTagCompound tag); /** * @param tag the tag to read from */ - void readFromNBT(NBTTagCompound tag); + void readFromNbt(NBTTagCompound tag); } 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 61f2cfcb9..7aa23d94a 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 @@ -4,8 +4,6 @@ import com.raoulvdberge.refinedstorage.RS; import com.raoulvdberge.refinedstorage.api.network.readerwriter.IReader; import com.raoulvdberge.refinedstorage.tile.TileReader; import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; @@ -83,10 +81,4 @@ public class NetworkNodeReader extends NetworkNode implements IReader, IGuiReade return tag; } - - public void onOpened(EntityPlayer entity) { - if (network != null) { - 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 e146a6785..8e58b1038 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 @@ -7,8 +7,6 @@ import com.raoulvdberge.refinedstorage.api.network.readerwriter.IReaderWriterHan import com.raoulvdberge.refinedstorage.api.network.readerwriter.IWriter; import com.raoulvdberge.refinedstorage.tile.TileWriter; import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; @@ -115,10 +113,4 @@ public class NetworkNodeWriter extends NetworkNode implements IWriter, IGuiReade return tag; } - - public void onOpened(EntityPlayer entity) { - if (network != null) { - network.getReaderWriterManager().sendUpdateTo((EntityPlayerMP) entity); - } - } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/readerwriter/ReaderWriterChannel.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/readerwriter/ReaderWriterChannel.java index 7b9b02017..d8e19559e 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/readerwriter/ReaderWriterChannel.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/readerwriter/ReaderWriterChannel.java @@ -45,9 +45,9 @@ public class ReaderWriterChannel implements IReaderWriterChannel { } @Override - public NBTTagCompound writeToNBT(NBTTagCompound tag) { + public NBTTagCompound writeToNbt(NBTTagCompound tag) { for (IReaderWriterHandler handler : handlers) { - tag.setTag(String.format(NBT_HANDLER, handler.getId()), handler.writeToNBT(new NBTTagCompound())); + tag.setTag(String.format(NBT_HANDLER, handler.getId()), handler.writeToNbt(new NBTTagCompound())); } return tag; diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/readerwriter/ReaderWriterHandlerFluids.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/readerwriter/ReaderWriterHandlerFluids.java index 862d22575..a958adb36 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/readerwriter/ReaderWriterHandlerFluids.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/readerwriter/ReaderWriterHandlerFluids.java @@ -74,7 +74,7 @@ public class ReaderWriterHandlerFluids implements IReaderWriterHandler { } @Override - public NBTTagCompound writeToNBT(NBTTagCompound tag) { + public NBTTagCompound writeToNbt(NBTTagCompound tag) { tank.writeToNBT(tag); return tag; diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/readerwriter/ReaderWriterHandlerItems.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/readerwriter/ReaderWriterHandlerItems.java index 8fdb41c21..f1b4b9b20 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/readerwriter/ReaderWriterHandlerItems.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/readerwriter/ReaderWriterHandlerItems.java @@ -75,7 +75,7 @@ public class ReaderWriterHandlerItems implements IReaderWriterHandler { } @Override - public NBTTagCompound writeToNBT(NBTTagCompound tag) { + public NBTTagCompound writeToNbt(NBTTagCompound tag) { StackUtils.writeItems(items, 0, tag); return tag; diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/readerwriter/ReaderWriterHandlerRedstone.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/readerwriter/ReaderWriterHandlerRedstone.java index 3a32dbb80..1e7eca6a3 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/readerwriter/ReaderWriterHandlerRedstone.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/readerwriter/ReaderWriterHandlerRedstone.java @@ -60,7 +60,7 @@ public class ReaderWriterHandlerRedstone implements IReaderWriterHandler { } @Override - public NBTTagCompound writeToNBT(NBTTagCompound tag) { + public NBTTagCompound writeToNbt(NBTTagCompound tag) { return tag; } 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 index e9f19a212..ba524663f 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/readerwriter/ReaderWriterManager.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/readerwriter/ReaderWriterManager.java @@ -1,34 +1,28 @@ 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.IReaderWriterListener; 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; +import java.util.*; 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<>(); + private Set listeners = new HashSet<>(); - public ReaderWriterManager(INetwork network, Runnable listener) { + public ReaderWriterManager(INetwork network) { this.network = network; - this.listener = listener; } @Override @@ -50,9 +44,7 @@ public class ReaderWriterManager implements IReaderWriterManager { public void addChannel(String name) { channels.put(name, API.instance().createReaderWriterChannel(name, network)); - listener.run(); - - sendUpdate(); + listeners.forEach(IReaderWriterListener::onChanged); } @Override @@ -65,33 +57,33 @@ public class ReaderWriterManager implements IReaderWriterManager { channels.remove(name); - listener.run(); - - sendUpdate(); + listeners.forEach(IReaderWriterListener::onChanged); } } @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); + public Collection getChannels() { + return channels.keySet(); } @Override - public void sendUpdateTo(EntityPlayerMP player) { - RS.INSTANCE.network.sendTo(new MessageReaderWriterUpdate(new ArrayList<>(channels.keySet())), player); + public void addListener(IReaderWriterListener listener) { + listeners.add(listener); + + listener.onAttached(); } @Override - public void writeToNBT(NBTTagCompound tag) { + public void removeListener(IReaderWriterListener listener) { + listeners.remove(listener); + } + + @Override + public void writeToNbt(NBTTagCompound tag) { NBTTagList readerWriterChannelsList = new NBTTagList(); for (Map.Entry entry : channels.entrySet()) { - NBTTagCompound channelTag = entry.getValue().writeToNBT(new NBTTagCompound()); + NBTTagCompound channelTag = entry.getValue().writeToNbt(new NBTTagCompound()); channelTag.setString(NBT_NAME, entry.getKey()); @@ -102,7 +94,7 @@ public class ReaderWriterManager implements IReaderWriterManager { } @Override - public void readFromNBT(NBTTagCompound tag) { + public void readFromNbt(NBTTagCompound tag) { if (tag.hasKey(NBT_CHANNELS)) { NBTTagList readerWriterChannelsList = tag.getTagList(NBT_CHANNELS, Constants.NBT.TAG_COMPOUND); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/block/BlockReader.java b/src/main/java/com/raoulvdberge/refinedstorage/block/BlockReader.java index 61c76da0e..7b1514883 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/block/BlockReader.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/block/BlockReader.java @@ -45,8 +45,8 @@ public class BlockReader extends BlockCable { channel.getHandlers().stream().map(h -> h.getStatusReader(reader, channel)).flatMap(List::stream).forEach(player::sendMessage); } } - } else if (tryOpenNetworkGui(RSGui.READER_WRITER, player, world, pos, side)) { - reader.onOpened(player); + } else { + tryOpenNetworkGui(RSGui.READER_WRITER, player, world, pos, side); } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/block/BlockWriter.java b/src/main/java/com/raoulvdberge/refinedstorage/block/BlockWriter.java index 01bb811d0..f5d0eca71 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/block/BlockWriter.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/block/BlockWriter.java @@ -46,8 +46,8 @@ public class BlockWriter extends BlockCable { channel.getHandlers().stream().map(h -> h.getStatusWriter(writer, channel)).flatMap(List::stream).forEach(player::sendMessage); } } - } else if (tryOpenNetworkGui(RSGui.READER_WRITER, player, world, pos, side)) { - writer.onOpened(player); + } else { + tryOpenNetworkGui(RSGui.READER_WRITER, player, world, pos, side); } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/container/ContainerReaderWriter.java b/src/main/java/com/raoulvdberge/refinedstorage/container/ContainerReaderWriter.java index 3e3ed3118..aed9b347f 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/container/ContainerReaderWriter.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/container/ContainerReaderWriter.java @@ -1,11 +1,17 @@ package com.raoulvdberge.refinedstorage.container; +import com.raoulvdberge.refinedstorage.RS; +import com.raoulvdberge.refinedstorage.api.network.readerwriter.IReaderWriterListener; +import com.raoulvdberge.refinedstorage.api.network.readerwriter.IReaderWriterManager; import com.raoulvdberge.refinedstorage.apiimpl.network.node.IGuiReaderWriter; +import com.raoulvdberge.refinedstorage.network.MessageReaderWriterUpdate; import com.raoulvdberge.refinedstorage.tile.TileBase; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; -public class ContainerReaderWriter extends ContainerBase { +public class ContainerReaderWriter extends ContainerBase implements IReaderWriterListener { private IGuiReaderWriter readerWriter; + private boolean addedListener; public ContainerReaderWriter(IGuiReaderWriter readerWriter, TileBase tile, EntityPlayer player) { super(tile, player); @@ -18,4 +24,40 @@ public class ContainerReaderWriter extends ContainerBase { public IGuiReaderWriter getReaderWriter() { return readerWriter; } + + @Override + public void detectAndSendChanges() { + super.detectAndSendChanges(); + + IReaderWriterManager manager = readerWriter.getNetwork() == null ? null : readerWriter.getNetwork().getReaderWriterManager(); + if (!getPlayer().world.isRemote) { + if (manager != null && !addedListener) { + manager.addListener(this); + + this.addedListener = true; + } else if (manager == null && addedListener) { + this.addedListener = false; + } + } + } + + @Override + public void onContainerClosed(EntityPlayer player) { + super.onContainerClosed(player); + + IReaderWriterManager manager = readerWriter.getNetwork() == null ? null : readerWriter.getNetwork().getReaderWriterManager(); + if (!player.getEntityWorld().isRemote && manager != null && addedListener) { + manager.removeListener(this); + } + } + + @Override + public void onAttached() { + onChanged(); + } + + @Override + public void onChanged() { + RS.INSTANCE.network.sendTo(new MessageReaderWriterUpdate(readerWriter.getNetwork().getReaderWriterManager().getChannels()), (EntityPlayerMP) getPlayer()); + } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiReaderWriter.java b/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiReaderWriter.java index 57a69c586..d5b7746bb 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiReaderWriter.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiReaderWriter.java @@ -25,6 +25,7 @@ public class GuiReaderWriter extends GuiBase { private static final int ITEM_HEIGHT = 18; private List channels = Collections.emptyList(); + private String currentChannelToSet; private GuiButton add; private GuiButton remove; @@ -54,8 +55,6 @@ public class GuiReaderWriter extends GuiBase { name.setTextColor(16777215); name.setCanLoseFocus(true); name.setFocused(false); - - updateSelection(readerWriter.getChannelParameter().getValue()); } private List getChannels() { @@ -64,6 +63,11 @@ public class GuiReaderWriter extends GuiBase { public void setChannels(List channels) { this.channels = channels; + + // In case we get the current channel packet earlier than our channel list. + if (currentChannelToSet != null) { + setCurrentChannel(currentChannelToSet); + } } @Override @@ -197,8 +201,9 @@ public class GuiReaderWriter extends GuiBase { } } - public void updateSelection(String channel) { + public void setCurrentChannel(String channel) { this.itemSelected = getChannels().indexOf(channel); this.name.setText(itemSelected != -1 ? getChannels().get(itemSelected) : ""); + this.currentChannelToSet = channel; } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/integration/forgeenergy/ReaderWriterHandlerForgeEnergy.java b/src/main/java/com/raoulvdberge/refinedstorage/integration/forgeenergy/ReaderWriterHandlerForgeEnergy.java index 539485c93..48413b2e0 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/integration/forgeenergy/ReaderWriterHandlerForgeEnergy.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/integration/forgeenergy/ReaderWriterHandlerForgeEnergy.java @@ -90,7 +90,7 @@ public class ReaderWriterHandlerForgeEnergy implements IReaderWriterHandler { } @Override - public NBTTagCompound writeToNBT(NBTTagCompound tag) { + public NBTTagCompound writeToNbt(NBTTagCompound tag) { tag.setInteger(NBT_ENERGY_STORED, storage.getEnergyStored()); return tag; diff --git a/src/main/java/com/raoulvdberge/refinedstorage/network/MessageReaderWriterUpdate.java b/src/main/java/com/raoulvdberge/refinedstorage/network/MessageReaderWriterUpdate.java index aa09aed71..d962b5e9d 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/network/MessageReaderWriterUpdate.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/network/MessageReaderWriterUpdate.java @@ -9,6 +9,7 @@ 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 { @@ -17,8 +18,8 @@ public class MessageReaderWriterUpdate implements IMessage, IMessageHandler channels) { - this.channels = channels; + public MessageReaderWriterUpdate(Collection channels) { + this.channels = new ArrayList<>(channels); } @Override diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/TileController.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/TileController.java index 5bd055cbc..cc39e0113 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/TileController.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/TileController.java @@ -11,6 +11,7 @@ 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.IReaderWriterListener; import com.raoulvdberge.refinedstorage.api.network.readerwriter.IReaderWriterManager; import com.raoulvdberge.refinedstorage.api.network.security.ISecurityManager; import com.raoulvdberge.refinedstorage.api.storage.AccessType; @@ -131,7 +132,7 @@ public class TileController extends TileBase implements ITickable, INetwork, IRe private IStorageCache fluidStorage = new StorageCacheFluid(this); private StorageTrackerFluid fluidStorageTracker = new StorageTrackerFluid(this::markDirty); - private IReaderWriterManager readerWriterManager = new ReaderWriterManager(this, this::markDirty); + private IReaderWriterManager readerWriterManager = new ReaderWriterManager(this); private EnergyForge energy = new EnergyForge(RS.INSTANCE.config.controllerCapacity); @@ -150,6 +151,17 @@ public class TileController extends TileBase implements ITickable, INetwork, IRe dataManager.addWatchedParameter(ENERGY_STORED); dataManager.addParameter(ENERGY_CAPACITY); dataManager.addParameter(NODES); + + readerWriterManager.addListener(new IReaderWriterListener() { + @Override + public void onAttached() { + } + + @Override + public void onChanged() { + markDirty(); + } + }); } public EnergyForge getEnergy() { @@ -484,7 +496,7 @@ public class TileController extends TileBase implements ITickable, INetwork, IRe craftingManager.readFromNbt(tag); - readerWriterManager.readFromNBT(tag); + readerWriterManager.readFromNbt(tag); if (tag.hasKey(NBT_ITEM_STORAGE_TRACKER)) { itemStorageTracker.readFromNBT(tag.getTagList(NBT_ITEM_STORAGE_TRACKER, Constants.NBT.TAG_COMPOUND)); @@ -505,7 +517,7 @@ public class TileController extends TileBase implements ITickable, INetwork, IRe craftingManager.writeToNBT(tag); - readerWriterManager.writeToNBT(tag); + 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/TileReader.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/TileReader.java index b80ca019d..f64708e21 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/TileReader.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/TileReader.java @@ -27,7 +27,7 @@ public class TileReader extends TileNode { ((IGuiReaderWriter) t.getNode()).setChannel(v); t.getNode().markDirty(); - }, (initial, p) -> GuiBase.executeLater(GuiReaderWriter.class, readerWriter -> readerWriter.updateSelection(p))); + }, (initial, p) -> GuiBase.executeLater(GuiReaderWriter.class, readerWriter -> readerWriter.setCurrentChannel(p))); } public static final TileDataParameter CHANNEL = createChannelParameter();