/** * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 3 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */ package tntrun.signs.editor; import java.io.File; import java.io.IOException; import java.util.HashMap; import java.util.HashSet; import org.bukkit.block.Block; import org.bukkit.block.Sign; import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.YamlConfiguration; import tntrun.TNTRun; import tntrun.arena.Arena; public class SignEditor { private TNTRun plugin; private HashMap<String, HashSet<SignInfo>> signs = new HashMap<String, HashSet<SignInfo>>(); private File configfile; public SignEditor(TNTRun plugin) { this.plugin = plugin; configfile = new File(plugin.getDataFolder().getAbsolutePath() + File.separator + "signs.yml"); } public void addArena(String arena) { if (!signs.containsKey(arena)) { signs.put(arena, new HashSet<SignInfo>()); } } public void removeArena(String arena) { for (Block block : getSignsBlocks(arena)) { removeSign(block, arena); } signs.remove(arena); } public void addSign(Block block, String arena) { SignInfo signinfo = new SignInfo(block); addArena(arena); getSigns(arena).add(signinfo); } public void removeSign(Block block, String arena) { if (block.getState() instanceof Sign) { Sign sign = (Sign) block.getState(); sign.setLine(0, ""); sign.setLine(1, ""); sign.setLine(2, ""); sign.setLine(3, ""); sign.update(); } addArena(arena); getSigns(arena).remove(getSignInfo(block, arena)); } public HashSet<Block> getSignsBlocks(String arena) { HashSet<Block> signs = new HashSet<Block>(); for (SignInfo signinfo : getSigns(arena)) { Block block = signinfo.getBlock(); if (block != null) { signs.add(block); } } return signs; } private SignInfo getSignInfo(Block block, String arena) { for (SignInfo si : getSigns(arena)) { if (si.getBlock().equals(block)) { return si; } } return new SignInfo(block); } private void addSignInfo(SignInfo si, String arena) { addArena(arena); getSigns(arena).add(si); } private HashSet<SignInfo> getSigns(String arena) { addArena(arena); return signs.get(arena); } public void modifySigns(String arenaname) { try { Arena arena = plugin.amanager.getArenaByName(arenaname); if (arena == null) { return; } String text = null; int players = arena.getPlayersManager().getPlayersCount(); int maxPlayers = arena.getStructureManager().getMaxPlayers(); if (!arena.getStatusManager().isArenaEnabled()) { text = plugin.getConfig().getString("signs.status.disabled").replace("&", "§"); }else if (arena.getStatusManager().isArenaRunning()) { text = plugin.getConfig().getString("signs.status.ingame").replace("&", "§").replace("{MPS}", maxPlayers + "").replace("{PS}", players + ""); }else if (arena.getStatusManager().isArenaRegenerating()) { text = plugin.getConfig().getString("signs.status.regenerating").replace("&", "§"); }else if (players == maxPlayers) { if (arena.getStatusManager().isArenaRunning()) { text = plugin.getConfig().getString("signs.status.ingame").replace("&", "§").replace("{MPS}", maxPlayers + "").replace("{PS}", players + ""); }else{ text = plugin.getConfig().getString("signs.status.waiting").replace("&", "§").replace("{MPS}", maxPlayers + "").replace("{PS}", players + ""); } } else { if (arena.getStatusManager().isArenaRunning()) { text = plugin.getConfig().getString("signs.status.ingame").replace("&", "§").replace("{MPS}", maxPlayers + "").replace("{PS}", players + ""); }else{ text = plugin.getConfig().getString("signs.status.waiting").replace("&", "§").replace("{MPS}", maxPlayers + "").replace("{PS}", players + ""); } } for (Block block : getSignsBlocks(arenaname)) { if (block.getState() instanceof Sign) { Sign sign = (Sign) block.getState(); sign.setLine(0, plugin.getConfig().getString("signs.prefix").replace("&", "§")); sign.setLine(3, text); sign.update(); } else { removeSign(block, arenaname); } } } catch (Exception e) { e.printStackTrace(); } } public void loadConfiguration() { FileConfiguration file = YamlConfiguration.loadConfiguration(configfile); for (String arena : file.getKeys(false)) { ConfigurationSection section = file.getConfigurationSection(arena); for (String block : section.getKeys(false)) { ConfigurationSection blockSection = section.getConfigurationSection(block); SignInfo si = new SignInfo(blockSection.getString("world"), blockSection.getInt("x"), blockSection.getInt("y"), blockSection.getInt("z")); addSignInfo(si, arena); } modifySigns(arena); } } public void saveConfiguration() { FileConfiguration file = new YamlConfiguration(); for (String arena : signs.keySet()) { ConfigurationSection section = file.createSection(arena); int i = 0; for (SignInfo si : getSigns(arena)) { ConfigurationSection blockSection = section.createSection(Integer.toString(i++)); blockSection.set("x", si.getX()); blockSection.set("y", si.getY()); blockSection.set("z", si.getZ()); blockSection.set("world", si.getWorldName()); } } try { file.save(configfile); } catch (IOException e) { } } }