diff --git a/pom.xml b/pom.xml index 84d9657..cc36c74 100644 --- a/pom.xml +++ b/pom.xml @@ -65,6 +65,10 @@ org.reflections me.xginko.villageroptimizer.libs.reflections + + com.cryptomorin.xseries + me.xginko.villageroptimizer.libs.xseries + @@ -169,5 +173,11 @@ FoliaLib 0.3.4 + + + com.github.cryptomorin + XSeries + 11.2.0 + diff --git a/src/main/java/me/xginko/villageroptimizer/VillagerOptimizer.java b/src/main/java/me/xginko/villageroptimizer/VillagerOptimizer.java index fa9529c..d536c8c 100644 --- a/src/main/java/me/xginko/villageroptimizer/VillagerOptimizer.java +++ b/src/main/java/me/xginko/villageroptimizer/VillagerOptimizer.java @@ -4,6 +4,7 @@ import com.tcoded.folialib.FoliaLib; import me.xginko.villageroptimizer.commands.VillagerOptimizerCommand; import me.xginko.villageroptimizer.config.Config; import me.xginko.villageroptimizer.config.LanguageCache; +import me.xginko.villageroptimizer.enums.Permissions; import me.xginko.villageroptimizer.modules.VillagerOptimizerModule; import me.xginko.villageroptimizer.utils.Util; import net.kyori.adventure.platform.bukkit.BukkitAudiences; @@ -73,6 +74,7 @@ public final class VillagerOptimizer extends JavaPlugin { .color(NamedTextColor.GRAY)).append(Component.text(" │").style(Util.PL_STYLE))); logger.info(Component.text("│ │").style(Util.PL_STYLE)); logger.info(Component.text("│ │").style(Util.PL_STYLE)); + Permissions.registerAll(); logger.info(Component.text("│ ") .style(Util.PL_STYLE).append(Component.text(" ➤ Loading Config...").style(Util.PL_STYLE)) diff --git a/src/main/java/me/xginko/villageroptimizer/enums/Permissions.java b/src/main/java/me/xginko/villageroptimizer/enums/Permissions.java index f48df83..ac02fd0 100644 --- a/src/main/java/me/xginko/villageroptimizer/enums/Permissions.java +++ b/src/main/java/me/xginko/villageroptimizer/enums/Permissions.java @@ -1,5 +1,6 @@ package me.xginko.villageroptimizer.enums; +import org.bukkit.Bukkit; import org.bukkit.permissions.Permission; import org.bukkit.permissions.PermissionDefault; @@ -71,4 +72,24 @@ public final class Permissions { return permission; } } + + public static void registerAll() { + for (Bypass perm : Bypass.values()) { + try { + Bukkit.getPluginManager().addPermission(perm.get()); + } catch (IllegalArgumentException ignored) {} + } + + for (Commands perm : Commands.values()) { + try { + Bukkit.getPluginManager().addPermission(perm.get()); + } catch (IllegalArgumentException ignored) {} + } + + for (Optimize perm : Optimize.values()) { + try { + Bukkit.getPluginManager().addPermission(perm.get()); + } catch (IllegalArgumentException ignored) {} + } + } } diff --git a/src/main/java/me/xginko/villageroptimizer/modules/VillagerChunkLimit.java b/src/main/java/me/xginko/villageroptimizer/modules/VillagerChunkLimit.java index c03bf13..d9c2989 100644 --- a/src/main/java/me/xginko/villageroptimizer/modules/VillagerChunkLimit.java +++ b/src/main/java/me/xginko/villageroptimizer/modules/VillagerChunkLimit.java @@ -1,12 +1,12 @@ package me.xginko.villageroptimizer.modules; +import com.cryptomorin.xseries.XEntityType; import com.tcoded.folialib.wrapper.task.WrappedTask; import me.xginko.villageroptimizer.utils.LocationUtil; import me.xginko.villageroptimizer.utils.Util; import org.bukkit.Chunk; import org.bukkit.World; import org.bukkit.entity.Entity; -import org.bukkit.entity.EntityType; import org.bukkit.entity.Villager; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; @@ -120,14 +120,14 @@ public class VillagerChunkLimit extends VillagerOptimizerModule implements Runna @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) private void onCreatureSpawn(CreatureSpawnEvent event) { - if (event.getEntityType() == EntityType.VILLAGER) { + if (event.getEntityType() == XEntityType.VILLAGER.get()) { manageVillagerCount(event.getEntity().getChunk()); } } @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) private void onInteract(PlayerInteractEntityEvent event) { - if (event.getRightClicked().getType() == EntityType.VILLAGER) { + if (event.getRightClicked().getType() == XEntityType.VILLAGER.get()) { manageVillagerCount(event.getRightClicked().getChunk()); } } @@ -138,7 +138,7 @@ public class VillagerChunkLimit extends VillagerOptimizerModule implements Runna List not_optimized_villagers = new ArrayList<>(); for (Entity entity : chunk.getEntities()) { - if (entity.getType() != EntityType.VILLAGER) continue; + if (entity.getType() != XEntityType.VILLAGER.get()) continue; Villager villager = (Villager) entity; diff --git a/src/main/java/me/xginko/villageroptimizer/modules/gameplay/EnableLeashingVillagers.java b/src/main/java/me/xginko/villageroptimizer/modules/gameplay/EnableLeashingVillagers.java index c167f57..0fe0559 100644 --- a/src/main/java/me/xginko/villageroptimizer/modules/gameplay/EnableLeashingVillagers.java +++ b/src/main/java/me/xginko/villageroptimizer/modules/gameplay/EnableLeashingVillagers.java @@ -1,10 +1,10 @@ package me.xginko.villageroptimizer.modules.gameplay; +import com.cryptomorin.xseries.XEntityType; +import com.cryptomorin.xseries.XMaterial; import me.xginko.villageroptimizer.modules.VillagerOptimizerModule; import me.xginko.villageroptimizer.utils.LocationUtil; import org.bukkit.GameMode; -import org.bukkit.Material; -import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; import org.bukkit.entity.Villager; import org.bukkit.event.EventHandler; @@ -46,10 +46,10 @@ public class EnableLeashingVillagers extends VillagerOptimizerModule implements @SuppressWarnings("deprecation") @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) private void onLeash(PlayerInteractEntityEvent event) { - if (!event.getRightClicked().getType().equals(EntityType.VILLAGER)) return; + if (event.getRightClicked().getType() != XEntityType.VILLAGER.get()) return; final Player player = event.getPlayer(); final ItemStack handItem = player.getInventory().getItem(event.getHand()); - if (handItem == null || !handItem.getType().equals(Material.LEAD)) return; + if (handItem == null || handItem.getType() != XMaterial.LEAD.parseMaterial()) return; final Villager villager = (Villager) event.getRightClicked(); if (villager.isLeashed()) return; diff --git a/src/main/java/me/xginko/villageroptimizer/modules/gameplay/FixOptimisationAfterCure.java b/src/main/java/me/xginko/villageroptimizer/modules/gameplay/FixOptimisationAfterCure.java index 5f72eec..f15b102 100644 --- a/src/main/java/me/xginko/villageroptimizer/modules/gameplay/FixOptimisationAfterCure.java +++ b/src/main/java/me/xginko/villageroptimizer/modules/gameplay/FixOptimisationAfterCure.java @@ -1,8 +1,8 @@ package me.xginko.villageroptimizer.modules.gameplay; +import com.cryptomorin.xseries.XEntityType; import me.xginko.villageroptimizer.modules.VillagerOptimizerModule; import me.xginko.villageroptimizer.wrapper.WrappedVillager; -import org.bukkit.entity.EntityType; import org.bukkit.entity.Villager; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; @@ -36,8 +36,8 @@ public class FixOptimisationAfterCure extends VillagerOptimizerModule implements @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) private void onTransform(EntityTransformEvent event) { if ( - event.getTransformReason().equals(EntityTransformEvent.TransformReason.CURED) - && event.getTransformedEntity().getType().equals(EntityType.VILLAGER) + event.getTransformReason() == EntityTransformEvent.TransformReason.CURED + && event.getTransformedEntity().getType() == XEntityType.VILLAGER.get() ) { Villager villager = (Villager) event.getTransformedEntity(); scheduler.runAtEntityLater(villager, () -> { diff --git a/src/main/java/me/xginko/villageroptimizer/modules/gameplay/LevelOptimizedProfession.java b/src/main/java/me/xginko/villageroptimizer/modules/gameplay/LevelOptimizedProfession.java index 48cb364..d68c1a1 100644 --- a/src/main/java/me/xginko/villageroptimizer/modules/gameplay/LevelOptimizedProfession.java +++ b/src/main/java/me/xginko/villageroptimizer/modules/gameplay/LevelOptimizedProfession.java @@ -1,5 +1,6 @@ package me.xginko.villageroptimizer.modules.gameplay; +import com.cryptomorin.xseries.XPotion; import me.xginko.villageroptimizer.VillagerOptimizer; import me.xginko.villageroptimizer.config.Config; import me.xginko.villageroptimizer.modules.VillagerOptimizerModule; @@ -16,13 +17,15 @@ import org.bukkit.event.Listener; import org.bukkit.event.inventory.InventoryCloseEvent; import org.bukkit.event.inventory.InventoryType; import org.bukkit.potion.PotionEffect; -import org.bukkit.potion.PotionEffectType; import java.time.Duration; import java.util.concurrent.TimeUnit; public class LevelOptimizedProfession extends VillagerOptimizerModule implements Listener { + private static final PotionEffect SUPER_SLOWNESS = new PotionEffect( + XPotion.SLOWNESS.getPotionEffectType(), 120, 120, false, false); + private final boolean notify_player; private final long cooldown_millis; @@ -58,7 +61,7 @@ public class LevelOptimizedProfession extends VillagerOptimizerModule implements @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) private void onTradeScreenClose(InventoryCloseEvent event) { if ( - event.getInventory().getType().equals(InventoryType.MERCHANT) + event.getInventory().getType() == InventoryType.MERCHANT && event.getInventory().getHolder() instanceof Villager ) { final Villager villager = (Villager) event.getInventory().getHolder(); @@ -69,7 +72,7 @@ public class LevelOptimizedProfession extends VillagerOptimizerModule implements if (wVillager.calculateLevel() <= villager.getVillagerLevel()) return; scheduler.runAtEntity(villager, enableAI -> { - villager.addPotionEffect(new PotionEffect(PotionEffectType.SLOW, 120, 120, false, false)); + villager.addPotionEffect(SUPER_SLOWNESS); villager.setAware(true); scheduler.runAtEntityLater(villager, disableAI -> { villager.setAware(false); diff --git a/src/main/java/me/xginko/villageroptimizer/modules/gameplay/MakeVillagersSpawnAdult.java b/src/main/java/me/xginko/villageroptimizer/modules/gameplay/MakeVillagersSpawnAdult.java index 6b758e6..0b10b02 100644 --- a/src/main/java/me/xginko/villageroptimizer/modules/gameplay/MakeVillagersSpawnAdult.java +++ b/src/main/java/me/xginko/villageroptimizer/modules/gameplay/MakeVillagersSpawnAdult.java @@ -1,7 +1,7 @@ package me.xginko.villageroptimizer.modules.gameplay; +import com.cryptomorin.xseries.XEntityType; import me.xginko.villageroptimizer.modules.VillagerOptimizerModule; -import org.bukkit.entity.EntityType; import org.bukkit.entity.Villager; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; @@ -37,7 +37,7 @@ public class MakeVillagersSpawnAdult extends VillagerOptimizerModule implements @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) private void onVillagerSpawn(CreatureSpawnEvent event) { - if (event.getEntityType().equals(EntityType.VILLAGER)) { + if (event.getEntityType() == XEntityType.VILLAGER.get()) { final Villager villager = (Villager) event.getEntity(); if (!villager.isAdult()) villager.setAdult(); } diff --git a/src/main/java/me/xginko/villageroptimizer/modules/gameplay/PreventOptimizedDamage.java b/src/main/java/me/xginko/villageroptimizer/modules/gameplay/PreventOptimizedDamage.java index cf4ca1a..8668405 100644 --- a/src/main/java/me/xginko/villageroptimizer/modules/gameplay/PreventOptimizedDamage.java +++ b/src/main/java/me/xginko/villageroptimizer/modules/gameplay/PreventOptimizedDamage.java @@ -1,8 +1,8 @@ package me.xginko.villageroptimizer.modules.gameplay; +import com.cryptomorin.xseries.XEntityType; import com.destroystokyo.paper.event.entity.EntityKnockbackByEntityEvent; import me.xginko.villageroptimizer.modules.VillagerOptimizerModule; -import org.bukkit.entity.EntityType; import org.bukkit.entity.Villager; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; @@ -64,7 +64,7 @@ public class PreventOptimizedDamage extends VillagerOptimizerModule implements L @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) private void onDamageByEntity(EntityDamageEvent event) { if ( - event.getEntityType().equals(EntityType.VILLAGER) + event.getEntityType() == XEntityType.VILLAGER.get() && damage_causes_to_cancel.contains(event.getCause()) && villagerCache.createIfAbsent((Villager) event.getEntity()).isOptimized() ) { @@ -76,7 +76,7 @@ public class PreventOptimizedDamage extends VillagerOptimizerModule implements L private void onKnockbackByEntity(EntityKnockbackByEntityEvent event) { if ( cancel_knockback - && event.getEntityType().equals(EntityType.VILLAGER) + && event.getEntityType() == XEntityType.VILLAGER.get() && villagerCache.createIfAbsent((Villager) event.getEntity()).isOptimized() ) { event.setCancelled(true); diff --git a/src/main/java/me/xginko/villageroptimizer/modules/gameplay/PreventOptimizedTargeting.java b/src/main/java/me/xginko/villageroptimizer/modules/gameplay/PreventOptimizedTargeting.java index 654ef80..ccc4e4c 100644 --- a/src/main/java/me/xginko/villageroptimizer/modules/gameplay/PreventOptimizedTargeting.java +++ b/src/main/java/me/xginko/villageroptimizer/modules/gameplay/PreventOptimizedTargeting.java @@ -1,9 +1,9 @@ package me.xginko.villageroptimizer.modules.gameplay; +import com.cryptomorin.xseries.XEntityType; import com.destroystokyo.paper.event.entity.EntityPathfindEvent; import me.xginko.villageroptimizer.modules.VillagerOptimizerModule; import org.bukkit.entity.Entity; -import org.bukkit.entity.EntityType; import org.bukkit.entity.Mob; import org.bukkit.entity.Villager; import org.bukkit.event.EventHandler; @@ -41,7 +41,7 @@ public class PreventOptimizedTargeting extends VillagerOptimizerModule implement final Entity target = event.getTarget(); if ( target != null - && target.getType().equals(EntityType.VILLAGER) + && target.getType() == XEntityType.VILLAGER.get() && villagerCache.createIfAbsent((Villager) target).isOptimized() ) { event.setTarget(null); @@ -54,7 +54,7 @@ public class PreventOptimizedTargeting extends VillagerOptimizerModule implement final Entity target = event.getTargetEntity(); if ( target != null - && target.getType().equals(EntityType.VILLAGER) + && target.getType() == XEntityType.VILLAGER.get() && villagerCache.createIfAbsent((Villager) target).isOptimized() ) { event.setCancelled(true); @@ -64,7 +64,7 @@ public class PreventOptimizedTargeting extends VillagerOptimizerModule implement @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) private void onEntityAttackVillager(EntityDamageByEntityEvent event) { if ( - event.getEntityType().equals(EntityType.VILLAGER) + event.getEntityType() == XEntityType.VILLAGER.get() && event.getDamager() instanceof Mob && villagerCache.createIfAbsent((Villager) event.getEntity()).isOptimized() ) { diff --git a/src/main/java/me/xginko/villageroptimizer/modules/gameplay/PreventUnoptimizedTrading.java b/src/main/java/me/xginko/villageroptimizer/modules/gameplay/PreventUnoptimizedTrading.java index c2f6713..f3941d4 100644 --- a/src/main/java/me/xginko/villageroptimizer/modules/gameplay/PreventUnoptimizedTrading.java +++ b/src/main/java/me/xginko/villageroptimizer/modules/gameplay/PreventUnoptimizedTrading.java @@ -45,7 +45,7 @@ public class PreventUnoptimizedTrading extends VillagerOptimizerModule implement @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) private void onTradeOpen(TradeSelectEvent event) { - if (!event.getInventory().getType().equals(InventoryType.MERCHANT)) return; + if (event.getInventory().getType() != InventoryType.MERCHANT) return; if (event.getWhoClicked().hasPermission(Permissions.Bypass.TRADE_PREVENTION.get())) return; if (!(event.getInventory().getHolder() instanceof Villager)) return; if (villagerCache.createIfAbsent((Villager) event.getInventory().getHolder()).isOptimized()) return; @@ -60,7 +60,7 @@ public class PreventUnoptimizedTrading extends VillagerOptimizerModule implement @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) private void onInventoryClick(InventoryClickEvent event) { - if (!event.getInventory().getType().equals(InventoryType.MERCHANT)) return; + if (event.getInventory().getType() != InventoryType.MERCHANT) return; if (event.getWhoClicked().hasPermission(Permissions.Bypass.TRADE_PREVENTION.get())) return; if (!(event.getInventory().getHolder() instanceof Villager)) return; if (villagerCache.createIfAbsent((Villager) event.getInventory().getHolder()).isOptimized()) return; diff --git a/src/main/java/me/xginko/villageroptimizer/modules/gameplay/RestockOptimizedTrades.java b/src/main/java/me/xginko/villageroptimizer/modules/gameplay/RestockOptimizedTrades.java index 8fe4a5b..dfc7d59 100644 --- a/src/main/java/me/xginko/villageroptimizer/modules/gameplay/RestockOptimizedTrades.java +++ b/src/main/java/me/xginko/villageroptimizer/modules/gameplay/RestockOptimizedTrades.java @@ -1,5 +1,6 @@ package me.xginko.villageroptimizer.modules.gameplay; +import com.cryptomorin.xseries.XEntityType; import me.xginko.villageroptimizer.VillagerOptimizer; import me.xginko.villageroptimizer.enums.Permissions; import me.xginko.villageroptimizer.modules.VillagerOptimizerModule; @@ -8,7 +9,6 @@ import me.xginko.villageroptimizer.utils.LocationUtil; import me.xginko.villageroptimizer.utils.Util; import me.xginko.villageroptimizer.wrapper.WrappedVillager; import net.kyori.adventure.text.TextReplacementConfig; -import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; import org.bukkit.entity.Villager; import org.bukkit.event.EventHandler; @@ -53,30 +53,29 @@ public class RestockOptimizedTrades extends VillagerOptimizerModule implements L @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) private void onInteract(PlayerInteractEntityEvent event) { - if (!event.getRightClicked().getType().equals(EntityType.VILLAGER)) return; + if (event.getRightClicked().getType() != XEntityType.VILLAGER.get()) return; final WrappedVillager wVillager = villagerCache.createIfAbsent((Villager) event.getRightClicked()); if (!wVillager.isOptimized()) return; final Player player = event.getPlayer(); final boolean player_bypassing = player.hasPermission(Permissions.Bypass.RESTOCK_COOLDOWN.get()); + if (!wVillager.canRestock(restock_delay_millis) && !player_bypassing) return; - if (wVillager.canRestock(restock_delay_millis) || player_bypassing) { - wVillager.restock(); - wVillager.saveRestockTime(); + wVillager.restock(); + wVillager.saveRestockTime(); - if (notify_player && !player_bypassing) { - final TextReplacementConfig timeLeft = TextReplacementConfig.builder() - .matchLiteral("%time%") - .replacement(Util.formatDuration(Duration.ofMillis(wVillager.getRestockCooldownMillis(restock_delay_millis)))) - .build(); - VillagerOptimizer.getLang(player.locale()).trades_restocked - .forEach(line -> KyoriUtil.sendMessage(player, line.replaceText(timeLeft))); - } + if (notify_player && !player_bypassing) { + final TextReplacementConfig timeLeft = TextReplacementConfig.builder() + .matchLiteral("%time%") + .replacement(Util.formatDuration(Duration.ofMillis(wVillager.getRestockCooldownMillis(restock_delay_millis)))) + .build(); + VillagerOptimizer.getLang(player.locale()).trades_restocked + .forEach(line -> KyoriUtil.sendMessage(player, line.replaceText(timeLeft))); + } - if (log_enabled) { - info("Restocked optimized villager at " + LocationUtil.toString(wVillager.villager().getLocation())); - } + if (log_enabled) { + info("Restocked optimized villager at " + LocationUtil.toString(wVillager.villager().getLocation())); } } } diff --git a/src/main/java/me/xginko/villageroptimizer/modules/gameplay/UnoptimizeOnJobLoose.java b/src/main/java/me/xginko/villageroptimizer/modules/gameplay/UnoptimizeOnJobLoose.java index 0e4a71f..97ea71f 100644 --- a/src/main/java/me/xginko/villageroptimizer/modules/gameplay/UnoptimizeOnJobLoose.java +++ b/src/main/java/me/xginko/villageroptimizer/modules/gameplay/UnoptimizeOnJobLoose.java @@ -34,7 +34,7 @@ public class UnoptimizeOnJobLoose extends VillagerOptimizerModule implements Lis @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) private void onJobReset(VillagerCareerChangeEvent event) { - if (!event.getReason().equals(VillagerCareerChangeEvent.ChangeReason.LOSING_JOB)) return; + if (event.getReason() != VillagerCareerChangeEvent.ChangeReason.LOSING_JOB) return; final WrappedVillager wrappedVillager = villagerCache.createIfAbsent(event.getEntity()); if (wrappedVillager.isOptimized()) { wrappedVillager.setOptimizationType(OptimizationType.NONE); diff --git a/src/main/java/me/xginko/villageroptimizer/modules/optimization/OptimizeByBlock.java b/src/main/java/me/xginko/villageroptimizer/modules/optimization/OptimizeByBlock.java index 4851ded..76df547 100644 --- a/src/main/java/me/xginko/villageroptimizer/modules/optimization/OptimizeByBlock.java +++ b/src/main/java/me/xginko/villageroptimizer/modules/optimization/OptimizeByBlock.java @@ -1,5 +1,6 @@ package me.xginko.villageroptimizer.modules.optimization; +import com.cryptomorin.xseries.XMaterial; import me.xginko.villageroptimizer.VillagerOptimizer; import me.xginko.villageroptimizer.enums.OptimizationType; import me.xginko.villageroptimizer.enums.Permissions; @@ -24,12 +25,13 @@ import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.block.BlockPlaceEvent; import java.time.Duration; -import java.util.Arrays; import java.util.EnumSet; +import java.util.List; import java.util.Objects; import java.util.Set; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; +import java.util.stream.Stream; public class OptimizeByBlock extends VillagerOptimizerModule implements Listener { @@ -43,9 +45,12 @@ public class OptimizeByBlock extends VillagerOptimizerModule implements Listener config.master().addComment(configPath + ".enable", "When enabled, the closest villager standing near a configured block being placed will be optimized.\n" + "If a configured block is broken nearby, the closest villager will become unoptimized again."); - this.blocks_that_disable = config.getList(configPath + ".materials", Arrays.asList( - "LAPIS_BLOCK", "GLOWSTONE", "IRON_BLOCK" - ), "Values here need to be valid bukkit Material enums for your server version.") + List defaults = Stream.of(XMaterial.LAPIS_BLOCK, XMaterial.GLOWSTONE, XMaterial.IRON_BLOCK) + .filter(XMaterial::isSupported) + .map(Enum::name) + .collect(Collectors.toList()); + this.blocks_that_disable = config.getList(configPath + ".materials", defaults, + "Values here need to be valid bukkit Material enums for your server version.") .stream() .map(configuredMaterial -> { try { diff --git a/src/main/java/me/xginko/villageroptimizer/modules/optimization/OptimizeByNametag.java b/src/main/java/me/xginko/villageroptimizer/modules/optimization/OptimizeByNametag.java index 4154116..6f33af9 100644 --- a/src/main/java/me/xginko/villageroptimizer/modules/optimization/OptimizeByNametag.java +++ b/src/main/java/me/xginko/villageroptimizer/modules/optimization/OptimizeByNametag.java @@ -1,5 +1,7 @@ package me.xginko.villageroptimizer.modules.optimization; +import com.cryptomorin.xseries.XEntityType; +import com.cryptomorin.xseries.XMaterial; import me.xginko.villageroptimizer.VillagerOptimizer; import me.xginko.villageroptimizer.enums.OptimizationType; import me.xginko.villageroptimizer.enums.Permissions; @@ -12,8 +14,6 @@ import me.xginko.villageroptimizer.utils.Util; import me.xginko.villageroptimizer.wrapper.WrappedVillager; import net.kyori.adventure.text.TextReplacementConfig; import org.bukkit.ChatColor; -import org.bukkit.Material; -import org.bukkit.entity.EntityType; import org.bukkit.entity.Player; import org.bukkit.entity.Villager; import org.bukkit.event.EventHandler; @@ -74,12 +74,12 @@ public class OptimizeByNametag extends VillagerOptimizerModule implements Listen @SuppressWarnings("deprecation") @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) private void onPlayerInteractEntity(PlayerInteractEntityEvent event) { - if (!event.getRightClicked().getType().equals(EntityType.VILLAGER)) return; + if (event.getRightClicked().getType() != XEntityType.VILLAGER.get()) return; final Player player = event.getPlayer(); if (!player.hasPermission(Permissions.Optimize.NAMETAG.get())) return; final ItemStack usedItem = player.getInventory().getItem(event.getHand()); - if (usedItem != null && !usedItem.getType().equals(Material.NAME_TAG)) return; + if (usedItem != null && usedItem.getType() != XMaterial.NAME_TAG.parseMaterial()) return; if (!usedItem.hasItemMeta()) return; final ItemMeta meta = usedItem.getItemMeta(); if (!meta.hasDisplayName()) return; diff --git a/src/main/java/me/xginko/villageroptimizer/utils/Util.java b/src/main/java/me/xginko/villageroptimizer/utils/Util.java index 6aaf6af..e2713cd 100644 --- a/src/main/java/me/xginko/villageroptimizer/utils/Util.java +++ b/src/main/java/me/xginko/villageroptimizer/utils/Util.java @@ -1,5 +1,6 @@ package me.xginko.villageroptimizer.utils; +import com.cryptomorin.xseries.XMaterial; import net.kyori.adventure.text.format.Style; import net.kyori.adventure.text.format.TextColor; import net.kyori.adventure.text.format.TextDecoration; @@ -25,19 +26,19 @@ public class Util { PL_COLOR = TextColor.color(102,255,230); PL_STYLE = Style.style(PL_COLOR, TextDecoration.BOLD); PROFESSION_MAP = new EnumMap<>(Material.class); - PROFESSION_MAP.put(Material.LOOM, Villager.Profession.SHEPHERD); - PROFESSION_MAP.put(Material.BARREL, Villager.Profession.FISHERMAN); - PROFESSION_MAP.put(Material.SMOKER, Villager.Profession.BUTCHER); - PROFESSION_MAP.put(Material.LECTERN, Villager.Profession.LIBRARIAN); - PROFESSION_MAP.put(Material.CAULDRON, Villager.Profession.LEATHERWORKER); - PROFESSION_MAP.put(Material.COMPOSTER, Villager.Profession.FARMER); - PROFESSION_MAP.put(Material.GRINDSTONE, Villager.Profession.WEAPONSMITH); - PROFESSION_MAP.put(Material.STONECUTTER, Villager.Profession.MASON); - PROFESSION_MAP.put(Material.BREWING_STAND, Villager.Profession.CLERIC); - PROFESSION_MAP.put(Material.BLAST_FURNACE, Villager.Profession.ARMORER); - PROFESSION_MAP.put(Material.SMITHING_TABLE, Villager.Profession.TOOLSMITH); - PROFESSION_MAP.put(Material.FLETCHING_TABLE, Villager.Profession.FLETCHER); - PROFESSION_MAP.put(Material.CARTOGRAPHY_TABLE, Villager.Profession.CARTOGRAPHER); + PROFESSION_MAP.put(XMaterial.LOOM.parseMaterial(), Villager.Profession.SHEPHERD); + PROFESSION_MAP.put(XMaterial.BARREL.parseMaterial(), Villager.Profession.FISHERMAN); + PROFESSION_MAP.put(XMaterial.SMOKER.parseMaterial(), Villager.Profession.BUTCHER); + PROFESSION_MAP.put(XMaterial.LECTERN.parseMaterial(), Villager.Profession.LIBRARIAN); + PROFESSION_MAP.put(XMaterial.CAULDRON.parseMaterial(), Villager.Profession.LEATHERWORKER); + PROFESSION_MAP.put(XMaterial.COMPOSTER.parseMaterial(), Villager.Profession.FARMER); + PROFESSION_MAP.put(XMaterial.GRINDSTONE.parseMaterial(), Villager.Profession.WEAPONSMITH); + PROFESSION_MAP.put(XMaterial.STONECUTTER.parseMaterial(), Villager.Profession.MASON); + PROFESSION_MAP.put(XMaterial.BREWING_STAND.parseMaterial(), Villager.Profession.CLERIC); + PROFESSION_MAP.put(XMaterial.BLAST_FURNACE.parseMaterial(), Villager.Profession.ARMORER); + PROFESSION_MAP.put(XMaterial.SMITHING_TABLE.parseMaterial(), Villager.Profession.TOOLSMITH); + PROFESSION_MAP.put(XMaterial.FLETCHING_TABLE.parseMaterial(), Villager.Profession.FLETCHER); + PROFESSION_MAP.put(XMaterial.CARTOGRAPHY_TABLE.parseMaterial(), Villager.Profession.CARTOGRAPHER); try { Chunk.class.getMethod("isEntitiesLoaded"); canUseIsEntitiesLoaded = true; diff --git a/src/main/java/me/xginko/villageroptimizer/wrapper/AVLVillagerDataHandlerImpl.java b/src/main/java/me/xginko/villageroptimizer/wrapper/AVLVillagerDataHandlerImpl.java index 41d333c..9a7909d 100644 --- a/src/main/java/me/xginko/villageroptimizer/wrapper/AVLVillagerDataHandlerImpl.java +++ b/src/main/java/me/xginko/villageroptimizer/wrapper/AVLVillagerDataHandlerImpl.java @@ -73,7 +73,7 @@ public class AVLVillagerDataHandlerImpl implements VillagerDataHandler { // End repeating task once logic is finished setOptimization.cancel(); - }, 0L, 1L, TimeUnit.SECONDS); + }, 1L, 1L, TimeUnit.SECONDS); } @Override diff --git a/src/main/java/me/xginko/villageroptimizer/wrapper/MainVillagerDataHandlerImpl.java b/src/main/java/me/xginko/villageroptimizer/wrapper/MainVillagerDataHandlerImpl.java index 78c8efc..f45eb6e 100644 --- a/src/main/java/me/xginko/villageroptimizer/wrapper/MainVillagerDataHandlerImpl.java +++ b/src/main/java/me/xginko/villageroptimizer/wrapper/MainVillagerDataHandlerImpl.java @@ -53,7 +53,7 @@ public class MainVillagerDataHandlerImpl implements VillagerDataHandler { // End repeating task once logic is finished setOptimization.cancel(); - }, 0L, 1L, TimeUnit.SECONDS); + }, 1L, 1L, TimeUnit.SECONDS); } @Override