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.config.ui.ClothConfig;
|
||||||
import ca.spottedleaf.moonrise.common.util.MoonriseCommon;
|
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.moonrise.patches.chunk_system.scheduling.ChunkTaskScheduler;
|
||||||
import ca.spottedleaf.yamlconfig.InitialiseHook;
|
import ca.spottedleaf.yamlconfig.InitialiseHook;
|
||||||
import ca.spottedleaf.yamlconfig.annotation.Adaptable;
|
import ca.spottedleaf.yamlconfig.annotation.Adaptable;
|
||||||
@@ -38,7 +39,7 @@ public final class MoonriseConfig {
|
|||||||
|
|
||||||
|
|
||||||
@Adaptable
|
@Adaptable
|
||||||
public static final class Basic {
|
public static final class Basic implements InitialiseHook {
|
||||||
@Serializable(
|
@Serializable(
|
||||||
comment = """
|
comment = """
|
||||||
The maximum rate of chunks to send to any given player, per second. If this value is <= 0,
|
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
|
section = CHUNK_SYSTEM_SECTION
|
||||||
)
|
)
|
||||||
public double playerMaxGenRate = -1.0;
|
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(
|
@Serializable(
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ import java.util.function.Function;
|
|||||||
public final class RegionizedPlayerChunkLoader {
|
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 = 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 MIN_VIEW_DISTANCE = 2;
|
||||||
public static final int MAX_VIEW_DISTANCE = 32;
|
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 LOADED_TICKET_LEVEL = ChunkTaskScheduler.getTicketLevel(ChunkStatus.EMPTY);
|
||||||
public static final int TICK_TICKET_LEVEL = ChunkHolderManager.ENTITY_TICKING_TICKET_LEVEL;
|
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 {
|
public static final class ViewDistanceHolder {
|
||||||
|
|
||||||
private volatile ViewDistances viewDistances;
|
private volatile ViewDistances viewDistances;
|
||||||
|
|||||||
@@ -220,6 +220,7 @@ accessible class net/minecraft/server/level/DistanceManager$FixedPlayerDistanceC
|
|||||||
# Ticket
|
# Ticket
|
||||||
accessible field net/minecraft/server/level/Ticket key Ljava/lang/Object;
|
accessible field net/minecraft/server/level/Ticket key Ljava/lang/Object;
|
||||||
accessible field net/minecraft/server/level/TicketType timeout J
|
accessible field net/minecraft/server/level/TicketType timeout J
|
||||||
|
mutable field net/minecraft/server/level/TicketType timeout J
|
||||||
|
|
||||||
|
|
||||||
# ServerChunkCache
|
# ServerChunkCache
|
||||||
|
|||||||
Reference in New Issue
Block a user