mirror of
https://github.com/BentoBoxWorld/Challenges.git
synced 2024-12-30 12:57:52 +01:00
Create Challenges Addon Request Handlers.
- Challenge Data Request handler - returns data map about requested challenge; - Level Data Request handler - returns data map about requested level; - Challenge List Request handler - returns list of challenges that operates in requested world; - Level List Request handler - returns list of levels that operates in requested world; - Completed Challenges Request handler - returns set of completed challenges for requested user in requested world.
This commit is contained in:
parent
ddd43d27e6
commit
dd1e689ace
@ -0,0 +1,106 @@
|
||||
package world.bentobox.challenges.handlers;
|
||||
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
|
||||
import world.bentobox.bentobox.api.addons.request.AddonRequestHandler;
|
||||
import world.bentobox.challenges.ChallengesAddon;
|
||||
import world.bentobox.challenges.database.object.Challenge;
|
||||
|
||||
|
||||
/**
|
||||
* This handler returns data for requested challenge.
|
||||
*/
|
||||
public class ChallengeDataRequestHandler extends AddonRequestHandler
|
||||
{
|
||||
|
||||
/**
|
||||
* Constructor creates a new ChallengesDataRequestHandler instance.
|
||||
*
|
||||
* @param addon of type ChallengesAddon
|
||||
*/
|
||||
public ChallengeDataRequestHandler(ChallengesAddon addon)
|
||||
{
|
||||
super("challenge-data");
|
||||
this.addon = addon;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param metaData Required meta data.
|
||||
* @return Map that returns information about challenges
|
||||
* @see AddonRequestHandler#handle(Map<String, Object>)
|
||||
*/
|
||||
@Override
|
||||
public Object handle(Map<String, Object> metaData)
|
||||
{
|
||||
/*
|
||||
What we need in the metaData:
|
||||
0. "challenge-name" -> String
|
||||
What we will return:
|
||||
- Empty Map if challenge is not given or not found
|
||||
- Map that contains information about given challenge:
|
||||
- uniqueId: the same id that was passed to this handler.
|
||||
- name: String object of display name for challenge.
|
||||
- icon: ItemStack object that represents challenge.
|
||||
- levelId: String object of levelId that this challenge is linked.
|
||||
- order: Integer object of order number for given challenge.
|
||||
- deployed: boolean object of deployment status.
|
||||
- description: List of strings that represents challenges description.
|
||||
- type: String object that represents challenges type.
|
||||
|
||||
- repeatable: boolean object of repeatable option.
|
||||
- maxTimes: Integer object that represents how many times challenge can be completed.
|
||||
*/
|
||||
|
||||
if (metaData == null ||
|
||||
metaData.isEmpty() ||
|
||||
metaData.get("challenge-name") == null ||
|
||||
!(metaData.get("challenge-name") instanceof String))
|
||||
{
|
||||
return Collections.emptyMap();
|
||||
}
|
||||
|
||||
Challenge challenge = this.addon.getChallengesManager().getChallenge((String) metaData.get("challenge-name"));
|
||||
|
||||
Map<String, Object> challengeDataMap;
|
||||
|
||||
if (challenge == null)
|
||||
{
|
||||
challengeDataMap = Collections.emptyMap();
|
||||
}
|
||||
else
|
||||
{
|
||||
challengeDataMap = new HashMap<>();
|
||||
|
||||
challengeDataMap.put("uniqueId", challenge.getUniqueId());
|
||||
challengeDataMap.put("name", challenge.getFriendlyName());
|
||||
challengeDataMap.put("icon", challenge.getIcon());
|
||||
challengeDataMap.put("levelId", challenge.getLevel());
|
||||
challengeDataMap.put("order", challenge.getOrder());
|
||||
challengeDataMap.put("deployed", challenge.isDeployed());
|
||||
challengeDataMap.put("description", challenge.getDescription());
|
||||
challengeDataMap.put("type", challenge.getChallengeType().toString());
|
||||
|
||||
challengeDataMap.put("repeatable", challenge.isRepeatable());
|
||||
challengeDataMap.put("maxTimes", challenge.isRepeatable() ? challenge.getMaxTimes() : 1);
|
||||
|
||||
}
|
||||
|
||||
return challengeDataMap;
|
||||
}
|
||||
|
||||
|
||||
// ---------------------------------------------------------------------
|
||||
// Section: Variables
|
||||
// ---------------------------------------------------------------------
|
||||
|
||||
|
||||
/**
|
||||
* Variable stores challenges addon.
|
||||
*/
|
||||
private ChallengesAddon addon;
|
||||
}
|
@ -0,0 +1,66 @@
|
||||
package world.bentobox.challenges.handlers;
|
||||
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import java.util.Collections;
|
||||
import java.util.Map;
|
||||
|
||||
import world.bentobox.bentobox.api.addons.request.AddonRequestHandler;
|
||||
import world.bentobox.challenges.ChallengesAddon;
|
||||
|
||||
|
||||
/**
|
||||
* This handler returns all challenges that is operating in given world.
|
||||
*/
|
||||
public class ChallengeListRequestHandler extends AddonRequestHandler
|
||||
{
|
||||
/**
|
||||
* Constructor creates a new CompletedChallengesRequestHandler instance.
|
||||
*
|
||||
* @param addon of type ChallengesAddon
|
||||
*/
|
||||
public ChallengeListRequestHandler(ChallengesAddon addon)
|
||||
{
|
||||
super("challenge-list");
|
||||
this.addon = addon;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param metaData Required meta data.
|
||||
* @return Set of strings that contains completed challenges.
|
||||
* @see AddonRequestHandler#handle(Map <String, Object>)
|
||||
*/
|
||||
@Override
|
||||
public Object handle(Map<String, Object> metaData)
|
||||
{
|
||||
/*
|
||||
What we need in the metaData:
|
||||
0. "world-name" -> String
|
||||
What we will return:
|
||||
- List of challenges in given world.
|
||||
*/
|
||||
|
||||
if (metaData == null ||
|
||||
metaData.isEmpty() ||
|
||||
metaData.get("world-name") == null ||
|
||||
!(metaData.get("world-name") instanceof String) ||
|
||||
Bukkit.getWorld((String) metaData.get("world-name")) == null)
|
||||
{
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
return this.addon.getChallengesManager().getAllChallengesNames(Bukkit.getWorld((String) metaData.get("world-name")));
|
||||
}
|
||||
|
||||
|
||||
// ---------------------------------------------------------------------
|
||||
// Section: Variables
|
||||
// ---------------------------------------------------------------------
|
||||
|
||||
|
||||
/**
|
||||
* Variable stores challenges addon.
|
||||
*/
|
||||
private ChallengesAddon addon;
|
||||
}
|
@ -0,0 +1,80 @@
|
||||
package world.bentobox.challenges.handlers;
|
||||
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.World;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import world.bentobox.bentobox.api.addons.request.AddonRequestHandler;
|
||||
import world.bentobox.challenges.ChallengesAddon;
|
||||
import world.bentobox.challenges.ChallengesManager;
|
||||
|
||||
|
||||
/**
|
||||
* This Request Handler returns completed challenges for user in given world.
|
||||
*/
|
||||
public class CompletedChallengesRequestHandler extends AddonRequestHandler
|
||||
{
|
||||
|
||||
/**
|
||||
* Constructor creates a new CompletedChallengesRequestHandler instance.
|
||||
*
|
||||
* @param addon of type ChallengesAddon
|
||||
*/
|
||||
public CompletedChallengesRequestHandler(ChallengesAddon addon)
|
||||
{
|
||||
super("completed-challenges");
|
||||
this.addon = addon;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param metaData Required meta data.
|
||||
* @return Set of strings that contains completed challenges.
|
||||
* @see AddonRequestHandler#handle(Map<String, Object>)
|
||||
*/
|
||||
@Override
|
||||
public Object handle(Map<String, Object> metaData)
|
||||
{
|
||||
/*
|
||||
What we need in the metaData:
|
||||
0. "player" -> UUID
|
||||
1. "world-name" -> String
|
||||
What we will return:
|
||||
- Empty Set if player or given world is not valid.
|
||||
- Set of completed challenges in given world (or empty list if user haven't completed any challenge)
|
||||
*/
|
||||
|
||||
if (metaData == null ||
|
||||
metaData.isEmpty() ||
|
||||
metaData.get("world-name") == null ||
|
||||
!(metaData.get("world-name") instanceof String) ||
|
||||
metaData.get("player") == null ||
|
||||
!(metaData.get("player") instanceof UUID) ||
|
||||
Bukkit.getWorld((String) metaData.get("world-name")) == null)
|
||||
{
|
||||
return Collections.emptySet();
|
||||
}
|
||||
|
||||
World world = Bukkit.getWorld((String) metaData.get("world-name"));
|
||||
UUID player = (UUID) metaData.get("player");
|
||||
|
||||
ChallengesManager manager = this.addon.getChallengesManager();
|
||||
|
||||
return manager.getAllChallengesNames(world).stream().
|
||||
filter(challenge -> manager.isChallengeComplete(player, world, challenge)).
|
||||
collect(Collectors.toSet());
|
||||
}
|
||||
|
||||
|
||||
// ---------------------------------------------------------------------
|
||||
// Section: Variables
|
||||
// ---------------------------------------------------------------------
|
||||
|
||||
|
||||
/**
|
||||
* Variable stores challenges addon.
|
||||
*/
|
||||
private ChallengesAddon addon;
|
||||
}
|
@ -0,0 +1,98 @@
|
||||
package world.bentobox.challenges.handlers;
|
||||
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import world.bentobox.bentobox.api.addons.request.AddonRequestHandler;
|
||||
import world.bentobox.challenges.ChallengesAddon;
|
||||
import world.bentobox.challenges.database.object.ChallengeLevel;
|
||||
|
||||
|
||||
/**
|
||||
* This handler returns Data map of requested level.
|
||||
*/
|
||||
public class LevelDataRequestHandler extends AddonRequestHandler
|
||||
{
|
||||
/**
|
||||
* Constructor creates a new LevelDataRequestHandler instance.
|
||||
*
|
||||
* @param addon of type ChallengesAddon
|
||||
*/
|
||||
public LevelDataRequestHandler(ChallengesAddon addon)
|
||||
{
|
||||
super("level-data");
|
||||
this.addon = addon;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param metaData Required meta data.
|
||||
* @return Map that returns information about level
|
||||
* @see AddonRequestHandler#handle(Map <String, Object>)
|
||||
*/
|
||||
@Override
|
||||
public Object handle(Map<String, Object> metaData)
|
||||
{
|
||||
/*
|
||||
What we need in the metaData:
|
||||
0. "level-name" -> String
|
||||
What we will return:
|
||||
- Empty Map if level is not given or not found
|
||||
- Map that contains information about given level:
|
||||
- uniqueId: the same id that was passed to this handler.
|
||||
- name: String object of display name for level.
|
||||
- icon: ItemStack object that represents level.
|
||||
- order: Integer object of order number for given level.
|
||||
- message: String object that represents level unlock message.
|
||||
- world: String object that represents world name where level operates.
|
||||
|
||||
- waiveramount: Integer object of waiver amount for given level.
|
||||
- challenges: List of strings that represents challenges that is owned by given level.
|
||||
*/
|
||||
|
||||
if (metaData == null ||
|
||||
metaData.isEmpty() ||
|
||||
metaData.get("level-name") == null ||
|
||||
!(metaData.get("level-name") instanceof String))
|
||||
{
|
||||
return Collections.emptyMap();
|
||||
}
|
||||
|
||||
ChallengeLevel level = this.addon.getChallengesManager().getLevel((String) metaData.get("level-name"));
|
||||
|
||||
Map<String, Object> levelDataMap;
|
||||
|
||||
if (level == null)
|
||||
{
|
||||
levelDataMap = Collections.emptyMap();
|
||||
}
|
||||
else
|
||||
{
|
||||
levelDataMap = new HashMap<>();
|
||||
|
||||
levelDataMap.put("uniqueId", level.getUniqueId());
|
||||
levelDataMap.put("name", level.getFriendlyName());
|
||||
levelDataMap.put("icon", level.getIcon());
|
||||
levelDataMap.put("order", level.getOrder());
|
||||
levelDataMap.put("message", level.getUnlockMessage());
|
||||
levelDataMap.put("world", level.getWorld());
|
||||
levelDataMap.put("challenges", level.getChallenges());
|
||||
levelDataMap.put("waiveramount", level.getWaiverAmount());
|
||||
}
|
||||
|
||||
return levelDataMap;
|
||||
}
|
||||
|
||||
|
||||
// ---------------------------------------------------------------------
|
||||
// Section: Variables
|
||||
// ---------------------------------------------------------------------
|
||||
|
||||
|
||||
/**
|
||||
* Variable stores challenges addon.
|
||||
*/
|
||||
private ChallengesAddon addon;
|
||||
}
|
@ -0,0 +1,67 @@
|
||||
package world.bentobox.challenges.handlers;
|
||||
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import java.util.Collections;
|
||||
import java.util.Map;
|
||||
|
||||
import world.bentobox.bentobox.api.addons.request.AddonRequestHandler;
|
||||
import world.bentobox.challenges.ChallengesAddon;
|
||||
|
||||
|
||||
/**
|
||||
* This handler returns all levels that is working in given world.
|
||||
*/
|
||||
public class LevelListRequestHandler extends AddonRequestHandler
|
||||
{
|
||||
|
||||
/**
|
||||
* Constructor creates a new CompletedChallengesRequestHandler instance.
|
||||
*
|
||||
* @param addon of type ChallengesAddon
|
||||
*/
|
||||
public LevelListRequestHandler(ChallengesAddon addon)
|
||||
{
|
||||
super("level-list");
|
||||
this.addon = addon;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param metaData Required meta data.
|
||||
* @return List of strings that contains levels in given world
|
||||
* @see AddonRequestHandler#handle(Map <String, Object>)
|
||||
*/
|
||||
@Override
|
||||
public Object handle(Map<String, Object> metaData)
|
||||
{
|
||||
/*
|
||||
What we need in the metaData:
|
||||
0. "world-name" -> String
|
||||
What we will return:
|
||||
- List of levels in given world.
|
||||
*/
|
||||
|
||||
if (metaData == null ||
|
||||
metaData.isEmpty() ||
|
||||
metaData.get("world-name") == null ||
|
||||
!(metaData.get("world-name") instanceof String) ||
|
||||
Bukkit.getWorld((String) metaData.get("world-name")) == null)
|
||||
{
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
return this.addon.getChallengesManager().getLevels(Bukkit.getWorld((String) metaData.get("world-name")));
|
||||
}
|
||||
|
||||
|
||||
// ---------------------------------------------------------------------
|
||||
// Section: Variables
|
||||
// ---------------------------------------------------------------------
|
||||
|
||||
|
||||
/**
|
||||
* Variable stores challenges addon.
|
||||
*/
|
||||
private ChallengesAddon addon;
|
||||
}
|
Loading…
Reference in New Issue
Block a user