From 8394c4566630ca69cc39e9fe068889bcd84c24bd Mon Sep 17 00:00:00 2001 From: Warrior <50800980+Warriorrrr@users.noreply.github.com> Date: Thu, 16 Apr 2026 10:09:00 +0200 Subject: [PATCH 1/5] Run kill command on entity thread --- .../essentials/commands/Commandkill.java | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandkill.java b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandkill.java index 80b9983bba2..50e21f0851f 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandkill.java +++ b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandkill.java @@ -32,13 +32,15 @@ protected void updatePlayer(final Server server, final CommandSource sender, fin } final DamageEventProvider provider = ess.provider(DamageEventProvider.class); - final EntityDamageEvent ede = provider.callDamageEvent(matchPlayer, sender.isPlayer() && sender.getPlayer().getName().equals(matchPlayer.getName()) ? EntityDamageEvent.DamageCause.SUICIDE : EntityDamageEvent.DamageCause.CUSTOM, Float.MAX_VALUE); - if (ede.isCancelled() && sender.isPlayer() && !ess.getUser(sender.getPlayer()).isAuthorized("essentials.kill.force")) { - return; - } - ede.getEntity().setLastDamageCause(ede); - matchPlayer.setHealth(0); - sender.sendTl("kill", matchPlayer.getDisplayName()); + ess.scheduleEntityDelayedTask(matchPlayer, () -> { + final EntityDamageEvent ede = provider.callDamageEvent(matchPlayer, sender.isPlayer() && sender.getPlayer().getName().equals(matchPlayer.getName()) ? EntityDamageEvent.DamageCause.SUICIDE : EntityDamageEvent.DamageCause.CUSTOM, Float.MAX_VALUE); + if (ede.isCancelled() && sender.isPlayer() && !ess.getUser(sender.getPlayer()).isAuthorized("essentials.kill.force")) { + return; + } + ede.getEntity().setLastDamageCause(ede); + matchPlayer.setHealth(0); + sender.sendTl("kill", matchPlayer.getDisplayName()); + }); } @Override From b93b53492283958fa377a590055ee20842ee1910 Mon Sep 17 00:00:00 2001 From: Warrior <50800980+Warriorrrr@users.noreply.github.com> Date: Thu, 16 Apr 2026 10:36:27 +0200 Subject: [PATCH 2/5] Fix merge artifact (?) --- .../src/main/java/com/earth2me/essentials/Essentials.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/Essentials/src/main/java/com/earth2me/essentials/Essentials.java b/Essentials/src/main/java/com/earth2me/essentials/Essentials.java index dd6dbb94e55..644910b3f76 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/Essentials.java +++ b/Essentials/src/main/java/com/earth2me/essentials/Essentials.java @@ -108,7 +108,6 @@ import net.ess3.provider.providers.PrehistoricPotionMetaProvider; import net.essentialsx.api.v2.services.BalanceTop; import net.essentialsx.api.v2.services.mail.MailService; -import net.kyori.adventure.platform.bukkit.BukkitAudiences; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Server; @@ -612,8 +611,7 @@ public void reload() { } } - AdventureUtil.setEss(this); - bukkitAudience = BukkitAudiences.create(this); + initAdventureFacet(); } private void initAdventureFacet() { From ef163cd53150198fbe6ae35b67610594b66f2681 Mon Sep 17 00:00:00 2001 From: Warrior <50800980+Warriorrrr@users.noreply.github.com> Date: Thu, 16 Apr 2026 10:40:29 +0200 Subject: [PATCH 3/5] Fix retrieving tile entity count for gc command --- .../com/earth2me/essentials/Essentials.java | 5 +++++ .../essentials/commands/Commandgc.java | 16 +++------------ .../WorldTileEntityCountProvider.java | 7 +++++++ .../BukkitWorldTileEntityCountProvider.java | 20 +++++++++++++++++++ .../PaperWorldTileEntityCountProvider.java | 13 ++++++++++++ 5 files changed, 48 insertions(+), 13 deletions(-) create mode 100644 providers/BaseProviders/src/main/java/net/ess3/provider/WorldTileEntityCountProvider.java create mode 100644 providers/BaseProviders/src/main/java/net/ess3/provider/providers/BukkitWorldTileEntityCountProvider.java create mode 100644 providers/PaperProvider/src/main/java/net/ess3/provider/providers/PaperWorldTileEntityCountProvider.java diff --git a/Essentials/src/main/java/com/earth2me/essentials/Essentials.java b/Essentials/src/main/java/com/earth2me/essentials/Essentials.java index 644910b3f76..e2a176b9046 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/Essentials.java +++ b/Essentials/src/main/java/com/earth2me/essentials/Essentials.java @@ -77,6 +77,7 @@ import net.ess3.provider.providers.BukkitSchedulingProvider; import net.ess3.provider.providers.BukkitSpawnerBlockProvider; import net.ess3.provider.providers.BukkitTileEntityProvider; +import net.ess3.provider.providers.BukkitWorldTileEntityCountProvider; import net.ess3.provider.providers.FixedHeightWorldInfoProvider; import net.ess3.provider.providers.FlatSpawnEggProvider; import net.ess3.provider.providers.FoliaSchedulingProvider; @@ -105,6 +106,7 @@ import net.ess3.provider.providers.PaperServerStateProvider; import net.ess3.provider.providers.PaperTickCountProvider; import net.ess3.provider.providers.PaperTileEntityProvider; +import net.ess3.provider.providers.PaperWorldTileEntityCountProvider; import net.ess3.provider.providers.PrehistoricPotionMetaProvider; import net.essentialsx.api.v2.services.BalanceTop; import net.essentialsx.api.v2.services.mail.MailService; @@ -396,6 +398,9 @@ public void onEnable() { // Tile Entity Provider providerFactory.registerProvider(BukkitTileEntityProvider.class, PaperTileEntityProvider.class); + // World Tile Entity Count Provider + providerFactory.registerProvider(BukkitWorldTileEntityCountProvider.class, PaperWorldTileEntityCountProvider.class); + // Tick Count Provider providerFactory.registerProvider(PaperTickCountProvider.class); diff --git a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandgc.java b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandgc.java index 1a06c6f3925..db9a1ccff59 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandgc.java +++ b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandgc.java @@ -3,15 +3,13 @@ import com.earth2me.essentials.CommandSource; import com.earth2me.essentials.utils.DateUtil; import com.earth2me.essentials.utils.NumberUtil; -import net.ess3.provider.TileEntityProvider; +import net.ess3.provider.WorldTileEntityCountProvider; import org.bukkit.ChatColor; -import org.bukkit.Chunk; import org.bukkit.Server; import org.bukkit.World; import java.lang.management.ManagementFactory; import java.util.List; -import java.util.logging.Level; public class Commandgc extends EssentialsCommand { public Commandgc() { @@ -37,7 +35,7 @@ protected void run(final Server server, final CommandSource sender, final String sender.sendTl("gcfree", Runtime.getRuntime().freeMemory() / 1024 / 1024); final List worlds = server.getWorlds(); - final TileEntityProvider tileEntityProvider = ess.provider(TileEntityProvider.class); + final WorldTileEntityCountProvider worldTileEntityCountProvider = ess.provider(WorldTileEntityCountProvider.class); for (final World w : worlds) { String worldType = "World"; switch (w.getEnvironment()) { @@ -49,15 +47,7 @@ protected void run(final Server server, final CommandSource sender, final String break; } - int tileEntities = 0; - - try { - for (final Chunk chunk : w.getLoadedChunks()) { - tileEntities += tileEntityProvider.getTileEntities(chunk).length; - } - } catch (final java.lang.ClassCastException ex) { - ess.getLogger().log(Level.SEVERE, "Corrupted chunk data on world " + w, ex); - } + final int tileEntities = worldTileEntityCountProvider.getTileEntityCount(w); sender.sendTl("gcWorld", worldType, w.getName(), w.getLoadedChunks().length, w.getEntities().size(), tileEntities); } diff --git a/providers/BaseProviders/src/main/java/net/ess3/provider/WorldTileEntityCountProvider.java b/providers/BaseProviders/src/main/java/net/ess3/provider/WorldTileEntityCountProvider.java new file mode 100644 index 00000000000..cfb3169e621 --- /dev/null +++ b/providers/BaseProviders/src/main/java/net/ess3/provider/WorldTileEntityCountProvider.java @@ -0,0 +1,7 @@ +package net.ess3.provider; + +import org.bukkit.World; + +public interface WorldTileEntityCountProvider extends Provider { + int getTileEntityCount(final World world); +} diff --git a/providers/BaseProviders/src/main/java/net/ess3/provider/providers/BukkitWorldTileEntityCountProvider.java b/providers/BaseProviders/src/main/java/net/ess3/provider/providers/BukkitWorldTileEntityCountProvider.java new file mode 100644 index 00000000000..d5d075e0267 --- /dev/null +++ b/providers/BaseProviders/src/main/java/net/ess3/provider/providers/BukkitWorldTileEntityCountProvider.java @@ -0,0 +1,20 @@ +package net.ess3.provider.providers; + +import net.ess3.provider.WorldTileEntityCountProvider; +import net.essentialsx.providers.ProviderData; +import org.bukkit.Chunk; +import org.bukkit.World; + +@ProviderData(description = "Bukkit World Tile Entity Count Provider") +public class BukkitWorldTileEntityCountProvider implements WorldTileEntityCountProvider { + @Override + public int getTileEntityCount(World world) { + int tileEntities = 0; + + for (final Chunk chunk : world.getLoadedChunks()) { + tileEntities += chunk.getTileEntities().length; + } + + return tileEntities; + } +} diff --git a/providers/PaperProvider/src/main/java/net/ess3/provider/providers/PaperWorldTileEntityCountProvider.java b/providers/PaperProvider/src/main/java/net/ess3/provider/providers/PaperWorldTileEntityCountProvider.java new file mode 100644 index 00000000000..8bb679447e0 --- /dev/null +++ b/providers/PaperProvider/src/main/java/net/ess3/provider/providers/PaperWorldTileEntityCountProvider.java @@ -0,0 +1,13 @@ +package net.ess3.provider.providers; + +import net.ess3.provider.WorldTileEntityCountProvider; +import net.essentialsx.providers.ProviderData; +import org.bukkit.World; + +@ProviderData(description = "Paper 1.11+ World Tile Entity Count Provider", weight = 1) +public class PaperWorldTileEntityCountProvider implements WorldTileEntityCountProvider { + @Override + public int getTileEntityCount(World world) { + return world.getTileEntityCount(); + } +} From 0c6dfcab817d26d6ded7b4eccfca137a165e2b5b Mon Sep 17 00:00:00 2001 From: Warrior <50800980+Warriorrrr@users.noreply.github.com> Date: Thu, 16 Apr 2026 10:51:32 +0200 Subject: [PATCH 4/5] Modify thunder on global thread --- .../com/earth2me/essentials/commands/Commandthunder.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandthunder.java b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandthunder.java index ce678d0540a..b829956f986 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandthunder.java +++ b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandthunder.java @@ -22,13 +22,15 @@ public void run(final Server server, final User user, final String commandLabel, final World world = user.getWorld(); final boolean setThunder = args[0].equalsIgnoreCase("true"); if (args.length == 1) { - world.setThundering(setThunder); + ess.scheduleGlobalDelayedTask(() -> world.setThundering(setThunder)); user.sendTl("thunder", setThunder ? user.playerTl("enabled") : user.playerTl("disabled")); return; } - world.setThundering(setThunder); - world.setThunderDuration(Integer.parseInt(args[1]) * 20); + ess.scheduleGlobalDelayedTask(() -> { + world.setThundering(setThunder); + world.setThunderDuration(Integer.parseInt(args[1]) * 20); + }); user.sendTl("thunderDuration", setThunder ? user.playerTl("enabled") : user.playerTl("disabled"), Integer.parseInt(args[1])); } From 5188526d893df8cd2a4d37b74119decf254dd46f Mon Sep 17 00:00:00 2001 From: Warrior <50800980+Warriorrrr@users.noreply.github.com> Date: Thu, 16 Apr 2026 10:51:43 +0200 Subject: [PATCH 5/5] Run smite with entity scheduler --- .../essentials/commands/Commandlightning.java | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandlightning.java b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandlightning.java index 046923c684a..dc3909aa383 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandlightning.java +++ b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandlightning.java @@ -33,15 +33,17 @@ public void run(final Server server, final CommandSource sender, final String co } final int finalPower = power; loopOnlinePlayersConsumer(server, sender, false, true, args[0], player -> { - sender.sendTl("lightningUse", player.getDisplayName()); - final LightningStrike strike = player.getBase().getWorld().strikeLightningEffect(player.getBase().getLocation()); + ess.scheduleEntityDelayedTask(player.getBase(), () -> { + sender.sendTl("lightningUse", player.getDisplayName()); + final LightningStrike strike = player.getBase().getWorld().strikeLightningEffect(player.getBase().getLocation()); - if (!player.isGodModeEnabled()) { - player.getBase().damage(finalPower, strike); - } - if (ess.getSettings().warnOnSmite()) { - player.sendTl("lightningSmited"); - } + if (!player.isGodModeEnabled()) { + player.getBase().damage(finalPower, strike); + } + if (ess.getSettings().warnOnSmite()) { + player.sendTl("lightningSmited"); + } + }); }); loopOnlinePlayers(server, sender, true, true, args[0], null); }