mirror of
https://github.com/BentoBoxWorld/Challenges.git
synced 2024-11-24 11:36:53 +01:00
Add ability for admins to complete challenge without gui. (#136)
This commit is contained in:
parent
ca5ff504f0
commit
4527216dc2
@ -37,6 +37,9 @@ public class Challenges extends CompositeCommand
|
|||||||
new ImportCommand(getAddon(), this);
|
new ImportCommand(getAddon(), this);
|
||||||
// Defaults processing command
|
// Defaults processing command
|
||||||
new DefaultsCommand(this.getAddon(), this);
|
new DefaultsCommand(this.getAddon(), this);
|
||||||
|
|
||||||
|
// Defaults processing command
|
||||||
|
new CompleteCommand(this.getAddon(), this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -0,0 +1,208 @@
|
|||||||
|
package world.bentobox.challenges.commands.admin;
|
||||||
|
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
import world.bentobox.bentobox.api.addons.Addon;
|
||||||
|
import world.bentobox.bentobox.api.commands.CompositeCommand;
|
||||||
|
import world.bentobox.bentobox.api.localization.TextVariables;
|
||||||
|
import world.bentobox.bentobox.api.user.User;
|
||||||
|
import world.bentobox.bentobox.util.Util;
|
||||||
|
import world.bentobox.challenges.ChallengesAddon;
|
||||||
|
import world.bentobox.challenges.database.object.Challenge;
|
||||||
|
import world.bentobox.challenges.tasks.TryToComplete;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This command allows to complete challenges without a gui.
|
||||||
|
*/
|
||||||
|
public class CompleteCommand extends CompositeCommand
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Default constructor for Composite Command.
|
||||||
|
* @param addon Challenges addon.
|
||||||
|
* @param cmd Parent Command.
|
||||||
|
*/
|
||||||
|
public CompleteCommand(Addon addon, CompositeCommand cmd)
|
||||||
|
{
|
||||||
|
super(addon, cmd, "complete");
|
||||||
|
this.addon = (ChallengesAddon) addon;
|
||||||
|
|
||||||
|
if (this.addon.getChallengesManager().hasAnyChallengeData(this.getWorld()))
|
||||||
|
{
|
||||||
|
// Strip world name from all challenges
|
||||||
|
this.challenges = this.addon.getChallengesManager().getAllChallengesNames(this.getWorld()).stream().
|
||||||
|
map(challenge -> challenge.replaceFirst(Util.getWorld(this.getWorld()).getName() + "_", "")).
|
||||||
|
collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void setup()
|
||||||
|
{
|
||||||
|
this.setPermission("complete");
|
||||||
|
this.setParametersHelp("challenges.commands.admin.complete.parameters");
|
||||||
|
this.setDescription("challenges.commands.admin.complete.description");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public boolean execute(User user, String label, List<String> args)
|
||||||
|
{
|
||||||
|
if (args.isEmpty())
|
||||||
|
{
|
||||||
|
if (user.isPlayer())
|
||||||
|
{
|
||||||
|
user.sendMessage("challenges.errors.no-name");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
this.addon.logError("Missing parameters");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (args.size() < 2)
|
||||||
|
{
|
||||||
|
if (user.isPlayer())
|
||||||
|
{
|
||||||
|
user.sendMessage("challenges.errors.missing-arguments");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
this.addon.logError("Missing parameters");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (!args.get(1).isEmpty())
|
||||||
|
{
|
||||||
|
UUID targetUUID = this.getPlayers().getUUID(args.get(0));
|
||||||
|
|
||||||
|
if (targetUUID == null)
|
||||||
|
{
|
||||||
|
if (user.isPlayer())
|
||||||
|
{
|
||||||
|
user.sendMessage("general.errors.unknown-player",
|
||||||
|
TextVariables.NAME,
|
||||||
|
args.get(0));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
this.addon.logError("Unknonw player name " + args.get(0));
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add world name back at the start
|
||||||
|
String challengeName = Util.getWorld(this.getWorld()).getName() + "_" + args.get(1);
|
||||||
|
Challenge challenge = this.addon.getChallengesManager().getChallenge(challengeName);
|
||||||
|
|
||||||
|
if (challenge != null)
|
||||||
|
{
|
||||||
|
if (!this.addon.getChallengesManager().isChallengeComplete(targetUUID, this.getWorld(), challenge))
|
||||||
|
{
|
||||||
|
this.addon.getChallengesManager().setChallengeComplete(
|
||||||
|
targetUUID, this.getWorld(), challenge, user.getUniqueId());
|
||||||
|
|
||||||
|
if (user.isPlayer())
|
||||||
|
{
|
||||||
|
user.sendMessage("challenges.messages.admin.completed",
|
||||||
|
"[name]", challenge.getFriendlyName(),
|
||||||
|
"[player]", User.getInstance(targetUUID).getName());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
this.addon.log("Challenge " + challenge.getFriendlyName() + " completed for player " +
|
||||||
|
User.getInstance(targetUUID).getName());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (user.isPlayer())
|
||||||
|
{
|
||||||
|
user.sendMessage("challenges.messages.admin.already-completed");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
this.addon.log("Challenge was already completed");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (user.isPlayer())
|
||||||
|
{
|
||||||
|
user.sendMessage("challenges.errors.unknown-challenge");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
this.addon.logError("Unknown challenge " + args.get(1));
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
this.showHelp(this, user);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Optional<List<String>> tabComplete(User user, String alias, List<String> args)
|
||||||
|
{
|
||||||
|
String lastString = args.get(args.size() - 1);
|
||||||
|
|
||||||
|
final List<String> returnList = new ArrayList<>();
|
||||||
|
final int size = args.size();
|
||||||
|
|
||||||
|
switch (size)
|
||||||
|
{
|
||||||
|
case 3:
|
||||||
|
// Create suggestions with all challenges that is available for users.
|
||||||
|
|
||||||
|
returnList.addAll(Util.getOnlinePlayerList(user));
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
// Create suggestions with all challenges that is available for users.
|
||||||
|
this.challenges.forEach(challenge -> {
|
||||||
|
returnList.addAll(Collections.singletonList(challenge));
|
||||||
|
});
|
||||||
|
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
returnList.addAll(Collections.singletonList("help"));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return Optional.of(Util.tabLimit(returnList, lastString));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ---------------------------------------------------------------------
|
||||||
|
// Section: Variables
|
||||||
|
// ---------------------------------------------------------------------
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Variable that holds challenge addon. Single casting.
|
||||||
|
*/
|
||||||
|
private ChallengesAddon addon;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This list contains all challenge IDs without a world name.
|
||||||
|
*/
|
||||||
|
private List<String> challenges;
|
||||||
|
}
|
@ -30,6 +30,9 @@ challenges:
|
|||||||
defaults-generate:
|
defaults-generate:
|
||||||
description: 'This method allows to export existing challenges into default.json file.'
|
description: 'This method allows to export existing challenges into default.json file.'
|
||||||
parameters: '[overwrite] - allows to overwrite existing file.'
|
parameters: '[overwrite] - allows to overwrite existing file.'
|
||||||
|
complete:
|
||||||
|
description: 'This command allows to complete challenge for player without GUI.'
|
||||||
|
parameters: '<player> <challenge_id>'
|
||||||
user:
|
user:
|
||||||
main:
|
main:
|
||||||
description: 'This method opens Challenges GUI.'
|
description: 'This method opens Challenges GUI.'
|
||||||
@ -330,6 +333,8 @@ challenges:
|
|||||||
you-added: 'You added one [thing] to the challenge'
|
you-added: 'You added one [thing] to the challenge'
|
||||||
challenge-created: '[challenge]&r created!'
|
challenge-created: '[challenge]&r created!'
|
||||||
complete-wipe: '&cHope you have backups, as you just empty all Challenges Addon databases!'
|
complete-wipe: '&cHope you have backups, as you just empty all Challenges Addon databases!'
|
||||||
|
completed: '&2You complted challenge [name] for [player]!'
|
||||||
|
already-completed: '&2This challenge was already completed!'
|
||||||
you-completed-challenge: '&2You completed the [value] &r&2challenge!'
|
you-completed-challenge: '&2You completed the [value] &r&2challenge!'
|
||||||
you-repeated-challenge: '&2You repeated the [value] &r&2challenge!'
|
you-repeated-challenge: '&2You repeated the [value] &r&2challenge!'
|
||||||
you-repeated-challenge-multiple: '&2You repeated the [value] &r&2challenge [count] times!'
|
you-repeated-challenge-multiple: '&2You repeated the [value] &r&2challenge [count] times!'
|
||||||
@ -376,6 +381,7 @@ challenges:
|
|||||||
no-challenges: '&cChallenges are not implemented in current world!'
|
no-challenges: '&cChallenges are not implemented in current world!'
|
||||||
no-challenges-admin: '&cChallenges are not implemented in current world! You should use &5/[label] challenges &cto adding them!'
|
no-challenges-admin: '&cChallenges are not implemented in current world! You should use &5/[label] challenges &cto adding them!'
|
||||||
missing-level: '&cChallenge Level [level] is not defined in database. It may case some errors!'
|
missing-level: '&cChallenge Level [level] is not defined in database. It may case some errors!'
|
||||||
|
missing-arguments: '&cCommand is missing arguments.'
|
||||||
protection:
|
protection:
|
||||||
flags:
|
flags:
|
||||||
CHALLENGES_ISLAND_PROTECTION:
|
CHALLENGES_ISLAND_PROTECTION:
|
||||||
|
@ -30,6 +30,9 @@ challenges:
|
|||||||
defaults-generate:
|
defaults-generate:
|
||||||
description: 'Šī metode izveidos failu defaults.json, kas saturēs šīs pasaules uzdevumus un līmeņus.|Parametrs overwrite ļauj pārrakstīt pāri esošajam failam.'
|
description: 'Šī metode izveidos failu defaults.json, kas saturēs šīs pasaules uzdevumus un līmeņus.|Parametrs overwrite ļauj pārrakstīt pāri esošajam failam.'
|
||||||
parameters: '[overwrite]'
|
parameters: '[overwrite]'
|
||||||
|
complete:
|
||||||
|
description: 'Šī komanda ļauj pabeigt uzdevumu spēlētājam.'
|
||||||
|
parameters: '<player> <challenge_id>'
|
||||||
user:
|
user:
|
||||||
main:
|
main:
|
||||||
description: 'Šī metode atver Uzdevumu logu.'
|
description: 'Šī metode atver Uzdevumu logu.'
|
||||||
@ -328,6 +331,8 @@ challenges:
|
|||||||
admin:
|
admin:
|
||||||
challenge-created: '[challenge]&r izveidots!'
|
challenge-created: '[challenge]&r izveidots!'
|
||||||
complete-wipe: '&cCerams, ka tev ir saglabātas rezerves kopijas, jo tu tikko iztīrīji visas šī papildinājuma datubāzes!'
|
complete-wipe: '&cCerams, ka tev ir saglabātas rezerves kopijas, jo tu tikko iztīrīji visas šī papildinājuma datubāzes!'
|
||||||
|
completed: '&2Tu pabeidzi uzdevumu [name] [player] vietā!'
|
||||||
|
already-completed: '&2Šīs uzdevums jau bija izpildīts!'
|
||||||
you-completed-challenge: '&2Tu izpildīji [value] &r&2uzdevumu!'
|
you-completed-challenge: '&2Tu izpildīji [value] &r&2uzdevumu!'
|
||||||
you-repeated-challenge: '&2Tu atkārtoji [value] &r&2uzdevumu!'
|
you-repeated-challenge: '&2Tu atkārtoji [value] &r&2uzdevumu!'
|
||||||
you-repeated-challenge-multiple: '&2Tu atkārtoji [value] &r&2uzdevumu [count] reizes!'
|
you-repeated-challenge-multiple: '&2Tu atkārtoji [value] &r&2uzdevumu [count] reizes!'
|
||||||
@ -374,6 +379,7 @@ challenges:
|
|||||||
no-challenges: '&cŠajā pasaulē nav izveidoti uzdevumi!'
|
no-challenges: '&cŠajā pasaulē nav izveidoti uzdevumi!'
|
||||||
no-challenges-admin: '&cŠajā pasaulē nav izveidoti uzdevumi! Izmanot komandu &5/[label] challenges&c, lai tos pievienotu!'
|
no-challenges-admin: '&cŠajā pasaulē nav izveidoti uzdevumi! Izmanot komandu &5/[label] challenges&c, lai tos pievienotu!'
|
||||||
missing-level: '&cLīmenis [level] nav definēts datubāzē. Tas var radīt problēmas!'
|
missing-level: '&cLīmenis [level] nav definēts datubāzē. Tas var radīt problēmas!'
|
||||||
|
missing-arguments: '&cKomandai trūkst parametri.'
|
||||||
protection:
|
protection:
|
||||||
flags:
|
flags:
|
||||||
CHALLENGES_ISLAND_PROTECTION:
|
CHALLENGES_ISLAND_PROTECTION:
|
||||||
|
Loading…
Reference in New Issue
Block a user