improve logging

This commit is contained in:
xGinko 2024-02-09 00:13:12 +01:00
parent ed285be593
commit 73eecd3f7f
8 changed files with 106 additions and 68 deletions

View File

@ -6,8 +6,9 @@ import me.xginko.villageroptimizer.VillagerCache;
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.utils.CommonUtil; import me.xginko.villageroptimizer.utils.CommonUtil;
import me.xginko.villageroptimizer.utils.LogUtil; import net.kyori.adventure.text.Component;
import org.bukkit.Chunk; import org.bukkit.Chunk;
import org.bukkit.Location;
import org.bukkit.Server; import org.bukkit.Server;
import org.bukkit.World; import org.bukkit.World;
import org.bukkit.entity.Entity; import org.bukkit.entity.Entity;
@ -20,9 +21,11 @@ import org.bukkit.event.Listener;
import org.bukkit.event.entity.CreatureSpawnEvent; import org.bukkit.event.entity.CreatureSpawnEvent;
import org.bukkit.event.player.PlayerInteractEntityEvent; import org.bukkit.event.player.PlayerInteractEntityEvent;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.slf4j.event.Level;
import java.util.*; import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Objects;
public class VillagerChunkLimit implements VillagerOptimizerModule, Listener { public class VillagerChunkLimit implements VillagerOptimizerModule, Listener {
@ -61,9 +64,9 @@ public class VillagerChunkLimit implements VillagerOptimizerModule, Listener {
try { try {
return Villager.Profession.valueOf(configuredProfession); return Villager.Profession.valueOf(configuredProfession);
} catch (IllegalArgumentException e) { } catch (IllegalArgumentException e) {
LogUtil.moduleLog(Level.WARN, "villager-chunk-limit.unoptimized", VillagerOptimizer.getLog().warn("(villager-chunk-limit.unoptimized) Villager profession '"+configuredProfession +
"Villager profession '"+configuredProfession+"' not recognized. " + "' not recognized. Make sure you're using the correct profession enums from " +
"Make sure you're using the correct profession enums from https://jd.papermc.io/paper/1.20/org/bukkit/entity/Villager.Profession.html."); "https://jd.papermc.io/paper/1.20/org/bukkit/entity/Villager.Profession.html.");
return null; return null;
} }
}).filter(Objects::nonNull).toList(); }).filter(Objects::nonNull).toList();
@ -76,9 +79,9 @@ public class VillagerChunkLimit implements VillagerOptimizerModule, Listener {
try { try {
return Villager.Profession.valueOf(configuredProfession); return Villager.Profession.valueOf(configuredProfession);
} catch (IllegalArgumentException e) { } catch (IllegalArgumentException e) {
LogUtil.moduleLog(Level.WARN, "villager-chunk-limit.optimized", VillagerOptimizer.getLog().warn("(villager-chunk-limit.optimized) Villager profession '"+configuredProfession +
"Villager profession '"+configuredProfession+"' not recognized. " + "' not recognized. Make sure you're using the correct profession enums from " +
"Make sure you're using the correct profession enums from https://jd.papermc.io/paper/1.20/org/bukkit/entity/Villager.Profession.html."); "https://jd.papermc.io/paper/1.20/org/bukkit/entity/Villager.Profession.html.");
return null; return null;
} }
}).filter(Objects::nonNull).toList(); }).filter(Objects::nonNull).toList();
@ -154,9 +157,13 @@ public class VillagerChunkLimit implements VillagerOptimizerModule, Listener {
Villager villager = not_optimized_villagers.get(i); Villager villager = not_optimized_villagers.get(i);
scheduler.runAtEntity(villager, kill -> { scheduler.runAtEntity(villager, kill -> {
villager.remove(); villager.remove();
if (log_enabled) LogUtil.moduleLog(Level.INFO, "villager-chunk-limit", if (log_enabled) {
"Removed unoptimized villager of profession type '" + villager.getProfession().name() final Location location = villager.getLocation();
+ "' at " + villager.getLocation()); VillagerOptimizer.getLog().info(Component.text(
"Removed unoptimized villager with profession '" + villager.getProfession().name() + "' at " +
"x=" + location.getX() + ", y=" + location.getY() + ", z=" + location.getZ() +
" in world " + location.getWorld().getName()).style(VillagerOptimizer.plugin_style));
}
}); });
} }
} }
@ -174,9 +181,14 @@ public class VillagerChunkLimit implements VillagerOptimizerModule, Listener {
Villager villager = optimized_villagers.get(i); Villager villager = optimized_villagers.get(i);
scheduler.runAtEntity(villager, kill -> { scheduler.runAtEntity(villager, kill -> {
villager.remove(); villager.remove();
if (log_enabled) LogUtil.moduleLog(Level.INFO, "villager-chunk-limit",
"Removed optimized villager of profession type '" + villager.getProfession().name() if (log_enabled) {
+ "' at " + villager.getLocation()); final Location location = villager.getLocation();
VillagerOptimizer.getLog().info(Component.text(
"Removed optimized villager with profession '" + villager.getProfession().name() + "' at " +
"x=" + location.getX() + ", y=" + location.getY() + ", z=" + location.getZ() +
" in world " + location.getWorld().getName()).style(VillagerOptimizer.plugin_style));
}
}); });
} }
} }

View File

@ -5,6 +5,8 @@ import me.xginko.villageroptimizer.VillagerCache;
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.modules.VillagerOptimizerModule; import me.xginko.villageroptimizer.modules.VillagerOptimizerModule;
import net.kyori.adventure.text.Component;
import org.bukkit.Location;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.entity.EntityType; import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -21,7 +23,7 @@ public class EnableLeashingVillagers implements VillagerOptimizerModule, Listene
private final ServerImplementation scheduler; private final ServerImplementation scheduler;
private final VillagerCache villagerCache; private final VillagerCache villagerCache;
private final boolean only_optimized; private final boolean only_optimized, log_enabled;
public EnableLeashingVillagers() { public EnableLeashingVillagers() {
shouldEnable(); shouldEnable();
@ -32,6 +34,7 @@ public class EnableLeashingVillagers implements VillagerOptimizerModule, Listene
Enable leashing of villagers, enabling players to easily move villagers to where they want them to be."""); Enable leashing of villagers, enabling players to easily move villagers to where they want them to be.""");
this.only_optimized = config.getBoolean("gameplay.villagers-can-be-leashed.only-optimized", false, this.only_optimized = config.getBoolean("gameplay.villagers-can-be-leashed.only-optimized", false,
"If set to true, only optimized villagers can be leashed."); "If set to true, only optimized villagers can be leashed.");
this.log_enabled = config.getBoolean("gameplay.villagers-can-be-leashed.log", false);
} }
@Override @Override
@ -64,8 +67,16 @@ public class EnableLeashingVillagers implements VillagerOptimizerModule, Listene
if (villager.isLeashed()) { if (villager.isLeashed()) {
// If leash holder clicked leashed villager, unleash. // If leash holder clicked leashed villager, unleash.
try { try {
if (villager.getLeashHolder().getUniqueId().equals(player.getUniqueId())) if (
villager.setLeashHolder(null); villager.getLeashHolder().getUniqueId().equals(player.getUniqueId())
&& villager.setLeashHolder(null)
&& log_enabled
) {
final Location location = villager.getLocation();
VillagerOptimizer.getLog().info(Component.text(player.getName() + " leashed a villager at " +
"x=" + location.getX() + ", y=" + location.getY() + ", z=" + location.getZ() +
" in world " + location.getWorld().getName()).style(VillagerOptimizer.plugin_style));
}
} catch (IllegalStateException ignored) {} // Shouldn't throw because we checked LivingEntity#isLeashed() } catch (IllegalStateException ignored) {} // Shouldn't throw because we checked LivingEntity#isLeashed()
// Otherwise do nothing. There should only ever be one leash holder // Otherwise do nothing. There should only ever be one leash holder
return; return;
@ -86,5 +97,12 @@ public class EnableLeashingVillagers implements VillagerOptimizerModule, Listene
// Legitimate to not use entities from the event object since they are final in PlayerLeashEntityEvent // Legitimate to not use entities from the event object since they are final in PlayerLeashEntityEvent
scheduler.runAtEntity(villager, leash -> villager.setLeashHolder(player)); scheduler.runAtEntity(villager, leash -> villager.setLeashHolder(player));
if (log_enabled) {
final Location location = villager.getLocation();
VillagerOptimizer.getLog().info(Component.text(player.getName() + " leashed a villager at " +
"x=" + location.getX() + ", y=" + location.getY() + ", z=" + location.getZ() +
" in world " + location.getWorld().getName()).style(VillagerOptimizer.plugin_style));
}
} }
} }

View File

@ -5,7 +5,6 @@ import me.xginko.villageroptimizer.VillagerCache;
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.modules.VillagerOptimizerModule; import me.xginko.villageroptimizer.modules.VillagerOptimizerModule;
import me.xginko.villageroptimizer.utils.LogUtil;
import org.bukkit.entity.EntityType; import org.bukkit.entity.EntityType;
import org.bukkit.entity.Villager; import org.bukkit.entity.Villager;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
@ -43,7 +42,9 @@ public class PreventOptimizedDamage implements VillagerOptimizerModule, Listener
try { try {
return EntityDamageEvent.DamageCause.valueOf(configuredDamageCause); return EntityDamageEvent.DamageCause.valueOf(configuredDamageCause);
} catch (IllegalArgumentException e) { } catch (IllegalArgumentException e) {
LogUtil.damageCauseNotRecognized("prevent-damage-to-optimized", configuredDamageCause); VillagerOptimizer.getLog().warn("(prevent-damage-to-optimized) DamageCause '"+configuredDamageCause +
"' not recognized. Please use correct DamageCause enums from: " +
"https://jd.papermc.io/paper/1.20/org/bukkit/event/entity/EntityDamageEvent.DamageCause.html");
return null; return null;
} }
}).filter(Objects::nonNull).collect(Collectors.toCollection(HashSet::new)); }).filter(Objects::nonNull).collect(Collectors.toCollection(HashSet::new));

View File

@ -7,7 +7,9 @@ import me.xginko.villageroptimizer.enums.permissions.Bypass;
import me.xginko.villageroptimizer.WrappedVillager; import me.xginko.villageroptimizer.WrappedVillager;
import me.xginko.villageroptimizer.modules.VillagerOptimizerModule; import me.xginko.villageroptimizer.modules.VillagerOptimizerModule;
import me.xginko.villageroptimizer.utils.CommonUtil; import me.xginko.villageroptimizer.utils.CommonUtil;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.TextReplacementConfig; import net.kyori.adventure.text.TextReplacementConfig;
import org.bukkit.Location;
import org.bukkit.entity.EntityType; 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;
@ -73,8 +75,12 @@ public class RestockOptimizedTrades implements VillagerOptimizerModule, Listener
.build(); .build();
VillagerOptimizer.getLang(player.locale()).trades_restocked.forEach(line -> player.sendMessage(line.replaceText(timeLeft))); VillagerOptimizer.getLang(player.locale()).trades_restocked.forEach(line -> player.sendMessage(line.replaceText(timeLeft)));
} }
if (log_enabled) if (log_enabled) {
VillagerOptimizer.getLog().info("Restocked optimized villager at "+ wVillager.villager().getLocation()); final Location location = wVillager.villager().getLocation();
VillagerOptimizer.getLog().info(Component.text("Restocked optimized villager at " +
"x=" + location.getX() + ", y=" + location.getY() + ", z=" + location.getZ() +
" in world " + location.getWorld().getName()).style(VillagerOptimizer.plugin_style));
}
} }
} }
} }

View File

@ -11,7 +11,7 @@ import me.xginko.villageroptimizer.events.VillagerOptimizeEvent;
import me.xginko.villageroptimizer.events.VillagerUnoptimizeEvent; import me.xginko.villageroptimizer.events.VillagerUnoptimizeEvent;
import me.xginko.villageroptimizer.modules.VillagerOptimizerModule; import me.xginko.villageroptimizer.modules.VillagerOptimizerModule;
import me.xginko.villageroptimizer.utils.CommonUtil; import me.xginko.villageroptimizer.utils.CommonUtil;
import me.xginko.villageroptimizer.utils.LogUtil; import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.TextReplacementConfig; import net.kyori.adventure.text.TextReplacementConfig;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.Material; import org.bukkit.Material;
@ -56,7 +56,9 @@ public class OptimizeByBlock implements VillagerOptimizerModule, Listener {
try { try {
return Material.valueOf(configuredMaterial); return Material.valueOf(configuredMaterial);
} catch (IllegalArgumentException e) { } catch (IllegalArgumentException e) {
LogUtil.materialNotRecognized("block-optimization", configuredMaterial); VillagerOptimizer.getLog().warn("(block-optimization) Material '"+configuredMaterial +
"' not recognized. Please use correct Material enums from: " +
"https://jd.papermc.io/paper/1.20/org/bukkit/Material.html");
return null; return null;
} }
}).filter(Objects::nonNull).collect(Collectors.toCollection(HashSet::new)); }).filter(Objects::nonNull).collect(Collectors.toCollection(HashSet::new));
@ -140,8 +142,12 @@ public class OptimizeByBlock implements VillagerOptimizerModule, Listener {
.replaceText(placedMaterial) .replaceText(placedMaterial)
)); ));
} }
if (log_enabled) if (log_enabled) {
VillagerOptimizer.getLog().info("Villager was optimized by block at "+closestOptimizableVillager.villager().getLocation()); final Location location = closestOptimizableVillager.villager().getLocation();
VillagerOptimizer.getLog().info(Component.text(player.getName() + " optimized villager by block at " +
"x=" + location.getX() + ", y=" + location.getY() + ", z=" + location.getZ() +
" in world " + location.getWorld().getName()).style(VillagerOptimizer.plugin_style));
}
} else { } else {
CommonUtil.shakeHead(closestOptimizableVillager.villager()); CommonUtil.shakeHead(closestOptimizableVillager.villager());
if (notify_player) { if (notify_player) {
@ -200,7 +206,11 @@ public class OptimizeByBlock implements VillagerOptimizerModule, Listener {
.replaceText(brokenMaterial) .replaceText(brokenMaterial)
)); ));
} }
if (log_enabled) if (log_enabled) {
VillagerOptimizer.getLog().info("Villager unoptimized because nearby optimization block broken at: "+closestOptimizedVillager.villager().getLocation()); final Location location = closestOptimizedVillager.villager().getLocation();
VillagerOptimizer.getLog().info(Component.text(player.getName() + " unoptimized villager by block at " +
"x=" + location.getX() + ", y=" + location.getY() + ", z=" + location.getZ() +
" in world " + location.getWorld().getName()).style(VillagerOptimizer.plugin_style));
}
} }
} }

View File

@ -14,6 +14,7 @@ import me.xginko.villageroptimizer.utils.CommonUtil;
import net.kyori.adventure.text.Component; import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.TextReplacementConfig; import net.kyori.adventure.text.TextReplacementConfig;
import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer; import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer;
import org.bukkit.Location;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.entity.EntityType; import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -107,8 +108,13 @@ public class OptimizeByNametag implements VillagerOptimizerModule, Listener {
if (notify_player) if (notify_player)
VillagerOptimizer.getLang(player.locale()).nametag_optimize_success.forEach(player::sendMessage); VillagerOptimizer.getLang(player.locale()).nametag_optimize_success.forEach(player::sendMessage);
if (log_enabled) if (log_enabled) {
VillagerOptimizer.getLog().info(player.getName() + " optimized a villager using nametag: '" + name + "'"); final Location location = wVillager.villager().getLocation();
VillagerOptimizer.getLog().info(Component.text(player.getName() +
" optimized villager by nametag '" + name + "' at " +
"x=" + location.getX() + ", y=" + location.getY() + ", z=" + location.getZ() +
" in world " + location.getWorld().getName()).style(VillagerOptimizer.plugin_style));
}
} else { } else {
event.setCancelled(true); event.setCancelled(true);
CommonUtil.shakeHead(villager); CommonUtil.shakeHead(villager);
@ -129,8 +135,13 @@ public class OptimizeByNametag implements VillagerOptimizerModule, Listener {
if (notify_player) if (notify_player)
VillagerOptimizer.getLang(player.locale()).nametag_unoptimize_success.forEach(player::sendMessage); VillagerOptimizer.getLang(player.locale()).nametag_unoptimize_success.forEach(player::sendMessage);
if (log_enabled) if (log_enabled) {
VillagerOptimizer.getLog().info(event.getPlayer().getName() + " disabled optimizations for a villager using nametag: '" + name + "'"); final Location location = wVillager.villager().getLocation();
VillagerOptimizer.getLog().info(Component.text(player.getName() +
" unoptimized villager by nametag '" + name + "' at " +
"x=" + location.getX() + ", y=" + location.getY() + ", z=" + location.getZ() +
" in world " + location.getWorld().getName()).style(VillagerOptimizer.plugin_style));
}
} }
} }
} }

View File

@ -15,6 +15,7 @@ import me.xginko.villageroptimizer.events.VillagerOptimizeEvent;
import me.xginko.villageroptimizer.events.VillagerUnoptimizeEvent; import me.xginko.villageroptimizer.events.VillagerUnoptimizeEvent;
import me.xginko.villageroptimizer.modules.VillagerOptimizerModule; import me.xginko.villageroptimizer.modules.VillagerOptimizerModule;
import me.xginko.villageroptimizer.utils.CommonUtil; import me.xginko.villageroptimizer.utils.CommonUtil;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.TextReplacementConfig; import net.kyori.adventure.text.TextReplacementConfig;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.block.Block; import org.bukkit.block.Block;
@ -159,8 +160,13 @@ public class OptimizeByWorkstation implements VillagerOptimizerModule, Listener
)); ));
} }
if (log_enabled) VillagerOptimizer.getLog().info(player.getName() + " optimized a villager using workstation: '" + if (log_enabled) {
placed.getType().toString().toLowerCase() + "'"); final Location location = finalToOptimize.villager().getLocation();
VillagerOptimizer.getLog().info(Component.text(player.getName() +
" optimized villager by workstation (" + placed.getType().toString().toLowerCase() + ") at " +
"x=" + location.getX() + ", y=" + location.getY() + ", z=" + location.getZ() +
" in world " + location.getWorld().getName()).style(VillagerOptimizer.plugin_style));
}
}, toOptimize.canLooseProfession() ? resettable_delay_millis : delay_millis, TimeUnit.MILLISECONDS)); }, toOptimize.canLooseProfession() ? resettable_delay_millis : delay_millis, TimeUnit.MILLISECONDS));
} }
@ -216,7 +222,13 @@ public class OptimizeByWorkstation implements VillagerOptimizerModule, Listener
.replaceText(brokenWorkstation) .replaceText(brokenWorkstation)
)); ));
} }
if (log_enabled)
VillagerOptimizer.getLog().info(player.getName() + " unoptimized a villager by breaking workstation: '" + broken.getType().toString().toLowerCase() + "'"); if (log_enabled) {
final Location location = closestOptimizedVillager.villager().getLocation();
VillagerOptimizer.getLog().info(Component.text(player.getName() +
" unoptimized villager by workstation (" + broken.getType().toString().toLowerCase() + ") at " +
"x=" + location.getX() + ", y=" + location.getY() + ", z=" + location.getZ() +
" in world " + location.getWorld().getName()).style(VillagerOptimizer.plugin_style));
}
} }
} }

View File

@ -1,32 +0,0 @@
package me.xginko.villageroptimizer.utils;
import me.xginko.villageroptimizer.VillagerOptimizer;
import org.slf4j.event.Level;
public class LogUtil {
public static void moduleLog(Level logLevel, String path, String logMessage) {
switch (logLevel) { // This is the safest way to do it while staying version compatible
case ERROR -> VillagerOptimizer.getLog().error("(" + path + ") " + logMessage);
case WARN -> VillagerOptimizer.getLog().warn("(" + path + ") " + logMessage);
case INFO -> VillagerOptimizer.getLog().info("(" + path + ") " + logMessage);
case DEBUG -> VillagerOptimizer.getLog().debug("(" + path + ") " + logMessage);
case TRACE -> VillagerOptimizer.getLog().trace("(" + path + ") " + logMessage);
}
}
public static void materialNotRecognized(String path, String material) {
moduleLog(Level.WARN, path, "Material '" + material + "' not recognized. Please use correct Material enums from: " +
"https://jd.papermc.io/paper/1.20/org/bukkit/Material.html");
}
public static void damageCauseNotRecognized(String path, String cause) {
moduleLog(Level.WARN, path, "DamageCause '" + cause + "' not recognized. Please use correct DamageCause enums from: " +
"https://jd.papermc.io/paper/1.20/org/bukkit/event/entity/EntityDamageEvent.DamageCause.html");
}
public static void entityTypeNotRecognized(String path, String entityType) {
moduleLog(Level.WARN, path, "EntityType '" + entityType + "' not recognized. Please use correct Spigot EntityType enums for your Minecraft version!");
}
}