Adding / removing reader writer channels

This commit is contained in:
Raoul Van den Berge
2016-11-11 14:25:21 +01:00
parent 30a3f7dcde
commit 66ee91b722
12 changed files with 208 additions and 37 deletions

View File

@@ -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) { 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) { if (!world.isRemote) {
player.openGui(RS.INSTANCE, RSGui.READER_WRITER, world, pos.getX(), pos.getY(), pos.getZ()); player.openGui(RS.INSTANCE, RSGui.READER_WRITER, world, pos.getX(), pos.getY(), pos.getZ());
((TileReader) world.getTileEntity(pos)).onOpened(player);
} }
return true; return true;

View File

@@ -1,12 +1,21 @@
package com.raoulvdberge.refinedstorage.container; package com.raoulvdberge.refinedstorage.container;
import com.raoulvdberge.refinedstorage.tile.IReaderWriter;
import com.raoulvdberge.refinedstorage.tile.TileBase; import com.raoulvdberge.refinedstorage.tile.TileBase;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
public class ContainerReaderWriter extends ContainerBase { public class ContainerReaderWriter extends ContainerBase {
public ContainerReaderWriter(TileBase tile, EntityPlayer player) { private IReaderWriter readerWriter;
super(tile, player);
public ContainerReaderWriter(IReaderWriter readerWriter, EntityPlayer player) {
super((TileBase) readerWriter, player);
this.readerWriter = readerWriter;
addPlayerInventory(8, 127); addPlayerInventory(8, 127);
} }
public IReaderWriter getReaderWriter() {
return readerWriter;
}
} }

View File

@@ -63,7 +63,7 @@ public class GuiHandler implements IGuiHandler {
case RSGui.DISK_MANIPULATOR: case RSGui.DISK_MANIPULATOR:
return new ContainerDiskManipulator((TileDiskManipulator) tile, player); return new ContainerDiskManipulator((TileDiskManipulator) tile, player);
case RSGui.READER_WRITER: case RSGui.READER_WRITER:
return new ContainerReaderWriter((TileBase) tile, player); return new ContainerReaderWriter((IReaderWriter) tile, player);
default: default:
return null; return null;
} }
@@ -136,7 +136,7 @@ public class GuiHandler implements IGuiHandler {
case RSGui.WIRELESS_CRAFTING_MONITOR: case RSGui.WIRELESS_CRAFTING_MONITOR:
return getWirelessCraftingMonitorGui(player, x, y); return getWirelessCraftingMonitorGui(player, x, y);
case RSGui.READER_WRITER: 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: default:
return null; return null;
} }

View File

@@ -1,16 +1,21 @@
package com.raoulvdberge.refinedstorage.gui; package com.raoulvdberge.refinedstorage.gui;
import com.raoulvdberge.refinedstorage.RS;
import com.raoulvdberge.refinedstorage.container.ContainerReaderWriter; 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.GuiButton;
import net.minecraft.client.gui.GuiTextField; import net.minecraft.client.gui.GuiTextField;
import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.GlStateManager;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList; import java.util.Collections;
import java.util.List; import java.util.List;
public class GuiReaderWriter extends GuiBase { public class GuiReaderWriter extends GuiBase {
public static List<String> CHANNELS = Collections.emptyList();
private static final int VISIBLE_ROWS = 4; private static final int VISIBLE_ROWS = 4;
private static final int ITEM_WIDTH = 143; private static final int ITEM_WIDTH = 143;
@@ -19,14 +24,14 @@ public class GuiReaderWriter extends GuiBase {
private GuiButton add; private GuiButton add;
private GuiButton remove; private GuiButton remove;
private GuiTextField name; private GuiTextField name;
private IReaderWriterGui readerWriter; private IReaderWriter readerWriter;
private int itemSelected = -1; private int itemSelected = -1;
private int itemSelectedX = -1; private int itemSelectedX = -1;
private int itemSelectedY = -1; private int itemSelectedY = -1;
public GuiReaderWriter(ContainerReaderWriter container, IReaderWriterGui readerWriter) { public GuiReaderWriter(ContainerReaderWriter container, IReaderWriter readerWriter) {
super(container, 176, 209); super(container, 176, 209);
this.readerWriter = readerWriter; 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()) { if (inBounds(ix, iy, ITEM_WIDTH, ITEM_HEIGHT, mouseX - guiLeft, mouseY - guiTop) && (item + i) < getChannels().size()) {
itemSelected = item + i; itemSelected = item + i;
name.setText(getChannels().get(itemSelected));
} }
} }
} }
@@ -144,24 +151,18 @@ public class GuiReaderWriter extends GuiBase {
protected void actionPerformed(GuiButton button) throws IOException { protected void actionPerformed(GuiButton button) throws IOException {
super.actionPerformed(button); super.actionPerformed(button);
if (button == add) { String name = this.name.getText().trim();
} else if (button == remove) { if (!name.isEmpty()) {
if (button == add) {
} RS.INSTANCE.network.sendToServer(new MessageReaderWriterChannelAdd(name));
} } else if (button == remove) {
RS.INSTANCE.network.sendToServer(new MessageReaderWriterChannelRemove(name));
private List<String> tempChannels;
private List<String> getChannels() {
if (tempChannels == null) {
tempChannels = new ArrayList<>();
for (int i = 0; i < 40; ++i) {
tempChannels.add("Item " + i);
} }
} }
}
return tempChannels; private List<String> getChannels() {
return readerWriter.isConnected() ? CHANNELS : Collections.emptyList();
} }
} }

View File

@@ -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<MessageReaderWriterChannelAdd> 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);
}
}
}

View File

@@ -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<MessageReaderWriterChannelRemove> 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);
}
}
}

View File

@@ -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<MessageReaderWriterUpdate, IMessage> {
private Collection<String> channels;
public MessageReaderWriterUpdate() {
}
public MessageReaderWriterUpdate(Collection<String> 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<String>) message.channels;
return null;
}
}

View File

@@ -100,6 +100,9 @@ public class ProxyCommon {
RS.INSTANCE.network.registerMessage(MessageGridCraftingPreview.class, MessageGridCraftingPreview.class, id++, Side.SERVER); 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(MessageGridCraftingPreviewResponse.class, MessageGridCraftingPreviewResponse.class, id++, Side.CLIENT);
RS.INSTANCE.network.registerMessage(MessageProcessingPatternEncoderTransfer.class, MessageProcessingPatternEncoderTransfer.class, id++, Side.SERVER); 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()); NetworkRegistry.INSTANCE.registerGuiHandler(RS.INSTANCE, new GuiHandler());

View File

@@ -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();
}

View File

@@ -1,9 +0,0 @@
package com.raoulvdberge.refinedstorage.tile;
public interface IReaderWriterGui {
String getTitle();
void onAdd(String name);
void onRemove(String name);
}

View File

@@ -40,6 +40,7 @@ import com.raoulvdberge.refinedstorage.block.EnumControllerType;
import com.raoulvdberge.refinedstorage.block.EnumGridType; import com.raoulvdberge.refinedstorage.block.EnumGridType;
import com.raoulvdberge.refinedstorage.container.ContainerCraftingMonitor; import com.raoulvdberge.refinedstorage.container.ContainerCraftingMonitor;
import com.raoulvdberge.refinedstorage.container.ContainerGrid; import com.raoulvdberge.refinedstorage.container.ContainerGrid;
import com.raoulvdberge.refinedstorage.container.ContainerReaderWriter;
import com.raoulvdberge.refinedstorage.integration.forgeenergy.ControllerEnergyForge; import com.raoulvdberge.refinedstorage.integration.forgeenergy.ControllerEnergyForge;
import com.raoulvdberge.refinedstorage.integration.ic2.ControllerEnergyIC2; import com.raoulvdberge.refinedstorage.integration.ic2.ControllerEnergyIC2;
import com.raoulvdberge.refinedstorage.integration.ic2.ControllerEnergyIC2None; import com.raoulvdberge.refinedstorage.integration.ic2.ControllerEnergyIC2None;
@@ -580,12 +581,14 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR
@Override @Override
public void sendReaderWriterChannelUpdate() { 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 @Override
public void sendReaderWriterChannelUpdate(EntityPlayerMP player) { public void sendReaderWriterChannelUpdate(EntityPlayerMP player) {
// @TODO RS.INSTANCE.network.sendTo(new MessageReaderWriterUpdate(readerWriterChannels.keySet()), player);
} }
private List<ICraftingMonitorElement> getElements() { private List<ICraftingMonitorElement> getElements() {

View File

@@ -1,8 +1,11 @@
package com.raoulvdberge.refinedstorage.tile; package com.raoulvdberge.refinedstorage.tile;
import com.raoulvdberge.refinedstorage.api.network.readerwriter.IReader; 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 @Override
public int getEnergyUsage() { public int getEnergyUsage() {
return 0; // @TODO return 0; // @TODO
@@ -24,11 +27,35 @@ public class TileReader extends TileNode implements IReader, IReaderWriterGui {
@Override @Override
public void onAdd(String name) { public void onAdd(String name) {
// @TODO if (network != null && !name.isEmpty()) {
network.addReaderWriterChannel(name);
network.sendReaderWriterChannelUpdate();
}
} }
@Override @Override
public void onRemove(String name) { 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);
}
} }
} }