mirror of
https://github.com/HbmMods/Hbm-s-Nuclear-Tech-GIT.git
synced 2026-01-25 10:32:49 +00:00
102 lines
2.6 KiB
Java
102 lines
2.6 KiB
Java
package com.hbm.handler.neutron;
|
|
|
|
import com.hbm.util.fauxpointtwelve.BlockPos;
|
|
import net.minecraft.world.World;
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.HashMap;
|
|
import java.util.List;
|
|
|
|
public class NeutronNodeWorld {
|
|
|
|
// List of all stream worlds.
|
|
public static HashMap<World, StreamWorld> streamWorlds = new HashMap<>();
|
|
|
|
public static NeutronNode getNode(World world, BlockPos pos) {
|
|
StreamWorld streamWorld = streamWorlds.get(world);
|
|
return streamWorld != null ? streamWorld.nodeCache.get(pos) : null;
|
|
}
|
|
|
|
public static void addNode(World world, NeutronNode node) {
|
|
StreamWorld streamWorld = getOrAddWorld(world);
|
|
streamWorld.nodeCache.put(node.pos, node);
|
|
}
|
|
|
|
public static void removeNode(World world, BlockPos pos) {
|
|
StreamWorld streamWorld = streamWorlds.get(world);
|
|
if(streamWorld == null) return;
|
|
streamWorld.removeNode(pos);
|
|
}
|
|
|
|
public static StreamWorld getOrAddWorld(World world) {
|
|
StreamWorld streamWorld = streamWorlds.get(world);
|
|
if(streamWorld == null) {
|
|
streamWorld = new StreamWorld();
|
|
streamWorlds.put(world, streamWorld);
|
|
}
|
|
return streamWorld;
|
|
}
|
|
|
|
public static void removeAllWorlds() {
|
|
streamWorlds.clear();
|
|
}
|
|
|
|
public static void removeEmptyWorlds() {
|
|
streamWorlds.values().removeIf((streamWorld) -> {
|
|
return streamWorld.streams.isEmpty();
|
|
});
|
|
}
|
|
|
|
public static class StreamWorld {
|
|
|
|
private List<NeutronStream> streams;
|
|
private HashMap<BlockPos, NeutronNode> nodeCache = new HashMap<>();
|
|
|
|
public StreamWorld() {
|
|
streams = new ArrayList<>();
|
|
}
|
|
|
|
public void runStreamInteractions(World world) {
|
|
for(NeutronStream stream : streams) {
|
|
stream.runStreamInteraction(world);
|
|
}
|
|
}
|
|
|
|
public void addStream(NeutronStream stream) {
|
|
streams.add(stream);
|
|
}
|
|
|
|
public void removeAllStreams() {
|
|
streams.clear();
|
|
}
|
|
|
|
public void cleanNodes() {
|
|
List<BlockPos> toRemove = new ArrayList<>();
|
|
for(NeutronNode cachedNode : nodeCache.values()) {
|
|
if(cachedNode.type == NeutronStream.NeutronType.RBMK) {
|
|
RBMKNeutronHandler.RBMKNeutronNode node = (RBMKNeutronHandler.RBMKNeutronNode) cachedNode;
|
|
toRemove.addAll(node.checkNode());
|
|
}
|
|
/* TODO: actually do this and uncache pile nodes
|
|
if(cachedNode.type == NeutronStream.NeutronType.PILE) {
|
|
PileNeutronNode node = (PileNeutronNode) cachedNode;
|
|
toRemove.addAll(node.checkNode());
|
|
}
|
|
*/
|
|
}
|
|
|
|
for(BlockPos pos : toRemove) {
|
|
nodeCache.remove(pos);
|
|
}
|
|
}
|
|
|
|
public void removeNode(BlockPos pos) {
|
|
nodeCache.remove(pos);
|
|
}
|
|
|
|
public void removeAllStreamsOfType(NeutronStream.NeutronType type) {
|
|
streams.removeIf(stream -> stream.type == type);
|
|
}
|
|
}
|
|
}
|