Implement equals/hashCode on nodes

This commit is contained in:
Raoul Van den Berge
2016-08-26 16:06:40 +02:00
parent 512f7149b2
commit 3913bbf815
6 changed files with 25 additions and 42 deletions

View File

@@ -1,10 +1,8 @@
package refinedstorage.api.network;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import java.util.List;
import java.util.Set;
/**
* A graph of all the nodes connected to a network.
@@ -23,11 +21,6 @@ public interface INetworkNodeGraph {
*/
List<INetworkNode> all();
/**
* @return A set of hashes of all connected nodes, see {@link NetworkUtils#getNodeHashCode(World, INetworkNode)}
*/
Set<Integer> allHashes();
/**
* Disconnects and notifies all connected nodes.
*/

View File

@@ -3,7 +3,6 @@ package refinedstorage.api.network;
import io.netty.buffer.ByteBuf;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
import net.minecraftforge.fluids.FluidRegistry;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fml.common.network.ByteBufUtils;
@@ -42,13 +41,7 @@ public final class NetworkUtils {
return stack.getFluid().hashCode() * (stack.tag != null ? stack.tag.hashCode() : 1);
}
public static int getNodeHashCode(World world, INetworkNode node) {
int result = node.getPosition().hashCode();
result = 31 * result + world.provider.getDimension();
return result;
}
public static void writeStack(ByteBuf buf, INetworkMaster network, ItemStack stack) {
public static void writeItemStack(ByteBuf buf, INetworkMaster network, ItemStack stack) {
buf.writeInt(Item.getIdFromItem(stack.getItem()));
buf.writeInt(stack.stackSize);
buf.writeInt(stack.getItemDamage());

View File

@@ -7,7 +7,6 @@ import net.minecraft.world.World;
import net.minecraftforge.common.DimensionManager;
import refinedstorage.api.network.INetworkNode;
import refinedstorage.api.network.INetworkNodeGraph;
import refinedstorage.api.network.NetworkUtils;
import refinedstorage.tile.TileController;
import refinedstorage.tile.TileNetworkTransmitter;
@@ -17,7 +16,6 @@ public class NetworkNodeGraph implements INetworkNodeGraph {
private TileController controller;
private List<INetworkNode> nodes = new ArrayList<>();
private Set<Integer> nodeHashes = new HashSet<>();
public NetworkNodeGraph(TileController controller) {
this.controller = controller;
@@ -36,7 +34,6 @@ public class NetworkNodeGraph implements INetworkNodeGraph {
World world = getWorld();
List<INetworkNode> newNodes = new ArrayList<>();
Set<Integer> newNodeHashes = new HashSet<>();
Set<BlockPos> checked = new HashSet<>();
Queue<BlockPos> toCheck = new ArrayDeque<>();
@@ -66,7 +63,6 @@ public class NetworkNodeGraph implements INetworkNodeGraph {
INetworkNode node = (INetworkNode) tile;
newNodes.add(node);
newNodeHashes.add(NetworkUtils.getNodeHashCode(world, node));
if (tile instanceof TileNetworkTransmitter) {
final TileNetworkTransmitter transmitter = (TileNetworkTransmitter) tile;
@@ -86,7 +82,6 @@ public class NetworkNodeGraph implements INetworkNodeGraph {
dimensionGraph.rebuild(transmitter.getReceiver(), false);
newNodes.addAll(dimensionGraph.all());
newNodeHashes.addAll(dimensionGraph.allHashes());
}
} else {
BlockPos receiver = transmitter.getReceiver();
@@ -109,34 +104,30 @@ public class NetworkNodeGraph implements INetworkNodeGraph {
}
}
List<INetworkNode> oldNodes = new ArrayList<>(nodes);
Set<Integer> oldNodeHashes = new HashSet<>(nodeHashes);
this.nodes = newNodes;
this.nodeHashes = newNodeHashes;
boolean changed = false;
if (notify) {
boolean changed = false;
for (INetworkNode newNode : nodes) {
if (!oldNodeHashes.contains(NetworkUtils.getNodeHashCode(newNode.getNodeWorld(), newNode))) {
for (INetworkNode newNode : newNodes) {
if (!nodes.contains(newNode)) {
newNode.onConnected(controller);
changed = true;
}
}
for (INetworkNode oldNode : oldNodes) {
if (!nodeHashes.contains(NetworkUtils.getNodeHashCode(oldNode.getNodeWorld(), oldNode))) {
for (INetworkNode oldNode : nodes) {
if (!newNodes.contains(oldNode)) {
oldNode.onDisconnected(controller);
changed = true;
}
}
}
if (changed) {
controller.getDataManager().sendParameterToWatchers(TileController.NODES);
}
this.nodes = newNodes;
if (changed) {
controller.getDataManager().sendParameterToWatchers(TileController.NODES);
}
}
@@ -145,11 +136,6 @@ public class NetworkNodeGraph implements INetworkNodeGraph {
return nodes;
}
@Override
public Set<Integer> allHashes() {
return nodeHashes;
}
@Override
public void disconnectAll() {
for (INetworkNode node : nodes) {
@@ -159,7 +145,6 @@ public class NetworkNodeGraph implements INetworkNodeGraph {
}
nodes.clear();
nodeHashes.clear();
controller.getDataManager().sendParameterToWatchers(TileController.NODES);
}

View File

@@ -35,7 +35,7 @@ public class MessageGridItemDelta implements IMessage, IMessageHandler<MessageGr
@Override
public void toBytes(ByteBuf buf) {
NetworkUtils.writeStack(buf, network, stack);
NetworkUtils.writeItemStack(buf, network, stack);
buf.writeInt(delta);
}

View File

@@ -38,7 +38,7 @@ public class MessageGridItemUpdate implements IMessage, IMessageHandler<MessageG
buf.writeInt(network.getItemStorage().getStacks().size());
for (ItemStack stack : network.getItemStorage().getStacks()) {
NetworkUtils.writeStack(buf, network, stack);
NetworkUtils.writeItemStack(buf, network, stack);
}
}

View File

@@ -165,4 +165,16 @@ public abstract class TileNode extends TileBase implements INetworkNode, IRedsto
public boolean hasConnectivityState() {
return false;
}
@Override
public boolean equals(Object o) {
return o instanceof TileNode && ((TileNode) o).getPosition().equals(pos);
}
@Override
public int hashCode() {
int result = pos.hashCode();
result = 31 * result + worldObj.provider.getDimension();
return result;
}
}