API improvements
This commit is contained in:
@@ -42,6 +42,13 @@ public interface IRSAPI {
|
||||
*/
|
||||
INetworkNodeManager getNetworkNodeManager(int dimension);
|
||||
|
||||
/**
|
||||
* Marks the network node saved data dirty for a given world.
|
||||
*
|
||||
* @param world the world
|
||||
*/
|
||||
void markNetworkNodesDirty(World world);
|
||||
|
||||
/**
|
||||
* @return the default storage disk behavior
|
||||
*/
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package com.raoulvdberge.refinedstorage.api.network.node;
|
||||
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.Collection;
|
||||
@@ -22,9 +21,10 @@ public interface INetworkNodeManager {
|
||||
/**
|
||||
* Removes a node from the registry at a given position.
|
||||
*
|
||||
* @param pos the position
|
||||
* @param pos the position
|
||||
* @param notifyClient whether to notify the client of the removal
|
||||
*/
|
||||
void removeNode(BlockPos pos);
|
||||
void removeNode(BlockPos pos, boolean notifyClient);
|
||||
|
||||
/**
|
||||
* Sets a node in the registry at a given position.
|
||||
@@ -43,11 +43,4 @@ public interface INetworkNodeManager {
|
||||
* Clears all the nodes.
|
||||
*/
|
||||
void clear();
|
||||
|
||||
/**
|
||||
* Marks the nodes dirty.
|
||||
*
|
||||
* @param world the world
|
||||
*/
|
||||
void markDirty(World world);
|
||||
}
|
||||
|
||||
@@ -23,6 +23,7 @@ import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.preview.CraftingPrev
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.autocrafting.registry.CraftingTaskRegistry;
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.network.NetworkNodeManager;
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.network.NetworkNodeRegistry;
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.network.node.WorldSavedDataNetworkNode;
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.network.readerwriter.ReaderWriterChannel;
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.network.readerwriter.ReaderWriterHandlerRegistry;
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.solderer.SoldererRegistry;
|
||||
@@ -44,10 +45,8 @@ import net.minecraftforge.fml.relauncher.Side;
|
||||
import javax.annotation.Nonnull;
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.function.BiPredicate;
|
||||
|
||||
public class API implements IRSAPI {
|
||||
private static final IRSAPI INSTANCE = new API();
|
||||
@@ -98,10 +97,15 @@ public class API implements IRSAPI {
|
||||
}
|
||||
|
||||
@Override
|
||||
public INetworkNodeManager getNetworkNodeManager(int dimension) {
|
||||
public INetworkNodeManager getNetworkNodeManager(final int dimension) {
|
||||
Map<Integer, INetworkNodeManager> provider = FMLCommonHandler.instance().getEffectiveSide() == Side.CLIENT ? networkNodeProviderClient : networkNodeProviderServer;
|
||||
|
||||
return provider.computeIfAbsent(dimension, r -> new NetworkNodeManager());
|
||||
return provider.computeIfAbsent(dimension, r -> new NetworkNodeManager(dimension));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void markNetworkNodesDirty(World world) {
|
||||
WorldSavedDataNetworkNode.getOrLoadData(world).markDirty();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
package com.raoulvdberge.refinedstorage.apiimpl.network;
|
||||
|
||||
import com.raoulvdberge.refinedstorage.RS;
|
||||
import com.raoulvdberge.refinedstorage.api.network.node.INetworkNode;
|
||||
import com.raoulvdberge.refinedstorage.api.network.node.INetworkNodeManager;
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.network.node.WorldSavedDataNetworkNode;
|
||||
import com.raoulvdberge.refinedstorage.network.MessageNodeRemove;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.Collection;
|
||||
@@ -14,6 +14,12 @@ import java.util.Map;
|
||||
public class NetworkNodeManager implements INetworkNodeManager {
|
||||
private Map<BlockPos, INetworkNode> nodes = new HashMap<>();
|
||||
|
||||
private int dimension;
|
||||
|
||||
public NetworkNodeManager(int dimension) {
|
||||
this.dimension = dimension;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
public INetworkNode getNode(BlockPos pos) {
|
||||
@@ -21,8 +27,12 @@ public class NetworkNodeManager implements INetworkNodeManager {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeNode(BlockPos pos) {
|
||||
public void removeNode(BlockPos pos, boolean notifyClient) {
|
||||
nodes.remove(pos);
|
||||
|
||||
if (notifyClient) {
|
||||
RS.INSTANCE.network.sendToAll(new MessageNodeRemove(dimension, pos));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -39,9 +49,4 @@ public class NetworkNodeManager implements INetworkNodeManager {
|
||||
public void clear() {
|
||||
nodes.clear();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void markDirty(World world) {
|
||||
WorldSavedDataNetworkNode.getOrLoadData(world).markDirty();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -85,7 +85,7 @@ public abstract class NetworkNode implements INetworkNode, INetworkNeighborhoodA
|
||||
@Override
|
||||
public void markDirty() {
|
||||
if (holder.world() != null) {
|
||||
API.instance().getNetworkNodeManager(holder.world().provider.getDimension()).markDirty(holder.world());
|
||||
API.instance().markNetworkNodesDirty(holder.world());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,10 +1,8 @@
|
||||
package com.raoulvdberge.refinedstorage.block;
|
||||
|
||||
import com.raoulvdberge.refinedstorage.RS;
|
||||
import com.raoulvdberge.refinedstorage.api.network.node.INetworkNode;
|
||||
import com.raoulvdberge.refinedstorage.api.network.node.INetworkNodeManager;
|
||||
import com.raoulvdberge.refinedstorage.apiimpl.API;
|
||||
import com.raoulvdberge.refinedstorage.network.MessageNodeRemove;
|
||||
import com.raoulvdberge.refinedstorage.tile.TileNode;
|
||||
import net.minecraft.block.properties.PropertyBool;
|
||||
import net.minecraft.block.state.BlockStateContainer;
|
||||
@@ -56,15 +54,13 @@ public abstract class BlockNode extends BlockBase {
|
||||
|
||||
INetworkNode node = manager.getNode(pos);
|
||||
|
||||
manager.removeNode(pos);
|
||||
manager.markDirty(world);
|
||||
manager.removeNode(pos, true);
|
||||
|
||||
API.instance().markNetworkNodesDirty(world);
|
||||
|
||||
if (node.getNetwork() != null) {
|
||||
node.getNetwork().getNodeGraph().rebuild();
|
||||
}
|
||||
|
||||
// Since Block#breakBlock is only called on the server and we can't trust TileEntity#invalidate:
|
||||
RS.INSTANCE.network.sendToAll(new MessageNodeRemove(world.provider.getDimension(), pos));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -31,9 +31,9 @@ public class BlockStorageMonitor extends BlockNode {
|
||||
if (!world.isRemote) {
|
||||
ItemStack holding = player.inventory.getCurrentItem();
|
||||
|
||||
if (player.isSneaking() || holding.isEmpty()) {
|
||||
if (player.isSneaking()) {
|
||||
tryOpenNetworkGui(RSGui.STORAGE_MONITOR, player, world, pos, side);
|
||||
} else {
|
||||
} else if (!holding.isEmpty()) {
|
||||
NetworkNodeStorageMonitor storageMonitor = ((TileStorageMonitor) world.getTileEntity(pos)).getNode();
|
||||
|
||||
if (storageMonitor.getType() != IType.ITEMS) {
|
||||
|
||||
@@ -38,7 +38,7 @@ public class MessageNodeRemove implements IMessage, IMessageHandler<MessageNodeR
|
||||
Minecraft.getMinecraft().addScheduledTask(() -> {
|
||||
INetworkNodeManager manager = API.instance().getNetworkNodeManager(message.dim);
|
||||
|
||||
manager.removeNode(message.pos);
|
||||
manager.removeNode(message.pos, false);
|
||||
});
|
||||
|
||||
return null;
|
||||
|
||||
Reference in New Issue
Block a user