Merge remote-tracking branch 'upstream/develop' into develop

This commit is contained in:
NotMyFault 2019-10-11 00:33:33 +02:00
commit 792c39c5e8
58 changed files with 1315 additions and 1142 deletions

View File

@ -1,11 +1,12 @@
package world.bentobox.challenges;
import org.bukkit.Material;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import org.bukkit.Material;
import world.bentobox.bentobox.api.addons.Addon;
import world.bentobox.bentobox.api.addons.GameModeAddon;
import world.bentobox.bentobox.api.configuration.Config;

View File

@ -1,8 +1,5 @@
package world.bentobox.challenges;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.annotations.Expose;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
@ -21,12 +18,16 @@ import java.util.stream.Collectors;
import org.bukkit.World;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.annotations.Expose;
import world.bentobox.bentobox.api.user.User;
import world.bentobox.bentobox.database.json.BentoboxTypeAdapterFactory;
import world.bentobox.bentobox.database.objects.DataObject;
import world.bentobox.challenges.database.object.ChallengeLevel;
import world.bentobox.challenges.database.object.Challenge;
import world.bentobox.bentobox.api.user.User;
import world.bentobox.bentobox.util.Util;
import world.bentobox.challenges.database.object.Challenge;
import world.bentobox.challenges.database.object.ChallengeLevel;
import world.bentobox.challenges.utils.Utils;

View File

@ -1,8 +1,6 @@
package world.bentobox.challenges;
import org.eclipse.jdt.annotation.NonNull;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
@ -20,6 +18,7 @@ import java.util.stream.Collectors;
import org.bukkit.Bukkit;
import org.bukkit.World;
import org.eclipse.jdt.annotation.NonNull;
import world.bentobox.bentobox.api.logs.LogEntry;
import world.bentobox.bentobox.api.user.User;

View File

@ -4,9 +4,9 @@ import java.util.List;
import java.util.Optional;
import world.bentobox.bentobox.api.addons.GameModeAddon;
import world.bentobox.challenges.ChallengesAddon;
import world.bentobox.bentobox.api.commands.CompositeCommand;
import world.bentobox.bentobox.api.user.User;
import world.bentobox.challenges.ChallengesAddon;
import world.bentobox.challenges.panel.user.ChallengesGUI;

View File

@ -6,7 +6,6 @@ import java.util.List;
import world.bentobox.bentobox.api.addons.GameModeAddon;
import world.bentobox.bentobox.api.commands.CompositeCommand;
import world.bentobox.bentobox.api.user.User;
import world.bentobox.challenges.ChallengesAddon;
import world.bentobox.challenges.config.SettingsUtils.GuiMode;
import world.bentobox.challenges.panel.GameModesGUI;

View File

@ -1,7 +1,9 @@
package world.bentobox.challenges.commands;
import java.util.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
import world.bentobox.bentobox.api.addons.Addon;

View File

@ -2,9 +2,9 @@ package world.bentobox.challenges.commands.admin;
import java.util.List;
import world.bentobox.challenges.ChallengesAddon;
import world.bentobox.bentobox.api.commands.CompositeCommand;
import world.bentobox.bentobox.api.user.User;
import world.bentobox.challenges.ChallengesAddon;
import world.bentobox.challenges.panel.admin.AdminGUI;

View File

@ -1,7 +1,11 @@
package world.bentobox.challenges.commands.admin;
import java.util.*;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Optional;
import java.util.UUID;
import java.util.stream.Collectors;
import world.bentobox.bentobox.api.addons.Addon;

View File

@ -2,11 +2,11 @@ package world.bentobox.challenges.commands.admin;
import java.util.List;
import world.bentobox.challenges.ChallengesAddon;
import world.bentobox.challenges.ChallengesManager;
import world.bentobox.bentobox.api.addons.Addon;
import world.bentobox.bentobox.api.commands.CompositeCommand;
import world.bentobox.bentobox.api.user.User;
import world.bentobox.challenges.ChallengesAddon;
import world.bentobox.challenges.ChallengesManager;
/**

View File

@ -1,7 +1,11 @@
package world.bentobox.challenges.commands.admin;
import java.util.*;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Optional;
import java.util.UUID;
import java.util.stream.Collectors;
import world.bentobox.bentobox.api.addons.Addon;

View File

@ -1,12 +1,11 @@
package world.bentobox.challenges.commands.admin;
import java.util.List;
import java.util.logging.Level;
import world.bentobox.challenges.ChallengesAddon;
import world.bentobox.bentobox.api.addons.Addon;
import world.bentobox.bentobox.api.commands.CompositeCommand;
import world.bentobox.bentobox.api.user.User;
import world.bentobox.challenges.ChallengesAddon;
public class ShowChallenges extends CompositeCommand {

View File

@ -13,10 +13,9 @@ import world.bentobox.bentobox.api.configuration.ConfigComment;
import world.bentobox.bentobox.api.configuration.ConfigEntry;
import world.bentobox.bentobox.api.configuration.ConfigObject;
import world.bentobox.bentobox.api.configuration.StoreAt;
import world.bentobox.bentobox.database.objects.adapters.Adapter;
import world.bentobox.challenges.config.SettingsUtils.GuiMode;
import world.bentobox.challenges.config.SettingsUtils.ChallengeLore;
import world.bentobox.challenges.config.SettingsUtils.GuiMode;
import world.bentobox.challenges.config.SettingsUtils.LevelLore;
import world.bentobox.challenges.config.SettingsUtils.VisibilityMode;
import world.bentobox.challenges.database.object.adapters.ChallengeLoreAdapter;

View File

@ -1,15 +1,17 @@
package world.bentobox.challenges.database.object;
import com.google.gson.annotations.Expose;
import org.bukkit.Material;
import org.bukkit.inventory.ItemStack;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
import org.bukkit.Material;
import org.bukkit.inventory.ItemStack;
import com.google.gson.annotations.Expose;
import world.bentobox.bentobox.api.configuration.ConfigComment;
import world.bentobox.bentobox.database.objects.DataObject;
import world.bentobox.challenges.ChallengesManager;

View File

@ -1,9 +1,16 @@
package world.bentobox.challenges.database.object;
import com.google.gson.annotations.Expose;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
import java.util.TreeSet;
import org.eclipse.jdt.annotation.NonNull;
import java.util.*;
import com.google.gson.annotations.Expose;
import world.bentobox.bentobox.api.logs.LogEntry;
import world.bentobox.bentobox.database.objects.DataObject;

View File

@ -7,6 +7,8 @@
package world.bentobox.challenges.database.object.adapters;
import java.lang.reflect.Type;
import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
@ -15,7 +17,6 @@ import com.google.gson.JsonParseException;
import com.google.gson.JsonPrimitive;
import com.google.gson.JsonSerializationContext;
import com.google.gson.JsonSerializer;
import java.lang.reflect.Type;
import world.bentobox.challenges.database.object.requirements.Requirements;

View File

@ -7,13 +7,15 @@
package world.bentobox.challenges.database.object.requirements;
import com.google.gson.annotations.Expose;
import org.bukkit.inventory.ItemStack;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.stream.Collectors;
import org.bukkit.inventory.ItemStack;
import com.google.gson.annotations.Expose;
/**
* This class contains all necessary requirements to complete inventory type challenge.

View File

@ -7,14 +7,16 @@
package world.bentobox.challenges.database.object.requirements;
import com.google.gson.annotations.Expose;
import org.bukkit.Material;
import org.bukkit.entity.EntityType;
import java.util.EnumMap;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import org.bukkit.Material;
import org.bukkit.entity.EntityType;
import com.google.gson.annotations.Expose;
/**
* This class contains all necessary requirements to complete island type challenge.

View File

@ -7,12 +7,9 @@
package world.bentobox.challenges.database.object.requirements;
import com.google.gson.annotations.Expose;
import org.eclipse.jdt.annotation.NonNull;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import com.google.gson.annotations.Expose;
/**

View File

@ -7,10 +7,11 @@
package world.bentobox.challenges.database.object.requirements;
import com.google.gson.annotations.Expose;
import java.util.HashSet;
import java.util.Set;
import com.google.gson.annotations.Expose;
/**
* This abstract class allows to define requirements for each challenge.

View File

@ -5,7 +5,6 @@ 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;

View File

@ -1,10 +1,11 @@
package world.bentobox.challenges.handlers;
import org.bukkit.Bukkit;
import java.util.Collections;
import java.util.Map;
import org.bukkit.Bukkit;
import world.bentobox.bentobox.api.addons.request.AddonRequestHandler;
import world.bentobox.challenges.ChallengesAddon;

View File

@ -1,10 +1,13 @@
package world.bentobox.challenges.handlers;
import java.util.Collections;
import java.util.Map;
import java.util.UUID;
import java.util.stream.Collectors;
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;

View File

@ -1,10 +1,11 @@
package world.bentobox.challenges.handlers;
import org.bukkit.Bukkit;
import java.util.Collections;
import java.util.Map;
import org.bukkit.Bukkit;
import world.bentobox.bentobox.api.addons.request.AddonRequestHandler;
import world.bentobox.challenges.ChallengesAddon;

View File

@ -7,10 +7,9 @@ import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import world.bentobox.bentobox.api.user.User;
import world.bentobox.challenges.ChallengesAddon;
import world.bentobox.bentobox.api.events.island.IslandEvent;
import world.bentobox.bentobox.api.events.island.IslandEvent.Reason;
import world.bentobox.challenges.ChallengesAddon;
/**
* Resets challenges when the island is reset

View File

@ -6,7 +6,6 @@ import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerKickEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.event.world.WorldSaveEvent;
import world.bentobox.challenges.ChallengesAddon;

View File

@ -9,7 +9,11 @@ import java.util.function.Consumer;
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.StringPrompt;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;

View File

@ -1,12 +1,12 @@
package world.bentobox.challenges.panel;
import org.bukkit.Material;
import org.bukkit.World;
import java.util.List;
import java.util.Optional;
import org.bukkit.Material;
import org.bukkit.World;
import world.bentobox.bentobox.api.addons.GameModeAddon;
import world.bentobox.bentobox.api.commands.CompositeCommand;
import world.bentobox.bentobox.api.panels.PanelItem;

View File

@ -1,6 +1,9 @@
package world.bentobox.challenges.panel.admin;
import java.util.function.Consumer;
import java.util.function.Function;
import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.conversations.Conversation;
@ -11,9 +14,6 @@ import org.bukkit.conversations.ValidatingPrompt;
import org.bukkit.inventory.ItemStack;
import org.eclipse.jdt.annotation.NonNull;
import java.util.function.Consumer;
import java.util.function.Function;
import world.bentobox.bentobox.BentoBox;
import world.bentobox.bentobox.api.panels.PanelItem;
import world.bentobox.bentobox.api.panels.builders.PanelBuilder;

View File

@ -1,10 +1,6 @@
package world.bentobox.challenges.panel.admin;
import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.entity.EntityType;
import org.bukkit.inventory.ItemStack;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
@ -12,6 +8,11 @@ import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.entity.EntityType;
import org.bukkit.inventory.ItemStack;
import world.bentobox.bentobox.api.panels.PanelItem;
import world.bentobox.bentobox.api.panels.builders.PanelBuilder;
import world.bentobox.bentobox.api.panels.builders.PanelItemBuilder;

View File

@ -22,7 +22,11 @@ import world.bentobox.challenges.ChallengesManager;
import world.bentobox.challenges.database.object.Challenge;
import world.bentobox.challenges.database.object.ChallengeLevel;
import world.bentobox.challenges.panel.CommonGUI;
import world.bentobox.challenges.panel.util.*;
import world.bentobox.challenges.panel.util.ItemSwitchGUI;
import world.bentobox.challenges.panel.util.NumberGUI;
import world.bentobox.challenges.panel.util.SelectBlocksGUI;
import world.bentobox.challenges.panel.util.SelectChallengeGUI;
import world.bentobox.challenges.panel.util.StringListGUI;
import world.bentobox.challenges.utils.GuiUtils;
import world.bentobox.challenges.utils.Utils;

View File

@ -1,14 +1,17 @@
package world.bentobox.challenges.panel.admin;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.function.BiConsumer;
import java.util.function.Consumer;
import java.util.stream.Collectors;
import org.bukkit.Material;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.inventory.InventoryCloseEvent;
import org.bukkit.inventory.ItemStack;
import java.util.*;
import java.util.function.BiConsumer;
import java.util.function.Consumer;
import java.util.stream.Collectors;
import world.bentobox.bentobox.api.panels.PanelItem;
import world.bentobox.bentobox.api.panels.PanelListener;

View File

@ -128,7 +128,6 @@ public class EditSettingsGUI extends CommonGUI
}
@SuppressWarnings("deprecation")
private PanelItem getSettingsButton(Button button)
{
ItemStack icon;
@ -434,7 +433,7 @@ public class EditSettingsGUI extends CommonGUI
if (status)
{
materials.forEach(material ->
this.settings.setLockedLevelIcon(new ItemStack(material)));
this.settings.setLockedLevelIcon(new ItemStack(material)));
}
this.build();
@ -501,14 +500,14 @@ public class EditSettingsGUI extends CommonGUI
values.add(this.user.getTranslation("challenges.gui.descriptions.admin.visibility-mode"));
values.add((this.settings.getVisibilityMode().equals(VisibilityMode.VISIBLE) ? "&2" : "&c") +
this.user.getTranslation("challenges.gui.descriptions.visibility.visible"));
this.user.getTranslation("challenges.gui.descriptions.visibility.visible"));
values.add((this.settings.getVisibilityMode().equals(VisibilityMode.HIDDEN) ? "&2" : "&c") +
this.user.getTranslation("challenges.gui.descriptions.visibility.hidden"));
this.user.getTranslation("challenges.gui.descriptions.visibility.hidden"));
values.add((this.settings.getVisibilityMode().equals(VisibilityMode.TOGGLEABLE) ? "&2" : "&c") +
this.user.getTranslation("challenges.gui.descriptions.visibility.toggleable"));
this.user.getTranslation("challenges.gui.descriptions.visibility.toggleable"));
values.add(this.user.getTranslation("challenges.gui.descriptions.current-value",
"[value]",this.settings.getVisibilityMode().name()));
"[value]",this.settings.getVisibilityMode().name()));
description = values;
@ -529,19 +528,19 @@ public class EditSettingsGUI extends CommonGUI
if (clickType.isRightClick())
{
this.settings.setVisibilityMode(
Utils.getPreviousValue(VisibilityMode.values(),
this.settings.getVisibilityMode()));
Utils.getPreviousValue(VisibilityMode.values(),
this.settings.getVisibilityMode()));
}
else
{
this.settings.setVisibilityMode(
Utils.getNextValue(VisibilityMode.values(),
this.settings.getVisibilityMode()));
Utils.getNextValue(VisibilityMode.values(),
this.settings.getVisibilityMode()));
}
// Rebuild just this icon
panel.getInventory().setItem(slot,
this.getSettingsButton(button).getItem());
this.getSettingsButton(button).getItem());
return true;
};

View File

@ -1,10 +1,11 @@
package world.bentobox.challenges.panel.admin;
import java.util.List;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.World;
import java.util.List;
import world.bentobox.bentobox.api.panels.PanelItem;
import world.bentobox.bentobox.api.panels.builders.PanelBuilder;

View File

@ -1,10 +1,11 @@
package world.bentobox.challenges.panel.admin;
import java.util.List;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.World;
import java.util.List;
import world.bentobox.bentobox.api.panels.PanelItem;
import world.bentobox.bentobox.api.panels.builders.PanelBuilder;

View File

@ -1,11 +1,12 @@
package world.bentobox.challenges.panel.admin;
import java.util.ArrayList;
import java.util.List;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.World;
import java.util.ArrayList;
import java.util.List;
import world.bentobox.bentobox.api.panels.PanelItem;
import world.bentobox.bentobox.api.panels.builders.PanelBuilder;

View File

@ -1,16 +1,17 @@
package world.bentobox.challenges.panel.admin;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.entity.Player;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.entity.Player;
import world.bentobox.bentobox.api.panels.PanelItem;
import world.bentobox.bentobox.api.panels.builders.PanelBuilder;
import world.bentobox.bentobox.api.panels.builders.PanelItemBuilder;

View File

@ -1,10 +1,16 @@
package world.bentobox.challenges.panel.admin;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.commons.lang.WordUtils;
import org.bukkit.Material;
import org.bukkit.World;
import java.util.*;
import world.bentobox.bentobox.api.panels.PanelItem;
import world.bentobox.bentobox.api.panels.builders.PanelBuilder;

View File

@ -1,11 +1,17 @@
package world.bentobox.challenges.panel.admin;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.commons.lang.WordUtils;
import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.entity.EntityType;
import java.util.*;
import world.bentobox.bentobox.api.panels.PanelItem;
import world.bentobox.bentobox.api.panels.builders.PanelBuilder;

View File

@ -1,11 +1,12 @@
package world.bentobox.challenges.panel.user;
import java.util.List;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.inventory.ItemStack;
import java.util.List;
import world.bentobox.bentobox.api.panels.PanelItem;
import world.bentobox.bentobox.api.panels.builders.PanelBuilder;

View File

@ -1,10 +1,10 @@
package world.bentobox.challenges.panel.user;
import org.bukkit.Material;
import org.bukkit.inventory.ItemStack;
import java.util.function.Consumer;
import org.bukkit.Material;
import org.bukkit.inventory.ItemStack;
import world.bentobox.bentobox.api.panels.Panel;
import world.bentobox.bentobox.api.panels.PanelItem;

View File

@ -7,12 +7,13 @@
package world.bentobox.challenges.panel.util;
import org.bukkit.Material;
import org.bukkit.inventory.ItemStack;
import java.util.ArrayList;
import java.util.List;
import java.util.function.BiConsumer;
import org.bukkit.Material;
import org.bukkit.inventory.ItemStack;
import world.bentobox.bentobox.api.panels.Panel;
import world.bentobox.bentobox.api.panels.PanelItem;
import world.bentobox.bentobox.api.panels.builders.PanelBuilder;

View File

@ -1,10 +1,10 @@
package world.bentobox.challenges.panel.util;
import org.bukkit.Material;
import java.util.function.Consumer;
import org.bukkit.Material;
import world.bentobox.bentobox.api.panels.PanelItem;
import world.bentobox.bentobox.api.panels.builders.PanelBuilder;
import world.bentobox.bentobox.api.panels.builders.PanelItemBuilder;

View File

@ -1,14 +1,15 @@
package world.bentobox.challenges.panel.util;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.function.BiConsumer;
import org.bukkit.Material;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.inventory.InventoryCloseEvent;
import org.bukkit.inventory.ItemStack;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.function.BiConsumer;
import world.bentobox.bentobox.api.panels.PanelItem;
import world.bentobox.bentobox.api.panels.PanelListener;

View File

@ -1,17 +1,20 @@
package world.bentobox.challenges.panel.util;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.function.BiConsumer;
import org.apache.commons.lang.WordUtils;
import org.bukkit.Material;
import org.bukkit.inventory.ItemStack;
import java.util.*;
import java.util.function.BiConsumer;
import world.bentobox.bentobox.api.panels.PanelItem;
import world.bentobox.bentobox.api.panels.builders.PanelBuilder;
import world.bentobox.bentobox.api.panels.builders.PanelItemBuilder;
import world.bentobox.bentobox.api.user.User;
import world.bentobox.challenges.ChallengesAddon;
import world.bentobox.challenges.utils.GuiUtils;

View File

@ -1,17 +1,21 @@
package world.bentobox.challenges.panel.util;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.function.BiConsumer;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.event.inventory.ClickType;
import java.util.*;
import java.util.function.BiConsumer;
import world.bentobox.bentobox.api.panels.PanelItem;
import world.bentobox.bentobox.api.panels.builders.PanelBuilder;
import world.bentobox.bentobox.api.panels.builders.PanelItemBuilder;
import world.bentobox.bentobox.api.user.User;
import world.bentobox.challenges.ChallengesAddon;
import world.bentobox.challenges.database.object.Challenge;
import world.bentobox.challenges.utils.GuiUtils;

View File

@ -1,18 +1,23 @@
package world.bentobox.challenges.panel.util;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.function.BiConsumer;
import org.apache.commons.lang.WordUtils;
import org.bukkit.Material;
import org.bukkit.entity.EntityType;
import org.bukkit.inventory.ItemStack;
import java.util.*;
import java.util.function.BiConsumer;
import world.bentobox.bentobox.api.panels.PanelItem;
import world.bentobox.bentobox.api.panels.builders.PanelBuilder;
import world.bentobox.bentobox.api.panels.builders.PanelItemBuilder;
import world.bentobox.bentobox.api.user.User;
import world.bentobox.challenges.ChallengesAddon;
import world.bentobox.challenges.utils.GuiUtils;

View File

@ -1,12 +1,13 @@
package world.bentobox.challenges.panel.util;
import org.bukkit.Material;
import org.bukkit.World;
import java.util.Collections;
import java.util.Set;
import java.util.function.BiConsumer;
import org.bukkit.Material;
import org.bukkit.World;
import world.bentobox.bentobox.api.panels.builders.PanelBuilder;
import world.bentobox.bentobox.api.panels.builders.PanelItemBuilder;
import world.bentobox.bentobox.api.user.User;

View File

@ -1,11 +1,6 @@
package world.bentobox.challenges.panel.util;
import org.bukkit.Material;
import org.bukkit.conversations.*;
import org.bukkit.inventory.ItemStack;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.Nullable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
@ -13,6 +8,16 @@ import java.util.List;
import java.util.function.BiConsumer;
import java.util.function.Consumer;
import org.bukkit.Material;
import org.bukkit.conversations.Conversation;
import org.bukkit.conversations.ConversationContext;
import org.bukkit.conversations.ConversationFactory;
import org.bukkit.conversations.Prompt;
import org.bukkit.conversations.StringPrompt;
import org.bukkit.inventory.ItemStack;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.Nullable;
import net.md_5.bungee.api.chat.ClickEvent;
import net.md_5.bungee.api.chat.TextComponent;
import world.bentobox.bentobox.BentoBox;

View File

@ -5,7 +5,21 @@ package world.bentobox.challenges.tasks;
import org.bukkit.*;
import java.util.Arrays;
import java.util.Collections;
import java.util.EnumMap;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.PriorityQueue;
import java.util.Queue;
import java.util.stream.Collectors;
import org.bukkit.ChatColor;
import org.bukkit.GameMode;
import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
import org.bukkit.entity.Entity;
@ -13,8 +27,6 @@ import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.util.BoundingBox;
import java.util.*;
import java.util.stream.Collectors;
import world.bentobox.bentobox.api.localization.TextVariables;
import world.bentobox.bentobox.api.user.User;

View File

@ -1,15 +1,16 @@
package world.bentobox.challenges.utils;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import org.apache.commons.lang.WordUtils;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.entity.EntityType;
import org.bukkit.inventory.ItemStack;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import world.bentobox.bentobox.api.panels.PanelItem;
import world.bentobox.bentobox.api.panels.builders.PanelBuilder;

View File

@ -15,14 +15,21 @@
package world.bentobox.challenges.utils;
import com.mojang.authlib.GameProfile;
import com.mojang.authlib.properties.Property;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import java.lang.reflect.Field;
import java.util.*;
import com.mojang.authlib.GameProfile;
import com.mojang.authlib.properties.Property;
import world.bentobox.bentobox.BentoBox;

View File

@ -1,11 +1,12 @@
package world.bentobox.challenges.utils;
import java.util.ArrayList;
import java.util.List;
import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.inventory.ItemStack;
import java.util.ArrayList;
import java.util.List;
import world.bentobox.bentobox.BentoBox;

View File

@ -1,11 +1,16 @@
package world.bentobox.challenges.web;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Base64;
import java.util.Comparator;
import java.util.List;
import org.bukkit.World;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import org.bukkit.World;
import java.nio.charset.StandardCharsets;
import java.util.*;
import world.bentobox.bentobox.BentoBox;
import world.bentobox.bentobox.api.user.User;

View File

@ -1,11 +1,12 @@
package world.bentobox.challenges.web.object;
import com.google.gson.JsonObject;
import org.bukkit.Material;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.Nullable;
import com.google.gson.JsonObject;
/**
* This objects allows to load each Challenges Catalog library entry.

View File

@ -20,32 +20,32 @@ challenges:
description: 'Reload challenges from the database|Parameter hard means that addon will reset connection to database.'
parameters: '[hard]'
show:
description: 'This method prints in chat all challenges that exist in world.'
description: 'Prints in chat all challenges that exist in world.'
parameters: ''
defaults:
description: 'This method shows subcommands that allows to import/export default challenges.'
description: 'Show subcommands to import/export default challenges.'
parameters: '[command]'
defaults-import:
description: 'This method allows to import default challenges.'
description: 'Import default challenges.'
parameters: ''
defaults-generate:
description: 'This method allows to export existing challenges into default.json file.'
description: 'Export existing challenges to default.json file.'
parameters: '[overwrite] - allows to overwrite existing file.'
complete:
description: 'This command allows to complete challenge for player without GUI.'
description: 'Complete challenge for player.'
parameters: '<player> <challenge_id>'
reset:
description: 'This command allows to reset challenge for player without GUI. If "challenge_id" is set to "all", then it will reset all challenges.'
description: 'Reset challenge for player. If "challenge_id" is set to "all", then it will reset all challenges.'
parameters: '<player> <challenge_id>'
migrate:
description: 'This method allows to migrate challenges data that refers to current game mode world to new 0.8.0 storage format.'
description: 'Migrate current game world challenges data to 0.8.0 storage format.'
parameters: ''
user:
main:
description: 'This method opens Challenges GUI.'
description: 'Open Challenges GUI.'
parameters: ''
complete:
description: 'This method allows to complete challenge without GUI.'
description: 'Complete challenge.'
parameters: '<challenge_id> [count]'
gui:
title:
@ -160,7 +160,7 @@ challenges:
gui-view-mode: 'Display All GameModes'
gui-mode: 'Single Challenges GUI'
history-store: 'Challenges History'
history-lifespan: 'History LifeSpan'
history-lifespan: 'History Lifespan'
island-store: 'Store per Island'
default-locked-icon: 'Locked Level Icon'
input-mode: 'Switch input mode'
@ -195,104 +195,104 @@ challenges:
increase: 'Increase operation. Clicking on numbers will increase value by selected number.'
reduce: 'Reduce operation. Clicking on numbers will reduce value by selected number.'
multiply: 'Multiply operation. Clicking on numbers will multiply value by selected number.'
import: 'Allows to import ASkyblock Challenges.|On right click it enables/disables overwrite mode.|Place Challenges.yml inside ./BentoBox/addons/Challenges folder.'
complete: 'Allows to complete challenges for any user.|User will not get reward for completion.'
reset: 'Allows to reset completed user challenges.|Right click enables/disables Reset all functionality.'
create-challenge: 'Allows to add new Challenge.|By default it will be in free challenges list.'
create-level: 'Allows to add new Level.'
edit-challenge: 'Allows to edit any Challenge settings.'
edit-level: 'Allows to edit any Level settings.'
delete-challenge: 'Allows remove any Challenge.'
delete-level: 'Allows remove any Level.'
settings: 'Allows to change addon settings.'
properties: 'Allows to change general properties'
requirements: 'Allows to manage requirements'
rewards: 'Allows to manage rewards'
challenges: 'Allows to manage level challenges (add / remove).'
import: 'Import ASkyblock Challenges.|On right click it enables/disables overwrite mode.|Place Challenges.yml inside ./BentoBox/addons/Challenges folder.'
complete: 'Complete challenges for any user.|User will not get reward for completion.'
reset: 'Reset completed user challenges.|Right click enables/disables Reset all functionality.'
create-challenge: 'Add new Challenge.|By default it will be in free challenges list.'
create-level: 'Add new Level.'
edit-challenge: 'Edit Challenge settings.'
edit-level: 'Edit Level settings.'
delete-challenge: 'Remove a Challenge.'
delete-level: 'Remove a Level.'
settings: 'Change settings.'
properties: 'Change general properties'
requirements: 'Manage requirements'
rewards: 'Manage rewards'
challenges: 'manage level challenges (add / remove).'
deployment: 'Allows users to complete (view) challenge.'
icon-challenge: 'Icon that will be displayed in GUI panels for this challenge.'
icon-level: 'Icon that will be displayed in GUI panels for this level.'
locked-icon: 'Icon that will be displayed in GUI panels if level is locked.'
description: 'Allows to edit description.'
order: 'Allows to change order number.'
environment: 'Allows to change environment where challenge operates.'
remove-on-complete: 'Allows to remove challenge from player GUI after it is completed.'
name-challenge: 'Allows to change challenge display name.'
name-level: 'Allows to change level display name.'
required-entities: 'Allows to add/edit/remove required entities.|Entities:|'
remove-entities: 'Allows to remove (kill) entities on challenge completion.'
required-blocks: 'Allows to add/edit/remove required blocks.|Blocks:|'
remove-blocks: 'Allows to remove (replace with air) blocks on challenge completion.'
search-radius: 'Radius around player location where required entities and blocks will be searched.'
description: 'Edit description.'
order: 'Change order number.'
environment: 'Change challenge environment.'
remove-on-complete: 'Remove challenge from player GUI after it is completed.'
name-challenge: 'Change challenge display name.'
name-level: 'Change level display name.'
required-entities: 'Add/edit/remove required entities.|Entities:|'
remove-entities: 'Remove (kill) entities on challenge completion.'
required-blocks: 'Add/edit/remove required blocks.|Blocks:|'
remove-blocks: 'Remove (replace with air) blocks on challenge completion.'
search-radius: "Radius around player's location where required entities and blocks will be searched."
required-permissions: 'Required permissions for player to be able to complete challenge.|Permission:'
required-items: 'Required items in player"s inventory.|Items:'
remove-items: 'Allows to remove items from player inventory after challenge completion.'
required-experience: 'Allows to define required experience for user to complete challenge.'
remove-experience: 'Allows to remove remove required experience.'
required-level: 'Allows to define required island level for this challenge.|&cRequires Level addon.'
required-money: 'Allows to define required money in player"s account.|&cRequires Vault and Economy plugin.'
remove-money: 'Allows to remove required money from player"s account.|&cRequires Vault and Economy plugin.'
reward-text: 'Allows to change message that will be sent to player after challenges completion.'
reward-items: 'Allows to change first time completion reward items.|Items:'
reward-experience: 'Allows to change first time completion reward Experience.'
reward-money: 'Allows to change first time completion reward Money.|&cRequires Vault and Economy plugin.'
reward-commands: 'Allows to define reward commands that will be called after first time completion.|***Adding "[SELF]" at the start means that command will be run by player, f.e. "/kill"|***String "[player]" will be replaced with player name, f.e. "/kill [player]" will be transformed to "/kill BONNe1704"|Commands:'
repeatable: 'Allows to define if challenge is repeatable or not.'
repeat-count: 'Allows to define maximal repeat count. If value is set 0 or smaller, then there are no limitations.'
repeat-reward-text: 'Allows to change message that will be sent to player after challenge repeated completion.'
repeat-reward-items: 'Allows to change repeated completion reward items.|Items:'
repeat-reward-experience: 'Allows to change repeated completion reward Experience.'
repeat-reward-money: 'Allows to change repeated completion reward Money.|&cRequires Vault and Economy plugin.'
repeat-reward-commands: 'Allows to define reward commands that will be called after challenge repeated completion.|***Adding "[SELF]" at the start means that command will be run by player, f.e. "/kill"|***String "[player]" will be replaced with player name, f.e. "/kill [player]" will be transformed to "/kill BONNe1704"|Commands:'
waiver-amount: 'Allows to set how many challenges can be left undone to unlock next level.'
reward-text-level: 'Allows to change message that will be sent to player after completing all challenges in level.'
add-challenge: 'Allows to add existing challenge to current level.'
remove-challenge: 'Allows remove any challenge from current level.'
reset-on-new: 'Enables/Disables option, that resets all player challenges if player restarts island, leave island or was kicked out.'
remove-items: 'Remove items from player inventory after challenge completion.'
required-experience: 'Define required experience for user to complete challenge.'
remove-experience: 'Remove remove required experience.'
required-level: 'Define required island level for this challenge.|&cRequires Level addon.'
required-money: 'Define required money in player"s account.|&cRequires Vault and Economy plugin.'
remove-money: 'Remove required money from player"s account.|&cRequires Vault and Economy plugin.'
reward-text: 'Change message that will be sent to player after challenges completion.'
reward-items: 'Change first time completion reward items.|Items:'
reward-experience: 'Change first time completion reward Experience.'
reward-money: 'Change first time completion reward Money.|&cRequires Vault and Economy plugin.'
reward-commands: 'Define reward commands that will be called after first time completion.|***Adding "[SELF]" at the start means that command will be run by player, f.e. "/kill"|***String "[player]" will be replaced with player name, f.e. "/kill [player]" will be transformed to "/kill BONNe1704"|Commands:'
repeatable: 'Define if challenge is repeatable or not.'
repeat-count: 'Define maximal repeat count. If value is set 0 or smaller, then there are no limitations.'
repeat-reward-text: 'Change message that will be sent to player after challenge repeated completion.'
repeat-reward-items: 'Change repeated completion reward items.|Items:'
repeat-reward-experience: 'Change repeated completion reward Experience.'
repeat-reward-money: 'Change repeated completion reward Money.|&cRequires Vault and Economy plugin.'
repeat-reward-commands: 'Define reward commands that will be called after challenge repeated completion.|***Adding "[SELF]" at the start means that command will be run by player, f.e. "/kill"|***String "[player]" will be replaced with player name, f.e. "/kill [player]" will be transformed to "/kill BONNe1704"|Commands:'
waiver-amount: 'Set how many challenges can be left undone to unlock next level.'
reward-text-level: 'Change message that will be sent to player after completing all challenges in level.'
add-challenge: 'Add existing challenge to current level.'
remove-challenge: 'Remove a challenge from current level.'
reset-on-new: 'Enables/Disables resets of all player challenges if player restarts island, leaves island or is kicked.'
broadcast: 'Enables/Disables broadcast to online players about first time challenge completion.'
remove-completed: 'Enables/Disables hiding challenges that are completed and cannot be repeated.'
glow: 'Enables/Disables glowing effect for completed challenges.'
free-at-top: 'Allows to change free challenges location. True mean that challenges will be first, otherwise they will be last.'
line-length: 'Allows to modify maximal line length in lore box. Will not affect stored objects.'
free-at-top: 'Change free challenges location. True means that challenges will be first, otherwise they will be last.'
line-length: 'Modify the maximum line length in lore box. Will not affect stored objects.'
toggle-user-list: 'Switch to different player list.'
mode-online: 'Players which currently are online.'
mode-in-world: 'Players which is in GameMode world.'
mode-with-island: 'Players which has island in GameMode.'
mode-in-world: 'Players in GameMode world.'
mode-with-island: 'Players that have an island in GameMode.'
selected: 'Selected'
remove-selected: 'Remove selected elements.|You can select elements with right mouse button.'
remove-selected: 'Remove selected elements.|Select elements with the right mouse button.'
show-eggs: 'Switch entity view between Egg mode or Head mode.'
level-lore: 'Allows to modify which elements of level description should be visible.'
challenge-lore: 'Allows to modify which elements of challenge description should be visible.'
gui-view-mode: 'Allows to set if /challenges GUI should show GameModes or challenges in players world.'
history-store: 'Allows to enable/disable challenges history storage.'
history-lifespan: 'Allows to modify how many days history data will be saved.|0 means forever.'
island-store: 'Allows to enable/disable challenges data storing per island. This means that challenges will be the same on whole team, if this is enabled.|Will NOT convert data on click. PROGRESS WILL BE LOST.'
default-locked-icon: 'Allows to change default locked level icon.|This option can be overwritten by each level.'
gui-mode: 'Allows to enable/disable single challenges GUI.|&2Requires server restart.'
level-lore: 'Modify which level description elements should be visible.'
challenge-lore: 'Modify which challenge description elements should be visible.'
gui-view-mode: "Set if /challenges GUI should show GameModes or challenges in player's world."
history-store: 'Enable/disable challenges history storage.'
history-lifespan: 'Modify how many days history data will be saved.|0 means forever.'
island-store: 'Enable/disable challenges data storing per island. This means that challenges will be the same for the whole team if this is enabled.|Will NOT convert data on click. PROGRESS WILL BE LOST.'
default-locked-icon: 'Change default locked level icon.|This option can be overwritten by each level.'
gui-mode: 'Enable/disable single challenges GUI.|&2Requires server restart.'
visibility-mode: 'Allows to switch if undeployed challenges should be displayed or not.'
visibility-mode: 'Display/hide undeployed challenges.'
click-to-edit: '&4Click here to edit input.'
edit-text-line: '&6 Edit text message!'
add-text-line: '&6 Add new text message!'
input-mode: 'Switch between chat and anvil input modes.'
title-enable: 'Allows to enable/disable title message that will be showed when player complete challenge.'
title-showtime: 'Allows to modify how long title message will be visible for player.'
default-import: 'Allows to import default challenges.'
default-export: 'Allows to export existing challenges into defaults.json file.'
complete-wipe: 'Allows to completely clear all challenges addon databases. Includes player data!'
title-enable: 'Enable/disable the title message that will be showed when player complete challenge.'
title-showtime: 'Modify how long title message will be visible to player.'
default-import: 'Import default challenges.'
default-export: 'Export existing challenges to defaults.json file.'
complete-wipe: 'Completely clear all challenges addon databases. Includes player data!'
challenge-wipe: 'Allows to completely clear challenges and their level databases!'
players-wipe: 'Allows to completely clear player database!'
challenge-wipe: 'Completely clear challenges and their level databases!'
players-wipe: 'Completely clear player database!'
library: 'Opens GUI that shows all available public Challenges Libraries.'
library: 'Open GUI that shows all available public Challenges Libraries.'
library-author: 'by &e[author]'
library-version: '&9Made on Challenges [version]'
library-version: '&9Made in Challenges [version]'
library-lang: '&aLanguage: [lang]'
library-gamemode: '&aPrimary for [gamemode]'
download: 'Allows manually update available challenges libraries. |Right click to enable cache clearing.'
download: '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:
@ -321,9 +321,9 @@ challenges:
enabled: 'Active'
disabled: 'Disabled'
type:
island: '&aallows to require blocks or mobs around player'
inventory: '&aallows to require items in players inventory'
other: '&aallows to require things from other plugins/addons'
island: '&arequire blocks or mobs around player'
inventory: '&arequire items in players inventory'
other: '&arequire things from other plugins/addons'
the-end: '- The End'
nether: '- Nether'
normal: '- Overworld'
@ -341,9 +341,9 @@ challenges:
reduce-by: "&cReduce completion count by [value]"
visibility:
visible: "All challenges are visible for everyone"
visible: "All challenges are visible to everyone"
hidden: "Only Deployed challenges are visible."
toggleable: "Allows to toggle if undeployed challenges should be displayed"
toggleable: "Toggle if undeployed challenges should be displayed"
challenge-description:
level: '&FLevel: [level]'
@ -370,7 +370,7 @@ challenges:
level-description:
completed: '&BCompleted'
completed-challenges-of: '&3You have completed [number] of [max] challenges in this level.'
waver-amount: '&6Can skip [value] challenges to unlock next level.'
waver-amount: '&6[value] challenges can be skipped to unlock next level.'
experience-reward: '&6Exp reward: [value]'
money-reward: '&6Money reward: $[value]'
reward-items: '&6Reward Items:'
@ -399,12 +399,12 @@ challenges:
admin:
number: "Write a number in chat and press enter to accept it and press enter."
unique-id: "Write object unique name and press enter."
challenge-name: "Write in chat display name for current challenge."
level-name: "Write in chat display name for current level."
unique-id: "Write the object's unique name and press enter."
challenge-name: "Write the display name in chat for current challenge."
level-name: "Write display name in chat for current level."
titles:
# Title and subtitle my contain variable in [] that will be replaced with proper message from challenge object.
# Title and subtitle my contain variables in [] that will be replaced with proper message from challenge object.
# [friendlyName] will be replaced with challenge friendly name.
# [level] will be replaced with level friendly name.
# [rewardText] will be replaced with challenge reward text.
@ -420,10 +420,10 @@ challenges:
hit-things: 'Hit things to add them to the list of things required. Right click when done.'
you-added: 'You added one [thing] to the challenge'
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 erased all the Challenges Addon databases!'
challenge-wipe: '&cHope you have backups, as you just empty Challenges and their levels from databases!'
players-wipe: '&cHope you have backups, as you just empty player completed challenges from databases!'
challenge-wipe: '&cHope you have backups, as you just erased all the Challenges and their levels!'
players-wipe: '&cHope you have backups, as you just erase all the player completed challenges!'
completed: '&2You completed challenge [name] for [player]!'
already-completed: '&2This challenge was already completed!'
@ -432,7 +432,7 @@ challenges:
not-completed: '&2This challenge is not completed yet!'
migrate-start: '&2Start migrating challenges addon data.'
migrate-end: '&2Challenges addon data is updated to new format.'
migrate-end: '&2Challenges addon data updated to new format.'
migrate-not: '&2All data is valid.'
start-downloading: '&5Starting to download and import Challenges Library.'
@ -462,11 +462,11 @@ challenges:
not-on-island: '&cYou must be on your island to do that!'
challenge-level-not-available: '&cYou have not unlocked level to complete this challenge.'
not-repeatable: '&cThis challenge is not repeatable!'
wrong-environment: '&cYou are in wrong environment!'
wrong-environment: '&cYou are in the wrong environment!'
not-enough-items: '&cYou do not have enough [items] to complete this challenge!'
not-close-enough: '&cYou must be standing within [number] blocks of all required items.'
you-still-need: '&cYou still need [amount] x [item]'
missing-addon: '&cCannot complete challenge. Required addon or plugin is missing.'
missing-addon: '&cCannot complete challenge: Required addon or plugin is missing.'
incorrect: '&cCannot complete challenge. Requirements are incorrect.'
not-enough-money: '&cIt is necessary to have [value] on your account to complete the challenge.'
not-enough-experience: '&cIt is necessary to have [value] EXP to complete challenge.'
@ -474,23 +474,23 @@ challenges:
import-no-file: '&cCould not find challenges.yml file to import!'
no-load: '&cError: Could not load challenges.yml. [message]'
load-error: '&cError: Cannot load [value].'
no-rank: "&cYou do not have rank to do that."
no-rank: "&cYou do not have a high enough rank to do that."
cannot-remove-items: '&cSome items cannot be removed from inventory!'
exist-challenges-or-levels: '&cIn your world already exist challenges. Cannot proceed!'
exist-challenges-or-levels: '&cChallenges already exist in your world. Cannot proceed!'
defaults-file-exist: '&cdefaults.json already exists. Use overwrite mode to replace it!'
defaults-file-error: '&cThere was an error while creating defaults.json file! Check console!'
no-challenges: '&cChallenges are not implemented in current world!'
no-challenges-admin: '&cChallenges are not implemented in current world! You should use &5/[command] &cto adding them!'
missing-level: '&cChallenge Level [level] is not defined in database. It may case some errors!'
no-challenges: '&cChallenges are not implemented in this world yet!'
no-challenges-admin: '&cChallenges are not implemented in this world yet! Use &5/[command] &cto add them!'
missing-level: '&cChallenge Level [level] is not defined in the database. It may cause errors!'
missing-arguments: '&cCommand is missing arguments.'
no-multiple-permission: "&cYou do not have permission to complete challenge multiple times at once."
no-multiple-permission: "&cYou do not have permission to complete this challenge multiple times at once."
protection:
flags:
CHALLENGES_ISLAND_PROTECTION:
description: "&5&oToggle who can\n&5&ocomplete challenges"
name: "Challenges protection"
CHALLENGES_WORLD_PROTECTION:
description: "&5&oThis allows to enable/disable\n&5&orequirement for players to\n&5&obe on their island to\n&5&ocomplete a challenge."
description: "&5&oEnable/disable\n&5&orequirement for players to\n&5&obe on their island to\n&5&ocomplete a challenge."
name: "Challenges Island limitation"
hint: "No challenges outside island"
version: 11

View File

@ -1,405 +1,471 @@
###########################################################################################
# This is a YML file. Be careful when editing. Check your edits in a YAML checker like #
# the one at http://yaml-online-parser.appspot.com #
###########################################################################################
### Credits ###
meta:
authors: []
---
challenges:
commands:
admin:
main:
parameters: ''
description: '打开管理员菜单'
import:
description: '从challenges.yml文件中导入挑战以及挑战等级'
parameters: '[overwrite]'
reload:
description: '重载挑战组件'
parameters: '[hard]'
show:
description: '在聊天中列出当前世界的所有挑战'
parameters: ''
defaults:
description: '显示导入/导出插件自带挑战的子指令'
parameters: '[command]'
defaults-import:
description: '导入插件自带挑战'
parameters: ''
defaults-generate:
description: '将现有的挑战导出到default.json文件中。'
parameters: '[overwrite] - allows to overwrite existing file.'
complete:
description: '通过指令让某个玩家完成指定挑战'
parameters: '<player> <challenge_id>'
user:
main:
description: '打开空岛挑战菜单'
parameters: ''
complete:
description: '通过指令完成挑战'
parameters: '<challenge_id> [count]'
gui:
title:
admin:
gui-title: '&a岛屿挑战管理'
edit-challenge-title: '&a编辑挑战'
edit-level-title: '&a编辑挑战等级'
settings-title: '&a编辑设定'
choose-challenge-title: '&a选择挑战'
choose-level-title: '&a选择挑战等级'
choose-user-title: '&a选择玩家'
manage-blocks: '&a管理方块'
manage-entities: '&a管理实体'
confirm-title: '&a确认'
manage-items: '&a管理物品'
manage-numbers: '&a数字垫'
select-block: '&a选择方块'
select-challenge: '&a选择挑战'
select-entity: '&a选择实体'
toggle-environment: '&a切换环境'
edit-text-fields: '&a编辑文本字段'
challenges: '&a岛屿挑战'
game-modes: '&a选择游戏模式'
buttons:
admin:
complete: '完成某个玩家的挑战'
reset: '重置某个玩家的挑战'
create-challenge: '创建新的挑战'
create-level: '创建新的挑战等级'
edit-challenge: '编辑挑战'
edit-level: '编辑挑战等级'
delete-challenge: '删除挑战'
delete-level: '删除挑战等级'
import: '导入ASkyBlock插件的挑战内容'
settings: '编辑设定'
properties: '属性'
requirements: '要求'
rewards: '奖励'
challenges: '挑战'
type: '挑战类型'
deployment: '是否开启该挑战'
icon: '图标'
locked-icon: '图标锁'
description: '介绍'
order: '顺序'
environment: '环境'
remove-on-complete: '完成后删除该挑战'
name: '挑战名称'
required-entities: '检测的实体'
remove-entities: '完成任务后是否杀死实体'
required-blocks: '检测的方块'
remove-blocks: '完成任务后是否删除方块'
search-radius: '搜索半径'
required-permissions: '需要的权限'
required-items: '需要的物品'
remove-items: '完成任务后是否删除物品'
required-experience: '需要的经验值'
remove-experience: '完成任务后是否删除经验值'
required-level: '需要的岛屿等级'
required-money: '需要的金钱'
remove-money: '完成任务后是否删除金钱'
reward-text: '奖励信息'
reward-items: '物品奖励'
reward-experience: '经验奖励'
reward-money: '金钱奖励'
reward-commands: '指令奖励'
repeatable: '是否可重复挑战'
repeat-count: '最大时间'
repeat-reward-text: '重复奖励信息'
repeat-reward-items: '重复物品奖励'
repeat-reward-experience: '重复经验奖励'
repeat-reward-money: '重复金钱奖励'
repeat-reward-commands: '重复指令奖励'
waiver-amount: '豁免金额'
add-challenge: '添加挑战'
remove-challenge: '删除挑战'
reset-on-new: '在新的岛屿上重置'
broadcast: '成功任务后发出广播'
remove-completed: '完成任务后删除图标'
glow: '完成任务后发光'
free-at-top: '免费挑战优先排列'
line-length: 'Lore长度'
toggle-user-list: '用户列表'
remove-selected: '删除选定'
add: '添加'
show-eggs: '切换视图模式'
accept: '接受'
decline: '拒绝'
save: '保存'
cancel: '取消'
input: '输入'
value: '值'
set: '='
increase: '+'
reduce: '-'
multiply: '*'
clear: '清空'
remove-empty: '删除空栏'
number: '[number]'
level-lore: '等级介绍'
challenge-lore: '挑战介绍'
gui-view-mode: '显示所有GameModes'
gui-mode: '挑战GUI'
history-store: '挑战历史'
history-lifespan: '历史LifeSpan'
island-store: '每个岛屿的商店'
default-locked-icon: '等级图标锁'
input-mode: '切换输入模式'
title-enable: '显示标题'
title-showtime: '标题显示时间'
default-import: '导入默认挑战'
default-export: '导出现有挑战'
complete-wipe: '抹除插件数据库!'
next: '下一页'
previous: '上一页'
return: '返回上一级'
descriptions:
admin:
save: '保存并返回上一级菜单'
cancel: '取消任何操作并返回上一级菜单'
input: '打开文本字段输入'
set: '设置操作,击数字会将值更改为所选数字。'
increase: '增加操作。 单击数字将增加所选数字的值。'
reduce: '减少操作。 单击数字将减少所选数字的值。'
multiply: '乘法运算。 单击数字会将值乘以所选数字。'
import: '导入ASkyblock挑战。|右键单击它启用/禁用覆盖模式。|将Challenges.yml放在./BentoBox/addons/Challenges文件夹中。'
complete: '为某个玩家完成某个挑战|玩家无法获得完成奖励。'
reset: '重置已完成的玩家挑战。|右键单击启用/禁用重置所有功能。'
create-challenge: '添加新挑战。|默认情况下,它将在免费挑战列表中。'
create-level: '添加新的挑战等级。'
edit-challenge: '编辑某个挑战设定'
edit-level: '编辑某个挑战等级设定'
delete-challenge: '删除某个挑战'
delete-level: '删除某个挑战等级'
settings: '修改组件设定'
properties: '修改常规属性'
requirements: '修改挑战需求'
rewards: '修改挑战奖励'
challenges: '管理挑战级别 (添加/删除).'
deployment: '查看某玩家已完成的挑战'
icon-challenge: '将在此挑战的GUI面板中显示的图标。'
icon-level: '将在此级别的GUI面板中显示的图标。'
locked-icon: '如果级别被锁定将在GUI面板中显示的图标。'
description: '编辑介绍'
order: '更改挑战顺序'
environment: '改变挑战运作的环境。'
type: '更改挑战类型(不同类型的挑战侦测方式不同)'
remove-on-complete: '在玩家完成挑战后是否删除该挑战图标于任务面板中'
name-challenge: '修改挑战名称'
name-level: '修改挑战等级名称'
required-entities: '修改挑战需要的实体.|实体:|'
remove-entities: '是否在挑战结束后删除挑战需要的实体'
required-blocks: '修改挑战需要的方块.|方块:|'
remove-blocks: '是否在挑战结束后删除任务需求方块(替换为空气)'
search-radius: '玩家完成挑战时检测实体/方块的范围(半径)'
required-permissions: '玩家需要具有以下权限才能完成挑战|权限:'
required-items: '玩家背包中需要有以下物品才能完成挑战|物品:'
remove-items: '是否在完成挑战后删除玩家背包中的挑战需求物品'
required-experience: '玩家需要有该项目所设置的经验值才可以完成挑战'
remove-experience: '是否在玩家完成挑战后删除任务需求的经验值'
required-level: '玩家需要岛屿等级达到该项目所设置的等级才能完成挑战.|&c需要 Level 组件.'
required-money: '玩家需要有该项目所设置的金钱才能完成挑战.|&c需要经济前置.'
remove-money: '是否在玩家完成挑战后删除任务需求的金钱.|&c需要经济前置.'
reward-text: '设置完成任务后的奖励信息'
reward-items: '设置完成任务后的物品奖励.|物品:'
reward-experience: '设置完成任务后的经验奖励.'
reward-money: '设置完成任务后的金钱奖励.|&c需要经济前置.'
reward-commands: '设置完成任务后的指令奖励.|指令:'
repeatable: '挑战是否可以重复'
repeat-count: '重复挑战的次数如果设置为0则为无限制'
repeat-reward-text: '重复挑战完成后的信息'
repeat-reward-items: '重复挑战完成后的物品奖励.|物品:'
repeat-reward-experience: '重复挑战完成后的经验奖励.'
repeat-reward-money: '重复挑战完成后的金钱奖励.|&c需要经济前置.'
repeat-reward-commands: '重复挑战完成后的指令奖励.||指令:'
waiver-amount: '完成该数量的挑战玩家方能解锁下一挑战级别的挑战'
reward-text-level: '完成某挑战级别所有挑战后发送给玩家的信息'
add-challenge: '将现有挑战添加到当前挑战级别'
remove-challenge: '从当前级别删除挑战'
reset-on-new: '允许/禁止,当玩家重置/踢出岛屿后都会重置挑战'
broadcast: '允许/禁止,当玩家完成第一次挑战后向全服玩家广播'
remove-completed: '允许/禁止,在玩家挑战列表中隐藏已完成的挑战'
glow: '允许/禁用,在已完成的挑战中加上附魔效果'
free-at-top: '改变免费挑战的位置如果为true免费挑战会放在前排如果为false免费挑战将放在后排'
line-length: '修改每条lore的最大长度'
toggle-user-list: '切换到不同的玩家列表'
mode-online: '目前在线的玩家'
mode-in-world: '属于游戏模式中的世界的玩家.'
mode-with-island: '属于游戏模式中的岛屿的玩家.'
selected: '已选中'
remove-selected: '删除所选目标|您可以使用鼠标右键选择目标'
show-eggs: '在Egg模式或Head模式之间切换实体视图'
level-lore: '修改挑战级别介绍的哪些目标是可见的'
challenge-lore: '修改挑战介绍的哪些目标是可见的'
gui-view-mode: '如果玩家输入/challenges菜单应该显示GameModes还是挑战'
history-store: '允许启用/禁用质询历史存储'
history-lifespan: '允许修改将保存历史数据的天数| 0表示永久'
island-store: '启用/禁用挑战每个岛的数据存储。如果启用此选项,整个岛屿团队的挑战进度将是相同的。|不会在点击时转换数据。进展将会失败。'
default-locked-icon: '更改默认锁定级别图标。|此级别可以覆盖此选项。'
gui-mode: '启用/禁用单一挑战GUI。|&2要求服务器重启。'
click-to-edit: '&4点击此处编辑输入.'
edit-text-line: '&6编辑文本!'
add-text-line: '&6 添加新的文本!'
input-mode: '在聊天和铁砧输入模式之间切换。'
title-enable: '启用/禁用玩家完成挑战时显示的标题消息。'
title-showtime: '修改标题消息对玩家可见的时间。'
default-import: '导入插件自带挑战'
default-export: '将现有的挑战导出至 defaults.json 文件中.'
complete-wipe: '清空插件数据库中的所有挑战,包括玩家的挑战数据!'
current-value: '|&6当前值: [value].'
enabled: '有效'
disabled: '禁用'
type:
island: '- 岛屿类型:| (主要通过检测玩家身边的方块和生物)'
inventory: '- 库存类型:| (主要通过检测玩家的背包物品)'
other: '- 其他类型:| (主要通过检测服务器的其他插件/组件)'
the-end: '- 末地'
nether: '- 地狱'
normal: '- 主世界'
entity: '- [entity] : [count]'
block: '- [block] : [count]'
permission: '- [permission]'
item: '- [count] x [item]'
item-meta: ' ([meta])'
item-enchant: ' - [enchant] [level]'
command: '- [command]'
level-unlocked: '点击查看 [level] 级别的挑战!'
level-locked: '请完成 [count] 个 [level] 级别的挑战来解锁这个挑战级别!'
challenge-description:
level: '&F挑战级别: [level]'
completed: '&B已完成'
completed-times-of: '完成次数: [donetimes] 上限: [maxtimes]'
maxed-reached: '完成次数: [donetimes] 上限: [maxtimes]'
completed-times: '已完成 [donetimes]'
warning-items-take: '&c完成此挑战后该挑战的需要物品将会被清空'
objects-close-by: '&c任务需求的方块/生物不能离你太远!(超出侦测范围)'
warning-entities-kill: '&c完成此挑战后该挑战需要的生物将会被清空'
warning-blocks-remove: '&c完成此挑战后该挑战需要的方块将会被清空'
not-repeatable: '&c该挑战不可重复!'
experience-reward: '&6经验奖励: [value]'
money-reward: '&6金钱奖励: $[value]'
required-experience: '&6所需经验: [value]'
required-money: '&6所需金钱: $[value]'
required-island-level: '&6所需岛屿等级: [value]'
environment: '所需实体:'
reward-items: '&6物品奖励:'
reward-commands: '&6指令奖励:'
required-items: '所需物品:'
required-entities: '所需实体:'
required-blocks: '所需方块:'
level-description:
completed: '&B已完成'
completed-challenges-of: '&你已经完成 [number] 个该级别的挑战,达到了 [max]个挑战.'
waver-amount: '&6可以跳过[value] 个挑战来解锁下一个挑战级别.'
experience-reward: '&6经验奖励: [value]'
money-reward: '&6金钱奖励: $[value]'
reward-items: '&6物品奖励:'
reward-commands: '&6指令奖励:'
item-description:
item: '- [count] x [item]'
item-meta: ' ([meta])'
item-enchant: ' - [enchant] [level]'
item-name: ' [name]'
item-lore: ' 物品Lore:'
book-meta: ' [title] by [author]'
recipe-count: ' [count] recipes'
armor-color: ' [color]'
potion-type-extended-upgraded: ' [name]'
potion-type-upgraded: ' Upgraded [name]'
potion-type-extended: ' Extended [name]'
potion-type: ' [name]'
custom-effects: ' 自定义效果:'
potion-effect: ' [effect] x [amplifier] for [duration]t'
skull-owner: ' [owner]'
egg-meta: ' [mob]'
fish-meta: ' [body-color] with [pattern-color] [pattern]'
questions:
prefix: "&2[SERVER]: "
admin:
number: "Write a number in chat and press enter to accept it and press enter."
unique-id: "Write object unique name and press enter."
challenge-name: "Write in chat display name for current challenge."
level-name: "Write in chat display name for current level."
titles:
# Title and subtitle my contain variable in [] that will be replaced with proper message from challenge object.
# [friendlyName] will be replaced with challenge friendly name.
# [level] will be replaced with level friendly name.
# [rewardText] will be replaced with challenge reward text.
challenge-title: '完成挑战'
challenge-subtitle: '[friendlyName]'
# Title and subtitle my contain variable in [] that will be replaced with proper message from level object.
# [friendlyName] will be replaced with level friendly name.
# [rewardText] will be replaced with level reward text.
level-title: '成功挑战级别'
level-subtitle: '[friendlyName]'
messages:
admin:
hit-things: '点击物品将它们添加到所需的事物列表中。 完成后右键单击。'
you-added: '你在挑战中添加了一个[thing]'
challenge-created: '[challenge]&r created!'
complete-wipe: '&c希望你有备份因为你已经创建了所有Challenges Addon数据库'
completed: '&2已为[player]完成挑战[name]!'
already-completed: '&2这个挑战已经完成'
you-completed-challenge: '&2你已经完成了 [value] &r&2挑战!'
you-repeated-challenge: '&2你已经重复完成了 [value] &r&2挑战!'
you-repeated-challenge-multiple: '&2你重复完成了 [value] &r&2挑战 [count] 次!'
you-completed-level: '&2你完成了 [value] &r&2级别!'
name-has-completed-challenge: '&5[name] 已完成 [value] &r&5挑战!'
name-has-completed-level: '&5[name] 已完成 [value] &r&5挑战级别!'
import-levels: '开始导入挑战级别'
import-challenges: '开始导入挑战'
no-levels: '警告: challenges.yml文件中没有定义挑战级别'
import-number: '导入 [number] 个挑战'
load-skipping: '"[value]" 已存在 - 跳过'
load-overwriting: '覆盖 "[value]"'
load-add: '添加新的对象: [value]'
defaults-file-overwrite: 'defaults.json存在。 它将被覆盖。'
defaults-file-completed: 'defaults.json文件填充了来自[world]的挑战!'
errors:
no-name: '&c缺少挑战名称'
unknown-challenge: '&c未知挑战'
unique-id: '&cUniqueID "[id]" 无效.'
wrong-icon: '&c给定材料“[value]”无效且不能用作图标。'
not-valid-integer: '&c给定整数“[value]”无效!|值应介于[min]和[max]之间。'
not-a-integer: '&c给定值“[value]”不是整数!'
not-deployed: '&c未开启挑战'
not-on-island: '&c你必须在你的岛上做到这一点'
challenge-level-not-available: '&c你没有解锁挑战级别来完成这个挑战。'
not-repeatable: '&c这个挑战是不可重复的'
wrong-environment: '&c你在错误的环境中'
not-enough-items: '&c你没有足够的[items]来完成这个挑战!'
not-close-enough: '&c你必须站在拥有[number]个任务需求方块的旁边.'
you-still-need: '&c你还需要 [amount] x [item]'
missing-addon: '&c无法完成挑战。 缺少必需的插件或组件。'
incorrect: '&c无法完成挑战。 要求不正确。'
not-enough-money: '&c您的帐户必须有[value]金钱才能完成挑战。.'
not-enough-experience: '&c必须有[value]EXP才能完成挑战'
island-level: '&c你的岛屿等级需要达到[number]才能完成挑战'
import-no-file: '&c找不到challenge.yml文件导入'
no-load: '&c错误无法加载challenge.yml。 [message]'
load-error: '&c错误:无法加载 [value].'
no-rank: "&c你没有等级可以做到这一点."
cannot-remove-items: '&c有些物品无法从你的背包中删除!'
exist-challenges-or-levels: '&c在你的世界里已经存在挑战。 无法继续!'
defaults-file-exist: '&cdefaults.json已经存在。 使用覆盖模式替换它!'
defaults-file-error: '&c创建defaults.json文件时出错 检查控制台!'
no-challenges: '&c当前世界没有实施挑战'
no-challenges-admin: '&c当前世界没有实施挑战!你应该使用 &5/[label] challenges &c添加他们!'
missing-level: '&c挑战级别[level]未在数据库中定义. 可能会出现错误!'
missing-arguments: '&c命令缺少参数.'
commands:
admin:
complete:
parameters: "<player> <challenge_id>"
description: 通过指令完成挑战
defaults:
description: 显示导入/导出插件自带挑战的子指令
parameters: "[command]"
import:
parameters: "[overwrite]"
description: 从 challenges.yml 文件中导入挑战|参数覆盖意味着具有相同 ID 的挑战或等级将被覆盖。
main:
description: 打开管理员菜单
reload:
description: 重载挑战组件
parameters: "[hard]"
show:
description: 在聊天中列出当前世界的所有挑战
defaults-import:
description: 导入系统自带挑战
defaults-generate:
description: 将现有的挑战导出到default.json文件中
parameters: "[overwrite] - 允许覆盖已有文件"
reset:
description: 通过指令重置玩家挑战。若 "challenge_id" 参数设为 all则将重置该玩家的所有挑战。
parameters: "<player> <challenge_id>"
migrate:
description: 将参考当前游戏模式世界的挑战数据迁移到新的0.8.0存储格式。
user:
complete:
description: 通过指令完成挑战
parameters: "<challenge_id> [count]"
main:
description: 打开挑战菜单
errors:
cannot-remove-items: "&c有些物品无法从你的背包中删除!"
challenge-level-not-available: "&c你没有解锁挑战级别来完成这个挑战。"
defaults-file-error: "&c创建defaults.json文件时出错 检查控制台!"
defaults-file-exist: "&cdefaults.json已经存在。 使用覆盖模式替换它!"
exist-challenges-or-levels: "&c在你的世界里已经存在挑战。 无法继续!"
import-no-file: "&c找不到challenge.yml文件导入"
incorrect: "&c无法完成挑战。 要求不正确。"
island-level: "&c你的岛屿等级需要达到[number]才能完成挑战"
load-error: "&c错误:无法加载 [value]."
missing-addon: "&c无法完成挑战。 缺少必需的插件或组件。"
missing-arguments: "&c命令缺少参数."
missing-level: "&c挑战级别[level]未在数据库中定义. 可能会出现错误!"
no-challenges: "&c当前世界没有实施挑战"
no-challenges-admin: "&c当前世界没有实施挑战!你应该使用 &5/[label] challenges &c添加他们!"
no-load: "&c错误无法加载challenge.yml。 [message]"
no-name: "&c缺少挑战名称"
no-rank: "&c你没有等级可以做到这一点."
not-a-integer: "&c给定值“[value]”不是整数!"
not-close-enough: "&c你必须站在拥有[number]个任务需求方块的旁边."
not-deployed: "&c未开启挑战"
not-enough-items: "&c你没有足够的[items]来完成这个挑战!"
not-enough-money: "&c您的帐户必须有[value]金钱才能完成挑战。."
not-on-island: "&c你必须在你的岛上做到这一点"
not-repeatable: "&c这个挑战是不可重复的"
not-valid-integer: "&c给定整数“[value]”无效!|值应介于[min]和[max]之间。"
unique-id: '&cUniqueID "[id]" 无效.'
unknown-challenge: "&c未知挑战"
wrong-environment: "&c你在错误的环境中"
wrong-icon: "&c给定材料“[value]”无效且不能用作图标。"
you-still-need: "&c你还需要 [amount] x [item]"
not-enough-experience: "&c必须有[value]经验才能完成挑战"
no-multiple-permission: "&c你无权一次完成挑战多次"
gui:
buttons:
admin:
accept: 接受
add: 添加
add-challenge: 添加挑战
broadcast: 成功任务后发出广播
cancel: 取消
challenge-lore: 挑战介绍
challenges: 挑战
clear: 清空
complete: 完成某个玩家的挑战
complete-wipe: 抹除插件数据库!
create-challenge: 创建新的挑战
create-level: 创建新的挑战等级
decline: 拒绝
default-export: 导出现有挑战
default-import: 导入默认挑战
default-locked-icon: 等级图标锁
delete-challenge: 删除挑战
delete-level: 删除挑战等级
deployment: 是否开启该挑战
description: 介绍
edit-challenge: 编辑挑战
edit-level: 编辑挑战等级
environment: 环境
free-at-top: 免费挑战优先排列
glow: 完成任务后发光
gui-mode: 挑战GUI
gui-view-mode: 显示所有GameModes
history-store: 挑战历史
icon: 图标
increase: "+"
input: 输入
input-mode: 切换输入模式
level-lore: 等级介绍
locked-icon: 图标锁
multiply: "*"
name: 挑战名称
number: "[number]"
order: 顺序
properties: 属性
reduce: "-"
remove-blocks: 完成任务后是否删除方块
remove-challenge: 删除挑战
remove-completed: 完成任务后删除图标
remove-empty: 删除空栏
remove-entities: 完成任务后是否杀死实体
remove-experience: 完成任务后是否删除经验值
remove-items: 完成任务后是否删除物品
remove-money: 完成任务后是否删除金钱
remove-on-complete: 完成后删除该挑战
remove-selected: 删除选定
repeatable: 是否可重复挑战
repeat-count: 最大时间
repeat-reward-commands: 重复指令奖励
repeat-reward-experience: 重复经验奖励
repeat-reward-items: 重复物品奖励
repeat-reward-money: 重复金钱奖励
repeat-reward-text: 重复奖励信息
required-blocks: 检测的方块
required-entities: 检测的实体
required-experience: 需要的经验值
required-items: 需要的物品
required-level: 需要的岛屿等级
required-money: 需要的金钱
required-permissions: 需要的权限
requirements: 要求
reset: 重置某个玩家的挑战
reset-on-new: 在新的岛屿上重置
reward-commands: 指令奖励
reward-experience: 经验奖励
reward-items: 物品奖励
reward-money: 金钱奖励
rewards: 奖励
reward-text: 奖励信息
save: 保存
search-radius: 搜索半径
set: "="
settings: 编辑设定
show-eggs: 切换视图模式
title-enable: 显示标题
title-showtime: 标题显示时间
toggle-user-list: 用户列表
value:
waiver-amount: 豁免金额
import: 导入ASkyBlock挑战
line-length: 物品Lore行长度
history-lifespan: 历史生命周期
island-store: 逐岛存储
library: 网络库
download: 已下载的挑战库
challenge-wipe: 清空挑战数据库
players-wipe: 清空用户数据库
visibility-mode: 挑战可见性模式
type:
island: "&6岛屿类型"
inventory: "&6物品栏类型"
other: "&6其他类型"
next: 下一页
previous: 上一页
return: 返回上一级
value: 完成
increase: 增加
reduce: 减少
challenge-description:
completed: "&B已完成"
completed-times: 已完成 [donetimes]
completed-times-of: '完成次数: [donetimes] 上限: [maxtimes]'
environment: '所需实体:'
experience-reward: "&6经验奖励: [value]"
level: "&F挑战级别: [level]"
maxed-reached: '完成次数: [donetimes] 上限: [maxtimes]'
money-reward: "&6金钱奖励: $[value]"
not-repeatable: "&c该挑战不可重复!"
objects-close-by: "&c任务需求的方块/生物不能离你太远!(超出侦测范围)"
required-blocks: '所需方块:'
required-entities: '所需实体:'
required-experience: "&6所需经验: [value]"
required-island-level: "&6所需岛屿等级: [value]"
required-items: '所需物品:'
required-money: "&6所需金钱: $[value]"
reward-commands: "&6指令奖励:"
reward-items: "&6物品奖励:"
warning-blocks-remove: "&c完成此挑战后该挑战需要的方块将会被清空"
warning-entities-kill: "&c完成此挑战后该挑战需要的生物将会被清空"
warning-items-take: "&c完成此挑战后该挑战的需要物品将会被清空"
descriptions:
admin:
add-challenge: 将现有挑战添加到当前挑战级别
add-text-line: "&6 添加新的文本!"
broadcast: 允许/禁止,当玩家完成第一次挑战后向全服玩家广播
cancel: 取消任何操作并返回上一级菜单
challenge-lore: 修改挑战介绍的哪些目标是可见的
challenges: 管理挑战级别 (添加/删除).
click-to-edit: "&4点击此处编辑输入."
complete: 为某个玩家完成某个挑战|玩家无法获得完成奖励。
complete-wipe: 清空插件数据库中的所有挑战,包括玩家的挑战数据!
create-challenge: 添加新挑战。|默认情况下,它将在免费挑战列表中。
create-level: 添加新的挑战等级。
default-export: 将现有的挑战导出至 defaults.json 文件中.
default-import: 导入插件自带挑战
default-locked-icon: 更改默认锁定级别图标。|此级别可以覆盖此选项。
delete-challenge: 删除某个挑战
delete-level: 删除某个挑战等级
deployment: 查看某玩家已完成的挑战
description: 编辑介绍
edit-challenge: 编辑某个挑战设定
edit-level: 编辑某个挑战等级设定
edit-text-line: "&6编辑文本!"
environment: 改变挑战运作的环境。
free-at-top: 改变免费挑战的位置如果为true免费挑战会放在前排如果为false免费挑战将放在后排
glow: 允许/禁用,在已完成的挑战中加上附魔效果
gui-mode: 启用/禁用单一挑战GUI。|&2要求服务器重启。
gui-view-mode: 如果玩家输入/challenges菜单应该显示GameModes还是挑战
icon-challenge: 将在此挑战的GUI面板中显示的图标。
icon-level: 将在此级别的GUI面板中显示的图标。
import: 导入ASkyblock挑战。|右键单击它启用/禁用覆盖模式。|将Challenges.yml放在./BentoBox/addons/Challenges文件夹中。
increase: 增加操作。 单击数字将增加所选数字的值。
input: 打开文本字段输入
input-mode: 在聊天和铁砧输入模式之间切换。
island-store: 启用/禁用挑战每个岛的数据存储。如果启用此选项,整个岛屿团队的挑战进度将是相同的。|不会在点击时转换数据。进展将会失败。
level-lore: 修改挑战级别介绍的哪些目标是可见的
locked-icon: 如果级别被锁定将在GUI面板中显示的图标。
mode-in-world: 属于游戏模式中的世界的玩家.
mode-online: 目前在线的玩家
mode-with-island: 属于游戏模式中的岛屿的玩家.
multiply: 乘法运算。 单击数字会将值乘以所选数字。
name-challenge: 修改挑战名称
name-level: 修改挑战等级名称
order: 更改挑战顺序
properties: 修改常规属性
reduce: 减少操作。 单击数字将减少所选数字的值。
remove-blocks: 是否在挑战结束后删除任务需求方块(替换为空气)
remove-challenge: 从当前级别删除挑战
remove-completed: 允许/禁止,在玩家挑战列表中隐藏已完成的挑战
remove-entities: 是否在挑战结束后删除挑战需要的实体
remove-experience: 是否在玩家完成挑战后删除任务需求的经验值
remove-items: 是否在完成挑战后删除玩家背包中的挑战需求物品
remove-money: 是否在玩家完成挑战后删除任务需求的金钱.|&c需要经济前置.
remove-on-complete: 在玩家完成挑战后是否删除该挑战图标于任务面板中
remove-selected: 删除所选目标|您可以使用鼠标右键选择目标
repeatable: 挑战是否可以重复
repeat-count: 重复挑战的次数如果设置为0则为无限制
repeat-reward-experience: 重复挑战完成后的经验奖励.
repeat-reward-items: '重复挑战完成后的物品奖励.|物品:'
repeat-reward-money: 重复挑战完成后的金钱奖励.|&c需要经济前置.
repeat-reward-text: 重复挑战完成后的信息
required-blocks: 修改挑战需要的方块.|方块:|
required-entities: 修改挑战需要的实体.|实体:|
required-experience: 玩家需要有该项目所设置的经验值才可以完成挑战
required-items: '玩家背包中需要有以下物品才能完成挑战|物品:'
required-level: 玩家需要岛屿等级达到该项目所设置的等级才能完成挑战.|&c需要 Level 组件.
required-money: 玩家需要有该项目所设置的金钱才能完成挑战.|&c需要经济前置.
required-permissions: '玩家需要具有以下权限才能完成挑战|权限:'
requirements: 修改挑战需求
reset: 重置已完成的玩家挑战。|右键单击启用/禁用重置所有功能。
reset-on-new: 允许/禁止,当玩家重置/踢出岛屿后都会重置挑战
reward-commands: '设置完成任务后的指令奖励.|指令:'
reward-experience: 设置完成任务后的经验奖励.
reward-items: '设置完成任务后的物品奖励.|物品:'
rewards: 修改挑战奖励
reward-text: 设置完成任务后的奖励信息
reward-text-level: 完成某挑战级别所有挑战后发送给玩家的信息
save: 保存并返回上一级菜单
search-radius: 玩家完成挑战时检测实体/方块的范围(半径)
selected: 已选中
set: 设置操作,击数字会将值更改为所选数字。
settings: 修改组件设定
show-eggs: 在Egg模式或Head模式之间切换实体视图
title-enable: 启用/禁用玩家完成挑战时显示的标题消息。
title-showtime: 修改标题消息对玩家可见的时间。
toggle-user-list: 切换到不同的玩家列表
waiver-amount: 完成该数量的挑战玩家方能解锁下一挑战级别的挑战
reward-money: 设置完成任务后的金钱奖励.|&c需要经济前置Vault插件和Economy插件.
repeat-reward-commands: 定义挑战完成后执行的自定义命令。| ***在开始处添加 [SELF] 表示命令将由玩家执行,例如 /kill
命令等,否则将被服务器执行。|***字符串 [player] 将被系统替换为完成挑战的玩家名称,例如 /kill [player] 将变成 /kill
BONNe1704 等。|命令:
line-length: 修改每条lore的最大长度。不会影响已有物品。
history-store: 启用/禁用挑战历史存储
history-lifespan: 修改保存历史数据的天数|0表示永久
library: 打开 GUI 显示所有可用的公开挑战库
library-author: 由 &e[author] 创作
library-version: "&9创作于 [version] 版本"
library-lang: "&a语言: [lang]"
library-gamemode: "&a用于 [gamemode] 游戏模式"
lore:
level: 等级字符串 | 表示翻译 'challenges.gui.challenge-description.level'.
status: 状态字符串 | 表示翻译 'challenges.gui.challenge-description.completed'.
count: 完成计数字符串 | 表示翻译 'challenges.gui.challenge-description.completed-times', 'challenges.gui.challenge-description.completed-times-of'
和 'challenges.gui.challenge-description.maxed-reached'.
description: 描述字符串 | 在挑战对象的此处定义 - challenge.description.
warnings: '警告字符串 | 表示下列翻译: | ''challenges.gui.challenge-description.warning-items-take''
| ''challenges.gui.challenge-description.objects-close-by'' | ''challenges.gui.challenge-description.warning-entities-kill''
| ''challenges.gui.challenge-description.warning-blocks-remove''.'
environment: 环境字符串 | 于挑战对象此处定义 - challenge.environment.
requirements: '需求字符串 | 表示下列翻译: | ''challenges.gui.challenge-description.required-level''
| ''challenges.gui.challenge-description.required-money'' | ''challenges.gui.challenge-description.required-experience''
| 以及 challenge.requiredItems, challenge.requiredBlocks 或 challenge.requiredEntities.'
reward_text: 奖励文本 | 在 challenge.rewardText 和 challenge.repeatRewardText
中定义
reward_other: '其他奖励字符串 | 表示下列翻译: | ''challenges.gui.challenge-description.experience-reward''
| ''challenges.gui.challenge-description.money-reward'' | ''challenges.gui.challenge-description.not-repeatable''.'
reward_items: 奖励物品 | 在 challenge.rewardItems 和 challenge.repeatRewardItems
中定义的奖励物品
reward_commands: 奖励命令 | 在 challenge.rewardCommands 和 challenge.repeatRewardCommands
中定义的奖励命令
level_status: 状态字符串 | 表示翻译 'challenges.gui.level-description.completed'.
challenge_count: 成就完成计数器字符串. | 表示 'challenges.gui.level-description.completed-challenges-of'
的翻译
unlock_message: 解锁信息文本 | 在挑战等级对象中定义 - challengeLevel.unlockMessage.
waiver_amount: 解锁下一等级字符串的可继承的挑战计数器 | 表示翻译 'challenges.gui.level-description.waver-amount'
level_reward_text: 奖励文本 | 在 challengeLevel.rewardText 中定义
level_reward_other: '其他奖励字符串 | 表示翻译: | ''challenges.gui.level-description.experience-reward''
| ''challenges.gui.level-description.money-reward''.'
level_reward_items: 奖励物品 | 在 challengeLevel.rewardItems 中定义的物品
level_reward_commands: 奖励命令 | 在 challengeLevel.rewardCommands 中定义的完成挑战将会奖励玩家的命令
download: 允许手动升级可用的挑战库 | 右击以启用缓存清理
download-disabled: GitHub 数据下载器已在 BentoBox 中被禁用。没有它,你不能使用库!
challenge-wipe: 完全清空挑战及等级数据库!
players-wipe: 完全清空玩家数据库!
visibility-mode: 切换未发布的挑战是否应当可见
block: "- [block] : [count]"
command: "- [command]"
current-value: "|&6当前值: [value]."
disabled: 禁用
enabled: 有效
entity: "- [entity] : [count]"
item: "- [count] x [item]"
item-enchant: " - [enchant] [level]"
item-meta: " ([meta])"
level-locked: 请完成 [count] 个 [level] 级别的挑战来解锁这个挑战级别!
level-unlocked: 点击查看 [level] 级别的挑战!
nether: "- 地狱"
normal: "- 主世界"
permission: "- [permission]"
the-end: "- 末地"
increase-by: "&a为完成计数器增加 [value]"
reduce-by: "&c为完成计数器减少 [value]"
visibility:
visible: 所有挑战对任何人可见
hidden: 仅发布的挑战可见
toggleable: 切换未发布的挑战的可见性
type:
island: "&a允许获取玩家附近的方块或怪物"
inventory: "&a允许获取玩家物品栏中的物品"
other: "&a允许获取其他插件/扩展中的物品"
item-description:
armor-color: " [color]"
book-meta: " [title] by [author]"
custom-effects: " 自定义效果:"
egg-meta: " [mob]"
item: "- [count] x [item]"
item-enchant: " - [enchant] [level]"
item-lore: " 物品Lore:"
item-meta: " ([meta])"
item-name: " [name]"
potion-effect: " [effect] x [amplifier] for [duration]t"
potion-type: " [name]"
potion-type-extended: " Extended [name]"
potion-type-extended-upgraded: " [name]"
potion-type-upgraded: " Upgraded [name]"
recipe-count: " [count] recipes"
skull-owner: " [owner]"
fish-meta: "[body-color] 以 [pattern-color] [pattern]"
level-description:
completed: "&B已完成"
completed-challenges-of: "&你已经完成 [number] 个该级别的挑战,达到了 [max]个挑战."
experience-reward: "&6经验奖励: [value]"
money-reward: "&6金钱奖励: $[value]"
reward-commands: "&6指令奖励:"
reward-items: "&6物品奖励:"
waver-amount: "&6可以跳过[value] 个挑战来解锁下一个挑战级别."
questions:
prefix: "&2[SERVER]: "
admin:
number: 输入一个数字,然后按两次回车。
unique-id: 输入不重复的对象名,然后按回车。
challenge-name: 输入当前挑战的显示名称,然后按回车。
level-name: 输入当前等级的显示名称,然后按回车。
title:
admin:
choose-challenge-title: "&a选择挑战"
choose-level-title: "&a选择挑战等级"
choose-user-title: "&a选择玩家"
confirm-title: "&a确认"
edit-challenge-title: "&a编辑挑战"
edit-level-title: "&a编辑挑战等级"
edit-text-fields: "&a编辑文本字段"
manage-blocks: "&a管理方块"
manage-entities: "&a管理实体"
manage-items: "&a管理物品"
manage-numbers: "&a数字垫"
select-block: "&a选择方块"
select-challenge: "&a选择挑战"
select-entity: "&a选择实体"
settings-title: "&a编辑设定"
toggle-environment: "&a切换环境"
gui-title: "&a挑战管理"
library-title: "&a可下载的库"
lore-add: "&a添加物品Lore"
lore-remove: "&a移除物品Lore"
lore-edit: "&a编辑物品Lore"
type-select: "&a选择挑战类型"
challenges: "&6挑战"
game-modes: "&6选择游戏模式"
multiple-complete: "&6多少次"
messages:
admin:
already-completed: "&2这个挑战已经完成"
challenge-created: "[challenge]&r created!"
completed: "&2已为[player]完成挑战[name]!"
complete-wipe: "&c希望你有备份因为你已经创建了所有Challenges Addon数据库"
hit-things: 点击物品将它们添加到所需的事物列表中。 完成后右键单击。
you-added: 你在挑战中添加了一个[thing]
reset: "&2你刚重设了 [player] 的 [name] 挑战!"
reset-all: "&2[player] 的所有挑战都被你重设了!"
not-completed: "&2这个挑战还没完成呢!"
migrate-start: "&2开始迁移挑战扩展数据."
migrate-end: "&2挑战扩展数据已迁移到新格式."
migrate-not: "&2数据全部有效."
start-downloading: "&5开始下载并导入挑战库"
challenge-wipe: "&c希望你已做好备份因你刚刚从数据库中删除了所有的挑战和等级"
players-wipe: "&c希望你已做好备份因你刚刚从数据库中删除了所有玩家已完成的挑战"
defaults-file-completed: defaults.json文件填充了来自[world]的挑战!
defaults-file-overwrite: defaults.json存在。 它将被覆盖。
import-challenges: 开始导入挑战
import-levels: 开始导入挑战级别
import-number: 导入 [number] 个挑战
load-add: '添加新的对象: [value]'
load-overwriting: 覆盖 "[value]"
load-skipping: '"[value]" 已存在 - 跳过'
name-has-completed-challenge: "&5[name] 已完成 [value] &r&5挑战!"
name-has-completed-level: "&5[name] 已完成 [value] &r&5挑战级别!"
no-levels: '警告: challenges.yml文件中没有定义挑战级别'
you-completed-challenge: "&2你已经完成了 [value] &r&2挑战!"
you-completed-level: "&2你完成了 [value] &r&2级别!"
you-repeated-challenge: "&2你已经重复完成了 [value] &r&2挑战!"
you-repeated-challenge-multiple: "&2你重复完成了 [value] &r&2挑战 [count] 次!"
titles:
challenge-subtitle: "[friendlyName]"
challenge-title: 完成挑战
level-subtitle: "[friendlyName]"
level-title: 成功挑战级别
protection:
flags:
CHALLENGES_ISLAND_PROTECTION:
description: "&5&o切换谁可以\n&5&o挖槽挑战"
name: "挑战保护"
CHALLENGES_WORLD_PROTECTION:
description: "&5&o为玩家启用/禁用\n&5&o要求他们在他们的岛屿上\n&5&o才能完成挑战."
name: "挑战岛屿限制"
hint: "请在自己的岛屿完成挑战!"
flags:
CHALLENGES_ISLAND_PROTECTION:
name: 挑战保护
description: |-
&5&o切换谁可以
&5&o完成挑战
CHALLENGES_WORLD_PROTECTION:
description: |-
&5&o为玩家启用/禁用
&5&o要求他们在他们的岛屿上
&5&o才能完成挑战.
hint: 请在自己的岛屿完成挑战!
name: 挑战岛屿限制
version: 11
meta:
authors:
- BONNe

View File

@ -1,7 +1,9 @@
package world.bentobox.challenges.tasks;
import static org.junit.Assert.*;
import static org.mockito.Matchers.*;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertTrue;
import static org.mockito.Matchers.any;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
@ -24,8 +26,8 @@ import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import world.bentobox.challenges.ChallengesAddon;
import world.bentobox.bentobox.api.user.User;
import world.bentobox.challenges.ChallengesAddon;
/**
* @author tastybento