diff --git a/src/main/java/me/xginko/villageroptimizer/WrappedVillager.java b/src/main/java/me/xginko/villageroptimizer/WrappedVillager.java index 476c4a5..5545fca 100644 --- a/src/main/java/me/xginko/villageroptimizer/WrappedVillager.java +++ b/src/main/java/me/xginko/villageroptimizer/WrappedVillager.java @@ -207,7 +207,7 @@ public final class WrappedVillager { * @return True if the villager has been loaded long enough. */ public boolean canRestock(final long cooldown_millis) { - return getLastRestock() + cooldown_millis <= villager.getWorld().getFullTime(); + return getLastRestock() + cooldown_millis <= System.currentTimeMillis(); } /** @@ -223,7 +223,7 @@ public final class WrappedVillager { * Saves the time of the in-game world when the entity was last restocked. */ public void saveRestockTime() { - dataContainer.set(Keyring.VillagerOptimizer.LAST_RESTOCK.getKey(), PersistentDataType.LONG, villager.getWorld().getFullTime()); + dataContainer.set(Keyring.VillagerOptimizer.LAST_RESTOCK.getKey(), PersistentDataType.LONG, System.currentTimeMillis()); } /** @@ -247,7 +247,7 @@ public final class WrappedVillager { public long getRestockCooldownMillis(final long cooldown_millis) { if (dataContainer.has(Keyring.VillagerOptimizer.LAST_RESTOCK.getKey(), PersistentDataType.LONG)) - return villager.getWorld().getFullTime() - (dataContainer.get(Keyring.VillagerOptimizer.LAST_RESTOCK.getKey(), PersistentDataType.LONG) + cooldown_millis); + return System.currentTimeMillis() - (dataContainer.get(Keyring.VillagerOptimizer.LAST_RESTOCK.getKey(), PersistentDataType.LONG) + cooldown_millis); return cooldown_millis; } @@ -269,7 +269,7 @@ public final class WrappedVillager { * @return Whether the villager can be leveled up or not with the checked milliseconds */ public boolean canLevelUp(final long cooldown_millis) { - if (villager.getWorld().getFullTime() < getLastLevelUpTime() + cooldown_millis) { + if (System.currentTimeMillis() < getLastLevelUpTime() + cooldown_millis) { return false; } @@ -285,7 +285,7 @@ public final class WrappedVillager { * Saves the time of the in-game world when the entity was last leveled up. */ public void saveLastLevelUp() { - dataContainer.set(Keyring.VillagerOptimizer.LAST_LEVELUP.getKey(), PersistentDataType.LONG, villager.getWorld().getFullTime()); + dataContainer.set(Keyring.VillagerOptimizer.LAST_LEVELUP.getKey(), PersistentDataType.LONG, System.currentTimeMillis()); } /** @@ -302,7 +302,7 @@ public final class WrappedVillager { public long getLevelCooldownMillis(final long cooldown_millis) { if (dataContainer.has(Keyring.VillagerOptimizer.LAST_LEVELUP.getKey(), PersistentDataType.LONG)) - return villager.getWorld().getFullTime() - (dataContainer.get(Keyring.VillagerOptimizer.LAST_LEVELUP.getKey(), PersistentDataType.LONG) + cooldown_millis); + return System.currentTimeMillis() - (dataContainer.get(Keyring.VillagerOptimizer.LAST_LEVELUP.getKey(), PersistentDataType.LONG) + cooldown_millis); return cooldown_millis; } diff --git a/src/main/java/me/xginko/villageroptimizer/modules/gameplay/RestockOptimizedTrades.java b/src/main/java/me/xginko/villageroptimizer/modules/gameplay/RestockOptimizedTrades.java index 979e25d..616b953 100644 --- a/src/main/java/me/xginko/villageroptimizer/modules/gameplay/RestockOptimizedTrades.java +++ b/src/main/java/me/xginko/villageroptimizer/modules/gameplay/RestockOptimizedTrades.java @@ -1,10 +1,10 @@ package me.xginko.villageroptimizer.modules.gameplay; -import me.xginko.villageroptimizer.VillagerOptimizer; import me.xginko.villageroptimizer.VillagerCache; +import me.xginko.villageroptimizer.VillagerOptimizer; +import me.xginko.villageroptimizer.WrappedVillager; import me.xginko.villageroptimizer.config.Config; import me.xginko.villageroptimizer.enums.permissions.Bypass; -import me.xginko.villageroptimizer.WrappedVillager; import me.xginko.villageroptimizer.modules.VillagerOptimizerModule; import me.xginko.villageroptimizer.utils.CommonUtil; import net.kyori.adventure.text.Component; @@ -57,7 +57,7 @@ public class RestockOptimizedTrades implements VillagerOptimizerModule, Listener return true; } - @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) private void onInteract(PlayerInteractEntityEvent event) { if (!event.getRightClicked().getType().equals(EntityType.VILLAGER)) return; diff --git a/src/main/java/me/xginko/villageroptimizer/utils/CommonUtil.java b/src/main/java/me/xginko/villageroptimizer/utils/CommonUtil.java index 8f84542..4fa51a3 100644 --- a/src/main/java/me/xginko/villageroptimizer/utils/CommonUtil.java +++ b/src/main/java/me/xginko/villageroptimizer/utils/CommonUtil.java @@ -10,6 +10,8 @@ import java.time.Duration; public class CommonUtil { public static @NotNull String formatDuration(Duration duration) { + if (duration.isNegative()) duration = duration.negated(); + final int seconds = duration.toSecondsPart(); final int minutes = duration.toMinutesPart(); final int hours = duration.toHoursPart();