diff --git a/README.md b/README.md
index 685a2718..9dd3a15b 100644
--- a/README.md
+++ b/README.md
@@ -24,11 +24,11 @@ The user command is `/ob`. The admin command is `/oba`.
Q: What phases are there?
-A: There are 12 phases: Plains, Underground, Winter, Ocean, Jungle, Swamp, Dungeon, Desert, The Nether, Plenty, Desolation, Deep Dark, and The End. Each phase features a set of blocks, chests, items, and mobs appropriate for the setting.
+A: There are 18 phases: Plains, Underground, Winter, Ocean, Jungle, Swamp, Dungeon, Desert, The Nether, Plenty, Desolation, Deep Dark, The End, Lush Caves, Dripstone Caves, Mangrove Swamp, Meadow, Cherry Grove, and Jagged Peaks. Each phase features a set of blocks, chests, items, and mobs appropriate for the setting.
Q: How many blocks are there in the phases?
-A: There are currently 12 thousand blocks!
+A: There are currently 15 thousand blocks!
Q: What happens after the last phase?
@@ -44,7 +44,7 @@ A: You can't catch them all, but it *is* an infinite block!
Q: Why do certain blocks spawn more frequently than others?
-A: They just do! It's random. You can set the relative probability in the config files in the phases folder. Admins can also set certain blocks to appear at certain times no matter what. Look out for the sponge for example!
+A: They just do! It's random(ish). You can set the relative probability in the config files in the phases folder. Admins can also set certain blocks to appear at certain times no matter what. Look out for the sponge for example!
Q. How do I know which is the magic block?
diff --git a/pom.xml b/pom.xml
index 6d90b23f..b07ba711 100644
--- a/pom.xml
+++ b/pom.xml
@@ -63,7 +63,7 @@
-LOCAL
- 1.18.2
+ 1.19.0
BentoBoxWorld_AOneBlock
bentobox-world
diff --git a/src/main/java/world/bentobox/aoneblock/AOneBlock.java b/src/main/java/world/bentobox/aoneblock/AOneBlock.java
index a9312d8b..44acf904 100644
--- a/src/main/java/world/bentobox/aoneblock/AOneBlock.java
+++ b/src/main/java/world/bentobox/aoneblock/AOneBlock.java
@@ -8,7 +8,6 @@
import org.bukkit.World;
import org.bukkit.World.Environment;
import org.bukkit.WorldCreator;
-import org.bukkit.WorldType;
import org.bukkit.entity.SpawnCategory;
import org.bukkit.generator.ChunkGenerator;
import org.eclipse.jdt.annotation.NonNull;
@@ -24,6 +23,7 @@
import world.bentobox.aoneblock.listeners.InfoListener;
import world.bentobox.aoneblock.listeners.ItemsAdderListener;
import world.bentobox.aoneblock.listeners.JoinLeaveListener;
+import world.bentobox.aoneblock.listeners.BossBarListener;
import world.bentobox.aoneblock.listeners.NoBlockHandler;
import world.bentobox.aoneblock.listeners.StartSafetyListener;
import world.bentobox.aoneblock.oneblocks.OneBlockCustomBlockCreator;
@@ -46,281 +46,291 @@
*/
public class AOneBlock extends GameModeAddon {
- private static final String NETHER = "_nether";
- private static final String THE_END = "_the_end";
- private boolean hasItemsAdder = false;
+ private static final String NETHER = "_nether";
+ private static final String THE_END = "_the_end";
+ private boolean hasItemsAdder = false;
- // Settings
- private Settings settings;
- private ChunkGeneratorWorld chunkGenerator;
- private final Config configObject = new Config<>(this, Settings.class);
- private BlockListener blockListener;
- private OneBlocksManager oneBlockManager;
+ // Settings
+ private Settings settings;
+ private ChunkGeneratorWorld chunkGenerator;
+ private final Config configObject = new Config<>(this, Settings.class);
+ private BlockListener blockListener;
+ private OneBlocksManager oneBlockManager;
private AOneBlockPlaceholders phManager;
- private HoloListener holoListener;
-
- // Flag
+ private HoloListener holoListener;
+
+ // Flag
public final Flag START_SAFETY = new Flag.Builder("START_SAFETY", Material.BAMBOO_BLOCK)
.mode(Mode.BASIC)
.type(Type.WORLD_SETTING)
.listener(new StartSafetyListener(this))
.defaultSetting(false)
.build();
-
- @Override
- public void onLoad() {
- // Check if ItemsAdder exists, if yes register listener
- if (Bukkit.getPluginManager().getPlugin("ItemsAdder") != null) {
- registerListener(new ItemsAdderListener(this));
- OneBlockCustomBlockCreator.register(ItemsAdderCustomBlock::fromId);
- OneBlockCustomBlockCreator.register("itemsadder", ItemsAdderCustomBlock::fromMap);
- hasItemsAdder = true;
- }
- // Save the default config from config.yml
- saveDefaultConfig();
- // Load settings from config.yml. This will check if there are any issues with
- // it too.
- if (loadSettings()) {
- // Chunk generator
- chunkGenerator = settings.isUseOwnGenerator() ? null : new ChunkGeneratorWorld(this);
- // Register commands
- playerCommand = new PlayerCommand(this);
- adminCommand = new AdminCommand(this);
+ private BossBarListener bossBar = new BossBarListener(this);
+ public final Flag ONEBLOCK_BOSSBAR = new Flag.Builder("ONEBLOCK_BOSSBAR", Material.DRAGON_HEAD).mode(Mode.BASIC)
+ .type(Type.SETTING).listener(bossBar).defaultSetting(true).build();
+
+ @Override
+ public void onLoad() {
+ // Check if ItemsAdder exists, if yes register listener
+ if (Bukkit.getPluginManager().getPlugin("ItemsAdder") != null) {
+ registerListener(new ItemsAdderListener(this));
+ OneBlockCustomBlockCreator.register(ItemsAdderCustomBlock::fromId);
+ OneBlockCustomBlockCreator.register("itemsadder", ItemsAdderCustomBlock::fromMap);
+ hasItemsAdder = true;
+ }
+ // Save the default config from config.yml
+ saveDefaultConfig();
+ // Load settings from config.yml. This will check if there are any issues with
+ // it too.
+ if (loadSettings()) {
+ // Chunk generator
+ chunkGenerator = settings.isUseOwnGenerator() ? null : new ChunkGeneratorWorld(this);
+ // Register commands
+ playerCommand = new PlayerCommand(this);
+ adminCommand = new AdminCommand(this);
// Register flag with BentoBox
// Register protection flag with BentoBox
getPlugin().getFlagsManager().registerFlag(this, START_SAFETY);
- }
- }
+ // Bossbar
+ getPlugin().getFlagsManager().registerFlag(this, this.ONEBLOCK_BOSSBAR);
+ }
+ }
private boolean loadSettings() {
- // Load settings again to get worlds
- settings = configObject.loadConfigObject();
- if (settings == null) {
- // Disable
- logError("AOneBlock settings could not load! Addon disabled.");
- setState(State.DISABLED);
- return false;
- } else {
- // Save the settings
- configObject.saveConfigObject(settings);
- }
- return true;
- }
-
- @Override
- public void onEnable() {
- oneBlockManager = new OneBlocksManager(this);
- if (loadData()) {
- // Failed to load - don't register anything
- return;
- }
- blockListener = new BlockListener(this);
- registerListener(blockListener);
- registerListener(new NoBlockHandler(this));
- registerListener(new BlockProtect(this));
- registerListener(new JoinLeaveListener(this));
- registerListener(new InfoListener(this));
- // Register placeholders
+ // Load settings again to get worlds
+ settings = configObject.loadConfigObject();
+ if (settings == null) {
+ // Disable
+ logError("AOneBlock settings could not load! Addon disabled.");
+ setState(State.DISABLED);
+ return false;
+ } else {
+ // Save the settings
+ configObject.saveConfigObject(settings);
+ }
+ return true;
+ }
+
+ @Override
+ public void onEnable() {
+ oneBlockManager = new OneBlocksManager(this);
+ if (loadData()) {
+ // Failed to load - don't register anything
+ return;
+ }
+ blockListener = new BlockListener(this);
+ registerListener(blockListener);
+ registerListener(new NoBlockHandler(this));
+ registerListener(new BlockProtect(this));
+ registerListener(new JoinLeaveListener(this));
+ registerListener(new InfoListener(this));
+ registerListener(bossBar);
+ // Register placeholders
phManager = new AOneBlockPlaceholders(this, getPlugin().getPlaceholdersManager());
- // Register request handlers
- registerRequestHandler(new IslandStatsHandler(this));
- registerRequestHandler(new LocationStatsHandler(this));
-
- // Register Holograms
- holoListener = new HoloListener(this);
- registerListener(holoListener);
- }
-
- // Load phase data
- public boolean loadData() {
- try {
- oneBlockManager.loadPhases();
- } catch (IOException e) {
- // Disable
- logError("AOneBlock settings could not load (oneblock.yml error)! Addon disabled.");
- logError(e.getMessage());
- setState(State.DISABLED);
- return true;
- }
- return false;
- }
-
- @Override
- public void onDisable() {
- // save cache
- blockListener.saveCache();
-
- // Clear holograms
- holoListener.clear();
- }
-
- @Override
- public void onReload() {
- // save cache
- blockListener.saveCache();
- if (loadSettings()) {
- log("Reloaded AOneBlock settings");
- loadData();
- }
- }
-
- /**
- * @return the settings
- */
- public Settings getSettings() {
- return settings;
- }
-
- @Override
- public void createWorlds() {
- String worldName = settings.getWorldName().toLowerCase();
- if (getServer().getWorld(worldName) == null) {
- log("Creating AOneBlock world ...");
- }
-
- // Create the world if it does not exist
- islandWorld = getWorld(worldName, World.Environment.NORMAL, chunkGenerator);
- // Make the nether if it does not exist
- if (settings.isNetherGenerate()) {
- if (getServer().getWorld(worldName + NETHER) == null) {
- log("Creating AOneBlock's Nether...");
- }
- netherWorld = settings.isNetherIslands() ? getWorld(worldName, World.Environment.NETHER, chunkGenerator)
- : getWorld(worldName, World.Environment.NETHER, null);
- }
- // Make the end if it does not exist
- if (settings.isEndGenerate()) {
- if (getServer().getWorld(worldName + THE_END) == null) {
- log("Creating AOneBlock's End World...");
- }
- endWorld = settings.isEndIslands() ? getWorld(worldName, World.Environment.THE_END, chunkGenerator)
- : getWorld(worldName, World.Environment.THE_END, null);
- }
- }
-
- /**
- * Gets a world or generates a new world if it does not exist
- *
- * @param worldName2 - the overworld name
- * @param env - the environment
- * @param chunkGenerator2 - the chunk generator. If null then the
- * generator will not be specified
- * @return world loaded or generated
- */
- private World getWorld(String worldName2, Environment env, ChunkGeneratorWorld chunkGenerator2) {
- // Set world name
- worldName2 = env.equals(World.Environment.NETHER) ? worldName2 + NETHER : worldName2;
- worldName2 = env.equals(World.Environment.THE_END) ? worldName2 + THE_END : worldName2;
+ // Register request handlers
+ registerRequestHandler(new IslandStatsHandler(this));
+ registerRequestHandler(new LocationStatsHandler(this));
+
+ // Register Holograms
+ holoListener = new HoloListener(this);
+ registerListener(holoListener);
+ }
+
+ // Load phase data
+ public boolean loadData() {
+ try {
+ oneBlockManager.loadPhases();
+ } catch (IOException e) {
+ // Disable
+ logError("AOneBlock settings could not load (oneblock.yml error)! Addon disabled.");
+ logError(e.getMessage());
+ setState(State.DISABLED);
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ public void onDisable() {
+ // save cache
+ if (blockListener != null) {
+ blockListener.saveCache();
+ }
+
+ // Clear holograms
+ if (holoListener != null) {
+ holoListener.onDisable();
+ }
+ }
+
+ @Override
+ public void onReload() {
+ // save cache
+ blockListener.saveCache();
+ if (loadSettings()) {
+ log("Reloaded AOneBlock settings");
+ loadData();
+ }
+ }
+
+ /**
+ * @return the settings
+ */
+ public Settings getSettings() {
+ return settings;
+ }
+
+ @Override
+ public void createWorlds() {
+ String worldName = settings.getWorldName().toLowerCase();
+ if (getServer().getWorld(worldName) == null) {
+ log("Creating AOneBlock world ...");
+ }
+
+ // Create the world if it does not exist
+ islandWorld = getWorld(worldName, World.Environment.NORMAL, chunkGenerator);
+ // Make the nether if it does not exist
+ if (settings.isNetherGenerate()) {
+ if (getServer().getWorld(worldName + NETHER) == null) {
+ log("Creating AOneBlock's Nether...");
+ }
+ netherWorld = settings.isNetherIslands() ? getWorld(worldName, World.Environment.NETHER, chunkGenerator)
+ : getWorld(worldName, World.Environment.NETHER, null);
+ }
+ // Make the end if it does not exist
+ if (settings.isEndGenerate()) {
+ if (getServer().getWorld(worldName + THE_END) == null) {
+ log("Creating AOneBlock's End World...");
+ }
+ endWorld = settings.isEndIslands() ? getWorld(worldName, World.Environment.THE_END, chunkGenerator)
+ : getWorld(worldName, World.Environment.THE_END, null);
+ }
+ }
+
+ /**
+ * Gets a world or generates a new world if it does not exist
+ *
+ * @param worldName2 - the overworld name
+ * @param env - the environment
+ * @param chunkGenerator2 - the chunk generator. If null then the
+ * generator will not be specified
+ * @return world loaded or generated
+ */
+ private World getWorld(String worldName2, Environment env, ChunkGeneratorWorld chunkGenerator2) {
+ // Set world name
+ worldName2 = env.equals(World.Environment.NETHER) ? worldName2 + NETHER : worldName2;
+ worldName2 = env.equals(World.Environment.THE_END) ? worldName2 + THE_END : worldName2;
WorldCreator wc = WorldCreator.name(worldName2).environment(env);
- World w = settings.isUseOwnGenerator() ? wc.createWorld() : wc.generator(chunkGenerator2).createWorld();
- // Set spawn rates
- if (w != null) {
- setSpawnRates(w);
- }
- return w;
-
- }
-
- private void setSpawnRates(World w) {
- if (getSettings().getSpawnLimitMonsters() > 0) {
- w.setSpawnLimit(SpawnCategory.MONSTER, getSettings().getSpawnLimitMonsters());
- }
- if (getSettings().getSpawnLimitAmbient() > 0) {
- w.setSpawnLimit(SpawnCategory.AMBIENT, getSettings().getSpawnLimitAmbient());
- }
- if (getSettings().getSpawnLimitAnimals() > 0) {
- w.setSpawnLimit(SpawnCategory.ANIMAL, getSettings().getSpawnLimitAnimals());
- }
- if (getSettings().getSpawnLimitWaterAnimals() > 0) {
- w.setSpawnLimit(SpawnCategory.WATER_ANIMAL, getSettings().getSpawnLimitWaterAnimals());
- }
- if (getSettings().getTicksPerAnimalSpawns() > 0) {
- w.setTicksPerSpawns(SpawnCategory.ANIMAL, getSettings().getTicksPerAnimalSpawns());
- }
- if (getSettings().getTicksPerMonsterSpawns() > 0) {
- w.setTicksPerSpawns(SpawnCategory.MONSTER, getSettings().getTicksPerMonsterSpawns());
- }
-
- }
-
- @Override
- public WorldSettings getWorldSettings() {
- return getSettings();
- }
-
- @Override
- public @Nullable ChunkGenerator getDefaultWorldGenerator(String worldName, String id) {
- return chunkGenerator;
- }
-
- @Override
- public void saveWorldSettings() {
- if (settings != null) {
- configObject.saveConfigObject(settings);
- }
- }
-
- @Override
- public void saveDefaultConfig() {
- super.saveDefaultConfig();
- // Save default phases panel
- this.saveResource("panels/phases_panel.yml", false);
- }
-
- /*
- * (non-Javadoc)
- *
- * @see world.bentobox.bentobox.api.addons.Addon#allLoaded()
- */
- @Override
- public void allLoaded() {
- // save settings. This will occur after all addons have loaded
- this.saveWorldSettings();
- }
-
- /**
- * @param i - island
- * @return one block island data
- */
- @NonNull
- public OneBlockIslands getOneBlocksIsland(@NonNull Island i) {
- return blockListener.getIsland(Objects.requireNonNull(i));
- }
-
- public OneBlocksManager getOneBlockManager() {
- return oneBlockManager;
- }
-
- /**
- * @return the blockListener
- */
- public BlockListener getBlockListener() {
- return blockListener;
- }
-
- /**
- * Get the placeholder manager
- *
- * @return the phManager
- */
+ World w = settings.isUseOwnGenerator() ? wc.createWorld() : wc.generator(chunkGenerator2).createWorld();
+ // Set spawn rates
+ if (w != null) {
+ setSpawnRates(w);
+ }
+ return w;
+
+ }
+
+ private void setSpawnRates(World w) {
+ if (getSettings().getSpawnLimitMonsters() > 0) {
+ w.setSpawnLimit(SpawnCategory.MONSTER, getSettings().getSpawnLimitMonsters());
+ }
+ if (getSettings().getSpawnLimitAmbient() > 0) {
+ w.setSpawnLimit(SpawnCategory.AMBIENT, getSettings().getSpawnLimitAmbient());
+ }
+ if (getSettings().getSpawnLimitAnimals() > 0) {
+ w.setSpawnLimit(SpawnCategory.ANIMAL, getSettings().getSpawnLimitAnimals());
+ }
+ if (getSettings().getSpawnLimitWaterAnimals() > 0) {
+ w.setSpawnLimit(SpawnCategory.WATER_ANIMAL, getSettings().getSpawnLimitWaterAnimals());
+ }
+ if (getSettings().getTicksPerAnimalSpawns() > 0) {
+ w.setTicksPerSpawns(SpawnCategory.ANIMAL, getSettings().getTicksPerAnimalSpawns());
+ }
+ if (getSettings().getTicksPerMonsterSpawns() > 0) {
+ w.setTicksPerSpawns(SpawnCategory.MONSTER, getSettings().getTicksPerMonsterSpawns());
+ }
+
+ }
+
+ @Override
+ public WorldSettings getWorldSettings() {
+ return getSettings();
+ }
+
+ @Override
+ public @Nullable ChunkGenerator getDefaultWorldGenerator(String worldName, String id) {
+ return chunkGenerator;
+ }
+
+ @Override
+ public void saveWorldSettings() {
+ if (settings != null) {
+ configObject.saveConfigObject(settings);
+ }
+ }
+
+ @Override
+ public void saveDefaultConfig() {
+ super.saveDefaultConfig();
+ // Save default phases panel
+ this.saveResource("panels/phases_panel.yml", false);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see world.bentobox.bentobox.api.addons.Addon#allLoaded()
+ */
+ @Override
+ public void allLoaded() {
+ // save settings. This will occur after all addons have loaded
+ this.saveWorldSettings();
+ }
+
+ /**
+ * @param i - island
+ * @return one block island data
+ */
+ @NonNull
+ public OneBlockIslands getOneBlocksIsland(@NonNull Island i) {
+ return blockListener.getIsland(Objects.requireNonNull(i));
+ }
+
+ public OneBlocksManager getOneBlockManager() {
+ return oneBlockManager;
+ }
+
+ /**
+ * @return the blockListener
+ */
+ public BlockListener getBlockListener() {
+ return blockListener;
+ }
+
+ /**
+ * Get the placeholder manager
+ *
+ * @return the phManager
+ */
public AOneBlockPlaceholders getPlaceholdersManager() {
- return phManager;
- }
-
- /**
- * @return the holoListener
- */
- public HoloListener getHoloListener() {
- return holoListener;
- }
-
- /**
- * @return true if ItemsAdder is on the server
- */
- public boolean hasItemsAdder() {
- return hasItemsAdder;
- }
+ return phManager;
+ }
+
+ /**
+ * @return the holoListener
+ */
+ public HoloListener getHoloListener() {
+ return holoListener;
+ }
+
+ /**
+ * @return true if ItemsAdder is on the server
+ */
+ public boolean hasItemsAdder() {
+ return hasItemsAdder;
+ }
/**
* Set the addon's world. Used only for testing.
@@ -335,4 +345,11 @@ public void setSettings(Settings settings) {
this.settings = settings;
}
+ /**
+ * @return the bossBar
+ */
+ public BossBarListener getBossBar() {
+ return bossBar;
+ }
+
}
diff --git a/src/main/java/world/bentobox/aoneblock/Settings.java b/src/main/java/world/bentobox/aoneblock/Settings.java
index a313e16b..d17cb518 100644
--- a/src/main/java/world/bentobox/aoneblock/Settings.java
+++ b/src/main/java/world/bentobox/aoneblock/Settings.java
@@ -72,6 +72,11 @@ public class Settings implements WorldSettings {
@ConfigEntry(path = "aoneblock.command.set-count-command", since = "1.10.0")
private String setCountCommand = "setCount";
+ @ConfigComment("The command label that toggers the progress bar.")
+ @ConfigComment("By default it is 'bossbar'.")
+ @ConfigEntry(path = "aoneblock.command.bossbar-command", since = "1.19.0")
+ private String bossBarCommand = "bossbar";
+
@ConfigComment("How long a player must wait until they can use the setCount command again. In minutes.")
@ConfigComment("This is the command that is run from the phases panel.")
@ConfigEntry(path = "aoneblock.command.set-count-cooldown", since = "1.13.0")
@@ -2236,4 +2241,15 @@ public void setConcurrentIslands(int concurrentIslands) {
this.concurrentIslands = concurrentIslands;
}
+ public String getBossBarCommand() {
+ return bossBarCommand;
+ }
+
+ /**
+ * @param bossBarCommand the bossBarCommand to set
+ */
+ public void setBossBarCommand(String bossBarCommand) {
+ this.bossBarCommand = bossBarCommand;
+ }
+
}
\ No newline at end of file
diff --git a/src/main/java/world/bentobox/aoneblock/commands/island/IslandBossBarCommand.java b/src/main/java/world/bentobox/aoneblock/commands/island/IslandBossBarCommand.java
new file mode 100644
index 00000000..420c37b7
--- /dev/null
+++ b/src/main/java/world/bentobox/aoneblock/commands/island/IslandBossBarCommand.java
@@ -0,0 +1,37 @@
+package world.bentobox.aoneblock.commands.island;
+
+import java.util.List;
+
+import world.bentobox.aoneblock.AOneBlock;
+import world.bentobox.bentobox.api.commands.CompositeCommand;
+import world.bentobox.bentobox.api.user.User;
+
+public class IslandBossBarCommand extends CompositeCommand {
+
+ private AOneBlock addon;
+
+ public IslandBossBarCommand(CompositeCommand islandCommand, String label, String[] aliases)
+ {
+ super(islandCommand, label, aliases);
+ }
+
+ @Override
+ public void setup() {
+ setDescription("aoneblock.commands.island.bossbar.description");
+ setOnlyPlayer(true);
+ // Permission
+ setPermission("island.bossbar");
+ addon = getAddon();
+ }
+
+ @Override
+ public boolean execute(User user, String label, List args) {
+ addon.getBossBar().toggleUser(user);
+ getIslands().getIslandAt(user.getLocation()).ifPresent(i -> {
+ if (!i.isAllowed(addon.ONEBLOCK_BOSSBAR)) {
+ user.sendMessage("aoneblock.bossbar.not-active");
+ }
+ });
+ return true;
+ }
+}
diff --git a/src/main/java/world/bentobox/aoneblock/commands/island/PlayerCommand.java b/src/main/java/world/bentobox/aoneblock/commands/island/PlayerCommand.java
index 79b60549..f268edcc 100644
--- a/src/main/java/world/bentobox/aoneblock/commands/island/PlayerCommand.java
+++ b/src/main/java/world/bentobox/aoneblock/commands/island/PlayerCommand.java
@@ -35,5 +35,8 @@ public void setup() {
new IslandRespawnBlockCommand(this,
settings.getRespawnBlockCommand().split(" ")[0],
settings.getRespawnBlockCommand().split(" "));
+ // Boss bar
+ new IslandBossBarCommand(this, settings.getBossBarCommand().split(" ")[0],
+ settings.getBossBarCommand().split(" "));
}
}
diff --git a/src/main/java/world/bentobox/aoneblock/listeners/BlockListener.java b/src/main/java/world/bentobox/aoneblock/listeners/BlockListener.java
index c1de47aa..b81d3a63 100644
--- a/src/main/java/world/bentobox/aoneblock/listeners/BlockListener.java
+++ b/src/main/java/world/bentobox/aoneblock/listeners/BlockListener.java
@@ -254,137 +254,243 @@ private void setUp(@NonNull Island island) {
}
/**
- * Main block processing method
+ * Main block processing method that handles the magic block mechanics.
+ * This includes phase changes, block spawning, and event handling.
*
- * @param e - event causing the processing
- * @param i - island where it's happening
+ * @param e - event causing the processing
+ * @param i - island where it's happening
* @param player - player who broke the block or who is involved - may be null
- * @param world - world where the block is being broken
+ * @param world - world where the block is being broken
*/
private void process(@NonNull Cancellable e, @NonNull Island i, @Nullable Player player, @NonNull World world) {
- // Get the block that is being broken
Block block = Objects.requireNonNull(i.getCenter()).toVector().toLocation(world).getBlock();
-
- // Get oneblock island
OneBlockIslands is = getIsland(i);
+
+ // Process phase changes and requirements
+ ProcessPhaseResult phaseResult = processPhase(e, i, is, player, world, block);
+ if (e.isCancelled()) {
+ return;
+ }
- // Get the phase for current block number
- OneBlockPhase phase = oneBlocksManager.getPhase(is.getBlockNumber());
+ // Initialize queue if needed
+ initializeQueue(is, phaseResult.phase, phaseResult.isCurrPhaseNew);
+
+ // Process hologram and warning sounds
+ processHologramAndWarnings(i, is, phaseResult.phase, block);
+
+ // Process the next block
+ processNextBlock(e, i, player, block, is, phaseResult);
+ }
- // Save previous processing phase name
+ private record ProcessPhaseResult(OneBlockPhase phase, boolean isCurrPhaseNew, int blockNumber) {}
+
+ /**
+ * Processes phase changes and requirements for the magic block.
+ * Returns a record containing phase info, whether it's a new phase, and block number.
+ *
+ * @param e - event being processed
+ * @param i - island instance
+ * @param is - oneblock island data
+ * @param player - player involved
+ * @param world - world where processing occurs
+ * @param block - block being processed
+ * @return ProcessPhaseResult containing phase details
+ */
+ private ProcessPhaseResult processPhase(Cancellable e, Island i, OneBlockIslands is, Player player, World world, Block block) {
+ OneBlockPhase phase = oneBlocksManager.getPhase(is.getBlockNumber());
String prevPhaseName = is.getPhaseName();
- // Check if phase contains `gotoBlock`
if (Objects.requireNonNull(phase).getGotoBlock() != null) {
phase = handleGoto(is, phase.getGotoBlock());
}
- // Get current phase name
String currPhaseName = phase.getPhaseName() == null ? "" : phase.getPhaseName();
-
- // Get the phase for next block number
- OneBlockPhase nextPhase = oneBlocksManager.getPhase(is.getBlockNumber() + 1);
-
- // Check if nextPhase contains `gotoBlock` and override `nextPhase`
- if (Objects.requireNonNull(nextPhase).getGotoBlock() != null) {
- nextPhase = oneBlocksManager.getPhase(nextPhase.getGotoBlock());
- }
-
- // Get next phase name
- String nextPhaseName = nextPhase == null || nextPhase.getPhaseName() == null ? "" : nextPhase.getPhaseName();
-
- // If next phase is new, log break time of the last block of this phase
- if (!currPhaseName.equalsIgnoreCase(nextPhaseName)) {
- is.setLastPhaseChangeTime(System.currentTimeMillis());
- }
-
+ handlePhaseChange(is, phase, currPhaseName);
+
boolean isCurrPhaseNew = !is.getPhaseName().equalsIgnoreCase(currPhaseName);
-
if (isCurrPhaseNew) {
-
- // Check if requirements for new phase are met
if (check.phaseRequirementsFail(player, i, is, phase, world)) {
e.setCancelled(true);
- return;
+ return new ProcessPhaseResult(phase, true, 0);
}
-
- check.setNewPhase(player, i, is, phase);
- is.clearQueue();
-
- // Set the biome for the block and one block above it
- setBiome(block, phase.getPhaseBiome());
-
- // Fire new phase event
- Bukkit.getPluginManager()
- .callEvent(new MagicBlockPhaseEvent(i, player == null ? null : player.getUniqueId(), block,
- phase.getPhaseName(), prevPhaseName, is.getBlockNumber()));
- }
-
- if (!isCurrPhaseNew && is.getBlockNumber() % SAVE_EVERY == 0) {
- // Save island data every MAX_LOOK_AHEAD blocks.
+ handleNewPhase(player, i, is, phase, block, prevPhaseName);
+ } else if (is.getBlockNumber() % SAVE_EVERY == 0) {
saveIsland(i);
}
- // Get the block number in this phase
- int materialBlocksInQueue = (int) is.getQueue().stream().filter(obo -> obo.isMaterial() || obo.isCustomBlock())
+ int materialBlocksInQueue = (int) is.getQueue().stream()
+ .filter(obo -> obo.isMaterial() || obo.isCustomBlock())
.count();
int blockNumber = is.getBlockNumber() - (phase.getBlockNumberValue() - 1) + materialBlocksInQueue;
- // Fill a 5 block queue
+ return new ProcessPhaseResult(phase, isCurrPhaseNew, blockNumber);
+ }
+
+ /**
+ * Handles the initialization of a new phase including biome setting and event firing.
+ *
+ * @param player - player triggering the phase change
+ * @param i - island instance
+ * @param is - oneblock island data
+ * @param phase - new phase being entered
+ * @param block - block being processed
+ * @param prevPhaseName - name of the previous phase
+ */
+ private void handleNewPhase(Player player, Island i, OneBlockIslands is, OneBlockPhase phase, Block block, String prevPhaseName) {
+ check.setNewPhase(player, i, is, phase);
+ is.clearQueue();
+ setBiome(block, phase.getPhaseBiome());
+ Bukkit.getPluginManager().callEvent(new MagicBlockPhaseEvent(i,
+ player == null ? null : player.getUniqueId(),
+ block, phase.getPhaseName(), prevPhaseName, is.getBlockNumber()));
+ }
+
+ /**
+ * Handles phase transition mechanics including setting timestamps for phase changes.
+ *
+ * @param is - oneblock island data
+ * @param phase - current phase
+ * @param currPhaseName - name of current phase
+ */
+ private void handlePhaseChange(OneBlockIslands is, OneBlockPhase phase, String currPhaseName) {
+ OneBlockPhase nextPhase = oneBlocksManager.getPhase(is.getBlockNumber() + 1);
+ if (Objects.requireNonNull(nextPhase).getGotoBlock() != null) {
+ nextPhase = oneBlocksManager.getPhase(nextPhase.getGotoBlock());
+ }
+ String nextPhaseName = nextPhase == null || nextPhase.getPhaseName() == null ? "" : nextPhase.getPhaseName();
+ if (!currPhaseName.equalsIgnoreCase(nextPhaseName)) {
+ is.setLastPhaseChangeTime(System.currentTimeMillis());
+ }
+ }
+
+ /**
+ * Initializes the block queue for a phase with upcoming blocks.
+ *
+ * @param is - oneblock island data
+ * @param phase - current phase
+ * @param isCurrPhaseNew - whether this is a new phase
+ */
+ private void initializeQueue(OneBlockIslands is, OneBlockPhase phase, boolean isCurrPhaseNew) {
if (is.getQueue().isEmpty() || isCurrPhaseNew) {
- // Add initial 5 blocks
for (int j = 0; j < MAX_LOOK_AHEAD; j++) {
- is.add(phase.getNextBlock(addon, blockNumber++));
+ is.add(phase.getNextBlock(addon, j));
}
}
+ }
- // Manage Holograms
+ /**
+ * Updates holograms and plays warning sounds if configured.
+ *
+ * @param i - island instance
+ * @param is - oneblock island data
+ * @param phase - current phase
+ * @param block - block being processed
+ */
+ private void processHologramAndWarnings(Island i, OneBlockIslands is, OneBlockPhase phase, Block block) {
addon.getHoloListener().process(i, is, phase);
-
- // Play warning sound for upcoming mobs
if (addon.getSettings().getMobWarning() > 0) {
warningSounder.play(is, block);
}
+ }
- // Get the next block
- OneBlockObject nextBlock = (isCurrPhaseNew && phase.getFirstBlock() != null) ? phase.getFirstBlock()
- : is.pollAndAdd(phase.getNextBlock(addon, blockNumber));
+ /**
+ * Processes the next block in the sequence, handling entities and block changes.
+ *
+ * @param e - event being processed
+ * @param i - island instance
+ * @param player - player involved
+ * @param block - block being processed
+ * @param is - oneblock island data
+ * @param phaseResult - result from phase processing
+ */
+ private void processNextBlock(Cancellable e, Island i, Player player, Block block, OneBlockIslands is, ProcessPhaseResult phaseResult) {
+ OneBlockObject nextBlock = (phaseResult.isCurrPhaseNew && phaseResult.phase.getFirstBlock() != null)
+ ? phaseResult.phase.getFirstBlock()
+ : is.pollAndAdd(phaseResult.phase.getNextBlock(addon, phaseResult.blockNumber));
- // Entity
if (nextBlock.isEntity()) {
- if (!(e instanceof EntitySpawnEvent)) {
- e.setCancelled(true);
- }
- // Entity spawns do not increment the block number or break the block
- spawnEntity(nextBlock, block);
- // Fire event
- Bukkit.getPluginManager().callEvent(new MagicBlockEntityEvent(i,
- player == null ? null : player.getUniqueId(), block, nextBlock.getEntityType()));
+ handleEntitySpawn(e, i, player, block, nextBlock);
return;
}
- // Break the block
+ is.incrementBlockNumber();
+ handleBlockBreak(e, i, player, block, nextBlock);
+ }
+
+ /**
+ * Handles entity spawning for entity-type blocks.
+ *
+ * @param e - event being processed
+ * @param i - island instance
+ * @param player - player involved
+ * @param block - block where entity will spawn
+ * @param nextBlock - next block object containing entity info
+ */
+ private void handleEntitySpawn(Cancellable e, Island i, Player player, Block block, OneBlockObject nextBlock) {
+ if (!(e instanceof EntitySpawnEvent)) {
+ e.setCancelled(true);
+ }
+ spawnEntity(nextBlock, block);
+ Bukkit.getPluginManager().callEvent(new MagicBlockEntityEvent(i,
+ player == null ? null : player.getUniqueId(),
+ block, nextBlock.getEntityType()));
+ }
+
+ /**
+ * Handles different types of block breaking events.
+ *
+ * @param e - event being processed
+ * @param i - island instance
+ * @param player - player involved
+ * @param block - block being broken
+ * @param nextBlock - next block to spawn
+ */
+ private void handleBlockBreak(Cancellable e, Island i, Player player, Block block, OneBlockObject nextBlock) {
if (e instanceof BlockBreakEvent) {
- this.breakBlock(player, block, nextBlock, i);
+ breakBlock(player, block, nextBlock, i);
} else if (e instanceof PlayerBucketFillEvent) {
- Bukkit.getScheduler().runTask(addon.getPlugin(), () -> spawnBlock(nextBlock, block));
- // Fire event
- ItemStack tool = Objects.requireNonNull(player).getInventory().getItemInMainHand();
- Bukkit.getPluginManager()
- .callEvent(new MagicBlockEvent(i, player.getUniqueId(), tool, block, nextBlock.getMaterial()));
- } else if (e instanceof EntitySpawnEvent) {
- Bukkit.getScheduler().runTask(addon.getPlugin(), () -> spawnBlock(nextBlock, block));
- } else if (e instanceof EntityInteractEvent) {
- // Minion breaking block
- Bukkit.getScheduler().runTask(addon.getPlugin(), () -> spawnBlock(nextBlock, block));
- // Fire event
- Bukkit.getPluginManager().callEvent(new MagicBlockEvent(i, null, null, block, nextBlock.getMaterial()));
+ handleBucketFill(player, i, block, nextBlock);
+ } else if (e instanceof EntitySpawnEvent || e instanceof EntityInteractEvent) {
+ handleEntityBreak(i, block, nextBlock, e instanceof EntityInteractEvent);
}
+ }
- // Increment the block number
- is.incrementBlockNumber();
+ /**
+ * Handles bucket fill events including block spawning and event firing.
+ *
+ * @param player - player filling bucket
+ * @param i - island instance
+ * @param block - block being processed
+ * @param nextBlock - next block to spawn
+ */
+ private void handleBucketFill(Player player, Island i, Block block, OneBlockObject nextBlock) {
+ Bukkit.getScheduler().runTask(addon.getPlugin(), () -> spawnBlock(nextBlock, block));
+ ItemStack tool = Objects.requireNonNull(player).getInventory().getItemInMainHand();
+ Bukkit.getPluginManager().callEvent(new MagicBlockEvent(i, player.getUniqueId(), tool, block, nextBlock.getMaterial()));
+ }
+
+ /**
+ * Handles entity-related block breaking including minion interactions.
+ *
+ * @param i - island instance
+ * @param block - block being broken
+ * @param nextBlock - next block to spawn
+ * @param isMinion - whether the breaker is a minion
+ */
+ private void handleEntityBreak(Island i, Block block, OneBlockObject nextBlock, boolean isMinion) {
+ Bukkit.getScheduler().runTask(addon.getPlugin(), () -> spawnBlock(nextBlock, block));
+ if (isMinion) {
+ Bukkit.getPluginManager().callEvent(new MagicBlockEvent(i, null, null, block, nextBlock.getMaterial()));
+ }
}
+ /**
+ * Handles goto block mechanics, updating block numbers and lifetime.
+ *
+ * @param is - oneblock island data
+ * @param gotoBlock - target block number
+ * @return OneBlockPhase for the target block
+ */
private OneBlockPhase handleGoto(OneBlockIslands is, int gotoBlock) {
// Store lifetime
is.setLifetime(is.getLifetime() + gotoBlock);
@@ -454,6 +560,10 @@ private void spawnBlock(@NonNull OneBlockObject nextBlock, @NonNull Block block)
block.setBlockData(leaves);
} else if (block.getState() instanceof BrushableBlock bb) {
LootTable lt = switch (bb.getBlock().getBiome().getKey().getKey()) {
+ case "DESERT" -> LootTables.DESERT_PYRAMID_ARCHAEOLOGY.getLootTable();
+ case "FROZEN_OCEAN" -> LootTables.OCEAN_RUIN_COLD_ARCHAEOLOGY.getLootTable();
+ case "OCEAN" -> LootTables.OCEAN_RUIN_COLD_ARCHAEOLOGY.getLootTable();
+ case "WARM_OCEAN" -> LootTables.OCEAN_RUIN_WARM_ARCHAEOLOGY.getLootTable();
default -> {
if (random.nextDouble() < 0.8) {
yield LootTables.TRAIL_RUINS_ARCHAEOLOGY_COMMON.getLootTable();
@@ -462,10 +572,6 @@ private void spawnBlock(@NonNull OneBlockObject nextBlock, @NonNull Block block)
yield LootTables.TRAIL_RUINS_ARCHAEOLOGY_RARE.getLootTable();
}
}
- case "DESERT" -> LootTables.DESERT_PYRAMID_ARCHAEOLOGY.getLootTable();
- case "FROZEN_OCEAN" -> LootTables.OCEAN_RUIN_COLD_ARCHAEOLOGY.getLootTable();
- case "OCEAN" -> LootTables.OCEAN_RUIN_COLD_ARCHAEOLOGY.getLootTable();
- case "WARM_OCEAN" -> LootTables.OCEAN_RUIN_WARM_ARCHAEOLOGY.getLootTable();
};
bb.setLootTable(lt);
bb.update();
diff --git a/src/main/java/world/bentobox/aoneblock/listeners/BossBarListener.java b/src/main/java/world/bentobox/aoneblock/listeners/BossBarListener.java
new file mode 100644
index 00000000..5efbf3a4
--- /dev/null
+++ b/src/main/java/world/bentobox/aoneblock/listeners/BossBarListener.java
@@ -0,0 +1,191 @@
+package world.bentobox.aoneblock.listeners;
+
+import java.util.HashMap;
+import java.util.Locale;
+import java.util.Map;
+import java.util.UUID;
+
+import org.bukkit.Bukkit;
+import org.bukkit.boss.BarColor;
+import org.bukkit.boss.BarStyle;
+import org.bukkit.boss.BossBar;
+import org.bukkit.entity.Player;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.EventPriority;
+import org.bukkit.event.Listener;
+import org.bukkit.event.player.PlayerJoinEvent;
+import org.bukkit.event.player.PlayerQuitEvent;
+import org.eclipse.jdt.annotation.NonNull;
+
+import world.bentobox.aoneblock.AOneBlock;
+import world.bentobox.aoneblock.dataobjects.OneBlockIslands;
+import world.bentobox.aoneblock.events.MagicBlockEvent;
+import world.bentobox.bentobox.api.events.flags.FlagSettingChangeEvent;
+import world.bentobox.bentobox.api.events.island.IslandEnterEvent;
+import world.bentobox.bentobox.api.events.island.IslandExitEvent;
+import world.bentobox.bentobox.api.metadata.MetaDataValue;
+import world.bentobox.bentobox.api.user.User;
+import world.bentobox.bentobox.database.objects.Island;
+
+public class BossBarListener implements Listener {
+
+ private static final String AONEBLOCK_BOSSBAR = "aoneblock.bossbar";
+
+ public BossBarListener(AOneBlock addon) {
+ super();
+ this.addon = addon;
+ }
+
+ private AOneBlock addon;
+
+ // Store a boss bar for each player (using their UUID)
+ private final Map islandBossBars = new HashMap<>();
+
+ @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
+ public void onBreakBlockEvent(MagicBlockEvent e) {
+ // Update boss bar
+ tryToShowBossBar(e.getPlayerUUID(), e.getIsland());
+ }
+
+ @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
+ public void onEnterIsland(IslandEnterEvent event) {
+ if (addon.inWorld(event.getIsland().getWorld())) {
+ tryToShowBossBar(event.getPlayerUUID(), event.getIsland());
+ }
+ }
+
+ @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
+ public void onFlagChange(FlagSettingChangeEvent e) {
+ if (e.getEditedFlag() == addon.ONEBLOCK_BOSSBAR) {
+ // Show to players on island. If it isn't allowed then this will clean up the boss bar too
+ e.getIsland().getPlayersOnIsland().stream().map(Player::getUniqueId)
+ .forEach(uuid -> this.tryToShowBossBar(uuid, e.getIsland()));
+ }
+ }
+
+ /**
+ * Try to show the bossbar to the player
+ * @param uuid player's UUID
+ * @param island island they are on
+ */
+ private void tryToShowBossBar(UUID uuid, Island island) {
+ User user = User.getInstance(uuid);
+
+ // Only show if enabled for island
+ if (!island.isAllowed(addon.ONEBLOCK_BOSSBAR)) {
+ BossBar removed = islandBossBars.remove(island);
+ if (removed != null) {
+ // Remove all players from the boss bar
+ removed.removeAll();
+ }
+ return;
+ }
+ // Default to showing boss bar unless it is explicitly turned off
+ if (!user.getMetaData(AONEBLOCK_BOSSBAR).map(MetaDataValue::asBoolean).orElse(true)) {
+ // Remove any boss bar from user if they are in the world
+ removeBar(user, island);
+ // Do not show a boss bar
+ return;
+ }
+ // Prepare boss bar
+ String title = user.getTranslationOrNothing("aoneblock.bossbar.title");
+ BarColor c;
+ try {
+ c = BarColor.valueOf(user.getTranslation("aoneblock.bossbar.color").toUpperCase(Locale.ENGLISH));
+ } catch (Exception e) {
+ c = BarColor.RED;
+ addon.logError("Bossbar color unknown. Pick from RED, WHITE, PINK, BLUE, GREEN, YELLOW, or PURPLE");
+ }
+ BarStyle s = BarStyle.SOLID;
+ try {
+ s = BarStyle.valueOf(user.getTranslation("aoneblock.bossbar.style").toUpperCase(Locale.ENGLISH));
+ } catch (Exception e) {
+ s = BarStyle.SOLID;
+ addon.logError(
+ "Bossbar style unknow. Pick from SOLID, SEGMENTED_6, SEGMENTED_10, SEGMENTED_12, SEGMENTED_20");
+ }
+ // Get it or make it
+ BossBar bar = this.islandBossBars.getOrDefault(island,
+ Bukkit.createBossBar(title, c, s));
+ // Get the progress
+ @NonNull
+ OneBlockIslands obi = addon.getOneBlocksIsland(island);
+
+ // Set progress
+ bar.setProgress(addon.getOneBlockManager().getPercentageDone(obi) / 100);
+ int numBlocksToGo = addon.getOneBlockManager().getNextPhaseBlocks(obi);
+ int phaseBlocks = addon.getOneBlockManager().getPhaseBlocks(obi);
+ int done = phaseBlocks - numBlocksToGo;
+ String translation = user.getTranslationOrNothing("aoneblock.bossbar.status", "[togo]",
+ String.valueOf(numBlocksToGo), "[total]", String.valueOf(phaseBlocks), "[done]", String.valueOf(done),
+ "[phase-name]", obi.getPhaseName(), "[percent-done]",
+ Math.round(addon.getOneBlockManager().getPercentageDone(obi)) + "%");
+ bar.setTitle(translation);
+ // Add to user if they don't have it already
+ Player player = Bukkit.getPlayer(uuid);
+ if (!bar.getPlayers().contains(player)) {
+ bar.addPlayer(player);
+ }
+ // Save the boss bar for later reference (e.g., when updating or removing)
+ islandBossBars.put(island, bar);
+
+ }
+
+ private void removeBar(User user, Island island) {
+ if (!addon.inWorld(island.getWorld()) || !user.isPlayer() || !user.isOnline()) {
+ return;
+ }
+ BossBar bossBar = islandBossBars.get(island);
+ if (bossBar != null) {
+ bossBar.removePlayer(user.getPlayer());
+ if (bossBar.getPlayers().isEmpty()) {
+ // Clean up
+ islandBossBars.remove(island);
+ }
+ }
+
+ }
+
+ @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
+ public void onExitIsland(IslandExitEvent event) {
+ User user = User.getInstance(event.getPlayerUUID());
+ removeBar(user, event.getIsland());
+ }
+
+ @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
+ public void onJoin(PlayerJoinEvent e) {
+ // If the player is on an island then show the bar
+ if (!addon.inWorld(e.getPlayer().getLocation())) {
+ return;
+ }
+ addon.getIslands().getIslandAt(e.getPlayer().getLocation())
+ .ifPresent(is -> this.tryToShowBossBar(e.getPlayer().getUniqueId(), is));
+ }
+
+ @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
+ public void onQuit(PlayerQuitEvent e) {
+ // Clean up boss bars
+ islandBossBars.values().stream().forEach(bb -> bb.removePlayer(e.getPlayer()));
+ islandBossBars.values().removeIf(bb -> bb.getPlayers().isEmpty());
+ }
+
+ /**
+ * User-level boss bar control.
+ * @param user user to toggle
+ */
+ public void toggleUser(User user) {
+ boolean newState = !user.getMetaData(AONEBLOCK_BOSSBAR).map(MetaDataValue::asBoolean).orElse(true);
+ user.putMetaData(AONEBLOCK_BOSSBAR, new MetaDataValue(newState));
+ if (newState) {
+ // If the player is on an island then show the bar
+ addon.getIslands().getIslandAt(user.getLocation()).filter(is -> addon.inWorld(is.getWorld()))
+ .ifPresent(is -> this.tryToShowBossBar(user.getUniqueId(), is));
+ user.sendMessage("aoneblock.commands.island.bossbar.status_on");
+ } else {
+ // Remove player from any boss bars. Adding happens automatically
+ islandBossBars.forEach((k, v) -> v.removePlayer(user.getPlayer()));
+ user.sendMessage("aoneblock.commands.island.bossbar.status_off");
+ }
+ }
+
+}
diff --git a/src/main/java/world/bentobox/aoneblock/listeners/HoloListener.java b/src/main/java/world/bentobox/aoneblock/listeners/HoloListener.java
index 34b0560d..9a0cc5f4 100644
--- a/src/main/java/world/bentobox/aoneblock/listeners/HoloListener.java
+++ b/src/main/java/world/bentobox/aoneblock/listeners/HoloListener.java
@@ -1,13 +1,10 @@
package world.bentobox.aoneblock.listeners;
-import java.util.IdentityHashMap;
-import java.util.Map;
-import java.util.Optional;
-import java.util.UUID;
+import java.util.HashSet;
+import java.util.Set;
import org.bukkit.Bukkit;
import org.bukkit.Location;
-import org.bukkit.World;
import org.bukkit.entity.Display.Billboard;
import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType;
@@ -28,154 +25,170 @@
/**
* Handles Holographic elements
- *
- * @author tastybento, HSGamer
*/
public class HoloListener implements Listener {
private final AOneBlock addon;
- private final Map cachedHolograms;
+ private final Set activeHolograms;
+ private static final Vector DEFAULT_OFFSET = new Vector(0.5, 1.1, 0.5);
/**
* @param addon - OneBlock
*/
public HoloListener(@NonNull AOneBlock addon) {
this.addon = addon;
- this.cachedHolograms = new IdentityHashMap<>();
+ this.activeHolograms = new HashSet<>();
}
+ /**
+ * Handles the event when an island is deleted.
+ * Removes the associated hologram.
+ *
+ * @param e the IslandDeleteEvent
+ */
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
public void onDeletedIsland(IslandDeleteEvent e) {
- deleteHologram(e.getIsland());
- }
-
- private Optional getHologram(Island island) {
- return Optional.ofNullable(cachedHolograms.get(island)).filter(TextDisplay::isValid);
+ removeHologramAt(e.getIsland());
}
- private TextDisplay createHologram(Island island) {
- Location pos = island.getCenter().clone().add(parseVector(addon.getSettings().getOffset()));
- World world = pos.getWorld();
- assert world != null;
-
- TextDisplay newDisplay = world.spawn(pos, TextDisplay.class);
- newDisplay.setAlignment(TextDisplay.TextAlignment.CENTER);
- newDisplay.setBillboard(Billboard.CENTER);
-
- cachedHolograms.put(island, newDisplay);
-
- return newDisplay;
+ /**
+ * Clears all cached holograms and removes their entities.
+ * Called when disabling
+ */
+ public void onDisable() {
+ activeHolograms.forEach(this::cleanupHologram);
+ activeHolograms.clear();
}
- private static Vector parseVector(String str) {
- if (str == null) {
- return new Vector(0.5, 1.1, 0.5);
- }
- String[] parts = str.split(",");
- if (parts.length != 3) {
- return new Vector(0.5, 1.1, 0.5);
+ /**
+ * Sets up the hologram for a specific island.
+ * If it's a new island, sets the starting hologram line.
+ *
+ * @param island the island to set up
+ * @param is the OneBlockIslands data object
+ * @param newIsland whether this is a new island
+ */
+ protected void setUp(@NonNull Island island, @NonNull OneBlockIslands is, boolean newIsland) {
+ if (!addon.getSettings().isUseHolograms() || island.getOwner() == null) {
+ return;
}
- try {
- double x = Double.parseDouble(parts[0].trim());
- double y = Double.parseDouble(parts[1].trim());
- double z = Double.parseDouble(parts[2].trim());
- return new Vector(x, y, z);
- } catch (NumberFormatException e) {
- return new Vector(0.5, 1.1, 0.5);
+ if (newIsland) {
+ String startingText = User.getInstance(island.getOwner())
+ .getTranslation("aoneblock.island.starting-hologram");
+ is.setHologram(startingText == null ? "" : startingText);
}
+ updateHologram(island, is.getHologram());
}
- private void clearIfInitialized(TextDisplay hologram) {
- if (hologram.isValid()) {
- hologram.remove();
- }
+ /**
+ * Processes the phase change for an island and updates its hologram.
+ *
+ * @param i the island
+ * @param is the OneBlockIslands data object
+ * @param phase the current OneBlockPhase
+ */
+ protected void process(@NonNull Island i, @NonNull OneBlockIslands is, @NonNull OneBlockPhase phase) {
+ String holoText = phase.getHologramLine(is.getBlockNumber());
+ is.setHologram(holoText == null ? "" : Util.translateColorCodes(holoText));
+ updateHologram(i, is.getHologram());
}
- private void updateLines(Island island, OneBlockIslands oneBlockIsland) {
- // Ignore if holograms are disabled
- if (!addon.getSettings().isUseHolograms()) {
- return;
- }
-
- Optional optionalHologram = getHologram(island);
- String holoLine = oneBlockIsland.getHologram();
-
- // Clear hologram if empty
- if (holoLine.isBlank() && optionalHologram.isPresent()) {
- clearIfInitialized(optionalHologram.get());
+ /**
+ * Updates the hologram lines for the given island.
+ * Handles creation, updating, and scheduled deletion of holograms.
+ *
+ * @param island the island to update
+ * @param text the text to display
+ */
+ private void updateHologram(Island island, String text) {
+ if (!addon.getSettings().isUseHolograms() || text.isBlank()) {
return;
}
+ removeHologramAt(island);
+ Location pos = getHologramLocation(island);
+ createHologram(pos, text);
- // Get or create hologram if needed
- TextDisplay hologram = optionalHologram.orElseGet(() -> createHologram(island));
-
- // Convert and set lines to hologram
- hologram.setText(holoLine);
-
- // Set up auto delete
+ // Set up auto delete if duration is set
if (addon.getSettings().getHologramDuration() > 0) {
- Bukkit.getScheduler().runTaskLater(addon.getPlugin(), () -> clearIfInitialized(hologram), addon.getSettings().getHologramDuration() * 20L);
+ Bukkit.getScheduler().runTaskLater(addon.getPlugin(),
+ () -> removeHologramAt(island),
+ addon.getSettings().getHologramDuration() * 20L);
}
}
/**
- * Setup holograms on startup
+ * Gets the location for the hologram based on the island's center and the configured offset.
+ *
+ * @param island the island
+ * @return the location for the hologram
*/
- public void setUp() {
- addon.getIslands().getIslands().stream()
- .filter(i -> addon.inWorld(i.getWorld()))
- .forEach(island -> setUp(island, addon.getOneBlocksIsland(island), false));
+ private Location getHologramLocation(Island island) {
+ Vector offset = parseVector(addon.getSettings().getOffset());
+ return island.getCenter().clone().add(offset);
}
- public void clear() {
- cachedHolograms.values().forEach(this::clearIfInitialized);
- cachedHolograms.clear();
+ /**
+ * Creates a new hologram (TextDisplay) at the given location.
+ * Caches the hologram for future reference.
+ *
+ * @param pos the location to create the hologram at
+ * @param text the text to display
+ */
+ private void createHologram(Location pos, String text) {
+ TextDisplay display = pos.getWorld().spawn(pos, TextDisplay.class);
+ display.setAlignment(TextDisplay.TextAlignment.CENTER);
+ display.setBillboard(Billboard.CENTER);
+ display.setPersistent(true);
+ display.setText(text);
+ activeHolograms.add(pos);
}
/**
- * Delete hologram
+ * Deletes the hologram for the given island and removes any residual holograms nearby.
*
- * @param island island
+ * @param island the island whose hologram should be deleted
*/
- private void deleteHologram(@NonNull Island island) {
- TextDisplay hologram = cachedHolograms.remove(island);
- if (hologram != null) {
- clearIfInitialized(hologram);
+ private void removeHologramAt(@NonNull Island island) {
+ if (island.getWorld() == null) {
+ return;
}
- // Clear any residual ones that are not cached for some reason
- clearTextDisplayNearBlock(island);
+ cleanupHologram(getHologramLocation(island));
}
- private void clearTextDisplayNearBlock(Island island) {
- World world = island.getWorld();
- if (world == null)
- return;
- Location pos = island.getCenter().clone().add(parseVector(addon.getSettings().getOffset()));
- // Search for entities in a small radius (e.g., 1 block around)
- for (Entity entity : world.getNearbyEntities(pos, 1, 1, 1)) {
- if (entity.getType() == EntityType.TEXT_DISPLAY) {
- ((TextDisplay) entity).remove();
- }
- }
+ /**
+ * Removes any holograms at this location
+ * @param pos location
+ */
+ private void cleanupHologram(Location pos) {
+ activeHolograms.remove(pos);
+ // Chunks have to be loaded for the entity to exist to be deleted
+ Util.getChunkAtAsync(pos).thenRun(() ->
+ pos.getWorld().getNearbyEntities(pos, 1, 1, 1).stream()
+ .filter(e -> e.getType() == EntityType.TEXT_DISPLAY)
+ .forEach(Entity::remove));
}
- protected void setUp(@NonNull Island island, @NonNull OneBlockIslands is, boolean newIsland) {
- UUID ownerUUID = island.getOwner();
- if (ownerUUID == null) {
- return;
+ /**
+ * Parses a string in the format "x,y,z" into a Vector.
+ * If parsing fails, returns a default vector.
+ *
+ * @param str the string to parse
+ * @return the parsed Vector
+ */
+ private static Vector parseVector(String str) {
+ if (str == null) {
+ return DEFAULT_OFFSET;
}
-
- User owner = User.getInstance(ownerUUID);
- if (newIsland) {
- String holoLine = owner.getTranslation("aoneblock.island.starting-hologram");
- is.setHologram(holoLine == null ? "" : holoLine);
+ try {
+ String[] parts = str.split(",");
+ return parts.length == 3
+ ? new Vector(
+ Double.parseDouble(parts[0].trim()),
+ Double.parseDouble(parts[1].trim()),
+ Double.parseDouble(parts[2].trim()))
+ : DEFAULT_OFFSET;
+ } catch (NumberFormatException e) {
+ return DEFAULT_OFFSET;
}
- updateLines(island, is);
- }
-
- protected void process(@NonNull Island i, @NonNull OneBlockIslands is, @NonNull OneBlockPhase phase) {
- String holoLine = phase.getHologramLine(is.getBlockNumber());
- is.setHologram(holoLine == null ? "" : Util.translateColorCodes(holoLine));
- updateLines(i, is);
}
}
diff --git a/src/main/java/world/bentobox/aoneblock/oneblocks/customblock/MobCustomBlock.java b/src/main/java/world/bentobox/aoneblock/oneblocks/customblock/MobCustomBlock.java
index ce03a8cf..e7f5ba76 100644
--- a/src/main/java/world/bentobox/aoneblock/oneblocks/customblock/MobCustomBlock.java
+++ b/src/main/java/world/bentobox/aoneblock/oneblocks/customblock/MobCustomBlock.java
@@ -37,6 +37,9 @@ public MobCustomBlock(EntityType mob, Material underlyingBlock) {
public static Optional fromMap(Map, ?> map) {
String entityTypeValue = Objects.toString(map.get("mob"), null);
+ if (entityTypeValue == null) {
+ return Optional.empty();
+ }
String underlyingBlockValue = Objects.toString(map.get("underlying-block"), null);
EntityType entityType = maybeEntity(entityTypeValue);
diff --git a/src/main/resources/addon.yml b/src/main/resources/addon.yml
index ffdea698..fc1623ad 100755
--- a/src/main/resources/addon.yml
+++ b/src/main/resources/addon.yml
@@ -50,6 +50,9 @@ permissions:
aoneblock.island:
description: Allow use of '/ob' command - the main island command
default: TRUE
+ aoneblock.island.bossbar:
+ description: Allow use of '/ob bossbar' command - toggle the bossbar
+ default: FALSE
aoneblock.island.home:
description: Allow use of '/ob go' command - teleport you to your island
default: TRUE
diff --git a/src/main/resources/locales/cs.yml b/src/main/resources/locales/cs.yml
index 8b01750d..44b2ff60 100644
--- a/src/main/resources/locales/cs.yml
+++ b/src/main/resources/locales/cs.yml
@@ -1,80 +1,112 @@
----
+protection:
+ flags:
+ START_SAFETY:
+ name: Počáteční bezpečnost
+ description: |
+ &b Zabraňuje novým hráčům
+ &b from moving for 1 minute
+ &b takže nespadnou.
+ hint: '&c pohyb zablokován pro bezpečnost po [number] více sekund!'
+ free-to-move: '&a Můžete se volně pohybovat. '
+ ONEBLOCK_BOSSBAR:
+ name: Boss Bar
+ description: |
+ &b Ukazuje stavový řádek
+ &b pro každou fázi.
aoneblock:
+ bossbar:
+ title: Bloky zbývající
+ status: '&a Fázové bloky & B [done] & d / & b [total]'
+ color: RED
+ style: SEGMENTED_20
+ not-active: '&c Boss Bar není pro tento ostrov aktivní'
commands:
admin:
setcount:
- parameters: " [lifetime]"
+ parameters: [lifetime]
description: nastavit počet bloků hráče
- set: "&a počet [name] je nastaven na [number]"
- set-lifetime: "&a [name] je nastaveno na [number]"
+ set: '&a počet [name] je nastaven na [number]'
+ set-lifetime: '&a [name] je nastaveno na [number]'
setchest:
- parameters: " "
+ parameters:
description: dejte pohled na hrudník do fáze se specifikovanou vzácností
- chest-is-empty: "&c Ten hrudník je prázdný, takže jej nelze přidat"
- unknown-phase: "&c Neznámá fáze. Chcete-li si je prohlédnout, použijte tabulátor"
- unknown-rarity: "&c Neznámá vzácnost. Používejte COMMON, UNCOMMON, RARE nebo
- EPIC"
- look-at-chest: "&c Podívejte se na naplněnou hruď a nastavte ji"
- only-single-chest: "&c Lze nastavit pouze jednotlivé bedny"
- success: "&a Hrudník byl úspěšně přidán do fáze"
- failure: "&c Hrudník nelze přidat do fáze! Chyby najdete na konzole"
+ chest-is-empty: '&c Ten hrudník je prázdný, takže jej nelze přidat'
+ unknown-phase: '&c Neznámá fáze. Chcete-li si je prohlédnout, použijte tabulátor'
+ unknown-rarity: '&c Neznámá vzácnost. Používejte COMMON, UNCOMMON, RARE nebo EPIC'
+ look-at-chest: '&c Podívejte se na naplněnou hruď a nastavte ji'
+ only-single-chest: '&c Lze nastavit pouze jednotlivé bedny'
+ success: '&a Hrudník byl úspěšně přidán do fáze'
+ failure: '&c Hrudník nelze přidat do fáze! Chyby najdete na konzole'
sanity:
- parameters: ""
+ parameters:
description: zobrazí v konzoli kontrolu pravděpodobnosti fází
- see-console: "&a Podívejte se do konzoly pro zprávu"
+ see-console: '&a Podívejte se do konzoly pro zprávu'
count:
description: zobrazit počet bloků a fázi
- info: "&a Jste na bloku &b [number] ve fázi &a [name]"
+ info: '&a Jste na bloku &b [number] ve fázi &a [name]'
info:
- count: Ostrov &a je na bloku &b [number]&a ve fázi &b [name] &a. Počet doživotí
+ count: >-
+ Ostrov &a je na bloku &b [number]&a ve fázi &b [name] &a. Počet doživotí
&b [lifetime] &a.
phases:
description: zobrazit seznam všech fází
- title: "&2 Fáze OneBlock"
- name-syntax: "&a [name]"
- description-syntax: "&b [number] bloků"
+ title: '&2 Fáze OneBlock'
+ name-syntax: '&a [name]'
+ description-syntax: '&b [number] bloků'
island:
+ bossbar:
+ description: přepíná fázový šéfový bar
+ status_on: '&b Bossbar se otočil &a zapnul'
+ status_off: '&b Bossbar se &c otočil'
setcount:
- parameters: ""
+ parameters:
description: nastavte počet bloků na dříve dokončenou hodnotu
- set: "&a Počet nastaven na [number]."
- too-high: "&c Maximálně můžeš nastavit [number]!"
+ set: '&a Počet nastaven na [number].'
+ too-high: '&c Maximálně můžeš nastavit [number]!'
respawn-block:
description: respawnuje magický blok v situacích, kdy zmizí
- block-exist: "&a Blok existuje, nevyžadoval respawning. Označil jsem to za vás."
- block-respawned: "&a Blok byl znovu vytvořen."
+ block-exist: '&a Blok existuje, nevyžadoval respawning. Označil jsem to za vás.'
+ block-respawned: '&a Blok byl znovu vytvořen.'
phase:
insufficient-level: Tvůj ostrov je na příliš nízké úrovni, musí být alespoň [number].
insufficient-funds: Nemáš dostatečné prostředky! Musíš mít alespoň [number].
- insufficient-bank-balance: V Bance ostrova není dostatek financí! Je potřeba alespoň
- [number].
- insufficient-permission: "&c Nemůžete pokračovat, dokud nezískáte oprávnění [name]!"
- cooldown: "&c Další fáze bude dostupná za [number] sekund!"
+ insufficient-bank-balance: V Bance ostrova není dostatek financí! Je potřeba alespoň [number].
+ insufficient-permission: '&c Nemůžete pokračovat, dokud nezískáte oprávnění [name]!'
+ cooldown: '&c Další fáze bude dostupná za [number] sekund!'
placeholders:
infinite: Nekonečný
gui:
titles:
- phases: "&0&l Jednoblokové fáze"
+ phases: '&0&l Jednoblokové fáze'
buttons:
previous:
- name: "&f&l Předchozí stránka"
- description: "&7 Přepnout na stránku [number]"
+ name: '&f&l Předchozí stránka'
+ description: '&7 Přepnout na stránku [number]'
next:
- name: "&f&l Další stránka"
- description: "&7 Přepnout na stránku [number]"
+ name: '&f&l Další stránka'
+ description: '&7 Přepnout na stránku [number]'
phase:
- name: "&f&l [phase]"
- description: "[starting-block]\n[biome]\n[bank]\n[economy] \n[level]\n[permission]"
- starting-block: "&7 Spustí se po rozbití bloků &e [number]."
- biome: "&7 Biom: &e [biome]"
- bank: "&7 Vyžaduje &e $[number] &7 na bankovním účtu."
- economy: "&7 Vyžaduje &e $[number] &7 v hráčském účtu."
- level: "&7 Vyžaduje &e [number] &7 úroveň ostrova."
- permission: "&7 Vyžaduje oprávnění `&e[permission]&7`."
+ name: '&f&l [phase]'
+ description: |-
+ [starting-block]
+ [biome]
+ [bank]
+ [economy]
+ [level]
+ [permission]
+ starting-block: '&7 Spustí se po rozbití bloků &e [number].'
+ biome: '&7 Biom: &e [biome]'
+ bank: '&7 Vyžaduje &e $[number] &7 na bankovním účtu.'
+ economy: '&7 Vyžaduje &e $[number] &7 v hráčském účtu.'
+ level: '&7 Vyžaduje &e [number] &7 úroveň ostrova.'
+ permission: '&7 Vyžaduje oprávnění `&e[permission]&7`.'
+ blocks-prefix: '&7 Bloků ve fázi -'
+ blocks: '&e [name], '
+ wrap-at: '50'
tips:
- click-to-previous: "&e Klepnutím na &7 zobrazíte předchozí stránku."
- click-to-next: "&e Klepnutím na &7 zobrazíte další stránku."
- click-to-change: "&e Klikněte na &7 pro změnu."
+ click-to-previous: '&e Klepnutím na &7 zobrazíte předchozí stránku.'
+ click-to-next: '&e Klepnutím na &7 zobrazíte další stránku.'
+ click-to-change: '&e Klikněte na &7 pro změnu.'
island:
starting-hologram: |-
&a Vítejte v AOneBlock
diff --git a/src/main/resources/locales/de.yml b/src/main/resources/locales/de.yml
index ded39ead..4801f7a2 100644
--- a/src/main/resources/locales/de.yml
+++ b/src/main/resources/locales/de.yml
@@ -1,78 +1,108 @@
----
+protection:
+ flags:
+ START_SAFETY:
+ name: Sicherheit beginnen
+ description: |
+ &b verhindert neue Spieler
+ &b vor dem Umzug für 1 Minute
+ &b damit sie nicht abfallen.
+ hint: '&c Bewegung für die Sicherheit für [number] mehr Sekunden!'
+ free-to-move: '&a Sie können sich frei bewegen. '
+ ONEBLOCK_BOSSBAR:
+ name: Boss Bar
+ description: |
+ &b Zeigt eine Statusleiste
+ &b für jede Phase.
aoneblock:
+ bossbar:
+ title: Verbleibende Blöcke
+ status: '&a Phasenblöcke &b [done] &d / &b [total]'
+ color: RED
+ style: SEGMENTED_20
+ not-active: '&c Boss Bar ist für diese Insel nicht aktiv'
commands:
admin:
setcount:
- parameters: " [lifetime]"
+ parameters: [lifetime]
description: Setze die Blockanzahl des Spielers
- set: "&a [name] zählt auf [number]"
+ set: '&a [name] zählt auf [number]'
set-lifetime: Die Lebenszeitanzahl von &a [name] wurde auf [number] gesetzt
setchest:
- parameters: " "
- description: Versetzen Sie die betrachtete Truhe in eine Phase mit der angegebenen
+ parameters:
+ description: >-
+ Versetzen Sie die betrachtete Truhe in eine Phase mit der angegebenen
Seltenheit
- chest-is-empty: "&c Diese Truhe ist leer und kann daher nicht hinzugefügt
- werden"
- unknown-phase: "&c Unbekannte Phase. Verwenden Sie tab-complete, um sie anzuzeigen"
- unknown-rarity: "&c Unbekannte Seltenheit. Verwenden Sie COMMON, UNCOMMON,
- RARE oder EPIC"
- look-at-chest: "&c Sieh dir eine gefüllte Truhe an, um sie einzustellen"
- only-single-chest: "&c Es können nur einzelne Truhen eingestellt werden"
- success: "&a Eine Truhe erfolgreich zur Phase hinzugefügt"
- failure: "&c Truhe konnte nicht zur Phase hinzugefügt werden! Siehe Konsole
- für Fehler"
+ chest-is-empty: '&c Diese Truhe ist leer und kann daher nicht hinzugefügt werden'
+ unknown-phase: '&c Unbekannte Phase. Verwenden Sie tab-complete, um sie anzuzeigen'
+ unknown-rarity: >-
+ &c Unbekannte Seltenheit. Verwenden Sie COMMON, UNCOMMON, RARE oder
+ EPIC
+ look-at-chest: '&c Sieh dir eine gefüllte Truhe an, um sie einzustellen'
+ only-single-chest: '&c Es können nur einzelne Truhen eingestellt werden'
+ success: '&a Eine Truhe erfolgreich zur Phase hinzugefügt'
+ failure: >-
+ &c Truhe konnte nicht zur Phase hinzugefügt werden! Siehe Konsole für
+ Fehler
sanity:
- parameters: ""
- description: Zeigen Sie eine Überprüfung der Phasenwahrscheinlichkeiten in
- der Konsole an
- see-console: "&a Den Bericht finden Sie in der Konsole"
+ parameters:
+ description: >-
+ Zeigen Sie eine Überprüfung der Phasenwahrscheinlichkeiten in der
+ Konsole an
+ see-console: '&a Den Bericht finden Sie in der Konsole'
count:
description: Zeige die Blockanzahl und Phase
- info: "&a Sie befinden sich in der Phase &a [name] in Block &b [number]"
+ info: '&a Sie befinden sich in der Phase &a [name] in Block &b [number]'
info:
- count: "&a Island befindet sich in Block &b [number]&a in der Phase &b [Name]
- &a. Lebenszeitanzahl &b [lifetime] &a."
+ count: >-
+ &a Island befindet sich in Block &b [number]&a in der Phase &b [Name]
+ &a. Lebenszeitanzahl &b [lifetime] &a.
phases:
description: Zeigen Sie eine Liste aller Phasen an
- title: "&2 OneBlock-Phasen"
- name-syntax: "&a [name]"
- description-syntax: "&b [number] Blöcke"
+ title: '&2 OneBlock-Phasen'
+ name-syntax: '&a [name]'
+ description-syntax: '&b [number] Blöcke'
island:
+ bossbar:
+ description: Phase Boss Bar umschalten
+ status_on: '&b Bossbar &a eingeschaltet'
+ status_off: '&b Bossbar &c ausgeschaltet'
setcount:
- parameters: ""
+ parameters:
description: Setzen Sie die Blockanzahl auf den zuvor abgeschlossenen Wert
- set: "&a Zähler auf [number] gesetzt."
- too-high: "&c Das Maximum, das Sie festlegen können, ist [number]!"
+ set: '&a Zähler auf [number] gesetzt.'
+ too-high: '&c Das Maximum, das Sie festlegen können, ist [number]!'
respawn-block:
- description: lässt den magischen Block in Situationen wieder erscheinen, in
- denen er verschwindet
- block-exist: "&ein Block existiert, musste nicht neu gestartet werden. Ich habe
- es für dich markiert."
- block-respawned: "&a Block wieder aufgetaucht."
+ description: >-
+ lässt den magischen Block in Situationen wieder erscheinen, in denen er
+ verschwindet
+ block-exist: >-
+ &ein Block existiert, musste nicht neu gestartet werden. Ich habe es für
+ dich markiert.
+ block-respawned: '&a Block wieder aufgetaucht.'
phase:
- insufficient-level: "&c Ihr Insellevel ist zu niedrig, um fortzufahren! Es muss
- [number] sein."
- insufficient-funds: "&c Ihr Guthaben ist zu gering, um fortzufahren! Sie müssen
- [number] sein."
- insufficient-bank-balance: "&c Der Saldo der Inselbank ist zu niedrig, um fortzufahren!
- Es muss [number] sein."
- insufficient-permission: "&c Sie können nicht weitermachen, bis Sie die [name]-Berechtigung
- erhalten!"
- cooldown: "&c Die nächste Stufe ist in [number] Sekunden verfügbar!"
+ insufficient-level: '&c Ihr Insellevel ist zu niedrig, um fortzufahren! Es muss [number] sein.'
+ insufficient-funds: '&c Ihr Guthaben ist zu gering, um fortzufahren! Sie müssen [number] sein.'
+ insufficient-bank-balance: >-
+ &c Der Saldo der Inselbank ist zu niedrig, um fortzufahren! Es muss
+ [number] sein.
+ insufficient-permission: >-
+ &c Sie können nicht weitermachen, bis Sie die [name]-Berechtigung
+ erhalten!
+ cooldown: '&c Die nächste Stufe ist in [number] Sekunden verfügbar!'
placeholders:
infinite: Unendlich
gui:
titles:
- phases: "&0&l OneBlock-Phasen"
+ phases: '&0&l OneBlock-Phasen'
buttons:
previous:
- name: "&f&l Vorherige Seite"
- description: "&7 Zur Seite [number] wechseln"
+ name: '&f&l Vorherige Seite'
+ description: '&7 Zur Seite [number] wechseln'
next:
- name: "&f&l Nächste Seite"
- description: "&7 Zur Seite [number] wechseln"
+ name: '&f&l Nächste Seite'
+ description: '&7 Zur Seite [number] wechseln'
phase:
- name: "&f&l [phase]"
+ name: '&f&l [phase]'
description: |-
[starting-block]
[biome]
@@ -80,16 +110,19 @@ aoneblock:
[economy]
[level]
[permission]
- starting-block: "&7 Startet nach dem Aufbrechen von &e [number] Blöcken."
- biome: "&7 Biom: &e [biome]"
- bank: "&7 Erfordert &e $[number] &7 auf dem Bankkonto."
- economy: "&7 Erfordert &e $[number] &7 im Spielerkonto."
- level: "&7 Erfordert &e [number] &7 Inselebene."
- permission: "&7 Erfordert die Berechtigung „&e[permission]&7“."
+ starting-block: '&7 Startet nach dem Aufbrechen von &e [number] Blöcken.'
+ biome: '&7 Biom: &e [biome]'
+ bank: '&7 Erfordert &e $[number] &7 auf dem Bankkonto.'
+ economy: '&7 Erfordert &e $[number] &7 im Spielerkonto.'
+ level: '&7 Erfordert &e [number] &7 Inselebene.'
+ permission: '&7 Erfordert die Berechtigung „&e[permission]&7“.'
+ blocks-prefix: '&7 Blöcke in Phase -'
+ blocks: '&e [name], '
+ wrap-at: '50'
tips:
- click-to-previous: "&e Klicken Sie auf &7, um die vorherige Seite anzuzeigen."
- click-to-next: "&e Klicken Sie auf &7, um die nächste Seite anzuzeigen."
- click-to-change: "&e Zum Ändern &7klicken."
+ click-to-previous: '&e Klicken Sie auf &7, um die vorherige Seite anzuzeigen.'
+ click-to-next: '&e Klicken Sie auf &7, um die nächste Seite anzuzeigen.'
+ click-to-change: '&e Zum Ändern &7klicken.'
island:
starting-hologram: |-
&aWillkommen bei AOneBlock
diff --git a/src/main/resources/locales/en-US.yml b/src/main/resources/locales/en-US.yml
index 4627dd76..3345596e 100755
--- a/src/main/resources/locales/en-US.yml
+++ b/src/main/resources/locales/en-US.yml
@@ -13,8 +13,22 @@ protection:
&b so they don't fall off.
hint: "&c Movement blocked for safety for [number] more seconds!"
free-to-move: "&a You are free to move. Be careful!"
-
+ ONEBLOCK_BOSSBAR:
+ name: Boss Bar
+ description: |
+ &b Shows a status bar
+ &b for each phase.
aoneblock:
+ bossbar:
+ title: "Blocks remaining"
+ # status: "&a Phase blocks &b [total]. Blocks left: [todo]"
+ # status: "&a [phase-name] : [percent-done]"
+ status: "&a Phase blocks &b [done] &d / &b [total]"
+ # RED, WHITE, PINK, BLUE, GREEN, YELLOW, or PURPLE
+ color: RED
+ # SOLID, SEGMENTED_6, SEGMENTED_10, SEGMENTED_12, SEGMENTED_20
+ style: SOLID
+ not-active: "&c Boss Bar is not active for this island"
commands:
admin:
setcount:
@@ -47,6 +61,10 @@ aoneblock:
name-syntax: "&a [name]"
description-syntax: "&b [number] blocks"
island:
+ bossbar:
+ description: "toggles phase boss bar"
+ status_on: "&b Bossbar turned &a on"
+ status_off: "&b Bossbar turned &c off"
setcount:
parameters: ""
description: "set block count to previously completed value"
diff --git a/src/main/resources/locales/es.yml b/src/main/resources/locales/es.yml
index 70705b4c..45f9ce6a 100644
--- a/src/main/resources/locales/es.yml
+++ b/src/main/resources/locales/es.yml
@@ -1,73 +1,102 @@
----
+protection:
+ flags:
+ START_SAFETY:
+ name: Seguridad inicial
+ description: |
+ &b Previene nuevos jugadores
+ &b de moverse por 1 minuto
+ &b Entonces no se caen.
+ hint: '&c ¡Movimiento bloqueado por seguridad por [number] más segundos!'
+ free-to-move: '&c Eres libre de moverte. '
+ ONEBLOCK_BOSSBAR:
+ name: Bar del jefe
+ description: |
+ &b Muestra una barra de estado
+ &b para cada fase.
aoneblock:
+ bossbar:
+ title: Bloques restantes
+ status: '&a Bloques de fase &b [done] &d / &b [total]'
+ color: RED
+ style: SEGMENTED_20
+ not-active: '&c Boss Bar no está activo para esta isla'
commands:
admin:
setcount:
- parameters: " [lifetime]"
+ parameters: [lifetime]
description: Establece el número de bloques minados al jugador
- set: "&aEl número de bloques minados de [name] se ha establecido en [number]"
- set-lifetime: "&aEl numero de bloques totales de [name] se ha establecido
- en [number]"
+ set: '&aEl número de bloques minados de [name] se ha establecido en [number]'
+ set-lifetime: '&aEl numero de bloques totales de [name] se ha establecido en [number]'
setchest:
- parameters: " "
- description: Coloca el cofre que estas mirando en una fase con la rareza especificada
- chest-is-empty: "&cEse cofre está vacío, así que no se puede agregar"
- unknown-phase: "&cFase desconocida. Presione TAB para verlas"
- unknown-rarity: "&cRareza desconocida. Use COMMON, UNCOMMON, RARE o EPIC"
- look-at-chest: "&cApunta hacia un cofre lleno para configurarlo"
- only-single-chest: "&cSolo se pueden configurar cofres individuales"
- success: "&aEl cofre ha sido agregado con éxito a la fase"
- failure: "&c¡No se pudo agregar el cofre a la fase! Revisa la consola para
- más detalles"
+ parameters:
+ description: >-
+ Coloca el cofre que estas mirando en una fase con la rareza
+ especificada
+ chest-is-empty: '&cEse cofre está vacío, así que no se puede agregar'
+ unknown-phase: '&cFase desconocida. Presione TAB para verlas'
+ unknown-rarity: '&cRareza desconocida. Use COMMON, UNCOMMON, RARE o EPIC'
+ look-at-chest: '&cApunta hacia un cofre lleno para configurarlo'
+ only-single-chest: '&cSolo se pueden configurar cofres individuales'
+ success: '&aEl cofre ha sido agregado con éxito a la fase'
+ failure: >-
+ &c¡No se pudo agregar el cofre a la fase! Revisa la consola para más
+ detalles
sanity:
- parameters: ""
- description: Muestra una comprobación de las probabilidades de la fase en
- la consola
- see-console: "&aRevisa la consola para ver el informe"
+ parameters:
+ description: >-
+ Muestra una comprobación de las probabilidades de la fase en la
+ consola
+ see-console: '&aRevisa la consola para ver el informe'
count:
description: Muestra el número de bloques minados y la fase correspondiente
- info: "&aTienes &b[number] bloques minados en la fase &a[name]"
+ info: '&aTienes &b[number] bloques minados en la fase &a[name]'
info:
- count: "&a Island está en el bloque &b [number]&a en la fase &b [name] &a. Recuento
- de vida &b [lifetime] &a."
+ count: >-
+ &a Island está en el bloque &b [number]&a en la fase &b [name] &a.
+ Recuento de vida &b [lifetime] &a.
phases:
description: Muestra una lista de todas las fases
- title: "&2Fases de OneBlock"
- name-syntax: "&a[name]"
- description-syntax: "&b[number] bloques"
+ title: '&2Fases de OneBlock'
+ name-syntax: '&a[name]'
+ description-syntax: '&b[number] bloques'
island:
+ bossbar:
+ description: Barra de jefe de fase de alojamiento
+ status_on: '&b Bossbar &a encendió'
+ status_off: '&b Bossbar &a apagó'
setcount:
- parameters: ""
+ parameters:
description: Establece la cantidad de bloques a un valor previamente completado
- set: "&aCantidad establecida en [number]."
- too-high: "&c¡Lo máximo que puedes establecer es [number]!"
+ set: '&aCantidad establecida en [number].'
+ too-high: '&c¡Lo máximo que puedes establecer es [number]!'
respawn-block:
description: reaparece el bloque mágico en situaciones en las que desaparece
- block-exist: "&a Block existe, no requirió reaparición. Te lo marqué."
- block-respawned: "& un bloque reapareció."
+ block-exist: '&a Block existe, no requirió reaparición. Te lo marqué.'
+ block-respawned: '& un bloque reapareció.'
phase:
- insufficient-level: "&c¡Tu nivel de isla es demasiado bajo para seguir! Este debe
- ser de [number]."
- insufficient-funds: "&c¡Tus fondos son insuficientes! Debes tener [number]."
- insufficient-bank-balance: "&c¡El dinero del banco en la isla es demasiado bajo
- para seguir! Debes tener [number]."
- insufficient-permission: "&c ¡No puede continuar hasta que obtenga el permiso
- de [name]!"
- cooldown: "&c ¡La siguiente etapa estará disponible en [number] segundos!"
+ insufficient-level: >-
+ &c¡Tu nivel de isla es demasiado bajo para seguir! Este debe ser de
+ [number].
+ insufficient-funds: '&c¡Tus fondos son insuficientes! Debes tener [number].'
+ insufficient-bank-balance: >-
+ &c¡El dinero del banco en la isla es demasiado bajo para seguir! Debes
+ tener [number].
+ insufficient-permission: '&c ¡No puede continuar hasta que obtenga el permiso de [name]!'
+ cooldown: '&c ¡La siguiente etapa estará disponible en [number] segundos!'
placeholders:
infinite: Infinito
gui:
titles:
- phases: "&0&l Fases de OneBlock"
+ phases: '&0&l Fases de OneBlock'
buttons:
previous:
- name: "&f&l Pagina Anterior"
- description: "&7 Ir a la pagina [number]"
+ name: '&f&l Pagina Anterior'
+ description: '&7 Ir a la pagina [number]'
next:
- name: "&f&l Siguiente pagina"
- description: "&7 Ir a la pagina [number]"
+ name: '&f&l Siguiente pagina'
+ description: '&7 Ir a la pagina [number]'
phase:
- name: "&f&l [phase]"
+ name: '&f&l [phase]'
description: |-
[starting-block]
[biome]
@@ -75,16 +104,19 @@ aoneblock:
[economy]
[level]
[permission]
- starting-block: "&7 Comienza tras romper &e [number] bloques."
- biome: "&7 Bioma: &e [biome]"
- bank: "&7 Requiere &e $[number] &7 en la cuenta del banco."
- economy: "&7 Requiere &e $[number] &7 en la cuenta del jugador."
- level: "&7 Requiere &e [number] &7 nivel de isla."
- permission: "&7 Requiere permiso `&e[permission]&7`."
+ starting-block: '&7 Comienza tras romper &e [number] bloques.'
+ biome: '&7 Bioma: &e [biome]'
+ bank: '&7 Requiere &e $[number] &7 en la cuenta del banco.'
+ economy: '&7 Requiere &e $[number] &7 en la cuenta del jugador.'
+ level: '&7 Requiere &e [number] &7 nivel de isla.'
+ permission: '&7 Requiere permiso `&e[permission]&7`.'
+ blocks-prefix: '&7 Bloques en fase -'
+ blocks: '&e [name], '
+ wrap-at: '50'
tips:
- click-to-previous: "&e Click &7 para ver pagina anterior."
- click-to-next: "&e Click &7 para ver pagina siguiente."
- click-to-change: "&e Click &7 para cambiar."
+ click-to-previous: '&e Click &7 para ver pagina anterior.'
+ click-to-next: '&e Click &7 para ver pagina siguiente.'
+ click-to-change: '&e Click &7 para cambiar.'
island:
starting-hologram: |-
&aBienvenido a AOneBlock
diff --git a/src/main/resources/locales/fr.yml b/src/main/resources/locales/fr.yml
index f7e6cf2d..7492bcde 100644
--- a/src/main/resources/locales/fr.yml
+++ b/src/main/resources/locales/fr.yml
@@ -1,74 +1,100 @@
----
+protection:
+ flags:
+ START_SAFETY:
+ name: Sécurité de démarrage
+ description: |
+ &b Empêche les nouveaux joueurs
+ &b de déménager pendant 1 minute
+ &b Alors ils ne tombent pas.
+ hint: '&c Mouvement bloqué pour la sécurité pendant [number] plus de secondes!'
+ free-to-move: '&a Vous êtes libre de bouger. '
+ ONEBLOCK_BOSSBAR:
+ name: Barre de boss
+ description: |
+ &b Affiche une barre d'état
+ pour chaque phase.
aoneblock:
+ bossbar:
+ title: Blocs restants
+ status: '&a Blocs de phase &b [done] &d / &b [total]'
+ color: RED
+ style: SEGMENTED_20
+ not-active: '&c Boss Bar n''est pas actif pour cette île'
commands:
admin:
setcount:
- parameters: " [DuréeDeVie]"
+ parameters: [DuréeDeVie]
description: Définir le nombre de blocks du joueur
- set: "&a Le compte de [name] est défini sur [number]."
- set-lifetime: "&a La durée de vie de [name] est de [number]"
+ set: '&a Le compte de [name] est défini sur [number].'
+ set-lifetime: '&a La durée de vie de [name] est de [number]'
setchest:
- parameters: " "
+ parameters:
description: mettre le coffre regardé dans une phase avec la rareté spécifiée
- chest-is-empty: "&c Ce coffre est vide donc il ne peut pas être ajouté"
- unknown-phase: "&c Phase inconnue. Utilisez tab-complete pour les voir"
- unknown-rarity: "&c Rareté inconnue. Utilisez COMMON, UNCOMMON, RARE ou EPIC"
- look-at-chest: "&c Regardez un coffre rempli pour le placer"
- only-single-chest: "&c Seuls les coffres simples peuvent être définis"
- success: "&a Le coffre a été ajouté avec succès à la phase"
- failure: "&c Le coffre n'a pas pu être ajouté à la phase! Voir la console
- pour les erreurs"
+ chest-is-empty: '&c Ce coffre est vide donc il ne peut pas être ajouté'
+ unknown-phase: '&c Phase inconnue. Utilisez tab-complete pour les voir'
+ unknown-rarity: '&c Rareté inconnue. Utilisez COMMON, UNCOMMON, RARE ou EPIC'
+ look-at-chest: '&c Regardez un coffre rempli pour le placer'
+ only-single-chest: '&c Seuls les coffres simples peuvent être définis'
+ success: '&a Le coffre a été ajouté avec succès à la phase'
+ failure: >-
+ &c Le coffre n'a pas pu être ajouté à la phase! Voir la console pour
+ les erreurs
sanity:
- parameters: ""
- description: afficher un contrôle d'intégrité des probabilités de phase dans
- la console
- see-console: "&a Voir la console pour le rapport"
+ parameters:
+ description: >-
+ afficher un contrôle d'intégrité des probabilités de phase dans la
+ console
+ see-console: '&a Voir la console pour le rapport'
count:
description: afficher le nombre de blocs et la phase
- info: "&a Vous êtes sur le bloc &b [number] dans la phase &a [name]"
+ info: '&a Vous êtes sur le bloc &b [number] dans la phase &a [name]'
info:
- count: "&a L'île est sur le bloc &b [number]&a dans la phase &b [name] &a. Nombre
- de durée de vie &b [lifetime] &a."
+ count: >-
+ &a L'île est sur le bloc &b [number]&a dans la phase &b [name] &a.
+ Nombre de durée de vie &b [lifetime] &a.
phases:
description: afficher une liste de toutes les phases
- title: "&2 Phases OneBlock"
- name-syntax: "&a [name]"
- description-syntax: "&b [number] blocs"
+ title: '&2 Phases OneBlock'
+ name-syntax: '&a [name]'
+ description-syntax: '&b [number] blocs'
island:
+ bossbar:
+ description: bascule la barre de boss de phase
+ status_on: '&b Bossbar a &a activé'
+ status_off: '&b Bossbar &a désactivé'
setcount:
- parameters: ""
+ parameters:
description: définir le nombre de blocs à la valeur précédemment terminée
- set: "&a Nombre défini sur [number]."
- too-high: "&c Le maximum que vous pouvez définir est [number] !"
+ set: '&a Nombre défini sur [number].'
+ too-high: "&c Le maximum que vous pouvez définir est [number]\_!"
respawn-block:
description: réapparaît le bloc magique dans les situations où il disparaît
- block-exist: "&un bloc existe, n'a pas nécessité de réapparition. Je l'ai noté
- pour toi."
- block-respawned: "&un bloc réapparu."
+ block-exist: >-
+ &un bloc existe, n'a pas nécessité de réapparition. Je l'ai noté pour
+ toi.
+ block-respawned: '&un bloc réapparu.'
phase:
- insufficient-level: Ton niveau d'île est trop bas ! Il doit être de [number] au
- minimum.
- insufficient-funds: Tu n'as pas les fonds nécessaire ! Tu dois au moins avoir
+ insufficient-level: Ton niveau d'île est trop bas ! Il doit être de [number] au minimum.
+ insufficient-funds: Tu n'as pas les fonds nécessaire ! Tu dois au moins avoir [number].
+ insufficient-bank-balance: >-
+ Ta banque d'île n'a pas les fonds nécessaire ! Vous devez au moins avoir
[number].
- insufficient-bank-balance: Ta banque d'île n'a pas les fonds nécessaire ! Vous
- devez au moins avoir [number].
- insufficient-permission: "&c Vous ne pouvez pas continuer jusqu'à ce que vous
- obteniez l'autorisation de [name] !"
- cooldown: "&c La prochaine étape sera disponible dans [number] secondes!"
+ insufficient-permission: "&c Vous ne pouvez pas continuer jusqu'à ce que vous obteniez l'autorisation de [name]\_!"
+ cooldown: '&c La prochaine étape sera disponible dans [number] secondes!'
placeholders:
infinite: Infini
gui:
titles:
- phases: "&0&l Phases OneBlock"
+ phases: '&0&l Phases OneBlock'
buttons:
previous:
- name: "&f&l Page Précédente"
- description: "&7 Aller à la page [number]"
+ name: '&f&l Page Précédente'
+ description: '&7 Aller à la page [number]'
next:
- name: "&f&l Page Suivante"
- description: "&7 Aller à la page [number]"
+ name: '&f&l Page Suivante'
+ description: '&7 Aller à la page [number]'
phase:
- name: "&f&l [phase]"
+ name: '& l [phase]'
description: |-
[starting-block]
[biome]
@@ -76,16 +102,19 @@ aoneblock:
[economy]
[level]
[permission]
- starting-block: "&7 Commence après avoir détruit &e [number] blocs."
- biome: "&7 Biome : &e [biome]"
- bank: "&7 Requiert &e $[number] &7 dans ta banque."
- economy: "&7 Requiert &e $[number] &7 dans ton solde."
- level: "&7 Requiert &e [number] &7 niveaux d'île."
- permission: "&7 Requiert la permission : `&e[permission]&7` ."
+ starting-block: '&7 Commence après avoir détruit &e [number] blocs.'
+ biome: "&7 Biome\_: &e [biome]"
+ bank: '&7 Requiert &e $[number] &7 dans ta banque.'
+ economy: '&7 Requiert &e $[number] &7 dans ton solde.'
+ level: '&7 Requiert &e [number] &7 niveaux d''île.'
+ permission: '&7 Requiert la permission : `&e[permission]&7` .'
+ blocks-prefix: '&7 Blocs en phase -'
+ blocks: '&e [name],'
+ wrap-at: '50'
tips:
- click-to-previous: "&e Click &7 pour voir la page précédente."
- click-to-next: "&e Click &7 pour voir la page suivante."
- click-to-change: "&e Click &7 pour changer."
+ click-to-previous: '&e Click &7 pour voir la page précédente.'
+ click-to-next: '&e Click &7 pour voir la page suivante.'
+ click-to-change: '&e Click &7 pour changer.'
island:
starting-hologram: |-
&aBienvenue sur AOneBlock
diff --git a/src/main/resources/locales/hr.yml b/src/main/resources/locales/hr.yml
index 49b02a87..8a7141f9 100644
--- a/src/main/resources/locales/hr.yml
+++ b/src/main/resources/locales/hr.yml
@@ -1,70 +1,96 @@
----
+protection:
+ flags:
+ START_SAFETY:
+ name: Pokretanje sigurnosti
+ description: |
+ &b Sprječava nove igrače
+ &b od kretanja u 1 minutu
+ &b Tako da ne padaju.
+ hint: '&c Kretanje je blokirano zbog sigurnosti za [number] više sekundi!'
+ free-to-move: '&a Slobodno se krećete. '
+ ONEBLOCK_BOSSBAR:
+ name: Boss bar
+ description: |
+ &b Prikazuje traku statusa
+ &b za svaku fazu.
aoneblock:
+ bossbar:
+ title: Preostali blokovi
+ status: '&a Fazni blokovi &b [done] &d / &b [total]'
+ color: RED
+ style: SEGMENTED_20
+ not-active: '&c Boss bar nije aktivan za ovaj otok'
commands:
admin:
setcount:
- parameters: " "
+ parameters:
description: postavljanje broja blokova igrača
- set: "&a broj [name] postavljen je na [number]"
- set-lifetime: "&broj životnog vijeka [name] postavljen na [number]"
+ set: '&a broj [name] postavljen je na [number]'
+ set-lifetime: '&broj životnog vijeka [name] postavljen na [number]'
setchest:
- parameters: " "
+ parameters:
description: stavite pregledani sanduk u fazu s specificiranom rijetkošću
- chest-is-empty: "&c Taj je škrinja prazna pa se ne može dodati"
- unknown-phase: "&c Nepoznata faza. Da biste ih vidjeli, upotrijebite karticu"
- unknown-rarity: "&c Nepoznata rijetkost. Koristite COMMON, UNCOMMON, RARE
- ili EPIC"
- look-at-chest: "&c Pogledajte napunjen škrinju da ga postavite"
- only-single-chest: "&c Mogu se postaviti samo pojedinačne škrinje"
- success: "&a Komoda uspješno dodana u fazu"
- failure: "&c Grudište se nije moglo dodati u fazu! Pogledajte konzolu za pogreške"
+ chest-is-empty: '&c Taj je škrinja prazna pa se ne može dodati'
+ unknown-phase: '&c Nepoznata faza. Da biste ih vidjeli, upotrijebite karticu'
+ unknown-rarity: '&c Nepoznata rijetkost. Koristite COMMON, UNCOMMON, RARE ili EPIC'
+ look-at-chest: '&c Pogledajte napunjen škrinju da ga postavite'
+ only-single-chest: '&c Mogu se postaviti samo pojedinačne škrinje'
+ success: '&a Komoda uspješno dodana u fazu'
+ failure: >-
+ &c Grudište se nije moglo dodati u fazu! Pogledajte konzolu za
+ pogreške
sanity:
- parameters: ""
+ parameters:
description: prikazati provjeru ispravnosti faznih vjerojatnosti u konzoli
- see-console: "&a Pogledajte konzolu za izvješće"
+ see-console: '&a Pogledajte konzolu za izvješće'
count:
description: prikazuju broj i fazu bloka
- info: "&a Nalazite se na bloku &b [number] u fazi &a [name]"
+ info: '&a Nalazite se na bloku &b [number] u fazi &a [name]'
info:
- count: "&a Otok je u bloku &b [number]&a u &b [name] &a fazi. Životni vijek
- &b [lifetime] &a."
+ count: >-
+ &a Otok je u bloku &b [number]&a u &b [name] &a fazi. Životni vijek &b
+ [lifetime] &a.
phases:
description: prikažite popis svih faza
- title: "&2 OneBlock Faze"
- name-syntax: "&a [name]"
- description-syntax: "&b [number] blokova"
+ title: '&2 OneBlock Faze'
+ name-syntax: '&a [name]'
+ description-syntax: '&b [number] blokova'
island:
+ bossbar:
+ description: prebacuje fazni boss bar
+ status_on: '&b Bossbar se &a uključio'
+ status_off: '&b Bossbar se &a isključio'
setcount:
- parameters: ""
+ parameters:
description: postaviti broj blokova na prethodno dovršenu vrijednost
- set: "&a Brojanje postavljeno na [number]."
- too-high: "&c Maksimalno što možete postaviti je [number]!"
+ set: '&a Brojanje postavljeno na [number].'
+ too-high: '&c Maksimalno što možete postaviti je [number]!'
respawn-block:
description: ponovno rađa magični blok u situacijama kada nestane
- block-exist: "&a blok postoji, nije zahtijevao ponovno stvaranje. Označila sam
- za tebe."
- block-respawned: "&a blok se ponovno pojavio."
+ block-exist: >-
+ &a blok postoji, nije zahtijevao ponovno stvaranje. Označila sam za
+ tebe.
+ block-respawned: '&a blok se ponovno pojavio.'
phase:
- insufficient-level: "&c Vaša razina otoka je preniska za nastavak! Mora biti [number]."
- insufficient-funds: "&c Vaša su sredstva premala za nastavak! Moraju biti [number]."
- insufficient-bank-balance: "&c Stanje otočne banke je premalo za nastavak! Mora
- biti [number]."
- insufficient-permission: "&c Ne možete nastaviti dok ne dobijete dopuštenje [name]!"
- cooldown: "&c Sljedeća faza bit će dostupna za [number] sekundi!"
+ insufficient-level: '&c Vaša razina otoka je preniska za nastavak! Mora biti [number].'
+ insufficient-funds: '&c Vaša su sredstva premala za nastavak! Moraju biti [number].'
+ insufficient-bank-balance: '&c Stanje otočne banke je premalo za nastavak! Mora biti [number].'
+ insufficient-permission: '&c Ne možete nastaviti dok ne dobijete dopuštenje [name]!'
+ cooldown: '&c Sljedeća faza bit će dostupna za [number] sekundi!'
placeholders:
infinite: Beskonačno
gui:
titles:
- phases: "&0&l OneBlock faze"
+ phases: '&0&l OneBlock faze'
buttons:
previous:
- name: "&f&l Prethodna stranica"
- description: "&7 Prijeđi na stranicu [number]."
+ name: '&f&l Prethodna stranica'
+ description: '&7 Prijeđi na stranicu [number].'
next:
- name: "&f&l Sljedeća stranica"
- description: "&7 Prijeđi na stranicu [number]."
+ name: '&f&l Sljedeća stranica'
+ description: '&7 Prijeđi na stranicu [number].'
phase:
- name: "&f&l [phase]"
+ name: '&f&l [phase]'
description: |-
[starting-block]
[biome]
@@ -72,16 +98,19 @@ aoneblock:
[economy]
[level]
[permission]
- starting-block: "&7 Počinje nakon razbijanja &e [number] blokova."
- biome: "&7 Biome: &e [biome]"
- bank: "&7 Zahtijeva &e $[number] &7 na bankovnom računu."
- economy: "&7 Zahtijeva &e $[number] &7 na računu igrača."
- level: "&7 Zahtijeva &e [number] &7 razinu otoka."
- permission: "&7 Zahtijeva dozvolu `&e[permission]&7`."
+ starting-block: '&7 Počinje nakon razbijanja &e [number] blokova.'
+ biome: '&7 Biome: &e [biome]'
+ bank: '&7 Zahtijeva &e $[number] &7 na bankovnom računu.'
+ economy: '&7 Zahtijeva &e $[number] &7 na računu igrača.'
+ level: '&7 Zahtijeva &e [number] &7 razinu otoka.'
+ permission: '&7 Zahtijeva dozvolu `&e[permission]&7`.'
+ blocks-prefix: '&7 Blokovi u fazi -'
+ blocks: '&e [name], '
+ wrap-at: '50'
tips:
- click-to-previous: "&e Kliknite &7 za pregled prethodne stranice."
- click-to-next: "&e Kliknite &7 za pregled sljedeće stranice."
- click-to-change: "&e Kliknite &7 za promjenu."
+ click-to-previous: '&e Kliknite &7 za pregled prethodne stranice.'
+ click-to-next: '&e Kliknite &7 za pregled sljedeće stranice.'
+ click-to-change: '&e Kliknite &7 za promjenu.'
island:
starting-hologram: |-
&aDobro došli u AOneBlock
diff --git a/src/main/resources/locales/hu.yml b/src/main/resources/locales/hu.yml
index 6a692b8b..f49fe4b7 100644
--- a/src/main/resources/locales/hu.yml
+++ b/src/main/resources/locales/hu.yml
@@ -1,75 +1,100 @@
----
+protection:
+ flags:
+ START_SAFETY:
+ name: Induló biztonság
+ description: |
+ &b Megakadályozza az új játékosokat
+ &b 1 percig mozogva
+ &b Tehát nem esnek le.
+ hint: >-
+ &c A mozgás blokkolva a biztonság érdekében, a [number] több
+ másodpercre!
+ free-to-move: '&a Szabadon mozoghatsz. '
+ ONEBLOCK_BOSSBAR:
+ name: Főnök
+ description: |
+ &b Mutat egy állapotsorot
+ &b minden fázisra.
aoneblock:
+ bossbar:
+ title: Blokkok maradtak
+ status: '&a Fázisblokkok &b [done] &d / &b [total]'
+ color: RED
+ style: SEGMENTED_20
+ not-active: '&c A Boss Bar nem aktív ezen a szigeten'
commands:
admin:
setcount:
- parameters: " "
+ parameters:
description: állítsa be a játékos blokkszámát
- set: "&a [name] számának beállítása erre: [number]"
- set-lifetime: "&a [name] élettartama a következőre van állítva: [number]"
+ set: '&a [name] számának beállítása erre: [number]'
+ set-lifetime: '&a [name] élettartama a következőre van állítva: [number]'
setchest:
- parameters: " "
+ parameters:
description: helyezze a nézett mellkasát egy szakaszba a megadott ritkasággal
- chest-is-empty: "&c A mellkas üres, ezért nem adható hozzá"
- unknown-phase: "&c Ismeretlen fázis. A Tab-Complete használatával megtekintheti
- őket"
- unknown-rarity: "&c Ismeretlen ritkaság. Használjon COMMON, UNCOMMON, RARE
- vagy EPIC"
- look-at-chest: "&c Nézzen meg egy töltött mellkasat, hogy beállítsa"
- only-single-chest: "&c Csak egyetlen ládát lehet beállítani"
+ chest-is-empty: '&c A mellkas üres, ezért nem adható hozzá'
+ unknown-phase: '&c Ismeretlen fázis. A Tab-Complete használatával megtekintheti őket'
+ unknown-rarity: '&c Ismeretlen ritkaság. Használjon COMMON, UNCOMMON, RARE vagy EPIC'
+ look-at-chest: '&c Nézzen meg egy töltött mellkasat, hogy beállítsa'
+ only-single-chest: '&c Csak egyetlen ládát lehet beállítani'
success: és egy mellkas sikeresen hozzáadva a fázishoz
- failure: "&c A mellkas nem adható hozzá a fázishoz! A hibákat lásd a konzolon"
+ failure: '&c A mellkas nem adható hozzá a fázishoz! A hibákat lásd a konzolon'
sanity:
- parameters: ""
- description: jelenítse meg a fázis valószínűségeinek józanság-ellenőrzését
- a konzolban
- see-console: "&a Lásd a jelentés konzolt"
+ parameters:
+ description: >-
+ jelenítse meg a fázis valószínűségeinek józanság-ellenőrzését a
+ konzolban
+ see-console: '&a Lásd a jelentés konzolt'
count:
description: mutassa meg a blokkok számát és a fázist
- info: "&a Ön a &b [number] blokkban van a &a [name] fázisban"
+ info: '&a Ön a &b [number] blokkban van a &a [name] fázisban'
info:
- count: Az &a sziget a &b [number]&a blokkon található, a &b [name] &a fázisban.
+ count: >-
+ Az &a sziget a &b [number]&a blokkon található, a &b [name] &a fázisban.
Élettartam száma &b [lifetime] &a.
phases:
description: az összes fázis felsorolása
- title: "&2 OneBlock Fázis"
- name-syntax: "&a [name]"
- description-syntax: "&b [number] blokkolja"
+ title: '&2 OneBlock Fázis'
+ name-syntax: '&a [name]'
+ description-syntax: '&b [number] blokkolja'
island:
+ bossbar:
+ description: váltók fázisú főnök sáv
+ status_on: '&b Bossbar &a bekapcsolt'
+ status_off: '&b Bossbar &c kikapcsolt'
setcount:
- parameters: ""
+ parameters:
description: állítsa be a blokkszámot a korábban kitöltött értékre
- set: "&a A számláló értéke [szám]."
- too-high: "&c A beállítható maximum [number]!"
+ set: '&a A számláló értéke [szám].'
+ too-high: '&c A beállítható maximum [number]!'
respawn-block:
description: varázsblokkot hoz újra olyan helyzetekben, amikor eltűnik
- block-exist: "&a Blokk létezik, nem igényelt újbóli megjelenést. megjelöltem
- neked."
- block-respawned: "&a blokk újjáéledt."
+ block-exist: '&a Blokk létezik, nem igényelt újbóli megjelenést. megjelöltem neked.'
+ block-respawned: '&a blokk újjáéledt.'
phase:
- insufficient-level: "&c A sziget szintje túl alacsony a folytatáshoz! Ennek a
- következőnek kell lennie: [number]."
- insufficient-funds: "&c A kerete túl kevés a folytatáshoz! Ezeknek [number]-nak
- kell lenniük."
- insufficient-bank-balance: "&c A sziget banki egyenlege túl alacsony a folytatáshoz!
- Ennek a következőnek kell lennie: [number]."
- insufficient-permission: "&c Nem folytathatja tovább, amíg meg nem szerzi a [name]
- engedélyt!"
- cooldown: "&c A következő szakasz [number] másodpercen belül elérhető lesz!"
+ insufficient-level: >-
+ &c A sziget szintje túl alacsony a folytatáshoz! Ennek a következőnek kell
+ lennie: [number].
+ insufficient-funds: '&c A kerete túl kevés a folytatáshoz! Ezeknek [number]-nak kell lenniük.'
+ insufficient-bank-balance: >-
+ &c A sziget banki egyenlege túl alacsony a folytatáshoz! Ennek a
+ következőnek kell lennie: [number].
+ insufficient-permission: '&c Nem folytathatja tovább, amíg meg nem szerzi a [name] engedélyt!'
+ cooldown: '&c A következő szakasz [number] másodpercen belül elérhető lesz!'
placeholders:
infinite: Végtelen
gui:
titles:
- phases: "&0&l OneBlock fázisok"
+ phases: '&0&l OneBlock fázisok'
buttons:
previous:
- name: "&f&l Előző oldal"
- description: "&7 Váltás a [number] oldalra"
+ name: '&f&l Előző oldal'
+ description: '&7 Váltás a [number] oldalra'
next:
- name: "&f&l Következő oldal"
- description: "&7 Váltás a [number] oldalra"
+ name: '&f&l Következő oldal'
+ description: '&7 Váltás a [number] oldalra'
phase:
- name: "&f&l [phase]"
+ name: '&f&l [phase]'
description: |-
[starting-block]
[biome]
@@ -77,16 +102,19 @@ aoneblock:
[economy]
[level]
[permission]
- starting-block: "&7 Az &e [number] blokk feltörése után indul."
- biome: "&7 életrajz: &e [biome]"
- bank: "&7 Szükséges &e $[number] &7 bankszámlára."
- economy: "&7 &e $[number] &7 játékos fiókot igényel."
- level: "&7 &e [number] &7 szigetszint szükséges."
- permission: "&7 `&e[permission]&7` engedély szükséges."
+ starting-block: '&7 Az &e [number] blokk feltörése után indul.'
+ biome: '&7 életrajz: &e [biome]'
+ bank: '&7 Szükséges &e $[number] &7 bankszámlára.'
+ economy: '&7 &e $[number] &7 játékos fiókot igényel.'
+ level: '&7 &e [number] &7 szigetszint szükséges.'
+ permission: '&7 `&e[permission]&7` engedély szükséges.'
+ blocks-prefix: '&7 Blokkok fázisban -'
+ blocks: '&e [name], '
+ wrap-at: '50'
tips:
- click-to-previous: "&e Kattintson a &7 gombra az előző oldal megtekintéséhez."
- click-to-next: "&e Kattintson a &7 gombra a következő oldal megtekintéséhez."
- click-to-change: "&e Kattintson a &7 gombra a módosításhoz."
+ click-to-previous: '&e Kattintson a &7 gombra az előző oldal megtekintéséhez.'
+ click-to-next: '&e Kattintson a &7 gombra a következő oldal megtekintéséhez.'
+ click-to-change: '&e Kattintson a &7 gombra a módosításhoz.'
island:
starting-hologram: |-
&aÜdvözlünk az AOneBlockban
diff --git a/src/main/resources/locales/id.yml b/src/main/resources/locales/id.yml
index aad332e2..b680c6a3 100644
--- a/src/main/resources/locales/id.yml
+++ b/src/main/resources/locales/id.yml
@@ -1,31 +1,116 @@
----
+protection:
+ flags:
+ START_SAFETY:
+ name: Mulai keamanan
+ description: |
+ &b Mencegah pemain baru
+ &b dari bergerak selama 1 menit
+ &b Jadi mereka tidak jatuh.
+ hint: '&c Gerakan diblokir untuk keamanan selama [number] lebih banyak detik!'
+ free-to-move: '&a Anda bebas untuk pindah. '
+ ONEBLOCK_BOSSBAR:
+ name: Bos Bar
+ description: |
+ &b Menunjukkan bilah status
+ &b untuk setiap fase.
aoneblock:
+ bossbar:
+ title: Blok tersisa
+ status: Blok fase &b [done] &d / &b [total]
+ color: RED
+ style: SEGMENTED_20
+ not-active: '&c Bos Bar tidak aktif untuk pulau ini'
commands:
admin:
setcount:
- parameters: " "
+ parameters:
description: atur jumlah blok pemain
- set: "&a hitungan [name] diatur ke [number]"
+ set: '&a hitungan [name] diatur ke [number]'
+ set-lifetime: '&a Hitungan seumur hidup [name] diatur ke [number]'
setchest:
- parameters: " "
+ parameters:
description: letakkan dada yang tampak dalam fase dengan kelangkaan yang ditentukan
- chest-is-empty: "&c Peti itu kosong sehingga tidak bisa ditambahkan"
- unknown-phase: "&c Fase tidak dikenal. Gunakan tab-complete untuk melihatnya"
- unknown-rarity: "&c Kelangkaan tidak diketahui. Gunakan COMMON, UNCOMMON,
- RARE atau EPIC"
- look-at-chest: "&c Lihat peti berisi untuk mengaturnya"
- only-single-chest: "&c Hanya peti tunggal yang dapat ditetapkan"
- success: "&a Dada berhasil ditambahkan ke fase"
- failure: "&c Dada tidak dapat ditambahkan ke fase! Lihat konsol untuk kesalahan"
+ chest-is-empty: '&c Peti itu kosong sehingga tidak bisa ditambahkan'
+ unknown-phase: '&c Fase tidak dikenal. Gunakan tab-complete untuk melihatnya'
+ unknown-rarity: >-
+ &c Kelangkaan tidak diketahui. Gunakan COMMON, UNCOMMON, RARE atau
+ EPIC
+ look-at-chest: '&c Lihat peti berisi untuk mengaturnya'
+ only-single-chest: '&c Hanya peti tunggal yang dapat ditetapkan'
+ success: '&a Dada berhasil ditambahkan ke fase'
+ failure: '&c Dada tidak dapat ditambahkan ke fase! Lihat konsol untuk kesalahan'
sanity:
- parameters: ""
+ parameters:
description: menampilkan pemeriksaan kewarasan dari probabilitas fase di konsol
- see-console: "&a Lihat konsol untuk laporannya"
+ see-console: '&a Lihat konsol untuk laporannya'
count:
description: perlihatkan jumlah blok dan fase
- info: "&a Anda berada di blok &b [number] dalam fase &a [name]"
+ info: '&a Anda berada di blok &b [number] dalam fase &a [name]'
+ info:
+ count: '&a Pulau ada di blok &b [number] &a dalam fase &b [name]. '
phases:
description: perlihatkan daftar semua fase
- title: "&2 Fase OneBlock"
- name-syntax: "&a [name]"
- description-syntax: "&b [number] blok"
+ title: '&2 Fase OneBlock'
+ name-syntax: '&a [name]'
+ description-syntax: '&b [number] blok'
+ island:
+ bossbar:
+ description: Mengalogkan Bar Bos Fase
+ status_on: '&b Bos bar &a dihidupkan'
+ status_off: '&b Bos bar &c dimatikan'
+ setcount:
+ parameters:
+ description: Setel jumlah blok ke nilai yang sebelumnya selesai
+ set: '&a Hitung diatur ke [number].'
+ too-high: '&c Maksimum yang dapat Anda atur adalah [number]!'
+ respawn-block:
+ description: respawns blok ajaib dalam situasi saat menghilang
+ block-exist: '&a Blok ada, tidak memerlukan respawning. '
+ block-respawned: '&a Blokir dihidupkan kembali.'
+ phase:
+ insufficient-level: '&c Tingkat pulau Anda terlalu rendah untuk [number]! '
+ insufficient-funds: '&c Dana Anda terlalu rendah untuk [number]! '
+ insufficient-bank-balance: '&c Saldo bank pulau terlalu rendah untuk [number]! '
+ insufficient-permission: >-
+ &c Anda tidak dapat melanjutkan lebih jauh sampai Anda mendapatkan izin
+ [name]!
+ cooldown: Fase berikutnya akan tersedia dalam detik [number]!
+ placeholders:
+ infinite: Tak terbatas
+ gui:
+ titles:
+ phases: OneBlock Phases
+ buttons:
+ previous:
+ name: '&f&l halaman sebelumnya'
+ description: '&7 Beralih ke halaman [number]'
+ next:
+ name: '&f&l halaman berikutnya'
+ description: '&7 Beralih ke halaman [number]'
+ phase:
+ name: '&f&l [phase]'
+ description: |-
+ [starting-block]
+ [biome]
+ [bank]
+ [economy]
+ [level]
+ [permission]
+ [blocks]
+ starting-block: '&7 Dimulai setelah melanggar &e blok [number].'
+ biome: '&7 Biome: &e [biome]'
+ bank: '&7 Membutuhkan &e $[number] &7 di rekening bank.'
+ economy: '&7 Membutuhkan &e $[number] &7 di akun pemain.'
+ level: '&7 Membutuhkan tingkat pulau &e [number].'
+ permission: '&7 Membutuhkan izin &e `[permission]`.'
+ blocks-prefix: '&7 Blok dalam fase -'
+ blocks: '&e [name], '
+ wrap-at: '50'
+ tips:
+ click-to-previous: '&e Klik &7 untuk melihat halaman sebelumnya.'
+ click-to-next: '&e Klik &7 untuk melihat halaman berikutnya.'
+ click-to-change: '&e Klik &7 untuk berubah.'
+ island:
+ starting-hologram: |-
+ &a Selamat datang di AONEBLOCK
+ &e Hancurkan blok ini untuk memulai
diff --git a/src/main/resources/locales/it.yml b/src/main/resources/locales/it.yml
index 53d68cbe..17269d8d 100644
--- a/src/main/resources/locales/it.yml
+++ b/src/main/resources/locales/it.yml
@@ -1,32 +1,116 @@
----
+protection:
+ flags:
+ START_SAFETY:
+ name: Avvio della sicurezza
+ description: |
+ &b Impedisce nuovi giocatori
+ &b dal muoversi per 1 minuto
+ &b Quindi non cadono.
+ hint: '&c Movimento bloccato per sicurezza per [number] più secondi!'
+ free-to-move: '&a Sei libero di muoverti. '
+ ONEBLOCK_BOSSBAR:
+ name: Boss Bar
+ description: |
+ &b Mostra una barra di stato
+ &b per ogni fase.
aoneblock:
+ bossbar:
+ title: Blocca i restanti
+ status: '&a Blocchi di fase &b [done] &d / &b [total]'
+ color: RED
+ style: SEGMENTED_20
+ not-active: '&c Boss Bar non è attivo per quest''isola'
commands:
admin:
setcount:
- parameters: " "
+ parameters:
description: imposta il conteggio dei blocchi del giocatore
- set: "&a il conteggio di [name] impostato su [number]"
+ set: '&a il conteggio di [name] impostato su [number]'
+ set-lifetime: '&a Il conteggio della vita di [name] è impostato su [number]'
setchest:
- parameters: " "
+ parameters:
description: mettere il torace osservato in una fase con la rarità specificata
- chest-is-empty: "&c Quella cassa è vuota quindi non può essere aggiunta"
- unknown-phase: "&c Fase sconosciuta. Usa tab-complete per vederli"
- unknown-rarity: "&c Rarità sconosciuta. Utilizzare COMMON, UNCOMMON, RARE
- o EPIC"
- look-at-chest: "&c Guarda una cassa piena per impostarla"
- only-single-chest: "&c Possono essere impostati solo singoli forzieri"
- success: "&a Una cassa aggiunta correttamente alla fase"
- failure: "&c Chest non può essere aggiunto alla fase! Vedi console per errori"
+ chest-is-empty: '&c Quella cassa è vuota quindi non può essere aggiunta'
+ unknown-phase: '&c Fase sconosciuta. Usa tab-complete per vederli'
+ unknown-rarity: '&c Rarità sconosciuta. Utilizzare COMMON, UNCOMMON, RARE o EPIC'
+ look-at-chest: '&c Guarda una cassa piena per impostarla'
+ only-single-chest: '&c Possono essere impostati solo singoli forzieri'
+ success: '&a Una cassa aggiunta correttamente alla fase'
+ failure: '&c Chest non può essere aggiunto alla fase! Vedi console per errori'
sanity:
- parameters: ""
- description: visualizzare un controllo di integrità delle probabilità di fase
- nella console
- see-console: "&a Vedi la console per il rapporto"
+ parameters:
+ description: >-
+ visualizzare un controllo di integrità delle probabilità di fase nella
+ console
+ see-console: '&a Vedi la console per il rapporto'
count:
description: mostra il conteggio dei blocchi e la fase
- info: "&a Sei sul blocco &b [number] nella fase &a [name]"
+ info: '&a Sei sul blocco &b [number] nella fase &a [name]'
+ info:
+ count: >-
+ &a L'isola è in blocco &b [number] &a nella fase &b [name] &a. Lifetime
+ count &b [lifetime] &a.
phases:
description: mostra un elenco di tutte le fasi
- title: "&2 Fasi OneBlock"
- name-syntax: "&a [name]"
- description-syntax: "&b [number] blocchi"
+ title: '&2 Fasi OneBlock'
+ name-syntax: '&a [name]'
+ description-syntax: '&b [number] blocchi'
+ island:
+ bossbar:
+ description: barra boss di fase di levetta
+ status_on: '&b Bossbar si è &a acceso'
+ status_off: '&b Bossbar si è &c spento'
+ setcount:
+ parameters:
+ description: Imposta il conteggio dei blocchi sul valore precedentemente completato
+ set: '&a Contare impostato su [number].'
+ too-high: '&c Il massimo che puoi impostare è [number]!'
+ respawn-block:
+ description: Respira il blocco magico in situazioni quando scompare
+ block-exist: '&a Il blocco esiste, non ha richiesto il rigenerazione. '
+ block-respawned: '&a Blocco rigenerato.'
+ phase:
+ insufficient-level: 'Il tuo livello dell''isola è troppo basso per procedere! '
+ insufficient-funds: '& c i tuoi fondi sono troppo bassi per procedere! Devono essere [number].'
+ insufficient-bank-balance: '&c The island bank balance is too low to proceed! It must be [number].'
+ insufficient-permission: '&c You can proceed no further until you obtain the [name] permission!'
+ cooldown: '&c Next phase will be available in [number] seconds!'
+ placeholders:
+ infinite: Infinito
+ gui:
+ titles:
+ phases: '&0&l fasi di un blocco'
+ buttons:
+ previous:
+ name: '& l pagina precedente'
+ description: '&7 Passa alla pagina [number]'
+ next:
+ name: '&f&l Pagina successiva'
+ description: '&7 Passa alla pagina [number]'
+ phase:
+ name: '&f&l [phase]'
+ description: |-
+ [starting-block]
+ [biome]
+ [bank]
+ [economy]
+ [level]
+ [permission]
+ [blocks]
+ starting-block: '&7 Inizia dopo aver rotto i blocchi &e [number].'
+ biome: '&7 Biome: &e [biome]'
+ bank: '&7 Richiede &e $ [number] &7 nel conto bancario.'
+ economy: '&7 Richiede &e $ [number] &7 nell''account giocatore.'
+ level: '&7 Richiede il livello &e [number] &7 dell''isola.'
+ permission: '&7 Richiede il permesso &e`[permission]`.'
+ blocks-prefix: '&7 Blocchi in fase -'
+ blocks: '&e [name], '
+ wrap-at: '50'
+ tips:
+ click-to-previous: '&e Fare clic &7 per visualizzare la pagina precedente.'
+ click-to-next: '&e Fare clic &7 per visualizzare la pagina successiva.'
+ click-to-change: '&e Fai clic &7 per cambiare.'
+ island:
+ starting-hologram: |-
+ &a Benvenuti in Aoneblock
+ &e Rompere questo blocco per iniziare
diff --git a/src/main/resources/locales/ja.yml b/src/main/resources/locales/ja.yml
index f8135c54..1d980f27 100644
--- a/src/main/resources/locales/ja.yml
+++ b/src/main/resources/locales/ja.yml
@@ -1,67 +1,92 @@
----
+protection:
+ flags:
+ START_SAFETY:
+ name: 安全性の開始
+ description: |
+ &b 新しいプレイヤーを防ぎます
+ &b 1分間移動することから
+ &b だから彼らは落ちません。
+ hint: '&c [number]のために安全のために動きがブロックされました。'
+ free-to-move: '&a あなたは自由に動くことができます。'
+ ONEBLOCK_BOSSBAR:
+ name: ボスバー
+ description: |
+ &b ステータスバーを表示します
+ &b 各フェーズについて。
aoneblock:
+ bossbar:
+ title: 残りのブロック
+ status: 位相ブロック &b [done] &d / &b [total]
+ color: RED
+ style: SEGMENTED_20
+ not-active: '&c この島ではボスバーがアクティブではありません'
commands:
admin:
setcount:
- parameters: "<名前> <数>"
+ parameters: <名前> <数>
description: プレイヤーのブロック数を設定する
- set: "[name]の数が[number]に設定されました"
- set-lifetime: "&a [name] の有効期間カウントが [number] に設定されました"
+ set: '[name]の数が[number]に設定されました'
+ set-lifetime: '&a [name] の有効期間カウントが [number] に設定されました'
setchest:
- parameters: "<フェーズ> <レア度>"
+ parameters: <フェーズ> <レア度>
description: 見つめられた胸部を、指定された希少性を持つフェーズに置く
- chest-is-empty: "&cそのチェストは空なので追加できません"
- unknown-phase: "&c不明なフェーズ。タブコンプリートを使用して表示します"
- unknown-rarity: "&c希少性は不明です。 COMMON、UNCOMMON、RARE、またはEPICを使用します"
- look-at-chest: "&c満たされた箱を見てそれを設定します"
- only-single-chest: "&c単一のチェストのみを設定できます"
- success: "&a胸部がフェーズに追加されました"
- failure: "&cチェストをフェーズに追加できませんでした!エラーについてはコンソールを参照してください"
+ chest-is-empty: &cそのチェストは空なので追加できません
+ unknown-phase: &c不明なフェーズ。タブコンプリートを使用して表示します
+ unknown-rarity: &c希少性は不明です。 COMMON、UNCOMMON、RARE、またはEPICを使用します
+ look-at-chest: &c満たされた箱を見てそれを設定します
+ only-single-chest: &c単一のチェストのみを設定できます
+ success: &a胸部がフェーズに追加されました
+ failure: &cチェストをフェーズに追加できませんでした!エラーについてはコンソールを参照してください
sanity:
- parameters: "<フェーズ>"
+ parameters: <フェーズ>
description: コンソールに位相確率の健全性チェックを表示する
- see-console: "&aコンソールでレポートを表示"
+ see-console: &aコンソールでレポートを表示
count:
description: ブロック数とフェーズを表示する
- info: "[name]フェーズのブロック[number]にいます"
+ info: '[name]フェーズのブロック[number]にいます'
info:
- count: "&a 島は &b [name] &a フェーズのブロック &b [number]&a 上にあります。生涯カウント &b [lifetime]
- &a。"
+ count: >-
+ &a 島は &b [name] &a フェーズのブロック &b [number]&a 上にあります。生涯カウント &b [lifetime]
+ &a。
phases:
description: すべてのフェーズのリストを表示する
- title: "&2 OneBlockフェーズ"
- name-syntax: "&a[name]"
- description-syntax: "&b [number]ブロック"
+ title: &2 OneBlockフェーズ
+ name-syntax: '&a[name]'
+ description-syntax: '&b [number]ブロック'
island:
+ bossbar:
+ description: トグルフェーズボスバー
+ status_on: '&b ボスバーが&a オン'
+ status_off: '&b ボスバーが&aオフ'
setcount:
- parameters: "<カウント>"
+ parameters: <カウント>
description: ブロック数を以前に完了した値に設定する
- set: "&a カウントを [数値] に設定します。"
- too-high: "&c 設定できる最大値は [number] です!"
+ set: '&a カウントを [数値] に設定します。'
+ too-high: '&c 設定できる最大値は [number] です!'
respawn-block:
description: マジックブロックが消えた場合に再出現します
- block-exist: "&a ブロックが存在します。再生成は必要ありませんでした。私はあなたのためにそれをマークしました。"
- block-respawned: "&a ブロックが復活しました。"
+ block-exist: '&a ブロックが存在します。再生成は必要ありませんでした。私はあなたのためにそれをマークしました。'
+ block-respawned: '&a ブロックが復活しました。'
phase:
- insufficient-level: "&c 島のレベルが低すぎるので先に進めません! [number] である必要があります。"
- insufficient-funds: "&c 資金が少なすぎるため続行できません。 [number] である必要があります。"
- insufficient-bank-balance: "&c 島の銀行残高が少なすぎるため続行できません。 [number] である必要があります。"
- insufficient-permission: "&c [name] の許可を取得するまで、これ以上先に進むことはできません。"
- cooldown: "&c [number] 秒で次のステージへ!"
+ insufficient-level: '&c 島のレベルが低すぎるので先に進めません! [number] である必要があります。'
+ insufficient-funds: '&c 資金が少なすぎるため続行できません。 [number] である必要があります。'
+ insufficient-bank-balance: '&c 島の銀行残高が少なすぎるため続行できません。 [number] である必要があります。'
+ insufficient-permission: '&c [name] の許可を取得するまで、これ以上先に進むことはできません。'
+ cooldown: '&c [number] 秒で次のステージへ!'
placeholders:
infinite: 無限
gui:
titles:
- phases: "&0&l ワンブロックフェーズ"
+ phases: '&0&l ワンブロックフェーズ'
buttons:
previous:
- name: "&f&l 前のページ"
- description: "&7 [number]ページに切り替えます"
+ name: '&f&l 前のページ'
+ description: '&7 [number]ページに切り替えます'
next:
- name: "&f&l 次のページ"
- description: "&7 [番号]ページに切り替えます"
+ name: '&f&l 次のページ'
+ description: '&7 [番号]ページに切り替えます'
phase:
- name: "&f&l [phase]"
+ name: '&f&l [phase]'
description: |-
[starting-block]
[biome]
@@ -69,16 +94,19 @@ aoneblock:
[economy]
[level]
[permission]
- starting-block: "&7 &e [number] ブロックを分割した後に開始します。"
- biome: "&7 バイオーム: &e [biome]"
- bank: "&7 銀行口座に &e $[number] &7 が必要です。"
- economy: "&7 プレイヤーアカウントに &e $[number] &7 が必要です。"
- level: "&7 &e [number] &7 の島レベルが必要です。"
- permission: "&7 `&e[permission]&7` 権限が必要です。"
+ starting-block: '&7 &e [number] ブロックを分割した後に開始します。'
+ biome: '&7 バイオーム: &e [biome]'
+ bank: '&7 銀行口座に &e $[number] &7 が必要です。'
+ economy: '&7 プレイヤーアカウントに &e $[number] &7 が必要です。'
+ level: '&7 &e [number] &7 の島レベルが必要です。'
+ permission: '&7 `&e[permission]&7` 権限が必要です。'
+ blocks-prefix: '&7 フェーズのブロック - '
+ blocks: '&e [name], '
+ wrap-at: '50'
tips:
- click-to-previous: "&e &7 をクリックして前のページを表示します。"
- click-to-next: "&e &7 をクリックして次のページを表示します。"
- click-to-change: "&e &7 をクリックして変更します。"
+ click-to-previous: '&e &7 をクリックして前のページを表示します。'
+ click-to-next: '&e &7 をクリックして次のページを表示します。'
+ click-to-change: '&e &7 をクリックして変更します。'
island:
starting-hologram: |-
&aAOneBlock へようこそ
diff --git a/src/main/resources/locales/pl.yml b/src/main/resources/locales/pl.yml
index 5f1e563e..4b12c92a 100644
--- a/src/main/resources/locales/pl.yml
+++ b/src/main/resources/locales/pl.yml
@@ -1,68 +1,94 @@
----
+protection:
+ flags:
+ START_SAFETY:
+ name: Początkowe bezpieczeństwo
+ description: |
+ &b Zapobiega nowych graczy
+ &b Od przeprowadzki na 1 minutę
+ &b Więc nie spadają.
+ hint: '&c Ruch zablokowany dla bezpieczeństwa przez [number] więcej sekund!'
+ free-to-move: '&a Możesz się poruszać. '
+ ONEBLOCK_BOSSBAR:
+ name: Bar Boss
+ description: |
+ &b Pokazuje pasek stanu
+ &b dla każdej fazy.
aoneblock:
+ bossbar:
+ title: Pozostałe bloki
+ status: '&a Bloki fazowe &b [done] &d / &b [total]'
+ color: RED
+ style: SEGMENTED_20
+ not-active: '&c Boss Bar nie jest aktywny dla tej wyspy'
commands:
admin:
setcount:
- parameters: " "
+ parameters:
description: ustaw liczbę bloków gracza
- set: "&a Liczba [name] została ustawiona na [number]"
- set-lifetime: "&a [name] licznik życia ustawiony na [number]"
+ set: '&a Liczba [name] została ustawiona na [number]'
+ set-lifetime: '&a [name] licznik życia ustawiony na [number]'
setchest:
- parameters: " "
+ parameters:
description: umieść oglądaną skrzynię w fazie o określonej rzadkości
- chest-is-empty: "&cTa skrzynia jest pusta, więc nie można jej dodać"
- unknown-phase: "&cNieznana faza. Aby uzupełnić, użyj tabulacji"
- unknown-rarity: "&cNieznana rzadkość. Użyj COMMON, UNCOMMON, RARE lub EPIC"
- look-at-chest: "&cSpójrz na wypełnioną skrzynię, aby ją ustawić"
- only-single-chest: "&cMożna ustawić tylko pojedyncze skrzynie"
- success: "&aSkrzynia pomyślnie dodana do fazy"
- failure: "&cSkrzynia nie mogła zostać dodana do fazy! Zobacz błąd w konsoli"
+ chest-is-empty: '&cTa skrzynia jest pusta, więc nie można jej dodać'
+ unknown-phase: '&cNieznana faza. Aby uzupełnić, użyj tabulacji'
+ unknown-rarity: '&cNieznana rzadkość. Użyj COMMON, UNCOMMON, RARE lub EPIC'
+ look-at-chest: '&cSpójrz na wypełnioną skrzynię, aby ją ustawić'
+ only-single-chest: '&cMożna ustawić tylko pojedyncze skrzynie'
+ success: '&aSkrzynia pomyślnie dodana do fazy'
+ failure: '&cSkrzynia nie mogła zostać dodana do fazy! Zobacz błąd w konsoli'
sanity:
- parameters: ""
+ parameters:
description: wyświetlać kontrolę poprawności prawdopodobieństwa fazy w konsoli
- see-console: "&a Zobacz raport w konsoli"
+ see-console: '&a Zobacz raport w konsoli'
count:
description: pokaż liczbę bloków i fazę
- info: "&a Jesteś na bloku &b [number] w fazie &a [name]"
+ info: '&a Jesteś na bloku &b [number] w fazie &a [name]'
+ info:
+ count: >-
+ &a Wyspa jest na bloku &b [number] w fazie [name]. Lifetime count &b
+ [lifetime] &a.
phases:
description: pokaż listę wszystkich faz
- title: "&2 Fazy OneBlock"
- name-syntax: "&a [name]"
- description-syntax: "&b [number] bloków"
+ title: '&2 Fazy OneBlock'
+ name-syntax: '&a [name]'
+ description-syntax: '&b [number] bloków'
island:
+ bossbar:
+ description: Przełącza fazę boss
+ status_on: '&b Bossbar &a włączył'
+ status_off: '&b Bossbar &a wyłączył'
setcount:
- parameters: ""
+ parameters:
description: ustaw liczbę bloków na poprzednio uzupełnioną wartość
- set: "&a Liczba ustawiona na [number]."
- too-high: "&c Maksymalna wartość, jaką możesz ustawić, to [number]!"
+ set: '&a Liczba ustawiona na [number].'
+ too-high: '&c Maksymalna wartość, jaką możesz ustawić, to [number]!'
respawn-block:
description: odnawia magiczny blok, w przypadku zniknięcia
- block-exist: "&a Blok nie potrzebował odnowienia. Został chwilowo zaznaczony"
- block-respawned: "&a Odnowiono blok, proszę nie usuwaj go ponownie"
+ block-exist: '&a Blok nie potrzebował odnowienia. Został chwilowo zaznaczony'
+ block-respawned: '&a Odnowiono blok, proszę nie usuwaj go ponownie'
phase:
- insufficient-level: Poziom Twojej wyspy jest za niski, aby kontynuować! Musi to
- być [number].
- insufficient-funds: Twoje fundusze są zbyt niskie, aby kontynuować! Musisz posiadać
- [number].
- insufficient-bank-balance: Saldo na rachunku bankowym wyspy jest zbyt niskie,
- aby kontynuować! Musi to być [number].
- insufficient-permission: Nie możesz kontynuować, dopóki nie uzyskasz pozwolenia
- [name]!
- cooldown: "&c Następny etap będzie dostępny za [number] sekund!"
+ insufficient-level: Poziom Twojej wyspy jest za niski, aby kontynuować! Musi to być [number].
+ insufficient-funds: Twoje fundusze są zbyt niskie, aby kontynuować! Musisz posiadać [number].
+ insufficient-bank-balance: >-
+ Saldo na rachunku bankowym wyspy jest zbyt niskie, aby kontynuować! Musi
+ to być [number].
+ insufficient-permission: Nie możesz kontynuować, dopóki nie uzyskasz pozwolenia [name]!
+ cooldown: '&c Następny etap będzie dostępny za [number] sekund!'
placeholders:
infinite: Nieskończony
gui:
titles:
- phases: "&0&l Fazy OneBlock"
+ phases: '&0&l Fazy OneBlock'
buttons:
previous:
- name: "&f&lNastępna strona"
- description: "&7 Przeskocz do [number] strony"
+ name: '&f&lNastępna strona'
+ description: '&7 Przeskocz do [number] strony'
next:
- name: "&f&l Następna strona"
- description: "&7 Przeskocz do [number] strony"
+ name: '&f&l Następna strona'
+ description: '&7 Przeskocz do [number] strony'
phase:
- name: "&f&l [phase]"
+ name: '&f&l [phase]'
description: |-
[starting-block]
[biome]
@@ -70,16 +96,19 @@ aoneblock:
[economy]
[level]
[permission]
- starting-block: "&7 Rozpoczyna sie po&e [number] &7zniszczonych blokach."
- biome: "&7 Biom: &e [biome]"
- bank: "&7 Potrzebujesz&e $[number] &7 na twoim koncie."
- economy: "&7 Potrzebujesz&e $[number] &7 na twoim koncie."
- level: "&7 Potrzebujesz &e [number] &7 poziom wyspy."
- permission: "&7 Wymaga uprawnienia `&e[permission]&7`."
+ starting-block: '&7 Rozpoczyna sie po&e [number] &7zniszczonych blokach.'
+ biome: '&7 Biom: &e [biome]'
+ bank: '&7 Potrzebujesz&e $[number] &7 na twoim koncie.'
+ economy: '&7 Potrzebujesz&e $[number] &7 na twoim koncie.'
+ level: '&7 Potrzebujesz &e [number] &7 poziom wyspy.'
+ permission: '&7 Wymaga uprawnienia `&e[permission]&7`.'
+ blocks-prefix: '&7 Bloki w fazie -'
+ blocks: '&e [name], '
+ wrap-at: '50'
tips:
- click-to-previous: "&e Kliknij &7, aby wyświetlić poprzednią stronę."
- click-to-next: "&e Kliknij &7, aby wyświetlić następną stronę."
- click-to-change: "&e Kliknij &7, aby zmienić."
+ click-to-previous: '&e Kliknij &7, aby wyświetlić poprzednią stronę.'
+ click-to-next: '&e Kliknij &7, aby wyświetlić następną stronę.'
+ click-to-change: '&e Kliknij &7, aby zmienić.'
island:
starting-hologram: |-
&aWitamy w OneBlock
diff --git a/src/main/resources/locales/pt.yml b/src/main/resources/locales/pt.yml
index 06b94cff..c9617f8d 100644
--- a/src/main/resources/locales/pt.yml
+++ b/src/main/resources/locales/pt.yml
@@ -1,36 +1,116 @@
----
+protection:
+ flags:
+ START_SAFETY:
+ name: Segurança inicial
+ description: |
+ &b Impede novos jogadores
+ &b de se mudar por 1 minuto
+ &b Então eles não caem.
+ hint: '&c Movimento bloqueado por segurança por [número] mais segundos!'
+ free-to-move: '&a Você está livre para se mover. '
+ ONEBLOCK_BOSSBAR:
+ name: Boss Bar
+ description: |
+ &b Mostra uma barra de status
+ &b para cada fase.
aoneblock:
+ bossbar:
+ title: Bloqueia o restante
+ status: '&a Blocos de fase &b [done] &d / &b [total]'
+ color: RED
+ style: SEGMENTED_20
+ not-active: '&c O Boss Bar não está ativo para esta ilha'
commands:
admin:
setcount:
- parameters: " "
+ parameters:
description: definir contagem de blocos do jogador
- set: "&a [name] contagem definida para [number]"
+ set: '&a [name] contagem definida para [number]'
+ set-lifetime: '&a A contagem de vida útil [name] definida como [number]'
setchest:
- parameters: " "
+ parameters:
description: colocar o baú olhado em uma fase com a raridade especificada
- chest-is-empty: "&c Esse baú está vazio, então não pode ser adicionado"
- unknown-phase: "&c Fase desconhecida. Use tab-complete para vê-los"
- unknown-rarity: "&c Raridade desconhecida. Use COMMON, UNCOMMON, RARE ou EPIC"
- look-at-chest: "&c Olhe para um baú cheio para configurá-lo"
- only-single-chest: "&c Apenas baús individuais podem ser ajustados"
- success: "&a Baú adicionado com sucesso à fase"
- failure: "&c O Bau não pôde ser adicionado à fase! Veja o console para erros"
+ chest-is-empty: '&c Esse baú está vazio, então não pode ser adicionado'
+ unknown-phase: '&c Fase desconhecida. Use tab-complete para vê-los'
+ unknown-rarity: '&c Raridade desconhecida. Use COMMON, UNCOMMON, RARE ou EPIC'
+ look-at-chest: '&c Olhe para um baú cheio para configurá-lo'
+ only-single-chest: '&c Apenas baús individuais podem ser ajustados'
+ success: '&a Baú adicionado com sucesso à fase'
+ failure: '&c O Bau não pôde ser adicionado à fase! Veja o console para erros'
sanity:
- parameters: ""
- description: exibir uma verificação de sanidade das probabilidades de fase
- no console
- see-console: "&a Veja o console para o relatório"
+ parameters:
+ description: >-
+ exibir uma verificação de sanidade das probabilidades de fase no
+ console
+ see-console: '&a Veja o console para o relatório'
count:
description: mostra a contagem de blocos e a fase
- info: "&a Você está no bloco &b [number] no &a [name] fase"
+ info: '&a Você está no bloco &b [number] no &a [name] fase'
+ info:
+ count: >-
+ &a A ilha está em bloco &b [number] &a na fase &b [name]. Lifetime count
+ &b [lifetime] &a.
phases:
description: mostra uma lista de todas as fases
- title: "&2 OneBlock Fases"
- name-syntax: "&a [name]"
- description-syntax: "&b [number] blocos"
+ title: '&2 OneBlock Fases'
+ name-syntax: '&a [name]'
+ description-syntax: '&b [number] blocos'
island:
- setcount: {}
- phase: {}
- placeholders: {}
- island: {}
+ bossbar:
+ description: Alterna o Boss Boss Bar
+ status_on: '&b Bossbar &a ligado'
+ status_off: '&b Bossbar &c desligado'
+ setcount:
+ parameters:
+ description: Defina a contagem de blocos para o valor previamente concluído
+ set: '&a Contagem definida como [number].'
+ too-high: '&c O máximo que você pode definir é [number]!'
+ respawn-block:
+ description: Responda o bloco mágico em situações quando desaparece
+ block-exist: '&a O bloco existe, não exigiu reaparecimento. '
+ block-respawned: '&a Bloquear o reaparecido.'
+ phase:
+ insufficient-level: '&c O nível da sua ilha é muito baixo para prosseguir! '
+ insufficient-funds: '&c Seus fundos são muito baixos para prosseguir! '
+ insufficient-bank-balance: '&c O saldo do banco da ilha é muito baixo para prosseguir! '
+ insufficient-permission: '&c Você não pode proceder mais até obter a permissão [name]!'
+ cooldown: '&c A próxima fase estará disponível em [number] segundos!'
+ placeholders:
+ infinite: Infinito
+ gui:
+ titles:
+ phases: Oneblock Fases
+ buttons:
+ previous:
+ name: '&f&l Página anterior'
+ description: '&7 Mudar para a página [number]'
+ next:
+ name: '&f&l Próxima página'
+ description: '&7 Mudar para a página [number]'
+ phase:
+ name: '&f&l [phase]'
+ description: |-
+ [starting-block]
+ [biome]
+ [bank]
+ [economy]
+ [level]
+ [permission]
+ [blocks]
+ starting-block: '&7 Começa após quebrar &e blocos [number].'
+ biome: '&7 Bioma: [biome]'
+ bank: '&7 Requer &e $ [number] &7 na conta bancária.'
+ economy: '&7 Requer &e $ [number] &7 na conta do jogador.'
+ level: '&7 Requer &e [number] &7 no nível da ilha.'
+ permission: '&7 Requer `&e[permission]&7` permissão.'
+ blocks-prefix: '&7 Blocos em fase -'
+ blocks: '&e [name], '
+ wrap-at: '50'
+ tips:
+ click-to-previous: '&e Clique &7 para visualizar a página anterior.'
+ click-to-next: '&e Clique &7 para visualizar a próxima página.'
+ click-to-change: '&e Clique &7 para alterar.'
+ island:
+ starting-hologram: |-
+ &a Bem -vindo ao AOneBlock
+ &e Quebre este bloco para começar
diff --git a/src/main/resources/locales/ru.yml b/src/main/resources/locales/ru.yml
index 071b4a88..156a930d 100644
--- a/src/main/resources/locales/ru.yml
+++ b/src/main/resources/locales/ru.yml
@@ -1,71 +1,94 @@
----
+protection:
+ flags:
+ START_SAFETY:
+ name: Начальная безопасность
+ description: |
+ &b Предотвращает новых игроков
+ &b от переезда на 1 минуту
+ &b Так что они не падают.
+ hint: '&c Движение заблокировано для безопасности для [number] больше секунд!'
+ free-to-move: '&a Вы можете свободно двигаться. '
+ ONEBLOCK_BOSSBAR:
+ name: Boss Bar
+ description: |
+ &b Показывает строку статуса
+ &b Для каждого этапа.
aoneblock:
+ bossbar:
+ title: Блоки остались
+ status: '&a Фазовые блоки &b [done] &d / &b [total]'
+ color: RED
+ style: SEGMENTED_20
+ not-active: '&c Boss Bar не активен для этого острова'
commands:
admin:
setcount:
- parameters: " [lifetime]"
+ parameters: [lifetime]
description: установить количество блоков игрока
- set: "&a [name] кол-во блоков установлено на [number]"
- set-lifetime: "&a Счетчик жизни [name] установлен на [number]"
+ set: '&a [name] кол-во блоков установлено на [number]'
+ set-lifetime: '&a Счетчик жизни [name] установлен на [number]'
setchest:
- parameters: " "
+ parameters:
description: положить проверенный сундук в фазу с указанной редкостью
- chest-is-empty: "&c Этот сундук пуст, поэтому не может быть добавлен"
- unknown-phase: "&c Неизвестная фаза. Используйте Tab-Complete, чтобы увидеть
- их"
- unknown-rarity: "&c Неизвестная редкость. Используйте COMMON, UNCOMMON, RARE
- или EPIC"
- look-at-chest: "&c Посмотрите на заполненный сундук, чтобы установить его"
- only-single-chest: "&c Можно установить только один сундук"
- success: "&a Сундук успешно добавлен в фазу"
- failure: "&c Сундук не может быть добавлен в фазу! Смотрите консоль для ошибок"
+ chest-is-empty: '&c Этот сундук пуст, поэтому не может быть добавлен'
+ unknown-phase: '&c Неизвестная фаза. Используйте Tab-Complete, чтобы увидеть их'
+ unknown-rarity: '&c Неизвестная редкость. Используйте COMMON, UNCOMMON, RARE или EPIC'
+ look-at-chest: '&c Посмотрите на заполненный сундук, чтобы установить его'
+ only-single-chest: '&c Можно установить только один сундук'
+ success: '&a Сундук успешно добавлен в фазу'
+ failure: '&c Сундук не может быть добавлен в фазу! Смотрите консоль для ошибок'
sanity:
- parameters: ""
+ parameters:
description: отобразить проверку исправности фазовых вероятностей в консоли
- see-console: "&a Смотрите консоль для отчета"
+ see-console: '&a Смотрите консоль для отчета'
count:
description: показать количество блоков и фаз
- info: "&a Вы находитесь в блоке &b [number] в &a [name] фазе"
+ info: '&a Вы находитесь в блоке &b [number] в &a [name] фазе'
+ info:
+ count: '&a Остров находится на блоке &b [number] &a в фазе &b [number]. '
phases:
description: показать список всех фаз
- title: "&2 Фазы OneBlock"
- name-syntax: "&a [name]"
- description-syntax: "&b [number] блоков"
+ title: '&2 Фазы OneBlock'
+ name-syntax: '&a [name]'
+ description-syntax: '&b [number] блоков'
island:
+ bossbar:
+ description: Переключает фазовую бар босса
+ status_on: '&b Боссбар &a включился'
+ status_off: '&b Боссбар &c выключился'
setcount:
- parameters: ""
+ parameters:
description: установить счетчик блоков на ранее завершенное значение
- set: "&a Счетчик установлен на [number]."
- too-high: "&c Максимум, что вы можете установить, это [number]!"
+ set: '&a Счетчик установлен на [number].'
+ too-high: '&c Максимум, что вы можете установить, это [number]!'
respawn-block:
description: возрождает магический блок в ситуациях, когда они исчезают
- block-exist: "&a Блок существует, не требует возрождения. Я отметил это для
- вас."
- block-respawned: "& Блок возродился, пожалуйста, не аннулируйте его снова."
+ block-exist: '&a Блок существует, не требует возрождения. Я отметил это для вас.'
+ block-respawned: '& Блок возродился, пожалуйста, не аннулируйте его снова.'
phase:
- insufficient-level: "&c Уровень вашего острова слишком низок для продолжения!
- Должно быть [number]."
- insufficient-funds: "&c У вас слишком мало средств для продолжения! Они должны
- быть [number]."
- insufficient-bank-balance: "&c Баланс банка острова слишком низок для продолжения!
- Должно быть [number]."
- insufficient-permission: "&c Вы не можете продолжать, пока не получите разрешение
- [name]!"
- cooldown: "&c Следующий этап будет доступен через [number] секунд!"
+ insufficient-level: >-
+ &c Уровень вашего острова слишком низок для продолжения! Должно быть
+ [number].
+ insufficient-funds: '&c У вас слишком мало средств для продолжения! Они должны быть [number].'
+ insufficient-bank-balance: >-
+ &c Баланс банка острова слишком низок для продолжения! Должно быть
+ [number].
+ insufficient-permission: '&c Вы не можете продолжать, пока не получите разрешение [name]!'
+ cooldown: '&c Следующий этап будет доступен через [number] секунд!'
placeholders:
infinite: Бесконечный
gui:
titles:
- phases: "&0&l Фазы OneBlock"
+ phases: '&0&l Фазы OneBlock'
buttons:
previous:
- name: "&f&l Предыдущая страница"
- description: "&7 Перейти на [number] страницы"
+ name: '&f&l Предыдущая страница'
+ description: '&7 Перейти на [number] страницы'
next:
- name: "&f&l Следующая страница"
- description: "&7 Перейти на [number] страницы"
+ name: '&f&l Следующая страница'
+ description: '&7 Перейти на [number] страницы'
phase:
- name: "&f&l [phase]"
+ name: '&f&l [phase]'
description: |-
[starting-block]
[biome]
@@ -73,16 +96,19 @@ aoneblock:
[economy]
[level]
[permission]
- starting-block: "&7 Запускается после разбиения блоков &e [number]."
- biome: "&7 Биом: &e [biome]"
- bank: "&7 Требуется &e $[number] &7 на банковском счете."
- economy: "&7 Требуется &e $[number] &7 в учетной записи игрока."
- level: "&7 Требуется &e [number] &7 уровня острова."
- permission: "&7 Требуется разрешение `&e[permission]&7`."
+ starting-block: '&7 Запускается после разбиения блоков &e [number].'
+ biome: '&7 Биом: &e [biome]'
+ bank: '&7 Требуется &e $[number] &7 на банковском счете.'
+ economy: '&7 Требуется &e $[number] &7 в учетной записи игрока.'
+ level: '&7 Требуется &e [number] &7 уровня острова.'
+ permission: '&7 Требуется разрешение `&e[permission]&7`.'
+ blocks-prefix: '&7 Блоки в фазе -'
+ blocks: '&e [name], '
+ wrap-at: '50'
tips:
- click-to-previous: "&e Нажмите &7, чтобы просмотреть предыдущую страницу."
- click-to-next: "&e Нажмите &7 для просмотра следующей страницы."
- click-to-change: "&e Нажмите &7, чтобы изменить."
+ click-to-previous: '&e Нажмите &7, чтобы просмотреть предыдущую страницу.'
+ click-to-next: '&e Нажмите &7 для просмотра следующей страницы.'
+ click-to-change: '&e Нажмите &7, чтобы изменить.'
island:
starting-hologram: |-
&aДобро пожаловать в AOneBlock
diff --git a/src/main/resources/locales/tr.yml b/src/main/resources/locales/tr.yml
index 7f0fad38..6c1d5071 100644
--- a/src/main/resources/locales/tr.yml
+++ b/src/main/resources/locales/tr.yml
@@ -1,4 +1,3 @@
----
protection:
flags:
START_SAFETY:
@@ -6,74 +5,89 @@ protection:
description: |
&b Yeni oyuncuları 1 dakika boyunca kıpırdamasını engeller
&b böylece aşağı düşmezler.
- hint: "&c Haraketler [number] saniye daha güvenlik için engellenmiştir!"
- free-to-move: "&a Artık kıpırdayabilirsin dikkatli ol!"
+ hint: '&c Haraketler [number] saniye daha güvenlik için engellenmiştir!'
+ free-to-move: '&a Artık kıpırdayabilirsin dikkatli ol!'
+ ONEBLOCK_BOSSBAR:
+ name: Patron bar
+ description: |
+ &b Bir durum çubuğu gösterir
+ &b her aşama için.
aoneblock:
+ bossbar:
+ title: Kalan bloklar
+ status: '&a Faz blokları &b [done] &d / &b [total]'
+ color: RED
+ style: SEGMENTED_20
+ not-active: '&c Patron Bar bu ada için aktif değil'
commands:
admin:
setcount:
- parameters: " [lifetime]"
+ parameters: [lifetime]
description: oyuncunun blok sayısını ayarla
- set: "&a [name] 'ın sayısı [number] olarak ayarlandı"
- set-lifetime: "&a [name]'nin toplam kırılan blok sayısı [number] olarak ayarlandı"
+ set: '&a [name] ''ın sayısı [number] olarak ayarlandı'
+ set-lifetime: '&a [name]''nin toplam kırılan blok sayısı [number] olarak ayarlandı'
setchest:
- parameters: " "
+ parameters:
description: bakılan sandığı nadir görülen bir evreye koyar
- chest-is-empty: "&c Bu sandık boş, bu yüzden eklenemez"
- unknown-phase: "&c Bilinmeyen aşama. Bunları görmek için sekme-tamamlama özelliğini
- kullanın"
- unknown-rarity: "& c Bilinmeyen nadirlik. COMMON, UNCOMMON, RARE veya EPIC
- kullanın"
- look-at-chest: "&c Ayarlamak için dolu bir sandığa bakın"
- only-single-chest: "&c Yalnızca tek sandık ayarlanabilir"
- success: "&a Sandık aşamaya başarıyla eklendi"
- failure: "&c Sandık aşamaya eklenemedi! Hatalar için konsola bakın"
+ chest-is-empty: '&c Bu sandık boş, bu yüzden eklenemez'
+ unknown-phase: >-
+ &c Bilinmeyen aşama. Bunları görmek için sekme-tamamlama özelliğini
+ kullanın
+ unknown-rarity: '& c Bilinmeyen nadirlik. COMMON, UNCOMMON, RARE veya EPIC kullanın'
+ look-at-chest: '&c Ayarlamak için dolu bir sandığa bakın'
+ only-single-chest: '&c Yalnızca tek sandık ayarlanabilir'
+ success: '&a Sandık aşamaya başarıyla eklendi'
+ failure: '&c Sandık aşamaya eklenemedi! Hatalar için konsola bakın'
sanity:
- parameters: ""
+ parameters:
description: konsoldaki faz olasılıklarının akıl sağlığını kontrol etmek
- see-console: "&a Rapor için konsola bakın"
+ see-console: '&a Rapor için konsola bakın'
count:
description: blok sayısını ve aşamayı göster
- info: "&a [name] aşamasında blok &b [number] üzerindesiniz"
+ info: '&a [name] aşamasında blok &b [number] üzerindesiniz'
info:
- count: "&a Ada blok sayısı &b [number] &b [name] &a aşamasında. Toplam kırılan
- blok &b [lifetime] &a."
+ count: >-
+ &a Ada blok sayısı &b [number] &b [name] &a aşamasında. Toplam kırılan
+ blok &b [lifetime] &a.
phases:
description: tüm aşamaların bir listesini göster
- title: "&2 TekBlok Aşaması"
- name-syntax: "&a [name]"
- description-syntax: "&b [number] blokları"
+ title: '&2 TekBlok Aşaması'
+ name-syntax: '&a [name]'
+ description-syntax: '&b [number] blokları'
island:
+ bossbar:
+ description: Faz patron çubuğunu değiştirir
+ status_on: '&b Bossbar &a açıldı'
+ status_off: '&b Bossbar &c kapandı'
setcount:
- parameters: ""
+ parameters:
description: blok sayısını önceden tamamlanmış değere ayarla
- set: "&a Sayım [number] olarak ayarlandı."
- too-high: "&c Ayarlayabileceğiniz maksimum sayı [number]!"
+ set: '&a Sayım [number] olarak ayarlandı.'
+ too-high: '&c Ayarlayabileceğiniz maksimum sayı [number]!'
respawn-block:
description: Kaynak bloğunu kaybolma durumlarında yeniden doğurur
- block-exist: "&a Kaynak bloğu yerinde senin için işaretledim."
- block-respawned: "&a Kaynak bloğu yeniden doğdu."
+ block-exist: '&a Kaynak bloğu yerinde senin için işaretledim.'
+ block-respawned: '&a Kaynak bloğu yeniden doğdu.'
phase:
- insufficient-level: "&c Ada seviyeniz devam etmek için çok düşük! [number] olmalıdır."
- insufficient-funds: "&c Paranız devam etmek için çok düşük! [number] olmalıdırlar."
- insufficient-bank-balance: "&c Ada bankası bakiyesi devam etmek için çok düşük!
- [number] olmalıdır."
- insufficient-permission: "&c [name] iznini alana kadar devam edemezsiniz!"
- cooldown: "&c Bir sonraki aşama [number] saniye içinde hazır olacak!"
+ insufficient-level: '&c Ada seviyeniz devam etmek için çok düşük! [number] olmalıdır.'
+ insufficient-funds: '&c Paranız devam etmek için çok düşük! [number] olmalıdırlar.'
+ insufficient-bank-balance: '&c Ada bankası bakiyesi devam etmek için çok düşük! [number] olmalıdır.'
+ insufficient-permission: '&c [name] iznini alana kadar devam edemezsiniz!'
+ cooldown: '&c Bir sonraki aşama [number] saniye içinde hazır olacak!'
placeholders:
infinite: Sonsuz
gui:
titles:
- phases: "&0&l TekBlok Aşamaları"
+ phases: '&0&l TekBlok Aşamaları'
buttons:
previous:
- name: "&f&l Önceki Sayfa"
- description: "&7 [number] Sayılı sayfaya geçer"
+ name: '&f&l Önceki Sayfa'
+ description: '&7 [number] Sayılı sayfaya geçer'
next:
- name: "&f&l Sıradaki Sayfa "
- description: "&7 [number] Sayılı sayfaya geçer"
+ name: '&f&l Sıradaki Sayfa '
+ description: '&7 [number] Sayılı sayfaya geçer'
phase:
- name: "&f&l [phase]"
+ name: '&f&l [phase]'
description: |-
[starting-block]
[biome]
@@ -82,19 +96,19 @@ aoneblock:
[level]
[permission]
[blocks]
- starting-block: "&7 &e [sayı] kadar blok kırdıktan sonra başlar."
- biome: "&7 Biome: &e [biome]"
- bank: "&7 Banka hesabında &e $[number] &7 olması gerekli."
- economy: "&7 Bakiyenizin &e $[number] &7 olması gerekli."
- level: "&7 &e [sayı] &7 kadar ada seviyeniz olmalı."
- permission: "&7 `&e[izin]&7` izni gerektirir."
- blocks-prefix: "&7 Aşamadaki bloklar - "
- blocks: "&e [name], "
+ starting-block: '&7 &e [sayı] kadar blok kırdıktan sonra başlar.'
+ biome: '&7 Biome: &e [biome]'
+ bank: '&7 Banka hesabında &e $[number] &7 olması gerekli.'
+ economy: '&7 Bakiyenizin &e $[number] &7 olması gerekli.'
+ level: '&7 &e [sayı] &7 kadar ada seviyeniz olmalı.'
+ permission: '&7 `&e[izin]&7` izni gerektirir.'
+ blocks-prefix: '&7 Aşamadaki bloklar - '
+ blocks: '&e [name], '
wrap-at: '50'
tips:
- click-to-previous: "&e Önceki sayfayı görüntülemek için &7 tıklayın."
- click-to-next: "&e Sonraki sayfayı görüntülemek için &7 tıklayın."
- click-to-change: "&e Değiştirmek için &7 tıklayın."
+ click-to-previous: '&e Önceki sayfayı görüntülemek için &7 tıklayın.'
+ click-to-next: '&e Sonraki sayfayı görüntülemek için &7 tıklayın.'
+ click-to-change: '&e Değiştirmek için &7 tıklayın.'
island:
starting-hologram: |-
&aTekBlok'a Hoş Geldiniz
diff --git a/src/main/resources/locales/uk.yml b/src/main/resources/locales/uk.yml
index 25a1aa56..8c742a19 100644
--- a/src/main/resources/locales/uk.yml
+++ b/src/main/resources/locales/uk.yml
@@ -1,73 +1,96 @@
----
+protection:
+ flags:
+ START_SAFETY:
+ name: Початкова безпека
+ description: |
+ &b Запобігає новим гравцям
+ &b від переміщення протягом 1 хвилини
+ &b Тож вони не падають.
+ hint: '&c Рух заблокований для безпеки для [number] більше секунд!'
+ free-to-move: '&a Ви вільно рухаєтесь. '
+ ONEBLOCK_BOSSBAR:
+ name: Бар для боса
+ description: |
+ &b Показує панель стану
+ &b для кожної фази.
aoneblock:
+ bossbar:
+ title: Блоки, що залишилися
+ status: '&a Фазові блоки &b [done] &d / &b [total]'
+ color: RED
+ style: SEGMENTED_20
+ not-active: '&c Boss Bar не активний для цього острова'
commands:
admin:
setcount:
- parameters: " [lifetime]"
+ parameters: [lifetime]
description: встановити кількість блоків гравця
- set: "&a [name] встановлено значення [number]"
- set-lifetime: "&a [name] тривалість життя встановлено на [number]"
+ set: '&a [name] встановлено значення [number]'
+ set-lifetime: '&a [name] тривалість життя встановлено на [number]'
setchest:
- parameters: " "
+ parameters:
description: поставити скриню, на яку дивляться, у фазу з указаною рідкістю
- chest-is-empty: "&c Ця скриня порожня, тому її неможливо додати"
- unknown-phase: "&c Невідома фаза. Використовуйте Tab-complete, щоб побачити
- їх"
- unknown-rarity: "&c Невідома рідкість. Використовуйте COMMON, UNCOMMON, RARE
- або EPIC"
- look-at-chest: "&c Подивіться на заповнену скриню, щоб встановити її"
- only-single-chest: "&c Можна встановити лише окремі скрині"
- success: "& Скриню успішно додано до фази"
- failure: "&c Скриня не може бути додана до фази! Перегляньте консоль для помилок"
+ chest-is-empty: '&c Ця скриня порожня, тому її неможливо додати'
+ unknown-phase: '&c Невідома фаза. Використовуйте Tab-complete, щоб побачити їх'
+ unknown-rarity: '&c Невідома рідкість. Використовуйте COMMON, UNCOMMON, RARE або EPIC'
+ look-at-chest: '&c Подивіться на заповнену скриню, щоб встановити її'
+ only-single-chest: '&c Можна встановити лише окремі скрині'
+ success: '& Скриню успішно додано до фази'
+ failure: '&c Скриня не може бути додана до фази! Перегляньте консоль для помилок'
sanity:
- parameters: ""
+ parameters:
description: відобразити перевірку працездатності ймовірностей фази на консолі
- see-console: "&a Дивіться консоль для звіту"
+ see-console: '&a Дивіться консоль для звіту'
count:
description: показати кількість блоків і фазу
- info: "&a Ви знаходитесь у блоці &b [number] у фазі &a [name]."
+ info: '&a Ви знаходитесь у блоці &b [number] у фазі &a [name].'
info:
- count: "&a Острів знаходиться на блоці &b [number]&a у фазі &b [name] &a. Підрахунок
- тривалості життя &b [lifetime] &a."
+ count: >-
+ &a Острів знаходиться на блоці &b [number]&a у фазі &b [name] &a.
+ Підрахунок тривалості життя &b [lifetime] &a.
phases:
description: показати список усіх фаз
- title: "&2 OneBlock фази"
- name-syntax: "&a [name]"
- description-syntax: "&b [number] блоків"
+ title: '&2 OneBlock фази'
+ name-syntax: '&a [name]'
+ description-syntax: '&b [number] блоків'
island:
+ bossbar:
+ description: перемикає фазу боса
+ status_on: '&b Bossbar &a увімкнув'
+ status_off: '&b Bossbar &c вимкнувся'
setcount:
- parameters: ""
+ parameters:
description: встановити кількість блоків до попередньо завершеного значення
- set: "&a Лічильник встановлено на [number]."
- too-high: "&c Максимум, який ви можете встановити, це [number]!"
+ set: '&a Лічильник встановлено на [number].'
+ too-high: '&c Максимум, який ви можете встановити, це [number]!'
respawn-block:
description: відроджує магічний блок у ситуаціях, коли він зникає
- block-exist: "&a Блок існує, не потребує відновлення. Я позначив це для вас."
- block-respawned: "& Блок відродився."
+ block-exist: '&a Блок існує, не потребує відновлення. Я позначив це для вас.'
+ block-respawned: '& Блок відродився.'
phase:
- insufficient-level: "&c Рівень вашого острова занадто низький, щоб продовжити!
- Це має бути [number]."
- insufficient-funds: "&c Ваших коштів занадто мало, щоб продовжити! Вони мають
- бути [number]."
- insufficient-bank-balance: "&c Баланс острівного банку занадто низький, щоб продовжити!
- Це має бути [number]."
- insufficient-permission: "&c Ви не можете продовжувати далі, доки не отримаєте
- дозвіл [name]!"
- cooldown: "&c Наступна фаза буде доступна через [number] секунд!"
+ insufficient-level: >-
+ &c Рівень вашого острова занадто низький, щоб продовжити! Це має бути
+ [number].
+ insufficient-funds: '&c Ваших коштів занадто мало, щоб продовжити! Вони мають бути [number].'
+ insufficient-bank-balance: >-
+ &c Баланс острівного банку занадто низький, щоб продовжити! Це має бути
+ [number].
+ insufficient-permission: '&c Ви не можете продовжувати далі, доки не отримаєте дозвіл [name]!'
+ cooldown: '&c Наступна фаза буде доступна через [number] секунд!'
placeholders:
infinite: Нескінченний
gui:
titles:
- phases: "&0&l Фази одного блоку"
+ phases: '&0&l Фази одного блоку'
buttons:
previous:
- name: "&f&l Попередня сторінка"
- description: "&7 Перейти на сторінку [number]."
+ name: '&f&l Попередня сторінка'
+ description: '&7 Перейти на сторінку [number].'
next:
- name: "&f&l Наступна сторінка"
- description: "&7 Перейти на сторінку [number]."
+ name: '&f&l Наступна сторінка'
+ description: '&7 Перейти на сторінку [number].'
phase:
- name: "&f&l [phase]"
+ name: '&f&l [phase]'
description: |-
[starting-block]
[biome]
@@ -75,16 +98,19 @@ aoneblock:
[economy]
[level]
[permission]
- starting-block: "&7 Запускається після розбиття &e [number] блоків."
- biome: "&7 Біом: &e [biome]"
- bank: "&7 Потрібен &e $[number] &7 на банківському рахунку."
- economy: "&7 Потрібен &e $[number] &7 в обліковому записі гравця."
- level: "&7 Потрібен рівень острова &e [number] &7."
- permission: "&7 Потрібен дозвіл `&e[permission]&7`."
+ starting-block: '&7 Запускається після розбиття &e [number] блоків.'
+ biome: '&7 Біом: &e [biome]'
+ bank: '&7 Потрібен &e $[number] &7 на банківському рахунку.'
+ economy: '&7 Потрібен &e $[number] &7 в обліковому записі гравця.'
+ level: '&7 Потрібен рівень острова &e [number] &7.'
+ permission: '&7 Потрібен дозвіл `&e[permission]&7`.'
+ blocks-prefix: Блоки по фазі -
+ blocks: '&e [name], '
+ wrap-at: '50'
tips:
- click-to-previous: "&e Натисніть &7, щоб переглянути попередню сторінку."
- click-to-next: "&e Натисніть &7, щоб переглянути наступну сторінку."
- click-to-change: "&e Натисніть &7, щоб змінити."
+ click-to-previous: '&e Натисніть &7, щоб переглянути попередню сторінку.'
+ click-to-next: '&e Натисніть &7, щоб переглянути наступну сторінку.'
+ click-to-change: '&e Натисніть &7, щоб змінити.'
island:
starting-hologram: |-
&aЛаскаво просимо до AOneBlock
diff --git a/src/main/resources/locales/vi.yml b/src/main/resources/locales/vi.yml
index 09f4638b..0d25e415 100644
--- a/src/main/resources/locales/vi.yml
+++ b/src/main/resources/locales/vi.yml
@@ -1,52 +1,115 @@
----
+protection:
+ flags:
+ START_SAFETY:
+ name: Khởi đầu an toàn
+ description: |
+ &b Ngăn chặn người chơi mới
+ &b Từ việc di chuyển trong 1 phút
+ &b Vì vậy, họ không rơi ra.
+ hint: '&c Chuyển động bị chặn để an toàn cho [number] thêm giây!'
+ free-to-move: '&a Bạn có thể tự do di chuyển. '
+ ONEBLOCK_BOSSBAR:
+ name: Boss Bar
+ description: |
+ &b Hiển thị một thanh trạng thái
+ &b cho mỗi pha.
aoneblock:
+ bossbar:
+ title: Khối còn lại
+ status: '&a Khối pha &b [done] &d / &b [total]'
+ color: RED
+ style: SEGMENTED_20
+ not-active: '&c Boss Bar không hoạt động cho hòn đảo này'
commands:
admin:
setcount:
- parameters: " "
+ parameters:
description: chỉnh số đếm khối của người chơi
- set: "&a Số đếm khối của [name] được đặt thành [number]"
- set-lifetime: "&a Bộ đếm thời gian tồn tại của [name] được đặt thành [number]"
+ set: '&a Số đếm khối của [name] được đặt thành [number]'
+ set-lifetime: '&a Bộ đếm thời gian tồn tại của [name] được đặt thành [number]'
setchest:
- parameters: " <độ hiếm>"
+ parameters: <độ hiếm>
description: thêm rương đang nhìn vào một giai đoạn với độ hiếm được chỉ định
- chest-is-empty: "&c Rương đó trống nên không thể thêm vào"
- unknown-phase: "&c Giai đoạn chưa biết. Dùng TAB để xem chúng"
- unknown-rarity: "&c Độ hiếm chưa biết. Sử dụng COMMON, UNCOMMON, RARE hoặc
- EPIC"
- look-at-chest: "&c Nhìn vào một cái rương đầy để đặt nó"
- only-single-chest: "&c Chỉ có thể đặt các rương đơn"
- success: "&a Rương được thêm thành công vào giai đoạn"
- failure: "&c Rương không thể được thêm vào giai đoạn! Xem bảng điều khiển
- để biết lỗi"
+ chest-is-empty: '&c Rương đó trống nên không thể thêm vào'
+ unknown-phase: '&c Giai đoạn chưa biết. Dùng TAB để xem chúng'
+ unknown-rarity: '&c Độ hiếm chưa biết. Sử dụng COMMON, UNCOMMON, RARE hoặc EPIC'
+ look-at-chest: '&c Nhìn vào một cái rương đầy để đặt nó'
+ only-single-chest: '&c Chỉ có thể đặt các rương đơn'
+ success: '&a Rương được thêm thành công vào giai đoạn'
+ failure: >-
+ &c Rương không thể được thêm vào giai đoạn! Xem bảng điều khiển để
+ biết lỗi
sanity:
- parameters: ""
- description: hiển thị kiểm tra sự đúng đắn của xác suất giao đoạn lên bảng
- điều khiển
- see-console: "&a Xem bảng điều khiển cho báo cáo"
+ parameters:
+ description: >-
+ hiển thị kiểm tra sự đúng đắn của xác suất giao đoạn lên bảng điều
+ khiển
+ see-console: '&a Xem bảng điều khiển cho báo cáo'
count:
description: hiển thị số khối và giai đoạn
- info: "&a Bạn đang ở trên khối &b [number] trong giai đoạn &a [name]"
+ info: '&a Bạn đang ở trên khối &b [number] trong giai đoạn &a [name]'
+ info:
+ count: '&a Đảo nằm trên khối &b [number] &a trong giai đoạn &b [name]. '
phases:
description: hiển thị một danh sách tất cả các giai đoạn
- title: "&2 Giai đoạn OneBlock"
- name-syntax: "&a [name]"
- description-syntax: "&b [number] khối"
+ title: '&2 Giai đoạn OneBlock'
+ name-syntax: '&a [name]'
+ description-syntax: '&b [number] khối'
island:
+ bossbar:
+ description: bật thanh Boss giai đoạn
+ status_on: '&b Bossbar &a bật lên'
+ status_off: '&b Bossbar &c tắt'
setcount:
- parameters: ""
+ parameters:
description: đặt số khối thành giá trị đã hoàn thành trước đó
- set: "&a Bộ đếm được đặt thành [number]."
- too-high: "&cMức tối đa bạn có thể đặt là[number]!"
+ set: '&a Bộ đếm được đặt thành [number].'
+ too-high: '&cMức tối đa bạn có thể đặt là[number]!'
+ respawn-block:
+ description: Block ma thuật hồi sinh trong các tình huống khi nó biến mất
+ block-exist: '&a Khối tồn tại, không yêu cầu phản hồi. '
+ block-respawned: '&a Chặn hồi sinh.'
phase:
insufficient-level: Cấp đảo của bạn quá thấp để thực thi! Nó phải là [number].
insufficient-funds: Tài chính của bạn quá thấp để thực thi! Nó phải là [number].
- insufficient-bank-balance: Ngân hàng đảo của bạn quá thấp để thực thi! Nó phải
- là [number].
+ insufficient-bank-balance: Ngân hàng đảo của bạn quá thấp để thực thi! Nó phải là [number].
insufficient-permission: Bạn không thể thực thi tiếp cho đến khi có quyền [name]!
cooldown: Giai đoạn tiếp theo sẽ có sau [number] giây!
placeholders:
infinite: Vô hạn
+ gui:
+ titles:
+ phases: '&0&l Giai đoạn OneBlock'
+ buttons:
+ previous:
+ name: '&f&l Trang trước'
+ description: '&7 Chuyển sang trang [number]'
+ next:
+ name: '&f&l Trang tiếp theo'
+ description: '& Chuyển sang trang [number]'
+ phase:
+ name: '&f&l [phase]'
+ description: |-
+ [starting-block]
+ [biome]
+ [bank]
+ [economy]
+ [level]
+ [permission]
+ [blocks]
+ starting-block: '&7 Bắt đầu sau khi phá vỡ &e [number] khối.'
+ biome: '&7 Biome: &e [biome]'
+ bank: '&7 Yêu cầu 7e $[number] &7 trong tài khoản ngân hàng.'
+ economy: '&7 Yêu cầu &e $[number] &7 trong tài khoản người chơi.'
+ level: '&7 Yêu cầu &e[number] &7 cấp đảo.'
+ permission: '&7 Yêu cầu `&e[permission]&7` quyền.'
+ blocks-prefix: '&7 Khối trong giai đoạn -'
+ blocks: '&e [name], '
+ wrap-at: '50'
+ tips:
+ click-to-previous: '&e Bấm &7 để xem trang trước.'
+ click-to-next: '&e Bấm &7 để xem trang tiếp theo.'
+ click-to-change: '&e Bấm &7 để thay đổi.'
island:
starting-hologram: |-
&aChào mừng đến với OneBlock
diff --git a/src/main/resources/locales/zh-CN.yml b/src/main/resources/locales/zh-CN.yml
index c1767d79..1d33b340 100644
--- a/src/main/resources/locales/zh-CN.yml
+++ b/src/main/resources/locales/zh-CN.yml
@@ -1,66 +1,90 @@
----
+protection:
+ flags:
+ START_SAFETY:
+ name: 开始安全
+ description: |
+ &b 防止新球员
+ &b 从移动1分钟
+ &b 所以他们不会掉下来。
+ hint: '&c 移动被阻塞,以确保[number]更多秒!'
+ free-to-move: '&a 您可以自由移动。'
+ ONEBLOCK_BOSSBAR:
+ name: 老板酒吧
+ description: |
+ &b 显示状态栏
+ &b 对于每个阶段。
aoneblock:
+ bossbar:
+ title: 剩余的块
+ status: '&a 相位块&b [done] &d / &b [total]'
+ color: RED
+ style: SEGMENTED_20
+ not-active: '&c 老板酒吧对这个岛不活跃'
commands:
admin:
setcount:
- parameters: "<玩家名称> <数量>"
+ parameters: <玩家名称> <数量>
description: 设置玩家挖掘的方块数
- set: "&a [name] 挖掘的方块数已设置为 [number]"
- set-lifetime: "&a [name] 的重置次数已设置为 [number]"
+ set: '&a [name] 挖掘的方块数已设置为 [number]'
+ set-lifetime: '&a [name] 的重置次数已设置为 [number]'
setchest:
- parameters: "<阶段> <稀有度>"
+ parameters: <阶段> <稀有度>
description: 将您光标指向的箱子添加到一个阶段中, 并选择稀有度
- chest-is-empty: "&c 该箱子无法添加, 因为它是空的"
- unknown-phase: "&c 未知阶段. 用 Tab 补全来查看所有阶段"
- unknown-rarity: "&c 未知稀有度. 可使用的有 COMMON, UNCOMMON, RARE 或 EPIC"
- look-at-chest: "&c 将光标指向一个包含物品的箱子来设置它"
- only-single-chest: "&c 只能设置单个箱子"
- success: "&a 成功将箱子添加到该阶段"
- failure: "&c 无法添加箱子到该阶段! 报错已在后台生成"
+ chest-is-empty: '&c 该箱子无法添加, 因为它是空的'
+ unknown-phase: '&c 未知阶段. 用 Tab 补全来查看所有阶段'
+ unknown-rarity: '&c 未知稀有度. 可使用的有 COMMON, UNCOMMON, RARE 或 EPIC'
+ look-at-chest: '&c 将光标指向一个包含物品的箱子来设置它'
+ only-single-chest: '&c 只能设置单个箱子'
+ success: '&a 成功将箱子添加到该阶段'
+ failure: '&c 无法添加箱子到该阶段! 报错已在后台生成'
sanity:
- parameters: "<阶段>"
+ parameters: <阶段>
description: 在后台生成一份关于各阶段所占百分比的完整报告
- see-console: "&a 报告已在后台生成"
+ see-console: '&a 报告已在后台生成'
count:
description: 显示方块数量和阶段
- info: "&a 您当前挖掘的方块数量是 &b [number], 为 &a [name] 阶段"
+ info: '&a 您当前挖掘的方块数量是 &b [number], 为 &a [name] 阶段'
info:
- count: "&a 岛位于 &b [name] &a 阶段的 &b [number]&a 区块。生命周期计数 &b [lifetime] &a。"
+ count: '&a 岛位于 &b [name] &a 阶段的 &b [number]&a 区块。生命周期计数 &b [lifetime] &a。'
phases:
description: 显示所有阶段的列表
- title: "&2 OneBlock 阶段"
- name-syntax: "&a [name]"
- description-syntax: "&b 挖掘了 [number] 个方块"
+ title: '&2 OneBlock 阶段'
+ name-syntax: '&a [name]'
+ description-syntax: '&b 挖掘了 [number] 个方块'
island:
+ bossbar:
+ description: 切换相位栏
+ status_on: '&b Bossbar turned &a on'
+ status_off: '&b Bossbar turned &c off'
setcount:
- parameters: ""
+ parameters:
description: 将块计数设置为先前完成的值
- set: "&a 数量设置为 [number]."
- too-high: "&c 你最大只能设置 [number]!"
+ set: '&a 数量设置为 [number].'
+ too-high: '&c 你最大只能设置 [number]!'
respawn-block:
description: 在魔法块消失的情况下重生
- block-exist: "&a 块存在,不需要重生。我给你标记了。"
- block-respawned: "&a 块重生。"
+ block-exist: '&a 块存在,不需要重生。我给你标记了。'
+ block-respawned: '&a 块重生。'
phase:
- insufficient-level: "&c 岛屿等级过低, 无法执行此操作! 等级必须达到 [number]."
- insufficient-funds: "&c 余额不足, 无法执行此操作! 余额应多于 [number]."
- insufficient-bank-balance: "&c 岛屿银行余额不足, 无法执行此操作! 余额应多于 [number]."
- insufficient-permission: "&c 在获得 [name] 许可之前,您不能继续操作!"
- cooldown: "&c [number] 秒后即可进入下一阶段!"
+ insufficient-level: '&c 岛屿等级过低, 无法执行此操作! 等级必须达到 [number].'
+ insufficient-funds: '&c 余额不足, 无法执行此操作! 余额应多于 [number].'
+ insufficient-bank-balance: '&c 岛屿银行余额不足, 无法执行此操作! 余额应多于 [number].'
+ insufficient-permission: '&c 在获得 [name] 许可之前,您不能继续操作!'
+ cooldown: '&c [number] 秒后即可进入下一阶段!'
placeholders:
infinite: 无限
gui:
titles:
- phases: "&0&l OneBlock 阶段"
+ phases: '&0&l OneBlock 阶段'
buttons:
previous:
- name: "&f&l 上一页"
- description: "&7 切换到[number]页"
+ name: '&f&l 上一页'
+ description: '&7 切换到[number]页'
next:
- name: "&f&l 下一页"
- description: "&7 切换到[number]页"
+ name: '&f&l 下一页'
+ description: '&7 切换到[number]页'
phase:
- name: "&f&l [phase]"
+ name: '&f&l [phase]'
description: |-
[starting-block]
[biome]
@@ -68,16 +92,19 @@ aoneblock:
[economy]
[level]
[permission]
- starting-block: "&7 在破坏 &e [number] 块后开始。"
- biome: "&7 生物群落:&e [biome]"
- bank: "&7 需要银行帐户中有 &e $[number] &7。"
- economy: "&7 需要玩家帐户中有 &e $[number] &7。"
- level: "&7 需要 &e [number] &7 岛屿等级。"
- permission: "&7 需要 `&e[permission]&7` 权限。"
+ starting-block: '&7 在破坏 &e [number] 块后开始。'
+ biome: '&7 生物群落:&e [biome]'
+ bank: '&7 需要银行帐户中有 &e $[number] &7。'
+ economy: '&7 需要玩家帐户中有 &e $[number] &7。'
+ level: '&7 需要 &e [number] &7 岛屿等级。'
+ permission: '&7 需要 `&e[permission]&7` 权限。'
+ blocks-prefix: '&7 阶段块 - '
+ blocks: '&e [name], '
+ wrap-at: '50'
tips:
- click-to-previous: "&e 单击&7 查看上一页。"
- click-to-next: "&e 单击 &7 查看下一页。"
- click-to-change: "&e 单击 &7 进行更改。"
+ click-to-previous: '&e 单击&7 查看上一页。'
+ click-to-next: '&e 单击 &7 查看下一页。'
+ click-to-change: '&e 单击 &7 进行更改。'
island:
starting-hologram: |-
&a欢迎来到 AOneBlock
diff --git a/src/main/resources/locales/zh-TW.yml b/src/main/resources/locales/zh-TW.yml
index 4565d1ab..24c830fb 100644
--- a/src/main/resources/locales/zh-TW.yml
+++ b/src/main/resources/locales/zh-TW.yml
@@ -1,66 +1,90 @@
----
+protection:
+ flags:
+ START_SAFETY:
+ name: 開始安全
+ description: |
+ &b 防止新球員
+ &b 從移動1分鐘
+ &b 所以他們不會掉下來。
+ hint: '&c 移動被阻塞,以確保[number]更多秒!'
+ free-to-move: '&a 您可以自由移動。當心!'
+ ONEBLOCK_BOSSBAR:
+ name: 老闆酒吧
+ description: |
+ &b 顯示狀態欄
+ &b 對於每個階段。
aoneblock:
+ bossbar:
+ title: 剩餘的塊
+ status: '&a 相位塊&b [done] &d / &b [total]'
+ color: RED
+ style: SEGMENTED_20
+ not-active: '&c 老闆酒吧對這個島不活躍'
commands:
admin:
setcount:
- parameters: "<名稱> <計數>"
+ parameters: <名稱> <計數>
description: 設置玩家的蓋帽數
set: a [name]的計數設置為[number]
- set-lifetime: "&a [name] 的生命週期計數設定為 [number]"
+ set-lifetime: '&a [name] 的生命週期計數設定為 [number]'
setchest:
- parameters: "<階段> <稀有>"
+ parameters: <階段> <稀有>
description: 將所看的箱子放在指定稀有度的階段
- chest-is-empty: "&c該箱子為空,因此無法添加"
- unknown-phase: "&c未知階段。使用製表符完成功能來查看它們"
- unknown-rarity: "&c未知稀有。使用COMMON,UNCOMMON,RARE或EPIC"
- look-at-chest: "&c看看裝滿的箱子"
- only-single-chest: "&c只能設置單個箱子"
- success: "&a 箱子成功添加"
- failure: "&c 無法將胸部添加到該階段! 請參閱控制台以獲取錯誤"
+ chest-is-empty: &c該箱子為空,因此無法添加
+ unknown-phase: &c未知階段。使用製表符完成功能來查看它們
+ unknown-rarity: &c未知稀有。使用COMMON,UNCOMMON,RARE或EPIC
+ look-at-chest: &c看看裝滿的箱子
+ only-single-chest: &c只能設置單個箱子
+ success: '&a 箱子成功添加'
+ failure: &c 無法將胸部添加到該階段! 請參閱控制台以獲取錯誤
sanity:
- parameters: "<階段>"
+ parameters: <階段>
description: 在控制台中顯示相概率的健全性檢查
- see-console: "&a請參閱控制台以獲取報告"
+ see-console: &a請參閱控制台以獲取報告
count:
description: 顯示塊數和相位
- info: "&a您正在&a[name]]階段中阻止&b[number]"
+ info: '&a您正在&a[name]]階段中阻止&b[number]'
info:
- count: "&a 島位於 &b [names] &a 階段的 &b [number]&a 區塊。生命週期計數 &b [lifetime] &a。"
+ count: '&a 島位於 &b [names] &a 階段的 &b [number]&a 區塊。生命週期計數 &b [lifetime] &a。'
phases:
description: 顯示所有階段的列表
- title: "&2 OneBlock階段"
- name-syntax: "&a [name]"
- description-syntax: "&b [number]塊"
+ title: &2 OneBlock階段
+ name-syntax: '&a [name]'
+ description-syntax: '&b [number]塊'
island:
+ bossbar:
+ description: 切換相位欄
+ status_on: '&b Bossbar&a 打開'
+ status_off: '&b Bossbar&c 關閉'
setcount:
- parameters: "<計數>"
+ parameters: <計數>
description: 將區塊計數設定為之前完成的值
- set: "&a 計數設定為 [number]。"
- too-high: "&c 您可以設定的最大值是[number]!"
+ set: '&a 計數設定為 [number]。'
+ too-high: '&c 您可以設定的最大值是[number]!'
respawn-block:
description: 在魔法塊消失的情況下重生
- block-exist: "&a 塊存在,不需要重生。我給你標記了。"
- block-respawned: "&a 塊重生。"
+ block-exist: '&a 塊存在,不需要重生。我給你標記了。'
+ block-respawned: '&a 塊重生。'
phase:
- insufficient-level: "&c 你的島嶼等級太低,無法繼續!必須是[number]。"
- insufficient-funds: "&c 您的資金太低,無法繼續!他們必須是[數字]。"
- insufficient-bank-balance: "&c 島上銀行餘額太低,無法繼續!必須是[number]。"
- insufficient-permission: "&c 在獲得 [name] 許可之前,您不能繼續操作!"
- cooldown: "&c [number] 秒後即可進入下一階段!"
+ insufficient-level: '&c 你的島嶼等級太低,無法繼續!必須是[number]。'
+ insufficient-funds: '&c 您的資金太低,無法繼續!他們必須是[數字]。'
+ insufficient-bank-balance: '&c 島上銀行餘額太低,無法繼續!必須是[number]。'
+ insufficient-permission: '&c 在獲得 [name] 許可之前,您不能繼續操作!'
+ cooldown: '&c [number] 秒後即可進入下一階段!'
placeholders:
infinite: 無窮
gui:
titles:
- phases: "&0&l OneBlock 階段"
+ phases: '&0&l OneBlock 階段'
buttons:
previous:
- name: "&f&l 上一頁"
- description: "&7 切換到[number]頁"
+ name: '&f&l 上一頁'
+ description: '&7 切換到[number]頁'
next:
- name: "&f&l 下一頁"
- description: "&7 切換到[number]頁"
+ name: '&f&l 下一頁'
+ description: '&7 切換到[number]頁'
phase:
- name: "&f&l [階段]"
+ name: '&f&l [階段]'
description: |-
[starting-block]
[biome]
@@ -68,16 +92,19 @@ aoneblock:
[economy]
[level]
[permission]
- starting-block: "&7 在破壞 &e [number] 區塊後開始。"
- biome: "&7 生物群落:&e [biome]"
- bank: "&7 需要銀行帳戶中有 &e $[number] &7。"
- economy: "&7 需要玩家帳號中有 &e $[number] &7。"
- level: "&7 需要 &e [number] &7 島嶼等級。"
- permission: "&7 需要 `&e[permission]&7` 權限。"
+ starting-block: '&7 在破壞 &e [number] 區塊後開始。'
+ biome: '&7 生物群落:&e [biome]'
+ bank: '&7 需要銀行帳戶中有 &e $[number] &7。'
+ economy: '&7 需要玩家帳號中有 &e $[number] &7。'
+ level: '&7 需要 &e [number] &7 島嶼等級。'
+ permission: '&7 需要 `&e[permission]&7` 權限。'
+ blocks-prefix: '&7 階段塊 - '
+ blocks: '&e [name], '
+ wrap-at: '50'
tips:
- click-to-previous: "&e 點選&7 查看上一頁。"
- click-to-next: "&e 點選&7 查看下一頁。"
- click-to-change: "&e 點選 &7 進行更改。"
+ click-to-previous: '&e 點選&7 查看上一頁。'
+ click-to-next: '&e 點選&7 查看下一頁。'
+ click-to-change: '&e 點選 &7 進行更改。'
island:
starting-hologram: |-
&a歡迎來到 AOneBlock
diff --git a/src/main/resources/panels/phases_panel.yml b/src/main/resources/panels/phases_panel.yml
index 20c56b61..1b7ba54e 100644
--- a/src/main/resources/panels/phases_panel.yml
+++ b/src/main/resources/panels/phases_panel.yml
@@ -23,7 +23,7 @@ phases_panel:
# green, blue as 2 hex digits each and convert that number into a decimal, using a hex to decimal calculator.
3:
1:
- icon: tipped_arrow{CustomPotionColor:11546150}
+ icon: tipped_arrow[potion_contents={custom_color:11546150}]
title: aoneblock.gui.buttons.previous.name
description: aoneblock.gui.buttons.previous.description
data:
@@ -41,7 +41,7 @@ phases_panel:
7: phase_button
8: phase_button
9:
- icon: tipped_arrow{CustomPotionColor:8439583}
+ icon: tipped_arrow[potion_contents={custom_color:8439583}]
title: aoneblock.gui.buttons.next.name
description: aoneblock.gui.buttons.next.description
data:
diff --git a/src/main/resources/phases/12000_lush_caves.yml b/src/main/resources/phases/12000_lush_caves.yml
new file mode 100644
index 00000000..82e74902
--- /dev/null
+++ b/src/main/resources/phases/12000_lush_caves.yml
@@ -0,0 +1,43 @@
+'12000':
+ name: Lush Caves
+ icon: MOSS_BLOCK
+ firstBlock: MOSS_BLOCK
+ biome: LUSH_CAVES
+ fixedBlocks:
+ '0': MOSS_BLOCK
+ '1': MOSS_CARPET
+ '2': AZALEA
+ '3': AZALEA_LEAVES
+ '4': MOSSY_COBBLESTONE
+ '5': SPORE_BLOSSOM
+ blocks:
+ CHEST: 60
+ GLOW_LICHEN: 50
+ CAVE_VINES_PLANT: 60
+ AZALEA_LEAVES: 80
+ SPORE_BLOSSOM: 40
+ MOSSY_COBBLESTONE: 150
+ STONE: 500
+ MOSSY_STONE_BRICKS: 100
+ CAVE_VINES: 60
+ MOSS_BLOCK: 300
+ MOSS_CARPET: 200
+ AZALEA: 100
+ ROOTED_DIRT: 100
+ mobs:
+ AXOLOTL: 20
+ BAT: 150
+ GLOW_SQUID: 20
+ CREEPER: 50
+ SKELETON: 50
+ SLIME: 50
+ SPIDER: 50
+ ZOMBIE: 55
+ ENDERMAN: 5
+ WITCH: 3
+ ZOMBIE_VILLAGER: 3
+ TROPICAL_FISH: 20
+ holograms:
+ '0': '&aWelcome to the Lush Caves!'
+ start-commands: []
+ end-commands: []
diff --git a/src/main/resources/phases/12000_lush_caves_chests.yml b/src/main/resources/phases/12000_lush_caves_chests.yml
new file mode 100644
index 00000000..4894ccd1
--- /dev/null
+++ b/src/main/resources/phases/12000_lush_caves_chests.yml
@@ -0,0 +1,422 @@
+'12000':
+ chests:
+ '1':
+ contents:
+ 0:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:azalea
+ count: 1
+ schema_version: 1
+ 16:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:glow_berries
+ count: 1
+ schema_version: 1
+ 18:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:azalea
+ count: 1
+ schema_version: 1
+ 8:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:azalea
+ count: 1
+ schema_version: 1
+ 10:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:glow_berries
+ count: 1
+ schema_version: 1
+ 26:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:azalea
+ count: 1
+ schema_version: 1
+ 11:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:glow_berries
+ count: 1
+ schema_version: 1
+ 12:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:glow_berries
+ count: 1
+ schema_version: 1
+ 13:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:glow_berries
+ count: 1
+ schema_version: 1
+ 14:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:glow_berries
+ count: 1
+ schema_version: 1
+ 15:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:glow_berries
+ count: 1
+ schema_version: 1
+ rarity: COMMON
+ '2':
+ contents:
+ 3:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:torch
+ count: 1
+ schema_version: 1
+ 5:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:torch
+ count: 1
+ schema_version: 1
+ 21:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:iron_ingot
+ count: 1
+ schema_version: 1
+ 23:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:iron_ingot
+ count: 1
+ schema_version: 1
+ 11:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:torch
+ count: 1
+ schema_version: 1
+ 12:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:moss_carpet
+ count: 1
+ schema_version: 1
+ 13:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:torch
+ count: 1
+ schema_version: 1
+ 14:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:moss_carpet
+ count: 1
+ schema_version: 1
+ 15:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:torch
+ count: 1
+ schema_version: 1
+ rarity: COMMON
+ '3':
+ contents:
+ 16:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:oak_planks
+ count: 1
+ schema_version: 1
+ 1:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:coal_block
+ count: 1
+ schema_version: 1
+ 19:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:bread
+ count: 1
+ schema_version: 1
+ 4:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:azalea
+ count: 1
+ schema_version: 1
+ 22:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:torch
+ count: 1
+ schema_version: 1
+ 24:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:glow_berries
+ count: 1
+ schema_version: 1
+ 11:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:experience_bottle
+ count: 1
+ schema_version: 1
+ 14:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:iron_ingot
+ count: 1
+ schema_version: 1
+ rarity: UNCOMMON
+ '4':
+ contents:
+ 0:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:moss_carpet
+ count: 1
+ schema_version: 1
+ 1:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:azalea
+ count: 1
+ schema_version: 1
+ 2:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:moss_carpet
+ count: 1
+ schema_version: 1
+ 3:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:moss_carpet
+ count: 1
+ schema_version: 1
+ 4:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:moss_carpet
+ count: 1
+ schema_version: 1
+ 5:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:moss_carpet
+ count: 1
+ schema_version: 1
+ 6:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:moss_carpet
+ count: 1
+ schema_version: 1
+ 7:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:azalea
+ count: 1
+ schema_version: 1
+ 8:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:moss_carpet
+ count: 1
+ schema_version: 1
+ 12:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:emerald_block
+ count: 1
+ schema_version: 1
+ 13:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:emerald_block
+ count: 1
+ schema_version: 1
+ 14:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:emerald_block
+ count: 1
+ schema_version: 1
+ 18:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:moss_carpet
+ count: 1
+ schema_version: 1
+ 19:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:azalea
+ count: 1
+ schema_version: 1
+ 20:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:moss_carpet
+ count: 1
+ schema_version: 1
+ 21:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:moss_carpet
+ count: 1
+ schema_version: 1
+ 22:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:moss_carpet
+ count: 1
+ schema_version: 1
+ 23:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:moss_carpet
+ count: 1
+ schema_version: 1
+ 24:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:moss_carpet
+ count: 1
+ schema_version: 1
+ 25:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:azalea
+ count: 1
+ schema_version: 1
+ 26:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:moss_carpet
+ count: 1
+ schema_version: 1
+ rarity: RARE
+ '5':
+ contents:
+ 2:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:moss_carpet
+ count: 1
+ schema_version: 1
+ 3:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:moss_carpet
+ count: 1
+ schema_version: 1
+ 4:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:moss_carpet
+ count: 1
+ schema_version: 1
+ 5:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:moss_carpet
+ count: 1
+ schema_version: 1
+ 6:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:moss_carpet
+ count: 1
+ schema_version: 1
+ 11:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:experience_bottle
+ count: 1
+ schema_version: 1
+ 12:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:experience_bottle
+ count: 1
+ schema_version: 1
+ 13:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:experience_bottle
+ count: 1
+ schema_version: 1
+ 14:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:experience_bottle
+ count: 1
+ schema_version: 1
+ 15:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:experience_bottle
+ count: 1
+ schema_version: 1
+ 20:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:glow_berries
+ count: 1
+ schema_version: 1
+ 21:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:glow_berries
+ count: 1
+ schema_version: 1
+ 22:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:glow_berries
+ count: 1
+ schema_version: 1
+ 23:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:glow_berries
+ count: 1
+ schema_version: 1
+ 24:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:glow_berries
+ count: 1
+ schema_version: 1
+ rarity: RARE
+ '6':
+ contents:
+ 12:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:glow_berries
+ count: 1
+ schema_version: 1
+ 13:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:axolotl_bucket
+ count: 1
+ schema_version: 1
+ 14:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:glow_berries
+ count: 1
+ schema_version: 1
+ rarity: EPIC
diff --git a/src/main/resources/phases/12500_dripstone_caves.yml b/src/main/resources/phases/12500_dripstone_caves.yml
new file mode 100644
index 00000000..9af88e8b
--- /dev/null
+++ b/src/main/resources/phases/12500_dripstone_caves.yml
@@ -0,0 +1,40 @@
+'12500':
+ name: Dripstone Caves
+ icon: DRIPSTONE_BLOCK
+ firstBlock: DRIPSTONE_BLOCK
+ biome: DRIPSTONE_CAVES
+ fixedBlocks:
+ '0': DRIPSTONE_BLOCK
+ '1': POINTED_DRIPSTONE
+ '2': TUFF
+ '3': CALCITE
+ '4': ANDESITE
+ '5': DIORITE
+ blocks:
+ CHEST: 60
+ DRIPSTONE_BLOCK: 200
+ ANDESITE: 100
+ COBBLESTONE: 100
+ COPPER_ORE: 100
+ CALCITE: 150
+ STONE: 500
+ GRANITE: 100
+ DIORITE: 100
+ POINTED_DRIPSTONE: 200
+ TUFF: 150
+ mobs:
+ BAT: 200
+ GLOW_SQUID: 20
+ CREEPER: 50
+ SKELETON: 50
+ SLIME: 50
+ SPIDER: 50
+ ZOMBIE: 55
+ ENDERMAN: 5
+ WITCH: 3
+ ZOMBIE_VILLAGER: 3
+ DROWNED: 40
+ holograms:
+ '0': '&bProceed with caution!'
+ start-commands: []
+ end-commands: []
diff --git a/src/main/resources/phases/12500_dripstone_caves_chests.yml b/src/main/resources/phases/12500_dripstone_caves_chests.yml
new file mode 100644
index 00000000..f2c51003
--- /dev/null
+++ b/src/main/resources/phases/12500_dripstone_caves_chests.yml
@@ -0,0 +1,248 @@
+'12500':
+ chests:
+ '1':
+ contents:
+ 4:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:pointed_dripstone
+ count: 1
+ schema_version: 1
+ 22:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:dripstone_block
+ count: 1
+ schema_version: 1
+ 12:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:iron_ingot
+ count: 4
+ schema_version: 1
+ 13:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:bread
+ count: 4
+ schema_version: 1
+ 14:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:coal
+ count: 4
+ schema_version: 1
+ rarity: COMMON
+ '2':
+ contents:
+ 0:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:pointed_dripstone
+ count: 1
+ schema_version: 1
+ 18:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:pointed_dripstone
+ count: 1
+ schema_version: 1
+ 4:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:dripstone_block
+ count: 1
+ schema_version: 1
+ 22:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:dripstone_block
+ count: 1
+ schema_version: 1
+ 8:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:pointed_dripstone
+ count: 1
+ schema_version: 1
+ 26:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:pointed_dripstone
+ count: 1
+ schema_version: 1
+ 11:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:dripstone_block
+ count: 1
+ schema_version: 1
+ 13:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:bread
+ count: 3
+ schema_version: 1
+ 15:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:gold_ingot
+ count: 4
+ schema_version: 1
+ rarity: UNCOMMON
+ '3':
+ contents:
+ 1:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:copper_ingot
+ count: 1
+ schema_version: 1
+ 2:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:copper_ingot
+ count: 1
+ schema_version: 1
+ 3:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:copper_ingot
+ count: 1
+ schema_version: 1
+ 20:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:pointed_dripstone
+ count: 1
+ schema_version: 1
+ 5:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:copper_ingot
+ count: 1
+ schema_version: 1
+ 6:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:copper_ingot
+ count: 1
+ schema_version: 1
+ 22:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:coal
+ count: 3
+ schema_version: 1
+ 7:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:copper_ingot
+ count: 1
+ schema_version: 1
+ 24:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:pointed_dripstone
+ count: 1
+ schema_version: 1
+ 11:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:dripstone_block
+ count: 1
+ schema_version: 1
+ 15:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:dripstone_block
+ count: 1
+ schema_version: 1
+ rarity: UNCOMMON
+ '4':
+ contents:
+ 1:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:pointed_dripstone
+ count: 1
+ schema_version: 1
+ 2:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:pointed_dripstone
+ count: 1
+ schema_version: 1
+ 3:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:pointed_dripstone
+ count: 1
+ schema_version: 1
+ 5:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:pointed_dripstone
+ count: 1
+ schema_version: 1
+ 6:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:pointed_dripstone
+ count: 1
+ schema_version: 1
+ 7:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:pointed_dripstone
+ count: 1
+ schema_version: 1
+ 10:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:gold_ingot
+ count: 1
+ schema_version: 1
+ 11:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:gold_ingot
+ count: 1
+ schema_version: 1
+ 12:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:gold_ingot
+ count: 1
+ schema_version: 1
+ 14:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:gold_ingot
+ count: 1
+ schema_version: 1
+ 15:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:gold_ingot
+ count: 1
+ schema_version: 1
+ 16:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:gold_ingot
+ count: 1
+ schema_version: 1
+ 20:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:bucket
+ count: 1
+ schema_version: 1
+ 24:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:bucket
+ count: 1
+ schema_version: 1
+ rarity: RARE
diff --git a/src/main/resources/phases/13000_mangrove_swamp.yml b/src/main/resources/phases/13000_mangrove_swamp.yml
new file mode 100644
index 00000000..7aaad451
--- /dev/null
+++ b/src/main/resources/phases/13000_mangrove_swamp.yml
@@ -0,0 +1,47 @@
+'13000':
+ name: Mangrove Swamp
+ icon: MANGROVE_LOG
+ firstBlock: MANGROVE_LOG
+ biome: MANGROVE_SWAMP
+ fixedBlocks:
+ '0': MANGROVE_LOG
+ '1': MUD
+ '2': MANGROVE_ROOTS
+ '3': MANGROVE_LEAVES
+ '4': MANGROVE_PROPAGULE
+ '5': ROOTED_DIRT
+ blocks:
+ MANGROVE_PROPAGULE: 50
+ CHEST: 60
+ SAND: 50
+ MUD: 200
+ MANGROVE_PLANKS: 200
+ DIRT: 300
+ MANGROVE_ROOTS: 100
+ MANGROVE_LEAVES: 100
+ COBBLESTONE: 100
+ STONE: 200
+ MANGROVE_LOG: 300
+ VINE: 80
+ ROOTED_DIRT: 100
+ mobs:
+ FROG: 100
+ CREEPER: 50
+ SKELETON: 50
+ SLIME: 50
+ SPIDER: 50
+ ZOMBIE: 55
+ ENDERMAN: 5
+ WITCH: 3
+ ZOMBIE_VILLAGER: 3
+ SHEEP: 110
+ CHICKEN: 100
+ PIG: 100
+ COW: 80
+ GLOW_SQUID: 5
+ BAT: 5
+ TROPICAL_FISH: 5
+ holograms:
+ '0': '&2The waters here are murky...'
+ start-commands: []
+ end-commands: []
diff --git a/src/main/resources/phases/13000_mangrove_swamp_chests.yml b/src/main/resources/phases/13000_mangrove_swamp_chests.yml
new file mode 100644
index 00000000..06f85824
--- /dev/null
+++ b/src/main/resources/phases/13000_mangrove_swamp_chests.yml
@@ -0,0 +1,263 @@
+'13000':
+ chests:
+ '1':
+ contents:
+ 21:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:mud
+ count: 1
+ schema_version: 1
+ 22:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:muddy_mangrove_roots
+ count: 1
+ schema_version: 1
+ 23:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:mud
+ count: 1
+ schema_version: 1
+ 12:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:muddy_mangrove_roots
+ count: 1
+ schema_version: 1
+ 13:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:mangrove_propagule
+ count: 1
+ schema_version: 1
+ 14:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:muddy_mangrove_roots
+ count: 1
+ schema_version: 1
+ rarity: COMMON
+ '2':
+ contents:
+ 3:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:torch
+ count: 1
+ schema_version: 1
+ 4:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:torch
+ count: 1
+ schema_version: 1
+ 5:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:torch
+ count: 1
+ schema_version: 1
+ 21:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:mud
+ count: 1
+ schema_version: 1
+ 22:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:muddy_mangrove_roots
+ count: 1
+ schema_version: 1
+ 23:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:mud
+ count: 1
+ schema_version: 1
+ 12:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:muddy_mangrove_roots
+ count: 1
+ schema_version: 1
+ 13:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:bread
+ count: 3
+ schema_version: 1
+ 14:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:muddy_mangrove_roots
+ count: 1
+ schema_version: 1
+ rarity: COMMON
+ '3':
+ contents:
+ 16:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:lead
+ count: 1
+ schema_version: 1
+ 1:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:mangrove_propagule
+ count: 1
+ schema_version: 1
+ 3:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:torch
+ count: 1
+ schema_version: 1
+ 19:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:bread
+ count: 3
+ schema_version: 1
+ 5:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:torch
+ count: 1
+ schema_version: 1
+ 24:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:mud
+ count: 1
+ schema_version: 1
+ 25:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:mud
+ count: 1
+ schema_version: 1
+ 26:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:mud
+ count: 1
+ schema_version: 1
+ 12:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:muddy_mangrove_roots
+ count: 1
+ schema_version: 1
+ 14:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:muddy_mangrove_roots
+ count: 1
+ schema_version: 1
+ rarity: COMMON
+ '4':
+ contents:
+ 4:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:lead
+ count: 1
+ schema_version: 1
+ 21:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:mud
+ count: 1
+ schema_version: 1
+ 22:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:muddy_mangrove_roots
+ count: 1
+ schema_version: 1
+ 23:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:mud
+ count: 1
+ schema_version: 1
+ 12:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:muddy_mangrove_roots
+ count: 1
+ schema_version: 1
+ 13:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:frog_spawn_egg
+ count: 1
+ schema_version: 1
+ 14:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:muddy_mangrove_roots
+ count: 1
+ schema_version: 1
+ rarity: UNCOMMON
+ '5':
+ contents:
+ 3:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:mangrove_propagule
+ count: 1
+ schema_version: 1
+ 4:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:muddy_mangrove_roots
+ count: 1
+ schema_version: 1
+ 5:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:mangrove_propagule
+ count: 1
+ schema_version: 1
+ 21:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:mud
+ count: 1
+ schema_version: 1
+ 22:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:muddy_mangrove_roots
+ count: 1
+ schema_version: 1
+ 23:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:mud
+ count: 1
+ schema_version: 1
+ 12:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:muddy_mangrove_roots
+ count: 1
+ schema_version: 1
+ 13:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:compass
+ count: 1
+ schema_version: 1
+ 14:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:muddy_mangrove_roots
+ count: 1
+ schema_version: 1
+ rarity: RARE
diff --git a/src/main/resources/phases/13500_meadow.yml b/src/main/resources/phases/13500_meadow.yml
new file mode 100644
index 00000000..d8dfdc6e
--- /dev/null
+++ b/src/main/resources/phases/13500_meadow.yml
@@ -0,0 +1,54 @@
+'13500':
+ name: Meadow
+ icon: DANDELION
+ firstBlock: GRASS_BLOCK
+ biome: MEADOW
+ fixedBlocks:
+ '0': GRASS_BLOCK
+ '1': TALL_GRASS
+ '2': DANDELION
+ '3': POPPY
+ '4': OXEYE_DAISY
+ '5': LILY_PAD
+ blocks:
+ COBBLESTONE: 100
+ BIRCH_LOG: 100
+ OAK_LOG: 100
+ OAK_LEAVES: 50
+ BIRCH_LEAVES: 50
+ BEE_NEST: 20
+ STONE: 100
+ EMERALD_ORE: 10
+ INFESTED_STONE: 10
+ CHEST: 40
+ DIORITE: 50
+ OXEYE_DAISY: 80
+ GRASS_BLOCK: 300
+ HAY_BLOCK: 100
+ LILY_PAD: 50
+ DIRT: 200
+ ANDESITE: 50
+ DANDELION: 100
+ GRANITE: 50
+ WHITE_WOOL: 80
+ TALL_GRASS: 200
+ POPPY: 80
+ mobs:
+ BAT: 5
+ BEE: 80
+ SHEEP: 100
+ GLOW_SQUID: 2
+ CREEPER: 50
+ SKELETON: 50
+ SLIME: 50
+ SPIDER: 50
+ ZOMBIE: 55
+ ENDERMAN: 5
+ WITCH: 3
+ ZOMBIE_VILLAGER: 3
+ RABBIT: 40
+ DONKEY: 40
+ holograms:
+ '0': '&dA peaceful meadow!'
+ start-commands: []
+ end-commands: []
diff --git a/src/main/resources/phases/13500_meadow_chests.yml b/src/main/resources/phases/13500_meadow_chests.yml
new file mode 100644
index 00000000..da66da15
--- /dev/null
+++ b/src/main/resources/phases/13500_meadow_chests.yml
@@ -0,0 +1,641 @@
+'13500':
+ chests:
+ '1':
+ contents:
+ 0:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:oxeye_daisy
+ count: 1
+ schema_version: 1
+ 1:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:oxeye_daisy
+ count: 1
+ schema_version: 1
+ 2:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:oxeye_daisy
+ count: 1
+ schema_version: 1
+ 3:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:oxeye_daisy
+ count: 1
+ schema_version: 1
+ 4:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:oxeye_daisy
+ count: 1
+ schema_version: 1
+ 5:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:oxeye_daisy
+ count: 1
+ schema_version: 1
+ 6:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:oxeye_daisy
+ count: 1
+ schema_version: 1
+ 7:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:oxeye_daisy
+ count: 1
+ schema_version: 1
+ 8:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:oxeye_daisy
+ count: 1
+ schema_version: 1
+ 9:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:dandelion
+ count: 1
+ schema_version: 1
+ 10:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:dandelion
+ count: 1
+ schema_version: 1
+ 11:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:apple
+ count: 1
+ schema_version: 1
+ 12:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:dandelion
+ count: 1
+ schema_version: 1
+ 13:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:dandelion
+ count: 1
+ schema_version: 1
+ 14:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:apple
+ count: 1
+ schema_version: 1
+ 15:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:dandelion
+ count: 1
+ schema_version: 1
+ 16:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:dandelion
+ count: 1
+ schema_version: 1
+ 17:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:dandelion
+ count: 1
+ schema_version: 1
+ 18:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:poppy
+ count: 1
+ schema_version: 1
+ 19:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:poppy
+ count: 1
+ schema_version: 1
+ 20:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:poppy
+ count: 1
+ schema_version: 1
+ 21:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:poppy
+ count: 1
+ schema_version: 1
+ 22:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:poppy
+ count: 1
+ schema_version: 1
+ 23:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:poppy
+ count: 1
+ schema_version: 1
+ 24:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:poppy
+ count: 1
+ schema_version: 1
+ 25:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:poppy
+ count: 1
+ schema_version: 1
+ 26:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:poppy
+ count: 1
+ schema_version: 1
+ rarity: COMMON
+ '2':
+ contents:
+ 0:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:poppy
+ count: 1
+ schema_version: 1
+ 1:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:leather
+ count: 1
+ schema_version: 1
+ 2:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:leather
+ count: 1
+ schema_version: 1
+ 3:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:apple
+ count: 1
+ schema_version: 1
+ 5:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:apple
+ count: 1
+ schema_version: 1
+ 6:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:leather
+ count: 1
+ schema_version: 1
+ 7:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:leather
+ count: 1
+ schema_version: 1
+ 8:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:poppy
+ count: 1
+ schema_version: 1
+ 10:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:leather
+ count: 1
+ schema_version: 1
+ 12:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:leather
+ count: 1
+ schema_version: 1
+ 13:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:leather
+ count: 1
+ schema_version: 1
+ 14:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:leather
+ count: 1
+ schema_version: 1
+ 16:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:leather
+ count: 1
+ schema_version: 1
+ 18:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:poppy
+ count: 1
+ schema_version: 1
+ 19:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:leather
+ count: 1
+ schema_version: 1
+ 20:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:leather
+ count: 1
+ schema_version: 1
+ 21:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:apple
+ count: 1
+ schema_version: 1
+ 23:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:apple
+ count: 1
+ schema_version: 1
+ 24:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:leather
+ count: 1
+ schema_version: 1
+ 25:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:leather
+ count: 1
+ schema_version: 1
+ 26:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:poppy
+ count: 1
+ schema_version: 1
+ rarity: COMMON
+ '3':
+ contents:
+ 0:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:oxeye_daisy
+ count: 1
+ schema_version: 1
+ 1:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:wheat_seeds
+ count: 1
+ schema_version: 1
+ 2:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:wheat_seeds
+ count: 1
+ schema_version: 1
+ 3:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:wheat_seeds
+ count: 1
+ schema_version: 1
+ 5:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:wheat_seeds
+ count: 1
+ schema_version: 1
+ 6:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:wheat_seeds
+ count: 1
+ schema_version: 1
+ 7:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:wheat_seeds
+ count: 1
+ schema_version: 1
+ 8:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:oxeye_daisy
+ count: 1
+ schema_version: 1
+ 9:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:honey_bottle
+ count: 1
+ schema_version: 1
+ 10:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:wheat_seeds
+ count: 1
+ schema_version: 1
+ 11:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:wheat_seeds
+ count: 1
+ schema_version: 1
+ 12:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:wheat_seeds
+ count: 1
+ schema_version: 1
+ 13:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:oxeye_daisy
+ count: 1
+ schema_version: 1
+ 14:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:wheat_seeds
+ count: 1
+ schema_version: 1
+ 15:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:wheat_seeds
+ count: 1
+ schema_version: 1
+ 16:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:wheat_seeds
+ count: 1
+ schema_version: 1
+ 17:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:honey_bottle
+ count: 1
+ schema_version: 1
+ 18:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:oxeye_daisy
+ count: 1
+ schema_version: 1
+ 19:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:wheat_seeds
+ count: 1
+ schema_version: 1
+ 20:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:wheat_seeds
+ count: 1
+ schema_version: 1
+ 21:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:wheat_seeds
+ count: 1
+ schema_version: 1
+ 23:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:wheat_seeds
+ count: 1
+ schema_version: 1
+ 24:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:wheat_seeds
+ count: 1
+ schema_version: 1
+ 25:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:wheat_seeds
+ count: 1
+ schema_version: 1
+ 26:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:oxeye_daisy
+ count: 1
+ schema_version: 1
+ rarity: COMMON
+ '4':
+ contents:
+ 0:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:dandelion
+ count: 1
+ schema_version: 1
+ 18:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:dandelion
+ count: 1
+ schema_version: 1
+ 3:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:apple
+ count: 1
+ schema_version: 1
+ 4:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:honey_bottle
+ count: 1
+ schema_version: 1
+ 5:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:apple
+ count: 1
+ schema_version: 1
+ 21:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:apple
+ count: 1
+ schema_version: 1
+ 22:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:honeycomb_block
+ count: 1
+ schema_version: 1
+ 23:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:apple
+ count: 1
+ schema_version: 1
+ 8:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:dandelion
+ count: 1
+ schema_version: 1
+ 26:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:dandelion
+ count: 1
+ schema_version: 1
+ 13:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:honeycomb
+ count: 1
+ schema_version: 1
+ rarity: UNCOMMON
+ '5':
+ contents:
+ 3:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:apple
+ count: 1
+ schema_version: 1
+ 5:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:apple
+ count: 1
+ schema_version: 1
+ 21:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:apple
+ count: 1
+ schema_version: 1
+ 23:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:apple
+ count: 1
+ schema_version: 1
+ 13:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:golden_apple
+ count: 1
+ schema_version: 1
+ rarity: RARE
+ '6':
+ contents:
+ 3:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:apple
+ count: 1
+ schema_version: 1
+ 4:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:honey_bottle
+ count: 1
+ schema_version: 1
+ 5:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:apple
+ count: 1
+ schema_version: 1
+ 21:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:apple
+ count: 1
+ schema_version: 1
+ 22:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:honey_bottle
+ count: 1
+ schema_version: 1
+ 23:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:apple
+ count: 1
+ schema_version: 1
+ 12:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:honey_bottle
+ count: 1
+ schema_version: 1
+ 13:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:bee_nest
+ count: 1
+ schema_version: 1
+ 14:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:honey_bottle
+ count: 1
+ schema_version: 1
+ rarity: RARE
+ '7':
+ contents:
+ 3:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:apple
+ count: 1
+ schema_version: 1
+ 5:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:apple
+ count: 1
+ schema_version: 1
+ 21:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:apple
+ count: 1
+ schema_version: 1
+ 23:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:apple
+ count: 1
+ schema_version: 1
+ 13:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:enchanted_golden_apple
+ count: 1
+ schema_version: 1
+ rarity: EPIC
diff --git a/src/main/resources/phases/14000_cherry_grove.yml b/src/main/resources/phases/14000_cherry_grove.yml
new file mode 100644
index 00000000..0545c27e
--- /dev/null
+++ b/src/main/resources/phases/14000_cherry_grove.yml
@@ -0,0 +1,42 @@
+'14000':
+ name: Cherry Grove
+ icon: CHERRY_LOG
+ firstBlock: CHERRY_LOG
+ biome: CHERRY_GROVE
+ fixedBlocks:
+ '0': CHERRY_LOG
+ '1': CHERRY_LEAVES
+ '2': PINK_PETALS
+ '3': CHERRY_SAPLING
+ '4': PINK_TULIP
+ '5': WHITE_TULIP
+ blocks:
+ CHEST: 60
+ DIRT: 100
+ STONE: 100
+ CHERRY_LEAVES: 200
+ PINK_PETALS: 100
+ CHERRY_LOG: 300
+ GRASS_BLOCK: 100
+ mobs:
+ WOLF: 50
+ RABBIT: 40
+ DONKEY: 40
+ PIG: 5
+ FOX: 50
+ CHICKEN: 80
+ BEE: 80
+ SHEEP: 80
+ GLOW_SQUID: 2
+ CREEPER: 50
+ SKELETON: 50
+ SLIME: 50
+ SPIDER: 50
+ ZOMBIE: 55
+ ENDERMAN: 5
+ WITCH: 3
+ ZOMBIE_VILLAGER: 3
+ holograms:
+ '0': '&dBlossom in bloom!'
+ start-commands: []
+ end-commands: []
diff --git a/src/main/resources/phases/14000_cherry_grove_chests.yml b/src/main/resources/phases/14000_cherry_grove_chests.yml
new file mode 100644
index 00000000..8b0e4695
--- /dev/null
+++ b/src/main/resources/phases/14000_cherry_grove_chests.yml
@@ -0,0 +1,545 @@
+'14000':
+ chests:
+ '1':
+ contents:
+ 0:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:pink_petals
+ count: 1
+ schema_version: 1
+ 18:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:pink_petals
+ count: 1
+ schema_version: 1
+ 4:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:pink_candle
+ count: 1
+ schema_version: 1
+ 22:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:pink_candle
+ count: 1
+ schema_version: 1
+ 8:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:pink_petals
+ count: 1
+ schema_version: 1
+ 26:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:pink_petals
+ count: 1
+ schema_version: 1
+ 12:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:pink_candle
+ count: 1
+ schema_version: 1
+ 13:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:pink_bed
+ count: 1
+ schema_version: 1
+ 14:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:pink_candle
+ count: 1
+ schema_version: 1
+ rarity: COMMON
+ '2':
+ contents:
+ 0:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:pink_petals
+ count: 1
+ schema_version: 1
+ 2:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:pink_glazed_terracotta
+ count: 1
+ schema_version: 1
+ 3:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:pink_glazed_terracotta
+ count: 1
+ schema_version: 1
+ 4:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:pink_glazed_terracotta
+ count: 1
+ schema_version: 1
+ 5:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:pink_glazed_terracotta
+ count: 1
+ schema_version: 1
+ 6:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:pink_glazed_terracotta
+ count: 1
+ schema_version: 1
+ 8:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:pink_petals
+ count: 1
+ schema_version: 1
+ 10:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:pink_glazed_terracotta
+ count: 1
+ schema_version: 1
+ 11:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:pink_glazed_terracotta
+ count: 1
+ schema_version: 1
+ 12:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:pink_glazed_terracotta
+ count: 1
+ schema_version: 1
+ 13:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:pink_glazed_terracotta
+ count: 1
+ schema_version: 1
+ 14:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:pink_glazed_terracotta
+ count: 1
+ schema_version: 1
+ 15:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:pink_glazed_terracotta
+ count: 1
+ schema_version: 1
+ 16:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:pink_glazed_terracotta
+ count: 1
+ schema_version: 1
+ 18:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:pink_petals
+ count: 1
+ schema_version: 1
+ 20:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:pink_glazed_terracotta
+ count: 1
+ schema_version: 1
+ 21:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:pink_glazed_terracotta
+ count: 1
+ schema_version: 1
+ 22:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:pink_glazed_terracotta
+ count: 1
+ schema_version: 1
+ 23:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:pink_glazed_terracotta
+ count: 1
+ schema_version: 1
+ 24:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:pink_glazed_terracotta
+ count: 1
+ schema_version: 1
+ 26:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:pink_petals
+ count: 1
+ schema_version: 1
+ rarity: UNCOMMON
+ '3':
+ contents:
+ 0:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:pink_petals
+ count: 1
+ schema_version: 1
+ 16:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:pink_glazed_terracotta
+ count: 1
+ schema_version: 1
+ 2:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:pink_glazed_terracotta
+ count: 1
+ schema_version: 1
+ 18:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:pink_petals
+ count: 1
+ schema_version: 1
+ 20:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:pink_glazed_terracotta
+ count: 1
+ schema_version: 1
+ 6:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:pink_glazed_terracotta
+ count: 1
+ schema_version: 1
+ 8:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:pink_petals
+ count: 1
+ schema_version: 1
+ 24:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:pink_glazed_terracotta
+ count: 1
+ schema_version: 1
+ 10:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:pink_glazed_terracotta
+ count: 1
+ schema_version: 1
+ 26:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:pink_petals
+ count: 1
+ schema_version: 1
+ 13:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:cherry_sapling
+ count: 4
+ schema_version: 1
+ rarity: UNCOMMON
+ '4':
+ contents:
+ 0:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:pink_petals
+ count: 1
+ schema_version: 1
+ 18:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:pink_petals
+ count: 1
+ schema_version: 1
+ 8:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:pink_petals
+ count: 1
+ schema_version: 1
+ 26:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:pink_petals
+ count: 1
+ schema_version: 1
+ 12:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:cherry_sapling
+ count: 1
+ schema_version: 1
+ 13:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:cherry_sapling
+ count: 1
+ schema_version: 1
+ 14:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:cherry_sapling
+ count: 1
+ schema_version: 1
+ rarity: RARE
+ '5':
+ contents:
+ 0:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:pink_petals
+ count: 1
+ schema_version: 1
+ 18:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:pink_petals
+ count: 1
+ schema_version: 1
+ 4:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:pink_tulip
+ count: 1
+ schema_version: 1
+ 22:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:pink_tulip
+ count: 1
+ schema_version: 1
+ 8:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:pink_petals
+ count: 1
+ schema_version: 1
+ 26:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:pink_petals
+ count: 1
+ schema_version: 1
+ 12:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:pink_tulip
+ count: 1
+ schema_version: 1
+ 13:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:pink_harness
+ count: 1
+ schema_version: 1
+ 14:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:pink_tulip
+ count: 1
+ schema_version: 1
+ rarity: EPIC
+ '6':
+ contents:
+ 0:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:pink_petals
+ count: 1
+ schema_version: 1
+ 18:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:pink_petals
+ count: 1
+ schema_version: 1
+ 4:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:cherry_sapling
+ count: 1
+ schema_version: 1
+ 22:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:cherry_sapling
+ count: 1
+ schema_version: 1
+ 8:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:pink_petals
+ count: 1
+ schema_version: 1
+ 26:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:pink_petals
+ count: 1
+ schema_version: 1
+ 12:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:cherry_sapling
+ count: 1
+ schema_version: 1
+ 13:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:pink_shulker_box
+ count: 1
+ schema_version: 1
+ 14:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:cherry_sapling
+ count: 1
+ schema_version: 1
+ rarity: EPIC
+ '7':
+ contents:
+ 0:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:pink_petals
+ count: 1
+ schema_version: 1
+ 2:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:pink_glazed_terracotta
+ count: 1
+ schema_version: 1
+ 3:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:pink_petals
+ count: 1
+ schema_version: 1
+ 4:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:pink_petals
+ count: 1
+ schema_version: 1
+ 5:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:pink_petals
+ count: 1
+ schema_version: 1
+ 6:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:pink_glazed_terracotta
+ count: 1
+ schema_version: 1
+ 8:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:pink_petals
+ count: 1
+ schema_version: 1
+ 10:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:pink_glazed_terracotta
+ count: 1
+ schema_version: 1
+ 11:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:pink_candle
+ count: 1
+ schema_version: 1
+ 12:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:pink_petals
+ count: 1
+ schema_version: 1
+ 13:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:pink_harness
+ count: 1
+ schema_version: 1
+ 14:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:pink_petals
+ count: 1
+ schema_version: 1
+ 15:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:pink_candle
+ count: 1
+ schema_version: 1
+ 16:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:pink_glazed_terracotta
+ count: 1
+ schema_version: 1
+ 18:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:pink_petals
+ count: 1
+ schema_version: 1
+ 20:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:pink_glazed_terracotta
+ count: 1
+ schema_version: 1
+ 21:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:pink_petals
+ count: 1
+ schema_version: 1
+ 22:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:pink_petals
+ count: 1
+ schema_version: 1
+ 23:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:pink_petals
+ count: 1
+ schema_version: 1
+ 24:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:pink_glazed_terracotta
+ count: 1
+ schema_version: 1
+ 26:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:pink_petals
+ count: 1
+ schema_version: 1
+ rarity: EPIC
diff --git a/src/main/resources/phases/14500_jagged_peaks.yml b/src/main/resources/phases/14500_jagged_peaks.yml
new file mode 100644
index 00000000..a8324eb3
--- /dev/null
+++ b/src/main/resources/phases/14500_jagged_peaks.yml
@@ -0,0 +1,46 @@
+'14500':
+ name: Jagged Peaks
+ icon: DIORITE
+ firstBlock: STONE
+ biome: JAGGED_PEAKS
+ fixedBlocks:
+ '0': STONE
+ '1': DIORITE
+ '2': ANDESITE
+ '3': GRANITE
+ '4': PACKED_ICE
+ '5': SNOW_BLOCK
+ blocks:
+ COBBLESTONE: 100
+ STONE: 300
+ DIORITE: 200
+ SNOW_BLOCK: 150
+ COBBLED_DEEPSLATE: 50
+ COPPER_ORE: 20
+ DIAMOND_ORE: 10
+ ICE: 100
+ GOLD_ORE: 30
+ ANDESITE: 200
+ GRANITE: 200
+ PACKED_ICE: 100
+ SNOW: 150
+ EMERALD_ORE: 20
+ INFESTED_STONE: 10
+ CHEST: 50
+ mobs:
+ GOAT: 100
+ BAT: 50
+ SHEEP: 50
+ CREEPER: 50
+ SKELETON: 50
+ SLIME: 50
+ SPIDER: 50
+ ZOMBIE: 55
+ ENDERMAN: 5
+ WITCH: 3
+ ZOMBIE_VILLAGER: 3
+ POLAR_BEAR: 5
+ holograms:
+ '0': '&fHigh altitude ahead!'
+ start-commands: []
+ end-commands: []
diff --git a/src/main/resources/phases/14500_jagged_peaks_chests.yml b/src/main/resources/phases/14500_jagged_peaks_chests.yml
new file mode 100644
index 00000000..a5881e28
--- /dev/null
+++ b/src/main/resources/phases/14500_jagged_peaks_chests.yml
@@ -0,0 +1,686 @@
+'14500':
+ chests:
+ '1':
+ contents:
+ 2:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:snow_block
+ count: 1
+ schema_version: 1
+ 3:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:snowball
+ count: 1
+ schema_version: 1
+ 20:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:snow_block
+ count: 1
+ schema_version: 1
+ 5:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:snowball
+ count: 1
+ schema_version: 1
+ 21:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:snowball
+ count: 1
+ schema_version: 1
+ 6:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:snow_block
+ count: 1
+ schema_version: 1
+ 23:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:snowball
+ count: 1
+ schema_version: 1
+ 24:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:snow_block
+ count: 1
+ schema_version: 1
+ 11:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:snow_block
+ count: 1
+ schema_version: 1
+ 12:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:snowball
+ count: 1
+ schema_version: 1
+ 14:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:snowball
+ count: 1
+ schema_version: 1
+ 15:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:snow_block
+ count: 1
+ schema_version: 1
+ rarity: COMMON
+ '2':
+ contents:
+ 0:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:packed_ice
+ count: 1
+ schema_version: 1
+ 2:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:snow_block
+ count: 1
+ schema_version: 1
+ 3:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:snowball
+ count: 1
+ schema_version: 1
+ 4:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:packed_ice
+ count: 1
+ schema_version: 1
+ 5:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:snowball
+ count: 1
+ schema_version: 1
+ 6:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:snow_block
+ count: 1
+ schema_version: 1
+ 8:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:packed_ice
+ count: 1
+ schema_version: 1
+ 9:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:packed_ice
+ count: 1
+ schema_version: 1
+ 10:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:packed_ice
+ count: 1
+ schema_version: 1
+ 11:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:snow_block
+ count: 1
+ schema_version: 1
+ 12:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:snowball
+ count: 1
+ schema_version: 1
+ 13:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:packed_ice
+ count: 1
+ schema_version: 1
+ 14:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:snowball
+ count: 1
+ schema_version: 1
+ 15:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:snow_block
+ count: 1
+ schema_version: 1
+ 16:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:packed_ice
+ count: 1
+ schema_version: 1
+ 17:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:packed_ice
+ count: 1
+ schema_version: 1
+ 18:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:packed_ice
+ count: 1
+ schema_version: 1
+ 20:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:snow_block
+ count: 1
+ schema_version: 1
+ 21:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:snowball
+ count: 1
+ schema_version: 1
+ 22:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:packed_ice
+ count: 1
+ schema_version: 1
+ 23:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:snowball
+ count: 1
+ schema_version: 1
+ 24:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:snow_block
+ count: 1
+ schema_version: 1
+ 26:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:packed_ice
+ count: 1
+ schema_version: 1
+ rarity: UNCOMMON
+ '3':
+ contents:
+ 0:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:packed_ice
+ count: 1
+ schema_version: 1
+ 1:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:blue_ice
+ count: 4
+ schema_version: 1
+ 2:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:snow_block
+ count: 1
+ schema_version: 1
+ 3:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:snowball
+ count: 1
+ schema_version: 1
+ 4:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:packed_ice
+ count: 1
+ schema_version: 1
+ 5:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:snowball
+ count: 1
+ schema_version: 1
+ 6:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:snow_block
+ count: 1
+ schema_version: 1
+ 7:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:blue_ice
+ count: 4
+ schema_version: 1
+ 8:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:packed_ice
+ count: 1
+ schema_version: 1
+ 9:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:packed_ice
+ count: 1
+ schema_version: 1
+ 10:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:packed_ice
+ count: 1
+ schema_version: 1
+ 11:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:snow_block
+ count: 1
+ schema_version: 1
+ 12:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:snowball
+ count: 1
+ schema_version: 1
+ 13:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:packed_ice
+ count: 1
+ schema_version: 1
+ 14:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:snowball
+ count: 1
+ schema_version: 1
+ 15:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:snow_block
+ count: 1
+ schema_version: 1
+ 16:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:packed_ice
+ count: 1
+ schema_version: 1
+ 17:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:packed_ice
+ count: 1
+ schema_version: 1
+ 18:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:packed_ice
+ count: 1
+ schema_version: 1
+ 19:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:blue_ice
+ count: 4
+ schema_version: 1
+ 20:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:snow_block
+ count: 1
+ schema_version: 1
+ 21:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:snowball
+ count: 1
+ schema_version: 1
+ 22:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:packed_ice
+ count: 1
+ schema_version: 1
+ 23:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:snowball
+ count: 1
+ schema_version: 1
+ 24:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:snow_block
+ count: 1
+ schema_version: 1
+ 25:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:blue_ice
+ count: 4
+ schema_version: 1
+ 26:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:packed_ice
+ count: 1
+ schema_version: 1
+ rarity: UNCOMMON
+ '4':
+ contents:
+ 0:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:ice
+ count: 1
+ schema_version: 1
+ 2:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:snow_block
+ count: 1
+ schema_version: 1
+ 3:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:snowball
+ count: 1
+ schema_version: 1
+ 4:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:snowball
+ count: 1
+ schema_version: 1
+ 5:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:snowball
+ count: 1
+ schema_version: 1
+ 6:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:snow_block
+ count: 1
+ schema_version: 1
+ 8:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:ice
+ count: 1
+ schema_version: 1
+ 9:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:snow_block
+ count: 1
+ schema_version: 1
+ 10:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:snow_block
+ count: 1
+ schema_version: 1
+ 11:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:snow_block
+ count: 1
+ schema_version: 1
+ 12:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:snowball
+ count: 1
+ schema_version: 1
+ 13:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:powder_snow_bucket
+ count: 1
+ schema_version: 1
+ 14:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:snowball
+ count: 1
+ schema_version: 1
+ 15:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:snow_block
+ count: 1
+ schema_version: 1
+ 16:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:snow_block
+ count: 1
+ schema_version: 1
+ 17:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:snow_block
+ count: 1
+ schema_version: 1
+ 18:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:ice
+ count: 1
+ schema_version: 1
+ 20:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:snow_block
+ count: 1
+ schema_version: 1
+ 21:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:snowball
+ count: 1
+ schema_version: 1
+ 22:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:snowball
+ count: 1
+ schema_version: 1
+ 23:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:snowball
+ count: 1
+ schema_version: 1
+ 24:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:snow_block
+ count: 1
+ schema_version: 1
+ 26:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:ice
+ count: 1
+ schema_version: 1
+ rarity: RARE
+ '5':
+ contents:
+ 0:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:packed_ice
+ count: 1
+ schema_version: 1
+ 2:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:powder_snow_bucket
+ count: 1
+ schema_version: 1
+ 4:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:diamond
+ count: 1
+ schema_version: 1
+ 8:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:diamond
+ count: 1
+ schema_version: 1
+ 9:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:diamond
+ count: 1
+ schema_version: 1
+ 11:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:snowball
+ count: 1
+ schema_version: 1
+ 13:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:music_disc_precipice
+ count: 1
+ schema_version: 1
+ 15:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:diamond
+ count: 1
+ schema_version: 1
+ 18:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:packed_ice
+ count: 2
+ schema_version: 1
+ 20:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:diamond
+ count: 1
+ schema_version: 1
+ 22:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:blue_ice
+ count: 1
+ schema_version: 1
+ 23:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:blue_ice
+ count: 2
+ schema_version: 1
+ 26:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:diamond
+ count: 1
+ schema_version: 1
+ rarity: RARE
+ '6':
+ contents:
+ 0:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:ice
+ count: 1
+ schema_version: 1
+ 3:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:snowball
+ count: 1
+ schema_version: 1
+ 4:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:snowball
+ count: 1
+ schema_version: 1
+ 5:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:snowball
+ count: 1
+ schema_version: 1
+ 8:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:ice
+ count: 1
+ schema_version: 1
+ 12:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:snowball
+ count: 1
+ schema_version: 1
+ 13:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:white_harness
+ count: 1
+ schema_version: 1
+ 14:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:snowball
+ count: 1
+ schema_version: 1
+ 18:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:ice
+ count: 1
+ schema_version: 1
+ 21:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:snowball
+ count: 1
+ schema_version: 1
+ 22:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:snowball
+ count: 1
+ schema_version: 1
+ 23:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:snowball
+ count: 1
+ schema_version: 1
+ 26:
+ ==: org.bukkit.inventory.ItemStack
+ DataVersion: 4438
+ id: minecraft:ice
+ count: 1
+ schema_version: 1
+ rarity: EPIC
diff --git a/src/main/resources/phases/12000_goto_0.yml b/src/main/resources/phases/15000_goto_0.yml
similarity index 60%
rename from src/main/resources/phases/12000_goto_0.yml
rename to src/main/resources/phases/15000_goto_0.yml
index d79c6c2c..4910d37c 100644
--- a/src/main/resources/phases/12000_goto_0.yml
+++ b/src/main/resources/phases/15000_goto_0.yml
@@ -1,2 +1,2 @@
-'12000':
+'15000':
gotoBlock: 0
\ No newline at end of file
diff --git a/src/main/resources/phases/7500_the nether.yml b/src/main/resources/phases/7500_the nether.yml
index 624064eb..b5b6b489 100644
--- a/src/main/resources/phases/7500_the nether.yml
+++ b/src/main/resources/phases/7500_the nether.yml
@@ -26,6 +26,7 @@
GLOWSTONE: 100
MAGMA_BLOCK: 75
GOLD_BLOCK: 10
+ DRIED_GHAST: 25
mobs:
PIGLIN: 300
HOGLIN: 100
diff --git a/src/test/java/world/bentobox/aoneblock/listeners/HoloListenerTest.java b/src/test/java/world/bentobox/aoneblock/listeners/HoloListenerTest.java
new file mode 100644
index 00000000..5b4f40a9
--- /dev/null
+++ b/src/test/java/world/bentobox/aoneblock/listeners/HoloListenerTest.java
@@ -0,0 +1,241 @@
+package world.bentobox.aoneblock.listeners;
+
+import static org.junit.Assert.assertNotNull;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyDouble;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.anyLong;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.ArgumentMatchers.isNull;
+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.util.Collection;
+import java.util.List;
+import java.util.UUID;
+import java.util.concurrent.CompletableFuture;
+
+import org.bukkit.Bukkit;
+import org.bukkit.Chunk;
+import org.bukkit.Location;
+import org.bukkit.World;
+import org.bukkit.entity.Entity;
+import org.bukkit.entity.EntityType;
+import org.bukkit.entity.Player;
+import org.bukkit.entity.TextDisplay;
+import org.bukkit.scheduler.BukkitScheduler;
+import org.bukkit.util.Vector;
+import org.eclipse.jdt.annotation.NonNull;
+import org.junit.After;
+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;
+import org.powermock.modules.junit4.PowerMockRunner;
+import org.powermock.reflect.Whitebox;
+
+import world.bentobox.aoneblock.AOneBlock;
+import world.bentobox.aoneblock.Settings;
+import world.bentobox.aoneblock.dataobjects.OneBlockIslands;
+import world.bentobox.aoneblock.oneblocks.OneBlockPhase;
+import world.bentobox.bentobox.BentoBox;
+import world.bentobox.bentobox.api.events.island.IslandDeleteEvent;
+import world.bentobox.bentobox.api.user.User;
+import world.bentobox.bentobox.database.objects.Island;
+import world.bentobox.bentobox.managers.LocalesManager;
+import world.bentobox.bentobox.managers.PlaceholdersManager;
+import world.bentobox.bentobox.util.Util;
+
+/**
+ * @author tastybento
+ *
+ */
+@RunWith(PowerMockRunner.class)
+@PrepareForTest({ Bukkit.class, BentoBox.class, User.class, Util.class })
+public class HoloListenerTest {
+ @Mock
+ private BentoBox plugin;
+ @Mock
+ AOneBlock addon;
+ private HoloListener hl;
+ @Mock
+ private Island island;
+ private UUID uuid = UUID.randomUUID();
+ @Mock
+ private Location location;
+ @Mock
+ private World world;
+ @Mock
+ private TextDisplay hologram;
+ private Settings settings;
+ @Mock
+ private @NonNull OneBlockIslands is;
+ @Mock
+ private Player player;
+ @Mock
+ private LocalesManager lm;
+ @Mock
+ private PlaceholdersManager pm;
+ @Mock
+ private BukkitScheduler scheduler;
+ @Mock
+ private @NonNull OneBlockPhase phase;
+
+
+ /**
+ * @throws java.lang.Exception
+ */
+ @Before
+ public void setUp() throws Exception {
+ // Set up plugin
+ Whitebox.setInternalState(BentoBox.class, "instance", plugin);
+ // Settings
+ settings = new Settings();
+ when(addon.getSettings()).thenReturn(settings);
+
+ // Island
+ when(island.getWorld()).thenReturn(world);
+ when(island.getCenter()).thenReturn(location);
+ when(island.getOwner()).thenReturn(uuid);
+
+ // World
+ when(world.spawn(any(Location.class), eq(TextDisplay.class))).thenReturn(hologram);
+
+ // OneBlock Island
+ when(is.getHologram()).thenReturn("Hologram");
+ // Location
+ when(location.getWorld()).thenReturn(world);
+ when(location.clone()).thenReturn(location);
+ when(location.add(any(Vector.class))).thenReturn(location);
+ // Chunks
+ PowerMockito.mockStatic(Util.class, Mockito.RETURNS_MOCKS);
+ CompletableFuture future = CompletableFuture.completedFuture(null);
+ when(Util.getChunkAtAsync(location)).thenReturn(future); // Load the chunk immediately
+
+ Player nonHolo = mock(Player.class);
+
+ Collection entities = List.of(nonHolo , hologram);
+ // Get entities
+ when(hologram.getType()).thenReturn(EntityType.TEXT_DISPLAY);
+ when(world.getNearbyEntities(any(Location.class), anyDouble(), anyDouble(), anyDouble())).thenReturn(entities);
+
+ // Player and translations
+ when(player.getUniqueId()).thenReturn(uuid);
+ User.getInstance(player);
+ User.setPlugin(plugin);
+
+ when(plugin.getLocalesManager()).thenReturn(lm);
+ when(plugin.getPlaceholdersManager()).thenReturn(pm);
+
+ // Bukkit
+ PowerMockito.mockStatic(Bukkit.class, Mockito.RETURNS_MOCKS);
+ when(Bukkit.getScheduler()).thenReturn(scheduler);
+
+ // DUT
+ hl = new HoloListener(addon);
+ }
+
+ @After
+ public void tearDown() {
+ User.clearUsers();
+ }
+
+ /**
+ * Test method for {@link world.bentobox.aoneblock.listeners.HoloListener#HoloListener(world.bentobox.aoneblock.AOneBlock)}.
+ */
+ @Test
+ public void testHoloListener() {
+ assertNotNull(hl);
+ }
+
+ /**
+ * Test method for {@link world.bentobox.aoneblock.listeners.HoloListener#onDeletedIsland(world.bentobox.bentobox.api.events.island.IslandDeleteEvent)}.
+ */
+ @Test
+ public void testOnDeletedIsland() {
+ IslandDeleteEvent event = new IslandDeleteEvent(island, uuid, false, location);
+ this.hl.onDeletedIsland(event);
+ verify(hologram).remove();
+ }
+
+ /**
+ * Test method for {@link world.bentobox.aoneblock.listeners.HoloListener#onDisable()}.
+ */
+ @Test
+ public void testOnDisable() {
+ hl.setUp(island, is, true);
+ hl.onDisable();
+ verify(hologram, times(2)).remove();
+ }
+
+
+ /**
+ * Test method for {@link world.bentobox.aoneblock.listeners.HoloListener#setUp(world.bentobox.bentobox.database.objects.Island, world.bentobox.aoneblock.dataobjects.OneBlockIslands, boolean)}.
+ */
+ @Test
+ public void testSetUpNoHolograms() {
+ settings.setUseHolograms(false);
+ hl.setUp(island, is, true);
+ verify(scheduler, never()).runTaskLater(isNull(), any(Runnable.class), anyLong());
+ }
+
+ /**
+ * Test method for {@link world.bentobox.aoneblock.listeners.HoloListener#setUp(world.bentobox.bentobox.database.objects.Island, world.bentobox.aoneblock.dataobjects.OneBlockIslands, boolean)}.
+ */
+ @Test
+ public void testSetUpNoScheduling() {
+ settings.setHologramDuration(0);
+ hl.setUp(island, is, true);
+ verify(scheduler, never()).runTaskLater(isNull(), any(Runnable.class), anyLong());
+ }
+
+ /**
+ * Test method for {@link world.bentobox.aoneblock.listeners.HoloListener#setUp(world.bentobox.bentobox.database.objects.Island, world.bentobox.aoneblock.dataobjects.OneBlockIslands, boolean)}.
+ */
+ @Test
+ public void testSetUpNewIsland() {
+ hl.setUp(island, is, true);
+ verify(is).setHologram("");
+ verify(scheduler).runTaskLater(isNull(), any(Runnable.class), anyLong());
+ }
+
+ /**
+ * Test method for {@link world.bentobox.aoneblock.listeners.HoloListener#setUp(world.bentobox.bentobox.database.objects.Island, world.bentobox.aoneblock.dataobjects.OneBlockIslands, boolean)}.
+ */
+ @Test
+ public void testSetUpNotNewIsland() {
+ hl.setUp(island, is, false);
+ verify(is, never()).setHologram(anyString());
+ verify(scheduler).runTaskLater(isNull(), any(Runnable.class), anyLong());
+ }
+
+
+ /**
+ * Test method for {@link world.bentobox.aoneblock.listeners.HoloListener#process(world.bentobox.bentobox.database.objects.Island, world.bentobox.aoneblock.dataobjects.OneBlockIslands, world.bentobox.aoneblock.oneblocks.OneBlockPhase)}.
+ */
+ @Test
+ public void testProcessNull() {
+ when(phase.getHologramLine(anyInt())).thenReturn(null);
+ when(is.getHologram()).thenReturn(""); // Return blank
+ hl.process(island, is, phase);
+ verify(scheduler, never()).runTaskLater(isNull(), any(Runnable.class), anyLong());
+ }
+
+ /**
+ * Test method for {@link world.bentobox.aoneblock.listeners.HoloListener#process(world.bentobox.bentobox.database.objects.Island, world.bentobox.aoneblock.dataobjects.OneBlockIslands, world.bentobox.aoneblock.oneblocks.OneBlockPhase)}.
+ */
+ @Test
+ public void testProcess() {
+ when(phase.getHologramLine(anyInt())).thenReturn("my Holo");
+ hl.process(island, is, phase);
+ verify(scheduler).runTaskLater(isNull(), any(Runnable.class), anyLong());
+ }
+
+}