mirror of
https://github.com/BentoBoxWorld/Challenges.git
synced 2024-11-26 12:35:24 +01:00
Implement Challenge Complete method. (#15)
Method currently will be available only via /[gamemode] challenges complete <challenge_id>.
This commit is contained in:
parent
a2f0765de1
commit
c702dd492b
@ -50,7 +50,9 @@ public class ChallengesCommand extends CompositeCommand
|
|||||||
public void setup()
|
public void setup()
|
||||||
{
|
{
|
||||||
this.setPermission(CHALLENGE_COMMAND);
|
this.setPermission(CHALLENGE_COMMAND);
|
||||||
this.setParametersHelp("challenges.commands.user.parameters");
|
this.setParametersHelp("challenges.commands.user.main.parameters");
|
||||||
this.setDescription("challenges.commands.user.description");
|
this.setDescription("challenges.commands.user.main.description");
|
||||||
|
|
||||||
|
new CompleteChallengeCommand(this.getAddon(), this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -40,8 +40,8 @@ public class ChallengesUserCommand extends CompositeCommand
|
|||||||
{
|
{
|
||||||
this.setOnlyPlayer(true);
|
this.setOnlyPlayer(true);
|
||||||
this.setPermission("challenges");
|
this.setPermission("challenges");
|
||||||
this.setParametersHelp("challenges.commands.user.parameters");
|
this.setParametersHelp("challenges.commands.user.main.parameters");
|
||||||
this.setDescription("challenges.commands.user.description");
|
this.setDescription("challenges.commands.user.main.description");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -0,0 +1,148 @@
|
|||||||
|
package world.bentobox.challenges.commands;
|
||||||
|
|
||||||
|
|
||||||
|
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.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 CompleteChallengeCommand extends CompositeCommand
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Default constructor for Composite Command.
|
||||||
|
* @param addon Challenges addon.
|
||||||
|
* @param cmd Parent Command.
|
||||||
|
*/
|
||||||
|
public CompleteChallengeCommand(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.setOnlyPlayer(true);
|
||||||
|
this.setPermission("complete");
|
||||||
|
this.setParametersHelp("challenges.commands.user.complete.parameters");
|
||||||
|
this.setDescription("challenges.commands.user.complete.description");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public boolean execute(User user, String label, List<String> args)
|
||||||
|
{
|
||||||
|
if (args.isEmpty())
|
||||||
|
{
|
||||||
|
user.sendMessage("challenges.errors.no-name");
|
||||||
|
this.showHelp(this, user);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
else if (!args.get(0).isEmpty())
|
||||||
|
{
|
||||||
|
// Add world name back at the start
|
||||||
|
String challengeName = Util.getWorld(this.getWorld()).getName() + "_" + args.get(0);
|
||||||
|
Challenge challenge = this.addon.getChallengesManager().getChallenge(challengeName);
|
||||||
|
|
||||||
|
if (challenge != null)
|
||||||
|
{
|
||||||
|
return TryToComplete.complete(this.addon,
|
||||||
|
user,
|
||||||
|
challenge,
|
||||||
|
this.getWorld(),
|
||||||
|
this.getTopLabel(),
|
||||||
|
this.getPermissionPrefix());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
user.sendMessage("challenges.errors.unknown-challenge");
|
||||||
|
this.showHelp(this, user);
|
||||||
|
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.
|
||||||
|
|
||||||
|
this.challenges.forEach(challenge -> {
|
||||||
|
returnList.addAll(Util.tabLimit(Collections.singletonList(challenge), lastString));
|
||||||
|
});
|
||||||
|
|
||||||
|
break;
|
||||||
|
// TODO: not implemented YET
|
||||||
|
// case 4:
|
||||||
|
// // Suggest a number of completions.
|
||||||
|
// if (lastString.isEmpty() || lastString.matches("[0-9]*"))
|
||||||
|
// {
|
||||||
|
// returnList.addAll(Util.tabLimit(Collections.singletonList("<number>"), lastString));
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// break;
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
returnList.addAll(Util.tabLimit(Collections.singletonList("help"), lastString));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return Optional.of(returnList);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ---------------------------------------------------------------------
|
||||||
|
// 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;
|
||||||
|
}
|
@ -43,8 +43,12 @@ challenges:
|
|||||||
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.'
|
||||||
user:
|
user:
|
||||||
description: 'This method opens Challenges GUI.'
|
main:
|
||||||
parameters: ''
|
description: 'This method opens Challenges GUI.'
|
||||||
|
parameters: ''
|
||||||
|
complete:
|
||||||
|
description: 'This method allows to complete challenge without GUI.'
|
||||||
|
parameters: '<challenge_id>'
|
||||||
gui:
|
gui:
|
||||||
title:
|
title:
|
||||||
admin:
|
admin:
|
||||||
|
Loading…
Reference in New Issue
Block a user