Added chunk unloading
This commit is contained in:
parent
42c0aa1881
commit
48ffc45deb
|
@ -43,6 +43,10 @@ To create a network, simply create extend the Network type.
|
|||
|
||||
```java
|
||||
public class MyNetwork extends Network {
|
||||
public MyNetwork() {
|
||||
super(MyNetwork::new);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void tick(ServerWorld serverWorld) {
|
||||
// Do stuff
|
||||
|
|
|
@ -56,6 +56,10 @@ processResources {
|
|||
filesMatching("fabric.mod.json") {
|
||||
expand "version": inputs.properties.version
|
||||
}
|
||||
|
||||
filesMatching("quilt.mod.json") {
|
||||
expand "version": inputs.properties.version, "group": inputs.properties.maven_group
|
||||
}
|
||||
}
|
||||
|
||||
tasks.withType(JavaCompile).configureEach {
|
||||
|
|
|
@ -7,7 +7,7 @@ minecraft_version=1.20
|
|||
yarn_mappings=1.20+build.1
|
||||
loader_version=0.16.10
|
||||
# Mod Properties
|
||||
mod_version=1.0.0
|
||||
mod_version=1.1.0
|
||||
maven_group=arzumify.networked
|
||||
archives_base_name=networked
|
||||
# Dependencies
|
||||
|
|
|
@ -2,17 +2,23 @@ package arzumify.networked.api;
|
|||
|
||||
import arzumify.networked.impl.BasePresence;
|
||||
import arzumify.networked.impl.MatchMaker;
|
||||
import arzumify.presence.maths.Vec3i;
|
||||
import arzumify.presence.maths.Vec2i;
|
||||
import net.fabricmc.fabric.api.event.lifecycle.v1.ServerChunkEvents;
|
||||
import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents;
|
||||
import net.minecraft.server.world.ServerWorld;
|
||||
import net.minecraft.util.math.ChunkPos;
|
||||
import net.minecraft.world.chunk.WorldChunk;
|
||||
|
||||
import java.util.HashSet;
|
||||
|
||||
abstract public class Network extends BasePresence implements ServerTickEvents.EndWorldTick {
|
||||
abstract public class Network extends BasePresence implements ServerTickEvents.EndWorldTick, ServerChunkEvents.Unload, ServerChunkEvents.Load {
|
||||
private final HashSet<Node> nodes = new HashSet<>();
|
||||
private final NetworkFactory factory;
|
||||
private static final HashSet<ChunkPos> unloadedChunks = new HashSet<>();
|
||||
|
||||
public Network(Vec3i... points) {
|
||||
super((short) 1, points);
|
||||
public Network(NetworkFactory parentFactory) {
|
||||
super((short) 1);
|
||||
this.factory = parentFactory;
|
||||
}
|
||||
|
||||
public void Merge(Network other) {
|
||||
|
@ -26,11 +32,15 @@ abstract public class Network extends BasePresence implements ServerTickEvents.E
|
|||
nodes.add(node);
|
||||
}
|
||||
|
||||
public void Remove(Node node, NetworkFactory factory) {
|
||||
public void Remove(Node node) {
|
||||
System.out.println("Removing");
|
||||
System.out.println(nodes);
|
||||
nodes.remove(node);
|
||||
MatchMaker.matchMaker.Remove(this, MatchMaker.networkDiscovery);
|
||||
rebuildNetwork();
|
||||
}
|
||||
|
||||
private void rebuildNetwork() {
|
||||
for (Node splitNode : nodes) {
|
||||
var found = MatchMaker.matchMaker.Search(splitNode, MatchMaker.networkDiscovery);
|
||||
System.out.println("Removing node lol");
|
||||
|
@ -68,4 +78,26 @@ abstract public class Network extends BasePresence implements ServerTickEvents.E
|
|||
* @param serverWorld The world that the tick was run in
|
||||
*/
|
||||
abstract public void tick(ServerWorld serverWorld);
|
||||
|
||||
@Override
|
||||
public void onChunkUnload(ServerWorld serverWorld, WorldChunk worldChunk) {
|
||||
var chunk = worldChunk.getPos();
|
||||
var needsRebuildFactory = false;
|
||||
for (var loadedChunk : presence.baseChunkPresence) {
|
||||
if (new Vec2i(chunk.x, chunk.z).equals(loadedChunk)) {
|
||||
unloadedChunks.add(chunk);
|
||||
needsRebuildFactory = true;
|
||||
}
|
||||
}
|
||||
if (needsRebuildFactory) {
|
||||
rebuildNetwork();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onChunkLoad(ServerWorld serverWorld, WorldChunk worldChunk) {
|
||||
if (unloadedChunks.contains(worldChunk.getPos())) {
|
||||
rebuildNetwork();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -31,7 +31,7 @@ public class NetworkedBlock extends Block {
|
|||
}
|
||||
|
||||
public void onStateReplaced(BlockPos pos) {
|
||||
network.get(pos).Remove(node.get(pos), factory);
|
||||
network.get(pos).Remove(node.get(pos));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -42,6 +42,7 @@ public class NetworkedBlock extends Block {
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
public void onPlaced(BlockPos pos) {
|
||||
var presence = new Node(new Vec3i(pos.getX(), pos.getY(), pos.getZ()));
|
||||
node.put(pos, presence);
|
||||
|
|
|
@ -18,7 +18,7 @@ public class CodeOnlyNetworkedBlock {
|
|||
|
||||
public void onStateReplaced(BlockPos pos) {
|
||||
System.out.println("Removing self");
|
||||
network.get(pos).Remove(node.get(pos), factory);
|
||||
network.get(pos).Remove(node.get(pos));
|
||||
}
|
||||
|
||||
public void onPlaced(BlockPos pos) {
|
||||
|
|
|
@ -2,6 +2,10 @@ import arzumify.networked.api.Network;
|
|||
import net.minecraft.server.world.ServerWorld;
|
||||
|
||||
public class ExampleNetwork extends Network {
|
||||
public ExampleNetwork() {
|
||||
super(ExampleNetwork::new);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void tick(ServerWorld serverWorld) {
|
||||
System.out.println("Tick");
|
||||
|
|
|
@ -33,6 +33,4 @@ public class NetworkTests {
|
|||
var found = MatchMaker.matchMaker.Search(new BasePresence((short) 1, new Vec3i(0, 0, 0)), MatchMaker.networkDiscovery);
|
||||
assertEquals(3, found.size());
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue