Jamestec Posted April 8, 2013 Posted April 8, 2013 Hello, I'm trying to make a plugin to delete the bugged Buildcraft pipe each time it appears on console. Current Code; import java.util.List; import java.util.logging.Filter; import java.util.logging.LogRecord; import java.util.logging.Logger; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.World; import org.bukkit.block.Block; import org.bukkit.plugin.java.JavaPlugin; public class LogFilter implements Filter { private String pipeBug = "Pipe failed to load from NBT at"; @Override public boolean isLoggable(LogRecord record) { String message = record.getMessage(); if(message != null) { if(message.contains(pipeBug)) { checkPipe(message); } } return true; } public void checkPipe(String message) { String[] hold = message.split(" "); String[] location = hold[(hold.length - 1)].split(","); List<World> worlds = Bukkit.getServer().getWorlds(); int count = 0; int countTotal = worlds.size(); while (count < countTotal) { Block block = new Location(worlds.get(count), Double.valueOf(location[0]), Double.valueOf(location[1]), Double.valueOf(location[2])).getBlock(); if(block.getTypeId() == 166) { block.breakNaturally(); count = countTotal; } } } } I've checked that block.breakNaturally() works on bugged Buildcraft pipes by setting up a command that does that on Player.getTargetBlock() and it does work. I've also checked that the bugged .getTypeID is 166. I've tried to check the messages that receives by doing a Broadcast or sending me a message, but it seems to break the whole thing (I also have code that denies "<Player> joined with: [" from being logged and I notice this doesn't work when I try to send any debug messages, whether it be "Bukkit.getServer().getLogger()" or "Logger.getLogger("Minecraft")". On my main Class I've added; Logger.getLogger("ForgeModLoader").setFilter(new LogFilter()); To filter the "<Player> joined with: [" I also do (in the same class as LogFilter, but I removed the code from above). I've also tried; Logger.getLogger("global").setFilter(new LogFilter()); Logger.getLogger("Patcher").setFilter(new LogFilter()); Logger.getLogger("").setFilter(new LogFilter()); Logger.getLogger("Client").setFilter(new LogFilter()); But they also don't seem to pick up Buildcraft log messages ("Pipe failed to load from NBT at"). I've done this on onEnable(); Enumeration<String> cc =LogManager.getLogManager().getLoggerNames(); while(cc.hasMoreElements()) { getLogger().info(Logger.getLogger(cc.nextElement()).getName()); } And got this list; Loader global sun.net.www.protocol.http.HttpURLConnection com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource com.sk89q.minecraft.util.commands.CommandsManager Client Minecraft com.sk89q.wepif.PermissionsResolverManager Votifier com.google.common.collect.CustomConcurrentHashMap com.mchange.v2.log.MLog com.sk89q.minecraft.util.commands.SimpleInjector com.enjin.officialplugin.EnjinMinecraftPlugin Minecraft.WorldEdit ForgeModLoader Patcher (Last one is "". If I filter "Minecraft", there is a infinite recursion.) So I think my question is, what logger do I have to set my Filter to, so I can Filter "Pipe failed to load from NBT at" messages? Or am I doing something wrong in my approach?
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now