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;
|
||||
|
||||
import com.raoulvdberge.refinedstorage.api.network.INetworkNode;
|
||||
import com.raoulvdberge.refinedstorage.tile.IReaderWriter;
|
||||
|
||||
/**
|
||||
* 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
|
||||
*/
|
||||
|
||||
@@ -15,11 +15,11 @@ public interface IReaderWriterHandler extends ICapabilityProvider {
|
||||
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.
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
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;
|
||||
|
||||
/**
|
||||
* 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
|
||||
*/
|
||||
@@ -21,9 +21,4 @@ public interface IWriter extends INetworkNode {
|
||||
* @return the direction of the writer
|
||||
*/
|
||||
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.readerwriter.*;
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.API;
|
||||
import com.raoulvdberge.refinedstorage.tile.IReaderWriter;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
|
||||
import java.util.ArrayList;
|
||||
@@ -32,7 +31,7 @@ public class ReaderWriterChannel implements IReaderWriterChannel {
|
||||
@Override
|
||||
public List<IReader> getReaders() {
|
||||
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)
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
@@ -40,7 +39,7 @@ public class ReaderWriterChannel implements IReaderWriterChannel {
|
||||
@Override
|
||||
public List<IWriter> getWriters() {
|
||||
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)
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
@@ -44,7 +44,7 @@ public class ReaderWriterHandlerItems implements IReaderWriterHandler {
|
||||
continue;
|
||||
}
|
||||
|
||||
ItemStack toInsert = ItemHandlerHelper.copyStackWithSize(slot, writer.hasStackUpgrade() ? 64 : 1);
|
||||
ItemStack toInsert = ItemHandlerHelper.copyStackWithSize(slot, 1);
|
||||
|
||||
if (ItemHandlerHelper.insertItem(handler, toInsert, true) == null) {
|
||||
ItemHandlerHelper.insertItem(handler, toInsert, false);
|
||||
@@ -60,8 +60,8 @@ public class ReaderWriterHandlerItems implements IReaderWriterHandler {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onConnectionChange(boolean state) {
|
||||
|
||||
public void onWriterDisabled(IWriter writer) {
|
||||
// NO OP
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -27,8 +27,8 @@ public class ReaderWriterHandlerRedstone implements IReaderWriterHandler {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onConnectionChange(boolean state) {
|
||||
// @TODO: Destroy redstone strength
|
||||
public void onWriterDisabled(IWriter writer) {
|
||||
writer.setRedstoneStrength(0);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
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 net.minecraft.util.math.BlockPos;
|
||||
|
||||
public interface IReaderWriter {
|
||||
public interface IReaderWriter extends INetworkNode {
|
||||
String getTitle();
|
||||
|
||||
String getChannel();
|
||||
@@ -12,11 +13,23 @@ public interface IReaderWriter {
|
||||
|
||||
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();
|
||||
|
||||
boolean isConnected();
|
||||
network.sendReaderWriterChannelUpdate();
|
||||
}
|
||||
}
|
||||
|
||||
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()) {
|
||||
couldRun = canRun();
|
||||
|
||||
for (IReaderWriterChannel channel : readerWriterChannels.values()) {
|
||||
for (IReaderWriterHandler handler : channel.getHandlers()) {
|
||||
handler.onConnectionChange(couldRun);
|
||||
}
|
||||
}
|
||||
|
||||
nodeGraph.rebuild();
|
||||
}
|
||||
|
||||
@@ -588,7 +582,9 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR
|
||||
@Override
|
||||
public void sendReaderWriterChannelUpdate() {
|
||||
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);
|
||||
}
|
||||
|
||||
|
||||
@@ -14,10 +14,9 @@ import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.network.datasync.DataSerializers;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.EnumFacing;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
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";
|
||||
|
||||
static <T extends TileEntity & IReaderWriter> TileDataParameter<String> createChannelParameter() {
|
||||
@@ -82,29 +81,6 @@ public class TileReader extends TileNode implements IReader, IReaderWriter {
|
||||
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
|
||||
public boolean hasConnectivityState() {
|
||||
return true;
|
||||
|
||||
@@ -1,14 +1,16 @@
|
||||
package com.raoulvdberge.refinedstorage.tile;
|
||||
|
||||
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.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;
|
||||
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 TileDataParameter<String> CHANNEL = TileReader.createChannelParameter();
|
||||
@@ -34,7 +36,7 @@ public class TileWriter extends TileNode implements IWriter, IReaderWriter {
|
||||
if (!worldObj.isRemote && getRedstoneStrength() != lastRedstoneStrength) {
|
||||
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;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasStackUpgrade() {
|
||||
return false; // @TODO
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getTitle() {
|
||||
return "gui.refinedstorage:writer";
|
||||
@@ -69,6 +66,16 @@ public class TileWriter extends TileNode implements IWriter, IReaderWriter {
|
||||
|
||||
@Override
|
||||
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;
|
||||
}
|
||||
|
||||
@@ -77,29 +84,6 @@ public class TileWriter extends TileNode implements IWriter, IReaderWriter {
|
||||
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
|
||||
public boolean hasConnectivityState() {
|
||||
return true;
|
||||
@@ -123,6 +107,13 @@ public class TileWriter extends TileNode implements IWriter, IReaderWriter {
|
||||
return tag;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setDirection(EnumFacing direction) {
|
||||
super.setDirection(direction);
|
||||
|
||||
worldObj.notifyNeighborsOfStateChange(pos, RSBlocks.WRITER);
|
||||
}
|
||||
|
||||
public void onOpened(EntityPlayer entity) {
|
||||
if (isConnected()) {
|
||||
network.sendReaderWriterChannelUpdate((EntityPlayerMP) entity);
|
||||
|
||||
Reference in New Issue
Block a user