diff --git a/pom.xml b/pom.xml index 51483a97..a9171580 100644 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ com.songoda SkyBlock 4.0.0 - 53 + 54 clean package @@ -44,6 +44,11 @@ coins 2.3.2 + + me.robin + leaderheads + 1.0 + org.spigotmc spigot diff --git a/src/main/java/me/goodandevil/skyblock/api/SkyBlockAPI.java b/src/main/java/me/goodandevil/skyblock/api/SkyBlockAPI.java index daae94f6..d62ba724 100644 --- a/src/main/java/me/goodandevil/skyblock/api/SkyBlockAPI.java +++ b/src/main/java/me/goodandevil/skyblock/api/SkyBlockAPI.java @@ -269,6 +269,21 @@ public class SkyBlockAPI { return null; } + /** + * @return The Island at a location + */ + public static Island getIslandAtLocation(Location location) { + Preconditions.checkArgument(location != null, "Cannot get island to null location"); + + me.goodandevil.skyblock.island.Island island = implementation.getIslandManager().getIslandAtLocation(location); + + if (island != null) { + return island.getAPIWrapper(); + } + + return null; + } + /** * @return true of conditions met, false otherwise */ diff --git a/src/main/java/me/goodandevil/skyblock/command/commands/ConfirmCommand.java b/src/main/java/me/goodandevil/skyblock/command/commands/ConfirmCommand.java index d4d07aec..3a27f3bb 100644 --- a/src/main/java/me/goodandevil/skyblock/command/commands/ConfirmCommand.java +++ b/src/main/java/me/goodandevil/skyblock/command/commands/ConfirmCommand.java @@ -5,6 +5,7 @@ import java.util.UUID; import org.bukkit.Bukkit; import org.bukkit.ChatColor; +import org.bukkit.Location; import org.bukkit.command.ConsoleCommandSender; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.entity.Player; @@ -25,6 +26,7 @@ import me.goodandevil.skyblock.playerdata.PlayerDataManager; import me.goodandevil.skyblock.sound.SoundManager; import me.goodandevil.skyblock.utils.player.OfflinePlayer; import me.goodandevil.skyblock.utils.version.Sounds; +import me.goodandevil.skyblock.utils.world.LocationUtil; public class ConfirmCommand extends SubCommand { @@ -114,6 +116,17 @@ public class ConfirmCommand extends SubCommand { configLoad.getString("Command.Island.Confirmation.Deletion.Open.Message")); soundManager.playSound(player, Sounds.ANVIL_LAND.bukkitSound(), 1.0F, 1.0F); } else { + Location spawnLocation = LocationUtil.getSpawnLocation(); + + if (spawnLocation != null + && islandManager.isLocationAtIsland(island, spawnLocation)) { + messageManager.sendMessage(player, configLoad + .getString("Command.Island.Confirmation.Deletion.Spawn.Message")); + soundManager.playSound(player, Sounds.ANVIL_LAND.bukkitSound(), 1.0F, 1.0F); + + return; + } + playerData.setConfirmation(null); playerData.setConfirmationTime(0); diff --git a/src/main/java/me/goodandevil/skyblock/config/FileManager.java b/src/main/java/me/goodandevil/skyblock/config/FileManager.java index b1b4f67b..74512b6f 100644 --- a/src/main/java/me/goodandevil/skyblock/config/FileManager.java +++ b/src/main/java/me/goodandevil/skyblock/config/FileManager.java @@ -15,12 +15,14 @@ import java.io.OutputStream; import java.io.Reader; import java.nio.charset.Charset; import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.Map; import java.util.logging.Level; import com.google.common.io.ByteStreams; import me.goodandevil.skyblock.SkyBlock; +import me.goodandevil.skyblock.island.IslandWorld; import org.bukkit.Bukkit; import org.bukkit.Location; @@ -47,7 +49,8 @@ public class FileManager { new File(skyblock.getDataFolder().toString() + "/structures").mkdir(); } - Map configFiles = new HashMap<>(); + Map configFiles = new LinkedHashMap<>(); + configFiles.put("worlds.yml", new File(skyblock.getDataFolder(), "worlds.yml")); configFiles.put("levelling.yml", new File(skyblock.getDataFolder(), "levelling.yml")); configFiles.put("config.yml", new File(skyblock.getDataFolder(), "config.yml")); configFiles.put("language.yml", new File(skyblock.getDataFolder(), "language.yml")); @@ -83,6 +86,34 @@ public class FileManager { OutputStream os = new FileOutputStream(configFile)) { ByteStreams.copy(is, os); } + + if (configFileList.equals("worlds.yml")) { + File mainConfigFile = new File(skyblock.getDataFolder(), "config.yml"); + + if (isFileExist(mainConfigFile)) { + Config config = new Config(this, configFile); + Config mainConfig = new Config(this, mainConfigFile); + + FileConfiguration configLoad = config.getFileConfiguration(); + FileConfiguration mainConfigLoad = mainConfig.getFileConfiguration(); + + for (IslandWorld worldList : IslandWorld.values()) { + if (mainConfigLoad.getString("World." + worldList.name()) != null) { + configLoad.set("World." + worldList.name() + ".nextAvailableLocation.x", + mainConfigLoad.getDouble( + "World." + worldList.name() + ".nextAvailableLocation.x")); + configLoad.set("World." + worldList.name() + ".nextAvailableLocation.z", + mainConfigLoad.getDouble( + "World." + worldList.name() + ".nextAvailableLocation.z")); + } + } + + mainConfigLoad.set("World", null); + + configLoad.save(config.getFile()); + saveConfig(mainConfigLoad.saveToString(), mainConfig.getFile()); + } + } } catch (IOException ex) { Bukkit.getServer().getLogger().log(Level.WARNING, "SkyBlock | Error: Unable to create configuration file."); diff --git a/src/main/java/me/goodandevil/skyblock/island/Island.java b/src/main/java/me/goodandevil/skyblock/island/Island.java index e46d14a6..a959903c 100644 --- a/src/main/java/me/goodandevil/skyblock/island/Island.java +++ b/src/main/java/me/goodandevil/skyblock/island/Island.java @@ -292,10 +292,20 @@ public class Island { location))); FileManager fileManager = skyblock.getFileManager(); - fileManager.setLocation( - fileManager.getConfig(new File(new File(skyblock.getDataFolder().toString() + "/island-data"), - getOwnerUUID().toString() + ".yml")), - "Location." + world.name() + ".Spawn." + environment.name(), location, true); + + if (environment == IslandEnvironment.Island) { + fileManager.setLocation( + fileManager + .getConfig(new File(new File(skyblock.getDataFolder().toString() + "/island-data"), + getOwnerUUID().toString() + ".yml")), + "Location." + world.name() + "." + environment.name(), location, true); + } else { + fileManager.setLocation( + fileManager + .getConfig(new File(new File(skyblock.getDataFolder().toString() + "/island-data"), + getOwnerUUID().toString() + ".yml")), + "Location." + world.name() + ".Spawn." + environment.name(), location, true); + } islandLocationList.setLocation(location); diff --git a/src/main/java/me/goodandevil/skyblock/island/IslandManager.java b/src/main/java/me/goodandevil/skyblock/island/IslandManager.java index e09b9832..ad59f902 100644 --- a/src/main/java/me/goodandevil/skyblock/island/IslandManager.java +++ b/src/main/java/me/goodandevil/skyblock/island/IslandManager.java @@ -68,7 +68,7 @@ public class IslandManager { public IslandManager(SkyBlock skyblock) { this.skyblock = skyblock; - Config config = skyblock.getFileManager().getConfig(new File(skyblock.getDataFolder(), "config.yml")); + Config config = skyblock.getFileManager().getConfig(new File(skyblock.getDataFolder(), "worlds.yml")); FileConfiguration configLoad = config.getFileConfiguration(); for (IslandWorld worldList : IslandWorld.values()) { @@ -93,7 +93,7 @@ public class IslandManager { public void saveNextAvailableLocation(IslandWorld world) { FileManager fileManager = skyblock.getFileManager(); - Config config = fileManager.getConfig(new File(skyblock.getDataFolder(), "config.yml")); + Config config = fileManager.getConfig(new File(skyblock.getDataFolder(), "worlds.yml")); File configFile = config.getFile(); FileConfiguration configLoad = config.getFileConfiguration(); @@ -107,7 +107,11 @@ public class IslandManager { } } - fileManager.saveConfig(configLoad.saveToString(), configFile); + try { + configLoad.save(configFile); + } catch (IOException e) { + e.printStackTrace(); + } } public void setNextAvailableLocation(IslandWorld world, org.bukkit.Location location) { @@ -633,75 +637,14 @@ public class IslandManager { } public void prepareIsland(Island island, IslandWorld world) { - StructureManager structureManager = skyblock.getStructureManager(); WorldManager worldManager = skyblock.getWorldManager(); FileManager fileManager = skyblock.getFileManager(); Config config = fileManager.getConfig( new File(skyblock.getDataFolder().toString() + "/island-data", island.getOwnerUUID() + ".yml")); - FileConfiguration configLoad = config.getFileConfiguration(); - if (configLoad.getString("Location." + world.name()) == null) { - Structure structure; - - if (island.getStructure() != null && !island.getStructure().isEmpty() - && structureManager.containsStructure(island.getStructure())) { - structure = structureManager.getStructure(island.getStructure()); - } else { - structure = structureManager.getStructures().get(0); - } - - org.bukkit.Location islandLocation = prepareNextAvailableLocation(world); - - for (IslandEnvironment environmentList : IslandEnvironment.values()) { - if (environmentList == IslandEnvironment.Island) { - island.addLocation(world, environmentList, islandLocation); - fileManager.setLocation(config, "Location." + world.name() + "." + environmentList.name(), - islandLocation, true); - } else { - island.addLocation(world, environmentList, islandLocation.clone().add(0.5D, 0.0D, 0.5D)); - fileManager.setLocation(config, "Location." + world.name() + ".Spawn." + environmentList.name(), - islandLocation.clone().add(0.5D, 0.0D, 0.5D), true); - } - } - - if (fileManager.getConfig(new File(skyblock.getDataFolder(), "config.yml")).getFileConfiguration() - .getBoolean("Island.Spawn.Protection")) { - Bukkit.getServer().getScheduler().runTask(skyblock, new Runnable() { - @Override - public void run() { - islandLocation.clone().subtract(0.0D, 1.0D, 0.0D).getBlock().setType(Material.STONE); - } - }); - } - - try { - File structureFile = null; - - if (world == IslandWorld.Normal) { - structureFile = new File(new File(skyblock.getDataFolder().toString() + "/structures"), - structure.getOverworldFile()); - } else if (world == IslandWorld.Nether) { - structureFile = new File(new File(skyblock.getDataFolder().toString() + "/structures"), - structure.getNetherFile()); - } else if (world == IslandWorld.End) { - structureFile = new File(new File(skyblock.getDataFolder().toString() + "/structures"), - structure.getEndFile()); - } - - Float[] direction = StructureUtil.pasteStructure(StructureUtil.loadStructure(structureFile), - island.getLocation(world, IslandEnvironment.Island), BlockDegreesType.ROTATE_360); - org.bukkit.Location spawnLocation = island.getLocation(world, IslandEnvironment.Main).clone(); - spawnLocation.setYaw(direction[0]); - spawnLocation.setPitch(direction[1]); - island.setLocation(world, IslandEnvironment.Main, spawnLocation); - island.setLocation(world, IslandEnvironment.Visitor, spawnLocation); - } catch (Exception e) { - e.printStackTrace(); - } - - setNextAvailableLocation(world, islandLocation); - saveNextAvailableLocation(world); + if (config.getFileConfiguration().getString("Location." + world.name()) == null) { + pasteStructure(island, world); } else { for (IslandEnvironment environmentList : IslandEnvironment.values()) { org.bukkit.Location location; @@ -726,6 +669,81 @@ public class IslandManager { } } + public void resetIsland(Island island) { + for (IslandWorld worldList : IslandWorld.values()) { + pasteStructure(island, worldList); + } + } + + public void pasteStructure(Island island, IslandWorld world) { + StructureManager structureManager = skyblock.getStructureManager(); + FileManager fileManager = skyblock.getFileManager(); + + Structure structure; + + if (island.getStructure() != null && !island.getStructure().isEmpty() + && structureManager.containsStructure(island.getStructure())) { + structure = structureManager.getStructure(island.getStructure()); + } else { + structure = structureManager.getStructures().get(0); + } + + org.bukkit.Location islandLocation = prepareNextAvailableLocation(world); + + Config config = fileManager.getConfig( + new File(skyblock.getDataFolder().toString() + "/island-data", island.getOwnerUUID() + ".yml")); + + for (IslandEnvironment environmentList : IslandEnvironment.values()) { + if (environmentList == IslandEnvironment.Island) { + island.addLocation(world, environmentList, islandLocation); + fileManager.setLocation(config, "Location." + world.name() + "." + environmentList.name(), + islandLocation, true); + } else { + island.addLocation(world, environmentList, islandLocation.clone().add(0.5D, 0.0D, 0.5D)); + fileManager.setLocation(config, "Location." + world.name() + ".Spawn." + environmentList.name(), + islandLocation.clone().add(0.5D, 0.0D, 0.5D), true); + } + } + + if (fileManager.getConfig(new File(skyblock.getDataFolder(), "config.yml")).getFileConfiguration() + .getBoolean("Island.Spawn.Protection")) { + Bukkit.getServer().getScheduler().runTask(skyblock, new Runnable() { + @Override + public void run() { + islandLocation.clone().subtract(0.0D, 1.0D, 0.0D).getBlock().setType(Material.STONE); + } + }); + } + + try { + File structureFile = null; + + if (world == IslandWorld.Normal) { + structureFile = new File(new File(skyblock.getDataFolder().toString() + "/structures"), + structure.getOverworldFile()); + } else if (world == IslandWorld.Nether) { + structureFile = new File(new File(skyblock.getDataFolder().toString() + "/structures"), + structure.getNetherFile()); + } else if (world == IslandWorld.End) { + structureFile = new File(new File(skyblock.getDataFolder().toString() + "/structures"), + structure.getEndFile()); + } + + Float[] direction = StructureUtil.pasteStructure(StructureUtil.loadStructure(structureFile), + island.getLocation(world, IslandEnvironment.Island), BlockDegreesType.ROTATE_360); + org.bukkit.Location spawnLocation = island.getLocation(world, IslandEnvironment.Main).clone(); + spawnLocation.setYaw(direction[0]); + spawnLocation.setPitch(direction[1]); + island.setLocation(world, IslandEnvironment.Main, spawnLocation); + island.setLocation(world, IslandEnvironment.Visitor, spawnLocation); + } catch (Exception e) { + e.printStackTrace(); + } + + setNextAvailableLocation(world, islandLocation); + saveNextAvailableLocation(world); + } + public Set getVisitorsAtIsland(Island island) { Map playerDataStorage = skyblock.getPlayerDataManager().getPlayerData(); Set islandVisitors = new HashSet<>(); @@ -917,22 +935,18 @@ public class IslandManager { } } - for (UUID islandList : getIslands().keySet()) { - Island island = getIslands().get(islandList); + Island island = getIslandAtLocation(location); - if (isLocationAtIsland(island, location)) { - if (player.hasPermission("skyblock.bypass." + setting.toLowerCase()) - || player.hasPermission("skyblock.bypass.*") || player.hasPermission("skyblock.*")) { - return true; - } else if (island.isCoopPlayer(player.getUniqueId())) { - if (!island.getSetting(IslandRole.Coop, setting).getStatus()) { - return false; - } - } else if (!island.getSetting(IslandRole.Visitor, setting).getStatus()) { + if (island != null) { + if (player.hasPermission("skyblock.bypass." + setting.toLowerCase()) + || player.hasPermission("skyblock.bypass.*") || player.hasPermission("skyblock.*")) { + return true; + } else if (island.isCoopPlayer(player.getUniqueId())) { + if (!island.getSetting(IslandRole.Coop, setting).getStatus()) { return false; } - - return true; + } else if (!island.getSetting(IslandRole.Visitor, setting).getStatus()) { + return false; } } @@ -940,15 +954,11 @@ public class IslandManager { } public boolean hasSetting(org.bukkit.Location location, IslandRole role, String setting) { - for (UUID islandList : getIslands().keySet()) { - Island island = getIslands().get(islandList); + Island island = getIslandAtLocation(location); - if (isLocationAtIsland(island, location)) { - if (island.getSetting(role, setting).getStatus()) { - return true; - } - - return false; + if (island != null) { + if (island.getSetting(role, setting).getStatus()) { + return true; } } @@ -1016,34 +1026,31 @@ public class IslandManager { @Override public void run() { if (worldManager.isIslandWorld(player.getWorld())) { - for (UUID islandList : getIslands().keySet()) { - Island island = getIslands().get(islandList); + Island island = getIslandAtLocation(player.getLocation()); - if (isPlayerAtIsland(island, player)) { - Config config = skyblock.getFileManager() - .getConfig(new File(skyblock.getDataFolder(), "config.yml")); - FileConfiguration configLoad = config.getFileConfiguration(); + if (island != null) { + Config config = skyblock.getFileManager() + .getConfig(new File(skyblock.getDataFolder(), "config.yml")); + FileConfiguration configLoad = config.getFileConfiguration(); - if (!island.isWeatherSynchronized()) { - player.setPlayerTime(island.getTime(), - configLoad.getBoolean("Island.Weather.Time.Cycle")); - player.setPlayerWeather(island.getWeather()); - } - - if (configLoad.getBoolean("Island.WorldBorder.Enable") && island.isBorder()) { - WorldBorder.send(player, island.getBorderColor(), island.getSize() + 2.5, - island.getLocation(worldManager.getIslandWorld(player.getWorld()), - IslandEnvironment.Island)); - } else { - WorldBorder.send(player, null, 1.4999992E7D, - new org.bukkit.Location(player.getWorld(), 0, 0, 0)); - } - - giveUpgrades(player, island); - giveFly(player, island); - - return; + if (!island.isWeatherSynchronized()) { + player.setPlayerTime(island.getTime(), configLoad.getBoolean("Island.Weather.Time.Cycle")); + player.setPlayerWeather(island.getWeather()); } + + if (configLoad.getBoolean("Island.WorldBorder.Enable") && island.isBorder()) { + WorldBorder.send(player, island.getBorderColor(), island.getSize() + 2.5, + island.getLocation(worldManager.getIslandWorld(player.getWorld()), + IslandEnvironment.Island)); + } else { + WorldBorder.send(player, null, 1.4999992E7D, + new org.bukkit.Location(player.getWorld(), 0, 0, 0)); + } + + giveUpgrades(player, island); + giveFly(player, island); + + return; } } } @@ -1242,6 +1249,18 @@ public class IslandManager { } } + public Island getIslandAtLocation(org.bukkit.Location location) { + for (UUID islandList : getIslands().keySet()) { + Island island = getIslands().get(islandList); + + if (isLocationAtIsland(island, location)) { + return island; + } + } + + return null; + } + public boolean isPlayerAtIsland(Island island, Player player) { return isLocationAtIsland(island, player.getLocation()); } diff --git a/src/main/java/me/goodandevil/skyblock/leaderboard/LeaderboardManager.java b/src/main/java/me/goodandevil/skyblock/leaderboard/LeaderboardManager.java index 0f026687..04e5d325 100644 --- a/src/main/java/me/goodandevil/skyblock/leaderboard/LeaderboardManager.java +++ b/src/main/java/me/goodandevil/skyblock/leaderboard/LeaderboardManager.java @@ -6,7 +6,11 @@ import java.util.Comparator; import java.util.List; import java.util.UUID; +import org.bukkit.Bukkit; + import me.goodandevil.skyblock.SkyBlock; +import me.goodandevil.skyblock.leaderboard.leaderheads.TopLevel; +import me.goodandevil.skyblock.leaderboard.leaderheads.TopVotes; import me.goodandevil.skyblock.visit.Visit; import me.goodandevil.skyblock.visit.VisitManager; @@ -24,6 +28,7 @@ public class LeaderboardManager { .getFileConfiguration().getInt("Island.Leaderboard.Reset.Time") * 20); resetLeaderboard(); + setupLeaderHeads(); } public void resetLeaderboard() { @@ -66,6 +71,13 @@ public class LeaderboardManager { } } + public void setupLeaderHeads() { + if (Bukkit.getServer().getPluginManager().getPlugin("LeaderHeads") != null) { + new TopLevel(skyblock); + new TopVotes(skyblock); + } + } + public void clearLeaderboard() { leaderboardStorage.clear(); } diff --git a/src/main/java/me/goodandevil/skyblock/leaderboard/LeaderboardTask.java b/src/main/java/me/goodandevil/skyblock/leaderboard/LeaderboardTask.java index 8774be6b..2c73ea45 100644 --- a/src/main/java/me/goodandevil/skyblock/leaderboard/LeaderboardTask.java +++ b/src/main/java/me/goodandevil/skyblock/leaderboard/LeaderboardTask.java @@ -17,6 +17,7 @@ public class LeaderboardTask extends BukkitRunnable { LeaderboardManager leaderboardManager = skyblock.getLeaderboardManager(); leaderboardManager.clearLeaderboard(); leaderboardManager.resetLeaderboard(); + leaderboardManager.setupLeaderHeads(); skyblock.getHologramManager().resetHologram(); } diff --git a/src/main/java/me/goodandevil/skyblock/leaderboard/leaderheads/TopLevel.java b/src/main/java/me/goodandevil/skyblock/leaderboard/leaderheads/TopLevel.java new file mode 100644 index 00000000..d955ce6b --- /dev/null +++ b/src/main/java/me/goodandevil/skyblock/leaderboard/leaderheads/TopLevel.java @@ -0,0 +1,48 @@ +package me.goodandevil.skyblock.leaderboard.leaderheads; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; + +import org.bukkit.ChatColor; + +import java.util.UUID; + +import me.goodandevil.skyblock.SkyBlock; +import me.goodandevil.skyblock.leaderboard.Leaderboard; +import me.goodandevil.skyblock.leaderboard.Leaderboard.Type; +import me.goodandevil.skyblock.visit.Visit; +import me.robin.leaderheads.api.LeaderHeadsAPI; +import me.robin.leaderheads.datacollectors.DataCollector; +import me.robin.leaderheads.objects.BoardType; + +public class TopLevel extends DataCollector { + + private final SkyBlock skyblock; + + public TopLevel(SkyBlock skyblock) { + super("toplevels", "SkyBlock", BoardType.DEFAULT, "&bTop Level", "toplevel", + Arrays.asList(ChatColor.DARK_GRAY + "-=+=-", ChatColor.AQUA + "{name}", + ChatColor.WHITE + "{amount} Level", ChatColor.DARK_GRAY + "-=+=-"), + true, UUID.class); + + this.skyblock = skyblock; + } + + @Override + public List> requestAll() { + Map topLevels = new HashMap<>(); + + List leaderboards = skyblock.getLeaderboardManager().getLeaderboard(Type.Level); + + for (int i = 0; i < leaderboards.size(); i++) { + Leaderboard leaderboard = leaderboards.get(i); + Visit visit = leaderboard.getVisit(); + topLevels.put(visit.getOwnerUUID(), (double) visit.getLevel().getLevel()); + } + + return LeaderHeadsAPI.sortMap(topLevels); + } +} diff --git a/src/main/java/me/goodandevil/skyblock/leaderboard/leaderheads/TopVotes.java b/src/main/java/me/goodandevil/skyblock/leaderboard/leaderheads/TopVotes.java new file mode 100644 index 00000000..80f500d4 --- /dev/null +++ b/src/main/java/me/goodandevil/skyblock/leaderboard/leaderheads/TopVotes.java @@ -0,0 +1,47 @@ +package me.goodandevil.skyblock.leaderboard.leaderheads; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.UUID; +import java.util.Map.Entry; + +import org.bukkit.ChatColor; + +import me.goodandevil.skyblock.SkyBlock; +import me.goodandevil.skyblock.leaderboard.Leaderboard; +import me.goodandevil.skyblock.leaderboard.Leaderboard.Type; +import me.goodandevil.skyblock.visit.Visit; +import me.robin.leaderheads.api.LeaderHeadsAPI; +import me.robin.leaderheads.datacollectors.DataCollector; +import me.robin.leaderheads.objects.BoardType; + +public class TopVotes extends DataCollector { + + private final SkyBlock skyblock; + + public TopVotes(SkyBlock skyblock) { + super("topvotes", "SkyBlock", BoardType.DEFAULT, "&bTop Votes", "topvotes", + Arrays.asList(ChatColor.DARK_GRAY + "-=+=-", ChatColor.AQUA + "{name}", + ChatColor.WHITE + "{amount} Votes", ChatColor.DARK_GRAY + "-=+=-"), + true, UUID.class); + + this.skyblock = skyblock; + } + + @Override + public List> requestAll() { + Map topLevels = new HashMap<>(); + + List leaderboards = skyblock.getLeaderboardManager().getLeaderboard(Type.Votes); + + for (int i = 0; i < leaderboards.size(); i++) { + Leaderboard leaderboard = leaderboards.get(i); + Visit visit = leaderboard.getVisit(); + topLevels.put(visit.getOwnerUUID(), (double) visit.getVoters().size()); + } + + return LeaderHeadsAPI.sortMap(topLevels); + } +} diff --git a/src/main/java/me/goodandevil/skyblock/listeners/Block.java b/src/main/java/me/goodandevil/skyblock/listeners/Block.java index f3bba375..d3a0cd93 100644 --- a/src/main/java/me/goodandevil/skyblock/listeners/Block.java +++ b/src/main/java/me/goodandevil/skyblock/listeners/Block.java @@ -3,7 +3,6 @@ package me.goodandevil.skyblock.listeners; import java.io.File; import java.lang.reflect.InvocationTargetException; import java.util.List; -import java.util.UUID; import org.bukkit.Bukkit; import org.bukkit.Material; @@ -62,51 +61,44 @@ public class Block implements Listener { if (worldManager.isIslandWorld(block.getWorld())) { IslandWorld world = worldManager.getIslandWorld(block.getWorld()); + Island island = islandManager.getIslandAtLocation(block.getLocation()); if (islandManager.hasPermission(player, block.getLocation(), "Destroy")) { - for (UUID islandList : islandManager.getIslands().keySet()) { - Island island = islandManager.getIslands().get(islandList); + if (generatorManager != null) { + if (generatorManager.isGenerator(block)) { + if (playerDataManager.hasPlayerData(player)) { + org.bukkit.block.Block liquid = null; - if (islandManager.isLocationAtIsland(island, block.getLocation(), world)) { - if (generatorManager != null) { - if (generatorManager.isGenerator(block)) { - if (playerDataManager.hasPlayerData(player)) { - org.bukkit.block.Block liquid = null; + if (NMSUtil.getVersionNumber() < 13) { + BlockFace[] blockFaces = new BlockFace[] { BlockFace.NORTH, BlockFace.EAST, + BlockFace.SOUTH, BlockFace.WEST }; - if (NMSUtil.getVersionNumber() < 13) { - BlockFace[] blockFaces = new BlockFace[] { BlockFace.NORTH, BlockFace.EAST, - BlockFace.SOUTH, BlockFace.WEST }; - - for (BlockFace blockFaceList : blockFaces) { - if (event.getBlock().getRelative(blockFaceList) - .getType() == Materials.LEGACY_STATIONARY_LAVA.getPostMaterial() - || event.getBlock().getRelative(blockFaceList) - .getType() == Materials.LAVA.parseMaterial()) { - liquid = event.getBlock().getRelative(blockFaceList); - break; - } - } + for (BlockFace blockFaceList : blockFaces) { + if (event.getBlock().getRelative(blockFaceList) + .getType() == Materials.LEGACY_STATIONARY_LAVA.getPostMaterial() + || event.getBlock().getRelative(blockFaceList).getType() == Materials.LAVA + .parseMaterial()) { + liquid = event.getBlock().getRelative(blockFaceList); + break; } - - playerDataManager.getPlayerData(player) - .setGenerator(new GeneratorLocation(world, block, liquid)); } } - } - if (LocationUtil.isLocationLocation(block.getLocation(), - island.getLocation(world, IslandEnvironment.Main).clone().subtract(0.0D, 1.0D, 0.0D))) { - if (skyblock.getFileManager().getConfig(new File(skyblock.getDataFolder(), "config.yml")) - .getFileConfiguration().getBoolean("Island.Spawn.Protection")) { - event.setCancelled(true); - } + playerDataManager.getPlayerData(player) + .setGenerator(new GeneratorLocation(world, block, liquid)); } - - return; } } - event.setCancelled(true); + if (LocationUtil.isLocationLocation(block.getLocation(), + island.getLocation(world, IslandEnvironment.Main).clone().subtract(0.0D, 1.0D, 0.0D))) { + if (skyblock.getFileManager().getConfig(new File(skyblock.getDataFolder(), "config.yml")) + .getFileConfiguration().getBoolean("Island.Spawn.Protection")) { + event.setCancelled(true); + } + } + + return; } else { event.setCancelled(true); @@ -128,51 +120,38 @@ public class Block implements Listener { if (worldManager.isIslandWorld(block.getWorld())) { IslandWorld world = worldManager.getIslandWorld(block.getWorld()); + Island island = islandManager.getIslandAtLocation(block.getLocation()); - if (islandManager.hasPermission(player, "Place")) { - for (UUID islandList : islandManager.getIslands().keySet()) { - Island island = islandManager.getIslands().get(islandList); + if (islandManager.hasPermission(player, block.getLocation(), "Place")) { + Config config = skyblock.getFileManager().getConfig(new File(skyblock.getDataFolder(), "config.yml")); + FileConfiguration configLoad = config.getFileConfiguration(); - if (islandManager.isLocationAtIsland(island, block.getLocation())) { - Config config = skyblock.getFileManager() - .getConfig(new File(skyblock.getDataFolder(), "config.yml")); - FileConfiguration configLoad = config.getFileConfiguration(); - - if (configLoad.getBoolean("Island.WorldBorder.Block")) { - if (block.getType() == Materials.PISTON.parseMaterial() - || block.getType() == Materials.STICKY_PISTON.parseMaterial()) { - if (!LocationUtil.isLocationAtLocationRadius(block.getLocation(), - island.getLocation(world, IslandEnvironment.Island), - island.getRadius() - 12.0D)) { - event.setCancelled(true); - } - } else if (block.getType() == Material.DISPENSER) { - if (!LocationUtil.isLocationAtLocationRadius(block.getLocation(), - island.getLocation(world, IslandEnvironment.Island), - island.getRadius() - 2.0D)) { - event.setCancelled(true); - } - } + if (configLoad.getBoolean("Island.WorldBorder.Block")) { + if (block.getType() == Materials.PISTON.parseMaterial() + || block.getType() == Materials.STICKY_PISTON.parseMaterial()) { + if (!LocationUtil.isLocationAtLocationRadius(block.getLocation(), + island.getLocation(world, IslandEnvironment.Island), island.getRadius() - 12.0D)) { + event.setCancelled(true); } - - if (LocationUtil.isLocationLocation(block.getLocation(), - island.getLocation(world, IslandEnvironment.Main)) - || LocationUtil.isLocationLocation(block.getLocation(), - island.getLocation(world, IslandEnvironment.Main).clone().add(0.0D, 1.0D, 0.0D)) - || LocationUtil.isLocationLocation(block.getLocation(), - island.getLocation(world, IslandEnvironment.Main).clone().subtract(0.0D, 1.0D, - 0.0D))) { - if (skyblock.getFileManager().getConfig(new File(skyblock.getDataFolder(), "config.yml")) - .getFileConfiguration().getBoolean("Island.Spawn.Protection")) { - event.setCancelled(true); - } + } else if (block.getType() == Material.DISPENSER) { + if (!LocationUtil.isLocationAtLocationRadius(block.getLocation(), + island.getLocation(world, IslandEnvironment.Island), island.getRadius() - 2.0D)) { + event.setCancelled(true); } - - return; } } - event.setCancelled(true); + if (LocationUtil.isLocationLocation(block.getLocation(), + island.getLocation(world, IslandEnvironment.Main)) + || LocationUtil.isLocationLocation(block.getLocation(), + island.getLocation(world, IslandEnvironment.Main).clone().add(0.0D, 1.0D, 0.0D)) + || LocationUtil.isLocationLocation(block.getLocation(), + island.getLocation(world, IslandEnvironment.Main).clone().subtract(0.0D, 1.0D, 0.0D))) { + if (skyblock.getFileManager().getConfig(new File(skyblock.getDataFolder(), "config.yml")) + .getFileConfiguration().getBoolean("Island.Spawn.Protection")) { + event.setCancelled(true); + } + } } else { event.setCancelled(true); @@ -338,45 +317,43 @@ public class Block implements Listener { IslandManager islandManager = skyblock.getIslandManager(); if (skyblock.getWorldManager().isIslandWorld(block.getWorld())) { - for (UUID islandList : islandManager.getIslands().keySet()) { - Island island = islandManager.getIslands().get(islandList); + Island island = islandManager.getIslandAtLocation(block.getLocation()); - if (islandManager.isLocationAtIsland(island, block.getLocation())) { - List upgrades = skyblock.getUpgradeManager().getUpgrades(Upgrade.Type.Crop); + if (island != null) { + List upgrades = skyblock.getUpgradeManager().getUpgrades(Upgrade.Type.Crop); - if (upgrades != null && upgrades.size() > 0 && upgrades.get(0).isEnabled() - && island.isUpgrade(Upgrade.Type.Crop)) { - if (NMSUtil.getVersionNumber() > 12) { - try { - Object blockData = block.getClass().getMethod("getBlockData").invoke(block); + if (upgrades != null && upgrades.size() > 0 && upgrades.get(0).isEnabled() + && island.isUpgrade(Upgrade.Type.Crop)) { + if (NMSUtil.getVersionNumber() > 12) { + try { + Object blockData = block.getClass().getMethod("getBlockData").invoke(block); - if (blockData instanceof org.bukkit.block.data.Ageable) { - org.bukkit.block.data.Ageable ageable = (org.bukkit.block.data.Ageable) blockData; - ageable.setAge(ageable.getAge() + 1); - block.getClass() - .getMethod("setBlockData", Class.forName("org.bukkit.block.data.BlockData")) - .invoke(block, ageable); - } - } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException - | NoSuchMethodException | SecurityException | ClassNotFoundException e) { - e.printStackTrace(); + if (blockData instanceof org.bukkit.block.data.Ageable) { + org.bukkit.block.data.Ageable ageable = (org.bukkit.block.data.Ageable) blockData; + ageable.setAge(ageable.getAge() + 1); + block.getClass() + .getMethod("setBlockData", Class.forName("org.bukkit.block.data.BlockData")) + .invoke(block, ageable); } - } else { - if (block.getState().getData() instanceof Crops) { - try { - block.getClass().getMethod("setData", byte.class).invoke(block, - (byte) (block.getData() + 1)); - block.getState().update(); - } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException - | NoSuchMethodException | SecurityException e) { - e.printStackTrace(); - } + } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException + | NoSuchMethodException | SecurityException | ClassNotFoundException e) { + e.printStackTrace(); + } + } else { + if (block.getState().getData() instanceof Crops) { + try { + block.getClass().getMethod("setData", byte.class).invoke(block, + (byte) (block.getData() + 1)); + block.getState().update(); + } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException + | NoSuchMethodException | SecurityException e) { + e.printStackTrace(); } } } - - return; } + + return; } } } diff --git a/src/main/java/me/goodandevil/skyblock/listeners/Death.java b/src/main/java/me/goodandevil/skyblock/listeners/Death.java index 48b1fa74..2fad6918 100644 --- a/src/main/java/me/goodandevil/skyblock/listeners/Death.java +++ b/src/main/java/me/goodandevil/skyblock/listeners/Death.java @@ -36,8 +36,10 @@ public class Death implements Listener { "KeepItemsOnDeath")) { keepInventory = true; } - } else { + } else if (configLoad.getBoolean("Island.KeepItemsOnDeath.Enable")) { keepInventory = true; + } else { + keepInventory = false; } if (keepInventory) { diff --git a/src/main/java/me/goodandevil/skyblock/listeners/Entity.java b/src/main/java/me/goodandevil/skyblock/listeners/Entity.java index e92d4397..d6789bcc 100644 --- a/src/main/java/me/goodandevil/skyblock/listeners/Entity.java +++ b/src/main/java/me/goodandevil/skyblock/listeners/Entity.java @@ -2,7 +2,6 @@ package me.goodandevil.skyblock.listeners; import java.io.File; import java.util.List; -import java.util.UUID; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.entity.ArmorStand; @@ -14,6 +13,7 @@ import org.bukkit.entity.Player; import org.bukkit.entity.Projectile; import org.bukkit.entity.TNTPrimed; import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.entity.CreatureSpawnEvent; import org.bukkit.event.entity.EntityDamageByEntityEvent; @@ -90,12 +90,11 @@ public class Entity implements Listener { Config config = fileManager.getConfig(new File(skyblock.getDataFolder(), "config.yml")); FileConfiguration configLoad = config.getFileConfiguration(); - if (configLoad.getBoolean("Island.Settings.PvP.Enable")) { - if (!configLoad.getBoolean("Island.Settings.PvP.Enable") - || !skyblock.getIslandManager().hasSetting(player.getLocation(), IslandRole.Owner, "Damage")) { + if (configLoad.getBoolean("Island.Settings.Damage.Enable")) { + if (!skyblock.getIslandManager().hasSetting(player.getLocation(), IslandRole.Owner, "Damage")) { event.setCancelled(true); } - } else { + } else if (!configLoad.getBoolean("Island.Damage.Enable")) { event.setCancelled(true); } } @@ -114,15 +113,15 @@ public class Entity implements Listener { if (skyblock.getWorldManager().isIslandWorld(entity.getWorld())) { if (entity instanceof Player) { - if (fileManager.getConfig(new File(skyblock.getDataFolder(), "config.yml")).getFileConfiguration() - .getBoolean("Island.Settings.PvP.Enable")) { + Config config = fileManager.getConfig(new File(skyblock.getDataFolder(), "config.yml")); + FileConfiguration configLoad = config.getFileConfiguration(); + + if (configLoad.getBoolean("Island.Settings.PvP.Enable")) { if (!islandManager.hasSetting(entity.getLocation(), IslandRole.Owner, "PvP")) { event.setCancelled(true); } - } else { + } else if (!configLoad.getBoolean("Island.PvP.Enable")) { event.setCancelled(true); - - return; } } else if (entity instanceof ArmorStand) { if (!islandManager.hasPermission(player, entity.getLocation(), "Destroy")) { @@ -157,12 +156,14 @@ public class Entity implements Listener { if (skyblock.getWorldManager().isIslandWorld(entity.getWorld())) { if (event.getEntity() instanceof Player) { - if (fileManager.getConfig(new File(skyblock.getDataFolder(), "config.yml")).getFileConfiguration() - .getBoolean("Island.Settings.PvP.Enable")) { + Config config = fileManager.getConfig(new File(skyblock.getDataFolder(), "config.yml")); + FileConfiguration configLoad = config.getFileConfiguration(); + + if (configLoad.getBoolean("Island.Settings.PvP.Enable")) { if (!islandManager.hasSetting(entity.getLocation(), IslandRole.Owner, "PvP")) { event.setCancelled(true); } - } else { + } else if (!configLoad.getBoolean("Island.PvP.Enable")) { event.setCancelled(true); } } else { @@ -182,14 +183,16 @@ public class Entity implements Listener { Player player = (Player) event.getEntity(); if (skyblock.getWorldManager().isIslandWorld(player.getWorld())) { - if (fileManager.getConfig(new File(skyblock.getDataFolder(), "config.yml")).getFileConfiguration() - .getBoolean("Island.Settings.Damage.Enable")) { + Config config = fileManager.getConfig(new File(skyblock.getDataFolder(), "config.yml")); + FileConfiguration configLoad = config.getFileConfiguration(); + + if (configLoad.getBoolean("Island.Settings.Damage.Enable")) { if (!islandManager.hasSetting(player.getLocation(), IslandRole.Owner, "Damage") || (event.getDamager() instanceof TNTPrimed && !islandManager .hasSetting(player.getLocation(), IslandRole.Owner, "Explosions"))) { event.setCancelled(true); } - } else { + } else if (!configLoad.getBoolean("Island.Damage.Enable")) { event.setCancelled(true); } } @@ -320,7 +323,7 @@ public class Entity implements Listener { } } - @EventHandler + @EventHandler(priority = EventPriority.MONITOR) public void onEntityDeath(EntityDeathEvent event) { if (event.getEntity() instanceof Player) { return; @@ -335,21 +338,19 @@ public class Entity implements Listener { IslandManager islandManager = skyblock.getIslandManager(); if (skyblock.getWorldManager().isIslandWorld(livingEntity.getWorld())) { - for (UUID islandList : islandManager.getIslands().keySet()) { - Island island = islandManager.getIslands().get(islandList); + Island island = islandManager.getIslandAtLocation(livingEntity.getLocation()); - if (islandManager.isLocationAtIsland(island, livingEntity.getLocation())) { - List upgrades = skyblock.getUpgradeManager().getUpgrades(Upgrade.Type.Drops); + if (island != null) { + List upgrades = skyblock.getUpgradeManager().getUpgrades(Upgrade.Type.Drops); - if (upgrades != null && upgrades.size() > 0 && upgrades.get(0).isEnabled() - && island.isUpgrade(Upgrade.Type.Drops)) { - List entityDrops = event.getDrops(); + if (upgrades != null && upgrades.size() > 0 && upgrades.get(0).isEnabled() + && island.isUpgrade(Upgrade.Type.Drops)) { + List entityDrops = event.getDrops(); - if (entityDrops != null) { - for (int i = 0; i < entityDrops.size(); i++) { - ItemStack is = entityDrops.get(i); - is.setAmount(is.getAmount() * 2); - } + if (entityDrops != null) { + for (int i = 0; i < entityDrops.size(); i++) { + ItemStack is = entityDrops.get(i); + is.setAmount(is.getAmount() * 2); } } } diff --git a/src/main/java/me/goodandevil/skyblock/listeners/Move.java b/src/main/java/me/goodandevil/skyblock/listeners/Move.java index 5e8dbf74..04cc4712 100644 --- a/src/main/java/me/goodandevil/skyblock/listeners/Move.java +++ b/src/main/java/me/goodandevil/skyblock/listeners/Move.java @@ -116,8 +116,10 @@ public class Move implements Listener { } else { keepItemsOnDeath = false; } - } else { + } else if (configLoad.getBoolean("Island.KeepItemsOnDeath.Enable")) { keepItemsOnDeath = true; + } else { + keepItemsOnDeath = false; } if (configLoad.getBoolean("Island.World." + world.name() + ".Liquid.Enable")) { diff --git a/src/main/java/me/goodandevil/skyblock/listeners/Portal.java b/src/main/java/me/goodandevil/skyblock/listeners/Portal.java index 181997d2..7259fdc7 100644 --- a/src/main/java/me/goodandevil/skyblock/listeners/Portal.java +++ b/src/main/java/me/goodandevil/skyblock/listeners/Portal.java @@ -1,7 +1,6 @@ package me.goodandevil.skyblock.listeners; import java.io.File; -import java.util.UUID; import org.bukkit.Bukkit; import org.bukkit.World; @@ -55,100 +54,97 @@ public class Portal implements Listener { } IslandWorld world = worldManager.getIslandWorld(player.getWorld()); + Island island = islandManager.getIslandAtLocation(player.getLocation()); - for (UUID islandList : islandManager.getIslands().keySet()) { - Island island = islandManager.getIslands().get(islandList); - + if (island != null) { Config config = fileManager.getConfig(new File(skyblock.getDataFolder(), "config.yml")); FileConfiguration configLoad = config.getFileConfiguration(); - if (islandManager.isPlayerAtIsland(island, player)) { - if (((block.getType() == Materials.NETHER_PORTAL.parseMaterial() - && configLoad.getBoolean("Island.World.Nether.Enable")) - || (block.getType() == Materials.END_PORTAL.parseMaterial() - && configLoad.getBoolean("Island.World.End.Enable"))) - && islandManager.hasPermission(player, "Portal")) { - if (configLoad.getBoolean("Island.Portal.Island")) { - if (island.hasRole(IslandRole.Member, player.getUniqueId()) - || island.hasRole(IslandRole.Operator, player.getUniqueId()) - || island.hasRole(IslandRole.Owner, player.getUniqueId())) { - if (world == IslandWorld.Normal) { - if (block.getType() == Materials.NETHER_PORTAL.parseMaterial()) { - player.teleport(island.getLocation(IslandWorld.Nether, IslandEnvironment.Main)); - } else if (block.getType() == Materials.END_PORTAL.parseMaterial()) { - player.teleport(island.getLocation(IslandWorld.End, IslandEnvironment.Main)); - } - } else { - player.teleport(island.getLocation(IslandWorld.Normal, IslandEnvironment.Main)); + if (((block.getType() == Materials.NETHER_PORTAL.parseMaterial() + && configLoad.getBoolean("Island.World.Nether.Enable")) + || (block.getType() == Materials.END_PORTAL.parseMaterial() + && configLoad.getBoolean("Island.World.End.Enable"))) + && islandManager.hasPermission(player, "Portal")) { + if (configLoad.getBoolean("Island.Portal.Island")) { + if (island.hasRole(IslandRole.Member, player.getUniqueId()) + || island.hasRole(IslandRole.Operator, player.getUniqueId()) + || island.hasRole(IslandRole.Owner, player.getUniqueId())) { + if (world == IslandWorld.Normal) { + if (block.getType() == Materials.NETHER_PORTAL.parseMaterial()) { + player.teleport(island.getLocation(IslandWorld.Nether, IslandEnvironment.Main)); + } else if (block.getType() == Materials.END_PORTAL.parseMaterial()) { + player.teleport(island.getLocation(IslandWorld.End, IslandEnvironment.Main)); } } else { - if (world == IslandWorld.Normal) { - if (block.getType() == Materials.NETHER_PORTAL.parseMaterial()) { - player.teleport(island.getLocation(IslandWorld.Nether, IslandEnvironment.Visitor)); - } else if (block.getType() == Materials.END_PORTAL.parseMaterial()) { - player.teleport(island.getLocation(IslandWorld.End, IslandEnvironment.Visitor)); - } - } else { - player.teleport(island.getLocation(IslandWorld.Normal, IslandEnvironment.Visitor)); - } - } - - soundManager.playSound(player, Sounds.ENDERMAN_TELEPORT.bukkitSound(), 1.0F, 1.0F); - } else if (block.getType() == Materials.NETHER_PORTAL.parseMaterial() - && Bukkit.getServer().getAllowNether()) { - for (World worldList : Bukkit.getServer().getWorlds()) { - if (worldList.getEnvironment() == Environment.NETHER) { - player.teleport(LocationUtil.getRandomLocation(worldList, 5000, 5000, true, true)); - - break; - } - } - - soundManager.playSound(player, Sounds.ENDERMAN_TELEPORT.bukkitSound(), 1.0F, 1.0F); - } else if (block.getType() == Materials.END_PORTAL.parseMaterial() - && Bukkit.getServer().getAllowEnd()) { - for (World worldList : Bukkit.getServer().getWorlds()) { - if (worldList.getEnvironment() == Environment.THE_END) { - player.teleport(worldList.getSpawnLocation()); - - break; - } - } - - soundManager.playSound(player, Sounds.ENDERMAN_TELEPORT.bukkitSound(), 1.0F, 1.0F); - } else { - if (island.hasRole(IslandRole.Member, player.getUniqueId()) - || island.hasRole(IslandRole.Operator, player.getUniqueId()) - || island.hasRole(IslandRole.Owner, player.getUniqueId())) { player.teleport(island.getLocation(IslandWorld.Normal, IslandEnvironment.Main)); + } + } else { + if (world == IslandWorld.Normal) { + if (block.getType() == Materials.NETHER_PORTAL.parseMaterial()) { + player.teleport(island.getLocation(IslandWorld.Nether, IslandEnvironment.Visitor)); + } else if (block.getType() == Materials.END_PORTAL.parseMaterial()) { + player.teleport(island.getLocation(IslandWorld.End, IslandEnvironment.Visitor)); + } } else { player.teleport(island.getLocation(IslandWorld.Normal, IslandEnvironment.Visitor)); } - - messageManager.sendMessage(player, - fileManager.getConfig(new File(skyblock.getDataFolder(), "language.yml")) - .getFileConfiguration().getString("Island.Portal.Destination.Message")); - soundManager.playSound(player, Sounds.VILLAGER_NO.bukkitSound(), 1.0F, 1.0F); } + + soundManager.playSound(player, Sounds.ENDERMAN_TELEPORT.bukkitSound(), 1.0F, 1.0F); + } else if (block.getType() == Materials.NETHER_PORTAL.parseMaterial() + && Bukkit.getServer().getAllowNether()) { + for (World worldList : Bukkit.getServer().getWorlds()) { + if (worldList.getEnvironment() == Environment.NETHER) { + player.teleport(LocationUtil.getRandomLocation(worldList, 5000, 5000, true, true)); + + break; + } + } + + soundManager.playSound(player, Sounds.ENDERMAN_TELEPORT.bukkitSound(), 1.0F, 1.0F); + } else if (block.getType() == Materials.END_PORTAL.parseMaterial() + && Bukkit.getServer().getAllowEnd()) { + for (World worldList : Bukkit.getServer().getWorlds()) { + if (worldList.getEnvironment() == Environment.THE_END) { + player.teleport(worldList.getSpawnLocation()); + + break; + } + } + + soundManager.playSound(player, Sounds.ENDERMAN_TELEPORT.bukkitSound(), 1.0F, 1.0F); } else { if (island.hasRole(IslandRole.Member, player.getUniqueId()) || island.hasRole(IslandRole.Operator, player.getUniqueId()) || island.hasRole(IslandRole.Owner, player.getUniqueId())) { - player.teleport(island.getLocation(world, IslandEnvironment.Main)); + player.teleport(island.getLocation(IslandWorld.Normal, IslandEnvironment.Main)); } else { - player.teleport(island.getLocation(world, IslandEnvironment.Visitor)); + player.teleport(island.getLocation(IslandWorld.Normal, IslandEnvironment.Visitor)); } messageManager.sendMessage(player, fileManager.getConfig(new File(skyblock.getDataFolder(), "language.yml")) - .getFileConfiguration().getString("Island.Settings.Permission.Message")); + .getFileConfiguration().getString("Island.Portal.Destination.Message")); soundManager.playSound(player, Sounds.VILLAGER_NO.bukkitSound(), 1.0F, 1.0F); } + } else { + if (island.hasRole(IslandRole.Member, player.getUniqueId()) + || island.hasRole(IslandRole.Operator, player.getUniqueId()) + || island.hasRole(IslandRole.Owner, player.getUniqueId())) { + player.teleport(island.getLocation(world, IslandEnvironment.Main)); + } else { + player.teleport(island.getLocation(world, IslandEnvironment.Visitor)); + } - player.setFallDistance(0.0F); - - return; + messageManager.sendMessage(player, + fileManager.getConfig(new File(skyblock.getDataFolder(), "language.yml")).getFileConfiguration() + .getString("Island.Settings.Permission.Message")); + soundManager.playSound(player, Sounds.VILLAGER_NO.bukkitSound(), 1.0F, 1.0F); } + + player.setFallDistance(0.0F); + + return; } } } diff --git a/src/main/java/me/goodandevil/skyblock/listeners/Respawn.java b/src/main/java/me/goodandevil/skyblock/listeners/Respawn.java index 685d8f64..29decfa5 100644 --- a/src/main/java/me/goodandevil/skyblock/listeners/Respawn.java +++ b/src/main/java/me/goodandevil/skyblock/listeners/Respawn.java @@ -1,7 +1,6 @@ package me.goodandevil.skyblock.listeners; import java.io.File; -import java.util.UUID; import java.util.logging.Level; import org.bukkit.Bukkit; @@ -44,30 +43,28 @@ public class Respawn implements Listener { FileConfiguration configLoad = config.getFileConfiguration(); if (configLoad.getBoolean("Island.Death.Respawn.Island")) { - for (UUID islandList : islandManager.getIslands().keySet()) { - Island island = islandManager.getIslands().get(islandList); + Island island = islandManager.getIslandAtLocation(player.getLocation()); - if (islandManager.isPlayerAtIsland(island, player)) { - Location playerLocation = player.getLocation().clone(), islandLocation; - IslandWorld world = worldManager.getIslandWorld(player.getWorld()); + if (island != null) { + Location playerLocation = player.getLocation().clone(), islandLocation; + IslandWorld world = worldManager.getIslandWorld(player.getWorld()); - if (island.hasRole(IslandRole.Member, player.getUniqueId()) - || island.hasRole(IslandRole.Operator, player.getUniqueId()) - || island.hasRole(IslandRole.Owner, player.getUniqueId())) { - islandLocation = island.getLocation(world, IslandEnvironment.Main); - } else { - islandLocation = island.getLocation(world, IslandEnvironment.Visitor); - } - - Bukkit.getServer().getPluginManager() - .callEvent(new PlayerTeleportEvent(player, playerLocation, islandLocation)); - event.setRespawnLocation(islandLocation); - - islandManager.giveUpgrades(player, island); - islandManager.giveFly(player, island); - - return; + if (island.hasRole(IslandRole.Member, player.getUniqueId()) + || island.hasRole(IslandRole.Operator, player.getUniqueId()) + || island.hasRole(IslandRole.Owner, player.getUniqueId())) { + islandLocation = island.getLocation(world, IslandEnvironment.Main); + } else { + islandLocation = island.getLocation(world, IslandEnvironment.Visitor); } + + Bukkit.getServer().getPluginManager() + .callEvent(new PlayerTeleportEvent(player, playerLocation, islandLocation)); + event.setRespawnLocation(islandLocation); + + islandManager.giveUpgrades(player, island); + islandManager.giveFly(player, island); + + return; } } diff --git a/src/main/java/me/goodandevil/skyblock/listeners/Spawner.java b/src/main/java/me/goodandevil/skyblock/listeners/Spawner.java index c04905e7..2a041a0e 100644 --- a/src/main/java/me/goodandevil/skyblock/listeners/Spawner.java +++ b/src/main/java/me/goodandevil/skyblock/listeners/Spawner.java @@ -3,7 +3,6 @@ package me.goodandevil.skyblock.listeners; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.util.List; -import java.util.UUID; import org.bukkit.block.CreatureSpawner; import org.bukkit.event.EventHandler; @@ -32,75 +31,71 @@ public class Spawner implements Listener { org.bukkit.Location location = spawner.getBlock().getLocation(); if (skyblock.getWorldManager().isIslandWorld(location.getWorld())) { - for (UUID islandList : islandManager.getIslands().keySet()) { - Island island = islandManager.getIslands().get(islandList); + Island island = islandManager.getIslandAtLocation(location); - if (islandManager.isLocationAtIsland(island, location)) { - List upgrades = skyblock.getUpgradeManager().getUpgrades(Upgrade.Type.Spawner); + if (island != null) { + List upgrades = skyblock.getUpgradeManager().getUpgrades(Upgrade.Type.Spawner); - if (upgrades != null && upgrades.size() > 0 && upgrades.get(0).isEnabled() - && island.isUpgrade(Upgrade.Type.Spawner)) { - if (NMSUtil.getVersionNumber() > 12) { - if (spawner.getDelay() == 20) { - spawner.setDelay(10); - } + if (upgrades != null && upgrades.size() > 0 && upgrades.get(0).isEnabled() + && island.isUpgrade(Upgrade.Type.Spawner)) { + if (NMSUtil.getVersionNumber() > 12) { + if (spawner.getDelay() == 20) { + spawner.setDelay(10); + } + + spawner.setMinSpawnDelay(100); + spawner.setMaxSpawnDelay(400); + } else { + try { + Object MobSpawner = null; - spawner.setMinSpawnDelay(100); - spawner.setMaxSpawnDelay(400); - } else { try { - Object MobSpawner = null; - - try { - Field TileEntityMobSpawnerField = spawner.getClass().getDeclaredField("spawner"); - TileEntityMobSpawnerField.setAccessible(true); - Object TileEntityMobSpawner = TileEntityMobSpawnerField.get(spawner); - MobSpawner = TileEntityMobSpawner.getClass().getMethod("getSpawner") - .invoke(TileEntityMobSpawner); - } catch (NoSuchFieldException e) { - Field snapshotField = spawner.getClass().getSuperclass() - .getDeclaredField("snapshot"); - snapshotField.setAccessible(true); - Object snapshot = snapshotField.get(spawner); - MobSpawner = snapshot.getClass().getMethod("getSpawner").invoke(snapshot); - } - - int spawnDelay = (int) MobSpawner.getClass().getSuperclass().getField("spawnDelay") - .get(MobSpawner); - - if (spawnDelay == 20) { - Field spawnDelayField = MobSpawner.getClass().getSuperclass() - .getField("spawnDelay"); - spawnDelayField.setAccessible(true); - spawnDelayField.set(MobSpawner, 10); - } - - Field minSpawnDelayField = MobSpawner.getClass().getSuperclass() - .getDeclaredField("minSpawnDelay"); - minSpawnDelayField.setAccessible(true); - int minSpawnDelay = (int) minSpawnDelayField.get(MobSpawner); - - if (minSpawnDelay != 100) { - minSpawnDelayField.set(MobSpawner, 100); - } - - Field maxSpawnDelayField = MobSpawner.getClass().getSuperclass() - .getDeclaredField("maxSpawnDelay"); - maxSpawnDelayField.setAccessible(true); - int maxSpawnDelay = (int) maxSpawnDelayField.get(MobSpawner); - - if (maxSpawnDelay != 400) { - maxSpawnDelayField.set(MobSpawner, 400); - } - } catch (IllegalArgumentException | IllegalAccessException | NoSuchFieldException - | SecurityException | InvocationTargetException | NoSuchMethodException e) { - e.printStackTrace(); + Field TileEntityMobSpawnerField = spawner.getClass().getDeclaredField("spawner"); + TileEntityMobSpawnerField.setAccessible(true); + Object TileEntityMobSpawner = TileEntityMobSpawnerField.get(spawner); + MobSpawner = TileEntityMobSpawner.getClass().getMethod("getSpawner") + .invoke(TileEntityMobSpawner); + } catch (NoSuchFieldException e) { + Field snapshotField = spawner.getClass().getSuperclass().getDeclaredField("snapshot"); + snapshotField.setAccessible(true); + Object snapshot = snapshotField.get(spawner); + MobSpawner = snapshot.getClass().getMethod("getSpawner").invoke(snapshot); } + + int spawnDelay = (int) MobSpawner.getClass().getSuperclass().getField("spawnDelay") + .get(MobSpawner); + + if (spawnDelay == 20) { + Field spawnDelayField = MobSpawner.getClass().getSuperclass().getField("spawnDelay"); + spawnDelayField.setAccessible(true); + spawnDelayField.set(MobSpawner, 10); + } + + Field minSpawnDelayField = MobSpawner.getClass().getSuperclass() + .getDeclaredField("minSpawnDelay"); + minSpawnDelayField.setAccessible(true); + int minSpawnDelay = (int) minSpawnDelayField.get(MobSpawner); + + if (minSpawnDelay != 100) { + minSpawnDelayField.set(MobSpawner, 100); + } + + Field maxSpawnDelayField = MobSpawner.getClass().getSuperclass() + .getDeclaredField("maxSpawnDelay"); + maxSpawnDelayField.setAccessible(true); + int maxSpawnDelay = (int) maxSpawnDelayField.get(MobSpawner); + + if (maxSpawnDelay != 400) { + maxSpawnDelayField.set(MobSpawner, 400); + } + } catch (IllegalArgumentException | IllegalAccessException | NoSuchFieldException + | SecurityException | InvocationTargetException | NoSuchMethodException e) { + e.printStackTrace(); } } - - return; } + + return; } } } diff --git a/src/main/java/me/goodandevil/skyblock/listeners/Teleport.java b/src/main/java/me/goodandevil/skyblock/listeners/Teleport.java index 6f5aa147..08b055e9 100644 --- a/src/main/java/me/goodandevil/skyblock/listeners/Teleport.java +++ b/src/main/java/me/goodandevil/skyblock/listeners/Teleport.java @@ -82,86 +82,88 @@ public class Teleport implements Listener { PlayerData playerData = playerDataManager.getPlayerData(player); UUID islandOwnerUUID = playerData.getIsland(); + Island island = islandManager.getIslandAtLocation(event.getTo()); - for (UUID islandList : islandManager.getIslands().keySet()) { - Island island = islandManager.getIslands().get(islandList); + if (island != null) { + if (!island.getOwnerUUID().equals(playerData.getOwner())) { + if (!player.hasPermission("skyblock.bypass") && !player.hasPermission("skyblock.bypass.*") + && !player.hasPermission("skyblock.*")) { + if (!island.isOpen() && !island.isCoopPlayer(player.getUniqueId())) { + event.setCancelled(true); - if (islandManager.isLocationAtIsland(island, event.getTo())) { - if (!island.getOwnerUUID().equals(playerData.getOwner())) { - if (!player.hasPermission("skyblock.bypass") && !player.hasPermission("skyblock.bypass.*") - && !player.hasPermission("skyblock.*")) { - if (!island.isOpen() && !island.isCoopPlayer(player.getUniqueId())) { - event.setCancelled(true); + messageManager.sendMessage(player, + configLoad.getString("Island.Visit.Closed.Plugin.Message")); + soundManager.playSound(player, Sounds.ANVIL_LAND.bukkitSound(), 1.0F, 1.0F); - messageManager.sendMessage(player, - configLoad.getString("Island.Visit.Closed.Plugin.Message")); - soundManager.playSound(player, Sounds.ANVIL_LAND.bukkitSound(), 1.0F, 1.0F); + return; + } else if (fileManager.getConfig(new File(skyblock.getDataFolder(), "config.yml")) + .getFileConfiguration().getBoolean("Island.Visitor.Banning") + && island.getBan().isBanned(player.getUniqueId())) { + event.setCancelled(true); - return; - } else if (fileManager.getConfig(new File(skyblock.getDataFolder(), "config.yml")) - .getFileConfiguration().getBoolean("Island.Visitor.Banning") - && island.getBan().isBanned(player.getUniqueId())) { - event.setCancelled(true); + messageManager.sendMessage(player, + configLoad.getString("Island.Visit.Banned.Teleport.Message")); + soundManager.playSound(player, Sounds.ANVIL_LAND.bukkitSound(), 1.0F, 1.0F); - messageManager.sendMessage(player, - configLoad.getString("Island.Visit.Banned.Teleport.Message")); - soundManager.playSound(player, Sounds.ANVIL_LAND.bukkitSound(), 1.0F, 1.0F); - - return; - } + return; } } - - if (playerData.getIsland() != null && !playerData.getIsland().equals(island.getOwnerUUID())) { - Bukkit.getServer().getPluginManager().callEvent(new PlayerIslandExitEvent(player, - islandManager.getIsland(islandOwnerUUID).getAPIWrapper())); - Bukkit.getServer().getPluginManager().callEvent(new PlayerIslandSwitchEvent(player, - islandManager.getIsland(islandOwnerUUID).getAPIWrapper(), island.getAPIWrapper())); - - playerData.setVisitTime(0); - } - - if (worldManager.getIslandWorld(event.getTo().getWorld()) == IslandWorld.Normal) { - if (!island.isWeatherSynchronized()) { - player.setPlayerTime(island.getTime(), - fileManager.getConfig(new File(skyblock.getDataFolder(), "config.yml")) - .getFileConfiguration().getBoolean("Island.Weather.Time.Cycle")); - player.setPlayerWeather(island.getWeather()); - } - } - - playerData.setIsland(island.getOwnerUUID()); - - if (islandOwnerUUID != null && islandManager.containsIsland(islandOwnerUUID) - && (playerData.getOwner() == null || !playerData.getOwner().equals(islandOwnerUUID))) { - islandManager.unloadIsland(islandManager.getIsland(islandOwnerUUID), null); - } - - Visit visit = island.getVisit(); - - if (!visit.isVisitor(player.getUniqueId())) { - Bukkit.getServer().getPluginManager() - .callEvent(new PlayerIslandEnterEvent(player, island.getAPIWrapper())); - - visit.addVisitor(player.getUniqueId()); - visit.save(); - } - - return; } + + if (playerData.getIsland() != null && !playerData.getIsland().equals(island.getOwnerUUID())) { + me.goodandevil.skyblock.api.island.Island exitIsland = null; + + if (islandManager.containsIsland(islandOwnerUUID)) { + exitIsland = islandManager.getIsland(islandOwnerUUID).getAPIWrapper(); + } + + Bukkit.getServer().getPluginManager().callEvent(new PlayerIslandExitEvent(player, exitIsland)); + Bukkit.getServer().getPluginManager() + .callEvent(new PlayerIslandSwitchEvent(player, exitIsland, island.getAPIWrapper())); + + playerData.setVisitTime(0); + } + + if (worldManager.getIslandWorld(event.getTo().getWorld()) == IslandWorld.Normal) { + if (!island.isWeatherSynchronized()) { + player.setPlayerTime(island.getTime(), + fileManager.getConfig(new File(skyblock.getDataFolder(), "config.yml")) + .getFileConfiguration().getBoolean("Island.Weather.Time.Cycle")); + player.setPlayerWeather(island.getWeather()); + } + } + + playerData.setIsland(island.getOwnerUUID()); + + if (islandOwnerUUID != null && islandManager.containsIsland(islandOwnerUUID) + && (playerData.getOwner() == null || !playerData.getOwner().equals(islandOwnerUUID))) { + islandManager.unloadIsland(islandManager.getIsland(islandOwnerUUID), null); + } + + Visit visit = island.getVisit(); + + if (!visit.isVisitor(player.getUniqueId())) { + Bukkit.getServer().getPluginManager() + .callEvent(new PlayerIslandEnterEvent(player, island.getAPIWrapper())); + + visit.addVisitor(player.getUniqueId()); + visit.save(); + } + + return; } player.resetPlayerTime(); player.resetPlayerWeather(); if (islandOwnerUUID != null) { - me.goodandevil.skyblock.api.island.Island island = null; + me.goodandevil.skyblock.api.island.Island islandWrapper = null; if (islandManager.hasIsland(islandOwnerUUID)) { - island = islandManager.getIsland(islandOwnerUUID).getAPIWrapper(); + islandWrapper = islandManager.getIsland(islandOwnerUUID).getAPIWrapper(); } - Bukkit.getServer().getPluginManager().callEvent(new PlayerIslandExitEvent(player, island)); + Bukkit.getServer().getPluginManager().callEvent(new PlayerIslandExitEvent(player, islandWrapper)); playerData.setVisitTime(0); } diff --git a/src/main/java/me/goodandevil/skyblock/menus/Bans.java b/src/main/java/me/goodandevil/skyblock/menus/Bans.java index 3509c1c9..3f97da7d 100644 --- a/src/main/java/me/goodandevil/skyblock/menus/Bans.java +++ b/src/main/java/me/goodandevil/skyblock/menus/Bans.java @@ -19,6 +19,7 @@ import me.goodandevil.skyblock.island.Island; import me.goodandevil.skyblock.island.IslandManager; import me.goodandevil.skyblock.island.IslandRole; import me.goodandevil.skyblock.message.MessageManager; +import me.goodandevil.skyblock.placeholder.Placeholder; import me.goodandevil.skyblock.playerdata.PlayerData; import me.goodandevil.skyblock.playerdata.PlayerDataManager; import me.goodandevil.skyblock.sound.SoundManager; @@ -193,7 +194,7 @@ public class Bans { nInv.addItem(nInv.createItem(new ItemStack(Material.PAINTING), configLoad.getString("Menu.Bans.Item.Information.Displayname"), configLoad.getStringList("Menu.Bans.Item.Information.Lore"), - nInv.createItemLoreVariable(new String[] { "%bans#" + islandBans.size() }), null, null), 4); + new Placeholder[] { new Placeholder("%bans", "" + islandBans.size()) }, null, null), 4); nInv.addItem( nInv.createItem(Materials.BLACK_STAINED_GLASS_PANE.parseItem(), configLoad.getString("Menu.Bans.Item.Barrier.Displayname"), null, null, null, null), diff --git a/src/main/java/me/goodandevil/skyblock/menus/Biome.java b/src/main/java/me/goodandevil/skyblock/menus/Biome.java index f2c9d609..ebf3e0f2 100644 --- a/src/main/java/me/goodandevil/skyblock/menus/Biome.java +++ b/src/main/java/me/goodandevil/skyblock/menus/Biome.java @@ -20,6 +20,7 @@ import me.goodandevil.skyblock.island.IslandManager; import me.goodandevil.skyblock.island.IslandRole; import me.goodandevil.skyblock.island.IslandWorld; import me.goodandevil.skyblock.message.MessageManager; +import me.goodandevil.skyblock.placeholder.Placeholder; import me.goodandevil.skyblock.playerdata.PlayerDataManager; import me.goodandevil.skyblock.sound.SoundManager; import me.goodandevil.skyblock.utils.NumberUtil; @@ -194,7 +195,7 @@ public class Biome { ChatColor.translateAlternateColorCodes('&', configLoad.getString("Menu.Biome.Item.Info.Displayname")), configLoad.getStringList("Menu.Biome.Item.Info.Lore"), - nInv.createItemLoreVariable(new String[] { "%biome_type#" + islandBiomeName }), null, null), 0); + new Placeholder[] { new Placeholder("%biome_type", islandBiomeName) }, null, null), 0); nInv.addItem( nInv.createItem(Materials.BLACK_STAINED_GLASS_PANE.parseItem(), ChatColor.translateAlternateColorCodes('&', diff --git a/src/main/java/me/goodandevil/skyblock/menus/Border.java b/src/main/java/me/goodandevil/skyblock/menus/Border.java index 28604fe2..d7fd3e07 100644 --- a/src/main/java/me/goodandevil/skyblock/menus/Border.java +++ b/src/main/java/me/goodandevil/skyblock/menus/Border.java @@ -16,6 +16,7 @@ import me.goodandevil.skyblock.island.Island; import me.goodandevil.skyblock.island.IslandManager; import me.goodandevil.skyblock.island.IslandRole; import me.goodandevil.skyblock.message.MessageManager; +import me.goodandevil.skyblock.placeholder.Placeholder; import me.goodandevil.skyblock.playerdata.PlayerDataManager; import me.goodandevil.skyblock.sound.SoundManager; import me.goodandevil.skyblock.utils.item.nInventoryUtil; @@ -201,50 +202,42 @@ public class Border { nInv.addItem(nInv.createItem(new ItemStack(Material.TRIPWIRE_HOOK), configLoad.getString("Menu.Border.Item.Toggle.Displayname"), configLoad.getStringList("Menu.Border.Item.Toggle.Lore"), - nInv.createItemLoreVariable(new String[] { "%toggle#" + borderToggle }), null, null), 1); + new Placeholder[] { new Placeholder("%toggle", borderToggle) }, null, null), 1); if (borderColor == WorldBorder.Color.Blue) { - nInv.addItem( - nInv.createItem(Materials.LIGHT_BLUE_DYE.parseItem(), - configLoad.getString("Menu.Border.Item.Color.Displayname").replace("%color", - configLoad.getString("Menu.Border.Item.Word.Blue")), - configLoad.getStringList("Menu.Border.Item.Color.Selected.Lore"), - nInv.createItemLoreVariable(new String[] { - "%color#" + configLoad.getString("Menu.Border.Item.Word.Blue") }), - null, null), - 2); + nInv.addItem(nInv.createItem(Materials.LIGHT_BLUE_DYE.parseItem(), + configLoad.getString("Menu.Border.Item.Color.Displayname").replace("%color", + configLoad.getString("Menu.Border.Item.Word.Blue")), + configLoad.getStringList("Menu.Border.Item.Color.Selected.Lore"), + new Placeholder[] { + new Placeholder("%color", configLoad.getString("Menu.Border.Item.Word.Blue")) }, + null, null), 2); } else { - nInv.addItem( - nInv.createItem(Materials.LIGHT_BLUE_DYE.parseItem(), - configLoad.getString("Menu.Border.Item.Color.Displayname").replace("%color", - configLoad.getString("Menu.Border.Item.Word.Blue")), - configLoad.getStringList("Menu.Border.Item.Color.Unselected.Lore"), - nInv.createItemLoreVariable(new String[] { - "%color#" + configLoad.getString("Menu.Border.Item.Word.Blue") }), - null, null), - 2); + nInv.addItem(nInv.createItem(Materials.LIGHT_BLUE_DYE.parseItem(), + configLoad.getString("Menu.Border.Item.Color.Displayname").replace("%color", + configLoad.getString("Menu.Border.Item.Word.Blue")), + configLoad.getStringList("Menu.Border.Item.Color.Unselected.Lore"), + new Placeholder[] { + new Placeholder("%color", configLoad.getString("Menu.Border.Item.Word.Blue")) }, + null, null), 2); } if (borderColor == WorldBorder.Color.Green) { - nInv.addItem( - nInv.createItem(Materials.LIME_DYE.parseItem(), - configLoad.getString("Menu.Border.Item.Color.Displayname").replace("%color", - configLoad.getString("Menu.Border.Item.Word.Green")), - configLoad.getStringList("Menu.Border.Item.Color.Selected.Lore"), - nInv.createItemLoreVariable(new String[] { - "%color#" + configLoad.getString("Menu.Border.Item.Word.Green") }), - null, null), - 3); + nInv.addItem(nInv.createItem(Materials.LIME_DYE.parseItem(), + configLoad.getString("Menu.Border.Item.Color.Displayname").replace("%color", + configLoad.getString("Menu.Border.Item.Word.Green")), + configLoad.getStringList("Menu.Border.Item.Color.Selected.Lore"), + new Placeholder[] { + new Placeholder("%color", configLoad.getString("Menu.Border.Item.Word.Green")) }, + null, null), 3); } else { - nInv.addItem( - nInv.createItem(Materials.LIME_DYE.parseItem(), - configLoad.getString("Menu.Border.Item.Color.Displayname").replace("%color", - configLoad.getString("Menu.Border.Item.Word.Green")), - configLoad.getStringList("Menu.Border.Item.Color.Unselected.Lore"), - nInv.createItemLoreVariable(new String[] { - "%color#" + configLoad.getString("Menu.Border.Item.Word.Green") }), - null, null), - 3); + nInv.addItem(nInv.createItem(Materials.LIME_DYE.parseItem(), + configLoad.getString("Menu.Border.Item.Color.Displayname").replace("%color", + configLoad.getString("Menu.Border.Item.Word.Green")), + configLoad.getStringList("Menu.Border.Item.Color.Unselected.Lore"), + new Placeholder[] { + new Placeholder("%color", configLoad.getString("Menu.Border.Item.Word.Green")) }, + null, null), 3); } if (borderColor == WorldBorder.Color.Red) { @@ -252,16 +245,16 @@ public class Border { configLoad.getString("Menu.Border.Item.Color.Displayname").replace("%color", configLoad.getString("Menu.Border.Item.Word.Red")), configLoad.getStringList("Menu.Border.Item.Color.Selected.Lore"), - nInv.createItemLoreVariable( - new String[] { "%color#" + configLoad.getString("Menu.Border.Item.Word.Red") }), + new Placeholder[] { + new Placeholder("%color", configLoad.getString("Menu.Border.Item.Word.Red")) }, null, null), 4); } else { nInv.addItem(nInv.createItem(Materials.ROSE_RED.parseItem(), configLoad.getString("Menu.Border.Item.Color.Displayname").replace("%color", configLoad.getString("Menu.Border.Item.Word.Red")), configLoad.getStringList("Menu.Border.Item.Color.Unselected.Lore"), - nInv.createItemLoreVariable( - new String[] { "%color#" + configLoad.getString("Menu.Border.Item.Word.Red") }), + new Placeholder[] { + new Placeholder("%color", configLoad.getString("Menu.Border.Item.Word.Red")) }, null, null), 4); } diff --git a/src/main/java/me/goodandevil/skyblock/menus/Coop.java b/src/main/java/me/goodandevil/skyblock/menus/Coop.java index 4574d781..1a3a7f54 100644 --- a/src/main/java/me/goodandevil/skyblock/menus/Coop.java +++ b/src/main/java/me/goodandevil/skyblock/menus/Coop.java @@ -19,6 +19,7 @@ import me.goodandevil.skyblock.island.Island; import me.goodandevil.skyblock.island.IslandManager; import me.goodandevil.skyblock.island.IslandRole; import me.goodandevil.skyblock.message.MessageManager; +import me.goodandevil.skyblock.placeholder.Placeholder; import me.goodandevil.skyblock.playerdata.PlayerData; import me.goodandevil.skyblock.playerdata.PlayerDataManager; import me.goodandevil.skyblock.sound.SoundManager; @@ -193,12 +194,10 @@ public class Coop { nInv.addItem(nInv.createItem(Materials.OAK_FENCE_GATE.parseItem(), configLoad.getString("Menu.Coop.Item.Exit.Displayname"), null, null, null, null), 0, 8); - nInv.addItem( - nInv.createItem(new ItemStack(Material.PAINTING), - configLoad.getString("Menu.Coop.Item.Information.Displayname"), - configLoad.getStringList("Menu.Coop.Item.Information.Lore"), - nInv.createItemLoreVariable(new String[] { "%coops#" + coopPlayers.size() }), null, null), - 4); + nInv.addItem(nInv.createItem(new ItemStack(Material.PAINTING), + configLoad.getString("Menu.Coop.Item.Information.Displayname"), + configLoad.getStringList("Menu.Coop.Item.Information.Lore"), + new Placeholder[] { new Placeholder("%coops", "" + coopPlayers.size()) }, null, null), 4); nInv.addItem( nInv.createItem(Materials.BLACK_STAINED_GLASS_PANE.parseItem(), configLoad.getString("Menu.Coop.Item.Barrier.Displayname"), null, null, null, null), diff --git a/src/main/java/me/goodandevil/skyblock/menus/Information.java b/src/main/java/me/goodandevil/skyblock/menus/Information.java index 6dd05ae3..0ccccc1f 100644 --- a/src/main/java/me/goodandevil/skyblock/menus/Information.java +++ b/src/main/java/me/goodandevil/skyblock/menus/Information.java @@ -21,6 +21,7 @@ import me.goodandevil.skyblock.island.Island; import me.goodandevil.skyblock.island.IslandManager; import me.goodandevil.skyblock.island.IslandRole; import me.goodandevil.skyblock.message.MessageManager; +import me.goodandevil.skyblock.placeholder.Placeholder; import me.goodandevil.skyblock.playerdata.PlayerData; import me.goodandevil.skyblock.playerdata.PlayerDataManager; import me.goodandevil.skyblock.sound.SoundManager; @@ -219,13 +220,17 @@ public class Information { nInv.addItem(nInv.createItem(Materials.LEGACY_EMPTY_MAP.getPostItem(), configLoad.getString("Menu.Information.Categories.Item.Information.Displayname"), itemLore, - nInv.createItemLoreVariable(new String[] { "%level#" + visit.getLevel().getLevel(), - "%members#" + visit.getMembers(), "%votes#" + visit.getVoters().size(), - "%visits#" + visit.getVisitors().size(), - "%players#" + islandManager.getPlayersAtIsland(island).size(), - "%player_capacity#" - + mainConfig.getFileConfiguration().getInt("Island.Visitor.Capacity"), - "%owner#" + islandOwnerName, "%safety#" + safety }), + new Placeholder[] { new Placeholder("%level", "" + visit.getLevel().getLevel()), + new Placeholder("%members", "" + visit.getMembers()), + new Placeholder("%votes", "" + visit.getVoters().size()), + new Placeholder("%visits", "" + visit.getVisitors().size()), + new Placeholder("%players", + "" + islandManager.getPlayersAtIsland(island).size()), + new Placeholder("%player_capacity", + "" + mainConfig.getFileConfiguration() + .getInt("Island.Visitor.Capacity")), + new Placeholder("%owner", islandOwnerName), + new Placeholder("%safety", safety) }, null, null), 2); } else { if (mainConfig.getFileConfiguration().getBoolean("Island.Visitor.Signature.Enable")) { @@ -254,12 +259,16 @@ public class Information { nInv.addItem(nInv.createItem(Materials.LEGACY_EMPTY_MAP.getPostItem(), configLoad.getString("Menu.Information.Categories.Item.Information.Displayname"), itemLore, - nInv.createItemLoreVariable(new String[] { "%level#" + visit.getLevel().getLevel(), - "%members#" + visit.getMembers(), "%visits#" + visit.getVisitors().size(), - "%players#" + islandManager.getPlayersAtIsland(island).size(), - "%player_capacity#" - + mainConfig.getFileConfiguration().getInt("Island.Visitor.Capacity"), - "%owner#" + islandOwnerName, "%safety#" + safety }), + new Placeholder[] { new Placeholder("%level", "" + visit.getLevel().getLevel()), + new Placeholder("%members", "" + visit.getMembers()), + new Placeholder("%visits", "" + visit.getVisitors().size()), + new Placeholder("%players", + "" + islandManager.getPlayersAtIsland(island).size()), + new Placeholder("%player_capacity", + "" + mainConfig.getFileConfiguration() + .getInt("Island.Visitor.Capacity")), + new Placeholder("%owner", islandOwnerName), + new Placeholder("%safety", safety) }, null, null), 2); } @@ -366,16 +375,21 @@ public class Information { nInv.addItem(nInv.createItem(Materials.OAK_FENCE_GATE.parseItem(), configLoad.getString("Menu.Information.Members.Item.Return.Displayname"), null, null, null, null), 0, 8); - nInv.addItem(nInv.createItem(new ItemStack(Material.PAINTING), - configLoad.getString("Menu.Information.Members.Item.Statistics.Displayname"), - configLoad.getStringList("Menu.Information.Members.Item.Statistics.Lore"), - nInv.createItemLoreVariable(new String[] { - "%island_members#" + (islandMembers.size() + islandOperators.size() + 1), - "%island_capacity#" + skyblock.getFileManager() - .getConfig(new File(skyblock.getDataFolder(), "config.yml")) - .getFileConfiguration().getInt("Island.Member.Capacity"), - "%members#" + islandMembers.size(), "%operators#" + islandOperators.size() }), - null, null), 4); + nInv.addItem( + nInv.createItem(new ItemStack(Material.PAINTING), + configLoad.getString("Menu.Information.Members.Item.Statistics.Displayname"), + configLoad.getStringList("Menu.Information.Members.Item.Statistics.Lore"), + new Placeholder[] { + new Placeholder("%island_members", + "" + (islandMembers.size() + islandOperators.size() + 1)), + new Placeholder("%island_capacity", + "" + skyblock.getFileManager() + .getConfig(new File(skyblock.getDataFolder(), "config.yml")) + .getFileConfiguration().getInt("Island.Member.Capacity")), + new Placeholder("%members", "" + islandMembers.size()), + new Placeholder("%operators", "" + islandOperators.size()) }, + null, null), + 4); nInv.addItem(nInv.createItem(Materials.BLACK_STAINED_GLASS_PANE.parseItem(), configLoad.getString("Menu.Information.Members.Item.Barrier.Displayname"), null, null, null, null), 9, 10, 11, 12, 13, 14, 15, 16, 17); @@ -432,11 +446,12 @@ public class Information { islandRole = configLoad.getString("Menu.Information.Members.Item.Member.Word.Owner"); } - nInv.addItem(nInv.createItem(SkullUtil.create(playerTexture[0], playerTexture[1]), - configLoad.getString("Menu.Information.Members.Item.Member.Displayname") - .replace("%player", playerName), - configLoad.getStringList("Menu.Information.Members.Item.Member.Lore"), - nInv.createItemLoreVariable(new String[] { "%role#" + islandRole }), null, null), + nInv.addItem( + nInv.createItem(SkullUtil.create(playerTexture[0], playerTexture[1]), + configLoad.getString("Menu.Information.Members.Item.Member.Displayname") + .replace("%player", playerName), + configLoad.getStringList("Menu.Information.Members.Item.Member.Lore"), + new Placeholder[] { new Placeholder("%role", islandRole) }, null, null), inventorySlot); } } @@ -538,14 +553,11 @@ public class Information { nInv.addItem(nInv.createItem(Materials.OAK_FENCE_GATE.parseItem(), configLoad.getString("Menu.Information.Visitors.Item.Return.Displayname"), null, null, null, null), 0, 8); - nInv.addItem( - nInv.createItem(new ItemStack(Material.PAINTING), - configLoad.getString("Menu.Information.Visitors.Item.Statistics.Displayname"), - configLoad.getStringList("Menu.Information.Visitors.Item.Statistics.Lore"), - nInv.createItemLoreVariable( - new String[] { "%island_visitors#" + displayedVisitors.size() }), - null, null), - 4); + nInv.addItem(nInv.createItem(new ItemStack(Material.PAINTING), + configLoad.getString("Menu.Information.Visitors.Item.Statistics.Displayname"), + configLoad.getStringList("Menu.Information.Visitors.Item.Statistics.Lore"), + new Placeholder[] { new Placeholder("%island_visitors", "" + displayedVisitors.size()) }, + null, null), 4); nInv.addItem(nInv.createItem(Materials.BLACK_STAINED_GLASS_PANE.parseItem(), configLoad.getString("Menu.Information.Visitors.Item.Barrier.Displayname"), null, null, null, null), 9, 10, 11, 12, 13, 14, 15, 16, 17); diff --git a/src/main/java/me/goodandevil/skyblock/menus/Leaderboard.java b/src/main/java/me/goodandevil/skyblock/menus/Leaderboard.java index 04075e80..4779d3b7 100644 --- a/src/main/java/me/goodandevil/skyblock/menus/Leaderboard.java +++ b/src/main/java/me/goodandevil/skyblock/menus/Leaderboard.java @@ -15,6 +15,7 @@ import org.bukkit.inventory.ItemStack; import me.goodandevil.skyblock.SkyBlock; import me.goodandevil.skyblock.config.FileManager; import me.goodandevil.skyblock.config.FileManager.Config; +import me.goodandevil.skyblock.placeholder.Placeholder; import me.goodandevil.skyblock.playerdata.PlayerDataManager; import me.goodandevil.skyblock.sound.SoundManager; import me.goodandevil.skyblock.utils.item.SkullUtil; @@ -98,20 +99,26 @@ public class Leaderboard { nInv.addItem(nInv.createItem(Materials.OAK_FENCE_GATE.parseItem(), configLoad.getString("Menu.Leaderboard." + viewer.getType().name() + ".Item.Exit.Displayname"), null, null, null, null), 0, 4); - nInv.addItem(nInv.createItem(new ItemStack(Material.DIAMOND), configLoad - .getString("Menu.Leaderboard." + viewer.getType().name() + ".Item.Leaderboard.Displayname") - .replace("%leaderboard", Viewer.Type.Level.name()), - configLoad.getStringList( - "Menu.Leaderboard." + viewer.getType().name() + ".Item.Leaderboard.Lore"), - nInv.createItemLoreVariable(new String[] { "%leaderboard#" + Viewer.Type.Level.name() }), null, - null), 1); - nInv.addItem(nInv.createItem(new ItemStack(Material.EMERALD), configLoad - .getString("Menu.Leaderboard." + viewer.getType().name() + ".Item.Leaderboard.Displayname") - .replace("%leaderboard", Viewer.Type.Votes.name()), - configLoad.getStringList( - "Menu.Leaderboard." + viewer.getType().name() + ".Item.Leaderboard.Lore"), - nInv.createItemLoreVariable(new String[] { "%leaderboard#" + Viewer.Type.Votes.name() }), null, - null), 3); + nInv.addItem( + nInv.createItem(new ItemStack(Material.DIAMOND), configLoad + .getString( + "Menu.Leaderboard." + viewer.getType().name() + ".Item.Leaderboard.Displayname") + .replace("%leaderboard", Viewer.Type.Level.name()), + configLoad.getStringList( + "Menu.Leaderboard." + viewer.getType().name() + ".Item.Leaderboard.Lore"), + new Placeholder[] { new Placeholder("%leaderboard", Viewer.Type.Level.name()) }, null, + null), + 1); + nInv.addItem( + nInv.createItem(new ItemStack(Material.EMERALD), configLoad + .getString( + "Menu.Leaderboard." + viewer.getType().name() + ".Item.Leaderboard.Displayname") + .replace("%leaderboard", Viewer.Type.Votes.name()), + configLoad.getStringList( + "Menu.Leaderboard." + viewer.getType().name() + ".Item.Leaderboard.Lore"), + new Placeholder[] { new Placeholder("%leaderboard", Viewer.Type.Votes.name()) }, null, + null), + 3); nInv.setTitle(ChatColor.translateAlternateColorCodes('&', configLoad.getString("Menu.Leaderboard." + viewer.getType().name() + ".Title"))); @@ -242,16 +249,21 @@ public class Leaderboard { } } - nInv.addItem(nInv.createItem(SkullUtil.create(playerTexture[0], playerTexture[1]), - configLoad.getString("Menu.Leaderboard.Leaderboard.Item.Island.Displayname") - .replace("%owner", - playerName) - .replace("%position", "" + (leaderboard.getPosition() + 1)), - itemLore, - nInv.createItemLoreVariable(new String[] { "%position#" + (leaderboard.getPosition() + 1), - "%owner#" + playerName, "%level#" + visit.getLevel().getLevel(), - "%votes#" + visit.getVoters().size(), "%members#" + visit.getMembers() }), - null, null), itemSlot); + nInv.addItem( + nInv.createItem(SkullUtil.create(playerTexture[0], playerTexture[1]), + configLoad.getString("Menu.Leaderboard.Leaderboard.Item.Island.Displayname") + .replace( + "%owner", playerName) + .replace("%position", "" + (leaderboard.getPosition() + 1)), + itemLore, + new Placeholder[] { + new Placeholder("%position", "" + (leaderboard.getPosition() + 1)), + new Placeholder("%owner", playerName), + new Placeholder("%level", "" + visit.getLevel().getLevel()), + new Placeholder("%votes", "" + visit.getVoters().size()), + new Placeholder("%members", "" + visit.getMembers()) }, + null, null), + itemSlot); } int[] itemSlots = new int[] { 13, 21, 22, 23, 29, 31, 33, 37, 40, 43 }; @@ -264,7 +276,7 @@ public class Leaderboard { configLoad.getString("Menu.Leaderboard.Leaderboard.Item.Empty.Displayname") .replace("%position", "" + (i + 1)), configLoad.getStringList("Menu.Leaderboard.Leaderboard.Item.Empty.Lore"), - nInv.createItemLoreVariable(new String[] { "%position#" + (i + 1) }), null, null), + new Placeholder[] { new Placeholder("%position", "" + (i + 1)) }, null, null), itemSlots[i]); } } diff --git a/src/main/java/me/goodandevil/skyblock/menus/Levelling.java b/src/main/java/me/goodandevil/skyblock/menus/Levelling.java index f9c67abe..f9934792 100644 --- a/src/main/java/me/goodandevil/skyblock/menus/Levelling.java +++ b/src/main/java/me/goodandevil/skyblock/menus/Levelling.java @@ -20,6 +20,7 @@ import me.goodandevil.skyblock.island.IslandManager; import me.goodandevil.skyblock.island.Level; import me.goodandevil.skyblock.levelling.LevellingManager; import me.goodandevil.skyblock.message.MessageManager; +import me.goodandevil.skyblock.placeholder.Placeholder; import me.goodandevil.skyblock.playerdata.PlayerData; import me.goodandevil.skyblock.playerdata.PlayerDataManager; import me.goodandevil.skyblock.sound.SoundManager; @@ -211,9 +212,9 @@ public class Levelling { nInv.addItem(nInv.createItem(new ItemStack(Material.PAINTING), configLoad.getString("Menu.Levelling.Item.Statistics.Displayname"), configLoad.getStringList("Menu.Levelling.Item.Statistics.Lore"), - nInv.createItemLoreVariable( - new String[] { "%level_points#" + NumberUtil.formatNumberByDecimal(level.getPoints()), - "%level#" + NumberUtil.formatNumberByDecimal(level.getLevel()) }), + new Placeholder[] { + new Placeholder("%level_points", NumberUtil.formatNumberByDecimal(level.getPoints())), + new Placeholder("%level", NumberUtil.formatNumberByDecimal(level.getLevel())) }, null, null), 4); nInv.addItem( nInv.createItem(Materials.BLACK_STAINED_GLASS_PANE.parseItem(), diff --git a/src/main/java/me/goodandevil/skyblock/menus/Members.java b/src/main/java/me/goodandevil/skyblock/menus/Members.java index f56dcd8e..e33aed94 100644 --- a/src/main/java/me/goodandevil/skyblock/menus/Members.java +++ b/src/main/java/me/goodandevil/skyblock/menus/Members.java @@ -25,6 +25,7 @@ import me.goodandevil.skyblock.config.FileManager; import me.goodandevil.skyblock.island.Island; import me.goodandevil.skyblock.island.IslandManager; import me.goodandevil.skyblock.island.IslandRole; +import me.goodandevil.skyblock.placeholder.Placeholder; import me.goodandevil.skyblock.playerdata.PlayerData; import me.goodandevil.skyblock.playerdata.PlayerDataManager; import me.goodandevil.skyblock.sound.SoundManager; @@ -366,24 +367,23 @@ public class Members { nInv.addItem(nInv.createItem(new ItemStack(Material.HOPPER), configLoad.getString("Menu.Members.Item.Type.Displayname"), configLoad.getStringList("Menu.Members.Item.Type.Lore"), - nInv.createItemLoreVariable(new String[] { "%type#" + type.name() }), null, null), 3); - nInv.addItem( - nInv.createItem(new ItemStack(Material.PAINTING), - configLoad.getString("Menu.Members.Item.Statistics.Displayname"), - configLoad.getStringList("Menu.Members.Item.Statistics.Lore"), - nInv.createItemLoreVariable(new String[] { - "%island_members#" + (islandMembers.size() + islandOperators.size() + 1), - "%island_capacity#" - + fileManager.getConfig(new File(skyblock.getDataFolder(), "config.yml")) - .getFileConfiguration().getInt("Island.Member.Capacity"), - "%members#" + islandMembers.size(), "%operators#" + islandOperators.size() }), - null, null), - 4); + new Placeholder[] { new Placeholder("%type", type.name()) }, null, null), 3); + nInv.addItem(nInv.createItem(new ItemStack(Material.PAINTING), + configLoad.getString("Menu.Members.Item.Statistics.Displayname"), + configLoad.getStringList("Menu.Members.Item.Statistics.Lore"), + new Placeholder[] { + new Placeholder("%island_members", + "" + (islandMembers.size() + islandOperators.size() + 1)), + new Placeholder("%island_capacity", + "" + fileManager.getConfig(new File(skyblock.getDataFolder(), "config.yml")) + .getFileConfiguration().getInt("Island.Member.Capacity")), + new Placeholder("%members", "" + islandMembers.size()), + new Placeholder("%operators", "" + islandOperators.size()) }, + null, null), 4); nInv.addItem(nInv.createItem(new ItemStack(Material.HOPPER), configLoad.getString("Menu.Members.Item.Sort.Displayname"), configLoad.getStringList("Menu.Members.Item.Sort.Lore"), - nInv.createItemLoreVariable( - new String[] { "%sort#" + StringUtil.capatilizeUppercaseLetters(sort.name()) }), + new Placeholder[] { new Placeholder("%sort", StringUtil.capatilizeUppercaseLetters(sort.name())) }, null, null), 5); nInv.addItem( nInv.createItem(Materials.BLACK_STAINED_GLASS_PANE.parseItem(), @@ -602,14 +602,17 @@ public class Members { } } - nInv.addItem(nInv.createItem(SkullUtil.create(playerTexture[0], playerTexture[1]), - configLoad.getString( - "Menu.Members.Item.Member.Displayname").replace("%player", playerName), - itemLore, - nInv.createItemLoreVariable(new String[] { "%role#" + islandRole, - "%playtime#" + islandPlaytimeFormatted, "%since#" + memberSinceFormatted, - "%last_online#" + lastOnlineFormatted }), - null, null), inventorySlot); + nInv.addItem( + nInv.createItem(SkullUtil.create(playerTexture[0], playerTexture[1]), + configLoad.getString("Menu.Members.Item.Member.Displayname").replace("%player", + playerName), + itemLore, + new Placeholder[] { new Placeholder("%role", islandRole), + new Placeholder("%playtime", islandPlaytimeFormatted), + new Placeholder("%since", memberSinceFormatted), + new Placeholder("%last_online", lastOnlineFormatted) }, + null, null), + inventorySlot); } } } diff --git a/src/main/java/me/goodandevil/skyblock/menus/Ownership.java b/src/main/java/me/goodandevil/skyblock/menus/Ownership.java index fdd1b32e..f723d47e 100644 --- a/src/main/java/me/goodandevil/skyblock/menus/Ownership.java +++ b/src/main/java/me/goodandevil/skyblock/menus/Ownership.java @@ -19,6 +19,7 @@ import me.goodandevil.skyblock.island.Island; import me.goodandevil.skyblock.island.IslandManager; import me.goodandevil.skyblock.island.IslandRole; import me.goodandevil.skyblock.message.MessageManager; +import me.goodandevil.skyblock.placeholder.Placeholder; import me.goodandevil.skyblock.playerdata.PlayerData; import me.goodandevil.skyblock.playerdata.PlayerDataManager; import me.goodandevil.skyblock.sound.SoundManager; @@ -299,12 +300,10 @@ public class Ownership { nInv.addItem(nInv.createItem(Materials.OAK_FENCE_GATE.parseItem(), configLoad.getString("Menu.Ownership.Item.Exit.Displayname"), null, null, null, null), 0); - nInv.addItem( - nInv.createItem(SkullUtil.create(playerTexture[0], playerTexture[1]), - configLoad.getString("Menu.Ownership.Item.Original.Displayname"), - configLoad.getStringList("Menu.Ownership.Item.Original.Lore"), - nInv.createItemLoreVariable(new String[] { "%player#" + originalOwnerName }), null, null), - 1); + nInv.addItem(nInv.createItem(SkullUtil.create(playerTexture[0], playerTexture[1]), + configLoad.getString("Menu.Ownership.Item.Original.Displayname"), + configLoad.getStringList("Menu.Ownership.Item.Original.Lore"), + new Placeholder[] { new Placeholder("%player", originalOwnerName) }, null, null), 1); nInv.addItem( nInv.createItem(Materials.BLACK_STAINED_GLASS_PANE.parseItem(), configLoad.getString("Menu.Ownership.Item.Barrier.Displayname"), null, null, null, null), @@ -319,10 +318,11 @@ public class Ownership { configLoad.getString("Menu.Ownership.Item.Password.Displayname"), configLoad.getStringList("Menu.Ownership.Item.Password.Hidden.Lore"), null, null, null), 4); } else { - nInv.addItem(nInv.createItem(Materials.LEGACY_EMPTY_MAP.getPostItem(), - configLoad.getString("Menu.Ownership.Item.Password.Displayname"), - configLoad.getStringList("Menu.Ownership.Item.Password.Visible.Lore"), - nInv.createItemLoreVariable(new String[] { "%password#" + ownershipPassword }), null, null), + nInv.addItem( + nInv.createItem(Materials.LEGACY_EMPTY_MAP.getPostItem(), + configLoad.getString("Menu.Ownership.Item.Password.Displayname"), + configLoad.getStringList("Menu.Ownership.Item.Password.Visible.Lore"), + new Placeholder[] { new Placeholder("%password", ownershipPassword) }, null, null), 4); } } else { diff --git a/src/main/java/me/goodandevil/skyblock/menus/Settings.java b/src/main/java/me/goodandevil/skyblock/menus/Settings.java index 9aa491e3..a09cd1e5 100644 --- a/src/main/java/me/goodandevil/skyblock/menus/Settings.java +++ b/src/main/java/me/goodandevil/skyblock/menus/Settings.java @@ -23,6 +23,7 @@ import me.goodandevil.skyblock.island.IslandMessage; import me.goodandevil.skyblock.island.IslandRole; import me.goodandevil.skyblock.island.Setting; import me.goodandevil.skyblock.message.MessageManager; +import me.goodandevil.skyblock.placeholder.Placeholder; import me.goodandevil.skyblock.playerdata.PlayerDataManager; import me.goodandevil.skyblock.sound.SoundManager; import me.goodandevil.skyblock.utils.AnvilGUI; @@ -428,22 +429,20 @@ public class Settings { configLoad.getString("Menu.Settings.Visitor.Item.Statistics.Displayname"), configLoad.getStringList( "Menu.Settings.Visitor.Item.Statistics.Vote.Enabled.Open.Lore"), - nInv.createItemLoreVariable( - new String[] { "%visits#" + visit.getVisitors().size(), - "%votes#" + visit.getVoters().size(), - "%visitors#" - + islandManager.getVisitorsAtIsland(island).size() }), + new Placeholder[] { new Placeholder("%visits", "" + visit.getVisitors().size()), + new Placeholder("%votes", "" + visit.getVoters().size()), + new Placeholder("%visitors", + "" + islandManager.getVisitorsAtIsland(island).size()) }, null, null), 4); } else { nInv.addItem(nInv.createItem(new ItemStack(Material.PAINTING), configLoad.getString("Menu.Settings.Visitor.Item.Statistics.Displayname"), configLoad.getStringList( "Menu.Settings.Visitor.Item.Statistics.Vote.Enabled.Closed.Lore"), - nInv.createItemLoreVariable( - new String[] { "%visits#" + visit.getVisitors().size(), - "%votes#" + visit.getVoters().size(), - "%visitors#" - + islandManager.getVisitorsAtIsland(island).size() }), + new Placeholder[] { new Placeholder("%visits", "" + visit.getVisitors().size()), + new Placeholder("%votes", "" + visit.getVoters().size()), + new Placeholder("%visitors", + "" + islandManager.getVisitorsAtIsland(island).size()) }, null, null), 4); } } else { @@ -452,20 +451,18 @@ public class Settings { configLoad.getString("Menu.Settings.Visitor.Item.Statistics.Displayname"), configLoad.getStringList( "Menu.Settings.Visitor.Item.Statistics.Vote.Disabled.Open.Lore"), - nInv.createItemLoreVariable( - new String[] { "%visits#" + visit.getVisitors().size(), - "%visitors#" - + islandManager.getVisitorsAtIsland(island).size() }), + new Placeholder[] { new Placeholder("%visits", "" + visit.getVisitors().size()), + new Placeholder("%visitors", + "" + islandManager.getVisitorsAtIsland(island).size()) }, null, null), 4); } else { nInv.addItem(nInv.createItem(new ItemStack(Material.PAINTING), configLoad.getString("Menu.Settings.Visitor.Item.Statistics.Displayname"), configLoad.getStringList( "Menu.Settings.Visitor.Item.Statistics.Vote.Disabled.Closed.Lore"), - nInv.createItemLoreVariable( - new String[] { "%visits#" + visit.getVisitors().size(), - "%visitors#" - + islandManager.getVisitorsAtIsland(island).size() }), + new Placeholder[] { new Placeholder("%visits", "" + visit.getVisitors().size()), + new Placeholder("%visitors", + "" + islandManager.getVisitorsAtIsland(island).size()) }, null, null), 4); } } diff --git a/src/main/java/me/goodandevil/skyblock/menus/Upgrade.java b/src/main/java/me/goodandevil/skyblock/menus/Upgrade.java index fb5661b7..7aa21d74 100644 --- a/src/main/java/me/goodandevil/skyblock/menus/Upgrade.java +++ b/src/main/java/me/goodandevil/skyblock/menus/Upgrade.java @@ -25,6 +25,7 @@ import me.goodandevil.skyblock.economy.EconomyManager; import me.goodandevil.skyblock.island.Island; import me.goodandevil.skyblock.island.IslandManager; import me.goodandevil.skyblock.message.MessageManager; +import me.goodandevil.skyblock.placeholder.Placeholder; import me.goodandevil.skyblock.playerdata.PlayerData; import me.goodandevil.skyblock.playerdata.PlayerDataManager; import me.goodandevil.skyblock.sound.SoundManager; @@ -596,10 +597,10 @@ public class Upgrade { ChatColor.translateAlternateColorCodes('&', configLoad.getString("Menu.Upgrade.Item.Speed.Displayname")), configLoad.getStringList("Menu.Upgrade.Item.Speed.Claimed.Lore"), - nInv.createItemLoreVariable( - new String[] { "%cost#" + NumberUtil.formatNumberByDecimal(upgrade.getCost()), - "%status#" + getStatus(island, - me.goodandevil.skyblock.upgrade.Upgrade.Type.Speed) }), + new Placeholder[] { + new Placeholder("%cost", NumberUtil.formatNumberByDecimal(upgrade.getCost())), + new Placeholder("%status", + getStatus(island, me.goodandevil.skyblock.upgrade.Upgrade.Type.Speed)) }, null, new ItemFlag[] { ItemFlag.HIDE_POTION_EFFECTS }), 0); } else { if (economyManager.hasBalance(player, upgrade.getCost())) { @@ -607,16 +608,16 @@ public class Upgrade { ChatColor.translateAlternateColorCodes('&', configLoad.getString("Menu.Upgrade.Item.Speed.Displayname")), configLoad.getStringList("Menu.Upgrade.Item.Speed.Claimable.Lore"), - nInv.createItemLoreVariable( - new String[] { "%cost#" + NumberUtil.formatNumberByDecimal(upgrade.getCost()) }), + new Placeholder[] { + new Placeholder("%cost", NumberUtil.formatNumberByDecimal(upgrade.getCost())) }, null, new ItemFlag[] { ItemFlag.HIDE_POTION_EFFECTS }), 0); } else { nInv.addItem(nInv.createItem(potion, ChatColor.translateAlternateColorCodes('&', configLoad.getString("Menu.Upgrade.Item.Speed.Displayname")), configLoad.getStringList("Menu.Upgrade.Item.Speed.Unclaimable.Lore"), - nInv.createItemLoreVariable( - new String[] { "%cost#" + NumberUtil.formatNumberByDecimal(upgrade.getCost()) }), + new Placeholder[] { + new Placeholder("%cost", NumberUtil.formatNumberByDecimal(upgrade.getCost())) }, null, new ItemFlag[] { ItemFlag.HIDE_POTION_EFFECTS }), 0); } } @@ -647,10 +648,10 @@ public class Upgrade { ChatColor.translateAlternateColorCodes('&', configLoad.getString("Menu.Upgrade.Item.Jump.Displayname")), configLoad.getStringList("Menu.Upgrade.Item.Jump.Claimed.Lore"), - nInv.createItemLoreVariable( - new String[] { "%cost#" + NumberUtil.formatNumberByDecimal(upgrade.getCost()), - "%status#" + getStatus(island, - me.goodandevil.skyblock.upgrade.Upgrade.Type.Jump) }), + new Placeholder[] { + new Placeholder("%cost", NumberUtil.formatNumberByDecimal(upgrade.getCost())), + new Placeholder("%status", + getStatus(island, me.goodandevil.skyblock.upgrade.Upgrade.Type.Jump)) }, null, new ItemFlag[] { ItemFlag.HIDE_POTION_EFFECTS }), 1); } else { if (economyManager.hasBalance(player, upgrade.getCost())) { @@ -658,16 +659,16 @@ public class Upgrade { ChatColor.translateAlternateColorCodes('&', configLoad.getString("Menu.Upgrade.Item.Jump.Displayname")), configLoad.getStringList("Menu.Upgrade.Item.Jump.Claimable.Lore"), - nInv.createItemLoreVariable( - new String[] { "%cost#" + NumberUtil.formatNumberByDecimal(upgrade.getCost()) }), + new Placeholder[] { + new Placeholder("%cost", NumberUtil.formatNumberByDecimal(upgrade.getCost())) }, null, new ItemFlag[] { ItemFlag.HIDE_POTION_EFFECTS }), 1); } else { nInv.addItem(nInv.createItem(potion, ChatColor.translateAlternateColorCodes('&', configLoad.getString("Menu.Upgrade.Item.Jump.Displayname")), configLoad.getStringList("Menu.Upgrade.Item.Jump.Unclaimable.Lore"), - nInv.createItemLoreVariable( - new String[] { "%cost#" + NumberUtil.formatNumberByDecimal(upgrade.getCost()) }), + new Placeholder[] { + new Placeholder("%cost", NumberUtil.formatNumberByDecimal(upgrade.getCost())) }, null, new ItemFlag[] { ItemFlag.HIDE_POTION_EFFECTS }), 1); } } @@ -683,10 +684,10 @@ public class Upgrade { ChatColor.translateAlternateColorCodes('&', configLoad.getString("Menu.Upgrade.Item.Crop.Displayname")), configLoad.getStringList("Menu.Upgrade.Item.Crop.Claimed.Lore"), - nInv.createItemLoreVariable( - new String[] { "%cost#" + NumberUtil.formatNumberByDecimal(upgrade.getCost()), - "%status#" + getStatus(island, - me.goodandevil.skyblock.upgrade.Upgrade.Type.Crop) }), + new Placeholder[] { + new Placeholder("%cost", NumberUtil.formatNumberByDecimal(upgrade.getCost())), + new Placeholder("%status", + getStatus(island, me.goodandevil.skyblock.upgrade.Upgrade.Type.Crop)) }, null, null), 3); } else { if (economyManager.hasBalance(player, upgrade.getCost())) { @@ -694,16 +695,16 @@ public class Upgrade { ChatColor.translateAlternateColorCodes('&', configLoad.getString("Menu.Upgrade.Item.Crop.Displayname")), configLoad.getStringList("Menu.Upgrade.Item.Crop.Claimable.Lore"), - nInv.createItemLoreVariable( - new String[] { "%cost#" + NumberUtil.formatNumberByDecimal(upgrade.getCost()) }), + new Placeholder[] { + new Placeholder("%cost", NumberUtil.formatNumberByDecimal(upgrade.getCost())) }, null, null), 3); } else { nInv.addItem(nInv.createItem(Materials.WHEAT_SEEDS.parseItem(), ChatColor.translateAlternateColorCodes('&', configLoad.getString("Menu.Upgrade.Item.Crop.Displayname")), configLoad.getStringList("Menu.Upgrade.Item.Crop.Unclaimable.Lore"), - nInv.createItemLoreVariable( - new String[] { "%cost#" + NumberUtil.formatNumberByDecimal(upgrade.getCost()) }), + new Placeholder[] { + new Placeholder("%cost", NumberUtil.formatNumberByDecimal(upgrade.getCost())) }, null, null), 3); } } @@ -719,9 +720,10 @@ public class Upgrade { ChatColor.translateAlternateColorCodes('&', configLoad.getString("Menu.Upgrade.Item.Fly.Displayname")), configLoad.getStringList("Menu.Upgrade.Item.Fly.Claimed.Lore"), - nInv.createItemLoreVariable(new String[] { - "%cost#" + NumberUtil.formatNumberByDecimal(upgrade.getCost()), - "%status#" + getStatus(island, me.goodandevil.skyblock.upgrade.Upgrade.Type.Fly) }), + new Placeholder[] { + new Placeholder("%cost", NumberUtil.formatNumberByDecimal(upgrade.getCost())), + new Placeholder("%status", + getStatus(island, me.goodandevil.skyblock.upgrade.Upgrade.Type.Fly)) }, null, null), 4); } else { if (economyManager.hasBalance(player, upgrade.getCost())) { @@ -729,16 +731,16 @@ public class Upgrade { ChatColor.translateAlternateColorCodes('&', configLoad.getString("Menu.Upgrade.Item.Fly.Displayname")), configLoad.getStringList("Menu.Upgrade.Item.Fly.Claimable.Lore"), - nInv.createItemLoreVariable( - new String[] { "%cost#" + NumberUtil.formatNumberByDecimal(upgrade.getCost()) }), + new Placeholder[] { + new Placeholder("%cost", NumberUtil.formatNumberByDecimal(upgrade.getCost())) }, null, null), 4); } else { nInv.addItem(nInv.createItem(new ItemStack(Material.FEATHER), ChatColor.translateAlternateColorCodes('&', configLoad.getString("Menu.Upgrade.Item.Fly.Displayname")), configLoad.getStringList("Menu.Upgrade.Item.Fly.Unclaimable.Lore"), - nInv.createItemLoreVariable( - new String[] { "%cost#" + NumberUtil.formatNumberByDecimal(upgrade.getCost()) }), + new Placeholder[] { + new Placeholder("%cost", NumberUtil.formatNumberByDecimal(upgrade.getCost())) }, null, null), 4); } } @@ -754,10 +756,10 @@ public class Upgrade { ChatColor.translateAlternateColorCodes('&', configLoad.getString("Menu.Upgrade.Item.Drops.Displayname")), configLoad.getStringList("Menu.Upgrade.Item.Drops.Claimed.Lore"), - nInv.createItemLoreVariable( - new String[] { "%cost#" + NumberUtil.formatNumberByDecimal(upgrade.getCost()), - "%status#" + getStatus(island, - me.goodandevil.skyblock.upgrade.Upgrade.Type.Drops) }), + new Placeholder[] { + new Placeholder("%cost", NumberUtil.formatNumberByDecimal(upgrade.getCost())), + new Placeholder("%status", + getStatus(island, me.goodandevil.skyblock.upgrade.Upgrade.Type.Drops)) }, null, null), 5); } else { if (economyManager.hasBalance(player, upgrade.getCost())) { @@ -765,16 +767,16 @@ public class Upgrade { ChatColor.translateAlternateColorCodes('&', configLoad.getString("Menu.Upgrade.Item.Drops.Displayname")), configLoad.getStringList("Menu.Upgrade.Item.Drops.Claimable.Lore"), - nInv.createItemLoreVariable( - new String[] { "%cost#" + NumberUtil.formatNumberByDecimal(upgrade.getCost()) }), + new Placeholder[] { + new Placeholder("%cost", NumberUtil.formatNumberByDecimal(upgrade.getCost())) }, null, null), 5); } else { nInv.addItem(nInv.createItem(new ItemStack(Material.SPIDER_EYE), ChatColor.translateAlternateColorCodes('&', configLoad.getString("Menu.Upgrade.Item.Drops.Displayname")), configLoad.getStringList("Menu.Upgrade.Item.Drops.Unclaimable.Lore"), - nInv.createItemLoreVariable( - new String[] { "%cost#" + NumberUtil.formatNumberByDecimal(upgrade.getCost()) }), + new Placeholder[] { + new Placeholder("%cost", NumberUtil.formatNumberByDecimal(upgrade.getCost())) }, null, null), 5); } } @@ -794,17 +796,16 @@ public class Upgrade { } if (island.getSize() >= upgrade.getValue()) { - nInv.addItem( - nInv.createItem(new ItemStack(Material.BEACON), - ChatColor.translateAlternateColorCodes('&', - configLoad.getString("Menu.Upgrade.Item.Size.Displayname") - .replace("%tier", "" + tier)), - configLoad.getStringList("Menu.Upgrade.Item.Size.Claimed.Lore"), - nInv.createItemLoreVariable( - new String[] { "%cost#" + NumberUtil.formatNumberByDecimal(upgrade.getCost()), - "%tier#" + tier, "%size#" + upgrade.getValue() }), - null, null), - 7); + nInv.addItem(nInv.createItem(new ItemStack(Material.BEACON), + ChatColor.translateAlternateColorCodes('&', + configLoad.getString("Menu.Upgrade.Item.Size.Displayname").replace("%tier", + "" + tier)), + configLoad.getStringList("Menu.Upgrade.Item.Size.Claimed.Lore"), + new Placeholder[] { + new Placeholder("%cost", NumberUtil.formatNumberByDecimal(upgrade.getCost())), + new Placeholder("%tier", "" + tier), + new Placeholder("%size", "" + upgrade.getValue()) }, + null, null), 7); } else { if (economyManager.hasBalance(player, upgrade.getCost())) { nInv.addItem( @@ -813,9 +814,11 @@ public class Upgrade { configLoad.getString("Menu.Upgrade.Item.Size.Displayname") .replace("%tier", "" + tier)), configLoad.getStringList("Menu.Upgrade.Item.Size.Claimable.Lore"), - nInv.createItemLoreVariable(new String[] { - "%cost#" + NumberUtil.formatNumberByDecimal(upgrade.getCost()), - "%tier#" + tier, "%size#" + upgrade.getValue() }), + new Placeholder[] { + new Placeholder("%cost", + NumberUtil.formatNumberByDecimal(upgrade.getCost())), + new Placeholder("%tier", "" + tier), + new Placeholder("%size", "" + upgrade.getValue()) }, null, null), 7); } else { @@ -825,9 +828,11 @@ public class Upgrade { configLoad.getString("Menu.Upgrade.Item.Size.Displayname") .replace("%tier", "" + tier)), configLoad.getStringList("Menu.Upgrade.Item.Size.Unclaimable.Lore"), - nInv.createItemLoreVariable(new String[] { - "%cost#" + NumberUtil.formatNumberByDecimal(upgrade.getCost()), - "%tier#" + tier, "%size#" + upgrade.getValue() }), + new Placeholder[] { + new Placeholder("%cost", + NumberUtil.formatNumberByDecimal(upgrade.getCost())), + new Placeholder("%tier", "" + tier), + new Placeholder("%size", "" + upgrade.getValue()) }, null, null), 7); } @@ -847,10 +852,10 @@ public class Upgrade { ChatColor.translateAlternateColorCodes('&', configLoad.getString("Menu.Upgrade.Item.Spawner.Displayname")), configLoad.getStringList("Menu.Upgrade.Item.Spawner.Claimed.Lore"), - nInv.createItemLoreVariable( - new String[] { "%cost#" + NumberUtil.formatNumberByDecimal(upgrade.getCost()), - "%status#" + getStatus(island, - me.goodandevil.skyblock.upgrade.Upgrade.Type.Spawner) }), + new Placeholder[] { + new Placeholder("%cost", NumberUtil.formatNumberByDecimal(upgrade.getCost())), + new Placeholder("%status", + getStatus(island, me.goodandevil.skyblock.upgrade.Upgrade.Type.Spawner)) }, null, null), 8); } else { if (economyManager.hasBalance(player, upgrade.getCost())) { @@ -858,16 +863,16 @@ public class Upgrade { ChatColor.translateAlternateColorCodes('&', configLoad.getString("Menu.Upgrade.Item.Spawner.Displayname")), configLoad.getStringList("Menu.Upgrade.Item.Spawner.Claimable.Lore"), - nInv.createItemLoreVariable( - new String[] { "%cost#" + NumberUtil.formatNumberByDecimal(upgrade.getCost()) }), + new Placeholder[] { + new Placeholder("%cost", NumberUtil.formatNumberByDecimal(upgrade.getCost())) }, null, null), 8); } else { nInv.addItem(nInv.createItem(Materials.SPAWNER.parseItem(), ChatColor.translateAlternateColorCodes('&', configLoad.getString("Menu.Upgrade.Item.Spawner.Displayname")), configLoad.getStringList("Menu.Upgrade.Item.Spawner.Unclaimable.Lore"), - nInv.createItemLoreVariable( - new String[] { "%cost#" + NumberUtil.formatNumberByDecimal(upgrade.getCost()) }), + new Placeholder[] { + new Placeholder("%cost", NumberUtil.formatNumberByDecimal(upgrade.getCost())) }, null, null), 8); } } diff --git a/src/main/java/me/goodandevil/skyblock/menus/Visit.java b/src/main/java/me/goodandevil/skyblock/menus/Visit.java index cdad42ea..a504f01a 100644 --- a/src/main/java/me/goodandevil/skyblock/menus/Visit.java +++ b/src/main/java/me/goodandevil/skyblock/menus/Visit.java @@ -22,6 +22,7 @@ import me.goodandevil.skyblock.island.Island; import me.goodandevil.skyblock.island.IslandManager; import me.goodandevil.skyblock.island.IslandRole; import me.goodandevil.skyblock.message.MessageManager; +import me.goodandevil.skyblock.placeholder.Placeholder; import me.goodandevil.skyblock.playerdata.PlayerData; import me.goodandevil.skyblock.playerdata.PlayerDataManager; import me.goodandevil.skyblock.sound.SoundManager; @@ -365,22 +366,21 @@ public class Visit { nInv.addItem(nInv.createItem(new ItemStack(Material.HOPPER), configLoad.getString("Menu.Visit.Item.Type.Displayname"), configLoad.getStringList("Menu.Visit.Item.Type.Lore"), - nInv.createItemLoreVariable( - new String[] { "%type#" + StringUtil.capatilizeUppercaseLetters(type.name()) }), + new Placeholder[] { new Placeholder("%type", StringUtil.capatilizeUppercaseLetters(type.name())) }, null, null), 3); nInv.addItem(nInv.createItem(new ItemStack(Material.PAINTING), configLoad.getString("Menu.Visit.Item.Statistics.Displayname"), configLoad.getStringList("Menu.Visit.Item.Statistics.Lore"), - nInv.createItemLoreVariable( - new String[] { "%islands_open#" + NumberUtil.formatNumberByDecimal(visitIslands.size()), - "%islands_closed#" + NumberUtil.formatNumberByDecimal(totalIslands - visitIslands.size()), - "%islands#" + NumberUtil.formatNumberByDecimal(totalIslands) }), + new Placeholder[] { + new Placeholder("%islands_open", NumberUtil.formatNumberByDecimal(visitIslands.size())), + new Placeholder("%islands_closed", + NumberUtil.formatNumberByDecimal(totalIslands - visitIslands.size())), + new Placeholder("%islands", NumberUtil.formatNumberByDecimal(totalIslands)) }, null, null), 4); nInv.addItem(nInv.createItem(new ItemStack(Material.HOPPER), configLoad.getString("Menu.Visit.Item.Sort.Displayname"), configLoad.getStringList("Menu.Visit.Item.Sort.Lore"), - nInv.createItemLoreVariable( - new String[] { "%sort#" + StringUtil.capatilizeUppercaseLetters(sort.name()) }), + new Placeholder[] { new Placeholder("%sort", StringUtil.capatilizeUppercaseLetters(sort.name())) }, null, null), 5); nInv.addItem( nInv.createItem(Materials.BLACK_STAINED_GLASS_PANE.parseItem(), @@ -500,15 +500,17 @@ public class Visit { } nInv.addItem(nInv.createItem(SkullUtil.create(targetPlayerTexture[0], targetPlayerTexture[1]), - configLoad.getString( - "Menu.Visit.Item.Island.Displayname").replace("%player", targetPlayerName), + configLoad.getString("Menu.Visit.Item.Island.Displayname").replace("%player", + targetPlayerName), itemLore, - nInv.createItemLoreVariable(new String[] { "%level#" + visit.getLevel().getLevel(), - "%members#" + visit.getMembers(), "%votes#" + visit.getVoters().size(), - "%visits#" + visit.getVisitors().size(), - "%players#" + islandManager.getPlayersAtIsland(island).size(), - "%player_capacity#" + playerCapacity, "%action#" + voteAction, - "%safety#" + safety }), + new Placeholder[] { new Placeholder("%level", "" + visit.getLevel().getLevel()), + new Placeholder("%members", "" + visit.getMembers()), + new Placeholder("%votes", "" + visit.getVoters().size()), + new Placeholder("%visits", "" + visit.getVisitors().size()), + new Placeholder("%players", + "" + islandManager.getPlayersAtIsland(island).size()), + new Placeholder("%player_capacity", "" + playerCapacity), + new Placeholder("%action", voteAction), new Placeholder("%safety", safety) }, null, null), inventorySlot); } else { if (signatureEnabled) { @@ -534,13 +536,16 @@ public class Visit { } nInv.addItem(nInv.createItem(SkullUtil.create(targetPlayerTexture[0], targetPlayerTexture[1]), - configLoad.getString( - "Menu.Visit.Item.Island.Displayname").replace("%player", targetPlayerName), + configLoad.getString("Menu.Visit.Item.Island.Displayname").replace("%player", + targetPlayerName), itemLore, - nInv.createItemLoreVariable(new String[] { "%level#" + visit.getLevel().getLevel(), - "%members#" + visit.getMembers(), "%visits#" + visit.getVisitors().size(), - "%players#" + islandManager.getPlayersAtIsland(island).size(), - "%player_capacity#" + playerCapacity, "%safety#" + safety }), + new Placeholder[] { new Placeholder("%level", "" + visit.getLevel().getLevel()), + new Placeholder("%members", "" + visit.getMembers()), + new Placeholder("%visits", "" + visit.getVisitors().size()), + new Placeholder("%players", + "" + islandManager.getPlayersAtIsland(island).size()), + new Placeholder("%player_capacity", "" + playerCapacity), + new Placeholder("%safety", safety) }, null, null), inventorySlot); } } diff --git a/src/main/java/me/goodandevil/skyblock/menus/Visitors.java b/src/main/java/me/goodandevil/skyblock/menus/Visitors.java index 80aa4a96..e921eb0d 100644 --- a/src/main/java/me/goodandevil/skyblock/menus/Visitors.java +++ b/src/main/java/me/goodandevil/skyblock/menus/Visitors.java @@ -21,6 +21,7 @@ import me.goodandevil.skyblock.config.FileManager; import me.goodandevil.skyblock.island.Island; import me.goodandevil.skyblock.island.IslandManager; import me.goodandevil.skyblock.island.IslandRole; +import me.goodandevil.skyblock.placeholder.Placeholder; import me.goodandevil.skyblock.playerdata.PlayerData; import me.goodandevil.skyblock.playerdata.PlayerDataManager; import me.goodandevil.skyblock.sound.SoundManager; @@ -185,10 +186,12 @@ public class Visitors { nInv.addItem(nInv.createItem(Materials.OAK_FENCE_GATE.parseItem(), configLoad.getString("Menu.Visitors.Item.Exit.Displayname"), null, null, null, null), 0, 8); - nInv.addItem(nInv.createItem(new ItemStack(Material.PAINTING), - configLoad.getString("Menu.Visitors.Item.Statistics.Displayname"), - configLoad.getStringList("Menu.Visitors.Item.Statistics.Lore"), - nInv.createItemLoreVariable(new String[] { "%visitors#" + islandVisitors.size() }), null, null), 4); + nInv.addItem( + nInv.createItem(new ItemStack(Material.PAINTING), + configLoad.getString("Menu.Visitors.Item.Statistics.Displayname"), + configLoad.getStringList("Menu.Visitors.Item.Statistics.Lore"), + new Placeholder[] { new Placeholder("%visitors", "" + islandVisitors.size()) }, null, null), + 4); nInv.addItem( nInv.createItem(Materials.BLACK_STAINED_GLASS_PANE.parseItem(), configLoad.getString("Menu.Visitors.Item.Barrier.Displayname"), null, null, null, null), @@ -296,13 +299,15 @@ public class Visitors { } } - nInv.addItem(nInv.createItem(SkullUtil.create(targetPlayerTexture[0], targetPlayerTexture[1]), - ChatColor.translateAlternateColorCodes('&', - configLoad.getString("Menu.Visitors.Item.Visitor.Displayname") - .replace("%player", targetPlayer.getName())), - itemLore, - nInv.createItemLoreVariable(new String[] { "%time#" + islandVisitTimeFormatted }), null, - null), inventorySlot); + nInv.addItem( + nInv.createItem(SkullUtil.create(targetPlayerTexture[0], targetPlayerTexture[1]), + ChatColor.translateAlternateColorCodes('&', + configLoad.getString("Menu.Visitors.Item.Visitor.Displayname") + .replace("%player", targetPlayer.getName())), + itemLore, + new Placeholder[] { new Placeholder("%time", islandVisitTimeFormatted) }, null, + null), + inventorySlot); } } } diff --git a/src/main/java/me/goodandevil/skyblock/menus/Weather.java b/src/main/java/me/goodandevil/skyblock/menus/Weather.java index 4feb6ef4..352130a9 100644 --- a/src/main/java/me/goodandevil/skyblock/menus/Weather.java +++ b/src/main/java/me/goodandevil/skyblock/menus/Weather.java @@ -18,6 +18,7 @@ import me.goodandevil.skyblock.island.IslandManager; import me.goodandevil.skyblock.island.IslandRole; import me.goodandevil.skyblock.island.IslandWorld; import me.goodandevil.skyblock.message.MessageManager; +import me.goodandevil.skyblock.placeholder.Placeholder; import me.goodandevil.skyblock.playerdata.PlayerDataManager; import me.goodandevil.skyblock.sound.SoundManager; import me.goodandevil.skyblock.utils.item.nInventoryUtil; @@ -237,26 +238,24 @@ public class Weather { nInv.addItem(nInv.createItem(new ItemStack(Material.NAME_TAG), configLoad.getString("Menu.Weather.Item.Info.Displayname"), configLoad.getStringList("Menu.Weather.Item.Info.Lore"), - nInv.createItemLoreVariable( - new String[] { "%synchronised#" + weatherSynchronised, "%time_name#" + timeName, - "%time#" + island.getTime(), "%weather#" + island.getWeatherName() }), + new Placeholder[] { new Placeholder("%synchronised", weatherSynchronised), + new Placeholder("%time_name", timeName), new Placeholder("%time", "" + island.getTime()), + new Placeholder("%weather", island.getWeatherName()) }, null, null), 0); nInv.addItem(nInv.createItem(Materials.BLACK_STAINED_GLASS_PANE.parseItem(), configLoad.getString("Menu.Weather.Item.Barrier.Displayname"), null, null, null, null), 1); nInv.addItem(nInv.createItem(Materials.SUNFLOWER.parseItem(), configLoad.getString("Menu.Weather.Item.Time.Displayname"), configLoad.getStringList("Menu.Weather.Item.Time.Lore"), - nInv.createItemLoreVariable(new String[] { "%choice#" + timeChoice }), null, null), 2); + new Placeholder[] { new Placeholder("%choice", timeChoice) }, null, null), 2); nInv.addItem(nInv.createItem(new ItemStack(Material.GHAST_TEAR), configLoad.getString("Menu.Weather.Item.Weather.Displayname"), configLoad.getStringList("Menu.Weather.Item.Weather.Lore"), - nInv.createItemLoreVariable(new String[] { "%choice#" + weatherChoice }), null, null), 3); - nInv.addItem( - nInv.createItem(new ItemStack(Material.TRIPWIRE_HOOK), - configLoad.getString("Menu.Weather.Item.Synchronised.Displayname"), - configLoad.getStringList("Menu.Weather.Item.Synchronised.Lore"), - nInv.createItemLoreVariable(new String[] { "%choice#" + synchronisedChoice }), null, null), - 4); + new Placeholder[] { new Placeholder("%choice", weatherChoice) }, null, null), 3); + nInv.addItem(nInv.createItem(new ItemStack(Material.TRIPWIRE_HOOK), + configLoad.getString("Menu.Weather.Item.Synchronised.Displayname"), + configLoad.getStringList("Menu.Weather.Item.Synchronised.Lore"), + new Placeholder[] { new Placeholder("%choice", synchronisedChoice) }, null, null), 4); nInv.setTitle(ChatColor.translateAlternateColorCodes('&', configLoad.getString("Menu.Weather.Title"))); nInv.setType(InventoryType.HOPPER); diff --git a/src/main/java/me/goodandevil/skyblock/menus/admin/Creator.java b/src/main/java/me/goodandevil/skyblock/menus/admin/Creator.java index c7ad2e28..e829b4a3 100644 --- a/src/main/java/me/goodandevil/skyblock/menus/admin/Creator.java +++ b/src/main/java/me/goodandevil/skyblock/menus/admin/Creator.java @@ -22,6 +22,7 @@ import me.goodandevil.skyblock.SkyBlock; import me.goodandevil.skyblock.config.FileManager; import me.goodandevil.skyblock.config.FileManager.Config; import me.goodandevil.skyblock.message.MessageManager; +import me.goodandevil.skyblock.placeholder.Placeholder; import me.goodandevil.skyblock.playerdata.PlayerData; import me.goodandevil.skyblock.playerdata.PlayerDataManager; import me.goodandevil.skyblock.sound.SoundManager; @@ -65,10 +66,12 @@ public class Creator implements Listener { nInv.addItem(nInv.createItem(Materials.OAK_FENCE_GATE.parseItem(), configLoad.getString("Menu.Admin.Creator.Browse.Item.Exit.Displayname"), null, null, null, null), 0, 8); - nInv.addItem(nInv.createItem(new ItemStack(org.bukkit.Material.SIGN), - configLoad.getString("Menu.Admin.Creator.Browse.Item.Information.Displayname"), - configLoad.getStringList("Menu.Admin.Creator.Browse.Item.Information.Lore"), - nInv.createItemLoreVariable(new String[] { "%structures#" + structures.size() }), null, null), 4); + nInv.addItem( + nInv.createItem(new ItemStack(org.bukkit.Material.SIGN), + configLoad.getString("Menu.Admin.Creator.Browse.Item.Information.Displayname"), + configLoad.getStringList("Menu.Admin.Creator.Browse.Item.Information.Lore"), + new Placeholder[] { new Placeholder("%structures", "" + structures.size()) }, null, null), + 4); nInv.addItem(nInv.createItem(Materials.BLACK_STAINED_GLASS_PANE.parseItem(), configLoad.getString("Menu.Admin.Creator.Browse.Item.Barrier.Displayname"), null, null, null, null), 9, 10, 11, 12, 13, 14, 15, 16, 17); @@ -129,12 +132,10 @@ public class Creator implements Listener { displayName = ChatColor.translateAlternateColorCodes('&', structure.getDisplayname()); } - nInv.addItem( - nInv.createItem(new ItemStack(Material.NAME_TAG), - configLoad.getString("Menu.Admin.Creator.Options.Item.Displayname.Displayname"), - configLoad.getStringList("Menu.Admin.Creator.Options.Item.Displayname.Lore"), - nInv.createItemLoreVariable(new String[] { "%displayname#" + displayName }), null, null), - 1); + nInv.addItem(nInv.createItem(new ItemStack(Material.NAME_TAG), + configLoad.getString("Menu.Admin.Creator.Options.Item.Displayname.Displayname"), + configLoad.getStringList("Menu.Admin.Creator.Options.Item.Displayname.Lore"), + new Placeholder[] { new Placeholder("%displayname", displayName) }, null, null), 1); List descriptionLore = new ArrayList<>(); @@ -201,8 +202,7 @@ public class Creator implements Listener { nInv.addItem(nInv.createItem(Materials.LEGACY_EMPTY_MAP.getPostItem(), configLoad.getString("Menu.Admin.Creator.Options.Item.Permission.Displayname"), permissionLore, - nInv.createItemLoreVariable(new String[] { "%permission#" + structure.getPermission() }), null, - null), 4); + new Placeholder[] { new Placeholder("%permission", structure.getPermission()) }, null, null), 4); String fileName = ChatColor.translateAlternateColorCodes('&', configLoad.getString("Menu.Admin.Creator.Options.Item.Word.Unset")), overworldFileName, @@ -223,14 +223,14 @@ public class Creator implements Listener { nInv.addItem(nInv.createItem(new ItemStack(Material.PAPER), configLoad.getString("Menu.Admin.Creator.Options.Item.File.Displayname"), configLoad.getStringList("Menu.Admin.Creator.Options.Item.File.Lore"), - nInv.createItemLoreVariable( - new String[] { "%overworld_file#" + overworldFileName, "%nether_file#" + netherFileName }), + new Placeholder[] { new Placeholder("%overworld_file", overworldFileName), + new Placeholder("%nether_file", netherFileName) }, null, null), 5); nInv.addItem(nInv.createItem(new ItemStack(Material.DIAMOND), configLoad.getString("Menu.Admin.Creator.Options.Item.Item.Displayname"), configLoad.getStringList("Menu.Admin.Creator.Options.Item.Item.Lore"), - nInv.createItemLoreVariable(new String[] { "%material#" + structure.getMaterials().name() }), null, - null), 6); + new Placeholder[] { new Placeholder("%material", structure.getMaterials().name()) }, null, null), + 6); nInv.setRows(1); } diff --git a/src/main/java/me/goodandevil/skyblock/menus/admin/Generator.java b/src/main/java/me/goodandevil/skyblock/menus/admin/Generator.java index cf455379..7208f422 100644 --- a/src/main/java/me/goodandevil/skyblock/menus/admin/Generator.java +++ b/src/main/java/me/goodandevil/skyblock/menus/admin/Generator.java @@ -23,6 +23,7 @@ import me.goodandevil.skyblock.config.FileManager.Config; import me.goodandevil.skyblock.generator.GeneratorManager; import me.goodandevil.skyblock.generator.GeneratorMaterial; import me.goodandevil.skyblock.message.MessageManager; +import me.goodandevil.skyblock.placeholder.Placeholder; import me.goodandevil.skyblock.playerdata.PlayerData; import me.goodandevil.skyblock.sound.SoundManager; import me.goodandevil.skyblock.utils.AnvilGUI; @@ -63,10 +64,12 @@ public class Generator implements Listener { nInv.addItem(nInv.createItem(Materials.OAK_FENCE_GATE.parseItem(), configLoad.getString("Menu.Admin.Generator.Browse.Item.Exit.Displayname"), null, null, null, null), 0, 8); - nInv.addItem(nInv.createItem(new ItemStack(org.bukkit.Material.SIGN), - configLoad.getString("Menu.Admin.Generator.Browse.Item.Information.Displayname"), - configLoad.getStringList("Menu.Admin.Generator.Browse.Item.Information.Lore"), - nInv.createItemLoreVariable(new String[] { "%generators#" + generators.size() }), null, null), 4); + nInv.addItem( + nInv.createItem(new ItemStack(org.bukkit.Material.SIGN), + configLoad.getString("Menu.Admin.Generator.Browse.Item.Information.Displayname"), + configLoad.getStringList("Menu.Admin.Generator.Browse.Item.Information.Lore"), + new Placeholder[] { new Placeholder("%generators", "" + generators.size()) }, null, null), + 4); nInv.addItem(nInv.createItem(Materials.BLACK_STAINED_GLASS_PANE.parseItem(), configLoad.getString("Menu.Admin.Generator.Browse.Item.Barrier.Displayname"), null, null, null, null), 9, 10, 11, 12, 13, 14, 15, 16, 17); @@ -127,9 +130,9 @@ public class Generator implements Listener { nInv.addItem(nInv.createItem(Materials.LEGACY_EMPTY_MAP.getPostItem(), configLoad.getString("Menu.Admin.Generator.Generator.Item.Information.Displayname"), permissionLore, - nInv.createItemLoreVariable(new String[] { "%name#" + generator.getName(), - "%materials#" + generator.getGeneratorMaterials().size(), - "%permission#" + generator.getPermission() }), + new Placeholder[] { new Placeholder("%name", generator.getName()), + new Placeholder("%materials", "" + generator.getGeneratorMaterials().size()), + new Placeholder("%permission", generator.getPermission()) }, null, null), 4); nInv.addItem(nInv.createItem(Materials.OAK_FENCE_GATE.parseItem(), configLoad.getString("Menu.Admin.Generator.Generator.Item.Return.Displayname"), null, null, null, @@ -159,8 +162,7 @@ public class Generator implements Listener { configLoad.getString("Menu.Admin.Generator.Generator.Item.Material.Displayname") .replace("%material", generatorMaterial.getMaterials().name())), configLoad.getStringList("Menu.Admin.Generator.Generator.Item.Material.Lore"), - nInv.createItemLoreVariable( - new String[] { "%chance#" + generatorMaterial.getChance() }), + new Placeholder[] { new Placeholder("%chance", "" + generatorMaterial.getChance()) }, null, null), inventorySlot); } } diff --git a/src/main/java/me/goodandevil/skyblock/menus/admin/Levelling.java b/src/main/java/me/goodandevil/skyblock/menus/admin/Levelling.java index 1acb98d4..f536ce4a 100644 --- a/src/main/java/me/goodandevil/skyblock/menus/admin/Levelling.java +++ b/src/main/java/me/goodandevil/skyblock/menus/admin/Levelling.java @@ -21,6 +21,7 @@ import me.goodandevil.skyblock.config.FileManager; import me.goodandevil.skyblock.config.FileManager.Config; import me.goodandevil.skyblock.levelling.LevellingManager; import me.goodandevil.skyblock.message.MessageManager; +import me.goodandevil.skyblock.placeholder.Placeholder; import me.goodandevil.skyblock.playerdata.PlayerData; import me.goodandevil.skyblock.sound.SoundManager; import me.goodandevil.skyblock.utils.AnvilGUI; @@ -63,13 +64,16 @@ public class Levelling implements Listener { nInv.createItem(Materials.OAK_FENCE_GATE.parseItem(), configLoad.getString("Menu.Admin.Levelling.Item.Exit.Displayname"), null, null, null, null), 0, 8); - nInv.addItem(nInv.createItem(new ItemStack(org.bukkit.Material.SIGN), - configLoad.getString("Menu.Admin.Levelling.Item.Information.Displayname"), - configLoad.getStringList("Menu.Admin.Levelling.Item.Information.Lore"), - nInv.createItemLoreVariable(new String[] { "%materials#" + levellingMaterials.size(), - "%division#" + fileManager.getConfig(new File(skyblock.getDataFolder(), "config.yml")) - .getFileConfiguration().getInt("Island.Levelling.Division") }), - null, null), 4); + nInv.addItem( + nInv.createItem(new ItemStack(org.bukkit.Material.SIGN), + configLoad.getString("Menu.Admin.Levelling.Item.Information.Displayname"), + configLoad.getStringList("Menu.Admin.Levelling.Item.Information.Lore"), + new Placeholder[] { new Placeholder("%materials", "" + levellingMaterials.size()), + new Placeholder("%division", + "" + fileManager.getConfig(new File(skyblock.getDataFolder(), "config.yml")) + .getFileConfiguration().getInt("Island.Levelling.Division")) }, + null, null), + 4); nInv.addItem( nInv.createItem(Materials.BLACK_STAINED_GLASS_PANE.parseItem(), configLoad.getString("Menu.Admin.Levelling.Item.Barrier.Displayname"), null, null, null, null), @@ -104,16 +108,18 @@ public class Levelling implements Listener { inventorySlot++; me.goodandevil.skyblock.levelling.Material material = levellingMaterials.get(index); - nInv.addItem(nInv.createItem( - new ItemStack(MaterialUtil.correctMaterial(material.getItemStack().getType()), 1, - material.getItemStack().getDurability()), - ChatColor.translateAlternateColorCodes('&', - configLoad.getString("Menu.Admin.Levelling.Item.Material.Displayname") - .replace("%material", material.getMaterials().name())), - configLoad.getStringList("Menu.Admin.Levelling.Item.Material.Lore"), - nInv.createItemLoreVariable( - new String[] { "%points#" + NumberUtil.formatNumberByDecimal(material.getPoints()) }), - null, null), inventorySlot); + nInv.addItem( + nInv.createItem( + new ItemStack(MaterialUtil.correctMaterial(material.getItemStack().getType()), 1, + material.getItemStack().getDurability()), + ChatColor.translateAlternateColorCodes('&', + configLoad.getString("Menu.Admin.Levelling.Item.Material.Displayname") + .replace("%material", material.getMaterials().name())), + configLoad.getStringList("Menu.Admin.Levelling.Item.Material.Lore"), + new Placeholder[] { new Placeholder("%points", + NumberUtil.formatNumberByDecimal(material.getPoints())) }, + null, null), + inventorySlot); } } } @@ -314,11 +320,10 @@ public class Levelling implements Listener { int materialPoints = Integer.valueOf(event1.getName()); materialList.setPoints(materialPoints); - messageManager.sendMessage(player, - configLoad.getString("Island.Admin.Levelling.Points.Message") - .replace("%material", materials.name()) - .replace("%points", - NumberUtil.formatNumberByDecimal(materialPoints))); + messageManager.sendMessage(player, configLoad + .getString("Island.Admin.Levelling.Points.Message") + .replace("%material", materials.name()).replace("%points", + NumberUtil.formatNumberByDecimal(materialPoints))); soundManager.playSound(player, Sounds.LEVEL_UP.bukkitSound(), 1.0F, 1.0F); player.closeInventory(); diff --git a/src/main/java/me/goodandevil/skyblock/menus/admin/Upgrade.java b/src/main/java/me/goodandevil/skyblock/menus/admin/Upgrade.java index d879c68c..c478fa5d 100644 --- a/src/main/java/me/goodandevil/skyblock/menus/admin/Upgrade.java +++ b/src/main/java/me/goodandevil/skyblock/menus/admin/Upgrade.java @@ -21,6 +21,7 @@ import me.goodandevil.skyblock.SkyBlock; import me.goodandevil.skyblock.config.FileManager; import me.goodandevil.skyblock.config.FileManager.Config; import me.goodandevil.skyblock.message.MessageManager; +import me.goodandevil.skyblock.placeholder.Placeholder; import me.goodandevil.skyblock.playerdata.PlayerData; import me.goodandevil.skyblock.playerdata.PlayerDataManager; import me.goodandevil.skyblock.sound.SoundManager; @@ -270,9 +271,9 @@ public class Upgrade { ChatColor.translateAlternateColorCodes('&', configLoad.getString("Menu.Admin.Upgrade.Upgrades.Item.Speed.Displayname")), configLoad.getStringList("Menu.Admin.Upgrade.Upgrades.Item.Speed.Lore"), - nInv.createItemLoreVariable( - new String[] { "%cost#" + NumberUtil.formatNumberByDecimal(upgrade.getCost()), - "%status#" + getStatus(upgrade) }), + new Placeholder[] { + new Placeholder("%cost", NumberUtil.formatNumberByDecimal(upgrade.getCost())), + new Placeholder("%status", getStatus(upgrade)) }, null, new ItemFlag[] { ItemFlag.HIDE_POTION_EFFECTS }), 1); if (NMSVersion > 12) { @@ -288,9 +289,9 @@ public class Upgrade { ChatColor.translateAlternateColorCodes('&', configLoad.getString("Menu.Admin.Upgrade.Upgrades.Item.Jump.Displayname")), configLoad.getStringList("Menu.Admin.Upgrade.Upgrades.Item.Jump.Lore"), - nInv.createItemLoreVariable( - new String[] { "%cost#" + NumberUtil.formatNumberByDecimal(upgrade.getCost()), - "%status#" + getStatus(upgrade) }), + new Placeholder[] { + new Placeholder("%cost", NumberUtil.formatNumberByDecimal(upgrade.getCost())), + new Placeholder("%status", getStatus(upgrade)) }, null, new ItemFlag[] { ItemFlag.HIDE_POTION_EFFECTS }), 2); upgrade = upgradeManager.getUpgrades(me.goodandevil.skyblock.upgrade.Upgrade.Type.Crop).get(0); @@ -298,9 +299,9 @@ public class Upgrade { ChatColor.translateAlternateColorCodes('&', configLoad.getString("Menu.Admin.Upgrade.Upgrades.Item.Crop.Displayname")), configLoad.getStringList("Menu.Admin.Upgrade.Upgrades.Item.Crop.Lore"), - nInv.createItemLoreVariable( - new String[] { "%cost#" + NumberUtil.formatNumberByDecimal(upgrade.getCost()), - "%status#" + getStatus(upgrade) }), + new Placeholder[] { + new Placeholder("%cost", NumberUtil.formatNumberByDecimal(upgrade.getCost())), + new Placeholder("%status", getStatus(upgrade)) }, null, null), 3); upgrade = upgradeManager.getUpgrades(me.goodandevil.skyblock.upgrade.Upgrade.Type.Fly).get(0); @@ -308,9 +309,9 @@ public class Upgrade { ChatColor.translateAlternateColorCodes('&', configLoad.getString("Menu.Admin.Upgrade.Upgrades.Item.Fly.Displayname")), configLoad.getStringList("Menu.Admin.Upgrade.Upgrades.Item.Fly.Lore"), - nInv.createItemLoreVariable( - new String[] { "%cost#" + NumberUtil.formatNumberByDecimal(upgrade.getCost()), - "%status#" + getStatus(upgrade) }), + new Placeholder[] { + new Placeholder("%cost", NumberUtil.formatNumberByDecimal(upgrade.getCost())), + new Placeholder("%status", getStatus(upgrade)) }, null, null), 4); upgrade = upgradeManager.getUpgrades(me.goodandevil.skyblock.upgrade.Upgrade.Type.Drops).get(0); @@ -318,9 +319,9 @@ public class Upgrade { ChatColor.translateAlternateColorCodes('&', configLoad.getString("Menu.Admin.Upgrade.Upgrades.Item.Drops.Displayname")), configLoad.getStringList("Menu.Admin.Upgrade.Upgrades.Item.Drops.Lore"), - nInv.createItemLoreVariable( - new String[] { "%cost#" + NumberUtil.formatNumberByDecimal(upgrade.getCost()), - "%status#" + getStatus(upgrade) }), + new Placeholder[] { + new Placeholder("%cost", NumberUtil.formatNumberByDecimal(upgrade.getCost())), + new Placeholder("%status", getStatus(upgrade)) }, null, null), 5); List upgrades = upgradeManager @@ -335,16 +336,16 @@ public class Upgrade { ChatColor.translateAlternateColorCodes('&', configLoad.getString("Menu.Admin.Upgrade.Upgrades.Item.Size.Displayname")), configLoad.getStringList("Menu.Admin.Upgrade.Upgrades.Item.Size.Lore"), - nInv.createItemLoreVariable(new String[] { "%tiers#" + upgradeTiers }), null, null), 6); + new Placeholder[] { new Placeholder("%tiers", "" + upgradeTiers) }, null, null), 6); upgrade = upgradeManager.getUpgrades(me.goodandevil.skyblock.upgrade.Upgrade.Type.Spawner).get(0); nInv.addItem(nInv.createItem(Materials.SPAWNER.parseItem(), ChatColor.translateAlternateColorCodes('&', configLoad.getString("Menu.Admin.Upgrade.Upgrades.Item.Spawner.Displayname")), configLoad.getStringList("Menu.Admin.Upgrade.Upgrades.Item.Spawner.Lore"), - nInv.createItemLoreVariable( - new String[] { "%cost#" + NumberUtil.formatNumberByDecimal(upgrade.getCost()), - "%status#" + getStatus(upgrade) }), + new Placeholder[] { + new Placeholder("%cost", NumberUtil.formatNumberByDecimal(upgrade.getCost())), + new Placeholder("%status", getStatus(upgrade)) }, null, null), 7); nInv.addItem(nInv.createItem(Materials.OAK_FENCE_GATE.parseItem(), @@ -827,8 +828,9 @@ public class Upgrade { configLoad.getString("Menu.Admin.Upgrade.Size.Item.Tier.Displayname") .replace("%tier", "" + tier)), configLoad.getStringList("Menu.Admin.Upgrade.Size.Item.Tier.Lore"), - nInv.createItemLoreVariable(new String[] { "%size#" + upgrade.getValue(), - "%cost#" + NumberUtil.formatNumberByDecimal(upgrade.getCost()) }), + new Placeholder[] { new Placeholder("%size", "" + upgrade.getValue()), + new Placeholder("%cost", + NumberUtil.formatNumberByDecimal(upgrade.getCost())) }, null, null), i + 3); } } diff --git a/src/main/java/me/goodandevil/skyblock/placeholder/Placeholder.java b/src/main/java/me/goodandevil/skyblock/placeholder/Placeholder.java new file mode 100644 index 00000000..f21a05cc --- /dev/null +++ b/src/main/java/me/goodandevil/skyblock/placeholder/Placeholder.java @@ -0,0 +1,20 @@ +package me.goodandevil.skyblock.placeholder; + +public class Placeholder { + + private String placeholder; + private String result; + + public Placeholder(String placeholder, String result) { + this.placeholder = placeholder; + this.result = result; + } + + public String getPlaceholder() { + return placeholder; + } + + public String getResult() { + return result; + } +} diff --git a/src/main/java/me/goodandevil/skyblock/playerdata/PlayerDataManager.java b/src/main/java/me/goodandevil/skyblock/playerdata/PlayerDataManager.java index a4876965..5eef8122 100644 --- a/src/main/java/me/goodandevil/skyblock/playerdata/PlayerDataManager.java +++ b/src/main/java/me/goodandevil/skyblock/playerdata/PlayerDataManager.java @@ -147,122 +147,116 @@ public class PlayerDataManager { if (hasPlayerData(player)) { if (worldManager.isIslandWorld(player.getWorld())) { IslandWorld world = worldManager.getIslandWorld(player.getWorld()); + Island island = islandManager.getIslandAtLocation(player.getLocation()); - for (UUID islandList : islandManager.getIslands().keySet()) { - Island island = islandManager.getIslands().get(islandList); + if (island != null) { + Player targetPlayer = Bukkit.getServer().getPlayer(island.getOwnerUUID()); + String targetPlayerName; - if (islandManager.isPlayerAtIsland(island, player, world)) { - Player targetPlayer = Bukkit.getServer().getPlayer(islandList); - String targetPlayerName; - - if (targetPlayer == null) { - targetPlayerName = new OfflinePlayer(islandList).getName(); - } else { - targetPlayerName = targetPlayer.getName(); - } - - if (banManager.hasIsland(islandList) - && fileManager.getConfig(new File(skyblock.getDataFolder(), "config.yml")) - .getFileConfiguration().getBoolean("Island.Visitor.Banning") - && banManager.getIsland(islandList).isBanned(player.getUniqueId())) { - messageManager.sendMessage(player, - configLoad.getString("Island.Visit.Teleport.Island.Message").replace("%player", - targetPlayerName)); - } else { - if (island.hasRole(IslandRole.Member, player.getUniqueId()) - || island.hasRole(IslandRole.Operator, player.getUniqueId()) - || island.hasRole(IslandRole.Owner, player.getUniqueId())) { - PlayerData playerData = getPlayerData(player); - playerData.setIsland(island.getOwnerUUID()); - - if (world == IslandWorld.Normal) { - if (!island.isWeatherSynchronized()) { - player.setPlayerTime(island.getTime(), - fileManager.getConfig(new File(skyblock.getDataFolder(), "config.yml")) - .getFileConfiguration() - .getBoolean("Island.Weather.Time.Cycle")); - player.setPlayerWeather(island.getWeather()); - } - } - - islandManager.giveUpgrades(player, island); - islandManager.giveFly(player, island); - - return; - } else if (island.isOpen() || island.isCoopPlayer(player.getUniqueId())) { - if (!island.isOpen() && island.isCoopPlayer(player.getUniqueId())) { - if (islandManager.removeCoopPlayers(island, null)) { - return; - } - } - - PlayerData playerData = getPlayerData(player); - playerData.setIsland(island.getOwnerUUID()); - - if (world == IslandWorld.Normal) { - if (!island.isWeatherSynchronized()) { - player.setPlayerTime(island.getTime(), - fileManager.getConfig(new File(skyblock.getDataFolder(), "config.yml")) - .getFileConfiguration() - .getBoolean("Island.Weather.Time.Cycle")); - player.setPlayerWeather(island.getWeather()); - } - } - - islandManager.giveUpgrades(player, island); - islandManager.giveFly(player, island); - - ScoreboardManager scoreboardManager = skyblock.getScoreboardManager(); - - if (scoreboardManager != null) { - for (Player all : Bukkit.getOnlinePlayers()) { - PlayerData targetPlayerData = getPlayerData(all); - - if (targetPlayerData.getOwner() != null - && targetPlayerData.getOwner().equals(island.getOwnerUUID())) { - Scoreboard scoreboard = scoreboardManager.getScoreboard(all); - scoreboard.cancel(); - - if ((island.getRole(IslandRole.Member).size() - + island.getRole(IslandRole.Operator).size() + 1) == 1) { - scoreboard.setDisplayName(ChatColor.translateAlternateColorCodes('&', - configLoad.getString("Scoreboard.Island.Solo.Displayname"))); - scoreboard.setDisplayList(configLoad - .getStringList("Scoreboard.Island.Solo.Occupied.Displaylines")); - } else { - scoreboard.setDisplayName(ChatColor.translateAlternateColorCodes('&', - configLoad.getString("Scoreboard.Island.Team.Displayname"))); - scoreboard.setDisplayList(configLoad - .getStringList("Scoreboard.Island.Team.Occupied.Displaylines")); - - Map displayVariables = new HashMap<>(); - displayVariables.put("%owner", - configLoad.getString("Scoreboard.Island.Team.Word.Owner")); - displayVariables.put("%operator", - configLoad.getString("Scoreboard.Island.Team.Word.Operator")); - displayVariables.put("%member", - configLoad.getString("Scoreboard.Island.Team.Word.Member")); - - scoreboard.setDisplayVariables(displayVariables); - } - - scoreboard.run(); - } - } - } - - return; - } else { - messageManager.sendMessage(player, - configLoad.getString("Island.Visit.Closed.Island.Message").replace("%player", - targetPlayerName)); - } - } - - LocationUtil.teleportPlayerToSpawn(player); - - return; + if (targetPlayer == null) { + targetPlayerName = new OfflinePlayer(island.getOwnerUUID()).getName(); + } else { + targetPlayerName = targetPlayer.getName(); } + + if (banManager.hasIsland(island.getOwnerUUID()) + && fileManager.getConfig(new File(skyblock.getDataFolder(), "config.yml")) + .getFileConfiguration().getBoolean("Island.Visitor.Banning") + && banManager.getIsland(island.getOwnerUUID()).isBanned(player.getUniqueId())) { + messageManager.sendMessage(player, configLoad.getString("Island.Visit.Teleport.Island.Message") + .replace("%player", targetPlayerName)); + } else { + if (island.hasRole(IslandRole.Member, player.getUniqueId()) + || island.hasRole(IslandRole.Operator, player.getUniqueId()) + || island.hasRole(IslandRole.Owner, player.getUniqueId())) { + PlayerData playerData = getPlayerData(player); + playerData.setIsland(island.getOwnerUUID()); + + if (world == IslandWorld.Normal) { + if (!island.isWeatherSynchronized()) { + player.setPlayerTime(island.getTime(), + fileManager.getConfig(new File(skyblock.getDataFolder(), "config.yml")) + .getFileConfiguration().getBoolean("Island.Weather.Time.Cycle")); + player.setPlayerWeather(island.getWeather()); + } + } + + islandManager.giveUpgrades(player, island); + islandManager.giveFly(player, island); + + return; + } else if (island.isOpen() || island.isCoopPlayer(player.getUniqueId())) { + if (!island.isOpen() && island.isCoopPlayer(player.getUniqueId())) { + if (islandManager.removeCoopPlayers(island, null)) { + return; + } + } + + PlayerData playerData = getPlayerData(player); + playerData.setIsland(island.getOwnerUUID()); + + if (world == IslandWorld.Normal) { + if (!island.isWeatherSynchronized()) { + player.setPlayerTime(island.getTime(), + fileManager.getConfig(new File(skyblock.getDataFolder(), "config.yml")) + .getFileConfiguration().getBoolean("Island.Weather.Time.Cycle")); + player.setPlayerWeather(island.getWeather()); + } + } + + islandManager.giveUpgrades(player, island); + islandManager.giveFly(player, island); + + ScoreboardManager scoreboardManager = skyblock.getScoreboardManager(); + + if (scoreboardManager != null) { + for (Player all : Bukkit.getOnlinePlayers()) { + PlayerData targetPlayerData = getPlayerData(all); + + if (targetPlayerData.getOwner() != null + && targetPlayerData.getOwner().equals(island.getOwnerUUID())) { + Scoreboard scoreboard = scoreboardManager.getScoreboard(all); + scoreboard.cancel(); + + if ((island.getRole(IslandRole.Member).size() + + island.getRole(IslandRole.Operator).size() + 1) == 1) { + scoreboard.setDisplayName(ChatColor.translateAlternateColorCodes('&', + configLoad.getString("Scoreboard.Island.Solo.Displayname"))); + scoreboard.setDisplayList(configLoad + .getStringList("Scoreboard.Island.Solo.Occupied.Displaylines")); + } else { + scoreboard.setDisplayName(ChatColor.translateAlternateColorCodes('&', + configLoad.getString("Scoreboard.Island.Team.Displayname"))); + scoreboard.setDisplayList(configLoad + .getStringList("Scoreboard.Island.Team.Occupied.Displaylines")); + + Map displayVariables = new HashMap<>(); + displayVariables.put("%owner", + configLoad.getString("Scoreboard.Island.Team.Word.Owner")); + displayVariables.put("%operator", + configLoad.getString("Scoreboard.Island.Team.Word.Operator")); + displayVariables.put("%member", + configLoad.getString("Scoreboard.Island.Team.Word.Member")); + + scoreboard.setDisplayVariables(displayVariables); + } + + scoreboard.run(); + } + } + } + + return; + } else { + messageManager.sendMessage(player, + configLoad.getString("Island.Visit.Closed.Island.Message").replace("%player", + targetPlayerName)); + } + } + + LocationUtil.teleportPlayerToSpawn(player); + + return; } HashMap visitIslands = skyblock.getVisitManager().getIslands(); @@ -290,7 +284,7 @@ public class PlayerDataManager { targetPlayerName)); } else { islandManager.loadIsland(visitIslandList); - Island island = islandManager.getIsland(visitIslandList); + island = islandManager.getIsland(visitIslandList); if (island != null) { if (island.isOpen() || island.isCoopPlayer(player.getUniqueId())) { diff --git a/src/main/java/me/goodandevil/skyblock/utils/item/nInventoryUtil.java b/src/main/java/me/goodandevil/skyblock/utils/item/nInventoryUtil.java index 41c2c4d6..d655283b 100644 --- a/src/main/java/me/goodandevil/skyblock/utils/item/nInventoryUtil.java +++ b/src/main/java/me/goodandevil/skyblock/utils/item/nInventoryUtil.java @@ -24,6 +24,7 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import me.goodandevil.skyblock.SkyBlock; +import me.goodandevil.skyblock.placeholder.Placeholder; public class nInventoryUtil { @@ -115,28 +116,9 @@ public class nInventoryUtil { return items; } - public Item createItem(ItemStack is, String itemDisplayname, List itemLore, - Map itemLoreVariables, Enchantment[] itemEnchantments, ItemFlag[] itemFlags) { - return new Item(is, itemDisplayname, itemLore, itemLoreVariables, itemEnchantments, itemFlags); - } - - public Map createItemLoreVariable(String[] itemLoreVariables) { - Map itemLoreVariablesFormatted = new HashMap<>(); - - for (String itemLoreVariableList : itemLoreVariables) { - String variableName = itemLoreVariableList.split("#")[0]; - String variableObject; - - if (itemLoreVariableList.split("#").length == 1) { - variableObject = "null"; - } else { - variableObject = itemLoreVariableList.split("#")[1]; - } - - itemLoreVariablesFormatted.put(variableName, variableObject); - } - - return itemLoreVariablesFormatted; + public Item createItem(ItemStack is, String itemDisplayname, List itemLore, Placeholder[] placeholders, + Enchantment[] itemEnchantments, ItemFlag[] itemFlags) { + return new Item(is, itemDisplayname, itemLore, placeholders, itemEnchantments, itemFlags); } public void open() { @@ -199,17 +181,17 @@ public class nInventoryUtil { private ItemStack is; private String itemDisplayname; - private Map itemLoreVariables; private List itemLore; + private Placeholder[] placeholders; private Enchantment[] itemEnchantments; private ItemFlag[] itemFlags; - public Item(ItemStack is, String itemDisplayname, List itemLore, Map itemLoreVariables, + public Item(ItemStack is, String itemDisplayname, List itemLore, Placeholder[] placeholders, Enchantment[] itemEnchantments, ItemFlag[] itemFlags) { this.is = is; this.itemDisplayname = ChatColor.translateAlternateColorCodes('&', itemDisplayname); this.itemLore = itemLore; - this.itemLoreVariables = itemLoreVariables; + this.placeholders = placeholders; this.itemEnchantments = itemEnchantments; this.itemFlags = itemFlags; } @@ -219,11 +201,11 @@ public class nInventoryUtil { ArrayList formattedItemLore = new ArrayList<>(); for (String itemLoreList : itemLore) { - if (itemLoreVariables != null) { - for (String itemLoreVariableList : itemLoreVariables.keySet()) { - if (itemLoreList.contains(itemLoreVariableList)) { + if (placeholders != null) { + for (Placeholder placeholderList : placeholders) { + if (itemLoreList.contains(placeholderList.getPlaceholder())) { itemLoreList = ChatColor.translateAlternateColorCodes('&', itemLoreList - .replace(itemLoreVariableList, itemLoreVariables.get(itemLoreVariableList))); + .replace(placeholderList.getPlaceholder(), placeholderList.getResult())); } } } diff --git a/src/main/java/me/goodandevil/skyblock/utils/world/LocationUtil.java b/src/main/java/me/goodandevil/skyblock/utils/world/LocationUtil.java index 7e4f8419..9cd164e1 100644 --- a/src/main/java/me/goodandevil/skyblock/utils/world/LocationUtil.java +++ b/src/main/java/me/goodandevil/skyblock/utils/world/LocationUtil.java @@ -189,11 +189,11 @@ public final class LocationUtil { if (config.getFileConfiguration().getString("Location.Spawn") == null) { Bukkit.getServer().getLogger().log(Level.WARNING, "SkyBlock | Error: A spawn point hasn't been set."); } else { - Location spawnLocation = fileManager.getLocation(config, "Location.Spawn", true); + Location spawnLocation = getSpawnLocation(); - if (spawnLocation.getWorld() == null) { + if (spawnLocation == null) { Bukkit.getServer().getLogger().log(Level.WARNING, - "SkyBlock | Error: The world for the spawn point is not loaded or no longer exists."); + "SkyBlock | Error: The location for the spawn point could not be found."); return; } @@ -201,13 +201,31 @@ public final class LocationUtil { Bukkit.getServer().getScheduler().runTask(skyblock, new Runnable() { @Override public void run() { - player.teleport(fileManager.getLocation(config, "Location.Spawn", true)); + player.teleport(spawnLocation); player.setFallDistance(0.0F); } }); } } + public static Location getSpawnLocation() { + SkyBlock skyblock = SkyBlock.getInstance(); + + FileManager fileManager = skyblock.getFileManager(); + + Config config = fileManager.getConfig(new File(skyblock.getDataFolder(), "locations.yml")); + + if (config.getFileConfiguration().getString("Location.Spawn") != null) { + Location location = fileManager.getLocation(config, "Location.Spawn", true); + + if (location != null && location.getWorld() != null) { + return location; + } + } + + return null; + } + public static Location getRandomLocation(World world, int xRange, int zRange, boolean loadChunk, boolean ignoreLiquid) { Random rnd = new Random(); diff --git a/src/main/java/me/goodandevil/skyblock/utils/world/block/BlockUtil.java b/src/main/java/me/goodandevil/skyblock/utils/world/block/BlockUtil.java index 3215a783..4d715aae 100644 --- a/src/main/java/me/goodandevil/skyblock/utils/world/block/BlockUtil.java +++ b/src/main/java/me/goodandevil/skyblock/utils/world/block/BlockUtil.java @@ -142,12 +142,20 @@ public final class BlockUtil { blockData.setStateType(BlockStateType.COMMANDBLOCK.toString()); } else if (blockState instanceof CreatureSpawner) { CreatureSpawner creatureSpawner = (CreatureSpawner) blockState; - blockData.setEntity(creatureSpawner.getSpawnedType().toString()); + + if (creatureSpawner.getSpawnedType() != null) { + blockData.setEntity(creatureSpawner.getSpawnedType().toString()); + } + blockData.setDelay(creatureSpawner.getDelay()); blockData.setStateType(BlockStateType.CREATURESPAWNER.toString()); } else if (blockState instanceof Jukebox) { Jukebox jukebox = (Jukebox) blockState; - blockData.setPlaying(jukebox.getPlaying().toString()); + + if (jukebox.getPlaying() != null) { + blockData.setPlaying(jukebox.getPlaying().toString()); + } + blockData.setStateType(BlockStateType.JUKEBOX.toString()); } else if (blockState instanceof Sign) { Sign sign = (Sign) blockState; @@ -347,8 +355,12 @@ public final class BlockUtil { } } else if (blockTypeState == BlockStateType.CREATURESPAWNER) { CreatureSpawner creatureSpawner = (CreatureSpawner) block.getState(); + + if (blockData.getEntity() != null) { + creatureSpawner.setSpawnedType(EntityType.valueOf(blockData.getEntity().toUpperCase())); + } + creatureSpawner.setDelay(blockData.getDelay()); - creatureSpawner.setSpawnedType(EntityType.valueOf(blockData.getEntity().toUpperCase())); } else if (blockTypeState == BlockStateType.FURNACE) { Furnace furnace = (Furnace) block.getState(); furnace.setBurnTime(blockData.getBurnTime()); @@ -362,7 +374,10 @@ public final class BlockUtil { } } else if (blockTypeState == BlockStateType.JUKEBOX) { Jukebox jukebox = (Jukebox) block.getState(); - jukebox.setPlaying(Material.valueOf(blockData.getPlaying().toUpperCase())); + + if (blockData.getPlaying() != null) { + jukebox.setPlaying(Material.valueOf(blockData.getPlaying().toUpperCase())); + } } else if (blockTypeState == BlockStateType.SIGN) { Sign sign = (Sign) block.getState(); diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index d9ddeb28..68f92bc6 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -206,21 +206,27 @@ Island: # [!] If Enabled Players will respawn at the Island they died at. If Disabled # Players will respawn at the Spawn location. Island: true + Damage: + # When the setting 'Damage' has been disabled, if this option is enabled, players will take + # damage at an island. This discludes entity and void damage. + Enable: false + PvP: + # When the setting 'PvP' has been disabled, if this option is enabled, players will be + # able to damage other players at an island. + Enable: false + KeepItemsOnDeath: + # When the setting 'KeepItemsOnDeath' has been disabled, if this option is enabled, players will keep + # items in their inventory if they die at an island. + Enable: true Settings: - # When disabled, players will not lose their items when they die at an island and - # the setting will be removed from the Island Settings menu. + # When any of these options are disabled, the setting will be removed from the 'Island Settings' + # menu. KeepItemsOnDeath: Enable: true - # When disabled, players will not take any damage from entities when at an island - # and the setting will be removed from the Island Settings menu. PvP: Enable: true - # When disabled, players will not take any damage when at an island and the setting - # will be removed from the Island Settings menu. This setting discludes entity and - # void damage. Damage: Enable: true - # When disabled, the hunger setting will be removed from the Island Settings menu. Hunger: Enable: false Portal: @@ -235,18 +241,4 @@ Island: Scoreboard: Enable: true Generator: - Enable: true -# Stuff you shouldn't change -World: - Normal: - nextAvailableLocation: - x: 0.0 - z: 0.0 - Nether: - nextAvailableLocation: - x: 0.0 - z: 0.0 - End: - nextAvailableLocation: - x: 0.0 - z: 0.0 \ No newline at end of file + Enable: true \ No newline at end of file diff --git a/src/main/resources/language.yml b/src/main/resources/language.yml index bc24ffd1..825aaeae 100644 --- a/src/main/resources/language.yml +++ b/src/main/resources/language.yml @@ -549,6 +549,8 @@ Command: Message: "&bSkyBlock &8| &aInfo&8: &eYou are no longer an Island owner." Open: Message: "&bSkyBlock &8| &cError&8: &eYou must close your island before deleting it." + Spawn: + Message: "&bSkyBlock &8| &cError&8: &eYou cannot delete your island because the main spawn point is set there." Broadcast: Message: "&bSkyBlock &8| &aInfo&8: &eThe Island owner has disbanded the Island." Confirmed: diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index df30c604..a9564279 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,10 +1,10 @@ name: SkyBlock main: me.goodandevil.skyblock.SkyBlock -version: 53 +version: 54 api-version: 1.13 description: A unique SkyBlock plugin author: GoodAndEvil -softdepend: [PlaceholderAPI, MVdWPlaceholderAPI, Vault] +softdepend: [PlaceholderAPI, MVdWPlaceholderAPI, Vault, Coins, LeaderHeads] loadbefore: [Multiverse-Core] commands: island: diff --git a/src/main/resources/worlds.yml b/src/main/resources/worlds.yml index e69de29b..648de8d8 100644 --- a/src/main/resources/worlds.yml +++ b/src/main/resources/worlds.yml @@ -0,0 +1,13 @@ +World: + Normal: + nextAvailableLocation: + x: 0.0 + z: 0.0 + Nether: + nextAvailableLocation: + x: 0.0 + z: 0.0 + End: + nextAvailableLocation: + x: 0.0 + z: 0.0 \ No newline at end of file