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