Reader / writer selection

This commit is contained in:
Raoul Van den Berge
2016-11-11 15:44:06 +01:00
parent d633771708
commit 27e6826db5
9 changed files with 160 additions and 11 deletions

View File

@@ -61,7 +61,7 @@ public interface IRSAPI {
* @return a new reader writer channel
*/
@Nonnull
IReaderWriterChannel createReaderWriterChannel(INetworkMaster network);
IReaderWriterChannel createReaderWriterChannel(String name, INetworkMaster network);
/**
* @return an empty item stack list

View File

@@ -79,8 +79,8 @@ public class API implements IRSAPI {
@Nonnull
@Override
public IReaderWriterChannel createReaderWriterChannel(INetworkMaster network) {
return new ReaderWriterChannel(network);
public IReaderWriterChannel createReaderWriterChannel(String name, INetworkMaster network) {
return new ReaderWriterChannel(name, network);
}
@Nonnull

View File

@@ -3,6 +3,7 @@ package com.raoulvdberge.refinedstorage.apiimpl.network.readerwriter;
import com.raoulvdberge.refinedstorage.api.network.INetworkMaster;
import com.raoulvdberge.refinedstorage.api.network.readerwriter.*;
import com.raoulvdberge.refinedstorage.apiimpl.API;
import com.raoulvdberge.refinedstorage.tile.IReaderWriter;
import net.minecraft.nbt.NBTTagCompound;
import java.util.ArrayList;
@@ -12,11 +13,13 @@ import java.util.stream.Collectors;
public class ReaderWriterChannel implements IReaderWriterChannel {
private static final String NBT_HANDLER = "Handler_%s";
private String name;
private INetworkMaster network;
private List<IReaderWriterHandler> handlers = new ArrayList<>();
public ReaderWriterChannel(INetworkMaster network) {
public ReaderWriterChannel(String name, INetworkMaster network) {
this.name = name;
this.network = network;
this.handlers.addAll(API.instance().getReaderWriterHandlerRegistry().getFactories().stream().map(f -> f.create(null)).collect(Collectors.toList()));
}
@@ -28,12 +31,18 @@ public class ReaderWriterChannel implements IReaderWriterChannel {
@Override
public List<IReader> getReaders() {
return network.getNodeGraph().all().stream().filter(n -> n instanceof IReader).map(n -> (IReader) n).collect(Collectors.toList());
return network.getNodeGraph().all().stream()
.filter(n -> n instanceof IReader && n instanceof IReaderWriter && name.equals(((IReaderWriter) n).getChannel()))
.map(n -> (IReader) n)
.collect(Collectors.toList());
}
@Override
public List<IWriter> getWriters() {
return network.getNodeGraph().all().stream().filter(n -> n instanceof IWriter).map(n -> (IWriter) n).collect(Collectors.toList());
return network.getNodeGraph().all().stream()
.filter(n -> n instanceof IWriter && n instanceof IReaderWriter && name.equals(((IReaderWriter) n).getChannel()))
.map(n -> (IWriter) n)
.collect(Collectors.toList());
}
@Override

View File

@@ -59,7 +59,7 @@ public class ReaderWriterHandlerItems implements IReaderWriterHandler {
@Override
public void onConnectionChange(boolean state) {
// NO OP
}
@Override

View File

@@ -5,6 +5,7 @@ import com.raoulvdberge.refinedstorage.container.ContainerReaderWriter;
import com.raoulvdberge.refinedstorage.network.MessageReaderWriterChannelAdd;
import com.raoulvdberge.refinedstorage.network.MessageReaderWriterChannelRemove;
import com.raoulvdberge.refinedstorage.tile.IReaderWriter;
import com.raoulvdberge.refinedstorage.tile.data.TileDataManager;
import net.minecraft.client.gui.GuiButton;
import net.minecraft.client.gui.GuiTextField;
import net.minecraft.client.renderer.GlStateManager;
@@ -48,6 +49,8 @@ public class GuiReaderWriter extends GuiBase {
name.setTextColor(16777215);
name.setCanLoseFocus(true);
name.setFocused(false);
updateSelection(readerWriter.getChannelParameter().getValue());
}
@Override
@@ -119,6 +122,8 @@ public class GuiReaderWriter extends GuiBase {
name.mouseClicked(mouseX, mouseY, mouseButton);
int itemSelectedOld = itemSelected;
itemSelected = -1;
if (mouseButton == 0 && inBounds(8, 39, 144, 73, mouseX - guiLeft, mouseY - guiTop)) {
@@ -131,10 +136,14 @@ 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));
TileDataManager.setParameter(readerWriter.getChannelParameter(), getChannels().get(itemSelected));
}
}
}
if (itemSelectedOld != -1 && itemSelected == -1) {
TileDataManager.setParameter(readerWriter.getChannelParameter(), "");
}
}
@@ -162,6 +171,11 @@ public class GuiReaderWriter extends GuiBase {
}
}
public void updateSelection(String channel) {
this.itemSelected = getChannels().indexOf(channel);
this.name.setText(itemSelected != -1 ? getChannels().get(itemSelected) : "");
}
private List<String> getChannels() {
return readerWriter.isConnected() ? CHANNELS : Collections.emptyList();
}

View File

@@ -1,10 +1,17 @@
package com.raoulvdberge.refinedstorage.tile;
import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter;
import net.minecraft.util.math.BlockPos;
public interface IReaderWriter {
String getTitle();
String getChannel();
void setChannel(String channel);
TileDataParameter<String> getChannelParameter();
void onAdd(String name);
void onRemove(String name);

View File

@@ -571,7 +571,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR
@Override
public void addReaderWriterChannel(String name) {
readerWriterChannels.put(name, API.instance().createReaderWriterChannel(this));
readerWriterChannels.put(name, API.instance().createReaderWriterChannel(name, this));
}
@Override
@@ -845,11 +845,13 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR
for (int i = 0; i < readerWriterChannelsList.tagCount(); ++i) {
NBTTagCompound channelTag = readerWriterChannelsList.getCompoundTagAt(i);
IReaderWriterChannel channel = API.instance().createReaderWriterChannel(this);
String name = channelTag.getString(NBT_READER_WRITER_NAME);
IReaderWriterChannel channel = API.instance().createReaderWriterChannel(name, this);
channel.readFromNBT(channelTag);
readerWriterChannels.put(channelTag.getString(NBT_READER_WRITER_NAME), channel);
readerWriterChannels.put(name, channel);
}
}
}

View File

@@ -1,11 +1,49 @@
package com.raoulvdberge.refinedstorage.tile;
import com.raoulvdberge.refinedstorage.api.network.readerwriter.IReader;
import com.raoulvdberge.refinedstorage.gui.GuiReaderWriter;
import com.raoulvdberge.refinedstorage.tile.data.ITileDataConsumer;
import com.raoulvdberge.refinedstorage.tile.data.ITileDataProducer;
import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter;
import net.minecraft.client.Minecraft;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.network.datasync.DataSerializers;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.math.BlockPos;
public class TileReader extends TileNode implements IReader, IReaderWriter {
private static final String NBT_CHANNEL = "Channel";
static <T extends TileEntity & IReaderWriter> TileDataParameter<String> createChannelParameter() {
return new TileDataParameter<>(DataSerializers.STRING, "", new ITileDataProducer<String, T>() {
@Override
public String getValue(T tile) {
return tile.getChannel();
}
}, new ITileDataConsumer<String, T>() {
@Override
public void setValue(T tile, String value) {
tile.setChannel(value);
tile.markDirty();
}
}, parameter -> {
if (Minecraft.getMinecraft().currentScreen instanceof GuiReaderWriter) {
((GuiReaderWriter) Minecraft.getMinecraft().currentScreen).updateSelection(parameter.getValue());
}
});
}
public static final TileDataParameter<String> CHANNEL = createChannelParameter();
private String channel = "";
public TileReader() {
dataManager.addWatchedParameter(CHANNEL);
}
@Override
public int getEnergyUsage() {
return 0; // @TODO
@@ -25,6 +63,21 @@ public class TileReader extends TileNode implements IReader, IReaderWriter {
return "gui.refinedstorage:reader";
}
@Override
public String getChannel() {
return channel;
}
@Override
public void setChannel(String channel) {
this.channel = channel;
}
@Override
public TileDataParameter<String> getChannelParameter() {
return CHANNEL;
}
@Override
public void onAdd(String name) {
if (network != null && !name.isEmpty()) {
@@ -53,6 +106,25 @@ public class TileReader extends TileNode implements IReader, IReaderWriter {
return true;
}
@Override
public void read(NBTTagCompound tag) {
super.read(tag);
if (tag.hasKey(NBT_CHANNEL)) {
channel = tag.getString(NBT_CHANNEL);
}
}
@Override
public NBTTagCompound write(NBTTagCompound tag) {
super.write(tag);
tag.setString(NBT_CHANNEL, channel);
return tag;
}
public void onOpened(EntityPlayer entity) {
if (isConnected()) {
network.sendReaderWriterChannelUpdate((EntityPlayerMP) entity);

View File

@@ -2,14 +2,26 @@ package com.raoulvdberge.refinedstorage.tile;
import com.raoulvdberge.refinedstorage.RSBlocks;
import com.raoulvdberge.refinedstorage.api.network.readerwriter.IWriter;
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;
public class TileWriter extends TileNode implements IWriter, IReaderWriter {
private static final String NBT_CHANNEL = "Channel";
private static final TileDataParameter<String> CHANNEL = TileReader.createChannelParameter();
private String channel = "";
private int redstoneStrength;
private int lastRedstoneStrength;
public TileWriter() {
dataManager.addWatchedParameter(CHANNEL);
}
@Override
public int getEnergyUsage() {
return 0; // @TODO
@@ -50,6 +62,21 @@ public class TileWriter extends TileNode implements IWriter, IReaderWriter {
return "gui.refinedstorage:writer";
}
@Override
public String getChannel() {
return channel;
}
@Override
public void setChannel(String channel) {
this.channel = channel;
}
@Override
public TileDataParameter<String> getChannelParameter() {
return CHANNEL;
}
@Override
public void onAdd(String name) {
if (network != null && !name.isEmpty()) {
@@ -78,6 +105,24 @@ public class TileWriter extends TileNode implements IWriter, IReaderWriter {
return true;
}
@Override
public void read(NBTTagCompound tag) {
super.read(tag);
if (tag.hasKey(NBT_CHANNEL)) {
channel = tag.getString(NBT_CHANNEL);
}
}
@Override
public NBTTagCompound write(NBTTagCompound tag) {
super.write(tag);
tag.setString(NBT_CHANNEL, channel);
return tag;
}
public void onOpened(EntityPlayer entity) {
if (isConnected()) {
network.sendReaderWriterChannelUpdate((EntityPlayerMP) entity);