Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -152,6 +152,11 @@ public void blockCreate(BlockPlaceEvent event) {
BukkitPlayer pp = BukkitUtil.adapt(player);
Plot plot = area.getPlot(location);
if (plot != null) {
// Prevent block placement during pending deletion
if (plot.getMeta("pendingDelete") != null) {
event.setCancelled(true);
return;
}
if (area.notifyIfOutsideBuildArea(pp, location.getY())) {
event.setCancelled(true);
return;
Expand Down Expand Up @@ -230,6 +235,11 @@ public void blockDestroy(BlockBreakEvent event) {
Plot plot = area.getPlot(location);
if (plot != null) {
BukkitPlayer plotPlayer = BukkitUtil.adapt(player);
// Prevent block breaking during pending deletion
if (plot.getMeta("pendingDelete") != null) {
event.setCancelled(true);
return;
}
// == rather than <= as we only care about the "ground level" not being destroyed
if (event.getBlock().getY() == area.getMinGenHeight()) {
if (!plotPlayer.hasPermission(Permission.PERMISSION_ADMIN_DESTROY_GROUNDLEVEL)) {
Expand Down
63 changes: 43 additions & 20 deletions Core/src/main/java/com/plotsquared/core/command/Delete.java
Original file line number Diff line number Diff line change
Expand Up @@ -91,11 +91,19 @@ public boolean onCommand(final PlotPlayer<?> player, String[] args) {
final int currentPlots = Settings.Limit.GLOBAL ?
player.getPlotCount() :
player.getPlotCount(plot.getWorldName());

Runnable run = () -> {
if (plot.getRunning() > 0) {
for (Plot connectedPlot : plots) {
connectedPlot.deleteMeta("pendingDelete");
Comment thread
florianreuth marked this conversation as resolved.
}
player.sendMessage(TranslatableCaption.of("errors.wait_for_timer"));
return;
}

for (Plot connectedPlot : plots) {
connectedPlot.setMeta("pendingDelete", true);
}
final long start = System.currentTimeMillis();
if (Settings.Teleport.ON_DELETE) {
plot.getPlayersInPlot().forEach(playerInPlot -> plot.teleportPlayer(playerInPlot, TeleportCause.COMMAND_DELETE,
Expand All @@ -104,32 +112,47 @@ public boolean onCommand(final PlotPlayer<?> player, String[] args) {
));
}
boolean result = plot.getPlotModificationManager().deletePlot(player, () -> {
plot.removeRunning();
if (this.econHandler.isEnabled(plotArea)) {
PlotExpression valueExr = plotArea.getPrices().get("sell");
double value = plots.size() * valueExr.evaluate(currentPlots);
if (value > 0d) {
this.econHandler.depositMoney(player, value);
player.sendMessage(
TranslatableCaption.of("economy.added_balance"),
TagResolver.resolver("money", Tag.inserting(Component.text(this.econHandler.format(value))))
);
try {
// Clear pending delete metadata now that deletion is actually starting
for (Plot connectedPlot : plots) {
connectedPlot.deleteMeta("pendingDelete");
}
plot.removeRunning();
if (this.econHandler.isEnabled(plotArea)) {
PlotExpression valueExr = plotArea.getPrices().get("sell");
double value = plots.size() * valueExr.evaluate(currentPlots);
if (value > 0d) {
this.econHandler.depositMoney(player, value);
player.sendMessage(
TranslatableCaption.of("economy.added_balance"),
TagResolver.resolver("money", Tag.inserting(Component.text(this.econHandler.format(value))))
);
}
}
player.sendMessage(
TranslatableCaption.of("working.deleting_done"),
TagResolver.resolver(
"amount",
Tag.inserting(Component.text(String.valueOf(System.currentTimeMillis() - start)))
),
TagResolver.resolver("world", Tag.inserting(Component.text(plotArea.getWorldName()))),
TagResolver.resolver("plot", Tag.inserting(Component.text(plot.getId().toString())))
);
eventDispatcher.callPostDelete(plot);
} catch (Throwable e) {
// ... or if something went wrong
for (Plot connectedPlot : plots) {
connectedPlot.deleteMeta("pendingDelete");
}
throw e;
}
player.sendMessage(
TranslatableCaption.of("working.deleting_done"),
TagResolver.resolver(
"amount",
Tag.inserting(Component.text(String.valueOf(System.currentTimeMillis() - start)))
),
TagResolver.resolver("world", Tag.inserting(Component.text(plotArea.getWorldName()))),
TagResolver.resolver("plot", Tag.inserting(Component.text(plot.getId().toString())))
);
eventDispatcher.callPostDelete(plot);
});
if (result) {
plot.addRunning();
} else {
for (Plot connectedPlot : plots) {
connectedPlot.deleteMeta("pendingDelete");
}
player.sendMessage(TranslatableCaption.of("errors.wait_for_timer"));
}
};
Expand Down
Loading