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.utils.CommonUtils;
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;
@ -15,7 +14,6 @@ import org.bukkit.event.HandlerList;
import org.bukkit.event.Listener;
import org.bukkit.event.inventory.InventoryCloseEvent;
import org.bukkit.event.inventory.InventoryType;
import org.bukkit.event.player.PlayerInteractEntityEvent;
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;
@ -23,6 +21,7 @@ public class LevelVillagers implements VillagerOptimizerModule, Listener {
private final VillagerOptimizer plugin;
private final VillagerManager villagerManager;
private final boolean shouldNotify;
private final long cooldown;
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.
""");
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.
""") * 1000L;
this.shouldNotify = config.getBoolean("optimization.villager-leveling.notify-player", true,
"Tell players to wait when a villager is leveling up.");
}
@Override
@ -62,35 +63,27 @@ public class LevelVillagers implements VillagerOptimizerModule, Listener {
&& event.getInventory().getHolder() instanceof Villager villager
) {
WrappedVillager wVillager = villagerManager.getOrAdd(villager);
if (
wVillager.isOptimized()
&& wVillager.canLevelUp(cooldown)
&& wVillager.calculateLevel() > villager.getVillagerLevel()
) {
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().runDelayed(plugin, disableAI -> {
villager.setAware(false);
wVillager.saveLastLevelUp();
}, null, 100L);
if (!wVillager.isOptimized()) return;
if (wVillager.canLevelUp(cooldown)) {
if (wVillager.calculateLevel() > villager.getVillagerLevel()) {
villager.addPotionEffect(new PotionEffect(PotionEffectType.SLOW, (int) (20 + (cooldown / 50L)), 120, false, false));
villager.getScheduler().run(plugin, enableAI -> villager.setAware(true), null);
villager.getScheduler().runDelayed(plugin, disableAI -> {
villager.setAware(false);
wVillager.saveLastLevelUp();
}, null, 100L);
}
} else {
wVillager.villager().shakeHead();
if (shouldNotify) {
Player player = (Player) event.getPlayer();
final String timeLeft = CommonUtils.formatTime(wVillager.getLevelCooldownMillis(cooldown));
VillagerOptimizer.getLang(player.locale()).villager_leveling_up.forEach(line -> player.sendMessage(line
.replaceText(TextReplacementConfig.builder().matchLiteral("%time%").replacement(timeLeft).build())
));
}
}
}
}
@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();
Player player = event.getPlayer();
final String timeLeft = CommonUtils.formatTime(wVillager.getLevelCooldownMillis(cooldown));
VillagerOptimizer.getLang(player.locale()).villager_leveling_up.forEach(line -> player.sendMessage(line
.replaceText(TextReplacementConfig.builder().matchLiteral("%time%").replacement(timeLeft).build())
));
}
}
}

View File

@ -1,5 +1,27 @@
name: VillagerOptimizer
version: '${project.version}'
main: me.xginko.villageroptimizer.VillagerOptimizer
authors: [ xGinko ]
description: ${project.description}
website: ${project.url}
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