Skip to content

Commit

Permalink
Added cleartop command to remove players from top ten
Browse files Browse the repository at this point in the history
  • Loading branch information
tastybento committed Jul 22, 2023
1 parent d0390a5 commit 08bd513
Show file tree
Hide file tree
Showing 3 changed files with 113 additions and 0 deletions.
2 changes: 2 additions & 0 deletions src/main/java/world/bentobox/parkour/Parkour.java
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
import world.bentobox.bentobox.api.commands.island.DefaultPlayerCommand;
import world.bentobox.bentobox.api.configuration.Config;
import world.bentobox.bentobox.api.configuration.WorldSettings;
import world.bentobox.parkour.commands.ClearTopCommand;
import world.bentobox.parkour.commands.CoursesCommand;
import world.bentobox.parkour.commands.RemoveWarpCommand;
import world.bentobox.parkour.commands.SetWarpCommand;
Expand Down Expand Up @@ -61,6 +62,7 @@ public void setup()
new CoursesCommand(this);
new SetWarpCommand(this);
new RemoveWarpCommand(this);
new ClearTopCommand(this);
}
};

Expand Down
106 changes: 106 additions & 0 deletions src/main/java/world/bentobox/parkour/commands/ClearTopCommand.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
package world.bentobox.parkour.commands;

import java.util.List;
import java.util.Objects;
import java.util.Optional;
import java.util.UUID;

import org.eclipse.jdt.annotation.Nullable;

import world.bentobox.bentobox.api.commands.CompositeCommand;
import world.bentobox.bentobox.api.commands.ConfirmableCommand;
import world.bentobox.bentobox.api.localization.TextVariables;
import world.bentobox.bentobox.api.user.User;
import world.bentobox.bentobox.database.objects.Island;
import world.bentobox.bentobox.managers.RanksManager;
import world.bentobox.bentobox.util.Util;
import world.bentobox.parkour.Parkour;
import world.bentobox.parkour.ParkourManager;

/**
* Clears scores from the top ten
* @author tastybento
*
*/
public class ClearTopCommand extends ConfirmableCommand {

/**
* Target user to clear score
*/
private @Nullable UUID targetUUID;
private Parkour addon;

/**
* @param parent parent command
*/
public ClearTopCommand(CompositeCommand parent) {
super(parent, "cleartop");
}

@Override
public void setup() {
this.setPermission("parkour.cleartop");
setOnlyPlayer(true);
setDescription("parkour.commands.parkour.cleartop.description");
this.setParametersHelp(".commands.parkour.cleartop.parameters");
setConfigurableRankCommand();
this.setDefaultCommandRank(RanksManager.OWNER_RANK);
addon = getAddon();
}

@Override
public boolean canExecute(User user, String label, List<String> args) {
if (args.size() > 1) {
this.showHelp(this, user);
return false;
}
if (!getIslands().hasIsland(getWorld(), user) && !getIslands().inTeam(getWorld(), user.getUniqueId())) {
user.sendMessage("general.errors.no-island");
return false;
}
// Check rank to use command
Island island = getIslands().getIsland(getWorld(), user);
int rank = Objects.requireNonNull(island).getRank(user);
if (rank < island.getRankCommand(getUsage())) {
user.sendMessage("general.errors.insufficient-rank", TextVariables.RANK, user.getTranslation(getPlugin().getRanksManager().getRank(rank)));
return false;
}
// Check the name of the score to clear
if (args.size() == 1) {
// Get target
targetUUID = Util.getUUID(args.get(0));
if (targetUUID == null) {
user.sendMessage("general.errors.unknown-player", TextVariables.NAME, args.get(0));
return false;
}
}
return true;
}

@Override
public boolean execute(User user, String label, List<String> args) {
this.askConfirmation(user, () -> confirmed(user, label, args));
return true;
}

void confirmed(User user, String label, List<String> args) {
Island island = getIslands().getIsland(getWorld(), user);
if (island != null && targetUUID == null) {
addon.getPm().clearScores(island);
} else if (island != null && targetUUID != null) {
addon.getPm().removeScore(island, User.getInstance(targetUUID));
} else {
user.sendMessage("general.errors.no-island");
return;
}
user.sendMessage("general.success");
}

@Override
public Optional<List<String>> tabComplete(User user, String label, List<String> args) {
Island island = getIslands().getIsland(getWorld(), user);
return Optional.of(addon.getPm().getRankings(island, 10).keySet().stream().map(getAddon().getPlayers()::getName)
.filter(name -> !name.isBlank()).toList());
}

}
5 changes: 5 additions & 0 deletions src/main/resources/locales/en-US.yml
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,11 @@ parkour:
not-owner: '&c You are not the owner of your team!'
commands:
parkour:
courses:
description: show courses available to play and warp to
cleartop:
description: clear your course's top ten or remove a player's score from it
parameters: <player name>
setwarp:
description: sets the warp spot and makes your course public
removewarp:
Expand Down

0 comments on commit 08bd513

Please sign in to comment.