diff --git a/src/main/java/com/gamingmesh/jobs/Signs/SignUtil.java b/src/main/java/com/gamingmesh/jobs/Signs/SignUtil.java index 77337bb0..a42941c2 100644 --- a/src/main/java/com/gamingmesh/jobs/Signs/SignUtil.java +++ b/src/main/java/com/gamingmesh/jobs/Signs/SignUtil.java @@ -21,7 +21,6 @@ import com.gamingmesh.jobs.container.Job; import com.gamingmesh.jobs.container.TopList; import net.Zrips.CMILib.FileHandler.ConfigReader; -import net.Zrips.CMILib.Items.CMIMaterial; import net.Zrips.CMILib.Messages.CMIMessages; import net.Zrips.CMILib.Version.Version; @@ -33,345 +32,342 @@ public class SignUtil { private Jobs plugin; public SignUtil(Jobs plugin) { - this.plugin = plugin; + this.plugin = plugin; } public Map> getSigns() { - return signsByType; + return signsByType; } public boolean removeSign(Location loc) { - jobsSign jSign = signsByLocation.remove(jobsSign.locToBlockString(loc)); - if (jSign == null) - return false; + jobsSign jSign = signsByLocation.remove(jobsSign.locToBlockString(loc)); + if (jSign == null) + return false; - Map sub = signsByType.get(jSign.getIdentifier().toLowerCase()); - if (sub != null) { - sub.remove(jSign.locToBlockString()); - } + Map sub = signsByType.get(jSign.getIdentifier().toLowerCase()); + if (sub != null) { + sub.remove(jSign.locToBlockString()); + } - return true; + return true; } public jobsSign getSign(Location loc) { - return loc == null ? null : signsByLocation.get(jobsSign.locToBlockString(loc)); + return loc == null ? null : signsByLocation.get(jobsSign.locToBlockString(loc)); } public void addSign(jobsSign jSign) { - if (jSign == null) - return; + if (jSign == null) + return; - String locToBlockString = jSign.locToBlockString(); + String locToBlockString = jSign.locToBlockString(); - signsByLocation.put(locToBlockString, jSign); + signsByLocation.put(locToBlockString, jSign); - String identifier = jSign.getIdentifier().toLowerCase(); - Map old = signsByType.get(identifier); - if (old == null) { - old = new HashMap<>(); - signsByType.put(identifier, old); - } + String identifier = jSign.getIdentifier().toLowerCase(); + Map old = signsByType.get(identifier); + if (old == null) { + old = new HashMap<>(); + signsByType.put(identifier, old); + } - old.put(locToBlockString, jSign); - signsByType.put(identifier, old); + old.put(locToBlockString, jSign); + signsByType.put(identifier, old); } public void loadSigns() { - if (!Jobs.getGCManager().SignsEnabled) - return; + if (!Jobs.getGCManager().SignsEnabled) + return; - signsByType.clear(); - signsByLocation.clear(); + signsByType.clear(); + signsByLocation.clear(); - File file = new File(Jobs.getFolder(), "Signs.yml"); - ConfigurationSection confCategory = YamlConfiguration.loadConfiguration(file).getConfigurationSection("Signs"); - if (confCategory == null) - return; + File file = new File(Jobs.getFolder(), "Signs.yml"); + ConfigurationSection confCategory = YamlConfiguration.loadConfiguration(file).getConfigurationSection("Signs"); + if (confCategory == null) + return; - List categoriesList = new ArrayList<>(confCategory.getKeys(false)); - if (categoriesList.isEmpty()) - return; + List categoriesList = new ArrayList<>(confCategory.getKeys(false)); + if (categoriesList.isEmpty()) + return; - for (String category : categoriesList) { - ConfigurationSection nameSection = confCategory.getConfigurationSection(category); - if (nameSection == null) - continue; + for (String category : categoriesList) { + ConfigurationSection nameSection = confCategory.getConfigurationSection(category); + if (nameSection == null) + continue; - jobsSign newTemp = new jobsSign(); + jobsSign newTemp = new jobsSign(); - if (nameSection.isString("World")) { - newTemp.setWorldName(nameSection.getString("World")); - newTemp.setX((int) nameSection.getDouble("X")); - newTemp.setY((int) nameSection.getDouble("Y")); - newTemp.setZ((int) nameSection.getDouble("Z")); - } else { - newTemp.setLoc(nameSection.getString("Loc")); - } - if (nameSection.isString("Type")) - newTemp.setType(SignTopType.getType(nameSection.getString("Type"))); + if (nameSection.isString("World")) { + newTemp.setWorldName(nameSection.getString("World")); + newTemp.setX((int) nameSection.getDouble("X")); + newTemp.setY((int) nameSection.getDouble("Y")); + newTemp.setZ((int) nameSection.getDouble("Z")); + } else { + newTemp.setLoc(nameSection.getString("Loc")); + } + if (nameSection.isString("Type")) + newTemp.setType(SignTopType.getType(nameSection.getString("Type"))); - newTemp.setNumber(nameSection.getInt("Number")); - if (nameSection.isString("JobName")) { - SignTopType t = SignTopType.getType(nameSection.getString("JobName")); - if (t == null) - newTemp.setJobName(nameSection.getString("JobName")); - } - newTemp.setSpecial(nameSection.getBoolean("Special")); + newTemp.setNumber(nameSection.getInt("Number")); + if (nameSection.isString("JobName")) { + SignTopType t = SignTopType.getType(nameSection.getString("JobName")); + if (t == null) + newTemp.setJobName(nameSection.getString("JobName")); + } + newTemp.setSpecial(nameSection.getBoolean("Special")); - String identifier = newTemp.getIdentifier().toLowerCase(); - Map old = signsByType.get(identifier); - if (old == null) { - old = new HashMap<>(); - signsByType.put(identifier, old); - } + String identifier = newTemp.getIdentifier().toLowerCase(); + Map old = signsByType.get(identifier); + if (old == null) { + old = new HashMap<>(); + signsByType.put(identifier, old); + } - String loc = newTemp.locToBlockString(); - old.put(loc, newTemp); - signsByLocation.put(loc, newTemp); - } + String loc = newTemp.locToBlockString(); + old.put(loc, newTemp); + signsByLocation.put(loc, newTemp); + } - if (!signsByLocation.isEmpty()) { - CMIMessages.consoleMessage("&e[Jobs] Loaded " + signsByLocation.size() + " top list signs"); - } + if (!signsByLocation.isEmpty()) { + CMIMessages.consoleMessage("&e[Jobs] Loaded " + signsByLocation.size() + " top list signs"); + } } public void saveSigns() { - File f = new File(Jobs.getFolder(), "Signs.yml"); - YamlConfiguration conf = YamlConfiguration.loadConfiguration(f); + File f = new File(Jobs.getFolder(), "Signs.yml"); + YamlConfiguration conf = YamlConfiguration.loadConfiguration(f); - ConfigReader reader = null; - try { - reader = new ConfigReader(f); - } catch (Exception e1) { - e1.printStackTrace(); - } - if (reader == null) - return; - conf.options().copyDefaults(true); - reader.addComment("Signs", "DO NOT EDIT THIS FILE BY HAND!"); + ConfigReader reader = null; + try { + reader = new ConfigReader(f); + } catch (Exception e1) { + e1.printStackTrace(); + } + if (reader == null) + return; + conf.options().copyDefaults(true); + reader.addComment("Signs", "DO NOT EDIT THIS FILE BY HAND!"); - if (!conf.isConfigurationSection("Signs")) - conf.createSection("Signs"); + if (!conf.isConfigurationSection("Signs")) + conf.createSection("Signs"); - int i = 0; - for (jobsSign sign : signsByLocation.values()) { - String path = "Signs." + ++i; - reader.set(path + ".Loc", sign.locToBlockString()); - reader.set(path + ".Number", sign.getNumber()); - reader.set(path + ".Type", sign.getType().toString()); - reader.set(path + ".JobName", sign.getJobName()); - reader.set(path + ".Special", sign.isSpecial()); - } + int i = 0; + for (jobsSign sign : signsByLocation.values()) { + String path = "Signs." + ++i; + reader.set(path + ".Loc", sign.locToBlockString()); + reader.set(path + ".Number", sign.getNumber()); + reader.set(path + ".Type", sign.getType().toString()); + reader.set(path + ".JobName", sign.getJobName()); + reader.set(path + ".Special", sign.isSpecial()); + } - try { - reader.save(f); - } catch (IOException e) { - e.printStackTrace(); - } + try { + reader.save(f); + } catch (IOException e) { + e.printStackTrace(); + } } public void updateAllSign(Job job) { - for (SignTopType types : SignTopType.values()) { - if (types != SignTopType.questtoplist) - signUpdate(job, types); - } + for (SignTopType types : SignTopType.values()) { + if (types != SignTopType.questtoplist) + signUpdate(job, types); + } } public boolean signUpdate(Job job) { - return signUpdate(job, SignTopType.toplist); + return signUpdate(job, SignTopType.toplist); } public boolean signUpdate(Job job, SignTopType type) { - if (!Jobs.getGCManager().SignsEnabled) - return true; + if (!Jobs.getGCManager().SignsEnabled) + return true; - if (type == null) - type = SignTopType.toplist; + if (type == null) + type = SignTopType.toplist; - String jobNameOrType = jobsSign.getIdentifier(job, type).toLowerCase(); + String jobNameOrType = jobsSign.getIdentifier(job, type).toLowerCase(); - Map signs = signsByType.get(jobNameOrType); - if (signs == null || signs.isEmpty()) - return false; + Map signs = signsByType.get(jobNameOrType); + if (signs == null || signs.isEmpty()) + return false; - List playerList = new ArrayList<>(); + List playerList = new ArrayList<>(); - switch (type) { - case gtoplist: - playerList = Jobs.getJobsDAO().getGlobalTopList(0); - break; - case questtoplist: - playerList = Jobs.getJobsDAO().getQuestTopList(0); - break; - default: - break; - } + switch (type) { + case gtoplist: + playerList = Jobs.getJobsDAO().getGlobalTopList(0); + break; + case questtoplist: + playerList = Jobs.getJobsDAO().getQuestTopList(0); + break; + default: + break; + } - int timelapse = 1; + int timelapse = 1; - Map> temp = new HashMap<>(); + Map> temp = new HashMap<>(); - boolean save = false; - for (jobsSign jSign : new HashMap<>(signs).values()) { - Location loc = jSign.getLocation(); - if (loc == null) - continue; + boolean save = false; + for (jobsSign jSign : new HashMap<>(signs).values()) { + Location loc = jSign.getLocation(); + if (loc == null) + continue; - Block block = loc.getBlock(); - if (!(block.getState() instanceof Sign)) { - if (!jobNameOrType.isEmpty()) { - Map tt = signsByType.get(jobNameOrType); - if (tt != null) { - tt.remove(jSign.locToBlockString()); - } - } + Block block = loc.getBlock(); + if (!(block.getState() instanceof Sign)) { + if (!jobNameOrType.isEmpty()) { + Map tt = signsByType.get(jobNameOrType); + if (tt != null) { + tt.remove(jSign.locToBlockString()); + } + } - signsByLocation.remove(jSign.locToBlockString()); - save = true; - continue; - } + signsByLocation.remove(jSign.locToBlockString()); + save = true; + continue; + } - String signJobName = jSign.getJobName(); - if (type == SignTopType.toplist && (playerList = temp.get(signJobName)) == null) { - playerList = Jobs.getJobsDAO().toplist(signJobName); - temp.put(signJobName, playerList); - } + String signJobName = jSign.getJobName(); + if (type == SignTopType.toplist && (playerList = temp.get(signJobName)) == null) { + playerList = Jobs.getJobsDAO().toplist(signJobName); + temp.put(signJobName, playerList); + } - if (Jobs.getJob(jSign.getJobName()) != null) - signJobName = Jobs.getJob(jSign.getJobName()).getDisplayName(); + if (Jobs.getJob(jSign.getJobName()) != null) + signJobName = Jobs.getJob(jSign.getJobName()).getDisplayName(); - if (playerList.isEmpty()) - continue; + if (playerList.isEmpty()) + continue; - int number = jSign.getNumber() - 1; - Sign sign = (Sign) block.getState(); + int number = jSign.getNumber() - 1; + Sign sign = (Sign) block.getState(); - if (!jSign.isSpecial()) { - for (int i = 0; i < 4; i++) { - if (i + number >= playerList.size()) { - plugin.getComplement().setLine(sign, i, ""); - continue; - } + if (!jSign.isSpecial()) { + for (int i = 0; i < 4; i++) { + if (i + number >= playerList.size()) { + plugin.getComplement().setLine(sign, i, ""); + continue; + } - TopList pl = playerList.get(i + number); - String playerName = pl.getPlayerInfo().getName(); - if (playerName.length() > 15) { - // We need to split 10 char of name, because of sign rows - playerName = playerName.split("(?<=\\G.{10})", 2)[0] + "~"; - } + TopList pl = playerList.get(i + number); + String playerName = pl.getPlayerInfo().getName(); + if (playerName.length() > 15) { + // We need to split 10 char of name, because of sign rows + playerName = playerName.split("(?<=\\G.{10})", 2)[0] + "~"; + } - String line = ""; - switch (type) { - case toplist: - case gtoplist: - line = Jobs.getLanguage().getMessage("signs.List", "[number]", i + number + 1, "[player]", playerName, "[level]", pl.getLevel()); - break; - case questtoplist: - line = Jobs.getLanguage().getMessage("signs.questList", "[number]", i + number + 1, "[player]", playerName, "[quests]", pl.getLevel()); - break; - default: - break; - } + String line = ""; + switch (type) { + case toplist: + case gtoplist: + line = Jobs.getLanguage().getMessage("signs.List", "[number]", i + number + 1, "[player]", playerName, "[level]", pl.getLevel()); + break; + case questtoplist: + line = Jobs.getLanguage().getMessage("signs.questList", "[number]", i + number + 1, "[player]", playerName, "[quests]", pl.getLevel()); + break; + default: + break; + } - if (!line.isEmpty()) - sign.setLine(i, line); - } - sign.update(); - if (!updateHead(sign, playerList.get(0).getPlayerInfo().getName(), timelapse)) { - timelapse--; - } - } else { - if (jSign.getNumber() > playerList.size()) - continue; + if (!line.isEmpty()) + sign.setLine(i, line); + } + sign.update(); + if (!updateHead(sign, playerList.get(0).getPlayerInfo().getName(), timelapse)) { + timelapse--; + } + } else { + if (jSign.getNumber() > playerList.size()) + continue; - TopList pl = playerList.get(jSign.getNumber() - 1); - String playerName = pl.getPlayerInfo().getName(); - if (playerName.length() > 15) { - playerName = playerName.split("(?<=\\G.{10})", 2)[0] + "~"; - } + TopList pl = playerList.get(jSign.getNumber() - 1); + String playerName = pl.getPlayerInfo().getName(); + if (playerName.length() > 15) { + playerName = playerName.split("(?<=\\G.{10})", 2)[0] + "~"; + } - int no = jSign.getNumber() + number + 1; - sign.setLine(0, translateSignLine("signs.SpecialList.p" + jSign.getNumber(), no, playerName, pl.getLevel(), signJobName)); - sign.setLine(1, translateSignLine("signs.SpecialList.name", no, playerName, pl.getLevel(), signJobName)); + int no = jSign.getNumber() + number + 1; + sign.setLine(0, translateSignLine("signs.SpecialList.p" + jSign.getNumber(), no, playerName, pl.getLevel(), signJobName)); + sign.setLine(1, translateSignLine("signs.SpecialList.name", no, playerName, pl.getLevel(), signJobName)); - switch (type) { - case toplist: - case gtoplist: - sign.setLine(2, translateSignLine("signs.SpecialList.level", no, playerName, pl.getLevel(), signJobName)); - break; - case questtoplist: - sign.setLine(2, Jobs.getLanguage().getMessage("signs.SpecialList.quests", "[number]", no, "[player]", playerName, "[quests]", pl.getLevel(), "[job]", signJobName)); - break; - default: - break; - } + switch (type) { + case toplist: + case gtoplist: + sign.setLine(2, translateSignLine("signs.SpecialList.level", no, playerName, pl.getLevel(), signJobName)); + break; + case questtoplist: + sign.setLine(2, Jobs.getLanguage().getMessage("signs.SpecialList.quests", "[number]", no, "[player]", playerName, "[quests]", pl.getLevel(), "[job]", signJobName)); + break; + default: + break; + } - sign.setLine(3, translateSignLine("signs.SpecialList.bottom", no, playerName, pl.getLevel(), signJobName)); - sign.update(); - if (!updateHead(sign, pl.getPlayerInfo().getName(), timelapse)) { - timelapse--; - } - } - timelapse++; - } + sign.setLine(3, translateSignLine("signs.SpecialList.bottom", no, playerName, pl.getLevel(), signJobName)); + sign.update(); + if (!updateHead(sign, pl.getPlayerInfo().getName(), timelapse)) { + timelapse--; + } + } + timelapse++; + } - if (save) - saveSigns(); + if (save) + saveSigns(); - return true; + return true; } private static String translateSignLine(String path, int number, String playerName, int level, String jobname) { - return Jobs.getLanguage().getMessage(path, - "[number]", number, - "[player]", playerName, - "[level]", level, - "[job]", jobname); + return Jobs.getLanguage().getMessage(path, + "[number]", number, + "[player]", playerName, + "[level]", level, + "[job]", jobname); } @SuppressWarnings("deprecation") public boolean updateHead(final Sign sign, final String playerName, int timelapse) { - if (playerName == null) - return false; + if (playerName == null) + return false; - if (timelapse < 1) { - timelapse = 1; - } + if (timelapse < 1) { + timelapse = 1; + } - BlockFace directionFacing = null; - if (Version.isCurrentEqualOrLower(Version.v1_13_R2)) { - org.bukkit.material.Sign signMat = (org.bukkit.material.Sign) sign.getData(); - directionFacing = signMat.getFacing(); - } else { - if (CMIMaterial.isWallSign(sign.getType())) { - org.bukkit.block.data.type.WallSign data = (org.bukkit.block.data.type.WallSign) sign.getBlockData(); - directionFacing = data.getFacing(); - } else { - org.bukkit.block.data.type.Sign data = (org.bukkit.block.data.type.Sign) sign.getBlockData(); - directionFacing = data.getRotation(); - } - } + BlockFace directionFacing = null; + if (Version.isCurrentEqualOrLower(Version.v1_13_R2)) { + org.bukkit.material.Sign signMat = (org.bukkit.material.Sign) sign.getData(); + directionFacing = signMat.getFacing(); + } else { + if (sign.getBlockData() instanceof org.bukkit.block.data.type.WallSign) + directionFacing = ((org.bukkit.block.data.type.WallSign) sign.getBlockData()).getFacing(); + else if (sign.getBlockData() instanceof org.bukkit.block.data.type.Sign) + directionFacing = ((org.bukkit.block.data.type.Sign) sign.getBlockData()).getRotation(); + } - final Location loc = sign.getLocation().clone(); - loc.add(0, 1, 0); + final Location loc = sign.getLocation().clone(); + loc.add(0, 1, 0); - if (directionFacing != null && !(loc.getBlock().getState() instanceof Skull)) - loc.add(directionFacing.getOppositeFace().getModX(), 0, directionFacing.getOppositeFace().getModZ()); + if (directionFacing != null && !(loc.getBlock().getState() instanceof Skull)) + loc.add(directionFacing.getOppositeFace().getModX(), 0, directionFacing.getOppositeFace().getModZ()); - Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { - @Override - public void run() { - if (!(loc.getBlock().getState() instanceof Skull)) - return; + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() { + @Override + public void run() { + if (!(loc.getBlock().getState() instanceof Skull)) + return; - Skull skull = (Skull) loc.getBlock().getState(); - if (playerName.equalsIgnoreCase(skull.getOwner())) - return; + Skull skull = (Skull) loc.getBlock().getState(); + if (playerName.equalsIgnoreCase(skull.getOwner())) + return; - skull.setOwner(playerName); - skull.update(); - } - }, timelapse * Jobs.getGCManager().InfoUpdateInterval * 20L); - return true; + skull.setOwner(playerName); + skull.update(); + } + }, timelapse * Jobs.getGCManager().InfoUpdateInterval * 20L); + return true; } }