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