forked from LogBlock/LogBlock
Fixed clearlog, added hiddenPlayers and implemented 2 block
items rollback (doors nad beds)
This commit is contained in:
@@ -511,46 +511,46 @@ public class CommandsHandler implements CommandExecutor
|
||||
public void run() {
|
||||
try {
|
||||
final File dumpFolder = new File(logblock.getDataFolder(), "dumb");
|
||||
final SimpleDateFormat formatter = new SimpleDateFormat("yyMMddHHmmss");
|
||||
int deleted;
|
||||
for (final String table : config.tables.values()) {
|
||||
rs = state.executeQuery("SELECT count(*) FROM `" + table + "` " + params.getWhere());
|
||||
rs.next();
|
||||
if ((deleted = rs.getInt(1)) > 0) {
|
||||
if (config.askClearLogs && sender instanceof Player && questioner != null) {
|
||||
sender.sendMessage(ChatColor.DARK_AQUA + "Searching " + params.getTitle() + ":");
|
||||
sender.sendMessage(ChatColor.GREEN.toString() + deleted + " blocks found.");
|
||||
if (!questioner.askQuestion((Player)sender, "Are you sure you want to continue?", "yes", "no").equals("yes")) {
|
||||
sender.sendMessage(ChatColor.RED + "ClearLog aborted");
|
||||
return;
|
||||
}
|
||||
final String table = params.getTable();
|
||||
rs = state.executeQuery("SELECT count(*) FROM `" + table + "` " + params.getWhere());
|
||||
rs.next();
|
||||
if ((deleted = rs.getInt(1)) > 0) {
|
||||
if (config.askClearLogs && sender instanceof Player && questioner != null) {
|
||||
sender.sendMessage(ChatColor.DARK_AQUA + "Searching " + params.getTitle() + ":");
|
||||
sender.sendMessage(ChatColor.GREEN.toString() + deleted + " blocks found.");
|
||||
if (!questioner.askQuestion((Player)sender, "Are you sure you want to continue?", "yes", "no").equals("yes")) {
|
||||
sender.sendMessage(ChatColor.RED + "ClearLog aborted");
|
||||
return;
|
||||
}
|
||||
if (config.dumpDeletedLog)
|
||||
try {
|
||||
state.execute("SELECT * FROM `" + table + "` " + params.getWhere() + "INTO OUTFILE '" + new File(dumpFolder, table + " " + params.getTitle() + ".csv").getAbsolutePath().replace("\\", "\\\\") + "' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' LINES TERMINATED BY '\n'");
|
||||
} catch (final SQLException ex) {
|
||||
sender.sendMessage(ChatColor.RED + "Error while dumping log. Make sure your MySQL user has access to the LogBlock folder, or disable clearlog.dumpDeletedLog");
|
||||
log.log(Level.SEVERE, "[LogBlock ClearLog] Exception while dumping", ex);
|
||||
return;
|
||||
}
|
||||
state.execute("DELETE FROM `" + table + "` " + params.getWhere());
|
||||
sender.sendMessage(ChatColor.GREEN + "Cleared out table " + table + ". Deleted " + deleted + " entries.");
|
||||
}
|
||||
rs = state.executeQuery("SELECT COUNT(*) FROM `" + table + "-sign` LEFT JOIN `" + table + "` USING (id) WHERE `" + table + "`.id IS NULL");
|
||||
rs.next();
|
||||
if ((deleted = rs.getInt(1)) > 0) {
|
||||
if (config.dumpDeletedLog)
|
||||
state.execute("SELECT id, signtext FROM `" + table + "-sign` LEFT JOIN `" + table + "` USING (id) WHERE `" + table + "`.id IS NULL INTO OUTFILE '" + new File(dumpFolder, table + "-sign " + params.getTitle() + ".csv").getAbsolutePath().replace("\\", "\\\\") + "' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' LINES TERMINATED BY '\n'");
|
||||
state.execute("DELETE `" + table + "-sign` FROM `" + table + "-sign` LEFT JOIN `" + table + "` USING (id) WHERE `" + table + "`.id IS NULL;");
|
||||
sender.sendMessage(ChatColor.GREEN + "Cleared out table " + table + "-sign. Deleted " + deleted + " entries.");
|
||||
}
|
||||
rs = state.executeQuery("SELECT COUNT(*) FROM `" + table + "-chest` LEFT JOIN `" + table + "` USING (id) WHERE `" + table + "`.id IS NULL");
|
||||
rs.next();
|
||||
if ((deleted = rs.getInt(1)) > 0) {
|
||||
if (config.dumpDeletedLog)
|
||||
state.execute("SELECT id, itemtype, itemamount, itemdata, FROM `" + table + "-chest` LEFT JOIN `" + table + "` USING (id) WHERE `" + table + "`.id IS NULL INTO OUTFILE '" + new File(dumpFolder, table + "-chest " + params.getTitle() + ".csv").getAbsolutePath().replace("\\", "\\\\") + "' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' LINES TERMINATED BY '\n'");
|
||||
state.execute("DELETE `" + table + "-chest` FROM `" + table + "-chest` LEFT JOIN `" + table + "` USING (id) WHERE `" + table + "`.id IS NULL;");
|
||||
sender.sendMessage(ChatColor.GREEN + "Cleared out table " + table + "-chest. Deleted " + deleted + " entries.");
|
||||
}
|
||||
if (config.dumpDeletedLog)
|
||||
try {
|
||||
state.execute("SELECT * FROM `" + table + "` " + params.getWhere() + "INTO OUTFILE '" + new File(dumpFolder, formatter.format(System.currentTimeMillis()) + " " + table + " " + params.getTitle() + ".csv").getAbsolutePath().replace("\\", "\\\\") + "' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' LINES TERMINATED BY '\n'");
|
||||
} catch (final SQLException ex) {
|
||||
sender.sendMessage(ChatColor.RED + "Error while dumping log. Make sure your MySQL user has access to the LogBlock folder, or disable clearlog.dumpDeletedLog");
|
||||
log.log(Level.SEVERE, "[LogBlock ClearLog] Exception while dumping", ex);
|
||||
return;
|
||||
}
|
||||
state.execute("DELETE FROM `" + table + "` " + params.getWhere());
|
||||
sender.sendMessage(ChatColor.GREEN + "Cleared out table " + table + ". Deleted " + deleted + " entries.");
|
||||
}
|
||||
rs = state.executeQuery("SELECT COUNT(*) FROM `" + table + "-sign` LEFT JOIN `" + table + "` USING (id) WHERE `" + table + "`.id IS NULL");
|
||||
rs.next();
|
||||
if ((deleted = rs.getInt(1)) > 0) {
|
||||
if (config.dumpDeletedLog)
|
||||
state.execute("SELECT id, signtext FROM `" + table + "-sign` LEFT JOIN `" + table + "` USING (id) WHERE `" + table + "`.id IS NULL INTO OUTFILE '" + new File(dumpFolder, formatter.format(System.currentTimeMillis()) + " " + table + "-sign " + params.getTitle() + ".csv").getAbsolutePath().replace("\\", "\\\\") + "' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' LINES TERMINATED BY '\n'");
|
||||
state.execute("DELETE `" + table + "-sign` FROM `" + table + "-sign` LEFT JOIN `" + table + "` USING (id) WHERE `" + table + "`.id IS NULL;");
|
||||
sender.sendMessage(ChatColor.GREEN + "Cleared out table " + table + "-sign. Deleted " + deleted + " entries.");
|
||||
}
|
||||
rs = state.executeQuery("SELECT COUNT(*) FROM `" + table + "-chest` LEFT JOIN `" + table + "` USING (id) WHERE `" + table + "`.id IS NULL");
|
||||
rs.next();
|
||||
if ((deleted = rs.getInt(1)) > 0) {
|
||||
if (config.dumpDeletedLog)
|
||||
state.execute("SELECT id, itemtype, itemamount, itemdata FROM `" + table + "-chest` LEFT JOIN `" + table + "` USING (id) WHERE `" + table + "`.id IS NULL INTO OUTFILE '" + new File(dumpFolder, formatter.format(System.currentTimeMillis()) + " " + table + "-chest " + params.getTitle() + ".csv").getAbsolutePath().replace("\\", "\\\\") + "' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' LINES TERMINATED BY '\n'");
|
||||
state.execute("DELETE `" + table + "-chest` FROM `" + table + "-chest` LEFT JOIN `" + table + "` USING (id) WHERE `" + table + "`.id IS NULL;");
|
||||
sender.sendMessage(ChatColor.GREEN + "Cleared out table " + table + "-chest. Deleted " + deleted + " entries.");
|
||||
}
|
||||
} catch (final SQLException ex) {
|
||||
sender.sendMessage(ChatColor.RED + "SQL exception");
|
||||
|
@@ -45,6 +45,7 @@ public class Config
|
||||
public final boolean askRollbacks;
|
||||
public final boolean askRedos;
|
||||
public final boolean askClearLogs;
|
||||
public final Set<Integer> hiddenPlayers;
|
||||
|
||||
public static enum LogKillsLevel {
|
||||
PLAYERS, MONSTERS, ANIMALS
|
||||
@@ -117,6 +118,8 @@ public class Config
|
||||
config.setProperty("logging.logKills", false);
|
||||
if (!subkeys.contains("logKillsLevel"))
|
||||
config.setProperty("logging.logKillsLevel", "PLAYERS");
|
||||
if (!subkeys.contains("hiddenPlayers"))
|
||||
config.setProperty("logging.hiddenPlayers", Arrays.asList(new String[]{"Nessie", "Bigfoot", "Chewbacca"}));
|
||||
subkeys = config.getKeys("rollback");
|
||||
if (subkeys == null)
|
||||
subkeys = new ArrayList<String>();
|
||||
@@ -176,6 +179,9 @@ public class Config
|
||||
} catch (final IllegalArgumentException ex) {
|
||||
throw new Exception("lookup.toolblockID doesn't appear to be a valid log level. Allowed are 'PLAYERS', 'MONSTERS' and 'ANIMALS'");
|
||||
}
|
||||
hiddenPlayers = new HashSet<Integer>();
|
||||
for (final String playerName : config.getStringList("hiddenPlayers", new ArrayList<String>()))
|
||||
hiddenPlayers.add(playerName.hashCode());
|
||||
dontRollback = new HashSet<Integer>(config.getIntList("rollback.dontRollback", null));
|
||||
replaceAnyway = new HashSet<Integer>(config.getIntList("rollback.replaceAnyway", null));
|
||||
try {
|
||||
|
@@ -6,6 +6,7 @@ import java.sql.SQLException;
|
||||
import java.sql.Statement;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
import java.util.TimerTask;
|
||||
import java.util.concurrent.LinkedBlockingQueue;
|
||||
import java.util.logging.Level;
|
||||
@@ -25,7 +26,7 @@ public class Consumer extends TimerTask
|
||||
{
|
||||
private final LinkedBlockingQueue<BlockRow> bqueue = new LinkedBlockingQueue<BlockRow>();
|
||||
private final Config config;
|
||||
private final HashSet<Integer> hiddenplayers = new HashSet<Integer>();
|
||||
private final Set<Integer> hiddenplayers;
|
||||
private final LinkedBlockingQueue<KillRow> kqueue = new LinkedBlockingQueue<KillRow>();
|
||||
private final HashMap<Integer, Integer> lastAttackedEntity = new HashMap<Integer, Integer>();
|
||||
private final HashMap<Integer, Long> lastAttackTime = new HashMap<Integer, Long>();
|
||||
@@ -37,6 +38,7 @@ public class Consumer extends TimerTask
|
||||
this.logblock = logblock;
|
||||
log = logblock.getServer().getLogger();
|
||||
config = logblock.getConfig();
|
||||
hiddenplayers = config.hiddenPlayers;
|
||||
readPlayers();
|
||||
}
|
||||
|
||||
|
@@ -14,8 +14,8 @@ import org.bukkit.event.block.SignChangeEvent;
|
||||
class LBBlockListener extends BlockListener
|
||||
{
|
||||
private final Consumer consumer;
|
||||
private final boolean logSignTexts;
|
||||
private final boolean logChestAccess;
|
||||
private final boolean logSignTexts;
|
||||
|
||||
LBBlockListener(LogBlock logblock) {
|
||||
consumer = logblock.getConsumer();
|
||||
@@ -23,6 +23,25 @@ class LBBlockListener extends BlockListener
|
||||
logChestAccess = logblock.getConfig().logChestAccess;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBlockBreak(BlockBreakEvent event) {
|
||||
if (!event.isCancelled()) {
|
||||
final int type = event.getBlock().getTypeId();
|
||||
if (logSignTexts && (type == 63 || type == 68))
|
||||
consumer.queueSignBreak(event.getPlayer().getName(), (Sign)event.getBlock().getState());
|
||||
else if (logChestAccess && (type == 23 || type == 54 || type == 61))
|
||||
consumer.queueContainerBreak(event.getPlayer().getName(), event.getBlock().getState());
|
||||
else
|
||||
consumer.queueBlockBreak(event.getPlayer().getName(), event.getBlock().getState());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBlockBurn(BlockBurnEvent event) {
|
||||
if (!event.isCancelled())
|
||||
consumer.queueBlockBreak("Fire", event.getBlock().getState());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBlockFromTo(BlockFromToEvent event) {
|
||||
if (!event.isCancelled()) {
|
||||
@@ -55,16 +74,9 @@ class LBBlockListener extends BlockListener
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBlockBreak(BlockBreakEvent event) {
|
||||
if (!event.isCancelled()) {
|
||||
final int type = event.getBlock().getTypeId();
|
||||
if (logSignTexts && (type == 63 || type == 68))
|
||||
consumer.queueSignBreak(event.getPlayer().getName(), (Sign)event.getBlock().getState());
|
||||
else if (logChestAccess && (type == 23 || type == 54 || type == 61))
|
||||
consumer.queueContainerBreak(event.getPlayer().getName(), event.getBlock().getState());
|
||||
else
|
||||
consumer.queueBlockBreak(event.getPlayer().getName(), event.getBlock().getState());
|
||||
}
|
||||
public void onLeavesDecay(LeavesDecayEvent event) {
|
||||
if (!event.isCancelled())
|
||||
consumer.queueBlockBreak("LeavesDecay", event.getBlock().getState());
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -72,16 +84,4 @@ class LBBlockListener extends BlockListener
|
||||
if (!event.isCancelled())
|
||||
consumer.queueSignPlace(event.getPlayer().getName(), event.getBlock().getLocation(), event.getBlock().getTypeId(), event.getBlock().getData(), event.getLines());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBlockBurn(BlockBurnEvent event) {
|
||||
if (!event.isCancelled())
|
||||
consumer.queueBlockBreak("Fire", event.getBlock().getState());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLeavesDecay(LeavesDecayEvent event) {
|
||||
if (!event.isCancelled())
|
||||
consumer.queueBlockBreak("LeavesDecay", event.getBlock().getState());
|
||||
}
|
||||
}
|
||||
|
@@ -17,10 +17,10 @@ import org.bukkit.event.entity.EntityListener;
|
||||
class LBEntityListener extends EntityListener
|
||||
{
|
||||
private final Consumer consumer;
|
||||
private final boolean logSignTexts;
|
||||
private final boolean logChestAccess;
|
||||
private final boolean logCreeperExplosionsAsPlayer;
|
||||
private final Config.LogKillsLevel logKillsLevel;
|
||||
private final boolean logSignTexts;
|
||||
|
||||
LBEntityListener(LogBlock logblock) {
|
||||
consumer = logblock.getConsumer();
|
||||
@@ -30,6 +30,21 @@ class LBEntityListener extends EntityListener
|
||||
logKillsLevel = logblock.getConfig().logKillsLevel;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onEntityDamage(EntityDamageEvent event) {
|
||||
if (event.isCancelled() || !(event instanceof EntityDamageByEntityEvent) || !(event.getEntity() instanceof LivingEntity))
|
||||
return;
|
||||
final LivingEntity victim = (LivingEntity)event.getEntity();
|
||||
final Entity killer = ((EntityDamageByEntityEvent)event).getDamager();
|
||||
if (victim.getHealth() - event.getDamage() > 0 || victim.getHealth() <= 0)
|
||||
return;
|
||||
if (logKillsLevel == Config.LogKillsLevel.PLAYERS && !(victim instanceof Player && killer instanceof Player))
|
||||
return;
|
||||
else if (logKillsLevel == Config.LogKillsLevel.MONSTERS && !((victim instanceof Player || victim instanceof Monster) && killer instanceof Player || killer instanceof Monster))
|
||||
return;
|
||||
consumer.queueKill(killer, victim);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onEntityExplode(EntityExplodeEvent event) {
|
||||
if (!event.isCancelled()) {
|
||||
@@ -60,19 +75,4 @@ class LBEntityListener extends EntityListener
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onEntityDamage(EntityDamageEvent event) {
|
||||
if (event.isCancelled() || !(event instanceof EntityDamageByEntityEvent) || !(event.getEntity() instanceof LivingEntity))
|
||||
return;
|
||||
final LivingEntity victim = (LivingEntity)event.getEntity();
|
||||
final Entity killer = ((EntityDamageByEntityEvent)event).getDamager();
|
||||
if (victim.getHealth() - event.getDamage() > 0 || victim.getHealth() <= 0)
|
||||
return;
|
||||
if (logKillsLevel == Config.LogKillsLevel.PLAYERS && !(victim instanceof Player && killer instanceof Player))
|
||||
return;
|
||||
else if (logKillsLevel == Config.LogKillsLevel.MONSTERS && !((victim instanceof Player || victim instanceof Monster) && killer instanceof Player || killer instanceof Monster))
|
||||
return;
|
||||
consumer.queueKill(killer, victim);
|
||||
}
|
||||
}
|
||||
|
@@ -13,12 +13,6 @@ class LBPlayerListener extends PlayerListener
|
||||
consumer = logblock.getConsumer();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPlayerBucketFill(PlayerBucketFillEvent event) {
|
||||
if (!event.isCancelled())
|
||||
consumer.queueBlockBreak(event.getPlayer().getName(), event.getBlockClicked().getState());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPlayerBucketEmpty(PlayerBucketEmptyEvent event) {
|
||||
if (event.getBucket() == Material.WATER_BUCKET)
|
||||
@@ -26,4 +20,10 @@ class LBPlayerListener extends PlayerListener
|
||||
else if (event.getBucket() == Material.LAVA_BUCKET)
|
||||
consumer.queueBlockPlace(event.getPlayer().getName(), event.getBlockClicked().getFace(event.getBlockFace()).getLocation(), 11, (byte)0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPlayerBucketFill(PlayerBucketFillEvent event) {
|
||||
if (!event.isCancelled())
|
||||
consumer.queueBlockBreak(event.getPlayer().getName(), event.getBlockClicked().getState());
|
||||
}
|
||||
}
|
||||
|
@@ -1,5 +1,6 @@
|
||||
package de.diddiz.LogBlock;
|
||||
|
||||
import java.util.Map;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.block.Action;
|
||||
@@ -8,26 +9,29 @@ import org.bukkit.event.player.PlayerListener;
|
||||
|
||||
class LBToolListener extends PlayerListener
|
||||
{
|
||||
private final LogBlock logblock;
|
||||
private final Config config;
|
||||
private final CommandsHandler handler;
|
||||
private final LogBlock logblock;
|
||||
private final int toolID;
|
||||
private final int toolblockID;
|
||||
private final Map<Integer, String> tables;
|
||||
|
||||
LBToolListener(LogBlock logblock) {
|
||||
this.logblock = logblock;
|
||||
config = logblock.getConfig();
|
||||
handler = logblock.getCommandsHandler();
|
||||
toolID = logblock.getConfig().toolID;
|
||||
toolblockID = logblock.getConfig().toolblockID;
|
||||
tables = logblock.getConfig().tables;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPlayerInteract(PlayerInteractEvent event) {
|
||||
if (!event.isCancelled()) {
|
||||
final Player player = event.getPlayer();
|
||||
if (event.getAction() == Action.RIGHT_CLICK_BLOCK && event.getMaterial().getId() == config.toolID && logblock.hasPermission(player, "logblock.tool") && logblock.getSession(player.getName()).toolEnabled) {
|
||||
if (config.tables.get(player.getWorld().getName().hashCode()) != null) {
|
||||
if (event.getAction() == Action.RIGHT_CLICK_BLOCK && event.getMaterial().getId() == toolID && logblock.hasPermission(player, "logblock.tool") && logblock.getSession(player.getName()).toolEnabled) {
|
||||
if (tables.get(player.getWorld().getName().hashCode()) != null) {
|
||||
try {
|
||||
final QueryParams params = logblock.getSession(player.getName()).toolQuery;
|
||||
params.loc = event.getClickedBlock().getLocation();
|
||||
params.world = player.getWorld();
|
||||
params.setLocation(event.getClickedBlock().getLocation());
|
||||
handler.new CommandLookup(player, params);
|
||||
} catch (final Exception ex) {
|
||||
player.sendMessage(ChatColor.RED + ex.getMessage());
|
||||
@@ -36,12 +40,11 @@ class LBToolListener extends PlayerListener
|
||||
event.setCancelled(true);
|
||||
} else
|
||||
player.sendMessage("This world isn't logged");
|
||||
} else if (event.getAction() == Action.RIGHT_CLICK_BLOCK && event.getMaterial().getId() == config.toolblockID && logblock.hasPermission(player, "logblock.toolblock") && logblock.getSession(player.getName()).toolBlockEnabled)
|
||||
if (config.tables.get(player.getWorld().getName().hashCode()) != null) {
|
||||
} else if (event.getAction() == Action.RIGHT_CLICK_BLOCK && event.getMaterial().getId() == toolblockID && logblock.hasPermission(player, "logblock.toolblock") && logblock.getSession(player.getName()).toolBlockEnabled)
|
||||
if (tables.get(player.getWorld().getName().hashCode()) != null) {
|
||||
try {
|
||||
final QueryParams params = logblock.getSession(player.getName()).toolQuery;
|
||||
params.loc = event.getClickedBlock().getFace(event.getBlockFace()).getLocation();
|
||||
params.world = player.getWorld();
|
||||
params.setLocation(event.getClickedBlock().getLocation());
|
||||
handler.new CommandLookup(player, params);
|
||||
} catch (final Exception ex) {
|
||||
player.sendMessage(ChatColor.RED + ex.getMessage());
|
||||
|
@@ -13,6 +13,7 @@ import java.util.Map;
|
||||
import java.util.Timer;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.command.ConsoleCommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
@@ -110,11 +111,15 @@ public class LogBlock extends JavaPlugin
|
||||
final QueryParams params = new QueryParams(this);
|
||||
params.minutes = config.keepLogDays * -1440;
|
||||
params.bct = BlockChangeType.ALL;
|
||||
try {
|
||||
commandsHandler.new CommandClearLog(new ConsoleCommandSender(getServer()), params);
|
||||
} catch (final Exception ex) {
|
||||
log.severe("Failed to schedule ClearLog: " + ex.getMessage());
|
||||
}
|
||||
for (final World world : getServer().getWorlds())
|
||||
if (config.tables.containsKey(world.getName().hashCode())) {
|
||||
params.world = world;
|
||||
try {
|
||||
commandsHandler.new CommandClearLog(new ConsoleCommandSender(getServer()), params);
|
||||
} catch (final Exception ex) {
|
||||
log.severe("Failed to schedule ClearLog: " + ex.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
final LBBlockListener lbBlockListener = new LBBlockListener(this);
|
||||
final LBPlayerListener lbPlayerListener = new LBPlayerListener(this);
|
||||
@@ -186,6 +191,7 @@ public class LogBlock extends JavaPlugin
|
||||
return false;
|
||||
try {
|
||||
final DatabaseMetaData dbm = conn.getMetaData();
|
||||
conn.setAutoCommit(true);
|
||||
state = conn.createStatement();
|
||||
if (!dbm.getTables(null, null, "lb-players", null).next()) {
|
||||
log.log(Level.INFO, "[LogBlock] Crating table lb-players.");
|
||||
@@ -206,6 +212,8 @@ public class LogBlock extends JavaPlugin
|
||||
if (!dbm.getTables(null, null, table + "-sign", null).next())
|
||||
return false;
|
||||
}
|
||||
if (dbm.getTables(null, null, table + "-chest", null).next() && state.executeQuery("SELECT * FROM `" + table + "-chest` LIMIT 1").getMetaData().getColumnCount() != 4) // Chest table update
|
||||
state.execute("DROP TABLE `" + table + "-chest`");
|
||||
if (!dbm.getTables(null, null, table + "-chest", null).next()) {
|
||||
log.log(Level.INFO, "[LogBlock] Crating table " + table + "-chest.");
|
||||
state.execute("CREATE TABLE `" + table + "-chest` (id INT NOT NULL, itemtype SMALLINT UNSIGNED NOT NULL, itemamount SMALLINT NOT NULL, itemdata TINYINT UNSIGNED NOT NULL, PRIMARY KEY (id))");
|
||||
|
@@ -340,11 +340,17 @@ public class QueryParams implements Cloneable
|
||||
session.lastQuery = clone();
|
||||
}
|
||||
|
||||
public void setLocation(Location loc) {
|
||||
this.loc = loc;
|
||||
world = loc.getWorld();
|
||||
}
|
||||
|
||||
public void setPlayer(String playerName) {
|
||||
players.clear();
|
||||
players.add(playerName);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected QueryParams clone() {
|
||||
try {
|
||||
return (QueryParams)super.clone();
|
||||
|
@@ -4,11 +4,13 @@ import java.util.concurrent.LinkedBlockingQueue;
|
||||
import java.util.logging.Logger;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.block.BlockFace;
|
||||
import org.bukkit.block.BlockState;
|
||||
import org.bukkit.block.ContainerBlock;
|
||||
import org.bukkit.block.Sign;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.material.Bed;
|
||||
import de.diddiz.util.BukkitUtils;
|
||||
|
||||
public class WorldEditor implements Runnable
|
||||
@@ -163,6 +165,28 @@ public class WorldEditor implements Runnable
|
||||
sign.setLine(i, lines[i]);
|
||||
if (!sign.update())
|
||||
return PerformResult.ERROR;
|
||||
} else if (curtype == 26) {
|
||||
final Bed bed = (Bed)block.getState().getData();
|
||||
final Block secBlock;
|
||||
if (!bed.isHeadOfBed())
|
||||
secBlock = block.getFace(bed.getFacing());
|
||||
else
|
||||
secBlock = block.getFace(bed.getFacing().getOppositeFace());
|
||||
if (secBlock.getTypeId() != 0)
|
||||
return PerformResult.SUCCESS;
|
||||
if (!secBlock.setTypeIdAndData(26, (byte)(bed.getData() ^ 8), true))
|
||||
return PerformResult.ERROR;
|
||||
} else if (curtype == 64 || curtype == 71) {
|
||||
final Block secBlock;
|
||||
final byte blockData = block.getData();
|
||||
if ((blockData & 8) == 8)
|
||||
secBlock = block.getFace(BlockFace.DOWN);
|
||||
else
|
||||
secBlock = block.getFace(BlockFace.UP);
|
||||
if (secBlock.getTypeId() != 0)
|
||||
return PerformResult.SUCCESS;
|
||||
if (!secBlock.setTypeIdAndData(curtype, (byte)(blockData ^ 8), true))
|
||||
return PerformResult.ERROR;
|
||||
}
|
||||
return PerformResult.SUCCESS;
|
||||
} catch (final Exception ex) {
|
||||
|
Reference in New Issue
Block a user