From 85585b14d68fc209a294a414abbb4a00b520de9d Mon Sep 17 00:00:00 2001 From: Josiah Royal <119104108+mechobliterate@users.noreply.github.com> Date: Sun, 26 Jul 2026 17:28:08 -0400 Subject: [PATCH] Add Folia support (#3) * Add Folia support * Minor perf tweaks: cache negative smelting lookups, avoid boxed Long in cloaking tracker * Bump version to 1.15.2 * Simplify smelting cache lookup back to containsKey-first * maintainer Co-authored-by: YouHaveTrouble --------- Co-authored-by: YouHaveTrouble --- pom.xml | 2 +- .../enchantio/listeners/CloakingListener.java | 14 +++++----- .../enchantio/listeners/SmeltingListener.java | 1 + .../listeners/TelepathyListener.java | 13 +++++---- .../listeners/VampirismListener.java | 27 ++++++++++--------- src/main/resources/paper-plugin.yml | 1 + 6 files changed, 33 insertions(+), 25 deletions(-) diff --git a/pom.xml b/pom.xml index bfd892b..a3b1b68 100644 --- a/pom.xml +++ b/pom.xml @@ -15,7 +15,7 @@ 21 UTF-8 - 1.15.1 + 1.15.2 https://youhavetrouble.me diff --git a/src/main/java/me/youhavetrouble/enchantio/listeners/CloakingListener.java b/src/main/java/me/youhavetrouble/enchantio/listeners/CloakingListener.java index 54deae8..8267e93 100644 --- a/src/main/java/me/youhavetrouble/enchantio/listeners/CloakingListener.java +++ b/src/main/java/me/youhavetrouble/enchantio/listeners/CloakingListener.java @@ -26,7 +26,7 @@ import java.util.UUID; public class CloakingListener implements Listener { - private final HashMap ticksSinceLastMovement = new HashMap<>(); + private final HashMap ticksSinceLastMovement = new HashMap<>(); private final CloakingEnchant cloakingEnchant = (CloakingEnchant) EnchantioConfig.ENCHANTS.get(CloakingEnchant.KEY); private final PotionEffect cloakingEffect = new PotionEffect(PotionEffectType.INVISIBILITY, 3, 0, false, false, false); @@ -40,13 +40,13 @@ public class CloakingListener implements Listener { Bukkit.getGlobalRegionScheduler().runAtFixedRate(enchantio, (task) -> { for (Player player : Bukkit.getOnlinePlayers()) { if (!player.isSneaking()) { - ticksSinceLastMovement.put(player.getUniqueId(), 0L); + ticksSinceLastMovement.put(player.getUniqueId(), 0); continue; } int cloakingLevel = Enchantio.getSumOfEnchantLevels(player.getEquipment(), cloaking); if (cloakingLevel == 0) continue; ticksSinceLastMovement.computeIfPresent(player.getUniqueId(), (uuid, ticks) -> ticks + 1); - if (ticksSinceLastMovement.getOrDefault(player.getUniqueId(), 0L) < cloakingEnchant.getTicksToActivate()) continue; + if (ticksSinceLastMovement.getOrDefault(player.getUniqueId(), 0) < cloakingEnchant.getTicksToActivate()) continue; player.getScheduler().execute(enchantio, () -> player.addPotionEffect(cloakingEffect), () -> {}, 1); } }, 1, 1); @@ -54,7 +54,7 @@ public class CloakingListener implements Listener { @EventHandler(ignoreCancelled = true, priority = EventPriority.MONITOR) public void onPlayerJoin(PlayerJoinEvent event) { - ticksSinceLastMovement.put(event.getPlayer().getUniqueId(), 0L); + ticksSinceLastMovement.put(event.getPlayer().getUniqueId(), 0); } @EventHandler(ignoreCancelled = true, priority = EventPriority.MONITOR) @@ -65,17 +65,17 @@ public class CloakingListener implements Listener { @EventHandler(ignoreCancelled = true, priority = EventPriority.MONITOR) public void onPlayerMove(PlayerMoveEvent event) { if (!event.hasChangedPosition()) return; - ticksSinceLastMovement.put(event.getPlayer().getUniqueId(), 0L); + ticksSinceLastMovement.put(event.getPlayer().getUniqueId(), 0); } @EventHandler(ignoreCancelled = true, priority = EventPriority.MONITOR) public void onPlayerJump(PlayerJumpEvent event) { - ticksSinceLastMovement.put(event.getPlayer().getUniqueId(), 0L); + ticksSinceLastMovement.put(event.getPlayer().getUniqueId(), 0); } @EventHandler(ignoreCancelled = true, priority = EventPriority.MONITOR) public void onPlayerInteract(PlayerInteractEvent event) { - ticksSinceLastMovement.put(event.getPlayer().getUniqueId(), 0L); + ticksSinceLastMovement.put(event.getPlayer().getUniqueId(), 0); } diff --git a/src/main/java/me/youhavetrouble/enchantio/listeners/SmeltingListener.java b/src/main/java/me/youhavetrouble/enchantio/listeners/SmeltingListener.java index 54b43b7..d7f9ffa 100644 --- a/src/main/java/me/youhavetrouble/enchantio/listeners/SmeltingListener.java +++ b/src/main/java/me/youhavetrouble/enchantio/listeners/SmeltingListener.java @@ -60,6 +60,7 @@ public class SmeltingListener implements Listener { smeltingCache.put(singleItem, result); return result; } + smeltingCache.put(singleItem, null); return null; } diff --git a/src/main/java/me/youhavetrouble/enchantio/listeners/TelepathyListener.java b/src/main/java/me/youhavetrouble/enchantio/listeners/TelepathyListener.java index beadddd..e1afb20 100644 --- a/src/main/java/me/youhavetrouble/enchantio/listeners/TelepathyListener.java +++ b/src/main/java/me/youhavetrouble/enchantio/listeners/TelepathyListener.java @@ -6,7 +6,6 @@ import io.papermc.paper.registry.RegistryKey; import me.youhavetrouble.enchantio.Enchantio; import me.youhavetrouble.enchantio.EnchantioConfig; import me.youhavetrouble.enchantio.enchants.TelepathyEnchant; -import org.bukkit.Bukkit; import org.bukkit.Registry; import org.bukkit.enchantments.Enchantment; import org.bukkit.entity.Item; @@ -36,10 +35,14 @@ public class TelepathyListener implements Listener { } // If there's ever a performance problem here, it's the following - Bukkit.getScheduler().runTask(Enchantio.getPlugin(Enchantio.class), () -> event.getItems().forEach((item) -> { - if (item == null || item.isDead()) return; - item.teleport(event.getPlayer(), PlayerTeleportEvent.TeleportCause.PLUGIN); - })); + Enchantio enchantio = Enchantio.getPlugin(Enchantio.class); + event.getItems().forEach((item) -> { + if (item == null) return; + item.getScheduler().run(enchantio, (task) -> { + if (item.isDead()) return; + item.teleport(event.getPlayer(), PlayerTeleportEvent.TeleportCause.PLUGIN); + }, null); + }); } } diff --git a/src/main/java/me/youhavetrouble/enchantio/listeners/VampirismListener.java b/src/main/java/me/youhavetrouble/enchantio/listeners/VampirismListener.java index cc53dc7..bc7a371 100644 --- a/src/main/java/me/youhavetrouble/enchantio/listeners/VampirismListener.java +++ b/src/main/java/me/youhavetrouble/enchantio/listeners/VampirismListener.java @@ -19,22 +19,25 @@ public class VampirismListener implements Listener { public VampirismListener() { if (vampirism == null) return; - Bukkit.getGlobalRegionScheduler().runAtFixedRate(Enchantio.getPlugin(Enchantio.class), (task) -> { + Enchantio enchantio = Enchantio.getPlugin(Enchantio.class); + Bukkit.getGlobalRegionScheduler().runAtFixedRate(enchantio, (task) -> { for (Player player : Bukkit.getOnlinePlayers()) { boolean hasVampirism = Enchantio.getSumOfEnchantLevels(player.getEquipment(), vampirism) != 0; - if (!hasVampirism) return; - Location abovePlayer = player.getLocation().add(0, player.getEyeHeight() + 0.5, 0); - Block block = player.getWorld().getBlockAt(abovePlayer); - byte light = block.getLightFromSky(); - if (light < 15) return; - int fireTicks = player.getFireTicks(); + if (!hasVampirism) continue; + player.getScheduler().execute(enchantio, () -> { + Location abovePlayer = player.getLocation().add(0, player.getEyeHeight() + 0.5, 0); + Block block = player.getWorld().getBlockAt(abovePlayer); + byte light = block.getLightFromSky(); + if (light < 15) return; + int fireTicks = player.getFireTicks(); - // Prefent fire animation from disappearing on the client - if (player.getFireTicks() < 20) { - fireTicks = 25; - } + // Prefent fire animation from disappearing on the client + if (player.getFireTicks() < 20) { + fireTicks = 25; + } - player.setFireTicks(Math.max(fireTicks, player.getMaxFireTicks())); + player.setFireTicks(Math.max(fireTicks, player.getMaxFireTicks())); + }, () -> {}, 0); } }, 1, 20); diff --git a/src/main/resources/paper-plugin.yml b/src/main/resources/paper-plugin.yml index 7bd91aa..71a4aed 100644 --- a/src/main/resources/paper-plugin.yml +++ b/src/main/resources/paper-plugin.yml @@ -3,6 +3,7 @@ version: '${project.version}' main: me.youhavetrouble.enchantio.Enchantio bootstrapper: me.youhavetrouble.enchantio.EnchantioBootstrap api-version: '1.21.9' +folia-supported: true authors: [YouHaveTrouble] description: Custom enchants for paper servers website: https://youhavetrouble.me