From 66ee91b7228a06efcc08d8cf87ef4b37119a6d3d Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Fri, 11 Nov 2016 14:25:21 +0100 Subject: [PATCH] Adding / removing reader writer channels --- .../refinedstorage/block/BlockReader.java | 2 + .../container/ContainerReaderWriter.java | 13 ++++- .../refinedstorage/gui/GuiHandler.java | 4 +- .../refinedstorage/gui/GuiReaderWriter.java | 39 ++++++++------- .../MessageReaderWriterChannelAdd.java | 35 +++++++++++++ .../MessageReaderWriterChannelRemove.java | 35 +++++++++++++ .../network/MessageReaderWriterUpdate.java | 50 +++++++++++++++++++ .../refinedstorage/proxy/ProxyCommon.java | 3 ++ .../refinedstorage/tile/IReaderWriter.java | 15 ++++++ .../refinedstorage/tile/IReaderWriterGui.java | 9 ---- .../refinedstorage/tile/TileController.java | 7 ++- .../refinedstorage/tile/TileReader.java | 33 ++++++++++-- 12 files changed, 208 insertions(+), 37 deletions(-) create mode 100755 src/main/java/com/raoulvdberge/refinedstorage/network/MessageReaderWriterChannelAdd.java create mode 100755 src/main/java/com/raoulvdberge/refinedstorage/network/MessageReaderWriterChannelRemove.java create mode 100755 src/main/java/com/raoulvdberge/refinedstorage/network/MessageReaderWriterUpdate.java create mode 100755 src/main/java/com/raoulvdberge/refinedstorage/tile/IReaderWriter.java delete mode 100755 src/main/java/com/raoulvdberge/refinedstorage/tile/IReaderWriterGui.java diff --git a/src/main/java/com/raoulvdberge/refinedstorage/block/BlockReader.java b/src/main/java/com/raoulvdberge/refinedstorage/block/BlockReader.java index 3f7c3d805..082b91546 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/block/BlockReader.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/block/BlockReader.java @@ -21,6 +21,8 @@ public class BlockReader extends BlockNode { public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) { if (!world.isRemote) { player.openGui(RS.INSTANCE, RSGui.READER_WRITER, world, pos.getX(), pos.getY(), pos.getZ()); + + ((TileReader) world.getTileEntity(pos)).onOpened(player); } return true; diff --git a/src/main/java/com/raoulvdberge/refinedstorage/container/ContainerReaderWriter.java b/src/main/java/com/raoulvdberge/refinedstorage/container/ContainerReaderWriter.java index 7bab33807..beb43a1ce 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/container/ContainerReaderWriter.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/container/ContainerReaderWriter.java @@ -1,12 +1,21 @@ package com.raoulvdberge.refinedstorage.container; +import com.raoulvdberge.refinedstorage.tile.IReaderWriter; import com.raoulvdberge.refinedstorage.tile.TileBase; import net.minecraft.entity.player.EntityPlayer; public class ContainerReaderWriter extends ContainerBase { - public ContainerReaderWriter(TileBase tile, EntityPlayer player) { - super(tile, player); + private IReaderWriter readerWriter; + + public ContainerReaderWriter(IReaderWriter readerWriter, EntityPlayer player) { + super((TileBase) readerWriter, player); + + this.readerWriter = readerWriter; addPlayerInventory(8, 127); } + + public IReaderWriter getReaderWriter() { + return readerWriter; + } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiHandler.java b/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiHandler.java index 06a8980a6..0de34f665 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiHandler.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiHandler.java @@ -63,7 +63,7 @@ public class GuiHandler implements IGuiHandler { case RSGui.DISK_MANIPULATOR: return new ContainerDiskManipulator((TileDiskManipulator) tile, player); case RSGui.READER_WRITER: - return new ContainerReaderWriter((TileBase) tile, player); + return new ContainerReaderWriter((IReaderWriter) tile, player); default: return null; } @@ -136,7 +136,7 @@ public class GuiHandler implements IGuiHandler { case RSGui.WIRELESS_CRAFTING_MONITOR: return getWirelessCraftingMonitorGui(player, x, y); case RSGui.READER_WRITER: - return new GuiReaderWriter((ContainerReaderWriter) getContainer(ID, player, tile), (IReaderWriterGui) tile); + return new GuiReaderWriter((ContainerReaderWriter) getContainer(ID, player, tile), (IReaderWriter) tile); default: return null; } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiReaderWriter.java b/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiReaderWriter.java index c189892b0..b5c7bb09f 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiReaderWriter.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/gui/GuiReaderWriter.java @@ -1,16 +1,21 @@ package com.raoulvdberge.refinedstorage.gui; +import com.raoulvdberge.refinedstorage.RS; import com.raoulvdberge.refinedstorage.container.ContainerReaderWriter; -import com.raoulvdberge.refinedstorage.tile.IReaderWriterGui; +import com.raoulvdberge.refinedstorage.network.MessageReaderWriterChannelAdd; +import com.raoulvdberge.refinedstorage.network.MessageReaderWriterChannelRemove; +import com.raoulvdberge.refinedstorage.tile.IReaderWriter; import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.GuiTextField; import net.minecraft.client.renderer.GlStateManager; import java.io.IOException; -import java.util.ArrayList; +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; @@ -19,14 +24,14 @@ public class GuiReaderWriter extends GuiBase { private GuiButton add; private GuiButton remove; private GuiTextField name; - private IReaderWriterGui readerWriter; + private IReaderWriter readerWriter; private int itemSelected = -1; private int itemSelectedX = -1; private int itemSelectedY = -1; - public GuiReaderWriter(ContainerReaderWriter container, IReaderWriterGui readerWriter) { + public GuiReaderWriter(ContainerReaderWriter container, IReaderWriter readerWriter) { super(container, 176, 209); this.readerWriter = readerWriter; @@ -125,6 +130,8 @@ public class GuiReaderWriter extends GuiBase { if (inBounds(ix, iy, ITEM_WIDTH, ITEM_HEIGHT, mouseX - guiLeft, mouseY - guiTop) && (item + i) < getChannels().size()) { itemSelected = item + i; + + name.setText(getChannels().get(itemSelected)); } } } @@ -144,24 +151,18 @@ public class GuiReaderWriter extends GuiBase { protected void actionPerformed(GuiButton button) throws IOException { super.actionPerformed(button); - if (button == add) { + String name = this.name.getText().trim(); - } else if (button == remove) { - - } - } - - private List tempChannels; - - private List getChannels() { - if (tempChannels == null) { - tempChannels = new ArrayList<>(); - - for (int i = 0; i < 40; ++i) { - tempChannels.add("Item " + i); + if (!name.isEmpty()) { + if (button == add) { + RS.INSTANCE.network.sendToServer(new MessageReaderWriterChannelAdd(name)); + } else if (button == remove) { + RS.INSTANCE.network.sendToServer(new MessageReaderWriterChannelRemove(name)); } } + } - return tempChannels; + private List getChannels() { + return readerWriter.isConnected() ? CHANNELS : Collections.emptyList(); } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/network/MessageReaderWriterChannelAdd.java b/src/main/java/com/raoulvdberge/refinedstorage/network/MessageReaderWriterChannelAdd.java new file mode 100755 index 000000000..9b287b44f --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/network/MessageReaderWriterChannelAdd.java @@ -0,0 +1,35 @@ +package com.raoulvdberge.refinedstorage.network; + +import com.raoulvdberge.refinedstorage.container.ContainerReaderWriter; +import io.netty.buffer.ByteBuf; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraftforge.fml.common.network.ByteBufUtils; +import net.minecraftforge.fml.common.network.simpleimpl.IMessage; + +public class MessageReaderWriterChannelAdd extends MessageHandlerPlayerToServer implements IMessage { + private String name; + + public MessageReaderWriterChannelAdd() { + } + + public MessageReaderWriterChannelAdd(String name) { + this.name = name; + } + + @Override + public void fromBytes(ByteBuf buf) { + name = ByteBufUtils.readUTF8String(buf); + } + + @Override + public void toBytes(ByteBuf buf) { + ByteBufUtils.writeUTF8String(buf, name); + } + + @Override + public void handle(MessageReaderWriterChannelAdd message, EntityPlayerMP player) { + if (player.openContainer instanceof ContainerReaderWriter) { + ((ContainerReaderWriter) player.openContainer).getReaderWriter().onAdd(message.name); + } + } +} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/network/MessageReaderWriterChannelRemove.java b/src/main/java/com/raoulvdberge/refinedstorage/network/MessageReaderWriterChannelRemove.java new file mode 100755 index 000000000..cd4e766d7 --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/network/MessageReaderWriterChannelRemove.java @@ -0,0 +1,35 @@ +package com.raoulvdberge.refinedstorage.network; + +import com.raoulvdberge.refinedstorage.container.ContainerReaderWriter; +import io.netty.buffer.ByteBuf; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraftforge.fml.common.network.ByteBufUtils; +import net.minecraftforge.fml.common.network.simpleimpl.IMessage; + +public class MessageReaderWriterChannelRemove extends MessageHandlerPlayerToServer implements IMessage { + private String name; + + public MessageReaderWriterChannelRemove() { + } + + public MessageReaderWriterChannelRemove(String name) { + this.name = name; + } + + @Override + public void fromBytes(ByteBuf buf) { + name = ByteBufUtils.readUTF8String(buf); + } + + @Override + public void toBytes(ByteBuf buf) { + ByteBufUtils.writeUTF8String(buf, name); + } + + @Override + public void handle(MessageReaderWriterChannelRemove message, EntityPlayerMP player) { + if (player.openContainer instanceof ContainerReaderWriter) { + ((ContainerReaderWriter) player.openContainer).getReaderWriter().onRemove(message.name); + } + } +} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/network/MessageReaderWriterUpdate.java b/src/main/java/com/raoulvdberge/refinedstorage/network/MessageReaderWriterUpdate.java new file mode 100755 index 000000000..c0b3857a5 --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/network/MessageReaderWriterUpdate.java @@ -0,0 +1,50 @@ +package com.raoulvdberge.refinedstorage.network; + +import com.raoulvdberge.refinedstorage.gui.GuiReaderWriter; +import io.netty.buffer.ByteBuf; +import net.minecraftforge.fml.common.network.ByteBufUtils; +import net.minecraftforge.fml.common.network.simpleimpl.IMessage; +import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler; +import net.minecraftforge.fml.common.network.simpleimpl.MessageContext; + +import java.util.ArrayList; +import java.util.Collection; + + +public class MessageReaderWriterUpdate implements IMessage, IMessageHandler { + private Collection channels; + + public MessageReaderWriterUpdate() { + } + + public MessageReaderWriterUpdate(Collection 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) { + channels.add(ByteBufUtils.readUTF8String(buf)); + } + } + + @Override + public void toBytes(ByteBuf buf) { + buf.writeInt(channels.size()); + + for (String channel : channels) { + ByteBufUtils.writeUTF8String(buf, channel); + } + } + + @Override + public IMessage onMessage(MessageReaderWriterUpdate message, MessageContext ctx) { + GuiReaderWriter.CHANNELS = (ArrayList) message.channels; + + return null; + } +} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyCommon.java b/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyCommon.java index 6a8bbbce1..67dedfece 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyCommon.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/proxy/ProxyCommon.java @@ -100,6 +100,9 @@ public class ProxyCommon { RS.INSTANCE.network.registerMessage(MessageGridCraftingPreview.class, MessageGridCraftingPreview.class, id++, Side.SERVER); RS.INSTANCE.network.registerMessage(MessageGridCraftingPreviewResponse.class, MessageGridCraftingPreviewResponse.class, id++, Side.CLIENT); RS.INSTANCE.network.registerMessage(MessageProcessingPatternEncoderTransfer.class, MessageProcessingPatternEncoderTransfer.class, id++, Side.SERVER); + RS.INSTANCE.network.registerMessage(MessageReaderWriterUpdate.class, MessageReaderWriterUpdate.class, id++, Side.CLIENT); + RS.INSTANCE.network.registerMessage(MessageReaderWriterChannelAdd.class, MessageReaderWriterChannelAdd.class, id++, Side.SERVER); + RS.INSTANCE.network.registerMessage(MessageReaderWriterChannelRemove.class, MessageReaderWriterChannelRemove.class, id++, Side.SERVER); NetworkRegistry.INSTANCE.registerGuiHandler(RS.INSTANCE, new GuiHandler()); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/IReaderWriter.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/IReaderWriter.java new file mode 100755 index 000000000..fa4c63040 --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/IReaderWriter.java @@ -0,0 +1,15 @@ +package com.raoulvdberge.refinedstorage.tile; + +import net.minecraft.util.math.BlockPos; + +public interface IReaderWriter { + String getTitle(); + + void onAdd(String name); + + void onRemove(String name); + + BlockPos getNetworkPosition(); + + boolean isConnected(); +} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/IReaderWriterGui.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/IReaderWriterGui.java deleted file mode 100755 index 716ce3805..000000000 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/IReaderWriterGui.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.raoulvdberge.refinedstorage.tile; - -public interface IReaderWriterGui { - String getTitle(); - - void onAdd(String name); - - void onRemove(String name); -} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/TileController.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/TileController.java index fdf89e2dd..4325918ab 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/TileController.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/TileController.java @@ -40,6 +40,7 @@ import com.raoulvdberge.refinedstorage.block.EnumControllerType; import com.raoulvdberge.refinedstorage.block.EnumGridType; import com.raoulvdberge.refinedstorage.container.ContainerCraftingMonitor; import com.raoulvdberge.refinedstorage.container.ContainerGrid; +import com.raoulvdberge.refinedstorage.container.ContainerReaderWriter; import com.raoulvdberge.refinedstorage.integration.forgeenergy.ControllerEnergyForge; import com.raoulvdberge.refinedstorage.integration.ic2.ControllerEnergyIC2; import com.raoulvdberge.refinedstorage.integration.ic2.ControllerEnergyIC2None; @@ -580,12 +581,14 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR @Override public void sendReaderWriterChannelUpdate() { - // @TODO + worldObj.getMinecraftServer().getPlayerList().getPlayerList().stream() + .filter(player -> player.openContainer instanceof ContainerReaderWriter && pos.equals(((ContainerReaderWriter) player.openContainer).getReaderWriter().getNetworkPosition())) + .forEach(this::sendReaderWriterChannelUpdate); } @Override public void sendReaderWriterChannelUpdate(EntityPlayerMP player) { - // @TODO + RS.INSTANCE.network.sendTo(new MessageReaderWriterUpdate(readerWriterChannels.keySet()), player); } private List getElements() { diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/TileReader.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/TileReader.java index b3a67d130..354762973 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/TileReader.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/TileReader.java @@ -1,8 +1,11 @@ package com.raoulvdberge.refinedstorage.tile; import com.raoulvdberge.refinedstorage.api.network.readerwriter.IReader; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.util.math.BlockPos; -public class TileReader extends TileNode implements IReader, IReaderWriterGui { +public class TileReader extends TileNode implements IReader, IReaderWriter { @Override public int getEnergyUsage() { return 0; // @TODO @@ -24,11 +27,35 @@ public class TileReader extends TileNode implements IReader, IReaderWriterGui { @Override public void onAdd(String name) { - // @TODO + if (network != null && !name.isEmpty()) { + network.addReaderWriterChannel(name); + + network.sendReaderWriterChannelUpdate(); + } } @Override public void onRemove(String name) { - // @TODO + if (network != null && !name.isEmpty()) { + network.removeReaderWriterChannel(name); + + network.sendReaderWriterChannelUpdate(); + } + } + + @Override + public BlockPos getNetworkPosition() { + return network != null ? network.getPosition() : null; + } + + @Override + public boolean hasConnectivityState() { + return true; + } + + public void onOpened(EntityPlayer entity) { + if (isConnected()) { + network.sendReaderWriterChannelUpdate((EntityPlayerMP) entity); + } } }