Skip to content

Commit

Permalink
Make EditSession closeable for easy flushing
Browse files Browse the repository at this point in the history
  • Loading branch information
octylFractal committed Oct 21, 2018
1 parent 1fa1ff8 commit a3f1c71
Show file tree
Hide file tree
Showing 6 changed files with 70 additions and 65 deletions.
Expand Up @@ -134,7 +134,7 @@
* using the {@link ChangeSetExtent}.</p>
*/
@SuppressWarnings({"FieldCanBeLocal"})
public class EditSession implements Extent {
public class EditSession implements Extent, AutoCloseable {

private static final Logger log = Logger.getLogger(EditSession.class.getCanonicalName());

Expand Down Expand Up @@ -636,6 +636,14 @@ public List<? extends Entity> getEntities() {
return bypassNone.getEntities();
}

/**
* Closing an EditSession {@linkplain #flushSession() flushes its buffers}.
*/
@Override
public void close() {
flushSession();
}

/**
* Communicate to the EditSession that all block changes are complete,
* and that it should apply them to the world.
Expand Down
Expand Up @@ -62,29 +62,29 @@ public boolean actPrimary(Platform server, LocalConfiguration config, Player pla
return true;
}

EditSession editSession = session.createEditSession(player);
editSession.getSurvivalExtent().setToolUse(config.superPickaxeManyDrop);
try (EditSession editSession = session.createEditSession(player)) {
editSession.getSurvivalExtent().setToolUse(config.superPickaxeManyDrop);

try {
for (int x = ox - range; x <= ox + range; ++x) {
for (int y = oy - range; y <= oy + range; ++y) {
for (int z = oz - range; z <= oz + range; ++z) {
Vector pos = new Vector(x, y, z);
if (editSession.getBlock(pos).getBlockType() != initialType) {
continue;
}
try {
for (int x = ox - range; x <= ox + range; ++x) {
for (int y = oy - range; y <= oy + range; ++y) {
for (int z = oz - range; z <= oz + range; ++z) {
Vector pos = new Vector(x, y, z);
if (editSession.getBlock(pos).getBlockType() != initialType) {
continue;
}

((World) clicked.getExtent()).queueBlockBreakEffect(server, pos, initialType, clicked.toVector().distanceSq(pos));
((World) clicked.getExtent()).queueBlockBreakEffect(server, pos, initialType, clicked.toVector().distanceSq(pos));

editSession.setBlock(pos, BlockTypes.AIR.getDefaultState());
editSession.setBlock(pos, BlockTypes.AIR.getDefaultState());
}
}
}
} catch (MaxChangedBlocksException e) {
player.printError("Max blocks change limit reached.");
} finally {
session.remember(editSession);
}
} catch (MaxChangedBlocksException e) {
player.printError("Max blocks change limit reached.");
} finally {
editSession.flushSession();
session.remember(editSession);
}

return true;
Expand Down
Expand Up @@ -52,15 +52,16 @@ public boolean canUse(Actor player) {
public boolean actPrimary(Platform server, LocalConfiguration config, Player player, LocalSession session, com.sk89q.worldedit.util.Location clicked) {
BlockBag bag = session.getBlockBag(player);

EditSession editSession = session.createEditSession(player);
editSession.disableBuffering();

try {
Vector position = clicked.toVector();
editSession.setBlock(position, pattern.apply(position));
} catch (MaxChangedBlocksException ignored) {
try (EditSession editSession = session.createEditSession(player)) {
try {
editSession.disableBuffering();
Vector position = clicked.toVector();
editSession.setBlock(position, pattern.apply(position));
} catch (MaxChangedBlocksException ignored) {
} finally {
session.remember(editSession);
}
} finally {
session.remember(editSession);
if (bag != null) {
bag.flushChanges();
}
Expand All @@ -72,8 +73,7 @@ public boolean actPrimary(Platform server, LocalConfiguration config, Player pla

@Override
public boolean actSecondary(Platform server, LocalConfiguration config, Player player, LocalSession session, com.sk89q.worldedit.util.Location clicked) {
EditSession editSession = session.createEditSession(player);
BlockStateHolder targetBlock = editSession.getBlock(clicked.toVector());
BlockStateHolder targetBlock = player.getWorld().getBlock(clicked.toVector());

if (targetBlock != null) {
pattern = new BlockPattern(targetBlock);
Expand Down
Expand Up @@ -172,29 +172,30 @@ public boolean actPrimary(Platform server, LocalConfiguration config, Player pla

BlockBag bag = session.getBlockBag(player);

EditSession editSession = session.createEditSession(player);
Request.request().setEditSession(editSession);
if (mask != null) {
Mask existingMask = editSession.getMask();

if (existingMask == null) {
editSession.setMask(mask);
} else if (existingMask instanceof MaskIntersection) {
((MaskIntersection) existingMask).add(mask);
} else {
MaskIntersection newMask = new MaskIntersection(existingMask);
newMask.add(mask);
editSession.setMask(newMask);
try (EditSession editSession = session.createEditSession(player)) {
Request.request().setEditSession(editSession);
if (mask != null) {
Mask existingMask = editSession.getMask();

if (existingMask == null) {
editSession.setMask(mask);
} else if (existingMask instanceof MaskIntersection) {
((MaskIntersection) existingMask).add(mask);
} else {
MaskIntersection newMask = new MaskIntersection(existingMask);
newMask.add(mask);
editSession.setMask(newMask);
}
}
}

try {
brush.build(editSession, target.toVector(), material, size);
} catch (MaxChangedBlocksException e) {
player.printError("Max blocks change limit reached.");
try {
brush.build(editSession, target.toVector(), material, size);
} catch (MaxChangedBlocksException e) {
player.printError("Max blocks change limit reached.");
} finally {
session.remember(editSession);
}
} finally {
session.remember(editSession);
editSession.flushSession();
if (bag != null) {
bag.flushChanges();
}
Expand Down
Expand Up @@ -66,17 +66,17 @@ public boolean actPrimary(Platform server, LocalConfiguration config, Player pla
return true;
}

EditSession editSession = session.createEditSession(player);
editSession.getSurvivalExtent().setToolUse(config.superPickaxeManyDrop);

try {
recurse(server, editSession, world, clicked.toVector().toBlockVector(),
clicked.toVector(), range, initialType, new HashSet<>());
} catch (MaxChangedBlocksException e) {
player.printError("Max blocks change limit reached.");
} finally {
editSession.flushSession();
session.remember(editSession);
try (EditSession editSession = session.createEditSession(player)) {
editSession.getSurvivalExtent().setToolUse(config.superPickaxeManyDrop);

try {
recurse(server, editSession, world, clicked.toVector().toBlockVector(),
clicked.toVector(), range, initialType, new HashSet<>());
} catch (MaxChangedBlocksException e) {
player.printError("Max blocks change limit reached.");
} finally {
session.remember(editSession);
}
}

return true;
Expand Down
Expand Up @@ -49,15 +49,11 @@ public boolean actPrimary(Platform server, LocalConfiguration config, Player pla
return true;
}

EditSession editSession = session.createEditSession(player);
editSession.getSurvivalExtent().setToolUse(config.superPickaxeDrop);

try {
try (EditSession editSession = session.createEditSession(player)) {
editSession.getSurvivalExtent().setToolUse(config.superPickaxeDrop);
editSession.setBlock(clicked.toVector(), BlockTypes.AIR.getDefaultState());
} catch (MaxChangedBlocksException e) {
player.printError("Max blocks change limit reached.");
} finally {
editSession.flushSession();
}

world.playEffect(clicked.toVector(), 2001, blockType.getLegacyId());
Expand Down

0 comments on commit a3f1c71

Please sign in to comment.