aboutsummaryrefslogtreecommitdiffhomepage
path: root/patches/server/0634-Add-more-LimitedRegion-API.patch
blob: 0701fb43d1f850425b11a17bb8e91d0e5edc4221 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: dfsek <dfsek@protonmail.com>
Date: Sat, 19 Jun 2021 20:15:59 -0700
Subject: [PATCH] Add more LimitedRegion API


diff --git a/src/main/java/org/bukkit/craftbukkit/generator/CraftLimitedRegion.java b/src/main/java/org/bukkit/craftbukkit/generator/CraftLimitedRegion.java
index 10fb28aabf8c9f764cdd614edbeec4523f8ab431..0ea1586bab74983fca19dcc5415fbc7a044fe186 100644
--- a/src/main/java/org/bukkit/craftbukkit/generator/CraftLimitedRegion.java
+++ b/src/main/java/org/bukkit/craftbukkit/generator/CraftLimitedRegion.java
@@ -251,4 +251,45 @@ public class CraftLimitedRegion extends CraftRegionAccessor implements LimitedRe
     public void addEntityToWorld(net.minecraft.world.entity.Entity entity, CreatureSpawnEvent.SpawnReason reason) {
         this.entities.add(entity);
     }
+
+    // Paper start
+    @Override
+    public void setBlockState(int x, int y, int z, BlockState state) {
+        BlockPos pos = new BlockPos(x, y, z);
+        if (!state.getBlockData().matches(getHandle().getBlockState(pos).createCraftBlockData())) {
+            throw new IllegalArgumentException("BlockData does not match! Expected " + state.getBlockData().getAsString(false) + ", got " + getHandle().getBlockState(pos).createCraftBlockData().getAsString(false));
+        }
+        getHandle().getBlockEntity(pos).load(((org.bukkit.craftbukkit.block.CraftBlockEntityState<?>) state).getSnapshotNBT());
+    }
+
+    @Override
+    public void scheduleBlockUpdate(int x, int y, int z) {
+        BlockPos position = new BlockPos(x, y, z);
+        getHandle().scheduleTick(position, getHandle().getBlockState(position).getBlock(), 0);
+    }
+
+    @Override
+    public void scheduleFluidUpdate(int x, int y, int z) {
+        BlockPos position = new BlockPos(x, y, z);
+        getHandle().scheduleTick(position, getHandle().getFluidState(position).getType(), 0);
+    }
+
+    @Override
+    public World getWorld() {
+        // reading/writing the returned Minecraft world causes a deadlock.
+        // By implementing this, and covering it in warnings, we're assuming people won't be stupid, and
+        // if they are stupid, they'll figure it out pretty fast.
+        return getHandle().getMinecraftWorld().getWorld();
+    }
+
+    @Override
+    public int getCenterChunkX() {
+        return centerChunkX;
+    }
+
+    @Override
+    public int getCenterChunkZ() {
+        return centerChunkZ;
+    }
+    // Paper end
 }