diff --git a/pom.xml b/pom.xml
index 9828609c..85a875df 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
com.songoda
skyblock
- 2.3.29
+ 2.3.30
jar
@@ -218,19 +218,6 @@
provided
-
- be.maximvdw
- MVdWPlaceholderAPI
- 2.1.1-SNAPSHOT
-
-
-
- org.spigotmc
- spigot
-
-
-
-
me.clip
placeholderapi
diff --git a/src/main/java/com/songoda/skyblock/SkyBlock.java b/src/main/java/com/songoda/skyblock/SkyBlock.java
index ab617ea7..bdf4b38f 100644
--- a/src/main/java/com/songoda/skyblock/SkyBlock.java
+++ b/src/main/java/com/songoda/skyblock/SkyBlock.java
@@ -65,7 +65,7 @@ public class SkyBlock extends SongodaPlugin {
private static SkyBlock INSTANCE;
private FileManager fileManager;
- private WorldManager worldManager;
+ private final WorldManager worldManager = new WorldManager(this);
private UserCacheManager userCacheManager;
private VisitManager visitManager;
private BanManager banManager;
@@ -166,7 +166,7 @@ public class SkyBlock extends SongodaPlugin {
permissionManager = new PermissionManager(this);
localizationManager = new LocalizationManager();
- worldManager = new WorldManager(this);
+ worldManager.loadWorlds();
userCacheManager = new UserCacheManager(this);
visitManager = new VisitManager(this);
banManager = new BanManager(this);
@@ -184,7 +184,6 @@ public class SkyBlock extends SongodaPlugin {
structureManager = new StructureManager(this);
soundManager = new SoundManager(this);
-
if (this.config.getBoolean("Island.Generator.Enable")) {
generatorManager = new GeneratorManager(this);
}
@@ -206,7 +205,6 @@ public class SkyBlock extends SongodaPlugin {
bankManager = new BankManager(this);
-
if (this.config.getBoolean("Island.Task.PlaytimeTask")) {
new PlaytimeTask(playerDataManager, islandManager).runTaskTimerAsynchronously(this, 0L, 20L);
}
@@ -323,7 +321,6 @@ public class SkyBlock extends SongodaPlugin {
return null;
}
-
private boolean loadConfigs() {
try {
biomes = this.getFileManager().getConfig(new File(this.getDataFolder(), "biomes.yml")).getFileConfiguration();
@@ -500,7 +497,6 @@ public class SkyBlock extends SongodaPlugin {
return economyManager;
}
-
public FileConfiguration getBiomes() {
return biomes;
}
@@ -556,5 +552,4 @@ public class SkyBlock extends SongodaPlugin {
public FileConfiguration getScoreboard() {
return scoreboard;
}
-
}
diff --git a/src/main/java/com/songoda/skyblock/blockscanner/ChunkLoader.java b/src/main/java/com/songoda/skyblock/blockscanner/ChunkLoader.java
index 4933a2b9..1bb96aae 100644
--- a/src/main/java/com/songoda/skyblock/blockscanner/ChunkLoader.java
+++ b/src/main/java/com/songoda/skyblock/blockscanner/ChunkLoader.java
@@ -4,14 +4,12 @@ import com.songoda.skyblock.SkyBlock;
import com.songoda.skyblock.island.Island;
import com.songoda.skyblock.island.IslandEnvironment;
import com.songoda.skyblock.island.IslandWorld;
-import org.bukkit.Chunk;
import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.scheduler.BukkitRunnable;
import java.util.LinkedList;
import java.util.List;
-import java.util.concurrent.CompletableFuture;
public class ChunkLoader extends BukkitRunnable {
public final List positions = new LinkedList<>();
@@ -116,14 +114,14 @@ public class ChunkLoader extends BukkitRunnable {
@Override
public void run() { // TODO New algorithm that start from the center of the island
- for (int i = 0; i < chunkPerTick || paper; i++) {
+ for (int i = 0; i < chunkPerTick || paper; ++i) {
if (x <= maxX) {
if (z <= maxZ) {
if (!chunkForChunk) {
- positions.add(new CachedChunk(world, x >> 4, z >> 4));
+ positions.add(new CachedChunk(world, x, z));
} else {
if (chunkTask != null) {
- chunkTask.onChunkComplete(new CachedChunk(world, x >> 4, z >> 4));
+ chunkTask.onChunkComplete(new CachedChunk(world, x, z));
}
}
diff --git a/src/main/java/com/songoda/skyblock/command/commands/admin/SetBiomeCommand.java b/src/main/java/com/songoda/skyblock/command/commands/admin/SetBiomeCommand.java
index 613f51b3..b59d9571 100644
--- a/src/main/java/com/songoda/skyblock/command/commands/admin/SetBiomeCommand.java
+++ b/src/main/java/com/songoda/skyblock/command/commands/admin/SetBiomeCommand.java
@@ -45,24 +45,24 @@ public class SetBiomeCommand extends SubCommand {
Config config = fileManager.getConfig(new File(plugin.getDataFolder(), "language.yml"));
FileConfiguration configLoad = config.getFileConfiguration();
-
+
if (args.length >= 2) {
String biomeName = args[1].toUpperCase().trim();
-
+
IslandWorld world = null;
- if(args[2] != null) {
+ if (args.length > 2) {
String worldName = args[2].toUpperCase().trim();
- for(IslandWorld islandWorld : IslandWorld.values()) {
- if(islandWorld.name().equalsIgnoreCase(worldName)) {
+ for (IslandWorld islandWorld : IslandWorld.values()) {
+ if (islandWorld.name().equalsIgnoreCase(worldName)) {
world = islandWorld;
}
}
}
-
- if(world == null) {
+
+ if (world == null) {
world = IslandWorld.Normal;
}
-
+
CompatibleBiome biome = null;
for (CompatibleBiome cbiome : CompatibleBiome.values()) {
if (cbiome.isCompatible() && cbiome.name().equals(biomeName)) {
@@ -88,12 +88,12 @@ public class SetBiomeCommand extends SubCommand {
if (islandOwnerUUID == null) {
messageManager.sendMessage(sender,
configLoad.getString("Command.Island.Admin.SetBiome.Island.Owner.Message"));
- soundManager.playSound(sender, CompatibleSound.ENTITY_VILLAGER_NO.getSound(), 1.0F, 1.0F);
+ soundManager.playSound(sender, CompatibleSound.ENTITY_VILLAGER_NO.getSound(), 1.0F, 1.0F);
} else {
if (islandManager.containsIsland(islandOwnerUUID)) {
Island island = islandManager.getIsland(Bukkit.getServer().getOfflinePlayer(islandOwnerUUID));
biomeManager.setBiome(island, world, biome, null);
- if(world.equals(IslandWorld.Normal)) {
+ if (world.equals(IslandWorld.Normal)) {
island.setBiome(biome.getBiome());
}
} else {
@@ -107,7 +107,7 @@ public class SetBiomeCommand extends SubCommand {
CompatibleBiome finalBiome = biome;
IslandWorld finalWorld = world;
biomeManager.setBiome(island, world, biome, () -> {
- if(finalWorld.equals(IslandWorld.Normal)) {
+ if (finalWorld.equals(IslandWorld.Normal)) {
island.setBiome(finalBiome.getBiome());
}
});
diff --git a/src/main/java/com/songoda/skyblock/command/commands/island/BanCommand.java b/src/main/java/com/songoda/skyblock/command/commands/island/BanCommand.java
index c107ec90..23fc5699 100644
--- a/src/main/java/com/songoda/skyblock/command/commands/island/BanCommand.java
+++ b/src/main/java/com/songoda/skyblock/command/commands/island/BanCommand.java
@@ -53,7 +53,6 @@ public class BanCommand extends SubCommand {
OfflinePlayer targetPlayerOffline = new OfflinePlayer(args[0]);
targetPlayerUUID = targetPlayerOffline.getUniqueId();
targetPlayerName = targetPlayerOffline.getName();
-
} else {
targetPlayerUUID = targetPlayer.getUniqueId();
targetPlayerName = targetPlayer.getName();
@@ -62,7 +61,7 @@ public class BanCommand extends SubCommand {
if (targetPlayerUUID == null) {
messageManager.sendMessage(player, configLoad.getString("Command.Island.Ban.Found.Message"));
soundManager.playSound(player, CompatibleSound.BLOCK_ANVIL_LAND.getSound(), 1.0F, 1.0F);
- } else if((targetPlayer.hasPermission("fabledskyblock.bypass.ban") || targetPlayer.isOp())){
+ } else if (targetPlayer != null && (targetPlayer.hasPermission("fabledskyblock.bypass.ban") || targetPlayer.isOp())) {
messageManager.sendMessage(player, configLoad.getString("Command.Island.Ban.Exempt"));
soundManager.playSound(player, CompatibleSound.BLOCK_ANVIL_LAND.getSound(), 1.0F, 1.0F);
} else if (targetPlayerUUID.equals(player.getUniqueId())) {
@@ -70,36 +69,37 @@ public class BanCommand extends SubCommand {
soundManager.playSound(player, CompatibleSound.BLOCK_ANVIL_LAND.getSound(), 1.0F, 1.0F);
} else if (island.hasRole(IslandRole.Member, targetPlayerUUID) || island.hasRole(IslandRole.Operator, targetPlayerUUID)
|| island.hasRole(IslandRole.Owner, targetPlayerUUID)) {
- messageManager.sendMessage(player, configLoad.getString("Command.Island.Ban.Member.Message"));
- soundManager.playSound(player, CompatibleSound.BLOCK_ANVIL_LAND.getSound(), 1.0F, 1.0F);
- } else
- if (island.getBan().isBanned(targetPlayerUUID)) {
- messageManager.sendMessage(player, configLoad.getString("Command.Island.Ban.Already.Message"));
- soundManager.playSound(player, CompatibleSound.BLOCK_ANVIL_LAND.getSound(), 1.0F, 1.0F);
- } else {
- messageManager.sendMessage(player, configLoad.getString("Command.Island.Ban.Banned.Sender.Message").replace("%player", targetPlayerName));
- soundManager.playSound(player, CompatibleSound.ENTITY_IRON_GOLEM_ATTACK.getSound(), 1.0F, 1.0F);
+ messageManager.sendMessage(player, configLoad.getString("Command.Island.Ban.Member.Message"));
+ soundManager.playSound(player, CompatibleSound.BLOCK_ANVIL_LAND.getSound(), 1.0F, 1.0F);
+ } else if (island.getBan().isBanned(targetPlayerUUID)) {
+ messageManager.sendMessage(player, configLoad.getString("Command.Island.Ban.Already.Message"));
+ soundManager.playSound(player, CompatibleSound.BLOCK_ANVIL_LAND.getSound(), 1.0F, 1.0F);
+ } else {
+ messageManager.sendMessage(player, configLoad.getString("Command.Island.Ban.Banned.Sender.Message")
+ .replace("%player", targetPlayerName));
+ soundManager.playSound(player, CompatibleSound.ENTITY_IRON_GOLEM_ATTACK.getSound(), 1.0F, 1.0F);
- if (island.isCoopPlayer(targetPlayerUUID)) {
- island.removeCoopPlayer(targetPlayerUUID);
- }
+ if (island.isCoopPlayer(targetPlayerUUID)) {
+ island.removeCoopPlayer(targetPlayerUUID);
+ }
- Ban ban = island.getBan();
- ban.addBan(player.getUniqueId(), targetPlayerUUID);
- ban.save();
+ Ban ban = island.getBan();
+ ban.addBan(player.getUniqueId(), targetPlayerUUID);
+ ban.save();
- if (targetPlayer != null) {
- if (islandManager.isPlayerAtIsland(island, targetPlayer)) {
- messageManager.sendMessage(targetPlayer, configLoad.getString("Command.Island.Ban.Banned.Target.Message").replace("%player", player.getName()));
- soundManager.playSound(targetPlayer, CompatibleSound.ENTITY_IRON_GOLEM_ATTACK.getSound(), 1.0F, 1.0F);
+ if (targetPlayer != null) {
+ if (islandManager.isPlayerAtIsland(island, targetPlayer)) {
+ messageManager.sendMessage(targetPlayer, configLoad.getString("Command.Island.Ban.Banned.Target.Message")
+ .replace("%player", player.getName()));
+ soundManager.playSound(targetPlayer, CompatibleSound.ENTITY_IRON_GOLEM_ATTACK.getSound(), 1.0F, 1.0F);
- LocationUtil.teleportPlayerToSpawn(targetPlayer);
- }
+ LocationUtil.teleportPlayerToSpawn(targetPlayer);
}
}
+ }
} else {
messageManager.sendMessage(player, configLoad.getString("Command.Island.Ban.Permission.Message"));
- soundManager.playSound(player, CompatibleSound.ENTITY_VILLAGER_NO.getSound(), 1.0F, 1.0F);
+ soundManager.playSound(player, CompatibleSound.ENTITY_VILLAGER_NO.getSound(), 1.0F, 1.0F);
}
} else {
messageManager.sendMessage(player, configLoad.getString("Command.Island.Ban.Disabled.Message"));
diff --git a/src/main/java/com/songoda/skyblock/command/commands/island/UnbanCommand.java b/src/main/java/com/songoda/skyblock/command/commands/island/UnbanCommand.java
index 61628b41..9371590c 100644
--- a/src/main/java/com/songoda/skyblock/command/commands/island/UnbanCommand.java
+++ b/src/main/java/com/songoda/skyblock/command/commands/island/UnbanCommand.java
@@ -41,11 +41,11 @@ public class UnbanCommand extends SubCommand {
.getBoolean("Island.Visitor.Banning")) {
if (island.hasRole(IslandRole.Owner, player.getUniqueId())
|| (island.hasRole(IslandRole.Operator, player.getUniqueId())
- && plugin.getPermissionManager().hasPermission(island,"Unban", IslandRole.Operator))) {
+ && plugin.getPermissionManager().hasPermission(island, "Unban", IslandRole.Operator))) {
Player targetPlayer = Bukkit.getServer().getPlayer(args[0]);
- UUID targetPlayerUUID = null;
- String targetPlayerName = null;
+ UUID targetPlayerUUID;
+ String targetPlayerName;
if (targetPlayer == null) {
OfflinePlayer targetPlayerOffline = new OfflinePlayer(args[0]);
@@ -82,7 +82,7 @@ public class UnbanCommand extends SubCommand {
}
} else {
messageManager.sendMessage(player, configLoad.getString("Command.Island.Unban.Permission.Message"));
- soundManager.playSound(player, CompatibleSound.ENTITY_VILLAGER_NO.getSound(), 1.0F, 1.0F);
+ soundManager.playSound(player, CompatibleSound.ENTITY_VILLAGER_NO.getSound(), 1.0F, 1.0F);
}
} else {
messageManager.sendMessage(player, configLoad.getString("Command.Island.Unban.Disabled.Message"));
diff --git a/src/main/java/com/songoda/skyblock/gui/biome/GuiBiome.java b/src/main/java/com/songoda/skyblock/gui/biome/GuiBiome.java
index 5e8e38ce..59323e07 100644
--- a/src/main/java/com/songoda/skyblock/gui/biome/GuiBiome.java
+++ b/src/main/java/com/songoda/skyblock/gui/biome/GuiBiome.java
@@ -74,15 +74,15 @@ public class GuiBiome extends Gui {
soundManager.playSound(event.player, CompatibleSound.BLOCK_CHEST_CLOSE.getSound(), 1f, 1f);
event.player.closeInventory();
});
-
+
List lore = languageLoad.getStringList("Menu.Biome.Item.Info.Lore");
for (ListIterator i = lore.listIterator(); i.hasNext(); ) {
i.set(TextUtils.formatText(i.next().replace("%biome_type", island.getBiomeName())));
}
-
+
setItem(4, GuiUtils.createButtonItem(CompatibleMaterial.PAINTING, // Info
TextUtils.formatText(languageLoad.getString("Menu.Biome.Item.Info.Displayname")), lore));
-
+
for(int i=9; i<18; i++){
setItem(i, CompatibleMaterial.BLACK_STAINED_GLASS_PANE.getItem());
}
@@ -122,9 +122,9 @@ public class GuiBiome extends Gui {
if(biomes.size() > 0){
biomes.sort(Comparator.comparing(m -> m.biome.name()));
-
+
this.pages = (int) Math.max(1, Math.ceil((double) biomes.size() / 27d));
-
+
if (page != 1)
setButton(5, 2, GuiUtils.createButtonItem(CompatibleMaterial.ARROW,
TextUtils.formatText(languageLoad.getString("Menu.Biome.Item.Last.Displayname"))),
@@ -132,7 +132,7 @@ public class GuiBiome extends Gui {
page--;
paint();
});
-
+
if (page != pages)
setButton(5, 6, GuiUtils.createButtonItem(CompatibleMaterial.ARROW,
TextUtils.formatText(languageLoad.getString("Menu.Biome.Item.Next.Displayname"))),
@@ -157,7 +157,7 @@ public class GuiBiome extends Gui {
if(icon.biome.getBiome().equals(island.getBiome())){
icon.enchant();
}
-
+
setButton(i, icon.displayItem, event -> {
if (cooldownManager.hasPlayer(CooldownType.Biome, player) && !player.hasPermission("fabledskyblock.bypass.cooldown")) {
CooldownPlayer cooldownPlayer = cooldownManager.getCooldownPlayer(CooldownType.Biome, player);
@@ -191,7 +191,7 @@ public class GuiBiome extends Gui {
soundManager.playSound(player, CompatibleSound.ENTITY_VILLAGER_YES.getSound(), 1.0F, 1.0F);
}
});
- island.setBiome(icon.biome.getBiome());
+ island.setBiome(icon.biome.getBiome()); // FIXME: A event is fired with has a setBiome method...
island.save();
});
diff --git a/src/main/java/com/songoda/skyblock/island/IslandManager.java b/src/main/java/com/songoda/skyblock/island/IslandManager.java
index 8c030747..9344ed84 100644
--- a/src/main/java/com/songoda/skyblock/island/IslandManager.java
+++ b/src/main/java/com/songoda/skyblock/island/IslandManager.java
@@ -61,7 +61,6 @@ import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
public class IslandManager {
-
private final SkyBlock plugin;
private final List islandPositions = new ArrayList<>();
@@ -169,7 +168,7 @@ public class IslandManager {
posY = (int) (r - (a % en));
break;
default:
- System.err.println("[FabledSkyblock][prepareNextAvailableLocation] Erreur dans la spirale, valeur : " + loc);
+ plugin.getLogger().warning("[FabledSkyblock][prepareNextAvailableLocation] Error in the spiral value: " + loc);
return null;
}
posX = posX * offset;
diff --git a/src/main/java/com/songoda/skyblock/listeners/BlockListeners.java b/src/main/java/com/songoda/skyblock/listeners/BlockListeners.java
index 51349092..763b97a5 100644
--- a/src/main/java/com/songoda/skyblock/listeners/BlockListeners.java
+++ b/src/main/java/com/songoda/skyblock/listeners/BlockListeners.java
@@ -5,6 +5,7 @@ import com.songoda.core.compatibility.CompatibleMaterial;
import com.songoda.core.compatibility.CompatibleSound;
import com.songoda.core.compatibility.ServerVersion;
import com.songoda.core.hooks.LogManager;
+import com.songoda.core.utils.NumberUtils;
import com.songoda.skyblock.SkyBlock;
import com.songoda.skyblock.generator.Generator;
import com.songoda.skyblock.generator.GeneratorManager;
@@ -19,7 +20,6 @@ import com.songoda.skyblock.limit.impl.BlockLimitation;
import com.songoda.skyblock.permission.PermissionManager;
import com.songoda.skyblock.stackable.Stackable;
import com.songoda.skyblock.stackable.StackableManager;
-import com.songoda.core.utils.NumberUtils;
import com.songoda.skyblock.utils.version.CompatibleSpawners;
import com.songoda.skyblock.utils.world.LocationUtil;
import com.songoda.skyblock.world.WorldManager;
@@ -187,7 +187,6 @@ public class BlockListeners implements Listener {
if (CompatibleMaterial.getMaterial(belowBlock).isTall()) {
block = belowBlock;
}
-
}
if (block.getType() == CompatibleMaterial.SPAWNER.getBlockMaterial()) {
@@ -513,7 +512,6 @@ public class BlockListeners implements Listener {
event.setCancelled(true);
}
}
-
}
private boolean performStackCheck(org.bukkit.block.Block block, List list, BlockFace blockFace) {
@@ -715,7 +713,6 @@ public class BlockListeners implements Listener {
BlockFace dispenserDirection = ((org.bukkit.material.Dispenser) event.getBlock().getState().getData()).getFacing();
org.bukkit.block.Block placeLocation = event.getBlock().getRelative(dispenserDirection);
-
if (CompatibleMaterial.getMaterial(event.getItem()) == CompatibleMaterial.WATER_BUCKET
&& this.plugin.getConfiguration().getBoolean("Island.Nether.AllowNetherWater", false))
placeLocation.setType(Material.WATER);
@@ -762,7 +759,7 @@ public class BlockListeners implements Listener {
return;
IslandLevel level = island.getLevel();
- if (level.hasMaterial(destmaterial.name())) {
+ if (destmaterial != null && level.hasMaterial(destmaterial.name())) {
long materialAmount = level.getMaterialAmount(destmaterial.name());
if (materialAmount - 1 <= 0) {
diff --git a/src/main/java/com/songoda/skyblock/menus/Leaderboard.java b/src/main/java/com/songoda/skyblock/menus/Leaderboard.java
index 8182e5ab..d0ec8a60 100644
--- a/src/main/java/com/songoda/skyblock/menus/Leaderboard.java
+++ b/src/main/java/com/songoda/skyblock/menus/Leaderboard.java
@@ -3,11 +3,11 @@ package com.songoda.skyblock.menus;
import com.songoda.core.compatibility.CompatibleMaterial;
import com.songoda.core.compatibility.CompatibleSound;
import com.songoda.core.utils.ItemUtils;
+import com.songoda.core.utils.NumberUtils;
import com.songoda.skyblock.SkyBlock;
import com.songoda.skyblock.placeholder.Placeholder;
import com.songoda.skyblock.playerdata.PlayerDataManager;
import com.songoda.skyblock.sound.SoundManager;
-import com.songoda.core.utils.NumberUtils;
import com.songoda.skyblock.utils.item.nInventoryUtil;
import com.songoda.skyblock.utils.player.OfflinePlayer;
import com.songoda.skyblock.visit.Visit;
@@ -23,9 +23,21 @@ import java.util.ArrayList;
import java.util.List;
public class Leaderboard {
-
private static Leaderboard instance;
+ private static final String[] steveSkinTexture = new String[] {
+ "otpbxDm9B+opW7jEzZF8BVDeZSqaqdF0dyLlnlyMh7Q5ysJFDL48/9J/IOHp8JqNm1oarmVdvxrroy9dlNI2Mz4BVuJM2pcCOJwk2h+aZ4dzNZGxst+MYNPSw+i4sMoYu7OV07UVHrQffolFF7MiaBUst1hFwM07IpTE6UtIQz4rqWisXe9Iz5+ooqX4wj0IB3dPntsh6u5nVlL8acWCBDAW4YqcPt2Y4CKK+KtskjzusjqGAdEO+4lRcW1S0ldo2RNtUHEzZADWQcADjg9KKiKq9QIpIpYURIoIAA+pDGb5Q8L5O6CGI+i1+FxqXbgdBvcm1EG0OPdw9WpSqAxGGeXSwlzjILvlvBzYbd6gnHFBhFO+X7iwRJYNd+qQakjUa6ZwR8NbkpbN3ABb9+6YqVkabaEmgfky3HdORE+bTp/AT6LHqEMQo0xdNkvF9gtFci7RWhFwuTLDvQ1esby1IhlgT+X32CPuVHuxEvPCjN7+lmRz2OyOZ4REo2tAIFUKakqu3nZ0NcF98b87wAdA9B9Qyd2H/rEtUToQhpBjP732Sov6TlJkb8echGYiLL5bu/Q7hum72y4+j2GNnuRiOJtJidPgDqrYMg81GfenfPyS6Ynw6KhdEhnwmJ1FJlJhYvXZyqZwLAV1c26DNYkrTMcFcv3VXmcd5/2Zn9FnZtw=",
+ "ewogICJ0aW1lc3RhbXAiIDogMTYyMTcxNTMxMjI5MCwKICAicHJvZmlsZUlkIiA6ICJiNTM5NTkyMjMwY2I0MmE0OWY5YTRlYmYxNmRlOTYwYiIsCiAgInByb2ZpbGVOYW1lIiA6ICJtYXJpYW5hZmFnIiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzFhNGFmNzE4NDU1ZDRhYWI1MjhlN2E2MWY4NmZhMjVlNmEzNjlkMTc2OGRjYjEzZjdkZjMxOWE3MTNlYjgxMGIiCiAgICB9CiAgfQp9"
+ };
+ private static final String[] alexSkinTexture = new String[] {
+ "rZvLQoZsgLYaoKqEuASopYAs7IAlZlsGkwagoM8ZX38cP9kalseZrWY5OHZVfoiftdQJ+lGOzkiFfyx6kNJDTZniLrnRa8sd3X6D65ZihT1sOm/RInCwxpS1K0zGCM2h9ErkWswfwaviIf7hJtrwk8/zL0bfzDk2IgX/IBvIZpVoYTfmQsVY9jgSwORrS9ObePGIfFgmThMoZnCYWQMVpS2+yTFA2wnw9hmisQK9UWBU+iBZv55bMmkMcyEuXw1w14DaEu+/M0UGD91LU4GmJLPA9T4GCuIV8GxOcraSVIajki1cMlOBQwIaibB2NE6KAwq1Zh6NnsNYucy6qFM+136lXfBchQ1Nx4FDRZQgt8VRqTMy/OQFpr2nTbWWbRU4gRFpKC3R0518DqUH0Qm612kPWniKku/QzUUBSe1PSVljBaZCyyRx0OB1a1/8MexboKRnPXuTDnmPa9UPfuH4VO0q+qYkjV2KUzP6e5vIP5aQ6USPrMie7MmAHFJzwAMIbLjgkTVx91GWtYqg/t7qBlvrdBRLIPPsy/DSOqa+2+4hABouVCPZrBMCMLzstPPQoqZAyiCqcKb2HqWSU0h9Bhx19yoIcbHCeI3zsQs8PqIBjUL4mO6VQT4lzHy0e3M61Xsdd8S1GtsakSetTvEtMdUwCEDfBA5PRRTLOVYTY+g=",
+ "ewogICJ0aW1lc3RhbXAiIDogMTYyMTcxNTQ5ODM0MywKICAicHJvZmlsZUlkIiA6ICIxYTc1ZTNiYmI1NTk0MTc2OTVjMmY4NTY1YzNlMDAzZCIsCiAgInByb2ZpbGVOYW1lIiA6ICJUZXJvZmFyIiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzNiNjBhMWY2ZDU2MmY1MmFhZWJiZjE0MzRmMWRlMTQ3OTMzYTNhZmZlMGU3NjRmYTQ5ZWEwNTc1MzY2MjNjZDMiLAogICAgICAibWV0YWRhdGEiIDogewogICAgICAgICJtb2RlbCIgOiAic2xpbSIKICAgICAgfQogICAgfQogIH0KfQ=="
+ };
+ private static final String[] questionMarkSkinTexture = new String[] {
+ "gi+wnQt/y4Z6E9rn65iDWmt8vUOM2WXY66XvtydqDJZTzwgFrjVcx2c5YwdzvtOIRtiX2nZt4n2uWesUFKb59xS24YWbxCDXnalHhCpPFcIP58SQbCm9AYp3UPzkcRNWzuV4BddrS608QQZGyIFOUaLPOPasGITZu51VLcOKcTyFOCKu1QE2yRo1orTH8bWfdpE769BB/VYGdny0qJtm1amc12wGiVifMJRutZmYo2ZdA0APhIJVaNsPppNESVcbeBCvk60l4QK43C/p98/QEe5U6UJ6Z6N01pBQcswubMu8lCuPLasep+vX3v2K+Ui9jnTQNreGNIZPWVjf6V1GH4xMbbUVQJsoPdcaXG855VdzyoW+kyHdWYEojSn0qAY/moH6JCLnx6PLCv9mITSvOIUHq8ITet0M7Z9KALY5s6eg6VdA8TvClRy2TTm9tIRt//TJo5JxBoTYujawGNSR7ryODj2UEDQ2xOyWSagxAXZpispdrO5jHxRmBZUwX9vxnAp+CNWxifpu9sINJTlqYsT/KlGOJQC483gv5B6Nm5VBB1DRFmQkohzO6Wc2eDixgEbaU795GlLxrNaFfNjVH6Bwr1e7df2H3nE0P0bexs4wYdWplijn4gPyHwjT2LDBPGFQK3Vo2SlaXfPYbkIHX21c9qaz3eWHpLEXUBQfnWc=",
+ "eyJ0aW1lc3RhbXAiOjE1MzE3MTcxNjY3MDAsInByb2ZpbGVJZCI6IjYwNmUyZmYwZWQ3NzQ4NDI5ZDZjZTFkMzMyMWM3ODM4IiwicHJvZmlsZU5hbWUiOiJNSEZfUXVlc3Rpb24iLCJzaWduYXR1cmVSZXF1aXJlZCI6dHJ1ZSwidGV4dHVyZXMiOnsiU0tJTiI6eyJ1cmwiOiJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlL2QzNGUwNjNjYWZiNDY3YTVjOGRlNDNlYzc4NjE5Mzk5ZjM2OWY0YTUyNDM0ZGE4MDE3YTk4M2NkZDkyNTE2YTAifX19"
+ };
+
public static Leaderboard getInstance() {
if (instance == null) {
instance = new Leaderboard();
@@ -100,11 +112,11 @@ public class Leaderboard {
.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,
+ new Placeholder[] {new Placeholder("%leaderboard", Viewer.Type.Level.name())}, null,
null),
1);
- if(plugin.getConfiguration().getBoolean("Island.Bank.Enable")){
+ if (plugin.getConfiguration().getBoolean("Island.Bank.Enable")) {
nInv.addItem(
nInv.createItem(new ItemStack(Material.GOLD_INGOT), configLoad
.getString(
@@ -112,7 +124,7 @@ public class Leaderboard {
.replace("%leaderboard", Viewer.Type.Bank.name()),
configLoad.getStringList(
"Menu.Leaderboard." + viewer.getType().name() + ".Item.Leaderboard.Lore"),
- new Placeholder[]{new Placeholder("%leaderboard", Viewer.Type.Bank.name())}, null,
+ new Placeholder[] {new Placeholder("%leaderboard", Viewer.Type.Bank.name())}, null,
null),
2);
} else {
@@ -126,7 +138,7 @@ public class Leaderboard {
.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,
+ new Placeholder[] {new Placeholder("%leaderboard", Viewer.Type.Votes.name())}, null,
null),
3);
@@ -246,7 +258,7 @@ public class Leaderboard {
if (playerDataManager.hasPlayerData(targetPlayer)) {
playerTexture = playerDataManager.getPlayerData(targetPlayer).getTexture();
} else {
- playerTexture = new String[]{null, null};
+ playerTexture = new String[] {null, null};
}
}
@@ -288,14 +300,21 @@ public class Leaderboard {
}
}
+ if (playerTexture[0] == null || playerTexture[1] == null) {
+ if ((visit.getOwnerUUID().hashCode() & 1) != 0) {
+ playerTexture = alexSkinTexture;
+ } else {
+ playerTexture = steveSkinTexture;
+ }
+ }
+
nInv.addItem(
nInv.createItem(ItemUtils.getCustomHead(playerTexture[0], playerTexture[1]),
configLoad.getString("Menu.Leaderboard.Leaderboard.Item.Island.Displayname")
- .replace(
- "%owner", playerName)
+ .replace("%owner", playerName)
.replace("%position", "" + (leaderboard.getPosition() + 1)),
itemLore,
- new Placeholder[]{
+ new Placeholder[] {
new Placeholder("%position", "" + (leaderboard.getPosition() + 1)),
new Placeholder("%owner", playerName),
new Placeholder("%level", "" + visit.getLevel().getLevel()),
@@ -306,17 +325,15 @@ public class Leaderboard {
itemSlot);
}
- int[] itemSlots = new int[]{13, 21, 22, 23, 29, 31, 33, 37, 40, 43};
+ int[] itemSlots = new int[] {13, 21, 22, 23, 29, 31, 33, 37, 40, 43};
for (int i = 0; i < itemSlots.length; i++) {
if (!nInv.getItems().containsKey(itemSlots[i])) {
- nInv.addItem(nInv.createItem(ItemUtils.getCustomHead(
- "gi+wnQt/y4Z6E9rn65iDWmt8vUOM2WXY66XvtydqDJZTzwgFrjVcx2c5YwdzvtOIRtiX2nZt4n2uWesUFKb59xS24YWbxCDXnalHhCpPFcIP58SQbCm9AYp3UPzkcRNWzuV4BddrS608QQZGyIFOUaLPOPasGITZu51VLcOKcTyFOCKu1QE2yRo1orTH8bWfdpE769BB/VYGdny0qJtm1amc12wGiVifMJRutZmYo2ZdA0APhIJVaNsPppNESVcbeBCvk60l4QK43C/p98/QEe5U6UJ6Z6N01pBQcswubMu8lCuPLasep+vX3v2K+Ui9jnTQNreGNIZPWVjf6V1GH4xMbbUVQJsoPdcaXG855VdzyoW+kyHdWYEojSn0qAY/moH6JCLnx6PLCv9mITSvOIUHq8ITet0M7Z9KALY5s6eg6VdA8TvClRy2TTm9tIRt//TJo5JxBoTYujawGNSR7ryODj2UEDQ2xOyWSagxAXZpispdrO5jHxRmBZUwX9vxnAp+CNWxifpu9sINJTlqYsT/KlGOJQC483gv5B6Nm5VBB1DRFmQkohzO6Wc2eDixgEbaU795GlLxrNaFfNjVH6Bwr1e7df2H3nE0P0bexs4wYdWplijn4gPyHwjT2LDBPGFQK3Vo2SlaXfPYbkIHX21c9qaz3eWHpLEXUBQfnWc=",
- "eyJ0aW1lc3RhbXAiOjE1MzE3MTcxNjY3MDAsInByb2ZpbGVJZCI6IjYwNmUyZmYwZWQ3NzQ4NDI5ZDZjZTFkMzMyMWM3ODM4IiwicHJvZmlsZU5hbWUiOiJNSEZfUXVlc3Rpb24iLCJzaWduYXR1cmVSZXF1aXJlZCI6dHJ1ZSwidGV4dHVyZXMiOnsiU0tJTiI6eyJ1cmwiOiJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlL2QzNGUwNjNjYWZiNDY3YTVjOGRlNDNlYzc4NjE5Mzk5ZjM2OWY0YTUyNDM0ZGE4MDE3YTk4M2NkZDkyNTE2YTAifX19"),
- configLoad.getString("Menu.Leaderboard.Leaderboard.Item.Empty.Displayname")
- .replace("%position", "" + (i + 1)),
- configLoad.getStringList("Menu.Leaderboard.Leaderboard.Item.Empty.Lore"),
- new Placeholder[]{new Placeholder("%position", "" + (i + 1))}, null, null),
+ nInv.addItem(nInv.createItem(ItemUtils.getCustomHead(questionMarkSkinTexture[0], questionMarkSkinTexture[1]),
+ configLoad.getString("Menu.Leaderboard.Leaderboard.Item.Empty.Displayname")
+ .replace("%position", "" + (i + 1)),
+ configLoad.getStringList("Menu.Leaderboard.Leaderboard.Item.Empty.Lore"),
+ new Placeholder[] {new Placeholder("%position", "" + (i + 1))}, null, null),
itemSlots[i]);
}
}
diff --git a/src/main/java/com/songoda/skyblock/playerdata/PlayerDataManager.java b/src/main/java/com/songoda/skyblock/playerdata/PlayerDataManager.java
index 172951dc..a2912353 100644
--- a/src/main/java/com/songoda/skyblock/playerdata/PlayerDataManager.java
+++ b/src/main/java/com/songoda/skyblock/playerdata/PlayerDataManager.java
@@ -4,9 +4,13 @@ import com.mojang.authlib.GameProfile;
import com.mojang.authlib.properties.Property;
import com.songoda.skyblock.SkyBlock;
import com.songoda.skyblock.ban.BanManager;
-import com.songoda.skyblock.config.FileManager;
import com.songoda.skyblock.config.FileManager.Config;
-import com.songoda.skyblock.island.*;
+import com.songoda.skyblock.island.Island;
+import com.songoda.skyblock.island.IslandLocation;
+import com.songoda.skyblock.island.IslandManager;
+import com.songoda.skyblock.island.IslandRole;
+import com.songoda.skyblock.island.IslandStatus;
+import com.songoda.skyblock.island.IslandWorld;
import com.songoda.skyblock.message.MessageManager;
import com.songoda.skyblock.scoreboard.ScoreboardManager;
import com.songoda.skyblock.utils.player.OfflinePlayer;
@@ -25,7 +29,6 @@ import java.util.Map;
import java.util.UUID;
public class PlayerDataManager {
-
private final SkyBlock plugin;
private final Map playerDataStorage = new HashMap<>();
@@ -61,9 +64,9 @@ public class PlayerDataManager {
Method getProfileMethod = entityPlayer.getClass().getMethod("getProfile");
GameProfile gameProfile = (GameProfile) getProfileMethod.invoke(entityPlayer);
Property property = gameProfile.getProperties().get("textures").iterator().next();
- playerTexture = new String[]{property.getSignature(), property.getValue()};
+ playerTexture = new String[] {property.getSignature(), property.getValue()};
} catch (Exception e) {
- playerTexture = new String[]{
+ playerTexture = new String[] {
"K9P4tCIENYbNpDuEuuY0shs1x7iIvwXi4jUUVsATJfwsAIZGS+9OZ5T2HB0tWBoxRvZNi73Vr+syRdvTLUWPusVXIg+2fhXmQoaNEtnQvQVGQpjdQP0TkZtYG8PbvRxE6Z75ddq+DVx/65OSNHLWIB/D+Rg4vINh4ukXNYttn9QvauDHh1aW7/IkIb1Bc0tLcQyqxZQ3mdglxJfgIerqnlA++Lt7TxaLdag4y1NhdZyd3OhklF5B0+B9zw/qP8QCzsZU7VzJIcds1+wDWKiMUO7+60OSrIwgE9FPamxOQDFoDvz5BOULQEeNx7iFMB+eBYsapCXpZx0zf1bduppBUbbVC9wVhto/J4tc0iNyUq06/esHUUB5MHzdJ0Y6IZJAD/xIw15OLCUH2ntvs8V9/cy5/n8u3JqPUM2zhUGeQ2p9FubUGk4Q928L56l3omRpKV+5QYTrvF+AxFkuj2hcfGQG3VE2iYZO6omXe7nRPpbJlHkMKhE8Xvd1HP4PKpgivSkHBoZ92QEUAmRzZydJkp8CNomQrZJf+MtPiNsl/Q5RQM+8CQThg3+4uWptUfP5dDFWOgTnMdA0nIODyrjpp+bvIJnsohraIKJ7ZDnj4tIp4ObTNKDFC/8j8JHz4VCrtr45mbnzvB2DcK8EIB3JYT7ElJTHnc5BKMyLy5SKzuw=",
"eyJ0aW1lc3RhbXAiOjE1MjkyNTg0MTE4NDksInByb2ZpbGVJZCI6Ijg2NjdiYTcxYjg1YTQwMDRhZjU0NDU3YTk3MzRlZWQ3IiwicHJvZmlsZU5hbWUiOiJTdGV2ZSIsInNpZ25hdHVyZVJlcXVpcmVkIjp0cnVlLCJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZGMxYzc3Y2U4ZTU0OTI1YWI1ODEyNTQ0NmVjNTNiMGNkZDNkMGNhM2RiMjczZWI5MDhkNTQ4Mjc4N2VmNDAxNiJ9LCJDQVBFIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjc2N2Q0ODMyNWVhNTMyNDU2MTQwNmI4YzgyYWJiZDRlMjc1NWYxMTE1M2NkODVhYjA1NDVjYzIifX19"};
}
@@ -128,7 +131,7 @@ public class PlayerDataManager {
public void storeIsland(Player player) {
MessageManager messageManager = plugin.getMessageManager();
IslandManager islandManager = plugin.getIslandManager();
- WorldManager worldManager = plugin.getWorldManager();;
+ WorldManager worldManager = plugin.getWorldManager();
BanManager banManager = plugin.getBanManager();
FileConfiguration configLoad = plugin.getLanguage();
@@ -187,16 +190,22 @@ public class PlayerDataManager {
islandManager.updateFlight(player);
ScoreboardManager scoreboardManager = plugin.getScoreboardManager();
+ if (scoreboardManager != null) {
+ Island finalIsland = island;
+ Bukkit.getScheduler().runTask(plugin, () -> {
- for (Player loopPlayer : Bukkit.getOnlinePlayers()) {
- PlayerData targetPlayerData = getPlayerData(loopPlayer);
- if (targetPlayerData == null)
- continue;
-
- if (targetPlayerData.getOwner() != null &&
- targetPlayerData.getOwner().equals(island.getOwnerUUID())) {
- scoreboardManager.updatePlayerScoreboardType(loopPlayer);
- }
+ for (Player loopPlayer : Bukkit.getOnlinePlayers()) {
+ PlayerData targetPlayerData = getPlayerData(loopPlayer);
+ if (targetPlayerData == null) {
+ continue;
+ }
+
+ if (targetPlayerData.getOwner() != null &&
+ targetPlayerData.getOwner().equals(finalIsland.getOwnerUUID())) {
+ scoreboardManager.updatePlayerScoreboardType(loopPlayer);
+ }
+ }
+ });
}
return;
diff --git a/src/main/java/com/songoda/skyblock/scoreboard/Driver.java b/src/main/java/com/songoda/skyblock/scoreboard/Driver.java
index 976ab4a8..0964c0fb 100644
--- a/src/main/java/com/songoda/skyblock/scoreboard/Driver.java
+++ b/src/main/java/com/songoda/skyblock/scoreboard/Driver.java
@@ -30,14 +30,14 @@ class Driver extends BukkitRunnable {
ConfigurationSection config = scoreboardLoad.getConfigurationSection(boardType.getConfigSection());
- if(config != null) {
+ if (config != null) {
List lines = config.getStringList("Title.Content");
int interval = config.getInt("Title.Interval");
title = new Row(lines, interval);
- for(int i = 1; i<16; i++) {
+ for (int i = 1; i < 16; i++) {
List rowLines = config.getStringList("Rows." + i + ".Content");
- if(!rowLines.isEmpty()) {
+ if (!rowLines.isEmpty()) {
Row row = new Row(rowLines, config.getInt("Rows." + i + ".Interval"));
rows.add(row);
}
@@ -56,33 +56,41 @@ class Driver extends BukkitRunnable {
}
void registerHolder(Holder holder) {
- holders.add(holder);
+ synchronized (this.holders) {
+ this.holders.add(holder);
+ }
}
void unregisterHolder(Holder holder) {
- holders.remove(holder);
+ synchronized (this.holders) {
+ this.holders.remove(holder);
+ }
}
void unregisterHolder(Player player) {
- Iterator it = holders.iterator();
- while(it.hasNext()) {
- Holder holder = it.next();
- if(holder.getPlayer().equals(player)) {
- it.remove();
- break;
+ synchronized (this.holders) {
+ Iterator it = this.holders.iterator();
+ while (it.hasNext()) {
+ Holder holder = it.next();
+ if (holder.getPlayer().equals(player)) {
+ it.remove();
+ break;
+ }
}
}
}
-
+
@Override
public void run() {
title.update();
- for(Row row : rows) {
+ for (Row row : rows) {
row.update();
}
- for(Holder holder : holders) {
- holder.update();
+ synchronized (this.holders) {
+ for (Holder holder : holders) {
+ holder.update();
+ }
}
}
diff --git a/src/main/java/com/songoda/skyblock/world/WorldManager.java b/src/main/java/com/songoda/skyblock/world/WorldManager.java
index a08d7754..85604e56 100644
--- a/src/main/java/com/songoda/skyblock/world/WorldManager.java
+++ b/src/main/java/com/songoda/skyblock/world/WorldManager.java
@@ -25,8 +25,6 @@ public class WorldManager {
public WorldManager(SkyBlock plugin) {
this.plugin = plugin;
-
- loadWorlds();
}
public void loadWorlds() {
diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml
index 6aec3a34..37fed9e1 100644
--- a/src/main/resources/plugin.yml
+++ b/src/main/resources/plugin.yml
@@ -5,7 +5,7 @@ api-version: 1.13
description: A unique SkyBlock plugin
author: Songoda
authors: [ Fabrimat ]
-softdepend: [ HolographicDisplays, Holograms, PlaceholderAPI, MVdWPlaceholderAPI, Vault, Reserve, PlayerPoints,
+softdepend: [ HolographicDisplays, Holograms, PlaceholderAPI, Vault, Reserve, PlayerPoints,
LeaderHeads, EpicSpawners, UltimateStacker, WorldEdit, Residence, CoreProtect, CMIEInjector ]
loadbefore: [Multiverse-Core, ProtocolLib]
commands:
@@ -13,4 +13,4 @@ commands:
description: Island command
aliases: [ is ]
skyblock:
- description: Skyblock info command.
\ No newline at end of file
+ description: Skyblock info command.