mockup plugin.yml and change villager leveler

This commit is contained in:
xGinko 2023-09-10 15:34:11 +02:00
parent 641ea24211
commit 3f45bc51c0
2 changed files with 47 additions and 32 deletions

View File

@ -6,7 +6,6 @@ import me.xginko.villageroptimizer.config.Config;
import me.xginko.villageroptimizer.models.WrappedVillager; import me.xginko.villageroptimizer.models.WrappedVillager;
import me.xginko.villageroptimizer.utils.CommonUtils; import me.xginko.villageroptimizer.utils.CommonUtils;
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;
@ -15,7 +14,6 @@ import org.bukkit.event.HandlerList;
import org.bukkit.event.Listener; 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.event.player.PlayerInteractEntityEvent;
import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType; import org.bukkit.potion.PotionEffectType;
@ -23,6 +21,7 @@ public class LevelVillagers implements VillagerOptimizerModule, Listener {
private final VillagerOptimizer plugin; private final VillagerOptimizer plugin;
private final VillagerManager villagerManager; private final VillagerManager villagerManager;
private final boolean shouldNotify;
private final long cooldown; private final long cooldown;
public LevelVillagers() { public LevelVillagers() {
@ -34,9 +33,11 @@ public class LevelVillagers implements VillagerOptimizerModule, Listener {
Temporarily enables the villagers AI to allow it to level up and then disables it again. Temporarily enables the villagers AI to allow it to level up and then disables it again.
"""); """);
this.cooldown = config.getInt("optimization.villager-leveling.level-check-cooldown-seconds", 5, """ this.cooldown = config.getInt("optimization.villager-leveling.level-check-cooldown-seconds", 5, """
Cooldown in seconds the level of a villager will be checked and updated again. \s Cooldown in seconds until the level of a villager will be checked and updated again. \s
Recommended to leave as is. Recommended to leave as is.
""") * 1000L; """) * 1000L;
this.shouldNotify = config.getBoolean("optimization.villager-leveling.notify-player", true,
"Tell players to wait when a villager is leveling up.");
} }
@Override @Override
@ -62,31 +63,21 @@ public class LevelVillagers implements VillagerOptimizerModule, Listener {
&& event.getInventory().getHolder() instanceof Villager villager && event.getInventory().getHolder() instanceof Villager villager
) { ) {
WrappedVillager wVillager = villagerManager.getOrAdd(villager); WrappedVillager wVillager = villagerManager.getOrAdd(villager);
if ( if (!wVillager.isOptimized()) return;
wVillager.isOptimized()
&& wVillager.canLevelUp(cooldown) if (wVillager.canLevelUp(cooldown)) {
&& wVillager.calculateLevel() > villager.getVillagerLevel() if (wVillager.calculateLevel() > villager.getVillagerLevel()) {
) {
villager.addPotionEffect(new PotionEffect(PotionEffectType.SLOW, (int) (20 + (cooldown / 50L)), 120, false, false)); villager.addPotionEffect(new PotionEffect(PotionEffectType.SLOW, (int) (20 + (cooldown / 50L)), 120, false, false));
villager.getScheduler().run(VillagerOptimizer.getInstance(), enableAI -> villager.setAware(true), null); villager.getScheduler().run(plugin, enableAI -> villager.setAware(true), null);
villager.getScheduler().runDelayed(plugin, disableAI -> { villager.getScheduler().runDelayed(plugin, disableAI -> {
villager.setAware(false); villager.setAware(false);
wVillager.saveLastLevelUp(); wVillager.saveLastLevelUp();
}, null, 100L); }, null, 100L);
} }
} } else {
}
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
private void onInteract(PlayerInteractEntityEvent event) {
if (!event.getRightClicked().getType().equals(EntityType.VILLAGER)) return;
WrappedVillager wVillager = villagerManager.getOrAdd((Villager) event.getRightClicked());
if (wVillager.isOptimized() && !wVillager.canLevelUp(cooldown)) {
event.setCancelled(true);
wVillager.villager().shakeHead(); wVillager.villager().shakeHead();
Player player = event.getPlayer(); if (shouldNotify) {
Player player = (Player) event.getPlayer();
final String timeLeft = CommonUtils.formatTime(wVillager.getLevelCooldownMillis(cooldown)); final String timeLeft = CommonUtils.formatTime(wVillager.getLevelCooldownMillis(cooldown));
VillagerOptimizer.getLang(player.locale()).villager_leveling_up.forEach(line -> player.sendMessage(line VillagerOptimizer.getLang(player.locale()).villager_leveling_up.forEach(line -> player.sendMessage(line
.replaceText(TextReplacementConfig.builder().matchLiteral("%time%").replacement(timeLeft).build()) .replaceText(TextReplacementConfig.builder().matchLiteral("%time%").replacement(timeLeft).build())
@ -94,3 +85,5 @@ public class LevelVillagers implements VillagerOptimizerModule, Listener {
} }
} }
} }
}
}

View File

@ -1,5 +1,27 @@
name: VillagerOptimizer name: VillagerOptimizer
version: '${project.version}' version: '${project.version}'
main: me.xginko.villageroptimizer.VillagerOptimizer main: me.xginko.villageroptimizer.VillagerOptimizer
authors: [ xGinko ]
description: ${project.description}
website: ${project.url}
api-version: '1.19' api-version: '1.19'
folia-supported: true folia-supported: true
commands:
villageroptimizer:
usage: /villageroptimizer [ reload, version ]
description: VillagerOptimizer admin commands
optimizevillagers:
usage: /optimizevillagers <blockradius>
description: Optmize villagers in a radius around you
unoptmizevillagers:
usage: /unoptimizevillagers <blockradius>
description: Unoptmize villagers in a radius around you
permissions:
villageroptimizer.*:
description: Admin plugin permissions
children:
villageroptimizer.cmd.reload: true
villageroptimizer.cmd.version: true
villageroptimizer.cmd.optimize: true
villageroptimizer.cmd.unoptimize: true
villageroptimizer.cooldownbypass: true