diff --git a/locales/bsb_en_US.yml b/locales/bsb_en_US.yml index 9e9a68d..c2fda36 100755 --- a/locales/bsb_en_US.yml +++ b/locales/bsb_en_US.yml @@ -3,27 +3,26 @@ # the one at http://yaml-online-parser.appspot.com # ########################################################################################### -### Credits ### -# Tastybento: maintainer -# Poslovitch: maintainer -# -# This translation is adapted to version : [alpha-0.0.1] - warps: - welcomeLine: "[Welcome]" - removed: "Warp sign removed" - success: "Success!" - sign-removed: "Warp sign removed!" + removed: "&CWarp sign removed" + success: "&ASuccess!" + sign-removed: "&CWarp sign removed!" title: "Warp Signs" - previous: "Previous page" - next: "Next page" - warpToPlayersSign: "Warping to [player]'s sign" - warpTip: "Place a warp sign with [Welcome] on the top" + previous: "&6Previous page" + next: "&6Next page" + warpToPlayersSign: "&6Warping to [player]'s sign" + warpTip: "&6Place a warp sign with [Welcome] on the top" error: - no-remove: "You cannot remove that sign!" - not-enough-level: "Your island level is not high enough!" - no-permission: "You do not have permission to do that!" - not-on-island: "You must be on your island to do that!" - duplicate: "Duplicate sign placed" - no-warps-yet: "There are no warps available yet" - \ No newline at end of file + no-remove: "&CYou cannot remove that sign!" + not-enough-level: "&CYour island level is not high enough!" + no-permission: "&CYou do not have permission to do that!" + not-on-island: "&CYou must be on your island to do that!" + duplicate: "&CDuplicate sign placed" + no-warps-yet: "&CThere are no warps available yet" + help: + description: "open the warps panel" +warp: + help: + parameters: "" + description: "warp to the player's warp sign" + \ No newline at end of file diff --git a/src/bskyblock/addin/warps/WarpPanelManager.java b/src/bskyblock/addin/warps/WarpPanelManager.java index ed46894..9fba5f3 100644 --- a/src/bskyblock/addin/warps/WarpPanelManager.java +++ b/src/bskyblock/addin/warps/WarpPanelManager.java @@ -21,7 +21,7 @@ import us.tastybento.bskyblock.api.panels.builders.PanelItemBuilder; public class WarpPanelManager { private static final boolean DEBUG = true; - private static final int PANEL_MAX_SIZE = 47; + private static final int PANEL_MAX_SIZE = 52; private Warp plugin; // This is a cache of heads, so they don't need to be created everytime private HashMap cachedWarps; @@ -50,9 +50,9 @@ public class WarpPanelManager { private PanelItem getPanelItem(UUID warpOwner) { return new PanelItemBuilder() + .setIcon(getSkull(warpOwner)) .setName(plugin.getBSkyBlock().getPlayers().getName(warpOwner)) .setDescription(plugin.getWarpSignsManager().getSignText(warpOwner)) - .setIcon(getSkull(warpOwner)) .setClickHandler(new ClickHandler() { @Override @@ -97,7 +97,9 @@ public class WarpPanelManager { } else if (index > (warps.size() / PANEL_MAX_SIZE)) { index = warps.size() / PANEL_MAX_SIZE; } - PanelBuilder panelBuilder = new PanelBuilder().setUser(user).setName(user.getTranslation("panel.title")); + // TODO use when locales are done. + //PanelBuilder panelBuilder = new PanelBuilder().setUser(user).setName(user.getTranslation("panel.title", "[number]", String.valueOf(index + 1))); + PanelBuilder panelBuilder = new PanelBuilder().setUser(user).setName(user.getTranslation("panel.title") + " " + String.valueOf(index + 1)); int i = index * PANEL_MAX_SIZE; for (; i < (index * PANEL_MAX_SIZE + PANEL_MAX_SIZE) && i < warps.size(); i++) { UUID owner = warps.get(i); @@ -117,6 +119,7 @@ public class WarpPanelManager { @Override public boolean onClick(User user, ClickType click) { + user.closeInventory(); showWarpPanel(user, panelNum+1); return true; } @@ -126,12 +129,13 @@ public class WarpPanelManager { if (i > PANEL_MAX_SIZE) { // Previous panelBuilder.addItem(new PanelItemBuilder() - .setName("Next") + .setName("Previous") .setIcon(new ItemStack(Material.SIGN)) .setClickHandler(new ClickHandler() { @Override public boolean onClick(User user, ClickType click) { + user.closeInventory(); showWarpPanel(user, panelNum-1); return true; } @@ -140,4 +144,9 @@ public class WarpPanelManager { } panelBuilder.build(); } + + + public void remove(UUID uuid) { + cachedWarps.remove(uuid); + } } diff --git a/src/bskyblock/addin/warps/WarpSignsManager.java b/src/bskyblock/addin/warps/WarpSignsManager.java index e408cef..61f1025 100644 --- a/src/bskyblock/addin/warps/WarpSignsManager.java +++ b/src/bskyblock/addin/warps/WarpSignsManager.java @@ -9,12 +9,14 @@ import java.util.Collection; import java.util.HashMap; import java.util.Iterator; import java.util.List; +import java.util.ListIterator; import java.util.Map; import java.util.Map.Entry; import java.util.Set; import java.util.TreeMap; import java.util.UUID; +import org.apache.commons.lang.math.RandomUtils; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Location; @@ -222,6 +224,21 @@ public class WarpSignsManager implements Listener { it.remove(); } } + if (warpList.size() < 100) { + // TEST CODE + for (int i = 0; i < 300; i++) { + UUID rand = UUID.randomUUID(); + int x = RandomUtils.nextInt(100000) - RandomUtils.nextInt(100000); + int z = RandomUtils.nextInt(100000) - RandomUtils.nextInt(100000); + Block b = IslandWorld.getIslandWorld().getBlockAt(x, 119, z); + b.setType(Material.STONE); + b.getRelative(BlockFace.UP).setType(Material.SIGN_POST); + Sign sign = (Sign)b.getRelative(BlockFace.UP).getState(); + sign.setLine(0, ChatColor.GREEN + plugin.getConfig().getString("welcomeLine")); + sign.update(); + warpList.put(rand, new Location(IslandWorld.getIslandWorld(), x, 120, z)); + } + } } /** @@ -387,20 +404,20 @@ public class WarpSignsManager implements Listener { Entry en = it.next(); if (en.getValue().equals(loc)) { // Inform player - User p = User.getInstance(plugin.getServer().getPlayer(en.getKey())); - if (p != null) { + User user = User.getInstance(plugin.getServer().getPlayer(en.getKey())); + if (user != null) { // Inform the player - p.sendMessage("warps.sign-removed"); - } + user.sendMessage("warps.sign-removed"); + } + plugin.getWarpPanelManager().remove(en.getKey()); it.remove(); } } saveWarpList(); } - + /** - * Removes a warp when the welcome sign is destroyed. Called by - * WarpSigns.java. + * Remove warp sign owned by UUID * * @param uuid */ @@ -410,6 +427,7 @@ public class WarpSignsManager implements Listener { warpList.remove(uuid); } saveWarpList(); + plugin.getWarpPanelManager().remove(uuid); } /** @@ -440,12 +458,31 @@ public class WarpSignsManager implements Listener { Location signLocation = getWarp(uuid); if (signLocation == null) { plugin.getWarpSignsManager().removeWarp(uuid); - } else + } else { + if (DEBUG) + Bukkit.getLogger().info("DEBUG: getting sign text"); // Get the sign info if it exists if (signLocation.getBlock().getType().equals(Material.SIGN_POST) || signLocation.getBlock().getType().equals(Material.WALL_SIGN)) { + if (DEBUG) + Bukkit.getLogger().info("DEBUG: sign is a sign"); Sign sign = (Sign)signLocation.getBlock().getState(); result.addAll(Arrays.asList(sign.getLines())); + if (DEBUG) + Bukkit.getLogger().info("DEBUG: " + result.toString()); } + // Clean up - remove the [WELCOME] line + result.remove(0); + // Remove any trailing blank lines + ListIterator it = result.listIterator(result.size()); + while (it.hasPrevious()) { + String line = it.previous(); + if (line.isEmpty()) + it.remove(); + else + break; + } + } + return result; } @@ -538,9 +575,11 @@ public class WarpSignsManager implements Listener { Island island = plugin.getBSkyBlock().getIslands().getIsland(owner); boolean pvp = false; - if ((warpSpot.getWorld().equals(IslandWorld.getIslandWorld()) && island.getFlag(SettingsFlag.PVP_OVERWORLD)) - || (warpSpot.getWorld().equals(IslandWorld.getNetherWorld()) && island.getFlag(SettingsFlag.PVP_NETHER))) { - pvp = true; + if (island != null) { + if ((warpSpot.getWorld().equals(IslandWorld.getIslandWorld()) && island.getFlag(SettingsFlag.PVP_OVERWORLD)) + || (warpSpot.getWorld().equals(IslandWorld.getNetherWorld()) && island.getFlag(SettingsFlag.PVP_NETHER))) { + pvp = true; + } } // Find out which direction the warp is facing Block b = warpSpot.getBlock(); diff --git a/src/bskyblock/addin/warps/commands/WarpCommand.java b/src/bskyblock/addin/warps/commands/WarpCommand.java index 41040b7..eb0cdfd 100644 --- a/src/bskyblock/addin/warps/commands/WarpCommand.java +++ b/src/bskyblock/addin/warps/commands/WarpCommand.java @@ -1,6 +1,9 @@ package bskyblock.addin.warps.commands; +import java.util.ArrayList; +import java.util.LinkedList; import java.util.List; +import java.util.Optional; import java.util.Set; import java.util.UUID; @@ -9,6 +12,12 @@ import us.tastybento.bskyblock.api.commands.CompositeCommand; import us.tastybento.bskyblock.api.commands.User; import us.tastybento.bskyblock.config.Settings; +/** + * The /is warp command + * + * @author ben + * + */ public class WarpCommand extends CompositeCommand { private Warp plugin; @@ -22,6 +31,20 @@ public class WarpCommand extends CompositeCommand { public void setup() { this.setPermission(Settings.PERMPREFIX + "island.warp"); this.setOnlyPlayer(true); + this.setParameters("warp.help.parameters"); + this.setDescription("warp.help.description"); + } + + @Override + public Optional> tabComplete(User user, String alias, LinkedList args) { + List options = new ArrayList<>(); + final Set warpList = plugin.getWarpSignsManager().listWarps(); + + for (UUID warp : warpList) { + options.add(plugin.getBSkyBlock().getPlayers().getName(warp)); + } + + return Optional.of(options); } @Override diff --git a/src/bskyblock/addin/warps/commands/WarpsCommand.java b/src/bskyblock/addin/warps/commands/WarpsCommand.java index fc1bb98..262820c 100644 --- a/src/bskyblock/addin/warps/commands/WarpsCommand.java +++ b/src/bskyblock/addin/warps/commands/WarpsCommand.java @@ -30,6 +30,7 @@ public class WarpsCommand extends CompositeCommand { public void setup() { this.setPermission(Settings.PERMPREFIX + "island.warp"); this.setOnlyPlayer(true); + this.setDescription("warps.help.description"); } /* (non-Javadoc)