Add chunk unload delay config option
The default config option is no unload delay, so that it maintains parity with Vanilla. Fixes https://github.com/Tuinity/Moonrise/issues/115
This commit is contained in:
@@ -2,6 +2,7 @@ package ca.spottedleaf.moonrise.common.config.moonrise;
|
||||
|
||||
import ca.spottedleaf.moonrise.common.config.ui.ClothConfig;
|
||||
import ca.spottedleaf.moonrise.common.util.MoonriseCommon;
|
||||
import ca.spottedleaf.moonrise.patches.chunk_system.player.RegionizedPlayerChunkLoader;
|
||||
import ca.spottedleaf.moonrise.patches.chunk_system.scheduling.ChunkTaskScheduler;
|
||||
import ca.spottedleaf.yamlconfig.InitialiseHook;
|
||||
import ca.spottedleaf.yamlconfig.annotation.Adaptable;
|
||||
@@ -38,7 +39,7 @@ public final class MoonriseConfig {
|
||||
|
||||
|
||||
@Adaptable
|
||||
public static final class Basic {
|
||||
public static final class Basic implements InitialiseHook {
|
||||
@Serializable(
|
||||
comment = """
|
||||
The maximum rate of chunks to send to any given player, per second. If this value is <= 0,
|
||||
@@ -72,6 +73,20 @@ public final class MoonriseConfig {
|
||||
section = CHUNK_SYSTEM_SECTION
|
||||
)
|
||||
public double playerMaxGenRate = -1.0;
|
||||
|
||||
@Serializable(
|
||||
comment = """
|
||||
The delay before chunks are unloaded around players once they leave their view distance.
|
||||
The Vanilla value is 0 ticks. Setting this value higher (i.e 5s) will allow pets to teleport
|
||||
to their owners when they teleport.
|
||||
"""
|
||||
)
|
||||
public Duration playerChunkUnloadDelay = Duration.parse("0t");
|
||||
|
||||
@Override
|
||||
public void initialise() {
|
||||
RegionizedPlayerChunkLoader.setUnloadDelay(this.playerChunkUnloadDelay.getTimeTicks());
|
||||
}
|
||||
}
|
||||
|
||||
@Serializable(
|
||||
|
||||
@@ -46,7 +46,7 @@ import java.util.function.Function;
|
||||
public final class RegionizedPlayerChunkLoader {
|
||||
|
||||
public static final TicketType<Long> PLAYER_TICKET = TicketType.create("chunk_system:player_ticket", Long::compareTo);
|
||||
public static final TicketType<Long> PLAYER_TICKET_DELAYED = TicketType.create("chunk_system:player_ticket_delayed", Long::compareTo, 5 * 20);
|
||||
public static final TicketType<Long> PLAYER_TICKET_DELAYED = TicketType.create("chunk_system:player_ticket_delayed", Long::compareTo, 1);
|
||||
|
||||
public static final int MIN_VIEW_DISTANCE = 2;
|
||||
public static final int MAX_VIEW_DISTANCE = 32;
|
||||
@@ -55,6 +55,10 @@ public final class RegionizedPlayerChunkLoader {
|
||||
public static final int LOADED_TICKET_LEVEL = ChunkTaskScheduler.getTicketLevel(ChunkStatus.EMPTY);
|
||||
public static final int TICK_TICKET_LEVEL = ChunkHolderManager.ENTITY_TICKING_TICKET_LEVEL;
|
||||
|
||||
public static void setUnloadDelay(final long ticks) {
|
||||
PLAYER_TICKET_DELAYED.timeout = Math.max(1, ticks);
|
||||
}
|
||||
|
||||
public static final class ViewDistanceHolder {
|
||||
|
||||
private volatile ViewDistances viewDistances;
|
||||
|
||||
@@ -220,6 +220,7 @@ accessible class net/minecraft/server/level/DistanceManager$FixedPlayerDistanceC
|
||||
# Ticket
|
||||
accessible field net/minecraft/server/level/Ticket key Ljava/lang/Object;
|
||||
accessible field net/minecraft/server/level/TicketType timeout J
|
||||
mutable field net/minecraft/server/level/TicketType timeout J
|
||||
|
||||
|
||||
# ServerChunkCache
|
||||
|
||||
Reference in New Issue
Block a user