Merge branch 'develop' of https://github.com/BentoBoxWorld/BentoBox.git into develop

This commit is contained in:
tastybento 2019-08-16 08:27:05 -07:00
commit 08e520565d
27 changed files with 541 additions and 274 deletions

View File

@ -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!

View File

@ -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. -->

View File

@ -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;
}));
}
}

View File

@ -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 ->

View File

@ -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);
}
}

View File

@ -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;
}
}

View File

@ -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
*/

View File

@ -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
*/

View File

@ -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
*/

View File

@ -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) {

View File

@ -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]";
}

View File

@ -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

View File

@ -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

View File

@ -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;

View File

@ -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);

View File

@ -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;
}
/**

View File

@ -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 "";

View File

@ -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)

View File

@ -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

View File

@ -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());
}

View File

@ -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

View File

@ -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"

View File

@ -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"

View File

@ -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));

View File

@ -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);

View File

@ -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));
}
}

View File

@ -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);