mockup plugin.yml and change villager leveler
This commit is contained in:
parent
641ea24211
commit
3f45bc51c0
@ -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,35 +63,27 @@ 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(plugin, enableAI -> villager.setAware(true), null);
|
||||||
villager.getScheduler().run(VillagerOptimizer.getInstance(), 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 {
|
||||||
|
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())
|
|
||||||
));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -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
|
Loading…
x
Reference in New Issue
Block a user