This commit is contained in:
BONNe1704 2019-09-05 12:01:41 +03:00
commit ecbb8ef1f2
10 changed files with 185 additions and 41 deletions

View File

@ -17,6 +17,12 @@ Be aware that 0.8.0-SNAPSHOT stores data differently than it is in 0.7.5 and bel
If you like this addon but something is missing or is not working as you want, you can always submit an [Issue request](https://github.com/BentoBoxWorld/Challenges/issues) or get a support in Discord [BentoBox ![icon](https://avatars2.githubusercontent.com/u/41555324?s=15&v=4)](https://discord.bentobox.world)
## Translations
As most of BentoBox projects, Challenges Addon is translatable in any language. Everyone can contribute, and translate some parts of the addon in their language via [GitLocalize](https://gitlocalize.com/repo/2896).
If your language is not in the list, please contact to developers via Discord and it will be added there.
Unfortunately, default challenges come only in English translation. But with version 0.8.0 there will be access to different challenges libraries, where everyone could share their challenges with their translations. More information will come soon.
## How to use
1. Place the addon jar in the addons folder of the BentoBox plugin
@ -39,7 +45,7 @@ Admins can create their own challenges or import some default challenges, which
## Config.yml
As most of BenotBox addons, config can be edited only when server is stopped. Otherwise all changes will be overwritten by server.
As most of BentoBox addons, config can be edited only when server is stopped. Otherwise all changes will be overwritten by server.
The config.yml has the following sections:
* **Commands** - ability to enable */challenges* command. This option change is possible only via configuration and requires server restart.

View File

@ -259,6 +259,12 @@
<version>3.2.1</version>
<configuration>
<minimizeJar>true</minimizeJar>
<relocations>
<relocation>
<pattern>io.github.TheBusyBiscuit.GitHubWebAPI4Java</pattern>
<shadedPattern>world.bentobox.bentobox.api.github</shadedPattern>
</relocation>
</relocations>
</configuration>
<executions>
<execution>

View File

@ -331,7 +331,7 @@ public class ChallengesImportManager
private final class DefaultJSONHandler
{
/**
* This constructor inits JSON builder that will be used to parese challenges.
* This constructor inits JSON builder that will be used to parse challenges.
* @param addon Challenges Adddon
*/
DefaultJSONHandler(ChallengesAddon addon)

View File

@ -94,6 +94,45 @@ public class ChallengesManager
public static final String FREE = "";
// ---------------------------------------------------------------------
// Section: Comparators
// ---------------------------------------------------------------------
/**
* This comparator orders challenges by their level, order and name.
*/
private final Comparator<Challenge> challengeComparator = (o1, o2) -> {
if (o1.getLevel().equals(o2.getLevel()))
{
if (o1.getOrder() == o2.getOrder())
{
// If orders are equal, sort by unique Id
return o1.getUniqueId().compareToIgnoreCase(o2.getUniqueId());
}
else
{
// If levels are equal, sort them by order numbers.
return Integer.compare(o1.getOrder(), o2.getOrder());
}
}
else
{
if (o1.getLevel().isEmpty() || o2.getLevel().isEmpty())
{
// If exist free level challenge, then it should be at the start.
return Boolean.compare(o2.getLevel().isEmpty(), o1.getLevel().isEmpty());
}
else
{
// Sort by challenges level order numbers
return Integer.compare(this.getLevel(o1.getLevel()).getOrder(),
this.getLevel(o2.getLevel()).getOrder());
}
}
};
// ---------------------------------------------------------------------
// Section: Constructor
// ---------------------------------------------------------------------
@ -1385,7 +1424,7 @@ public class ChallengesManager
{
return this.islandWorldManager.getAddon(world).map(gameMode ->
this.challengeCacheData.values().stream().
sorted(Comparator.comparing(Challenge::getOrder)).
sorted(this.challengeComparator).
filter(challenge -> challenge.matchGameMode(gameMode.getDescription().getName())).
map(Challenge::getUniqueId).
collect(Collectors.toList())).
@ -1403,7 +1442,7 @@ public class ChallengesManager
{
return this.islandWorldManager.getAddon(world).map(gameMode ->
this.challengeCacheData.values().stream().
sorted(Comparator.comparing(Challenge::getOrder)).
sorted(this.challengeComparator).
filter(challenge -> challenge.matchGameMode(gameMode.getDescription().getName())).
collect(Collectors.toList())).
orElse(Collections.emptyList());

View File

@ -3,7 +3,11 @@ package world.bentobox.challenges.panel.admin;
import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.conversations.*;
import org.bukkit.conversations.Conversation;
import org.bukkit.conversations.ConversationContext;
import org.bukkit.conversations.ConversationFactory;
import org.bukkit.conversations.Prompt;
import org.bukkit.conversations.ValidatingPrompt;
import org.bukkit.inventory.ItemStack;
import org.eclipse.jdt.annotation.NonNull;
@ -20,6 +24,7 @@ import world.bentobox.challenges.panel.CommonGUI;
import world.bentobox.challenges.panel.util.ConfirmationGUI;
import world.bentobox.challenges.utils.GuiUtils;
import world.bentobox.challenges.utils.Utils;
import world.bentobox.challenges.web.WebManager;
/**
@ -448,9 +453,23 @@ public class AdminGUI extends CommonGUI
name = this.user.getTranslation("challenges.gui.buttons.admin.library");
description = this.user.getTranslation("challenges.gui.descriptions.admin.library");
icon = new ItemStack(Material.COBWEB);
if (WebManager.isEnabled())
{
icon = new ItemStack(Material.COBWEB);
}
else
{
description += "|" + this.user.getTranslation("challenges.gui.descriptions.admin.download-disabled");
icon = new ItemStack(Material.STRUCTURE_VOID);
}
clickHandler = (panel, user, clickType, slot) -> {
ListLibraryGUI.open(this);
if (WebManager.isEnabled())
{
ListLibraryGUI.open(this);
}
return true;
};
glow = false;

View File

@ -2,6 +2,7 @@ package world.bentobox.challenges.panel.admin;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.World;
import java.util.ArrayList;
import java.util.List;
@ -115,12 +116,58 @@ public class ListLibraryGUI extends CommonGUI
panelBuilder.item(26, this.getButton(CommonButtons.NEXT));
}
panelBuilder.item(4, this.createDownloadNow());
panelBuilder.item(44, this.returnButton);
panelBuilder.build();
}
/**
* This creates download now button, that can skip waiting for automatic request.
* @return PanelItem button that allows to manually download libraries.
*/
private PanelItem createDownloadNow()
{
List<String> description = new ArrayList<>(2);
description.add(this.user.getTranslation("challenges.gui.descriptions.admin.download"));
description.add(this.user.getTranslation("challenges.gui.descriptions.current-value",
"[value]",
this.clearCache ?
this.user.getTranslation("challenges.gui.descriptions.enabled") :
this.user.getTranslation("challenges.gui.descriptions.disabled")));
PanelItemBuilder itemBuilder = new PanelItemBuilder().
name(this.user.getTranslation("challenges.gui.buttons.admin.download")).
description(GuiUtils.stringSplit(description, this.addon.getChallengesSettings().getLoreLineLength())).
icon(Material.HOPPER).
glow(this.clearCache);
itemBuilder.clickHandler((panel, user1, clickType, slot) ->
{
if (clickType.isRightClick())
{
this.clearCache = !this.clearCache;
panel.getInventory().setItem(slot, this.createDownloadNow().getItem());
}
else
{
this.addon.getWebManager().requestCatalogGitHubData(false);
// add some delay to rebuilding gui.
this.addon.getPlugin().getServer().getScheduler().runTaskLaterAsynchronously(
this.addon.getPlugin(),
this::build,
100L);
}
return true;
});
return itemBuilder.build();
}
/**
* This method creates button for given library entry.
* @param libraryEntry LibraryEntry which button must be created.
@ -199,6 +246,10 @@ public class ListLibraryGUI extends CommonGUI
// Section: Instance Variables
// ---------------------------------------------------------------------
/**
* Indicates if download now button should trigger cache clearing.
*/
private boolean clearCache;
/**
* This variable will protect against spam-click.

View File

@ -96,7 +96,16 @@ public enum HeadLib
PUFFERFISH("258e3114-368c-48a1-85fd-be580912f0df", "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMTcxNTI4NzZiYzNhOTZkZDJhMjI5OTI0NWVkYjNiZWVmNjQ3YzhhNTZhYzg4NTNhNjg3YzNlN2I1ZDhiYiJ9fX0="),
TROPICAL_FISH("d93c1bf6-616f-401a-af6e-f9b9803a0024", "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMTc5ZTQ4ZDgxNGFhM2JjOTg0ZThhNmZkNGZiMTcwYmEwYmI0ODkzZjRiYmViZGU1ZmRmM2Y4Zjg3MWNiMjkyZiJ9fX0="),
DROWNED("2f169660-61be-46bd-acb5-1abef9fe5731", "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYzNmN2NjZjYxZGJjM2Y5ZmU5YTYzMzNjZGUwYzBlMTQzOTllYjJlZWE3MWQzNGNmMjIzYjNhY2UyMjA1MSJ9fX0="),
DOLPHIN("8b7ccd6d-36de-47e0-8d5a-6f6799c6feb8", "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOGU5Njg4Yjk1MGQ4ODBiNTViN2FhMmNmY2Q3NmU1YTBmYTk0YWFjNmQxNmY3OGU4MzNmNzQ0M2VhMjlmZWQzIn19fQ==");
DOLPHIN("8b7ccd6d-36de-47e0-8d5a-6f6799c6feb8", "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOGU5Njg4Yjk1MGQ4ODBiNTViN2FhMmNmY2Q3NmU1YTBmYTk0YWFjNmQxNmY3OGU4MzNmNzQ0M2VhMjlmZWQzIn19fQ=="),
// Since 1.14
CAT("f0aaa05b-0283-4663-9b57-52dbf2ca2750", "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYTBkYjQxMzc2Y2E1N2RmMTBmY2IxNTM5ZTg2NjU0ZWVjZmQzNmQzZmU3NWU4MTc2ODg1ZTkzMTg1ZGYyODBhNSJ9fX0="),
FOX("237a2651-7da8-457a-aaea-3714bcc196a2", "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZDg5NTRhNDJlNjllMDg4MWFlNmQyNGQ0MjgxNDU5YzE0NGEwZDVhOTY4YWVkMzVkNmQzZDczYTNjNjVkMjZhIn19fQ=="),
PANDA("bf7435c9-b7eb-49e9-8887-60697f8081b9", "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZGNhMDk2ZWVhNTA2MzAxYmVhNmQ0YjE3ZWUxNjA1NjI1YTZmNTA4MmM3MWY3NGE2MzljYzk0MDQzOWY0NzE2NiJ9fX0="),
PILLAGER("1ac9d5aa-46ef-4d71-b077-4564382c0a43", "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNGFlZTZiYjM3Y2JmYzkyYjBkODZkYjVhZGE0NzkwYzY0ZmY0NDY4ZDY4Yjg0OTQyZmRlMDQ0MDVlOGVmNTMzMyJ9fX0="),
RAVAGER("def81bd7-85e5-4644-b1b2-e7521e53bba8", "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMWNiOWYxMzlmOTQ4OWQ4NmU0MTBhMDZkOGNiYzY3MGM4MDI4MTM3NTA4ZTNlNGJlZjYxMmZlMzJlZGQ2MDE5MyJ9fX0="),
TRADER_LLAMA("47dbdab5-105f-42bc-9580-c61cee9231f3", "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNzA4N2E1NTZkNGZmYTk1ZWNkMjg0NGYzNTBkYzQzZTI1NGU1ZDUzNWZhNTk2ZjU0MGQ3ZTc3ZmE2N2RmNDY5NiJ9fX0="),
WANDERING_TRADER("943947ea-3e1a-4fdc-85e5-f538379f05e9", "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNWYxMzc5YTgyMjkwZDdhYmUxZWZhYWJiYzcwNzEwZmYyZWMwMmRkMzRhZGUzODZiYzAwYzkzMGM0NjFjZjkzMiJ9fX0=");
// ---------------------------------------------------------------------
// Section: Variables

View File

@ -182,7 +182,7 @@ public class WebManager
/**
* This method returns all library entries that are downlaoded.
* This method returns all library entries that are downloaded.
* @return existing Library entries.
*/
public List<LibraryEntry> getLibraryEntries()
@ -194,6 +194,16 @@ public class WebManager
}
/**
* This static method returns if GitHub data downloader is enabled or not.
* @return {@code true} if data downloader is enabled, {@code false} - otherwise.
*/
public static boolean isEnabled()
{
return BentoBox.getInstance().getWebManager().getGitHub().isPresent();
}
// ---------------------------------------------------------------------
// Section: Variables
// ---------------------------------------------------------------------

View File

@ -5,7 +5,7 @@
"friendlyName": "Potato farm",
"deployed": true,
"description": [
"Create simple potato farm"
"Create a simple potato farm"
],
"icon": "is:\n ==: org.bukkit.inventory.ItemStack\n v: 1631\n type: POTATO\n",
"order": 1,
@ -94,7 +94,7 @@
"friendlyName": "Villager Breeder",
"deployed": true,
"description": [
"Start to create slave army."
"Start to create a slave army."
],
"icon": "is:\n ==: org.bukkit.inventory.ItemStack\n v: 1631\n type: EMERALD_BLOCK\n",
"order": 1,
@ -138,7 +138,7 @@
"friendlyName": "Beetroot farm",
"deployed": true,
"description": [
"Create simple beetroot farm"
"Create a simple beetroot farm"
],
"icon": "is:\n ==: org.bukkit.inventory.ItemStack\n v: 1631\n type: BEETROOT\n",
"order": 1,
@ -181,7 +181,7 @@
"friendlyName": "Slime farm",
"deployed": true,
"description": [
"Create slime farm to get some slime blocks"
"Create a slime farm to get some slime blocks"
],
"icon": "is:\n ==: org.bukkit.inventory.ItemStack\n v: 1631\n type: SLIME_BLOCK\n",
"order": 1,
@ -204,7 +204,7 @@
"takeMoney": false,
"requiredIslandLevel": 0,
"searchRadius": 10,
"rewardText": "Get some nether quartz ore and extra mending book",
"rewardText": "Get some nether quartz ore and an extra mending book",
"rewardItems": [
"is:\n ==: org.bukkit.inventory.ItemStack\n v: 1631\n type: ENCHANTED_BOOK\n meta:\n ==: ItemMeta\n meta-type: ENCHANTED\n stored-enchants:\n MENDING: 1\n",
"is:\n ==: org.bukkit.inventory.ItemStack\n v: 1631\n type: NETHER_QUARTZ_ORE\n amount: 16\n"
@ -362,7 +362,7 @@
"friendlyName": "Carrot farm",
"deployed": true,
"description": [
"Create simple Carrot farm"
"Create a simple carrot farm"
],
"icon": "is:\n ==: org.bukkit.inventory.ItemStack\n v: 1631\n type: CARROT\n",
"order": 1,
@ -441,7 +441,7 @@
"takeMoney": false,
"requiredIslandLevel": 0,
"searchRadius": 10,
"rewardText": "There are never too much diamonds",
"rewardText": "There are never too many diamonds",
"rewardItems": [
"is:\n ==: org.bukkit.inventory.ItemStack\n v: 1631\n type: DIAMOND_ORE\n amount: 4\n"
],
@ -463,7 +463,7 @@
"friendlyName": "Pumpkin farm",
"deployed": true,
"description": [
"Create simple Pumpkin farm"
"Create a simple Pumpkin farm"
],
"icon": "is:\n ==: org.bukkit.inventory.ItemStack\n v: 1631\n type: PUMPKIN\n",
"order": 2,
@ -506,7 +506,7 @@
"friendlyName": "Cactus farm",
"deployed": true,
"description": [
"Create simple Cactus farm"
"Create a simple cactus farm"
],
"icon": "is:\n ==: org.bukkit.inventory.ItemStack\n v: 1631\n type: CACTUS\n",
"order": 2,
@ -549,7 +549,7 @@
"friendlyName": "Egg Collector",
"deployed": true,
"description": [
"Create Chicken farm and collect their eggs."
"Create a chicken farm and collect their eggs."
],
"icon": "is:\n ==: org.bukkit.inventory.ItemStack\n v: 1631\n type: EGG\n",
"order": 2,
@ -594,7 +594,7 @@
"friendlyName": "Tree farm",
"deployed": true,
"description": [
"Create simple tree farm"
"Create a simple tree farm"
],
"icon": "is:\n ==: org.bukkit.inventory.ItemStack\n v: 1631\n type: OAK_SAPLING\n",
"order": 2,
@ -682,7 +682,7 @@
"rewardMoney": 0,
"rewardCommands": [],
"repeatable": true,
"repeatRewardText": "Diamond and some emeralds for your disks",
"repeatRewardText": "A diamond and some emeralds for your disks",
"maxTimes": 100,
"repeatExperienceReward": 5,
"repeatItemReward": [
@ -698,7 +698,7 @@
"friendlyName": "Sugarcane farm",
"deployed": true,
"description": [
"Create simple sugarcane farm"
"Create a simple sugarcane farm"
],
"icon": "is:\n ==: org.bukkit.inventory.ItemStack\n v: 1631\n type: SUGAR_CANE\n",
"order": 2,
@ -721,7 +721,7 @@
"takeMoney": false,
"requiredIslandLevel": 0,
"searchRadius": 10,
"rewardText": "This sand will allow to increase your farm size.",
"rewardText": "This sand will help you to increase your farm size.",
"rewardItems": [
"is:\n ==: org.bukkit.inventory.ItemStack\n v: 1631\n type: SAND\n amount: 16\n"
],
@ -741,7 +741,7 @@
"friendlyName": "Animal farm",
"deployed": true,
"description": [
"Create grass field and wait for animals to spawn."
"Create a grass field and wait for animals to spawn."
],
"icon": "is:\n ==: org.bukkit.inventory.ItemStack\n v: 1631\n type: GRASS_BLOCK\n",
"order": 2,
@ -790,7 +790,7 @@
"friendlyName": "Mushroom farm",
"deployed": true,
"description": [
"Create simple mushroom farm"
"Create a simple mushroom farm"
],
"icon": "is:\n ==: org.bukkit.inventory.ItemStack\n v: 1631\n type: BROWN_MUSHROOM\n",
"order": 2,
@ -1002,7 +1002,7 @@
"friendlyName": "Melon farm",
"deployed": true,
"description": [
"Create simple Melon farm"
"Create a simple Melon farm"
],
"icon": "is:\n ==: org.bukkit.inventory.ItemStack\n v: 1631\n type: MELON\n",
"order": 2,
@ -1045,7 +1045,7 @@
"friendlyName": "Mob farm",
"deployed": true,
"description": [
"Create dark place and spawn some hostile mobs."
"Create a dark place and spawn some hostile mobs."
],
"icon": "is:\n ==: org.bukkit.inventory.ItemStack\n v: 1631\n type: STONE\n",
"order": 2,
@ -1398,7 +1398,7 @@
"takeMoney": false,
"requiredIslandLevel": 0,
"searchRadius": 20,
"rewardText": "Some diamonds and elytra for your efforts.",
"rewardText": "Some diamonds and an elytra for your efforts.",
"rewardItems": [
"is:\n ==: org.bukkit.inventory.ItemStack\n v: 1631\n type: DIAMOND_ORE\n amount: 16\n",
"is:\n ==: org.bukkit.inventory.ItemStack\n v: 1631\n type: ELYTRA\n"
@ -1692,7 +1692,7 @@
"friendlyName": "Diamond Age",
"deployed": true,
"description": [
"Craft Diamond Tools and Armor"
"Craft diamond tools and armor"
],
"icon": "is:\n ==: org.bukkit.inventory.ItemStack\n v: 1631\n type: DIAMOND\n",
"order": 4,
@ -1745,7 +1745,7 @@
"friendlyName": "Gold Age",
"deployed": true,
"description": [
"Craft Gold Tools and Armor"
"Craft gold tools and armor"
],
"icon": "is:\n ==: org.bukkit.inventory.ItemStack\n v: 1631\n type: GOLD_INGOT\n",
"order": 4,
@ -1881,7 +1881,7 @@
"takeMoney": false,
"requiredIslandLevel": 0,
"searchRadius": 10,
"rewardText": "Exchange your terracotta to shulker box",
"rewardText": "Exchange your terracotta to a shulker box",
"rewardItems": [
"is:\n ==: org.bukkit.inventory.ItemStack\n v: 1631\n type: SHULKER_BOX\n"
],
@ -1889,7 +1889,7 @@
"rewardMoney": 0,
"rewardCommands": [],
"repeatable": true,
"repeatRewardText": "Exchange your terracotta to shulker shell",
"repeatRewardText": "Exchange your terracotta to a shulker shell",
"maxTimes": 100,
"repeatExperienceReward": 5,
"repeatItemReward": [
@ -1903,7 +1903,7 @@
"friendlyName": "Iron Age",
"deployed": true,
"description": [
"Craft Iron Tools and Armor"
"Craft iron tools and armor"
],
"icon": "is:\n ==: org.bukkit.inventory.ItemStack\n v: 1631\n type: IRON_INGOT\n",
"order": 4,
@ -1956,7 +1956,7 @@
"friendlyName": "Cracked stone bricks",
"deployed": true,
"description": [
"Smelt some bricks to get cracked briks."
"Smelt some bricks to get cracked stone bricks."
],
"icon": "is:\n ==: org.bukkit.inventory.ItemStack\n v: 1631\n type: CRACKED_STONE_BRICKS\n",
"order": 4,
@ -2001,7 +2001,7 @@
"friendlyName": "Logs Exchange",
"deployed": true,
"description": [
"Cut trees and collect some logs"
"Fell trees and collect some logs"
],
"icon": "is:\n ==: org.bukkit.inventory.ItemStack\n v: 1631\n type: OAK_LOG\n",
"order": 4,
@ -2074,7 +2074,7 @@
"takeMoney": false,
"requiredIslandLevel": 0,
"searchRadius": 10,
"rewardText": "Exchaning drops will provide some useful materials.",
"rewardText": "Exchanging drops will provide some useful materials.",
"rewardItems": [
"is:\n ==: org.bukkit.inventory.ItemStack\n v: 1631\n type: REDSTONE\n amount: 16\n",
"is:\n ==: org.bukkit.inventory.ItemStack\n v: 1631\n type: IRON_ORE\n amount: 5\n",
@ -2136,7 +2136,7 @@
"takeMoney": false,
"requiredIslandLevel": 0,
"searchRadius": 10,
"rewardText": "Exchange your glass to shulker box",
"rewardText": "Exchange your glass to a shulker box",
"rewardItems": [
"is:\n ==: org.bukkit.inventory.ItemStack\n v: 1631\n type: SHULKER_BOX\n"
],
@ -2144,7 +2144,7 @@
"rewardMoney": 0,
"rewardCommands": [],
"repeatable": true,
"repeatRewardText": "Exchange your glass to shulker shell",
"repeatRewardText": "Exchange your glass to a shulker shell",
"maxTimes": 100,
"repeatExperienceReward": 5,
"repeatItemReward": [
@ -2269,7 +2269,7 @@
"takeMoney": false,
"requiredIslandLevel": 20,
"searchRadius": 10,
"rewardText": "Now you can create nether portal",
"rewardText": "Now you can create a nether portal",
"rewardItems": [
"is:\n ==: org.bukkit.inventory.ItemStack\n v: 1631\n type: OBSIDIAN\n amount: 10\n"
],
@ -2289,7 +2289,7 @@
"friendlyName": "Beaconator",
"deployed": true,
"description": [
"Create beacon with iron base"
"Create a beacon with iron base"
],
"icon": "is:\n ==: org.bukkit.inventory.ItemStack\n v: 1631\n type: BEACON\n",
"order": 6,
@ -2611,7 +2611,7 @@
"friendlyName": "Water Zoo",
"deployed": true,
"description": [
"Create water animal zoo"
"Create a water animal zoo"
],
"icon": "is:\n ==: org.bukkit.inventory.ItemStack\n v: 1631\n type: BLUE_STAINED_GLASS_PANE\n",
"order": 7,

View File

@ -169,6 +169,7 @@ challenges:
complete-wipe: 'Wipe Addon Databases'
library: 'Web Library'
download: 'Download Libraries'
next: 'Next'
previous: 'Previous'
return: 'Return'
@ -277,6 +278,9 @@ challenges:
library-lang: '&aLanguage: [lang]'
library-gamemode: '&aPrimary for [gamemode]'
download: 'Allows manually update available challenges libraries. |Right click to enable cache clearing.'
download-disabled: 'GitHub data downloader is disabled in BentoBox. Without it, you cannot use Libraries!'
lore:
level: "Level string. | Represents translation 'challenges.gui.challenge-description.level'."
status: "Status string. | Represents translation 'challenges.gui.challenge-description.completed'."