forked from LogBlock/LogBlock
Param for force replace not matching blocks
This commit is contained in:
@ -92,6 +92,7 @@ public class CommandsHandler implements CommandExecutor {
|
|||||||
sender.sendMessage(ChatColor.GOLD + "time [number] [minutes|hours|days] -- Limits time");
|
sender.sendMessage(ChatColor.GOLD + "time [number] [minutes|hours|days] -- Limits time");
|
||||||
sender.sendMessage(ChatColor.GOLD + "since <dd.MM.yyyy> <HH:mm:ss> -- Limits time to a fixed point");
|
sender.sendMessage(ChatColor.GOLD + "since <dd.MM.yyyy> <HH:mm:ss> -- Limits time to a fixed point");
|
||||||
sender.sendMessage(ChatColor.GOLD + "before <dd.MM.yyyy> <HH:mm:ss> -- Affects only blocks before a fixed time");
|
sender.sendMessage(ChatColor.GOLD + "before <dd.MM.yyyy> <HH:mm:ss> -- Affects only blocks before a fixed time");
|
||||||
|
sender.sendMessage(ChatColor.GOLD + "force -- Forces replacing not matching blocks");
|
||||||
sender.sendMessage(ChatColor.GOLD + "limit <row count> -- Limits the result to count of rows");
|
sender.sendMessage(ChatColor.GOLD + "limit <row count> -- Limits the result to count of rows");
|
||||||
sender.sendMessage(ChatColor.GOLD + "sum [none|blocks|players] -- Sums the result");
|
sender.sendMessage(ChatColor.GOLD + "sum [none|blocks|players] -- Sums the result");
|
||||||
sender.sendMessage(ChatColor.GOLD + "asc, desc -- Changes the order of the displayed log");
|
sender.sendMessage(ChatColor.GOLD + "asc, desc -- Changes the order of the displayed log");
|
||||||
@ -673,7 +674,7 @@ public class CommandsHandler implements CommandExecutor {
|
|||||||
sender.sendMessage(ChatColor.DARK_AQUA + "Searching " + params.getTitle() + ":");
|
sender.sendMessage(ChatColor.DARK_AQUA + "Searching " + params.getTitle() + ":");
|
||||||
}
|
}
|
||||||
rs = executeQuery(state, params.getQuery());
|
rs = executeQuery(state, params.getQuery());
|
||||||
final WorldEditor editor = new WorldEditor(logblock, params.world);
|
final WorldEditor editor = new WorldEditor(logblock, params.world, params.forceReplace);
|
||||||
|
|
||||||
while (rs.next()) {
|
while (rs.next()) {
|
||||||
ChestAccess chestaccess = null;
|
ChestAccess chestaccess = null;
|
||||||
@ -762,7 +763,7 @@ public class CommandsHandler implements CommandExecutor {
|
|||||||
if (!params.silent) {
|
if (!params.silent) {
|
||||||
sender.sendMessage(ChatColor.DARK_AQUA + "Searching " + params.getTitle() + ":");
|
sender.sendMessage(ChatColor.DARK_AQUA + "Searching " + params.getTitle() + ":");
|
||||||
}
|
}
|
||||||
final WorldEditor editor = new WorldEditor(logblock, params.world);
|
final WorldEditor editor = new WorldEditor(logblock, params.world, params.forceReplace);
|
||||||
while (rs.next()) {
|
while (rs.next()) {
|
||||||
ChestAccess chestaccess = null;
|
ChestAccess chestaccess = null;
|
||||||
ItemStack stack = Utils.loadItemStack(rs.getBytes("item"));
|
ItemStack stack = Utils.loadItemStack(rs.getBytes("item"));
|
||||||
|
@ -50,6 +50,7 @@ public final class QueryParams implements Cloneable {
|
|||||||
keywords.put("killer", 1);
|
keywords.put("killer", 1);
|
||||||
keywords.put("victim", 1);
|
keywords.put("victim", 1);
|
||||||
keywords.put("both", 0);
|
keywords.put("both", 0);
|
||||||
|
keywords.put("force", 0);
|
||||||
}
|
}
|
||||||
public BlockChangeType bct = BlockChangeType.BOTH;
|
public BlockChangeType bct = BlockChangeType.BOTH;
|
||||||
public int limit = -1, before = 0, since = 0, radius = -1;
|
public int limit = -1, before = 0, since = 0, radius = -1;
|
||||||
@ -59,6 +60,7 @@ public final class QueryParams implements Cloneable {
|
|||||||
public List<String> killers = new ArrayList<String>();
|
public List<String> killers = new ArrayList<String>();
|
||||||
public List<String> victims = new ArrayList<String>();
|
public List<String> victims = new ArrayList<String>();
|
||||||
public boolean excludePlayersMode = false, excludeKillersMode = false, excludeVictimsMode = false, excludeBlocksMode = false, prepareToolQuery = false, silent = false, noForcedLimit = false;
|
public boolean excludePlayersMode = false, excludeKillersMode = false, excludeVictimsMode = false, excludeBlocksMode = false, prepareToolQuery = false, silent = false, noForcedLimit = false;
|
||||||
|
public boolean forceReplace = false;
|
||||||
public CuboidRegion sel = null;
|
public CuboidRegion sel = null;
|
||||||
public SummarizationMode sum = SummarizationMode.NONE;
|
public SummarizationMode sum = SummarizationMode.NONE;
|
||||||
public List<Material> types = new ArrayList<Material>();
|
public List<Material> types = new ArrayList<Material>();
|
||||||
@ -802,6 +804,8 @@ public final class QueryParams implements Cloneable {
|
|||||||
needCoords = true;
|
needCoords = true;
|
||||||
} else if (param.equals("silent")) {
|
} else if (param.equals("silent")) {
|
||||||
silent = true;
|
silent = true;
|
||||||
|
} else if (param.equals("force")) {
|
||||||
|
forceReplace = true;
|
||||||
} else if (param.equals("search") || param.equals("match")) {
|
} else if (param.equals("search") || param.equals("match")) {
|
||||||
if (values.length == 0) {
|
if (values.length == 0) {
|
||||||
throw new IllegalArgumentException("No arguments for '" + param + "'");
|
throw new IllegalArgumentException("No arguments for '" + param + "'");
|
||||||
|
@ -50,10 +50,16 @@ public class WorldEditor implements Runnable {
|
|||||||
private int successes = 0, blacklistCollisions = 0;
|
private int successes = 0, blacklistCollisions = 0;
|
||||||
private long elapsedTime = 0;
|
private long elapsedTime = 0;
|
||||||
public LookupCacheElement[] errors;
|
public LookupCacheElement[] errors;
|
||||||
|
private boolean forceReplace;
|
||||||
|
|
||||||
public WorldEditor(LogBlock logblock, World world) {
|
public WorldEditor(LogBlock logblock, World world) {
|
||||||
|
this(logblock, world, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public WorldEditor(LogBlock logblock, World world, boolean forceReplace) {
|
||||||
this.logblock = logblock;
|
this.logblock = logblock;
|
||||||
this.world = world;
|
this.world = world;
|
||||||
|
this.forceReplace = forceReplace;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getSize() {
|
public int getSize() {
|
||||||
@ -170,13 +176,13 @@ public class WorldEditor implements Runnable {
|
|||||||
return PerformResult.BLACKLISTED;
|
return PerformResult.BLACKLISTED;
|
||||||
}
|
}
|
||||||
final Block block = loc.getBlock();
|
final Block block = loc.getBlock();
|
||||||
|
if (!world.isChunkLoaded(block.getChunk())) {
|
||||||
|
world.loadChunk(block.getChunk());
|
||||||
|
}
|
||||||
if (BukkitUtils.isEmpty(replacedBlock.getMaterial()) && BukkitUtils.isEmpty(block.getType())) {
|
if (BukkitUtils.isEmpty(replacedBlock.getMaterial()) && BukkitUtils.isEmpty(block.getType())) {
|
||||||
return PerformResult.NO_ACTION;
|
return PerformResult.NO_ACTION;
|
||||||
}
|
}
|
||||||
BlockState state = block.getState();
|
BlockState state = block.getState();
|
||||||
if (!world.isChunkLoaded(block.getChunk())) {
|
|
||||||
world.loadChunk(block.getChunk());
|
|
||||||
}
|
|
||||||
if (setBlock.equals(replacedBlock)) {
|
if (setBlock.equals(replacedBlock)) {
|
||||||
if (ca != null) {
|
if (ca != null) {
|
||||||
if (state instanceof InventoryHolder && state.getType() == replacedBlock.getMaterial()) {
|
if (state instanceof InventoryHolder && state.getType() == replacedBlock.getMaterial()) {
|
||||||
@ -194,7 +200,7 @@ public class WorldEditor implements Runnable {
|
|||||||
return PerformResult.NO_ACTION;
|
return PerformResult.NO_ACTION;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (block.getType() != setBlock.getMaterial() && !block.isEmpty() && !replaceAnyway.contains(block.getType())) {
|
if (!forceReplace && block.getType() != setBlock.getMaterial() && !block.isEmpty() && !replaceAnyway.contains(block.getType())) {
|
||||||
return PerformResult.NO_ACTION;
|
return PerformResult.NO_ACTION;
|
||||||
}
|
}
|
||||||
if (state instanceof InventoryHolder && replacedBlock.getMaterial() != block.getType()) {
|
if (state instanceof InventoryHolder && replacedBlock.getMaterial() != block.getType()) {
|
||||||
|
Reference in New Issue
Block a user