diff --git a/src/main/java/de/diddiz/LogBlock/CommandsHandler.java b/src/main/java/de/diddiz/LogBlock/CommandsHandler.java
index b152377..42e841a 100755
--- a/src/main/java/de/diddiz/LogBlock/CommandsHandler.java
+++ b/src/main/java/de/diddiz/LogBlock/CommandsHandler.java
@@ -92,6 +92,7 @@ public class CommandsHandler implements CommandExecutor {
sender.sendMessage(ChatColor.GOLD + "time [number] [minutes|hours|days] -- Limits time");
sender.sendMessage(ChatColor.GOLD + "since
-- Limits time to a fixed point");
sender.sendMessage(ChatColor.GOLD + "before -- Affects only blocks before a fixed time");
+ sender.sendMessage(ChatColor.GOLD + "force -- Forces replacing not matching blocks");
sender.sendMessage(ChatColor.GOLD + "limit -- Limits the result to count of rows");
sender.sendMessage(ChatColor.GOLD + "sum [none|blocks|players] -- Sums the result");
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() + ":");
}
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()) {
ChestAccess chestaccess = null;
@@ -762,7 +763,7 @@ public class CommandsHandler implements CommandExecutor {
if (!params.silent) {
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()) {
ChestAccess chestaccess = null;
ItemStack stack = Utils.loadItemStack(rs.getBytes("item"));
diff --git a/src/main/java/de/diddiz/LogBlock/QueryParams.java b/src/main/java/de/diddiz/LogBlock/QueryParams.java
index 0fd9a54..196f306 100644
--- a/src/main/java/de/diddiz/LogBlock/QueryParams.java
+++ b/src/main/java/de/diddiz/LogBlock/QueryParams.java
@@ -50,6 +50,7 @@ public final class QueryParams implements Cloneable {
keywords.put("killer", 1);
keywords.put("victim", 1);
keywords.put("both", 0);
+ keywords.put("force", 0);
}
public BlockChangeType bct = BlockChangeType.BOTH;
public int limit = -1, before = 0, since = 0, radius = -1;
@@ -59,6 +60,7 @@ public final class QueryParams implements Cloneable {
public List killers = new ArrayList();
public List victims = new ArrayList();
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 SummarizationMode sum = SummarizationMode.NONE;
public List types = new ArrayList();
@@ -802,6 +804,8 @@ public final class QueryParams implements Cloneable {
needCoords = true;
} else if (param.equals("silent")) {
silent = true;
+ } else if (param.equals("force")) {
+ forceReplace = true;
} else if (param.equals("search") || param.equals("match")) {
if (values.length == 0) {
throw new IllegalArgumentException("No arguments for '" + param + "'");
diff --git a/src/main/java/de/diddiz/LogBlock/WorldEditor.java b/src/main/java/de/diddiz/LogBlock/WorldEditor.java
index f590d9a..82fc603 100644
--- a/src/main/java/de/diddiz/LogBlock/WorldEditor.java
+++ b/src/main/java/de/diddiz/LogBlock/WorldEditor.java
@@ -50,10 +50,16 @@ public class WorldEditor implements Runnable {
private int successes = 0, blacklistCollisions = 0;
private long elapsedTime = 0;
public LookupCacheElement[] errors;
+ private boolean forceReplace;
public WorldEditor(LogBlock logblock, World world) {
+ this(logblock, world, false);
+ }
+
+ public WorldEditor(LogBlock logblock, World world, boolean forceReplace) {
this.logblock = logblock;
this.world = world;
+ this.forceReplace = forceReplace;
}
public int getSize() {
@@ -170,13 +176,13 @@ public class WorldEditor implements Runnable {
return PerformResult.BLACKLISTED;
}
final Block block = loc.getBlock();
+ if (!world.isChunkLoaded(block.getChunk())) {
+ world.loadChunk(block.getChunk());
+ }
if (BukkitUtils.isEmpty(replacedBlock.getMaterial()) && BukkitUtils.isEmpty(block.getType())) {
return PerformResult.NO_ACTION;
}
BlockState state = block.getState();
- if (!world.isChunkLoaded(block.getChunk())) {
- world.loadChunk(block.getChunk());
- }
if (setBlock.equals(replacedBlock)) {
if (ca != null) {
if (state instanceof InventoryHolder && state.getType() == replacedBlock.getMaterial()) {
@@ -194,7 +200,7 @@ public class WorldEditor implements Runnable {
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;
}
if (state instanceof InventoryHolder && replacedBlock.getMaterial() != block.getType()) {