mirror of
https://github.com/BentoBoxWorld/BentoBox.git
synced 2024-09-30 23:57:30 +02:00
Merge branch 'develop' of https://github.com/BentoBoxWorld/BentoBox.git into develop
This commit is contained in:
commit
08e520565d
@ -49,6 +49,7 @@ And these include some of the official Addons that are bringing incredible new f
|
||||
* [**MagicCobblestoneGenerator**](https://github.com/BentoBoxWorld/MagicCobblestoneGenerator): generates any blocks in cobblestone generators.
|
||||
* [**IslandFly**](https://github.com/BentoBoxWorld/IslandFly): allows your players to fly on their islands.
|
||||
* [**Limits**](https://github.com/BentoBoxWorld/addon-limits): limits blocks and entities that your players can place on their islands.
|
||||
* [**Greenhouses**](https://github.com/BentoBoxWorld/greenhouses): enables players to make mini biome glass houses on their island.
|
||||
|
||||
And there are plenty of other official or community-made Addons you can try and use for your server!
|
||||
|
||||
|
2
pom.xml
2
pom.xml
@ -80,7 +80,7 @@
|
||||
<!-- Do not change unless you want different name for local builds. -->
|
||||
<build.number>-LOCAL</build.number>
|
||||
<!-- This allows to change between versions. -->
|
||||
<build.version>1.6.0</build.version>
|
||||
<build.version>1.7.0</build.version>
|
||||
</properties>
|
||||
|
||||
<!-- Profiles will allow to automatically change build version. -->
|
||||
|
@ -7,6 +7,7 @@ import org.bstats.bukkit.Metrics;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import world.bentobox.bentobox.api.addons.GameModeAddon;
|
||||
import world.bentobox.bentobox.api.flags.Flag;
|
||||
|
||||
/**
|
||||
* @author Poslovitch
|
||||
@ -42,6 +43,7 @@ public class BStats {
|
||||
registerGameModeAddonsChart();
|
||||
registerHooksChart();
|
||||
registerPlayersPerServerChart();
|
||||
registerFlagsDisplayModeChart();
|
||||
|
||||
// Single Line charts
|
||||
registerIslandsCountChart();
|
||||
@ -134,4 +136,25 @@ public class BStats {
|
||||
else return "201+";
|
||||
}));
|
||||
}
|
||||
|
||||
/**
|
||||
* Sends the "flags display mode" of all the online players.
|
||||
* @since 1.6.0
|
||||
*/
|
||||
private void registerFlagsDisplayModeChart() {
|
||||
metrics.addCustomChart(new Metrics.AdvancedPie("flagsDisplayMode", () -> {
|
||||
Map<String, Integer> values = new HashMap<>();
|
||||
|
||||
Bukkit.getOnlinePlayers().forEach(player -> {
|
||||
Flag.Mode mode = plugin.getPlayers().getFlagsDisplayMode(player.getUniqueId());
|
||||
if (values.containsKey(mode.name())) {
|
||||
values.put(mode.name(), values.get(mode.name()) + 1);
|
||||
} else {
|
||||
values.put(mode.name(), 1);
|
||||
}
|
||||
});
|
||||
|
||||
return values;
|
||||
}));
|
||||
}
|
||||
}
|
||||
|
@ -13,6 +13,11 @@ import world.bentobox.bentobox.api.user.User;
|
||||
import world.bentobox.bentobox.database.objects.Island;
|
||||
import world.bentobox.bentobox.util.Util;
|
||||
|
||||
/**
|
||||
* Unban command
|
||||
* @author tastybento
|
||||
*
|
||||
*/
|
||||
public class IslandUnbanCommand extends CompositeCommand {
|
||||
|
||||
public IslandUnbanCommand(CompositeCommand islandCommand) {
|
||||
@ -29,7 +34,7 @@ public class IslandUnbanCommand extends CompositeCommand {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean execute(User user, String label, List<String> args) {
|
||||
public boolean canExecute(User user, String label, List<String> args) {
|
||||
if (args.size() != 1) {
|
||||
// Show help
|
||||
showHelp(this, user);
|
||||
@ -63,12 +68,13 @@ public class IslandUnbanCommand extends CompositeCommand {
|
||||
return false;
|
||||
}
|
||||
// Finished error checking - start the unbanning
|
||||
User targetUser = User.getInstance(targetUUID);
|
||||
return unban(user, targetUser);
|
||||
return true;
|
||||
}
|
||||
|
||||
private boolean unban(User issuer, User target) {
|
||||
Island island = getIslands().getIsland(getWorld(), issuer.getUniqueId());
|
||||
@Override
|
||||
public boolean execute(User user, String label, List<String> args) {
|
||||
User target = User.getInstance(getPlayers().getUUID(args.get(0)));
|
||||
Island island = getIslands().getIsland(getWorld(), user.getUniqueId());
|
||||
|
||||
// Run the event
|
||||
IslandBaseEvent unbanEvent = IslandEvent.builder()
|
||||
@ -79,9 +85,9 @@ public class IslandUnbanCommand extends CompositeCommand {
|
||||
.build();
|
||||
|
||||
// Event is not cancelled
|
||||
if (!unbanEvent.isCancelled() && island.unban(issuer.getUniqueId(), target.getUniqueId())) {
|
||||
issuer.sendMessage("commands.island.unban.player-unbanned", TextVariables.NAME, target.getName());
|
||||
target.sendMessage("commands.island.unban.you-are-unbanned", TextVariables.NAME, issuer.getName());
|
||||
if (!unbanEvent.isCancelled() && island.unban(user.getUniqueId(), target.getUniqueId())) {
|
||||
user.sendMessage("commands.island.unban.player-unbanned", TextVariables.NAME, target.getName());
|
||||
target.sendMessage("commands.island.unban.you-are-unbanned", TextVariables.NAME, user.getName());
|
||||
// Set cooldown
|
||||
if (getSettings().getBanCooldown() > 0 && getParent() != null) {
|
||||
getParent().getSubCommand("ban").ifPresent(subCommand ->
|
||||
|
@ -1,30 +0,0 @@
|
||||
package world.bentobox.bentobox.api.events;
|
||||
|
||||
import org.bukkit.event.Event;
|
||||
|
||||
/**
|
||||
* Provides the default methods expected when extending {@link Event}.
|
||||
* @deprecated As of 1.5.3, for removal. Use {@link BentoBoxEvent} instead.
|
||||
*/
|
||||
@Deprecated
|
||||
public abstract class PremadeEvent extends BentoBoxEvent {
|
||||
|
||||
/**
|
||||
* The default constructor is defined for cleaner code.
|
||||
* This constructor assumes the PremadeEvent is synchronous.
|
||||
*/
|
||||
public PremadeEvent() {
|
||||
this(false);
|
||||
}
|
||||
|
||||
/**
|
||||
* This constructor is used to explicitly declare an PremadeEvent as synchronous or asynchronous.
|
||||
* @param async - true indicates the event will fire asynchronously, false
|
||||
* by default from default constructor
|
||||
* @since 1.5.2
|
||||
*/
|
||||
public PremadeEvent(boolean async) {
|
||||
super(async);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,40 @@
|
||||
package world.bentobox.bentobox.api.events.flags;
|
||||
|
||||
import world.bentobox.bentobox.api.events.BentoBoxEvent;
|
||||
import world.bentobox.bentobox.api.flags.Flag;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Poslovitch
|
||||
* @since 1.6.0
|
||||
*/
|
||||
public abstract class FlagChangeEvent extends BentoBoxEvent {
|
||||
|
||||
private final UUID player;
|
||||
private final Flag editedFlag;
|
||||
|
||||
/**
|
||||
* @param player - player changing the flag
|
||||
* @param editedFlag - flag that has changed
|
||||
*/
|
||||
public FlagChangeEvent(UUID player, Flag editedFlag) {
|
||||
this.player = player;
|
||||
this.editedFlag = editedFlag;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the player
|
||||
*/
|
||||
public UUID getPlayer() {
|
||||
return player;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the editedFlag
|
||||
*/
|
||||
public Flag getEditedFlag() {
|
||||
return editedFlag;
|
||||
}
|
||||
}
|
@ -2,7 +2,6 @@ package world.bentobox.bentobox.api.events.flags;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
import world.bentobox.bentobox.api.events.BentoBoxEvent;
|
||||
import world.bentobox.bentobox.api.flags.Flag;
|
||||
import world.bentobox.bentobox.database.objects.Island;
|
||||
|
||||
@ -10,11 +9,9 @@ import world.bentobox.bentobox.database.objects.Island;
|
||||
* @author tastybento
|
||||
* @since 1.6.0
|
||||
*/
|
||||
public class FlagProtectionChangeEvent extends BentoBoxEvent {
|
||||
public class FlagProtectionChangeEvent extends FlagChangeEvent {
|
||||
|
||||
private final Island island;
|
||||
private final UUID player;
|
||||
private final Flag editedFlag;
|
||||
private final int setTo;
|
||||
|
||||
/**
|
||||
@ -25,9 +22,8 @@ public class FlagProtectionChangeEvent extends BentoBoxEvent {
|
||||
* @param setTo - value it was set to
|
||||
*/
|
||||
public FlagProtectionChangeEvent(Island island, UUID player, Flag editedFlag, int setTo) {
|
||||
super(player, editedFlag);
|
||||
this.island = island;
|
||||
this.player = player;
|
||||
this.editedFlag = editedFlag;
|
||||
this.setTo = setTo;
|
||||
}
|
||||
|
||||
@ -38,20 +34,6 @@ public class FlagProtectionChangeEvent extends BentoBoxEvent {
|
||||
return island;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the player
|
||||
*/
|
||||
public UUID getPlayer() {
|
||||
return player;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the editedFlag
|
||||
*/
|
||||
public Flag getEditedFlag() {
|
||||
return editedFlag;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the setTo
|
||||
*/
|
||||
|
@ -2,7 +2,6 @@ package world.bentobox.bentobox.api.events.flags;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
import world.bentobox.bentobox.api.events.BentoBoxEvent;
|
||||
import world.bentobox.bentobox.api.flags.Flag;
|
||||
import world.bentobox.bentobox.database.objects.Island;
|
||||
|
||||
@ -10,11 +9,9 @@ import world.bentobox.bentobox.database.objects.Island;
|
||||
* @author tastybento
|
||||
* @since 1.6.0
|
||||
*/
|
||||
public class FlagSettingChangeEvent extends BentoBoxEvent {
|
||||
public class FlagSettingChangeEvent extends FlagChangeEvent {
|
||||
|
||||
private final Island island;
|
||||
private final UUID player;
|
||||
private final Flag editedFlag;
|
||||
private final boolean setTo;
|
||||
|
||||
/**
|
||||
@ -25,9 +22,8 @@ public class FlagSettingChangeEvent extends BentoBoxEvent {
|
||||
* @param setTo - value it was set to
|
||||
*/
|
||||
public FlagSettingChangeEvent(Island island, UUID player, Flag editedFlag, boolean setTo) {
|
||||
super(player, editedFlag);
|
||||
this.island = island;
|
||||
this.player = player;
|
||||
this.editedFlag = editedFlag;
|
||||
this.setTo = setTo;
|
||||
}
|
||||
|
||||
@ -38,20 +34,6 @@ public class FlagSettingChangeEvent extends BentoBoxEvent {
|
||||
return island;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the player
|
||||
*/
|
||||
public UUID getPlayer() {
|
||||
return player;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the editedFlag
|
||||
*/
|
||||
public Flag getEditedFlag() {
|
||||
return editedFlag;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the setTo
|
||||
*/
|
||||
|
@ -4,18 +4,15 @@ import java.util.UUID;
|
||||
|
||||
import org.bukkit.World;
|
||||
|
||||
import world.bentobox.bentobox.api.events.BentoBoxEvent;
|
||||
import world.bentobox.bentobox.api.flags.Flag;
|
||||
|
||||
/**
|
||||
* @author tastybento
|
||||
* @since 1.6.0
|
||||
*/
|
||||
public class FlagWorldSettingChangeEvent extends BentoBoxEvent {
|
||||
public class FlagWorldSettingChangeEvent extends FlagChangeEvent {
|
||||
|
||||
private final World world;
|
||||
private final UUID player;
|
||||
private final Flag editedFlag;
|
||||
private final boolean setTo;
|
||||
|
||||
/**
|
||||
@ -26,9 +23,8 @@ public class FlagWorldSettingChangeEvent extends BentoBoxEvent {
|
||||
* @param setTo - value it was set to
|
||||
*/
|
||||
public FlagWorldSettingChangeEvent(World world, UUID player, Flag editedFlag, boolean setTo) {
|
||||
super(player, editedFlag);
|
||||
this.world = world;
|
||||
this.player = player;
|
||||
this.editedFlag = editedFlag;
|
||||
this.setTo = setTo;
|
||||
}
|
||||
|
||||
@ -39,21 +35,6 @@ public class FlagWorldSettingChangeEvent extends BentoBoxEvent {
|
||||
return world;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @return the player
|
||||
*/
|
||||
public UUID getPlayer() {
|
||||
return player;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the editedFlag
|
||||
*/
|
||||
public Flag getEditedFlag() {
|
||||
return editedFlag;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the setTo
|
||||
*/
|
||||
|
@ -359,6 +359,7 @@ public class Flag implements Comparable<Flag> {
|
||||
* @param invisible - true if this flag is not visible to players
|
||||
* @return - PanelItem for this flag or null if item is invisible to user
|
||||
*/
|
||||
@Nullable
|
||||
public PanelItem toPanelItem(BentoBox plugin, User user, @Nullable Island island, boolean invisible) {
|
||||
// Invisibility
|
||||
if (!user.isOp() && invisible) {
|
||||
|
@ -17,4 +17,8 @@ public class TextVariables {
|
||||
public static final String SPAWN_HERE = "[spawn_here]";
|
||||
public static final String VERSION = "[version]";
|
||||
public static final String START_TEXT = "[start]";
|
||||
/**
|
||||
* @since 1.6.0
|
||||
*/
|
||||
public static final String NEXT = "[next]";
|
||||
}
|
||||
|
@ -1,5 +1,7 @@
|
||||
package world.bentobox.bentobox.api.panels;
|
||||
|
||||
import org.eclipse.jdt.annotation.Nullable;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@ -25,7 +27,7 @@ public interface Tab {
|
||||
* Return the panel items for this tab
|
||||
* @return a list of items in slot order
|
||||
*/
|
||||
List<PanelItem> getPanelItems();
|
||||
List<@Nullable PanelItem> getPanelItems();
|
||||
|
||||
/**
|
||||
* @return the permission required to view this tab or empty if no permission required
|
||||
|
@ -3,6 +3,7 @@ package world.bentobox.bentobox.api.panels;
|
||||
import java.security.InvalidParameterException;
|
||||
import java.util.List;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.Objects;
|
||||
import java.util.TreeMap;
|
||||
|
||||
import org.bukkit.Material;
|
||||
@ -88,7 +89,7 @@ public class TabbedPanel extends Panel implements PanelListener {
|
||||
// Show the active tab
|
||||
if (tpb.getTabs().containsKey(activeTab)) {
|
||||
List<PanelItem> panelItems = tab.getPanelItems();
|
||||
panelItems.stream().skip(page * 43L).limit(page * 43L + 43L).forEach(i -> items.put(items.lastKey() + 1, i));
|
||||
panelItems.stream().filter(Objects::nonNull).skip(page * 43L).limit(page * 43L + 43L).forEach(i -> items.put(items.lastKey() + 1, i));
|
||||
// Add forward and backward icons
|
||||
if (page > 0) {
|
||||
// Previous page icon
|
||||
|
@ -56,8 +56,6 @@ public class BlueprintPaster {
|
||||
private Location pos1;
|
||||
// The maximum block position (x,y,z)
|
||||
private Location pos2;
|
||||
// Speed of pasting
|
||||
private int pasteSpeed;
|
||||
private PasteState pasteState;
|
||||
private BukkitTask pastingTask;
|
||||
private BlueprintClipboard clipboard;
|
||||
@ -113,7 +111,7 @@ public class BlueprintPaster {
|
||||
|
||||
// Initial state & speed
|
||||
pasteState = PasteState.BLOCKS;
|
||||
pasteSpeed = plugin.getSettings().getPasteSpeed();
|
||||
final int pasteSpeed = plugin.getSettings().getPasteSpeed();
|
||||
|
||||
pastingTask = Bukkit.getScheduler().runTaskTimer(plugin, () -> {
|
||||
int count = 0;
|
||||
|
@ -59,7 +59,6 @@ public class JSONDatabaseHandler<T> extends AbstractJSONDatabaseHandler<T> {
|
||||
try (FileReader reader = new FileReader(file)){
|
||||
T object = getGson().fromJson(reader, dataObject);
|
||||
if (object == null) {
|
||||
reader.close();
|
||||
throw new IOException("JSON file created a null object: " + file.getPath());
|
||||
}
|
||||
list.add(object);
|
||||
|
@ -1188,7 +1188,7 @@ public class Island implements DataObject {
|
||||
* @since 1.6.0
|
||||
*/
|
||||
public boolean isReserved() {
|
||||
return reserved == null ? false : reserved;
|
||||
return reserved != null && reserved;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -42,11 +42,6 @@ public enum GameModePlaceholder {
|
||||
ISLAND_PROTECTION_RANGE_DIAMETER("island_protection_range_diameter", (addon, user, island) -> island == null ? "" : String.valueOf(2 * island.getProtectionRange())),
|
||||
ISLAND_OWNER("island_owner", (addon, user, island) -> island == null ? "" : addon.getPlayers().getName(island.getOwner())),
|
||||
ISLAND_CREATION_DATE("island_creation_date", (addon, user, island) -> island == null ? "" : DateFormat.getInstance().format(Date.from(Instant.ofEpochMilli(island.getCreatedDate())))),
|
||||
/**
|
||||
* @deprecated As of 1.5.2, for removal; use {@link #ISLAND_CENTER} instead.
|
||||
*/
|
||||
@Deprecated
|
||||
ISLAND_SPAWNPOINT("island_spawnpoint", (addon, user, island) -> island == null ? "" : Util.xyz(island.getCenter().toVector())),
|
||||
ISLAND_NAME("island_name", (addon, user, island) -> {
|
||||
if (island == null || island.getName() == null) {
|
||||
return "";
|
||||
|
@ -62,7 +62,7 @@ public class IslandDeletionManager implements Listener {
|
||||
});
|
||||
}
|
||||
// Remove the islands from the database so they don't come back
|
||||
toBeRemoved.forEach(handler::deleteObject);
|
||||
//toBeRemoved.forEach(handler::deleteObject);
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||
|
@ -104,16 +104,6 @@ public class NewIsland {
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param world world where the island will go
|
||||
* @deprecated use {@link #addon} instead
|
||||
*/
|
||||
@Deprecated
|
||||
public Builder world(World world) {
|
||||
this.world2 = world;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the addon
|
||||
* @param addon a game mode addon
|
||||
|
@ -11,9 +11,12 @@ import org.bukkit.Sound;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.event.inventory.ClickType;
|
||||
|
||||
import org.eclipse.jdt.annotation.NonNull;
|
||||
import org.eclipse.jdt.annotation.Nullable;
|
||||
import world.bentobox.bentobox.BentoBox;
|
||||
import world.bentobox.bentobox.api.flags.Flag;
|
||||
import world.bentobox.bentobox.api.flags.Flag.Type;
|
||||
import world.bentobox.bentobox.api.localization.TextVariables;
|
||||
import world.bentobox.bentobox.api.panels.Panel;
|
||||
import world.bentobox.bentobox.api.panels.PanelItem;
|
||||
import world.bentobox.bentobox.api.panels.PanelItem.ClickHandler;
|
||||
@ -110,7 +113,8 @@ public class SettingsTab implements Tab, ClickHandler {
|
||||
* @return list of all the panel items for this flag type
|
||||
*/
|
||||
@Override
|
||||
public List<PanelItem> getPanelItems() {
|
||||
@NonNull
|
||||
public List<@Nullable PanelItem> getPanelItems() {
|
||||
List<Flag> flags = getFlags();
|
||||
int i = 0;
|
||||
// Jump past empty tabs
|
||||
@ -134,7 +138,8 @@ public class SettingsTab implements Tab, ClickHandler {
|
||||
icons.put(7, new PanelItemBuilder().icon(Material.GOLD_INGOT)
|
||||
.name(user.getTranslation(PROTECTION_PANEL + "mode.advanced.name"))
|
||||
.description(user.getTranslation(PROTECTION_PANEL + "mode.advanced.description"), "",
|
||||
user.getTranslation(PROTECTION_PANEL + "mode.click-to-switch", "[next]", user.getTranslation(PROTECTION_PANEL + "mode.expert.name")))
|
||||
user.getTranslation(PROTECTION_PANEL + "mode.click-to-switch",
|
||||
TextVariables.NEXT, user.getTranslation(PROTECTION_PANEL + "mode.expert.name")))
|
||||
.clickHandler(this)
|
||||
.build());
|
||||
break;
|
||||
@ -142,7 +147,8 @@ public class SettingsTab implements Tab, ClickHandler {
|
||||
icons.put(7, new PanelItemBuilder().icon(Material.NETHER_BRICK)
|
||||
.name(user.getTranslation(PROTECTION_PANEL + "mode.expert.name"))
|
||||
.description(user.getTranslation(PROTECTION_PANEL + "mode.expert.description"), "",
|
||||
user.getTranslation(PROTECTION_PANEL + "mode.click-to-switch", "[next]", user.getTranslation(PROTECTION_PANEL + "mode.basic.name")))
|
||||
user.getTranslation(PROTECTION_PANEL + "mode.click-to-switch",
|
||||
TextVariables.NEXT, user.getTranslation(PROTECTION_PANEL + "mode.basic.name")))
|
||||
.clickHandler(this)
|
||||
.build());
|
||||
break;
|
||||
@ -150,7 +156,8 @@ public class SettingsTab implements Tab, ClickHandler {
|
||||
icons.put(7, new PanelItemBuilder().icon(Material.IRON_INGOT)
|
||||
.name(user.getTranslation(PROTECTION_PANEL + "mode.basic.name"))
|
||||
.description(user.getTranslation(PROTECTION_PANEL + "mode.basic.description"), "",
|
||||
user.getTranslation(PROTECTION_PANEL + "mode.click-to-switch", "[next]", user.getTranslation(PROTECTION_PANEL + "mode.advanced.name")))
|
||||
user.getTranslation(PROTECTION_PANEL + "mode.click-to-switch",
|
||||
TextVariables.NEXT, user.getTranslation(PROTECTION_PANEL + "mode.advanced.name")))
|
||||
.clickHandler(this)
|
||||
.build());
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
# BentoBox Configuration 1.5.3
|
||||
# BentoBox Configuration 1.6.0
|
||||
# This config file is dynamic and is updated right after BentoBox loaded its settings from it.
|
||||
# You can edit it while the server is online and you can do '/bbox reload' to take the changes into account.
|
||||
# However, it is a better practice to edit this file while the server is offline.
|
||||
@ -11,11 +11,11 @@ general:
|
||||
# If there is no economy plugin present anyway, money will be automatically disabled.
|
||||
use-economy: true
|
||||
database:
|
||||
# JSON, MYSQL, MARIADB (10.2.3+), MONGODB, SQLITE and YAML(deprecated).
|
||||
# JSON, MYSQL, MARIADB (10.2.3+), MONGODB, SQLITE, POSTGRESQL and YAML(deprecated).
|
||||
# Transition database options are:
|
||||
# YAML2JSON, YAML2MARIADB, YAML2MYSQL, YAML2MONGODB, YAML2SQLITE
|
||||
# JSON2MARIADB, JSON2MYSQL, JSON2MONGODB, JSON2SQLITE
|
||||
# MYSQL2JSON, MARIADB2JSON, MONGODB2JSON, SQLITE2JSON
|
||||
# JSON2MARIADB, JSON2MYSQL, JSON2MONGODB, JSON2SQLITE, JSON2POSTGRESQL
|
||||
# MYSQL2JSON, MARIADB2JSON, MONGODB2JSON, SQLITE2JSON, POSTGRESQL2JSON
|
||||
# If you need others, please make a feature request.
|
||||
# Transition options enable migration from one database type to another. Use /bbox migrate.
|
||||
# YAML and JSON are file-based databases.
|
||||
@ -107,7 +107,7 @@ web:
|
||||
download-data: true
|
||||
# Time in minutes between each connection to the GitHub API.
|
||||
# This allows for up-to-the-minute information gathering.
|
||||
# However, as the GitHub API data does not get updated instantly, this value cannot be set less than 15 minutes.
|
||||
# However, as the GitHub API data does not get updated instantly, this value cannot be set to less than 60 minutes.
|
||||
# Setting this to 0 will make BentoBox download data only at startup.
|
||||
# Added since 1.5.0.
|
||||
connection-interval: 60
|
||||
|
@ -177,7 +177,7 @@ commands:
|
||||
description: "switch player's island to the numbered one in trash"
|
||||
out-of-range: "&cNumber must be between 1 and [number]. Use &l[label] trash [player] &r&cto see island numbers"
|
||||
cannot-switch: "&cSwitch failed. See console log for error."
|
||||
success: "&Successfully switched the player's island to the specified one."
|
||||
success: "&aSuccessfully switched the player's island to the specified one."
|
||||
trash:
|
||||
no-unowned-in-trash: "&cNo unowned islands in trash"
|
||||
no-islands-in-trash: "&cPlayer has no islands in trash"
|
||||
|
@ -78,6 +78,11 @@ commands:
|
||||
unowned:
|
||||
description: "Dzēst bezīpašnieku salas - nepieciešams apstiprinājums"
|
||||
unowned-islands: "&dAtrastas [number] salas"
|
||||
protect:
|
||||
description: Pārslēgt salas aizsargāšanu no dzēšanas
|
||||
move-to-island: '&cSākumā pārvietojies uz salas!'
|
||||
protecting: '&aDzēšanas aizsardzība aktivizēta'
|
||||
unprotecting: '&aDzēšanas aizsardzība noņemta'
|
||||
|
||||
team:
|
||||
add:
|
||||
@ -137,6 +142,7 @@ commands:
|
||||
no-island-here: "&cŠeit neatrodas neviena sala! Apstiprini, lai izveidotu."
|
||||
in-deletion: "&cŠī salas pozīcija šobrīt tiek dzēsta. Mēģini vēlāk."
|
||||
cannot-make-island: "&cAtvaino, bet neizdevās izveidot šeit salu. Iespējams konsulē ir kļūdas paziņojumi."
|
||||
reserved-island: '&aSala ir rezērvēta [xyz] priekš spēlētāja.'
|
||||
unregister:
|
||||
parameters: "<īpašnieks>"
|
||||
description: "atreģistrē īpašnieku no salas paturot salas blokus"
|
||||
@ -164,11 +170,13 @@ commands:
|
||||
banned-players: "Spēlētāji, kam liegts atrasties uz salas:"
|
||||
banned-format: "&c[name]"
|
||||
unowned: "&cBez īpašnieka"
|
||||
purge-protected: Sala ir aizsargāta no dzēšanas
|
||||
switchto:
|
||||
parameters: "<spēlētājs> <numurs>"
|
||||
description: "uzstāda spēlētāja salu kā pirmo (vai doto) atkritnē"
|
||||
out-of-range: "&cNumuram jābūt starp 1 un [number]. Lieto &l[label] trash [player]&r&c, lai redzētu salas numuru"
|
||||
cannot-switch: "&cPārslēgšana neizdevās! Skaties kļūdu paziņojumu konsulē."
|
||||
success: '&aSpēlētāja sala veiskmīgi pārslēgta uz uzstādīto numuru.'
|
||||
trash:
|
||||
no-unowned-in-trash: "&cNav salas atkritnē bez īpašniekiem"
|
||||
no-islands-in-trash: "&cSpēlētājam nav salas atkritnē"
|
||||
@ -181,6 +189,7 @@ commands:
|
||||
emptytrash:
|
||||
parameters: "[spēlētājs]"
|
||||
description: "iztīra atkritni no spēlētāja salām vai salām bez īpašnieka"
|
||||
success: '&aAtkritne ir iztīrīta.'
|
||||
version:
|
||||
description: "attaino BentoBox un papildinājumu versijas"
|
||||
setrange:
|
||||
@ -202,11 +211,16 @@ commands:
|
||||
description: "uzstāda spēlētājam rangu uz viņa salas"
|
||||
unknown-rank: "&cNezināms rangs!"
|
||||
rank-set: "&aSpēlētājam nomainīts rangs no [from] uz [to]."
|
||||
not-possible: '&cRangam ir jābūt lielākam par apmeklētāju'
|
||||
setspawn:
|
||||
description: "uzstāda kā sākuma salu šajā pasaulē visiem spēlētājiem"
|
||||
already-spawn: "&cŠī sala jau ir uzstādīta kā sākuma sala!"
|
||||
no-island-here: "&cŠeit nav neveinas salas."
|
||||
confirmation: "&cVai tiešām vēlies uzstādīt šo salu kā sākuma salu?"
|
||||
success: '&aŠī sala ir veiksmīgi uzstādīta kā sākuma sala šajā pasaulē.'
|
||||
settings:
|
||||
parameters: '[spēlētājs]'
|
||||
description: atver sistēmas vai spēlētāja salas iestatījumus
|
||||
blueprint:
|
||||
management:
|
||||
back: Atpakaļ
|
||||
@ -253,6 +267,10 @@ commands:
|
||||
default-color: ''
|
||||
success: Izdevās!
|
||||
cancelling: Atceļ
|
||||
slot: '&fVēlamā vieta [number]'
|
||||
slot-instructions: |
|
||||
&aKrisais klikšķis, lai palielinātu
|
||||
&aLabais klikšķis, lai samazinātu
|
||||
parameters: "<load/copy/paste/pos1/pos2/save>"
|
||||
description: "manipulē ar shēmām"
|
||||
copy-first: "&cKopē shēmu sākumā!"
|
||||
@ -291,8 +309,10 @@ commands:
|
||||
copying: '&bKopē blokus...'
|
||||
mid-copy: '&cKopēšana vēl notiek. Pagaidi, kad tā beidzas.'
|
||||
copied-percent: '&6Nokopēti [number]%'
|
||||
bedrock-required: '&cVismaz vienam klintsakmenim ir jābūt shēmā!'
|
||||
resetflags:
|
||||
description: "Atiestatī visu salu noklusējuma karodziņu iestatījumus no config.yml"
|
||||
success: '&aVeiksmīgi atiestatīti visi salu iestatījumi uz sākotnējām vērtībām.'
|
||||
world:
|
||||
description: "Pārvaldīt pasaules iestatījumus"
|
||||
delete:
|
||||
@ -327,13 +347,15 @@ commands:
|
||||
about:
|
||||
description: "parādīt autortiesības un licenses informāciju"
|
||||
reload:
|
||||
description: "parādīt iestatījumu, papildinājumus (ja atbalstīts) un valodas"
|
||||
description: "parlādēt iestatījumus, papildinājumus (ja atbalstīts) un valodas"
|
||||
locales-reloaded: "&2Valodas faili pārlādēti."
|
||||
addons-reloaded: "&2Papildinājumu pārlādēti."
|
||||
settings-reloaded: "&2Iestatījumi pārlādēti."
|
||||
addon: '&6Pārlādē &b[name]&2.'
|
||||
addon-reloaded: '&b[name] &2pārlādēts.'
|
||||
unknown-addon: '&2Nezināms papildinājums!'
|
||||
warning: '&cUzmanību: Pārlādēšana var izraisīt nestabilitāti, tādēļ, ja saskarieties ar problēmām,
|
||||
pārstartējiet serveri.'
|
||||
version:
|
||||
plugin-version: "&2BentoBox versija: &3[version]"
|
||||
description: "parādīt BentoBox un papildinājumu versijas"
|
||||
@ -342,6 +364,7 @@ commands:
|
||||
addon-syntax: "&2[name] &3[version] &7(&3[state]&7)"
|
||||
game-world: "&2[name] &7(&3[addon]&7): &aOverworld&7, &r[nether_color]Nether&7, &r[end_color]End"
|
||||
server: "&2Darbojas uz &3[name] [version]&2."
|
||||
database: '&2Databāze: &3[database]'
|
||||
manage:
|
||||
description: "parādīt pārvaldīšanas paneli"
|
||||
catalog:
|
||||
@ -351,6 +374,10 @@ commands:
|
||||
see-console: |-
|
||||
&aPārbaudi izdrukas, lai redzētu trūkstošos tulkojumus.
|
||||
&aŠī komanda var atgiezt pārāk daudz teksta, lai to rādītu sarakstē...
|
||||
delay:
|
||||
previous-command-cancelled: '&cIepriekšēja komanda tika atcelta!'
|
||||
stand-still: '&6Apstājies! Teleportēšana notiks pēc [seconds] sekundēm'
|
||||
moved-so-command-cancelled: '&cTu pakustējies. Teleportēšana atcelta!'
|
||||
confirmation:
|
||||
confirm: "&cIevadi komandu atkārtoti &b[seconds]s&c laikā, lai apstiprinātu."
|
||||
previous-request-cancelled: "&6Iepriekšējais apstiprinājumu pieprasījums ir apturēts."
|
||||
@ -428,6 +455,7 @@ commands:
|
||||
cannot-coop-yourself: "&cTu nevari uzlikt sev šo rangu!"
|
||||
already-has-rank: "&cSpēlētājam jau ir šis rangs!"
|
||||
you-are-a-coop-member: "&2Tu esi uzstādīts kā sabiedrotajs spēlētājam [name]"
|
||||
success: '&aSabiedrotā rangs uzstādīts spēlētājam &b[name].'
|
||||
uncoop:
|
||||
description: "noņemt spēlētājam sabiedrotā rangu"
|
||||
parameters: "<spēlētājs>"
|
||||
@ -437,6 +465,7 @@ commands:
|
||||
player-not-cooped: "&cSpēlētājs nav tavs sabiedrotais!"
|
||||
you-are-no-longer-a-coop-member: "&cTu vairs neesi sabiedrotais [name] salā."
|
||||
all-members-logged-off: "&cVisi salas spēlētāji ir izgājuši, tā ka tu vairs neesi sabiedrotais [name] salā."
|
||||
success: '&b[name] &avairs nav sabiedrotais uz tavas salas.'
|
||||
trust:
|
||||
description: "uzstādīt spēlētājam uzticams rangu"
|
||||
parameters: "<spēlētājs>"
|
||||
@ -444,6 +473,7 @@ commands:
|
||||
members-trusted: "&cKomandas biedriem jau ir šis rangs!"
|
||||
player-already-trusted: "&cSpēlētājam jau ir šis rangs!"
|
||||
you-are-trusted: "&2Spēlētājs [name] tev uzticas!"
|
||||
success: '&aUzticamā rangs uzstādīts spēlētājam &b[name]&a.'
|
||||
untrust:
|
||||
description: "noņemt spēlētājam uzticams rangu"
|
||||
parameters: "<spēlētājs>"
|
||||
@ -451,6 +481,7 @@ commands:
|
||||
cannot-untrust-member: "&cTu nevari noņemt šo rangu komandas spēlētājam!"
|
||||
player-not-trusted: "&cSpēlētājam nav šis rangs!"
|
||||
you-are-no-longer-trusted: "&cSpēlētājs [name] vairs tev neuzticas!"
|
||||
success: '&b[name] &avairs nav uzticamais uz tavas salas.'
|
||||
invite:
|
||||
description: "uzaicini spēlētāju pievienoties tavai salai"
|
||||
invitation-sent: "&aIelūgums nosūtīts [name]"
|
||||
@ -485,6 +516,7 @@ commands:
|
||||
cannot-leave: "&cĪpašnieks nevar pamest komandu! Nodod salu citam vai izmet visus no komandas."
|
||||
description: "pamest savu komandu"
|
||||
left-your-island: "&c[name] &cpameta tavu komandu!"
|
||||
success: '&aTu pameti šo salu.'
|
||||
kick:
|
||||
description: "izmest spēlētāju no tavas salas"
|
||||
parameters: "<spēlētājs>"
|
||||
@ -496,6 +528,8 @@ commands:
|
||||
parameters: "<spēlētājs>"
|
||||
failure: "&cSpēlētājs jau sasniedzis zemāko rangu!"
|
||||
success: "&aSpēlētājs [name] tika pazemināts uz [rank]"
|
||||
errors:
|
||||
cant-demote-yourself: '&cTu nevari pazemināt rangu pats sev!'
|
||||
promote:
|
||||
description: "paaugstina spēlētāja komandas rangu"
|
||||
parameters: "<spēlētājs>"
|
||||
@ -545,6 +579,7 @@ commands:
|
||||
cannot-ban-member: "&cTu nevari izraidīt komandas biedrus!"
|
||||
not-on-island: "&cŠis spēlētājs nav uz tavas salas!"
|
||||
player-expelled-you: "&b[name]&c izraidīja tevi no salas!"
|
||||
success: '&aTu izmeti spēlētāju &b[name] &ano savas salas.'
|
||||
|
||||
ranks:
|
||||
owner: "Īpašnieks"
|
||||
@ -1065,13 +1100,30 @@ protection:
|
||||
&aNeļauj spēlētājam izmantot teleporta
|
||||
&afunkcionalitāti, kamēr viņš krīt.
|
||||
hint: "&cTu nevari teleportēties, kamēr krīti."
|
||||
WITHER_DAMAGE:
|
||||
name: Pārslēgt
|
||||
description: |-
|
||||
&aĻauj katlem saplēst blokus
|
||||
&aun bojāt radības.
|
||||
locked: "&cŠī sala ir slēgta!"
|
||||
protected: "&cSala ir aizsargāta: [description]"
|
||||
spawn-protected: "&cSākuma sala ir aizsargāta: [description]"
|
||||
world-protected: "&cPasaule aizsargāta: [description]"
|
||||
|
||||
panel:
|
||||
next: "Nākošā Lapa"
|
||||
previous: "Iepriekšējā Lapa"
|
||||
mode:
|
||||
advanced:
|
||||
name: '&6Advancētie iestatījumi'
|
||||
description: '&aSatur saprātīga daudzuma iestatījumus.'
|
||||
basic:
|
||||
name: '&aBāzes iestatījumi'
|
||||
description: '&aSatur biežāk lietotos iestatījumus.'
|
||||
expert:
|
||||
name: '&cEksperta iestatījumi'
|
||||
description: '&aSatur visus iestatījumus.'
|
||||
click-to-switch: '&eUzspied&a, lai pārslēgtos uz &r[next]&r&a.'
|
||||
PROTECTION:
|
||||
title: "&6Aizsardzība"
|
||||
description: |-
|
||||
@ -1082,9 +1134,6 @@ protection:
|
||||
description: |-
|
||||
&aĢenerālie iestatījumi
|
||||
&apriekš šīs salas
|
||||
WORLD_SETTING:
|
||||
title: "&b[world_name] &6Iestatījumi"
|
||||
description: "&aSpēles režīma iestatījumi"
|
||||
flag-item:
|
||||
name-layout: "&a[name]"
|
||||
description-layout: |
|
||||
@ -1101,6 +1150,16 @@ protection:
|
||||
&7Šībrīža iestatījumi: [setting]
|
||||
setting-active: "&aAktīvs"
|
||||
setting-disabled: "&cIzslēgts"
|
||||
setting-cooldown: '&cIestatījumu maiņa ir ierobežota.'
|
||||
WORLD_SETTING:
|
||||
title: "&b[world_name] &6Iestatījumi"
|
||||
description: "&aSpēles režīma iestatījumi"
|
||||
WORLD_DEFAULTS:
|
||||
title: '&b[world_name] &6Pasaules aizsardzība'
|
||||
description: |
|
||||
&aAizsardzības iestatījumi kuri ir
|
||||
&aaktīvi, ja spēlētājs ir ārpus
|
||||
&asavas salas
|
||||
|
||||
language:
|
||||
panel-title: "Izvēlies valodu"
|
||||
|
@ -145,7 +145,6 @@ public class IslandCreateCommandTest {
|
||||
when(NewIsland.builder()).thenReturn(builder);
|
||||
when(builder.player(any())).thenReturn(builder);
|
||||
when(builder.name(Mockito.anyString())).thenReturn(builder);
|
||||
when(builder.world(any())).thenReturn(builder);
|
||||
when(builder.addon(addon)).thenReturn(builder);
|
||||
when(builder.reason(any())).thenReturn(builder);
|
||||
when(builder.build()).thenReturn(mock(Island.class));
|
||||
|
@ -2,8 +2,12 @@ package world.bentobox.bentobox.api.commands.island;
|
||||
|
||||
import static org.junit.Assert.assertFalse;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
import static org.mockito.Matchers.anyString;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.anyString;
|
||||
import static org.mockito.ArgumentMatchers.eq;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import java.util.ArrayList;
|
||||
@ -25,6 +29,7 @@ import org.bukkit.scheduler.BukkitScheduler;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.Mockito;
|
||||
import org.powermock.api.mockito.PowerMockito;
|
||||
import org.powermock.core.classloader.annotations.PrepareForTest;
|
||||
@ -51,11 +56,16 @@ import world.bentobox.bentobox.managers.RanksManager;
|
||||
@PrepareForTest({Bukkit.class, BentoBox.class, User.class })
|
||||
public class IslandUnbanCommandTest {
|
||||
|
||||
@Mock
|
||||
private CompositeCommand ic;
|
||||
private UUID uuid;
|
||||
@Mock
|
||||
private User user;
|
||||
@Mock
|
||||
private IslandsManager im;
|
||||
@Mock
|
||||
private PlayersManager pm;
|
||||
@Mock
|
||||
private Island island;
|
||||
|
||||
/**
|
||||
@ -78,8 +88,7 @@ public class IslandUnbanCommandTest {
|
||||
|
||||
// Player
|
||||
Player p = mock(Player.class);
|
||||
// Sometimes use Mockito.withSettings().verboseLogging()
|
||||
user = mock(User.class);
|
||||
// User
|
||||
when(user.isOp()).thenReturn(false);
|
||||
uuid = UUID.randomUUID();
|
||||
when(user.getUniqueId()).thenReturn(uuid);
|
||||
@ -87,18 +96,15 @@ public class IslandUnbanCommandTest {
|
||||
when(user.getName()).thenReturn("tastybento");
|
||||
|
||||
// Parent command has no aliases
|
||||
ic = mock(CompositeCommand.class);
|
||||
when(ic.getSubCommandAliases()).thenReturn(new HashMap<>());
|
||||
|
||||
// No island for player to begin with (set it later in the tests)
|
||||
im = mock(IslandsManager.class);
|
||||
when(im.hasIsland(Mockito.any(), Mockito.eq(uuid))).thenReturn(false);
|
||||
when(im.isOwner(Mockito.any(), Mockito.eq(uuid))).thenReturn(false);
|
||||
when(im.hasIsland(any(), eq(uuid))).thenReturn(false);
|
||||
when(im.isOwner(any(), eq(uuid))).thenReturn(false);
|
||||
when(plugin.getIslands()).thenReturn(im);
|
||||
|
||||
// Has team
|
||||
pm = mock(PlayersManager.class);
|
||||
when(im.inTeam(Mockito.any(), Mockito.eq(uuid))).thenReturn(true);
|
||||
when(im.inTeam(any(), eq(uuid))).thenReturn(true);
|
||||
when(plugin.getPlayers()).thenReturn(pm);
|
||||
|
||||
// Server & Scheduler
|
||||
@ -107,16 +113,15 @@ public class IslandUnbanCommandTest {
|
||||
when(Bukkit.getScheduler()).thenReturn(sch);
|
||||
|
||||
// Island Banned list initialization
|
||||
island = mock(Island.class);
|
||||
when(island.getBanned()).thenReturn(new HashSet<>());
|
||||
when(island.isBanned(Mockito.any())).thenReturn(false);
|
||||
when(island.getRank(Mockito.any())).thenReturn(RanksManager.OWNER_RANK);
|
||||
when(im.getIsland(Mockito.any(), Mockito.any(User.class))).thenReturn(island);
|
||||
when(im.getIsland(Mockito.any(), Mockito.any(UUID.class))).thenReturn(island);
|
||||
when(island.isBanned(any())).thenReturn(false);
|
||||
when(island.getRank(any())).thenReturn(RanksManager.OWNER_RANK);
|
||||
when(im.getIsland(any(), any(User.class))).thenReturn(island);
|
||||
when(im.getIsland(any(), any(UUID.class))).thenReturn(island);
|
||||
|
||||
// IWM friendly name
|
||||
IslandWorldManager iwm = mock(IslandWorldManager.class);
|
||||
when(iwm.getFriendlyName(Mockito.any())).thenReturn("BSkyBlock");
|
||||
when(iwm.getFriendlyName(any())).thenReturn("BSkyBlock");
|
||||
when(plugin.getIWM()).thenReturn(iwm);
|
||||
|
||||
// Server and Plugin Manager for events
|
||||
@ -128,7 +133,7 @@ public class IslandUnbanCommandTest {
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for .
|
||||
* Test method for {@link IslandUnbanCommand#canExecute(User, String, List)}
|
||||
*/
|
||||
// Island ban command by itself
|
||||
|
||||
@ -145,64 +150,82 @@ public class IslandUnbanCommandTest {
|
||||
@Test
|
||||
public void testNoArgs() {
|
||||
IslandUnbanCommand iubc = new IslandUnbanCommand(ic);
|
||||
assertFalse(iubc.execute(user, iubc.getLabel(), new ArrayList<>()));
|
||||
assertFalse(iubc.canExecute(user, iubc.getLabel(), new ArrayList<>()));
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for {@link IslandUnbanCommand#canExecute(User, String, List)}
|
||||
*/
|
||||
@Test
|
||||
public void testNoIsland() {
|
||||
when(im.inTeam(Mockito.any(), Mockito.eq(uuid))).thenReturn(false);
|
||||
when(im.inTeam(any(), eq(uuid))).thenReturn(false);
|
||||
IslandUnbanCommand iubc = new IslandUnbanCommand(ic);
|
||||
assertFalse(iubc.execute(user, iubc.getLabel(), Collections.singletonList("bill")));
|
||||
Mockito.verify(user).sendMessage("general.errors.no-island");
|
||||
assertFalse(iubc.canExecute(user, iubc.getLabel(), Collections.singletonList("bill")));
|
||||
verify(user).sendMessage("general.errors.no-island");
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for {@link IslandUnbanCommand#canExecute(User, String, List)}
|
||||
*/
|
||||
@Test
|
||||
public void testTooLowRank() {
|
||||
IslandUnbanCommand iubc = new IslandUnbanCommand(ic);
|
||||
when(im.hasIsland(Mockito.any(), Mockito.eq(uuid))).thenReturn(true);
|
||||
when(island.getRank(Mockito.any())).thenReturn(RanksManager.MEMBER_RANK);
|
||||
when(im.hasIsland(any(), eq(uuid))).thenReturn(true);
|
||||
when(island.getRank(any())).thenReturn(RanksManager.MEMBER_RANK);
|
||||
when(island.getRankCommand(anyString())).thenReturn(RanksManager.OWNER_RANK);
|
||||
assertFalse(iubc.execute(user, iubc.getLabel(), Collections.singletonList("bill")));
|
||||
Mockito.verify(user).sendMessage("general.errors.no-permission");
|
||||
assertFalse(iubc.canExecute(user, iubc.getLabel(), Collections.singletonList("bill")));
|
||||
verify(user).sendMessage("general.errors.no-permission");
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for {@link IslandUnbanCommand#canExecute(User, String, List)}
|
||||
*/
|
||||
@Test
|
||||
public void testUnknownUser() {
|
||||
IslandUnbanCommand iubc = new IslandUnbanCommand(ic);
|
||||
when(im.hasIsland(Mockito.any(), Mockito.eq(uuid))).thenReturn(true);
|
||||
when(im.isOwner(Mockito.any(), Mockito.eq(uuid))).thenReturn(true);
|
||||
when(im.hasIsland(any(), eq(uuid))).thenReturn(true);
|
||||
when(im.isOwner(any(), eq(uuid))).thenReturn(true);
|
||||
when(pm.getUUID(Mockito.anyString())).thenReturn(null);
|
||||
assertFalse(iubc.execute(user, iubc.getLabel(), Collections.singletonList("bill")));
|
||||
Mockito.verify(user).sendMessage("general.errors.unknown-player", "[name]", "bill");
|
||||
assertFalse(iubc.canExecute(user, iubc.getLabel(), Collections.singletonList("bill")));
|
||||
verify(user).sendMessage("general.errors.unknown-player", "[name]", "bill");
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for {@link IslandUnbanCommand#canExecute(User, String, List)}
|
||||
*/
|
||||
@Test
|
||||
public void testBanSelf() {
|
||||
IslandUnbanCommand iubc = new IslandUnbanCommand(ic);
|
||||
when(im.hasIsland(Mockito.any(), Mockito.eq(uuid))).thenReturn(true);
|
||||
when(im.isOwner(Mockito.any(), Mockito.eq(uuid))).thenReturn(true);
|
||||
when(im.hasIsland(any(), eq(uuid))).thenReturn(true);
|
||||
when(im.isOwner(any(), eq(uuid))).thenReturn(true);
|
||||
when(pm.getUUID(Mockito.anyString())).thenReturn(uuid);
|
||||
assertFalse(iubc.execute(user, iubc.getLabel(), Collections.singletonList("bill")));
|
||||
Mockito.verify(user).sendMessage("commands.island.unban.cannot-unban-yourself");
|
||||
assertFalse(iubc.canExecute(user, iubc.getLabel(), Collections.singletonList("bill")));
|
||||
verify(user).sendMessage("commands.island.unban.cannot-unban-yourself");
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for {@link IslandUnbanCommand#canExecute(User, String, List)}
|
||||
*/
|
||||
@Test
|
||||
public void testBanNotBanned() {
|
||||
IslandUnbanCommand iubc = new IslandUnbanCommand(ic);
|
||||
when(im.hasIsland(Mockito.any(), Mockito.eq(uuid))).thenReturn(true);
|
||||
when(im.isOwner(Mockito.any(), Mockito.eq(uuid))).thenReturn(true);
|
||||
when(im.hasIsland(any(), eq(uuid))).thenReturn(true);
|
||||
when(im.isOwner(any(), eq(uuid))).thenReturn(true);
|
||||
UUID bannedUser = UUID.randomUUID();
|
||||
when(pm.getUUID(Mockito.anyString())).thenReturn(bannedUser);
|
||||
when(island.isBanned(Mockito.eq(bannedUser))).thenReturn(false);
|
||||
assertFalse(iubc.execute(user, iubc.getLabel(), Collections.singletonList("bill")));
|
||||
Mockito.verify(user).sendMessage("commands.island.unban.player-not-banned");
|
||||
when(island.isBanned(eq(bannedUser))).thenReturn(false);
|
||||
assertFalse(iubc.canExecute(user, iubc.getLabel(), Collections.singletonList("bill")));
|
||||
verify(user).sendMessage("commands.island.unban.player-not-banned");
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for {@link IslandUnbanCommand#execute(User, String, List)}
|
||||
*/
|
||||
@Test
|
||||
public void testUnbanUser() {
|
||||
IslandUnbanCommand iubc = new IslandUnbanCommand(ic);
|
||||
when(im.hasIsland(Mockito.any(), Mockito.eq(uuid))).thenReturn(true);
|
||||
when(im.isOwner(Mockito.any(), Mockito.eq(uuid))).thenReturn(true);
|
||||
when(im.hasIsland(any(), eq(uuid))).thenReturn(true);
|
||||
when(im.isOwner(any(), eq(uuid))).thenReturn(true);
|
||||
UUID targetUUID = UUID.randomUUID();
|
||||
when(pm.getUUID(Mockito.anyString())).thenReturn(targetUUID);
|
||||
PowerMockito.mockStatic(User.class);
|
||||
@ -210,23 +233,26 @@ public class IslandUnbanCommandTest {
|
||||
when(targetUser.isOp()).thenReturn(false);
|
||||
when(targetUser.isPlayer()).thenReturn(true);
|
||||
when(targetUser.isOnline()).thenReturn(false);
|
||||
when(User.getInstance(Mockito.any(UUID.class))).thenReturn(targetUser);
|
||||
when(User.getInstance(any(UUID.class))).thenReturn(targetUser);
|
||||
// Mark as banned
|
||||
when(island.isBanned(Mockito.eq(targetUUID))).thenReturn(true);
|
||||
when(island.isBanned(eq(targetUUID))).thenReturn(true);
|
||||
|
||||
// Allow removing from ban list
|
||||
when(island.unban(Mockito.any(), Mockito.any())).thenReturn(true);
|
||||
when(island.unban(any(), any())).thenReturn(true);
|
||||
|
||||
assertTrue(iubc.execute(user, iubc.getLabel(), Collections.singletonList("bill")));
|
||||
Mockito.verify(user).sendMessage("commands.island.unban.player-unbanned", TextVariables.NAME, targetUser.getName());
|
||||
Mockito.verify(targetUser).sendMessage("commands.island.unban.you-are-unbanned", TextVariables.NAME, user.getName());
|
||||
verify(user).sendMessage("commands.island.unban.player-unbanned", TextVariables.NAME, targetUser.getName());
|
||||
verify(targetUser).sendMessage("commands.island.unban.you-are-unbanned", TextVariables.NAME, user.getName());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for {@link IslandUnbanCommand#execute(User, String, List)}
|
||||
*/
|
||||
@Test
|
||||
public void testCancelledUnban() {
|
||||
IslandUnbanCommand iubc = new IslandUnbanCommand(ic);
|
||||
when(im.hasIsland(Mockito.any(), Mockito.eq(uuid))).thenReturn(true);
|
||||
when(im.isOwner(Mockito.any(), Mockito.eq(uuid))).thenReturn(true);
|
||||
when(im.hasIsland(any(), eq(uuid))).thenReturn(true);
|
||||
when(im.isOwner(any(), eq(uuid))).thenReturn(true);
|
||||
UUID targetUUID = UUID.randomUUID();
|
||||
when(pm.getUUID(Mockito.anyString())).thenReturn(targetUUID);
|
||||
PowerMockito.mockStatic(User.class);
|
||||
@ -234,18 +260,21 @@ public class IslandUnbanCommandTest {
|
||||
when(targetUser.isOp()).thenReturn(false);
|
||||
when(targetUser.isPlayer()).thenReturn(true);
|
||||
when(targetUser.isOnline()).thenReturn(false);
|
||||
when(User.getInstance(Mockito.any(UUID.class))).thenReturn(targetUser);
|
||||
when(User.getInstance(any(UUID.class))).thenReturn(targetUser);
|
||||
// Mark as banned
|
||||
when(island.isBanned(Mockito.eq(targetUUID))).thenReturn(true);
|
||||
when(island.isBanned(eq(targetUUID))).thenReturn(true);
|
||||
|
||||
// Allow removing from ban list
|
||||
when(island.unban(Mockito.any(), Mockito.any())).thenReturn(false);
|
||||
when(island.unban(any(), any())).thenReturn(false);
|
||||
|
||||
assertFalse(iubc.execute(user, iubc.getLabel(), Collections.singletonList("bill")));
|
||||
Mockito.verify(user, Mockito.never()).sendMessage("commands.island.unban.player-unbanned", TextVariables.NAME, targetUser.getName());
|
||||
Mockito.verify(targetUser, Mockito.never()).sendMessage("commands.island.unban.you-are-unbanned", "[owner]", user.getName());
|
||||
verify(user, never()).sendMessage("commands.island.unban.player-unbanned", TextVariables.NAME, targetUser.getName());
|
||||
verify(targetUser, never()).sendMessage("commands.island.unban.you-are-unbanned", "[owner]", user.getName());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for {@link IslandUnbanCommand#tabComplete(User, String, List)}
|
||||
*/
|
||||
@Test
|
||||
public void testTabComplete() {
|
||||
Set<UUID> banned = new HashSet<>();
|
||||
@ -254,7 +283,7 @@ public class IslandUnbanCommandTest {
|
||||
banned.add(UUID.randomUUID());
|
||||
}
|
||||
when(island.getBanned()).thenReturn(banned);
|
||||
when(pm.getName(Mockito.any())).thenReturn("a", "b", "c", "d", "e", "f", "g", "h", "i", "j");
|
||||
when(pm.getName(any())).thenReturn("a", "b", "c", "d", "e", "f", "g", "h", "i", "j");
|
||||
IslandUnbanCommand iubc = new IslandUnbanCommand(ic);
|
||||
User user = mock(User.class);
|
||||
when(user.getUniqueId()).thenReturn(UUID.randomUUID());
|
||||
@ -264,10 +293,13 @@ public class IslandUnbanCommandTest {
|
||||
assertTrue(Arrays.equals(names, result.get().toArray()));
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for {@link IslandUnbanCommand#tabComplete(User, String, List)}
|
||||
*/
|
||||
@Test
|
||||
public void testTabCompleteNoIsland() {
|
||||
// No island
|
||||
when(im.getIsland(Mockito.any(), Mockito.any(UUID.class))).thenReturn(null);
|
||||
when(im.getIsland(any(), any(UUID.class))).thenReturn(null);
|
||||
IslandUnbanCommand iubc = new IslandUnbanCommand(ic);
|
||||
// Set up the user
|
||||
User user = mock(User.class);
|
||||
|
@ -0,0 +1,197 @@
|
||||
package world.bentobox.bentobox.managers;
|
||||
|
||||
import static org.junit.Assert.assertFalse;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
import static org.mockito.ArgumentMatchers.anyString;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.times;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import java.io.File;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.util.Comparator;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Server;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.plugin.PluginManager;
|
||||
import org.bukkit.scheduler.BukkitScheduler;
|
||||
import org.junit.After;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.Mock;
|
||||
import org.powermock.api.mockito.PowerMockito;
|
||||
import org.powermock.core.classloader.annotations.PrepareForTest;
|
||||
import org.powermock.modules.junit4.PowerMockRunner;
|
||||
import org.powermock.reflect.Whitebox;
|
||||
|
||||
import world.bentobox.bentobox.BentoBox;
|
||||
import world.bentobox.bentobox.Settings;
|
||||
import world.bentobox.bentobox.api.events.BentoBoxReadyEvent;
|
||||
import world.bentobox.bentobox.api.events.island.IslandEvent.IslandDeleteChunksEvent;
|
||||
import world.bentobox.bentobox.database.DatabaseSetup.DatabaseType;
|
||||
import world.bentobox.bentobox.database.objects.Island;
|
||||
import world.bentobox.bentobox.database.objects.IslandDeletion;
|
||||
import world.bentobox.bentobox.util.Util;
|
||||
|
||||
/**
|
||||
* @author tastybento
|
||||
*
|
||||
*/
|
||||
@RunWith(PowerMockRunner.class)
|
||||
@PrepareForTest( { Bukkit.class, BentoBox.class, Util.class, Location.class })
|
||||
public class IslandDeletionManagerTest {
|
||||
|
||||
@Mock
|
||||
private BentoBox plugin;
|
||||
// Class under test
|
||||
private IslandDeletionManager idm;
|
||||
@Mock
|
||||
private Location location;
|
||||
@Mock
|
||||
private World world;
|
||||
@Mock
|
||||
private Island island;
|
||||
@Mock
|
||||
private PluginManager pim;
|
||||
@Mock
|
||||
private BukkitScheduler scheduler;
|
||||
|
||||
|
||||
/**
|
||||
* @throws java.lang.Exception
|
||||
*/
|
||||
@Before
|
||||
public void setUp() throws Exception {
|
||||
// Bukkit
|
||||
PowerMockito.mockStatic(Bukkit.class);
|
||||
Server server = mock(Server.class);
|
||||
when(server.getWorld(anyString())).thenReturn(world);
|
||||
when(Bukkit.getServer()).thenReturn(server);
|
||||
when(Bukkit.getPluginManager()).thenReturn(pim);
|
||||
when(server.getPluginManager()).thenReturn(pim);
|
||||
when(Bukkit.getScheduler()).thenReturn(scheduler);
|
||||
|
||||
// Clear any remaining database
|
||||
clearDatabase();
|
||||
// Set up plugin
|
||||
plugin = mock(BentoBox.class);
|
||||
Whitebox.setInternalState(BentoBox.class, "instance", plugin);
|
||||
// Settings
|
||||
Settings s = mock(Settings.class);
|
||||
when(plugin.getSettings()).thenReturn(s);
|
||||
when(s.getDatabaseType()).thenReturn(DatabaseType.JSON);
|
||||
// Location
|
||||
when(location.getWorld()).thenReturn(world);
|
||||
when(world.getName()).thenReturn("bskyblock");
|
||||
// Island
|
||||
when(island.getCenter()).thenReturn(location);
|
||||
|
||||
// Island Deletion Manager
|
||||
idm = new IslandDeletionManager(plugin);
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws java.lang.Exception
|
||||
*/
|
||||
@After
|
||||
public void tearDown() throws Exception {
|
||||
clearDatabase();
|
||||
}
|
||||
|
||||
|
||||
private void clearDatabase() throws Exception {
|
||||
//remove any database data
|
||||
File file = new File("database");
|
||||
Path pathToBeDeleted = file.toPath();
|
||||
if (file.exists()) {
|
||||
Files.walk(pathToBeDeleted)
|
||||
.sorted(Comparator.reverseOrder())
|
||||
.map(Path::toFile)
|
||||
.forEach(File::delete);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for {@link world.bentobox.bentobox.managers.IslandDeletionManager#IslandDeletionManager(BentoBox)}.
|
||||
*/
|
||||
@Test
|
||||
public void testIslandDeletionManager() {
|
||||
// Nothing
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for {@link world.bentobox.bentobox.managers.IslandDeletionManager#onBentoBoxReady(world.bentobox.bentobox.api.events.BentoBoxReadyEvent)}.
|
||||
*/
|
||||
@Test
|
||||
public void testOnBentoBoxReadyNullWorld() {
|
||||
when(location.getWorld()).thenReturn(null);
|
||||
// Delete island on previous server operation
|
||||
testOnIslandDelete();
|
||||
// Start server
|
||||
BentoBoxReadyEvent e = new BentoBoxReadyEvent();
|
||||
idm.onBentoBoxReady(e);
|
||||
verify(plugin).log("There are 1 islands pending deletion.");
|
||||
verify(plugin).logError("Island queued for deletion refers to a non-existant game world. Skipping...");
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for {@link world.bentobox.bentobox.managers.IslandDeletionManager#onBentoBoxReady(world.bentobox.bentobox.api.events.BentoBoxReadyEvent)}.
|
||||
*/
|
||||
@Test
|
||||
public void testOnBentoBoxReady() {
|
||||
// Delete island on previous server operation
|
||||
testOnIslandDelete();
|
||||
// Add world
|
||||
when(location.getWorld()).thenReturn(world);
|
||||
// Start server
|
||||
BentoBoxReadyEvent e = new BentoBoxReadyEvent();
|
||||
idm.onBentoBoxReady(e);
|
||||
verify(plugin).log("There are 1 islands pending deletion.");
|
||||
verify(plugin, never()).logError("Island queued for deletion refers to a non-existant game world. Skipping...");
|
||||
verify(plugin).log("Resuming deletion of island at bskyblock 0,0,0");
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for {@link world.bentobox.bentobox.managers.IslandDeletionManager#onIslandDelete(world.bentobox.bentobox.api.events.island.IslandEvent.IslandDeleteChunksEvent)}.
|
||||
*/
|
||||
@Test
|
||||
public void testOnIslandDelete() {
|
||||
// Delete some islands
|
||||
IslandDeleteChunksEvent e = mock(IslandDeleteChunksEvent.class);
|
||||
IslandDeletion id = new IslandDeletion(island);
|
||||
when(e.getDeletedIslandInfo()).thenReturn(id);
|
||||
when(e.getIsland()).thenReturn(island);
|
||||
|
||||
idm.onIslandDelete(e);
|
||||
verify(e, times(2)).getDeletedIslandInfo();
|
||||
// Verify database save
|
||||
File file = new File("database", "IslandDeletion");
|
||||
assertTrue(file.exists());
|
||||
File entry = new File(file, id.getUniqueId() + ".json");
|
||||
assertTrue(entry.exists());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for {@link world.bentobox.bentobox.managers.IslandDeletionManager#onIslandDeleted(world.bentobox.bentobox.api.events.island.IslandEvent.IslandDeletedEvent)}.
|
||||
*/
|
||||
@Test
|
||||
public void testOnIslandDeleted() {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Test method for {@link world.bentobox.bentobox.managers.IslandDeletionManager#inDeletion(org.bukkit.Location)}.
|
||||
*/
|
||||
@Test
|
||||
public void testInDeletion() {
|
||||
assertFalse(idm.inDeletion(location));
|
||||
}
|
||||
|
||||
}
|
@ -155,8 +155,6 @@ public class IslandsManagerTest {
|
||||
|
||||
// World
|
||||
when(world.getEnvironment()).thenReturn(World.Environment.NORMAL);
|
||||
// Set up plugin
|
||||
Whitebox.setInternalState(BentoBox.class, "instance", plugin);
|
||||
|
||||
// Command manager
|
||||
CommandsManager cm = mock(CommandsManager.class);
|
||||
|
Loading…
Reference in New Issue
Block a user