Add history restore command
This commit is contained in:
parent
f2412bca13
commit
55a8978869
|
@ -36,6 +36,8 @@ public class RollbackDatabase extends AsyncNotifyQueue {
|
||||||
// private String GET_EDITS_POINT;
|
// private String GET_EDITS_POINT;
|
||||||
private String GET_EDITS;
|
private String GET_EDITS;
|
||||||
private String GET_EDITS_USER;
|
private String GET_EDITS_USER;
|
||||||
|
private String GET_EDITS_ASC;
|
||||||
|
private String GET_EDITS_USER_ASC;
|
||||||
private String DELETE_EDITS_USER;
|
private String DELETE_EDITS_USER;
|
||||||
private String DELETE_EDIT_USER;
|
private String DELETE_EDIT_USER;
|
||||||
private String PURGE;
|
private String PURGE;
|
||||||
|
@ -59,6 +61,8 @@ public class RollbackDatabase extends AsyncNotifyQueue {
|
||||||
// GET_EDITS_POINT = "SELECT `player`,`id` FROM `" + prefix + "edits` WHERE `x2`>=? AND `x1`<=? AND `y2`>=? AND `y1`<=? AND `z2`>=? AND `z1`<=?";
|
// GET_EDITS_POINT = "SELECT `player`,`id` FROM `" + prefix + "edits` WHERE `x2`>=? AND `x1`<=? AND `y2`>=? AND `y1`<=? AND `z2`>=? AND `z1`<=?";
|
||||||
GET_EDITS = "SELECT `player`,`id` FROM `" + prefix + "edits` WHERE `x2`>=? AND `x1`<=? AND `y2`>=? AND `y1`<=? AND `z2`>=? AND `z1`<=? AND `time`>? ORDER BY `time` DESC, `id` DESC";
|
GET_EDITS = "SELECT `player`,`id` FROM `" + prefix + "edits` WHERE `x2`>=? AND `x1`<=? AND `y2`>=? AND `y1`<=? AND `z2`>=? AND `z1`<=? AND `time`>? ORDER BY `time` DESC, `id` DESC";
|
||||||
GET_EDITS_USER = "SELECT `player`,`id` FROM `" + prefix + "edits` WHERE `x2`>=? AND `x1`<=? AND `y2`>=? AND `y1`<=? AND `z2`>=? AND `z1`<=? AND `time`>? AND `player`=? ORDER BY `time` DESC, `id` DESC";
|
GET_EDITS_USER = "SELECT `player`,`id` FROM `" + prefix + "edits` WHERE `x2`>=? AND `x1`<=? AND `y2`>=? AND `y1`<=? AND `z2`>=? AND `z1`<=? AND `time`>? AND `player`=? ORDER BY `time` DESC, `id` DESC";
|
||||||
|
GET_EDITS_ASC = "SELECT `player`,`id` FROM `" + prefix + "edits` WHERE `x2`>=? AND `x1`<=? AND `y2`>=? AND `y1`<=? AND `z2`>=? AND `z1`<=? AND `time`>? ORDER BY `time` ASC, `id` ASC";
|
||||||
|
GET_EDITS_USER_ASC = "SELECT `player`,`id` FROM `" + prefix + "edits` WHERE `x2`>=? AND `x1`<=? AND `y2`>=? AND `y1`<=? AND `z2`>=? AND `z1`<=? AND `time`>? AND `player`=? ORDER BY `time` ASC, `id` ASC";
|
||||||
DELETE_EDITS_USER = "DELETE FROM `" + prefix + "edits` WHERE `x2`>=? AND `x1`<=? AND `y2`>=? AND `y1`<=? AND `z2`>=? AND `z1`<=? AND `time`>? AND `player`=?";
|
DELETE_EDITS_USER = "DELETE FROM `" + prefix + "edits` WHERE `x2`>=? AND `x1`<=? AND `y2`>=? AND `y1`<=? AND `z2`>=? AND `z1`<=? AND `time`>? AND `player`=?";
|
||||||
DELETE_EDIT_USER = "DELETE FROM `" + prefix + "edits` WHERE `player`=? AND `id`=?";
|
DELETE_EDIT_USER = "DELETE FROM `" + prefix + "edits` WHERE `player`=? AND `id`=?";
|
||||||
init();
|
init();
|
||||||
|
@ -122,12 +126,13 @@ public class RollbackDatabase extends AsyncNotifyQueue {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public void getPotentialEdits(final UUID uuid, final long minTime, final Vector pos1, final Vector pos2, final RunnableVal<DiskStorageHistory> onEach, final Runnable whenDone, final boolean delete) {
|
public void getPotentialEdits(final UUID uuid, final long minTime, final Vector pos1, final Vector pos2, final RunnableVal<DiskStorageHistory> onEach, final Runnable whenDone, final boolean delete, final boolean ascending) {
|
||||||
final World world = FaweAPI.getWorld(this.worldName);
|
final World world = FaweAPI.getWorld(this.worldName);
|
||||||
addTask(new Runnable() {
|
addTask(new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
try (PreparedStatement stmt = connection.prepareStatement(uuid == null ? GET_EDITS : GET_EDITS_USER)) {
|
String stmtStr = ascending ? (uuid == null ? GET_EDITS_ASC : GET_EDITS_USER_ASC) : (uuid == null ? GET_EDITS : GET_EDITS_USER);
|
||||||
|
try (PreparedStatement stmt = connection.prepareStatement(stmtStr)) {
|
||||||
stmt.setInt(1, pos1.getBlockX());
|
stmt.setInt(1, pos1.getBlockX());
|
||||||
stmt.setInt(2, pos2.getBlockX());
|
stmt.setInt(2, pos2.getBlockX());
|
||||||
stmt.setByte(3, (byte) (pos1.getBlockY() - 128));
|
stmt.setByte(3, (byte) (pos1.getBlockY() - 128));
|
||||||
|
|
|
@ -105,7 +105,7 @@ public class InspectBrush extends BrushTool implements DoubleActionTraceTool {
|
||||||
public void run() {
|
public void run() {
|
||||||
BBC.TOOL_INSPECT_INFO_FOOTER.send(fp, count);
|
BBC.TOOL_INSPECT_INFO_FOOTER.send(fp, count);
|
||||||
}
|
}
|
||||||
}, false);
|
}, false, false);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -143,10 +143,19 @@ public class DiskStorageHistory extends FaweStreamChangeSet {
|
||||||
deleteFiles();
|
deleteFiles();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void redo(FawePlayer fp, Region[] regions) {
|
||||||
|
EditSession session = toEditSession(fp, regions);
|
||||||
|
session.redo(session);
|
||||||
|
}
|
||||||
|
|
||||||
public void undo(FawePlayer fp) {
|
public void undo(FawePlayer fp) {
|
||||||
undo(fp, null);
|
undo(fp, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void redo(FawePlayer fp) {
|
||||||
|
redo(fp, null);
|
||||||
|
}
|
||||||
|
|
||||||
public UUID getUUID() {
|
public UUID getUUID() {
|
||||||
return uuid;
|
return uuid;
|
||||||
}
|
}
|
||||||
|
|
|
@ -73,21 +73,7 @@ public class HistoryCommands extends MethodCommands {
|
||||||
max = 3
|
max = 3
|
||||||
)
|
)
|
||||||
@CommandPermissions("worldedit.history.rollback")
|
@CommandPermissions("worldedit.history.rollback")
|
||||||
public void faweRollback(final Player player, LocalSession session, final String user, @Optional("0") @Range(min = 0) int radius, @Optional("0") String time) throws WorldEditException {
|
public void faweRollback(final Player player, LocalSession session, final String user, @Optional("0") @Range(min = 0) int radius, @Optional("0") String time, @Optional("r") boolean restore) throws WorldEditException {
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Command(
|
|
||||||
aliases = {"/frb", "frb", "fawerollback", "/fawerollback", "/rollback"},
|
|
||||||
usage = "<user=Empire92> <radius=5> <time=3d4h>",
|
|
||||||
desc = "Undo a specific edit. " +
|
|
||||||
" - The time uses s, m, h, d, y.\n" +
|
|
||||||
" - Import from disk: /frb #import",
|
|
||||||
min = 1,
|
|
||||||
max = 3
|
|
||||||
)
|
|
||||||
@CommandPermissions("worldedit.history.rollback")
|
|
||||||
public void faweRollback(final Player player, LocalSession session, final String user, @Optional("0") @Range(min = 0) int radius, @Optional("0") String time) throws WorldEditException {
|
|
||||||
if (!Settings.IMP.HISTORY.USE_DATABASE) {
|
if (!Settings.IMP.HISTORY.USE_DATABASE) {
|
||||||
BBC.SETTING_DISABLE.send(player, "history.use-database (Import with /frb #import )");
|
BBC.SETTING_DISABLE.send(player, "history.use-database (Import with /frb #import )");
|
||||||
return;
|
return;
|
||||||
|
@ -152,7 +138,8 @@ public class HistoryCommands extends MethodCommands {
|
||||||
UUID uuid = player.getUniqueId();
|
UUID uuid = player.getUniqueId();
|
||||||
DiskStorageHistory file = new DiskStorageHistory(world, uuid, index);
|
DiskStorageHistory file = new DiskStorageHistory(world, uuid, index);
|
||||||
if (file.getBDFile().exists()) {
|
if (file.getBDFile().exists()) {
|
||||||
file.undo(FawePlayer.wrap(player));
|
if (restore) file.redo(FawePlayer.wrap(player));
|
||||||
|
else file.undo(FawePlayer.wrap(player));
|
||||||
BBC.ROLLBACK_ELEMENT.send(player, Fawe.imp().getWorldName(world) + "/" + user + "-" + index);
|
BBC.ROLLBACK_ELEMENT.send(player, Fawe.imp().getWorldName(world) + "/" + user + "-" + index);
|
||||||
} else {
|
} else {
|
||||||
BBC.TOOL_INSPECT_INFO_FOOTER.send(player, 0);
|
BBC.TOOL_INSPECT_INFO_FOOTER.send(player, 0);
|
||||||
|
@ -210,8 +197,7 @@ public class HistoryCommands extends MethodCommands {
|
||||||
public void run() {
|
public void run() {
|
||||||
BBC.TOOL_INSPECT_INFO_FOOTER.send(player, count);
|
BBC.TOOL_INSPECT_INFO_FOOTER.send(player, count);
|
||||||
}
|
}
|
||||||
}, true
|
}, true, restore);
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Command(
|
@Command(
|
||||||
|
@ -224,32 +210,8 @@ public class HistoryCommands extends MethodCommands {
|
||||||
max = 3
|
max = 3
|
||||||
)
|
)
|
||||||
@CommandPermissions("worldedit.history.rollback")
|
@CommandPermissions("worldedit.history.rollback")
|
||||||
private void restore(DiskStorageHistory file) {
|
private void restore(final Player player, LocalSession session, final String user, @Optional("0") @Range(min = 0) int radius, @Optional("0") String time) throws WorldEditException {
|
||||||
int times = Math.max(1, context.getInteger(0, 1));
|
faweRollback(player, session, user, radius, time, true);
|
||||||
if (times > 50) {
|
|
||||||
FawePlayer.wrap(player).checkConfirmation(getArguments(context), times, 50);
|
|
||||||
}
|
|
||||||
for (int i = 0; i < times; ++i) {
|
|
||||||
EditSession undone;
|
|
||||||
if (context.argsLength() < 2) {
|
|
||||||
undone = session.undo(session.getBlockBag(player), player);
|
|
||||||
} else {
|
|
||||||
player.checkPermission("worldedit.history.undo.other");
|
|
||||||
LocalSession sess = worldEdit.getSession(context.getString(1));
|
|
||||||
if (sess == null) {
|
|
||||||
BBC.COMMAND_HISTORY_OTHER_ERROR.send(player, context.getString(1));
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
undone = sess.undo(session.getBlockBag(player), player);
|
|
||||||
}
|
|
||||||
if (undone != null) {
|
|
||||||
BBC.COMMAND_UNDO_SUCCESS.send(player);
|
|
||||||
worldEdit.flushBlockBag(player, undone);
|
|
||||||
} else {
|
|
||||||
BBC.COMMAND_UNDO_ERROR.send(player);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Command(
|
@Command(
|
||||||
|
|
Loading…
Reference in New Issue