a botched nosejob

This commit is contained in:
Boblet 2025-02-04 16:54:02 +01:00
parent a814e581b9
commit 27bd64eafc
6 changed files with 122 additions and 0 deletions

View File

@ -0,0 +1,39 @@
package com.hbm.uninos;
import com.hbm.util.fauxpointtwelve.BlockPos;
import com.hbm.util.fauxpointtwelve.DirPos;
public class GenNode<T> {
public BlockPos[] positions;
public DirPos[] connections;
public INodeNet<T> net;
public boolean expired = false;
public boolean recentlyChanged = true;
public GenNode(BlockPos... positions) {
this.positions = positions;
}
public GenNode<T> setConnections(DirPos... connections) {
this.connections = connections;
return this;
}
public GenNode<T> addConnection(DirPos connection) {
DirPos[] newCons = new DirPos[this.connections.length + 1];
for(int i = 0; i < this.connections.length; i++) newCons[i] = this.connections[i];
newCons[newCons.length - 1] = connection;
this.connections = newCons;
return this;
}
public boolean hasValidNet() {
return this.net != null && this.net.isValid();
}
public void setNet(INodeNet<T> net) {
this.net = net;
this.recentlyChanged = true;
}
}

View File

@ -0,0 +1,29 @@
package com.hbm.uninos;
import java.util.HashMap;
import com.hbm.util.fauxpointtwelve.BlockPos;
public class GenNodeWorld<T> {
public HashMap<BlockPos, GenNode<T>> nodes = new HashMap();
public void pushNode(GenNode<T> node) {
for(BlockPos pos : node.positions) {
nodes.put(pos, node);
}
}
public void popNode(GenNode<T> node) {
if(node.net != null) node.net.destroy();
for(BlockPos pos : node.positions) {
nodes.remove(pos);
node.expired = true;
}
}
public void popNode(BlockPos pos) {
GenNode<T> node = nodes.get(pos);
if(node != null) popNode(node);
}
}

View File

@ -0,0 +1,34 @@
package com.hbm.uninos;
import java.util.HashMap;
import com.hbm.util.fauxpointtwelve.BlockPos;
import net.minecraft.world.World;
public class GenNodespace<T> {
public HashMap<World, GenNodeWorld<T>> worlds = new HashMap<>();
public GenNode<T> getNode(World world, int x, int y, int z) {
GenNodeWorld nodeWorld = worlds.get(world);
if(nodeWorld != null) return (GenNode<T>) nodeWorld.nodes.get(new BlockPos(x, y, z));
return null;
}
public void createNode(World world, GenNode<T> node) {
GenNodeWorld nodeWorld = worlds.get(world);
if(nodeWorld == null) {
nodeWorld = new GenNodeWorld();
worlds.put(world, nodeWorld);
}
nodeWorld.pushNode(node);
}
public void destroyNode(World world, int x, int y, int z) {
GenNode<T> node = getNode(world, x, y, z);
if(node != null) {
worlds.get(world).popNode(node);
}
}
}

View File

@ -0,0 +1,5 @@
package com.hbm.uninos;
public interface INetworkProvider {
}

View File

@ -0,0 +1,7 @@
package com.hbm.uninos;
public interface INodeNet<T> {
public boolean isValid();
public void destroy();
}

View File

@ -0,0 +1,8 @@
package com.hbm.uninos;
import java.util.HashMap;
public class UniNodespace {
public static HashMap<INetworkProvider, GenNodespace> nodespaces = new HashMap();
}