Skip to content

Commit

Permalink
Fix Multithreaded Tracker
Browse files Browse the repository at this point in the history
  • Loading branch information
HaHaWTH committed Feb 23, 2025
1 parent 8a7645e commit af1b380
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 21 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -177,7 +177,7 @@ index f106373ef3ac4a8685c2939c9e8361688a285913..51ae390c68e7a3aa193329cc3bc47ca6
public boolean visible = true;

diff --git a/net/minecraft/server/level/ServerEntity.java b/net/minecraft/server/level/ServerEntity.java
index d8298c7925e3bcea07ead4d438478cc51abcfa16..2b559cb1cfd0d3a729a2b14f197880fe4af8cb92 100644
index d8298c7925e3bcea07ead4d438478cc51abcfa16..75670751064add901c2628d53d8028350f966c5d 100644
--- a/net/minecraft/server/level/ServerEntity.java
+++ b/net/minecraft/server/level/ServerEntity.java
@@ -110,8 +110,16 @@ public class ServerEntity {
Expand All @@ -199,26 +199,7 @@ index d8298c7925e3bcea07ead4d438478cc51abcfa16..2b559cb1cfd0d3a729a2b14f197880fe
}
}
);
@@ -376,6 +384,8 @@ public class ServerEntity {
}

if (this.entity instanceof LivingEntity livingEntity) {
+ // Leaf start - Multithreaded tracker
+ Runnable runnable = () -> {
List<Pair<EquipmentSlot, ItemStack>> list = Lists.newArrayList();

for (EquipmentSlot equipmentSlot : EquipmentSlot.VALUES) {
@@ -389,6 +399,9 @@ public class ServerEntity {
consumer.accept(new ClientboundSetEquipmentPacket(this.entity.getId(), list, true)); // Paper - data sanitization
}
((LivingEntity) this.entity).detectEquipmentUpdatesPublic(); // CraftBukkit - SPIGOT-3789: sync again immediately after sending
+ };
+ if (org.dreeam.leaf.config.modules.async.MultithreadedTracker.enabled && Thread.currentThread() instanceof org.dreeam.leaf.async.tracker.MultithreadedTracker.MultithreadedTrackerThread) net.minecraft.server.MinecraftServer.getServer().scheduleOnMain(runnable); else runnable.run();
+ // Leaf end - Multithreaded tracker
}

if (!this.entity.getPassengers().isEmpty()) {
@@ -435,12 +448,15 @@ public class ServerEntity {
@@ -435,12 +443,15 @@ public class ServerEntity {
if (this.entity instanceof LivingEntity) {
Set<AttributeInstance> attributesToSync = ((LivingEntity)this.entity).getAttributes().getAttributesToSync();
if (!attributesToSync.isEmpty()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,3 +40,30 @@ index 379c2dc1853e45a96dda9b13bf28b7e08f65658a..361f4de9cdf0f7505628a2fed2a3f536
throw new IllegalStateException(event.getEventName() + " may only be triggered synchronously.");
}
// Leaves start - skip photographer
diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
index 56afb317cef0e049aacdd36a1be5f9b7af4d0c77..f46653f36502e2a8b9adeec6d149c06d6a04221f 100644
--- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
+++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
@@ -1970,6 +1970,22 @@ public class CraftEventFactory {
}

public static boolean handleBlockFormEvent(Level world, BlockPos pos, net.minecraft.world.level.block.state.BlockState block, int flag, @Nullable Entity entity) {
+ if (org.dreeam.leaf.config.modules.async.MultithreadedTracker.enabled && Thread.currentThread() instanceof org.dreeam.leaf.async.tracker.MultithreadedTracker.MultithreadedTrackerThread) {
+ java.util.concurrent.CompletableFuture<Boolean> future = new java.util.concurrent.CompletableFuture<>();
+ net.minecraft.server.MinecraftServer.getServer().scheduleOnMain(() -> {
+ CraftBlockState blockState = CraftBlockStates.getBlockState(world, pos, flag);
+ blockState.setData(block);
+
+ BlockFormEvent event = (entity == null) ? new BlockFormEvent(blockState.getBlock(), blockState) : new EntityBlockFormEvent(entity.getBukkitEntity(), blockState.getBlock(), blockState);
+ world.getCraftServer().getPluginManager().callEvent(event);
+
+ if (!event.isCancelled()) {
+ blockState.update(true);
+ }
+ future.complete(!event.isCancelled());
+ });
+ return future.join();
+ }
CraftBlockState blockState = CraftBlockStates.getBlockState(world, pos, flag);
blockState.setData(block);

0 comments on commit af1b380

Please sign in to comment.