diff --git a/README.md b/README.md index 9da305c89..b8c6d63bd 100644 --- a/README.md +++ b/README.md @@ -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! diff --git a/pom.xml b/pom.xml index f4018ab31..2a2be3bbd 100644 --- a/pom.xml +++ b/pom.xml @@ -80,7 +80,7 @@ -LOCAL - 1.6.0 + 1.7.0 diff --git a/src/main/java/world/bentobox/bentobox/BStats.java b/src/main/java/world/bentobox/bentobox/BStats.java index 8eb13c0b8..2c5913d5d 100644 --- a/src/main/java/world/bentobox/bentobox/BStats.java +++ b/src/main/java/world/bentobox/bentobox/BStats.java @@ -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 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; + })); + } } diff --git a/src/main/java/world/bentobox/bentobox/api/commands/island/IslandUnbanCommand.java b/src/main/java/world/bentobox/bentobox/api/commands/island/IslandUnbanCommand.java index ca84e1b88..9845d9835 100644 --- a/src/main/java/world/bentobox/bentobox/api/commands/island/IslandUnbanCommand.java +++ b/src/main/java/world/bentobox/bentobox/api/commands/island/IslandUnbanCommand.java @@ -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 args) { + public boolean canExecute(User user, String label, List 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 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 -> diff --git a/src/main/java/world/bentobox/bentobox/api/events/PremadeEvent.java b/src/main/java/world/bentobox/bentobox/api/events/PremadeEvent.java deleted file mode 100644 index a64097096..000000000 --- a/src/main/java/world/bentobox/bentobox/api/events/PremadeEvent.java +++ /dev/null @@ -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); - } - -} diff --git a/src/main/java/world/bentobox/bentobox/api/events/flags/FlagChangeEvent.java b/src/main/java/world/bentobox/bentobox/api/events/flags/FlagChangeEvent.java new file mode 100644 index 000000000..0f481ad62 --- /dev/null +++ b/src/main/java/world/bentobox/bentobox/api/events/flags/FlagChangeEvent.java @@ -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; + } +} diff --git a/src/main/java/world/bentobox/bentobox/api/events/flags/FlagProtectionChangeEvent.java b/src/main/java/world/bentobox/bentobox/api/events/flags/FlagProtectionChangeEvent.java index ba979da37..0bd2854a8 100644 --- a/src/main/java/world/bentobox/bentobox/api/events/flags/FlagProtectionChangeEvent.java +++ b/src/main/java/world/bentobox/bentobox/api/events/flags/FlagProtectionChangeEvent.java @@ -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 */ diff --git a/src/main/java/world/bentobox/bentobox/api/events/flags/FlagSettingChangeEvent.java b/src/main/java/world/bentobox/bentobox/api/events/flags/FlagSettingChangeEvent.java index 1148c926a..9dd31410b 100644 --- a/src/main/java/world/bentobox/bentobox/api/events/flags/FlagSettingChangeEvent.java +++ b/src/main/java/world/bentobox/bentobox/api/events/flags/FlagSettingChangeEvent.java @@ -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 */ diff --git a/src/main/java/world/bentobox/bentobox/api/events/flags/FlagWorldSettingChangeEvent.java b/src/main/java/world/bentobox/bentobox/api/events/flags/FlagWorldSettingChangeEvent.java index 086873395..497d9e4a8 100644 --- a/src/main/java/world/bentobox/bentobox/api/events/flags/FlagWorldSettingChangeEvent.java +++ b/src/main/java/world/bentobox/bentobox/api/events/flags/FlagWorldSettingChangeEvent.java @@ -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 */ diff --git a/src/main/java/world/bentobox/bentobox/api/flags/Flag.java b/src/main/java/world/bentobox/bentobox/api/flags/Flag.java index 7da1d869b..fc1329a99 100644 --- a/src/main/java/world/bentobox/bentobox/api/flags/Flag.java +++ b/src/main/java/world/bentobox/bentobox/api/flags/Flag.java @@ -359,6 +359,7 @@ public class Flag implements Comparable { * @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) { diff --git a/src/main/java/world/bentobox/bentobox/api/localization/TextVariables.java b/src/main/java/world/bentobox/bentobox/api/localization/TextVariables.java index 877ab2af7..3718dc9ae 100644 --- a/src/main/java/world/bentobox/bentobox/api/localization/TextVariables.java +++ b/src/main/java/world/bentobox/bentobox/api/localization/TextVariables.java @@ -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]"; } diff --git a/src/main/java/world/bentobox/bentobox/api/panels/Tab.java b/src/main/java/world/bentobox/bentobox/api/panels/Tab.java index 208645594..2a4c91743 100644 --- a/src/main/java/world/bentobox/bentobox/api/panels/Tab.java +++ b/src/main/java/world/bentobox/bentobox/api/panels/Tab.java @@ -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 getPanelItems(); + List<@Nullable PanelItem> getPanelItems(); /** * @return the permission required to view this tab or empty if no permission required diff --git a/src/main/java/world/bentobox/bentobox/api/panels/TabbedPanel.java b/src/main/java/world/bentobox/bentobox/api/panels/TabbedPanel.java index 2ba6547e5..187b906ca 100644 --- a/src/main/java/world/bentobox/bentobox/api/panels/TabbedPanel.java +++ b/src/main/java/world/bentobox/bentobox/api/panels/TabbedPanel.java @@ -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 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 diff --git a/src/main/java/world/bentobox/bentobox/blueprints/BlueprintPaster.java b/src/main/java/world/bentobox/bentobox/blueprints/BlueprintPaster.java index f3fabdf64..63143c5e8 100644 --- a/src/main/java/world/bentobox/bentobox/blueprints/BlueprintPaster.java +++ b/src/main/java/world/bentobox/bentobox/blueprints/BlueprintPaster.java @@ -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; diff --git a/src/main/java/world/bentobox/bentobox/database/json/JSONDatabaseHandler.java b/src/main/java/world/bentobox/bentobox/database/json/JSONDatabaseHandler.java index 65434bd97..9ec4dfc73 100644 --- a/src/main/java/world/bentobox/bentobox/database/json/JSONDatabaseHandler.java +++ b/src/main/java/world/bentobox/bentobox/database/json/JSONDatabaseHandler.java @@ -59,7 +59,6 @@ public class JSONDatabaseHandler extends AbstractJSONDatabaseHandler { 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); diff --git a/src/main/java/world/bentobox/bentobox/database/objects/Island.java b/src/main/java/world/bentobox/bentobox/database/objects/Island.java index 05bbdea0c..f5a290a42 100644 --- a/src/main/java/world/bentobox/bentobox/database/objects/Island.java +++ b/src/main/java/world/bentobox/bentobox/database/objects/Island.java @@ -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; } /** diff --git a/src/main/java/world/bentobox/bentobox/lists/GameModePlaceholder.java b/src/main/java/world/bentobox/bentobox/lists/GameModePlaceholder.java index a85d02485..6615691e6 100644 --- a/src/main/java/world/bentobox/bentobox/lists/GameModePlaceholder.java +++ b/src/main/java/world/bentobox/bentobox/lists/GameModePlaceholder.java @@ -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 ""; diff --git a/src/main/java/world/bentobox/bentobox/managers/IslandDeletionManager.java b/src/main/java/world/bentobox/bentobox/managers/IslandDeletionManager.java index 86903a4ec..64c92e9bf 100644 --- a/src/main/java/world/bentobox/bentobox/managers/IslandDeletionManager.java +++ b/src/main/java/world/bentobox/bentobox/managers/IslandDeletionManager.java @@ -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) diff --git a/src/main/java/world/bentobox/bentobox/managers/island/NewIsland.java b/src/main/java/world/bentobox/bentobox/managers/island/NewIsland.java index 26409e206..9a7857f9e 100644 --- a/src/main/java/world/bentobox/bentobox/managers/island/NewIsland.java +++ b/src/main/java/world/bentobox/bentobox/managers/island/NewIsland.java @@ -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 diff --git a/src/main/java/world/bentobox/bentobox/panels/settings/SettingsTab.java b/src/main/java/world/bentobox/bentobox/panels/settings/SettingsTab.java index 103a5c503..63746b157 100644 --- a/src/main/java/world/bentobox/bentobox/panels/settings/SettingsTab.java +++ b/src/main/java/world/bentobox/bentobox/panels/settings/SettingsTab.java @@ -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 getPanelItems() { + @NonNull + public List<@Nullable PanelItem> getPanelItems() { List 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()); } diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 2aae1f19e..c4a046669 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -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. @@ -80,7 +80,7 @@ island: reset: true delay: # Time in seconds that players have to stand still before teleport commands activate, e.g. island go. - time: 0 + time: 0 name: # These set the minimum and maximum size of a name. min-length: 4 @@ -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 diff --git a/src/main/resources/locales/en-US.yml b/src/main/resources/locales/en-US.yml index 935b02dff..9c5f5c1df 100644 --- a/src/main/resources/locales/en-US.yml +++ b/src/main/resources/locales/en-US.yml @@ -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" diff --git a/src/main/resources/locales/lv-LV.yml b/src/main/resources/locales/lv-LV.yml index 935e6c875..baf6fe4be 100644 --- a/src/main/resources/locales/lv-LV.yml +++ b/src/main/resources/locales/lv-LV.yml @@ -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: " " 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: "" 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: @@ -350,7 +373,11 @@ commands: description: "veikt valodas faila analīzi" 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ē... + &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: "" @@ -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: "" @@ -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: "" @@ -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: "" @@ -496,6 +528,8 @@ commands: parameters: "" 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: "" @@ -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" @@ -556,26 +591,26 @@ ranks: banned: "Aizliegtais" admin: "Administrators" mod: "Moderators" - + protection: command-is-banned: "Komanda nav atļauta apmeklētājiem" flags: - ANIMAL_SPAWN: + ANIMAL_SPAWN: description: "Pārslēdz radīšanu" name: "Dzīvnieku radīšana" - ANVIL: + ANVIL: description: "Pārslēdz izmantošanu" name: "Laktas" hint: "Laktas lietošana atslēgta" - ARMOR_STAND: + ARMOR_STAND: description: "Pārslēdz izmantošanu" name: "Bruņu statīvi" hint: "Bruņu statīva lietošana atslēgta" - BEACON: + BEACON: description: "Pārslēdz izmantošanu" name: "Signāluguņi" hint: "Signāluguņa lietošana atslēgta" - BED: + BED: description: "Pārslēdz izmantošanu" name: "Gultas" hint: "Gultas lietošana atslēgta" @@ -583,23 +618,23 @@ protection: name: "Laivas" description: "Pārslēdz laivas izmantošanu" hint: "Laivu lietošana atslēgta" - BREAK_BLOCKS: + BREAK_BLOCKS: description: "Pārslēdz plēšanu" name: "Bloku plēšana" hint: "Bloku plēšana atslēgta" - BREEDING: + BREEDING: description: "Pārslēdz vairošanu" name: "Dzīvnieku vairošana" hint: "Dzīvnieku vairošana ir aizsargāta" - BREWING: + BREWING: description: "Pārslēdz izmantošanu" name: "Brūvēšanas satīvi" hint: "Brūvēšana nav atļauta" - BUCKET: + BUCKET: description: "Pārslēdz izmantošanu" name: "Spaiņi" hint: "Spaiņu lietošana nav atļauta" - BUTTON: + BUTTON: description: "Pārslēdz pogu izmantošanu" name: "Pogas" hint: "Pogu spiešana nav atļauta" @@ -631,40 +666,40 @@ protection: CHEST_DAMAGE: description: "Pārslēdz lāžu bojāšanu no sprādzieniem" name: "Lāžu bojāšana" - CHORUS_FRUIT: + CHORUS_FRUIT: description: "Pārslēdz teleportāciju" name: "Kora augļi" hint: "Teleportācija nav atļauta" CLEAN_SUPER_FLAT: description: |- - &aIeslēdz, lai notīrītu - &asuper-plakanos gabalus - &asalu pasaulēs + &aIeslēdz, lai notīrītu + &asuper-plakanos gabalus + &asalu pasaulēs name: "Notīrīt plakanos gabalus" COARSE_DIRT_TILLING: description: |- - &aPārslēdz rupjās zemes - &aapstrādāšanu un podzola - &asaplēšanu, lai iegūtu - &amelnzemi + &aPārslēdz rupjās zemes + &aapstrādāšanu un podzola + &asaplēšanu, lai iegūtu + &amelnzemi name: "Rupjās zemes apstrādāšana" hint: "Rupjās zemes apstrādāšana nav atļauta" - COLLECT_LAVA: + COLLECT_LAVA: description: |- - &aPārslēdz lavas savākšanu - &a(pārraksta Spaiņu lietošanu) + &aPārslēdz lavas savākšanu + &a(pārraksta Spaiņu lietošanu) name: "Savākt lavu" hint: "Lavas savākšana nav atļauta" - COLLECT_WATER: + COLLECT_WATER: description: |- - &aPārslēdz ūdens savākšanu - &a(pārraksta Spaiņu lietošanu) + &aPārslēdz ūdens savākšanu + &a(pārraksta Spaiņu lietošanu) name: "Ūdens savākšana" hint: "Ūdens savākšana nav atļauta" COMMAND_RANKS: name: "&eKomandas Rangi" description: "&aKonfigurēt komandas rangus" - CRAFTING: + CRAFTING: description: "Pārslēdz izmantošanu" name: "Darbagaldi" hint: "Darbagaldu lietošana nav atļauta" @@ -675,11 +710,11 @@ protection: description: "Pārslēdz krīpera postījumus" name: "Krīpera postījumi" hint: "Krīpera postījumi ir atslēgti" - CROP_TRAMPLE: + CROP_TRAMPLE: description: "Pārslēdz augu nomīdīšanu" name: "Augu nomīdīšana" hint: "Augu nomīdīšana ir atslēgta" - DOOR: + DOOR: description: "Pārslēdz durvju izmantošanu" name: "Durvju izmantošana" hint: "Durvju lietošana nav atļauta" @@ -691,15 +726,15 @@ protection: &cŠis liedz tās nolikt vai &csaplēst. hint: "Pūķa olu lietošana nav atļauta" - EGGS: + EGGS: description: "Pārslēdz olu mētāšanu" name: "Olu mētāšana" hint: "Olu mētāšana nav atļauta" - ELYTRA: + ELYTRA: description: "Pārslēdz deltaplāna lietošanu" name: "Deltaplāns" hint: "Deltaplāna lietošana nav atļauta" - ENCHANTING: + ENCHANTING: description: "Pārslēdz burvestību galda lietošanu" name: "Burvestību galds" hint: "Burvestību galda lietošana nav atļauta" @@ -707,22 +742,22 @@ protection: description: "Pārslēdz Ender lāžu veidošanu/lietošanu" name: "Ender lādes" hint: "Ender lādes ir izslēgtas šaja pasaulē" - ENDERMAN_DEATH_DROP: + ENDERMAN_DEATH_DROP: description: |- - &aEndermeni nometīs jebkuru - &abloku, kuru viņi tur, kad - &atiek nogalināti + &aEndermeni nometīs jebkuru + &abloku, kuru viņi tur, kad + &atiek nogalināti name: "Endermena nāves nomešana" - ENDERMAN_GRIEFING: + ENDERMAN_GRIEFING: description: |- - &aEndermeni var paņemt - &ajebkuru bloku uz salas + &aEndermeni var paņemt + &ajebkuru bloku uz salas name: "Endermena bloku celšana" - ENDER_PEARL: + ENDER_PEARL: description: "Pārslēdz Ender pērļu lietošanu" name: "Ender Pērles" hint: "Ender pērļu lietošana nav atļauta" - ENTER_EXIT_MESSAGES: + ENTER_EXIT_MESSAGES: description: "Attaino ieejas/izejas ziņu" island: "[name] sala" name: "Ieejas/Izejas ziņa" @@ -764,49 +799,49 @@ protection: &auguni izmantojot karmu un &adzelzi vai ugunsbumbas. hint: "Karma un dzelzs un ugunsbumbas lietošana nav atļauta" - FURNACE: + FURNACE: description: "Pārslēdz iespēju lietot krāsnis" name: "Krāsns" hint: "Krāsns lietošana nav atļauta" - GATE: + GATE: description: "Pārslēdz iespēju lietot vārtus" name: "Vārti" hint: "Vārtu lietošana nav atļauta" - GEO_LIMIT_MOBS: + GEO_LIMIT_MOBS: description: |- - &aNoņemt visas būtnes, kas - &apamet salas aizsardzības - &alaukumu + &aNoņemt visas būtnes, kas + &apamet salas aizsardzības + &alaukumu name: "&eIerobežot būtnes iekš salas" - HURT_ANIMALS: + HURT_ANIMALS: description: "Pārslēdz iespēju ievainot dzīvniekus" name: "Ievainot dzīvniekus" hint: "Dzīvnieku ievainošana nav atļauta" - HURT_MONSTERS: + HURT_MONSTERS: description: "Pārslēdz iespēju ievainot briesmoņus" name: "Ievainot briesmoņus" hint: "Briesmoņu ievainošana nav atļauta" - HURT_VILLAGERS: + HURT_VILLAGERS: description: |- - &aPārslēdz iespēju ievainot - &aciemata iedzīvotājus + &aPārslēdz iespēju ievainot + &aciemata iedzīvotājus name: "Ievainot ciematniekus" hint: "Ciemata ievainošana ievainošana nav atļauta" ITEM_FRAME: name: "Priekšmetu rāmis" description: |- - &aPārslēdz iespēju izmantot - &apriekšmeta rāmjus + &aPārslēdz iespēju izmantot + &apriekšmeta rāmjus hint: "Priekšmeta rāmju lietošana nav atļauta" ITEM_FRAME_DAMAGE: description: |- - &aPārslēdz iespēju briesmoņiem - &abojāt priekšmeta rāmjus. + &aPārslēdz iespēju briesmoņiem + &abojāt priekšmeta rāmjus. name: "Priekšmetu rāmju bojāšana" - INVINCIBLE_VISITORS: + INVINCIBLE_VISITORS: description: |- - &aPārslēdz neuzveicamos - &aapmeklētājus + &aPārslēdz neuzveicamos + &aapmeklētājus name: "&eNeuzveicamie apmeklētāji" hint: "&cApmeklētāji ir aizsargāti" ISLAND_RESPAWN: @@ -814,11 +849,11 @@ protection: &aSpēlētāji parādīsies uz salas &apēc nāves name: "Parādīšanās uz salas" - ITEM_DROP: + ITEM_DROP: description: "Pārslēdz priekšmetu nomešanu" name: "Priekšmetu nomešana" hint: "Priekšmeti nevar tikt nomesti" - ITEM_PICKUP: + ITEM_PICKUP: description: "Pārslēdz priekšmetu pacelšanu" name: "Priekšmetu pacelšana" hint: "Priekšmeti nevar tikt pacelti" @@ -829,7 +864,7 @@ protection: LEAF_DECAY: name: "Lapu pūšana" description: "Pārslēdz dabīgo lapu pūšanu" - LEASH: + LEASH: description: "Pārslēdz pavadu lietošanu" name: "Pavadi" LEVER: @@ -849,10 +884,10 @@ protection: &cvarēs tecēt vertikāli, taču tie &cneizplatīsies horizontālā virzienā, &cja novietoti ārpus aizsardzības laukuma. - LOCK: + LOCK: description: "Pārslēdz salas aizslēgšanu" name: "Aizslēgt salu" - MILKING: + MILKING: description: "Pārslēdz iespēju slaukt govis" name: "Slaukšana" hint: "Govju slaukšana nav atļauta" @@ -860,10 +895,10 @@ protection: name: "Vagoni" description: "Pārslēdz iespēju lietot vagonus" hint: "Vagonu lietošana nav atļauta" - MONSTER_SPAWN: + MONSTER_SPAWN: description: "Pārslēdz briesmoņu rašanos" name: "Briesmoņu rašanās" - MOUNT_INVENTORY: + MOUNT_INVENTORY: description: |- &aPārslēdz iespēju lietot &aatvērt uzliekamos @@ -884,7 +919,7 @@ protection: &cŅem vērā, ka tas neapturēs radību &crašanos no radību izsacuējiem vai &cradīšanas olām. - NOTE_BLOCK: + NOTE_BLOCK: description: "Pārslēdz iespēju lietot nošu blokus" name: "Nošu bloks" hint: "Nošu blokus lietot nav atļauts" @@ -911,12 +946,12 @@ protection: &aiemītniekiem nav tiešsaitē. &aVar samazināt servera noslodzi. name: "Bezsaistes Sarkanakmens" - PISTON_PUSH: + PISTON_PUSH: description: |- &aĻauj virzulim izstumt &ablokus ārpus salas name: "Bloku izbīdīšana" - PLACE_BLOCKS: + PLACE_BLOCKS: description: |- &aPārslēdz iespēju novietot blokus &auz salas. @@ -941,27 +976,27 @@ protection: &aBeigu protālu name: "Beigu Portāls" hint: "Beigu portālu lietošana nav atļauta" - PRESSURE_PLATE: + PRESSURE_PLATE: description: |- &aPārslēdz iespēju izmantot &aspiedienu plāksnes name: "Spiediena plāksne" hint: "Spiedienu plāksnes lietošana nav atļauta" - PVP_END: + PVP_END: description: |- &cIeslēgt/Izslēgt spēlētājs &cpret spēlētāja režīmu (PVP) &cBeigu pasaulē. name: "Biegu pasaules PVP" hint: "&cSpēlētājs nevar izdarīt bojājumus citam spēlētājam Beigu pasaulē" - PVP_NETHER: + PVP_NETHER: description: |- &cIeslēgt/Izslēgt spēlētājs &cpret spēlētāja režīmu (PVP) &cEllē. name: "Elles PVP" hint: "&cSpēlētājs nevar izdarīt bojājumus citam spēlētājam Ellē" - PVP_OVERWORLD: + PVP_OVERWORLD: description: |- &cIeslēgt/Izslēgt spēlētājs &cpret spēlētāja režīmu (PVP) @@ -969,7 +1004,7 @@ protection: name: "Virszemes PVP" hint: "&cSpēlētājs nevar izdarīt bojājumus citam spēlētājam Virszemē" active: "&cSpēlētāji var viens otram izdarīt bojājumus uz šīs salas!" - REDSTONE: + REDSTONE: description: |- &aPārslēdz iespēju izmantot &asarkanakmens lietas @@ -981,25 +1016,25 @@ protection: &auz salas, kas atrodas 0,0 &akoordinātēs name: "Beigu izejas protāls" - REMOVE_MOBS: + REMOVE_MOBS: description: |- &aNoņemt briesmoņus, kad &aspēlētājs teleportējas &auz salas. name: "Noņemt briesmoņus" - RIDING: + RIDING: description: |- &aPārslēdz iespēju spēlētājiem &ajāt uz dzīviekiem. name: "Jāšana uz dzīvniekiem" hint: "Jāšana uz dzīvniekiem nav atļauta" - SHEARING: + SHEARING: description: |- &aPārslēdz iespēju spēlētājiem &acirpt aitas vai Mušmires. name: "Cirpšana" hint: "Cirpšana nav atļauta" - SPAWN_EGGS: + SPAWN_EGGS: description: |- &aPārslēdz iespēju mest &aradīšanas olas. @@ -1021,7 +1056,7 @@ protection: &aun Dzelzs lietošanas opcijas. name: "Dinamīta aizdedzināšana" hint: "Aizdedzināt dinamītu nav atļauts" - TRADING: + TRADING: description: |- &aPārslēdz iespēju tirogties &aar ciemata iedzīvotājiem. @@ -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: | @@ -1097,10 +1146,20 @@ protection: menu-layout: "&a[description]" setting-layout: | &a[description] - + &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" diff --git a/src/test/java/world/bentobox/bentobox/api/commands/island/IslandCreateCommandTest.java b/src/test/java/world/bentobox/bentobox/api/commands/island/IslandCreateCommandTest.java index 6cd047fcb..0cd80108e 100644 --- a/src/test/java/world/bentobox/bentobox/api/commands/island/IslandCreateCommandTest.java +++ b/src/test/java/world/bentobox/bentobox/api/commands/island/IslandCreateCommandTest.java @@ -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)); diff --git a/src/test/java/world/bentobox/bentobox/api/commands/island/IslandUnbanCommandTest.java b/src/test/java/world/bentobox/bentobox/api/commands/island/IslandUnbanCommandTest.java index 795ab5167..9f7ffef82 100644 --- a/src/test/java/world/bentobox/bentobox/api/commands/island/IslandUnbanCommandTest.java +++ b/src/test/java/world/bentobox/bentobox/api/commands/island/IslandUnbanCommandTest.java @@ -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 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); diff --git a/src/test/java/world/bentobox/bentobox/managers/IslandDeletionManagerTest.java b/src/test/java/world/bentobox/bentobox/managers/IslandDeletionManagerTest.java new file mode 100644 index 000000000..8e698d801 --- /dev/null +++ b/src/test/java/world/bentobox/bentobox/managers/IslandDeletionManagerTest.java @@ -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)); + } + +} diff --git a/src/test/java/world/bentobox/bentobox/managers/IslandsManagerTest.java b/src/test/java/world/bentobox/bentobox/managers/IslandsManagerTest.java index 8c33d856a..3d4c3ca4b 100644 --- a/src/test/java/world/bentobox/bentobox/managers/IslandsManagerTest.java +++ b/src/test/java/world/bentobox/bentobox/managers/IslandsManagerTest.java @@ -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);