diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000000..4e247eee21
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,4 @@
+/.settings
+/target
+/.classpath
+/.project
diff --git a/lib/EssentialsGroupManager.jar b/lib/EssentialsGroupManager.jar
new file mode 100755
index 0000000000..c47bf56150
Binary files /dev/null and b/lib/EssentialsGroupManager.jar differ
diff --git a/lib/Permissions.jar b/lib/Permissions.jar
new file mode 100755
index 0000000000..31c3e5d994
Binary files /dev/null and b/lib/Permissions.jar differ
diff --git a/lib/PermissionsEx.jar b/lib/PermissionsEx.jar
new file mode 100755
index 0000000000..f75038bcac
Binary files /dev/null and b/lib/PermissionsEx.jar differ
diff --git a/lib/README.md b/lib/README.md
deleted file mode 100644
index 746a68b709..0000000000
--- a/lib/README.md
+++ /dev/null
@@ -1,3 +0,0 @@
-These libraries are automatically downloaded by MyWarp when needed. Copied from LWC.
-
-You do not need to download these yourself unless you experience errors or are asked to.
\ No newline at end of file
diff --git a/lib/bpermissions.jar b/lib/bpermissions.jar
new file mode 100755
index 0000000000..a757737552
Binary files /dev/null and b/lib/bpermissions.jar differ
diff --git a/lib/bpermissions2.jar b/lib/bpermissions2.jar
new file mode 100755
index 0000000000..9ab85aaf28
Binary files /dev/null and b/lib/bpermissions2.jar differ
diff --git a/lib/linux-amd64.lib b/lib/linux-amd64.lib
deleted file mode 100644
index 678b7a24a9..0000000000
Binary files a/lib/linux-amd64.lib and /dev/null differ
diff --git a/lib/linux-x86.lib b/lib/linux-x86.lib
deleted file mode 100644
index 03c752866f..0000000000
Binary files a/lib/linux-x86.lib and /dev/null differ
diff --git a/lib/mac-universal.lib b/lib/mac-universal.lib
deleted file mode 100644
index e3c20c0843..0000000000
Binary files a/lib/mac-universal.lib and /dev/null differ
diff --git a/lib/mysql-connector-java-bin.jar b/lib/mysql-connector-java-bin.jar
new file mode 100644
index 0000000000..2405196f9a
Binary files /dev/null and b/lib/mysql-connector-java-bin.jar differ
diff --git a/lib/native/Linux/amd64/libsqlitejdbc.so b/lib/native/Linux/amd64/libsqlitejdbc.so
deleted file mode 100644
index 4a848d057a..0000000000
Binary files a/lib/native/Linux/amd64/libsqlitejdbc.so and /dev/null differ
diff --git a/lib/native/Linux/i386/libsqlitejdbc.so b/lib/native/Linux/i386/libsqlitejdbc.so
deleted file mode 100644
index 9e3923d5e5..0000000000
Binary files a/lib/native/Linux/i386/libsqlitejdbc.so and /dev/null differ
diff --git a/lib/native/Mac/i386/libsqlitejdbc.jnilib b/lib/native/Mac/i386/libsqlitejdbc.jnilib
deleted file mode 100644
index af71e8ddc5..0000000000
Binary files a/lib/native/Mac/i386/libsqlitejdbc.jnilib and /dev/null differ
diff --git a/lib/native/Mac/x86_64/libsqlitejdbc.jnilib b/lib/native/Mac/x86_64/libsqlitejdbc.jnilib
deleted file mode 100644
index 56503cc819..0000000000
Binary files a/lib/native/Mac/x86_64/libsqlitejdbc.jnilib and /dev/null differ
diff --git a/lib/native/Windows/amd64/sqlitejdbc.dll b/lib/native/Windows/amd64/sqlitejdbc.dll
deleted file mode 100644
index af0ea570b9..0000000000
Binary files a/lib/native/Windows/amd64/sqlitejdbc.dll and /dev/null differ
diff --git a/lib/native/Windows/x86/sqlitejdbc.dll b/lib/native/Windows/x86/sqlitejdbc.dll
deleted file mode 100644
index 734ecabad4..0000000000
Binary files a/lib/native/Windows/x86/sqlitejdbc.dll and /dev/null differ
diff --git a/lib/sqlite.jar b/lib/sqlite.jar
index 68619af129..2030ea0f11 100644
Binary files a/lib/sqlite.jar and b/lib/sqlite.jar differ
diff --git a/lib/win-x86.lib b/lib/win-x86.lib
deleted file mode 100644
index e7c364ddb6..0000000000
Binary files a/lib/win-x86.lib and /dev/null differ
diff --git a/pom.xml b/pom.xml
index 87d0566eab..fbb58c0ee2 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1,46 +1,99 @@
-
+
4.0.0
me.taylorkelly.mywarp
MyWarp
- 2.0
MyWarp
+ 2.2-b${BUILD_NUMBER}
http://www.bukkit.org
+
+ UTF-8
+
+
+
+ bukkit-repo
+ http://repo.bukkit.org/content/groups/public/
+
+
+ vault-repo
+ http://ci.herocraftonline.com/plugin/repository/project/Vault/LastSuccessful/repository/
+
+
+ maven-repo
+ http://repo1.maven.org/maven2/
+
+
org.bukkit
bukkit
- 0.0.1-SNAPSHOT
- jar
- compile
+ 1.3.1-R1.0
- ru.tehkode
- PermissionsEx
- [1.02,)
+ commons-lang
+ commons-lang
+ 2.3
- com.nijikokun.bukkit
- Permissions
- [2.5.5,)
+ net.milkbowl.vault
+ Vault
+ 1.2.17-SNAPSHOT
- com.nijikokun.bukkit
- Permissions
- [3.0.6,)
+ org.xerial
+ sqlite-jdbc
+ 3.7.2
- org.anjocaido
- GroupManager
- 1.0-alpha-5-SNAPSHOT
+ mysql
+ mysql-connector-java
+ 5.1.21
- me.taylorkelly.help
- Help
- [0.2,)
+ de.bananaco.permissions.Permissions
+ bPermissions
+ 2.0.9a
+ system
+ ${project.basedir}/lib/bpermissions.jar
+
+
+ de.bananaco.permissions.Permissions
+ bPermissions2
+ 2.9.0
+ system
+ ${project.basedir}/lib/bpermissions2.jar
+
+
+ com.nijikokun.bukkit.Permissions.Permissions
+ Permissions
+ 3.1.6
+ system
+ ${project.basedir}/lib/Permissions.jar
+
+
+ org.anjocaido.groupmanager.GroupManager
+ GroupManager
+ 1.9.42
+ system
+ ${project.basedir}/lib/EssentialsGroupManager.jar
+
+
+ ru.tehkode
+ PermissionsEx
+ 1.19.2
+ system
+ ${project.basedir}/lib/PermissionsEx.jar
${project.name}
+ clean install
+
+
+ src/main/resources
+ true
+
+
org.apache.maven.plugins
@@ -49,29 +102,9 @@
1.6
1.6
- UTF-8
-
-
-
- org.apache.maven.plugins
- maven-resources-plugin
- 2.4.3
-
UTF-8
-
- org.apache.maven.plugins
- maven-jar-plugin
- 2.3.1
-
-
-
- ../lib/sqlite.jar ../lib/mysql-connector-java-bin.jar
-
-
-
-
\ No newline at end of file
diff --git a/readme.md b/readme.md
index 1e483d2b07..c14b459805 100644
--- a/readme.md
+++ b/readme.md
@@ -9,7 +9,5 @@ For compilation, you need :
* JDK 6 (Sun JDK or OpenJDK Highlight recommanded)
* Install [Maven 3](http://maven.apache.org/download.html)
-* Check out and install [Bukkit](http://github.com/Bukkit/Bukkit) and [CraftBukkit](http://github.com/Bukkit/CraftBukkit)
* Check out this repo
-* Get the Permissions plugin jar and run `mvn install:install-file -Dfile=Permissions.jar -DgroupId=org.bukkit -DartifactId=permissions -Dversion=2.0 -Dpackaging=jar`
* `mvn clean install`
diff --git a/src/main/java/me/taylorkelly/mywarp/Lister.java b/src/main/java/me/taylorkelly/mywarp/Lister.java
deleted file mode 100644
index f41fb9a47e..0000000000
--- a/src/main/java/me/taylorkelly/mywarp/Lister.java
+++ /dev/null
@@ -1,96 +0,0 @@
-package me.taylorkelly.mywarp;
-
-import java.util.ArrayList;
-
-import org.angelsl.minecraft.randomshit.fontwidth.MinecraftFontWidthCalculator;
-import org.bukkit.ChatColor;
-import org.bukkit.entity.Player;
-
-
-public class Lister {
- private WarpList warpList;
- private Player player;
-
- private int maxPages;
- private int page;
-
- private static final int WARPS_PER_PAGE = 8;
- ArrayList sortedWarps;
-
- public Lister(WarpList warpList) {
- this.warpList = warpList;
- }
-
- public void addPlayer(Player player) {
- this.player = player;
- }
-
- public void setPage(int page) {
- this.page = page;
- int start = (page-1)*WARPS_PER_PAGE;
- sortedWarps = warpList.getSortedWarps(player, start, WARPS_PER_PAGE);
- maxPages = (int)Math.ceil(warpList.getMaxWarps(player)/(double)WARPS_PER_PAGE);
- }
-
- public void list() {
- String intro = "------------------- Page " + page + "/" + maxPages + " -------------------";
- player.sendMessage(ChatColor.YELLOW + intro);
- for(Warp warp: sortedWarps) {
- String name = warp.name;
- String creator = (warp.creator.equalsIgnoreCase(player.getName()))?"you":warp.creator;
- int x = (int) Math.round(warp.x);
- int y = warp.y;
- int z = (int) Math.round(warp.z);
- String color;
- if(warp.playerIsCreator(player.getName())) {
- color = ChatColor.AQUA.toString();
- } else if(warp.publicAll) {
- color = ChatColor.GREEN.toString();
- } else {
- color = ChatColor.RED.toString();
- }
-
-
- String location = " @(" + x + ", " + y + ", " + z + ")";
- String creatorString = (warp.publicAll?"(+)":"(-)") + " by " + creator;
-
- //Find remaining length left
- int left = MinecraftFontWidthCalculator.getStringWidth(intro) - MinecraftFontWidthCalculator.getStringWidth("''" + creatorString + location);
-
- int nameLength = MinecraftFontWidthCalculator.getStringWidth(name);
- if(left > nameLength) {
- name = "'" + name + "'" + ChatColor.WHITE + creatorString + whitespace(left - nameLength);
- } else if (left < nameLength) {
- name = "'" + substring(name, left) + "'" + ChatColor.WHITE + creatorString;
- }
-
- player.sendMessage(color + name + location);
- }
- }
-
- /**
- * Lob shit off that string till it fits.
- */
- private String substring(String name, int left) {
- while(MinecraftFontWidthCalculator.getStringWidth(name) > left) {
- name = name.substring(0, name.length()-1);
- }
- return name;
- }
-
- public int getMaxPages(Player player) {
- return (int)Math.ceil(warpList.getMaxWarps(player)/(double)WARPS_PER_PAGE);
- }
-
- public String whitespace(int length) {
- int spaceWidth = MinecraftFontWidthCalculator.getStringWidth(" ");
-
- StringBuilder ret = new StringBuilder();
-
- for(int i = 0; i < length; i+=spaceWidth) {
- ret.append(" ");
- }
-
- return ret.toString();
- }
-}
diff --git a/src/main/java/me/taylorkelly/mywarp/MWBlockListener.java b/src/main/java/me/taylorkelly/mywarp/MWBlockListener.java
deleted file mode 100644
index d4cea55e1a..0000000000
--- a/src/main/java/me/taylorkelly/mywarp/MWBlockListener.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package me.taylorkelly.mywarp;
-
-import org.bukkit.ChatColor;
-import org.bukkit.entity.Player;
-import org.bukkit.event.block.BlockListener;
-import org.bukkit.event.block.SignChangeEvent;
-
-public class MWBlockListener extends BlockListener
-{
- public MWBlockListener(WarpList list)
- {
- }
-
- public void onSignChange(SignChangeEvent event)
- {
- Player player = event.getPlayer();
-
- if (SignWarp.isSignWarp(event))
- if (WarpPermissions.createSignWarp(player)) {
- player.sendMessage(ChatColor.AQUA + "Successfully created a SignWarp");
- }
- else {
- player.sendMessage(ChatColor.RED + "You do not have permission to create a SignWarp");
- event.setCancelled(true);
- }
- }
-}
\ No newline at end of file
diff --git a/src/main/java/me/taylorkelly/mywarp/MWPlayerListener.java b/src/main/java/me/taylorkelly/mywarp/MWPlayerListener.java
deleted file mode 100644
index f92af60c48..0000000000
--- a/src/main/java/me/taylorkelly/mywarp/MWPlayerListener.java
+++ /dev/null
@@ -1,52 +0,0 @@
-package me.taylorkelly.mywarp;
-
-import org.bukkit.Location;
-import org.bukkit.Server;
-import org.bukkit.Chunk;
-import org.bukkit.World;
-import org.bukkit.block.Block;
-import org.bukkit.block.Sign;
-import org.bukkit.entity.Player;
-import org.bukkit.event.block.Action;
-import org.bukkit.event.player.PlayerChatEvent;
-import org.bukkit.event.player.PlayerInteractEvent;
-import org.bukkit.event.player.PlayerListener;
-import org.bukkit.event.player.PlayerTeleportEvent;
-
-public class MWPlayerListener extends PlayerListener
-{
- private WarpList warpList;
-
- public MWPlayerListener(WarpList warpList)
- {
- this.warpList = warpList;
- }
-
- public void onPlayerInteract(PlayerInteractEvent event)
- {
- if (event.getAction().equals(Action.RIGHT_CLICK_BLOCK)) {
- Block block = event.getClickedBlock();
- if (((block.getState() instanceof Sign)) && (SignWarp.isSignWarp((Sign)block.getState())) && (WarpPermissions.signWarp(event.getPlayer())))
- SignWarp.warpSign((Sign)block.getState(), this.warpList, event.getPlayer());
- }
- }
-
- public void onPlayerChat(PlayerChatEvent event)
- {
- Player player = event.getPlayer();
- if (this.warpList.waitingForWelcome(player)) {
- this.warpList.setWelcomeMessage(player, event.getMessage());
- this.warpList.notWaiting(player);
- event.setCancelled(true);
- }
- }
-
- @Override
- public void onPlayerTeleport(PlayerTeleportEvent event) {
- World world = event.getPlayer().getWorld();
- Chunk chunk = world.getChunkAt(event.getTo());
- int x = chunk.getX();
- int z = chunk.getZ();
- world.refreshChunk(x, z);
- }
-}
\ No newline at end of file
diff --git a/src/main/java/me/taylorkelly/mywarp/MyWarp.java b/src/main/java/me/taylorkelly/mywarp/MyWarp.java
index 35b1e5e27a..113d0580e1 100644
--- a/src/main/java/me/taylorkelly/mywarp/MyWarp.java
+++ b/src/main/java/me/taylorkelly/mywarp/MyWarp.java
@@ -5,19 +5,38 @@
import java.io.FileOutputStream;
import java.io.IOException;
import java.sql.Connection;
-import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
+import me.taylorkelly.mywarp.commands.AdminWarpToCommand;
+import me.taylorkelly.mywarp.commands.CommandHandler;
+import me.taylorkelly.mywarp.commands.CreateCommand;
+import me.taylorkelly.mywarp.commands.CreatePrivateCommand;
+import me.taylorkelly.mywarp.commands.DeleteCommand;
+import me.taylorkelly.mywarp.commands.GiveCommand;
+import me.taylorkelly.mywarp.commands.HelpCommand;
+import me.taylorkelly.mywarp.commands.InviteCommand;
+import me.taylorkelly.mywarp.commands.ListCommand;
+import me.taylorkelly.mywarp.commands.PointCommand;
+import me.taylorkelly.mywarp.commands.PrivateCommand;
+import me.taylorkelly.mywarp.commands.PublicCommand;
+import me.taylorkelly.mywarp.commands.ReloadCommand;
+import me.taylorkelly.mywarp.commands.ListAllCommand;
+import me.taylorkelly.mywarp.commands.SearchCommand;
+import me.taylorkelly.mywarp.commands.UninviteCommand;
+import me.taylorkelly.mywarp.commands.WarpToCommand;
+import me.taylorkelly.mywarp.commands.WelcomeCommand;
+import me.taylorkelly.mywarp.data.WarpList;
import me.taylorkelly.mywarp.griefcraft.Updater;
+import me.taylorkelly.mywarp.listeners.MWBlockListener;
+import me.taylorkelly.mywarp.listeners.MWPlayerListener;
+import me.taylorkelly.mywarp.permissions.WarpPermissions;
+import me.taylorkelly.mywarp.sql.ConnectionManager;
+import me.taylorkelly.mywarp.utils.WarpLogger;
-import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
-import org.bukkit.entity.Player;
-import org.bukkit.event.Event;
-import org.bukkit.event.Event.Priority;
-import org.bukkit.event.Event.Type;
+import org.bukkit.plugin.PluginManager;
import org.bukkit.plugin.java.JavaPlugin;
public class MyWarp extends JavaPlugin {
@@ -28,7 +47,9 @@ public class MyWarp extends JavaPlugin {
public String name;
public String version;
private Updater updater;
- public static final Logger log = Logger.getLogger("Minecraft");
+ private PluginManager pm;
+ private CommandHandler commandHandler;
+ private static WarpPermissions warpPermissions;
@Override
public void onDisable() {
@@ -39,33 +60,60 @@ public void onDisable() {
public void onEnable() {
name = this.getDescription().getName();
version = this.getDescription().getVersion();
+ pm = getServer().getPluginManager();
- WarpSettings.initialize(getDataFolder());
+ WarpSettings.initialize(this);
libCheck();
if(!sqlCheck()) { return; }
+ File newDatabase = new File(getDataFolder(), "warps.db");
+ File oldDatabase = new File("homes-warps.db");
+ if (!newDatabase.exists() && oldDatabase.exists()) {
+ updateFiles(oldDatabase, newDatabase);
+ }
+
Connection conn = ConnectionManager.initialize();
if (conn == null) {
- log.log(Level.SEVERE, "[MYWARP] Could not establish SQL connection. Disabling MyWarp");
+ WarpLogger.severe("Could not establish SQL connection. Disabling MyWarp");
getServer().getPluginManager().disablePlugin(this);
return;
}
warpList = new WarpList(getServer());
- blockListener = new MWBlockListener(warpList);
- playerListener = new MWPlayerListener(warpList);
+ warpPermissions = new WarpPermissions(this);
+ blockListener = new MWBlockListener(this);
+ playerListener = new MWPlayerListener(this);
- WarpPermissions.initialize(getServer());
- WarpHelp.initialize(this);
+ pm.registerEvents(blockListener, this);
+ pm.registerEvents(playerListener, this);
+
+ commandHandler = new CommandHandler(this);
- getServer().getPluginManager().registerEvent(Type.PLAYER_CHAT, playerListener, Priority.Monitor, this);
- getServer().getPluginManager().registerEvent(Type.PLAYER_INTERACT, playerListener, Priority.Monitor, this);
- getServer().getPluginManager().registerEvent(Type.SIGN_CHANGE, blockListener, Priority.Monitor, this);
- if(WarpSettings.loadChunks) {
- // We dont need to register for teleporting if we dont want to load chunks.
- getServer().getPluginManager().registerEvent(Event.Type.PLAYER_TELEPORT, playerListener, Priority.Monitor, this);
- }
+ // basic commands
+ commandHandler.addCommand(new CreateCommand(this));
+ commandHandler.addCommand(new CreatePrivateCommand(this));
+ commandHandler.addCommand(new DeleteCommand(this));
+ commandHandler.addCommand(new ListCommand(this));
+ commandHandler.addCommand(new ListAllCommand(this));
+ commandHandler.addCommand(new PointCommand(this));
+ commandHandler.addCommand(new SearchCommand(this));
+ commandHandler.addCommand(new WelcomeCommand(this));
+ commandHandler.addCommand(new WarpToCommand(this));
+
+ // social commands
+ commandHandler.addCommand(new GiveCommand(this));
+ commandHandler.addCommand(new InviteCommand(this));
+ commandHandler.addCommand(new PrivateCommand(this));
+ commandHandler.addCommand(new PublicCommand(this));
+ commandHandler.addCommand(new UninviteCommand(this));
+
+ // help command
+ commandHandler.addCommand(new HelpCommand(this));
+
+ // admin commands
+ commandHandler.addCommand(new AdminWarpToCommand(this));
+ commandHandler.addCommand(new ReloadCommand(this));
WarpLogger.info(name + " " + version + " enabled");
}
@@ -140,305 +188,9 @@ private static void copyFile(File fromFile, File toFile) {
}
}
- private boolean warning;
-
+ @Override
public boolean onCommand(CommandSender sender, Command command, String commandLabel, String[] args) {
- String[] split = args;
- String commandName = command.getName().toLowerCase();
-
- if (sender instanceof Player) {
- Player player = (Player) sender;
- if (commandName.equals("warp") || commandName.equals("mywarp") || commandName.equals("mw")) {
- /**
- * /warp reload
- */
- if (split.length == 1 && split[0].equalsIgnoreCase("reload") && WarpPermissions.isAdmin(player)) {
- WarpSettings.initialize(getDataFolder());
- player.sendMessage("[MyWarp] Reloading config");
- /**
- * /warp list or /warp list #
- */
- } else if ((split.length == 1 || (split.length == 2 && isInteger(split[1]))) && split[0].equalsIgnoreCase("list")
- && WarpPermissions.list(player)) {
- Lister lister = new Lister(warpList);
- lister.addPlayer(player);
-
- if (split.length == 2) {
- int page = Integer.parseInt(split[1]);
- if (page < 1) {
- player.sendMessage(ChatColor.RED + "Page number can't be below 1.");
- return true;
- } else if (page > lister.getMaxPages(player)) {
- player.sendMessage(ChatColor.RED + "There are only " + lister.getMaxPages(player) + " pages of warps");
- return true;
- }
- lister.setPage(page);
- } else {
- lister.setPage(1);
- }
- lister.list();
-
- /**
- * /warp slist
- */
- } else if (split.length == 1 && split[0].equalsIgnoreCase("slist") && WarpPermissions.list(player)) {
- warpList.list(player);
- /**
- * /warp search
- */
- } else if (split.length > 1 && split[0].equalsIgnoreCase("search") && WarpPermissions.search(player)) {
- String name = "";
- for (int i = 1; i < split.length; i++) {
- name += split[i];
- if (i + 1 < split.length) {
- name += " ";
- }
- }
-
- Searcher searcher = new Searcher(warpList);
- searcher.addPlayer(player);
- searcher.setQuery(name);
- searcher.search();
- /**
- * /warp create
- */
- } else if (split.length > 1 && (split[0].equalsIgnoreCase("create") || split[0].equalsIgnoreCase("set"))
- && (WarpPermissions.publicCreate(player) || WarpPermissions.privateCreate(player))) {
- String name = "";
- for (int i = 1; i < split.length; i++) {
- name += split[i];
- if (i + 1 < split.length) {
- name += " ";
- }
- }
- if (WarpPermissions.publicCreate(player)) {
- warpList.addWarp(name, player);
- } else {
- warpList.addWarpPrivate(name, player);
- }
- /**
- * /warp point
- */
- } else if (split.length > 1 && split[0].equalsIgnoreCase("point") && WarpPermissions.compass(player)) {
- String name = "";
- for (int i = 1; i < split.length; i++) {
- name += split[i];
- if (i + 1 < split.length) {
- name += " ";
- }
- }
- warpList.point(name, player);
- /**
- * /warp pcreate
- */
- } else if (split.length > 1 && split[0].equalsIgnoreCase("pcreate") && WarpPermissions.privateCreate(player)) {
- String name = "";
- for (int i = 1; i < split.length; i++) {
- name += split[i];
- if (i + 1 < split.length) {
- name += " ";
- }
- }
-
- warpList.addWarpPrivate(name, player);
- /**
- * /warp delete
- */
- } else if (split.length > 1 && split[0].equalsIgnoreCase("delete") && WarpPermissions.delete(player)) {
- String name = "";
- for (int i = 1; i < split.length; i++) {
- name += split[i];
- if (i + 1 < split.length) {
- name += " ";
- }
- }
-
- warpList.deleteWarp(name, player);
- /**
- * /warp welcome
- */
- } else if (split.length > 1 && split[0].equalsIgnoreCase("welcome") && WarpPermissions.welcome(player)) {
- String name = "";
- for (int i = 1; i < split.length; i++) {
- name += split[i];
- if (i + 1 < split.length) {
- name += " ";
- }
- }
-
- warpList.welcomeMessage(name, player);
- /**
- * /warp private
- */
- } else if (split.length > 1 && split[0].equalsIgnoreCase("private") && WarpPermissions.canPrivate(player)) {
- String name = "";
- for (int i = 1; i < split.length; i++) {
- name += split[i];
- if (i + 1 < split.length) {
- name += " ";
- }
- }
-
- warpList.privatize(name, player);
- /**
- * /warp public
- */
- } else if (split.length > 1 && split[0].equalsIgnoreCase("public") && WarpPermissions.canPublic(player)) {
- String name = "";
- for (int i = 1; i < split.length; i++) {
- name += split[i];
- if (i + 1 < split.length) {
- name += " ";
- }
- }
-
- warpList.publicize(name, player);
-
- /**
- * /warp give
- */
- } else if (split.length > 2 && split[0].equalsIgnoreCase("give") && WarpPermissions.give(player)) {
- Player givee = getServer().getPlayer(split[1]);
- // TODO Change to matchPlayer
- String giveeName = (givee == null) ? split[1] : givee.getName();
-
- String name = "";
- for (int i = 2; i < split.length; i++) {
- name += split[i];
- if (i + 1 < split.length) {
- name += " ";
- }
- }
-
- warpList.give(name, player, giveeName);
-
- /**
- * /warp invite
- */
- } else if (split.length > 2 && split[0].equalsIgnoreCase("invite") && WarpPermissions.invite(player)) {
- Player invitee = getServer().getPlayer(split[1]);
- // TODO Change to matchPlayer
- String inviteeName = (invitee == null) ? split[1] : invitee.getName();
-
- String name = "";
- for (int i = 2; i < split.length; i++) {
- name += split[i];
- if (i + 1 < split.length) {
- name += " ";
- }
- }
-
- warpList.invite(name, player, inviteeName);
- /**
- * /warp uninvite
- */
- } else if (split.length > 2 && split[0].equalsIgnoreCase("uninvite") && WarpPermissions.uninvite(player)) {
- Player invitee = getServer().getPlayer(split[1]);
- String inviteeName = (invitee == null) ? split[1] : invitee.getName();
-
- String name = "";
- for (int i = 2; i < split.length; i++) {
- name += split[i];
- if (i + 1 < split.length) {
- name += " ";
- }
- }
-
- warpList.uninvite(name, player, inviteeName);
-
- /**
- * /warp player
- */
- } else if (split.length > 2 && split[0].equalsIgnoreCase("player") && WarpPermissions.isAdmin(player)) {
- Player invitee = getServer().getPlayer(split[1]);
- //String inviteeName = (invitee == null) ? split[1] : invitee.getName();
-
- // TODO ChunkLoading
- String name = "";
- for (int i = 2; i < split.length; i++) {
- name += split[i];
- if (i + 1 < split.length) {
- name += " ";
- }
- }
- warpList.adminWarpTo(name, invitee, player);
-
- /**
- * /warp help
- */
- } else if (split.length == 1 && split[0].equalsIgnoreCase("help")) {
- ArrayList messages = new ArrayList();
- messages.add(ChatColor.RED + "-------------------- " + ChatColor.WHITE + "/WARP HELP" + ChatColor.RED + " --------------------");
- if (WarpPermissions.warp(player)) {
- messages.add(ChatColor.RED + "/warp [name]" + ChatColor.WHITE + " - Warp to " + ChatColor.GRAY + "[name]");
- }
- if (WarpPermissions.publicCreate(player) || WarpPermissions.privateCreate(player)) {
- messages.add(ChatColor.RED + "/warp create [name]" + ChatColor.WHITE + " - Create warp " + ChatColor.GRAY + "[name]");
- }
- if (WarpPermissions.privateCreate(player)) {
- messages.add(ChatColor.RED + "/warp pcreate [name]" + ChatColor.WHITE + " - Create warp " + ChatColor.GRAY + "[name]");
- }
-
- if (WarpPermissions.delete(player)) {
- messages.add(ChatColor.RED + "/warp delete [name]" + ChatColor.WHITE + " - Delete warp " + ChatColor.GRAY + "[name]");
- }
-
- if (WarpPermissions.welcome(player)) {
- messages.add(ChatColor.RED + "/warp welcome [name]" + ChatColor.WHITE + " - Change the welcome message of " + ChatColor.GRAY
- + "[name]");
- }
-
- if (WarpPermissions.list(player)) {
- messages.add(ChatColor.RED + "/warp list (#)" + ChatColor.WHITE + " - Views warp page " + ChatColor.GRAY + "(#)");
- }
-
- if (WarpPermissions.search(player)) {
- messages.add(ChatColor.RED + "/warp search [query]" + ChatColor.WHITE + " - Search for " + ChatColor.GRAY + "[query]");
- }
- if (WarpPermissions.give(player)) {
- messages.add(ChatColor.RED + "/warp give [player] [name[" + ChatColor.WHITE + " - Give " + ChatColor.GRAY + "[player]"
- + ChatColor.WHITE + " your " + ChatColor.GRAY + "[name]");
- }
- if (WarpPermissions.invite(player)) {
- messages.add(ChatColor.RED + "/warp invite [player] [name]" + ChatColor.WHITE + " - Invite " + ChatColor.GRAY + "[player]"
- + ChatColor.WHITE + " to " + ChatColor.GRAY + "[name]");
- }
- if (WarpPermissions.uninvite(player)) {
- messages.add(ChatColor.RED + "/warp uninvite [player] [name[" + ChatColor.WHITE + " - Uninvite " + ChatColor.GRAY + "[player]"
- + ChatColor.WHITE + " to " + ChatColor.GRAY + "[name]");
- }
- if (WarpPermissions.canPublic(player)) {
- messages.add(ChatColor.RED + "/warp public [name]" + ChatColor.WHITE + " - Makes warp " + ChatColor.GRAY + "[name]" + ChatColor.WHITE
- + " public");
- }
- if (WarpPermissions.canPrivate(player)) {
- messages.add(ChatColor.RED + "/warp private [name]" + ChatColor.WHITE + " - Makes warp " + ChatColor.GRAY + "[name]"
- + ChatColor.WHITE + " private");
- }
- for (String message : messages) {
- player.sendMessage(message);
- }
-
- /**
- * /warp
- */
- } else if (split.length > 0 && WarpPermissions.warp(player)) {
- // TODO ChunkLoading
- String name = "";
- for (int i = 0; i < split.length; i++) {
- name += split[i];
- if (i + 1 < split.length) {
- name += " ";
- }
- }
- warpList.warpTo(name, player);
- } else {
- return false;
- }
- return true;
- }
- }
- return false;
+ return commandHandler.dispatch(sender, command, commandLabel, args);
}
public static boolean isInteger(String string) {
@@ -449,13 +201,16 @@ public static boolean isInteger(String string) {
}
return true;
}
-
- public static void severe(String string, Exception ex) {
- log.log(Level.SEVERE, "[MYHOME]" + string, ex);
-
+
+ public static WarpPermissions getWarpPermissions() {
+ return warpPermissions;
}
-
- public static void severe(String string) {
- log.log(Level.SEVERE, "[MYHOME]" + string);
+
+ public WarpList getWarpList() {
+ return warpList;
+ }
+
+ public CommandHandler getCommandHandler() {
+ return commandHandler;
}
}
diff --git a/src/main/java/me/taylorkelly/mywarp/WarpHelp.java b/src/main/java/me/taylorkelly/mywarp/WarpHelp.java
deleted file mode 100644
index 4e2382c133..0000000000
--- a/src/main/java/me/taylorkelly/mywarp/WarpHelp.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package me.taylorkelly.mywarp;
-
-import java.util.logging.Level;
-import java.util.logging.Logger;
-import me.taylorkelly.help.Help;
-import org.bukkit.plugin.Plugin;
-
-class WarpHelp {
-
- public static void initialize(Plugin plugin) {
- Plugin test = plugin.getServer().getPluginManager().getPlugin("Help");
- if (test != null) {
- Logger log = Logger.getLogger("Minecraft");
- Help helpPlugin = ((Help) test);
- helpPlugin.registerCommand("warp help", "Help for all /warp commands", plugin, true);
- helpPlugin.registerCommand("warp [name]", "Warp to [name]", plugin, "mywarp.warp.basic.warp");
- helpPlugin.registerCommand("warp [player] [name]", "Warp [player] to [name]", plugin, "mywarp.admin");
- helpPlugin.registerCommand("warp create [name]", "Create a new warp called [name]", plugin, "mywarp.warp.basic.createpublic", "mywarp.warp.basic.createprivate");
- helpPlugin.registerCommand("warp pcreate [name]", "Create a new private warp called [name]", plugin, "mywarp.warp.basic.createprivate");
- helpPlugin.registerCommand("warp delete [name]", "Deletes the warp [name]", plugin, "mywarp.warp.basic.delete");
- helpPlugin.registerCommand("warp welcome [name]", "Change the welcome message for [name]", plugin, "mywarp.warp.basic.welcome");
- helpPlugin.registerCommand("warp point [name]", "Point your compass to [name]", plugin, "mywarp.warp.basic.compass");
- helpPlugin.registerCommand("warp list (#)", "List the warps you can visit", plugin, "mywarp.warp.basic.list");
- helpPlugin.registerCommand("warp search [query]", "Searches for warps related to [query]", plugin, "mywarp.warp.basic.search");
- helpPlugin.registerCommand("warp give [player] [name]", "Give your warp [name] to [player]", plugin, "mywarp.warp.soc.give");
- helpPlugin.registerCommand("warp invite [player] [name]", "Invite [player] to [name]", plugin, "mywarp.warp.soc.invite");
- helpPlugin.registerCommand("warp uninvite [player] [name]", "Uninvite [player] from [name]", plugin, "mywarp.warp.soc.uninvite");
- helpPlugin.registerCommand("warp public [name]", "Make [name] a public warp", plugin, "mywarp.warp.soc.public");
- helpPlugin.registerCommand("warp private [name]", "Make [name] a private warp", plugin, "mywarp.warp.soc.private");
- helpPlugin.registerCommand("warp convert", "Converts your warps from warps.txt", plugin, "mywarp.admin");
-
- log.log(Level.INFO, "[MYWARP] 'Help' support enabled.");
- } else {
- Logger log = Logger.getLogger("Minecraft");
- log.log(Level.WARNING, "[MYWARP] 'Help' isn't detected. No /help support.");
- }
- }
-}
diff --git a/src/main/java/me/taylorkelly/mywarp/WarpPermissions.java b/src/main/java/me/taylorkelly/mywarp/WarpPermissions.java
deleted file mode 100644
index f4c02d3dda..0000000000
--- a/src/main/java/me/taylorkelly/mywarp/WarpPermissions.java
+++ /dev/null
@@ -1,140 +0,0 @@
-package me.taylorkelly.mywarp;
-
-import ru.tehkode.permissions.bukkit.PermissionsEx;
-import com.nijikokun.bukkit.Permissions.Permissions;
-import org.anjocaido.groupmanager.GroupManager;
-
-import me.taylorkelly.mywarp.WarpLogger;
-
-import org.bukkit.Server;
-import org.bukkit.entity.Player;
-import org.bukkit.plugin.Plugin;
-
-public class WarpPermissions {
-
- private enum PermissionHandler {
- PERMISSIONSEX, PERMISSIONS, PERMISSIONS3, GROUPMANAGER, NONE
- }
- private static PermissionHandler handler;
- private static Plugin permissionPlugin;
-
- public static void initialize(Server server) {
- Plugin permissionsEx = server.getPluginManager().getPlugin("PermissionsEx");
- Plugin groupManager = server.getPluginManager().getPlugin("GroupManager");
- Plugin permissions = server.getPluginManager().getPlugin("Permissions");
-
- if (permissionsEx != null) {
- permissionPlugin = permissionsEx;
- handler = PermissionHandler.PERMISSIONSEX;
- String version = permissionsEx.getDescription().getVersion();
- WarpLogger.info("Permissions enabled using: PermissionsEx v" + version);
- } else if (groupManager != null) {
- permissionPlugin = groupManager;
- handler = PermissionHandler.GROUPMANAGER;
- String version = groupManager.getDescription().getVersion();
- WarpLogger.info("Permissions enabled using: GroupManager v" + version);
- } else if (permissions != null) {
- permissionPlugin = permissions;
- String version = permissions.getDescription().getVersion();
- if (version.contains("3.")) {
- handler = PermissionHandler.PERMISSIONS3;
- } else {
- handler = PermissionHandler.PERMISSIONS;
- }
- WarpLogger.info("Permissions enabled using: Permissions v" + version);
- } else {
- handler = PermissionHandler.NONE;
- WarpLogger.warning("A permission plugin isn't loaded.");
- }
- }
-
- public static boolean permission(Player player, String permission, boolean defaultPerm) {
- switch (handler) {
- case PERMISSIONSEX:
- return ((PermissionsEx) permissionPlugin).getPermissionManager().has(player, permission);
- case PERMISSIONS3:
- return ((Permissions) permissionPlugin).getHandler().has(player, permission);
- case PERMISSIONS:
- return ((Permissions) permissionPlugin).getHandler().has(player, permission);
- case GROUPMANAGER:
- return ((GroupManager) permissionPlugin).getWorldsHolder().getWorldPermissions(player).has(player, permission);
- case NONE:
- return defaultPerm;
- default:
- return defaultPerm;
- }
- }
-
-
- public static boolean isAdmin(Player player) {
- return permission(player, "mywarp.admin", player.isOp());
- }
-
- public static boolean warp(Player player) {
- return permission(player, "mywarp.warp.basic.warp", true);
- }
-
- public static boolean delete(Player player) {
- return permission(player, "mywarp.warp.basic.delete", true);
- }
-
- public static boolean list(Player player) {
- return permission(player, "mywarp.warp.basic.list", true);
- }
-
- public static boolean welcome(Player player) {
- return permission(player, "mywarp.warp.basic.welcome", true);
- }
-
- public static boolean search(Player player) {
- return permission(player, "mywarp.warp.basic.search", true);
- }
-
- public static boolean give(Player player) {
- return permission(player, "mywarp.warp.soc.give", true);
- }
-
- public static boolean invite(Player player) {
- return permission(player, "mywarp.warp.soc.invite", true);
- }
-
- public static boolean uninvite(Player player) {
- return permission(player, "mywarp.warp.soc.uninvite", true);
- }
-
- public static boolean canPublic(Player player) {
- return permission(player, "mywarp.warp.soc.public", true);
- }
-
- public static boolean canPrivate(Player player) {
- return permission(player, "mywarp.warp.soc.private", true);
- }
-
- public static boolean signWarp(Player player) {
- return permission(player, "mywarp.warp.sign.warp", true);
- }
-
- public static boolean privateCreate(Player player) {
- return permission(player, "mywarp.warp.basic.createprivate", true);
- }
-
- public static boolean publicCreate(Player player) {
- return permission(player, "mywarp.warp.basic.createpublic", true);
- }
-
- public static boolean compass(Player player) {
- return permission(player, "mywarp.warp.basic.compass", true);
- }
-
- public static int maxPrivateWarps(Player player) {
- return WarpSettings.maxPrivate;
- }
-
- public static int maxPublicWarps(Player player) {
- return WarpSettings.maxPublic;
- }
-
- static boolean createSignWarp(Player player) {
- return permission(player, "mywarp.warp.sign.create", true);
- }
-}
diff --git a/src/main/java/me/taylorkelly/mywarp/WarpSettings.java b/src/main/java/me/taylorkelly/mywarp/WarpSettings.java
index b24d4b5e22..88b122fd3b 100644
--- a/src/main/java/me/taylorkelly/mywarp/WarpSettings.java
+++ b/src/main/java/me/taylorkelly/mywarp/WarpSettings.java
@@ -1,12 +1,23 @@
package me.taylorkelly.mywarp;
import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+
+import org.bukkit.configuration.file.FileConfiguration;
+import org.bukkit.configuration.file.YamlConfiguration;
+
+import me.taylorkelly.mywarp.utils.PropertiesFile;
+import me.taylorkelly.mywarp.utils.WarpLogger;
public class WarpSettings {
+ private static final String CONFIG_FILE = "config.yml";
private static final String settingsFile = "MyWarp.settings";
public static File dataDir;
+ public static int maxTotal;
public static int maxPublic;
public static int maxPrivate;
public static boolean adminsObeyLimits;
@@ -18,26 +29,95 @@ public class WarpSettings {
public static String mySQLpass;
public static String mySQLconn;
- public static void initialize(File dataFolder) {
- if(!dataFolder.exists()) {
- dataFolder.mkdirs();
- }
+ public static boolean opPermissions;
+ private static FileConfiguration config;
+ private static File configFile;
+ private static MyWarp plugin;
+
+ public static void initialize(MyWarp plugin) {
+ WarpSettings.plugin = plugin;
+ dataDir = plugin.getDataFolder();
+ configFile = new File(dataDir, CONFIG_FILE);
+ config = getConfig(configFile);
+
+ File oldConfigFile = new File(dataDir, settingsFile);
+ if (oldConfigFile.exists()) {
+ PropertiesFile file = new PropertiesFile(oldConfigFile);
- File configFile = new File(dataFolder, settingsFile);
- PropertiesFile file = new PropertiesFile(configFile);
- dataDir = dataFolder;
+ config.set("maxTotal", file.getInt("maxTotal", 15, "Maximum number of warps any player can make"));
+ config.set("maxPublic", file.getInt("maxPublic", 5, "Maximum number of public warps any player can make"));
+ config.set("maxPrivate", file.getInt("maxPrivate", 10, "Maximum number of private warps any player can make"));
+ config.set("adminsObeyLimits", file.getBoolean("adminsObeyLimits", false, "Whether or not admins can disobey warp limits"));
+ config.set("adminPrivateWarps", file.getBoolean("adminPrivateWarps", true, "Whether or not admins can see private warps in their list"));
+ config.set("loadChunks", file.getBoolean("loadChunks", false, "Force sending of the chunk which people teleport to - default: false"));
+
+ config.set("usemySQL", file.getBoolean("usemySQL", false, "MySQL usage -- true = use MySQL database / false = use SQLite"));
+ config.set("mySQLconn", file.getString("mySQLconn", "jdbc:mysql://localhost:3306/minecraft", "MySQL Connection (only if using MySQL)"));
+ config.set("mySQLuname", file.getString("mySQLuname", "root", "MySQL Username (only if using MySQL)"));
+ config.set("mySQLpass", file.getString("mySQLpass", "password", "MySQL Password (only if using MySQL)"));
+
+ config.set("opPermissions", file.getBoolean("opPermissions", true, "Enable OP permissions with SuperPerms"));
+
+ try {
+ config.save(configFile);
+ if (!oldConfigFile.renameTo(new File(dataDir, settingsFile + ".old"))) {
+ WarpLogger.warning("Could not rename old settings file");
+ }
+ else {
+ WarpLogger.info("Successfully ported old settings file");
+ }
+ }
+ catch (IOException e) {
+ WarpLogger.severe("Failed to port old settings file", e);
+ }
+ }
+
+ maxTotal = config.getInt("maxTotal");
+ maxPublic = config.getInt("maxPublic");
+ maxPrivate = config.getInt("maxPrivate");
+ adminsObeyLimits = config.getBoolean("adminsObeyLimits");
+ adminPrivateWarps = config.getBoolean("adminPrivateWarps");
+ loadChunks = config.getBoolean("loadChunks");
- maxPublic = file.getInt("maxPublic", 5, "Maximum number of public warps any player can make");
- maxPrivate = file.getInt("maxPrivate", 10, "Maximum number of private warps any player can make");
- adminsObeyLimits = file.getBoolean("adminsObeyLimits", false, "Whether or not admins can disobey warp limits");
- adminPrivateWarps = file.getBoolean("adminPrivateWarps", true, "Whether or not admins can see private warps in their list");
- loadChunks = file.getBoolean("loadChunks", false, "Force sending of the chunk which people teleport to - default: false");
+ usemySQL = config.getBoolean("usemySQL");
+ mySQLconn = config.getString("mySQLconn");
+ mySQLuname = config.getString("mySQLuname");
+ mySQLpass = config.getString("mySQLpass");
- usemySQL = file.getBoolean("usemySQL", false, "MySQL usage -- true = use MySQL database / false = use SQLite");
- mySQLconn = file.getString("mySQLconn", "jdbc:mysql://localhost:3306/minecraft", "MySQL Connection (only if using MySQL)");
- mySQLuname = file.getString("mySQLuname", "root", "MySQL Username (only if using MySQL)");
- mySQLpass = file.getString("mySQLpass", "password", "MySQL Password (only if using MySQL)");
-
- file.save();
+ opPermissions = config.getBoolean("opPermissions");
+ }
+
+ private static FileConfiguration getConfig(File file)
+ {
+ FileConfiguration config = null;
+
+ try {
+ if (!file.exists()) {
+ file.getParentFile().mkdir();
+ file.createNewFile();
+ InputStream inputStream = plugin.getResource(file.getName());
+ FileOutputStream outputStream = new FileOutputStream(file);
+
+ byte[] buffer = new byte[8192];
+ int length = 0;
+ while ((length = inputStream.read(buffer)) > 0) {
+ outputStream.write(buffer, 0, length);
+ }
+
+ inputStream.close();
+ outputStream.close();
+
+ WarpLogger.info("Default config created successfully!");
+ }
+
+ config = plugin.getConfig();
+ config.setDefaults(YamlConfiguration.loadConfiguration(plugin.getResource(file.getName())));
+ config.options().copyDefaults(true);
+ }
+ catch (Exception e) {
+ WarpLogger.warning("Default config could not be created!");
+ }
+
+ return config;
}
}
diff --git a/src/main/java/me/taylorkelly/mywarp/commands/AdminWarpToCommand.java b/src/main/java/me/taylorkelly/mywarp/commands/AdminWarpToCommand.java
new file mode 100644
index 0000000000..1d7de1f2be
--- /dev/null
+++ b/src/main/java/me/taylorkelly/mywarp/commands/AdminWarpToCommand.java
@@ -0,0 +1,41 @@
+package me.taylorkelly.mywarp.commands;
+
+import java.util.Arrays;
+
+import me.taylorkelly.mywarp.MyWarp;
+
+import org.apache.commons.lang.StringUtils;
+import org.bukkit.command.CommandSender;
+import org.bukkit.entity.Player;
+
+public class AdminWarpToCommand extends BasicCommand implements Command
+{
+ private MyWarp plugin;
+
+ public AdminWarpToCommand(MyWarp plugin)
+ {
+ super("WarpPlayer");
+ this.plugin = plugin;
+ setDescription("Warp §8§e to §9");
+ setUsage("/warp player §8 §9");
+ setArgumentRange(2, 255);
+ setIdentifiers("player");
+ setPermission("mywarp.admin");
+ }
+
+ @Override
+ public boolean execute(CommandSender executor, String identifier, String[] args)
+ {
+ if (executor instanceof Player) {
+ Player invitee = plugin.getServer().getPlayer(args[0]);
+ // String inviteeName = (invitee == null) ? args[0] : invitee.getName();
+
+ // TODO ChunkLoading
+ plugin.getWarpList().adminWarpTo(StringUtils.join(Arrays.asList(args).subList(1, args.length), ' '), invitee, (Player) executor);
+ }
+ else {
+ executor.sendMessage("Console cannot warp players to locations!");
+ }
+ return true;
+ }
+}
diff --git a/src/main/java/me/taylorkelly/mywarp/commands/BasicCommand.java b/src/main/java/me/taylorkelly/mywarp/commands/BasicCommand.java
new file mode 100644
index 0000000000..44049e8ee5
--- /dev/null
+++ b/src/main/java/me/taylorkelly/mywarp/commands/BasicCommand.java
@@ -0,0 +1,112 @@
+package me.taylorkelly.mywarp.commands;
+
+import org.bukkit.command.CommandSender;
+
+public abstract class BasicCommand implements Command {
+
+ private String name;
+ private String description = "";
+ private String usage = "";
+ private String permission = "";
+ private String[] notes = new String[0];
+ private String[] identifiers = new String[0];
+ private int minArguments = 0;
+ private int maxArguments = 0;
+
+ public BasicCommand(String name) {
+ this.name = name;
+ }
+
+ @Override
+ public void cancelInteraction(CommandSender executor) {}
+
+ @Override
+ public String getDescription() {
+ return description;
+ }
+
+ @Override
+ public String[] getIdentifiers() {
+ return identifiers;
+ }
+
+ @Override
+ public int getMaxArguments() {
+ return maxArguments;
+ }
+
+ @Override
+ public int getMinArguments() {
+ return minArguments;
+ }
+
+ @Override
+ public String getName() {
+ return name;
+ }
+
+ @Override
+ public String[] getNotes() {
+ return notes;
+ }
+
+ @Override
+ public String getPermission() {
+ return permission;
+ }
+
+ @Override
+ public String getUsage() {
+ return usage;
+ }
+
+ @Override
+ public boolean isIdentifier(CommandSender executor, String input) {
+ for (String identifier : identifiers) {
+ if (input.equalsIgnoreCase(identifier))
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ public boolean isInProgress(CommandSender executor) {
+ return false;
+ }
+
+ @Override
+ public boolean isInteractive() {
+ return false;
+ }
+
+ @Override
+ public boolean isShownOnHelpMenu() {
+ return true;
+ }
+
+ public void setArgumentRange(int min, int max) {
+ this.minArguments = min;
+ this.maxArguments = max;
+ }
+
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+ public void setIdentifiers(String... identifiers) {
+ this.identifiers = identifiers;
+ }
+
+ public void setNotes(String... notes) {
+ this.notes = notes;
+ }
+
+ public void setPermission(String permission) {
+ this.permission = permission;
+ }
+
+ public void setUsage(String usage) {
+ this.usage = usage;
+ }
+
+}
diff --git a/src/main/java/me/taylorkelly/mywarp/commands/Command.java b/src/main/java/me/taylorkelly/mywarp/commands/Command.java
new file mode 100644
index 0000000000..306e4af26e
--- /dev/null
+++ b/src/main/java/me/taylorkelly/mywarp/commands/Command.java
@@ -0,0 +1,35 @@
+package me.taylorkelly.mywarp.commands;
+
+import org.bukkit.command.CommandSender;
+
+public interface Command {
+
+ public void cancelInteraction(CommandSender executor);
+
+ public boolean execute(CommandSender executor, String identifier, String[] args);
+
+ public String getDescription();
+
+ public String[] getIdentifiers();
+
+ public int getMaxArguments();
+
+ public int getMinArguments();
+
+ public String getName();
+
+ public String[] getNotes();
+
+ public String getPermission();
+
+ public String getUsage();
+
+ public boolean isIdentifier(CommandSender executor, String input);
+
+ public boolean isInProgress(CommandSender executor);
+
+ public boolean isInteractive();
+
+ public boolean isShownOnHelpMenu();
+
+}
diff --git a/src/main/java/me/taylorkelly/mywarp/commands/CommandHandler.java b/src/main/java/me/taylorkelly/mywarp/commands/CommandHandler.java
new file mode 100644
index 0000000000..05ed9bd4bd
--- /dev/null
+++ b/src/main/java/me/taylorkelly/mywarp/commands/CommandHandler.java
@@ -0,0 +1,119 @@
+/**
+ * Copyright (C) 2011 DThielke
+ *
+ * This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Unported License.
+ * To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/3.0/ or send a letter to
+ * Creative Commons, 171 Second Street, Suite 300, San Francisco, California, 94105, USA.
+ **/
+
+package me.taylorkelly.mywarp.commands;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+import me.taylorkelly.mywarp.MyWarp;
+import me.taylorkelly.mywarp.permissions.WarpPermissions;
+
+import org.bukkit.command.CommandSender;
+import org.bukkit.entity.Player;
+
+public class CommandHandler {
+
+ private WarpPermissions warpPermissions;
+ protected Map commands;
+
+ public CommandHandler(MyWarp plugin) {
+ warpPermissions = MyWarp.getWarpPermissions();
+ commands = new LinkedHashMap();
+ }
+
+ public void addCommand(Command command) {
+ commands.put(command.getName().toLowerCase(), command);
+ }
+
+ public void removeCommand(Command command) {
+ commands.remove(command.getName().toLowerCase());
+ }
+
+ public Command getCommand(String name) {
+ return commands.get(name.toLowerCase());
+ }
+
+ public List getCommands() {
+ return new ArrayList(commands.values());
+ }
+
+ public boolean dispatch(CommandSender sender, org.bukkit.command.Command command, String label, String[] args) {
+
+ String[] arguments;
+ if (args.length < 1) {
+ arguments = new String[] { "help" };
+ } else {
+ arguments = args;
+ }
+
+ for (int argsIncluded = arguments.length; argsIncluded >= 0; argsIncluded--) {
+ StringBuilder identifierBuilder = new StringBuilder();
+ for (int i = 0; i < argsIncluded; i++) {
+ identifierBuilder.append(' ').append(arguments[i]);
+ }
+
+ String identifier = identifierBuilder.toString().trim();
+ if (identifier.isEmpty()) {
+ identifier = "warp";
+ }
+
+ for (Command cmd : commands.values()) {
+ if (cmd.isIdentifier(sender, identifier)) {
+ String[] realArgs = Arrays.copyOfRange(arguments, argsIncluded, arguments.length);
+
+ if (!cmd.isInProgress(sender)) {
+ if (realArgs.length < cmd.getMinArguments() || realArgs.length > cmd.getMaxArguments()) {
+ displayCommandHelp(cmd, sender);
+ return true;
+ } else if (realArgs.length > 0 && "?".equals(realArgs[0])) {
+ displayCommandHelp(cmd, sender);
+ return true;
+ }
+ }
+
+ if (!hasPermission(sender, cmd.getPermission())) {
+ sender.sendMessage("Insufficient permission.");
+ return true;
+ }
+
+ cmd.execute(sender, identifier, realArgs);
+ return true;
+ }
+ }
+ }
+
+ return true;
+ }
+
+ private void displayCommandHelp(Command cmd, CommandSender sender) {
+ sender.sendMessage("§cCommand:§e " + cmd.getName());
+ sender.sendMessage("§cDescription:§e " + cmd.getDescription());
+ sender.sendMessage("§cUsage:§e " + cmd.getUsage());
+ if (cmd.getNotes() != null) {
+ for (String note : cmd.getNotes()) {
+ sender.sendMessage("§e" + note);
+ }
+ }
+ }
+
+ public boolean hasPermission(CommandSender sender, String permString) {
+ if (!(sender instanceof Player) || permString == null || permString.isEmpty()) {
+ return true;
+ }
+
+ Player player = (Player) sender;
+ if (warpPermissions != null) {
+ return warpPermissions.hasPermission(player, permString, false);
+ }
+ return player.hasPermission(permString);
+ }
+}
diff --git a/src/main/java/me/taylorkelly/mywarp/commands/CreateCommand.java b/src/main/java/me/taylorkelly/mywarp/commands/CreateCommand.java
new file mode 100644
index 0000000000..ab09cd4686
--- /dev/null
+++ b/src/main/java/me/taylorkelly/mywarp/commands/CreateCommand.java
@@ -0,0 +1,36 @@
+package me.taylorkelly.mywarp.commands;
+
+import me.taylorkelly.mywarp.MyWarp;
+
+import org.apache.commons.lang.StringUtils;
+import org.bukkit.command.CommandSender;
+import org.bukkit.entity.Player;
+
+public class CreateCommand extends BasicCommand implements Command
+{
+ private MyWarp plugin;
+
+ public CreateCommand(MyWarp plugin)
+ {
+ super("Create");
+ this.plugin = plugin;
+ setDescription("Create a new warp called §9");
+ setUsage("/warp create|set §9");
+ setArgumentRange(1, 255);
+ setIdentifiers("create", "set");
+ setPermission("mywarp.warp.basic.createpublic");
+ }
+
+ @Override
+ public boolean execute(CommandSender executor, String identifier, String[] args)
+ {
+ if (executor instanceof Player) {
+ plugin.getWarpList().addWarp(StringUtils.join(args, ' '), (Player) executor);
+ }
+ else {
+ executor.sendMessage("Console cannot create warps for themselves!");
+ }
+
+ return true;
+ }
+}
diff --git a/src/main/java/me/taylorkelly/mywarp/commands/CreatePrivateCommand.java b/src/main/java/me/taylorkelly/mywarp/commands/CreatePrivateCommand.java
new file mode 100644
index 0000000000..56c1168c66
--- /dev/null
+++ b/src/main/java/me/taylorkelly/mywarp/commands/CreatePrivateCommand.java
@@ -0,0 +1,36 @@
+package me.taylorkelly.mywarp.commands;
+
+import me.taylorkelly.mywarp.MyWarp;
+
+import org.apache.commons.lang.StringUtils;
+import org.bukkit.command.CommandSender;
+import org.bukkit.entity.Player;
+
+public class CreatePrivateCommand extends BasicCommand implements Command
+{
+ private MyWarp plugin;
+
+ public CreatePrivateCommand(MyWarp plugin)
+ {
+ super("pcreate");
+ this.plugin = plugin;
+ setDescription("Create a new private warp called §9");
+ setUsage("/warp pcreate §9");
+ setArgumentRange(1, 255);
+ setIdentifiers("pcreate");
+ setPermission("mywarp.warp.basic.createprivate");
+ }
+
+ @Override
+ public boolean execute(CommandSender executor, String identifier, String[] args)
+ {
+ if (executor instanceof Player) {
+ plugin.getWarpList().addWarpPrivate(StringUtils.join(args, ' '), (Player) executor);
+ }
+ else {
+ executor.sendMessage("Console cannot create private warps for themselves!");
+ }
+
+ return true;
+ }
+}
diff --git a/src/main/java/me/taylorkelly/mywarp/commands/DeleteCommand.java b/src/main/java/me/taylorkelly/mywarp/commands/DeleteCommand.java
new file mode 100644
index 0000000000..f52071e951
--- /dev/null
+++ b/src/main/java/me/taylorkelly/mywarp/commands/DeleteCommand.java
@@ -0,0 +1,36 @@
+package me.taylorkelly.mywarp.commands;
+
+import me.taylorkelly.mywarp.MyWarp;
+
+import org.apache.commons.lang.StringUtils;
+import org.bukkit.command.CommandSender;
+import org.bukkit.entity.Player;
+
+public class DeleteCommand extends BasicCommand implements Command
+{
+ private MyWarp plugin;
+
+ public DeleteCommand(MyWarp plugin)
+ {
+ super("Delete");
+ this.plugin = plugin;
+ setDescription("Deletes the warp §9");
+ setUsage("/warp delete §9");
+ setArgumentRange(1, 255);
+ setIdentifiers("delete", "remove");
+ setPermission("mywarp.warp.basic.delete");
+ }
+
+ @Override
+ public boolean execute(CommandSender executor, String identifier, String[] args)
+ {
+ if (executor instanceof Player) {
+ plugin.getWarpList().deleteWarp(StringUtils.join(args, ' '), (Player) executor);
+ }
+ else {
+ executor.sendMessage("Console cannot delete warps for themselves!");
+ }
+
+ return true;
+ }
+}
diff --git a/src/main/java/me/taylorkelly/mywarp/commands/GiveCommand.java b/src/main/java/me/taylorkelly/mywarp/commands/GiveCommand.java
new file mode 100644
index 0000000000..04df2993c9
--- /dev/null
+++ b/src/main/java/me/taylorkelly/mywarp/commands/GiveCommand.java
@@ -0,0 +1,42 @@
+package me.taylorkelly.mywarp.commands;
+
+import java.util.Arrays;
+
+import me.taylorkelly.mywarp.MyWarp;
+
+import org.apache.commons.lang.StringUtils;
+import org.bukkit.command.CommandSender;
+import org.bukkit.entity.Player;
+
+public class GiveCommand extends BasicCommand implements Command
+{
+ private MyWarp plugin;
+
+ public GiveCommand(MyWarp plugin)
+ {
+ super("Give");
+ this.plugin = plugin;
+ setDescription("Give your warp §9§e to §8");
+ setUsage("/warp give §8 §9");
+ setArgumentRange(2, 255);
+ setIdentifiers("give");
+ setPermission("mywarp.warp.soc.give");
+ }
+
+ @Override
+ public boolean execute(CommandSender executor, String identifier, String[] args)
+ {
+ if (executor instanceof Player) {
+ Player givee = plugin.getServer().getPlayer(args[0]);
+ // TODO Change to matchPlayer
+ String giveeName = (givee == null) ? args[0] : givee.getName();
+
+ plugin.getWarpList().give(StringUtils.join(Arrays.asList(args).subList(1, args.length), ' '), (Player) executor, giveeName);
+ }
+ else {
+ executor.sendMessage("Console cannot give warps from themselves!");
+ }
+
+ return true;
+ }
+}
diff --git a/src/main/java/me/taylorkelly/mywarp/commands/HelpCommand.java b/src/main/java/me/taylorkelly/mywarp/commands/HelpCommand.java
new file mode 100644
index 0000000000..66f25d1a55
--- /dev/null
+++ b/src/main/java/me/taylorkelly/mywarp/commands/HelpCommand.java
@@ -0,0 +1,72 @@
+package me.taylorkelly.mywarp.commands;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import me.taylorkelly.mywarp.MyWarp;
+
+import org.bukkit.command.CommandSender;
+
+public class HelpCommand extends BasicCommand implements Command
+{
+ private static final int CMDS_PER_PAGE = 8;
+ private MyWarp plugin;
+
+ public HelpCommand(MyWarp plugin)
+ {
+ super("Help");
+ this.plugin = plugin;
+ setDescription("Displays the help menu");
+ setUsage("/warp help §8[page#]");
+ setArgumentRange(0, 1);
+ setIdentifiers("help");
+ }
+
+ @Override
+ public boolean execute(CommandSender executor, String identifier, String[] args)
+ {
+ int page = 0;
+ if (args.length != 0) {
+ try {
+ page = Integer.parseInt(args[0]) - 1;
+ }
+ catch (NumberFormatException e) {
+ }
+ }
+
+ List sortCommands = plugin.getCommandHandler().getCommands();
+ List commands = new ArrayList();
+
+ // Build list of permitted commands
+ for (Command command : sortCommands) {
+ if (command.isShownOnHelpMenu()) {
+ if (plugin.getCommandHandler().hasPermission(executor, command.getPermission())) {
+ commands.add(command);
+ }
+ }
+ }
+
+ int numPages = commands.size() / CMDS_PER_PAGE;
+ if (commands.size() % CMDS_PER_PAGE != 0) {
+ numPages++;
+ }
+
+ if (page >= numPages || page < 0) {
+ page = 0;
+ }
+ executor.sendMessage("§c-----[ " + "§fMyWarp Help <" + (page + 1) + "/" + numPages + ">§c ]-----");
+ int start = page * CMDS_PER_PAGE;
+ int end = start + CMDS_PER_PAGE;
+ if (end > commands.size()) {
+ end = commands.size();
+ }
+ for (int c = start; c < end; c++) {
+ Command cmd = commands.get(c);
+ executor.sendMessage(" §a" + cmd.getUsage());
+ }
+
+ executor.sendMessage("§cFor more info on a particular command, type §f/ ?");
+
+ return true;
+ }
+}
diff --git a/src/main/java/me/taylorkelly/mywarp/commands/InviteCommand.java b/src/main/java/me/taylorkelly/mywarp/commands/InviteCommand.java
new file mode 100644
index 0000000000..5fb27fa258
--- /dev/null
+++ b/src/main/java/me/taylorkelly/mywarp/commands/InviteCommand.java
@@ -0,0 +1,42 @@
+package me.taylorkelly.mywarp.commands;
+
+import java.util.Arrays;
+
+import me.taylorkelly.mywarp.MyWarp;
+
+import org.apache.commons.lang.StringUtils;
+import org.bukkit.command.CommandSender;
+import org.bukkit.entity.Player;
+
+public class InviteCommand extends BasicCommand implements Command
+{
+ private MyWarp plugin;
+
+ public InviteCommand(MyWarp plugin)
+ {
+ super("Invite");
+ this.plugin = plugin;
+ setDescription("Invite §8§e to §9");
+ setUsage("/warp invite §8 §9");
+ setArgumentRange(2, 255);
+ setIdentifiers("invite");
+ setPermission("mywarp.warp.soc.invite");
+ }
+
+ @Override
+ public boolean execute(CommandSender executor, String identifier, String[] args)
+ {
+ if (executor instanceof Player) {
+ Player invitee = plugin.getServer().getPlayer(args[0]);
+ // TODO Change to matchPlayer
+ String inviteeName = (invitee == null) ? args[0] : invitee.getName();
+
+ plugin.getWarpList().invite(StringUtils.join(Arrays.asList(args).subList(1, args.length), ' '), (Player) executor, inviteeName);
+ }
+ else {
+ executor.sendMessage("Console cannot invite warps for themselves!");
+ }
+
+ return true;
+ }
+}
diff --git a/src/main/java/me/taylorkelly/mywarp/commands/ListAllCommand.java b/src/main/java/me/taylorkelly/mywarp/commands/ListAllCommand.java
new file mode 100644
index 0000000000..0dfbee3fb5
--- /dev/null
+++ b/src/main/java/me/taylorkelly/mywarp/commands/ListAllCommand.java
@@ -0,0 +1,35 @@
+package me.taylorkelly.mywarp.commands;
+
+import me.taylorkelly.mywarp.MyWarp;
+
+import org.bukkit.command.CommandSender;
+import org.bukkit.entity.Player;
+
+public class ListAllCommand extends BasicCommand implements Command
+{
+ private MyWarp plugin;
+
+ public ListAllCommand(MyWarp plugin)
+ {
+ super("ListAll");
+ this.plugin = plugin;
+ setDescription("List the warps you can visit");
+ setUsage("/warp slist");
+ setArgumentRange(0, 0);
+ setIdentifiers("slist");
+ setPermission("mywarp.warp.basic.list");
+ }
+
+ @Override
+ public boolean execute(CommandSender executor, String identifier, String[] args)
+ {
+ if (executor instanceof Player) {
+ plugin.getWarpList().list((Player) executor);
+ }
+ else {
+ executor.sendMessage("Console cannot list warps for themselves!");
+ }
+
+ return true;
+ }
+}
diff --git a/src/main/java/me/taylorkelly/mywarp/commands/ListCommand.java b/src/main/java/me/taylorkelly/mywarp/commands/ListCommand.java
new file mode 100644
index 0000000000..5ffcbcec08
--- /dev/null
+++ b/src/main/java/me/taylorkelly/mywarp/commands/ListCommand.java
@@ -0,0 +1,83 @@
+package me.taylorkelly.mywarp.commands;
+
+import me.taylorkelly.mywarp.MyWarp;
+import me.taylorkelly.mywarp.data.Lister;
+
+import org.bukkit.ChatColor;
+import org.bukkit.command.CommandSender;
+import org.bukkit.entity.Player;
+
+public class ListCommand extends BasicCommand implements Command
+{
+ private MyWarp plugin;
+
+ public ListCommand(MyWarp plugin)
+ {
+ super("List");
+ this.plugin = plugin;
+ setDescription("List the warps you can visit");
+ setUsage("/warp list §8[owner] §8[page#]");
+ setArgumentRange(0, 2);
+ setIdentifiers("list");
+ setPermission("mywarp.warp.basic.list");
+ }
+
+ @Override
+ public boolean execute(CommandSender executor, String identifier, String[] args)
+ {
+ if (executor instanceof Player) {
+ Lister lister = new Lister(plugin.getWarpList());
+ lister.addPlayer((Player) executor);
+
+ if (args.length == 0) {
+ lister.setPage(1);
+ } else if (args.length == 1) {
+ if (args[0].matches("-?\\d+(\\.\\d+)?")) {
+ int page = Integer.parseInt(args[0]);
+ if (page < 1) {
+ executor.sendMessage(ChatColor.RED
+ + "Page number can't be below 1.");
+ return true;
+ } else if (page > lister.getMaxPages((Player) executor)) {
+ executor.sendMessage(ChatColor.RED + "There are only "
+ + lister.getMaxPages((Player) executor)
+ + " pages of warps");
+ return true;
+ }
+ lister.setPage(page);
+ } else {
+ if (args[0].equals("own")) {
+ lister.setWarpCreator(executor.getName());
+ } else {
+ lister.setWarpCreator(args[0]);
+ }
+ lister.setPage(1);
+ }
+ } else if (args.length == 2) {
+ String creator;
+ if (args[0].equals("own")) {
+ creator = executor.getName();
+ } else {
+ creator = args[0];
+ }
+ lister.setWarpCreator(creator);
+ int page = Integer.parseInt(args[1]);
+ if (page < 1) {
+ executor.sendMessage(ChatColor.RED + "Page number can't be below 1.");
+ return true;
+ } else if (page > lister.getMaxPagesPerCreator((Player) executor, creator)) {
+ executor.sendMessage(ChatColor.RED + "There are only "
+ + lister.getMaxPagesPerCreator((Player) executor, executor.getName()) + " pages of warps");
+ return true;
+ }
+ lister.setPage(page);
+ } else {
+ return false;
+ }
+ lister.list();
+ } else {
+ executor.sendMessage("Console cannot list warps for themselves!");
+ }
+ return true;
+ }
+}
diff --git a/src/main/java/me/taylorkelly/mywarp/commands/PointCommand.java b/src/main/java/me/taylorkelly/mywarp/commands/PointCommand.java
new file mode 100644
index 0000000000..a9fe87ba5f
--- /dev/null
+++ b/src/main/java/me/taylorkelly/mywarp/commands/PointCommand.java
@@ -0,0 +1,36 @@
+package me.taylorkelly.mywarp.commands;
+
+import me.taylorkelly.mywarp.MyWarp;
+
+import org.apache.commons.lang.StringUtils;
+import org.bukkit.command.CommandSender;
+import org.bukkit.entity.Player;
+
+public class PointCommand extends BasicCommand implements Command
+{
+ private MyWarp plugin;
+
+ public PointCommand(MyWarp plugin)
+ {
+ super("Point");
+ this.plugin = plugin;
+ setDescription("Point your compass to §9");
+ setUsage("/warp point §9");
+ setArgumentRange(1, 255);
+ setIdentifiers("point");
+ setPermission("mywarp.warp.basic.compass");
+ }
+
+ @Override
+ public boolean execute(CommandSender executor, String identifier, String[] args)
+ {
+ if (executor instanceof Player) {
+ plugin.getWarpList().point(StringUtils.join(args, ' '), (Player) executor);
+ }
+ else {
+ executor.sendMessage("Console cannot search warps for themselves!");
+ }
+
+ return true;
+ }
+}
diff --git a/src/main/java/me/taylorkelly/mywarp/commands/PrivateCommand.java b/src/main/java/me/taylorkelly/mywarp/commands/PrivateCommand.java
new file mode 100644
index 0000000000..c1f7587125
--- /dev/null
+++ b/src/main/java/me/taylorkelly/mywarp/commands/PrivateCommand.java
@@ -0,0 +1,36 @@
+package me.taylorkelly.mywarp.commands;
+
+import me.taylorkelly.mywarp.MyWarp;
+
+import org.apache.commons.lang.StringUtils;
+import org.bukkit.command.CommandSender;
+import org.bukkit.entity.Player;
+
+public class PrivateCommand extends BasicCommand implements Command
+{
+ private MyWarp plugin;
+
+ public PrivateCommand(MyWarp plugin)
+ {
+ super("Private");
+ this.plugin = plugin;
+ setDescription("Make §9§e a private warp");
+ setUsage("/warp private §9");
+ setArgumentRange(1, 255);
+ setIdentifiers("private");
+ setPermission("mywarp.warp.soc.private");
+ }
+
+ @Override
+ public boolean execute(CommandSender executor, String identifier, String[] args)
+ {
+ if (executor instanceof Player) {
+ plugin.getWarpList().privatize(StringUtils.join(args, ' '), (Player) executor);
+ }
+ else {
+ executor.sendMessage("Console cannot make warps private for themselves!");
+ }
+
+ return true;
+ }
+}
diff --git a/src/main/java/me/taylorkelly/mywarp/commands/PublicCommand.java b/src/main/java/me/taylorkelly/mywarp/commands/PublicCommand.java
new file mode 100644
index 0000000000..63582df007
--- /dev/null
+++ b/src/main/java/me/taylorkelly/mywarp/commands/PublicCommand.java
@@ -0,0 +1,37 @@
+package me.taylorkelly.mywarp.commands;
+
+import me.taylorkelly.mywarp.MyWarp;
+
+import org.apache.commons.lang.StringUtils;
+import org.bukkit.command.CommandSender;
+import org.bukkit.entity.Player;
+
+public class PublicCommand extends BasicCommand implements Command
+{
+ private MyWarp plugin;
+
+ public PublicCommand(MyWarp plugin)
+ {
+ super("Public");
+ this.plugin = plugin;
+ setDescription("Make §9§e a public warp");
+ setUsage("/warp public §9");
+ setArgumentRange(1, 255);
+ setIdentifiers("public");
+ setPermission("mywarp.warp.soc.public");
+ }
+
+ @Override
+ public boolean execute(CommandSender executor, String identifier, String[] args)
+ {
+
+ if (executor instanceof Player) {
+ plugin.getWarpList().publicize(StringUtils.join(args, ' '), (Player) executor);
+ }
+ else {
+ executor.sendMessage("Console cannot make warps public for themselves!");
+ }
+
+ return true;
+ }
+}
diff --git a/src/main/java/me/taylorkelly/mywarp/commands/ReloadCommand.java b/src/main/java/me/taylorkelly/mywarp/commands/ReloadCommand.java
new file mode 100644
index 0000000000..ed187ffe25
--- /dev/null
+++ b/src/main/java/me/taylorkelly/mywarp/commands/ReloadCommand.java
@@ -0,0 +1,32 @@
+package me.taylorkelly.mywarp.commands;
+
+import me.taylorkelly.mywarp.MyWarp;
+import me.taylorkelly.mywarp.WarpSettings;
+
+import org.bukkit.command.CommandSender;
+
+public class ReloadCommand extends BasicCommand implements Command
+{
+ private MyWarp plugin;
+
+ public ReloadCommand(MyWarp plugin)
+ {
+ super("Reload");
+ this.plugin = plugin;
+ setDescription("Reload settings");
+ setUsage("/warp reload");
+ setArgumentRange(0, 0);
+ setIdentifiers("reload");
+ setPermission("mywarp.admin");
+ }
+
+ @Override
+ public boolean execute(CommandSender executor, String identifier, String[] args)
+ {
+ WarpSettings.initialize(plugin);
+ executor.sendMessage("Reloading MyWarp config");
+
+ return true;
+ }
+
+}
diff --git a/src/main/java/me/taylorkelly/mywarp/commands/SearchCommand.java b/src/main/java/me/taylorkelly/mywarp/commands/SearchCommand.java
new file mode 100644
index 0000000000..b72f94411f
--- /dev/null
+++ b/src/main/java/me/taylorkelly/mywarp/commands/SearchCommand.java
@@ -0,0 +1,41 @@
+package me.taylorkelly.mywarp.commands;
+
+import me.taylorkelly.mywarp.MyWarp;
+import me.taylorkelly.mywarp.data.Searcher;
+
+import org.apache.commons.lang.StringUtils;
+import org.bukkit.command.CommandSender;
+import org.bukkit.entity.Player;
+
+public class SearchCommand extends BasicCommand implements Command
+{
+ private MyWarp plugin;
+
+ public SearchCommand(MyWarp plugin)
+ {
+ super("Search");
+ this.plugin = plugin;
+ setDescription("Searches for warps related to §9");
+ setUsage("/warp search §9");
+ setArgumentRange(1, 255);
+ setIdentifiers("search");
+ setPermission("mywarp.warp.basic.search");
+ }
+
+ @Override
+ public boolean execute(CommandSender executor, String identifier, String[] args)
+ {
+ if (executor instanceof Player) {
+ Searcher searcher = new Searcher(plugin.getWarpList());
+ searcher.addPlayer((Player) executor);
+ searcher.setQuery(StringUtils.join(args, ' '));
+ searcher.search();
+ }
+ else {
+ executor.sendMessage("Console cannot search warps for themselves!");
+ }
+
+ return true;
+ }
+
+}
diff --git a/src/main/java/me/taylorkelly/mywarp/commands/UninviteCommand.java b/src/main/java/me/taylorkelly/mywarp/commands/UninviteCommand.java
new file mode 100644
index 0000000000..59ec15dddb
--- /dev/null
+++ b/src/main/java/me/taylorkelly/mywarp/commands/UninviteCommand.java
@@ -0,0 +1,41 @@
+package me.taylorkelly.mywarp.commands;
+
+import java.util.Arrays;
+
+import me.taylorkelly.mywarp.MyWarp;
+
+import org.apache.commons.lang.StringUtils;
+import org.bukkit.command.CommandSender;
+import org.bukkit.entity.Player;
+
+public class UninviteCommand extends BasicCommand implements Command
+{
+ private MyWarp plugin;
+
+ public UninviteCommand(MyWarp plugin)
+ {
+ super("Uninvite");
+ this.plugin = plugin;
+ setDescription("Uinvite §8§e from §9");
+ setUsage("/warp uninvite §8 §9");
+ setArgumentRange(2, 255);
+ setIdentifiers("uninvite");
+ setPermission("mywarp.warp.soc.uninvite");
+ }
+
+ @Override
+ public boolean execute(CommandSender executor, String identifier, String[] args)
+ {
+ if (executor instanceof Player) {
+ Player invitee = plugin.getServer().getPlayer(args[0]);
+ String inviteeName = (invitee == null) ? args[0] : invitee.getName();
+
+ plugin.getWarpList().uninvite(StringUtils.join(Arrays.asList(args).subList(1, args.length), ' '), (Player) executor, inviteeName);
+ }
+ else {
+ executor.sendMessage("Console cannot uninvite warps for themselves!");
+ }
+
+ return true;
+ }
+}
diff --git a/src/main/java/me/taylorkelly/mywarp/commands/WarpToCommand.java b/src/main/java/me/taylorkelly/mywarp/commands/WarpToCommand.java
new file mode 100644
index 0000000000..634cb0edf9
--- /dev/null
+++ b/src/main/java/me/taylorkelly/mywarp/commands/WarpToCommand.java
@@ -0,0 +1,37 @@
+package me.taylorkelly.mywarp.commands;
+
+import me.taylorkelly.mywarp.MyWarp;
+
+import org.apache.commons.lang.StringUtils;
+import org.bukkit.command.CommandSender;
+import org.bukkit.entity.Player;
+
+public class WarpToCommand extends BasicCommand implements Command
+{
+ private MyWarp plugin;
+
+ public WarpToCommand(MyWarp plugin)
+ {
+ super("WarpTo");
+ this.plugin = plugin;
+ setDescription("Warp to §9");
+ setUsage("/warp §9");
+ setArgumentRange(1, 255);
+ setIdentifiers("warp", "mywarp", "mw");
+ setPermission("mywarp.warp.basic.warp");
+ }
+
+ @Override
+ public boolean execute(CommandSender executor, String identifier, String[] args)
+ {
+ if (executor instanceof Player) {
+ plugin.getWarpList().warpTo(StringUtils.join(args, ' '), (Player) executor);
+ }
+ else {
+ executor.sendMessage("Console cannot warp to locations!");
+ }
+
+ return true;
+ }
+
+}
diff --git a/src/main/java/me/taylorkelly/mywarp/commands/WelcomeCommand.java b/src/main/java/me/taylorkelly/mywarp/commands/WelcomeCommand.java
new file mode 100644
index 0000000000..6cda6932c3
--- /dev/null
+++ b/src/main/java/me/taylorkelly/mywarp/commands/WelcomeCommand.java
@@ -0,0 +1,36 @@
+package me.taylorkelly.mywarp.commands;
+
+import me.taylorkelly.mywarp.MyWarp;
+
+import org.apache.commons.lang.StringUtils;
+import org.bukkit.command.CommandSender;
+import org.bukkit.entity.Player;
+
+public class WelcomeCommand extends BasicCommand implements Command
+{
+ private MyWarp plugin;
+
+ public WelcomeCommand(MyWarp plugin)
+ {
+ super("Welcome");
+ this.plugin = plugin;
+ setDescription("Change the welcome message of §9");
+ setUsage("/warp welcome §9");
+ setArgumentRange(1, 255);
+ setIdentifiers("welcome");
+ setPermission("mywarp.warp.basic.welcome");
+ }
+
+ @Override
+ public boolean execute(CommandSender executor, String identifier, String[] args)
+ {
+ if (executor instanceof Player) {
+ plugin.getWarpList().welcomeMessage(StringUtils.join(args, ' '), (Player) executor);
+ }
+ else {
+ executor.sendMessage("Console cannot change warp welcome messages for themselves!");
+ }
+
+ return true;
+ }
+}
diff --git a/src/main/java/me/taylorkelly/mywarp/data/Lister.java b/src/main/java/me/taylorkelly/mywarp/data/Lister.java
new file mode 100644
index 0000000000..4435c2adf6
--- /dev/null
+++ b/src/main/java/me/taylorkelly/mywarp/data/Lister.java
@@ -0,0 +1,126 @@
+package me.taylorkelly.mywarp.data;
+
+import java.util.ArrayList;
+
+import org.angelsl.minecraft.randomshit.fontwidth.MinecraftFontWidthCalculator;
+import org.bukkit.ChatColor;
+import org.bukkit.entity.Player;
+
+
+public class Lister {
+ private WarpList warpList;
+ private Player player;
+
+ private int maxPages;
+ private int page;
+ private String warpCreator;
+
+ private static final int WARPS_PER_PAGE = 8;
+ ArrayList sortedWarps;
+
+ public Lister(WarpList warpList) {
+ this.warpList = warpList;
+ }
+
+ public void addPlayer(Player player) {
+ this.player = player;
+ }
+
+ public void setWarpCreator(String warpCreator){
+ this.warpCreator = warpCreator;
+ }
+
+ public void setPage(int page) {
+ this.page = page;
+ int start = (page - 1) * WARPS_PER_PAGE;
+ if (warpCreator == null) {
+ sortedWarps = warpList.getSortedWarps(player, start, WARPS_PER_PAGE);
+ maxPages = (int) Math.ceil(warpList.getMaxWarps(player)
+ / (double) WARPS_PER_PAGE);
+ } else {
+ String matchingWarpCreator = warpList.getMatchingCreator(player, warpCreator);
+ sortedWarps = warpList.getSortedWarpsPerCreator(player, matchingWarpCreator, start,
+ WARPS_PER_PAGE);
+ maxPages = (int) Math.ceil(warpList.getMaxWarpsPerCreator(player,
+ matchingWarpCreator) / (double) WARPS_PER_PAGE);
+ }
+ }
+
+ public void list() {
+ if (maxPages == 0) {
+ player.sendMessage("There are no warps to list.");
+ } else {
+ String intro = "------------------- Page " + page + "/" + maxPages
+ + " -------------------";
+ player.sendMessage(ChatColor.YELLOW + intro);
+ for (Warp warp : sortedWarps) {
+ String name = warp.name;
+ String creator = (warp.creator.equalsIgnoreCase(player.getName())) ? "you"
+ : warp.creator;
+ int x = (int) Math.round(warp.x);
+ int y = warp.y;
+ int z = (int) Math.round(warp.z);
+ String color;
+ if (warp.playerIsCreator(player.getName())) {
+ color = ChatColor.AQUA.toString();
+ } else if (warp.publicAll) {
+ color = ChatColor.GREEN.toString();
+ } else {
+ color = ChatColor.RED.toString();
+ }
+
+ String location = " @(" + x + ", " + y + ", " + z + ")";
+ String creatorString = (warp.publicAll ? "(+)" : "(-)") + " by "
+ + creator;
+
+ // Find remaining length left
+ int left = MinecraftFontWidthCalculator.getStringWidth(intro)
+ - MinecraftFontWidthCalculator.getStringWidth("''"
+ + creatorString + location);
+
+ int nameLength = MinecraftFontWidthCalculator.getStringWidth(name);
+ if (left > nameLength) {
+ name = "'" + name + "'" + ChatColor.WHITE + creatorString
+ + whitespace(left - nameLength);
+ } else if (left < nameLength) {
+ name = "'" + substring(name, left) + "'" + ChatColor.WHITE
+ + creatorString;
+ }
+
+ player.sendMessage(color + name + location);
+ }
+ }
+ }
+
+ /**
+ * Lob shit off that string till it fits.
+ */
+ private String substring(String name, int left) {
+ while(MinecraftFontWidthCalculator.getStringWidth(name) > left) {
+ name = name.substring(0, name.length()-1);
+ }
+ return name;
+ }
+
+ public int getMaxPages(Player player) {
+ return (int) Math.ceil(warpList.getMaxWarps(player) / (double) WARPS_PER_PAGE);
+ }
+
+ public int getMaxPagesPerCreator(Player player, String warpCreator) {
+ String matchingWarpCreator = warpList.getMatchingCreator(player, warpCreator);
+ return (int) Math.ceil(warpList.getMaxWarpsPerCreator(player, matchingWarpCreator)
+ / (double) WARPS_PER_PAGE);
+ }
+
+ public String whitespace(int length) {
+ int spaceWidth = MinecraftFontWidthCalculator.getStringWidth(" ");
+
+ StringBuilder ret = new StringBuilder();
+
+ for(int i = 0; i < length; i+=spaceWidth) {
+ ret.append(" ");
+ }
+
+ return ret.toString();
+ }
+}
diff --git a/src/main/java/me/taylorkelly/mywarp/Searcher.java b/src/main/java/me/taylorkelly/mywarp/data/Searcher.java
similarity index 54%
rename from src/main/java/me/taylorkelly/mywarp/Searcher.java
rename to src/main/java/me/taylorkelly/mywarp/data/Searcher.java
index def6afacb8..c2c3458ecb 100644
--- a/src/main/java/me/taylorkelly/mywarp/Searcher.java
+++ b/src/main/java/me/taylorkelly/mywarp/data/Searcher.java
@@ -1,7 +1,8 @@
-package me.taylorkelly.mywarp;
+package me.taylorkelly.mywarp.data;
import java.util.ArrayList;
+
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
@@ -31,6 +32,24 @@ public void setQuery(String name) {
}
+ public void sendWarpMatches(ArrayList warps) {
+ for (Warp warp : warps) {
+ String color;
+ if (warp.playerIsCreator(player.getName())) {
+ color = ChatColor.AQUA.toString();
+ } else if (warp.publicAll) {
+ color = ChatColor.GREEN.toString();
+ } else {
+ color = ChatColor.RED.toString();
+ }
+ String creator = (warp.creator.equalsIgnoreCase(player.getName())) ? "you" : warp.creator;
+ int x = (int) Math.round(warp.x);
+ int y = warp.y;
+ int z = (int) Math.round(warp.z);
+ player.sendMessage(color + "'" + warp.name + "'" + ChatColor.WHITE + " by " + creator + " @(" + x + ", " + y + ", " + z + ")");
+ }
+ }
+
public void search() {
if (exactMatches.size() == 0 && matches.size() == 0) {
@@ -38,39 +57,11 @@ public void search() {
} else {
if (exactMatches.size() > 0) {
player.sendMessage(ChatColor.YELLOW + "Exact matches for search: " + ChatColor.GRAY + query);
- for (Warp warp : exactMatches) {
- String color;
- if (warp.playerIsCreator(player.getName())) {
- color = ChatColor.AQUA.toString();
- } else if (warp.publicAll) {
- color = ChatColor.GREEN.toString();
- } else {
- color = ChatColor.RED.toString();
- }
- String creator = (warp.creator.equalsIgnoreCase(player.getName())) ? "you" : warp.creator;
- int x = (int) Math.round(warp.x);
- int y = warp.y;
- int z = (int) Math.round(warp.z);
- player.sendMessage(color + "'" + warp.name + "'" + ChatColor.WHITE + " by " + creator + " @(" + x + ", " + y + ", " + z + ")");
- }
+ sendWarpMatches(exactMatches);
}
if (matches.size() > 0) {
player.sendMessage(ChatColor.YELLOW + "Partial matches for search: " + ChatColor.GRAY + query);
- for (Warp warp : matches) {
- String color;
- if (warp.playerIsCreator(player.getName())) {
- color = ChatColor.AQUA.toString();
- } else if (warp.publicAll) {
- color = ChatColor.GREEN.toString();
- } else {
- color = ChatColor.RED.toString();
- }
- String creator = (warp.creator.equalsIgnoreCase(player.getName())) ? "you" : warp.creator;
- int x = (int) Math.round(warp.x);
- int y = warp.y;
- int z = (int) Math.round(warp.z);
- player.sendMessage(color + "'" + warp.name + "'" + ChatColor.WHITE + " by " + creator + " @(" + x + ", " + y + ", " + z + ")");
- }
+ sendWarpMatches(matches);
}
}
}
diff --git a/src/main/java/me/taylorkelly/mywarp/SignWarp.java b/src/main/java/me/taylorkelly/mywarp/data/SignWarp.java
similarity index 97%
rename from src/main/java/me/taylorkelly/mywarp/SignWarp.java
rename to src/main/java/me/taylorkelly/mywarp/data/SignWarp.java
index a9c443fa18..43aa8a72e1 100644
--- a/src/main/java/me/taylorkelly/mywarp/SignWarp.java
+++ b/src/main/java/me/taylorkelly/mywarp/data/SignWarp.java
@@ -1,7 +1,8 @@
-package me.taylorkelly.mywarp;
+package me.taylorkelly.mywarp.data;
import java.util.ArrayList;
+
import org.bukkit.block.Sign;
import org.bukkit.entity.Player;
import org.bukkit.event.block.SignChangeEvent;
diff --git a/src/main/java/me/taylorkelly/mywarp/Warp.java b/src/main/java/me/taylorkelly/mywarp/data/Warp.java
similarity index 86%
rename from src/main/java/me/taylorkelly/mywarp/Warp.java
rename to src/main/java/me/taylorkelly/mywarp/data/Warp.java
index 1f13aa03f3..88323981fb 100644
--- a/src/main/java/me/taylorkelly/mywarp/Warp.java
+++ b/src/main/java/me/taylorkelly/mywarp/data/Warp.java
@@ -1,7 +1,10 @@
-package me.taylorkelly.mywarp;
+package me.taylorkelly.mywarp.data;
import java.util.ArrayList;
+import me.taylorkelly.mywarp.MyWarp;
+import me.taylorkelly.mywarp.WarpSettings;
+
import org.bukkit.*;
import org.bukkit.entity.Player;
@@ -42,19 +45,7 @@ public Warp(int index, String name, String creator, String world, double x, int
}
public Warp(String name, Player creator) {
- this.index = nextIndex;
- nextIndex++;
- this.name = name;
- this.creator = creator.getName();
- this.world = creator.getWorld().getName();
- this.x = creator.getLocation().getX();
- this.y = creator.getLocation().getBlockY();
- this.z = creator.getLocation().getZ();
- this.yaw = Math.round(creator.getLocation().getYaw()) % 360;
- this.pitch = Math.round(creator.getLocation().getPitch()) % 360;
- this.publicAll = true;
- this.permissions = new ArrayList();
- this.welcomeMessage = "Welcome to '" + name + "'";
+ this(name, creator, true);
}
public Warp(String name, Location location) {
@@ -117,7 +108,7 @@ public boolean playerCanWarp(Player player) {
if (permissions.contains(player.getName())) {
return true;
}
- if (WarpPermissions.isAdmin(player) && WarpSettings.adminPrivateWarps) {
+ if (MyWarp.getWarpPermissions().isAdmin(player) && WarpSettings.adminPrivateWarps) {
return true;
}
@@ -133,6 +124,10 @@ public void warp(Player player, Server server) {
}
if (currWorld != null) {
Location location = new Location(currWorld, x, y, z, yaw, pitch);
+ while (currWorld.getBlockAt(location).getType() != Material.AIR) {
+ location.setY(location.getY() + 1.0);
+ location = currWorld.getBlockAt(location).getLocation();
+ }
player.teleport(location);
} else {
player.sendMessage(ChatColor.RED + "World " + world + " doesn't exist.");
@@ -162,7 +157,7 @@ public boolean playerCanModify(Player player) {
if (creator.equals(player.getName())) {
return true;
}
- if (WarpPermissions.isAdmin(player)) {
+ if (MyWarp.getWarpPermissions().isAdmin(player)) {
return true;
}
return false;
diff --git a/src/main/java/me/taylorkelly/mywarp/WarpList.java b/src/main/java/me/taylorkelly/mywarp/data/WarpList.java
similarity index 55%
rename from src/main/java/me/taylorkelly/mywarp/WarpList.java
rename to src/main/java/me/taylorkelly/mywarp/data/WarpList.java
index b77505eda4..1590996a7e 100644
--- a/src/main/java/me/taylorkelly/mywarp/WarpList.java
+++ b/src/main/java/me/taylorkelly/mywarp/data/WarpList.java
@@ -1,4 +1,4 @@
-package me.taylorkelly.mywarp;
+package me.taylorkelly.mywarp.data;
import java.text.Collator;
import java.util.ArrayList;
@@ -6,6 +6,10 @@
import java.util.HashMap;
import java.util.List;
+import me.taylorkelly.mywarp.MyWarp;
+import me.taylorkelly.mywarp.WarpSettings;
+import me.taylorkelly.mywarp.sql.WarpDataSource;
+
import org.bukkit.*;
import org.bukkit.entity.Player;
@@ -22,24 +26,53 @@ public WarpList(Server server) {
}
public void addWarp(String name, Player player) {
- if (playerCanBuildPublicWarp(player)) {
- if (warpList.containsKey(name)) {
- player.sendMessage(ChatColor.RED + "Warp called '" + name + "' already exists.");
+ if (playerCanBuildWarp(player)) {
+ if (playerCanBuildPublicWarp(player)) {
+ if (warpList.containsKey(name)) {
+ player.sendMessage(ChatColor.RED + "Warp called '" + name
+ + "' already exists.");
+ } else {
+ Warp warp = new Warp(name, player);
+ warpList.put(name, warp);
+ WarpDataSource.addWarp(warp);
+ player.sendMessage(ChatColor.AQUA + "Successfully created '" + name
+ + "'");
+ player.sendMessage("If you'd like to privatize it,");
+ player.sendMessage("Use: " + ChatColor.RED + "/warp private " + name);
+ }
} else {
- Warp warp = new Warp(name, player);
- warpList.put(name, warp);
- WarpDataSource.addWarp(warp);
- player.sendMessage(ChatColor.AQUA + "Successfully created '" + name + "'");
- player.sendMessage("If you'd like to privatize it,");
- player.sendMessage("Use: " + ChatColor.RED + "/warp private " + name);
+ player.sendMessage(ChatColor.RED
+ + "You have reached your max # of public warps "
+ + ChatColor.YELLOW + "("
+ + MyWarp.getWarpPermissions().maxPublicWarps(player) + ")");
+ player.sendMessage("Delete some of your warps to make more");
}
} else {
- player.sendMessage(ChatColor.RED + "You have reached your max # of public warps " + ChatColor.YELLOW + "(" + WarpPermissions.maxPublicWarps(player)
- + ")");
+ player.sendMessage(ChatColor.RED
+ + "You have reached your max # of warps " + ChatColor.YELLOW
+ + "(" + MyWarp.getWarpPermissions().maxTotalWarps(player) + ")");
player.sendMessage("Delete some of your warps to make more");
}
}
+ private int numWarpsPlayer(Player player) {
+ int size = 0;
+ for (Warp warp : warpList.values()) {
+ String creator = warp.creator;
+ if (creator.equals(player.getName()))
+ size++;
+ }
+ return size;
+ }
+
+ private boolean playerCanBuildWarp(Player player) {
+ if(MyWarp.getWarpPermissions().isAdmin(player) && !WarpSettings.adminsObeyLimits) {
+ return true;
+ } else{
+ return numWarpsPlayer(player) < MyWarp.getWarpPermissions().maxTotalWarps(player);
+ }
+ }
+
private int numPublicWarpsPlayer(Player player) {
int size = 0;
for (Warp warp : warpList.values()) {
@@ -52,37 +85,48 @@ private int numPublicWarpsPlayer(Player player) {
}
private boolean playerCanBuildPublicWarp(Player player) {
- if(WarpPermissions.isAdmin(player) && !WarpSettings.adminsObeyLimits) {
+ if(MyWarp.getWarpPermissions().isAdmin(player) && !WarpSettings.adminsObeyLimits) {
return true;
} else{
- return numPublicWarpsPlayer(player) < WarpPermissions.maxPublicWarps(player);
+ return numPublicWarpsPlayer(player) < MyWarp.getWarpPermissions().maxPublicWarps(player);
}
}
private boolean playerCanBuildPrivateWarp(Player player) {
- if(WarpPermissions.isAdmin(player) && !WarpSettings.adminsObeyLimits) {
+ if(MyWarp.getWarpPermissions().isAdmin(player) && !WarpSettings.adminsObeyLimits) {
return true;
} else{
- return numPrivateWarpsPlayer(player) < WarpPermissions.maxPrivateWarps(player);
+ return numPrivateWarpsPlayer(player) < MyWarp.getWarpPermissions().maxPrivateWarps(player);
}
}
-
public void addWarpPrivate(String name, Player player) {
- if (playerCanBuildPrivateWarp(player)) {
- if (warpList.containsKey(name)) {
- player.sendMessage(ChatColor.RED + "Warp called '" + name + "' already exists.");
+ if (playerCanBuildWarp(player)) {
+ if (playerCanBuildPrivateWarp(player)) {
+ if (warpList.containsKey(name)) {
+ player.sendMessage(ChatColor.RED + "Warp called '" + name
+ + "' already exists.");
+ } else {
+ Warp warp = new Warp(name, player, false);
+ warpList.put(name, warp);
+ WarpDataSource.addWarp(warp);
+ player.sendMessage(ChatColor.AQUA + "Successfully created '" + name
+ + "'");
+ player.sendMessage("If you'd like to invite others to it,");
+ player.sendMessage("Use: " + ChatColor.RED
+ + "/warp invite " + name);
+ }
} else {
- Warp warp = new Warp(name, player, false);
- warpList.put(name, warp);
- WarpDataSource.addWarp(warp);
- player.sendMessage(ChatColor.AQUA + "Successfully created '" + name + "'");
- player.sendMessage("If you'd like to invite others to it,");
- player.sendMessage("Use: " + ChatColor.RED + "/warp invite " + name);
+ player.sendMessage(ChatColor.RED
+ + "You have reached your max # of private warps "
+ + ChatColor.YELLOW + "("
+ + MyWarp.getWarpPermissions().maxPrivateWarps(player) + ")");
+ player.sendMessage("Delete some of your warps to make more");
}
} else {
- player.sendMessage(ChatColor.RED + "You have reached your max # of private warps " + ChatColor.YELLOW + "("
- + WarpPermissions.maxPrivateWarps(player) + ")");
+ player.sendMessage(ChatColor.RED + "You have reached your max # of warps "
+ + ChatColor.YELLOW + "("
+ + MyWarp.getWarpPermissions().maxTotalWarps(player) + ")");
player.sendMessage("Delete some of your warps to make more");
}
}
@@ -141,13 +185,24 @@ public void privatize(String name, Player player) {
if (warpList.containsKey(name)) {
Warp warp = warpList.get(name);
if (warp.playerCanModify(player)) {
- warp.publicAll = false;
- WarpDataSource.publicizeWarp(warp, false);
- player.sendMessage(ChatColor.AQUA + "You have privatized '" + name + "'");
- player.sendMessage("If you'd like to invite others to it,");
- player.sendMessage("Use: " + ChatColor.RED + "/warp invite " + name);
+ if (playerCanBuildPrivateWarp(player)) {
+ warp.publicAll = false;
+ WarpDataSource.publicizeWarp(warp, false);
+ player.sendMessage(ChatColor.AQUA + "You have privatized '" + name
+ + "'");
+ player.sendMessage("If you'd like to invite others to it,");
+ player.sendMessage("Use: " + ChatColor.RED
+ + "/warp invite " + name);
+ } else {
+ player.sendMessage(ChatColor.RED
+ + "You have reached your max # of private warps "
+ + ChatColor.YELLOW + "("
+ + MyWarp.getWarpPermissions().maxPrivateWarps(player) + ")");
+ player.sendMessage("Delete some of your warps to make more");
+ }
} else {
- player.sendMessage(ChatColor.RED + "You do not have permission to privatize '" + name + "'");
+ player.sendMessage(ChatColor.RED
+ + "You do not have permission to privatize '" + name + "'");
}
} else {
player.sendMessage(ChatColor.RED + "No such warp '" + name + "'");
@@ -191,11 +246,21 @@ public void publicize(String name, Player player) {
if (warpList.containsKey(name)) {
Warp warp = warpList.get(name);
if (warp.playerCanModify(player)) {
- warp.publicAll = true;
- WarpDataSource.publicizeWarp(warp, true);
- player.sendMessage(ChatColor.AQUA + "You have publicized '" + name + "'");
+ if (playerCanBuildPublicWarp(player)) {
+ warp.publicAll = true;
+ WarpDataSource.publicizeWarp(warp, true);
+ player.sendMessage(ChatColor.AQUA + "You have publicized '" + name
+ + "'");
+ } else {
+ player.sendMessage(ChatColor.RED
+ + "You have reached your max # of public warps "
+ + ChatColor.YELLOW + "("
+ + MyWarp.getWarpPermissions().maxPublicWarps(player) + ")");
+ player.sendMessage("Delete some of your warps to make more");
+ }
} else {
- player.sendMessage(ChatColor.RED + "You do not have permission to publicize '" + name + "'");
+ player.sendMessage(ChatColor.RED
+ + "You do not have permission to publicize '" + name + "'");
}
} else {
player.sendMessage(ChatColor.RED + "No such warp '" + name + "'");
@@ -233,6 +298,14 @@ public void uninvite(String name, Player player, String inviteeName) {
}
public ArrayList getSortedWarps(Player player, int start, int size) {
+ return getSortedWarpsPerCreator(player, null, start, size);
+ }
+
+ public int getSize() {
+ return warpList.size();
+ }
+
+ public ArrayList getSortedWarpsPerCreator(Player player, String creator, int start, int size) {
ArrayList ret = new ArrayList();
List names = new ArrayList(warpList.keySet());
Collator collator = Collator.getInstance();
@@ -244,7 +317,7 @@ public ArrayList getSortedWarps(Player player, int start, int size) {
while (index < names.size() && ret.size() < size) {
String currName = names.get(index);
Warp warp = warpList.get(currName);
- if (warp.playerCanWarp(player)) {
+ if (warp.playerCanWarp(player) && (creator != null ? warp.playerIsCreator(creator) : true)) {
if (currentCount >= start) {
ret.add(warp);
} else {
@@ -256,10 +329,6 @@ public ArrayList getSortedWarps(Player player, int start, int size) {
return ret;
}
- public int getSize() {
- return warpList.size();
- }
-
public MatchList getMatches(String name, Player player) {
ArrayList exactMatches = new ArrayList();
ArrayList matches = new ArrayList();
@@ -292,6 +361,30 @@ public MatchList getMatches(String name, Player player) {
}
return new MatchList(exactMatches, matches);
}
+
+ public String getMatchingCreator(Player player, String creator) {
+ ArrayList matches = new ArrayList();
+ List names = new ArrayList(warpList.keySet());
+ Collator collator = Collator.getInstance();
+ collator.setStrength(Collator.SECONDARY);
+ Collections.sort(names, collator);
+
+ for (int i = 0; i < names.size(); i++) {
+ String currName = names.get(i);
+ Warp warp = warpList.get(currName);
+ if (warp.playerCanWarp(player)) {
+ if (warp.creator.equalsIgnoreCase(creator)) {
+ return creator;
+ } else if (warp.creator.toLowerCase().contains(creator.toLowerCase()) && !matches.contains(warp.creator)) {
+ matches.add(warp.creator);
+ }
+ }
+ }
+ if (matches.size() == 1) {
+ return matches.get(0);
+ }
+ return "";
+ }
public void give(String name, Player player, String giveeName) {
MatchList matches = this.getMatches(name, player);
@@ -300,18 +393,84 @@ public void give(String name, Player player, String giveeName) {
Warp warp = warpList.get(name);
if (warp.playerCanModify(player)) {
if (warp.playerIsCreator(giveeName)) {
- player.sendMessage(ChatColor.RED + giveeName + " is already the owner.");
+ player.sendMessage(ChatColor.RED + giveeName
+ + " is already the owner.");
} else {
- warp.setCreator(giveeName);
- WarpDataSource.updateCreator(warp);
- player.sendMessage(ChatColor.AQUA + "You have given '" + name + "' to " + giveeName);
Player match = server.getPlayer(giveeName);
- if (match != null) {
- match.sendMessage(ChatColor.AQUA + "You've been given '" + name + "' by " + player.getName());
+ if (match != null) { // match needs to be online
+ if (warp.publicAll) {
+ if (playerCanBuildWarp(match)) {
+ if (playerCanBuildPublicWarp(match)) {
+ warp.setCreator(giveeName);
+ WarpDataSource.updateCreator(warp);
+ player.sendMessage(ChatColor.AQUA
+ + "You have given '" + name + "' to "
+ + giveeName);
+ match.sendMessage(ChatColor.AQUA
+ + "You've been given '" + name + "' by "
+ + player.getName());
+ } else {
+ player.sendMessage(ChatColor.RED
+ + "Player "
+ + match.getName()
+ + " has reached his max # of public warps "
+ + ChatColor.YELLOW
+ + "("
+ + MyWarp.getWarpPermissions()
+ .maxPublicWarps(player) + ")");
+ player.sendMessage("Tell him to delete some of his warps to receive this one.");
+ }
+ } else {
+ player.sendMessage(ChatColor.RED
+ + "Player "
+ + match.getName()
+ + " has reached his max # of warps "
+ + ChatColor.YELLOW
+ + "("
+ + MyWarp.getWarpPermissions().maxTotalWarps(
+ player) + ")");
+ player.sendMessage("Delete some of your warps to make more");
+ }
+ } else {
+ if (playerCanBuildWarp(match)) {
+ if (playerCanBuildPrivateWarp(match)) {
+ warp.setCreator(giveeName);
+ WarpDataSource.updateCreator(warp);
+ player.sendMessage(ChatColor.AQUA
+ + "You have given '" + name + "' to "
+ + giveeName);
+ match.sendMessage(ChatColor.AQUA
+ + "You've been given '" + name + "' by "
+ + player.getName());
+ } else {
+ player.sendMessage(ChatColor.RED
+ + "Player "
+ + match.getName()
+ + " has reached his max # of private warps "
+ + ChatColor.YELLOW
+ + "("
+ + MyWarp.getWarpPermissions()
+ .maxPrivateWarps(player) + ")");
+ player.sendMessage("Tell him to delete some of his warps to receive this one.");
+ }
+ } else {
+ player.sendMessage(ChatColor.RED
+ + "Player "
+ + match.getName()
+ + " has reached his max # of warps "
+ + ChatColor.YELLOW
+ + "("
+ + MyWarp.getWarpPermissions().maxTotalWarps(
+ player) + ")");
+ player.sendMessage("Tell him to delete some of his warps to receive this one.");
+ }
+ }
}
}
} else {
- player.sendMessage(ChatColor.RED + "You do not have permission to uninvite players from '" + name + "'");
+ player.sendMessage(ChatColor.RED
+ + "You do not have permission to uninvite players from '" + name
+ + "'");
}
} else {
player.sendMessage(ChatColor.RED + "No such warp '" + name + "'");
@@ -328,6 +487,16 @@ public double getMaxWarps(Player player) {
return count;
}
+ public double getMaxWarpsPerCreator(Player player, String creator) {
+ int count = 0;
+ for (Warp warp : warpList.values()) {
+ if (warp.playerCanWarp(player) && warp.playerIsCreator(creator)) {
+ count++;
+ }
+ }
+ return count;
+ }
+
public void welcomeMessage(String name, Player player) {
MatchList matches = this.getMatches(name, player);
name = matches.getMatch(name);
diff --git a/src/main/java/me/taylorkelly/mywarp/griefcraft/Updater.java b/src/main/java/me/taylorkelly/mywarp/griefcraft/Updater.java
index 0e249631bc..bc1667dc6d 100644
--- a/src/main/java/me/taylorkelly/mywarp/griefcraft/Updater.java
+++ b/src/main/java/me/taylorkelly/mywarp/griefcraft/Updater.java
@@ -32,7 +32,7 @@ public class Updater {
private Logger logger = Logger.getLogger("Minecraft");
- private final static String UPDATE_SITE = "http://procrafter.de/downloads/";
+ private final static String UPDATE_SITE = "https://raw.github.com/mung3r/MyWarp/master/";
private List needsUpdating = new ArrayList();
diff --git a/src/main/java/me/taylorkelly/mywarp/listeners/MWBlockListener.java b/src/main/java/me/taylorkelly/mywarp/listeners/MWBlockListener.java
new file mode 100644
index 0000000000..1653087360
--- /dev/null
+++ b/src/main/java/me/taylorkelly/mywarp/listeners/MWBlockListener.java
@@ -0,0 +1,37 @@
+package me.taylorkelly.mywarp.listeners;
+
+import me.taylorkelly.mywarp.MyWarp;
+import me.taylorkelly.mywarp.data.SignWarp;
+import me.taylorkelly.mywarp.permissions.WarpPermissions;
+
+import org.bukkit.ChatColor;
+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.SignChangeEvent;
+
+public class MWBlockListener implements Listener
+{
+ private WarpPermissions warpPermissions;
+
+ public MWBlockListener(MyWarp plugin)
+ {
+ warpPermissions = MyWarp.getWarpPermissions();
+ }
+
+ @EventHandler(priority = EventPriority.MONITOR)
+ public void onSignChange(SignChangeEvent event)
+ {
+ Player player = event.getPlayer();
+
+ if (SignWarp.isSignWarp(event))
+ if (warpPermissions.createSignWarp(player)) {
+ player.sendMessage(ChatColor.AQUA + "Successfully created a SignWarp");
+ }
+ else {
+ player.sendMessage(ChatColor.RED + "You do not have permission to create a SignWarp");
+ event.setCancelled(true);
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/me/taylorkelly/mywarp/listeners/MWPlayerListener.java b/src/main/java/me/taylorkelly/mywarp/listeners/MWPlayerListener.java
new file mode 100644
index 0000000000..3542d7bd85
--- /dev/null
+++ b/src/main/java/me/taylorkelly/mywarp/listeners/MWPlayerListener.java
@@ -0,0 +1,64 @@
+package me.taylorkelly.mywarp.listeners;
+
+import me.taylorkelly.mywarp.MyWarp;
+import me.taylorkelly.mywarp.WarpSettings;
+import me.taylorkelly.mywarp.data.SignWarp;
+import me.taylorkelly.mywarp.data.WarpList;
+import me.taylorkelly.mywarp.permissions.WarpPermissions;
+
+import org.bukkit.Chunk;
+import org.bukkit.World;
+import org.bukkit.block.Block;
+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.Action;
+import org.bukkit.event.player.AsyncPlayerChatEvent;
+import org.bukkit.event.player.PlayerInteractEvent;
+import org.bukkit.event.player.PlayerTeleportEvent;
+
+public class MWPlayerListener implements Listener
+{
+ private WarpList warpList;
+ private WarpPermissions warpPermissions;
+
+ public MWPlayerListener(MyWarp plugin)
+ {
+ warpList = plugin.getWarpList();
+ warpPermissions = MyWarp.getWarpPermissions();
+ }
+
+ @EventHandler(priority = EventPriority.MONITOR)
+ public void onPlayerInteract(PlayerInteractEvent event)
+ {
+ if (event.getAction().equals(Action.RIGHT_CLICK_BLOCK)) {
+ Block block = event.getClickedBlock();
+ if (((block.getState() instanceof Sign)) && (SignWarp.isSignWarp((Sign)block.getState())) && (warpPermissions.signWarp(event.getPlayer())))
+ SignWarp.warpSign((Sign)block.getState(), this.warpList, event.getPlayer());
+ }
+ }
+
+ @EventHandler(priority = EventPriority.MONITOR)
+ public void onPlayerChat(AsyncPlayerChatEvent event)
+ {
+ Player player = event.getPlayer();
+ if (this.warpList.waitingForWelcome(player)) {
+ this.warpList.setWelcomeMessage(player, event.getMessage());
+ this.warpList.notWaiting(player);
+ event.setCancelled(true);
+ }
+ }
+
+ @EventHandler(priority = EventPriority.MONITOR)
+ public void onPlayerTeleport(PlayerTeleportEvent event) {
+ if(WarpSettings.loadChunks) {
+ World world = event.getPlayer().getWorld();
+ Chunk chunk = world.getChunkAt(event.getTo());
+ int x = chunk.getX();
+ int z = chunk.getZ();
+ world.refreshChunk(x, z);
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/me/taylorkelly/mywarp/permissions/BPermissions2Handler.java b/src/main/java/me/taylorkelly/mywarp/permissions/BPermissions2Handler.java
new file mode 100644
index 0000000000..86c46938e9
--- /dev/null
+++ b/src/main/java/me/taylorkelly/mywarp/permissions/BPermissions2Handler.java
@@ -0,0 +1,26 @@
+package me.taylorkelly.mywarp.permissions;
+
+import org.bukkit.entity.Player;
+import de.bananaco.bpermissions.api.ApiLayer;
+import de.bananaco.bpermissions.api.util.CalculableType;
+
+public class BPermissions2Handler implements IPermissionsHandler {
+
+ public BPermissions2Handler() {
+
+ }
+
+ @Override
+ public boolean hasPermission(final Player player, final String node, boolean defaultPerm) {
+ return player.hasPermission(node);
+ }
+
+ public int getInteger(final Player player, final String node, int defaultInt) {
+ int value = defaultInt;
+ String retval = ApiLayer.getValue(player.getWorld().getName(), CalculableType.USER, player.getName(), node);
+ if(retval != "" && retval != null) {
+ value = Integer.parseInt(retval);
+ }
+ return value;
+ }
+}
diff --git a/src/main/java/me/taylorkelly/mywarp/permissions/BPermissionsHandler.java b/src/main/java/me/taylorkelly/mywarp/permissions/BPermissionsHandler.java
new file mode 100644
index 0000000000..c8a30f0772
--- /dev/null
+++ b/src/main/java/me/taylorkelly/mywarp/permissions/BPermissionsHandler.java
@@ -0,0 +1,23 @@
+package me.taylorkelly.mywarp.permissions;
+
+import org.bukkit.entity.Player;
+import de.bananaco.permissions.info.InfoReader;
+
+public class BPermissionsHandler implements IPermissionsHandler {
+ private final transient InfoReader info;
+
+ public BPermissionsHandler() {
+ info = new InfoReader();
+ info.instantiate();
+ }
+
+ @Override
+ public boolean hasPermission(final Player player, final String node, boolean defaultPerm) {
+ return player.hasPermission(node);
+ }
+
+ public int getInteger(final Player player, final String node, int defaultInt) {
+ int value = Integer.parseInt(info.getValue(player, node));
+ return value;
+ }
+}
diff --git a/src/main/java/me/taylorkelly/mywarp/permissions/GroupManagerHandler.java b/src/main/java/me/taylorkelly/mywarp/permissions/GroupManagerHandler.java
new file mode 100644
index 0000000000..81237bbe06
--- /dev/null
+++ b/src/main/java/me/taylorkelly/mywarp/permissions/GroupManagerHandler.java
@@ -0,0 +1,27 @@
+package me.taylorkelly.mywarp.permissions;
+
+import org.bukkit.entity.Player;
+import org.bukkit.plugin.Plugin;
+import org.anjocaido.groupmanager.GroupManager;
+import org.anjocaido.groupmanager.permissions.AnjoPermissionsHandler;
+
+public class GroupManagerHandler implements IPermissionsHandler {
+ private final transient GroupManager manager;
+
+ public GroupManagerHandler(final Plugin permissionsPlugin) {
+ manager = ((GroupManager)permissionsPlugin);
+ }
+
+ @Override
+ public boolean hasPermission(final Player player, final String node, final boolean defaultPerm) {
+ AnjoPermissionsHandler handler = manager.getWorldsHolder().getWorldPermissions(player);
+ return handler.has(player, node);
+ }
+
+ @Override
+ public int getInteger(final Player player, final String node, final int defaultInt) {
+ String playername = player.getName();
+ AnjoPermissionsHandler handler = manager.getWorldsHolder().getWorldPermissions(player);
+ return handler.getPermissionInteger(playername, node);
+ }
+}
diff --git a/src/main/java/me/taylorkelly/mywarp/permissions/IPermissionsHandler.java b/src/main/java/me/taylorkelly/mywarp/permissions/IPermissionsHandler.java
new file mode 100644
index 0000000000..aae8c24196
--- /dev/null
+++ b/src/main/java/me/taylorkelly/mywarp/permissions/IPermissionsHandler.java
@@ -0,0 +1,8 @@
+package me.taylorkelly.mywarp.permissions;
+
+import org.bukkit.entity.Player;
+
+public interface IPermissionsHandler {
+ boolean hasPermission(Player player, String node, boolean defaultPerm);
+ int getInteger(Player player, String node, int defaultInt);
+}
diff --git a/src/main/java/me/taylorkelly/mywarp/permissions/NullHandler.java b/src/main/java/me/taylorkelly/mywarp/permissions/NullHandler.java
new file mode 100644
index 0000000000..3132eaf16a
--- /dev/null
+++ b/src/main/java/me/taylorkelly/mywarp/permissions/NullHandler.java
@@ -0,0 +1,15 @@
+package me.taylorkelly.mywarp.permissions;
+
+import org.bukkit.entity.Player;
+
+public class NullHandler implements IPermissionsHandler {
+
+ @Override
+ public boolean hasPermission(final Player player, final String node, boolean defaultPerm) {
+ return false;
+ }
+
+ public int getInteger(final Player player, final String node, int defaultInt) {
+ return defaultInt;
+ }
+}
diff --git a/src/main/java/me/taylorkelly/mywarp/permissions/Permissions2Handler.java b/src/main/java/me/taylorkelly/mywarp/permissions/Permissions2Handler.java
new file mode 100644
index 0000000000..820ad2f985
--- /dev/null
+++ b/src/main/java/me/taylorkelly/mywarp/permissions/Permissions2Handler.java
@@ -0,0 +1,27 @@
+package me.taylorkelly.mywarp.permissions;
+
+import org.bukkit.entity.Player;
+import com.nijiko.permissions.PermissionHandler;
+import com.nijikokun.bukkit.Permissions.Permissions;
+import org.bukkit.plugin.Plugin;
+
+public class Permissions2Handler implements IPermissionsHandler {
+ private final transient PermissionHandler handler;
+
+ public Permissions2Handler(final Plugin permissionsPlugin) {
+ handler = ((Permissions)permissionsPlugin).getHandler();
+ }
+
+ @Override
+ public boolean hasPermission(final Player player, final String node, boolean defaultPerm) {
+ return handler.permission(player, node);
+ }
+
+ @Override
+ public int getInteger(final Player player, final String node, final int defaultInt) {
+ String playername = player.getName();
+ String world = player.getWorld().getName();
+ return handler.getPermissionInteger(world, playername, node);
+ }
+}
+
diff --git a/src/main/java/me/taylorkelly/mywarp/permissions/Permissions3Handler.java b/src/main/java/me/taylorkelly/mywarp/permissions/Permissions3Handler.java
new file mode 100644
index 0000000000..c52c9efc1a
--- /dev/null
+++ b/src/main/java/me/taylorkelly/mywarp/permissions/Permissions3Handler.java
@@ -0,0 +1,27 @@
+package me.taylorkelly.mywarp.permissions;
+
+import org.bukkit.entity.Player;
+import com.nijiko.permissions.PermissionHandler;
+import com.nijikokun.bukkit.Permissions.Permissions;
+import org.bukkit.plugin.Plugin;
+
+public class Permissions3Handler implements IPermissionsHandler {
+ private final transient PermissionHandler handler;
+
+ public Permissions3Handler(final Plugin permissionsPlugin) {
+ handler = ((Permissions)permissionsPlugin).getHandler();
+ }
+
+ @Override
+ public boolean hasPermission(final Player player, final String node, boolean defaultPerm) {
+ return handler.has(player, node);
+ }
+
+ @Override
+ public int getInteger(final Player player, final String node, final int defaultInt) {
+ String playername = player.getName();
+ String world = player.getWorld().getName();
+ return handler.getPermissionInteger(world, playername, node);
+ }
+}
+
diff --git a/src/main/java/me/taylorkelly/mywarp/permissions/PermissionsExHandler.java b/src/main/java/me/taylorkelly/mywarp/permissions/PermissionsExHandler.java
new file mode 100644
index 0000000000..ff06565ecf
--- /dev/null
+++ b/src/main/java/me/taylorkelly/mywarp/permissions/PermissionsExHandler.java
@@ -0,0 +1,26 @@
+package me.taylorkelly.mywarp.permissions;
+import org.bukkit.entity.Player;
+import ru.tehkode.permissions.PermissionManager;
+import ru.tehkode.permissions.bukkit.PermissionsEx;
+
+public class PermissionsExHandler implements IPermissionsHandler {
+ private final transient PermissionManager manager;
+
+ public PermissionsExHandler() {
+ manager = PermissionsEx.getPermissionManager();
+ }
+
+ @Override
+ public boolean hasPermission(final Player player, final String node, final boolean defaultPerm) {
+ String playername = player.getName();
+ String playerworld = player.getWorld().getName();
+ return manager.has(playername, node, playerworld);
+ }
+
+ @Override
+ public int getInteger(final Player player, final String node, final int defaultInt) {
+ String playername = player.getName();
+ String world = player.getWorld().getName();
+ return manager.getUser(playername).getOptionInteger(node, world, defaultInt);
+ }
+}
diff --git a/src/main/java/me/taylorkelly/mywarp/permissions/PermissionsHandler.java b/src/main/java/me/taylorkelly/mywarp/permissions/PermissionsHandler.java
new file mode 100644
index 0000000000..0426e794ea
--- /dev/null
+++ b/src/main/java/me/taylorkelly/mywarp/permissions/PermissionsHandler.java
@@ -0,0 +1,124 @@
+package me.taylorkelly.mywarp.permissions;
+
+import me.taylorkelly.mywarp.utils.WarpLogger;
+import net.milkbowl.vault.permission.Permission;
+
+import org.bukkit.Bukkit;
+import org.bukkit.entity.Player;
+import org.bukkit.plugin.Plugin;
+import org.bukkit.plugin.PluginManager;
+import org.bukkit.plugin.RegisteredServiceProvider;
+
+public class PermissionsHandler implements IPermissionsHandler {
+ private enum PermHandler {
+ VAULT, PERMISSIONSEX, PERMISSIONS3, PERMISSIONS2, GROUPMANAGER, BPERMISSIONS, BPERMISSIONS2, SUPERPERMS, NONE
+ }
+ private static PermHandler permplugin = PermHandler.NONE;
+ private transient IPermissionsHandler handler = new NullHandler();
+ private final transient Plugin plugin;
+
+ public PermissionsHandler(final Plugin plugin) {
+ this.plugin = plugin;
+ checkPermissions();
+ }
+
+ @Override
+ public boolean hasPermission(final Player player, final String node, boolean defaultPerm) {
+ return handler.hasPermission(player, node, defaultPerm);
+ }
+
+ @Override
+ public int getInteger(final Player player, final String node, int defaultInt) {
+ return handler.getInteger(player, node, defaultInt);
+ }
+
+ public void checkPermissions() {
+ final PluginManager pluginManager = plugin.getServer().getPluginManager();
+
+ try {
+ RegisteredServiceProvider permissionProvider = Bukkit
+ .getServicesManager().getRegistration(
+ net.milkbowl.vault.permission.Permission.class);
+ if (permissionProvider != null) {
+ if (!(handler instanceof VaultHandler)) {
+ permplugin = PermHandler.VAULT;
+ WarpLogger.info("Access Control: Using Vault");
+ handler = new VaultHandler(permissionProvider.getProvider());
+ }
+ return;
+ }
+ } catch (NoClassDefFoundError e) {
+ // Do nothing
+ }
+
+ final Plugin permExPlugin = pluginManager.getPlugin("PermissionsEx");
+ if (permExPlugin != null && permExPlugin.isEnabled()) {
+ if (!(handler instanceof PermissionsExHandler)) {
+ permplugin = PermHandler.PERMISSIONSEX;
+ String version = permExPlugin.getDescription().getVersion();
+ WarpLogger.info("Access Control: Using PermissionsEx v"+ version);
+ handler = new PermissionsExHandler();
+ }
+ return;
+ }
+
+ final Plugin bPermPlugin = pluginManager.getPlugin("bPermissions");
+ if (bPermPlugin != null && bPermPlugin.isEnabled()) {
+ if (bPermPlugin.getDescription().getVersion().charAt(0) == '2') {
+ if (!(handler instanceof BPermissions2Handler)) {
+ permplugin = PermHandler.BPERMISSIONS2;
+ String version = bPermPlugin.getDescription().getVersion();
+ WarpLogger.info("Access Control: Using bPermissions"+ version);
+ handler = new BPermissions2Handler();
+ }
+ } else {
+ if (!(handler instanceof BPermissionsHandler)) {
+ permplugin = PermHandler.BPERMISSIONS;
+ String version = bPermPlugin.getDescription().getVersion();
+ WarpLogger.info("Access Control: Using bPermissions"+ version);
+ handler = new BPermissionsHandler();
+ }
+ }
+ return;
+ }
+
+
+ final Plugin GMplugin = pluginManager.getPlugin("GroupManager");
+ if (GMplugin != null && GMplugin.isEnabled()) {
+ if (!(handler instanceof GroupManagerHandler)) {
+ permplugin = PermHandler.GROUPMANAGER;
+ String version = GMplugin.getDescription().getVersion();
+ WarpLogger.info("Access Control: Using GroupManager v"+ version);
+ handler = new GroupManagerHandler(GMplugin);
+ }
+ return;
+ }
+
+ final Plugin permPlugin = pluginManager.getPlugin("Permissions");
+ if (permPlugin != null && permPlugin.isEnabled()) {
+ if (permPlugin.getDescription().getVersion().charAt(0) == '3') {
+ if (!(handler instanceof Permissions3Handler)) {
+ permplugin = PermHandler.PERMISSIONS3;
+ String version = permPlugin.getDescription().getVersion();
+ WarpLogger.info("Access Control: Using Permissions v"+ version);
+ handler = new Permissions3Handler(permPlugin);
+ }
+ } else {
+ if (!(handler instanceof Permissions2Handler)) {
+ permplugin = PermHandler.PERMISSIONS2;
+ String version = permPlugin.getDescription().getVersion();
+ WarpLogger.info("Access Control: Using Permissions v"+ version);
+ handler = new Permissions2Handler(permPlugin);
+ }
+ }
+ return;
+ }
+
+ if (permplugin == PermHandler.NONE) {
+ if (!(handler instanceof SuperpermsHandler)) {
+ WarpLogger.info("Access Control: Using SuperPerms");
+ handler = new SuperpermsHandler();
+ }
+ }
+ }
+}
diff --git a/src/main/java/me/taylorkelly/mywarp/permissions/SuperpermsHandler.java b/src/main/java/me/taylorkelly/mywarp/permissions/SuperpermsHandler.java
new file mode 100644
index 0000000000..afecf76f33
--- /dev/null
+++ b/src/main/java/me/taylorkelly/mywarp/permissions/SuperpermsHandler.java
@@ -0,0 +1,25 @@
+package me.taylorkelly.mywarp.permissions;
+
+import me.taylorkelly.mywarp.WarpSettings;
+
+import org.bukkit.entity.Player;
+
+public class SuperpermsHandler implements IPermissionsHandler {
+
+ @Override
+ public boolean hasPermission(final Player player, final String node, boolean defaultPerm) {
+ if(player.isOp() && WarpSettings.opPermissions) {
+ return true;
+ }
+ return player.hasPermission(node);
+ }
+
+ @Override
+ public int getInteger(final Player player, final String node, final int defaultInt) {
+ if(player.isOp() && WarpSettings.opPermissions) {
+ return 0;
+ }
+ return defaultInt;
+ }
+}
+
diff --git a/src/main/java/me/taylorkelly/mywarp/permissions/VaultHandler.java b/src/main/java/me/taylorkelly/mywarp/permissions/VaultHandler.java
new file mode 100644
index 0000000000..6e64c150f0
--- /dev/null
+++ b/src/main/java/me/taylorkelly/mywarp/permissions/VaultHandler.java
@@ -0,0 +1,29 @@
+package me.taylorkelly.mywarp.permissions;
+
+import me.taylorkelly.mywarp.WarpSettings;
+import net.milkbowl.vault.permission.Permission;
+
+import org.bukkit.entity.Player;
+
+
+public class VaultHandler implements IPermissionsHandler {
+
+ private Permission permission;
+
+ public VaultHandler(Permission permission) {
+ this.permission = permission;
+ }
+
+ @Override
+ public boolean hasPermission(final Player player, final String node, boolean defaultPerm) {
+ return permission.has(player, node);
+ }
+
+ @Override
+ public int getInteger(final Player player, final String node, final int defaultInt) {
+ if(player.isOp() && WarpSettings.opPermissions) {
+ return 0;
+ }
+ return defaultInt;
+ }
+}
diff --git a/src/main/java/me/taylorkelly/mywarp/permissions/WarpPermissions.java b/src/main/java/me/taylorkelly/mywarp/permissions/WarpPermissions.java
new file mode 100644
index 0000000000..d9580aeea0
--- /dev/null
+++ b/src/main/java/me/taylorkelly/mywarp/permissions/WarpPermissions.java
@@ -0,0 +1,98 @@
+package me.taylorkelly.mywarp.permissions;
+
+import me.taylorkelly.mywarp.WarpSettings;
+
+import org.bukkit.entity.Player;
+import org.bukkit.plugin.Plugin;
+
+public class WarpPermissions {
+ private PermissionsHandler permissionsHandler;
+
+ public WarpPermissions(Plugin plugin) {
+ permissionsHandler = new PermissionsHandler(plugin);
+ }
+
+ public int integer(Player player, String node, int defaultInt) {
+ return permissionsHandler.getInteger(player, node, defaultInt);
+ }
+
+ public boolean hasPermission(Player player, final String node, boolean defaultPerm) {
+ return permissionsHandler.hasPermission(player, node, defaultPerm);
+ }
+
+ public boolean isAdmin(Player player) {
+ return permissionsHandler.hasPermission(player, "mywarp.admin", player.isOp());
+ }
+
+ public boolean warp(Player player) {
+ return permissionsHandler.hasPermission(player, "mywarp.warp.basic.warp", true);
+ }
+
+ public boolean delete(Player player) {
+ return permissionsHandler.hasPermission(player, "mywarp.warp.basic.delete", true);
+ }
+
+ public boolean list(Player player) {
+ return permissionsHandler.hasPermission(player, "mywarp.warp.basic.list", true);
+ }
+
+ public boolean welcome(Player player) {
+ return permissionsHandler.hasPermission(player, "mywarp.warp.basic.welcome", true);
+ }
+
+ public boolean search(Player player) {
+ return permissionsHandler.hasPermission(player, "mywarp.warp.basic.search", true);
+ }
+
+ public boolean give(Player player) {
+ return permissionsHandler.hasPermission(player, "mywarp.warp.soc.give", true);
+ }
+
+ public boolean invite(Player player) {
+ return permissionsHandler.hasPermission(player, "mywarp.warp.soc.invite", true);
+ }
+
+ public boolean uninvite(Player player) {
+ return permissionsHandler.hasPermission(player, "mywarp.warp.soc.uninvite", true);
+ }
+
+ public boolean canPublic(Player player) {
+ return permissionsHandler.hasPermission(player, "mywarp.warp.soc.public", true);
+ }
+
+ public boolean canPrivate(Player player) {
+ return permissionsHandler.hasPermission(player, "mywarp.warp.soc.private", true);
+ }
+
+ public boolean signWarp(Player player) {
+ return permissionsHandler.hasPermission(player, "mywarp.warp.sign.warp", true);
+ }
+
+ public boolean privateCreate(Player player) {
+ return permissionsHandler.hasPermission(player, "mywarp.warp.basic.createprivate", true);
+ }
+
+ public boolean publicCreate(Player player) {
+ return permissionsHandler.hasPermission(player, "mywarp.warp.basic.createpublic", true);
+ }
+
+ public boolean compass(Player player) {
+ return permissionsHandler.hasPermission(player, "mywarp.warp.basic.compass", true);
+ }
+
+ public int maxTotalWarps(Player player) {
+ return WarpSettings.maxTotal;
+ }
+
+ public int maxPrivateWarps(Player player) {
+ return WarpSettings.maxPrivate;
+ }
+
+ public int maxPublicWarps(Player player) {
+ return WarpSettings.maxPublic;
+ }
+
+ public boolean createSignWarp(Player player) {
+ return permissionsHandler.hasPermission(player, "mywarp.warp.sign.create", true);
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/me/taylorkelly/mywarp/ConnectionManager.java b/src/main/java/me/taylorkelly/mywarp/sql/ConnectionManager.java
similarity index 58%
rename from src/main/java/me/taylorkelly/mywarp/ConnectionManager.java
rename to src/main/java/me/taylorkelly/mywarp/sql/ConnectionManager.java
index e388e42db8..acaa4b1351 100644
--- a/src/main/java/me/taylorkelly/mywarp/ConnectionManager.java
+++ b/src/main/java/me/taylorkelly/mywarp/sql/ConnectionManager.java
@@ -1,9 +1,11 @@
-package me.taylorkelly.mywarp;
+package me.taylorkelly.mywarp.sql;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
+import me.taylorkelly.mywarp.WarpSettings;
+import me.taylorkelly.mywarp.utils.WarpLogger;
public class ConnectionManager {
private static Connection conn;
@@ -29,20 +31,35 @@ public static Connection initialize() {
return conn;
}
- public static Connection getConnection() {
- if(conn == null) conn = initialize();
- return conn;
- }
+ public static Connection getConnection() {
+ if(conn == null) conn = initialize();
+ if(WarpSettings.usemySQL) {
+ // We probably dont need to do this for SQLite.
+ try {
+ if(!conn.isValid(10)) conn = initialize();
+ } catch (SQLException ex) {
+ WarpLogger.severe("Failed to check SQL status", ex);
+ }
+ }
+ return conn;
+ }
public static void closeConnection() {
- if(conn != null) {
- try {
- conn.close();
- conn = null;
- } catch (SQLException ex) {
- WarpLogger.severe("Error on Connection close", ex);
- }
- }
+ if(conn != null) {
+ try {
+ if(WarpSettings.usemySQL){
+ if(conn.isValid(10)) {
+ conn.close();
+ }
+ conn = null;
+ } else {
+ conn.close();
+ conn = null;
+ }
+ } catch (SQLException ex) {
+ WarpLogger.severe("Error on Connection close", ex);
+ }
+ }
}
diff --git a/src/main/java/me/taylorkelly/mywarp/WarpDataSource.java b/src/main/java/me/taylorkelly/mywarp/sql/WarpDataSource.java
similarity index 81%
rename from src/main/java/me/taylorkelly/mywarp/WarpDataSource.java
rename to src/main/java/me/taylorkelly/mywarp/sql/WarpDataSource.java
index 1dbd8693ea..f7cab7d4b0 100644
--- a/src/main/java/me/taylorkelly/mywarp/WarpDataSource.java
+++ b/src/main/java/me/taylorkelly/mywarp/sql/WarpDataSource.java
@@ -1,4 +1,4 @@
-package me.taylorkelly.mywarp;
+package me.taylorkelly.mywarp.sql;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
@@ -9,8 +9,10 @@
import java.sql.Statement;
import java.io.File;
import java.util.HashMap;
-import java.util.logging.Level;
-import java.util.logging.Logger;
+
+import me.taylorkelly.mywarp.WarpSettings;
+import me.taylorkelly.mywarp.data.Warp;
+import me.taylorkelly.mywarp.utils.WarpLogger;
public class WarpDataSource {
public final static String sqlitedb = "/warps.db";
@@ -63,9 +65,9 @@ public static HashMap getMap() {
Warp warp = new Warp(index, name, creator, world, x, y, z, yaw, pitch, publicAll, permissions, welcomeMessage);
ret.put(name, warp);
}
- WarpLogger.info("[MYWARP]: " + size + " warps loaded");
+ WarpLogger.info("" + size + " warps loaded");
} catch (SQLException ex) {
- WarpLogger.severe("[MYWARP]: Warp Load Exception");
+ WarpLogger.severe("Warp Load Exception");
} finally {
try {
if (statement != null)
@@ -73,7 +75,7 @@ public static HashMap getMap() {
if (set != null)
set.close();
} catch (SQLException ex) {
- WarpLogger.severe("[MYWARP]: Warp Load Exception (on close)");
+ WarpLogger.severe("Warp Load Exception (on close)");
}
}
return ret;
@@ -90,16 +92,14 @@ private static boolean tableExists() {
return false;
return true;
} catch (SQLException ex) {
- Logger log = Logger.getLogger("Minecraft");
- WarpLogger.severe("[MYWARP]: Table Check Exception", ex);
+ WarpLogger.severe("Table Check Exception", ex);
return false;
} finally {
try {
if (rs != null)
rs.close();
} catch (SQLException ex) {
- Logger log = Logger.getLogger("Minecraft");
- WarpLogger.severe("[MYWARP]: Table Check SQL Exception (on closing)");
+ WarpLogger.severe("Table Check SQL Exception (on closing)");
}
}
}
@@ -107,7 +107,7 @@ private static boolean tableExists() {
private static void createTable() {
Statement st = null;
try {
- WarpLogger.info("[MyWarp] Creating Database...");
+ WarpLogger.info("Creating Database...");
Connection conn = ConnectionManager.getConnection();
st = conn.createStatement();
st.executeUpdate(WARP_TABLE);
@@ -116,7 +116,7 @@ private static void createTable() {
if(WarpSettings.usemySQL){
// We need to set auto increment on SQL.
String sql = "ALTER TABLE `warpTable` CHANGE `id` `id` INT NOT NULL AUTO_INCREMENT ";
- WarpLogger.info("[MyWarp] Modifying database for MySQL support");
+ WarpLogger.info("Modifying database for MySQL support");
st = conn.createStatement();
st.executeUpdate(sql);
conn.commit();
@@ -124,10 +124,10 @@ private static void createTable() {
// Check for old warps.db and import to mysql
File sqlitefile = new File(WarpSettings.dataDir.getAbsolutePath() + sqlitedb);
if (!sqlitefile.exists()) {
- WarpLogger.info("[MyWarp] Could not find old " + sqlitedb);
+ WarpLogger.info("Could not find old " + sqlitedb);
return;
} else {
- WarpLogger.info("[MyWarp] Trying to import warps from warps.db");
+ WarpLogger.info("Trying to import warps from warps.db");
Class.forName("org.sqlite.JDBC");
Connection sqliteconn = DriverManager.getConnection("jdbc:sqlite:" + WarpSettings.dataDir.getAbsolutePath() + sqlitedb);
sqliteconn.setAutoCommit(false);
@@ -152,10 +152,10 @@ private static void createTable() {
Warp warp = new Warp(index, name, creator, world, x, y, z, yaw, pitch, publicAll, permissions, welcomeMessage);
addWarp(warp);
}
- WarpLogger.info("[MyWarp] Imported " + size + " warps from " + sqlitedb);
- WarpLogger.info("[MyWarp] Renaming " + sqlitedb + " to " + sqlitedb + ".old");
+ WarpLogger.info("Imported " + size + " warps from " + sqlitedb);
+ WarpLogger.info("Renaming " + sqlitedb + " to " + sqlitedb + ".old");
if (!sqlitefile.renameTo(new File(WarpSettings.dataDir.getAbsolutePath(), sqlitedb + ".old"))) {
- WarpLogger.warning("[MyWarp] Failed to rename " + sqlitedb + "! Please rename this manually!");
+ WarpLogger.warning("Failed to rename " + sqlitedb + "! Please rename this manually!");
}
if (slstatement != null) {
slstatement.close();
@@ -170,23 +170,22 @@ private static void createTable() {
}
}
} catch (SQLException e) {
- WarpLogger.severe("[MyWarp] Create Table Exception", e);
+ WarpLogger.severe("Create Table Exception", e);
} catch (ClassNotFoundException e) {
- WarpLogger.severe("[MyWarp] You need the SQLite library.", e);
+ WarpLogger.severe("You need the SQLite library.", e);
} finally {
try {
if (st != null) {
st.close();
}
} catch (SQLException e) {
- WarpLogger.severe("[MyWarp] Could not create the table (on close)");
+ WarpLogger.severe("Could not create the table (on close)");
}
}
}
public static void addWarp(Warp warp) {
PreparedStatement ps = null;
- Logger log = Logger.getLogger("Minecraft");
try {
Connection conn = ConnectionManager.getConnection();
@@ -207,14 +206,14 @@ public static void addWarp(Warp warp) {
ps.executeUpdate();
conn.commit();
} catch (SQLException ex) {
- WarpLogger.severe("[MYWARP]: Warp Insert Exception", ex);
+ WarpLogger.severe("Warp Insert Exception", ex);
} finally {
try {
if (ps != null) {
ps.close();
}
} catch (SQLException ex) {
- WarpLogger.severe("[MYWARP]: Warp Insert Exception (on close)", ex);
+ WarpLogger.severe("Warp Insert Exception (on close)", ex);
}
}
}
@@ -222,7 +221,6 @@ public static void addWarp(Warp warp) {
public static void deleteWarp(Warp warp) {
PreparedStatement ps = null;
ResultSet set = null;
- Logger log = Logger.getLogger("Minecraft");
try {
Connection conn = ConnectionManager.getConnection();
@@ -231,7 +229,7 @@ public static void deleteWarp(Warp warp) {
ps.executeUpdate();
conn.commit();
} catch (SQLException ex) {
- WarpLogger.severe("[MYWARP]: Warp Delete Exception", ex);
+ WarpLogger.severe("Warp Delete Exception", ex);
} finally {
try {
if (ps != null) {
@@ -241,7 +239,7 @@ public static void deleteWarp(Warp warp) {
set.close();
}
} catch (SQLException ex) {
- WarpLogger.severe("[MYWARP]: Warp Delete Exception (on close)", ex);
+ WarpLogger.severe("Warp Delete Exception (on close)", ex);
}
}
}
@@ -249,7 +247,6 @@ public static void deleteWarp(Warp warp) {
public static void publicizeWarp(Warp warp, boolean publicAll) {
PreparedStatement ps = null;
ResultSet set = null;
- Logger log = Logger.getLogger("Minecraft");
try {
Connection conn = ConnectionManager.getConnection();
@@ -259,7 +256,7 @@ public static void publicizeWarp(Warp warp, boolean publicAll) {
ps.executeUpdate();
conn.commit();
} catch (SQLException ex) {
- WarpLogger.severe("[MYWARP]: Warp Publicize Exception", ex);
+ WarpLogger.severe("Warp Publicize Exception", ex);
} finally {
try {
if (ps != null) {
@@ -269,7 +266,7 @@ public static void publicizeWarp(Warp warp, boolean publicAll) {
set.close();
}
} catch (SQLException ex) {
- WarpLogger.severe("[MYWARP]: Warp Publicize Exception (on close)", ex);
+ WarpLogger.severe("Warp Publicize Exception (on close)", ex);
}
}
}
@@ -277,7 +274,6 @@ public static void publicizeWarp(Warp warp, boolean publicAll) {
public static void updatePermissions(Warp warp) {
PreparedStatement ps = null;
ResultSet set = null;
- Logger log = Logger.getLogger("Minecraft");
try {
Connection conn = ConnectionManager.getConnection();
@@ -287,7 +283,7 @@ public static void updatePermissions(Warp warp) {
ps.executeUpdate();
conn.commit();
} catch (SQLException ex) {
- WarpLogger.severe("[MYWARP]: Warp Permissions Exception", ex);
+ WarpLogger.severe("Warp Permissions Exception", ex);
} finally {
try {
if (ps != null) {
@@ -297,7 +293,7 @@ public static void updatePermissions(Warp warp) {
set.close();
}
} catch (SQLException ex) {
- WarpLogger.severe("[MYWARP]: Warp Permissions Exception (on close)", ex);
+ WarpLogger.severe("Warp Permissions Exception (on close)", ex);
}
}
}
@@ -305,7 +301,6 @@ public static void updatePermissions(Warp warp) {
public static void updateCreator(Warp warp) {
PreparedStatement ps = null;
ResultSet set = null;
- Logger log = Logger.getLogger("Minecraft");
try {
Connection conn = ConnectionManager.getConnection();
@@ -316,7 +311,7 @@ public static void updateCreator(Warp warp) {
conn.commit();
} catch (SQLException ex) {
- WarpLogger.severe("[MYWARP]: Warp Creator Exception", ex);
+ WarpLogger.severe("Warp Creator Exception", ex);
} finally {
try {
if (ps != null) {
@@ -326,7 +321,7 @@ public static void updateCreator(Warp warp) {
set.close();
}
} catch (SQLException ex) {
- WarpLogger.severe("[MYWARP]: Warp Creator Exception (on close)", ex);
+ WarpLogger.severe("Warp Creator Exception (on close)", ex);
}
}
}
@@ -334,7 +329,6 @@ public static void updateCreator(Warp warp) {
public static void updateWelcomeMessage(Warp warp) {
PreparedStatement ps = null;
ResultSet set = null;
- Logger log = Logger.getLogger("Minecraft");
try {
Connection conn = ConnectionManager.getConnection();
@@ -345,7 +339,7 @@ public static void updateWelcomeMessage(Warp warp) {
conn.commit();
} catch (SQLException ex) {
- WarpLogger.severe("[MYWARP]: Warp Creator Exception", ex);
+ WarpLogger.severe("Warp Creator Exception", ex);
} finally {
try {
if (ps != null) {
@@ -355,7 +349,7 @@ public static void updateWelcomeMessage(Warp warp) {
set.close();
}
} catch (SQLException ex) {
- WarpLogger.severe("[MYWARP]: Warp Creator Exception (on close)", ex);
+ WarpLogger.severe("Warp Creator Exception (on close)", ex);
}
}
}
@@ -378,7 +372,7 @@ public static void updateDB(String test, String sqlite, String mysql) {
statement.executeQuery(test);
statement.close();
} catch(SQLException ex) {
- WarpLogger.info("[MYWARP]: Updating database");
+ WarpLogger.info("Updating database");
// Failed the test so we need to execute the updates
try {
String[] query;
@@ -396,7 +390,7 @@ public static void updateDB(String test, String sqlite, String mysql) {
conn.commit();
sqlst.close();
} catch (SQLException exc) {
- WarpLogger.severe("[MYWARP]: Failed to update the database to the new version - ", exc);
+ WarpLogger.severe("Failed to update the database to the new version - ", exc);
ex.printStackTrace();
}
}
@@ -405,7 +399,7 @@ public static void updateDB(String test, String sqlite, String mysql) {
public static void updateFieldType(String field, String type) {
try {
if (!WarpSettings.usemySQL) return;
- WarpLogger.info("[MYWARP]: Updating database");
+ WarpLogger.info("Updating database");
Connection conn = ConnectionManager.getConnection();
DatabaseMetaData meta = conn.getMetaData();
@@ -427,7 +421,7 @@ public static void updateFieldType(String field, String type) {
}
colRS.close();
} catch(SQLException ex) {
- WarpLogger.severe("[MYWARP]: Failed to update the database to the new version - ", ex);
+ WarpLogger.severe("Failed to update the database to the new version - ", ex);
ex.printStackTrace();
}
}
diff --git a/src/main/java/me/taylorkelly/mywarp/PropertiesFile.java b/src/main/java/me/taylorkelly/mywarp/utils/PropertiesFile.java
similarity index 89%
rename from src/main/java/me/taylorkelly/mywarp/PropertiesFile.java
rename to src/main/java/me/taylorkelly/mywarp/utils/PropertiesFile.java
index 70bd1c817d..641f87ec33 100644
--- a/src/main/java/me/taylorkelly/mywarp/PropertiesFile.java
+++ b/src/main/java/me/taylorkelly/mywarp/utils/PropertiesFile.java
@@ -1,4 +1,4 @@
-package me.taylorkelly.mywarp;
+package me.taylorkelly.mywarp.utils;
import java.io.*;
import java.util.*;
@@ -40,9 +40,9 @@ public PropertiesFile(File file) {
map.put(key, new PropertiesEntry(value, comment));
}
} catch (FileNotFoundException e) {
- Logger.getLogger("Minecraft").log(Level.SEVERE, "[MYWARP]: Cannot read file " + file.getName());
+ Logger.getLogger("Minecraft").log(Level.SEVERE, "Cannot read file " + file.getName());
} catch (IOException e) {
- Logger.getLogger("Minecraft").log(Level.SEVERE, "[MYWARP]: Cannot create file " + file.getName());
+ Logger.getLogger("Minecraft").log(Level.SEVERE, "Cannot create file " + file.getName());
}
}
@@ -71,7 +71,7 @@ public int getInt(String key, Integer defaultValue, String defaultComment) {
try {
return Integer.parseInt(map.get(key).value);
} catch (Exception e) {
- Logger.getLogger("Minecraft").log(Level.WARNING, "[MYWARP]: Trying to get Integer from " + key + ": " + map.get(key).value);
+ Logger.getLogger("Minecraft").log(Level.WARNING, "Trying to get Integer from " + key + ": " + map.get(key).value);
return 0;
}
} else {
@@ -86,7 +86,7 @@ public long getLong(String key, Long defaultValue, String defaultComment) {
try {
return Long.parseLong(map.get(key).value);
} catch (Exception e) {
- Logger.getLogger("Minecraft").log(Level.WARNING, "[MYWARP]: Trying to get Long from " + key + ": " + map.get(key).value);
+ Logger.getLogger("Minecraft").log(Level.WARNING, "Trying to get Long from " + key + ": " + map.get(key).value);
return 0;
}
} else {
@@ -101,7 +101,7 @@ public double getDouble(String key, Double defaultValue, String defaultComment)
try {
return Double.parseDouble(map.get(key).value);
} catch (Exception e) {
- Logger.getLogger("Minecraft").log(Level.WARNING, "[MYWARP]: Trying to get Double from " + key + ": " + map.get(key).value);
+ Logger.getLogger("Minecraft").log(Level.WARNING, "Trying to get Double from " + key + ": " + map.get(key).value);
return 0;
}
} else {
@@ -145,7 +145,7 @@ public void save() {
}
bwriter.flush();
} catch (IOException e) {
- Logger.getLogger("Minecraft").log(Level.SEVERE, "[MYWARP]: IO Exception with file " + file.getName());
+ Logger.getLogger("Minecraft").log(Level.SEVERE, "IO Exception with file " + file.getName());
} finally {
try {
if (bwriter != null) {
@@ -156,7 +156,7 @@ public void save() {
fwriter.close();
}
} catch (IOException e) {
- Logger.getLogger("Minecraft").log(Level.SEVERE, "[MYWARP]: IO Exception with file " + file.getName() + " (on close)");
+ Logger.getLogger("Minecraft").log(Level.SEVERE, "IO Exception with file " + file.getName() + " (on close)");
}
}
diff --git a/src/main/java/me/taylorkelly/mywarp/utils/WarpLogger.java b/src/main/java/me/taylorkelly/mywarp/utils/WarpLogger.java
new file mode 100644
index 0000000000..42ea934520
--- /dev/null
+++ b/src/main/java/me/taylorkelly/mywarp/utils/WarpLogger.java
@@ -0,0 +1,30 @@
+package me.taylorkelly.mywarp.utils;
+
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+public class WarpLogger {
+
+ private static String name = "MyWarp";
+ private static final Logger log = Logger.getLogger("Minecraft");
+
+ public static void severe(String string, Exception ex) {
+ log.log(Level.SEVERE, format(string), ex);
+ }
+
+ public static void severe(String string) {
+ log.severe(format(string));
+ }
+
+ public static void info(String string) {
+ log.info(format(string));
+ }
+
+ public static void warning(String string) {
+ log.warning(format(string));
+ }
+
+ public static String format(String msg) {
+ return String.format("[%s] %s", name, msg);
+ }
+}
diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml
new file mode 100644
index 0000000000..e7248b0ba5
--- /dev/null
+++ b/src/main/resources/config.yml
@@ -0,0 +1,32 @@
+#Enable OP permissions with SuperPerms
+opPermissions: true
+
+#Maximum number of warps any player can make
+maxTotal: 15
+
+#Maximum number of public warps any player can make
+maxPublic: 5
+
+#Maximum number of private warps any player can make
+maxPrivate: 10
+
+#MySQL Username (only if using MySQL)
+mySQLuname: root
+
+#MySQL usage -- true = use MySQL database / false = use SQLite
+usemySQL: false
+
+#Whether or not admins can see private warps in their list
+adminPrivateWarps: true
+
+#MySQL Connection (only if using MySQL)
+mySQLconn: jdbc:mysql://localhost:3306/minecraft
+
+#MySQL Password (only if using MySQL)
+mySQLpass: password
+
+#Force sending of the chunk which people teleport to - default: false
+loadChunks: false
+
+#Whether or not admins can disobey warp limits
+adminsObeyLimits: false
diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml
index 12f3f287d2..eafc9bf157 100644
--- a/src/main/resources/plugin.yml
+++ b/src/main/resources/plugin.yml
@@ -1,8 +1,98 @@
name: MyWarp
-version: 2.0
-author: flames
+version: 2.2
+author: spathizilla
+authors:
+ - tkelly
+ - flames
+softdepend:
+ - Vault
main: me.taylorkelly.mywarp.MyWarp
commands:
warp:
+ aliases: ['mywarp', 'mw']
description: All of the MyWarp commands
- usage: / help - Displays the help for MyWarp
\ No newline at end of file
+ usage: / help - Displays the help for MyWarp
+permissions:
+ mywarp.admin:
+ description: Admin
+ default: op
+ mywarp.warp.basic.warp:
+ description: Usage of /warp
+ default: op
+ mywarp.warp.basic.delete:
+ description: Can delete warps
+ default: op
+ mywarp.warp.basic.list:
+ description: Can list warps
+ default: op
+ mywarp.warp.basic.welcome:
+ description: Can change the welcome message
+ default: op
+ mywarp.warp.basic.search:
+ description: Can search for a warp
+ default: op
+ mywarp.warp.basic.createprivate:
+ description: Allowed to create private warps
+ default: op
+ mywarp.warp.basic.createpublic:
+ description: Allowed to create public warps
+ default: op
+ mywarp.warp.basic.compass:
+ description: Compass can be used
+ default: op
+ mywarp.warp.soc.give:
+ description: Can give to your /warp
+ default: op
+ mywarp.warp.soc.invite:
+ description: Can invite to your /warp
+ default: op
+ mywarp.warp.soc.uninvite:
+ description: Can uninvite people from your /warp
+ default: op
+ mywarp.warp.soc.public:
+ description: Allow anyone to use your /warp
+ default: op
+ mywarp.warp.soc.private:
+ description: Disallow anyone to use your /warp
+ default: op
+ mywarp.warp.sign.warp:
+ description: Can use sign warps
+ default: op
+ mywarp.warp.sign.create:
+ description: Can make sign warps
+ default: op
+ mywarp.warp.basic.*:
+ description: Basic /warp commands
+ children:
+ mywarp.warp.basic.warp: true
+ mywarp.warp.basic.delete: true
+ mywarp.warp.basic.list: true
+ mywarp.warp.basic.welcome: true
+ mywarp.warp.basic.search: true
+ mywarp.warp.basic.createprivate: true
+ mywarp.warp.basic.createpublic: true
+ mywarp.warp.basic.compass: true
+ mywarp.warp.soc.*:
+ description: Social /warp commands
+ children:
+ mywarp.warp.soc.give: true
+ mywarp.warp.soc.invite: true
+ mywarp.warp.soc.uninvite: true
+ mywarp.warp.soc.public: true
+ mywarp.warp.soc.private: true
+ mywarp.warp.sign.*:
+ description: All sign based warp permissions
+ children:
+ mywarp.warp.sign.warp: true
+ mywarp.warp.sign.create: true
+ mywarp.warp.*:
+ description: All user permissions
+ children:
+ mywarp.warp.soc.*: true
+ mywarp.warp.sign.*: true
+ mywarp.warp.basic.*: true
+ mywarp.*:
+ description: Full access
+ children:
+ mywarp.warp.*: true
+ mywarp.admin: true
diff --git a/target/MyWarp.jar b/target/MyWarp.jar
deleted file mode 100644
index 69750da0c1..0000000000
Binary files a/target/MyWarp.jar and /dev/null differ