Refactor duplicate code: command confirmation

This commit is contained in:
Aurora Lahtela 2023-01-22 13:45:47 +02:00
parent e0d80cb3b4
commit acf9d92b1d
4 changed files with 81 additions and 140 deletions

View File

@ -238,7 +238,7 @@ public class PlanCommand {
.optionalArgument(locale.getString(HelpLang.ARG_USERNAME), locale.getString(HelpLang.DESC_ARG_USERNAME)) .optionalArgument(locale.getString(HelpLang.ARG_USERNAME), locale.getString(HelpLang.DESC_ARG_USERNAME))
.description(locale.getString(HelpLang.UNREGISTER)) .description(locale.getString(HelpLang.UNREGISTER))
.inDepthDescription(locale.getString(DeepHelpLang.UNREGISTER)) .inDepthDescription(locale.getString(DeepHelpLang.UNREGISTER))
.onCommand((sender, arguments) -> registrationCommands.onUnregister(commandName, sender, arguments)) .onCommand(registrationCommands::onUnregister)
.onTabComplete(this::webUserNames) .onTabComplete(this::webUserNames)
.build(); .build();
} }
@ -348,7 +348,7 @@ public class PlanCommand {
.optionalArgument("--remove_offline", "Remove offline players if given") .optionalArgument("--remove_offline", "Remove offline players if given")
.description(locale.getString(HelpLang.ONLINE_UUID_MIGRATION)) .description(locale.getString(HelpLang.ONLINE_UUID_MIGRATION))
.inDepthDescription("Moves and combines offline uuid data to online uuids where possible. Leaves offline-only players to database.") .inDepthDescription("Moves and combines offline uuid data to online uuids where possible. Leaves offline-only players to database.")
.onCommand((sender, arguments) -> databaseCommands.onOnlineConversion(commandName, sender, arguments)) .onCommand(databaseCommands::onOnlineConversion)
.build(); .build();
} }
@ -358,7 +358,7 @@ public class PlanCommand {
.requirePermission(Permissions.DATA_CLEAR) .requirePermission(Permissions.DATA_CLEAR)
.requiredArgument(locale.getString(HelpLang.ARG_SERVER), locale.getString(HelpLang.DESC_ARG_SERVER_IDENTIFIER)) .requiredArgument(locale.getString(HelpLang.ARG_SERVER), locale.getString(HelpLang.DESC_ARG_SERVER_IDENTIFIER))
.description(locale.getString(HelpLang.JOIN_ADDRESS_REMOVAL)) .description(locale.getString(HelpLang.JOIN_ADDRESS_REMOVAL))
.onCommand((sender, arguments) -> databaseCommands.onFixFabricJoinAddresses(commandName, sender, arguments)) .onCommand(databaseCommands::onFixFabricJoinAddresses)
.onTabComplete(this::serverNames) .onTabComplete(this::serverNames)
.build(); .build();
} }
@ -384,7 +384,7 @@ public class PlanCommand {
.optionalArgument(DB_ARG_OPTIONS, locale.getString(HelpLang.DESC_ARG_DB_RESTORE)) .optionalArgument(DB_ARG_OPTIONS, locale.getString(HelpLang.DESC_ARG_DB_RESTORE))
.description(locale.getString(HelpLang.DB_RESTORE)) .description(locale.getString(HelpLang.DB_RESTORE))
.inDepthDescription(locale.getString(DeepHelpLang.DB_RESTORE)) .inDepthDescription(locale.getString(DeepHelpLang.DB_RESTORE))
.onCommand((sender, arguments) -> databaseCommands.onRestore(commandName, sender, arguments)) .onCommand(databaseCommands::onRestore)
.onTabComplete(this::getBackupFilenames) .onTabComplete(this::getBackupFilenames)
.build(); .build();
} }
@ -409,7 +409,7 @@ public class PlanCommand {
.requiredArgument(DB_ARG_OPTIONS, locale.getString(HelpLang.DESC_ARG_DB_MOVE_TO)) .requiredArgument(DB_ARG_OPTIONS, locale.getString(HelpLang.DESC_ARG_DB_MOVE_TO))
.description(locale.getString(HelpLang.DB_MOVE)) .description(locale.getString(HelpLang.DB_MOVE))
.inDepthDescription(locale.getString(DeepHelpLang.DB_MOVE)) .inDepthDescription(locale.getString(DeepHelpLang.DB_MOVE))
.onCommand((sender, arguments) -> databaseCommands.onMove(commandName, sender, arguments)) .onCommand(databaseCommands::onMove)
.onTabComplete((sender, arguments) -> DBType.names()) .onTabComplete((sender, arguments) -> DBType.names())
.build(); .build();
} }
@ -434,7 +434,7 @@ public class PlanCommand {
.requiredArgument(DB_ARG_OPTIONS, locale.getString(HelpLang.DESC_ARG_DB_REMOVE)) .requiredArgument(DB_ARG_OPTIONS, locale.getString(HelpLang.DESC_ARG_DB_REMOVE))
.description(locale.getString(HelpLang.DB_CLEAR)) .description(locale.getString(HelpLang.DB_CLEAR))
.inDepthDescription(locale.getString(DeepHelpLang.DB_CLEAR)) .inDepthDescription(locale.getString(DeepHelpLang.DB_CLEAR))
.onCommand((sender, arguments) -> databaseCommands.onClear(commandName, sender, arguments)) .onCommand(databaseCommands::onClear)
.onTabComplete((sender, arguments) -> .onTabComplete((sender, arguments) ->
arguments.isEmpty() ? DBType.names() : Collections.emptyList() arguments.isEmpty() ? DBType.names() : Collections.emptyList()
).build(); ).build();
@ -447,7 +447,7 @@ public class PlanCommand {
.requiredArgument(locale.getString(HelpLang.ARG_NAME_UUID), locale.getString(HelpLang.DESC_ARG_PLAYER_IDENTIFIER_REMOVE)) .requiredArgument(locale.getString(HelpLang.ARG_NAME_UUID), locale.getString(HelpLang.DESC_ARG_PLAYER_IDENTIFIER_REMOVE))
.description(locale.getString(HelpLang.DB_REMOVE)) .description(locale.getString(HelpLang.DB_REMOVE))
.inDepthDescription(locale.getString(DeepHelpLang.DB_REMOVE)) .inDepthDescription(locale.getString(DeepHelpLang.DB_REMOVE))
.onCommand((sender, arguments) -> databaseCommands.onRemove(commandName, sender, arguments)) .onCommand(databaseCommands::onRemove)
.onTabComplete(this::playerNames) .onTabComplete(this::playerNames)
.build(); .build();
} }

View File

@ -17,12 +17,15 @@
package com.djrapitops.plan.commands.subcommands; package com.djrapitops.plan.commands.subcommands;
import com.djrapitops.plan.commands.use.CMDSender; import com.djrapitops.plan.commands.use.CMDSender;
import com.djrapitops.plan.commands.use.ColorScheme;
import com.djrapitops.plan.commands.use.MessageBuilder;
import com.djrapitops.plan.settings.locale.Locale; import com.djrapitops.plan.settings.locale.Locale;
import com.djrapitops.plan.settings.locale.lang.CommandLang; import com.djrapitops.plan.settings.locale.lang.CommandLang;
import com.github.benmanes.caffeine.cache.Cache; import com.github.benmanes.caffeine.cache.Cache;
import com.github.benmanes.caffeine.cache.Caffeine; import com.github.benmanes.caffeine.cache.Caffeine;
import javax.inject.Inject; import javax.inject.Inject;
import javax.inject.Named;
import javax.inject.Singleton; import javax.inject.Singleton;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.util.function.Consumer; import java.util.function.Consumer;
@ -31,20 +34,57 @@ import java.util.function.Consumer;
public class Confirmation { public class Confirmation {
private final Cache<CMDSender, Consumer<Boolean>> awaiting; private final Cache<CMDSender, Consumer<Boolean>> awaiting;
private final String mainCommand;
private final ColorScheme colors;
private final Locale locale; private final Locale locale;
@Inject @Inject
public Confirmation( public Confirmation(
@Named("mainCommandName") String mainCommand,
ColorScheme colors,
Locale locale Locale locale
) { ) {
this.mainCommand = mainCommand;
this.colors = colors;
this.locale = locale; this.locale = locale;
awaiting = Caffeine.newBuilder() awaiting = Caffeine.newBuilder()
.expireAfterWrite(5, TimeUnit.MINUTES) .expireAfterWrite(5, TimeUnit.MINUTES)
.build(); .build();
} }
public void confirm(CMDSender sender, Consumer<Boolean> confirmation) { private void sendConfirmOptionMessages(CMDSender sender, String prompt) {
MessageBuilder message = sender.buildMessage()
.addPart(colors.getMainColor() + prompt).newLine();
sendConfirmOptionMessages(sender, message);
}
private void sendConfirmOptionMessages(CMDSender sender, MessageBuilder message) {
if (sender.supportsChatEvents()) {
message
.addPart(colors.getTertiaryColor() + locale.getString(CommandLang.CONFIRM))
.addPart("§2§l[\u2714]").command("/" + mainCommand + " accept").hover(locale.getString(CommandLang.CONFIRM_ACCEPT))
.addPart(" ")
.addPart("§4§l[\u2718]").command("/" + mainCommand + " cancel").hover(locale.getString(CommandLang.CONFIRM_DENY))
.send();
} else {
message
.addPart(colors.getTertiaryColor() + locale.getString(CommandLang.CONFIRM)).addPart("§a/" + mainCommand + " accept")
.addPart(" ")
.addPart("§c/" + mainCommand + " cancel")
.send();
}
}
public void confirm(CMDSender sender, String prompt, Consumer<Boolean> confirmation) {
if (awaiting.getIfPresent(sender) != null) onCancel(sender); if (awaiting.getIfPresent(sender) != null) onCancel(sender);
sendConfirmOptionMessages(sender, prompt);
awaiting.put(sender, confirmation);
}
public void confirm(CMDSender sender, MessageBuilder message, Consumer<Boolean> confirmation) {
if (awaiting.getIfPresent(sender) != null) onCancel(sender);
sendConfirmOptionMessages(sender, message);
awaiting.put(sender, confirmation); awaiting.put(sender, confirmation);
} }

View File

@ -62,6 +62,8 @@ import java.util.stream.Collectors;
@Singleton @Singleton
public class DatabaseCommands { public class DatabaseCommands {
private static final String SUPPORTED_DB_OPTIONS = "<MySQL/SQLite>";
private final Locale locale; private final Locale locale;
private final Confirmation confirmation; private final Confirmation confirmation;
private final ColorScheme colors; private final ColorScheme colors;
@ -151,7 +153,7 @@ public class DatabaseCommands {
} }
} }
public void onRestore(String mainCommand, CMDSender sender, @Untrusted Arguments arguments) { public void onRestore(CMDSender sender, @Untrusted Arguments arguments) {
@Untrusted String backupDbName = arguments.get(0) @Untrusted String backupDbName = arguments.get(0)
.orElseThrow(() -> new IllegalArgumentException(locale.getString(CommandLang.FAIL_REQ_ARGS, 1, "<" + locale.getString(HelpLang.ARG_BACKUP_FILE) + ">"))); .orElseThrow(() -> new IllegalArgumentException(locale.getString(CommandLang.FAIL_REQ_ARGS, 1, "<" + locale.getString(HelpLang.ARG_BACKUP_FILE) + ">")));
@ -178,24 +180,11 @@ public class DatabaseCommands {
if (toDB.getState() != Database.State.OPEN) toDB.init(); if (toDB.getState() != Database.State.OPEN) toDB.init();
if (sender.supportsChatEvents()) { String prompt = locale.getString(CommandLang.CONFIRM_OVERWRITE_DB,
sender.buildMessage() toDB.getType().getName(),
.addPart(colors.getMainColor() + locale.getString(CommandLang.CONFIRM_OVERWRITE_DB, toDB.getType().getName(), backupDBFile.toPath().toString())).newLine() backupDBFile.toPath().toString());
.addPart(colors.getTertiaryColor() + locale.getString(CommandLang.CONFIRM))
.addPart("§2§l[\u2714]").command("/" + mainCommand + " accept").hover(locale.getString(CommandLang.CONFIRM_ACCEPT))
.addPart(" ")
.addPart("§4§l[\u2718]").command("/" + mainCommand + " cancel").hover(locale.getString(CommandLang.CONFIRM_DENY))
.send();
} else {
sender.buildMessage()
.addPart(colors.getMainColor() + locale.getString(CommandLang.CONFIRM_OVERWRITE_DB, toDB.getType().getName(), backupDBFile.toPath().toString())).newLine()
.addPart(colors.getTertiaryColor() + locale.getString(CommandLang.CONFIRM)).addPart("§a/" + mainCommand + " accept")
.addPart(" ")
.addPart("§c/" + mainCommand + " cancel")
.send();
}
confirmation.confirm(sender, choice -> { confirmation.confirm(sender, prompt, choice -> {
if (Boolean.TRUE.equals(choice)) { if (Boolean.TRUE.equals(choice)) {
performRestore(sender, backupDBFile, toDB); performRestore(sender, backupDBFile, toDB);
} else { } else {
@ -220,35 +209,22 @@ public class DatabaseCommands {
} }
} }
public void onMove(String mainCommand, CMDSender sender, @Untrusted Arguments arguments) { public void onMove(CMDSender sender, @Untrusted Arguments arguments) {
DBType fromDB = arguments.get(0).flatMap(DBType::getForName) DBType fromDB = arguments.get(0).flatMap(DBType::getForName)
.orElseThrow(() -> new IllegalArgumentException(locale.getString(CommandLang.FAIL_INCORRECT_DB, arguments.get(0).orElse("<MySQL/SQLite>")))); .orElseThrow(() -> new IllegalArgumentException(locale.getString(CommandLang.FAIL_INCORRECT_DB, arguments.get(0).orElse(SUPPORTED_DB_OPTIONS))));
DBType toDB = arguments.get(1).flatMap(DBType::getForName) DBType toDB = arguments.get(1).flatMap(DBType::getForName)
.orElseThrow(() -> new IllegalArgumentException(locale.getString(CommandLang.FAIL_INCORRECT_DB, arguments.get(0).orElse("<MySQL/SQLite>")))); .orElseThrow(() -> new IllegalArgumentException(locale.getString(CommandLang.FAIL_INCORRECT_DB, arguments.get(0).orElse(SUPPORTED_DB_OPTIONS))));
if (fromDB == toDB) { if (fromDB == toDB) {
throw new IllegalArgumentException(locale.getString(CommandLang.FAIL_SAME_DB)); throw new IllegalArgumentException(locale.getString(CommandLang.FAIL_SAME_DB));
} }
if (sender.supportsChatEvents()) { String prompt = locale.getString(CommandLang.CONFIRM_OVERWRITE_DB,
sender.buildMessage() toDB.getName(),
.addPart(colors.getMainColor() + locale.getString(CommandLang.CONFIRM_OVERWRITE_DB, toDB.getName(), fromDB.getName())).newLine() fromDB.getName());
.addPart(colors.getTertiaryColor() + locale.getString(CommandLang.CONFIRM))
.addPart("§2§l[\u2714]").command("/" + mainCommand + " accept").hover(locale.getString(CommandLang.CONFIRM_ACCEPT))
.addPart(" ")
.addPart("§4§l[\u2718]").command("/" + mainCommand + " cancel").hover(locale.getString(CommandLang.CONFIRM_DENY))
.send();
} else {
sender.buildMessage()
.addPart(colors.getMainColor() + locale.getString(CommandLang.CONFIRM_OVERWRITE_DB, toDB.getName(), fromDB.getName())).newLine()
.addPart(colors.getTertiaryColor() + locale.getString(CommandLang.CONFIRM)).addPart("§a/" + mainCommand + " accept")
.addPart(" ")
.addPart("§c/" + mainCommand + " cancel")
.send();
}
confirmation.confirm(sender, choice -> { confirmation.confirm(sender, prompt, choice -> {
if (Boolean.TRUE.equals(choice)) { if (Boolean.TRUE.equals(choice)) {
performMove(sender, fromDB, toDB); performMove(sender, fromDB, toDB);
} else { } else {
@ -283,28 +259,13 @@ public class DatabaseCommands {
} }
public void onClear(String mainCommand, CMDSender sender, @Untrusted Arguments arguments) { public void onClear(CMDSender sender, @Untrusted Arguments arguments) {
DBType fromDB = arguments.get(0).flatMap(DBType::getForName) DBType fromDB = arguments.get(0).flatMap(DBType::getForName)
.orElseThrow(() -> new IllegalArgumentException(locale.getString(CommandLang.FAIL_INCORRECT_DB, arguments.get(0).orElse("<MySQL/SQLite>")))); .orElseThrow(() -> new IllegalArgumentException(locale.getString(CommandLang.FAIL_INCORRECT_DB, arguments.get(0).orElse(SUPPORTED_DB_OPTIONS))));
if (sender.supportsChatEvents()) { String prompt = locale.getString(CommandLang.CONFIRM_CLEAR_DB, fromDB.getName());
sender.buildMessage()
.addPart(colors.getMainColor() + locale.getString(CommandLang.CONFIRM_CLEAR_DB, fromDB.getName())).newLine()
.addPart(colors.getTertiaryColor() + locale.getString(CommandLang.CONFIRM))
.addPart("§2§l[\u2714]").command("/" + mainCommand + " accept").hover(locale.getString(CommandLang.CONFIRM_ACCEPT))
.addPart(" ")
.addPart("§4§l[\u2718]").command("/" + mainCommand + " cancel").hover(locale.getString(CommandLang.CONFIRM_DENY))
.send();
} else {
sender.buildMessage()
.addPart(colors.getMainColor() + locale.getString(CommandLang.CONFIRM_CLEAR_DB, fromDB.getName())).newLine()
.addPart(colors.getTertiaryColor() + locale.getString(CommandLang.CONFIRM)).addPart("§a/" + mainCommand + " accept")
.addPart(" ")
.addPart("§c/" + mainCommand + " cancel")
.send();
}
confirmation.confirm(sender, choice -> { confirmation.confirm(sender, prompt, choice -> {
if (Boolean.TRUE.equals(choice)) { if (Boolean.TRUE.equals(choice)) {
performClear(sender, fromDB); performClear(sender, fromDB);
} else { } else {
@ -336,7 +297,7 @@ public class DatabaseCommands {
} }
} }
public void onFixFabricJoinAddresses(String mainCommand, CMDSender sender, @Untrusted Arguments arguments) { public void onFixFabricJoinAddresses(CMDSender sender, @Untrusted Arguments arguments) {
@Untrusted String identifier = arguments.concatenate(" "); @Untrusted String identifier = arguments.concatenate(" ");
Optional<ServerUUID> serverUUID = identifiers.getServerUUID(identifier); Optional<ServerUUID> serverUUID = identifiers.getServerUUID(identifier);
if (serverUUID.isEmpty()) { if (serverUUID.isEmpty()) {
@ -345,24 +306,9 @@ public class DatabaseCommands {
Database database = dbSystem.getDatabase(); Database database = dbSystem.getDatabase();
if (sender.supportsChatEvents()) { String prompt = locale.getString(CommandLang.CONFIRM_JOIN_ADDRESS_REMOVAL, identifier, database.getType().getName());
sender.buildMessage()
.addPart(colors.getMainColor() + locale.getString(CommandLang.CONFIRM_JOIN_ADDRESS_REMOVAL, identifier, database.getType().getName())).newLine()
.addPart(colors.getTertiaryColor() + locale.getString(CommandLang.CONFIRM))
.addPart("§2§l[\u2714]").command("/" + mainCommand + " accept").hover(locale.getString(CommandLang.CONFIRM_ACCEPT))
.addPart(" ")
.addPart("§4§l[\u2718]").command("/" + mainCommand + " cancel").hover(locale.getString(CommandLang.CONFIRM_DENY))
.send();
} else {
sender.buildMessage()
.addPart(colors.getMainColor() + locale.getString(CommandLang.CONFIRM_JOIN_ADDRESS_REMOVAL, identifier, database.getType().getName())).newLine()
.addPart(colors.getTertiaryColor() + locale.getString(CommandLang.CONFIRM)).addPart("§a/" + mainCommand + " accept")
.addPart(" ")
.addPart("§c/" + mainCommand + " cancel")
.send();
}
confirmation.confirm(sender, choice -> { confirmation.confirm(sender, prompt, choice -> {
if (Boolean.TRUE.equals(choice)) { if (Boolean.TRUE.equals(choice)) {
performJoinAddressRemoval(sender, serverUUID.get(), database); performJoinAddressRemoval(sender, serverUUID.get(), database);
} else { } else {
@ -386,7 +332,7 @@ public class DatabaseCommands {
} }
} }
public void onRemove(String mainCommand, CMDSender sender, @Untrusted Arguments arguments) { public void onRemove(CMDSender sender, @Untrusted Arguments arguments) {
@Untrusted String identifier = arguments.concatenate(" "); @Untrusted String identifier = arguments.concatenate(" ");
UUID playerUUID = identifiers.getPlayerUUID(identifier); UUID playerUUID = identifiers.getPlayerUUID(identifier);
if (playerUUID == null) { if (playerUUID == null) {
@ -395,24 +341,9 @@ public class DatabaseCommands {
Database database = dbSystem.getDatabase(); Database database = dbSystem.getDatabase();
if (sender.supportsChatEvents()) { String prompt = locale.getString(CommandLang.CONFIRM_REMOVE_PLAYER_DB, playerUUID, database.getType().getName());
sender.buildMessage()
.addPart(colors.getMainColor() + locale.getString(CommandLang.CONFIRM_REMOVE_PLAYER_DB, playerUUID, database.getType().getName())).newLine()
.addPart(colors.getTertiaryColor() + locale.getString(CommandLang.CONFIRM))
.addPart("§2§l[\u2714]").command("/" + mainCommand + " accept").hover(locale.getString(CommandLang.CONFIRM_ACCEPT))
.addPart(" ")
.addPart("§4§l[\u2718]").command("/" + mainCommand + " cancel").hover(locale.getString(CommandLang.CONFIRM_DENY))
.send();
} else {
sender.buildMessage()
.addPart(colors.getMainColor() + locale.getString(CommandLang.CONFIRM_REMOVE_PLAYER_DB, playerUUID, database.getType().getName())).newLine()
.addPart(colors.getTertiaryColor() + locale.getString(CommandLang.CONFIRM)).addPart("§a/" + mainCommand + " accept")
.addPart(" ")
.addPart("§c/" + mainCommand + " cancel")
.send();
}
confirmation.confirm(sender, choice -> { confirmation.confirm(sender, prompt, choice -> {
if (Boolean.TRUE.equals(choice)) { if (Boolean.TRUE.equals(choice)) {
performRemoval(sender, database, playerUUID); performRemoval(sender, database, playerUUID);
} else { } else {
@ -463,7 +394,7 @@ public class DatabaseCommands {
public void onHotswap(CMDSender sender, @Untrusted Arguments arguments) { public void onHotswap(CMDSender sender, @Untrusted Arguments arguments) {
DBType toDB = arguments.get(0).flatMap(DBType::getForName) DBType toDB = arguments.get(0).flatMap(DBType::getForName)
.orElseThrow(() -> new IllegalArgumentException(locale.getString(CommandLang.FAIL_INCORRECT_DB, arguments.get(0).orElse("<MySQL/SQLite>")))); .orElseThrow(() -> new IllegalArgumentException(locale.getString(CommandLang.FAIL_INCORRECT_DB, arguments.get(0).orElse(SUPPORTED_DB_OPTIONS))));
try { try {
Database database = dbSystem.getActiveDatabaseByType(toDB); Database database = dbSystem.getActiveDatabaseByType(toDB);
@ -483,7 +414,7 @@ public class DatabaseCommands {
statusCommands.onReload(sender); statusCommands.onReload(sender);
} }
public void onOnlineConversion(String mainCommand, CMDSender sender, @Untrusted Arguments arguments) { public void onOnlineConversion(CMDSender sender, @Untrusted Arguments arguments) {
boolean removeOfflinePlayers = arguments.get(0) boolean removeOfflinePlayers = arguments.get(0)
.map("--remove_offline"::equals) .map("--remove_offline"::equals)
.orElse(false); .orElse(false);
@ -515,9 +446,8 @@ public class DatabaseCommands {
if (actualUUID == null) { if (actualUUID == null) {
offlineOnlyUsers++; offlineOnlyUsers++;
if (removeOfflinePlayers) transactions.add(new RemovePlayerTransaction(recordedUUID)); if (removeOfflinePlayers) transactions.add(new RemovePlayerTransaction(recordedUUID));
continue;
} }
if (recordedUUID == actualUUID) { if (actualUUID == null || recordedUUID.equals(actualUUID)) {
continue; continue;
} }
BaseUser alreadyExistingProfile = baseUsersByUUID.get(actualUUID); BaseUser alreadyExistingProfile = baseUsersByUUID.get(actualUUID);
@ -530,30 +460,16 @@ public class DatabaseCommands {
} }
} }
MessageBuilder messageBuilder = sender.buildMessage() MessageBuilder prompt = sender.buildMessage()
.addPart(colors.getMainColor() + "Moving to online-only UUIDs (irreversible):").newLine() .addPart(colors.getMainColor() + "Moving to online-only UUIDs (irreversible):").newLine()
.addPart(colors.getSecondaryColor() + " Total players in database: " + totalProfiles).newLine() .addPart(colors.getSecondaryColor() + " Total players in database: " + totalProfiles).newLine()
.addPart(colors.getSecondaryColor() + (removeOfflinePlayers ? "Removing (no online UUID): " : " Offline only (no online UUID): ") + offlineOnlyUsers).newLine() .addPart(colors.getSecondaryColor() + (removeOfflinePlayers ? "Removing (no online UUID): " : " Offline only (no online UUID): ") + offlineOnlyUsers).newLine()
.addPart(colors.getSecondaryColor() + " Moving to new UUID: " + move).newLine() .addPart(colors.getSecondaryColor() + " Moving to new UUID: " + move).newLine()
.addPart(colors.getSecondaryColor() + " Combining offline and online profiles: " + combine).newLine() .addPart(colors.getSecondaryColor() + " Combining offline and online profiles: " + combine).newLine()
.newLine() .newLine()
.addPart(colors.getSecondaryColor() + " Estimated online UUID players in database after: " + (totalProfiles - combine - offlineOnlyUsers) + (removeOfflinePlayers ? "" : " (+" + offlineOnlyUsers + " offline)")).newLine() .addPart(colors.getSecondaryColor() + " Estimated online UUID players in database after: " + (totalProfiles - combine - offlineOnlyUsers) + (removeOfflinePlayers ? "" : " (+" + offlineOnlyUsers + " offline)")).newLine();
.addPart(colors.getTertiaryColor() + locale.getString(CommandLang.CONFIRM));
if (sender.supportsChatEvents()) {
messageBuilder
.addPart("§2§l[\u2714]").command("/" + mainCommand + " accept").hover(locale.getString(CommandLang.CONFIRM_ACCEPT))
.addPart(" ")
.addPart("§4§l[\u2718]").command("/" + mainCommand + " cancel").hover(locale.getString(CommandLang.CONFIRM_DENY))
.send();
} else {
messageBuilder
.addPart(colors.getTertiaryColor() + locale.getString(CommandLang.CONFIRM)).addPart("§a/" + mainCommand + " accept")
.addPart(" ")
.addPart("§c/" + mainCommand + " cancel")
.send();
}
confirmation.confirm(sender, choice -> { confirmation.confirm(sender, prompt, choice -> {
if (Boolean.TRUE.equals(choice)) { if (Boolean.TRUE.equals(choice)) {
transactions.forEach(dbSystem.getDatabase()::executeTransaction); transactions.forEach(dbSystem.getDatabase()::executeTransaction);
dbSystem.getDatabase().executeTransaction(new Transaction() { dbSystem.getDatabase().executeTransaction(new Transaction() {

View File

@ -171,7 +171,7 @@ public class RegistrationCommands {
} }
} }
public void onUnregister(String mainCommand, CMDSender sender, @Untrusted Arguments arguments) { public void onUnregister(CMDSender sender, @Untrusted Arguments arguments) {
@Untrusted Optional<String> givenUsername = arguments.get(0).filter(arg -> sender.hasPermission(Permissions.UNREGISTER_OTHER)); @Untrusted Optional<String> givenUsername = arguments.get(0).filter(arg -> sender.hasPermission(Permissions.UNREGISTER_OTHER));
Database database = dbSystem.getDatabase(); Database database = dbSystem.getDatabase();
@ -195,24 +195,9 @@ public class RegistrationCommands {
throw new IllegalArgumentException(locale.getString(CommandLang.USER_NOT_LINKED)); throw new IllegalArgumentException(locale.getString(CommandLang.USER_NOT_LINKED));
} }
if (sender.supportsChatEvents()) { String prompt = locale.getString(CommandLang.CONFIRM_UNREGISTER, user.getUsername(), user.getLinkedTo());
sender.buildMessage()
.addPart(colors.getMainColor() + locale.getString(CommandLang.CONFIRM_UNREGISTER, user.getUsername(), user.getLinkedTo())).newLine()
.addPart(colors.getTertiaryColor() + locale.getString(CommandLang.CONFIRM))
.addPart("§2§l[\u2714]").command("/" + mainCommand + " accept").hover(locale.getString(CommandLang.CONFIRM_ACCEPT))
.addPart(" ")
.addPart("§4§l[\u2718]").command("/" + mainCommand + " cancel").hover(locale.getString(CommandLang.CONFIRM_DENY))
.send();
} else {
sender.buildMessage()
.addPart(colors.getMainColor() + locale.getString(CommandLang.CONFIRM_UNREGISTER, user.getUsername(), user.getLinkedTo())).newLine()
.addPart(colors.getTertiaryColor() + locale.getString(CommandLang.CONFIRM)).addPart("§a/" + mainCommand + " accept")
.addPart(" ")
.addPart("§c/" + mainCommand + " cancel")
.send();
}
confirmation.confirm(sender, choice -> { confirmation.confirm(sender, prompt, choice -> {
if (Boolean.TRUE.equals(choice)) { if (Boolean.TRUE.equals(choice)) {
try { try {
sender.send(colors.getMainColor() + locale.getString(CommandLang.UNREGISTER, user.getUsername())); sender.send(colors.getMainColor() + locale.getString(CommandLang.UNREGISTER, user.getUsername()));