improve 1.21 compatibility
This commit is contained in:
parent
8f6fe7fa07
commit
ef8b6c884a
10
pom.xml
10
pom.xml
@ -65,6 +65,10 @@
|
|||||||
<pattern>org.reflections</pattern>
|
<pattern>org.reflections</pattern>
|
||||||
<shadedPattern>me.xginko.villageroptimizer.libs.reflections</shadedPattern>
|
<shadedPattern>me.xginko.villageroptimizer.libs.reflections</shadedPattern>
|
||||||
</relocation>
|
</relocation>
|
||||||
|
<relocation>
|
||||||
|
<pattern>com.cryptomorin.xseries</pattern>
|
||||||
|
<shadedPattern>me.xginko.villageroptimizer.libs.xseries</shadedPattern>
|
||||||
|
</relocation>
|
||||||
</relocations>
|
</relocations>
|
||||||
<filters>
|
<filters>
|
||||||
<filter>
|
<filter>
|
||||||
@ -169,5 +173,11 @@
|
|||||||
<artifactId>FoliaLib</artifactId>
|
<artifactId>FoliaLib</artifactId>
|
||||||
<version>0.3.4</version>
|
<version>0.3.4</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<!-- Cross-Version Support -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.github.cryptomorin</groupId>
|
||||||
|
<artifactId>XSeries</artifactId>
|
||||||
|
<version>11.2.0</version>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
</project>
|
</project>
|
||||||
|
@ -4,6 +4,7 @@ import com.tcoded.folialib.FoliaLib;
|
|||||||
import me.xginko.villageroptimizer.commands.VillagerOptimizerCommand;
|
import me.xginko.villageroptimizer.commands.VillagerOptimizerCommand;
|
||||||
import me.xginko.villageroptimizer.config.Config;
|
import me.xginko.villageroptimizer.config.Config;
|
||||||
import me.xginko.villageroptimizer.config.LanguageCache;
|
import me.xginko.villageroptimizer.config.LanguageCache;
|
||||||
|
import me.xginko.villageroptimizer.enums.Permissions;
|
||||||
import me.xginko.villageroptimizer.modules.VillagerOptimizerModule;
|
import me.xginko.villageroptimizer.modules.VillagerOptimizerModule;
|
||||||
import me.xginko.villageroptimizer.utils.Util;
|
import me.xginko.villageroptimizer.utils.Util;
|
||||||
import net.kyori.adventure.platform.bukkit.BukkitAudiences;
|
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)));
|
.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));
|
||||||
logger.info(Component.text("│ │").style(Util.PL_STYLE));
|
logger.info(Component.text("│ │").style(Util.PL_STYLE));
|
||||||
|
Permissions.registerAll();
|
||||||
|
|
||||||
logger.info(Component.text("│ ")
|
logger.info(Component.text("│ ")
|
||||||
.style(Util.PL_STYLE).append(Component.text(" ➤ Loading Config...").style(Util.PL_STYLE))
|
.style(Util.PL_STYLE).append(Component.text(" ➤ Loading Config...").style(Util.PL_STYLE))
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package me.xginko.villageroptimizer.enums;
|
package me.xginko.villageroptimizer.enums;
|
||||||
|
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.permissions.Permission;
|
import org.bukkit.permissions.Permission;
|
||||||
import org.bukkit.permissions.PermissionDefault;
|
import org.bukkit.permissions.PermissionDefault;
|
||||||
|
|
||||||
@ -71,4 +72,24 @@ public final class Permissions {
|
|||||||
return permission;
|
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) {}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
package me.xginko.villageroptimizer.modules;
|
package me.xginko.villageroptimizer.modules;
|
||||||
|
|
||||||
|
import com.cryptomorin.xseries.XEntityType;
|
||||||
import com.tcoded.folialib.wrapper.task.WrappedTask;
|
import com.tcoded.folialib.wrapper.task.WrappedTask;
|
||||||
import me.xginko.villageroptimizer.utils.LocationUtil;
|
import me.xginko.villageroptimizer.utils.LocationUtil;
|
||||||
import me.xginko.villageroptimizer.utils.Util;
|
import me.xginko.villageroptimizer.utils.Util;
|
||||||
import org.bukkit.Chunk;
|
import org.bukkit.Chunk;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.entity.Entity;
|
import org.bukkit.entity.Entity;
|
||||||
import org.bukkit.entity.EntityType;
|
|
||||||
import org.bukkit.entity.Villager;
|
import org.bukkit.entity.Villager;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.EventPriority;
|
import org.bukkit.event.EventPriority;
|
||||||
@ -120,14 +120,14 @@ public class VillagerChunkLimit extends VillagerOptimizerModule implements Runna
|
|||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||||
private void onCreatureSpawn(CreatureSpawnEvent event) {
|
private void onCreatureSpawn(CreatureSpawnEvent event) {
|
||||||
if (event.getEntityType() == EntityType.VILLAGER) {
|
if (event.getEntityType() == XEntityType.VILLAGER.get()) {
|
||||||
manageVillagerCount(event.getEntity().getChunk());
|
manageVillagerCount(event.getEntity().getChunk());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
|
@EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
|
||||||
private void onInteract(PlayerInteractEntityEvent event) {
|
private void onInteract(PlayerInteractEntityEvent event) {
|
||||||
if (event.getRightClicked().getType() == EntityType.VILLAGER) {
|
if (event.getRightClicked().getType() == XEntityType.VILLAGER.get()) {
|
||||||
manageVillagerCount(event.getRightClicked().getChunk());
|
manageVillagerCount(event.getRightClicked().getChunk());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -138,7 +138,7 @@ public class VillagerChunkLimit extends VillagerOptimizerModule implements Runna
|
|||||||
List<Villager> not_optimized_villagers = new ArrayList<>();
|
List<Villager> not_optimized_villagers = new ArrayList<>();
|
||||||
|
|
||||||
for (Entity entity : chunk.getEntities()) {
|
for (Entity entity : chunk.getEntities()) {
|
||||||
if (entity.getType() != EntityType.VILLAGER) continue;
|
if (entity.getType() != XEntityType.VILLAGER.get()) continue;
|
||||||
|
|
||||||
Villager villager = (Villager) entity;
|
Villager villager = (Villager) entity;
|
||||||
|
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
package me.xginko.villageroptimizer.modules.gameplay;
|
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.modules.VillagerOptimizerModule;
|
||||||
import me.xginko.villageroptimizer.utils.LocationUtil;
|
import me.xginko.villageroptimizer.utils.LocationUtil;
|
||||||
import org.bukkit.GameMode;
|
import org.bukkit.GameMode;
|
||||||
import org.bukkit.Material;
|
|
||||||
import org.bukkit.entity.EntityType;
|
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.entity.Villager;
|
import org.bukkit.entity.Villager;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
@ -46,10 +46,10 @@ public class EnableLeashingVillagers extends VillagerOptimizerModule implements
|
|||||||
@SuppressWarnings("deprecation")
|
@SuppressWarnings("deprecation")
|
||||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||||
private void onLeash(PlayerInteractEntityEvent event) {
|
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 Player player = event.getPlayer();
|
||||||
final ItemStack handItem = player.getInventory().getItem(event.getHand());
|
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();
|
final Villager villager = (Villager) event.getRightClicked();
|
||||||
if (villager.isLeashed()) return;
|
if (villager.isLeashed()) return;
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
package me.xginko.villageroptimizer.modules.gameplay;
|
package me.xginko.villageroptimizer.modules.gameplay;
|
||||||
|
|
||||||
|
import com.cryptomorin.xseries.XEntityType;
|
||||||
import me.xginko.villageroptimizer.modules.VillagerOptimizerModule;
|
import me.xginko.villageroptimizer.modules.VillagerOptimizerModule;
|
||||||
import me.xginko.villageroptimizer.wrapper.WrappedVillager;
|
import me.xginko.villageroptimizer.wrapper.WrappedVillager;
|
||||||
import org.bukkit.entity.EntityType;
|
|
||||||
import org.bukkit.entity.Villager;
|
import org.bukkit.entity.Villager;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.EventPriority;
|
import org.bukkit.event.EventPriority;
|
||||||
@ -36,8 +36,8 @@ public class FixOptimisationAfterCure extends VillagerOptimizerModule implements
|
|||||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||||
private void onTransform(EntityTransformEvent event) {
|
private void onTransform(EntityTransformEvent event) {
|
||||||
if (
|
if (
|
||||||
event.getTransformReason().equals(EntityTransformEvent.TransformReason.CURED)
|
event.getTransformReason() == EntityTransformEvent.TransformReason.CURED
|
||||||
&& event.getTransformedEntity().getType().equals(EntityType.VILLAGER)
|
&& event.getTransformedEntity().getType() == XEntityType.VILLAGER.get()
|
||||||
) {
|
) {
|
||||||
Villager villager = (Villager) event.getTransformedEntity();
|
Villager villager = (Villager) event.getTransformedEntity();
|
||||||
scheduler.runAtEntityLater(villager, () -> {
|
scheduler.runAtEntityLater(villager, () -> {
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package me.xginko.villageroptimizer.modules.gameplay;
|
package me.xginko.villageroptimizer.modules.gameplay;
|
||||||
|
|
||||||
|
import com.cryptomorin.xseries.XPotion;
|
||||||
import me.xginko.villageroptimizer.VillagerOptimizer;
|
import me.xginko.villageroptimizer.VillagerOptimizer;
|
||||||
import me.xginko.villageroptimizer.config.Config;
|
import me.xginko.villageroptimizer.config.Config;
|
||||||
import me.xginko.villageroptimizer.modules.VillagerOptimizerModule;
|
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.InventoryCloseEvent;
|
||||||
import org.bukkit.event.inventory.InventoryType;
|
import org.bukkit.event.inventory.InventoryType;
|
||||||
import org.bukkit.potion.PotionEffect;
|
import org.bukkit.potion.PotionEffect;
|
||||||
import org.bukkit.potion.PotionEffectType;
|
|
||||||
|
|
||||||
import java.time.Duration;
|
import java.time.Duration;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
public class LevelOptimizedProfession extends VillagerOptimizerModule implements Listener {
|
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 boolean notify_player;
|
||||||
private final long cooldown_millis;
|
private final long cooldown_millis;
|
||||||
|
|
||||||
@ -58,7 +61,7 @@ public class LevelOptimizedProfession extends VillagerOptimizerModule implements
|
|||||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||||
private void onTradeScreenClose(InventoryCloseEvent event) {
|
private void onTradeScreenClose(InventoryCloseEvent event) {
|
||||||
if (
|
if (
|
||||||
event.getInventory().getType().equals(InventoryType.MERCHANT)
|
event.getInventory().getType() == InventoryType.MERCHANT
|
||||||
&& event.getInventory().getHolder() instanceof Villager
|
&& event.getInventory().getHolder() instanceof Villager
|
||||||
) {
|
) {
|
||||||
final Villager villager = (Villager) event.getInventory().getHolder();
|
final Villager villager = (Villager) event.getInventory().getHolder();
|
||||||
@ -69,7 +72,7 @@ public class LevelOptimizedProfession extends VillagerOptimizerModule implements
|
|||||||
if (wVillager.calculateLevel() <= villager.getVillagerLevel()) return;
|
if (wVillager.calculateLevel() <= villager.getVillagerLevel()) return;
|
||||||
|
|
||||||
scheduler.runAtEntity(villager, enableAI -> {
|
scheduler.runAtEntity(villager, enableAI -> {
|
||||||
villager.addPotionEffect(new PotionEffect(PotionEffectType.SLOW, 120, 120, false, false));
|
villager.addPotionEffect(SUPER_SLOWNESS);
|
||||||
villager.setAware(true);
|
villager.setAware(true);
|
||||||
scheduler.runAtEntityLater(villager, disableAI -> {
|
scheduler.runAtEntityLater(villager, disableAI -> {
|
||||||
villager.setAware(false);
|
villager.setAware(false);
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
package me.xginko.villageroptimizer.modules.gameplay;
|
package me.xginko.villageroptimizer.modules.gameplay;
|
||||||
|
|
||||||
|
import com.cryptomorin.xseries.XEntityType;
|
||||||
import me.xginko.villageroptimizer.modules.VillagerOptimizerModule;
|
import me.xginko.villageroptimizer.modules.VillagerOptimizerModule;
|
||||||
import org.bukkit.entity.EntityType;
|
|
||||||
import org.bukkit.entity.Villager;
|
import org.bukkit.entity.Villager;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.EventPriority;
|
import org.bukkit.event.EventPriority;
|
||||||
@ -37,7 +37,7 @@ public class MakeVillagersSpawnAdult extends VillagerOptimizerModule implements
|
|||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||||
private void onVillagerSpawn(CreatureSpawnEvent event) {
|
private void onVillagerSpawn(CreatureSpawnEvent event) {
|
||||||
if (event.getEntityType().equals(EntityType.VILLAGER)) {
|
if (event.getEntityType() == XEntityType.VILLAGER.get()) {
|
||||||
final Villager villager = (Villager) event.getEntity();
|
final Villager villager = (Villager) event.getEntity();
|
||||||
if (!villager.isAdult()) villager.setAdult();
|
if (!villager.isAdult()) villager.setAdult();
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
package me.xginko.villageroptimizer.modules.gameplay;
|
package me.xginko.villageroptimizer.modules.gameplay;
|
||||||
|
|
||||||
|
import com.cryptomorin.xseries.XEntityType;
|
||||||
import com.destroystokyo.paper.event.entity.EntityKnockbackByEntityEvent;
|
import com.destroystokyo.paper.event.entity.EntityKnockbackByEntityEvent;
|
||||||
import me.xginko.villageroptimizer.modules.VillagerOptimizerModule;
|
import me.xginko.villageroptimizer.modules.VillagerOptimizerModule;
|
||||||
import org.bukkit.entity.EntityType;
|
|
||||||
import org.bukkit.entity.Villager;
|
import org.bukkit.entity.Villager;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.EventPriority;
|
import org.bukkit.event.EventPriority;
|
||||||
@ -64,7 +64,7 @@ public class PreventOptimizedDamage extends VillagerOptimizerModule implements L
|
|||||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||||
private void onDamageByEntity(EntityDamageEvent event) {
|
private void onDamageByEntity(EntityDamageEvent event) {
|
||||||
if (
|
if (
|
||||||
event.getEntityType().equals(EntityType.VILLAGER)
|
event.getEntityType() == XEntityType.VILLAGER.get()
|
||||||
&& damage_causes_to_cancel.contains(event.getCause())
|
&& damage_causes_to_cancel.contains(event.getCause())
|
||||||
&& villagerCache.createIfAbsent((Villager) event.getEntity()).isOptimized()
|
&& villagerCache.createIfAbsent((Villager) event.getEntity()).isOptimized()
|
||||||
) {
|
) {
|
||||||
@ -76,7 +76,7 @@ public class PreventOptimizedDamage extends VillagerOptimizerModule implements L
|
|||||||
private void onKnockbackByEntity(EntityKnockbackByEntityEvent event) {
|
private void onKnockbackByEntity(EntityKnockbackByEntityEvent event) {
|
||||||
if (
|
if (
|
||||||
cancel_knockback
|
cancel_knockback
|
||||||
&& event.getEntityType().equals(EntityType.VILLAGER)
|
&& event.getEntityType() == XEntityType.VILLAGER.get()
|
||||||
&& villagerCache.createIfAbsent((Villager) event.getEntity()).isOptimized()
|
&& villagerCache.createIfAbsent((Villager) event.getEntity()).isOptimized()
|
||||||
) {
|
) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
package me.xginko.villageroptimizer.modules.gameplay;
|
package me.xginko.villageroptimizer.modules.gameplay;
|
||||||
|
|
||||||
|
import com.cryptomorin.xseries.XEntityType;
|
||||||
import com.destroystokyo.paper.event.entity.EntityPathfindEvent;
|
import com.destroystokyo.paper.event.entity.EntityPathfindEvent;
|
||||||
import me.xginko.villageroptimizer.modules.VillagerOptimizerModule;
|
import me.xginko.villageroptimizer.modules.VillagerOptimizerModule;
|
||||||
import org.bukkit.entity.Entity;
|
import org.bukkit.entity.Entity;
|
||||||
import org.bukkit.entity.EntityType;
|
|
||||||
import org.bukkit.entity.Mob;
|
import org.bukkit.entity.Mob;
|
||||||
import org.bukkit.entity.Villager;
|
import org.bukkit.entity.Villager;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
@ -41,7 +41,7 @@ public class PreventOptimizedTargeting extends VillagerOptimizerModule implement
|
|||||||
final Entity target = event.getTarget();
|
final Entity target = event.getTarget();
|
||||||
if (
|
if (
|
||||||
target != null
|
target != null
|
||||||
&& target.getType().equals(EntityType.VILLAGER)
|
&& target.getType() == XEntityType.VILLAGER.get()
|
||||||
&& villagerCache.createIfAbsent((Villager) target).isOptimized()
|
&& villagerCache.createIfAbsent((Villager) target).isOptimized()
|
||||||
) {
|
) {
|
||||||
event.setTarget(null);
|
event.setTarget(null);
|
||||||
@ -54,7 +54,7 @@ public class PreventOptimizedTargeting extends VillagerOptimizerModule implement
|
|||||||
final Entity target = event.getTargetEntity();
|
final Entity target = event.getTargetEntity();
|
||||||
if (
|
if (
|
||||||
target != null
|
target != null
|
||||||
&& target.getType().equals(EntityType.VILLAGER)
|
&& target.getType() == XEntityType.VILLAGER.get()
|
||||||
&& villagerCache.createIfAbsent((Villager) target).isOptimized()
|
&& villagerCache.createIfAbsent((Villager) target).isOptimized()
|
||||||
) {
|
) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
@ -64,7 +64,7 @@ public class PreventOptimizedTargeting extends VillagerOptimizerModule implement
|
|||||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||||
private void onEntityAttackVillager(EntityDamageByEntityEvent event) {
|
private void onEntityAttackVillager(EntityDamageByEntityEvent event) {
|
||||||
if (
|
if (
|
||||||
event.getEntityType().equals(EntityType.VILLAGER)
|
event.getEntityType() == XEntityType.VILLAGER.get()
|
||||||
&& event.getDamager() instanceof Mob
|
&& event.getDamager() instanceof Mob
|
||||||
&& villagerCache.createIfAbsent((Villager) event.getEntity()).isOptimized()
|
&& villagerCache.createIfAbsent((Villager) event.getEntity()).isOptimized()
|
||||||
) {
|
) {
|
||||||
|
@ -45,7 +45,7 @@ public class PreventUnoptimizedTrading extends VillagerOptimizerModule implement
|
|||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||||
private void onTradeOpen(TradeSelectEvent event) {
|
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.getWhoClicked().hasPermission(Permissions.Bypass.TRADE_PREVENTION.get())) return;
|
||||||
if (!(event.getInventory().getHolder() instanceof Villager)) return;
|
if (!(event.getInventory().getHolder() instanceof Villager)) return;
|
||||||
if (villagerCache.createIfAbsent((Villager) event.getInventory().getHolder()).isOptimized()) 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)
|
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||||
private void onInventoryClick(InventoryClickEvent event) {
|
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.getWhoClicked().hasPermission(Permissions.Bypass.TRADE_PREVENTION.get())) return;
|
||||||
if (!(event.getInventory().getHolder() instanceof Villager)) return;
|
if (!(event.getInventory().getHolder() instanceof Villager)) return;
|
||||||
if (villagerCache.createIfAbsent((Villager) event.getInventory().getHolder()).isOptimized()) return;
|
if (villagerCache.createIfAbsent((Villager) event.getInventory().getHolder()).isOptimized()) return;
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package me.xginko.villageroptimizer.modules.gameplay;
|
package me.xginko.villageroptimizer.modules.gameplay;
|
||||||
|
|
||||||
|
import com.cryptomorin.xseries.XEntityType;
|
||||||
import me.xginko.villageroptimizer.VillagerOptimizer;
|
import me.xginko.villageroptimizer.VillagerOptimizer;
|
||||||
import me.xginko.villageroptimizer.enums.Permissions;
|
import me.xginko.villageroptimizer.enums.Permissions;
|
||||||
import me.xginko.villageroptimizer.modules.VillagerOptimizerModule;
|
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.utils.Util;
|
||||||
import me.xginko.villageroptimizer.wrapper.WrappedVillager;
|
import me.xginko.villageroptimizer.wrapper.WrappedVillager;
|
||||||
import net.kyori.adventure.text.TextReplacementConfig;
|
import net.kyori.adventure.text.TextReplacementConfig;
|
||||||
import org.bukkit.entity.EntityType;
|
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.entity.Villager;
|
import org.bukkit.entity.Villager;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
@ -53,30 +53,29 @@ public class RestockOptimizedTrades extends VillagerOptimizerModule implements L
|
|||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||||
private void onInteract(PlayerInteractEntityEvent event) {
|
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());
|
final WrappedVillager wVillager = villagerCache.createIfAbsent((Villager) event.getRightClicked());
|
||||||
if (!wVillager.isOptimized()) return;
|
if (!wVillager.isOptimized()) return;
|
||||||
|
|
||||||
final Player player = event.getPlayer();
|
final Player player = event.getPlayer();
|
||||||
final boolean player_bypassing = player.hasPermission(Permissions.Bypass.RESTOCK_COOLDOWN.get());
|
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.restock();
|
wVillager.saveRestockTime();
|
||||||
wVillager.saveRestockTime();
|
|
||||||
|
|
||||||
if (notify_player && !player_bypassing) {
|
if (notify_player && !player_bypassing) {
|
||||||
final TextReplacementConfig timeLeft = TextReplacementConfig.builder()
|
final TextReplacementConfig timeLeft = TextReplacementConfig.builder()
|
||||||
.matchLiteral("%time%")
|
.matchLiteral("%time%")
|
||||||
.replacement(Util.formatDuration(Duration.ofMillis(wVillager.getRestockCooldownMillis(restock_delay_millis))))
|
.replacement(Util.formatDuration(Duration.ofMillis(wVillager.getRestockCooldownMillis(restock_delay_millis))))
|
||||||
.build();
|
.build();
|
||||||
VillagerOptimizer.getLang(player.locale()).trades_restocked
|
VillagerOptimizer.getLang(player.locale()).trades_restocked
|
||||||
.forEach(line -> KyoriUtil.sendMessage(player, line.replaceText(timeLeft)));
|
.forEach(line -> KyoriUtil.sendMessage(player, line.replaceText(timeLeft)));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (log_enabled) {
|
if (log_enabled) {
|
||||||
info("Restocked optimized villager at " + LocationUtil.toString(wVillager.villager().getLocation()));
|
info("Restocked optimized villager at " + LocationUtil.toString(wVillager.villager().getLocation()));
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -34,7 +34,7 @@ public class UnoptimizeOnJobLoose extends VillagerOptimizerModule implements Lis
|
|||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||||
private void onJobReset(VillagerCareerChangeEvent event) {
|
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());
|
final WrappedVillager wrappedVillager = villagerCache.createIfAbsent(event.getEntity());
|
||||||
if (wrappedVillager.isOptimized()) {
|
if (wrappedVillager.isOptimized()) {
|
||||||
wrappedVillager.setOptimizationType(OptimizationType.NONE);
|
wrappedVillager.setOptimizationType(OptimizationType.NONE);
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package me.xginko.villageroptimizer.modules.optimization;
|
package me.xginko.villageroptimizer.modules.optimization;
|
||||||
|
|
||||||
|
import com.cryptomorin.xseries.XMaterial;
|
||||||
import me.xginko.villageroptimizer.VillagerOptimizer;
|
import me.xginko.villageroptimizer.VillagerOptimizer;
|
||||||
import me.xginko.villageroptimizer.enums.OptimizationType;
|
import me.xginko.villageroptimizer.enums.OptimizationType;
|
||||||
import me.xginko.villageroptimizer.enums.Permissions;
|
import me.xginko.villageroptimizer.enums.Permissions;
|
||||||
@ -24,12 +25,13 @@ import org.bukkit.event.block.BlockBreakEvent;
|
|||||||
import org.bukkit.event.block.BlockPlaceEvent;
|
import org.bukkit.event.block.BlockPlaceEvent;
|
||||||
|
|
||||||
import java.time.Duration;
|
import java.time.Duration;
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.EnumSet;
|
import java.util.EnumSet;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
public class OptimizeByBlock extends VillagerOptimizerModule implements Listener {
|
public class OptimizeByBlock extends VillagerOptimizerModule implements Listener {
|
||||||
|
|
||||||
@ -43,9 +45,12 @@ public class OptimizeByBlock extends VillagerOptimizerModule implements Listener
|
|||||||
config.master().addComment(configPath + ".enable",
|
config.master().addComment(configPath + ".enable",
|
||||||
"When enabled, the closest villager standing near a configured block being placed will be optimized.\n" +
|
"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.");
|
"If a configured block is broken nearby, the closest villager will become unoptimized again.");
|
||||||
this.blocks_that_disable = config.getList(configPath + ".materials", Arrays.asList(
|
List<String> defaults = Stream.of(XMaterial.LAPIS_BLOCK, XMaterial.GLOWSTONE, XMaterial.IRON_BLOCK)
|
||||||
"LAPIS_BLOCK", "GLOWSTONE", "IRON_BLOCK"
|
.filter(XMaterial::isSupported)
|
||||||
), "Values here need to be valid bukkit Material enums for your server version.")
|
.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()
|
.stream()
|
||||||
.map(configuredMaterial -> {
|
.map(configuredMaterial -> {
|
||||||
try {
|
try {
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
package me.xginko.villageroptimizer.modules.optimization;
|
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.VillagerOptimizer;
|
||||||
import me.xginko.villageroptimizer.enums.OptimizationType;
|
import me.xginko.villageroptimizer.enums.OptimizationType;
|
||||||
import me.xginko.villageroptimizer.enums.Permissions;
|
import me.xginko.villageroptimizer.enums.Permissions;
|
||||||
@ -12,8 +14,6 @@ import me.xginko.villageroptimizer.utils.Util;
|
|||||||
import me.xginko.villageroptimizer.wrapper.WrappedVillager;
|
import me.xginko.villageroptimizer.wrapper.WrappedVillager;
|
||||||
import net.kyori.adventure.text.TextReplacementConfig;
|
import net.kyori.adventure.text.TextReplacementConfig;
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.Material;
|
|
||||||
import org.bukkit.entity.EntityType;
|
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.entity.Villager;
|
import org.bukkit.entity.Villager;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
@ -74,12 +74,12 @@ public class OptimizeByNametag extends VillagerOptimizerModule implements Listen
|
|||||||
@SuppressWarnings("deprecation")
|
@SuppressWarnings("deprecation")
|
||||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||||
private void onPlayerInteractEntity(PlayerInteractEntityEvent event) {
|
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();
|
final Player player = event.getPlayer();
|
||||||
if (!player.hasPermission(Permissions.Optimize.NAMETAG.get())) return;
|
if (!player.hasPermission(Permissions.Optimize.NAMETAG.get())) return;
|
||||||
|
|
||||||
final ItemStack usedItem = player.getInventory().getItem(event.getHand());
|
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;
|
if (!usedItem.hasItemMeta()) return;
|
||||||
final ItemMeta meta = usedItem.getItemMeta();
|
final ItemMeta meta = usedItem.getItemMeta();
|
||||||
if (!meta.hasDisplayName()) return;
|
if (!meta.hasDisplayName()) return;
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package me.xginko.villageroptimizer.utils;
|
package me.xginko.villageroptimizer.utils;
|
||||||
|
|
||||||
|
import com.cryptomorin.xseries.XMaterial;
|
||||||
import net.kyori.adventure.text.format.Style;
|
import net.kyori.adventure.text.format.Style;
|
||||||
import net.kyori.adventure.text.format.TextColor;
|
import net.kyori.adventure.text.format.TextColor;
|
||||||
import net.kyori.adventure.text.format.TextDecoration;
|
import net.kyori.adventure.text.format.TextDecoration;
|
||||||
@ -25,19 +26,19 @@ public class Util {
|
|||||||
PL_COLOR = TextColor.color(102,255,230);
|
PL_COLOR = TextColor.color(102,255,230);
|
||||||
PL_STYLE = Style.style(PL_COLOR, TextDecoration.BOLD);
|
PL_STYLE = Style.style(PL_COLOR, TextDecoration.BOLD);
|
||||||
PROFESSION_MAP = new EnumMap<>(Material.class);
|
PROFESSION_MAP = new EnumMap<>(Material.class);
|
||||||
PROFESSION_MAP.put(Material.LOOM, Villager.Profession.SHEPHERD);
|
PROFESSION_MAP.put(XMaterial.LOOM.parseMaterial(), Villager.Profession.SHEPHERD);
|
||||||
PROFESSION_MAP.put(Material.BARREL, Villager.Profession.FISHERMAN);
|
PROFESSION_MAP.put(XMaterial.BARREL.parseMaterial(), Villager.Profession.FISHERMAN);
|
||||||
PROFESSION_MAP.put(Material.SMOKER, Villager.Profession.BUTCHER);
|
PROFESSION_MAP.put(XMaterial.SMOKER.parseMaterial(), Villager.Profession.BUTCHER);
|
||||||
PROFESSION_MAP.put(Material.LECTERN, Villager.Profession.LIBRARIAN);
|
PROFESSION_MAP.put(XMaterial.LECTERN.parseMaterial(), Villager.Profession.LIBRARIAN);
|
||||||
PROFESSION_MAP.put(Material.CAULDRON, Villager.Profession.LEATHERWORKER);
|
PROFESSION_MAP.put(XMaterial.CAULDRON.parseMaterial(), Villager.Profession.LEATHERWORKER);
|
||||||
PROFESSION_MAP.put(Material.COMPOSTER, Villager.Profession.FARMER);
|
PROFESSION_MAP.put(XMaterial.COMPOSTER.parseMaterial(), Villager.Profession.FARMER);
|
||||||
PROFESSION_MAP.put(Material.GRINDSTONE, Villager.Profession.WEAPONSMITH);
|
PROFESSION_MAP.put(XMaterial.GRINDSTONE.parseMaterial(), Villager.Profession.WEAPONSMITH);
|
||||||
PROFESSION_MAP.put(Material.STONECUTTER, Villager.Profession.MASON);
|
PROFESSION_MAP.put(XMaterial.STONECUTTER.parseMaterial(), Villager.Profession.MASON);
|
||||||
PROFESSION_MAP.put(Material.BREWING_STAND, Villager.Profession.CLERIC);
|
PROFESSION_MAP.put(XMaterial.BREWING_STAND.parseMaterial(), Villager.Profession.CLERIC);
|
||||||
PROFESSION_MAP.put(Material.BLAST_FURNACE, Villager.Profession.ARMORER);
|
PROFESSION_MAP.put(XMaterial.BLAST_FURNACE.parseMaterial(), Villager.Profession.ARMORER);
|
||||||
PROFESSION_MAP.put(Material.SMITHING_TABLE, Villager.Profession.TOOLSMITH);
|
PROFESSION_MAP.put(XMaterial.SMITHING_TABLE.parseMaterial(), Villager.Profession.TOOLSMITH);
|
||||||
PROFESSION_MAP.put(Material.FLETCHING_TABLE, Villager.Profession.FLETCHER);
|
PROFESSION_MAP.put(XMaterial.FLETCHING_TABLE.parseMaterial(), Villager.Profession.FLETCHER);
|
||||||
PROFESSION_MAP.put(Material.CARTOGRAPHY_TABLE, Villager.Profession.CARTOGRAPHER);
|
PROFESSION_MAP.put(XMaterial.CARTOGRAPHY_TABLE.parseMaterial(), Villager.Profession.CARTOGRAPHER);
|
||||||
try {
|
try {
|
||||||
Chunk.class.getMethod("isEntitiesLoaded");
|
Chunk.class.getMethod("isEntitiesLoaded");
|
||||||
canUseIsEntitiesLoaded = true;
|
canUseIsEntitiesLoaded = true;
|
||||||
|
@ -73,7 +73,7 @@ public class AVLVillagerDataHandlerImpl implements VillagerDataHandler {
|
|||||||
|
|
||||||
// End repeating task once logic is finished
|
// End repeating task once logic is finished
|
||||||
setOptimization.cancel();
|
setOptimization.cancel();
|
||||||
}, 0L, 1L, TimeUnit.SECONDS);
|
}, 1L, 1L, TimeUnit.SECONDS);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -53,7 +53,7 @@ public class MainVillagerDataHandlerImpl implements VillagerDataHandler {
|
|||||||
|
|
||||||
// End repeating task once logic is finished
|
// End repeating task once logic is finished
|
||||||
setOptimization.cancel();
|
setOptimization.cancel();
|
||||||
}, 0L, 1L, TimeUnit.SECONDS);
|
}, 1L, 1L, TimeUnit.SECONDS);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
Loading…
x
Reference in New Issue
Block a user