safer and better logic

This commit is contained in:
xGinko 2023-09-10 02:26:03 +02:00
parent ff0ba445fd
commit b5522121ba
5 changed files with 19 additions and 13 deletions

View File

@ -118,6 +118,10 @@ public final class WrappedVillager {
return dataContainer.has(Keys.LAST_RESTOCK.key(), PersistentDataType.LONG) ? dataContainer.get(Keys.LAST_RESTOCK.key(), PersistentDataType.LONG) : 0L; return dataContainer.has(Keys.LAST_RESTOCK.key(), PersistentDataType.LONG) ? dataContainer.get(Keys.LAST_RESTOCK.key(), PersistentDataType.LONG) : 0L;
} }
public long getRestockCooldownMillis(final long cooldown_millis) {
return dataContainer.has(Keys.LAST_RESTOCK.key(), PersistentDataType.LONG) ? (villager.getWorld().getFullTime() - (dataContainer.get(Keys.LAST_RESTOCK.key(), PersistentDataType.LONG) + cooldown_millis)) : cooldown_millis;
}
/** /**
* @return The level between 1-5 calculated from the villagers experience. * @return The level between 1-5 calculated from the villagers experience.
*/ */
@ -157,6 +161,6 @@ public final class WrappedVillager {
} }
public long getLevelCooldownMillis(final long cooldown_millis) { public long getLevelCooldownMillis(final long cooldown_millis) {
return dataContainer.has(Keys.LAST_LEVELUP.key(), PersistentDataType.LONG) ? (villager.getWorld().getFullTime() - (dataContainer.get(Keys.LAST_OPTIMIZE.key(), PersistentDataType.LONG) + cooldown_millis)) : cooldown_millis; return dataContainer.has(Keys.LAST_LEVELUP.key(), PersistentDataType.LONG) ? (villager.getWorld().getFullTime() - (dataContainer.get(Keys.LAST_LEVELUP.key(), PersistentDataType.LONG) + cooldown_millis)) : cooldown_millis;
} }
} }

View File

@ -110,9 +110,9 @@ public class BlockOptimization implements VillagerOptimizerModule, Listener {
wVillager.villager().shakeHead(); wVillager.villager().shakeHead();
if (shouldNotifyPlayer) { if (shouldNotifyPlayer) {
Player player = event.getPlayer(); Player player = event.getPlayer();
final long optimizeCoolDown = wVillager.getOptimizeCooldownMillis(cooldown); final String timeLeft = CommonUtils.formatTime(wVillager.getOptimizeCooldownMillis(cooldown));
VillagerOptimizer.getLang(player.locale()).block_on_optimize_cooldown.forEach(line -> player.sendMessage(line VillagerOptimizer.getLang(player.locale()).block_on_optimize_cooldown.forEach(line -> player.sendMessage(line
.replaceText(TextReplacementConfig.builder().matchLiteral("%time%").replacement(CommonUtils.formatTime(optimizeCoolDown)).build()))); .replaceText(TextReplacementConfig.builder().matchLiteral("%time%").replacement(timeLeft).build())));
} }
} }
} }
@ -178,9 +178,9 @@ public class BlockOptimization implements VillagerOptimizerModule, Listener {
wVillager.villager().shakeHead(); wVillager.villager().shakeHead();
if (shouldNotifyPlayer) { if (shouldNotifyPlayer) {
Player player = event.getPlayer(); Player player = event.getPlayer();
final long optimizeCoolDown = wVillager.getOptimizeCooldownMillis(cooldown); final String timeLeft = CommonUtils.formatTime(wVillager.getOptimizeCooldownMillis(cooldown));
VillagerOptimizer.getLang(player.locale()).block_on_optimize_cooldown.forEach(line -> player.sendMessage(line VillagerOptimizer.getLang(player.locale()).block_on_optimize_cooldown.forEach(line -> player.sendMessage(line
.replaceText(TextReplacementConfig.builder().matchLiteral("%time%").replacement(CommonUtils.formatTime(optimizeCoolDown)).build())) .replaceText(TextReplacementConfig.builder().matchLiteral("%time%").replacement(timeLeft).build()))
); );
} }
} }

View File

@ -3,7 +3,6 @@ package me.xginko.villageroptimizer.modules;
import me.xginko.villageroptimizer.VillagerOptimizer; import me.xginko.villageroptimizer.VillagerOptimizer;
import me.xginko.villageroptimizer.cache.VillagerManager; import me.xginko.villageroptimizer.cache.VillagerManager;
import me.xginko.villageroptimizer.config.Config; import me.xginko.villageroptimizer.config.Config;
import me.xginko.villageroptimizer.enums.OptimizationType;
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;
@ -69,10 +68,9 @@ public class LevelVillagers implements VillagerOptimizerModule, Listener {
&& wVillager.calculateLevel() > villager.getVillagerLevel() && 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));
final OptimizationType previousOptimization = wVillager.getOptimizationType(); villager.setAware(true);
wVillager.setOptimization(OptimizationType.OFF);
villager.getScheduler().runDelayed(plugin, reOptimize -> { villager.getScheduler().runDelayed(plugin, reOptimize -> {
wVillager.setOptimization(previousOptimization); villager.setAware(false);
wVillager.saveLastLevelUp(); wVillager.saveLastLevelUp();
}, null, 100L); }, null, 100L);
} }
@ -82,11 +80,14 @@ public class LevelVillagers implements VillagerOptimizerModule, Listener {
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
private void onInteract(PlayerInteractEntityEvent event) { private void onInteract(PlayerInteractEntityEvent event) {
if (!event.getRightClicked().getType().equals(EntityType.VILLAGER)) return; if (!event.getRightClicked().getType().equals(EntityType.VILLAGER)) return;
WrappedVillager wVillager = villagerManager.getOrAdd((Villager) event.getRightClicked()); WrappedVillager wVillager = villagerManager.getOrAdd((Villager) event.getRightClicked());
if (wVillager.isOptimized() && !wVillager.canLevelUp(cooldown)) { if (wVillager.isOptimized() && !wVillager.canLevelUp(cooldown)) {
event.setCancelled(true); event.setCancelled(true);
wVillager.villager().shakeHead();
Player player = event.getPlayer(); Player player = event.getPlayer();
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())
)); ));

View File

@ -62,8 +62,9 @@ public class RestockTrades implements VillagerOptimizerModule, Listener {
wVillager.saveRestockTime(); wVillager.saveRestockTime();
if (notifyPlayer) { if (notifyPlayer) {
Player player = event.getPlayer(); Player player = event.getPlayer();
final String timeLeft = CommonUtils.formatTime(wVillager.getRestockCooldownMillis(restock_delay_millis));
VillagerOptimizer.getLang(player.locale()).trades_restocked.forEach(line -> player.sendMessage(line VillagerOptimizer.getLang(player.locale()).trades_restocked.forEach(line -> player.sendMessage(line
.replaceText(TextReplacementConfig.builder().matchLiteral("%time%").replacement(CommonUtils.formatTime(restock_delay_millis)).build())) .replaceText(TextReplacementConfig.builder().matchLiteral("%time%").replacement(timeLeft).build()))
); );
} }
if (shouldLog) if (shouldLog)

View File

@ -121,9 +121,9 @@ public class WorkstationOptimization implements VillagerOptimizerModule, Listene
closestOptimizableVillager.villager().shakeHead(); closestOptimizableVillager.villager().shakeHead();
if (shouldNotifyPlayer) { if (shouldNotifyPlayer) {
Player player = event.getPlayer(); Player player = event.getPlayer();
final long optimizeCoolDown = closestOptimizableVillager.getOptimizeCooldownMillis(cooldown); final String timeLeft = CommonUtils.formatTime(closestOptimizableVillager.getOptimizeCooldownMillis(cooldown));
VillagerOptimizer.getLang(player.locale()).nametag_on_optimize_cooldown.forEach(line -> player.sendMessage(line VillagerOptimizer.getLang(player.locale()).nametag_on_optimize_cooldown.forEach(line -> player.sendMessage(line
.replaceText(TextReplacementConfig.builder().matchLiteral("%time%").replacement(CommonUtils.formatTime(optimizeCoolDown)).build()) .replaceText(TextReplacementConfig.builder().matchLiteral("%time%").replacement(timeLeft).build())
)); ));
} }
} }