Compare commits

..

20 Commits
v3.4 ... v3.5

Author SHA1 Message Date
e5902fc5e8 Incremented version number to reflect latest changes 2014-01-14 20:43:31 +01:00
71862d6e41 Batch format 2014-01-14 20:37:08 +01:00
7dffea0ba2 Merge pull request #115 from Wilee999/pull1
Strike lightning on /tempban
2014-01-14 11:28:52 -08:00
67c09546f7 Merge pull request #120 from Wild1145/patch-10
Changed from "Permbanned" in auto eject
2014-01-14 11:28:19 -08:00
8b51fd215f Merge pull request #116 from Wilee999/pull2
Strike lightning on /tban
2014-01-14 11:26:55 -08:00
275204fb2e Merge pull request #124 from Wilee999/pull7
Add picture to CONTRIBUTING.md
2014-01-14 11:26:02 -08:00
1330d2b3af Merge pull request #118 from Wilee999/pull3
Log player joins and player leaves for telnet
2014-01-14 11:22:10 -08:00
4204210f66 Merge pull request #126 from Wilee999/pull4
Remove /nuke from the config.yml
2014-01-14 11:21:08 -08:00
8297d03a86 Best not to have this. 2014-01-12 19:24:15 -08:00
75353ae4b1 oops 2014-01-09 15:10:31 -08:00
a28959db0e Add picture to CONTRIBUTING.md. 2014-01-09 15:09:01 -08:00
c42bc23bfe Changed from "Permbanned" in auto eject
As it doesnt actualy permban you, i have changed it so it doesnt say you have been.
2014-01-07 16:47:02 +00:00
e29d4673dd Log player logins and exits.
Because 1.7 will not log player logins and exits, TotalFreedomMod will have to do this instead.
2014-01-02 23:46:20 -08:00
2ce7e518fb Strike lightning on tban/noob. 2013-12-22 14:20:31 -08:00
9ba316464e Strike lightning on tempban. 2013-12-22 14:19:25 -08:00
60f71c9dfc Filter duplicate Telnet admin names 2013-12-18 18:44:21 +01:00
3e71286507 Added Access-Control-Allow-Origin to the players HTTPD module 2013-12-18 14:45:59 +01:00
6d48c90d16 Added HTTPD module: list 2013-12-18 14:12:15 +01:00
d7ed667b89 Log player messages 2013-12-17 17:33:17 +01:00
9c61cc2768 Switched over to TelnetCommandEvent
some TFM_CommandBlocker cleanup
2013-12-17 16:29:48 +01:00
16 changed files with 211 additions and 145 deletions

View File

@ -21,6 +21,9 @@ For those who wish to contribute, we encourage you to fork the repository and su
* Make sure your changes build (<b>and work!</b>).
## Tips - How To Get Your Pull Request Accepted ##
* See this picture for help:
![Imgur](http://i.imgur.com/7kogorv.jpg)
* Make sure your changes work and compile without difficulty.
* Make sure your change adds something useful, do not add commands to micromanage the server. (ie: Shorthands for a collection of commands)
* __Commands that make use of `org.bukkit.Server.dispatchCommand()` will probably be rejected.__

View File

@ -1,3 +1,3 @@
#Build Number for ANT. Do not edit!
#Tue Dec 17 15:17:32 CET 2013
build.number=681
#Tue Jan 14 20:43:15 CET 2014
build.number=698

View File

@ -1,4 +1,4 @@
# TotalFreedomMod v3.4 Configuration
# TotalFreedomMod v3.5 Configuration
# by Madgeek1450 and DarthSalamon
# Block placement prevention:
@ -78,7 +78,6 @@ blocked_commands:
# Superadmin commands - Auto-eject
- 's:a:/stop'
- 's:a:/reload'
- 's:a:/nuke'
- 's:a:/save-all'
- 's:a:/save-on'
- 's:a:/save-off'

View File

@ -3,6 +3,7 @@ package me.StevenLawson.TotalFreedomMod.Commands;
import me.StevenLawson.TotalFreedomMod.TFM_ServerInterface;
import me.StevenLawson.TotalFreedomMod.TFM_Util;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@ -30,6 +31,18 @@ public class Command_tban extends TFM_Command
return true;
}
// strike with lightning effect:
final Location targetPos = player.getLocation();
for (int x = -1; x <= 1; x++)
{
for (int z = -1; z <= 1; z++)
{
final Location strike_pos = new Location(targetPos.getWorld(), targetPos.getBlockX() + x, targetPos.getBlockY(), targetPos.getBlockZ() + z);
targetPos.getWorld().strikeLightning(strike_pos);
}
}
TFM_Util.adminAction(sender.getName(), "Tempbanning: " + player.getName() + " for 5 minutes.", true);
TFM_ServerInterface.banUsername(player.getName(), ChatColor.RED + "You have been temporarily banned for 5 minutes.", sender.getName(), TFM_Util.parseDateOffset("5m"));
player.kickPlayer(ChatColor.RED + "You have been temporarily banned for five minutes. Please read totalfreedom.me for more info.");

View File

@ -10,6 +10,7 @@ import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.Location;
@CommandPermissions(level = AdminLevel.SUPER, source = SourceType.BOTH)
@CommandParameters(description = "Temporarily ban someone.", usage = "/<command> [playername] [duration] [reason]")
@ -56,6 +57,18 @@ public class Command_tempban extends TFM_Command
bcast_msg.append(", Reason: \"").append(ban_reason).append("\"");
}
// strike with lightning effect:
final Location targetPos = player.getLocation();
for (int x = -1; x <= 1; x++)
{
for (int z = -1; z <= 1; z++)
{
final Location strike_pos = new Location(targetPos.getWorld(), targetPos.getBlockX() + x, targetPos.getBlockY(), targetPos.getBlockZ() + z);
targetPos.getWorld().strikeLightning(strike_pos);
}
}
TFM_Util.adminAction(sender.getName(), bcast_msg.toString(), true);
TFM_ServerInterface.banUsername(player.getName(), ban_reason, sender.getName(), ban_duration);
TFM_ServerInterface.banIP(player.getAddress().getAddress().getHostAddress().trim(), ban_reason, sender.getName(), ban_duration);

View File

@ -0,0 +1,94 @@
package me.StevenLawson.TotalFreedomMod.HTTPD;
import me.StevenLawson.TotalFreedomMod.TFM_SuperadminList;
import me.StevenLawson.TotalFreedomMod.TFM_Util;
import me.StevenLawson.TotalFreedomMod.TotalFreedomMod;
import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer;
import org.bukkit.entity.Player;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
public class Module_players extends TFM_HTTPD_Module
{
public Module_players(NanoHTTPD.HTTPSession session)
{
super(session);
}
@Override
public NanoHTTPD.Response getResponse()
{
final JSONObject responseObject = new JSONObject();
final JSONArray players = new JSONArray();
final JSONArray superadmins = new JSONArray();
final JSONArray telnetadmins = new JSONArray();
final JSONArray senioradmins = new JSONArray();
final JSONArray developers = new JSONArray();
// All online players
for (Player player : TotalFreedomMod.server.getOnlinePlayers())
{
players.add(player.getName());
}
// Super admins (non-telnet and non-senior)
for (String superadmin : TFM_SuperadminList.getSuperadminNames())
{
if (TFM_SuperadminList.getSenioradminNames().contains(superadmin))
{
continue;
}
if (TFM_SuperadminList.getTelnetadminNames().contains(superadmin))
{
continue;
}
superadmins.add(getName(superadmin));
}
// Telnet admins (non-senior)
for (String telnetadmin : TFM_SuperadminList.getTelnetadminNames())
{
if (TFM_SuperadminList.getSenioradminNames().contains(telnetadmin))
{
continue;
}
telnetadmins.add(getName(telnetadmin));
}
// Senior admins
for (String senioradmin : TFM_SuperadminList.getSenioradminNames())
{
senioradmins.add(getName(senioradmin));
}
// Developers
developers.addAll(TFM_Util.DEVELOPERS);
responseObject.put("players", players);
responseObject.put("superadmins", superadmins);
responseObject.put("telnetadmins", telnetadmins);
responseObject.put("senioradmins", senioradmins);
responseObject.put("developers", developers);
final NanoHTTPD.Response response = new NanoHTTPD.Response(NanoHTTPD.Response.Status.OK, NanoHTTPD.MIME_JSON, responseObject.toString());
response.addHeader("Access-Control-Allow-Origin", "*");
return response;
}
private String getName(String caseInsensitiveName)
{
final OfflinePlayer player = Bukkit.getOfflinePlayer(caseInsensitiveName);
if (player == null)
{
return caseInsensitiveName;
}
else
{
return player.getName();
}
}
}

View File

@ -62,6 +62,12 @@ public abstract class NanoHTTPD
* Common mime type for dynamic content: html
*/
public static final String MIME_HTML = "text/html";
// TFM Start
/**
* Common mime type for dynamic content: json
*/
public static final String MIME_JSON = "application/json";
// TFM End
/**
* Pseudo-Parameter to use to store the actual query string in the parameters map for later re-processing.
*/

View File

@ -117,6 +117,14 @@ public class TFM_HTTPD_Manager
{
return new Module_permbans(session).getResponse();
}
}),
PLAYERS(new ModuleExecutable(true, "players")
{
@Override
public Response getResponse(HTTPSession session)
{
return new Module_players(session).getResponse();
}
});
//
private final ModuleExecutable moduleExecutable;

View File

@ -537,6 +537,9 @@ public class TFM_PlayerListener implements Listener
// Finally, set message
event.setMessage(message);
// Broadcast it to console (since 1.7 doesn't do that anymore)
TFM_Log.info(String.format(event.getFormat(), player.getDisplayName(), event.getMessage()), true);
// Set the tag
if (playerdata.getTag() != null)
{
@ -657,6 +660,9 @@ public class TFM_PlayerListener implements Listener
playerdata.regenerateHistory();
playerdata.clearHistory();
}
// Log player quitting, because 1.7 doesn't do this
TFM_Log.info(player.getName() + " left the game.");
}
@EventHandler(priority = EventPriority.MONITOR)
@ -685,6 +691,9 @@ public class TFM_PlayerListener implements Listener
final TFM_PlayerData playerdata = TFM_PlayerData.getPlayerData(player);
playerdata.setSuperadminIdVerified(null);
// Log join message, as 1.7 doesn't log it anymore
TFM_Log.info(player.getName() + " joined the game.");
TFM_UserList.getInstance(TotalFreedomMod.plugin).addUser(player);
final boolean impostor = TFM_SuperadminList.isSuperadminImpostor(player);

View File

@ -1,24 +1,17 @@
package me.StevenLawson.TotalFreedomMod.Listener;
import java.util.Set;
import me.StevenLawson.TotalFreedomMod.TFM_CommandBlocker;
import me.StevenLawson.TotalFreedomMod.TFM_ConfigEntry;
import me.StevenLawson.TotalFreedomMod.TFM_ServerInterface;
import me.StevenLawson.TotalFreedomMod.TFM_Util;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Server;
import org.bukkit.command.CommandSender;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.server.RemoteServerCommandEvent;
import org.bukkit.event.server.ServerCommandEvent;
import org.bukkit.event.server.ServerListPingEvent;
import org.bukkit.permissions.Permission;
import org.bukkit.permissions.PermissionAttachment;
import org.bukkit.permissions.PermissionAttachmentInfo;
import org.bukkit.plugin.Plugin;
public class TFM_ServerListener implements Listener
{
@ -57,6 +50,7 @@ public class TFM_ServerListener implements Listener
}
}
}*/
@Deprecated // Moved to TFM_TelnetListener
@EventHandler(priority = EventPriority.NORMAL)
public void onRemoteServerCommand(RemoteServerCommandEvent event)
{
@ -66,6 +60,7 @@ public class TFM_ServerListener implements Listener
}
}
@Deprecated // Moved to TFM_TelnetListener
@EventHandler(priority = EventPriority.NORMAL)
public void onServerCommand(ServerCommandEvent event)
{
@ -97,111 +92,4 @@ public class TFM_ServerListener implements Listener
event.setMotd(ChatColor.RED + "Server is full.");
}
}
private static class TFM_ServerListener_DummyCommandSender implements CommandSender
{
private final String senderName;
public TFM_ServerListener_DummyCommandSender(String senderName)
{
this.senderName = senderName;
}
@Override
public void sendMessage(String message)
{
}
@Override
public void sendMessage(String[] messages)
{
}
@Override
public Server getServer()
{
return null;
}
@Override
public String getName()
{
return senderName;
}
@Override
public boolean isPermissionSet(String name)
{
return true;
}
@Override
public boolean isPermissionSet(Permission perm)
{
return true;
}
@Override
public boolean hasPermission(String name)
{
return true;
}
@Override
public boolean hasPermission(Permission perm)
{
return true;
}
@Override
public PermissionAttachment addAttachment(Plugin plugin, String name, boolean value)
{
return null;
}
@Override
public PermissionAttachment addAttachment(Plugin plugin)
{
return null;
}
@Override
public PermissionAttachment addAttachment(Plugin plugin, String name, boolean value, int ticks)
{
return null;
}
@Override
public PermissionAttachment addAttachment(Plugin plugin, int ticks)
{
return null;
}
@Override
public void removeAttachment(PermissionAttachment attachment)
{
}
@Override
public void recalculatePermissions()
{
}
@Override
public Set<PermissionAttachmentInfo> getEffectivePermissions()
{
return null;
}
@Override
public boolean isOp()
{
return true;
}
@Override
public void setOp(boolean value)
{
}
}
}

View File

@ -1,6 +1,6 @@
package me.StevenLawson.TotalFreedomMod.Listener;
import me.StevenLawson.TotalFreedomMod.TFM_Log;
import me.StevenLawson.TotalFreedomMod.TFM_CommandBlocker;
import me.StevenLawson.TotalFreedomMod.TFM_Superadmin;
import me.StevenLawson.TotalFreedomMod.TFM_SuperadminList;
import org.bukkit.Bukkit;
@ -9,7 +9,7 @@ import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
public class TFM_CustomListener implements Listener
public class TFM_TelnetListener implements Listener
{
@EventHandler(priority = EventPriority.NORMAL)
public void onTelnetPreLogin(me.StevenLawson.BukkitTelnet.TelnetPreLoginEvent event)
@ -39,4 +39,13 @@ public class TFM_CustomListener implements Listener
event.setName(player.getName());
}
@EventHandler(priority = EventPriority.NORMAL)
public void onTelnetCommand(me.StevenLawson.BukkitTelnet.TelnetCommandEvent event)
{
if (TFM_CommandBlocker.getInstance().isCommandBlocked(event.getCommand(), event.getSender()))
{
event.setCancelled(true);
}
}
}

View File

@ -14,14 +14,13 @@ import org.bukkit.entity.Player;
public class TFM_CommandBlocker
{
private Map<String, TFM_CommandBlocker_BlockedCommandEntry> blockedCommands = new HashMap<String, TFM_CommandBlocker_BlockedCommandEntry>();
private Map<String, CommandBlockerEntry> blockedCommands = new HashMap<String, CommandBlockerEntry>();
private TFM_CommandBlocker()
{
parseBlockingRules();
}
@SuppressWarnings("unchecked")
public final void parseBlockingRules()
{
blockedCommands.clear();
@ -83,7 +82,7 @@ public class TFM_CommandBlocker
message = parts[3];
}
TFM_CommandBlocker_BlockedCommandEntry blockedCommandEntry = new TFM_CommandBlocker_BlockedCommandEntry(rank, action, command, message);
CommandBlockerEntry blockedCommandEntry = new CommandBlockerEntry(rank, action, command, message);
Command bukkitCommand = commandMap.getCommand(command);
if (bukkitCommand == null)
@ -137,7 +136,7 @@ public class TFM_CommandBlocker
return false;
}
TFM_CommandBlocker_BlockedCommandEntry blockedCommandEntry = blockedCommands.get(command);
final CommandBlockerEntry blockedCommandEntry = blockedCommands.get(command);
if (blockedCommandEntry != null)
{
@ -224,7 +223,9 @@ public class TFM_CommandBlocker
private enum CommandBlockerAction
{
BLOCK("b"), BLOCK_AND_EJECT("a"), BLOCK_UNKNOWN("u");
BLOCK("b"),
BLOCK_AND_EJECT("a"),
BLOCK_UNKNOWN("u");
private final String token;
private CommandBlockerAction(String token)
@ -250,14 +251,14 @@ public class TFM_CommandBlocker
}
}
private static class TFM_CommandBlocker_BlockedCommandEntry
private static class CommandBlockerEntry
{
private final CommandBlockerRank rank;
private final CommandBlockerAction action;
private String command;
private final String message;
public TFM_CommandBlocker_BlockedCommandEntry(CommandBlockerRank rank, CommandBlockerAction action, String command, String message)
public CommandBlockerEntry(CommandBlockerRank rank, CommandBlockerAction action, String command, String message)
{
this.rank = rank;
this.action = action;
@ -321,10 +322,10 @@ public class TFM_CommandBlocker
public static TFM_CommandBlocker getInstance()
{
return TFM_CommandBlockerNewHolder.INSTANCE;
return TFM_CommandBlockerHolder.INSTANCE;
}
private static class TFM_CommandBlockerNewHolder
private static class TFM_CommandBlockerHolder
{
private static final TFM_CommandBlocker INSTANCE = new TFM_CommandBlocker();
}

View File

@ -21,10 +21,11 @@ import org.bukkit.util.FileUtil;
public class TFM_SuperadminList
{
private static Map<String, TFM_Superadmin> superadminList = new HashMap<String, TFM_Superadmin>();
private static final Map<String, TFM_Superadmin> superadminList = new HashMap<String, TFM_Superadmin>();
private static List<String> superadminNames = new ArrayList<String>();
private static List<String> senioradminNames = new ArrayList<String>();
private static List<String> telnetadminNames = new ArrayList<String>();
private static List<String> superadminIPs = new ArrayList<String>();
private static List<String> seniorAdminNames = new ArrayList<String>();
private static int cleanThreshold = 24 * 7; // 1 Week in hours
private TFM_SuperadminList()
@ -42,6 +43,16 @@ public class TFM_SuperadminList
return superadminNames;
}
public static List<String> getTelnetadminNames()
{
return telnetadminNames;
}
public static List<String> getSenioradminNames()
{
return senioradminNames;
}
public static void loadSuperadminList()
{
try
@ -86,20 +97,21 @@ public class TFM_SuperadminList
public static void updateIndexLists()
{
superadminNames.clear();
telnetadminNames.clear();
senioradminNames.clear();
superadminIPs.clear();
seniorAdminNames.clear();
Iterator<Entry<String, TFM_Superadmin>> it = superadminList.entrySet().iterator();
while (it.hasNext())
{
Entry<String, TFM_Superadmin> pair = it.next();
String admin_name = pair.getKey().toLowerCase();
String name = pair.getKey().toLowerCase();
TFM_Superadmin superadmin = pair.getValue();
if (superadmin.isActivated())
{
superadminNames.add(admin_name);
superadminNames.add(name);
for (String ip : superadmin.getIps())
{
@ -108,19 +120,25 @@ public class TFM_SuperadminList
if (superadmin.isSeniorAdmin())
{
seniorAdminNames.add(admin_name);
senioradminNames.add(name);
for (String console_alias : superadmin.getConsoleAliases())
{
seniorAdminNames.add(console_alias.toLowerCase());
senioradminNames.add(console_alias.toLowerCase());
}
}
if (superadmin.isTelnetAdmin())
{
telnetadminNames.add(name);
}
}
}
superadminNames = TFM_Util.removeDuplicates(superadminNames);
telnetadminNames = TFM_Util.removeDuplicates(telnetadminNames);
senioradminNames = TFM_Util.removeDuplicates(senioradminNames);
superadminIPs = TFM_Util.removeDuplicates(superadminIPs);
seniorAdminNames = TFM_Util.removeDuplicates(seniorAdminNames);
TFM_AdminWorld.getInstance().wipeAccessCache();
}
@ -264,7 +282,7 @@ public class TFM_SuperadminList
if (!(user instanceof Player))
{
return seniorAdminNames.contains(username);
return senioradminNames.contains(username);
}
TFM_Superadmin entry = getAdminEntry((Player) user);

View File

@ -406,7 +406,7 @@ public class TFM_Util
//p.setBanned(true);
TFM_ServerInterface.banUsername(player.getName(), kickMessage, "AutoEject", null);
TFM_Util.bcastMsg(ChatColor.RED + player.getName() + " has been banned permanently.");
TFM_Util.bcastMsg(ChatColor.RED + player.getName() + " has been banned.");
player.kickPlayer(kickMessage);

View File

@ -3,7 +3,12 @@ package me.StevenLawson.TotalFreedomMod;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import me.StevenLawson.TotalFreedomMod.Commands.TFM_Command;
import me.StevenLawson.TotalFreedomMod.Commands.TFM_CommandLoader;
import me.StevenLawson.TotalFreedomMod.HTTPD.TFM_HTTPD_Manager;
@ -309,7 +314,7 @@ public class TotalFreedomMod extends JavaPlugin
pm.registerEvents(new TFM_PlayerListener(), plugin);
pm.registerEvents(new TFM_WeatherListener(), plugin);
pm.registerEvents(new TFM_ServerListener(), plugin);
pm.registerEvents(new TFM_CustomListener(), plugin);
pm.registerEvents(new TFM_TelnetListener(), plugin);
}
private static void setAppProperties()

View File

@ -1,6 +1,6 @@
name: TotalFreedomMod
main: me.StevenLawson.TotalFreedomMod.TotalFreedomMod
version: 3.4
version: 3.5
description: Plugin for the Total Freedom server.
authors: [Madgeek1450, DarthSalamon]