diff --git a/plugin.yml b/addon.yml
similarity index 82%
rename from plugin.yml
rename to addon.yml
index e7718ca..9aa8038 100755
--- a/plugin.yml
+++ b/addon.yml
@@ -3,5 +3,3 @@ main: bskyblock.addin.warps.Warp
version: 0.1
authors: [tastybento]
-
-depend: [BSkyBlock]
diff --git a/config.yml b/config.yml
index 8cb572f..2d66cfc 100644
--- a/config.yml
+++ b/config.yml
@@ -2,3 +2,6 @@
# 0 or negative values will disable this restriction
# 10 is default
warplevelrestriction: 10
+
+welcomeLine: [WELCOME]
+
diff --git a/src/bskyblock/addin/warps/AddonHelper.java b/src/bskyblock/addin/warps/AddonHelper.java
deleted file mode 100644
index bb24ac6..0000000
--- a/src/bskyblock/addin/warps/AddonHelper.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package bskyblock.addin.warps;
-
-import java.util.logging.Logger;
-
-import org.bukkit.command.CommandSender;
-
-import us.tastybento.bskyblock.BSkyBlock;
-import us.tastybento.bskyblock.config.BSBLocale;
-import us.tastybento.bskyblock.util.Util;
-
-/**
- * Makes code look nicer
- * @author ben
- *
- */
-public abstract class AddonHelper {
- protected final Warp plugin;
- protected final BSkyBlock bSkyBlock;
-
- public AddonHelper(Warp plugin) {
- this.plugin = plugin;
- this.bSkyBlock = BSkyBlock.getPlugin();
- }
-
- public final Logger getLogger() {
- return plugin.getLogger();
- }
-
- public final void sendMessage(CommandSender sender, String message) {
- Util.sendMessage(sender, message);
- }
-
- public final BSBLocale getLocale(CommandSender sender) {
- return plugin.getLocale(sender);
- }
-}
diff --git a/src/bskyblock/addin/warps/CPItem.java b/src/bskyblock/addin/warps/CPItem.java
deleted file mode 100644
index 284f5a9..0000000
--- a/src/bskyblock/addin/warps/CPItem.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/*******************************************************************************
- * This file is part of ASkyBlock.
- *
- * ASkyBlock 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.
- *
- * ASkyBlock 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 ASkyBlock. If not, see .
- *******************************************************************************/
-package bskyblock.addin.warps;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-import org.bukkit.ChatColor;
-import org.bukkit.Material;
-import org.bukkit.inventory.ItemStack;
-import org.bukkit.inventory.meta.ItemMeta;
-
-/**
- * @author tastybento
- * This class is for a control panel button that has an icon, a command
- * to run if pressed or a link to
- * another control panel.
- */
-public class CPItem {
-
- private ItemStack item;
- private String command;
- private String nextSection;
-
-
- /**
- * A Control Panel item
- * @param material
- * @param name
- * @param command
- * @param nextSection
- */
- public CPItem(Material material, String name, String command, String nextSection) {
- this.command = command;
- this.nextSection = nextSection;
- item = new ItemStack(material);
- ItemMeta meta = item.getItemMeta();
- // Handle multi line names (split by |)
- List desc = new ArrayList(Arrays.asList(name.split("\\|")));
- meta.setDisplayName(ChatColor.WHITE + desc.get(0));
- if (desc.size() > 1) {
- desc.remove(0); // Remove the name
- meta.setLore(desc);
- }
- item.setItemMeta(meta);
- }
-
- public CPItem(ItemStack itemStack, String name, String command, String nextSection) {
- this.command = command;
- this.nextSection = nextSection;
- this.item = itemStack;
- ItemMeta meta = item.getItemMeta();
- // Handle multi line names (split by |)
- List desc = new ArrayList(Arrays.asList(name.split("\\|")));
- meta.setDisplayName(ChatColor.WHITE + desc.get(0));
- if (desc.size() > 1) {
- desc.remove(0); // Remove the name
- meta.setLore(desc);
- }
- item.setItemMeta(meta);
- }
-
- // For warps
- public CPItem(ItemStack itemStack, String command) {
- this.command = command;
- this.nextSection = "";
- this.item = itemStack;
- }
-
- public void setLore(List lore) {
- ItemMeta meta = item.getItemMeta();
- meta.setLore(lore);
- item.setItemMeta(meta);
- }
-
- /**
- * @return the command
- */
- public String getCommand() {
- return command;
- }
-
- /**
- * @return the nextSection
- */
- public String getNextSection() {
- return nextSection;
- }
-
- /**
- * @param nextSection
- * the nextSection to set
- */
- public void setNextSection(String nextSection) {
- this.nextSection = nextSection;
- }
-
- public ItemStack getItem() {
- return item;
- }
-
-}
diff --git a/src/bskyblock/addin/warps/Warp.java b/src/bskyblock/addin/warps/Warp.java
index ec70100..45f41c7 100644
--- a/src/bskyblock/addin/warps/Warp.java
+++ b/src/bskyblock/addin/warps/Warp.java
@@ -1,58 +1,51 @@
package bskyblock.addin.warps;
-import java.util.UUID;
-
-import org.bukkit.command.CommandSender;
-import org.bukkit.plugin.java.JavaPlugin;
-
-import bskyblock.addin.warps.commands.Commands;
-import bskyblock.addin.warps.config.LocaleManager;
+import bskyblock.addin.warps.commands.WarpCommand;
+import bskyblock.addin.warps.commands.WarpsCommand;
import bskyblock.addin.warps.config.PluginConfig;
import us.tastybento.bskyblock.BSkyBlock;
-import us.tastybento.bskyblock.config.BSBLocale;
+import us.tastybento.bskyblock.api.addons.Addon;
+import us.tastybento.bskyblock.api.commands.CompositeCommand;
+import us.tastybento.bskyblock.config.Settings;
/**
* Addin to BSkyBlock that enables welcome warp signs
* @author tastybento
*
*/
-public class Warp extends JavaPlugin {
+public class Warp extends Addon {
// The BSkyBlock plugin instance.
private BSkyBlock bSkyBlock;
- // Locale manager for this plugin
- private LocaleManager localeManager;
-
// Warp panel object
- private WarpPanel warpPanel;
+ private WarpPanelManager warpPanelManager;
// Warps signs object
- private WarpSigns warpSigns;
+ private WarpSignsManager warpSignsManager;
@Override
public void onEnable() {
// Load the plugin's config
new PluginConfig(this);
// Get the BSkyBlock plugin. This will be available because this plugin depends on it in plugin.yml.
- bSkyBlock = BSkyBlock.getPlugin();
+ bSkyBlock = BSkyBlock.getInstance();
// Check if it is enabled - it might be loaded, but not enabled.
if (!bSkyBlock.isEnabled()) {
this.setEnabled(false);
return;
}
- // Local locales
- localeManager = new LocaleManager(this);
// We have to wait for the worlds to load, so we do the rest 1 tick later
- getServer().getScheduler().runTask(this, () -> {
+ getServer().getScheduler().runTask(this.getBSkyBlock(), () -> {
// Start warp signs
- warpSigns = new WarpSigns(this, bSkyBlock);
- getServer().getPluginManager().registerEvents(warpSigns, this);
- // Start the warp panel and register it for clicks
- warpPanel = new WarpPanel(this);
- getServer().getPluginManager().registerEvents(warpPanel, this);
+ warpSignsManager = new WarpSignsManager(this, bSkyBlock);
+ warpPanelManager = new WarpPanelManager(this);
+ // Load the listener
+ getServer().getPluginManager().registerEvents(warpSignsManager, bSkyBlock);
// Register commands
- new Commands(this);
+ CompositeCommand bsbIslandCmd = (CompositeCommand) BSkyBlock.getInstance().getCommandsManager().getCommand(Settings.ISLANDCOMMAND);
+ new WarpCommand(this, bsbIslandCmd);
+ new WarpsCommand(this, bsbIslandCmd);
});
// Done
}
@@ -60,41 +53,20 @@ public class Warp extends JavaPlugin {
@Override
public void onDisable(){
// Save the warps
- if (warpSigns != null)
- warpSigns.saveWarpList();
+ if (warpSignsManager != null)
+ warpSignsManager.saveWarpList();
}
/**
- * Get the locale for this player
- * @param sender
- * @return Locale object for sender
+ * Get warp panel manager
+ * @return
*/
- public BSBLocale getLocale(CommandSender sender) {
- return localeManager.getLocale(sender);
+ public WarpPanelManager getWarpPanelManager() {
+ return warpPanelManager;
}
-
- /**
- * Get the locale for this UUID
- * @param uuid
- * @return Locale object for UUID
- */
- public BSBLocale getLocale(UUID uuid) {
- return localeManager.getLocale(uuid);
- }
-
- /**
- * @return default locale object
- */
- public BSBLocale getLocale() {
- return localeManager.getLocale();
- }
-
- public WarpPanel getWarpPanel() {
- return warpPanel;
- }
-
- public WarpSigns getWarpSigns() {
- return warpSigns;
+
+ public WarpSignsManager getWarpSignsManager() {
+ return warpSignsManager;
}
}
diff --git a/src/bskyblock/addin/warps/WarpPanel.java b/src/bskyblock/addin/warps/WarpPanel.java
deleted file mode 100644
index ccab906..0000000
--- a/src/bskyblock/addin/warps/WarpPanel.java
+++ /dev/null
@@ -1,300 +0,0 @@
-package bskyblock.addin.warps;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.List;
-import java.util.UUID;
-
-import org.bukkit.Bukkit;
-import org.bukkit.ChatColor;
-import org.bukkit.Location;
-import org.bukkit.Material;
-import org.bukkit.block.Sign;
-import org.bukkit.entity.Player;
-import org.bukkit.event.EventHandler;
-import org.bukkit.event.EventPriority;
-import org.bukkit.event.Listener;
-import org.bukkit.event.inventory.ClickType;
-import org.bukkit.event.inventory.InventoryClickEvent;
-import org.bukkit.event.inventory.InventoryType.SlotType;
-import org.bukkit.inventory.Inventory;
-import org.bukkit.inventory.ItemStack;
-import org.bukkit.inventory.meta.ItemMeta;
-import org.bukkit.inventory.meta.SkullMeta;
-
-import us.tastybento.bskyblock.config.Settings;
-import us.tastybento.bskyblock.database.objects.Island;
-import us.tastybento.bskyblock.database.objects.Island.SettingsFlag;
-import us.tastybento.bskyblock.generators.IslandWorld;
-import us.tastybento.bskyblock.util.Util;
-
-public class WarpPanel extends AddonHelper implements Listener {
- private static final int PANELSIZE = 45; // Must be a multiple of 9
- private final static boolean DEBUG = false;
- private List warpPanel;
- private HashMap cachedWarps;
-
- /**
- * @param plugin
- */
- public WarpPanel(Warp plugin) {
- super(plugin);
- warpPanel = new ArrayList();
- cachedWarps = new HashMap();
- //plugin.getLogger().info("DEBUG: loading the warp panel of size " + plugin.getWarpSigns().listSortedWarps().size());
- // Load the cache
- for (UUID playerUUID : plugin.getWarpSigns().listSortedWarps()) {
- addWarp(playerUUID);
- }
- // Make the panels
- updatePanel();
- }
-
- /**
- * Adds a new warp to the cache. Does NOT update the panels
- * @param playerUUID
- */
- public void addWarp(UUID playerUUID) {
- if (DEBUG)
- plugin.getLogger().info("DEBUG: Adding warp");
- // Check cached warps
- if (cachedWarps.containsKey(playerUUID)) {
- if (DEBUG)
- plugin.getLogger().info("DEBUG: Found in cache");
- // Get the item
- ItemStack playerSkull = cachedWarps.get(playerUUID);
- playerSkull = updateText(playerSkull, playerUUID);
- return;
- }
- //plugin.getLogger().info("DEBUG: New skull");
- // Get the item
- ItemStack playerSkull = getSkull(playerUUID);
- if (playerSkull == null) {
- // Nothing found and not available on the server
- return;
- }
- // Update the sign text
- playerSkull = updateText(playerSkull, playerUUID);
- cachedWarps.put(playerUUID, playerSkull);
- }
-
- /**
- * Gets the skull for this player UUID
- * @param playerUUID
- * @return Player skull item
- */
- @SuppressWarnings("deprecation")
- private ItemStack getSkull(UUID playerUUID) {
- String playerName = bSkyBlock.getPlayers().getName(playerUUID);
- if (DEBUG)
- plugin.getLogger().info("DEBUG: name of warp = " + playerName);
- ItemStack playerSkull = new ItemStack(Material.SKULL_ITEM, 1, (short) 3);
- if (playerName == null) {
- if (DEBUG)
- plugin.getLogger().warning("Warp for Player: UUID " + playerUUID.toString() + " is unknown on this server, skipping...");
- return null;
- //playerName = playerUUID.toString().substring(0, 10);
- }
- SkullMeta meta = (SkullMeta) playerSkull.getItemMeta();
- meta.setOwner(playerName);
- meta.setDisplayName(ChatColor.WHITE + playerName);
- playerSkull.setItemMeta(meta);
- return playerSkull;
- }
- public Inventory getWarpPanel(int panelNumber) {
- //makePanel();
- if (panelNumber < 0) {
- panelNumber = 0;
- } else if (panelNumber > warpPanel.size()-1) {
- panelNumber = warpPanel.size()-1;
- }
- return warpPanel.get(panelNumber);
- }
-
- @SuppressWarnings("deprecation")
- @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled=true)
- public void onInventoryClick(InventoryClickEvent event) {
- Inventory inventory = event.getInventory(); // The inventory that was clicked in
- if (inventory.getName() == null) {
- return;
- }
- // The player that clicked the item
- final Player player = (Player) event.getWhoClicked();
- String title = inventory.getTitle();
- // The title must be the same for all locales because the warp panels are common
- if (!inventory.getTitle().startsWith(plugin.getLocale().get("warps.title") + " #")) {
- return;
- }
- event.setCancelled(true);
- if (event.getSlotType().equals(SlotType.OUTSIDE)) {
- player.closeInventory();
- return;
- }
- if (event.getClick().equals(ClickType.SHIFT_RIGHT)) {
- player.closeInventory();
- player.updateInventory();
- return;
- }
- ItemStack clicked = event.getCurrentItem(); // The item that was clicked
- if (DEBUG)
- plugin.getLogger().info("DEBUG: inventory size = " + inventory.getSize());
- if (DEBUG)
- plugin.getLogger().info("DEBUG: clicked = " + clicked);
- if (DEBUG)
- plugin.getLogger().info("DEBUG: rawslot = " + event.getRawSlot());
- if (event.getRawSlot() >= event.getInventory().getSize() || clicked.getType() == Material.AIR) {
- return;
- }
- int panelNumber = 0;
- try {
- panelNumber = Integer.valueOf(title.substring(title.indexOf('#')+ 1));
- } catch (Exception e) {
- panelNumber = 0;
- }
- if (clicked.getItemMeta().hasDisplayName()) {
- String command = ChatColor.stripColor(clicked.getItemMeta().getDisplayName());
- if (DEBUG)
- plugin.getLogger().info("DEBUG: command = " + command);
- if (command != null) {
- if (command.equalsIgnoreCase(ChatColor.stripColor(plugin.getLocale().get("warps.next")))) {
- player.closeInventory();
- Util.runCommand(player, Settings.ISLANDCOMMAND + " warps " + (panelNumber+1));
- } else if (command.equalsIgnoreCase(ChatColor.stripColor(plugin.getLocale().get("warps.previous")))) {
- player.closeInventory();
- Util.runCommand(player, Settings.ISLANDCOMMAND + " warps " + (panelNumber-1));
- } else {
- player.closeInventory();
- Util.sendMessage(player, ChatColor.GREEN + plugin.getLocale(player.getUniqueId()).get("warps.warpToPlayersSign").replace("[player]", command));
- Util.runCommand(player, Settings.ISLANDCOMMAND + " warp " + command);
- }
- }
- }
- }
-
- /**
- * Update the text on all the warp icons.
- */
- public void updateAllWarpText() {
- if (DEBUG)
- plugin.getLogger().info("DEBUG: update all Warps");
- for (UUID playerUUID : cachedWarps.keySet()) {
- // Get the item
- ItemStack playerSkull = cachedWarps.get(playerUUID);
- playerSkull = updateText(playerSkull, playerUUID);
- }
- updatePanel();
- }
-
- /**
- * Creates the inventory panels from the warp list and adds nav buttons
- */
- public void updatePanel() {
- // Clear the inventory panels
- warpPanel.clear();
- Collection activeWarps = plugin.getWarpSigns().listSortedWarps();
- // Create the warp panels
- if (DEBUG)
- plugin.getLogger().info("DEBUG: warps size = " + activeWarps.size());
- int size = activeWarps.size();
- int panelNumber = size / (PANELSIZE-2);
- int remainder = (size % (PANELSIZE-2)) + 8 + 2;
- remainder -= (remainder % 9);
- if (DEBUG)
- plugin.getLogger().info("DEBUG: panel number = " + panelNumber + " remainder = " + remainder);
- int i = 0;
- // TODO: Make panel title a string
- for (i = 0; i < panelNumber; i++) {
- if (DEBUG)
- plugin.getLogger().info("DEBUG: created panel " + (i+1));
- warpPanel.add(Bukkit.createInventory(null, PANELSIZE, plugin.getLocale().get("warps.title") + " #" + (i+1)));
- }
- // Make the last panel
- if (DEBUG)
- plugin.getLogger().info("DEBUG: created panel " + (i+1));
- warpPanel.add(Bukkit.createInventory(null, remainder, plugin.getLocale().get("warps.title") + " #" + (i+1)));
- panelNumber = 0;
- int slot = 0;
- // Run through all the warps and add them to the inventories with nav buttons
- for (UUID playerUUID: activeWarps) {
- ItemStack icon = cachedWarps.get(playerUUID);
- if (icon != null) {
- warpPanel.get(panelNumber).setItem(slot++, icon);
-
- // Check if the panel is full
- if (slot == PANELSIZE-2) {
- // Add navigation buttons
- if (panelNumber > 0) {
- warpPanel.get(panelNumber).setItem(slot++, new CPItem(Material.SIGN,plugin.getLocale().get("warps.previous"),"warps " + (panelNumber-1),"").getItem());
- }
- warpPanel.get(panelNumber).setItem(slot, new CPItem(Material.SIGN,plugin.getLocale().get("warps.next"),"warps " + (panelNumber+1),"").getItem());
- // Move onto the next panel
- panelNumber++;
- slot = 0;
- }
- }
- }
- if (remainder != 0 && panelNumber > 0) {
- warpPanel.get(panelNumber).setItem(slot++, new CPItem(Material.SIGN,plugin.getLocale().get("warps.previous"),"warps " + (panelNumber-1),"").getItem());
- }
- }
-
- /**
- * Updates the meta text on the skull by looking at the warp sign
- * This MUST be run 1 TICK AFTER the sign has been created otherwise the sign is blank
- * @param playerSkull
- * @param playerUUID
- * @return updated skull item stack
- */
- private ItemStack updateText(ItemStack playerSkull, final UUID playerUUID) {
- if (DEBUG)
- plugin.getLogger().info("DEBUG: Updating text on item");
- ItemMeta meta = playerSkull.getItemMeta();
- //get the sign info
- Location signLocation = plugin.getWarpSigns().getWarp(playerUUID);
- if (signLocation == null) {
- plugin.getWarpSigns().removeWarp(playerUUID);
- return playerSkull;
- }
- //plugin.getLogger().info("DEBUG: block type = " + signLocation.getBlock().getType());
- // Get the sign info if it exists
- if (signLocation.getBlock().getType().equals(Material.SIGN_POST) || signLocation.getBlock().getType().equals(Material.WALL_SIGN)) {
- Sign sign = (Sign)signLocation.getBlock().getState();
- List lines = new ArrayList(Arrays.asList(sign.getLines()));
- // Check for PVP and add warning
- Island island = bSkyBlock.getIslands().getIsland(playerUUID);
- if (island != null) {
- if ((signLocation.getWorld().equals(IslandWorld.getIslandWorld()) && island.getFlag(SettingsFlag.PVP_OVERWORLD))
- || (signLocation.getWorld().equals(IslandWorld.getNetherWorld()) && island.getFlag(SettingsFlag.PVP_NETHER))) {
- if (DEBUG)
- plugin.getLogger().info("DEBUG: pvp warning added");
- lines.add(ChatColor.RED + bSkyBlock.getLocale(playerUUID).get("igs." + SettingsFlag.PVP_OVERWORLD));
- }
- }
- meta.setLore(lines);
- if (DEBUG)
- plugin.getLogger().info("DEBUG: lines = " + lines);
- }
- playerSkull.setItemMeta(meta);
- return playerSkull;
- }
-
- /**
- * Only change the text of the warp
- * @param playerUUID
- */
- public void updateWarp(UUID playerUUID) {
- if (DEBUG)
- plugin.getLogger().info("DEBUG: update Warp");
-
- if (cachedWarps.containsKey(playerUUID)) {
- // Get the item
- ItemStack playerSkull = cachedWarps.get(playerUUID);
- playerSkull = updateText(playerSkull, playerUUID);
- updatePanel();
- } else {
- plugin.getLogger().warning("Warps: update requested, but player unknown " + playerUUID.toString());
- }
- }
-}
diff --git a/src/bskyblock/addin/warps/WarpPanelManager.java b/src/bskyblock/addin/warps/WarpPanelManager.java
new file mode 100644
index 0000000..ed46894
--- /dev/null
+++ b/src/bskyblock/addin/warps/WarpPanelManager.java
@@ -0,0 +1,143 @@
+package bskyblock.addin.warps;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.UUID;
+
+import org.bukkit.Bukkit;
+import org.bukkit.ChatColor;
+import org.bukkit.Material;
+import org.bukkit.inventory.ItemStack;
+import org.bukkit.inventory.meta.SkullMeta;
+
+import us.tastybento.bskyblock.api.commands.User;
+import us.tastybento.bskyblock.api.panels.ClickType;
+import us.tastybento.bskyblock.api.panels.PanelItem;
+import us.tastybento.bskyblock.api.panels.PanelItem.ClickHandler;
+import us.tastybento.bskyblock.api.panels.builders.PanelBuilder;
+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 Warp plugin;
+ // This is a cache of heads, so they don't need to be created everytime
+ private HashMap cachedWarps;
+
+
+ public WarpPanelManager(Warp plugin) {
+ this.plugin = plugin;
+ cachedWarps = new HashMap<>();
+ createWarpCache();
+ }
+
+
+ /**
+ * This method makes the cache of heads based on the warps available
+ */
+ private void createWarpCache() {
+ if (DEBUG)
+ Bukkit.getLogger().info("DEBUG: creating warp cache");
+ cachedWarps.clear();
+ for (UUID warpOwner : plugin.getWarpSignsManager().getSortedWarps()) {
+ if (DEBUG)
+ Bukkit.getLogger().info("DEBUG: adding warp");
+ cachedWarps.put(warpOwner, getPanelItem(warpOwner));
+ }
+ }
+
+ private PanelItem getPanelItem(UUID warpOwner) {
+ return new PanelItemBuilder()
+ .setName(plugin.getBSkyBlock().getPlayers().getName(warpOwner))
+ .setDescription(plugin.getWarpSignsManager().getSignText(warpOwner))
+ .setIcon(getSkull(warpOwner))
+ .setClickHandler(new ClickHandler() {
+
+ @Override
+ public boolean onClick(User user, ClickType click) {
+ plugin.getWarpSignsManager().warpPlayer(user, warpOwner);
+ return true;
+ }
+ }).build();
+ }
+
+
+ /**
+ * Gets the skull for this player UUID
+ * @param playerUUID
+ * @return Player skull item
+ */
+ @SuppressWarnings("deprecation")
+ private ItemStack getSkull(UUID playerUUID) {
+ String playerName = plugin.getBSkyBlock().getPlayers().getName(playerUUID);
+ if (DEBUG)
+ plugin.getLogger().info("DEBUG: name of warp = " + playerName);
+ ItemStack playerSkull = new ItemStack(Material.SKULL_ITEM, 1, (short) 3);
+ if (playerName == null) {
+ if (DEBUG)
+ plugin.getLogger().warning("Warp for Player: UUID " + playerUUID.toString() + " is unknown on this server, skipping...");
+ return null;
+ }
+ SkullMeta meta = (SkullMeta) playerSkull.getItemMeta();
+ meta.setOwner(playerName);
+ meta.setDisplayName(ChatColor.WHITE + playerName);
+ playerSkull.setItemMeta(meta);
+ return playerSkull;
+ }
+
+ public void showWarpPanel(User user, int index) {
+ List warps = new ArrayList<>(plugin.getWarpSignsManager().getSortedWarps());
+ if (DEBUG) {
+ Bukkit.getLogger().info("DEBUG: showing warps. warps list is " + warps.size());
+ }
+ if (index < 0) {
+ index = 0;
+ } 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"));
+ int i = index * PANEL_MAX_SIZE;
+ for (; i < (index * PANEL_MAX_SIZE + PANEL_MAX_SIZE) && i < warps.size(); i++) {
+ UUID owner = warps.get(i);
+ if (!cachedWarps.containsKey(owner)) {
+ cachedWarps.put(owner, getPanelItem(owner));
+ }
+ panelBuilder.addItem(cachedWarps.get(owner));
+ }
+ final int panelNum = index;
+ // Add signs
+ if (i < warps.size()) {
+ // Next
+ panelBuilder.addItem(new PanelItemBuilder()
+ .setName("Next")
+ .setIcon(new ItemStack(Material.SIGN))
+ .setClickHandler(new ClickHandler() {
+
+ @Override
+ public boolean onClick(User user, ClickType click) {
+ showWarpPanel(user, panelNum+1);
+ return true;
+ }
+
+ }).build());
+ }
+ if (i > PANEL_MAX_SIZE) {
+ // Previous
+ panelBuilder.addItem(new PanelItemBuilder()
+ .setName("Next")
+ .setIcon(new ItemStack(Material.SIGN))
+ .setClickHandler(new ClickHandler() {
+
+ @Override
+ public boolean onClick(User user, ClickType click) {
+ showWarpPanel(user, panelNum-1);
+ return true;
+ }
+
+ }).build());
+ }
+ panelBuilder.build();
+ }
+}
diff --git a/src/bskyblock/addin/warps/WarpSigns.java b/src/bskyblock/addin/warps/WarpSignsManager.java
similarity index 59%
rename from src/bskyblock/addin/warps/WarpSigns.java
rename to src/bskyblock/addin/warps/WarpSignsManager.java
index 4a1fb08..e408cef 100644
--- a/src/bskyblock/addin/warps/WarpSigns.java
+++ b/src/bskyblock/addin/warps/WarpSignsManager.java
@@ -3,9 +3,12 @@ package bskyblock.addin.warps;
import java.beans.IntrospectionException;
import java.lang.reflect.InvocationTargetException;
import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
+import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
@@ -16,25 +19,28 @@ import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.Material;
+import org.bukkit.Sound;
import org.bukkit.block.Block;
+import org.bukkit.block.BlockFace;
import org.bukkit.block.Sign;
-import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.event.block.SignChangeEvent;
-import bskyblock.addin.warps.database.object.Warps;
+import bskyblock.addin.warps.database.object.WarpsDO;
import bskyblock.addin.warps.event.WarpInitiateEvent;
import bskyblock.addin.warps.event.WarpListEvent;
import bskyblock.addin.warps.event.WarpRemoveEvent;
import us.tastybento.bskyblock.BSkyBlock;
+import us.tastybento.bskyblock.api.commands.User;
import us.tastybento.bskyblock.database.BSBDatabase;
import us.tastybento.bskyblock.database.managers.AbstractDatabaseHandler;
+import us.tastybento.bskyblock.database.objects.Island;
+import us.tastybento.bskyblock.database.objects.Island.SettingsFlag;
import us.tastybento.bskyblock.generators.IslandWorld;
import us.tastybento.bskyblock.util.Util;
-import us.tastybento.bskyblock.util.VaultHelper;
/**
* Handles warping. Players can add one sign
@@ -42,220 +48,36 @@ import us.tastybento.bskyblock.util.VaultHelper;
* @author tastybento
*
*/
-public class WarpSigns extends AddonHelper implements Listener {
- //private final static boolean DEBUG = false;
+public class WarpSignsManager implements Listener {
+ private static final boolean DEBUG = true;
private BSkyBlock bSkyBlock;
// Map of all warps stored as player, warp sign Location
private Map warpList;
// Database handler for level data
- private AbstractDatabaseHandler handler;
+ private AbstractDatabaseHandler handler;
// The BSkyBlock database object
private BSBDatabase database;
+ private Warp plugin;
+
/**
* @param plugin
*/
@SuppressWarnings("unchecked")
- public WarpSigns(Warp plugin, BSkyBlock bSkyBlock) {
- super(plugin);
+ public WarpSignsManager(Warp plugin, BSkyBlock bSkyBlock) {
+ this.plugin = plugin;
this.bSkyBlock = bSkyBlock;
// Get the BSkyBlock database
database = BSBDatabase.getDatabase();
// Set up the database handler to store and retrieve Island classes
// Note that these are saved by the BSkyBlock database
- handler = (AbstractDatabaseHandler) database.getHandler(bSkyBlock, Warps.class);
+ handler = (AbstractDatabaseHandler) database.getHandler(bSkyBlock, WarpsDO.class);
// Load the warps
loadWarpList();
}
- /**
- * Checks to see if a sign has been broken
- * @param e
- */
- @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = false)
- public void onSignBreak(BlockBreakEvent e) {
- Block b = e.getBlock();
- Player player = e.getPlayer();
- if (b.getWorld().equals(IslandWorld.getIslandWorld()) || b.getWorld().equals(IslandWorld.getNetherWorld())) {
- if (b.getType().equals(Material.SIGN_POST) || b.getType().equals(Material.WALL_SIGN)) {
- Sign s = (Sign) b.getState();
- if (s != null) {
- //plugin.getLogger().info("DEBUG: sign found at location " + s.toString());
- if (s.getLine(0).equalsIgnoreCase(ChatColor.GREEN + plugin.getLocale().get("warps.welcomeLine"))) {
- // Do a quick check to see if this sign location is in
- //plugin.getLogger().info("DEBUG: welcome sign");
- // the list of warp signs
- if (warpList.containsValue(s.getLocation())) {
- //plugin.getLogger().info("DEBUG: warp sign is in list");
- // Welcome sign detected - check to see if it is
- // this player's sign
- if ((warpList.containsKey(player.getUniqueId()) && warpList.get(player.getUniqueId()).equals(s.getLocation()))) {
- // Player removed sign
- removeWarp(s.getLocation());
- Bukkit.getPluginManager().callEvent(new WarpRemoveEvent(plugin, s.getLocation(), player.getUniqueId()));
- } else if (player.isOp() || player.hasPermission(us.tastybento.bskyblock.config.Settings.PERMPREFIX + "mod.removesign")) {
- // Op or mod removed sign
- Util.sendMessage(player, ChatColor.GREEN + plugin.getLocale(player.getUniqueId()).get("warps.removed"));
- removeWarp(s.getLocation());
- Bukkit.getPluginManager().callEvent(new WarpRemoveEvent(plugin, s.getLocation(), player.getUniqueId()));
- } else {
- // Someone else's sign - not allowed
- Util.sendMessage(player, ChatColor.RED + plugin.getLocale(player.getUniqueId()).get("warps.error.no-remove"));
- e.setCancelled(true);
- }
- }
- }
- }
- }
- }
- }
-
- /**
- * Event handler for Sign Changes
- *
- * @param e
- */
- @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = false)
- public void onSignWarpCreate(SignChangeEvent e) {
- //plugin.getLogger().info("DEBUG: SignChangeEvent called");
- String title = e.getLine(0);
- Player player = e.getPlayer();
- if (player.getWorld().equals(IslandWorld.getIslandWorld()) || player.getWorld().equals(IslandWorld.getNetherWorld())) {
- //plugin.getLogger().info("DEBUG: Correct world");
- if (e.getBlock().getType().equals(Material.SIGN_POST) || e.getBlock().getType().equals(Material.WALL_SIGN)) {
-
- //plugin.getLogger().info("DEBUG: The first line of the sign says " + title);
- // Check if someone is changing their own sign
- // This should never happen !!
- if (title.equalsIgnoreCase(plugin.getLocale().get("warps.welcomeLine"))) {
- //plugin.getLogger().info("DEBUG: Welcome sign detected");
- // Welcome sign detected - check permissions
- if (!(VaultHelper.hasPerm(player, us.tastybento.bskyblock.config.Settings.PERMPREFIX + "island.addwarp"))) {
- Util.sendMessage(player, ChatColor.RED + plugin.getLocale(player.getUniqueId()).get("warps.error.no-permission"));
- return;
- }
- /*
- if(!(ASkyBlockAPI.getInstance().getLongIslandLevel(player.getUniqueId()) > Settings.warpLevelsRestriction)){
- Util.sendMessage(player, ChatColor.RED + plugin.getLocale(player.getUniqueId()).get("warps.error.NotEnoughLevel"));
- return;
- }
- */
- // Check that the player is on their island
- if (!(bSkyBlock.getIslands().playerIsOnIsland(player))) {
- Util.sendMessage(player, ChatColor.RED + plugin.getLocale(player.getUniqueId()).get("warps.error.not-on-island"));
- e.setLine(0, ChatColor.RED + plugin.getLocale().get("warps.welcomeLine"));
- return;
- }
- // Check if the player already has a sign
- final Location oldSignLoc = getWarp(player.getUniqueId());
- if (oldSignLoc == null) {
- //plugin.getLogger().info("DEBUG: Player does not have a sign already");
- // First time the sign has been placed or this is a new
- // sign
- if (addWarp(player.getUniqueId(), e.getBlock().getLocation())) {
- Util.sendMessage(player, ChatColor.GREEN + plugin.getLocale(player.getUniqueId()).get("warps.success"));
- e.setLine(0, ChatColor.GREEN + plugin.getLocale().get("warps.welcomeLine"));
- for (int i = 1; i<4; i++) {
- e.setLine(i, ChatColor.translateAlternateColorCodes('&', e.getLine(i)));
- }
- } else {
- Util.sendMessage(player, ChatColor.RED + plugin.getLocale(player.getUniqueId()).get("warps.error.duplicate"));
- e.setLine(0, ChatColor.RED + plugin.getLocale().get("warps.welcomeLine"));
- for (int i = 1; i<4; i++) {
- e.setLine(i, ChatColor.translateAlternateColorCodes('&', e.getLine(i)));
- }
- }
- } else {
- //plugin.getLogger().info("DEBUG: Player already has a Sign");
- // A sign already exists. Check if it still there and if
- // so,
- // deactivate it
- Block oldSignBlock = oldSignLoc.getBlock();
- if (oldSignBlock.getType().equals(Material.SIGN_POST) || oldSignBlock.getType().equals(Material.WALL_SIGN)) {
- // The block is still a sign
- //plugin.getLogger().info("DEBUG: The block is still a sign");
- Sign oldSign = (Sign) oldSignBlock.getState();
- if (oldSign != null) {
- //plugin.getLogger().info("DEBUG: Sign block is a sign");
- if (oldSign.getLine(0).equalsIgnoreCase(ChatColor.GREEN + plugin.getLocale().get("warps.welcomeLine"))) {
- //plugin.getLogger().info("DEBUG: Old sign had a green welcome");
- oldSign.setLine(0, ChatColor.RED + plugin.getLocale().get("warps.welcomeLine"));
- oldSign.update(true, false);
- Util.sendMessage(player, ChatColor.RED + plugin.getLocale(player.getUniqueId()).get("warps.deactivate"));
- removeWarp(player.getUniqueId());
- Bukkit.getPluginManager().callEvent(new WarpRemoveEvent(plugin, oldSign.getLocation(), player.getUniqueId()));
- }
- }
- }
- // Set up the warp
- if (addWarp(player.getUniqueId(), e.getBlock().getLocation())) {
- Util.sendMessage(player, ChatColor.GREEN + plugin.getLocale(player.getUniqueId()).get("warps.error.success"));
- e.setLine(0, ChatColor.GREEN + plugin.getLocale().get("warps.welcomeLine"));
- } else {
- Util.sendMessage(player, ChatColor.RED + plugin.getLocale(player.getUniqueId()).get("warps.error.duplicate"));
- e.setLine(0, ChatColor.RED + plugin.getLocale().get("warps.welcomeLine"));
- }
- }
- }
- }
- }
- }
-
- /**
- * Saves the warp lists to the database
- */
- public void saveWarpList() {
- if (warpList == null) {
- return;
- }
- //plugin.getLogger().info("Saving warps...");
- try {
- handler.saveObject(new Warps().save(warpList));
- } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException | SecurityException
- | InstantiationException | NoSuchMethodException | IntrospectionException | SQLException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
-
- /**
- * Loads the warps and checks if they still exist
- */
- public void loadWarpList() {
- plugin.getLogger().info("Loading warps...");
- warpList = new HashMap<>();
- try {
- Warps warps = handler.loadObject("warps");
- // If there's nothing there, start fresh
- if (warps == null) {
- warpList = new HashMap<>();
- } else {
- warpList = warps.getWarpSigns();
- }
- } catch (InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException
- | SecurityException | ClassNotFoundException | IntrospectionException | SQLException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- /*
- for (Entry en : warpList.entrySet()) {
- plugin.getLogger().info("DEBUG: " + en.getKey() + " " + en.getValue());
- }*/
- Iterator> it = warpList.entrySet().iterator();
- while (it.hasNext()) {
- Entry en = it.next();
- // Chck the warp sign
- Block b = en.getValue().getBlock();
- // Check that a warp sign is still there
- if (!b.getType().equals(Material.SIGN_POST) && !b.getType().equals(Material.WALL_SIGN)) {
- plugin.getLogger().warning("Warp at location " + en.getValue() + " has no sign - removing.");
- it.remove();
- }
- }
- }
-
/**
* Stores warps in the warp array
*
@@ -276,139 +98,10 @@ public class WarpSigns extends AddonHelper implements Listener {
}
warpList.put(playerUUID, loc);
saveWarpList();
- // Update warp signs
- // Run one tick later because text gets updated at the end of tick
- plugin.getServer().getScheduler().runTask(plugin, new Runnable() {
-
- @Override
- public void run() {
- plugin.getWarpPanel().addWarp(playerUUID);
- plugin.getWarpPanel().updatePanel();
- Bukkit.getPluginManager().callEvent(new WarpInitiateEvent(plugin, loc, playerUUID));
- }});
+ Bukkit.getPluginManager().callEvent(new WarpInitiateEvent(plugin, loc, playerUUID));
return true;
}
- /**
- * Removes a warp when the welcome sign is destroyed. Called by
- * WarpSigns.java.
- *
- * @param uuid
- */
- public void removeWarp(UUID uuid) {
- if (warpList.containsKey(uuid)) {
- popSign(warpList.get(uuid));
- warpList.remove(uuid);
- }
- saveWarpList();
- // Update warp signs
- // Run one tick later because text gets updated at the end of tick
- plugin.getServer().getScheduler().runTask(plugin, new Runnable() {
-
- @Override
- public void run() {
- plugin.getWarpPanel().updatePanel();
-
- }});
- }
-
- /**
- * Changes the sign to red if it exists
- * @param loc
- */
- private void popSign(Location loc) {
- Block b = loc.getBlock();
- if (b.getType().equals(Material.SIGN_POST) || b.getType().equals(Material.WALL_SIGN)) {
- Sign s = (Sign) b.getState();
- if (s != null) {
- if (s.getLine(0).equalsIgnoreCase(ChatColor.GREEN + plugin.getLocale().get("warps.welcomeLine"))) {
- s.setLine(0, ChatColor.RED + plugin.getLocale().get("warps.welcomeLine"));
- s.update(true, false);
- }
- }
- }
- }
-
- /**
- * Removes a warp at a location.
- *
- * @param loc
- */
- public void removeWarp(Location loc) {
- //plugin.getLogger().info("Asked to remove warp at " + loc);
- popSign(loc);
- Iterator> it = warpList.entrySet().iterator();
- while (it.hasNext()) {
- Entry en = it.next();
- if (en.getValue().equals(loc)) {
- // Inform player
- Player p = plugin.getServer().getPlayer(en.getKey());
- if (p != null) {
- // Inform the player
- Util.sendMessage(p, ChatColor.RED + plugin.getLocale(p.getUniqueId()).get("warps.sign-removed"));
- }
- /*
- else {
- plugin.getMessages().setMessage(en.getKey(), ChatColor.RED + plugin.myLocale(en.getKey()).warpssignRemoved);
- }
- */
- it.remove();
- }
- }
- saveWarpList();
- plugin.getWarpPanel().updatePanel();
- }
-
- /**
- * Lists all the known warps
- *
- * @return String set of warps
- */
- public Set listWarps() {
- // Check if any of the warp locations are null
- Iterator> it = warpList.entrySet().iterator();
- while (it.hasNext()) {
- Entry en = it.next();
- // Check if the location of the warp still exists, if not, delete it
- if (en.getValue() == null) {
- it.remove();
- }
- }
- return warpList.keySet();
- }
-
- /**
- * @return Sorted list of warps with most recent players listed first
- */
- public Collection listSortedWarps() {
- // Bigger value of time means a more recent login
- TreeMap map = new TreeMap();
- Iterator> it = warpList.entrySet().iterator();
- while (it.hasNext()) {
- Entry en = it.next();
- // Check if the location of the warp still exists, if not, delete it
- if (en.getValue() == null) {
- it.remove();
- } else {
- UUID uuid = en.getKey();
- // If never played, will be zero
- long lastPlayed = plugin.getServer().getOfflinePlayer(uuid).getLastPlayed();
- // This aims to avoid the chance that players logged off at exactly the same time
- if (!map.isEmpty() && map.containsKey(lastPlayed)) {
- lastPlayed = map.firstKey() - 1;
- }
- map.put(lastPlayed, uuid);
- }
- }
-
- Collection result = map.descendingMap().values();
- // Fire event
- WarpListEvent event = new WarpListEvent(plugin, result);
- plugin.getServer().getPluginManager().callEvent(event);
- // Get the result of any changes by listeners
- result = event.getWarps();
- return result;
- }
/**
* Provides the location of the warp for player or null if one is not found
*
@@ -441,5 +134,457 @@ public class WarpSigns extends AddonHelper implements Listener {
return "";
}
+ /**
+ * Get sorted list of warps with most recent players listed first
+ * @return UUID collenction
+ */
+ public Collection getSortedWarps() {
+ // Bigger value of time means a more recent login
+ TreeMap map = new TreeMap();
+ Iterator> it = warpList.entrySet().iterator();
+ while (it.hasNext()) {
+ Entry en = it.next();
+ // Check if the location of the warp still exists, if not, delete it
+ if (en.getValue() == null) {
+ it.remove();
+ } else {
+ UUID uuid = en.getKey();
+ // If never played, will be zero
+ long lastPlayed = plugin.getServer().getOfflinePlayer(uuid).getLastPlayed();
+ // This aims to avoid the chance that players logged off at exactly the same time
+ if (!map.isEmpty() && map.containsKey(lastPlayed)) {
+ lastPlayed = map.firstKey() - 1;
+ }
+ map.put(lastPlayed, uuid);
+ }
+ }
+
+ Collection result = map.descendingMap().values();
+ // Fire event
+ WarpListEvent event = new WarpListEvent(plugin, result);
+ plugin.getServer().getPluginManager().callEvent(event);
+ // Get the result of any changes by listeners
+ result = event.getWarps();
+ return result;
+ }
+
+ /**
+ * Lists all the known warps
+ *
+ * @return UUID set of warps
+ */
+ public Set listWarps() {
+ // Check if any of the warp locations are null
+ Iterator> it = warpList.entrySet().iterator();
+ while (it.hasNext()) {
+ Entry en = it.next();
+ // Check if the location of the warp still exists, if not, delete it
+ if (en.getValue() == null) {
+ it.remove();
+ }
+ }
+ return warpList.keySet();
+ }
+
+ /**
+ * Load the warps and checks if they still exist
+ */
+ public void loadWarpList() {
+ plugin.getLogger().info("Loading warps...");
+ warpList = new HashMap<>();
+ try {
+ WarpsDO warps = handler.loadObject("warps");
+ // If there's nothing there, start fresh
+ if (warps == null) {
+ if (DEBUG)
+ Bukkit.getLogger().info("DEBUG: nothing in the database");
+ warpList = new HashMap<>();
+ } else {
+ if (DEBUG)
+ Bukkit.getLogger().info("DEBUG: something in the database");
+ warpList = warps.getWarpSigns();
+ if (DEBUG)
+ Bukkit.getLogger().info("DEBUG: warpList size = " + warpList.size());
+ }
+ } catch (InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException
+ | SecurityException | ClassNotFoundException | IntrospectionException | SQLException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ Iterator> it = warpList.entrySet().iterator();
+ while (it.hasNext()) {
+ Entry en = it.next();
+ // Check the warp sign
+ Block b = en.getValue().getBlock();
+ // Check that a warp sign is still there
+ if (!b.getType().equals(Material.SIGN_POST) && !b.getType().equals(Material.WALL_SIGN)) {
+ plugin.getLogger().warning("Warp at location " + en.getValue() + " has no sign - removing.");
+ it.remove();
+ }
+ }
+ }
+
+ /**
+ * Checks to see if a sign has been broken
+ * @param e
+ */
+ @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = false)
+ public void onSignBreak(BlockBreakEvent e) {
+ Block b = e.getBlock();
+ User player = User.getInstance(e.getPlayer());
+ if (b.getWorld().equals(IslandWorld.getIslandWorld()) || b.getWorld().equals(IslandWorld.getNetherWorld())) {
+ if (b.getType().equals(Material.SIGN_POST) || b.getType().equals(Material.WALL_SIGN)) {
+ Sign s = (Sign) b.getState();
+ if (s != null) {
+ //plugin.getLogger().info("DEBUG: sign found at location " + s.toString());
+ if (s.getLine(0).equalsIgnoreCase(ChatColor.GREEN + plugin.getConfig().getString("welcomeLine"))) {
+ // Do a quick check to see if this sign location is in
+ //plugin.getLogger().info("DEBUG: welcome sign");
+ // the list of warp signs
+ if (warpList.containsValue(s.getLocation())) {
+ //plugin.getLogger().info("DEBUG: warp sign is in list");
+ // Welcome sign detected - check to see if it is
+ // this player's sign
+ if ((warpList.containsKey(player.getUniqueId()) && warpList.get(player.getUniqueId()).equals(s.getLocation()))) {
+ // Player removed sign
+ removeWarp(s.getLocation());
+ Bukkit.getPluginManager().callEvent(new WarpRemoveEvent(plugin, s.getLocation(), player.getUniqueId()));
+ } else if (player.isOp() || player.hasPermission(us.tastybento.bskyblock.config.Settings.PERMPREFIX + "mod.removesign")) {
+ // Op or mod removed sign
+ player.sendMessage("warps.removed");
+ removeWarp(s.getLocation());
+ Bukkit.getPluginManager().callEvent(new WarpRemoveEvent(plugin, s.getLocation(), player.getUniqueId()));
+ } else {
+ // Someone else's sign - not allowed
+ player.sendMessage("warps.error.no-remove");
+ e.setCancelled(true);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * Event handler for Sign Changes
+ *
+ * @param e
+ */
+ @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = false)
+ public void onSignWarpCreate(SignChangeEvent e) {
+ plugin.getLogger().info("DEBUG: SignChangeEvent called");
+ String title = e.getLine(0);
+ User player = User.getInstance(e.getPlayer());
+ if (player.getWorld().equals(IslandWorld.getIslandWorld()) || player.getWorld().equals(IslandWorld.getNetherWorld())) {
+ plugin.getLogger().info("DEBUG: Correct world");
+ if (e.getBlock().getType().equals(Material.SIGN_POST) || e.getBlock().getType().equals(Material.WALL_SIGN)) {
+
+ plugin.getLogger().info("DEBUG: The first line of the sign says " + title);
+ // Check if someone is changing their own sign
+ // This should never happen !!
+ if (title.equalsIgnoreCase(plugin.getConfig().getString("welcomeLine"))) {
+ plugin.getLogger().info("DEBUG: Welcome sign detected");
+ // Welcome sign detected - check permissions
+ if (!(player.hasPermission(us.tastybento.bskyblock.config.Settings.PERMPREFIX + "island.addwarp"))) {
+ player.sendMessage("warps.error.no-permission");
+ return;
+ }
+ /*
+ if(!(ASkyBlockAPI.getInstance().getLongIslandLevel(player.getUniqueId()) > Settings.warpLevelsRestriction)){
+ player.sendMessage(ChatColor.RED + "warps.error.NotEnoughLevel"));
+ return;
+ }
+ */
+ // Check that the player is on their island
+ if (!(bSkyBlock.getIslands().playerIsOnIsland(player))) {
+ player.sendMessage("warps.error.not-on-island");
+ e.setLine(0, ChatColor.RED + plugin.getConfig().getString("welcomeLine"));
+ return;
+ }
+ // Check if the player already has a sign
+ final Location oldSignLoc = getWarp(player.getUniqueId());
+ if (oldSignLoc == null) {
+ //plugin.getLogger().info("DEBUG: Player does not have a sign already");
+ // First time the sign has been placed or this is a new
+ // sign
+ if (addWarp(player.getUniqueId(), e.getBlock().getLocation())) {
+ player.sendMessage("warps.success");
+ e.setLine(0, ChatColor.GREEN + plugin.getConfig().getString("welcomeLine"));
+ for (int i = 1; i<4; i++) {
+ e.setLine(i, ChatColor.translateAlternateColorCodes('&', e.getLine(i)));
+ }
+ } else {
+ player.sendMessage("warps.error.duplicate");
+ e.setLine(0, ChatColor.RED + plugin.getConfig().getString("welcomeLine"));
+ for (int i = 1; i<4; i++) {
+ e.setLine(i, ChatColor.translateAlternateColorCodes('&', e.getLine(i)));
+ }
+ }
+ } else {
+ //plugin.getLogger().info("DEBUG: Player already has a Sign");
+ // A sign already exists. Check if it still there and if
+ // so,
+ // deactivate it
+ Block oldSignBlock = oldSignLoc.getBlock();
+ if (oldSignBlock.getType().equals(Material.SIGN_POST) || oldSignBlock.getType().equals(Material.WALL_SIGN)) {
+ // The block is still a sign
+ //plugin.getLogger().info("DEBUG: The block is still a sign");
+ Sign oldSign = (Sign) oldSignBlock.getState();
+ if (oldSign != null) {
+ //plugin.getLogger().info("DEBUG: Sign block is a sign");
+ if (oldSign.getLine(0).equalsIgnoreCase(ChatColor.GREEN + plugin.getConfig().getString("welcomeLine"))) {
+ //plugin.getLogger().info("DEBUG: Old sign had a green welcome");
+ oldSign.setLine(0, ChatColor.RED + plugin.getConfig().getString("welcomeLine"));
+ oldSign.update(true, false);
+ player.sendMessage("warps.deactivate");
+ removeWarp(player.getUniqueId());
+ Bukkit.getPluginManager().callEvent(new WarpRemoveEvent(plugin, oldSign.getLocation(), player.getUniqueId()));
+ }
+ }
+ }
+ // Set up the warp
+ if (addWarp(player.getUniqueId(), e.getBlock().getLocation())) {
+ player.sendMessage("warps.error.success");
+ e.setLine(0, ChatColor.GREEN + plugin.getConfig().getString("welcomeLine"));
+ } else {
+ player.sendMessage("warps.error.duplicate");
+ e.setLine(0, ChatColor.RED + plugin.getConfig().getString("welcomeLine"));
+ }
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * Changes the sign to red if it exists
+ * @param loc
+ */
+ private void popSign(Location loc) {
+ Block b = loc.getBlock();
+ if (b.getType().equals(Material.SIGN_POST) || b.getType().equals(Material.WALL_SIGN)) {
+ Sign s = (Sign) b.getState();
+ if (s != null) {
+ if (s.getLine(0).equalsIgnoreCase(ChatColor.GREEN + plugin.getConfig().getString("welcomeLine"))) {
+ s.setLine(0, ChatColor.RED + plugin.getConfig().getString("welcomeLine"));
+ s.update(true, false);
+ }
+ }
+ }
+ }
+
+ /**
+ * Removes a warp at a location.
+ *
+ * @param loc
+ */
+ public void removeWarp(Location loc) {
+ //plugin.getLogger().info("Asked to remove warp at " + loc);
+ popSign(loc);
+ Iterator> it = warpList.entrySet().iterator();
+ while (it.hasNext()) {
+ Entry en = it.next();
+ if (en.getValue().equals(loc)) {
+ // Inform player
+ User p = User.getInstance(plugin.getServer().getPlayer(en.getKey()));
+ if (p != null) {
+ // Inform the player
+ p.sendMessage("warps.sign-removed");
+ }
+ it.remove();
+ }
+ }
+ saveWarpList();
+ }
-}
\ No newline at end of file
+ /**
+ * Removes a warp when the welcome sign is destroyed. Called by
+ * WarpSigns.java.
+ *
+ * @param uuid
+ */
+ public void removeWarp(UUID uuid) {
+ if (warpList.containsKey(uuid)) {
+ popSign(warpList.get(uuid));
+ warpList.remove(uuid);
+ }
+ saveWarpList();
+ }
+
+ /**
+ * Saves the warp lists to the database
+ */
+ public void saveWarpList() {
+ if (warpList == null) {
+ return;
+ }
+ //plugin.getLogger().info("Saving warps...");
+ try {
+ handler.saveObject(new WarpsDO().save(warpList));
+ } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException | SecurityException
+ | InstantiationException | NoSuchMethodException | IntrospectionException | SQLException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * Gets the warp sign text
+ * @param uuid
+ * @return List of lines
+ */
+ public List getSignText(UUID uuid) {
+ List result = new ArrayList<>();
+ //get the sign info
+ Location signLocation = getWarp(uuid);
+ if (signLocation == null) {
+ plugin.getWarpSignsManager().removeWarp(uuid);
+ } else
+ // Get the sign info if it exists
+ if (signLocation.getBlock().getType().equals(Material.SIGN_POST) || signLocation.getBlock().getType().equals(Material.WALL_SIGN)) {
+ Sign sign = (Sign)signLocation.getBlock().getState();
+ result.addAll(Arrays.asList(sign.getLines()));
+ }
+ return result;
+ }
+
+ /**
+ * Warps a player to a spot in front of a sign
+ * @param user
+ * @param inFront
+ * @param foundWarp
+ * @param directionFacing
+ */
+ private void warpPlayer(User user, Location inFront, UUID foundWarp, BlockFace directionFacing, boolean pvp) {
+ // convert blockface to angle
+ float yaw = blockFaceToFloat(directionFacing);
+ final Location actualWarp = new Location(inFront.getWorld(), inFront.getBlockX() + 0.5D, inFront.getBlockY(),
+ inFront.getBlockZ() + 0.5D, yaw, 30F);
+ user.teleport(actualWarp);
+ if (pvp) {
+ user.sendLegacyMessage(user.getTranslation("igs." + SettingsFlag.PVP_OVERWORLD) + " " + user.getTranslation("igs.allowed"));
+ user.getWorld().playSound(user.getLocation(), Sound.ENTITY_ARROW_HIT, 1F, 1F);
+ } else {
+ user.getWorld().playSound(user.getLocation(), Sound.ENTITY_BAT_TAKEOFF, 1F, 1F);
+ }
+ User warpOwner = User.getInstance(foundWarp);
+ if (!warpOwner.equals(user)) {
+ warpOwner.sendMessage("warps.PlayerWarped", "[name]", user.getName());
+ }
+ }
+
+ /**
+ * Converts block face direction to radial degrees. Returns 0 if block face
+ * is not radial.
+ *
+ * @param face
+ * @return degrees
+ */
+ private float blockFaceToFloat(BlockFace face) {
+ switch (face) {
+ case EAST:
+ return 90F;
+ case EAST_NORTH_EAST:
+ return 67.5F;
+ case EAST_SOUTH_EAST:
+ return 0F;
+ case NORTH:
+ return 0F;
+ case NORTH_EAST:
+ return 45F;
+ case NORTH_NORTH_EAST:
+ return 22.5F;
+ case NORTH_NORTH_WEST:
+ return 337.5F;
+ case NORTH_WEST:
+ return 315F;
+ case SOUTH:
+ return 180F;
+ case SOUTH_EAST:
+ return 135F;
+ case SOUTH_SOUTH_EAST:
+ return 157.5F;
+ case SOUTH_SOUTH_WEST:
+ return 202.5F;
+ case SOUTH_WEST:
+ return 225F;
+ case WEST:
+ return 270F;
+ case WEST_NORTH_WEST:
+ return 292.5F;
+ case WEST_SOUTH_WEST:
+ return 247.5F;
+ default:
+ return 0F;
+ }
+ }
+
+ /**
+ * Warps a user to the warp owner by owner
+ * @param user
+ * @param owner
+ */
+ public void warpPlayer(User user, UUID owner) {
+ final Location warpSpot = plugin.getWarpSignsManager().getWarp(owner);
+ // Check if the warp spot is safe
+ if (warpSpot == null) {
+ user.sendMessage("warps.error.NotReadyYet");
+ plugin.getLogger().warning("Null warp found, owned by " + plugin.getBSkyBlock().getPlayers().getName(owner));
+ return;
+ }
+ // Find out if island is locked
+ // TODO: Fire event
+
+ 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;
+ }
+ // Find out which direction the warp is facing
+ Block b = warpSpot.getBlock();
+ if (b.getType().equals(Material.SIGN_POST) || b.getType().equals(Material.WALL_SIGN)) {
+ Sign sign = (Sign) b.getState();
+ org.bukkit.material.Sign s = (org.bukkit.material.Sign) sign.getData();
+ BlockFace directionFacing = s.getFacing();
+ Location inFront = b.getRelative(directionFacing).getLocation();
+ Location oneDown = b.getRelative(directionFacing).getRelative(BlockFace.DOWN).getLocation();
+ if ((Util.isSafeLocation(inFront))) {
+ plugin.getWarpSignsManager().warpPlayer(user, inFront, owner, directionFacing, pvp);
+ return;
+ } else if (b.getType().equals(Material.WALL_SIGN) && Util.isSafeLocation(oneDown)) {
+ // Try one block down if this is a wall sign
+ plugin.getWarpSignsManager().warpPlayer(user, oneDown, owner, directionFacing, pvp);
+ return;
+ }
+ } else {
+ // Warp has been removed
+ user.sendMessage("warps.error.DoesNotExist");
+ plugin.getWarpSignsManager().removeWarp(warpSpot);
+ return;
+ }
+ if (!(Util.isSafeLocation(warpSpot))) {
+ user.sendMessage("warps.error.NotSafe");
+ // WALL_SIGN's will always be unsafe if the place in front is obscured.
+ if (b.getType().equals(Material.SIGN_POST)) {
+ plugin.getLogger().warning(
+ "Unsafe warp found at " + warpSpot.toString() + " owned by " + plugin.getBSkyBlock().getPlayers().getName(owner));
+
+ }
+ return;
+ } else {
+ final Location actualWarp = new Location(warpSpot.getWorld(), warpSpot.getBlockX() + 0.5D, warpSpot.getBlockY(),
+ warpSpot.getBlockZ() + 0.5D);
+ user.teleport(actualWarp);
+ if (pvp) {
+ user.sendLegacyMessage(user.getTranslation("igs." + SettingsFlag.PVP_OVERWORLD) + " " + user.getTranslation("igs.Allowed"));
+ user.getWorld().playSound(user.getLocation(), Sound.ENTITY_ARROW_HIT, 1F, 1F);
+ } else {
+ user.getWorld().playSound(user.getLocation(), Sound.ENTITY_BAT_TAKEOFF, 1F, 1F);
+ }
+ return;
+ }
+ }
+
+}
diff --git a/src/bskyblock/addin/warps/commands/Commands.java b/src/bskyblock/addin/warps/commands/Commands.java
deleted file mode 100644
index 84ff519..0000000
--- a/src/bskyblock/addin/warps/commands/Commands.java
+++ /dev/null
@@ -1,270 +0,0 @@
-package bskyblock.addin.warps.commands;
-
-import java.util.Set;
-import java.util.UUID;
-
-import org.bukkit.ChatColor;
-import org.bukkit.Location;
-import org.bukkit.Material;
-import org.bukkit.Sound;
-import org.bukkit.block.Block;
-import org.bukkit.block.BlockFace;
-import org.bukkit.block.Sign;
-import org.bukkit.command.CommandSender;
-import org.bukkit.entity.Player;
-
-import bskyblock.addin.warps.AddonHelper;
-import bskyblock.addin.warps.Warp;
-import us.tastybento.bskyblock.api.commands.ArgumentHandler;
-import us.tastybento.bskyblock.api.commands.CanUseResp;
-import us.tastybento.bskyblock.config.Settings;
-import us.tastybento.bskyblock.database.objects.Island;
-import us.tastybento.bskyblock.database.objects.Island.SettingsFlag;
-import us.tastybento.bskyblock.generators.IslandWorld;
-import us.tastybento.bskyblock.util.Util;
-import us.tastybento.bskyblock.util.VaultHelper;
-
-public class Commands extends AddonHelper {
-
- public Commands(Warp plugin) {
- super(plugin);
- setupCommands();
- }
-
- private void setupCommands() {
- // island warp command
- bSkyBlock.addSubCommand(new ArgumentHandler("island") {
-
- @Override
- public CanUseResp canUse(CommandSender sender) {
- if (!(sender instanceof Player)) {
- return new CanUseResp(false);
- }
- if (VaultHelper.hasPerm((Player)sender, Settings.PERMPREFIX + "island.warp")) {
- return new CanUseResp(true);
- }
- return new CanUseResp(false);
- }
-
- @Override
- public void execute(CommandSender sender, String[] args) {
- if (args.length == 1) {
- // Warp somewhere command
- Player player = (Player)sender;
- final Set warpList = plugin.getWarpSigns().listWarps();
- if (warpList.isEmpty()) {
- Util.sendMessage(player, ChatColor.YELLOW + plugin.getLocale(player.getUniqueId()).get("warps.errorNoWarpsYet"));
- if (VaultHelper.hasPerm(player, Settings.PERMPREFIX + "island.addwarp")) {
- Util.sendMessage(player, ChatColor.YELLOW + plugin.getLocale().get("warps.warpTip"));
- } else {
- Util.sendMessage(player, ChatColor.RED + plugin.getLocale(player.getUniqueId()).get("error.NoPermission"));
- }
- return;
- } else {
- // Check if this is part of a name
- UUID foundWarp = null;
- for (UUID warp : warpList) {
- if (warp == null)
- continue;
- if (bSkyBlock.getPlayers().getName(warp).toLowerCase().equals(args[0].toLowerCase())) {
- foundWarp = warp;
- break;
- } else if (bSkyBlock.getPlayers().getName(warp).toLowerCase().startsWith(args[0].toLowerCase())) {
- foundWarp = warp;
- }
- }
- if (foundWarp == null) {
- Util.sendMessage(player, ChatColor.RED + plugin.getLocale(player.getUniqueId()).get("warps.error.DoesNotExist"));
- return;
- } else {
- // Warp exists!
- final Location warpSpot = plugin.getWarpSigns().getWarp(foundWarp);
- // Check if the warp spot is safe
- if (warpSpot == null) {
- Util.sendMessage(player, ChatColor.RED + plugin.getLocale(player.getUniqueId()).get("warps.error.NotReadyYet"));
- plugin.getLogger().warning("Null warp found, owned by " + bSkyBlock.getPlayers().getName(foundWarp));
- return;
- }
- // Find out if island is locked
- // TODO: Fire event
-
- Island island = bSkyBlock.getIslands().getIsland(foundWarp);
- 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;
- }
- // Find out which direction the warp is facing
- Block b = warpSpot.getBlock();
- if (b.getType().equals(Material.SIGN_POST) || b.getType().equals(Material.WALL_SIGN)) {
- Sign sign = (Sign) b.getState();
- org.bukkit.material.Sign s = (org.bukkit.material.Sign) sign.getData();
- BlockFace directionFacing = s.getFacing();
- Location inFront = b.getRelative(directionFacing).getLocation();
- Location oneDown = b.getRelative(directionFacing).getRelative(BlockFace.DOWN).getLocation();
- if ((Util.isSafeLocation(inFront))) {
- warpPlayer(player, inFront, foundWarp, directionFacing, pvp);
- return;
- } else if (b.getType().equals(Material.WALL_SIGN) && Util.isSafeLocation(oneDown)) {
- // Try one block down if this is a wall sign
- warpPlayer(player, oneDown, foundWarp, directionFacing, pvp);
- return;
- }
- } else {
- // Warp has been removed
- Util.sendMessage(player, ChatColor.RED + plugin.getLocale(player.getUniqueId()).get("warps.error.DoesNotExist"));
- plugin.getWarpSigns().removeWarp(warpSpot);
- return;
- }
- if (!(Util.isSafeLocation(warpSpot))) {
- Util.sendMessage(player, ChatColor.RED + plugin.getLocale(player.getUniqueId()).get("warps.error.NotSafe"));
- // WALL_SIGN's will always be unsafe if the place in front is obscured.
- if (b.getType().equals(Material.SIGN_POST)) {
- plugin.getLogger().warning(
- "Unsafe warp found at " + warpSpot.toString() + " owned by " + bSkyBlock.getPlayers().getName(foundWarp));
-
- }
- return;
- } else {
- final Location actualWarp = new Location(warpSpot.getWorld(), warpSpot.getBlockX() + 0.5D, warpSpot.getBlockY(),
- warpSpot.getBlockZ() + 0.5D);
- player.teleport(actualWarp);
- if (pvp) {
- Util.sendMessage(player, ChatColor.BOLD + "" + ChatColor.RED + bSkyBlock.getLocale(player.getUniqueId()).get("igs." + SettingsFlag.PVP_OVERWORLD + " " + bSkyBlock.getLocale(player.getUniqueId()).get("igs.Allowed")));
- player.getWorld().playSound(player.getLocation(), Sound.ENTITY_ARROW_HIT, 1F, 1F);
- } else {
- player.getWorld().playSound(player.getLocation(), Sound.ENTITY_BAT_TAKEOFF, 1F, 1F);
- }
- return;
- }
- }
- }
- }
- }
-
- @Override
- public Set tabComplete(CommandSender sender, String[] args) {
- return null;
- }
-
- @Override
- public String[] usage(CommandSender sender) {
- return new String[]{"[player]", "Warp to player's warp sign"};
- }
- }.alias("warp"));
-
- // island warps command
- bSkyBlock.addSubCommand(new ArgumentHandler("island") {
-
- @Override
- public CanUseResp canUse(CommandSender sender) {
- if (sender instanceof Player) {
- VaultHelper.hasPerm((Player)sender, Settings.PERMPREFIX + "island.warp");
- return new CanUseResp(true);
- }
- return new CanUseResp(false);
- }
-
- @Override
- public void execute(CommandSender sender, String[] args) {
- if (sender instanceof Player) {
- Player player = (Player)sender;
- if (plugin.getWarpSigns().listWarps().isEmpty()) {
- Util.sendMessage(player, ChatColor.YELLOW + plugin.getLocale(player.getUniqueId()).get("warps.error.no-warps-yet"));
- if (VaultHelper.hasPerm(player, Settings.PERMPREFIX + "island.addwarp") && bSkyBlock.getIslands().playerIsOnIsland(player)) {
- Util.sendMessage(player, ChatColor.YELLOW + plugin.getLocale().get("warps.warpTip"));
- }
- } else {
- player.openInventory(plugin.getWarpPanel().getWarpPanel(0));
- }
- }
- }
-
- @Override
- public Set tabComplete(CommandSender sender, String[] args) {
- return null;
- }
-
- @Override
- public String[] usage(CommandSender sender) {
- return new String[]{"", "View warps"};
- }
- }.alias("warps"));
-
-
- }
-
- /**
- * Warps a player to a spot in front of a sign
- * @param player
- * @param inFront
- * @param foundWarp
- * @param directionFacing
- */
- private void warpPlayer(Player player, Location inFront, UUID foundWarp, BlockFace directionFacing, boolean pvp) {
- // convert blockface to angle
- float yaw = blockFaceToFloat(directionFacing);
- final Location actualWarp = new Location(inFront.getWorld(), inFront.getBlockX() + 0.5D, inFront.getBlockY(),
- inFront.getBlockZ() + 0.5D, yaw, 30F);
- player.teleport(actualWarp);
- if (pvp) {
- Util.sendMessage(player, ChatColor.BOLD + "" + ChatColor.RED + bSkyBlock.getLocale(player.getUniqueId()).get("igs." + SettingsFlag.PVP_OVERWORLD + " " + bSkyBlock.getLocale(player.getUniqueId()).get("igs.allowed")));
- player.getWorld().playSound(player.getLocation(), Sound.ENTITY_ARROW_HIT, 1F, 1F);
-
- } else {
-
- player.getWorld().playSound(player.getLocation(), Sound.ENTITY_BAT_TAKEOFF, 1F, 1F);
-
- }
- Player warpOwner = plugin.getServer().getPlayer(foundWarp);
- if (warpOwner != null && !warpOwner.equals(player)) {
- Util.sendMessage(warpOwner, plugin.getLocale(foundWarp).get("warps.PlayerWarped").replace("[name]", player.getName()));
- }
- }
-
- /**
- * Converts block face direction to radial degrees. Returns 0 if block face
- * is not radial.
- *
- * @param face
- * @return degrees
- */
- public float blockFaceToFloat(BlockFace face) {
- switch (face) {
- case EAST:
- return 90F;
- case EAST_NORTH_EAST:
- return 67.5F;
- case EAST_SOUTH_EAST:
- return 0F;
- case NORTH:
- return 0F;
- case NORTH_EAST:
- return 45F;
- case NORTH_NORTH_EAST:
- return 22.5F;
- case NORTH_NORTH_WEST:
- return 337.5F;
- case NORTH_WEST:
- return 315F;
- case SOUTH:
- return 180F;
- case SOUTH_EAST:
- return 135F;
- case SOUTH_SOUTH_EAST:
- return 157.5F;
- case SOUTH_SOUTH_WEST:
- return 202.5F;
- case SOUTH_WEST:
- return 225F;
- case WEST:
- return 270F;
- case WEST_NORTH_WEST:
- return 292.5F;
- case WEST_SOUTH_WEST:
- return 247.5F;
- default:
- return 0F;
- }
- }
-}
diff --git a/src/bskyblock/addin/warps/commands/WarpCommand.java b/src/bskyblock/addin/warps/commands/WarpCommand.java
new file mode 100644
index 0000000..41040b7
--- /dev/null
+++ b/src/bskyblock/addin/warps/commands/WarpCommand.java
@@ -0,0 +1,62 @@
+package bskyblock.addin.warps.commands;
+
+import java.util.List;
+import java.util.Set;
+import java.util.UUID;
+
+import bskyblock.addin.warps.Warp;
+import us.tastybento.bskyblock.api.commands.CompositeCommand;
+import us.tastybento.bskyblock.api.commands.User;
+import us.tastybento.bskyblock.config.Settings;
+
+public class WarpCommand extends CompositeCommand {
+
+ private Warp plugin;
+
+ public WarpCommand(Warp plugin, CompositeCommand bsbIslandCmd) {
+ super(bsbIslandCmd, "warp");
+ this.plugin = plugin;
+ }
+
+ @Override
+ public void setup() {
+ this.setPermission(Settings.PERMPREFIX + "island.warp");
+ this.setOnlyPlayer(true);
+ }
+
+ @Override
+ public boolean execute(User user, List args) {
+ if (args.size() == 1) {
+ // Warp somewhere command
+ final Set warpList = plugin.getWarpSignsManager().listWarps();
+ if (warpList.isEmpty()) {
+ user.sendMessage("warps.errorNoWarpsYet");
+ user.sendMessage("warps.warpTip");
+ return true;
+ } else {
+ // Check if this is part of a name
+ UUID foundWarp = null;
+ for (UUID warp : warpList) {
+ if (warp == null)
+ continue;
+ if (getPlayers().getName(warp).toLowerCase().equals(args.get(0).toLowerCase())) {
+ foundWarp = warp;
+ break;
+ } else if (getPlayers().getName(warp).toLowerCase().startsWith(args.get(0).toLowerCase())) {
+ foundWarp = warp;
+ }
+ }
+ if (foundWarp == null) {
+ user.sendMessage("warps.error.DoesNotExist");
+ return true;
+ } else {
+ // Warp exists!
+ plugin.getWarpSignsManager().warpPlayer(user, foundWarp);
+ }
+ }
+ }
+ return false;
+ }
+
+
+}
diff --git a/src/bskyblock/addin/warps/commands/WarpsCommand.java b/src/bskyblock/addin/warps/commands/WarpsCommand.java
new file mode 100644
index 0000000..fc1bb98
--- /dev/null
+++ b/src/bskyblock/addin/warps/commands/WarpsCommand.java
@@ -0,0 +1,49 @@
+/**
+ *
+ */
+package bskyblock.addin.warps.commands;
+
+import java.util.List;
+
+import bskyblock.addin.warps.Warp;
+import us.tastybento.bskyblock.api.commands.CompositeCommand;
+import us.tastybento.bskyblock.api.commands.User;
+import us.tastybento.bskyblock.config.Settings;
+
+/**
+ * @author ben
+ *
+ */
+public class WarpsCommand extends CompositeCommand {
+
+ private Warp plugin;
+
+ public WarpsCommand(Warp plugin, CompositeCommand bsbIslandCmd) {
+ super(bsbIslandCmd, "warps");
+ this.plugin = plugin;
+ }
+
+ /* (non-Javadoc)
+ * @see us.tastybento.bskyblock.api.commands.BSBCommand#setup()
+ */
+ @Override
+ public void setup() {
+ this.setPermission(Settings.PERMPREFIX + "island.warp");
+ this.setOnlyPlayer(true);
+ }
+
+ /* (non-Javadoc)
+ * @see us.tastybento.bskyblock.api.commands.BSBCommand#execute(us.tastybento.bskyblock.api.commands.User, java.util.List)
+ */
+ @Override
+ public boolean execute(User user, List args) {
+ if (plugin.getWarpSignsManager().listWarps().isEmpty()) {
+ user.sendMessage("warps.error.no-warps-yet");
+ user.sendMessage("warps.warpTip");
+ } else {
+ plugin.getWarpPanelManager().showWarpPanel(user,0);
+ }
+ return true;
+ }
+
+}
diff --git a/src/bskyblock/addin/warps/config/LocaleManager.java b/src/bskyblock/addin/warps/config/LocaleManager.java
deleted file mode 100644
index 3146338..0000000
--- a/src/bskyblock/addin/warps/config/LocaleManager.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package bskyblock.addin.warps.config;
-
-import java.util.UUID;
-
-import bskyblock.addin.warps.Warp;
-import us.tastybento.bskyblock.BSkyBlock;
-import us.tastybento.bskyblock.config.AbstractLocaleManager;
-import us.tastybento.bskyblock.config.BSBLocale;
-import us.tastybento.bskyblock.config.Settings;
-
-public class LocaleManager extends AbstractLocaleManager {
-
- public LocaleManager(Warp plugin) {
- super(plugin);
- }
-
- @Override
- public BSBLocale getLocale(UUID player) {
- //getLogger().info("DEBUG: " + player);
- //getLogger().info("DEBUG: " + getPlayers() == null ? "Players is null":"Players in not null");
- //getLogger().info("DEBUG: " + getPlayers().getPlayer(player));
- //getLogger().info("DEBUG: " + getPlayers().getPlayer(player).getLocale());
- String locale = BSkyBlock.getPlugin().getPlayers().getPlayer(player).getLocale();
- if(locale.isEmpty() || !getLocales().containsKey(locale)) return getLocales().get(Settings.defaultLanguage);
-
- return getLocales().get(locale);
- }
-}
diff --git a/src/bskyblock/addin/warps/database/object/Warps.java b/src/bskyblock/addin/warps/database/object/WarpsDO.java
similarity index 89%
rename from src/bskyblock/addin/warps/database/object/Warps.java
rename to src/bskyblock/addin/warps/database/object/WarpsDO.java
index 45b777a..fe8b776 100644
--- a/src/bskyblock/addin/warps/database/object/Warps.java
+++ b/src/bskyblock/addin/warps/database/object/WarpsDO.java
@@ -8,7 +8,7 @@ import org.bukkit.Location;
import us.tastybento.bskyblock.database.objects.DataObject;
-public class Warps extends DataObject {
+public class WarpsDO extends DataObject {
private String uniqueId = "warps";
private Map warpSigns = new HashMap<>();
@@ -33,7 +33,7 @@ public class Warps extends DataObject {
this.warpSigns = warpSigns;
}
- public Warps save(Map warpList) {
+ public WarpsDO save(Map warpList) {
this.warpSigns = warpList;
return this;
}