# Added a Hologram System that can display leaderboards of top 10 level or votes.
# Added the command '/island admin sethologram' to set the location of a hologram.
# Added the command '/island admin removehologram' to remove an existing hologram.
# Added the alias '/island teleport <player>' to the command '/island visit [<player>]'.
# Added the placeholder 'skyblock_leaderboard_level_<1-10>'.
# Added the placeholder 'skyblock_leaderboard_votes_<1-10>'.
# Fixed invalid unicode character when adding color codes to signs when saving a structure.
# Fixed NSME when sending a World Border to a player on servers using 1.9 & 1.10.
# Fixed NSFE when buying 'Spawner Boost' upgrade on servers using paperclip 1.12.
# Fixed Placeholders not working for Upgrade messages.
# The command '/island admin reload' will also reload the holograms.
This commit is contained in:
Unknown 2018-11-30 23:00:20 +00:00
parent e60a4beaa8
commit c5b789ce6d
15 changed files with 922 additions and 139 deletions

View File

@ -14,6 +14,7 @@ import me.goodandevil.skyblock.confirmation.ConfirmationTask;
import me.goodandevil.skyblock.creation.CreationManager;
import me.goodandevil.skyblock.economy.EconomyManager;
import me.goodandevil.skyblock.generator.GeneratorManager;
import me.goodandevil.skyblock.hologram.HologramManager;
import me.goodandevil.skyblock.invite.InviteManager;
import me.goodandevil.skyblock.island.IslandManager;
import me.goodandevil.skyblock.leaderboard.LeaderboardManager;
@ -69,10 +70,11 @@ public class SkyBlock extends JavaPlugin {
private StructureManager structureManager;
private SoundManager soundManager;
private GeneratorManager generatorManager;
private PlaceholderManager placeholderManager;
private LeaderboardManager leaderboardManager;
private PlaceholderManager placeholderManager;
private MessageManager messageManager;
private EconomyManager economyManager;
private HologramManager hologramManager;
@Override
public void onEnable() {
@ -102,12 +104,14 @@ public class SkyBlock extends JavaPlugin {
generatorManager = new GeneratorManager(this);
}
leaderboardManager = new LeaderboardManager(this);
placeholderManager = new PlaceholderManager(this);
placeholderManager.registerPlaceholders();
leaderboardManager = new LeaderboardManager(this);
messageManager = new MessageManager(this);
economyManager = new EconomyManager();
hologramManager = new HologramManager(this);
new PlaytimeTask(playerDataManager, islandManager).runTaskTimerAsynchronously(this, 0L, 20L);
new VisitTask(playerDataManager).runTaskTimerAsynchronously(this, 0L, 20L);
@ -168,6 +172,10 @@ public class SkyBlock extends JavaPlugin {
if (this.playerDataManager != null) {
this.playerDataManager.onDisable();
}
if (this.hologramManager != null) {
this.hologramManager.onDisable();
}
}
public static SkyBlock getInstance() {
@ -238,13 +246,13 @@ public class SkyBlock extends JavaPlugin {
return generatorManager;
}
public PlaceholderManager getPlaceholderManager() {
return placeholderManager;
}
public LeaderboardManager getLeaderboardManager() {
return leaderboardManager;
}
public PlaceholderManager getPlaceholderManager() {
return placeholderManager;
}
public MessageManager getMessageManager() {
return messageManager;
@ -253,6 +261,10 @@ public class SkyBlock extends JavaPlugin {
public EconomyManager getEconomyManager() {
return economyManager;
}
public HologramManager getHologramManager() {
return hologramManager;
}
@Override
public ChunkGenerator getDefaultWorldGenerator(String worldName, String id) {

View File

@ -54,6 +54,8 @@ import me.goodandevil.skyblock.command.commands.VoteCommand;
import me.goodandevil.skyblock.command.commands.WeatherCommand;
import me.goodandevil.skyblock.command.commands.admin.GeneratorCommand;
import me.goodandevil.skyblock.command.commands.admin.ReloadCommand;
import me.goodandevil.skyblock.command.commands.admin.RemoveHologramCommand;
import me.goodandevil.skyblock.command.commands.admin.SetHologramCommand;
import me.goodandevil.skyblock.command.commands.admin.SetSizeCommand;
import me.goodandevil.skyblock.command.commands.admin.StructureCommand;
import me.goodandevil.skyblock.config.FileManager;
@ -128,6 +130,8 @@ public class CommandManager implements CommandExecutor, TabCompleter {
subCommands = new ArrayList<>();
subCommands.add(new me.goodandevil.skyblock.command.commands.admin.SetSpawnCommand(skyblock).setInfo(ChatColor.translateAlternateColorCodes('&', configLoad.getString("Command.Island.Admin.SetSpawn.Info.Message"))));
subCommands.add(new SetHologramCommand(skyblock).setInfo(ChatColor.translateAlternateColorCodes('&', configLoad.getString("Command.Island.Admin.SetHologram.Info.Message"))));
subCommands.add(new RemoveHologramCommand(skyblock).setInfo(ChatColor.translateAlternateColorCodes('&', configLoad.getString("Command.Island.Admin.RemoveHologram.Info.Message"))));
subCommands.add(new SetSizeCommand(skyblock).setInfo(ChatColor.translateAlternateColorCodes('&', configLoad.getString("Command.Island.Admin.SetSize.Info.Message"))));
subCommands.add(new me.goodandevil.skyblock.command.commands.admin.CreateCommand(skyblock).setInfo(ChatColor.translateAlternateColorCodes('&', configLoad.getString("Command.Island.Admin.Create.Info.Message"))));
subCommands.add(new me.goodandevil.skyblock.command.commands.admin.UpgradeCommand(skyblock).setInfo(ChatColor.translateAlternateColorCodes('&', configLoad.getString("Command.Island.Admin.Upgrade.Info.Message"))));

View File

@ -3,6 +3,7 @@ package me.goodandevil.skyblock.command.commands.admin;
import java.io.File;
import java.util.Map;
import org.bukkit.Bukkit;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player;
@ -12,6 +13,9 @@ import me.goodandevil.skyblock.command.SubCommand;
import me.goodandevil.skyblock.command.CommandManager.Type;
import me.goodandevil.skyblock.config.FileManager;
import me.goodandevil.skyblock.config.FileManager.Config;
import me.goodandevil.skyblock.hologram.Hologram;
import me.goodandevil.skyblock.hologram.HologramManager;
import me.goodandevil.skyblock.hologram.HologramType;
import me.goodandevil.skyblock.message.MessageManager;
import me.goodandevil.skyblock.sound.SoundManager;
import me.goodandevil.skyblock.utils.version.Sounds;
@ -27,6 +31,7 @@ public class ReloadCommand extends SubCommand {
@Override
public void onCommand(Player player, String[] args) {
HologramManager hologramManager = skyblock.getHologramManager();
MessageManager messageManager = skyblock.getMessageManager();
SoundManager soundManager = skyblock.getSoundManager();
FileManager fileManager = skyblock.getFileManager();
@ -51,6 +56,21 @@ public class ReloadCommand extends SubCommand {
skyblock.getScoreboardManager().resendScoreboard();
}
Bukkit.getServer().getScheduler().runTask(skyblock, new Runnable() {
@Override
public void run() {
for (HologramType hologramTypeList : HologramType.values()) {
Hologram hologram = hologramManager.getHologram(hologramTypeList);
if (hologram != null) {
hologramManager.removeHologram(hologram);
}
hologramManager.spawnHologram(hologramTypeList);
}
}
});
messageManager.sendMessage(player, configLoad.getString("Command.Island.Admin.Reload.Reloaded.Message"));
soundManager.playSound(player, Sounds.ANVIL_USE.bukkitSound(), 1.0F, 1.0F);
} else {

View File

@ -0,0 +1,123 @@
package me.goodandevil.skyblock.command.commands.admin;
import java.io.File;
import java.io.IOException;
import org.apache.commons.lang3.text.WordUtils;
import org.bukkit.Bukkit;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player;
import me.goodandevil.skyblock.SkyBlock;
import me.goodandevil.skyblock.command.CommandManager;
import me.goodandevil.skyblock.command.SubCommand;
import me.goodandevil.skyblock.command.CommandManager.Type;
import me.goodandevil.skyblock.config.FileManager;
import me.goodandevil.skyblock.config.FileManager.Config;
import me.goodandevil.skyblock.hologram.Hologram;
import me.goodandevil.skyblock.hologram.HologramManager;
import me.goodandevil.skyblock.hologram.HologramType;
import me.goodandevil.skyblock.message.MessageManager;
import me.goodandevil.skyblock.sound.SoundManager;
import me.goodandevil.skyblock.utils.version.Sounds;
public class RemoveHologramCommand extends SubCommand {
private final SkyBlock skyblock;
private String info;
public RemoveHologramCommand(SkyBlock skyblock) {
this.skyblock = skyblock;
}
@Override
public void onCommand(Player player, String[] args) {
HologramManager hologramManager = skyblock.getHologramManager();
MessageManager messageManager = skyblock.getMessageManager();
SoundManager soundManager = skyblock.getSoundManager();
FileManager fileManager = skyblock.getFileManager();
Config config = fileManager.getConfig(new File(skyblock.getDataFolder(), "language.yml"));
FileConfiguration configLoad = config.getFileConfiguration();
if (player.hasPermission("skyblock.admin.removehologram") || player.hasPermission("skyblock.admin.*") || player.hasPermission("skyblock.*")) {
if (args.length == 1) {
HologramType hologramType = null;
if (args[0].equalsIgnoreCase("Level")) {
hologramType = HologramType.Level;
} else if (args[0].equalsIgnoreCase("Votes")) {
hologramType = HologramType.Votes;
}
if (hologramType != null) {
Config locationsConfig = fileManager.getConfig(new File(skyblock.getDataFolder(), "locations.yml"));
FileConfiguration locationsConfigLoad = locationsConfig.getFileConfiguration();
if (locationsConfigLoad.getString("Location.Hologram.Leaderboard." + hologramType.name()) == null) {
messageManager.sendMessage(player, configLoad.getString("Command.Island.Admin.RemoveHologram.Set.Message"));
soundManager.playSound(player, Sounds.ANVIL_LAND.bukkitSound(), 1.0F, 1.0F);
} else {
locationsConfigLoad.set("Location.Hologram.Leaderboard." + hologramType.name(), null);
try {
locationsConfigLoad.save(locationsConfig.getFile());
} catch (IOException e) {
e.printStackTrace();
}
Bukkit.getServer().getScheduler().runTask(skyblock, new Runnable() {
@Override
public void run() {
HologramType hologramType = HologramType.valueOf(WordUtils.capitalize(args[0].toLowerCase()));
Hologram hologram = hologramManager.getHologram(hologramType);
if (hologram != null) {
hologramManager.removeHologram(hologram);
}
}
});
messageManager.sendMessage(player, configLoad.getString("Command.Island.Admin.RemoveHologram.Removed.Message").replace("%type", hologramType.name()));
soundManager.playSound(player, Sounds.NOTE_PLING.bukkitSound(), 1.0F, 1.0F);
}
return;
}
}
messageManager.sendMessage(player, configLoad.getString("Command.Island.Admin.RemoveHologram.Invalid.Message"));
soundManager.playSound(player, Sounds.ANVIL_LAND.bukkitSound(), 1.0F, 1.0F);
} else {
messageManager.sendMessage(player, configLoad.getString("Command.Island.Admin.RemoveHologram.Permission.Message"));
soundManager.playSound(player, Sounds.ANVIL_LAND.bukkitSound(), 1.0F, 1.0F);
}
}
@Override
public String getName() {
return "removehologram";
}
@Override
public String getInfo() {
return info;
}
@Override
public SubCommand setInfo(String info) {
this.info = info;
return this;
}
@Override
public String[] getAliases() {
return new String[0];
}
@Override
public Type getType() {
return CommandManager.Type.Admin;
}
}

View File

@ -0,0 +1,112 @@
package me.goodandevil.skyblock.command.commands.admin;
import java.io.File;
import org.apache.commons.lang3.text.WordUtils;
import org.bukkit.Bukkit;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player;
import me.goodandevil.skyblock.SkyBlock;
import me.goodandevil.skyblock.command.CommandManager;
import me.goodandevil.skyblock.command.SubCommand;
import me.goodandevil.skyblock.command.CommandManager.Type;
import me.goodandevil.skyblock.config.FileManager;
import me.goodandevil.skyblock.config.FileManager.Config;
import me.goodandevil.skyblock.hologram.Hologram;
import me.goodandevil.skyblock.hologram.HologramManager;
import me.goodandevil.skyblock.hologram.HologramType;
import me.goodandevil.skyblock.message.MessageManager;
import me.goodandevil.skyblock.sound.SoundManager;
import me.goodandevil.skyblock.utils.version.Sounds;
public class SetHologramCommand extends SubCommand {
private final SkyBlock skyblock;
private String info;
public SetHologramCommand(SkyBlock skyblock) {
this.skyblock = skyblock;
}
@Override
public void onCommand(Player player, String[] args) {
HologramManager hologramManager = skyblock.getHologramManager();
MessageManager messageManager = skyblock.getMessageManager();
SoundManager soundManager = skyblock.getSoundManager();
FileManager fileManager = skyblock.getFileManager();
Config config = fileManager.getConfig(new File(skyblock.getDataFolder(), "language.yml"));
FileConfiguration configLoad = config.getFileConfiguration();
if (player.hasPermission("skyblock.admin.sethologram") || player.hasPermission("skyblock.admin.*") || player.hasPermission("skyblock.*")) {
if (args.length == 1) {
HologramType hologramType = null;
if (args[0].equalsIgnoreCase("Level")) {
hologramType = HologramType.Level;
} else if (args[0].equalsIgnoreCase("Votes")) {
hologramType = HologramType.Votes;
}
if (hologramType != null) {
if (hologramType == HologramType.Level || hologramType == HologramType.Votes) {
fileManager.setLocation(fileManager.getConfig(new File(skyblock.getDataFolder(), "locations.yml")), "Location.Hologram.Leaderboard." + hologramType.name(), player.getLocation(), true);
}
Bukkit.getServer().getScheduler().runTask(skyblock, new Runnable() {
@Override
public void run() {
HologramType hologramType = HologramType.valueOf(WordUtils.capitalize(args[0].toLowerCase()));
Hologram hologram = hologramManager.getHologram(hologramType);
if (hologram != null) {
hologramManager.removeHologram(hologram);
}
hologramManager.spawnHologram(hologramType);
}
});
messageManager.sendMessage(player, configLoad.getString("Command.Island.Admin.SetHologram.Set.Message").replace("%type", hologramType.name()));
soundManager.playSound(player, Sounds.NOTE_PLING.bukkitSound(), 1.0F, 1.0F);
return;
}
}
messageManager.sendMessage(player, configLoad.getString("Command.Island.Admin.SetHologram.Invalid.Message"));
soundManager.playSound(player, Sounds.ANVIL_LAND.bukkitSound(), 1.0F, 1.0F);
} else {
messageManager.sendMessage(player, configLoad.getString("Command.Island.Admin.SetHologram.Permission.Message"));
soundManager.playSound(player, Sounds.ANVIL_LAND.bukkitSound(), 1.0F, 1.0F);
}
}
@Override
public String getName() {
return "sethologram";
}
@Override
public String getInfo() {
return info;
}
@Override
public SubCommand setInfo(String info) {
this.info = info;
return this;
}
@Override
public String[] getAliases() {
return new String[0];
}
@Override
public Type getType() {
return CommandManager.Type.Admin;
}
}

View File

@ -0,0 +1,75 @@
package me.goodandevil.skyblock.hologram;
import java.util.ArrayList;
import java.util.List;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.entity.ArmorStand;
import org.bukkit.entity.EntityType;
public class Hologram {
private List<ArmorStand> holograms = new ArrayList<>();
private HologramType type;
private Location location;
public Hologram(HologramType type, Location location, List<String> lines) {
this.type = type;
this.location = location;
for (String lineList : lines) {
addLine(lineList);
}
}
public void addLine(String text) {
ArmorStand as = (ArmorStand) location.getWorld().spawnEntity(location.clone().add(0.0D, getHeight() + getHeightIncrement(), 0.0D), EntityType.ARMOR_STAND);
as.setVisible(false);
as.setGravity(false);
as.setCustomName(ChatColor.translateAlternateColorCodes('&', text));
as.setCustomNameVisible(true);
holograms.add(as);
}
public void setLine(int index, String text) {
if (index < holograms.size()) {
ArmorStand as = holograms.get(index);
if (!as.isDead()) {
as.setCustomName(ChatColor.translateAlternateColorCodes('&', text));
as.setCustomNameVisible(true);
}
}
}
public void removeLine(int index) {
if (index < holograms.size()) {
ArmorStand as = holograms.get(index);
if (!as.isDead()) {
as.remove();
}
holograms.remove(index);
}
}
public double getHeight() {
return -2.0D + (holograms.size() * getHeightIncrement());
}
public double getHeightIncrement() {
return 0.35;
}
public HologramType getType() {
return type;
}
public List<ArmorStand> getHolograms() {
return holograms;
}
}

View File

@ -0,0 +1,260 @@
package me.goodandevil.skyblock.hologram;
import java.io.File;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.ArmorStand;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
import me.goodandevil.skyblock.SkyBlock;
import me.goodandevil.skyblock.config.FileManager;
import me.goodandevil.skyblock.config.FileManager.Config;
import me.goodandevil.skyblock.island.Level;
import me.goodandevil.skyblock.leaderboard.Leaderboard;
import me.goodandevil.skyblock.leaderboard.LeaderboardManager;
import me.goodandevil.skyblock.message.MessageManager;
import me.goodandevil.skyblock.utils.NumberUtil;
import me.goodandevil.skyblock.utils.OfflinePlayer;
import me.goodandevil.skyblock.utils.world.LocationUtil;
import me.goodandevil.skyblock.visit.Visit;
public class HologramManager {
private final SkyBlock skyblock;
private List<Hologram> hologramStorage = new ArrayList<>();
public HologramManager(SkyBlock skyblock) {
this.skyblock = skyblock;
FileManager fileManager = skyblock.getFileManager();
Bukkit.getServer().getScheduler().runTaskLater(skyblock, new Runnable() {
@Override
public void run() {
removeWorldHolograms();
for (HologramType hologramTypeList : HologramType.values()) {
if (hologramTypeList == HologramType.Level || hologramTypeList == HologramType.Votes) {
if (hologramTypeList == HologramType.Votes) {
if (!fileManager.getConfig(new File(skyblock.getDataFolder(), "config.yml")).getFileConfiguration().getBoolean("Island.Visitor.Vote")) {
continue;
}
}
spawnHologram(hologramTypeList);
}
}
}
}, 200L);
}
public void onDisable() {
removeHolograms();
}
public void spawnHologram(HologramType type, Location location, List<String> lines) {
hologramStorage.add(new Hologram(type, location, lines));
}
public void spawnHologram(HologramType type) {
LeaderboardManager leaderboardManager = skyblock.getLeaderboardManager();
MessageManager messageManager = skyblock.getMessageManager();
FileManager fileManager = skyblock.getFileManager();
Config locationsConfig = fileManager.getConfig(new File(skyblock.getDataFolder(), "locations.yml"));
FileConfiguration locationsConfigLoad = locationsConfig.getFileConfiguration();
FileConfiguration languageConfigLoad = fileManager.getConfig(new File(skyblock.getDataFolder(), "language.yml")).getFileConfiguration();
if (locationsConfigLoad.getString("Location.Hologram.Leaderboard." + type) != null) {
List<Leaderboard> leaderboardPlayers = new ArrayList<>();
List<String> hologramLines = new ArrayList<>();
if (type == HologramType.Level) {
leaderboardPlayers.addAll(leaderboardManager.getLeaderboard(Leaderboard.Type.Level));
} else if (type == HologramType.Votes) {
leaderboardPlayers.addAll(leaderboardManager.getLeaderboard(Leaderboard.Type.Votes));
}
hologramLines.add(messageManager.replaceMessage(null, languageConfigLoad.getString("Hologram.Leaderboard." + type.name() + ".Header")));
for (int i = 0; i < 10; i++) {
if (i < leaderboardPlayers.size()) {
Leaderboard leaderboard = leaderboardPlayers.get(i);
Visit visit = leaderboard.getVisit();
Player targetPlayer = Bukkit.getServer().getPlayer(visit.getOwnerUUID());
String islandOwnerName;
if (targetPlayer == null) {
islandOwnerName = new OfflinePlayer(visit.getOwnerUUID()).getName();
} else {
islandOwnerName = targetPlayer.getName();
}
if (type == HologramType.Level) {
Level level = visit.getLevel();
hologramLines.add(messageManager.replaceMessage(null, languageConfigLoad.getString("Hologram.Leaderboard." + type.name() + ".Claimed").replace("%position", "" + (i+1)).replace("%player", islandOwnerName).replace("%level", NumberUtil.formatNumber(level.getLevel())).replace("%points", NumberUtil.formatNumber(level.getPoints()))));
} else if (type == HologramType.Votes) {
hologramLines.add(messageManager.replaceMessage(null, languageConfigLoad.getString("Hologram.Leaderboard." + type.name() + ".Claimed").replace("%position", "" + (i+1)).replace("%player", islandOwnerName).replace("%votes", "" + NumberUtil.formatNumber(visit.getVoters().size()))));
}
} else {
hologramLines.add(messageManager.replaceMessage(null, languageConfigLoad.getString("Hologram.Leaderboard." + type.name() + ".Unclaimed").replace("%position", "" + (i+1))));
}
}
String hologramFooter = languageConfigLoad.getString("Hologram.Leaderboard." + type.name() + ".Footer");
if (!hologramFooter.isEmpty()) {
hologramLines.add(messageManager.replaceMessage(null, hologramFooter));
}
Collections.reverse(hologramLines);
spawnHologram(type, skyblock.getFileManager().getLocation(locationsConfig, "Location.Hologram.Leaderboard." + type, true), hologramLines);
}
}
public void removeHologram(Hologram hologram) {
if (hologramStorage.contains(hologram)) {
List<ArmorStand> holograms = hologram.getHolograms();
for (Iterator<ArmorStand> it = holograms.iterator(); it.hasNext(); ) {
it.next().remove();
}
hologramStorage.remove(hologram);
}
}
public void removeHolograms() {
for (Hologram hologramList : hologramStorage) {
List<ArmorStand> holograms = hologramList.getHolograms();
for (Iterator<ArmorStand> it = holograms.iterator(); it.hasNext(); ) {
it.next().remove();
}
}
}
public void removeWorldHolograms() {
FileManager fileManager = skyblock.getFileManager();
List<Location> locations = new ArrayList<>();
Config config = fileManager.getConfig(new File(skyblock.getDataFolder(), "locations.yml"));
FileConfiguration configLoad = config.getFileConfiguration();
for (HologramType hologramTypeList : HologramType.values()) {
if (hologramTypeList == HologramType.Level || hologramTypeList == HologramType.Votes) {
if (configLoad.getString("Location.Hologram.Leaderboard." + hologramTypeList.name()) != null) {
locations.add(fileManager.getLocation(config, "Location.Hologram.Leaderboard." + hologramTypeList.name(), true));
}
}
}
for (World worldList : Bukkit.getWorlds()) {
List<Entity> entities = worldList.getEntities();
for (Iterator<Entity> it = entities.iterator(); it.hasNext(); ) {
Entity entity = it.next();
if (entity instanceof ArmorStand) {
for (Location locationList : locations) {
if (LocationUtil.isLocationAtLocationRadius(entity.getLocation(), locationList, 1)) {
entity.remove();
}
}
}
}
}
}
public Hologram getHologram(HologramType type) {
for (Hologram hologramList : hologramStorage) {
if (hologramList.getType() == type) {
return hologramList;
}
}
return null;
}
public boolean hasHologram(HologramType type) {
for (Hologram hologramList : hologramStorage) {
if (hologramList.getType() == type) {
return true;
}
}
return false;
}
public void resetHologram() {
LeaderboardManager leaderboardManager = skyblock.getLeaderboardManager();
MessageManager messageManager = skyblock.getMessageManager();
FileManager fileManager = skyblock.getFileManager();
FileConfiguration configLoad = fileManager.getConfig(new File(skyblock.getDataFolder(), "language.yml")).getFileConfiguration();
for (HologramType hologramTypeList : HologramType.values()) {
if (hologramTypeList == HologramType.Level || hologramTypeList == HologramType.Votes) {
if (hologramTypeList == HologramType.Votes) {
if (!fileManager.getConfig(new File(skyblock.getDataFolder(), "config.yml")).getFileConfiguration().getBoolean("Island.Visitor.Vote")) {
continue;
}
}
Hologram hologram;
if (hasHologram(hologramTypeList)) {
hologram = getHologram(hologramTypeList);
} else {
continue;
}
List<Leaderboard> leaderboardPlayers = new ArrayList<>();
if (hologramTypeList == HologramType.Level) {
leaderboardPlayers.addAll(leaderboardManager.getLeaderboard(Leaderboard.Type.Level));
} else if (hologramTypeList == HologramType.Votes) {
leaderboardPlayers.addAll(leaderboardManager.getLeaderboard(Leaderboard.Type.Votes));
}
for (int i = 0; i < 10; i++) {
int hologramLine = 10 - i;
if (i < leaderboardPlayers.size()) {
Leaderboard leaderboard = leaderboardPlayers.get(i);
Visit visit = leaderboard.getVisit();
Player targetPlayer = Bukkit.getServer().getPlayer(visit.getOwnerUUID());
String islandOwnerName;
if (targetPlayer == null) {
islandOwnerName = new OfflinePlayer(visit.getOwnerUUID()).getName();
} else {
islandOwnerName = targetPlayer.getName();
}
if (hologramTypeList == HologramType.Level) {
Level level = visit.getLevel();
hologram.setLine(hologramLine, messageManager.replaceMessage(null, configLoad.getString("Hologram.Leaderboard." + hologramTypeList.name() + ".Claimed").replace("%position", "" + (i+1)).replace("%player", islandOwnerName).replace("%level", NumberUtil.formatNumber(level.getLevel())).replace("%points", NumberUtil.formatNumber(level.getPoints()))));
} else if (hologramTypeList == HologramType.Votes) {
hologram.setLine(hologramLine, messageManager.replaceMessage(null, configLoad.getString("Hologram.Leaderboard." + hologramTypeList.name() + ".Claimed").replace("%position", "" + (i+1)).replace("%player", islandOwnerName).replace("%votes", "" + NumberUtil.formatNumber(visit.getVoters().size()))));
}
} else {
hologram.setLine(hologramLine, messageManager.replaceMessage(null, configLoad.getString("Hologram.Leaderboard." + hologramTypeList.name() + ".Unclaimed").replace("%position", "" + (i+1))));
}
}
}
}
}
}

View File

@ -0,0 +1,8 @@
package me.goodandevil.skyblock.hologram;
public enum HologramType {
Level,
Votes;
}

View File

@ -17,5 +17,7 @@ public class LeaderboardTask extends BukkitRunnable {
LeaderboardManager leaderboardManager = skyblock.getLeaderboardManager();
leaderboardManager.clearLeaderboard();
leaderboardManager.resetLeaderboard();
skyblock.getHologramManager().resetHologram();
}
}

View File

@ -6,6 +6,7 @@ import java.util.List;
import java.util.UUID;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.block.BlockFace;
import org.bukkit.configuration.file.FileConfiguration;
@ -22,6 +23,7 @@ import org.bukkit.event.block.BlockPistonRetractEvent;
import org.bukkit.event.block.BlockPlaceEvent;
import org.bukkit.event.block.BlockSpreadEvent;
import org.bukkit.event.block.LeavesDecayEvent;
import org.bukkit.event.block.SignChangeEvent;
import org.bukkit.material.Crops;
import me.goodandevil.skyblock.SkyBlock;
@ -47,6 +49,11 @@ public class Block implements Listener {
public Block(SkyBlock skyblock) {
this.skyblock = skyblock;
}
@EventHandler
public void onSignChange(SignChangeEvent event) {
event.setLine(0, ChatColor.RED + "test");
}
@EventHandler
public void onBlockBreak(BlockBreakEvent event) {

View File

@ -1,6 +1,7 @@
package me.goodandevil.skyblock.placeholder;
import java.io.File;
import java.util.List;
import java.util.UUID;
import org.bukkit.Bukkit;
@ -14,144 +15,179 @@ import me.goodandevil.skyblock.SkyBlock;
import me.goodandevil.skyblock.config.FileManager.Config;
import me.goodandevil.skyblock.island.Island;
import me.goodandevil.skyblock.island.IslandManager;
import me.goodandevil.skyblock.island.Level;
import me.goodandevil.skyblock.island.Role;
import me.goodandevil.skyblock.leaderboard.Leaderboard;
import me.goodandevil.skyblock.leaderboard.LeaderboardManager;
import me.goodandevil.skyblock.utils.NumberUtil;
import me.goodandevil.skyblock.utils.OfflinePlayer;
import me.goodandevil.skyblock.visit.Visit;
public class EZPlaceholder extends PlaceholderExpansion {
private final SkyBlock skyblock;
public EZPlaceholder(SkyBlock skyblock) {
this.skyblock = skyblock;
private final SkyBlock skyblock;
public EZPlaceholder(SkyBlock skyblock) {
this.skyblock = skyblock;
}
public String getIdentifier() {
return "skyblock";
}
@Override
public String getIdentifier() {
return "skyblock";
}
@Override
public String getPlugin() {
return null;
return null;
}
@Override
public String getAuthor() {
return skyblock.getDescription().getAuthors().get(0);
}
@Override
public String getVersion() {
return skyblock.getDescription().getVersion();
}
public String onPlaceholderRequest(Player player, String identifier) {
if (identifier.equalsIgnoreCase("islands")) {
return "" + skyblock.getVisitManager().getIslands().size();
}
if (player == null) {
return "";
}
IslandManager islandManager = skyblock.getIslandManager();
Config config = skyblock.getFileManager().getConfig(new File(skyblock.getDataFolder(), "language.yml"));
FileConfiguration configLoad = config.getFileConfiguration();
if (islandManager.hasIsland(player)) {
Island island = islandManager.getIsland(skyblock.getPlayerDataManager().getPlayerData(player).getOwner());
switch (identifier) {
case "island_size":
return value(configLoad, "Placeholder.skyblock_island_size.Non-empty.Message", island.getSize());
case "island_radius":
return value(configLoad, "Placeholder.skyblock_island_radius.Non-empty.Message", island.getSize());
case "island_level":
return value(configLoad, "Placeholder.skyblock_island_level.Non-empty.Message", island.getLevel().getLevel());
case "island_points":
return value(configLoad, "Placeholder.skyblock_island_points.Non-empty.Message", island.getLevel().getPoints());
case "island_biome":
return value(configLoad, "Placeholder.skyblock_island_biome.Non-empty.Message", island.getBiomeName());
case "island_time":
return value(configLoad, "Placeholder.skyblock_island_time.Non-empty.Message", island.getTime());
case "island_weather":
return value(configLoad, "Placeholder.skyblock_island_weather.Non-empty.Message", island.getWeatherName());
case "island_bans":
return value(configLoad, "Placeholder.skyblock_island_bans.Non-empty.Message", island.getBan().getBans().size());
case "island_members_total":
return value(configLoad, "Placeholder.skyblock_island_members_total.Non-empty.Message", (island.getRole(Role.Member).size() + island.getRole(Role.Operator).size() + 1));
case "island_members":
return value(configLoad, "Placeholder.skyblock_island_members.Non-empty.Message", island.getRole(Role.Member).size());
case "island_operators":
return value(configLoad, "Placeholder.skyblock_island_operators.Non-empty.Message", island.getRole(Role.Operator).size());
case "island_visitors":
return value(configLoad, "Placeholder.skyblock_island_visitors.Non-empty.Message", island.getVisitors().size());
case "island_role":
for (Role roleList : Role.values()) {
if (island.isRole(roleList, player.getUniqueId())) {
return value(configLoad, "Placeholder.skyblock_island_role.Non-empty.Message", roleList.name());
}
}
case "island_owner":
UUID owner = island.getOwnerUUID();
Player target = Bukkit.getServer().getPlayer(owner);
if (target == null) {
return value(configLoad, "Placeholder.skyblock_island_owner.Non-empty.Other.Message", Bukkit.getServer().getOfflinePlayer(owner).getName());
}
if (target.getName().equals(player.getName())) {
return value(configLoad, "Placeholder.skyblock_island_owner.Non-empty.Yourself.Message", target.getName());
} else {
return value(configLoad, "Placeholder.skyblock_island_owner.Non-empty.Other.Message", target.getName());
}
}
return null;
}
switch (identifier) {
case "island_size":
return value(configLoad, "Placeholder.skyblock_island_size.Empty.Message");
case "island_radius":
return value(configLoad, "Placeholder.skyblock_island_radius.Empty.Message");
case "island_level":
return value(configLoad, "Placeholder.skyblock_island_level.Empty.Message");
case "island_points":
return value(configLoad, "Placeholder.skyblock_island_points.Empty.Message");
case "island_role":
return value(configLoad, "Placeholder.skyblock_island_role.Empty.Message");
case "island_owner":
return value(configLoad, "Placeholder.skyblock_island_owner.Empty.Message");
case "island_biome":
return value(configLoad, "Placeholder.skyblock_island_biome.Empty.Message");
case "island_time":
return value(configLoad, "Placeholder.skyblock_island_time.Empty.Message");
case "island_weather":
return value(configLoad, "Placeholder.skyblock_island_weather.Empty.Message");
case "island_bans":
return value(configLoad, "Placeholder.skyblock_island_bans.Empty.Message");
case "island_members_total":
return value(configLoad, "Placeholder.skyblock_island_members_total.Empty.Message");
case "island_members":
return value(configLoad, "Placeholder.skyblock_island_members.Empty.Message");
case "island_operators":
return value(configLoad, "Placeholder.skyblock_island_operators.Empty.Message");
case "island_visitors":
return value(configLoad, "Placeholder.skyblock_island_visitors.Empty.Message");
public String getAuthor() {
return skyblock.getDescription().getAuthors().get(0);
}
public String getVersion() {
return skyblock.getDescription().getVersion();
}
public String onPlaceholderRequest(Player player, String identifier) {
LeaderboardManager leaderboardManager = skyblock.getLeaderboardManager();
IslandManager islandManager = skyblock.getIslandManager();
Config config = skyblock.getFileManager().getConfig(new File(skyblock.getDataFolder(), "language.yml"));
FileConfiguration configLoad = config.getFileConfiguration();
List<Leaderboard> leaderboardLevelPlayers = leaderboardManager.getLeaderboard(Leaderboard.Type.Level);
List<Leaderboard> leaderboardVotesPlayers = leaderboardManager.getLeaderboard(Leaderboard.Type.Votes);
if (identifier.equalsIgnoreCase("islands")) {
return "" + skyblock.getVisitManager().getIslands().size();
} else {
for (int i = 0; i < 10; i++) {
if (identifier.equalsIgnoreCase("skyblock_leaderboard_votes_" + (i+1))) {
if (i < leaderboardVotesPlayers.size()) {
Leaderboard leaderboard = leaderboardVotesPlayers.get(i);
Visit visit = leaderboard.getVisit();
Player targetPlayer = Bukkit.getServer().getPlayer(visit.getOwnerUUID());
String islandOwnerName;
if (targetPlayer == null) {
islandOwnerName = new OfflinePlayer(visit.getOwnerUUID()).getName();
} else {
islandOwnerName = targetPlayer.getName();
}
return ChatColor.translateAlternateColorCodes('&', configLoad.getString("Placeholder.skyblock_leaderboard_votes.Non-empty.Message").replace("%position", "" + (i+1)).replace("%player", islandOwnerName).replace("%votes", NumberUtil.formatNumber(visit.getVoters().size())));
}
return ChatColor.translateAlternateColorCodes('&', configLoad.getString("Placeholder.skyblock_leaderboard_votes.Empty.Message"));
} else if (identifier.equalsIgnoreCase("skyblock_leaderboard_level_" + (i+1))) {
if (i < leaderboardLevelPlayers.size()) {
Leaderboard leaderboard = leaderboardLevelPlayers.get(i);
Visit visit = leaderboard.getVisit();
Level level = visit.getLevel();
Player targetPlayer = Bukkit.getServer().getPlayer(visit.getOwnerUUID());
String islandOwnerName;
if (targetPlayer == null) {
islandOwnerName = new OfflinePlayer(visit.getOwnerUUID()).getName();
} else {
islandOwnerName = targetPlayer.getName();
}
return ChatColor.translateAlternateColorCodes('&', configLoad.getString("Placeholder.skyblock_leaderboard_level.Non-empty.Message").replace("%position", "" + (i+1)).replace("%player", islandOwnerName).replace("%level", NumberUtil.formatNumber(level.getLevel())).replace("%points", NumberUtil.formatNumber(level.getPoints())));
}
return ChatColor.translateAlternateColorCodes('&', configLoad.getString("Placeholder.skyblock_leaderboard_level.Empty.Message"));
}
}
}
if(player == null){
return "";
}
if (islandManager.hasIsland(player)) {
Island island = islandManager.getIsland(skyblock.getPlayerDataManager().getPlayerData(player).getOwner());
if (identifier.equalsIgnoreCase("island_size")) {
return ChatColor.translateAlternateColorCodes('&', configLoad.getString("Placeholder.skyblock_island_size.Non-empty.Message").replace("%placeholder", "" + island.getSize()));
} else if (identifier.equalsIgnoreCase("island_radius")) {
return ChatColor.translateAlternateColorCodes('&', configLoad.getString("Placeholder.skyblock_island_radius.Non-empty.Message").replace("%placeholder", "" + island.getRadius()));
} else if (identifier.equalsIgnoreCase("island_level")) {
return ChatColor.translateAlternateColorCodes('&', configLoad.getString("Placeholder.skyblock_island_level.Non-empty.Message").replace("%placeholder", "" + island.getLevel().getLevel()));
} else if (identifier.equalsIgnoreCase("island_points")) {
return ChatColor.translateAlternateColorCodes('&', configLoad.getString("Placeholder.skyblock_island_points.Non-empty.Message").replace("%placeholder", "" + island.getLevel().getPoints()));
} else if (identifier.equalsIgnoreCase("island_role")) {
for (Role roleList : Role.values()) {
if (island.isRole(roleList, player.getUniqueId())) {
return ChatColor.translateAlternateColorCodes('&', configLoad.getString("Placeholder.skyblock_island_role.Non-empty.Message").replace("%placeholder", roleList.name()));
}
}
} else if (identifier.equalsIgnoreCase("island_owner")) {
UUID islandOwnerUUID = island.getOwnerUUID();
Player targetPlayer = Bukkit.getServer().getPlayer(islandOwnerUUID);
if (targetPlayer == null) {
return ChatColor.translateAlternateColorCodes('&', configLoad.getString("Placeholder.skyblock_island_owner.Non-empty.Other.Message").replace("%placeholder", Bukkit.getServer().getOfflinePlayer(islandOwnerUUID).getName()));
} else {
if (targetPlayer.getName().equals(player.getName())) {
return ChatColor.translateAlternateColorCodes('&', configLoad.getString("Placeholder.skyblock_island_owner.Non-empty.Yourself.Message").replace("%placeholder", targetPlayer.getName()));
} else {
return ChatColor.translateAlternateColorCodes('&', configLoad.getString("Placeholder.skyblock_island_owner.Non-empty.Other.Message").replace("%placeholder", targetPlayer.getName()));
}
}
} else if (identifier.equalsIgnoreCase("island_biome")) {
return ChatColor.translateAlternateColorCodes('&', configLoad.getString("Placeholder.skyblock_island_biome.Non-empty.Message").replace("%placeholder", island.getBiomeName()));
} else if (identifier.equalsIgnoreCase("island_time")) {
return ChatColor.translateAlternateColorCodes('&', configLoad.getString("Placeholder.skyblock_island_time.Non-empty.Message").replace("%placeholder", "" + island.getTime()));
} else if (identifier.equalsIgnoreCase("island_weather")) {
return ChatColor.translateAlternateColorCodes('&', configLoad.getString("Placeholder.skyblock_island_weather.Non-empty.Message").replace("%placeholder", "" + island.getWeatherName()));
} else if (identifier.equalsIgnoreCase("island_bans")) {
return ChatColor.translateAlternateColorCodes('&', configLoad.getString("Placeholder.skyblock_island_bans.Non-empty.Message").replace("%placeholder", "" + island.getBan().getBans().size()));
} else if (identifier.equalsIgnoreCase("island_members_total")) {
return ChatColor.translateAlternateColorCodes('&', configLoad.getString("Placeholder.skyblock_island_members_total.Non-empty.Message").replace("%placeholder", "" + (island.getRole(Role.Member).size() + island.getRole(Role.Operator).size() + 1)));
} else if (identifier.equalsIgnoreCase("island_members")) {
return ChatColor.translateAlternateColorCodes('&', configLoad.getString("Placeholder.skyblock_island_members.Non-empty.Message").replace("%placeholder", "" + island.getRole(Role.Member).size()));
} else if (identifier.equalsIgnoreCase("island_operators")) {
return ChatColor.translateAlternateColorCodes('&', configLoad.getString("Placeholder.skyblock_island_operators.Non-empty.Message").replace("%placeholder", "" + island.getRole(Role.Operator).size()));
} else if (identifier.equalsIgnoreCase("island_visitors")) {
return ChatColor.translateAlternateColorCodes('&', configLoad.getString("Placeholder.skyblock_island_visitors.Non-empty.Message").replace("%placeholder", "" + island.getVisitors().size()));
}
return null;
}
if (identifier.equalsIgnoreCase("island_size")) {
return ChatColor.translateAlternateColorCodes('&', configLoad.getString("Placeholder.skyblock_island_size.Empty.Message"));
} else if (identifier.equalsIgnoreCase("island_radius")) {
return ChatColor.translateAlternateColorCodes('&', configLoad.getString("Placeholder.skyblock_island_radius.Empty.Message"));
} else if (identifier.equalsIgnoreCase("island_level")) {
return ChatColor.translateAlternateColorCodes('&', configLoad.getString("Placeholder.skyblock_island_level.Empty.Message"));
} else if (identifier.equalsIgnoreCase("island_points")) {
return ChatColor.translateAlternateColorCodes('&', configLoad.getString("Placeholder.skyblock_island_points.Empty.Message"));
} else if (identifier.equalsIgnoreCase("island_role")) {
return ChatColor.translateAlternateColorCodes('&', configLoad.getString("Placeholder.skyblock_island_role.Empty.Message"));
} else if (identifier.equalsIgnoreCase("island_owner")) {
return ChatColor.translateAlternateColorCodes('&', configLoad.getString("Placeholder.skyblock_island_owner.Empty.Message"));
} else if (identifier.equalsIgnoreCase("island_biome")) {
return ChatColor.translateAlternateColorCodes('&', configLoad.getString("Placeholder.skyblock_island_biome.Empty.Message"));
} else if (identifier.equalsIgnoreCase("island_time")) {
return ChatColor.translateAlternateColorCodes('&', configLoad.getString("Placeholder.skyblock_island_time.Empty.Message"));
} else if (identifier.equalsIgnoreCase("island_weather")) {
return ChatColor.translateAlternateColorCodes('&', configLoad.getString("Placeholder.skyblock_island_weather.Empty.Message"));
} else if (identifier.equalsIgnoreCase("island_bans")) {
return ChatColor.translateAlternateColorCodes('&', configLoad.getString("Placeholder.skyblock_island_bans.Empty.Message"));
} else if (identifier.equalsIgnoreCase("island_members_total")) {
return ChatColor.translateAlternateColorCodes('&', configLoad.getString("Placeholder.skyblock_island_members_total.Empty.Message"));
} else if (identifier.equalsIgnoreCase("island_members")) {
return ChatColor.translateAlternateColorCodes('&', configLoad.getString("Placeholder.skyblock_island_members.Empty.Message"));
} else if (identifier.equalsIgnoreCase("island_operators")) {
return ChatColor.translateAlternateColorCodes('&', configLoad.getString("Placeholder.skyblock_island_operators.Empty.Message"));
} else if (identifier.equalsIgnoreCase("island_visitors")) {
return ChatColor.translateAlternateColorCodes('&', configLoad.getString("Placeholder.skyblock_island_visitors.Empty.Message"));
}
return null;
}
private String color(String msg) {
return ChatColor.translateAlternateColorCodes('&', msg);
}
private String value(FileConfiguration configLoad, String string, Object value) {
return color(configLoad.getString(string).replace("%placeholder", (CharSequence) value));
}
private String value(FileConfiguration configLoad, String string) {
return color(configLoad.getString(string));
}
}

View File

@ -1,6 +1,7 @@
package me.goodandevil.skyblock.placeholder;
import java.io.File;
import java.util.List;
import java.util.UUID;
import org.bukkit.Bukkit;
@ -16,7 +17,13 @@ import me.goodandevil.skyblock.SkyBlock;
import me.goodandevil.skyblock.config.FileManager.Config;
import me.goodandevil.skyblock.island.Island;
import me.goodandevil.skyblock.island.IslandManager;
import me.goodandevil.skyblock.island.Level;
import me.goodandevil.skyblock.island.Role;
import me.goodandevil.skyblock.leaderboard.Leaderboard;
import me.goodandevil.skyblock.leaderboard.LeaderboardManager;
import me.goodandevil.skyblock.utils.NumberUtil;
import me.goodandevil.skyblock.utils.OfflinePlayer;
import me.goodandevil.skyblock.visit.Visit;
public class MVdWPlaceholder {
@ -27,17 +34,74 @@ public class MVdWPlaceholder {
}
public void register() {
LeaderboardManager leaderboardManager = skyblock.getLeaderboardManager();
IslandManager islandManager = skyblock.getIslandManager();
Config config = skyblock.getFileManager().getConfig(new File(skyblock.getDataFolder(), "language.yml"));
FileConfiguration configLoad = config.getFileConfiguration();
List<Leaderboard> leaderboardLevelPlayers = leaderboardManager.getLeaderboard(Leaderboard.Type.Level);
List<Leaderboard> leaderboardVotesPlayers = leaderboardManager.getLeaderboard(Leaderboard.Type.Votes);
PlaceholderAPI.registerPlaceholder(skyblock, "skyblock_islands", new PlaceholderReplacer() {
@Override
public String onPlaceholderReplace(PlaceholderReplaceEvent event) {
return "" + skyblock.getVisitManager().getIslands().size();
}
});
for (int i = 0; i < 10; i++) {
PlaceholderAPI.registerPlaceholder(skyblock, "skyblock_leaderboard_votes_" + (i+1), new PlaceholderReplacer() {
@Override
public String onPlaceholderReplace(PlaceholderReplaceEvent event) {
int index = Integer.valueOf(event.getPlaceholder().replace("skyblock_leaderboard_votes_", ""));
if (index < leaderboardVotesPlayers.size()) {
Leaderboard leaderboard = leaderboardVotesPlayers.get(index);
Visit visit = leaderboard.getVisit();
Player targetPlayer = Bukkit.getServer().getPlayer(visit.getOwnerUUID());
String islandOwnerName;
if (targetPlayer == null) {
islandOwnerName = new OfflinePlayer(visit.getOwnerUUID()).getName();
} else {
islandOwnerName = targetPlayer.getName();
}
return ChatColor.translateAlternateColorCodes('&', configLoad.getString("Placeholder.skyblock_leaderboard_votes.Non-empty.Message").replace("%position", "" + (index+1)).replace("%player", islandOwnerName).replace("%votes", NumberUtil.formatNumber(visit.getVoters().size())));
}
return ChatColor.translateAlternateColorCodes('&', configLoad.getString("Placeholder.skyblock_leaderboard_votes.Empty.Message"));
}
});
PlaceholderAPI.registerPlaceholder(skyblock, "skyblock_leaderboard_level_" + (i+1), new PlaceholderReplacer() {
@Override
public String onPlaceholderReplace(PlaceholderReplaceEvent event) {
int index = Integer.valueOf(event.getPlaceholder().replace("skyblock_leaderboard_level_", ""));
if (index < leaderboardLevelPlayers.size()) {
Leaderboard leaderboard = leaderboardLevelPlayers.get(index);
Visit visit = leaderboard.getVisit();
Level level = visit.getLevel();
Player targetPlayer = Bukkit.getServer().getPlayer(visit.getOwnerUUID());
String islandOwnerName;
if (targetPlayer == null) {
islandOwnerName = new OfflinePlayer(visit.getOwnerUUID()).getName();
} else {
islandOwnerName = targetPlayer.getName();
}
return ChatColor.translateAlternateColorCodes('&', configLoad.getString("Placeholder.skyblock_leaderboard_level.Non-empty.Message").replace("%position", "" + (index+1)).replace("%player", islandOwnerName).replace("%level", NumberUtil.formatNumber(level.getLevel())).replace("%points", NumberUtil.formatNumber(level.getPoints())));
}
return ChatColor.translateAlternateColorCodes('&', configLoad.getString("Placeholder.skyblock_leaderboard_level.Empty.Message"));
}
});
}
PlaceholderAPI.registerPlaceholder(skyblock, "skyblock_island_size", new PlaceholderReplacer() {
@Override

View File

@ -4,6 +4,7 @@ import java.util.ArrayList;
import java.util.List;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.DyeColor;
import org.bukkit.Location;
import org.bukkit.Material;
@ -147,7 +148,24 @@ public final class BlockUtil {
blockData.setStateType(BlockStateType.JUKEBOX.toString());
} else if (blockState instanceof Sign) {
Sign sign = (Sign) blockState;
blockData.setSignLines(sign.getLines());
String[] signLines = sign.getLines();
if (signLines != null) {
List<String> correctedSignLines = new ArrayList<>();
for (String signLineList : signLines) {
for (ChatColor chatColorList : ChatColor.values()) {
signLineList = signLineList.replace(chatColorList + "", "&" + chatColorList.toString().substring(chatColorList.toString().length() -1));
}
correctedSignLines.add(signLineList);
}
signLines = correctedSignLines.toArray(new String[correctedSignLines.size()]);
}
blockData.setSignLines(signLines);
blockData.setStateType(BlockStateType.SIGN.toString());
} else if (blockState instanceof Skull) {
Skull skull = (Skull) blockState;
@ -306,7 +324,7 @@ public final class BlockUtil {
Sign sign = (Sign) block.getState();
for (int i = 0; i < blockData.getSignLines().length; i++) {
sign.setLine(i, blockData.getSignLines()[i]);
sign.setLine(i, ChatColor.translateAlternateColorCodes('&', blockData.getSignLines()[i]));
}
sign.update();

View File

@ -652,6 +652,26 @@ Command:
Message: "&bSkyBlock &8| &cError&8: &eYou cannot set the spawn point in an Island world."
Set:
Message: "&bSkyBlock &8| &aInfo&8: &eThe spawn point has been set to your location."
SetHologram:
Info:
Message: "&f&oSets the location of a hologram."
Permission:
Message: "&bSkyBlock &8| &cError&8: &eYou don't have permission to perform that command."
Invalid:
Message: "&bSkyBlock &8| &cError&8: &eInvalid: /island admin sethologram <Level|Votes>"
Set:
Message: "&bSkyBlock &8| &aInfo&8: &eThe '&b%type&e' hologram has been set to your location."
RemoveHologram:
Info:
Message: "&f&oRemoves an existing hologram."
Permission:
Message: "&bSkyBlock &8| &cError&8: &eYou don't have permission to perform that command."
Invalid:
Message: "&bSkyBlock &8| &cError&8: &eInvalid: /island admin removehologram <Level|Votes>"
Set:
Message: "&bSkyBlock &8| &cError&8: &eA location for that hologram has not been set."
Removed:
Message: "&bSkyBlock &8| &aInfo&8: &eYou have removed the '&b%type&e' hologram."
SetSize:
Info:
Message: "&f&oSets the size of a players Island."
@ -900,6 +920,16 @@ Island:
Division:
Message: "&bSkyBlock &8| &aInfo&8: &eYou have set the points division to '&f%division&e'."
Placeholder:
skyblock_leaderboard_level:
Empty:
Message: "&f&oUnclaimed"
Non-empty:
Message: "&f[%position] %player [%level]"
skyblock_leaderboard_votes:
Empty:
Message: "&f&oUnclaimed"
Non-empty:
Message: "&f[%position] %player [%votes]"
skyblock_island_size:
Empty:
Message: "&c0"
@ -973,6 +1003,18 @@ Placeholder:
Message: "&c0"
Non-empty:
Message: "&f%placeholder"
Hologram:
Leaderboard:
Level:
Header: "&b&lSkyBlock &8&l| &e&lTop 10 Level"
Claimed: "&8* &f&o[%position] &a%player &7- &6%level"
Unclaimed: "&8* &f&o[%position] &7&oUnclaimed Position"
Footer: "&ewww.example.net"
Votes:
Header: "&b&lSkyBlock &8&l| &e&lTop 10 Votes"
Claimed: "&8* &f&o[%position] &a%player &7- &6%votes"
Unclaimed: "&8* &f&o[%position] &7&oUnclaimed Position"
Footer: "&ewww.example.net"
Scoreboard:
Tutorial:
Displayname: "&b&lSkyBlock"

View File

@ -1,6 +1,6 @@
name: SkyBlock
main: me.goodandevil.skyblock.SkyBlock
version: 32
version: 33
api-version: 1.13
description: A unique SkyBlock plugin
author: GoodAndEvil