finish trade restocker and issues
This commit is contained in:
parent
2e68170b4f
commit
e089a416ea
@ -18,9 +18,7 @@ public class Config {
|
||||
|
||||
public final Locale default_lang;
|
||||
public final boolean auto_lang, enable_nametag_optimization, enable_workstation_optimization, enable_block_optimization;
|
||||
public final int state_change_cooldown;
|
||||
public final double workstation_max_distance;
|
||||
public final long cache_keep_time_seconds;
|
||||
public final long cache_keep_time_seconds, optimize_cooldown_millis;
|
||||
|
||||
public final HashSet<String> nametags = new HashSet<>(4);
|
||||
public final HashSet<Material> blocks_that_disable = new HashSet<>(4);
|
||||
@ -41,7 +39,7 @@ public class Config {
|
||||
/**
|
||||
* Optimization
|
||||
*/
|
||||
this.state_change_cooldown = getInt("optimization.state-change-cooldown-in-seconds", 600);
|
||||
this.optimize_cooldown_millis = getInt("optimization.state-change-cooldown-in-seconds", 600) * 1000L;
|
||||
// Nametags
|
||||
this.enable_nametag_optimization = getBoolean("optimization.methods.by-nametag.enable", true);
|
||||
this.nametags.addAll(getList("optimization.methods.by-nametag.names", List.of("Optimize", "DisableAI"), "Names are case insensitive")
|
||||
@ -51,8 +49,6 @@ public class Config {
|
||||
Optimize villagers that are standing near their acquired workstations /s
|
||||
Values here need to be valid bukkit Material enums for your server version.
|
||||
""");
|
||||
this.workstation_max_distance = getDouble("optimization.methods.by-workstation.disable-range-in-blocks", 4.0,
|
||||
"How close in blocks a villager needs to be to get optimized by its workstation");
|
||||
this.getList("optimization.methods.by-workstation.workstation-materials", List.of(
|
||||
"COMPOSTER", "SMOKER", "BARREL", "LOOM", "BLAST_FURNACE", "BREWING_STAND", "CAULDRON",
|
||||
"FLETCHING_TABLE", "CARTOGRAPHY_TABLE", "LECTERN", "SMITHING_TABLE", "STONECUTTER", "GRINDSTONE"
|
||||
|
@ -16,13 +16,15 @@ public class LanguageCache {
|
||||
public final Component no_permission;
|
||||
public final List<Component> nametag_optimize_success, nametag_on_optimize_cooldown, nametag_unoptimize_success,
|
||||
block_optimize_success, block_on_optimize_cooldown, block_unoptimize_success,
|
||||
workstation_optimize_success, workstation_on_optimize_cooldown, workstation_unoptimize_success;
|
||||
workstation_optimize_success, workstation_on_optimize_cooldown, workstation_unoptimize_success,
|
||||
trades_restocked;
|
||||
|
||||
public LanguageCache(String lang) throws Exception {
|
||||
this.lang = loadLang(new File(VillagerOptimizer.getInstance().getDataFolder() + File.separator + "lang", lang + ".yml"));
|
||||
this.miniMessage = MiniMessage.miniMessage();
|
||||
|
||||
this.no_permission = getTranslation("messages.no-permission", "<red>You don't have permission to use this command.");
|
||||
this.trades_restocked = getListTranslation("messages.restock-success", List.of("<green>All trades restocked!"));
|
||||
this.nametag_optimize_success = getListTranslation("messages.nametag.optimize-success", List.of("<green>Successfully optimized villager by using a nametag."));
|
||||
this.nametag_on_optimize_cooldown = getListTranslation("messages.nametag.optimize-on-cooldown", List.of("<gray>You need to wait %time% until you can optimize this villager again."));
|
||||
this.nametag_unoptimize_success = getListTranslation("messages.nametag.unoptimize-success", List.of("<green>Successfully unoptimized villager by using a nametag."));
|
||||
|
@ -6,9 +6,9 @@ import org.bukkit.NamespacedKey;
|
||||
public enum Keys {
|
||||
|
||||
OPTIMIZED(VillagerOptimizer.getKey("optimized")),
|
||||
COOLDOWN_OPTIMIZE(VillagerOptimizer.getKey("optimize-state-change-cooldown")),
|
||||
COOLDOWN_OPTIMIZE(VillagerOptimizer.getKey("optimize-cooldown")),
|
||||
COOLDOWN_EXPERIENCE(VillagerOptimizer.getKey("experience-cooldown")),
|
||||
WORLDTIME(VillagerOptimizer.getKey("world-time"));
|
||||
WORLDTIME(VillagerOptimizer.getKey("last-restock-time"));
|
||||
|
||||
private final NamespacedKey key;
|
||||
|
||||
|
@ -41,7 +41,7 @@ public final class WrappedVillager {
|
||||
if (isOnOptimizeCooldown()) return false;
|
||||
dataContainer.set(Keys.OPTIMIZED.key(), PersistentDataType.STRING, type.name());
|
||||
villager.setAware(false);
|
||||
setOptimizeCooldown(VillagerOptimizer.getConfiguration().state_change_cooldown);
|
||||
setOptimizeCooldown(VillagerOptimizer.getConfiguration().optimize_cooldown_millis);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
@ -62,10 +62,6 @@ public final class WrappedVillager {
|
||||
return dataContainer.has(Keys.COOLDOWN_OPTIMIZE.key(), PersistentDataType.LONG) && dataContainer.get(Keys.COOLDOWN_OPTIMIZE.key(), PersistentDataType.LONG) <= System.currentTimeMillis();
|
||||
}
|
||||
|
||||
public void restock() {
|
||||
villager.getRecipes().forEach(recipe -> recipe.setUses(0));
|
||||
}
|
||||
|
||||
public void setExpCooldown(long milliseconds) {
|
||||
dataContainer.set(Keys.COOLDOWN_EXPERIENCE.key(), PersistentDataType.LONG, System.currentTimeMillis() + milliseconds);
|
||||
}
|
||||
@ -74,13 +70,22 @@ public final class WrappedVillager {
|
||||
return dataContainer.has(Keys.COOLDOWN_EXPERIENCE.key(), PersistentDataType.LONG) && dataContainer.get(Keys.COOLDOWN_EXPERIENCE.key(), PersistentDataType.LONG) <= System.currentTimeMillis();
|
||||
}
|
||||
|
||||
public long saveWorldTime() {
|
||||
final long worldTime = villager.getWorld().getFullTime();
|
||||
dataContainer.set(Keys.WORLDTIME.key(), PersistentDataType.LONG, worldTime);
|
||||
return worldTime;
|
||||
public boolean canRestock(final long cooldown_millis) {
|
||||
final long lastRestock = getRestockTimestamp();
|
||||
if (lastRestock == 0L) return true;
|
||||
return lastRestock + cooldown_millis <= villager.getWorld().getFullTime();
|
||||
}
|
||||
|
||||
public long getSavedWorldTime() {
|
||||
return dataContainer.has(Keys.WORLDTIME.key(), PersistentDataType.LONG) ? dataContainer.get(Keys.WORLDTIME.key(), PersistentDataType.LONG) : saveWorldTime();
|
||||
public void restock() {
|
||||
villager.getRecipes().forEach(recipe -> recipe.setUses(0));
|
||||
saveRestockTimestamp();
|
||||
}
|
||||
|
||||
public void saveRestockTimestamp() {
|
||||
dataContainer.set(Keys.WORLDTIME.key(), PersistentDataType.LONG, villager.getWorld().getFullTime());
|
||||
}
|
||||
|
||||
public long getRestockTimestamp() {
|
||||
return dataContainer.has(Keys.WORLDTIME.key(), PersistentDataType.LONG) ? dataContainer.get(Keys.WORLDTIME.key(), PersistentDataType.LONG) : 0L;
|
||||
}
|
||||
}
|
||||
|
@ -1,10 +1,13 @@
|
||||
package me.xginko.villageroptimizer.modules;
|
||||
|
||||
import me.xginko.villageroptimizer.VillagerOptimizer;
|
||||
import me.xginko.villageroptimizer.config.Config;
|
||||
import me.xginko.villageroptimizer.cache.VillagerManager;
|
||||
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;
|
||||
import org.bukkit.event.EventPriority;
|
||||
@ -16,7 +19,7 @@ public class RestockTrades implements VillagerOptimizerModule, Listener {
|
||||
|
||||
private final VillagerManager villagerManager;
|
||||
private final long restock_delay;
|
||||
private final boolean shouldLog;
|
||||
private final boolean shouldLog, notifyPlayer;
|
||||
|
||||
protected RestockTrades() {
|
||||
this.villagerManager = VillagerOptimizer.getVillagerManager();
|
||||
@ -25,8 +28,10 @@ public class RestockTrades implements VillagerOptimizerModule, Listener {
|
||||
This is for automatic restocking of trades for optimized villagers. Optimized Villagers\s
|
||||
Don't have enough AI to do trade restocks themselves, so this needs to always be enabled.
|
||||
""");
|
||||
this.restock_delay = config.getInt("optimization.trade-restocking.delay-in-ticks", 1200);
|
||||
this.restock_delay = config.getInt("optimization.trade-restocking.delay-in-ticks", 1200) * 50L;
|
||||
this.shouldLog = config.getBoolean("optimization.trade-restocking.log", false);
|
||||
this.notifyPlayer = config.getBoolean("optimization.trade-restocking.notify-player", true,
|
||||
"Sends the player a message when the trades were restocked on a clicked villager.");
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -48,9 +53,19 @@ public class RestockTrades implements VillagerOptimizerModule, Listener {
|
||||
@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()) return;
|
||||
|
||||
|
||||
if (wVillager.isOptimized() && wVillager.canRestock(restock_delay)) {
|
||||
wVillager.restock();
|
||||
if (notifyPlayer) {
|
||||
Player player = event.getPlayer();
|
||||
VillagerOptimizer.getLang(player.locale()).trades_restocked.forEach(line -> player.sendMessage(line
|
||||
.replaceText(TextReplacementConfig.builder().matchLiteral("%time%").replacement(CommonUtils.formatTime(restock_delay)).build()))
|
||||
);
|
||||
}
|
||||
if (shouldLog)
|
||||
VillagerOptimizer.getLog().info("Restocked optimized villager at "+ wVillager.villager().getLocation());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -7,7 +7,7 @@ import java.util.logging.Level;
|
||||
public class LogUtils {
|
||||
|
||||
public static void moduleLog(Level logLevel, String path, String logMessage) {
|
||||
VillagerOptimizer.getLog().log(logLevel, "<" + path + "> " + logMessage);
|
||||
VillagerOptimizer.getLog().log(logLevel, "(" + path + ") " + logMessage);
|
||||
}
|
||||
|
||||
public static void materialNotRecognized(String path, String material) {
|
||||
|
@ -1,5 +1,7 @@
|
||||
messages:
|
||||
no-permission: "<red>You don't have permission to use this command."
|
||||
restock-success:
|
||||
- "<green>All trades restocked! Next restock in %time%"
|
||||
nametag:
|
||||
optimize-success:
|
||||
- "<green>Successfully optimized villager by using a nametag."
|
||||
|
Loading…
x
Reference in New Issue
Block a user