Make class structure more logical + correctly stop redstone signal if channel is disabled

This commit is contained in:
Raoul Van den Berge
2016-11-12 01:22:26 +01:00
parent 729237918c
commit 9630f66b6d
10 changed files with 59 additions and 89 deletions

View File

@@ -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
*/

View File

@@ -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.

View File

@@ -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();
}

View File

@@ -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());
}

View File

@@ -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

View File

@@ -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

View File

@@ -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();
}
}
}

View File

@@ -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);
}

View File

@@ -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;

View File

@@ -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);