From 26e5f4a9dead4dec758399f9f3ad765c6cbc4a96 Mon Sep 17 00:00:00 2001 From: willies952002 Date: Wed, 29 Aug 2018 00:37:42 -0400 Subject: [PATCH] Implement Force-Loaded Chunk API diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java index 2016051ef5..bcbc78bd8f 100644 --- a/src/main/java/net/minecraft/server/World.java +++ b/src/main/java/net/minecraft/server/World.java @@ -3024,6 +3024,7 @@ public abstract class World implements IEntityAccess, GeneratorAccess, IIBlockAc return forcedchunk != null && forcedchunk.a().contains(ChunkCoordIntPair.a(i, j)); } + public boolean setForcedChunk(int i, int j, boolean flag) { return b(i, j, flag); } // Paper - OBFHELPER public boolean b(int i, int j, boolean flag) { String s = "chunks"; ForcedChunk forcedchunk = (ForcedChunk) this.a(this.worldProvider.getDimensionManager(), ForcedChunk::new, "chunks"); diff --git a/src/main/java/org/bukkit/craftbukkit/CraftChunk.java b/src/main/java/org/bukkit/craftbukkit/CraftChunk.java index 12c6d850d2..55394e0c15 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftChunk.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftChunk.java @@ -289,6 +289,18 @@ public class CraftChunk implements Chunk { Preconditions.checkArgument(0 <= z && z <= 15, "z out of range (expected 0-15, got %s)", z); } + // Paper start - Force-Loaded Chunk API + @Override + public boolean isForceLoaded() { + return getHandle().getWorld().isForcedChunk(this.x, this.z); + } + + @Override + public void setForceLoaded(boolean force) { + getHandle().getWorld().setForcedChunk(this.x, this.z, force); + } + // Paper end + static { Arrays.fill(emptySkyLight, (byte) 0xFF); } diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java index 8565de51f4..08fd8850c6 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java @@ -590,6 +590,12 @@ public class CraftWorld implements World { return getChunkAt(location.getBlockX() >> 4, location.getBlockZ() >> 4); } + // Paper start + public boolean isChunkForceLoaded(int x, int z) { + return this.isChunkGenerated(x, z) && this.getHandle().isForcedChunk(x, z); + } + // Paper end + public ChunkGenerator getGenerator() { return generator; } -- 2.19.0