mirror of
https://github.com/PaperMC/Paper.git
synced 2024-11-21 18:15:54 +01:00
8c5b837e05
Firstly, the old methods all routed to the CompletableFuture method. However, the CF method could not guarantee that if the caller was off-main that the future would be "completed" on-main. Since the callback methods used the CF one, this meant that the callback methods did not guarantee that the callbacks were to be called on the main thread. Now, all methods route to getChunkAtAsync(x, z, gen, urgent, cb) so that the methods with the callback are guaranteed to invoke the callback on the main thread. The CF behavior remains unchanged; it may still appear to complete on main if invoked off-main. Secondly, remove the scheduleOnMain invocation in the async chunk completion. This unnecessarily delays the callback by 1 tick. Thirdly, add getChunksAtAsync(minX, minZ, maxX, maxZ, ...) which will load chunks within an area. This method is provided as a helper as keeping all chunks loaded within an area can be complicated to implement for plugins (due to the lacking ticket API), and is already implemented internally anyways. Fourthly, remove the ticket addition that occured with getChunkAt and getChunkAtAsync. The ticket addition may delay the unloading of the chunk unnecessarily. It also fixes a very rare timing bug where the future/callback would be completed after the chunk unloads.
215 lines
9.5 KiB
Diff
215 lines
9.5 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Jake Potrebic <jake.m.potrebic@gmail.com>
|
|
Date: Sat, 16 Oct 2021 22:57:31 -0700
|
|
Subject: [PATCH] Add missing block data API
|
|
|
|
General purpose patch adding missing getters/setters to BlockData and
|
|
its child types.
|
|
|
|
Co-authored-by: SoSeDiK <mrsosedik@gmail.com>
|
|
Co-authored-by: Fabrizio La Rosa <lr.fabrizio@gmail.com>
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/block/impl/CraftBed.java b/src/main/java/org/bukkit/craftbukkit/block/impl/CraftBed.java
|
|
index 2ccf3fbe3f991b7a014cff3bcd424e6a81bc310a..e5450d3511389bf3bd6461fb6ec65ea82e4ae9f0 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/block/impl/CraftBed.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/block/impl/CraftBed.java
|
|
@@ -51,4 +51,11 @@ public final class CraftBed extends org.bukkit.craftbukkit.block.data.CraftBlock
|
|
public java.util.Set<org.bukkit.block.BlockFace> getFaces() {
|
|
return this.getValues(CraftBed.FACING, org.bukkit.block.BlockFace.class);
|
|
}
|
|
+
|
|
+ // Paper start
|
|
+ @Override
|
|
+ public void setOccupied(boolean occupied) {
|
|
+ set(CraftBed.OCCUPIED, occupied);
|
|
+ }
|
|
+ // Paper end
|
|
}
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCandle.java b/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCandle.java
|
|
index 2230160d5e04e979467a56346600436c1e5dd70c..08436bfeba2f35fb11b16c4f71f76e13c0d44b1a 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCandle.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCandle.java
|
|
@@ -31,6 +31,12 @@ public final class CraftCandle extends org.bukkit.craftbukkit.block.data.CraftBl
|
|
public int getMaximumCandles() {
|
|
return getMax(CraftCandle.CANDLES);
|
|
}
|
|
+ // Paper start
|
|
+ @Override
|
|
+ public int getMinimumCandles() {
|
|
+ return getMin(CraftCandle.CANDLES);
|
|
+ }
|
|
+ // Paper end
|
|
|
|
// org.bukkit.craftbukkit.block.data.CraftLightable
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCherryLeaves.java b/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCherryLeaves.java
|
|
index af29ff861eb2c504ef31cc3236adf1e7f6b46049..bc32c5d4c7568ed4392e4bdb5872066846aa62b6 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCherryLeaves.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/block/impl/CraftCherryLeaves.java
|
|
@@ -51,4 +51,16 @@ public final class CraftCherryLeaves extends org.bukkit.craftbukkit.block.data.C
|
|
public void setWaterlogged(boolean waterlogged) {
|
|
this.set(CraftCherryLeaves.WATERLOGGED, waterlogged);
|
|
}
|
|
+
|
|
+ // Paper start
|
|
+ @Override
|
|
+ public int getMaximumDistance() {
|
|
+ return getMax(DISTANCE);
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public int getMinimumDistance() {
|
|
+ return getMin(DISTANCE);
|
|
+ }
|
|
+ // Paper end
|
|
}
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/block/impl/CraftComposter.java b/src/main/java/org/bukkit/craftbukkit/block/impl/CraftComposter.java
|
|
index 7ce2e8b733bcd496dcfccb1ddfcb7c5c1b64052e..5ae27fc8f9d18bae949d335ea53e7e70917f0e80 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/block/impl/CraftComposter.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/block/impl/CraftComposter.java
|
|
@@ -31,4 +31,11 @@ public final class CraftComposter extends org.bukkit.craftbukkit.block.data.Craf
|
|
public int getMaximumLevel() {
|
|
return getMax(CraftComposter.LEVEL);
|
|
}
|
|
+
|
|
+ // Paper start
|
|
+ @Override
|
|
+ public int getMinimumLevel() {
|
|
+ return getMin(CraftComposter.LEVEL);
|
|
+ }
|
|
+ // Paper end
|
|
}
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/block/impl/CraftDecoratedPot.java b/src/main/java/org/bukkit/craftbukkit/block/impl/CraftDecoratedPot.java
|
|
index 356230b9b266974e36d0508f8c239714d673504d..b7ea9a6fba6b4fc157dfcc4bee099871b8ad7380 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/block/impl/CraftDecoratedPot.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/block/impl/CraftDecoratedPot.java
|
|
@@ -45,4 +45,18 @@ public final class CraftDecoratedPot extends org.bukkit.craftbukkit.block.data.C
|
|
public void setWaterlogged(boolean waterlogged) {
|
|
this.set(CraftDecoratedPot.WATERLOGGED, waterlogged);
|
|
}
|
|
+
|
|
+ // Paper start - add missing block data api
|
|
+ private static final net.minecraft.world.level.block.state.properties.BooleanProperty CRACKED = getBoolean(net.minecraft.world.level.block.DecoratedPotBlock.class, "cracked");
|
|
+
|
|
+ @Override
|
|
+ public boolean isCracked() {
|
|
+ return this.get(CraftDecoratedPot.CRACKED);
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public void setCracked(final boolean cracked) {
|
|
+ this.set(CraftDecoratedPot.CRACKED, cracked);
|
|
+ }
|
|
+ // Paper end - add missing block data api
|
|
}
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/block/impl/CraftFluids.java b/src/main/java/org/bukkit/craftbukkit/block/impl/CraftFluids.java
|
|
index 70d734fc71a4499bbf569b3908aa5fbbdf19e6a0..1af5fe48c5861077555e6bdeb6312859b7b37eb2 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/block/impl/CraftFluids.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/block/impl/CraftFluids.java
|
|
@@ -31,4 +31,11 @@ public final class CraftFluids extends org.bukkit.craftbukkit.block.data.CraftBl
|
|
public int getMaximumLevel() {
|
|
return getMax(CraftFluids.LEVEL);
|
|
}
|
|
+
|
|
+ // Paper start
|
|
+ @Override
|
|
+ public int getMinimumLevel() {
|
|
+ return getMin(CraftFluids.LEVEL);
|
|
+ }
|
|
+ // Paper end
|
|
}
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/block/impl/CraftLayeredCauldron.java b/src/main/java/org/bukkit/craftbukkit/block/impl/CraftLayeredCauldron.java
|
|
index bf0d53f65f8a672c385b2e798b109a9662725f9e..c0e0cbceb0b5c36f4ac4672f217027a5898900a6 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/block/impl/CraftLayeredCauldron.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/block/impl/CraftLayeredCauldron.java
|
|
@@ -31,4 +31,11 @@ public final class CraftLayeredCauldron extends org.bukkit.craftbukkit.block.dat
|
|
public int getMaximumLevel() {
|
|
return getMax(CraftLayeredCauldron.LEVEL);
|
|
}
|
|
+
|
|
+ // Paper start
|
|
+ @Override
|
|
+ public int getMinimumLevel() {
|
|
+ return getMin(CraftLayeredCauldron.LEVEL);
|
|
+ }
|
|
+ // Paper end
|
|
}
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/block/impl/CraftLeaves.java b/src/main/java/org/bukkit/craftbukkit/block/impl/CraftLeaves.java
|
|
index 33d9a950ed678595fe2573e9f89a8d1716040503..ab336b400c1937ff86b681b27b1550e4b7f1ab79 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/block/impl/CraftLeaves.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/block/impl/CraftLeaves.java
|
|
@@ -51,4 +51,16 @@ public final class CraftLeaves extends org.bukkit.craftbukkit.block.data.CraftBl
|
|
public void setWaterlogged(boolean waterlogged) {
|
|
this.set(CraftLeaves.WATERLOGGED, waterlogged);
|
|
}
|
|
+
|
|
+ // Paper start
|
|
+ @Override
|
|
+ public int getMaximumDistance() {
|
|
+ return getMax(CraftLeaves.DISTANCE);
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public int getMinimumDistance() {
|
|
+ return getMin(CraftLeaves.DISTANCE);
|
|
+ }
|
|
+ // Paper end
|
|
}
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/block/impl/CraftLight.java b/src/main/java/org/bukkit/craftbukkit/block/impl/CraftLight.java
|
|
index 49f314b1447212a1a5a7623d2302b5960a44ce6e..8c936a95effa84ba0337d2aaf880cc561591fb33 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/block/impl/CraftLight.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/block/impl/CraftLight.java
|
|
@@ -32,6 +32,13 @@ public final class CraftLight extends org.bukkit.craftbukkit.block.data.CraftBlo
|
|
return getMax(CraftLight.LEVEL);
|
|
}
|
|
|
|
+ // Paper start
|
|
+ @Override
|
|
+ public int getMinimumLevel() {
|
|
+ return getMin(CraftLight.LEVEL);
|
|
+ }
|
|
+ // Paper end
|
|
+
|
|
// org.bukkit.craftbukkit.block.data.CraftWaterlogged
|
|
|
|
private static final net.minecraft.world.level.block.state.properties.BooleanProperty WATERLOGGED = getBoolean(net.minecraft.world.level.block.LightBlock.class, "waterlogged");
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/block/impl/CraftMangroveLeaves.java b/src/main/java/org/bukkit/craftbukkit/block/impl/CraftMangroveLeaves.java
|
|
index 7a1f2fd2f7f8f1b46352fe2c4d0cdf23a88020fd..8b621aaeadcf2cc6e2ccdbab92f4ae2b89a6ca08 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/block/impl/CraftMangroveLeaves.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/block/impl/CraftMangroveLeaves.java
|
|
@@ -51,4 +51,16 @@ public final class CraftMangroveLeaves extends org.bukkit.craftbukkit.block.data
|
|
public void setWaterlogged(boolean waterlogged) {
|
|
this.set(CraftMangroveLeaves.WATERLOGGED, waterlogged);
|
|
}
|
|
+
|
|
+ // Paper start
|
|
+ @Override
|
|
+ public int getMinimumDistance() {
|
|
+ return getMin(CraftMangroveLeaves.DISTANCE);
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public int getMaximumDistance() {
|
|
+ return getMax(CraftMangroveLeaves.DISTANCE);
|
|
+ }
|
|
+ // Paper end
|
|
}
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/block/impl/CraftPinkPetals.java b/src/main/java/org/bukkit/craftbukkit/block/impl/CraftPinkPetals.java
|
|
index 78b220a6f460cd91ad1574c0d32f3e4288eaf431..0f7df1b4c58ba731832958043ba345ec77737e54 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/block/impl/CraftPinkPetals.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/block/impl/CraftPinkPetals.java
|
|
@@ -27,6 +27,13 @@ public final class CraftPinkPetals extends org.bukkit.craftbukkit.block.data.Cra
|
|
this.set(CraftPinkPetals.FLOWER_AMOUNT, flower_amount);
|
|
}
|
|
|
|
+ // Paper start
|
|
+ @Override
|
|
+ public int getMinimumFlowerAmount() {
|
|
+ return getMin(CraftPinkPetals.FLOWER_AMOUNT);
|
|
+ }
|
|
+ // Paper end
|
|
+
|
|
@Override
|
|
public int getMaximumFlowerAmount() {
|
|
return getMax(CraftPinkPetals.FLOWER_AMOUNT);
|