Skip to content

Commit

Permalink
Update trust command flow
Browse files Browse the repository at this point in the history
  • Loading branch information
pop4959 committed Feb 12, 2024
1 parent 3528ff5 commit 206eedc
Show file tree
Hide file tree
Showing 3 changed files with 98 additions and 102 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -95,25 +95,15 @@ public void execute(CommandSender sender, Arguments arguments) {
editFuture.thenAccept(source -> SchedulerUtil.schedule(plugin, player, () -> {
if (source != null) {
boltPlayer.getModifications().put(source, access.type());
if (boltPlayer.isTrusting() && !boltPlayer.isTrustingSilently()) {
BoltComponents.sendMessage(
player,
adding ? Translation.TRUST_ADD : Translation.TRUST_REMOVE,
Placeholder.component(Translation.Placeholder.SOURCE_TYPE, Component.text(source.getType())),
Placeholder.component(Translation.Placeholder.SOURCE_IDENTIFIER, Component.text(finalIdentifier))
);
}
}
}));
}
if (!boltPlayer.isTrusting()) {
BoltComponents.sendMessage(
player,
Translation.CLICK_ACTION,
plugin.isUseActionBar(),
Placeholder.component(Translation.Placeholder.ACTION, BoltComponents.resolveTranslation(Translation.EDIT, player))
);
}
BoltComponents.sendMessage(
player,
Translation.CLICK_ACTION,
plugin.isUseActionBar(),
Placeholder.component(Translation.Placeholder.ACTION, BoltComponents.resolveTranslation(Translation.EDIT, player))
);
}

@Override
Expand Down
162 changes: 92 additions & 70 deletions bukkit/src/main/java/org/popcraft/bolt/command/impl/TrustCommand.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,15 @@
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.popcraft.bolt.BoltPlugin;
import org.popcraft.bolt.access.Access;
import org.popcraft.bolt.access.AccessList;
import org.popcraft.bolt.command.Arguments;
import org.popcraft.bolt.command.BoltCommand;
import org.popcraft.bolt.lang.Translation;
import org.popcraft.bolt.source.Source;
import org.popcraft.bolt.util.Action;
import org.popcraft.bolt.source.SourceType;
import org.popcraft.bolt.source.SourceTypes;
import org.popcraft.bolt.util.BoltComponents;
import org.popcraft.bolt.util.BoltPlayer;
import org.popcraft.bolt.util.Profiles;
import org.popcraft.bolt.util.Protections;
import org.popcraft.bolt.util.SchedulerUtil;
Expand All @@ -23,6 +24,7 @@
import java.util.Map;
import java.util.Objects;
import java.util.UUID;
import java.util.concurrent.CompletableFuture;

public class TrustCommand extends BoltCommand {
public TrustCommand(BoltPlugin plugin) {
Expand All @@ -36,82 +38,82 @@ public void execute(CommandSender sender, Arguments arguments) {
return;
}
final String action = arguments.next();
if ("list".equals(action)) {
final AccessList accessList = plugin.getBolt().getStore().loadAccessList(player.getUniqueId()).join();
final Map<String, String> accessMap = accessList == null ? new HashMap<>() : accessList.getAccess();
BoltComponents.sendMessage(
player,
Translation.INFO_SELF,
Placeholder.component(Translation.Placeholder.ACCESS_LIST_SIZE, Component.text(accessMap.size())),
Placeholder.component(Translation.Placeholder.ACCESS_LIST, Protections.accessList(accessMap, sender))
);
} else if ("add".equals(action) || "remove".equals(action)) {
if (arguments.remaining() < 1) {
if ("add".equalsIgnoreCase(action) || "remove".equalsIgnoreCase(action)) {
if (arguments.remaining() < 2) {
shortHelp(sender, arguments);
return;
}
final boolean adding = "add".equals(action);
final String target = arguments.next();
final UUID uuid = player.getUniqueId();
final AccessList accessList = Objects.requireNonNullElse(plugin.getBolt().getStore().loadAccessList(uuid).join(), new AccessList(uuid, new HashMap<>()));
Profiles.findOrLookupProfileByName(target).thenAccept(playerProfile -> SchedulerUtil.schedule(plugin, sender, () -> {
if (!playerProfile.complete()) {
BoltComponents.sendMessage(
sender,
Translation.PLAYER_NOT_FOUND,
Placeholder.component(Translation.Placeholder.PLAYER, Component.text(target))
);
return;
}
final Source source = Source.player(playerProfile.uuid());
if (adding) {
accessList.getAccess().put(source.toString(), plugin.getDefaultAccessType());
} else {
accessList.getAccess().remove(source.toString());
}
plugin.getBolt().getStore().saveAccessList(accessList);
BoltComponents.sendMessage(sender, Translation.TRUST_EDITED);
}));
} else if ("confirm".equals(action)) {
final BoltPlayer boltPlayer = plugin.player(player);
final Action playerAction = boltPlayer.getAction();
final boolean trusting = boltPlayer.isTrusting();
if (playerAction == null || !Action.Type.EDIT.equals(playerAction.getType()) || !trusting) {
final String command = trusting ? "/bolt modify" : "/bolt trust";
final boolean adding = "add".equalsIgnoreCase(action);
final String sourceTypeName = arguments.next().toLowerCase();
final SourceType sourceType = plugin.getBolt().getSourceTypeRegistry().getSourceByName(sourceTypeName).orElse(null);
if (sourceType == null || !plugin.getBolt().getSourceTypeRegistry().sourceTypes().contains(sourceType)) {
BoltComponents.sendMessage(
sender,
Translation.TRUST_EDITED_FAILED,
Placeholder.component(Translation.Placeholder.COMMAND, Component.text(command))
Translation.EDIT_SOURCE_INVALID,
Placeholder.component(Translation.Placeholder.SOURCE_TYPE, Component.text(sourceTypeName))
);
return;
}
final UUID uuid = player.getUniqueId();
final AccessList accessList = Objects.requireNonNullElse(plugin.getBolt().getStore().loadAccessList(uuid).join(), new AccessList(uuid, new HashMap<>()));
boltPlayer.consumeModifications().forEach((source, type) -> {
if (Boolean.parseBoolean(playerAction.getData())) {
accessList.getAccess().put(source.toString(), type);
} else {
accessList.getAccess().remove(source.toString());
}
});
plugin.getBolt().getStore().saveAccessList(accessList);
BoltComponents.sendMessage(sender, Translation.TRUST_EDITED);
boltPlayer.clearAction();
boltPlayer.setTrusting(false);
boltPlayer.setTrustingSilently(false);
} else {
final boolean silent = "silent".equals(action);
final BoltPlayer boltPlayer = plugin.player(player);
boltPlayer.setTrusting(true);
boltPlayer.setTrustingSilently(silent);
if (!silent) {
if (sourceType.restricted() && !sender.hasPermission("bolt.type.source.%s".formatted(sourceType.name()))) {
BoltComponents.sendMessage(sender, Translation.EDIT_SOURCE_NO_PERMISSION);
return;
}
final String sourceIdentifier = arguments.next();
final String accessType = Objects.requireNonNullElse(arguments.next(), plugin.getDefaultAccessType()).toLowerCase();
final Access access = plugin.getBolt().getAccessRegistry().getAccessByType(accessType).orElse(null);
if (access == null) {
BoltComponents.sendMessage(
sender,
Translation.TRUST,
Placeholder.component(Translation.Placeholder.COMMAND, Component.text("/bolt modify")),
Placeholder.component(Translation.Placeholder.COMMAND_2, Component.text("/bolt trust confirm"))
Translation.EDIT_ACCESS_INVALID,
Placeholder.component(Translation.Placeholder.ACCESS_TYPE, Component.text(accessType))
);
return;
}
if (access.restricted() && !sender.hasPermission("bolt.type.access.%s".formatted(access.type()))) {
BoltComponents.sendMessage(sender, Translation.EDIT_ACCESS_NO_PERMISSION);
return;
}
final UUID uuid = player.getUniqueId();
final AccessList accessList = Objects.requireNonNullElse(plugin.getBolt().getStore().loadAccessList(uuid).join(), new AccessList(uuid, new HashMap<>()));
final CompletableFuture<Source> editFuture;
if (SourceTypes.PLAYER.equals(sourceType.name())) {
editFuture = Profiles.findOrLookupProfileByName(sourceIdentifier).thenApply(profile -> {
if (profile.uuid() != null) {
return Source.player(profile.uuid());
} else {
SchedulerUtil.schedule(plugin, player, () -> BoltComponents.sendMessage(
player,
Translation.PLAYER_NOT_FOUND,
Placeholder.component(Translation.Placeholder.PLAYER, Component.text(sourceIdentifier))
));
return null;
}
});
} else if (SourceTypes.PASSWORD.equals(sourceType.name())) {
editFuture = CompletableFuture.completedFuture(Source.password(sourceIdentifier));
} else {
editFuture = CompletableFuture.completedFuture(Source.of(sourceType.name(), sourceIdentifier));
}
editFuture.thenAccept(source -> SchedulerUtil.schedule(plugin, player, () -> {
if (source != null) {
if (adding) {
accessList.getAccess().put(source.toString(), plugin.getDefaultAccessType());
} else {
accessList.getAccess().remove(source.toString());
}
plugin.getBolt().getStore().saveAccessList(accessList);
BoltComponents.sendMessage(sender, Translation.TRUST_EDITED);
}
}));
} else {
final AccessList accessList = plugin.getBolt().getStore().loadAccessList(player.getUniqueId()).join();
final Map<String, String> accessMap = accessList == null ? new HashMap<>() : accessList.getAccess();
BoltComponents.sendMessage(
player,
Translation.INFO_SELF,
Placeholder.component(Translation.Placeholder.ACCESS_LIST_SIZE, Component.text(accessMap.size())),
Placeholder.component(Translation.Placeholder.ACCESS_LIST, Protections.accessList(accessMap, sender))
);
}
}

Expand All @@ -122,11 +124,31 @@ public List<String> suggestions(CommandSender sender, Arguments arguments) {
}
final String subcommand = arguments.next();
if (arguments.remaining() == 0) {
return List.of("list", "add", "remove", "confirm");
return List.of("add", "remove");
}
final String sourceType = arguments.next();
if (arguments.remaining() == 0) {
return plugin.getBolt().getSourceTypeRegistry().sourceTypes().stream()
.filter(type -> !type.restricted() || sender.hasPermission("bolt.type.source.%s".formatted(type.name())))
.map(SourceType::name)
.toList();
}
arguments.next();
if (arguments.remaining() == 0 && ("add".equals(subcommand) || "remove".equals(subcommand))) {
return plugin.getServer().getOnlinePlayers().stream().map(Player::getName).toList();
if (arguments.remaining() == 0) {
if (SourceTypes.PLAYER.equals(sourceType)) {
return plugin.getServer().getOnlinePlayers().stream().map(Player::getName).toList();
} else if (SourceTypes.GROUP.equals(sourceType) && sender instanceof final Player player) {
return plugin.getPlayersOwnedGroups(player);
} else {
return Collections.emptyList();
}
}
arguments.next();
if (arguments.remaining() == 0) {
return plugin.getBolt().getAccessRegistry().access().stream()
.filter(access -> !access.restricted() || sender.hasPermission("bolt.type.access.%s".formatted(access.type())))
.map(Access::type)
.toList();
}
return Collections.emptyList();
}
Expand All @@ -137,7 +159,7 @@ public void shortHelp(CommandSender sender, Arguments arguments) {
sender,
Translation.HELP_COMMAND_SHORT_TRUST,
Placeholder.component(Translation.Placeholder.COMMAND, Component.text("/bolt trust")),
Placeholder.component(Translation.Placeholder.LITERAL, Component.text("[list|add|remove|confirm]"))
Placeholder.component(Translation.Placeholder.LITERAL, Component.text("(add|remove)"))
);
}

Expand Down
16 changes: 0 additions & 16 deletions common/src/main/java/org/popcraft/bolt/util/BoltPlayer.java
Original file line number Diff line number Diff line change
Expand Up @@ -96,22 +96,6 @@ public Map<Source, String> consumeModifications() {
return modificationsCopy;
}

public boolean isTrusting() {
return trusting;
}

public void setTrusting(boolean trusting) {
this.trusting = trusting;
}

public boolean isTrustingSilently() {
return trustingSilently;
}

public void setTrustingSilently(boolean trustingSilently) {
this.trustingSilently = trustingSilently;
}

public boolean isLockNil() {
return lockNil;
}
Expand Down

0 comments on commit 206eedc

Please sign in to comment.