Reader / writer selection
This commit is contained in:
@@ -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
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
|
@@ -59,7 +59,7 @@ public class ReaderWriterHandlerItems implements IReaderWriterHandler {
|
||||
|
||||
@Override
|
||||
public void onConnectionChange(boolean state) {
|
||||
// NO OP
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@@ -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();
|
||||
}
|
||||
|
@@ -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);
|
||||
|
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -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);
|
||||
|
@@ -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);
|
||||
|
Reference in New Issue
Block a user