a bit of progress
This commit is contained in:
parent
6fb7f96d8f
commit
f2850d11ab
@ -19,6 +19,7 @@ public class Config {
|
|||||||
public final Locale default_lang;
|
public final Locale default_lang;
|
||||||
public final boolean auto_lang, enable_nametag_optimization, enable_workstation_optimization, enable_block_optimization,
|
public final boolean auto_lang, enable_nametag_optimization, enable_workstation_optimization, enable_block_optimization,
|
||||||
cache_enabled;
|
cache_enabled;
|
||||||
|
public final int state_change_cooldown;
|
||||||
public final double workstation_max_distance;
|
public final double workstation_max_distance;
|
||||||
public final long cache_keep_time_seconds;
|
public final long cache_keep_time_seconds;
|
||||||
|
|
||||||
@ -45,6 +46,7 @@ public class Config {
|
|||||||
/**
|
/**
|
||||||
* Optimization
|
* Optimization
|
||||||
*/
|
*/
|
||||||
|
this.state_change_cooldown = getInt("optimization.state-change-cooldown-in-seconds", 600);
|
||||||
// Nametags
|
// Nametags
|
||||||
this.enable_nametag_optimization = getBoolean("optimization.methods.by-nametag.enable", true);
|
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")
|
this.nametags.addAll(getList("optimization.methods.by-nametag.names", List.of("Optimize", "DisableAI"), "Names are case insensitive")
|
||||||
|
@ -6,8 +6,7 @@ import org.bukkit.NamespacedKey;
|
|||||||
public enum Keys {
|
public enum Keys {
|
||||||
|
|
||||||
OPTIMIZED(VillagerOptimizer.getKey("optimized")),
|
OPTIMIZED(VillagerOptimizer.getKey("optimized")),
|
||||||
COOLDOWN_OPTIMIZE(VillagerOptimizer.getKey("optimization-toggle-cooldown")),
|
COOLDOWN_OPTIMIZE(VillagerOptimizer.getKey("optimize-state-change-cooldown")),
|
||||||
COOLDOWN_RESTOCK(VillagerOptimizer.getKey("restock-cooldown")),
|
|
||||||
COOLDOWN_EXPERIENCE(VillagerOptimizer.getKey("experience-cooldown")),
|
COOLDOWN_EXPERIENCE(VillagerOptimizer.getKey("experience-cooldown")),
|
||||||
WORLDTIME(VillagerOptimizer.getKey("world-time"));
|
WORLDTIME(VillagerOptimizer.getKey("world-time"));
|
||||||
|
|
||||||
|
@ -7,38 +7,55 @@ import org.bukkit.entity.Villager;
|
|||||||
import org.bukkit.persistence.PersistentDataContainer;
|
import org.bukkit.persistence.PersistentDataContainer;
|
||||||
import org.bukkit.persistence.PersistentDataType;
|
import org.bukkit.persistence.PersistentDataType;
|
||||||
|
|
||||||
public record WrappedVillager(Villager villager) {
|
public final class WrappedVillager {
|
||||||
|
|
||||||
|
private final Villager villager;
|
||||||
|
private final PersistentDataContainer villagerData;
|
||||||
|
|
||||||
|
public WrappedVillager(Villager villager) {
|
||||||
|
this.villager = villager;
|
||||||
|
this.villagerData = villager.getPersistentDataContainer();
|
||||||
|
}
|
||||||
|
|
||||||
|
public Villager villager() {
|
||||||
|
return villager;
|
||||||
|
}
|
||||||
|
|
||||||
public static WrappedVillager fromVillager(Villager villager) {
|
public static WrappedVillager fromVillager(Villager villager) {
|
||||||
return VillagerOptimizer.getVillagerCache().get(villager);
|
return VillagerOptimizer.getVillagerCache().get(villager);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isOptimized() {
|
public boolean isOptimized() {
|
||||||
return villager.getPersistentDataContainer().has(Keys.OPTIMIZED.key());
|
return villagerData.has(Keys.OPTIMIZED.key());
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setOptimization(OptimizationType type) {
|
public boolean setOptimization(OptimizationType type) {
|
||||||
|
if (isOnOptimizeCooldown()) return false;
|
||||||
|
|
||||||
if (type.equals(OptimizationType.OFF) && isOptimized()) {
|
if (type.equals(OptimizationType.OFF) && isOptimized()) {
|
||||||
villager.getPersistentDataContainer().remove(Keys.OPTIMIZED.key());
|
villagerData.remove(Keys.OPTIMIZED.key());
|
||||||
villager.setAware(true);
|
villager.setAware(true);
|
||||||
villager.setAI(true);
|
villager.setAI(true);
|
||||||
|
setOptimizeCooldown(VillagerOptimizer.getConfiguration().state_change_cooldown);
|
||||||
} else {
|
} else {
|
||||||
villager.getPersistentDataContainer().set(Keys.OPTIMIZED.key(), PersistentDataType.STRING, type.name());
|
villagerData.set(Keys.OPTIMIZED.key(), PersistentDataType.STRING, type.name());
|
||||||
villager.setAware(false);
|
villager.setAware(false);
|
||||||
|
setOptimizeCooldown(VillagerOptimizer.getConfiguration().state_change_cooldown);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public OptimizationType getOptimizationType() {
|
public OptimizationType getOptimizationType() {
|
||||||
return isOptimized() ? OptimizationType.valueOf(villager().getPersistentDataContainer().get(Keys.OPTIMIZED.key(), PersistentDataType.STRING)) : OptimizationType.OFF;
|
return isOptimized() ? OptimizationType.valueOf(villagerData.get(Keys.OPTIMIZED.key(), PersistentDataType.STRING)) : OptimizationType.OFF;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setRestockCooldown(long milliseconds) {
|
public void setOptimizeCooldown(long milliseconds) {
|
||||||
villager.getPersistentDataContainer().set(Keys.COOLDOWN_RESTOCK.key(), PersistentDataType.LONG, System.currentTimeMillis() + milliseconds);
|
villagerData.set(Keys.COOLDOWN_OPTIMIZE.key(), PersistentDataType.LONG, System.currentTimeMillis() + milliseconds);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean shouldRestock() {
|
public boolean isOnOptimizeCooldown() {
|
||||||
PersistentDataContainer villagerData = villager.getPersistentDataContainer();
|
return villagerData.has(Keys.COOLDOWN_OPTIMIZE.key(), PersistentDataType.LONG) && villagerData.get(Keys.COOLDOWN_OPTIMIZE.key(), PersistentDataType.LONG) <= System.currentTimeMillis();
|
||||||
return villagerData.has(Keys.COOLDOWN_RESTOCK.key(), PersistentDataType.LONG) && villagerData.get(Keys.COOLDOWN_RESTOCK.key(), PersistentDataType.LONG) <= System.currentTimeMillis();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void restock() {
|
public void restock() {
|
||||||
@ -46,20 +63,20 @@ public record WrappedVillager(Villager villager) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void setExpCooldown(long milliseconds) {
|
public void setExpCooldown(long milliseconds) {
|
||||||
villager.getPersistentDataContainer().set(Keys.COOLDOWN_EXPERIENCE.key(), PersistentDataType.LONG, System.currentTimeMillis() + milliseconds);
|
villagerData.set(Keys.COOLDOWN_EXPERIENCE.key(), PersistentDataType.LONG, System.currentTimeMillis() + milliseconds);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isOnExpCooldown() {
|
public boolean isOnExpCooldown() {
|
||||||
PersistentDataContainer villagerData = villager.getPersistentDataContainer();
|
|
||||||
return villagerData.has(Keys.COOLDOWN_EXPERIENCE.key(), PersistentDataType.LONG) && villagerData.get(Keys.COOLDOWN_EXPERIENCE.key(), PersistentDataType.LONG) <= System.currentTimeMillis();
|
return villagerData.has(Keys.COOLDOWN_EXPERIENCE.key(), PersistentDataType.LONG) && villagerData.get(Keys.COOLDOWN_EXPERIENCE.key(), PersistentDataType.LONG) <= System.currentTimeMillis();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void saveWorldTime() {
|
public long saveWorldTime() {
|
||||||
villager.getPersistentDataContainer().set(Keys.WORLDTIME.key(), PersistentDataType.LONG, villager.getWorld().getFullTime());
|
final long worldTime = villager.getWorld().getFullTime();
|
||||||
|
villagerData.set(Keys.WORLDTIME.key(), PersistentDataType.LONG, worldTime);
|
||||||
|
return worldTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
public long getSavedWorldTime() {
|
public long getSavedWorldTime() {
|
||||||
PersistentDataContainer villagerData = villager.getPersistentDataContainer();
|
return villagerData.has(Keys.WORLDTIME.key(), PersistentDataType.LONG) ? villagerData.get(Keys.WORLDTIME.key(), PersistentDataType.LONG) : saveWorldTime();
|
||||||
return villagerData.has(Keys.WORLDTIME.key(), PersistentDataType.LONG) ? villagerData.get(Keys.WORLDTIME.key(), PersistentDataType.LONG) : villager.getWorld().getFullTime();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,48 @@
|
|||||||
|
package me.xginko.villageroptimizer.modules;
|
||||||
|
|
||||||
|
import me.xginko.villageroptimizer.VillagerOptimizer;
|
||||||
|
import me.xginko.villageroptimizer.config.Config;
|
||||||
|
import me.xginko.villageroptimizer.models.WrappedVillager;
|
||||||
|
import org.bukkit.entity.EntityType;
|
||||||
|
import org.bukkit.entity.Villager;
|
||||||
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.bukkit.event.EventPriority;
|
||||||
|
import org.bukkit.event.HandlerList;
|
||||||
|
import org.bukkit.event.Listener;
|
||||||
|
import org.bukkit.event.player.PlayerInteractEntityEvent;
|
||||||
|
|
||||||
|
public class RestockOptimized implements VillagerOptimizerModule, Listener {
|
||||||
|
|
||||||
|
private final long restock_delay;
|
||||||
|
private final boolean shouldLog;
|
||||||
|
|
||||||
|
public RestockOptimized() {
|
||||||
|
Config config = VillagerOptimizer.getConfiguration();
|
||||||
|
this.restock_delay = config.getInt("")
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void enable() {
|
||||||
|
VillagerOptimizer plugin = VillagerOptimizer.getInstance();
|
||||||
|
plugin.getServer().getPluginManager().registerEvents(this, plugin);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void disable() {
|
||||||
|
HandlerList.unregisterAll(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean shouldEnable() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
|
||||||
|
private void onInteract(PlayerInteractEntityEvent event) {
|
||||||
|
if (!event.getRightClicked().getType().equals(EntityType.VILLAGER)) return;
|
||||||
|
WrappedVillager wrappedVillager = new WrappedVillager((Villager) event.getRightClicked());
|
||||||
|
if (!wrappedVillager.isOptimized()) return;
|
||||||
|
|
||||||
|
if (wrappedVillager.getSavedWorldTime() >)
|
||||||
|
}
|
||||||
|
}
|
@ -1,8 +1,10 @@
|
|||||||
package me.xginko.villageroptimizer.modules;
|
package me.xginko.villageroptimizer.modules;
|
||||||
|
|
||||||
|
import io.papermc.paper.event.entity.EntityMoveEvent;
|
||||||
import me.xginko.villageroptimizer.VillagerOptimizer;
|
import me.xginko.villageroptimizer.VillagerOptimizer;
|
||||||
import me.xginko.villageroptimizer.config.Config;
|
import me.xginko.villageroptimizer.config.Config;
|
||||||
import me.xginko.villageroptimizer.models.VillagerCache;
|
import me.xginko.villageroptimizer.models.VillagerCache;
|
||||||
|
import org.bukkit.entity.EntityType;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.EventPriority;
|
import org.bukkit.event.EventPriority;
|
||||||
import org.bukkit.event.HandlerList;
|
import org.bukkit.event.HandlerList;
|
||||||
@ -37,7 +39,9 @@ public class WorkstationOptimization implements VillagerOptimizerModule, Listene
|
|||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
|
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
|
||||||
private void onEvent() {
|
private void onEntityMove(EntityMoveEvent event) {
|
||||||
|
if (!event.getEntity().getType().equals(EntityType.VILLAGER)) return;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user