diff --git a/dependency-reduced-pom.xml b/dependency-reduced-pom.xml deleted file mode 100644 index b2f1d8de..00000000 --- a/dependency-reduced-pom.xml +++ /dev/null @@ -1,214 +0,0 @@ - - - 4.0.0 - com.songoda - skyblock - 2.1.1 - - clean install - - - true - src/main/resources - - - FabledSkyblock-${project.version} - - - com.google.code.maven-replacer-plugin - replacer - 1.5.3 - - - prepare-package - - replace - - - - - ${project.build.directory}/classes/plugin.yml - - - maven-version-number - ${project.version} - - - - - - maven-compiler-plugin - 3.8.0 - - 1.8 - 1.8 - - - - maven-shade-plugin - 3.2.1 - - - package - - shade - - - - - - - - - mvdw-software - MVdW Public Repositories - http://repo.mvdw-software.be/content/groups/public/ - - - spigot-repo - https://hub.spigotmc.org/nexus/content/repositories/snapshots/ - - - minecraft-repo - https://libraries.minecraft.net/ - - - placeholderapi - https://repo.extendedclip.com/content/repositories/placeholderapi/ - - - jitpack.io - https://jitpack.io - - - reserve-repo - https://dl.bintray.com/theneweconomy/java/ - - - sonatype - https://oss.sonatype.org/content/repositories/snapshots/ - - - private - https://repo.songoda.com/artifactory/private/ - - - - - org.spigotmc - spigot-api - 1.15.1-R0.1-SNAPSHOT - provided - - - commons-lang - commons-lang - - - guava - com.google.guava - - - gson - com.google.code.gson - - - bungeecord-chat - net.md-5 - - - snakeyaml - org.yaml - - - - - me.clip - placeholderapi - 2.9.2 - provided - - - com.github.MilkBowl - VaultAPI - 1.7 - provided - - - bukkit - org.bukkit - - - - - net.tnemc - Reserve - 0.1.3.0 - provided - - - me.robin - leaderheads - 1.0 - provided - - - com.songoda - epicspawners - 6-pre4 - provided - - - com.songoda - EpicAnchors - 1.4.2 - provided - - - com.songoda - ultimatestacker - 1.3.1 - provided - - - com.github.OmerBenGera - WildStackerAPI - b15 - provided - - - com.sk89q - worldedit - 7.0.0 - provided - - - com.mojang - authlib - 1.5.3 - provided - - - log4j-core - org.apache.logging.log4j - - - commons-codec - commons-codec - - - log4j-api - org.apache.logging.log4j - - - guava - com.google.guava - - - gson - com.google.code.gson - - - - - diff --git a/pom.xml b/pom.xml index 9ab91a77..951df6eb 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,8 @@ 4.0.0 com.songoda skyblock - 2.2.9 + 2.2.19 + jar clean install FabledSkyblock-${project.version} @@ -119,10 +120,6 @@ sonatype https://oss.sonatype.org/content/repositories/snapshots/ - - private - https://repo.songoda.com/artifactory/private/ - public http://repo.songoda.com/artifactory/public/ @@ -172,7 +169,7 @@ me.robin - leaderheads + LeaderHeadsAPI 1.0 provided diff --git a/skyblock.iml b/skyblock.iml deleted file mode 100644 index cf679a34..00000000 --- a/skyblock.iml +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/main/java/com/songoda/skyblock/SkyBlock.java b/src/main/java/com/songoda/skyblock/SkyBlock.java index 2ee4b4e1..fc81f45d 100644 --- a/src/main/java/com/songoda/skyblock/SkyBlock.java +++ b/src/main/java/com/songoda/skyblock/SkyBlock.java @@ -192,12 +192,6 @@ public class SkyBlock extends SongodaPlugin { @Override public void onPluginDisable() { - ConsoleCommandSender console = Bukkit.getConsoleSender(); - console.sendMessage(formatText("&a=============================")); - console.sendMessage(formatText("&7FabledSkyBlock " + this.getDescription().getVersion() + " by &5Songoda <3&7!")); - console.sendMessage(formatText("&7Action: &cDisabling&7...")); - console.sendMessage(formatText("&a=============================")); - if (this.userCacheManager != null) { this.userCacheManager.onDisable(); } diff --git a/src/main/java/com/songoda/skyblock/api/event/player/PlayerVoteEvent.java b/src/main/java/com/songoda/skyblock/api/event/player/PlayerVoteEvent.java new file mode 100644 index 00000000..34a983de --- /dev/null +++ b/src/main/java/com/songoda/skyblock/api/event/player/PlayerVoteEvent.java @@ -0,0 +1,36 @@ +package com.songoda.skyblock.api.event.player; + +import com.songoda.skyblock.api.island.Island; +import org.bukkit.entity.Player; +import org.bukkit.event.Cancellable; +import org.bukkit.event.HandlerList; + +public class PlayerVoteEvent extends PlayerEvent implements Cancellable { + + private boolean cancelled = false; + + private static HandlerList HANDLERS = new HandlerList(); + + public PlayerVoteEvent(Player player, Island island) { + super(player, island); + } + + @Override + public HandlerList getHandlers() { + return HANDLERS; + } + + public static HandlerList getHandlerList() { + return HANDLERS; + } + + @Override + public boolean isCancelled() { + return cancelled; + } + + @Override + public void setCancelled(boolean cancel) { + this.cancelled = cancel; + } +} diff --git a/src/main/java/com/songoda/skyblock/api/event/player/PlayerVoteRemoveEvent.java b/src/main/java/com/songoda/skyblock/api/event/player/PlayerVoteRemoveEvent.java new file mode 100644 index 00000000..ba06c409 --- /dev/null +++ b/src/main/java/com/songoda/skyblock/api/event/player/PlayerVoteRemoveEvent.java @@ -0,0 +1,22 @@ +package com.songoda.skyblock.api.event.player; + +import com.songoda.skyblock.api.island.Island; +import org.bukkit.entity.Player; +import org.bukkit.event.HandlerList; + +public class PlayerVoteRemoveEvent extends PlayerEvent { + private static HandlerList HANDLERS = new HandlerList(); + + public PlayerVoteRemoveEvent(Player player, Island island) { + super(player, island); + } + + @Override + public HandlerList getHandlers() { + return HANDLERS; + } + + public static HandlerList getHandlerList() { + return HANDLERS; + } +} \ No newline at end of file diff --git a/src/main/java/com/songoda/skyblock/command/commands/island/VoteCommand.java b/src/main/java/com/songoda/skyblock/command/commands/island/VoteCommand.java index 2e2f7b1b..f2ac88a0 100644 --- a/src/main/java/com/songoda/skyblock/command/commands/island/VoteCommand.java +++ b/src/main/java/com/songoda/skyblock/command/commands/island/VoteCommand.java @@ -1,6 +1,8 @@ package com.songoda.skyblock.command.commands.island; import com.songoda.core.compatibility.CompatibleSound; +import com.songoda.skyblock.api.event.player.PlayerVoteEvent; +import com.songoda.skyblock.api.event.player.PlayerVoteRemoveEvent; import com.songoda.skyblock.command.SubCommand; import com.songoda.skyblock.config.FileManager; import com.songoda.skyblock.config.FileManager.Config; @@ -85,6 +87,7 @@ public class VoteCommand extends SubCommand { if (playerData.getIsland() != null && playerData.getIsland().equals(island.getOwnerUUID())) { if (visit.getVoters().contains(player.getUniqueId())) { + Bukkit.getPluginManager().callEvent(new PlayerVoteRemoveEvent(player, island.getAPIWrapper())); visit.removeVoter(player.getUniqueId()); messageManager.sendMessage(player, @@ -92,6 +95,11 @@ public class VoteCommand extends SubCommand { .replace("%player", targetPlayerName)); soundManager.playSound(player, CompatibleSound.ENTITY_GENERIC_EXPLODE.getSound(), 1.0F, 1.0F); } else { + PlayerVoteEvent playerVoteEvent = new PlayerVoteEvent(player, island.getAPIWrapper()); + Bukkit.getServer().getPluginManager().callEvent(playerVoteEvent); + if (playerVoteEvent.isCancelled()) + return; + visit.addVoter(player.getUniqueId()); messageManager.sendMessage(player, diff --git a/src/main/java/com/songoda/skyblock/island/Island.java b/src/main/java/com/songoda/skyblock/island/Island.java index e266a0a1..4b5f2c8c 100644 --- a/src/main/java/com/songoda/skyblock/island/Island.java +++ b/src/main/java/com/songoda/skyblock/island/Island.java @@ -1,6 +1,7 @@ package com.songoda.skyblock.island; import com.songoda.core.compatibility.CompatibleSound; +import com.songoda.core.utils.PlayerUtils; import com.songoda.skyblock.SkyBlock; import com.songoda.skyblock.api.event.island.*; import com.songoda.skyblock.api.utils.APIUtil; @@ -59,6 +60,24 @@ public class Island { this.size = 50; } + if (player.isOnline()) { + int customSize = PlayerUtils.getNumberFromPermission(player.getPlayer(), "fabledskyblock.size", 0); + if (customSize > 0 || player.getPlayer().hasPermission("fabledskyblock.*")) { + Config config = fileManager.getConfig(new File(skyblock.getDataFolder(), "config.yml")); + FileConfiguration configLoad = config.getFileConfiguration(); + + int minimumSize = configLoad.getInt("Island.Size.Minimum"); + int maximumSize = configLoad.getInt("Island.Size.Maximum"); + + if (minimumSize < 0 || minimumSize > 1000) + minimumSize = 50; + if (maximumSize < 0 || maximumSize > 1000) + maximumSize = 100; + + size = Math.max(minimumSize, Math.min(customSize, maximumSize)); + } + } + level = new IslandLevel(getOwnerUUID(), skyblock); File configFile = new File(skyblock.getDataFolder().toString() + "/island-data"); diff --git a/src/main/java/com/songoda/skyblock/island/IslandManager.java b/src/main/java/com/songoda/skyblock/island/IslandManager.java index cad8f0a3..78a76a6b 100644 --- a/src/main/java/com/songoda/skyblock/island/IslandManager.java +++ b/src/main/java/com/songoda/skyblock/island/IslandManager.java @@ -3,11 +3,13 @@ package com.songoda.skyblock.island; import com.google.common.base.Preconditions; import com.songoda.core.compatibility.CompatibleMaterial; import com.songoda.core.compatibility.CompatibleSound; +import com.songoda.core.utils.PlayerUtils; import com.songoda.skyblock.SkyBlock; import com.songoda.skyblock.api.event.island.*; import com.songoda.skyblock.ban.BanManager; import com.songoda.skyblock.config.FileManager; import com.songoda.skyblock.config.FileManager.Config; +import com.songoda.skyblock.confirmation.Confirmation; import com.songoda.skyblock.cooldown.CooldownManager; import com.songoda.skyblock.cooldown.CooldownType; import com.songoda.skyblock.invite.Invite; @@ -35,6 +37,10 @@ import com.songoda.skyblock.utils.world.WorldBorder; import com.songoda.skyblock.utils.world.block.BlockDegreesType; import com.songoda.skyblock.visit.VisitManager; import com.songoda.skyblock.world.WorldManager; +import net.md_5.bungee.api.chat.ClickEvent; +import net.md_5.bungee.api.chat.ComponentBuilder; +import net.md_5.bungee.api.chat.HoverEvent; +import net.md_5.bungee.api.chat.TextComponent; import org.bukkit.*; import org.bukkit.block.Biome; import org.bukkit.block.Block; @@ -43,11 +49,6 @@ import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.entity.Player; import org.bukkit.plugin.IllegalPluginAccessException; -import com.songoda.skyblock.confirmation.Confirmation; -import net.md_5.bungee.api.chat.ClickEvent; -import net.md_5.bungee.api.chat.ComponentBuilder; -import net.md_5.bungee.api.chat.HoverEvent; -import net.md_5.bungee.api.chat.TextComponent; import java.io.File; import java.io.IOException; @@ -63,7 +64,7 @@ public class IslandManager { private Map islandStorage = new HashMap<>(); private int offset = 1200; - private HashMap oldSystemIslands; + private HashMap oldSystemIslands; public IslandManager(SkyBlock skyblock) { this.skyblock = skyblock; @@ -80,9 +81,10 @@ public class IslandManager { loadIsland(all); } for (Island island : getIslands().values()) { - if (island.isAlwaysLoaded()) loadIslandAtLocation(island.getLocation(IslandWorld.Normal, IslandEnvironment.Island)); + if (island.isAlwaysLoaded()) + loadIslandAtLocation(island.getLocation(IslandWorld.Normal, IslandEnvironment.Island)); } - + loadIslandPositions(); } @@ -126,7 +128,6 @@ public class IslandManager { } - public org.bukkit.Location prepareNextAvailableLocation(IslandWorld world) { for (IslandPosition islandPositionList : islandPositions) { if (islandPositionList.getWorld() == world) { @@ -140,15 +141,15 @@ public class IslandManager { int islandHeight = configLoad_config.getInt("Island.World." + world.name() + ".IslandSpawnHeight", 72); while (true) { double r = Math.floor((Math.sqrt(x + 1) - 1) / 2) + 1; - double p = (8 * r * (r -1)) / 2; + double p = (8 * r * (r - 1)) / 2; double en = r * 2; double a = (x - p) % (r * 8); int posX = 0; int posY = 0; int loc = (int) Math.floor(a / (r * 2)); switch (loc) { - case 0 : - posX = (int) (a-r); + case 0: + posX = (int) (a - r); posY = (int) (-r); break; case 1: @@ -174,13 +175,13 @@ public class IslandManager { // Check if there was an island at this position int oldFormatPos = oldSystemIslands.get(world); Location islandLocation = new org.bukkit.Location(skyblock.getWorldManager().getWorld(world), islandPositionList.getX(), islandHeight, islandPositionList.getZ()); - if (posX == 1200 && posY >= 0 && posY <= oldFormatPos) { - // We have to save to avoid having two islands at same location + if (posX == 1200 && posY >= 0 && posY <= oldFormatPos) { + // We have to save to avoid having two islands at same location setNextAvailableLocation(world, islandLocation); saveNextAvailableLocation(world); - x++; - continue; - } + x++; + continue; + } return islandLocation; } } @@ -226,36 +227,14 @@ public class IslandManager { if (!visitManager.hasIsland(island.getOwnerUUID())) { visitManager.createIsland(island.getOwnerUUID(), - new IslandLocation[] { island.getIslandLocation(IslandWorld.Normal, IslandEnvironment.Island), island.getIslandLocation(IslandWorld.Nether, IslandEnvironment.Island), - island.getIslandLocation(IslandWorld.End, IslandEnvironment.Island) }, + new IslandLocation[]{island.getIslandLocation(IslandWorld.Normal, IslandEnvironment.Island), island.getIslandLocation(IslandWorld.Nether, IslandEnvironment.Island), + island.getIslandLocation(IslandWorld.End, IslandEnvironment.Island)}, island.getSize(), island.getRole(IslandRole.Member).size() + island.getRole(IslandRole.Operator).size() + 1, island.getBankBalance(), visitManager.getIslandSafeLevel(island.getOwnerUUID()), island.getLevel(), island.getMessage(IslandMessage.Signature), island.isOpen()); } if (!banManager.hasIsland(island.getOwnerUUID())) banManager.createIsland(island.getOwnerUUID()); - Bukkit.getServer().getScheduler().runTask(skyblock, () -> { - if (PlayerUtil.getNumberFromPermission(player, "fabledskyblock.size", false, 0) > 0 || player.hasPermission("fabledskyblock.*")) { - Config config = fileManager.getConfig(new File(skyblock.getDataFolder(), "config.yml")); - FileConfiguration configLoad = config.getFileConfiguration(); - - int minimumSize = configLoad.getInt("Island.Size.Minimum"); - int maximumSize = configLoad.getInt("Island.Size.Maximum"); - - if (minimumSize < 0 || minimumSize > 1000) { - minimumSize = 50; - } - - if (maximumSize < 0 || maximumSize > 1000) { - maximumSize = 100; - } - - for (int i = maximumSize; i > minimumSize; i--) { - island.setSize(i); - } - } - }); - Config config = fileManager.getConfig(new File(skyblock.getDataFolder(), "config.yml")); FileConfiguration configLoad = config.getFileConfiguration(); @@ -301,7 +280,8 @@ public class IslandManager { }, 20L); // Recalculate island level after 5 seconds - if (configLoad.getBoolean("Island.Levelling.ScanAutomatically")) Bukkit.getServer().getScheduler().runTaskLater(skyblock, () -> skyblock.getLevellingManager().startScan(null, island), 100L); + if (configLoad.getBoolean("Island.Levelling.ScanAutomatically")) + Bukkit.getServer().getScheduler().runTaskLater(skyblock, () -> skyblock.getLevellingManager().startScan(null, island), 100L); return true; } @@ -350,7 +330,7 @@ public class IslandManager { }); Bukkit.getScheduler().runTaskLater(skyblock, () -> { - if(data.isPreview()) { + if (data.isPreview()) { Location spawn = fileManager.getLocation(fileManager.getConfig(new File(skyblock.getDataFolder(), "locations.yml")), "Location.Spawn", true); player.teleport(spawn); player.setGameMode(GameMode.SURVIVAL); @@ -360,8 +340,7 @@ public class IslandManager { skyblock.getMessageManager().sendMessage(player, configLang.getString("Island.Preview.Timeout.Message")); data.setPreview(false); } - }, configMain.getInt("Island.Preview.Time")*20); - + }, configMain.getInt("Island.Preview.Time") * 20); String defaultMessage = configLang.getString("Command.Island.Preview.Confirmation.Message") @@ -372,7 +351,7 @@ public class IslandManager { for (String message : defaultMessage.split("\n")) { ChatComponent confirmation = null, cancelation = null; - if(message.contains("%confirm")) { + if (message.contains("%confirm")) { message = message.replace("%confirm", ""); confirmation = new ChatComponent(configLang.getString("Command.Island.Preview.Confirmation.Word.Confirm").toUpperCase() + " ", true, net.md_5.bungee.api.ChatColor.GREEN, @@ -386,7 +365,7 @@ public class IslandManager { )); } - if(message.contains("%cancel")) { + if (message.contains("%cancel")) { message = message.replace("%cancel", ""); cancelation = new ChatComponent(configLang.getString("Command.Island.Preview.Confirmation.Word.Cancel").toUpperCase(), true, net.md_5.bungee.api.ChatColor.GREEN, @@ -401,10 +380,10 @@ public class IslandManager { } TextComponent confirmationMessage = new TextComponent(net.md_5.bungee.api.ChatColor.translateAlternateColorCodes('&', message)); - if(confirmation != null) { + if (confirmation != null) { confirmationMessage.addExtra(confirmation.getTextComponent()); } - if(cancelation != null) { + if (cancelation != null) { confirmationMessage.addExtra(cancelation.getTextComponent()); } @@ -696,8 +675,8 @@ public class IslandManager { if (!visitManager.hasIsland(island.getOwnerUUID())) { visitManager.createIsland(island.getOwnerUUID(), - new IslandLocation[] { island.getIslandLocation(IslandWorld.Normal, IslandEnvironment.Island), island.getIslandLocation(IslandWorld.Nether, IslandEnvironment.Island), - island.getIslandLocation(IslandWorld.End, IslandEnvironment.Island) }, + new IslandLocation[]{island.getIslandLocation(IslandWorld.Normal, IslandEnvironment.Island), island.getIslandLocation(IslandWorld.Nether, IslandEnvironment.Island), + island.getIslandLocation(IslandWorld.End, IslandEnvironment.Island)}, island.getSize(), island.getRole(IslandRole.Member).size() + island.getRole(IslandRole.Operator).size() + 1, island.getBankBalance(), visitManager.getIslandSafeLevel(island.getOwnerUUID()), island.getLevel(), island.getMessage(IslandMessage.Signature), island.isOpen()); } @@ -720,48 +699,48 @@ public class IslandManager { * This method will get the nextAvailableLocation for normal, nether and end islands in worlds.yml file * to avoid creating island where an existing island was */ - public void loadIslandPositions() { - oldSystemIslands = new HashMap<>(); + public void loadIslandPositions() { + oldSystemIslands = new HashMap<>(); - FileManager fileManager = skyblock.getFileManager(); - Config config = fileManager.getConfig(new File(skyblock.getDataFolder().toString() + "/worlds.yml")); - FileConfiguration fileConfig = config.getFileConfiguration(); - Config config2 = fileManager.getConfig(new File(skyblock.getDataFolder().toString() + "/worlds.oldformat.yml")); - FileConfiguration fileConfig2 = config2.getFileConfiguration(); + FileManager fileManager = skyblock.getFileManager(); + Config config = fileManager.getConfig(new File(skyblock.getDataFolder().toString() + "/worlds.yml")); + FileConfiguration fileConfig = config.getFileConfiguration(); + Config config2 = fileManager.getConfig(new File(skyblock.getDataFolder().toString() + "/worlds.oldformat.yml")); + FileConfiguration fileConfig2 = config2.getFileConfiguration(); - // TODO Find a way to automatically - int normalZ = 0; - int netherZ = 0; - int endZ = 0; - if (!config2.getFile().exists()) { - // Old data - Bukkit.getLogger().info("[FabledSkyblock] Old format detected, please wait ..."); - if (fileConfig.contains("World.Normal.nextAvailableLocation")) - normalZ = fileConfig.getInt("World.Normal.nextAvailableLocation.z"); - if (fileConfig.contains("World.Nether.nextAvailableLocation")) - netherZ = fileConfig.getInt("World.Nether.nextAvailableLocation.z"); - if (fileConfig.contains("World.End.nextAvailableLocation")) - endZ = fileConfig.getInt("World.End.nextAvailableLocation.z"); - // Save - fileConfig2.set("Normal", normalZ); - fileConfig2.set("Nether", netherZ); - fileConfig2.set("End", endZ); - try { - fileConfig2.save(config2.getFile()); - } catch (IOException ex) { - ex.printStackTrace(); - } - Bukkit.getLogger().info("[FabledSkyblock] Done ! Got normalZ = " + normalZ + ", netherZ = " + netherZ + ", endZ = " + endZ); - } else { - // Load datas - normalZ = fileConfig2.getInt("Normal"); - netherZ = fileConfig2.getInt("Nether"); - endZ = fileConfig2.getInt("End"); - } - oldSystemIslands.put(IslandWorld.Normal, normalZ); - oldSystemIslands.put(IslandWorld.Nether, netherZ); - oldSystemIslands.put(IslandWorld.End, endZ); - } + // TODO Find a way to automatically + int normalZ = 0; + int netherZ = 0; + int endZ = 0; + if (!config2.getFile().exists()) { + // Old data + Bukkit.getLogger().info("[FabledSkyblock] Old format detected, please wait ..."); + if (fileConfig.contains("World.Normal.nextAvailableLocation")) + normalZ = fileConfig.getInt("World.Normal.nextAvailableLocation.z"); + if (fileConfig.contains("World.Nether.nextAvailableLocation")) + netherZ = fileConfig.getInt("World.Nether.nextAvailableLocation.z"); + if (fileConfig.contains("World.End.nextAvailableLocation")) + endZ = fileConfig.getInt("World.End.nextAvailableLocation.z"); + // Save + fileConfig2.set("Normal", normalZ); + fileConfig2.set("Nether", netherZ); + fileConfig2.set("End", endZ); + try { + fileConfig2.save(config2.getFile()); + } catch (IOException ex) { + ex.printStackTrace(); + } + Bukkit.getLogger().info("[FabledSkyblock] Done ! Got normalZ = " + normalZ + ", netherZ = " + netherZ + ", endZ = " + endZ); + } else { + // Load datas + normalZ = fileConfig2.getInt("Normal"); + netherZ = fileConfig2.getInt("Nether"); + endZ = fileConfig2.getInt("End"); + } + oldSystemIslands.put(IslandWorld.Normal, normalZ); + oldSystemIslands.put(IslandWorld.Nether, netherZ); + oldSystemIslands.put(IslandWorld.End, endZ); + } public Island loadIslandAtLocation(Location location) { FileManager fileManager = skyblock.getFileManager(); @@ -944,15 +923,15 @@ public class IslandManager { try { String structureFileName = null; switch (world) { - case Normal: - structureFileName = structure.getOverworldFile(); - break; - case Nether: - structureFileName = structure.getNetherFile(); - break; - case End: - structureFileName = structure.getEndFile(); - break; + case Normal: + structureFileName = structure.getOverworldFile(); + break; + case Nether: + structureFileName = structure.getNetherFile(); + break; + case End: + structureFileName = structure.getEndFile(); + break; } boolean isStructureFile = structureFileName.endsWith(".structure"); @@ -1217,7 +1196,8 @@ public class IslandManager { if (island.getSetting(island.getRole(player), setting).getStatus()) return true; - if (island.isCoopPlayer(player.getUniqueId()) && island.getSetting(IslandRole.Coop, setting).getStatus()) return true; + if (island.isCoopPlayer(player.getUniqueId()) && island.getSetting(IslandRole.Coop, setting).getStatus()) + return true; return island.getSetting(IslandRole.Visitor, setting).getStatus(); } @@ -1355,7 +1335,8 @@ public class IslandManager { public void updateFlight(Player player) { // The player can fly in other worlds if they are in creative or have another // plugin's fly permission. - if (player.getGameMode() == GameMode.CREATIVE || player.getGameMode() == GameMode.SPECTATOR || player.hasPermission("essentials.fly") || player.hasPermission("cmi.command.fly")) return; + if (player.getGameMode() == GameMode.CREATIVE || player.getGameMode() == GameMode.SPECTATOR || player.hasPermission("essentials.fly") || player.hasPermission("cmi.command.fly")) + return; Island island = getIslandAtLocation(player.getLocation()); diff --git a/src/main/java/com/songoda/skyblock/listeners/Interact.java b/src/main/java/com/songoda/skyblock/listeners/Interact.java index fb85a7e9..ef6034eb 100644 --- a/src/main/java/com/songoda/skyblock/listeners/Interact.java +++ b/src/main/java/com/songoda/skyblock/listeners/Interact.java @@ -17,7 +17,6 @@ import com.songoda.skyblock.sound.SoundManager; import com.songoda.skyblock.stackable.Stackable; import com.songoda.skyblock.stackable.StackableManager; import com.songoda.skyblock.utils.NumberUtil; -import com.songoda.skyblock.utils.item.InventoryUtil; import com.songoda.skyblock.utils.structure.StructureUtil; import com.songoda.skyblock.utils.version.NMSUtil; import com.songoda.skyblock.world.WorldManager; @@ -42,7 +41,6 @@ import org.bukkit.event.player.PlayerInteractEntityEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.vehicle.VehicleDamageEvent; import org.bukkit.event.vehicle.VehicleDestroyEvent; -import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.InventoryHolder; import org.bukkit.inventory.ItemStack; import org.bukkit.permissions.PermissionAttachmentInfo; @@ -153,11 +151,6 @@ public class Interact implements Listener { .hasPermission(player, block.getLocation(), "Place") && (!skyblock.getFileManager().getConfig(new File(skyblock.getDataFolder(), "config.yml")).getFileConfiguration().getBoolean("Island.Stackable.RequirePermission") || player.hasPermission("fabledskyblock.stackable"))) { - if (NMSUtil.getVersionNumber() > 8) { - if (event.getHand() == EquipmentSlot.OFF_HAND) { - return; - } - } if (levellingManager.isScanning(island)) { skyblock.getMessageManager().sendMessage(player, @@ -223,7 +216,8 @@ public class Interact implements Listener { event.setCancelled(true); } - InventoryUtil.takeItem(player, itemAmount); + if (player.getGameMode() != GameMode.CREATIVE) + ItemUtils.takeActiveItem(player, CompatibleHand.getHand(event), itemAmount); if (!configLoad.getBoolean("Island.Block.Level.Enable")) { return; @@ -706,8 +700,8 @@ public class Interact implements Listener { SoundManager soundManager = skyblock.getSoundManager(); if (skyblock.getWorldManager().isIslandWorld(entity.getWorld())) { - if ((is != null) && (CompatibleMaterial.getMaterial(is.getType()) != CompatibleMaterial.AIR)) { - if (CompatibleMaterial.getMaterial(is.getType()) == CompatibleMaterial.LEAD) { + if ((is != null) && (CompatibleMaterial.getMaterial(is) != CompatibleMaterial.AIR)) { + if (CompatibleMaterial.getMaterial(is) == CompatibleMaterial.LEAD) { if (!islandManager.hasPermission(player, entity.getLocation(), "Leash")) { event.setCancelled(true); @@ -771,7 +765,7 @@ public class Interact implements Listener { skyblock.getSoundManager().playSound(player, CompatibleSound.ENTITY_VILLAGER_NO.getSound(), 1.0F, 1.0F); } } else if (entity.getType() == EntityType.COW || entity.getType() == EntityType.MUSHROOM_COW) { - if (CompatibleMaterial.getMaterial(is.getType()) == CompatibleMaterial.BUCKET) { + if (CompatibleMaterial.getMaterial(is) == CompatibleMaterial.BUCKET) { if (!islandManager.hasPermission(player, entity.getLocation(), "Milking")) { event.setCancelled(true); @@ -825,27 +819,27 @@ public class Interact implements Listener { } if (entity.getType() == EntityType.HORSE) { - if (!(CompatibleMaterial.getMaterial(is.getType()) == CompatibleMaterial.GOLDEN_APPLE - || CompatibleMaterial.getMaterial(is.getType()) == CompatibleMaterial.GOLDEN_CARROT - || CompatibleMaterial.getMaterial(is.getType()) == CompatibleMaterial.SUGAR - || CompatibleMaterial.getMaterial(is.getType()) == CompatibleMaterial.WHEAT - || CompatibleMaterial.getMaterial(is.getType()) == CompatibleMaterial.APPLE - || CompatibleMaterial.getMaterial(is.getType()) == CompatibleMaterial.HAY_BLOCK)) { + if (!(CompatibleMaterial.getMaterial(is) == CompatibleMaterial.GOLDEN_APPLE + || CompatibleMaterial.getMaterial(is) == CompatibleMaterial.GOLDEN_CARROT + || CompatibleMaterial.getMaterial(is) == CompatibleMaterial.SUGAR + || CompatibleMaterial.getMaterial(is) == CompatibleMaterial.WHEAT + || CompatibleMaterial.getMaterial(is) == CompatibleMaterial.APPLE + || CompatibleMaterial.getMaterial(is) == CompatibleMaterial.HAY_BLOCK)) { return; } } else if (entity.getType() == EntityType.SHEEP || entity.getType() == EntityType.COW || entity.getType() == EntityType.MUSHROOM_COW) { - if (!(CompatibleMaterial.getMaterial(is.getType()) == CompatibleMaterial.WHEAT)) { + if (!(CompatibleMaterial.getMaterial(is) == CompatibleMaterial.WHEAT)) { return; } } else if (entity.getType() == EntityType.PIG) { - if (!(CompatibleMaterial.getMaterial(is.getType()) == CompatibleMaterial.CARROT || CompatibleMaterial.getMaterial(is.getType()) == CompatibleMaterial.POTATO)) { + if (!(CompatibleMaterial.getMaterial(is) == CompatibleMaterial.CARROT || CompatibleMaterial.getMaterial(is) == CompatibleMaterial.POTATO)) { return; } } else if (entity.getType() == EntityType.CHICKEN) { - if (!(CompatibleMaterial.getMaterial(is.getType()) == CompatibleMaterial.WHEAT_SEEDS - || CompatibleMaterial.getMaterial(is.getType()) == CompatibleMaterial.PUMPKIN_SEEDS || CompatibleMaterial.getMaterial(is.getType()) == CompatibleMaterial.MELON_SEEDS)) { + if (!(CompatibleMaterial.getMaterial(is) == CompatibleMaterial.WHEAT_SEEDS + || CompatibleMaterial.getMaterial(is) == CompatibleMaterial.PUMPKIN_SEEDS || CompatibleMaterial.getMaterial(is) == CompatibleMaterial.MELON_SEEDS)) { if (NMSUtil.getVersionNumber() > 8) { - if (!(CompatibleMaterial.getMaterial(is.getType()) == CompatibleMaterial.BEETROOT_SEEDS)) { + if (!(CompatibleMaterial.getMaterial(is) == CompatibleMaterial.BEETROOT_SEEDS)) { return; } } else { @@ -853,31 +847,31 @@ public class Interact implements Listener { } } } else if (entity.getType() == EntityType.WOLF) { - if (!(CompatibleMaterial.getMaterial(is.getType()) == CompatibleMaterial.BONE - || CompatibleMaterial.getMaterial(is.getType()) == CompatibleMaterial.PORKCHOP - || CompatibleMaterial.getMaterial(is.getType()) == CompatibleMaterial.BEEF - || CompatibleMaterial.getMaterial(is.getType()) == CompatibleMaterial.CHICKEN - || CompatibleMaterial.getMaterial(is.getType()) == CompatibleMaterial.RABBIT - || CompatibleMaterial.getMaterial(is.getType()) == CompatibleMaterial.MUTTON - || CompatibleMaterial.getMaterial(is.getType()) == CompatibleMaterial.ROTTEN_FLESH - || CompatibleMaterial.getMaterial(is.getType()) == CompatibleMaterial.COOKED_PORKCHOP - || CompatibleMaterial.getMaterial(is.getType()) == CompatibleMaterial.COOKED_BEEF - || CompatibleMaterial.getMaterial(is.getType()) == CompatibleMaterial.COOKED_CHICKEN - || CompatibleMaterial.getMaterial(is.getType()) == CompatibleMaterial.COOKED_RABBIT - || CompatibleMaterial.getMaterial(is.getType()) == CompatibleMaterial.COOKED_MUTTON)) { + if (!(CompatibleMaterial.getMaterial(is) == CompatibleMaterial.BONE + || CompatibleMaterial.getMaterial(is) == CompatibleMaterial.PORKCHOP + || CompatibleMaterial.getMaterial(is) == CompatibleMaterial.BEEF + || CompatibleMaterial.getMaterial(is) == CompatibleMaterial.CHICKEN + || CompatibleMaterial.getMaterial(is) == CompatibleMaterial.RABBIT + || CompatibleMaterial.getMaterial(is) == CompatibleMaterial.MUTTON + || CompatibleMaterial.getMaterial(is) == CompatibleMaterial.ROTTEN_FLESH + || CompatibleMaterial.getMaterial(is) == CompatibleMaterial.COOKED_PORKCHOP + || CompatibleMaterial.getMaterial(is) == CompatibleMaterial.COOKED_BEEF + || CompatibleMaterial.getMaterial(is) == CompatibleMaterial.COOKED_CHICKEN + || CompatibleMaterial.getMaterial(is) == CompatibleMaterial.COOKED_RABBIT + || CompatibleMaterial.getMaterial(is) == CompatibleMaterial.COOKED_MUTTON)) { return; } } else if (entity.getType() == EntityType.OCELOT) { - if (!(CompatibleMaterial.getMaterial(is.getType()) == CompatibleMaterial.COD - || CompatibleMaterial.getMaterial(is.getType()) == CompatibleMaterial.SALMON - || CompatibleMaterial.getMaterial(is.getType()) == CompatibleMaterial.TROPICAL_FISH - || CompatibleMaterial.getMaterial(is.getType()) == CompatibleMaterial.PUFFERFISH)) { + if (!(CompatibleMaterial.getMaterial(is) == CompatibleMaterial.COD + || CompatibleMaterial.getMaterial(is) == CompatibleMaterial.SALMON + || CompatibleMaterial.getMaterial(is) == CompatibleMaterial.TROPICAL_FISH + || CompatibleMaterial.getMaterial(is) == CompatibleMaterial.PUFFERFISH)) { return; } } else if (entity.getType() == EntityType.RABBIT) { - if (!(CompatibleMaterial.getMaterial(is.getType()) == CompatibleMaterial.DANDELION - || CompatibleMaterial.getMaterial(is.getType()) == CompatibleMaterial.CARROTS - || CompatibleMaterial.getMaterial(is.getType()) == CompatibleMaterial.GOLDEN_CARROT)) { + if (!(CompatibleMaterial.getMaterial(is) == CompatibleMaterial.DANDELION + || CompatibleMaterial.getMaterial(is) == CompatibleMaterial.CARROTS + || CompatibleMaterial.getMaterial(is) == CompatibleMaterial.GOLDEN_CARROT)) { return; } } else { @@ -885,12 +879,12 @@ public class Interact implements Listener { if (NMSVersion > 10) { if (entity.getType() == EntityType.LLAMA) { - if (!(CompatibleMaterial.getMaterial(is.getType()) == CompatibleMaterial.HAY_BLOCK)) { + if (!(CompatibleMaterial.getMaterial(is) == CompatibleMaterial.HAY_BLOCK)) { return; } } else if (NMSVersion > 12) { if (entity.getType() == EntityType.TURTLE) { - if (!(CompatibleMaterial.getMaterial(is.getType()) == CompatibleMaterial.SEAGRASS)) { + if (!(CompatibleMaterial.getMaterial(is) == CompatibleMaterial.SEAGRASS)) { return; } } else { diff --git a/src/main/java/com/songoda/skyblock/menus/Levelling.java b/src/main/java/com/songoda/skyblock/menus/Levelling.java index 8cbf3c63..23161957 100644 --- a/src/main/java/com/songoda/skyblock/menus/Levelling.java +++ b/src/main/java/com/songoda/skyblock/menus/Levelling.java @@ -198,7 +198,7 @@ public class Levelling { if (is == null || is.getItemMeta() == null) continue; is.setAmount(Math.min(Math.toIntExact(value), 64)); - is.setType(CompatibleMaterial.getMaterial(is.getType()).getMaterial()); + is.setType(CompatibleMaterial.getMaterial(is).getMaterial()); testInventory.clear(); testInventory.setItem(0, is); @@ -269,7 +269,7 @@ public class Levelling { ItemStack is = materials.getItem(); is.setAmount(Math.min(Math.toIntExact(materialAmount), 64)); - is.setType(CompatibleMaterial.getMaterial(is.getType()).getMaterial()); + is.setType(CompatibleMaterial.getMaterial(is).getMaterial()); List lore = configLoad.getStringList("Menu.Levelling.Item.Material.Lore"); lore.replaceAll(x -> x.replace("%points", NumberUtil.formatNumberByDecimal(pointsEarned)).replace("%blocks", NumberUtil.formatNumberByDecimal(materialAmount)).replace("%material", name)); diff --git a/src/main/java/com/songoda/skyblock/menus/Visit.java b/src/main/java/com/songoda/skyblock/menus/Visit.java index 5392a521..41ebd2ee 100644 --- a/src/main/java/com/songoda/skyblock/menus/Visit.java +++ b/src/main/java/com/songoda/skyblock/menus/Visit.java @@ -3,6 +3,7 @@ package com.songoda.skyblock.menus; import com.songoda.core.compatibility.CompatibleMaterial; import com.songoda.core.compatibility.CompatibleSound; import com.songoda.skyblock.SkyBlock; +import com.songoda.skyblock.api.event.player.PlayerVoteEvent; import com.songoda.skyblock.config.FileManager; import com.songoda.skyblock.config.FileManager.Config; import com.songoda.skyblock.island.Island; @@ -179,6 +180,11 @@ public class Visit { soundManager.playSound(player, CompatibleSound.ENTITY_GENERIC_EXPLODE.getSound(), 1.0F, 1.0F); } else { + PlayerVoteEvent playerVoteEvent = new PlayerVoteEvent(player, island.getAPIWrapper()); + Bukkit.getServer().getPluginManager().callEvent(playerVoteEvent); + if (playerVoteEvent.isCancelled()) + return; + visit.addVoter(player.getUniqueId()); messageManager.sendMessage(player, diff --git a/src/main/java/com/songoda/skyblock/stackable/StackableManager.java b/src/main/java/com/songoda/skyblock/stackable/StackableManager.java index cc10c34e..d429e4ff 100644 --- a/src/main/java/com/songoda/skyblock/stackable/StackableManager.java +++ b/src/main/java/com/songoda/skyblock/stackable/StackableManager.java @@ -38,7 +38,7 @@ public class StackableManager { FileConfiguration configLoad = config.getFileConfiguration(); List stackableList = configLoad.getStringList("Stackables"); - if (stackableList == null) return; + if (stackableList.isEmpty()) return; for (String stackableStr : stackableList) { try { diff --git a/src/main/java/com/songoda/skyblock/tasks/HologramTask.java b/src/main/java/com/songoda/skyblock/tasks/HologramTask.java index 3dcfe777..1650f379 100644 --- a/src/main/java/com/songoda/skyblock/tasks/HologramTask.java +++ b/src/main/java/com/songoda/skyblock/tasks/HologramTask.java @@ -59,7 +59,6 @@ public class HologramTask extends BukkitRunnable { } public void onDisable() { - removeHolograms(); } public void spawnHologram(HologramType type, Location location, List lines) { @@ -151,12 +150,6 @@ public class HologramTask extends BukkitRunnable { return hologramLines; } - public void removeHolograms() { - for (Hologram hologramList : hologramStorage) { - hologramList.remove(); - } - } - public Hologram getHologram(HologramType type) { for (Hologram hologramList : hologramStorage) { if (hologramList.getType() == type) { diff --git a/src/main/java/com/songoda/skyblock/visit/Visit.java b/src/main/java/com/songoda/skyblock/visit/Visit.java index d175e9ac..be6facca 100644 --- a/src/main/java/com/songoda/skyblock/visit/Visit.java +++ b/src/main/java/com/songoda/skyblock/visit/Visit.java @@ -173,9 +173,7 @@ public class Visit { islandOwnerUUID.toString() + ".yml")) .getFileConfiguration(); - for (String islandVoterList : configLoad.getStringList("Voters")) { - islandVoters.add(islandVoterList); - } + islandVoters.addAll(configLoad.getStringList("Voters")); islandVoters.add(uuid.toString()); configLoad.set("Voters", islandVoters); diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 47a08ba2..2ab1ec16 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -15,7 +15,7 @@ Island: # [!] Do not go over the maximum. # [!] Even numbers WILL create world border issues. Minimum: 100 - # The maximum size of an Island based on the permission node 'skyblock.size.'. + # The maximum size of an Island based on the permission node 'fabledskyblock.size.'. Maximum: 200 Creation: # Rather than opening the 'Island Creator' menu. Create an island