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