From 9630f66b6dc062ad27abd557f38a6e17ad9230fe Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sat, 12 Nov 2016 01:22:26 +0100 Subject: [PATCH] Make class structure more logical + correctly stop redstone signal if channel is disabled --- .../api/network/readerwriter/IReader.java | 4 +- .../readerwriter/IReaderWriterHandler.java | 6 +-- .../api/network/readerwriter/IWriter.java | 9 +--- .../readerwriter/ReaderWriterChannel.java | 5 +- .../ReaderWriterHandlerItems.java | 6 +-- .../ReaderWriterHandlerRedstone.java | 4 +- .../refinedstorage/tile/IReaderWriter.java | 25 ++++++--- .../refinedstorage/tile/TileController.java | 10 ++-- .../refinedstorage/tile/TileReader.java | 26 +-------- .../refinedstorage/tile/TileWriter.java | 53 ++++++++----------- 10 files changed, 59 insertions(+), 89 deletions(-) diff --git a/src/main/java/com/raoulvdberge/refinedstorage/api/network/readerwriter/IReader.java b/src/main/java/com/raoulvdberge/refinedstorage/api/network/readerwriter/IReader.java index cfcfb3c3d..bf14298f1 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/api/network/readerwriter/IReader.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/api/network/readerwriter/IReader.java @@ -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 */ diff --git a/src/main/java/com/raoulvdberge/refinedstorage/api/network/readerwriter/IReaderWriterHandler.java b/src/main/java/com/raoulvdberge/refinedstorage/api/network/readerwriter/IReaderWriterHandler.java index 547a363bb..31775ca61 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/api/network/readerwriter/IReaderWriterHandler.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/api/network/readerwriter/IReaderWriterHandler.java @@ -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. diff --git a/src/main/java/com/raoulvdberge/refinedstorage/api/network/readerwriter/IWriter.java b/src/main/java/com/raoulvdberge/refinedstorage/api/network/readerwriter/IWriter.java index 4de8381e5..d35381e9d 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/api/network/readerwriter/IWriter.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/api/network/readerwriter/IWriter.java @@ -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(); } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/readerwriter/ReaderWriterChannel.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/readerwriter/ReaderWriterChannel.java index 7ded9c442..fb4def35e 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/readerwriter/ReaderWriterChannel.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/readerwriter/ReaderWriterChannel.java @@ -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 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 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()); } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/readerwriter/ReaderWriterHandlerItems.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/readerwriter/ReaderWriterHandlerItems.java index f3d8a6c92..692783a54 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/readerwriter/ReaderWriterHandlerItems.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/readerwriter/ReaderWriterHandlerItems.java @@ -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 diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/readerwriter/ReaderWriterHandlerRedstone.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/readerwriter/ReaderWriterHandlerRedstone.java index a8a407372..2b8668ac4 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/readerwriter/ReaderWriterHandlerRedstone.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/readerwriter/ReaderWriterHandlerRedstone.java @@ -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 diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/IReaderWriter.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/IReaderWriter.java index fdbe58029..edd6154bb 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/IReaderWriter.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/IReaderWriter.java @@ -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 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(); + } + } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/TileController.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/TileController.java index 2a20f39f9..8aa2da49b 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/TileController.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/TileController.java @@ -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); } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/TileReader.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/TileReader.java index a04985684..c819e2d8b 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/TileReader.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/TileReader.java @@ -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 TileDataParameter 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; diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/TileWriter.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/TileWriter.java index 60b0f42d7..1d18a5785 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/TileWriter.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/TileWriter.java @@ -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 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);