diff --git a/pom.xml b/pom.xml index ec3ec67..7844cdb 100644 --- a/pom.xml +++ b/pom.xml @@ -57,7 +57,7 @@ com.sk89q worldedit - 5.4.4-SNAPSHOT + 5.4.6-SNAPSHOT diff --git a/src/main/java/de/diddiz/LogBlock/LogBlock.java b/src/main/java/de/diddiz/LogBlock/LogBlock.java index dfce675..f294031 100644 --- a/src/main/java/de/diddiz/LogBlock/LogBlock.java +++ b/src/main/java/de/diddiz/LogBlock/LogBlock.java @@ -1,18 +1,17 @@ package de.diddiz.LogBlock; -import static de.diddiz.LogBlock.config.Config.askRollbackAfterBan; -import static de.diddiz.LogBlock.config.Config.autoClearLogDelay; -import static de.diddiz.LogBlock.config.Config.delayBetweenRuns; -import static de.diddiz.LogBlock.config.Config.enableAutoClearLog; -import static de.diddiz.LogBlock.config.Config.isLogging; -import static de.diddiz.LogBlock.config.Config.load; -import static de.diddiz.LogBlock.config.Config.logPlayerInfo; -import static de.diddiz.LogBlock.config.Config.password; -import static de.diddiz.LogBlock.config.Config.toolsByType; -import static de.diddiz.LogBlock.config.Config.url; -import static de.diddiz.LogBlock.config.Config.useBukkitScheduler; -import static de.diddiz.LogBlock.config.Config.user; -import static org.bukkit.Bukkit.getPluginManager; +import de.diddiz.LogBlock.config.Config; +import de.diddiz.LogBlock.listeners.*; +import de.diddiz.util.MySQLConnectionPool; +import de.diddiz.worldedit.LogBlockEditSessionFactory; +import org.bukkit.ChatColor; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.permissions.Permission; +import org.bukkit.plugin.PluginManager; +import org.bukkit.plugin.java.JavaPlugin; + import java.io.FileNotFoundException; import java.io.IOException; import java.sql.Connection; @@ -23,34 +22,9 @@ import java.util.ArrayList; import java.util.List; import java.util.Timer; import java.util.logging.Level; -import org.bukkit.ChatColor; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; -import org.bukkit.permissions.Permission; -import org.bukkit.plugin.PluginManager; -import org.bukkit.plugin.java.JavaPlugin; -import de.diddiz.LogBlock.config.Config; -import de.diddiz.LogBlock.listeners.BanListener; -import de.diddiz.LogBlock.listeners.BlockBreakLogging; -import de.diddiz.LogBlock.listeners.BlockBurnLogging; -import de.diddiz.LogBlock.listeners.BlockPlaceLogging; -import de.diddiz.LogBlock.listeners.ChatLogging; -import de.diddiz.LogBlock.listeners.ChestAccessLogging; -import de.diddiz.LogBlock.listeners.EndermenLogging; -import de.diddiz.LogBlock.listeners.ExplosionLogging; -import de.diddiz.LogBlock.listeners.FluidFlowLogging; -import de.diddiz.LogBlock.listeners.InteractLogging; -import de.diddiz.LogBlock.listeners.KillLogging; -import de.diddiz.LogBlock.listeners.LeavesDecayLogging; -import de.diddiz.LogBlock.listeners.PlayerInfoLogging; -import de.diddiz.LogBlock.listeners.SignChangeLogging; -import de.diddiz.LogBlock.listeners.SnowFadeLogging; -import de.diddiz.LogBlock.listeners.SnowFormLogging; -import de.diddiz.LogBlock.listeners.StructureGrowLogging; -import de.diddiz.LogBlock.listeners.ToolListener; -import de.diddiz.LogBlock.listeners.WitherLogging; -import de.diddiz.util.MySQLConnectionPool; + +import static de.diddiz.LogBlock.config.Config.*; +import static org.bukkit.Bukkit.getPluginManager; public class LogBlock extends JavaPlugin { @@ -118,6 +92,8 @@ public class LogBlock extends JavaPlugin new Exception("WorldEdit is not installed please download and install").printStackTrace(); pm.disablePlugin(this); return; + } else { + LogBlockEditSessionFactory.initialize(); } commandsHandler = new CommandsHandler(this); getCommand("lb").setExecutor(commandsHandler); diff --git a/src/main/java/de/diddiz/LogBlock/Logging.java b/src/main/java/de/diddiz/LogBlock/Logging.java index 122fb93..0c25411 100644 --- a/src/main/java/de/diddiz/LogBlock/Logging.java +++ b/src/main/java/de/diddiz/LogBlock/Logging.java @@ -7,7 +7,7 @@ public enum Logging LAVAFLOW, WATERFLOW, CHESTACCESS, KILL, CHAT, SNOWFORM, SNOWFADE, DOORINTERACT, SWITCHINTERACT, CAKEEAT, ENDERMEN, NOTEBLOCKINTERACT, DIODEINTERACT, NATURALSTRUCTUREGROW, WITHER(true), WITHER_SKULL(true), - BONEMEALSTRUCTUREGROW; + BONEMEALSTRUCTUREGROW, WORLDEDIT; public static final int length = Logging.values().length; private final boolean defaultEnabled; diff --git a/src/main/java/de/diddiz/LogBlock/config/Config.java b/src/main/java/de/diddiz/LogBlock/config/Config.java index 4523139..435369a 100644 --- a/src/main/java/de/diddiz/LogBlock/config/Config.java +++ b/src/main/java/de/diddiz/LogBlock/config/Config.java @@ -228,6 +228,11 @@ public class Config return wcfg != null && wcfg.isLogging(l); } + public static boolean isLogging(String worldName, Logging l) { + final WorldConfig wcfg = worldConfigs.get(worldName); + return wcfg != null && wcfg.isLogging(l); + } + public static boolean isLogged(World world) { return worldConfigs.containsKey(world.getName()); } diff --git a/src/main/java/de/diddiz/worldedit/LogBlockEditSession.java b/src/main/java/de/diddiz/worldedit/LogBlockEditSession.java index 631c955..7c0813e 100644 --- a/src/main/java/de/diddiz/worldedit/LogBlockEditSession.java +++ b/src/main/java/de/diddiz/worldedit/LogBlockEditSession.java @@ -1,31 +1,50 @@ package de.diddiz.worldedit; import com.sk89q.worldedit.EditSession; +import com.sk89q.worldedit.LocalPlayer; import com.sk89q.worldedit.LocalWorld; import com.sk89q.worldedit.Vector; import com.sk89q.worldedit.bags.BlockBag; import com.sk89q.worldedit.blocks.BaseBlock; +import com.sk89q.worldedit.bukkit.BukkitWorld; +import de.diddiz.LogBlock.LogBlock; +import de.diddiz.LogBlock.Logging; +import de.diddiz.LogBlock.config.Config; +import org.bukkit.Bukkit; +import org.bukkit.Location; -public class LogBlockEditSession extends EditSession{ +public class LogBlockEditSession extends EditSession { + + private LocalPlayer player; /** * {@inheritDoc} */ - public LogBlockEditSession(LocalWorld world, int maxBlocks) { + public LogBlockEditSession(LocalWorld world, int maxBlocks, LocalPlayer player) { super(world, maxBlocks); + this.player = player; } - + /** * {@inheritDoc} */ - public LogBlockEditSession(LocalWorld world, int maxBlocks, BlockBag blockBag) { + public LogBlockEditSession(LocalWorld world, int maxBlocks, BlockBag blockBag, LocalPlayer player) { super(world, maxBlocks, blockBag); + this.player = player; } - + @Override public boolean rawSetBlock(Vector pt, BaseBlock block) { - //TODO: perform logging actions here - return super.rawSetBlock(pt, block); + if (!(player.getWorld() instanceof BukkitWorld)) { + return super.rawSetBlock(pt, block); + } + int typeBefore = ((BukkitWorld) player.getWorld()).getWorld().getBlockTypeIdAt(pt.getBlockX(), pt.getBlockY(), pt.getBlockZ()); + boolean success = super.rawSetBlock(pt, block); + if (success && Config.isLogging(player.getWorld().getName(), Logging.WORLDEDIT)) { + Location location = new Location(Bukkit.getWorld(player.getWorld().getName()), pt.getBlockX(), pt.getBlockY(), pt.getBlockZ()); + LogBlock.getInstance().getConsumer().queueBlock(player.getName(), location, typeBefore, location.getBlock().getTypeId(), location.getBlock().getData()); + } + return success; } } diff --git a/src/main/java/de/diddiz/worldedit/LogBlockEditSessionFactory.java b/src/main/java/de/diddiz/worldedit/LogBlockEditSessionFactory.java index bcb60c0..900ea60 100644 --- a/src/main/java/de/diddiz/worldedit/LogBlockEditSessionFactory.java +++ b/src/main/java/de/diddiz/worldedit/LogBlockEditSessionFactory.java @@ -1,20 +1,28 @@ package de.diddiz.worldedit; -import com.sk89q.worldedit.EditSession; -import com.sk89q.worldedit.EditSessionFactory; -import com.sk89q.worldedit.LocalWorld; +import com.sk89q.worldedit.*; import com.sk89q.worldedit.bags.BlockBag; public class LogBlockEditSessionFactory extends EditSessionFactory { - + @Override - public EditSession getEditSession(LocalWorld world, int maxBlocks) { - return new LogBlockEditSession(world, maxBlocks); + public EditSession getEditSession(LocalWorld world, int maxBlocks, LocalPlayer player) { + return new LogBlockEditSession(world, maxBlocks, player); } - + @Override - public EditSession getEditSession(LocalWorld world, int maxBlocks, BlockBag blockBag) { - return new LogBlockEditSession(world, maxBlocks, blockBag); + public EditSession getEditSession(LocalWorld world, int maxBlocks, BlockBag blockBag, LocalPlayer player) { + return new LogBlockEditSession(world, maxBlocks, blockBag, player); + } + + public static void initialize() { + try { + // Check to see if the world edit version is compatible + Class.forName("com.sk89q.worldedit.EditSessionFactory").getDeclaredMethod("getEditSession", LocalWorld.class, int.class, BlockBag.class, LocalPlayer.class); + WorldEdit.getInstance().setEditSessionFactory(new LogBlockEditSessionFactory()); + } catch (Throwable t) { + + } } }