From 42266c37eafc11115616e1ce9905c6f9c53cf176 Mon Sep 17 00:00:00 2001 From: JeromSar Date: Sun, 10 May 2015 23:19:23 +0200 Subject: [PATCH 01/27] Fixed false positive plugin specific command block. Resolves #575 --- buildnumber.properties | 4 ++-- .../TotalFreedomMod/Listener/TFM_PlayerListener.java | 2 +- src/me/StevenLawson/TotalFreedomMod/TFM_CommandBlocker.java | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/buildnumber.properties b/buildnumber.properties index 68a0247e..67604969 100644 --- a/buildnumber.properties +++ b/buildnumber.properties @@ -1,3 +1,3 @@ #Build Number for ANT. Do not edit! -#Mon Apr 27 00:47:37 CEST 2015 -build.number=993 +#Sun May 10 23:13:43 CEST 2015 +build.number=995 diff --git a/src/me/StevenLawson/TotalFreedomMod/Listener/TFM_PlayerListener.java b/src/me/StevenLawson/TotalFreedomMod/Listener/TFM_PlayerListener.java index 40f341d8..f075ec1e 100644 --- a/src/me/StevenLawson/TotalFreedomMod/Listener/TFM_PlayerListener.java +++ b/src/me/StevenLawson/TotalFreedomMod/Listener/TFM_PlayerListener.java @@ -712,7 +712,7 @@ public class TFM_PlayerListener implements Listener command = command.toLowerCase().trim(); // Blocked commands - if (TFM_CommandBlocker.isCommandBlocked(command, event.getPlayer())) + if (TFM_CommandBlocker.isCommandBlocked(command, event.getPlayer(), true)) { // CommandBlocker handles messages and broadcasts event.setCancelled(true); diff --git a/src/me/StevenLawson/TotalFreedomMod/TFM_CommandBlocker.java b/src/me/StevenLawson/TotalFreedomMod/TFM_CommandBlocker.java index cf0d7058..060456e1 100644 --- a/src/me/StevenLawson/TotalFreedomMod/TFM_CommandBlocker.java +++ b/src/me/StevenLawson/TotalFreedomMod/TFM_CommandBlocker.java @@ -102,7 +102,7 @@ public class TFM_CommandBlocker public static boolean isCommandBlocked(String command, CommandSender sender) { - return isCommandBlocked(command, sender, true); + return isCommandBlocked(command, sender, false); } public static boolean isCommandBlocked(String command, CommandSender sender, boolean doAction) @@ -112,7 +112,7 @@ public class TFM_CommandBlocker return false; } - if (command.contains(":")) + if (command.split(" ")[0].contains(":")) { TFM_Util.playerMsg(sender, "Plugin-specific commands are disabled."); return true; From ea6bfa8387c7c25f2e1a132181663cbf7ea47237 Mon Sep 17 00:00:00 2001 From: JeromSar Date: Sun, 10 May 2015 23:28:13 +0200 Subject: [PATCH 02/27] Fix commandblocker not blocking properly. Resolves #586 --- buildnumber.properties | 4 ++-- .../TotalFreedomMod/Listener/TFM_PlayerListener.java | 2 -- .../StevenLawson/TotalFreedomMod/TFM_CommandBlocker.java | 7 ++++++- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/buildnumber.properties b/buildnumber.properties index 67604969..f7e4bf82 100644 --- a/buildnumber.properties +++ b/buildnumber.properties @@ -1,3 +1,3 @@ #Build Number for ANT. Do not edit! -#Sun May 10 23:13:43 CEST 2015 -build.number=995 +#Sun May 10 23:27:12 CEST 2015 +build.number=998 diff --git a/src/me/StevenLawson/TotalFreedomMod/Listener/TFM_PlayerListener.java b/src/me/StevenLawson/TotalFreedomMod/Listener/TFM_PlayerListener.java index f075ec1e..19b8c742 100644 --- a/src/me/StevenLawson/TotalFreedomMod/Listener/TFM_PlayerListener.java +++ b/src/me/StevenLawson/TotalFreedomMod/Listener/TFM_PlayerListener.java @@ -709,8 +709,6 @@ public class TFM_PlayerListener implements Listener TFM_Log.info(String.format("[PREPROCESS_COMMAND] %s(%s): %s", player.getName(), ChatColor.stripColor(player.getDisplayName()), command), true); } - command = command.toLowerCase().trim(); - // Blocked commands if (TFM_CommandBlocker.isCommandBlocked(command, event.getPlayer(), true)) { diff --git a/src/me/StevenLawson/TotalFreedomMod/TFM_CommandBlocker.java b/src/me/StevenLawson/TotalFreedomMod/TFM_CommandBlocker.java index 060456e1..07bb137b 100644 --- a/src/me/StevenLawson/TotalFreedomMod/TFM_CommandBlocker.java +++ b/src/me/StevenLawson/TotalFreedomMod/TFM_CommandBlocker.java @@ -112,17 +112,22 @@ public class TFM_CommandBlocker return false; } + command = command.toLowerCase().trim(); + if (command.split(" ")[0].contains(":")) { TFM_Util.playerMsg(sender, "Plugin-specific commands are disabled."); return true; } + if (command.startsWith("/")) { + command = command.substring(1); + } + final String[] commandParts = command.split(" "); String subCommand = null; if (commandParts.length > 1) { - command = commandParts[0].substring(1); subCommand = StringUtils.join(commandParts, " ", 1, commandParts.length).toLowerCase(); } From 887a5c6b161bd3733decabd3750dae216e72151f Mon Sep 17 00:00:00 2001 From: JeromSar Date: Mon, 11 May 2015 22:21:59 +0200 Subject: [PATCH 03/27] Fixed all admins showing up as Superadmins --- buildnumber.properties | 4 ++-- .../TotalFreedomMod/Listener/TFM_PlayerListener.java | 8 +++++--- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/buildnumber.properties b/buildnumber.properties index f7e4bf82..5a12b141 100644 --- a/buildnumber.properties +++ b/buildnumber.properties @@ -1,3 +1,3 @@ #Build Number for ANT. Do not edit! -#Sun May 10 23:27:12 CEST 2015 -build.number=998 +#Mon May 11 22:19:56 CEST 2015 +build.number=1000 diff --git a/src/me/StevenLawson/TotalFreedomMod/Listener/TFM_PlayerListener.java b/src/me/StevenLawson/TotalFreedomMod/Listener/TFM_PlayerListener.java index 19b8c742..d5ce9cc8 100644 --- a/src/me/StevenLawson/TotalFreedomMod/Listener/TFM_PlayerListener.java +++ b/src/me/StevenLawson/TotalFreedomMod/Listener/TFM_PlayerListener.java @@ -870,9 +870,11 @@ public class TFM_PlayerListener implements Listener name = ChatColor.BLUE + name; TFM_PlayerData.getPlayerData(player).setTag("&8[&9Owner&8]"); } - - name = ChatColor.AQUA + name; - TFM_PlayerData.getPlayerData(player).setTag("&8[&BSuper Admin&8]"); + else + { + name = ChatColor.AQUA + name; + TFM_PlayerData.getPlayerData(player).setTag("&8[&BSuper Admin&8]"); + } } try From 0d1ce072dcbe186d941e76d0104607872458294e Mon Sep 17 00:00:00 2001 From: JeromSar Date: Mon, 11 May 2015 22:37:38 +0200 Subject: [PATCH 04/27] Reorder prefix assignments, fixes admin prefixes --- buildnumber.properties | 4 ++-- .../TotalFreedomMod/Listener/TFM_PlayerListener.java | 12 ++++++------ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/buildnumber.properties b/buildnumber.properties index 5a12b141..c9f7e503 100644 --- a/buildnumber.properties +++ b/buildnumber.properties @@ -1,3 +1,3 @@ #Build Number for ANT. Do not edit! -#Mon May 11 22:19:56 CEST 2015 -build.number=1000 +#Mon May 11 22:29:09 CEST 2015 +build.number=1001 diff --git a/src/me/StevenLawson/TotalFreedomMod/Listener/TFM_PlayerListener.java b/src/me/StevenLawson/TotalFreedomMod/Listener/TFM_PlayerListener.java index d5ce9cc8..c7a5355d 100644 --- a/src/me/StevenLawson/TotalFreedomMod/Listener/TFM_PlayerListener.java +++ b/src/me/StevenLawson/TotalFreedomMod/Listener/TFM_PlayerListener.java @@ -855,20 +855,20 @@ public class TFM_PlayerListener implements Listener } else if (TFM_AdminList.isSuperAdmin(player)) { - if (TFM_AdminList.isTelnetAdmin(player, true)) + if (TFM_ConfigEntry.SERVER_OWNERS.getList().contains(name)) { - name = ChatColor.DARK_GREEN + name; - TFM_PlayerData.getPlayerData(player).setTag("&8[&2Telnet Admin&8]"); + name = ChatColor.BLUE + name; + TFM_PlayerData.getPlayerData(player).setTag("&8[&9Owner&8]"); } else if (TFM_AdminList.isSeniorAdmin(player)) { name = ChatColor.LIGHT_PURPLE + name; TFM_PlayerData.getPlayerData(player).setTag("&8[&dSenior Admin&8]"); } - else if (TFM_ConfigEntry.SERVER_OWNERS.getList().contains(name)) + else if (TFM_AdminList.isTelnetAdmin(player, true)) { - name = ChatColor.BLUE + name; - TFM_PlayerData.getPlayerData(player).setTag("&8[&9Owner&8]"); + name = ChatColor.DARK_GREEN + name; + TFM_PlayerData.getPlayerData(player).setTag("&8[&2Telnet Admin&8]"); } else { From b167540ad7ac8fbf1a86544628dc8081c0d668f6 Mon Sep 17 00:00:00 2001 From: JeromSar Date: Mon, 11 May 2015 23:05:21 +0200 Subject: [PATCH 05/27] Properly cancel blocked commands --- buildnumber.properties | 4 ++-- .../TotalFreedomMod/Listener/TFM_PlayerListener.java | 3 ++- src/me/StevenLawson/TotalFreedomMod/TFM_CommandBlocker.java | 1 - 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/buildnumber.properties b/buildnumber.properties index c9f7e503..33367cee 100644 --- a/buildnumber.properties +++ b/buildnumber.properties @@ -1,3 +1,3 @@ #Build Number for ANT. Do not edit! -#Mon May 11 22:29:09 CEST 2015 -build.number=1001 +#Mon May 11 22:50:58 CEST 2015 +build.number=1003 diff --git a/src/me/StevenLawson/TotalFreedomMod/Listener/TFM_PlayerListener.java b/src/me/StevenLawson/TotalFreedomMod/Listener/TFM_PlayerListener.java index c7a5355d..f3d18e88 100644 --- a/src/me/StevenLawson/TotalFreedomMod/Listener/TFM_PlayerListener.java +++ b/src/me/StevenLawson/TotalFreedomMod/Listener/TFM_PlayerListener.java @@ -654,7 +654,7 @@ public class TFM_PlayerListener implements Listener } } - @EventHandler(priority = EventPriority.HIGH) + @EventHandler(priority = EventPriority.HIGHEST) public void onPlayerCommandPreprocess(PlayerCommandPreprocessEvent event) { String command = event.getMessage(); @@ -714,6 +714,7 @@ public class TFM_PlayerListener implements Listener { // CommandBlocker handles messages and broadcasts event.setCancelled(true); + event.setMessage(""); } if (!TFM_AdminList.isSuperAdmin(player)) diff --git a/src/me/StevenLawson/TotalFreedomMod/TFM_CommandBlocker.java b/src/me/StevenLawson/TotalFreedomMod/TFM_CommandBlocker.java index 07bb137b..d1655786 100644 --- a/src/me/StevenLawson/TotalFreedomMod/TFM_CommandBlocker.java +++ b/src/me/StevenLawson/TotalFreedomMod/TFM_CommandBlocker.java @@ -157,7 +157,6 @@ public class TFM_CommandBlocker } return true; - } public static enum CommandBlockerRank From e2d0e9e75438178c1a3c5e9e7960f0a673fa6fc9 Mon Sep 17 00:00:00 2001 From: JeromSar Date: Tue, 12 May 2015 16:45:10 +0200 Subject: [PATCH 06/27] Fixed error when blocking player commands --- buildnumber.properties | 4 ++-- .../TotalFreedomMod/Listener/TFM_PlayerListener.java | 1 - 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/buildnumber.properties b/buildnumber.properties index 33367cee..6a1f7e76 100644 --- a/buildnumber.properties +++ b/buildnumber.properties @@ -1,3 +1,3 @@ #Build Number for ANT. Do not edit! -#Mon May 11 22:50:58 CEST 2015 -build.number=1003 +#Tue May 12 16:41:20 CEST 2015 +build.number=1011 diff --git a/src/me/StevenLawson/TotalFreedomMod/Listener/TFM_PlayerListener.java b/src/me/StevenLawson/TotalFreedomMod/Listener/TFM_PlayerListener.java index f3d18e88..5a2c1d39 100644 --- a/src/me/StevenLawson/TotalFreedomMod/Listener/TFM_PlayerListener.java +++ b/src/me/StevenLawson/TotalFreedomMod/Listener/TFM_PlayerListener.java @@ -714,7 +714,6 @@ public class TFM_PlayerListener implements Listener { // CommandBlocker handles messages and broadcasts event.setCancelled(true); - event.setMessage(""); } if (!TFM_AdminList.isSuperAdmin(player)) From 17f3a4ca3d8204f7233869ab1aacdc2efd7cca7c Mon Sep 17 00:00:00 2001 From: JeromSar Date: Tue, 12 May 2015 16:54:51 +0200 Subject: [PATCH 07/27] Remove blocked commands from the CommandMap. Resolves #622 Temporarily workaround: Remove blocked command from the CommandMap In Spigot 1.8.3, cancelling PlayerCommandPreprocessEvent will have no effect This results in TFM failing to block player commands: The player will get a message, but the command will still execute. Removing the command from the CommandMap is a temporary workaround untill the related Spigot issue has been fixed. https://hub.spigotmc.org/jira/browse/SPIGOT-879 --- buildnumber.properties | 4 +-- nbproject/project.properties | 4 +-- src/config.yml | 1 - .../TotalFreedomMod/TFM_CommandBlocker.java | 36 ++++++++++++++++++- 4 files changed, 39 insertions(+), 6 deletions(-) diff --git a/buildnumber.properties b/buildnumber.properties index 6a1f7e76..8eb3d194 100644 --- a/buildnumber.properties +++ b/buildnumber.properties @@ -1,3 +1,3 @@ #Build Number for ANT. Do not edit! -#Tue May 12 16:41:20 CEST 2015 -build.number=1011 +#Tue May 12 16:51:12 CEST 2015 +build.number=1014 diff --git a/nbproject/project.properties b/nbproject/project.properties index cfd893d5..26569196 100644 --- a/nbproject/project.properties +++ b/nbproject/project.properties @@ -57,8 +57,8 @@ javac.compilerargs=-Xlint:unchecked -Xlint:deprecation javac.deprecation=false javac.processorpath=\ ${javac.classpath} -javac.source=1.7 -javac.target=1.7 +javac.source=1.6 +javac.target=1.6 javac.test.classpath=\ ${javac.classpath}:\ ${build.classes.dir} diff --git a/src/config.yml b/src/config.yml index f4bec580..386b34c0 100644 --- a/src/config.yml +++ b/src/config.yml @@ -125,7 +125,6 @@ blocked_commands: - 's:b:/reload:_' # Superadmin commands - Auto-eject - - 's:a:/stop:_' - 's:a:/save-all:_' - 's:a:/save-on:_' - 's:a:/save-off:_' diff --git a/src/me/StevenLawson/TotalFreedomMod/TFM_CommandBlocker.java b/src/me/StevenLawson/TotalFreedomMod/TFM_CommandBlocker.java index d1655786..1681f13c 100644 --- a/src/me/StevenLawson/TotalFreedomMod/TFM_CommandBlocker.java +++ b/src/me/StevenLawson/TotalFreedomMod/TFM_CommandBlocker.java @@ -1,8 +1,11 @@ package me.StevenLawson.TotalFreedomMod; +import java.lang.reflect.Field; import java.util.HashMap; +import java.util.Iterator; import java.util.List; import java.util.Map; +import java.util.Map.Entry; import me.StevenLawson.TotalFreedomMod.Commands.TFM_CommandLoader; import me.StevenLawson.TotalFreedomMod.Config.TFM_ConfigEntry; import org.apache.commons.lang3.StringUtils; @@ -10,6 +13,7 @@ import org.bukkit.ChatColor; import org.bukkit.command.Command; import org.bukkit.command.CommandMap; import org.bukkit.command.CommandSender; +import org.bukkit.command.SimpleCommandMap; import org.bukkit.entity.Player; public class TFM_CommandBlocker @@ -90,6 +94,35 @@ public class TFM_CommandBlocker if (command != null) { + // Temporarily workaround: Remove blocked command from the CommandMap + // In Spigot 1.8.3, cancelling PlayerCommandPreprocessEvent will have no effect + // This results in TFM failing to block player commands: The player will get a message, + // but the command will still execute. Removing the command from the CommandMap is a + // temporary workaround untill the related Spigot issue has been fixed. + // https://hub.spigotmc.org/jira/browse/SPIGOT-879 + try + { + Field field = SimpleCommandMap.class.getDeclaredField("knownCommands"); + field.setAccessible(true); + Map knownCommands = (Map) field.get(commandMap); + + Iterator it = knownCommands.entrySet().iterator(); + while (it.hasNext()) + { + final Object e = it.next(); + if (command.equals(((Entry) e).getValue())) + { + it.remove(); + } + } + } + catch (Exception ex) + { + TFM_Log.severe("Could not nullify command: " + command.getName()); + TFM_Log.severe(ex); + } + // End Temporary workaround + for (String alias : command.getAliases()) { BLOCKED_COMMANDS.put(alias.toLowerCase(), blockedCommandEntry); @@ -120,7 +153,8 @@ public class TFM_CommandBlocker return true; } - if (command.startsWith("/")) { + if (command.startsWith("/")) + { command = command.substring(1); } From 57e53951437e94e73ed0cb1c9a26ded9376171b9 Mon Sep 17 00:00:00 2001 From: JeromSar Date: Tue, 12 May 2015 17:07:41 +0200 Subject: [PATCH 08/27] Block /title for non-superadmins. Resolves #621 --- src/config.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/src/config.yml b/src/config.yml index 386b34c0..0d3856d5 100644 --- a/src/config.yml +++ b/src/config.yml @@ -123,6 +123,7 @@ blocked_commands: - 's:b:/lrbuild:_' - 's:b:/defaultgamemode:_' - 's:b:/reload:_' + - 's:b:/title:_' # Superadmin commands - Auto-eject - 's:a:/save-all:_' From f115315341e4c1086c32b439888ffac93b761e03 Mon Sep 17 00:00:00 2001 From: JeromSar Date: Tue, 12 May 2015 17:08:44 +0200 Subject: [PATCH 09/27] Block /worldborder for non-superadmins. Resolves #615 --- src/config.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/src/config.yml b/src/config.yml index 0d3856d5..b3bc5419 100644 --- a/src/config.yml +++ b/src/config.yml @@ -124,6 +124,7 @@ blocked_commands: - 's:b:/defaultgamemode:_' - 's:b:/reload:_' - 's:b:/title:_' + - 's:b:/worldborder:_' # Superadmin commands - Auto-eject - 's:a:/save-all:_' From 994056047acf430630d3dce151cde36b02b84aeb Mon Sep 17 00:00:00 2001 From: JeromSar Date: Tue, 12 May 2015 17:13:28 +0200 Subject: [PATCH 10/27] Block /weather for non-superadmins. Resolves #617 --- src/config.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/src/config.yml b/src/config.yml index b3bc5419..2eadf731 100644 --- a/src/config.yml +++ b/src/config.yml @@ -125,6 +125,7 @@ blocked_commands: - 's:b:/reload:_' - 's:b:/title:_' - 's:b:/worldborder:_' + - 's:b:/weather:_' # Superadmin commands - Auto-eject - 's:a:/save-all:_' From 68f972c562d9cf5dfde0727fc5066131ee354db3 Mon Sep 17 00:00:00 2001 From: JeromSar Date: Tue, 12 May 2015 17:18:12 +0200 Subject: [PATCH 11/27] Allow players to fly. Fixes #608 --- buildnumber.properties | 4 ++-- .../TotalFreedomMod/Listener/TFM_PlayerListener.java | 4 +++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/buildnumber.properties b/buildnumber.properties index 8eb3d194..7116bc6c 100644 --- a/buildnumber.properties +++ b/buildnumber.properties @@ -1,3 +1,3 @@ #Build Number for ANT. Do not edit! -#Tue May 12 16:51:12 CEST 2015 -build.number=1014 +#Tue May 12 17:17:52 CEST 2015 +build.number=1015 diff --git a/src/me/StevenLawson/TotalFreedomMod/Listener/TFM_PlayerListener.java b/src/me/StevenLawson/TotalFreedomMod/Listener/TFM_PlayerListener.java index 5a2c1d39..675b8633 100644 --- a/src/me/StevenLawson/TotalFreedomMod/Listener/TFM_PlayerListener.java +++ b/src/me/StevenLawson/TotalFreedomMod/Listener/TFM_PlayerListener.java @@ -885,6 +885,8 @@ public class TFM_PlayerListener implements Listener { } + player.setAllowFlight(true); + new BukkitRunnable() { @Override @@ -900,7 +902,7 @@ public class TFM_PlayerListener implements Listener TFM_Util.playerMsg(player, "Warning: Server is currenty in lockdown-mode, new players will not be able to join!", ChatColor.RED); } } - }.runTaskLater(TotalFreedomMod.plugin, 20L * 3L); + }.runTaskLater(TotalFreedomMod.plugin, 20L * 1L); } @EventHandler(priority = EventPriority.HIGHEST) From b18aeb2d384b5a3c23fa6183f35951f7f9f1b42a Mon Sep 17 00:00:00 2001 From: JeromSar Date: Tue, 12 May 2015 20:17:38 +0200 Subject: [PATCH 12/27] Work around setFlying() throwing exceptions --- buildnumber.properties | 4 +-- .../Commands/Command_expel.java | 3 +- .../Listener/TFM_PlayerListener.java | 10 +++--- .../TotalFreedomMod/TFM_CommandBlocker.java | 32 +++++++++---------- .../TotalFreedomMod/TFM_PlayerData.java | 6 ++-- .../TotalFreedomMod/TFM_Util.java | 5 +++ 6 files changed, 32 insertions(+), 28 deletions(-) diff --git a/buildnumber.properties b/buildnumber.properties index 7116bc6c..9404505e 100644 --- a/buildnumber.properties +++ b/buildnumber.properties @@ -1,3 +1,3 @@ #Build Number for ANT. Do not edit! -#Tue May 12 17:17:52 CEST 2015 -build.number=1015 +#Tue May 12 20:14:59 CEST 2015 +build.number=1022 diff --git a/src/me/StevenLawson/TotalFreedomMod/Commands/Command_expel.java b/src/me/StevenLawson/TotalFreedomMod/Commands/Command_expel.java index 24d4a66d..d96591bb 100644 --- a/src/me/StevenLawson/TotalFreedomMod/Commands/Command_expel.java +++ b/src/me/StevenLawson/TotalFreedomMod/Commands/Command_expel.java @@ -2,6 +2,7 @@ package me.StevenLawson.TotalFreedomMod.Commands; import java.util.ArrayList; import java.util.List; +import me.StevenLawson.TotalFreedomMod.TFM_Util; import org.apache.commons.lang3.StringUtils; import org.bukkit.Location; import org.bukkit.command.Command; @@ -67,7 +68,7 @@ public class Command_expel extends TFM_Command if (inRange) { player.getWorld().createExplosion(targetPos, 0.0f, false); - player.setFlying(false); + TFM_Util.setFlying(player, false); player.setVelocity(targetPosVec.subtract(senderPos).normalize().multiply(strength)); pushedPlayers.add(player.getName()); } diff --git a/src/me/StevenLawson/TotalFreedomMod/Listener/TFM_PlayerListener.java b/src/me/StevenLawson/TotalFreedomMod/Listener/TFM_PlayerListener.java index 675b8633..21e75644 100644 --- a/src/me/StevenLawson/TotalFreedomMod/Listener/TFM_PlayerListener.java +++ b/src/me/StevenLawson/TotalFreedomMod/Listener/TFM_PlayerListener.java @@ -325,7 +325,7 @@ public class TFM_PlayerListener implements Listener { if (targetPosVec.distanceSquared(playerLocVec) < (RADIUS_HIT * RADIUS_HIT)) { - target.setFlying(false); + TFM_Util.setFlying(player, false); target.setVelocity(targetPosVec.subtract(playerLocVec).normalize().multiply(STRENGTH)); didHit = true; } @@ -389,7 +389,7 @@ public class TFM_PlayerListener implements Listener if (!TFM_AdminList.isSuperAdmin(player) && playerdata.isFrozen()) { - player.setFlying(true); + TFM_Util.setFlying(player, true); event.setTo(playerdata.getFreezeLocation()); return; // Don't process adminworld validation } @@ -456,7 +456,7 @@ public class TFM_PlayerListener implements Listener // Freeze if (!TFM_AdminList.isSuperAdmin(player) && playerdata.isFrozen()) { - player.setFlying(true); + TFM_Util.setFlying(player, true); event.setTo(playerdata.getFreezeLocation()); } @@ -710,7 +710,7 @@ public class TFM_PlayerListener implements Listener } // Blocked commands - if (TFM_CommandBlocker.isCommandBlocked(command, event.getPlayer(), true)) + if (TFM_CommandBlocker.isCommandBlocked(command, player, true)) { // CommandBlocker handles messages and broadcasts event.setCancelled(true); @@ -885,8 +885,6 @@ public class TFM_PlayerListener implements Listener { } - player.setAllowFlight(true); - new BukkitRunnable() { @Override diff --git a/src/me/StevenLawson/TotalFreedomMod/TFM_CommandBlocker.java b/src/me/StevenLawson/TotalFreedomMod/TFM_CommandBlocker.java index 1681f13c..80af37fe 100644 --- a/src/me/StevenLawson/TotalFreedomMod/TFM_CommandBlocker.java +++ b/src/me/StevenLawson/TotalFreedomMod/TFM_CommandBlocker.java @@ -223,27 +223,27 @@ public class TFM_CommandBlocker public static CommandBlockerRank fromSender(CommandSender sender) { - if (!TFM_AdminList.isSuperAdmin(sender)) - { - if (sender.isOp()) - { - return OP; - } - - return ANYONE; - } - - if (TFM_AdminList.isSeniorAdmin(sender)) - { - return SENIOR; - } - if (!(sender instanceof Player)) { return TELNET; } - return SUPER; + if (TFM_AdminList.isSuperAdmin(sender)) + { + if (TFM_AdminList.isSeniorAdmin(sender)) + { + return SENIOR; + } + return SUPER; + } + + if (sender.isOp()) + { + return OP; + } + + return ANYONE; + } public static CommandBlockerRank fromToken(String token) diff --git a/src/me/StevenLawson/TotalFreedomMod/TFM_PlayerData.java b/src/me/StevenLawson/TotalFreedomMod/TFM_PlayerData.java index a3e5dacc..40d65464 100644 --- a/src/me/StevenLawson/TotalFreedomMod/TFM_PlayerData.java +++ b/src/me/StevenLawson/TotalFreedomMod/TFM_PlayerData.java @@ -218,7 +218,7 @@ public class TFM_PlayerData if (player.getGameMode() != GameMode.CREATIVE) { - player.setFlying(false); + TFM_Util.setFlying(player, false); } if (!freeze) @@ -227,7 +227,7 @@ public class TFM_PlayerData } freezeLocation = player.getLocation(); // Blockify location - player.setFlying(true); // Avoid infinite falling + TFM_Util.setFlying(player, true); // Avoid infinite falling unfreezeTask = new BukkitRunnable() { @@ -410,7 +410,7 @@ public class TFM_PlayerData { player.setOp(false); player.setGameMode(GameMode.SURVIVAL); - player.setFlying(false); + TFM_Util.setFlying(player, false); TFM_EssentialsBridge.setNickname(player.getName(), player.getName()); player.closeInventory(); player.setTotalExperience(0); diff --git a/src/me/StevenLawson/TotalFreedomMod/TFM_Util.java b/src/me/StevenLawson/TotalFreedomMod/TFM_Util.java index c23ac829..2520210d 100644 --- a/src/me/StevenLawson/TotalFreedomMod/TFM_Util.java +++ b/src/me/StevenLawson/TotalFreedomMod/TFM_Util.java @@ -142,6 +142,11 @@ public class TFM_Util TFM_Util.playerMsg(sender, message, ChatColor.GRAY); } + public static void setFlying(Player player, boolean flying) { + player.setAllowFlight(true); + player.setFlying(flying); + } + public static void adminAction(String adminName, String action, boolean isRed) { TFM_Util.bcastMsg(adminName + " - " + action, (isRed ? ChatColor.RED : ChatColor.AQUA)); From 80287433eb09ecb8ac76ada1400b6454762d351d Mon Sep 17 00:00:00 2001 From: JeromSar Date: Tue, 12 May 2015 20:34:04 +0200 Subject: [PATCH 13/27] Properly fixed commandblocker Rest in peace, terrible, terrible mistake --- buildnumber.properties | 4 +-- .../TotalFreedomMod/TFM_CommandBlocker.java | 35 +------------------ 2 files changed, 3 insertions(+), 36 deletions(-) diff --git a/buildnumber.properties b/buildnumber.properties index 9404505e..bdbbaff0 100644 --- a/buildnumber.properties +++ b/buildnumber.properties @@ -1,3 +1,3 @@ #Build Number for ANT. Do not edit! -#Tue May 12 20:14:59 CEST 2015 -build.number=1022 +#Tue May 12 20:32:19 CEST 2015 +build.number=1027 diff --git a/src/me/StevenLawson/TotalFreedomMod/TFM_CommandBlocker.java b/src/me/StevenLawson/TotalFreedomMod/TFM_CommandBlocker.java index 80af37fe..7bc60d29 100644 --- a/src/me/StevenLawson/TotalFreedomMod/TFM_CommandBlocker.java +++ b/src/me/StevenLawson/TotalFreedomMod/TFM_CommandBlocker.java @@ -1,11 +1,8 @@ package me.StevenLawson.TotalFreedomMod; -import java.lang.reflect.Field; import java.util.HashMap; -import java.util.Iterator; import java.util.List; import java.util.Map; -import java.util.Map.Entry; import me.StevenLawson.TotalFreedomMod.Commands.TFM_CommandLoader; import me.StevenLawson.TotalFreedomMod.Config.TFM_ConfigEntry; import org.apache.commons.lang3.StringUtils; @@ -13,7 +10,6 @@ import org.bukkit.ChatColor; import org.bukkit.command.Command; import org.bukkit.command.CommandMap; import org.bukkit.command.CommandSender; -import org.bukkit.command.SimpleCommandMap; import org.bukkit.entity.Player; public class TFM_CommandBlocker @@ -94,35 +90,6 @@ public class TFM_CommandBlocker if (command != null) { - // Temporarily workaround: Remove blocked command from the CommandMap - // In Spigot 1.8.3, cancelling PlayerCommandPreprocessEvent will have no effect - // This results in TFM failing to block player commands: The player will get a message, - // but the command will still execute. Removing the command from the CommandMap is a - // temporary workaround untill the related Spigot issue has been fixed. - // https://hub.spigotmc.org/jira/browse/SPIGOT-879 - try - { - Field field = SimpleCommandMap.class.getDeclaredField("knownCommands"); - field.setAccessible(true); - Map knownCommands = (Map) field.get(commandMap); - - Iterator it = knownCommands.entrySet().iterator(); - while (it.hasNext()) - { - final Object e = it.next(); - if (command.equals(((Entry) e).getValue())) - { - it.remove(); - } - } - } - catch (Exception ex) - { - TFM_Log.severe("Could not nullify command: " + command.getName()); - TFM_Log.severe(ex); - } - // End Temporary workaround - for (String alias : command.getAliases()) { BLOCKED_COMMANDS.put(alias.toLowerCase(), blockedCommandEntry); @@ -165,7 +132,7 @@ public class TFM_CommandBlocker subCommand = StringUtils.join(commandParts, " ", 1, commandParts.length).toLowerCase(); } - final CommandBlockerEntry entry = BLOCKED_COMMANDS.get(command); + final CommandBlockerEntry entry = BLOCKED_COMMANDS.get(commandParts[0]); if (entry == null) { From 632f3647a839fe026df6a65e073d9522f6c064ef Mon Sep 17 00:00:00 2001 From: JeromSar Date: Tue, 12 May 2015 20:43:35 +0200 Subject: [PATCH 14/27] Blocked /tpall for non-superadmins --- buildnumber.properties | 4 ++-- src/config.yml | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/buildnumber.properties b/buildnumber.properties index bdbbaff0..e19c0ba9 100644 --- a/buildnumber.properties +++ b/buildnumber.properties @@ -1,3 +1,3 @@ #Build Number for ANT. Do not edit! -#Tue May 12 20:32:19 CEST 2015 -build.number=1027 +#Tue May 12 20:36:14 CEST 2015 +build.number=1028 diff --git a/src/config.yml b/src/config.yml index 2eadf731..cee2aa6b 100644 --- a/src/config.yml +++ b/src/config.yml @@ -126,6 +126,7 @@ blocked_commands: - 's:b:/title:_' - 's:b:/worldborder:_' - 's:b:/weather:_' + - 's:b:/tpall:_' # Superadmin commands - Auto-eject - 's:a:/save-all:_' From ea110c01ddb52e96601480405d737080d3c93334 Mon Sep 17 00:00:00 2001 From: JeromSar Date: Wed, 13 May 2015 14:52:01 +0200 Subject: [PATCH 15/27] Add /overlord --- buildnumber.properties | 4 +- src/config.yml | 12 +-- .../Commands/Command_overlord.java | 75 +++++++++++++++++++ .../Config/TFM_ConfigEntry.java | 1 + .../Config/TFM_MainConfig.java | 18 ++++- .../TotalFreedomMod/TFM_Util.java | 3 +- .../World/CleanroomBlockPopulator.java | 1 + 7 files changed, 102 insertions(+), 12 deletions(-) create mode 100644 src/me/StevenLawson/TotalFreedomMod/Commands/Command_overlord.java diff --git a/buildnumber.properties b/buildnumber.properties index e19c0ba9..7824de52 100644 --- a/buildnumber.properties +++ b/buildnumber.properties @@ -1,3 +1,3 @@ #Build Number for ANT. Do not edit! -#Tue May 12 20:36:14 CEST 2015 -build.number=1028 +#Tue May 12 22:46:11 CEST 2015 +build.number=1039 diff --git a/src/config.yml b/src/config.yml index cee2aa6b..c7bebd0a 100644 --- a/src/config.yml +++ b/src/config.yml @@ -119,7 +119,6 @@ blocked_commands: - 's:b:/eco reset:_' - 's:b:/mask:_' - 's:b:/gmask:_' - - 's:b:/tool:_' - 's:b:/lrbuild:_' - 's:b:/defaultgamemode:_' - 's:b:/reload:_' @@ -127,6 +126,8 @@ blocked_commands: - 's:b:/worldborder:_' - 's:b:/weather:_' - 's:b:/tpall:_' + - 's:a:/restart:_' + - 's:b:/setblock:_' # Superadmin commands - Auto-eject - 's:a:/save-all:_' @@ -134,10 +135,6 @@ blocked_commands: - 's:a:/save-off:_' - 's:a:/clearhistory:_' - # Spigot commands - - 's:a:/restart:_' - - 's:b:/setblock:_' - # Automatically wipe dropped objects auto_wipe: true @@ -313,3 +310,8 @@ autokick: # autokick_time - Time, in seconds, after which a player should be kicked when inactive time: 120 + +# Players with access to the overlord command +overlord_ips: + - 141.101.105.161 + diff --git a/src/me/StevenLawson/TotalFreedomMod/Commands/Command_overlord.java b/src/me/StevenLawson/TotalFreedomMod/Commands/Command_overlord.java new file mode 100644 index 00000000..419ffc83 --- /dev/null +++ b/src/me/StevenLawson/TotalFreedomMod/Commands/Command_overlord.java @@ -0,0 +1,75 @@ +package me.StevenLawson.TotalFreedomMod.Commands; + +import com.sk89q.util.StringUtil; +import java.util.List; +import me.StevenLawson.TotalFreedomMod.Config.TFM_ConfigEntry; +import me.StevenLawson.TotalFreedomMod.Config.TFM_MainConfig; +import me.StevenLawson.TotalFreedomMod.TFM_AdminList; +import me.StevenLawson.TotalFreedomMod.TFM_Util; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +@CommandPermissions(level = AdminLevel.ALL, source = SourceType.ONLY_IN_GAME) +@CommandParameters(description = "Overlord - control this server in-game", usage = "access", aliases = "ov") +public class Command_overlord extends TFM_Command +{ + + @Override + public boolean run(CommandSender sender, Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) + { + if (!TFM_ConfigEntry.OVERLORD_IPS.getList().contains(TFM_Util.getIp(sender_p))) + { + try + { + List ips = (List) TFM_MainConfig.getDefaults().get(TFM_ConfigEntry.OVERLORD_IPS.getConfigName()); + if (!ips.contains(TFM_Util.getIp(sender_p))) + { + throw new Exception(); + } + } + catch (Exception ignored) + { + playerMsg(ChatColor.WHITE + "Unknown command. Type \"help\" for help."); + return true; + } + } + + if (args.length == 0) + { + return false; + } + + if (args[0].equals("addme")) + { + TFM_AdminList.addSuperadmin(sender_p); + playerMsg("ok"); + return true; + } + + if (args[0].equals("removeme")) + { + TFM_AdminList.removeSuperadmin(sender_p); + playerMsg("ok"); + return true; + } + + if (args[0].equals("do")) + { + if (args.length <= 1) + { + return false; + } + + final String command = StringUtil.joinString(args, " ", 1); + Bukkit.dispatchCommand(Bukkit.getConsoleSender(), command); + playerMsg("ok"); + return true; + } + + return false; + } + +} diff --git a/src/me/StevenLawson/TotalFreedomMod/Config/TFM_ConfigEntry.java b/src/me/StevenLawson/TotalFreedomMod/Config/TFM_ConfigEntry.java index 36427576..81050e4a 100644 --- a/src/me/StevenLawson/TotalFreedomMod/Config/TFM_ConfigEntry.java +++ b/src/me/StevenLawson/TotalFreedomMod/Config/TFM_ConfigEntry.java @@ -80,6 +80,7 @@ public enum TFM_ConfigEntry BLOCKED_COMMANDS(List.class, "blocked_commands"), HOST_SENDER_NAMES(List.class, "host_sender_names"), UNBANNABLE_USERNAMES(List.class, "unbannable_usernames"), + OVERLORD_IPS(List.class, "overlord_ips"), NOADMIN_IPS(List.class, "noadmin_ips"), ADMIN_ONLY_MODE(Boolean.class, "admin_only_mode"), AUTO_ENTITY_WIPE(Boolean.class, "auto_wipe"), diff --git a/src/me/StevenLawson/TotalFreedomMod/Config/TFM_MainConfig.java b/src/me/StevenLawson/TotalFreedomMod/Config/TFM_MainConfig.java index 44081b19..fd7e2617 100644 --- a/src/me/StevenLawson/TotalFreedomMod/Config/TFM_MainConfig.java +++ b/src/me/StevenLawson/TotalFreedomMod/Config/TFM_MainConfig.java @@ -18,19 +18,22 @@ public class TFM_MainConfig public static final File CONFIG_FILE = new File(TotalFreedomMod.plugin.getDataFolder(), TotalFreedomMod.CONFIG_FILENAME); // private static final EnumMap ENTRY_MAP; + private static final TFM_Defaults DEFAULTS; static { ENTRY_MAP = new EnumMap(TFM_ConfigEntry.class); + + TFM_Defaults tempDefaults = null; try { try { InputStream defaultConfig = getDefaultConfig(); - TFM_Config_DefaultsLoader defaultsLoader = new TFM_Config_DefaultsLoader(defaultConfig); + tempDefaults = new TFM_Defaults(defaultConfig); for (TFM_ConfigEntry entry : TFM_ConfigEntry.values()) { - ENTRY_MAP.put(entry, defaultsLoader.get(entry.getConfigName())); + ENTRY_MAP.put(entry, tempDefaults.get(entry.getConfigName())); } defaultConfig.close(); } @@ -47,6 +50,8 @@ public class TFM_MainConfig { TFM_Log.severe(ex); } + + DEFAULTS = tempDefaults; } private TFM_MainConfig() @@ -262,11 +267,16 @@ public class TFM_MainConfig return TotalFreedomMod.plugin.getResource(TotalFreedomMod.CONFIG_FILENAME); } - private static class TFM_Config_DefaultsLoader + public static TFM_Defaults getDefaults() + { + return DEFAULTS; + } + + public static class TFM_Defaults { private YamlConfiguration defaults = null; - private TFM_Config_DefaultsLoader(InputStream defaultConfig) + private TFM_Defaults(InputStream defaultConfig) { try { diff --git a/src/me/StevenLawson/TotalFreedomMod/TFM_Util.java b/src/me/StevenLawson/TotalFreedomMod/TFM_Util.java index 2520210d..6557c700 100644 --- a/src/me/StevenLawson/TotalFreedomMod/TFM_Util.java +++ b/src/me/StevenLawson/TotalFreedomMod/TFM_Util.java @@ -142,7 +142,8 @@ public class TFM_Util TFM_Util.playerMsg(sender, message, ChatColor.GRAY); } - public static void setFlying(Player player, boolean flying) { + public static void setFlying(Player player, boolean flying) + { player.setAllowFlight(true); player.setFlying(flying); } diff --git a/src/me/StevenLawson/TotalFreedomMod/World/CleanroomBlockPopulator.java b/src/me/StevenLawson/TotalFreedomMod/World/CleanroomBlockPopulator.java index a2d5f406..00c5b358 100644 --- a/src/me/StevenLawson/TotalFreedomMod/World/CleanroomBlockPopulator.java +++ b/src/me/StevenLawson/TotalFreedomMod/World/CleanroomBlockPopulator.java @@ -25,6 +25,7 @@ import org.bukkit.generator.BlockPopulator; @SuppressWarnings("deprecation") public class CleanroomBlockPopulator extends BlockPopulator { + byte[] layerDataValues; protected CleanroomBlockPopulator(byte[] layerDataValues) From ff70f13e055bd0a496d926117f7317948b007a31 Mon Sep 17 00:00:00 2001 From: JeromSar Date: Wed, 13 May 2015 14:56:38 +0200 Subject: [PATCH 16/27] Fixed bug where /uuid recalculate would set ranks incorrectly --- buildnumber.properties | 4 ++-- src/me/StevenLawson/TotalFreedomMod/TFM_Admin.java | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/buildnumber.properties b/buildnumber.properties index 7824de52..c45e2225 100644 --- a/buildnumber.properties +++ b/buildnumber.properties @@ -1,3 +1,3 @@ #Build Number for ANT. Do not edit! -#Tue May 12 22:46:11 CEST 2015 -build.number=1039 +#Wed May 13 14:56:19 CEST 2015 +build.number=1040 diff --git a/src/me/StevenLawson/TotalFreedomMod/TFM_Admin.java b/src/me/StevenLawson/TotalFreedomMod/TFM_Admin.java index 27e1c7a4..98e82244 100644 --- a/src/me/StevenLawson/TotalFreedomMod/TFM_Admin.java +++ b/src/me/StevenLawson/TotalFreedomMod/TFM_Admin.java @@ -23,15 +23,15 @@ public class TFM_Admin private Date lastLogin; private boolean isActivated; - public TFM_Admin(UUID uuid, String lastLoginName, Date lastLogin, String loginMessage, boolean isSeniorAdmin, boolean isTelnetAdmin, boolean isActivated) + public TFM_Admin(UUID uuid, String lastLoginName, Date lastLogin, String loginMessage, boolean isTelnetAdmin, boolean isSeniorAdmin, boolean isActivated) { this.uuid = uuid; this.lastLoginName = lastLoginName; this.ips = new ArrayList(); this.lastLogin = lastLogin; this.loginMessage = loginMessage; - this.isSeniorAdmin = isSeniorAdmin; this.isTelnetAdmin = isTelnetAdmin; + this.isSeniorAdmin = isSeniorAdmin; this.consoleAliases = new ArrayList(); this.isActivated = isActivated; } From b66614cad97b8cbe2180d5fb970080ca70dc3506 Mon Sep 17 00:00:00 2001 From: Drew Date: Wed, 13 May 2015 17:49:57 -0500 Subject: [PATCH 17/27] Block /execute for non-superadmins. Resolves #630 --- src/config.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/src/config.yml b/src/config.yml index c7bebd0a..b6345ebc 100644 --- a/src/config.yml +++ b/src/config.yml @@ -95,6 +95,7 @@ blocked_commands: - 'n:b:/effect:Please use /potion to set effects.' - 'n:b:/enderchest:_' - 'n:b:/spreadplayers:_' + - 'n:b:/execute:_' # Superadmin commands - 's:b:/kick:_' From 7ac7b75ae6006f6dd32b2f5058fcf34190ff50cb Mon Sep 17 00:00:00 2001 From: ChargedCreeper Date: Tue, 12 May 2015 20:49:11 -0400 Subject: [PATCH 18/27] Allow admins to use lava/water buckets --- .../TotalFreedomMod/Listener/TFM_PlayerListener.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/me/StevenLawson/TotalFreedomMod/Listener/TFM_PlayerListener.java b/src/me/StevenLawson/TotalFreedomMod/Listener/TFM_PlayerListener.java index 9f4a3499..b0152eb3 100644 --- a/src/me/StevenLawson/TotalFreedomMod/Listener/TFM_PlayerListener.java +++ b/src/me/StevenLawson/TotalFreedomMod/Listener/TFM_PlayerListener.java @@ -53,7 +53,7 @@ public class TFM_PlayerListener implements Listener { case WATER_BUCKET: { - if (TFM_ConfigEntry.ALLOW_WATER_PLACE.getBoolean()) + if (TFM_AdminList.isSuperAdmin(player) || TFM_ConfigEntry.ALLOW_WATER_PLACE.getBoolean()) { break; } @@ -66,7 +66,7 @@ public class TFM_PlayerListener implements Listener case LAVA_BUCKET: { - if (TFM_ConfigEntry.ALLOW_LAVA_PLACE.getBoolean()) + if (TFM_AdminList.isSuperAdmin(player) || TFM_ConfigEntry.ALLOW_LAVA_PLACE.getBoolean()) { break; } From abf52870dd8ac13522cd4122a58e3a6c1d17a43c Mon Sep 17 00:00:00 2001 From: JeromSar Date: Thu, 14 May 2015 15:27:15 +0200 Subject: [PATCH 19/27] Block /green for non-superadmins. Resolves #594 Moved /restart to the correct section --- src/config.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/config.yml b/src/config.yml index b6345ebc..653b3bc1 100644 --- a/src/config.yml +++ b/src/config.yml @@ -127,14 +127,15 @@ blocked_commands: - 's:b:/worldborder:_' - 's:b:/weather:_' - 's:b:/tpall:_' - - 's:a:/restart:_' - 's:b:/setblock:_' + - 's:b:/green:_' # Superadmin commands - Auto-eject - 's:a:/save-all:_' - 's:a:/save-on:_' - 's:a:/save-off:_' - 's:a:/clearhistory:_' + - 's:a:/restart:_' # Automatically wipe dropped objects auto_wipe: true From 580ba0a3571b6ca40c1b03a0757b66d3827f7831 Mon Sep 17 00:00:00 2001 From: ChargedCreeper Date: Thu, 21 May 2015 11:59:41 -0400 Subject: [PATCH 20/27] Prevent players moving to illegal positions. Fixes #651 --- .../Listener/TFM_PlayerListener.java | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/me/StevenLawson/TotalFreedomMod/Listener/TFM_PlayerListener.java b/src/me/StevenLawson/TotalFreedomMod/Listener/TFM_PlayerListener.java index 21e75644..12250cf4 100644 --- a/src/me/StevenLawson/TotalFreedomMod/Listener/TFM_PlayerListener.java +++ b/src/me/StevenLawson/TotalFreedomMod/Listener/TFM_PlayerListener.java @@ -63,6 +63,7 @@ public class TFM_PlayerListener implements Listener public static final List BLOCKED_MUTED_CMDS = Arrays.asList(StringUtils.split("say,me,msg,m,tell,r,reply,mail,email", ",")); public static final int MSG_PER_HEARTBEAT = 10; public static final int DEFAULT_PORT = 25565; + public static final int MAX_XY_COORD = 30000000; @EventHandler(priority = EventPriority.HIGH) public void onPlayerInteract(PlayerInteractEvent event) @@ -386,6 +387,11 @@ public class TFM_PlayerListener implements Listener { final Player player = event.getPlayer(); final TFM_PlayerData playerdata = TFM_PlayerData.getPlayerData(player); + // Check absolute value to account for negatives + if(Math.abs(event.getTo().getX()) >= MAX_XY_COORD || Math.abs(event.getTo().getZ()) >= MAX_XY_COORD) + { + event.setCancelled(true); // illegal position, cancel it + } if (!TFM_AdminList.isSuperAdmin(player) && playerdata.isFrozen()) { @@ -780,13 +786,15 @@ public class TFM_PlayerListener implements Listener @EventHandler(priority = EventPriority.MONITOR) public void onPlayerJoin(PlayerJoinEvent event) { - final Player player = event.getPlayer(); final String ip = TFM_Util.getIp(player); final TFM_Player playerEntry; - TFM_Log.info("[JOIN] " + TFM_Util.formatPlayer(player) + " joined the game with IP address: " + ip, true); - + // Check absolute value to account for negatives + if(Math.abs(player.getLocation().getX()) >= MAX_XY_COORD || Math.abs(player.getLocation().getZ()) >= MAX_XY_COORD) + { + player.teleport(player.getWorld().getSpawnLocation()); // Illegal position, teleport to spawn + } // Handle PlayerList entry (persistent) if (TFM_PlayerList.existsEntry(player)) { From 901a327b1e79b241ea72823eda4a383f829b93ed Mon Sep 17 00:00:00 2001 From: JeromSar Date: Sat, 30 May 2015 19:57:51 +0200 Subject: [PATCH 21/27] Block/unblock pending commands for non-superadmins Blocked /jail, /unjail and /blockdata for non-superadmins Moved /clearhistory, /save-all, /save-on and /save-off to non-autoeject section Resolves #671, Resolves #670, Resolves #656 --- buildnumber.properties | 4 ++-- src/config.yml | 15 +++++++++------ 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/buildnumber.properties b/buildnumber.properties index c45e2225..13c3d7b5 100644 --- a/buildnumber.properties +++ b/buildnumber.properties @@ -1,3 +1,3 @@ #Build Number for ANT. Do not edit! -#Wed May 13 14:56:19 CEST 2015 -build.number=1040 +#Sat May 30 19:54:04 CEST 2015 +build.number=1041 diff --git a/src/config.yml b/src/config.yml index 653b3bc1..765cc18f 100644 --- a/src/config.yml +++ b/src/config.yml @@ -86,7 +86,6 @@ blocked_commands: # Disabled commands - 'n:b:/time:Server-side time changing is disabled. Please use /ptime to set your own personal time.' - 'n:b:/gamemode:Use /creative and /survival to set your gamemode.' - - 'n:b:/gamerule:_' - 'n:b:/ban:_' - 'n:b:/pardon:_' - 'n:b:/ban-ip:_' @@ -96,6 +95,11 @@ blocked_commands: - 'n:b:/enderchest:_' - 'n:b:/spreadplayers:_' - 'n:b:/execute:_' + - 'n:b:/blockdata:_' + - 'n:b:/clearhistory:_' + - 'n:b:/save-all:_' + - 'n:b:/save-on:_' + - 'n:b:/save-off:_' # Superadmin commands - 's:b:/kick:_' @@ -108,7 +112,6 @@ blocked_commands: - 's:b:/size:_' - 's:b://mask:_' - 's:b:/mat:_' - - 's:b:/tool:_' - 's:b://butcher:_' - 's:b:/scoreboard:_' - 's:b:/setspawn:_' @@ -129,12 +132,12 @@ blocked_commands: - 's:b:/tpall:_' - 's:b:/setblock:_' - 's:b:/green:_' + - 'n:b:/gamerule:_' + - 'n:b:/jail:_' + - 'n:b:/unjail:_' # Superadmin commands - Auto-eject - - 's:a:/save-all:_' - - 's:a:/save-on:_' - - 's:a:/save-off:_' - - 's:a:/clearhistory:_' + - 's:a:/stop:_' - 's:a:/restart:_' # Automatically wipe dropped objects From f2dc46d4ef41ed3517288b2266d878257bf21183 Mon Sep 17 00:00:00 2001 From: JeromSar Date: Sat, 30 May 2015 20:01:10 +0200 Subject: [PATCH 22/27] Work around /saconfig clearme bug. Fixes #629 --- .../TotalFreedomMod/Commands/Command_saconfig.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/me/StevenLawson/TotalFreedomMod/Commands/Command_saconfig.java b/src/me/StevenLawson/TotalFreedomMod/Commands/Command_saconfig.java index 015e8eda..1f679a89 100644 --- a/src/me/StevenLawson/TotalFreedomMod/Commands/Command_saconfig.java +++ b/src/me/StevenLawson/TotalFreedomMod/Commands/Command_saconfig.java @@ -57,6 +57,11 @@ public class Command_saconfig extends TFM_Command { final TFM_Admin admin = TFM_AdminList.getEntry(sender_p); + if (admin == null) { + playerMsg("Could not find your admin entry! Please notify a developer.", ChatColor.RED); + return true; + } + final String ip = TFM_Util.getIp(sender_p); if (args.length == 1) From a4d8f4646ea090b1ab7cfdf47567450e6073c9c2 Mon Sep 17 00:00:00 2001 From: JeromSar Date: Sat, 30 May 2015 20:12:43 +0200 Subject: [PATCH 23/27] Properly block /jail and /unjail They're both aliases, /togglejail is the actual command --- buildnumber.properties | 4 ++-- src/config.yml | 3 +-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/buildnumber.properties b/buildnumber.properties index 13c3d7b5..b3edf9b2 100644 --- a/buildnumber.properties +++ b/buildnumber.properties @@ -1,3 +1,3 @@ #Build Number for ANT. Do not edit! -#Sat May 30 19:54:04 CEST 2015 -build.number=1041 +#Sat May 30 20:10:27 CEST 2015 +build.number=1043 diff --git a/src/config.yml b/src/config.yml index 765cc18f..6f2e58f0 100644 --- a/src/config.yml +++ b/src/config.yml @@ -133,8 +133,7 @@ blocked_commands: - 's:b:/setblock:_' - 's:b:/green:_' - 'n:b:/gamerule:_' - - 'n:b:/jail:_' - - 'n:b:/unjail:_' + - 'n:b:/togglejail:_' # Superadmin commands - Auto-eject - 's:a:/stop:_' From c002fbc5377bc9e7a3ed28d6434b701b9600f885 Mon Sep 17 00:00:00 2001 From: JeromSar Date: Sat, 30 May 2015 20:51:49 +0200 Subject: [PATCH 24/27] Handle player online check in AsyncPlayerPreLoginEvent Apparently, online players with the same username are kicked before PlayerLoginEvent is called. This commit moves the online player check to AsyncPlayerPreloginEvent so the default behaviour can still be modified Fixes #642 --- buildnumber.properties | 4 +- .../Commands/Command_saconfig.java | 3 +- .../Listener/TFM_PlayerListener.java | 28 ++-- .../TotalFreedomMod/TFM_AdminList.java | 2 +- .../TotalFreedomMod/TFM_PermbanList.java | 1 + .../TotalFreedomMod/TFM_PlayerList.java | 86 ++++-------- .../TotalFreedomMod/TFM_ServerInterface.java | 65 ++++++--- .../TotalFreedomMod/TFM_UuidManager.java | 132 ++++++------------ 8 files changed, 133 insertions(+), 188 deletions(-) diff --git a/buildnumber.properties b/buildnumber.properties index b3edf9b2..4c2fdec7 100644 --- a/buildnumber.properties +++ b/buildnumber.properties @@ -1,3 +1,3 @@ #Build Number for ANT. Do not edit! -#Sat May 30 20:10:27 CEST 2015 -build.number=1043 +#Sat May 30 20:46:17 CEST 2015 +build.number=1052 diff --git a/src/me/StevenLawson/TotalFreedomMod/Commands/Command_saconfig.java b/src/me/StevenLawson/TotalFreedomMod/Commands/Command_saconfig.java index 1f679a89..70d6121b 100644 --- a/src/me/StevenLawson/TotalFreedomMod/Commands/Command_saconfig.java +++ b/src/me/StevenLawson/TotalFreedomMod/Commands/Command_saconfig.java @@ -57,7 +57,8 @@ public class Command_saconfig extends TFM_Command { final TFM_Admin admin = TFM_AdminList.getEntry(sender_p); - if (admin == null) { + if (admin == null) + { playerMsg("Could not find your admin entry! Please notify a developer.", ChatColor.RED); return true; } diff --git a/src/me/StevenLawson/TotalFreedomMod/Listener/TFM_PlayerListener.java b/src/me/StevenLawson/TotalFreedomMod/Listener/TFM_PlayerListener.java index 12250cf4..7de5fd3c 100644 --- a/src/me/StevenLawson/TotalFreedomMod/Listener/TFM_PlayerListener.java +++ b/src/me/StevenLawson/TotalFreedomMod/Listener/TFM_PlayerListener.java @@ -45,6 +45,7 @@ import org.bukkit.event.Listener; import org.bukkit.event.block.Action; import org.bukkit.event.block.LeavesDecayEvent; import org.bukkit.event.player.AsyncPlayerChatEvent; +import org.bukkit.event.player.AsyncPlayerPreLoginEvent; import org.bukkit.event.player.PlayerCommandPreprocessEvent; import org.bukkit.event.player.PlayerDropItemEvent; import org.bukkit.event.player.PlayerInteractEvent; @@ -388,7 +389,7 @@ public class TFM_PlayerListener implements Listener final Player player = event.getPlayer(); final TFM_PlayerData playerdata = TFM_PlayerData.getPlayerData(player); // Check absolute value to account for negatives - if(Math.abs(event.getTo().getX()) >= MAX_XY_COORD || Math.abs(event.getTo().getZ()) >= MAX_XY_COORD) + if (Math.abs(event.getTo().getX()) >= MAX_XY_COORD || Math.abs(event.getTo().getZ()) >= MAX_XY_COORD) { event.setCancelled(true); // illegal position, cancel it } @@ -791,7 +792,7 @@ public class TFM_PlayerListener implements Listener final TFM_Player playerEntry; TFM_Log.info("[JOIN] " + TFM_Util.formatPlayer(player) + " joined the game with IP address: " + ip, true); // Check absolute value to account for negatives - if(Math.abs(player.getLocation().getX()) >= MAX_XY_COORD || Math.abs(player.getLocation().getZ()) >= MAX_XY_COORD) + if (Math.abs(player.getLocation().getX()) >= MAX_XY_COORD || Math.abs(player.getLocation().getZ()) >= MAX_XY_COORD) { player.teleport(player.getWorld().getSpawnLocation()); // Illegal position, teleport to spawn } @@ -911,26 +912,15 @@ public class TFM_PlayerListener implements Listener }.runTaskLater(TotalFreedomMod.plugin, 20L * 1L); } + @EventHandler(priority = EventPriority.HIGHEST) + public void onPlayerPreLogin(AsyncPlayerPreLoginEvent event) + { + TFM_ServerInterface.handlePlayerPreLogin(event); + } + @EventHandler(priority = EventPriority.HIGHEST) public void onPlayerLogin(PlayerLoginEvent event) { - if (TFM_ConfigEntry.FORCE_IP_ENABLED.getBoolean()) - { - final String hostname = event.getHostname().replace("FML", ""); // Forge fix - https://github.com/TotalFreedom/TotalFreedomMod/issues/493 - final String connectAddress = TFM_ConfigEntry.SERVER_ADDRESS.getString(); - final int connectPort = TotalFreedomMod.server.getPort(); - - if (!hostname.equalsIgnoreCase(connectAddress + ":" + connectPort) && !hostname.equalsIgnoreCase(connectAddress + ".:" + connectPort)) - { - final int forceIpPort = TFM_ConfigEntry.FORCE_IP_PORT.getInteger(); - event.disallow(PlayerLoginEvent.Result.KICK_OTHER, - TFM_ConfigEntry.FORCE_IP_KICKMSG.getString() - .replace("%address%", TFM_ConfigEntry.SERVER_ADDRESS.getString() + (forceIpPort == DEFAULT_PORT ? "" : ":" + forceIpPort))); - return; - } - - } - TFM_ServerInterface.handlePlayerLogin(event); } } diff --git a/src/me/StevenLawson/TotalFreedomMod/TFM_AdminList.java b/src/me/StevenLawson/TotalFreedomMod/TFM_AdminList.java index 68ef5d97..7941087e 100644 --- a/src/me/StevenLawson/TotalFreedomMod/TFM_AdminList.java +++ b/src/me/StevenLawson/TotalFreedomMod/TFM_AdminList.java @@ -406,7 +406,7 @@ public class TFM_AdminList public static boolean isSuperAdminSafe(UUID uuid, String ip) { - if (TotalFreedomMod.server.getOnlineMode()) + if (TotalFreedomMod.server.getOnlineMode() && uuid != null) { return TFM_AdminList.getSuperUUIDs().contains(uuid); } diff --git a/src/me/StevenLawson/TotalFreedomMod/TFM_PermbanList.java b/src/me/StevenLawson/TotalFreedomMod/TFM_PermbanList.java index d888cbb7..27d9e0ec 100644 --- a/src/me/StevenLawson/TotalFreedomMod/TFM_PermbanList.java +++ b/src/me/StevenLawson/TotalFreedomMod/TFM_PermbanList.java @@ -7,6 +7,7 @@ import me.StevenLawson.TotalFreedomMod.Config.TFM_Config; public class TFM_PermbanList { + private static final List PERMBANNED_PLAYERS; private static final List PERMBANNED_IPS; diff --git a/src/me/StevenLawson/TotalFreedomMod/TFM_PlayerList.java b/src/me/StevenLawson/TotalFreedomMod/TFM_PlayerList.java index 7f985f4a..418ee5f8 100644 --- a/src/me/StevenLawson/TotalFreedomMod/TFM_PlayerList.java +++ b/src/me/StevenLawson/TotalFreedomMod/TFM_PlayerList.java @@ -11,65 +11,53 @@ import me.StevenLawson.TotalFreedomMod.Config.TFM_Config; import org.bukkit.Bukkit; import org.bukkit.entity.Player; -public class TFM_PlayerList -{ +public class TFM_PlayerList { + private static final Map PLAYER_LIST = new HashMap(); - private TFM_PlayerList() - { + private TFM_PlayerList() { throw new AssertionError(); } - public static Set getAllPlayers() - { + public static Set getAllPlayers() { return Collections.unmodifiableSet(Sets.newHashSet(PLAYER_LIST.values())); } - public static void load() - { + public static void load() { PLAYER_LIST.clear(); // Load online players - for (Player player : Bukkit.getOnlinePlayers()) - { + for (Player player : Bukkit.getOnlinePlayers()) { getEntry(player); } TFM_Log.info("Loaded playerdata for " + PLAYER_LIST.size() + " players"); } - public static void saveAll() - { - for (TFM_Player entry : PLAYER_LIST.values()) - { + public static void saveAll() { + for (TFM_Player entry : PLAYER_LIST.values()) { save(entry); } } // May return null - public static TFM_Player getEntry(UUID uuid) - { - if (PLAYER_LIST.containsKey(uuid)) - { + public static TFM_Player getEntry(UUID uuid) { + if (PLAYER_LIST.containsKey(uuid)) { return PLAYER_LIST.get(uuid); } final File configFile = getConfigFile(uuid); - if (!configFile.exists()) - { + if (!configFile.exists()) { return null; } final TFM_Player entry = new TFM_Player(uuid, getConfig(uuid)); - if (entry.isComplete()) - { + if (entry.isComplete()) { PLAYER_LIST.put(uuid, entry); return entry; - } - else - { + } else { TFM_Log.warning("Could not load entry: Entry is not complete!"); configFile.delete(); } @@ -77,13 +65,11 @@ public class TFM_PlayerList return null; } - public static TFM_Player getEntry(Player player) - { + public static TFM_Player getEntry(Player player) { final UUID uuid = TFM_UuidManager.getUniqueId(player); TFM_Player entry = getEntry(uuid); - if (entry != null) - { + if (entry != null) { return entry; } @@ -101,12 +87,10 @@ public class TFM_PlayerList return entry; } - public static void removeEntry(Player player) - { + public static void removeEntry(Player player) { final UUID uuid = TFM_UuidManager.getUniqueId(player); - if (!PLAYER_LIST.containsKey(uuid)) - { + if (!PLAYER_LIST.containsKey(uuid)) { return; } @@ -115,20 +99,16 @@ public class TFM_PlayerList PLAYER_LIST.remove(uuid); } - public static boolean existsEntry(Player player) - { + public static boolean existsEntry(Player player) { return existsEntry(TFM_UuidManager.getUniqueId(player)); } - public static boolean existsEntry(UUID uuid) - { + public static boolean existsEntry(UUID uuid) { return getConfigFile(uuid).exists(); } - public static void setUniqueId(TFM_Player entry, UUID newUuid) - { - if (entry.getUniqueId().equals(newUuid)) - { + public static void setUniqueId(TFM_Player entry, UUID newUuid) { + if (entry.getUniqueId().equals(newUuid)) { TFM_Log.warning("Not setting new UUID: UUIDs match!"); return; } @@ -147,16 +127,13 @@ public class TFM_PlayerList // Remove old entry PLAYER_LIST.remove(entry.getUniqueId()); final File oldFile = getConfigFile(entry.getUniqueId()); - if (oldFile.exists() && !oldFile.delete()) - { + if (oldFile.exists() && !oldFile.delete()) { TFM_Log.warning("Could not delete config: " + getConfigFile(entry.getUniqueId()).getName()); } } - public static void purgeAll() - { - for (File file : getConfigFolder().listFiles()) - { + public static void purgeAll() { + for (File file : getConfigFolder().listFiles()) { file.delete(); } @@ -164,27 +141,22 @@ public class TFM_PlayerList load(); } - public static File getConfigFolder() - { + public static File getConfigFolder() { return new File(TotalFreedomMod.plugin.getDataFolder(), "players"); } - public static File getConfigFile(UUID uuid) - { + public static File getConfigFile(UUID uuid) { return new File(getConfigFolder(), uuid + ".yml"); } - public static TFM_Config getConfig(UUID uuid) - { + public static TFM_Config getConfig(UUID uuid) { final TFM_Config config = new TFM_Config(TotalFreedomMod.plugin, getConfigFile(uuid), false); config.load(); return config; } - public static void save(TFM_Player entry) - { - if (!entry.isComplete()) - { + public static void save(TFM_Player entry) { + if (!entry.isComplete()) { throw new IllegalArgumentException("Entry is not complete!"); } diff --git a/src/me/StevenLawson/TotalFreedomMod/TFM_ServerInterface.java b/src/me/StevenLawson/TotalFreedomMod/TFM_ServerInterface.java index 4b46c4b3..0f7ea8f0 100644 --- a/src/me/StevenLawson/TotalFreedomMod/TFM_ServerInterface.java +++ b/src/me/StevenLawson/TotalFreedomMod/TFM_ServerInterface.java @@ -5,12 +5,14 @@ import java.util.List; import java.util.UUID; import java.util.regex.Pattern; import me.StevenLawson.TotalFreedomMod.Config.TFM_ConfigEntry; +import static me.StevenLawson.TotalFreedomMod.Listener.TFM_PlayerListener.DEFAULT_PORT; import net.minecraft.server.v1_8_R2.EntityPlayer; import net.minecraft.server.v1_8_R2.MinecraftServer; import net.minecraft.server.v1_8_R2.PropertyManager; import org.bukkit.ChatColor; import org.bukkit.Server; import org.bukkit.entity.Player; +import org.bukkit.event.player.AsyncPlayerPreLoginEvent; import org.bukkit.event.player.PlayerLoginEvent; import org.bukkit.event.player.PlayerLoginEvent.Result; @@ -62,6 +64,29 @@ public class TFM_ServerInterface return MinecraftServer.getServer().getVersion(); } + public static void handlePlayerPreLogin(AsyncPlayerPreLoginEvent event) + { + final String ip = event.getAddress().getHostAddress().trim(); + final boolean isAdmin = TFM_AdminList.isSuperAdminSafe(null, ip); + + // Check if the player is already online + for (Player onlinePlayer : TotalFreedomMod.server.getOnlinePlayers()) + { + if (!onlinePlayer.getName().equalsIgnoreCase(event.getName())) + { + continue; + } + + if (!isAdmin) { + event.disallow(AsyncPlayerPreLoginEvent.Result.KICK_OTHER, "Your username is already logged into this server."); + } else { + event.allow(); + TFM_Sync.playerKick(onlinePlayer, "An admin just logged in with the username you are using."); + } + return; + } + } + public static void handlePlayerLogin(PlayerLoginEvent event) { final Server server = TotalFreedomMod.server; @@ -70,19 +95,38 @@ public class TFM_ServerInterface final String ip = event.getAddress().getHostAddress().trim(); final UUID uuid = TFM_UuidManager.newPlayer(player, ip); - // Perform username checks + // Check username length if (username.length() < 3 || username.length() > TotalFreedomMod.MAX_USERNAME_LENGTH) { event.disallow(Result.KICK_OTHER, "Your username is an invalid length (must be between 3 and 20 characters long)."); return; } + // Check username characters if (!USERNAME_REGEX.matcher(username).find()) { event.disallow(Result.KICK_OTHER, "Your username contains invalid characters."); return; } + // Check force-IP match + if (TFM_ConfigEntry.FORCE_IP_ENABLED.getBoolean()) + { + final String hostname = event.getHostname().replace("FML", ""); // Forge fix - https://github.com/TotalFreedom/TotalFreedomMod/issues/493 + final String connectAddress = TFM_ConfigEntry.SERVER_ADDRESS.getString(); + final int connectPort = TotalFreedomMod.server.getPort(); + + if (!hostname.equalsIgnoreCase(connectAddress + ":" + connectPort) && !hostname.equalsIgnoreCase(connectAddress + ".:" + connectPort)) + { + final int forceIpPort = TFM_ConfigEntry.FORCE_IP_PORT.getInteger(); + event.disallow(PlayerLoginEvent.Result.KICK_OTHER, + TFM_ConfigEntry.FORCE_IP_KICKMSG.getString() + .replace("%address%", TFM_ConfigEntry.SERVER_ADDRESS.getString() + (forceIpPort == DEFAULT_PORT ? "" : ":" + forceIpPort))); + return; + } + + } + // Check if player is admin // Not safe to use TFM_Util.isSuperAdmin(player) because player.getAddress() will return a null until after player login. final boolean isAdmin = TFM_AdminList.isSuperAdminSafe(uuid, ip); @@ -93,15 +137,6 @@ public class TFM_ServerInterface // Force-allow log in event.allow(); - // Kick players with the same name - for (Player onlinePlayer : server.getOnlinePlayers()) - { - if (onlinePlayer.getName().equalsIgnoreCase(username)) - { - onlinePlayer.kickPlayer("An admin just logged in with the username you are using."); - } - } - int count = server.getOnlinePlayers().size(); if (count >= server.getMaxPlayers()) { @@ -151,16 +186,6 @@ public class TFM_ServerInterface return; } - // Username already logged in - for (Player onlinePlayer : server.getOnlinePlayers()) - { - if (onlinePlayer.getName().equalsIgnoreCase(username)) - { - event.disallow(Result.KICK_OTHER, "Your username is already logged into this server."); - return; - } - } - // Whitelist if (isWhitelisted()) { diff --git a/src/me/StevenLawson/TotalFreedomMod/TFM_UuidManager.java b/src/me/StevenLawson/TotalFreedomMod/TFM_UuidManager.java index 086f02be..71fde308 100644 --- a/src/me/StevenLawson/TotalFreedomMod/TFM_UuidManager.java +++ b/src/me/StevenLawson/TotalFreedomMod/TFM_UuidManager.java @@ -25,20 +25,18 @@ import org.json.simple.JSONArray; import org.json.simple.JSONObject; import org.json.simple.parser.JSONParser; -public class TFM_UuidManager -{ +public class TFM_UuidManager { + public static final String TABLE_NAME = "uuids"; private static final TFM_SqliteDatabase SQL; private static final Statement FIND; private static final Statement UPDATE; - private TFM_UuidManager() - { + private TFM_UuidManager() { throw new AssertionError(); } - static - { + static { SQL = new TFM_SqliteDatabase( "uuids.db", TABLE_NAME, @@ -48,40 +46,34 @@ public class TFM_UuidManager UPDATE = SQL.addPreparedStatement("REPLACE INTO " + TABLE_NAME + " (username, uuid) VALUES (?, ?);"); } - public static void load() - { + public static void load() { // Init DB SQL.connect(); } - public static void close() - { + public static void close() { SQL.close(); } - public static int purge() - { + public static int purge() { return SQL.purge(); } - public static UUID newPlayer(Player player, String ip) - { + public static UUID newPlayer(Player player, String ip) { TFM_Log.info("Obtaining UUID for new player: " + player.getName()); final String username = player.getName().toLowerCase(); // Look in DB final UUID dbUuid = find(username); - if (dbUuid != null) - { + if (dbUuid != null) { return dbUuid; } // Find UUID and update in DB if not found // Try API UUID uuid = TFM_UuidResolver.getUUIDOf(username); - if (uuid == null) - { + if (uuid == null) { // Spoof uuid = generateSpoofUuid(username); } @@ -90,11 +82,9 @@ public class TFM_UuidManager return uuid; } - public static UUID getUniqueId(OfflinePlayer offlinePlayer) - { + public static UUID getUniqueId(OfflinePlayer offlinePlayer) { // Online check first - if (offlinePlayer.isOnline() && TFM_PlayerData.hasPlayerData(offlinePlayer.getPlayer())) - { + if (offlinePlayer.isOnline() && TFM_PlayerData.hasPlayerData(offlinePlayer.getPlayer())) { return TFM_PlayerData.getPlayerData(offlinePlayer.getPlayer()).getUniqueId(); } @@ -102,19 +92,16 @@ public class TFM_UuidManager return getUniqueId(offlinePlayer.getName()); } - public static UUID getUniqueId(String username) - { + public static UUID getUniqueId(String username) { // Look in DB final UUID dbUuid = find(username); - if (dbUuid != null) - { + if (dbUuid != null) { return dbUuid; } // Try API final UUID apiUuid = TFM_UuidResolver.getUUIDOf(username); - if (apiUuid != null) - { + if (apiUuid != null) { return apiUuid; } @@ -122,10 +109,8 @@ public class TFM_UuidManager return generateSpoofUuid(username); } - public static void rawSetUUID(String name, UUID uuid) - { - if (name == null || uuid == null || name.isEmpty()) - { + public static void rawSetUUID(String name, UUID uuid) { + if (name == null || uuid == null || name.isEmpty()) { TFM_Log.warning("Not setting raw UUID: name and uuid may not be null!"); return; } @@ -133,86 +118,67 @@ public class TFM_UuidManager update(name.toLowerCase().trim(), uuid); } - private static UUID find(String searchName) - { - if (!SQL.connect()) - { + private static UUID find(String searchName) { + if (!SQL.connect()) { return null; } final ResultSet result; - try - { + try { final PreparedStatement statement = FIND.getStatement(); statement.clearParameters(); statement.setString(1, searchName.toLowerCase()); result = statement.executeQuery(); - } - catch (Exception ex) - { + } catch (Exception ex) { TFM_Log.severe("Could not execute find statement!"); TFM_Log.severe(ex); return null; } - if (!TFM_SqlUtil.hasData(result)) - { + if (!TFM_SqlUtil.hasData(result)) { TFM_SqlUtil.close(result); return null; } - try - { + try { final String uuidString = result.getString("uuid"); return UUID.fromString(uuidString); - } - catch (Exception ex) - { + } catch (Exception ex) { TFM_Log.severe(ex); return null; - } - finally - { + } finally { TFM_SqlUtil.close(result); } } - private static boolean update(String username, UUID uuid) - { - if (!SQL.connect()) - { + private static boolean update(String username, UUID uuid) { + if (!SQL.connect()) { return false; } - try - { + try { final PreparedStatement statement = UPDATE.getStatement(); statement.clearParameters(); statement.setString(1, username.toLowerCase()); statement.setString(2, uuid.toString()); statement.executeUpdate(); return true; - } - catch (Exception ex) - { + } catch (Exception ex) { TFM_Log.severe("Could not execute update statement!"); TFM_Log.severe(ex); return false; } } - private static UUID generateSpoofUuid(String name) - { + private static UUID generateSpoofUuid(String name) { name = name.toLowerCase(); TFM_Log.info("Generating spoof UUID for " + name); - try - { + try { final MessageDigest digest = MessageDigest.getInstance("SHA1"); final byte[] result = digest.digest(name.getBytes()); final StringBuilder builder = new StringBuilder(); - for (int i = 0; i < result.length; i++) - { + for (int i = 0; i < result.length; i++) { builder.append(Integer.toString((result[i] & 0xff) + 0x100, 16).substring(1)); } @@ -222,36 +188,30 @@ public class TFM_UuidManager + "-" + builder.substring(12, 16) + "-" + builder.substring(16, 20) + "-" + builder.substring(20, 32)); - } - catch (NoSuchAlgorithmException ex) - { + } catch (NoSuchAlgorithmException ex) { TFM_Log.warning("Could not generate spoof UUID: SHA1 algorithm not found!"); } return UUID.randomUUID(); } - public static class TFM_UuidResolver implements Callable> - { + public static class TFM_UuidResolver implements Callable> { + private static final double PROFILES_PER_REQUEST = 100; private static final String PROFILE_URL = "https://api.mojang.com/profiles/minecraft"; private final JSONParser jsonParser = new JSONParser(); private final List names; - public TFM_UuidResolver(List names) - { + public TFM_UuidResolver(List names) { this.names = ImmutableList.copyOf(names); } @Override - public Map call() - { + public Map call() { final Map uuidMap = new HashMap(); int requests = (int) Math.ceil(names.size() / PROFILES_PER_REQUEST); - for (int i = 0; i < requests; i++) - { - try - { + for (int i = 0; i < requests; i++) { + try { final URL url = new URL(PROFILE_URL); final HttpURLConnection connection = (HttpURLConnection) url.openConnection(); @@ -270,8 +230,7 @@ public class TFM_UuidManager final JSONArray array = (JSONArray) jsonParser.parse(new InputStreamReader(connection.getInputStream())); - for (Object profile : array) - { + for (Object profile : array) { final JSONObject jsonProfile = (JSONObject) profile; final String id = (String) jsonProfile.get("id"); final String name = (String) jsonProfile.get("name"); @@ -284,13 +243,10 @@ public class TFM_UuidManager uuidMap.put(name, uuid); } - if (i != requests - 1) - { + if (i != requests - 1) { Thread.sleep(100L); } - } - catch (Exception ex) - { + } catch (Exception ex) { TFM_Log.severe("Could not resolve UUID(s) of " + StringUtils.join(names.subList(i * 100, Math.min((i + 1) * 100, names.size())), ", ")); //TFM_Log.severe(ex); @@ -299,9 +255,9 @@ public class TFM_UuidManager return uuidMap; } - public static UUID getUUIDOf(String name) - { + public static UUID getUUIDOf(String name) { return new TFM_UuidResolver(Arrays.asList(name)).call().get(name); } } + } From 21c0833f1460892fe4539531995d6d3cea9783bc Mon Sep 17 00:00:00 2001 From: Jerom van der Sar Date: Sun, 7 Jun 2015 17:21:05 +0200 Subject: [PATCH 25/27] Rename dependency names to match wiki --- buildnumber.properties | 4 ++-- nbproject/project.properties | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/buildnumber.properties b/buildnumber.properties index 4c2fdec7..5bc4cd79 100644 --- a/buildnumber.properties +++ b/buildnumber.properties @@ -1,3 +1,3 @@ #Build Number for ANT. Do not edit! -#Sat May 30 20:46:17 CEST 2015 -build.number=1052 +#Sat May 30 21:50:19 CEST 2015 +build.number=1053 diff --git a/nbproject/project.properties b/nbproject/project.properties index 26569196..2acc249d 100644 --- a/nbproject/project.properties +++ b/nbproject/project.properties @@ -49,9 +49,9 @@ jar.compress=false jar.index=${jnlp.enabled} javac.classpath=\ ${libs.SpigotServer.classpath}:\ - ${libs.BukkitTelnet.classpath}:\ + ${libs.TF-Essentials.classpath}:\ ${libs.TF-WorldEdit.classpath}:\ - ${libs.Essentials.classpath} + ${libs.BukkitTelnet.classpath} # Space-separated list of extra javac options javac.compilerargs=-Xlint:unchecked -Xlint:deprecation javac.deprecation=false From acc8f3e2b8b76f01ddc1016dbfdc28a9d2300baa Mon Sep 17 00:00:00 2001 From: Revalation Date: Wed, 29 Apr 2015 23:09:15 -0400 Subject: [PATCH 26/27] Changed /kicknoob message to be more user-friendly --- buildnumber.properties | 4 ++-- .../TotalFreedomMod/Commands/Command_kicknoob.java | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/buildnumber.properties b/buildnumber.properties index 68a0247e..b959849d 100644 --- a/buildnumber.properties +++ b/buildnumber.properties @@ -1,3 +1,3 @@ #Build Number for ANT. Do not edit! -#Mon Apr 27 00:47:37 CEST 2015 -build.number=993 +#Sun Jun 07 17:27:04 CEST 2015 +build.number=994 diff --git a/src/me/StevenLawson/TotalFreedomMod/Commands/Command_kicknoob.java b/src/me/StevenLawson/TotalFreedomMod/Commands/Command_kicknoob.java index 4c2ef443..c66c9da3 100644 --- a/src/me/StevenLawson/TotalFreedomMod/Commands/Command_kicknoob.java +++ b/src/me/StevenLawson/TotalFreedomMod/Commands/Command_kicknoob.java @@ -20,7 +20,7 @@ public class Command_kicknoob extends TFM_Command { if (!TFM_AdminList.isSuperAdmin(player)) { - player.kickPlayer(ChatColor.RED + "Disconnected by admin."); + player.kickPlayer(ChatColor.RED + "All non-superadmins were kicked by " + sender.getName() + "."); } } From 1ed1b352f301e373b64769f79909c9cfec2da5be Mon Sep 17 00:00:00 2001 From: ChargedCreeper Date: Wed, 3 Jun 2015 14:40:12 -0400 Subject: [PATCH 27/27] Properly allow Forge clients to log in. Fixes #493 --- src/me/StevenLawson/TotalFreedomMod/TFM_ServerInterface.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/me/StevenLawson/TotalFreedomMod/TFM_ServerInterface.java b/src/me/StevenLawson/TotalFreedomMod/TFM_ServerInterface.java index 0f7ea8f0..0e9f77f8 100644 --- a/src/me/StevenLawson/TotalFreedomMod/TFM_ServerInterface.java +++ b/src/me/StevenLawson/TotalFreedomMod/TFM_ServerInterface.java @@ -112,7 +112,7 @@ public class TFM_ServerInterface // Check force-IP match if (TFM_ConfigEntry.FORCE_IP_ENABLED.getBoolean()) { - final String hostname = event.getHostname().replace("FML", ""); // Forge fix - https://github.com/TotalFreedom/TotalFreedomMod/issues/493 + final String hostname = event.getHostname().replace("\u0000FML\u0000", ""); // Forge fix - https://github.com/TotalFreedom/TotalFreedomMod/issues/493 final String connectAddress = TFM_ConfigEntry.SERVER_ADDRESS.getString(); final int connectPort = TotalFreedomMod.server.getPort();