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

View File

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

View File

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

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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