geforkt von Mirrors/FastAsyncWorldEdit
Flush or disable buffers in tools
Dieser Commit ist enthalten in:
Ursprung
dd2fcbac23
Commit
1fa1ff895b
@ -285,7 +285,7 @@ public class WorldEditPlugin extends JavaPlugin implements TabCompleter {
|
|||||||
LocalSession session = WorldEdit.getInstance().getSessionManager().get(wePlayer);
|
LocalSession session = WorldEdit.getInstance().getSessionManager().get(wePlayer);
|
||||||
|
|
||||||
session.remember(editSession);
|
session.remember(editSession);
|
||||||
editSession.flushQueue();
|
editSession.flushSession();
|
||||||
|
|
||||||
WorldEdit.getInstance().flushBlockBag(wePlayer, editSession);
|
WorldEdit.getInstance().flushBlockBag(wePlayer, editSession);
|
||||||
}
|
}
|
||||||
|
@ -298,13 +298,13 @@ public class EditSession implements Extent {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Disable the queue. This will flush the queue.
|
* Disable the queue. This will {@linkplain #flushSession() flush the session}.
|
||||||
*/
|
*/
|
||||||
public void disableQueue() {
|
public void disableQueue() {
|
||||||
if (isQueueEnabled()) {
|
if (isQueueEnabled()) {
|
||||||
flushQueue();
|
flushSession();
|
||||||
}
|
}
|
||||||
reorderExtent.setEnabled(true);
|
reorderExtent.setEnabled(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -393,10 +393,21 @@ public class EditSession implements Extent {
|
|||||||
return blockBagExtent.popMissing();
|
return blockBagExtent.popMissing();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns chunk batching status.
|
||||||
|
*
|
||||||
|
* @return whether chunk batching is enabled
|
||||||
|
*/
|
||||||
public boolean isBatchingChunks() {
|
public boolean isBatchingChunks() {
|
||||||
return chunkBatchingExtent != null && chunkBatchingExtent.isEnabled();
|
return chunkBatchingExtent != null && chunkBatchingExtent.isEnabled();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Enable or disable chunk batching. Disabling will
|
||||||
|
* {@linkplain #flushSession() flush the session}.
|
||||||
|
*
|
||||||
|
* @param batchingChunks {@code true} to enable, {@code false} to disable
|
||||||
|
*/
|
||||||
public void setBatchingChunks(boolean batchingChunks) {
|
public void setBatchingChunks(boolean batchingChunks) {
|
||||||
if (chunkBatchingExtent == null) {
|
if (chunkBatchingExtent == null) {
|
||||||
if (batchingChunks) {
|
if (batchingChunks) {
|
||||||
@ -405,11 +416,23 @@ public class EditSession implements Extent {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!batchingChunks) {
|
if (!batchingChunks) {
|
||||||
flushQueue();
|
flushSession();
|
||||||
}
|
}
|
||||||
chunkBatchingExtent.setEnabled(batchingChunks);
|
chunkBatchingExtent.setEnabled(batchingChunks);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Disable all buffering extents.
|
||||||
|
*
|
||||||
|
* @see #disableQueue()
|
||||||
|
* @see #setBatchingChunks(boolean)
|
||||||
|
*/
|
||||||
|
public void disableBuffering() {
|
||||||
|
// We optimize here to avoid double calls to flushSession.
|
||||||
|
reorderExtent.setEnabled(false);
|
||||||
|
setBatchingChunks(false);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the number of blocks changed, including repeated block changes.
|
* Get the number of blocks changed, including repeated block changes.
|
||||||
*
|
*
|
||||||
@ -569,7 +592,7 @@ public class EditSession implements Extent {
|
|||||||
UndoContext context = new UndoContext();
|
UndoContext context = new UndoContext();
|
||||||
context.setExtent(editSession.bypassHistory);
|
context.setExtent(editSession.bypassHistory);
|
||||||
Operations.completeBlindly(ChangeSetExecutor.createUndo(changeSet, context));
|
Operations.completeBlindly(ChangeSetExecutor.createUndo(changeSet, context));
|
||||||
editSession.flushQueue();
|
editSession.flushSession();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -581,7 +604,7 @@ public class EditSession implements Extent {
|
|||||||
UndoContext context = new UndoContext();
|
UndoContext context = new UndoContext();
|
||||||
context.setExtent(editSession.bypassHistory);
|
context.setExtent(editSession.bypassHistory);
|
||||||
Operations.completeBlindly(ChangeSetExecutor.createRedo(changeSet, context));
|
Operations.completeBlindly(ChangeSetExecutor.createRedo(changeSet, context));
|
||||||
editSession.flushQueue();
|
editSession.flushSession();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -614,9 +637,10 @@ public class EditSession implements Extent {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Finish off the queue.
|
* Communicate to the EditSession that all block changes are complete,
|
||||||
|
* and that it should apply them to the world.
|
||||||
*/
|
*/
|
||||||
public void flushQueue() {
|
public void flushSession() {
|
||||||
Operations.completeBlindly(commit());
|
Operations.completeBlindly(commit());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -628,7 +628,7 @@ public class WorldEdit {
|
|||||||
logger.log(Level.WARNING, "Failed to execute script", e);
|
logger.log(Level.WARNING, "Failed to execute script", e);
|
||||||
} finally {
|
} finally {
|
||||||
for (EditSession editSession : scriptContext.getEditSessions()) {
|
for (EditSession editSession : scriptContext.getEditSessions()) {
|
||||||
editSession.flushQueue();
|
editSession.flushSession();
|
||||||
session.remember(editSession);
|
session.remember(editSession);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -460,7 +460,7 @@ public class UtilityCommands {
|
|||||||
|
|
||||||
if (editSession != null) {
|
if (editSession != null) {
|
||||||
session.remember(editSession);
|
session.remember(editSession);
|
||||||
editSession.flushQueue();
|
editSession.flushSession();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -520,7 +520,7 @@ public class UtilityCommands {
|
|||||||
|
|
||||||
if (editSession != null) {
|
if (editSession != null) {
|
||||||
session.remember(editSession);
|
session.remember(editSession);
|
||||||
editSession.flushQueue();
|
editSession.flushSession();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -83,7 +83,7 @@ public class AreaPickaxe implements BlockTool {
|
|||||||
} catch (MaxChangedBlocksException e) {
|
} catch (MaxChangedBlocksException e) {
|
||||||
player.printError("Max blocks change limit reached.");
|
player.printError("Max blocks change limit reached.");
|
||||||
} finally {
|
} finally {
|
||||||
editSession.flushQueue();
|
editSession.flushSession();
|
||||||
session.remember(editSession);
|
session.remember(editSession);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -53,16 +53,17 @@ public class BlockReplacer implements DoubleActionBlockTool {
|
|||||||
BlockBag bag = session.getBlockBag(player);
|
BlockBag bag = session.getBlockBag(player);
|
||||||
|
|
||||||
EditSession editSession = session.createEditSession(player);
|
EditSession editSession = session.createEditSession(player);
|
||||||
|
editSession.disableBuffering();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
Vector position = clicked.toVector();
|
Vector position = clicked.toVector();
|
||||||
editSession.setBlock(position, pattern.apply(position));
|
editSession.setBlock(position, pattern.apply(position));
|
||||||
} catch (MaxChangedBlocksException ignored) {
|
} catch (MaxChangedBlocksException ignored) {
|
||||||
} finally {
|
} finally {
|
||||||
|
session.remember(editSession);
|
||||||
if (bag != null) {
|
if (bag != null) {
|
||||||
bag.flushChanges();
|
bag.flushChanges();
|
||||||
}
|
}
|
||||||
session.remember(editSession);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -193,10 +193,11 @@ public class BrushTool implements TraceTool {
|
|||||||
} catch (MaxChangedBlocksException e) {
|
} catch (MaxChangedBlocksException e) {
|
||||||
player.printError("Max blocks change limit reached.");
|
player.printError("Max blocks change limit reached.");
|
||||||
} finally {
|
} finally {
|
||||||
|
session.remember(editSession);
|
||||||
|
editSession.flushSession();
|
||||||
if (bag != null) {
|
if (bag != null) {
|
||||||
bag.flushChanges();
|
bag.flushChanges();
|
||||||
}
|
}
|
||||||
session.remember(editSession);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -75,7 +75,7 @@ public class RecursivePickaxe implements BlockTool {
|
|||||||
} catch (MaxChangedBlocksException e) {
|
} catch (MaxChangedBlocksException e) {
|
||||||
player.printError("Max blocks change limit reached.");
|
player.printError("Max blocks change limit reached.");
|
||||||
} finally {
|
} finally {
|
||||||
editSession.flushQueue();
|
editSession.flushSession();
|
||||||
session.remember(editSession);
|
session.remember(editSession);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -57,7 +57,7 @@ public class SinglePickaxe implements BlockTool {
|
|||||||
} catch (MaxChangedBlocksException e) {
|
} catch (MaxChangedBlocksException e) {
|
||||||
player.printError("Max blocks change limit reached.");
|
player.printError("Max blocks change limit reached.");
|
||||||
} finally {
|
} finally {
|
||||||
editSession.flushQueue();
|
editSession.flushSession();
|
||||||
}
|
}
|
||||||
|
|
||||||
world.playEffect(clicked.toVector(), 2001, blockType.getLegacyId());
|
world.playEffect(clicked.toVector(), 2001, blockType.getLegacyId());
|
||||||
|
@ -316,7 +316,7 @@ public final class CommandManager {
|
|||||||
|
|
||||||
if (editSession != null) {
|
if (editSession != null) {
|
||||||
session.remember(editSession);
|
session.remember(editSession);
|
||||||
editSession.flushQueue();
|
editSession.flushSession();
|
||||||
|
|
||||||
if (config.profile) {
|
if (config.profile) {
|
||||||
long time = System.currentTimeMillis() - start;
|
long time = System.currentTimeMillis() - start;
|
||||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren