mirror of
https://github.com/SparklyPower/SparklyPaper.git
synced 2025-12-31 21:06:36 +00:00
Update Parallel World Ticking patches (still not finished yet)
This commit is contained in:
@@ -274,6 +274,19 @@ index 568b6e60482c61363b6052c73fbc26a2ba19d5df..7e401489c99f702179ee897c425e89fe
|
||||
org.bukkit.craftbukkit.event.CraftEventFactory.handleInventoryCloseEvent(this, reason); // CraftBukkit
|
||||
// Paper end - Inventory close reason
|
||||
this.connection.send(new ClientboundContainerClosePacket(this.containerMenu.containerId));
|
||||
diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
||||
index 7bb6c8655a637452bd56589845075aed07c190f3..9931432ecf0cd04719ad26f019b787a8acce032a 100644
|
||||
--- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
||||
+++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
||||
@@ -3226,7 +3226,7 @@ public class ServerGamePacketListenerImpl
|
||||
// SparklyPaper start - add CraftItemRecipeEvent
|
||||
// We will pigback a bit on the current implementation
|
||||
net.sparklypower.sparklypaper.event.inventory.CraftItemRecipeEvent craftItemRecipeEvent = new net.sparklypower.sparklypaper.event.inventory.CraftItemRecipeEvent(
|
||||
- ((CraftingInventory) top).getMatrix(), // We cannot use the top inventory directly because (it seems) that the first slot is the "result" slot
|
||||
+ ((org.bukkit.inventory.CraftingInventory) top).getMatrix(), // We cannot use the top inventory directly because (it seems) that the first slot is the "result" slot
|
||||
recipe,
|
||||
event.getCurrentItem()
|
||||
);
|
||||
diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java
|
||||
index 6e22aedd36add8e39a82248193f324b36dfa27b5..c61d80ea5c640c7960fd9f6505a53edc0ebcb24d 100644
|
||||
--- a/net/minecraft/server/players/PlayerList.java
|
||||
@@ -513,6 +526,30 @@ index 1943a6aad888647953e2d9dbbeedb0bd81c6f9df..2c4c57deead027fc78904e7e9bc8a2e2
|
||||
}
|
||||
}
|
||||
}
|
||||
diff --git a/net/minecraft/world/level/block/SaplingBlock.java b/net/minecraft/world/level/block/SaplingBlock.java
|
||||
index a22cb810622e0ae97bc2a0d6390d026d9482b783..c3d1796d8ef4072b5e565925b8dded3f8092bcd4 100644
|
||||
--- a/net/minecraft/world/level/block/SaplingBlock.java
|
||||
+++ b/net/minecraft/world/level/block/SaplingBlock.java
|
||||
@@ -25,7 +25,7 @@ public class SaplingBlock extends VegetationBlock implements BonemealableBlock {
|
||||
public static final IntegerProperty STAGE = BlockStateProperties.STAGE;
|
||||
private static final VoxelShape SHAPE = Block.column(12.0, 0.0, 12.0);
|
||||
protected final TreeGrower treeGrower;
|
||||
- public static @javax.annotation.Nullable org.bukkit.TreeType treeType; // CraftBukkit
|
||||
+ public static final @javax.annotation.Nullable ThreadLocal<org.bukkit.TreeType> treeTypeRT = new ThreadLocal<>(); // CraftBukkit // SparklyPaper - parallel world ticking (from Folia)
|
||||
|
||||
@Override
|
||||
public MapCodec<? extends SaplingBlock> codec() {
|
||||
@@ -62,8 +62,8 @@ public class SaplingBlock extends VegetationBlock implements BonemealableBlock {
|
||||
this.treeGrower.growTree(level, level.getChunkSource().getGenerator(), pos, state, random);
|
||||
level.captureTreeGeneration = false;
|
||||
if (!level.capturedBlockStates.isEmpty()) {
|
||||
- org.bukkit.TreeType treeType = SaplingBlock.treeType;
|
||||
- SaplingBlock.treeType = null;
|
||||
+ org.bukkit.TreeType treeType = SaplingBlock.treeTypeRT.get(); // SparklyPaper - parallel world ticking
|
||||
+ SaplingBlock.treeTypeRT.set(null); // SparklyPaper - parallel world ticking
|
||||
org.bukkit.Location location = org.bukkit.craftbukkit.util.CraftLocation.toBukkit(pos, level.getWorld());
|
||||
java.util.List<org.bukkit.block.BlockState> blocks = new java.util.ArrayList<>(level.capturedBlockStates.values());
|
||||
level.capturedBlockStates.clear();
|
||||
diff --git a/net/minecraft/world/level/block/entity/BaseContainerBlockEntity.java b/net/minecraft/world/level/block/entity/BaseContainerBlockEntity.java
|
||||
index c63370fd458fb4f7190b79b1a8174fcc92d88f9c..5c2033ef17d27ee7242de0c4a00425f74d50cad9 100644
|
||||
--- a/net/minecraft/world/level/block/entity/BaseContainerBlockEntity.java
|
||||
@@ -531,21 +568,106 @@ index c63370fd458fb4f7190b79b1a8174fcc92d88f9c..5c2033ef17d27ee7242de0c4a00425f7
|
||||
final org.bukkit.block.Block block = org.bukkit.craftbukkit.block.CraftBlock.at(blockEntity.getLevel(), blockEntity.getBlockPos());
|
||||
net.kyori.adventure.text.Component lockedMessage = net.kyori.adventure.text.Component.translatable("container.isLocked", io.papermc.paper.adventure.PaperAdventure.asAdventure(displayName));
|
||||
diff --git a/net/minecraft/world/level/block/entity/SculkCatalystBlockEntity.java b/net/minecraft/world/level/block/entity/SculkCatalystBlockEntity.java
|
||||
index 2627583ab12d886b1fba0b1d1e599f942926b499..9c7f922eab91774cc82d898f53700d578290e18c 100644
|
||||
index 2627583ab12d886b1fba0b1d1e599f942926b499..2caa770411c542a70fe50267ce4cffb22fc94b97 100644
|
||||
--- a/net/minecraft/world/level/block/entity/SculkCatalystBlockEntity.java
|
||||
+++ b/net/minecraft/world/level/block/entity/SculkCatalystBlockEntity.java
|
||||
@@ -43,9 +43,9 @@ public class SculkCatalystBlockEntity extends BlockEntity implements GameEventLi
|
||||
@@ -43,9 +43,7 @@ public class SculkCatalystBlockEntity extends BlockEntity implements GameEventLi
|
||||
// Paper end - Fix NPE in SculkBloomEvent world access
|
||||
|
||||
public static void serverTick(Level level, BlockPos pos, BlockState state, SculkCatalystBlockEntity sculkCatalyst) {
|
||||
- org.bukkit.craftbukkit.event.CraftEventFactory.sourceBlockOverride = sculkCatalyst.getBlockPos(); // CraftBukkit - SPIGOT-7068: Add source block override, not the most elegant way but better than passing down a BlockPosition up to five methods deep.
|
||||
+ org.bukkit.craftbukkit.event.CraftEventFactory.sourceBlockOverrideRT.set(pos); // SparklyPaper - parallel world ticking // CraftBukkit - SPIGOT-7068: Add source block override, not the most elegant way but better than passing down a BlockPosition up to five methods deep.
|
||||
sculkCatalyst.catalystListener.getSculkSpreader().updateCursors(level, pos, level.getRandom(), true);
|
||||
- org.bukkit.craftbukkit.event.CraftEventFactory.sourceBlockOverride = null; // CraftBukkit
|
||||
+ org.bukkit.craftbukkit.event.CraftEventFactory.sourceBlockOverrideRT.set(null); // SparklyPaper - parallel world ticking // CraftBukkit
|
||||
}
|
||||
|
||||
@Override
|
||||
diff --git a/net/minecraft/world/level/block/grower/TreeGrower.java b/net/minecraft/world/level/block/grower/TreeGrower.java
|
||||
index d23f255de9208f42125fa358a9e8194c984fe4d3..44be32eddf126365332a6e5c105db114555066c7 100644
|
||||
--- a/net/minecraft/world/level/block/grower/TreeGrower.java
|
||||
+++ b/net/minecraft/world/level/block/grower/TreeGrower.java
|
||||
@@ -203,55 +203,59 @@ public final class TreeGrower {
|
||||
|
||||
// CraftBukkit start
|
||||
private void setTreeType(Holder<ConfiguredFeature<?, ?>> feature) {
|
||||
+ // SparklyPaper start - parallel world ticking
|
||||
+ org.bukkit.TreeType treeType;
|
||||
if (feature.is(TreeFeatures.OAK) || feature.is(TreeFeatures.OAK_BEES_005)) {
|
||||
- net.minecraft.world.level.block.SaplingBlock.treeType = org.bukkit.TreeType.TREE;
|
||||
+ treeType = org.bukkit.TreeType.TREE;
|
||||
} else if (feature.is(TreeFeatures.HUGE_RED_MUSHROOM)) {
|
||||
- net.minecraft.world.level.block.SaplingBlock.treeType = org.bukkit.TreeType.RED_MUSHROOM;
|
||||
+ treeType = org.bukkit.TreeType.RED_MUSHROOM;
|
||||
} else if (feature.is(TreeFeatures.HUGE_BROWN_MUSHROOM)) {
|
||||
- net.minecraft.world.level.block.SaplingBlock.treeType = org.bukkit.TreeType.BROWN_MUSHROOM;
|
||||
+ treeType = org.bukkit.TreeType.BROWN_MUSHROOM;
|
||||
} else if (feature.is(TreeFeatures.JUNGLE_TREE)) {
|
||||
- net.minecraft.world.level.block.SaplingBlock.treeType = org.bukkit.TreeType.COCOA_TREE;
|
||||
+ treeType = org.bukkit.TreeType.COCOA_TREE;
|
||||
} else if (feature.is(TreeFeatures.JUNGLE_TREE_NO_VINE)) {
|
||||
- net.minecraft.world.level.block.SaplingBlock.treeType = org.bukkit.TreeType.SMALL_JUNGLE;
|
||||
+ treeType = org.bukkit.TreeType.SMALL_JUNGLE;
|
||||
} else if (feature.is(TreeFeatures.PINE)) {
|
||||
- net.minecraft.world.level.block.SaplingBlock.treeType = org.bukkit.TreeType.TALL_REDWOOD;
|
||||
+ treeType = org.bukkit.TreeType.TALL_REDWOOD;
|
||||
} else if (feature.is(TreeFeatures.SPRUCE)) {
|
||||
- net.minecraft.world.level.block.SaplingBlock.treeType = org.bukkit.TreeType.REDWOOD;
|
||||
+ treeType = org.bukkit.TreeType.REDWOOD;
|
||||
} else if (feature.is(TreeFeatures.ACACIA)) {
|
||||
- net.minecraft.world.level.block.SaplingBlock.treeType = org.bukkit.TreeType.ACACIA;
|
||||
+ treeType = org.bukkit.TreeType.ACACIA;
|
||||
} else if (feature.is(TreeFeatures.BIRCH) || feature.is(TreeFeatures.BIRCH_BEES_005)) {
|
||||
- net.minecraft.world.level.block.SaplingBlock.treeType = org.bukkit.TreeType.BIRCH;
|
||||
+ treeType = org.bukkit.TreeType.BIRCH;
|
||||
} else if (feature.is(TreeFeatures.SUPER_BIRCH_BEES_0002)) {
|
||||
- net.minecraft.world.level.block.SaplingBlock.treeType = org.bukkit.TreeType.TALL_BIRCH;
|
||||
+ treeType = org.bukkit.TreeType.TALL_BIRCH;
|
||||
} else if (feature.is(TreeFeatures.SWAMP_OAK)) {
|
||||
- net.minecraft.world.level.block.SaplingBlock.treeType = org.bukkit.TreeType.SWAMP;
|
||||
+ treeType = org.bukkit.TreeType.SWAMP;
|
||||
} else if (feature.is(TreeFeatures.FANCY_OAK) || feature.is(TreeFeatures.FANCY_OAK_BEES_005)) {
|
||||
- net.minecraft.world.level.block.SaplingBlock.treeType = org.bukkit.TreeType.BIG_TREE;
|
||||
+ treeType = org.bukkit.TreeType.BIG_TREE;
|
||||
} else if (feature.is(TreeFeatures.JUNGLE_BUSH)) {
|
||||
- net.minecraft.world.level.block.SaplingBlock.treeType = org.bukkit.TreeType.JUNGLE_BUSH;
|
||||
+ treeType = org.bukkit.TreeType.JUNGLE_BUSH;
|
||||
} else if (feature.is(TreeFeatures.DARK_OAK)) {
|
||||
- net.minecraft.world.level.block.SaplingBlock.treeType = org.bukkit.TreeType.DARK_OAK;
|
||||
+ treeType = org.bukkit.TreeType.DARK_OAK;
|
||||
} else if (feature.is(TreeFeatures.MEGA_SPRUCE)) {
|
||||
- net.minecraft.world.level.block.SaplingBlock.treeType = org.bukkit.TreeType.MEGA_REDWOOD;
|
||||
+ treeType = org.bukkit.TreeType.MEGA_REDWOOD;
|
||||
} else if (feature.is(TreeFeatures.MEGA_PINE)) {
|
||||
- net.minecraft.world.level.block.SaplingBlock.treeType = org.bukkit.TreeType.MEGA_PINE;
|
||||
+ treeType = org.bukkit.TreeType.MEGA_PINE;
|
||||
} else if (feature.is(TreeFeatures.MEGA_JUNGLE_TREE)) {
|
||||
- net.minecraft.world.level.block.SaplingBlock.treeType = org.bukkit.TreeType.JUNGLE;
|
||||
+ treeType = org.bukkit.TreeType.JUNGLE;
|
||||
} else if (feature.is(TreeFeatures.AZALEA_TREE)) {
|
||||
- net.minecraft.world.level.block.SaplingBlock.treeType = org.bukkit.TreeType.AZALEA;
|
||||
+ treeType = org.bukkit.TreeType.AZALEA;
|
||||
} else if (feature.is(TreeFeatures.MANGROVE)) {
|
||||
- net.minecraft.world.level.block.SaplingBlock.treeType = org.bukkit.TreeType.MANGROVE;
|
||||
+ treeType = org.bukkit.TreeType.MANGROVE;
|
||||
} else if (feature.is(TreeFeatures.TALL_MANGROVE)) {
|
||||
- net.minecraft.world.level.block.SaplingBlock.treeType = org.bukkit.TreeType.TALL_MANGROVE;
|
||||
+ treeType = org.bukkit.TreeType.TALL_MANGROVE;
|
||||
} else if (feature.is(TreeFeatures.CHERRY) || feature.is(TreeFeatures.CHERRY_BEES_005)) {
|
||||
- net.minecraft.world.level.block.SaplingBlock.treeType = org.bukkit.TreeType.CHERRY;
|
||||
+ treeType = org.bukkit.TreeType.CHERRY;
|
||||
} else if (feature.is(TreeFeatures.PALE_OAK) || feature.is(TreeFeatures.PALE_OAK_BONEMEAL)) {
|
||||
- net.minecraft.world.level.block.SaplingBlock.treeType = org.bukkit.TreeType.PALE_OAK;
|
||||
+ treeType = org.bukkit.TreeType.PALE_OAK;
|
||||
} else if (feature.is(TreeFeatures.PALE_OAK_CREAKING)) {
|
||||
- net.minecraft.world.level.block.SaplingBlock.treeType = org.bukkit.TreeType.PALE_OAK_CREAKING;
|
||||
+ treeType = org.bukkit.TreeType.PALE_OAK_CREAKING;
|
||||
} else {
|
||||
throw new IllegalArgumentException("Unknown tree generator " + feature);
|
||||
}
|
||||
+ net.minecraft.world.level.block.SaplingBlock.treeTypeRT.set(treeType); // SparklyPaper - parallel world ticking
|
||||
+ // SparklyPaper end
|
||||
}
|
||||
// CraftBukkit end
|
||||
}
|
||||
diff --git a/net/minecraft/world/level/chunk/LevelChunk.java b/net/minecraft/world/level/chunk/LevelChunk.java
|
||||
index 5d3fc807221392d378fec283bfdefb8747fb8376..b674e2dbf35b489baf3615236b74f62efe2f33be 100644
|
||||
--- a/net/minecraft/world/level/chunk/LevelChunk.java
|
||||
|
||||
@@ -353,7 +353,7 @@ index 4a405744061b2689a207aa085bec9a6a223342f2..9670ebd485f065dff742e21c622b240a
|
||||
}
|
||||
// Paper end
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java b/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java
|
||||
index e9ca19c8668d3028f9453f478b1853baa24b47b4..d77a39fcc0118d0da4310e7ba843d253571ab313 100644
|
||||
index e9ca19c8668d3028f9453f478b1853baa24b47b4..2ac09f2efff27de7619f8a6102e27ec8bffe2d5a 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java
|
||||
@@ -75,6 +75,11 @@ public class CraftBlock implements Block {
|
||||
@@ -474,6 +474,17 @@ index e9ca19c8668d3028f9453f478b1853baa24b47b4..d77a39fcc0118d0da4310e7ba843d253
|
||||
Direction direction = CraftBlock.blockFaceToNotch(face);
|
||||
BlockFertilizeEvent event = null;
|
||||
ServerLevel world = this.getCraftWorld().getHandle();
|
||||
@@ -553,8 +603,8 @@ public class CraftBlock implements Block {
|
||||
world.captureTreeGeneration = false;
|
||||
|
||||
if (!world.capturedBlockStates.isEmpty()) {
|
||||
- TreeType treeType = SaplingBlock.treeType;
|
||||
- SaplingBlock.treeType = null;
|
||||
+ TreeType treeType = SaplingBlock.treeTypeRT.get(); // SparklyPaper - parallel world ticking
|
||||
+ SaplingBlock.treeTypeRT.set(null); // SparklyPaper - parallel world ticking
|
||||
List<BlockState> states = new ArrayList<>(world.capturedBlockStates.values());
|
||||
world.capturedBlockStates.clear();
|
||||
StructureGrowEvent structureEvent = null;
|
||||
@@ -644,6 +694,11 @@ public class CraftBlock implements Block {
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user