diff --git a/src/main/java/io/nihlen/scriptschunkloaders/ChunkLoaderManager.java b/src/main/java/io/nihlen/scriptschunkloaders/ChunkLoaderManager.java index 5adcd45..5cf8f04 100644 --- a/src/main/java/io/nihlen/scriptschunkloaders/ChunkLoaderManager.java +++ b/src/main/java/io/nihlen/scriptschunkloaders/ChunkLoaderManager.java @@ -2,6 +2,8 @@ import it.unimi.dsi.fastutil.longs.LongSet; import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents; +import net.minecraft.server.level.ChunkMap; +import net.minecraft.server.level.Ticket; import net.minecraft.world.entity.Entity; import net.minecraft.resources.ResourceKey; import net.minecraft.server.MinecraftServer; @@ -104,7 +106,8 @@ private void updateChunkLoaders(ServerLevel world) { if (!loadedChunks.contains(longPos)) { // Load chunk - world.setChunkForced(chunkPos.x(), chunkPos.z(), true); + var ticket = new Ticket(ScriptsChunkLoadersMod.CUSTOM_TICKETTYPE_FORCED, ChunkMap.FORCED_TICKET_LEVEL); + world.getChunkSource().addTicket(ticket, chunkPos); } }); @@ -112,7 +115,7 @@ private void updateChunkLoaders(ServerLevel world) { var chunkPos = ChunkPos.unpack(longPos); if (!currentChunks.contains(chunkPos)) { // Unload chunk - world.setChunkForced(chunkPos.x(), chunkPos.z(), false); + world.getChunkSource().removeTicketWithRadius(ScriptsChunkLoadersMod.CUSTOM_TICKETTYPE_FORCED, chunkPos, 2); } }); } diff --git a/src/main/java/io/nihlen/scriptschunkloaders/ScriptsChunkLoadersMod.java b/src/main/java/io/nihlen/scriptschunkloaders/ScriptsChunkLoadersMod.java index 84810be..67374a5 100644 --- a/src/main/java/io/nihlen/scriptschunkloaders/ScriptsChunkLoadersMod.java +++ b/src/main/java/io/nihlen/scriptschunkloaders/ScriptsChunkLoadersMod.java @@ -2,6 +2,9 @@ import net.fabricmc.api.ModInitializer; import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents; +import net.minecraft.core.Registry; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.server.level.TicketType; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -13,6 +16,8 @@ public class ScriptsChunkLoadersMod implements ModInitializer { // That way, it's clear which mod wrote info, warnings, and errors. public static final Logger LOGGER = LoggerFactory.getLogger(MODID); public static final ChunkLoaderManager CHUNK_LOADER_MANAGER = new ChunkLoaderManager(); + // Add Custom TicketType, Flags are set to mimic FORCED. + public static final TicketType CUSTOM_TICKETTYPE_FORCED = Registry.register(BuiltInRegistries.TICKET_TYPE, ScriptsChunkLoadersMod.MODID, new TicketType(TicketType.NO_TIMEOUT, TicketType.FLAG_PERSIST | TicketType.FLAG_LOADING | TicketType.FLAG_SIMULATION | TicketType.FLAG_KEEP_DIMENSION_ACTIVE)); @Override public void onInitialize() {