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() {
|
public void run() {
|
||||||
try {
|
try {
|
||||||
final File dumpFolder = new File(logblock.getDataFolder(), "dumb");
|
final File dumpFolder = new File(logblock.getDataFolder(), "dumb");
|
||||||
|
final SimpleDateFormat formatter = new SimpleDateFormat("yyMMddHHmmss");
|
||||||
int deleted;
|
int deleted;
|
||||||
for (final String table : config.tables.values()) {
|
final String table = params.getTable();
|
||||||
rs = state.executeQuery("SELECT count(*) FROM `" + table + "` " + params.getWhere());
|
rs = state.executeQuery("SELECT count(*) FROM `" + table + "` " + params.getWhere());
|
||||||
rs.next();
|
rs.next();
|
||||||
if ((deleted = rs.getInt(1)) > 0) {
|
if ((deleted = rs.getInt(1)) > 0) {
|
||||||
if (config.askClearLogs && sender instanceof Player && questioner != null) {
|
if (config.askClearLogs && sender instanceof Player && questioner != null) {
|
||||||
sender.sendMessage(ChatColor.DARK_AQUA + "Searching " + params.getTitle() + ":");
|
sender.sendMessage(ChatColor.DARK_AQUA + "Searching " + params.getTitle() + ":");
|
||||||
sender.sendMessage(ChatColor.GREEN.toString() + deleted + " blocks found.");
|
sender.sendMessage(ChatColor.GREEN.toString() + deleted + " blocks found.");
|
||||||
if (!questioner.askQuestion((Player)sender, "Are you sure you want to continue?", "yes", "no").equals("yes")) {
|
if (!questioner.askQuestion((Player)sender, "Are you sure you want to continue?", "yes", "no").equals("yes")) {
|
||||||
sender.sendMessage(ChatColor.RED + "ClearLog aborted");
|
sender.sendMessage(ChatColor.RED + "ClearLog aborted");
|
||||||
return;
|
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) {
|
} catch (final SQLException ex) {
|
||||||
sender.sendMessage(ChatColor.RED + "SQL exception");
|
sender.sendMessage(ChatColor.RED + "SQL exception");
|
||||||
|
@@ -45,6 +45,7 @@ public class Config
|
|||||||
public final boolean askRollbacks;
|
public final boolean askRollbacks;
|
||||||
public final boolean askRedos;
|
public final boolean askRedos;
|
||||||
public final boolean askClearLogs;
|
public final boolean askClearLogs;
|
||||||
|
public final Set<Integer> hiddenPlayers;
|
||||||
|
|
||||||
public static enum LogKillsLevel {
|
public static enum LogKillsLevel {
|
||||||
PLAYERS, MONSTERS, ANIMALS
|
PLAYERS, MONSTERS, ANIMALS
|
||||||
@@ -117,6 +118,8 @@ public class Config
|
|||||||
config.setProperty("logging.logKills", false);
|
config.setProperty("logging.logKills", false);
|
||||||
if (!subkeys.contains("logKillsLevel"))
|
if (!subkeys.contains("logKillsLevel"))
|
||||||
config.setProperty("logging.logKillsLevel", "PLAYERS");
|
config.setProperty("logging.logKillsLevel", "PLAYERS");
|
||||||
|
if (!subkeys.contains("hiddenPlayers"))
|
||||||
|
config.setProperty("logging.hiddenPlayers", Arrays.asList(new String[]{"Nessie", "Bigfoot", "Chewbacca"}));
|
||||||
subkeys = config.getKeys("rollback");
|
subkeys = config.getKeys("rollback");
|
||||||
if (subkeys == null)
|
if (subkeys == null)
|
||||||
subkeys = new ArrayList<String>();
|
subkeys = new ArrayList<String>();
|
||||||
@@ -176,6 +179,9 @@ public class Config
|
|||||||
} catch (final IllegalArgumentException ex) {
|
} catch (final IllegalArgumentException ex) {
|
||||||
throw new Exception("lookup.toolblockID doesn't appear to be a valid log level. Allowed are 'PLAYERS', 'MONSTERS' and 'ANIMALS'");
|
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));
|
dontRollback = new HashSet<Integer>(config.getIntList("rollback.dontRollback", null));
|
||||||
replaceAnyway = new HashSet<Integer>(config.getIntList("rollback.replaceAnyway", null));
|
replaceAnyway = new HashSet<Integer>(config.getIntList("rollback.replaceAnyway", null));
|
||||||
try {
|
try {
|
||||||
|
@@ -6,6 +6,7 @@ import java.sql.SQLException;
|
|||||||
import java.sql.Statement;
|
import java.sql.Statement;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
|
import java.util.Set;
|
||||||
import java.util.TimerTask;
|
import java.util.TimerTask;
|
||||||
import java.util.concurrent.LinkedBlockingQueue;
|
import java.util.concurrent.LinkedBlockingQueue;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
@@ -25,7 +26,7 @@ public class Consumer extends TimerTask
|
|||||||
{
|
{
|
||||||
private final LinkedBlockingQueue<BlockRow> bqueue = new LinkedBlockingQueue<BlockRow>();
|
private final LinkedBlockingQueue<BlockRow> bqueue = new LinkedBlockingQueue<BlockRow>();
|
||||||
private final Config config;
|
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 LinkedBlockingQueue<KillRow> kqueue = new LinkedBlockingQueue<KillRow>();
|
||||||
private final HashMap<Integer, Integer> lastAttackedEntity = new HashMap<Integer, Integer>();
|
private final HashMap<Integer, Integer> lastAttackedEntity = new HashMap<Integer, Integer>();
|
||||||
private final HashMap<Integer, Long> lastAttackTime = new HashMap<Integer, Long>();
|
private final HashMap<Integer, Long> lastAttackTime = new HashMap<Integer, Long>();
|
||||||
@@ -37,6 +38,7 @@ public class Consumer extends TimerTask
|
|||||||
this.logblock = logblock;
|
this.logblock = logblock;
|
||||||
log = logblock.getServer().getLogger();
|
log = logblock.getServer().getLogger();
|
||||||
config = logblock.getConfig();
|
config = logblock.getConfig();
|
||||||
|
hiddenplayers = config.hiddenPlayers;
|
||||||
readPlayers();
|
readPlayers();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -14,8 +14,8 @@ import org.bukkit.event.block.SignChangeEvent;
|
|||||||
class LBBlockListener extends BlockListener
|
class LBBlockListener extends BlockListener
|
||||||
{
|
{
|
||||||
private final Consumer consumer;
|
private final Consumer consumer;
|
||||||
private final boolean logSignTexts;
|
|
||||||
private final boolean logChestAccess;
|
private final boolean logChestAccess;
|
||||||
|
private final boolean logSignTexts;
|
||||||
|
|
||||||
LBBlockListener(LogBlock logblock) {
|
LBBlockListener(LogBlock logblock) {
|
||||||
consumer = logblock.getConsumer();
|
consumer = logblock.getConsumer();
|
||||||
@@ -23,6 +23,25 @@ class LBBlockListener extends BlockListener
|
|||||||
logChestAccess = logblock.getConfig().logChestAccess;
|
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
|
@Override
|
||||||
public void onBlockFromTo(BlockFromToEvent event) {
|
public void onBlockFromTo(BlockFromToEvent event) {
|
||||||
if (!event.isCancelled()) {
|
if (!event.isCancelled()) {
|
||||||
@@ -55,16 +74,9 @@ class LBBlockListener extends BlockListener
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onBlockBreak(BlockBreakEvent event) {
|
public void onLeavesDecay(LeavesDecayEvent event) {
|
||||||
if (!event.isCancelled()) {
|
if (!event.isCancelled())
|
||||||
final int type = event.getBlock().getTypeId();
|
consumer.queueBlockBreak("LeavesDecay", event.getBlock().getState());
|
||||||
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
|
@Override
|
||||||
@@ -72,16 +84,4 @@ class LBBlockListener extends BlockListener
|
|||||||
if (!event.isCancelled())
|
if (!event.isCancelled())
|
||||||
consumer.queueSignPlace(event.getPlayer().getName(), event.getBlock().getLocation(), event.getBlock().getTypeId(), event.getBlock().getData(), event.getLines());
|
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
|
class LBEntityListener extends EntityListener
|
||||||
{
|
{
|
||||||
private final Consumer consumer;
|
private final Consumer consumer;
|
||||||
private final boolean logSignTexts;
|
|
||||||
private final boolean logChestAccess;
|
private final boolean logChestAccess;
|
||||||
private final boolean logCreeperExplosionsAsPlayer;
|
private final boolean logCreeperExplosionsAsPlayer;
|
||||||
private final Config.LogKillsLevel logKillsLevel;
|
private final Config.LogKillsLevel logKillsLevel;
|
||||||
|
private final boolean logSignTexts;
|
||||||
|
|
||||||
LBEntityListener(LogBlock logblock) {
|
LBEntityListener(LogBlock logblock) {
|
||||||
consumer = logblock.getConsumer();
|
consumer = logblock.getConsumer();
|
||||||
@@ -30,6 +30,21 @@ class LBEntityListener extends EntityListener
|
|||||||
logKillsLevel = logblock.getConfig().logKillsLevel;
|
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
|
@Override
|
||||||
public void onEntityExplode(EntityExplodeEvent event) {
|
public void onEntityExplode(EntityExplodeEvent event) {
|
||||||
if (!event.isCancelled()) {
|
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();
|
consumer = logblock.getConsumer();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onPlayerBucketFill(PlayerBucketFillEvent event) {
|
|
||||||
if (!event.isCancelled())
|
|
||||||
consumer.queueBlockBreak(event.getPlayer().getName(), event.getBlockClicked().getState());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onPlayerBucketEmpty(PlayerBucketEmptyEvent event) {
|
public void onPlayerBucketEmpty(PlayerBucketEmptyEvent event) {
|
||||||
if (event.getBucket() == Material.WATER_BUCKET)
|
if (event.getBucket() == Material.WATER_BUCKET)
|
||||||
@@ -26,4 +20,10 @@ class LBPlayerListener extends PlayerListener
|
|||||||
else if (event.getBucket() == Material.LAVA_BUCKET)
|
else if (event.getBucket() == Material.LAVA_BUCKET)
|
||||||
consumer.queueBlockPlace(event.getPlayer().getName(), event.getBlockClicked().getFace(event.getBlockFace()).getLocation(), 11, (byte)0);
|
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;
|
package de.diddiz.LogBlock;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.block.Action;
|
import org.bukkit.event.block.Action;
|
||||||
@@ -8,26 +9,29 @@ import org.bukkit.event.player.PlayerListener;
|
|||||||
|
|
||||||
class LBToolListener extends PlayerListener
|
class LBToolListener extends PlayerListener
|
||||||
{
|
{
|
||||||
private final LogBlock logblock;
|
|
||||||
private final Config config;
|
|
||||||
private final CommandsHandler handler;
|
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) {
|
LBToolListener(LogBlock logblock) {
|
||||||
this.logblock = logblock;
|
this.logblock = logblock;
|
||||||
config = logblock.getConfig();
|
|
||||||
handler = logblock.getCommandsHandler();
|
handler = logblock.getCommandsHandler();
|
||||||
|
toolID = logblock.getConfig().toolID;
|
||||||
|
toolblockID = logblock.getConfig().toolblockID;
|
||||||
|
tables = logblock.getConfig().tables;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onPlayerInteract(PlayerInteractEvent event) {
|
public void onPlayerInteract(PlayerInteractEvent event) {
|
||||||
if (!event.isCancelled()) {
|
if (!event.isCancelled()) {
|
||||||
final Player player = event.getPlayer();
|
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 (event.getAction() == Action.RIGHT_CLICK_BLOCK && event.getMaterial().getId() == toolID && logblock.hasPermission(player, "logblock.tool") && logblock.getSession(player.getName()).toolEnabled) {
|
||||||
if (config.tables.get(player.getWorld().getName().hashCode()) != null) {
|
if (tables.get(player.getWorld().getName().hashCode()) != null) {
|
||||||
try {
|
try {
|
||||||
final QueryParams params = logblock.getSession(player.getName()).toolQuery;
|
final QueryParams params = logblock.getSession(player.getName()).toolQuery;
|
||||||
params.loc = event.getClickedBlock().getLocation();
|
params.setLocation(event.getClickedBlock().getLocation());
|
||||||
params.world = player.getWorld();
|
|
||||||
handler.new CommandLookup(player, params);
|
handler.new CommandLookup(player, params);
|
||||||
} catch (final Exception ex) {
|
} catch (final Exception ex) {
|
||||||
player.sendMessage(ChatColor.RED + ex.getMessage());
|
player.sendMessage(ChatColor.RED + ex.getMessage());
|
||||||
@@ -36,12 +40,11 @@ class LBToolListener extends PlayerListener
|
|||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
} else
|
} else
|
||||||
player.sendMessage("This world isn't logged");
|
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)
|
} else if (event.getAction() == Action.RIGHT_CLICK_BLOCK && event.getMaterial().getId() == toolblockID && logblock.hasPermission(player, "logblock.toolblock") && logblock.getSession(player.getName()).toolBlockEnabled)
|
||||||
if (config.tables.get(player.getWorld().getName().hashCode()) != null) {
|
if (tables.get(player.getWorld().getName().hashCode()) != null) {
|
||||||
try {
|
try {
|
||||||
final QueryParams params = logblock.getSession(player.getName()).toolQuery;
|
final QueryParams params = logblock.getSession(player.getName()).toolQuery;
|
||||||
params.loc = event.getClickedBlock().getFace(event.getBlockFace()).getLocation();
|
params.setLocation(event.getClickedBlock().getLocation());
|
||||||
params.world = player.getWorld();
|
|
||||||
handler.new CommandLookup(player, params);
|
handler.new CommandLookup(player, params);
|
||||||
} catch (final Exception ex) {
|
} catch (final Exception ex) {
|
||||||
player.sendMessage(ChatColor.RED + ex.getMessage());
|
player.sendMessage(ChatColor.RED + ex.getMessage());
|
||||||
|
@@ -13,6 +13,7 @@ import java.util.Map;
|
|||||||
import java.util.Timer;
|
import java.util.Timer;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
import org.bukkit.World;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.command.ConsoleCommandSender;
|
import org.bukkit.command.ConsoleCommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
@@ -110,11 +111,15 @@ public class LogBlock extends JavaPlugin
|
|||||||
final QueryParams params = new QueryParams(this);
|
final QueryParams params = new QueryParams(this);
|
||||||
params.minutes = config.keepLogDays * -1440;
|
params.minutes = config.keepLogDays * -1440;
|
||||||
params.bct = BlockChangeType.ALL;
|
params.bct = BlockChangeType.ALL;
|
||||||
try {
|
for (final World world : getServer().getWorlds())
|
||||||
commandsHandler.new CommandClearLog(new ConsoleCommandSender(getServer()), params);
|
if (config.tables.containsKey(world.getName().hashCode())) {
|
||||||
} catch (final Exception ex) {
|
params.world = world;
|
||||||
log.severe("Failed to schedule ClearLog: " + ex.getMessage());
|
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 LBBlockListener lbBlockListener = new LBBlockListener(this);
|
||||||
final LBPlayerListener lbPlayerListener = new LBPlayerListener(this);
|
final LBPlayerListener lbPlayerListener = new LBPlayerListener(this);
|
||||||
@@ -186,6 +191,7 @@ public class LogBlock extends JavaPlugin
|
|||||||
return false;
|
return false;
|
||||||
try {
|
try {
|
||||||
final DatabaseMetaData dbm = conn.getMetaData();
|
final DatabaseMetaData dbm = conn.getMetaData();
|
||||||
|
conn.setAutoCommit(true);
|
||||||
state = conn.createStatement();
|
state = conn.createStatement();
|
||||||
if (!dbm.getTables(null, null, "lb-players", null).next()) {
|
if (!dbm.getTables(null, null, "lb-players", null).next()) {
|
||||||
log.log(Level.INFO, "[LogBlock] Crating table lb-players.");
|
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())
|
if (!dbm.getTables(null, null, table + "-sign", null).next())
|
||||||
return false;
|
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()) {
|
if (!dbm.getTables(null, null, table + "-chest", null).next()) {
|
||||||
log.log(Level.INFO, "[LogBlock] Crating table " + table + "-chest.");
|
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))");
|
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();
|
session.lastQuery = clone();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setLocation(Location loc) {
|
||||||
|
this.loc = loc;
|
||||||
|
world = loc.getWorld();
|
||||||
|
}
|
||||||
|
|
||||||
public void setPlayer(String playerName) {
|
public void setPlayer(String playerName) {
|
||||||
players.clear();
|
players.clear();
|
||||||
players.add(playerName);
|
players.add(playerName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
protected QueryParams clone() {
|
protected QueryParams clone() {
|
||||||
try {
|
try {
|
||||||
return (QueryParams)super.clone();
|
return (QueryParams)super.clone();
|
||||||
|
@@ -4,11 +4,13 @@ import java.util.concurrent.LinkedBlockingQueue;
|
|||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
|
import org.bukkit.block.BlockFace;
|
||||||
import org.bukkit.block.BlockState;
|
import org.bukkit.block.BlockState;
|
||||||
import org.bukkit.block.ContainerBlock;
|
import org.bukkit.block.ContainerBlock;
|
||||||
import org.bukkit.block.Sign;
|
import org.bukkit.block.Sign;
|
||||||
import org.bukkit.inventory.Inventory;
|
import org.bukkit.inventory.Inventory;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
import org.bukkit.material.Bed;
|
||||||
import de.diddiz.util.BukkitUtils;
|
import de.diddiz.util.BukkitUtils;
|
||||||
|
|
||||||
public class WorldEditor implements Runnable
|
public class WorldEditor implements Runnable
|
||||||
@@ -163,6 +165,28 @@ public class WorldEditor implements Runnable
|
|||||||
sign.setLine(i, lines[i]);
|
sign.setLine(i, lines[i]);
|
||||||
if (!sign.update())
|
if (!sign.update())
|
||||||
return PerformResult.ERROR;
|
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;
|
return PerformResult.SUCCESS;
|
||||||
} catch (final Exception ex) {
|
} catch (final Exception ex) {
|
||||||
|
Reference in New Issue
Block a user