Make class structure more logical + correctly stop redstone signal if channel is disabled
This commit is contained in:
@@ -1,11 +1,11 @@
|
|||||||
package com.raoulvdberge.refinedstorage.api.network.readerwriter;
|
package com.raoulvdberge.refinedstorage.api.network.readerwriter;
|
||||||
|
|
||||||
import com.raoulvdberge.refinedstorage.api.network.INetworkNode;
|
import com.raoulvdberge.refinedstorage.tile.IReaderWriter;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Represents a reader block in the world.
|
* Represents a reader block in the world.
|
||||||
*/
|
*/
|
||||||
public interface IReader extends INetworkNode {
|
public interface IReader extends IReaderWriter {
|
||||||
/**
|
/**
|
||||||
* @return the redstone strength this reader is receiving
|
* @return the redstone strength this reader is receiving
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -15,11 +15,11 @@ public interface IReaderWriterHandler extends ICapabilityProvider {
|
|||||||
void update(IReaderWriterChannel channel);
|
void update(IReaderWriterChannel channel);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called when the network connection state changes.
|
* Called when this handler is removed from a writer.
|
||||||
*
|
*
|
||||||
* @param state the new connection state
|
* @param writer the writer
|
||||||
*/
|
*/
|
||||||
void onConnectionChange(boolean state);
|
void onWriterDisabled(IWriter writer);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Writes this reader writer handler to NBT.
|
* Writes this reader writer handler to NBT.
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
package com.raoulvdberge.refinedstorage.api.network.readerwriter;
|
package com.raoulvdberge.refinedstorage.api.network.readerwriter;
|
||||||
|
|
||||||
import com.raoulvdberge.refinedstorage.api.network.INetworkNode;
|
import com.raoulvdberge.refinedstorage.tile.IReaderWriter;
|
||||||
import net.minecraft.util.EnumFacing;
|
import net.minecraft.util.EnumFacing;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Represents a writer block in the world.
|
* Represents a writer block in the world.
|
||||||
*/
|
*/
|
||||||
public interface IWriter extends INetworkNode {
|
public interface IWriter extends IReaderWriter {
|
||||||
/**
|
/**
|
||||||
* @return the redstone strength this writer block is emitting
|
* @return the redstone strength this writer block is emitting
|
||||||
*/
|
*/
|
||||||
@@ -21,9 +21,4 @@ public interface IWriter extends INetworkNode {
|
|||||||
* @return the direction of the writer
|
* @return the direction of the writer
|
||||||
*/
|
*/
|
||||||
EnumFacing getDirection();
|
EnumFacing getDirection();
|
||||||
|
|
||||||
/**
|
|
||||||
* @return true if this writer has a stack upgrade, false otherwise
|
|
||||||
*/
|
|
||||||
boolean hasStackUpgrade();
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ package com.raoulvdberge.refinedstorage.apiimpl.network.readerwriter;
|
|||||||
import com.raoulvdberge.refinedstorage.api.network.INetworkMaster;
|
import com.raoulvdberge.refinedstorage.api.network.INetworkMaster;
|
||||||
import com.raoulvdberge.refinedstorage.api.network.readerwriter.*;
|
import com.raoulvdberge.refinedstorage.api.network.readerwriter.*;
|
||||||
import com.raoulvdberge.refinedstorage.apiimpl.API;
|
import com.raoulvdberge.refinedstorage.apiimpl.API;
|
||||||
import com.raoulvdberge.refinedstorage.tile.IReaderWriter;
|
|
||||||
import net.minecraft.nbt.NBTTagCompound;
|
import net.minecraft.nbt.NBTTagCompound;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@@ -32,7 +31,7 @@ public class ReaderWriterChannel implements IReaderWriterChannel {
|
|||||||
@Override
|
@Override
|
||||||
public List<IReader> getReaders() {
|
public List<IReader> getReaders() {
|
||||||
return network.getNodeGraph().all().stream()
|
return network.getNodeGraph().all().stream()
|
||||||
.filter(n -> n instanceof IReader && n instanceof IReaderWriter && name.equals(((IReaderWriter) n).getChannel()))
|
.filter(n -> n instanceof IReader && name.equals(((IReader) n).getChannel()))
|
||||||
.map(n -> (IReader) n)
|
.map(n -> (IReader) n)
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
@@ -40,7 +39,7 @@ public class ReaderWriterChannel implements IReaderWriterChannel {
|
|||||||
@Override
|
@Override
|
||||||
public List<IWriter> getWriters() {
|
public List<IWriter> getWriters() {
|
||||||
return network.getNodeGraph().all().stream()
|
return network.getNodeGraph().all().stream()
|
||||||
.filter(n -> n instanceof IWriter && n instanceof IReaderWriter && name.equals(((IReaderWriter) n).getChannel()))
|
.filter(n -> n instanceof IWriter && name.equals(((IWriter) n).getChannel()))
|
||||||
.map(n -> (IWriter) n)
|
.map(n -> (IWriter) n)
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ public class ReaderWriterHandlerItems implements IReaderWriterHandler {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
ItemStack toInsert = ItemHandlerHelper.copyStackWithSize(slot, writer.hasStackUpgrade() ? 64 : 1);
|
ItemStack toInsert = ItemHandlerHelper.copyStackWithSize(slot, 1);
|
||||||
|
|
||||||
if (ItemHandlerHelper.insertItem(handler, toInsert, true) == null) {
|
if (ItemHandlerHelper.insertItem(handler, toInsert, true) == null) {
|
||||||
ItemHandlerHelper.insertItem(handler, toInsert, false);
|
ItemHandlerHelper.insertItem(handler, toInsert, false);
|
||||||
@@ -60,8 +60,8 @@ public class ReaderWriterHandlerItems implements IReaderWriterHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onConnectionChange(boolean state) {
|
public void onWriterDisabled(IWriter writer) {
|
||||||
|
// NO OP
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -27,8 +27,8 @@ public class ReaderWriterHandlerRedstone implements IReaderWriterHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onConnectionChange(boolean state) {
|
public void onWriterDisabled(IWriter writer) {
|
||||||
// @TODO: Destroy redstone strength
|
writer.setRedstoneStrength(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -1,9 +1,10 @@
|
|||||||
package com.raoulvdberge.refinedstorage.tile;
|
package com.raoulvdberge.refinedstorage.tile;
|
||||||
|
|
||||||
|
import com.raoulvdberge.refinedstorage.api.network.INetworkMaster;
|
||||||
|
import com.raoulvdberge.refinedstorage.api.network.INetworkNode;
|
||||||
import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter;
|
import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter;
|
||||||
import net.minecraft.util.math.BlockPos;
|
|
||||||
|
|
||||||
public interface IReaderWriter {
|
public interface IReaderWriter extends INetworkNode {
|
||||||
String getTitle();
|
String getTitle();
|
||||||
|
|
||||||
String getChannel();
|
String getChannel();
|
||||||
@@ -12,11 +13,23 @@ public interface IReaderWriter {
|
|||||||
|
|
||||||
TileDataParameter<String> getChannelParameter();
|
TileDataParameter<String> getChannelParameter();
|
||||||
|
|
||||||
void onAdd(String name);
|
default void onAdd(String name) {
|
||||||
|
INetworkMaster network = getNetwork();
|
||||||
|
|
||||||
void onRemove(String name);
|
if (network != null && !name.isEmpty()) {
|
||||||
|
network.addReaderWriterChannel(name);
|
||||||
|
|
||||||
BlockPos getNetworkPosition();
|
network.sendReaderWriterChannelUpdate();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
boolean isConnected();
|
default void onRemove(String name) {
|
||||||
|
INetworkMaster network = getNetwork();
|
||||||
|
|
||||||
|
if (network != null && !name.isEmpty()) {
|
||||||
|
network.removeReaderWriterChannel(name);
|
||||||
|
|
||||||
|
network.sendReaderWriterChannelUpdate();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -322,12 +322,6 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR
|
|||||||
if (couldRun != canRun()) {
|
if (couldRun != canRun()) {
|
||||||
couldRun = canRun();
|
couldRun = canRun();
|
||||||
|
|
||||||
for (IReaderWriterChannel channel : readerWriterChannels.values()) {
|
|
||||||
for (IReaderWriterHandler handler : channel.getHandlers()) {
|
|
||||||
handler.onConnectionChange(couldRun);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
nodeGraph.rebuild();
|
nodeGraph.rebuild();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -588,7 +582,9 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR
|
|||||||
@Override
|
@Override
|
||||||
public void sendReaderWriterChannelUpdate() {
|
public void sendReaderWriterChannelUpdate() {
|
||||||
worldObj.getMinecraftServer().getPlayerList().getPlayerList().stream()
|
worldObj.getMinecraftServer().getPlayerList().getPlayerList().stream()
|
||||||
.filter(player -> player.openContainer instanceof ContainerReaderWriter && pos.equals(((ContainerReaderWriter) player.openContainer).getReaderWriter().getNetworkPosition()))
|
.filter(player -> player.openContainer instanceof ContainerReaderWriter &&
|
||||||
|
((ContainerReaderWriter) player.openContainer).getReaderWriter().isConnected() &&
|
||||||
|
pos.equals(((ContainerReaderWriter) player.openContainer).getReaderWriter().getNetwork().getPosition()))
|
||||||
.forEach(this::sendReaderWriterChannelUpdate);
|
.forEach(this::sendReaderWriterChannelUpdate);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -14,10 +14,9 @@ import net.minecraft.nbt.NBTTagCompound;
|
|||||||
import net.minecraft.network.datasync.DataSerializers;
|
import net.minecraft.network.datasync.DataSerializers;
|
||||||
import net.minecraft.tileentity.TileEntity;
|
import net.minecraft.tileentity.TileEntity;
|
||||||
import net.minecraft.util.EnumFacing;
|
import net.minecraft.util.EnumFacing;
|
||||||
import net.minecraft.util.math.BlockPos;
|
|
||||||
import net.minecraftforge.common.capabilities.Capability;
|
import net.minecraftforge.common.capabilities.Capability;
|
||||||
|
|
||||||
public class TileReader extends TileNode implements IReader, IReaderWriter {
|
public class TileReader extends TileNode implements IReader {
|
||||||
private static final String NBT_CHANNEL = "Channel";
|
private static final String NBT_CHANNEL = "Channel";
|
||||||
|
|
||||||
static <T extends TileEntity & IReaderWriter> TileDataParameter<String> createChannelParameter() {
|
static <T extends TileEntity & IReaderWriter> TileDataParameter<String> createChannelParameter() {
|
||||||
@@ -82,29 +81,6 @@ public class TileReader extends TileNode implements IReader, IReaderWriter {
|
|||||||
return CHANNEL;
|
return CHANNEL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onAdd(String name) {
|
|
||||||
if (network != null && !name.isEmpty()) {
|
|
||||||
network.addReaderWriterChannel(name);
|
|
||||||
|
|
||||||
network.sendReaderWriterChannelUpdate();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onRemove(String name) {
|
|
||||||
if (network != null && !name.isEmpty()) {
|
|
||||||
network.removeReaderWriterChannel(name);
|
|
||||||
|
|
||||||
network.sendReaderWriterChannelUpdate();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public BlockPos getNetworkPosition() {
|
|
||||||
return network != null ? network.getPosition() : null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean hasConnectivityState() {
|
public boolean hasConnectivityState() {
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -1,14 +1,16 @@
|
|||||||
package com.raoulvdberge.refinedstorage.tile;
|
package com.raoulvdberge.refinedstorage.tile;
|
||||||
|
|
||||||
import com.raoulvdberge.refinedstorage.RSBlocks;
|
import com.raoulvdberge.refinedstorage.RSBlocks;
|
||||||
|
import com.raoulvdberge.refinedstorage.api.network.readerwriter.IReaderWriterChannel;
|
||||||
|
import com.raoulvdberge.refinedstorage.api.network.readerwriter.IReaderWriterHandler;
|
||||||
import com.raoulvdberge.refinedstorage.api.network.readerwriter.IWriter;
|
import com.raoulvdberge.refinedstorage.api.network.readerwriter.IWriter;
|
||||||
import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter;
|
import com.raoulvdberge.refinedstorage.tile.data.TileDataParameter;
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
import net.minecraft.entity.player.EntityPlayerMP;
|
import net.minecraft.entity.player.EntityPlayerMP;
|
||||||
import net.minecraft.nbt.NBTTagCompound;
|
import net.minecraft.nbt.NBTTagCompound;
|
||||||
import net.minecraft.util.math.BlockPos;
|
import net.minecraft.util.EnumFacing;
|
||||||
|
|
||||||
public class TileWriter extends TileNode implements IWriter, IReaderWriter {
|
public class TileWriter extends TileNode implements IWriter {
|
||||||
private static final String NBT_CHANNEL = "Channel";
|
private static final String NBT_CHANNEL = "Channel";
|
||||||
|
|
||||||
private static final TileDataParameter<String> CHANNEL = TileReader.createChannelParameter();
|
private static final TileDataParameter<String> CHANNEL = TileReader.createChannelParameter();
|
||||||
@@ -34,7 +36,7 @@ public class TileWriter extends TileNode implements IWriter, IReaderWriter {
|
|||||||
if (!worldObj.isRemote && getRedstoneStrength() != lastRedstoneStrength) {
|
if (!worldObj.isRemote && getRedstoneStrength() != lastRedstoneStrength) {
|
||||||
lastRedstoneStrength = getRedstoneStrength();
|
lastRedstoneStrength = getRedstoneStrength();
|
||||||
|
|
||||||
worldObj.notifyNeighborsOfStateChange(pos, RSBlocks.WRITER); // @TODO: Does this need to happen too on orientation change?
|
worldObj.notifyNeighborsOfStateChange(pos, RSBlocks.WRITER);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -52,11 +54,6 @@ public class TileWriter extends TileNode implements IWriter, IReaderWriter {
|
|||||||
redstoneStrength = strength;
|
redstoneStrength = strength;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean hasStackUpgrade() {
|
|
||||||
return false; // @TODO
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getTitle() {
|
public String getTitle() {
|
||||||
return "gui.refinedstorage:writer";
|
return "gui.refinedstorage:writer";
|
||||||
@@ -69,6 +66,16 @@ public class TileWriter extends TileNode implements IWriter, IReaderWriter {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setChannel(String channel) {
|
public void setChannel(String channel) {
|
||||||
|
if (network != null && channel.equals("")) {
|
||||||
|
IReaderWriterChannel networkChannel = network.getReaderWriterChannel(this.channel);
|
||||||
|
|
||||||
|
if (networkChannel != null) {
|
||||||
|
for (IReaderWriterHandler handler : networkChannel.getHandlers()) {
|
||||||
|
handler.onWriterDisabled(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
this.channel = channel;
|
this.channel = channel;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -77,29 +84,6 @@ public class TileWriter extends TileNode implements IWriter, IReaderWriter {
|
|||||||
return CHANNEL;
|
return CHANNEL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onAdd(String name) {
|
|
||||||
if (network != null && !name.isEmpty()) {
|
|
||||||
network.addReaderWriterChannel(name);
|
|
||||||
|
|
||||||
network.sendReaderWriterChannelUpdate();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onRemove(String name) {
|
|
||||||
if (network != null && !name.isEmpty()) {
|
|
||||||
network.removeReaderWriterChannel(name);
|
|
||||||
|
|
||||||
network.sendReaderWriterChannelUpdate();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public BlockPos getNetworkPosition() {
|
|
||||||
return network != null ? network.getPosition() : null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean hasConnectivityState() {
|
public boolean hasConnectivityState() {
|
||||||
return true;
|
return true;
|
||||||
@@ -123,6 +107,13 @@ public class TileWriter extends TileNode implements IWriter, IReaderWriter {
|
|||||||
return tag;
|
return tag;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setDirection(EnumFacing direction) {
|
||||||
|
super.setDirection(direction);
|
||||||
|
|
||||||
|
worldObj.notifyNeighborsOfStateChange(pos, RSBlocks.WRITER);
|
||||||
|
}
|
||||||
|
|
||||||
public void onOpened(EntityPlayer entity) {
|
public void onOpened(EntityPlayer entity) {
|
||||||
if (isConnected()) {
|
if (isConnected()) {
|
||||||
network.sendReaderWriterChannelUpdate((EntityPlayerMP) entity);
|
network.sendReaderWriterChannelUpdate((EntityPlayerMP) entity);
|
||||||
|
|||||||
Reference in New Issue
Block a user