Compare commits

..

115 Commits
v2.22 ... v3.2

Author SHA1 Message Date
2168aa957a Incremented version number to reflect latest changes 2013-09-03 16:10:50 +02:00
3babf8388c Merge branch 'master' into frontdoor 2013-09-03 15:59:49 +02:00
0b0e17e526 Finished TFM_FrontDoor, made some variables thread-safe. 2013-09-03 15:57:49 +02:00
5247a33f88 More bugtesting and tweaks with FrontDoor 2013-08-29 13:31:07 +02:00
3f2aa224f6 More work on TFM_FrontDoor 2013-08-28 21:40:14 +02:00
bc00e42990 Started work on TFM_FrontDoor 2013-08-28 19:11:27 +02:00
88103cefc2 Some more tweaks to WebHelp. 2013-08-28 11:26:08 -04:00
3819c57adf Finished file serving module (default).
Added config options.
2013-08-27 20:20:11 -04:00
c3f8bd33ff Added file module, for public file serving. 2013-08-27 15:09:07 -04:00
baf7a3b2c1 Merge branch 'master' into nanohttpd 2013-08-27 13:56:21 -04:00
74bfdad389 ... 2013-08-27 13:55:03 -04:00
08a9329864 Web help refinement. 2013-08-27 13:49:45 -04:00
be87075337 Rename help module. 2013-08-27 12:40:59 -04:00
ada803cd7d Web help roughly implemented. 2013-08-27 12:39:28 -04:00
0b146943ff Added /rollback undo 2013-08-27 16:23:10 +02:00
0f31ea2953 Make it thread safe. 2013-08-27 09:01:12 -04:00
3ca46853ac Merge branch 'master' into nanohttpd 2013-08-27 08:02:32 -04:00
ee6b93e208 Playing the memory reduction game - lets reduce the use of "new". 2013-08-27 07:46:25 -04:00
3e5e11197f Merge branch 'master' into nanohttpd 2013-08-27 07:18:43 -04:00
6035f9e50b TFM_PlayerListener cleanup 2013-08-27 12:35:32 +02:00
f45cc11846 Don't track blockchanges from Superadmins 2013-08-27 12:10:20 +02:00
b28a0778b4 Optimized RollbackEntry for memory 2013-08-27 11:52:28 +02:00
174043fa58 Getting HTTP server framework ready... 2013-08-26 21:48:04 -04:00
dfb6df63c8 Use NanoHTTPD instead, more stable. 2013-08-26 20:39:30 -04:00
7a6cc55640 Clean up EntryType 2013-08-26 19:09:39 -04:00
5c61ff27b0 Formatting 2013-08-26 18:44:18 -04:00
3da03393e6 Small bugfix with the logblock stick 2013-08-26 17:48:19 +02:00
5876f86ac3 Added logblock stick 2013-08-26 17:22:35 +02:00
fbdf2b5fc2 More /cage tweaks 2013-08-26 15:12:06 +02:00
fd6aa7b94b Tweaks to /cage 2013-08-26 01:08:53 +02:00
5981f7f33f Converted variable names to CamelCase as convention 2013-08-25 18:32:01 +02:00
55d94b5d59 Changed back to raw Lists in config 2013-08-25 17:32:24 +02:00
d71b043102 Added unbannable usernames (defined in config)
Changed all raw Lists in config to StringLists
2013-08-24 21:35:09 +02:00
143b323854 Implement weather and time control in /adminworld. 2013-08-23 21:22:13 -04:00
1f32455e06 A few more adminworld checks. 2013-08-23 16:59:31 -04:00
8718b3a8c2 Merge pull request #73 from Wild1145/patch-7
Removed Disaster from Developer access
2013-08-23 13:49:10 -07:00
f5e21f69fd More guest list changes. 2013-08-23 16:29:46 -04:00
bf7877addc Finish guest list. 2013-08-23 14:43:58 -04:00
6d0b8362b7 Merge branch 'master' into adminworld
Conflicts:
	appinfo.properties
	buildnumber.properties
2013-08-22 17:08:52 -04:00
10f905ea36 Got rid of varargs in logger, possible cause of exceptions. 2013-08-22 16:56:17 -04:00
dcb6a4513e Removed Disaster from Developer access
Noticed this when working on the CJFreedom version, thought it should be removed!
2013-08-22 20:29:16 +01:00
ff4751941b Working on guestlist 2013-08-22 15:26:12 -04:00
e64fd42855 Added TFM_CustomWorld superclass. 2013-08-21 20:07:14 -04:00
467d1d2d3a Merge branch 'master' into adminworld 2013-08-21 18:38:17 -04:00
6ba8dcaa58 Logger fixes. 2013-08-21 17:42:21 -04:00
a3cf53f5b1 Merge branch 'master' into adminworld 2013-08-20 20:51:23 -04:00
23907ef7e4 Use plugin/server loggers. 2013-08-20 20:44:39 -04:00
485945047b More logger tweaks. 2013-08-20 20:04:06 -04:00
75ec2330f5 Incremented version number, changed startup logic
Improved logging, small changes
2013-08-20 17:35:00 +02:00
5c32c66390 Finish getting rid of old command blocker. 2013-08-18 16:45:35 -04:00
4494a4c039 Config migration, stage 3 2013-08-18 15:52:32 -04:00
f53b67abf1 Config migration, stage 2 2013-08-18 15:27:17 -04:00
2827ca98a7 Config migration, stage 1 2013-08-18 14:52:46 -04:00
64b1e568b3 Deprecated old config vars 2013-08-17 18:28:55 -04:00
3e57696a21 Delegate to TFM_ConfigEntry 2013-08-17 18:24:40 -04:00
fd1bd995ed Another version of TFM_ConfigEntry... 2013-08-17 18:07:57 -04:00
9fe05add7f Added weather parameter to framework. 2013-08-16 21:36:25 -04:00
25fbb0c05a Merge branch 'master' into adminworld 2013-08-15 17:45:41 -04:00
f646a5122a Fixed wilee's glitch. 2013-08-15 17:44:09 -04:00
af4071c582 Framework for new adminworld commands. 2013-08-15 17:40:35 -04:00
86ee0e96d2 Add TFM_Util.isRemoveCommand 2013-08-15 17:36:55 -04:00
57efdd2269 Merge pull request #72 from Wilee999/master
/tban's alias is now /noob, instead of /nope
2013-08-15 02:39:52 -07:00
26bcd3ec1c Changes to /tban 2013-08-14 13:54:54 -07:00
fd372066eb Incremented version to 3.00 2013-08-14 17:39:51 +02:00
122bef2d5a DromedaryCase 2013-08-14 16:55:37 +02:00
339518f4f4 Take two: Cleanup 2013-08-14 16:01:42 +02:00
8ce0defb52 Readd Command_premium.java 2013-08-14 09:32:14 -04:00
ec6e8431e3 Revert "Added /premium"
This reverts commit 0964871e8b.
2013-08-14 09:28:19 -04:00
0964871e8b Added /premium
cleanup
2013-08-14 15:12:30 +02:00
422a7716f3 /nf tweaks. 2013-08-13 21:39:12 -04:00
f1ab8296e4 Tweaks to jumppad physics. 2013-08-13 16:54:20 -04:00
f9cbf11abb JumpPads cleanup 2013-08-13 14:53:33 -04:00
b0090a5412 More tweaks to nonuke and spam prevention. 2013-08-13 13:42:43 -04:00
b94efb525f Added timeout check to nonuke, so lag doesn't ban people. 2013-08-13 13:22:29 -04:00
5c8f98089e Merge branch 'master' into mg_untested 2013-08-13 12:29:12 -04:00
7879fa24e4 Minor changes to JumpPads 2013-08-13 18:21:37 +02:00
6fcaed6253 Finished Jumppads 2013-08-13 17:16:33 +02:00
656dbf8867 Started work on Jumppads 2013-08-13 16:08:00 +02:00
23032e6f9a Added NickFilter. 2013-08-13 09:51:20 -04:00
ad5a236bc2 PlayerMoveEvent optimization. 2013-08-13 08:36:33 -04:00
e23db244a5 Add teleport listener to AdminWorld monitor. 2013-08-12 22:01:28 -04:00
eb4622fc28 AdminWorld tweaks. 2013-08-12 21:33:21 -04:00
0f6b053727 Added /findip 2013-08-12 21:35:59 +02:00
259335958a Merge branch 'master' of https://github.com/TotalFreedom/TotalFreedomMod 2013-08-12 20:54:35 +02:00
31375b82c3 Tweaked /tag some more, I think this will work best. 2013-08-12 20:54:19 +02:00
0a2d5c8258 Reworked /dtoggle. 2013-08-12 14:49:33 -04:00
bac25258b0 Added /lockdown 2013-08-12 20:47:36 +02:00
c69918d725 Create Command_dtoggle
This is a replacement for DisdFreedom dtoggle, something we had to add on CJFreedom shortly after we lost his plugin :)
2013-08-12 19:28:41 +01:00
c1d0c01524 Merge branch 'master' of https://github.com/TotalFreedom/TotalFreedomMod 2013-08-12 14:19:33 -04:00
a59e6added Tweaks to Command_tag 2013-08-12 14:19:17 -04:00
56493adcae Merge pull request #67 from Wild1145/patch-4
Block Op's from using &k.
2013-08-12 10:59:52 -07:00
4b91de7414 More AdminWorld tweaks. 2013-08-12 12:51:30 -04:00
c636ee043a Merge branch 'mg_incomplete' of https://github.com/TotalFreedom/TotalFreedomMod into mg_incomplete 2013-08-12 12:41:12 -04:00
6a5306dd7a More AdminWorld tweaks. 2013-08-12 12:38:46 -04:00
4603dc5613 Block Op's from using bad codes
This will block a op from using a set of colour codes you to not want them to use, like &k
2013-08-12 17:10:08 +01:00
af7e6c5d41 AdminWorld welcome sign now facing the right direction :)
Added teleporting message to /adminworld
2013-08-12 17:58:28 +02:00
699d366efb Revert accidental change of this file. 2013-08-12 10:11:04 -04:00
41ed416a51 Merge branch 'master' into mg_incomplete 2013-08-12 10:05:01 -04:00
074630f720 Finished adminworld, still needs testing. 2013-08-12 10:03:12 -04:00
4e3c9a6b9e Batch format fix 2013-08-12 14:41:04 +02:00
bea480c1f1 Merge branch 'master' into mg_incomplete
Conflicts:
	appinfo.properties
	buildnumber.properties
2013-08-12 08:14:55 -04:00
69fd3566af Added /tag clearall and /tag clear <name> 2013-08-12 12:50:39 +02:00
f3ac19a616 Added /tag
Minor cleanup
2013-08-12 12:31:30 +02:00
696ec119c6 Made /saconfig clean a senior command 2013-08-12 11:24:23 +02:00
326c3f6a2b Incomplete features:
-Adminworld
-Better entity wiping
2013-08-11 22:02:18 -04:00
38b1035020 Added Command_trail.
+1 points for no external changes.
2013-08-10 15:50:45 -04:00
1ae6eb8a5a Consolidate loggers. 2013-08-10 15:50:07 -04:00
2c4eca8551 Remove deprecated methods and variables. 2013-08-10 13:17:32 -04:00
f23c61d0b3 Rework Command_health 2013-08-10 12:39:50 -04:00
c10e0deb8b Added formatting parameters to project configuration. 2013-08-09 20:17:08 -04:00
d4dfe06ec0 Formatting cleanup.
Added ignore for unchecked cast warning.
2013-08-09 20:11:17 -04:00
bcd9658b3d Added release link to permban kick message 2013-08-09 17:57:45 +02:00
9b62731e94 Merged branch unfinished 2013-08-09 17:11:30 +02:00
03553b6254 Finished TFM_ServiceChecker, added /services 2013-08-09 17:09:13 +02:00
5b34facdd3 Started work on ServiceChecker 2013-08-04 20:49:43 +02:00
137 changed files with 7623 additions and 2376 deletions

View File

@ -1,6 +1,5 @@
#Fri, 09 Aug 2013 15:38:23 +0200 #Tue, 03 Sep 2013 15:57:44 +0200
program.VERSION=2.22
program.BUILDNUM=378
program.BUILDDATE=08/09/2013 03\:38 PM
program.VERSION=3.2
program.BUILDNUM=551
program.BUILDDATE=09/03/2013 03\:57 PM

View File

@ -1,3 +1,3 @@
#Build Number for ANT. Do not edit! #Build Number for ANT. Do not edit!
#Fri Aug 09 15:38:23 CEST 2013 #Tue Sep 03 15:57:44 CEST 2013
build.number=379 build.number=552

View File

@ -5,6 +5,22 @@ annotation.processing.run.all.processors=true
annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output
application.title=TotalFreedomMod application.title=TotalFreedomMod
application.vendor=Michael application.vendor=Michael
auxiliary.org-netbeans-modules-editor-indent.CodeStyle.project.expand-tabs=true
auxiliary.org-netbeans-modules-editor-indent.CodeStyle.project.indent-shift-width=4
auxiliary.org-netbeans-modules-editor-indent.CodeStyle.project.spaces-per-tab=4
auxiliary.org-netbeans-modules-editor-indent.CodeStyle.project.tab-size=4
auxiliary.org-netbeans-modules-editor-indent.CodeStyle.project.text-limit-width=0
auxiliary.org-netbeans-modules-editor-indent.CodeStyle.project.text-line-wrap=none
auxiliary.org-netbeans-modules-editor-indent.CodeStyle.usedProfile=project
auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.blankLinesAfterClassHeader=0
auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.classDeclBracePlacement=NEW_LINE
auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.enableCommentFormatting=false
auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.methodDeclBracePlacement=NEW_LINE
auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.otherBracePlacement=NEW_LINE
auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.placeCatchOnNewLine=true
auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.placeElseOnNewLine=true
auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.placeFinallyOnNewLine=true
auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.placeWhileOnNewLine=true
build.classes.dir=${build.dir}/classes build.classes.dir=${build.dir}/classes
build.classes.excludes=**/*.java,**/*.form build.classes.excludes=**/*.java,**/*.form
# This directory is removed when the project is cleaned: # This directory is removed when the project is cleaned:

View File

@ -1,4 +1,4 @@
# TotalFreedomMod v2.22 Configuration # TotalFreedomMod v3.2 Configuration
# by Madgeek1450 and DarthSalamon # by Madgeek1450 and DarthSalamon
# Block placement prevention: # Block placement prevention:
@ -12,7 +12,7 @@ allow_tnt_minecarts: false
# Explosion management: # Explosion management:
allow_explosions: false allow_explosions: false
explosiveRadius: 4.0 explosive_radius: 4.0
# Blocked commands: # Blocked commands:
# #
@ -124,14 +124,52 @@ host_sender_names:
- rcon - rcon
- remotebukkit - remotebukkit
# Players who cannot be banned by username
unbannable_usernames:
- honeydew
- xephos
- captainsparklez
- truemu
- kiershar
- fvdisco
- sethbling
- notch
- jeb_
- gamechap
- bertiechap
- vechs
- antvenom
- chimneyswift
- deadmau5
- etho
- skydoesminecraft
- tobyturner
- xxslyfoxhoundxx
- paulsoaresjr
- sips_
- deadlox
- xxslyxx
- jeromeasf
- dinnerbone
- grumm
- cavemanfilms
# TwitterBot - Used to allow superadmins to verify themselves using twitter # TwitterBot - Used to allow superadmins to verify themselves using twitter
twitterbot_enabled: false twitterbot_enabled: false
twitterbot_url: twitterbot_url: ''
twitterbot_secret: twitterbot_secret: ''
# Pet Protect - Prevent tamed pets from being killed. # Pet Protect - Prevent tamed pets from being killed.
pet_protect_enabled: true pet_protect_enabled: true
# Logs Registration # Logs Registration
logs_register_password: logs_register_password: ''
logs_register_url: logs_register_url: ''
# Mojang service checker
service_checker_url: http://status.mojang.com/check
# HTTPD
httpd_enabled: true
httpd_public_folder: ./public_html
httpd_port: 28966

View File

@ -23,6 +23,7 @@ import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.Random; import java.util.Random;
import java.util.logging.Logger; import java.util.logging.Logger;
import org.bukkit.Bukkit;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.World; import org.bukkit.World;
@ -31,7 +32,7 @@ import org.bukkit.generator.ChunkGenerator;
public class CleanroomChunkGenerator extends ChunkGenerator public class CleanroomChunkGenerator extends ChunkGenerator
{ {
private Logger log = Logger.getLogger("Minecraft-Server"); private static final Logger log = Bukkit.getLogger();
private short[] layer; private short[] layer;
private byte[] layerDataValues; private byte[] layerDataValues;

View File

@ -2,5 +2,17 @@ package me.StevenLawson.TotalFreedomMod.Commands;
public enum AdminLevel public enum AdminLevel
{ {
ALL, OP, SUPER, SENIOR ALL("All Player Commands"), OP("OP Commands"), SUPER("SuperAdmin Commands"), SENIOR("Senior Admin Commands");
//
private final String friendlyName;
private AdminLevel(String friendlyName)
{
this.friendlyName = friendlyName;
}
public String getFriendlyName()
{
return friendlyName;
}
} }

View File

@ -1,8 +1,8 @@
package me.StevenLawson.TotalFreedomMod.Commands; package me.StevenLawson.TotalFreedomMod.Commands;
import me.StevenLawson.TotalFreedomMod.TFM_ConfigEntry;
import me.StevenLawson.TotalFreedomMod.TFM_SuperadminList; import me.StevenLawson.TotalFreedomMod.TFM_SuperadminList;
import me.StevenLawson.TotalFreedomMod.TFM_Util; import me.StevenLawson.TotalFreedomMod.TFM_Util;
import me.StevenLawson.TotalFreedomMod.TotalFreedomMod;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -21,19 +21,19 @@ public class Command_adminmode extends TFM_Command
if (args[0].equalsIgnoreCase("off")) if (args[0].equalsIgnoreCase("off"))
{ {
TotalFreedomMod.adminOnlyMode = false; TFM_ConfigEntry.ADMIN_ONLY_MODE.setBoolean(false);
TFM_Util.adminAction(sender.getName(), "Opening the server to all players.", true); TFM_Util.adminAction(sender.getName(), "Opening the server to all players.", true);
return true; return true;
} }
else if (args[0].equalsIgnoreCase("on")) else if (args[0].equalsIgnoreCase("on"))
{ {
TotalFreedomMod.adminOnlyMode = true; TFM_ConfigEntry.ADMIN_ONLY_MODE.setBoolean(true);
TFM_Util.adminAction(sender.getName(), "Closing the server to non-superadmins.", true); TFM_Util.adminAction(sender.getName(), "Closing the server to non-superadmins.", true);
for (Player p : server.getOnlinePlayers()) for (Player player : server.getOnlinePlayers())
{ {
if (!TFM_SuperadminList.isUserSuperadmin(p)) if (!TFM_SuperadminList.isUserSuperadmin(player))
{ {
p.kickPlayer("Server is now closed to non-superadmins."); player.kickPlayer("Server is now closed to non-superadmins.");
} }
} }
return true; return true;

View File

@ -0,0 +1,233 @@
package me.StevenLawson.TotalFreedomMod.Commands;
import me.StevenLawson.TotalFreedomMod.TFM_AdminWorld;
import me.StevenLawson.TotalFreedomMod.TFM_SuperadminList;
import me.StevenLawson.TotalFreedomMod.TFM_Util;
import me.StevenLawson.TotalFreedomMod.TotalFreedomMod;
import org.bukkit.World;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@CommandPermissions(level = AdminLevel.OP, source = SourceType.BOTH)
@CommandParameters(description = "Go to the AdminWorld.", usage = "/<command> [guest < list | purge | add <player> | remove <player> > | time <morning | noon | evening | night> | weather <off | on | storm>]")
public class Command_adminworld extends TFM_Command
{
private enum CommandMode
{
TELEPORT, GUEST, TIME, WEATHER
}
@Override
public boolean run(CommandSender sender, Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
{
CommandMode commandMode = null;
if (args.length == 0)
{
commandMode = CommandMode.TELEPORT;
}
else if (args.length >= 2)
{
if ("guest".equalsIgnoreCase(args[0]))
{
commandMode = CommandMode.GUEST;
}
else if ("time".equalsIgnoreCase(args[0]))
{
commandMode = CommandMode.TIME;
}
else if ("weather".equalsIgnoreCase(args[0]))
{
commandMode = CommandMode.WEATHER;
}
}
if (commandMode == null)
{
return false;
}
try
{
switch (commandMode)
{
case TELEPORT:
{
if (!(sender instanceof Player) || sender_p == null)
{
return true;
}
World adminWorld = null;
try
{
adminWorld = TFM_AdminWorld.getInstance().getWorld();
}
catch (Exception ex)
{
}
if (adminWorld == null || sender_p.getWorld() == adminWorld)
{
playerMsg("Going to the main world.");
sender_p.teleport(server.getWorlds().get(0).getSpawnLocation());
}
else
{
if (TFM_AdminWorld.getInstance().canAccessWorld(sender_p))
{
playerMsg("Going to the AdminWorld.");
TFM_AdminWorld.getInstance().sendToWorld(sender_p);
}
else
{
playerMsg("You don't have permission to access the AdminWorld.");
}
}
break;
}
case GUEST:
{
if (args.length == 2)
{
if ("list".equalsIgnoreCase(args[1]))
{
playerMsg("AdminWorld guest list: " + TFM_AdminWorld.getInstance().guestListToString());
}
else if ("purge".equalsIgnoreCase(args[1]))
{
assertCommandPerms(sender, sender_p);
TFM_AdminWorld.getInstance().purgeGuestList();
TFM_Util.adminAction(sender.getName(), "AdminWorld guest list purged.", false);
}
else
{
return false;
}
}
else if (args.length == 3)
{
assertCommandPerms(sender, sender_p);
if ("add".equalsIgnoreCase(args[1]))
{
Player player;
try
{
player = getPlayer(args[2]);
}
catch (PlayerNotFoundException ex)
{
sender.sendMessage(ex.getMessage());
return true;
}
if (player != null && TFM_AdminWorld.getInstance().addGuest(player, sender_p))
{
TFM_Util.adminAction(sender.getName(), "AdminWorld guest added: " + player.getName(), false);
}
else
{
playerMsg("Could not add player to guest list.");
}
}
else if (TFM_Util.isRemoveCommand(args[1]))
{
Player player = TFM_AdminWorld.getInstance().removeGuest(args[2]);
if (player != null)
{
TFM_Util.adminAction(sender.getName(), "AdminWorld guest removed: " + player.getName(), false);
}
else
{
playerMsg("Can't find guest entry for: " + args[2]);
}
}
else
{
return false;
}
}
break;
}
case TIME:
{
assertCommandPerms(sender, sender_p);
if (args.length == 2)
{
TFM_AdminWorld.TimeOfDay timeOfDay = TFM_AdminWorld.TimeOfDay.getByAlias(args[1]);
if (timeOfDay != null)
{
TFM_AdminWorld.getInstance().setTimeOfDay(timeOfDay);
playerMsg("AdminWorld time set to: " + timeOfDay.name());
}
else
{
playerMsg("Invalid time of day. Can be: sunrise, noon, sunset, midnight");
}
}
else
{
return false;
}
break;
}
case WEATHER:
{
assertCommandPerms(sender, sender_p);
if (args.length == 2)
{
TFM_AdminWorld.WeatherMode weatherMode = TFM_AdminWorld.WeatherMode.getByAlias(args[1]);
if (weatherMode != null)
{
TFM_AdminWorld.getInstance().setWeatherMode(weatherMode);
playerMsg("AdminWorld weather set to: " + weatherMode.name());
}
else
{
playerMsg("Invalid weather mode. Can be: off, rain, storm");
}
}
else
{
return false;
}
break;
}
default:
{
return false;
}
}
}
catch (PermissionDeniedException ex)
{
sender.sendMessage(ex.getMessage());
}
return true;
}
private void assertCommandPerms(CommandSender sender, Player sender_p) throws PermissionDeniedException
{
if (!(sender instanceof Player) || sender_p == null || !TFM_SuperadminList.isUserSuperadmin(sender))
{
throw new PermissionDeniedException(TotalFreedomMod.MSG_NO_PERMS);
}
}
private class PermissionDeniedException extends Exception
{
public PermissionDeniedException(String string)
{
super(string);
}
}
}

View File

@ -23,9 +23,9 @@ public class Command_blockcmd extends TFM_Command
{ {
TFM_Util.adminAction(sender.getName(), "Unblocking commands for all players", true); TFM_Util.adminAction(sender.getName(), "Unblocking commands for all players", true);
int counter = 0; int counter = 0;
for (Player p : server.getOnlinePlayers()) for (Player player : server.getOnlinePlayers())
{ {
TFM_PlayerData playerdata = TFM_PlayerData.getPlayerData(p); TFM_PlayerData playerdata = TFM_PlayerData.getPlayerData(player);
if (playerdata.allCommandsBlocked()) if (playerdata.allCommandsBlocked())
{ {
counter += 1; counter += 1;
@ -36,28 +36,28 @@ public class Command_blockcmd extends TFM_Command
return true; return true;
} }
Player p; Player player;
try try
{ {
p = getPlayer(args[0]); player = getPlayer(args[0]);
} }
catch (CantFindPlayerException ex) catch (PlayerNotFoundException ex)
{ {
playerMsg(ex.getMessage()); playerMsg(ex.getMessage());
return true; return true;
} }
if (TFM_SuperadminList.isUserSuperadmin(p)) if (TFM_SuperadminList.isUserSuperadmin(player))
{ {
playerMsg(p.getName() + " is a Superadmin, and cannot have their commands blocked."); playerMsg(player.getName() + " is a Superadmin, and cannot have their commands blocked.");
return true; return true;
} }
TFM_PlayerData playerdata = TFM_PlayerData.getPlayerData(p); TFM_PlayerData playerdata = TFM_PlayerData.getPlayerData(player);
playerdata.setCommandsBlocked(!playerdata.allCommandsBlocked()); playerdata.setCommandsBlocked(!playerdata.allCommandsBlocked());
TFM_Util.adminAction(sender.getName(), (playerdata.allCommandsBlocked() ? "B" : "Unb") + "locking all commands for " + p.getName(), true); TFM_Util.adminAction(sender.getName(), (playerdata.allCommandsBlocked() ? "B" : "Unb") + "locking all commands for " + player.getName(), true);
playerMsg((playerdata.allCommandsBlocked() ? "B" : "Unb") + "locked all commands."); playerMsg((playerdata.allCommandsBlocked() ? "B" : "Unb") + "locked all commands.");
return true; return true;

View File

@ -21,26 +21,38 @@ public class Command_cage extends TFM_Command
return false; return false;
} }
Player p; if (TFM_Util.isStopCommand(args[0]) && sender instanceof Player)
{
TFM_Util.adminAction(sender.getName(), "Uncaging " + sender.getName(), true);
TFM_PlayerData playerdata = TFM_PlayerData.getPlayerData(sender_p);
playerdata.setCaged(false);
playerdata.regenerateHistory();
playerdata.clearHistory();
return true;
}
Player player;
try try
{ {
p = getPlayer(args[0]); player = getPlayer(args[0]);
} }
catch (CantFindPlayerException ex) catch (PlayerNotFoundException ex)
{ {
sender.sendMessage(ex.getMessage()); sender.sendMessage(ex.getMessage());
return true; return true;
} }
TFM_PlayerData playerdata = TFM_PlayerData.getPlayerData(p); TFM_PlayerData playerdata = TFM_PlayerData.getPlayerData(player);
Material outerMaterial = Material.GLASS;
Material innerMaterial = Material.AIR;
Material cage_material_outer = Material.GLASS;
Material cage_material_inner = Material.AIR;
if (args.length >= 2) if (args.length >= 2)
{ {
if (TFM_Util.isStopCommand(args[1])) if (TFM_Util.isStopCommand(args[1]))
{ {
TFM_Util.adminAction(sender.getName(), "Uncaging " + p.getName() + ".", true); TFM_Util.adminAction(sender.getName(), "Uncaging " + player.getName(), true);
playerdata.setCaged(false); playerdata.setCaged(false);
playerdata.regenerateHistory(); playerdata.regenerateHistory();
@ -50,10 +62,13 @@ public class Command_cage extends TFM_Command
} }
else else
{ {
cage_material_outer = Material.matchMaterial(args[1]); if ("darth".equalsIgnoreCase(args[1]))
if (cage_material_outer == null)
{ {
cage_material_outer = Material.GLASS; outerMaterial = Material.SKULL;
}
else if (Material.matchMaterial(args[1]) != null)
{
outerMaterial = Material.matchMaterial(args[1]);
} }
} }
} }
@ -62,25 +77,32 @@ public class Command_cage extends TFM_Command
{ {
if (args[2].equalsIgnoreCase("water")) if (args[2].equalsIgnoreCase("water"))
{ {
cage_material_inner = Material.STATIONARY_WATER; innerMaterial = Material.STATIONARY_WATER;
} }
else if (args[2].equalsIgnoreCase("lava")) else if (args[2].equalsIgnoreCase("lava"))
{ {
cage_material_inner = Material.STATIONARY_LAVA; innerMaterial = Material.STATIONARY_LAVA;
} }
} }
Location target_pos = p.getLocation().add(0, 1, 0); Location targetPos = player.getLocation().clone().add(0, 1, 0);
playerdata.setCaged(true, target_pos, cage_material_outer, cage_material_inner); playerdata.setCaged(true, targetPos, outerMaterial, innerMaterial);
playerdata.regenerateHistory(); playerdata.regenerateHistory();
playerdata.clearHistory(); playerdata.clearHistory();
TFM_Util.buildHistory(target_pos, 2, playerdata); TFM_Util.buildHistory(targetPos, 2, playerdata);
TFM_Util.generateCube(target_pos, 2, playerdata.getCageMaterial(TFM_PlayerData.CageLayer.OUTER)); TFM_Util.generateHollowCube(targetPos, 2, outerMaterial);
TFM_Util.generateCube(target_pos, 1, playerdata.getCageMaterial(TFM_PlayerData.CageLayer.INNER)); TFM_Util.generateCube(targetPos, 1, innerMaterial);
p.setGameMode(GameMode.SURVIVAL); player.setGameMode(GameMode.SURVIVAL);
TFM_Util.adminAction(sender.getName(), "Caging " + p.getName() + ".", true); if (outerMaterial != Material.SKULL)
{
TFM_Util.adminAction(sender.getName(), "Caging " + player.getName(), true);
}
else
{
TFM_Util.adminAction(sender.getName(), "Caging " + player.getName() + " in PURE_DARTH", true);
}
return true; return true;
} }

View File

@ -28,14 +28,14 @@ public class Command_cake extends TFM_Command
output.append(ChatColor.COLOR_CHAR).append(color_code).append(word).append(" "); output.append(ChatColor.COLOR_CHAR).append(color_code).append(word).append(" ");
} }
for (Player p : server.getOnlinePlayers()) for (Player player : server.getOnlinePlayers())
{ {
ItemStack heldItem = new ItemStack(Material.CAKE, 1); ItemStack heldItem = new ItemStack(Material.CAKE, 1);
p.getInventory().setItem(p.getInventory().firstEmpty(), heldItem); player.getInventory().setItem(player.getInventory().firstEmpty(), heldItem);
p.awardAchievement(Achievement.MINE_WOOD); player.awardAchievement(Achievement.MINE_WOOD);
p.awardAchievement(Achievement.BUILD_WORKBENCH); player.awardAchievement(Achievement.BUILD_WORKBENCH);
p.awardAchievement(Achievement.BUILD_HOE); player.awardAchievement(Achievement.BUILD_HOE);
p.awardAchievement(Achievement.BAKE_CAKE); player.awardAchievement(Achievement.BAKE_CAKE);
} }
TFM_Util.bcastMsg(output.toString()); TFM_Util.bcastMsg(output.toString());

View File

@ -13,15 +13,15 @@ public class Command_cartsit extends TFM_Command
@Override @Override
public boolean run(CommandSender sender, Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) public boolean run(CommandSender sender, Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
{ {
Player target_player = sender_p; Player targetPlayer = sender_p;
if (args.length == 1) if (args.length == 1)
{ {
try try
{ {
target_player = getPlayer(args[0]); targetPlayer = getPlayer(args[0]);
} }
catch (CantFindPlayerException ex) catch (PlayerNotFoundException ex)
{ {
sender.sendMessage(ex.getMessage()); sender.sendMessage(ex.getMessage());
return true; return true;
@ -30,26 +30,26 @@ public class Command_cartsit extends TFM_Command
if (senderIsConsole) if (senderIsConsole)
{ {
if (target_player == null) if (targetPlayer == null)
{ {
sender.sendMessage("When used from the console, you must define a target player: /cartsit <player>"); sender.sendMessage("When used from the console, you must define a target player: /cartsit <player>");
return true; return true;
} }
} }
else if (target_player != sender_p && !TFM_SuperadminList.isUserSuperadmin(sender)) else if (targetPlayer != sender_p && !TFM_SuperadminList.isUserSuperadmin(sender))
{ {
sender.sendMessage("Only superadmins can select another player as a /cartsit target."); sender.sendMessage("Only superadmins can select another player as a /cartsit target.");
return true; return true;
} }
if (target_player.isInsideVehicle()) if (targetPlayer.isInsideVehicle())
{ {
target_player.getVehicle().eject(); targetPlayer.getVehicle().eject();
} }
else else
{ {
Minecart nearest_cart = null; Minecart nearest_cart = null;
for (Minecart cart : target_player.getWorld().getEntitiesByClass(Minecart.class)) for (Minecart cart : targetPlayer.getWorld().getEntitiesByClass(Minecart.class))
{ {
if (cart.isEmpty()) if (cart.isEmpty())
{ {
@ -59,7 +59,7 @@ public class Command_cartsit extends TFM_Command
} }
else else
{ {
if (cart.getLocation().distanceSquared(target_player.getLocation()) < nearest_cart.getLocation().distanceSquared(target_player.getLocation())) if (cart.getLocation().distanceSquared(targetPlayer.getLocation()) < nearest_cart.getLocation().distanceSquared(targetPlayer.getLocation()))
{ {
nearest_cart = cart; nearest_cart = cart;
} }
@ -69,7 +69,7 @@ public class Command_cartsit extends TFM_Command
if (nearest_cart != null) if (nearest_cart != null)
{ {
nearest_cart.setPassenger(target_player); nearest_cart.setPassenger(targetPlayer);
} }
else else
{ {

View File

@ -21,11 +21,11 @@ public class Command_cmdlist extends TFM_Command
{ {
List<String> commands = new ArrayList<String>(); List<String> commands = new ArrayList<String>();
for (Plugin p : server.getPluginManager().getPlugins()) for (Plugin targetPlugin : server.getPluginManager().getPlugins())
{ {
try try
{ {
PluginDescriptionFile desc = p.getDescription(); PluginDescriptionFile desc = targetPlugin.getDescription();
Map<String, Map<String, Object>> map = (Map<String, Map<String, Object>>) desc.getCommands(); Map<String, Map<String, Object>> map = (Map<String, Map<String, Object>>) desc.getCommands();
if (map != null) if (map != null)

View File

@ -24,10 +24,10 @@ public class Command_creative extends TFM_Command
} }
} }
Player p; Player player;
if (args.length == 0) if (args.length == 0)
{ {
p = sender_p; player = sender_p;
} }
else else
{ {
@ -39,9 +39,9 @@ public class Command_creative extends TFM_Command
return true; return true;
} }
for (Player player : server.getOnlinePlayers()) for (Player targetPlayer : server.getOnlinePlayers())
{ {
player.setGameMode(GameMode.CREATIVE); targetPlayer.setGameMode(GameMode.CREATIVE);
} }
TFM_Util.adminAction(sender.getName(), "Changing everyone's gamemode to creative", false); TFM_Util.adminAction(sender.getName(), "Changing everyone's gamemode to creative", false);
@ -56,9 +56,9 @@ public class Command_creative extends TFM_Command
try try
{ {
p = getPlayer(args[0]); player = getPlayer(args[0]);
} }
catch (CantFindPlayerException ex) catch (PlayerNotFoundException ex)
{ {
sender.sendMessage(ex.getMessage()); sender.sendMessage(ex.getMessage());
return true; return true;
@ -66,9 +66,9 @@ public class Command_creative extends TFM_Command
} }
playerMsg("Setting " + p.getName() + " to game mode 'Creative'."); playerMsg("Setting " + player.getName() + " to game mode 'Creative'.");
playerMsg(p, sender.getName() + " set your game mode to 'Creative'."); playerMsg(player, sender.getName() + " set your game mode to 'Creative'.");
p.setGameMode(GameMode.CREATIVE); player.setGameMode(GameMode.CREATIVE);
return true; return true;
} }

View File

@ -18,7 +18,7 @@ public class Command_deafen extends TFM_Command
@Override @Override
public boolean run(CommandSender sender, Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) public boolean run(CommandSender sender, Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
{ {
for (final Player p : server.getOnlinePlayers()) for (final Player player : server.getOnlinePlayers())
{ {
for (double percent = 0.0; percent <= 1.0; percent += (1.0 / STEPS)) for (double percent = 0.0; percent <= 1.0; percent += (1.0 / STEPS))
{ {
@ -29,7 +29,7 @@ public class Command_deafen extends TFM_Command
@Override @Override
public void run() public void run()
{ {
p.playSound(randomOffset(p.getLocation(), 5.0), Sound.values()[random.nextInt(Sound.values().length)], 100.0f, pitch); player.playSound(randomOffset(player.getLocation(), 5.0), Sound.values()[random.nextInt(Sound.values().length)], 100.0f, pitch);
} }
}.runTaskLater(plugin, Math.round(20.0 * percent * 2.0)); }.runTaskLater(plugin, Math.round(20.0 * percent * 2.0));
} }

View File

@ -18,25 +18,25 @@ public class Command_deop extends TFM_Command
return false; return false;
} }
OfflinePlayer p = null; OfflinePlayer player = null;
for (Player onlinePlayer : server.getOnlinePlayers()) for (Player onlinePlayer : server.getOnlinePlayers())
{ {
if (args[0].equalsIgnoreCase(onlinePlayer.getName())) if (args[0].equalsIgnoreCase(onlinePlayer.getName()))
{ {
p = onlinePlayer; player = onlinePlayer;
} }
} }
// if the player is not online // if the player is not online
if (p == null) if (player == null)
{ {
p = server.getOfflinePlayer(args[0]); player = server.getOfflinePlayer(args[0]);
} }
TFM_Util.adminAction(sender.getName(), "De-opping " + p.getName(), false); TFM_Util.adminAction(sender.getName(), "De-opping " + player.getName(), false);
p.setOp(false); player.setOp(false);
return true; return true;
} }

View File

@ -15,10 +15,10 @@ public class Command_deopall extends TFM_Command
{ {
TFM_Util.adminAction(sender.getName(), "De-opping all players on the server", true); TFM_Util.adminAction(sender.getName(), "De-opping all players on the server", true);
for (Player p : server.getOnlinePlayers()) for (Player player : server.getOnlinePlayers())
{ {
p.setOp(false); player.setOp(false);
p.sendMessage(TotalFreedomMod.YOU_ARE_NOT_OP); player.sendMessage(TotalFreedomMod.YOU_ARE_NOT_OP);
} }
return true; return true;

View File

@ -74,13 +74,13 @@ public class Command_dispfill extends TFM_Command
{ {
for (int z_offset = -radius; z_offset <= radius; z_offset++) for (int z_offset = -radius; z_offset <= radius; z_offset++)
{ {
Block target_block = center_block.getRelative(x_offset, y_offset, z_offset); Block targetBlock = center_block.getRelative(x_offset, y_offset, z_offset);
if (target_block.getLocation().distanceSquared(center_location) < (radius * radius)) if (targetBlock.getLocation().distanceSquared(center_location) < (radius * radius))
{ {
if (target_block.getType().equals(Material.DISPENSER)) if (targetBlock.getType().equals(Material.DISPENSER))
{ {
sender.sendMessage("Filling dispenser @ " + TFM_Util.formatLocation(target_block.getLocation())); sender.sendMessage("Filling dispenser @ " + TFM_Util.formatLocation(targetBlock.getLocation()));
setDispenserContents(target_block, items_array); setDispenserContents(targetBlock, items_array);
affected++; affected++;
} }
} }
@ -98,9 +98,9 @@ public class Command_dispfill extends TFM_Command
return true; return true;
} }
private static void setDispenserContents(Block target_block, ItemStack[] items) private static void setDispenserContents(Block targetBlock, ItemStack[] items)
{ {
Dispenser dispenser = (Dispenser) target_block.getState(); Dispenser dispenser = (Dispenser) targetBlock.getState();
Inventory disp_inv = dispenser.getInventory(); Inventory disp_inv = dispenser.getInventory();
disp_inv.clear(); disp_inv.clear();
disp_inv.addItem(items); disp_inv.addItem(items);

View File

@ -22,53 +22,53 @@ public class Command_doom extends TFM_Command
return false; return false;
} }
final Player p; final Player player;
try try
{ {
p = getPlayer(args[0]); player = getPlayer(args[0]);
} }
catch (CantFindPlayerException ex) catch (PlayerNotFoundException ex)
{ {
sender.sendMessage(ex.getMessage()); sender.sendMessage(ex.getMessage());
return true; return true;
} }
TFM_Util.adminAction(sender.getName(), "Casting oblivion over " + p.getName(), true); TFM_Util.adminAction(sender.getName(), "Casting oblivion over " + player.getName(), true);
TFM_Util.bcastMsg(p.getName() + " will be completely obliviated!", ChatColor.RED); TFM_Util.bcastMsg(player.getName() + " will be completely obliviated!", ChatColor.RED);
final String IP = p.getAddress().getAddress().getHostAddress().trim(); final String IP = player.getAddress().getAddress().getHostAddress().trim();
// remove from superadmin // remove from superadmin
if (TFM_SuperadminList.isUserSuperadmin(p)) if (TFM_SuperadminList.isUserSuperadmin(player))
{ {
TFM_Util.adminAction(sender.getName(), "Removing " + p.getName() + " from the superadmin list.", true); TFM_Util.adminAction(sender.getName(), "Removing " + player.getName() + " from the superadmin list.", true);
TFM_SuperadminList.removeSuperadmin(p); TFM_SuperadminList.removeSuperadmin(player);
} }
// remove from whitelist // remove from whitelist
p.setWhitelisted(false); player.setWhitelisted(false);
// deop // deop
p.setOp(false); player.setOp(false);
// ban IP // ban IP
TFM_ServerInterface.banIP(IP, null, null, null); TFM_ServerInterface.banIP(IP, null, null, null);
// ban name // ban name
TFM_ServerInterface.banUsername(p.getName(), null, null, null); TFM_ServerInterface.banUsername(player.getName(), null, null, null);
// set gamemode to survival // set gamemode to survival
p.setGameMode(GameMode.SURVIVAL); player.setGameMode(GameMode.SURVIVAL);
// clear inventory // clear inventory
p.closeInventory(); player.closeInventory();
p.getInventory().clear(); player.getInventory().clear();
// ignite player // ignite player
p.setFireTicks(10000); player.setFireTicks(10000);
// generate explosion // generate explosion
p.getWorld().createExplosion(p.getLocation(), 4F); player.getWorld().createExplosion(player.getLocation(), 4F);
new BukkitRunnable() new BukkitRunnable()
{ {
@ -76,10 +76,10 @@ public class Command_doom extends TFM_Command
public void run() public void run()
{ {
// strike lightning // strike lightning
p.getWorld().strikeLightning(p.getLocation()); player.getWorld().strikeLightning(player.getLocation());
// kill (if not done already) // kill (if not done already)
p.setHealth(0.0); player.setHealth(0.0);
} }
}.runTaskLater(plugin, 20L * 2L); }.runTaskLater(plugin, 20L * 2L);
@ -89,13 +89,13 @@ public class Command_doom extends TFM_Command
public void run() public void run()
{ {
// message // message
TFM_Util.adminAction(sender.getName(), "Banning " + p.getName() + ", IP: " + IP, true); TFM_Util.adminAction(sender.getName(), "Banning " + player.getName() + ", IP: " + IP, true);
// generate explosion // generate explosion
p.getWorld().createExplosion(p.getLocation(), 4F); player.getWorld().createExplosion(player.getLocation(), 4F);
// kick player // kick player
p.kickPlayer(ChatColor.RED + "FUCKOFF, and get your shit together!"); player.kickPlayer(ChatColor.RED + "FUCKOFF, and get your shit together!");
} }
}.runTaskLater(plugin, 20L * 3L); }.runTaskLater(plugin, 20L * 3L);

View File

@ -1,7 +1,7 @@
package me.StevenLawson.TotalFreedomMod.Commands; package me.StevenLawson.TotalFreedomMod.Commands;
import me.StevenLawson.TotalFreedomMod.TFM_ConfigEntry;
import me.StevenLawson.TotalFreedomMod.TFM_Util; import me.StevenLawson.TotalFreedomMod.TFM_Util;
import me.StevenLawson.TotalFreedomMod.TotalFreedomMod;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -18,7 +18,7 @@ public class Command_droptoggle extends TFM_Command
return false; return false;
} }
TFM_Util.adminAction(sender.getName(), TFM_Util.adminAction(sender.getName(),
((TotalFreedomMod.autoEntityWipe = !args[0].equalsIgnoreCase("off")) ? "Enabled" : "Disabled") (TFM_ConfigEntry.AUTO_ENTITY_WIPE.setBoolean(!args[0].equalsIgnoreCase("off")) ? "Enabled" : "Disabled")
+ " automatic entity wiping.", false); + " automatic entity wiping.", false);
return true; return true;
} }

View File

@ -0,0 +1,42 @@
package me.StevenLawson.TotalFreedomMod.Commands;
import me.StevenLawson.TotalFreedomMod.TFM_Util;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.PluginManager;
@CommandPermissions(level = AdminLevel.SUPER, source = SourceType.BOTH)
@CommandParameters(description = "Shortcut to enable/disable DisguiseCraft.", usage = "/<command>")
public class Command_dtoggle extends TFM_Command
{
@Override
public boolean run(CommandSender sender, Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
{
Plugin disguiseCraft = server.getPluginManager().getPlugin("DisguiseCraft");
if (disguiseCraft != null)
{
PluginManager pluginManager = plugin.getServer().getPluginManager();
boolean enabled = disguiseCraft.isEnabled();
if (enabled)
{
pluginManager.disablePlugin(disguiseCraft);
}
else
{
pluginManager.enablePlugin(disguiseCraft);
}
TFM_Util.adminAction(sender.getName(), (!enabled ? "Enabled" : "Disabled") + " DisguiseCraft.", true);
}
else
{
sender.sendMessage("DisguiseCraft is not installed on this server.");
}
return true;
}
}

View File

@ -1,6 +1,7 @@
package me.StevenLawson.TotalFreedomMod.Commands; package me.StevenLawson.TotalFreedomMod.Commands;
import me.StevenLawson.TotalFreedomMod.TFM_Log; import me.StevenLawson.TotalFreedomMod.TFM_Log;
import me.StevenLawson.TotalFreedomMod.TFM_Util;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.enchantments.Enchantment; import org.bukkit.enchantments.Enchantment;
@ -121,7 +122,7 @@ public class Command_enchant extends TFM_Command
playerMsg("Can't use this enchantment on held item."); playerMsg("Can't use this enchantment on held item.");
} }
} }
else if (args[0].equalsIgnoreCase("remove")) else if (TFM_Util.isRemoveCommand(args[0]))
{ {
itemInHand.removeEnchantment(ench); itemInHand.removeEnchantment(ench);

View File

@ -38,16 +38,16 @@ public class Command_expel extends TFM_Command
} }
Location sender_pos = sender_p.getLocation(); Location sender_pos = sender_p.getLocation();
for (Player p : sender_pos.getWorld().getPlayers()) for (Player player : sender_pos.getWorld().getPlayers())
{ {
if (!p.equals(sender_p)) if (!player.equals(sender_p))
{ {
Location target_pos = p.getLocation(); Location targetPos = player.getLocation();
boolean in_range = false; boolean in_range = false;
try try
{ {
in_range = target_pos.distanceSquared(sender_pos) < (radius * radius); in_range = targetPos.distanceSquared(sender_pos) < (radius * radius);
} }
catch (IllegalArgumentException ex) catch (IllegalArgumentException ex)
{ {
@ -55,8 +55,8 @@ public class Command_expel extends TFM_Command
if (in_range) if (in_range)
{ {
p.setVelocity(target_pos.clone().subtract(sender_pos).toVector().normalize().multiply(strength)); player.setVelocity(targetPos.clone().subtract(sender_pos).toVector().normalize().multiply(strength));
playerMsg("Pushing " + p.getName() + "."); playerMsg("Pushing " + player.getName() + ".");
} }
} }
} }

View File

@ -1,7 +1,7 @@
package me.StevenLawson.TotalFreedomMod.Commands; package me.StevenLawson.TotalFreedomMod.Commands;
import me.StevenLawson.TotalFreedomMod.TFM_ConfigEntry;
import me.StevenLawson.TotalFreedomMod.TFM_Util; import me.StevenLawson.TotalFreedomMod.TFM_Util;
import me.StevenLawson.TotalFreedomMod.TotalFreedomMod;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -22,7 +22,7 @@ public class Command_explosives extends TFM_Command
{ {
try try
{ {
TotalFreedomMod.explosiveRadius = Math.max(1.0, Math.min(30.0, Double.parseDouble(args[1]))); TFM_ConfigEntry.EXPLOSIVE_RADIUS.setDouble(Math.max(1.0, Math.min(30.0, Double.parseDouble(args[1]))));
} }
catch (NumberFormatException nfex) catch (NumberFormatException nfex)
{ {
@ -33,12 +33,12 @@ public class Command_explosives extends TFM_Command
if (args[0].equalsIgnoreCase("on")) if (args[0].equalsIgnoreCase("on"))
{ {
TotalFreedomMod.allowExplosions = true; TFM_ConfigEntry.ALLOW_EXPLOSIONS.setBoolean(true);
playerMsg("Explosives are now enabled, radius set to " + TotalFreedomMod.explosiveRadius + " blocks."); playerMsg("Explosives are now enabled, radius set to " + TFM_ConfigEntry.EXPLOSIVE_RADIUS.getDouble() + " blocks.");
} }
else else
{ {
TotalFreedomMod.allowExplosions = false; TFM_ConfigEntry.ALLOW_EXPLOSIONS.setBoolean(false);
playerMsg("Explosives are now disabled."); playerMsg("Explosives are now disabled.");
} }

View File

@ -0,0 +1,37 @@
package me.StevenLawson.TotalFreedomMod.Commands;
import me.StevenLawson.TotalFreedomMod.TFM_UserList;
import me.StevenLawson.TotalFreedomMod.TotalFreedomMod;
import org.apache.commons.lang.StringUtils;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@CommandPermissions(level = AdminLevel.SUPER, source = SourceType.BOTH)
@CommandParameters(description = "Shows all IPs registered to a player", usage = "/<command> <player>")
public class Command_findip extends TFM_Command
{
@Override
public boolean run(CommandSender sender, Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
{
if (args.length != 1)
{
return false;
}
final Player player;
try
{
player = getPlayer(args[0]);
}
catch (PlayerNotFoundException ex)
{
playerMsg(ex.getMessage());
return true;
}
playerMsg("Player IPs: " + StringUtils.join(TFM_UserList.getInstance(TotalFreedomMod.plugin).getEntry(player).getIpAddresses(), ", "));
return true;
}
}

View File

@ -1,6 +1,6 @@
package me.StevenLawson.TotalFreedomMod.Commands; package me.StevenLawson.TotalFreedomMod.Commands;
import me.StevenLawson.TotalFreedomMod.TotalFreedomMod; import me.StevenLawson.TotalFreedomMod.TFM_ConfigEntry;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -19,12 +19,12 @@ public class Command_fireplace extends TFM_Command
if (args[0].equalsIgnoreCase("on")) if (args[0].equalsIgnoreCase("on"))
{ {
TotalFreedomMod.allowFirePlace = true; TFM_ConfigEntry.ALLOW_FIRE_PLACE.setBoolean(true);
playerMsg("Fire placement is now enabled."); playerMsg("Fire placement is now enabled.");
} }
else else
{ {
TotalFreedomMod.allowFirePlace = false; TFM_ConfigEntry.ALLOW_FIRE_PLACE.setBoolean(false);
playerMsg("Fire placement is now disabled."); playerMsg("Fire placement is now disabled.");
} }

View File

@ -1,7 +1,7 @@
package me.StevenLawson.TotalFreedomMod.Commands; package me.StevenLawson.TotalFreedomMod.Commands;
import me.StevenLawson.TotalFreedomMod.TFM_ConfigEntry;
import me.StevenLawson.TotalFreedomMod.TFM_GameRuleHandler; import me.StevenLawson.TotalFreedomMod.TFM_GameRuleHandler;
import me.StevenLawson.TotalFreedomMod.TotalFreedomMod;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -18,9 +18,13 @@ public class Command_firespread extends TFM_Command
return false; return false;
} }
playerMsg("Fire spread is now " + ((TotalFreedomMod.allowFireSpread = !args[0].equalsIgnoreCase("off")) ? "enabled" : "disabled") + "."); boolean fireSpread = !args[0].equalsIgnoreCase("off");
TFM_GameRuleHandler.setGameRule(TFM_GameRuleHandler.TFM_GameRule.DO_FIRE_TICK, TotalFreedomMod.allowFireSpread); TFM_ConfigEntry.ALLOW_FIRE_SPREAD.setBoolean(fireSpread);
playerMsg("Fire spread is now " + (fireSpread ? "enabled" : "disabled") + ".");
TFM_GameRuleHandler.setGameRule(TFM_GameRuleHandler.TFM_GameRule.DO_FIRE_TICK, fireSpread);
return true; return true;
} }

View File

@ -1,21 +1,21 @@
package me.StevenLawson.TotalFreedomMod.Commands; package me.StevenLawson.TotalFreedomMod.Commands;
import me.StevenLawson.TotalFreedomMod.TFM_Util; import me.StevenLawson.TotalFreedomMod.TFM_ConfigEntry;
import me.StevenLawson.TotalFreedomMod.TotalFreedomMod; import me.StevenLawson.TotalFreedomMod.TFM_Flatlands;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@CommandPermissions(level = AdminLevel.ALL, source = SourceType.BOTH) @CommandPermissions(level = AdminLevel.ALL, source = SourceType.ONLY_IN_GAME)
@CommandParameters(description = "Goto the flatlands.", usage = "/<command>") @CommandParameters(description = "Goto the flatlands.", usage = "/<command>")
public class Command_flatlands extends TFM_Command public class Command_flatlands extends TFM_Command
{ {
@Override @Override
public boolean run(CommandSender sender, Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) public boolean run(CommandSender sender, Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
{ {
if (TotalFreedomMod.generateFlatlands) if (TFM_ConfigEntry.GENERATE_FLATLANDS.getBoolean())
{ {
TFM_Util.gotoWorld(sender, "flatlands"); TFM_Flatlands.getInstance().sendToWorld(sender_p);
} }
else else
{ {

View File

@ -1,6 +1,6 @@
package me.StevenLawson.TotalFreedomMod.Commands; package me.StevenLawson.TotalFreedomMod.Commands;
import me.StevenLawson.TotalFreedomMod.TotalFreedomMod; import me.StevenLawson.TotalFreedomMod.TFM_ConfigEntry;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -17,16 +17,7 @@ public class Command_fluidspread extends TFM_Command
return false; return false;
} }
if (args[0].equalsIgnoreCase("on")) playerMsg("Lava and water spread is now " + (TFM_ConfigEntry.ALLOW_FLIUD_SPREAD.setBoolean(!args[0].equalsIgnoreCase("off")) ? "enabled" : "disabled") + ".");
{
TotalFreedomMod.allowFliudSpread = true;
playerMsg("Lava and water spread is now enabled.");
}
else
{
TotalFreedomMod.allowFliudSpread = false;
playerMsg("Lava and water spread is now disabled.");
}
return true; return true;
} }

View File

@ -62,9 +62,9 @@ public class Command_fr extends TFM_Command
TotalFreedomMod.freezePurgeTask.cancel(); TotalFreedomMod.freezePurgeTask.cancel();
} }
for (Player p : server.getOnlinePlayers()) for (Player player : server.getOnlinePlayers())
{ {
TFM_PlayerData playerdata = TFM_PlayerData.getPlayerData(p); TFM_PlayerData playerdata = TFM_PlayerData.getPlayerData(player);
playerdata.setFrozen(false); playerdata.setFrozen(false);
} }
@ -72,22 +72,22 @@ public class Command_fr extends TFM_Command
} }
else else
{ {
Player p; Player player;
try try
{ {
p = getPlayer(args[0]); player = getPlayer(args[0]);
} }
catch (CantFindPlayerException ex) catch (PlayerNotFoundException ex)
{ {
playerMsg(ex.getMessage(), ChatColor.RED); playerMsg(ex.getMessage(), ChatColor.RED);
return true; return true;
} }
TFM_PlayerData playerdata = TFM_PlayerData.getPlayerData(p); TFM_PlayerData playerdata = TFM_PlayerData.getPlayerData(player);
playerdata.setFrozen(!playerdata.isFrozen()); playerdata.setFrozen(!playerdata.isFrozen());
playerMsg(p.getName() + " has been " + (playerdata.isFrozen() ? "frozen" : "unfrozen") + "."); playerMsg(player.getName() + " has been " + (playerdata.isFrozen() ? "frozen" : "unfrozen") + ".");
playerMsg(p, "You have been " + (playerdata.isFrozen() ? "frozen" : "unfrozen") + ".", ChatColor.AQUA); playerMsg(player, "You have been " + (playerdata.isFrozen() ? "frozen" : "unfrozen") + ".", ChatColor.AQUA);
} }
} }

View File

@ -30,77 +30,77 @@ public class Command_gadmin extends TFM_Command
playerMsg("[ Real Name ] : [ Display Name ] - Hash:"); playerMsg("[ Real Name ] : [ Display Name ] - Hash:");
} }
for (Player p : server.getOnlinePlayers()) for (Player player : server.getOnlinePlayers())
{ {
String hash = p.getUniqueId().toString().substring(0, 4); String hash = player.getUniqueId().toString().substring(0, 4);
if (mode.equals("list")) if (mode.equals("list"))
{ {
sender.sendMessage(ChatColor.GRAY + String.format("[ %s ] : [ %s ] - %s", sender.sendMessage(ChatColor.GRAY + String.format("[ %s ] : [ %s ] - %s",
p.getName(), player.getName(),
ChatColor.stripColor(p.getDisplayName()), ChatColor.stripColor(player.getDisplayName()),
hash)); hash));
} }
else if (hash.equalsIgnoreCase(args[1])) else if (hash.equalsIgnoreCase(args[1]))
{ {
if (mode.equals("kick")) if (mode.equals("kick"))
{ {
TFM_Util.adminAction(sender.getName(), String.format("Kicking: %s.", p.getName()), false); TFM_Util.adminAction(sender.getName(), String.format("Kicking: %s.", player.getName()), false);
p.kickPlayer("Kicked by Administrator"); player.kickPlayer("Kicked by Administrator");
} }
else if (mode.equals("nameban")) else if (mode.equals("nameban"))
{ {
TFM_ServerInterface.banUsername(p.getName(), null, null, null); TFM_ServerInterface.banUsername(player.getName(), null, null, null);
TFM_Util.adminAction(sender.getName(), String.format("Banning Name: %s.", p.getName()), true); TFM_Util.adminAction(sender.getName(), String.format("Banning Name: %s.", player.getName()), true);
p.kickPlayer("Username banned by Administrator."); player.kickPlayer("Username banned by Administrator.");
} }
else if (mode.equals("ipban")) else if (mode.equals("ipban"))
{ {
String user_ip = p.getAddress().getAddress().getHostAddress(); String user_ip = player.getAddress().getAddress().getHostAddress();
String[] ip_parts = user_ip.split("\\."); String[] ip_parts = user_ip.split("\\.");
if (ip_parts.length == 4) if (ip_parts.length == 4)
{ {
user_ip = String.format("%s.%s.*.*", ip_parts[0], ip_parts[1]); user_ip = String.format("%s.%s.*.*", ip_parts[0], ip_parts[1]);
} }
TFM_Util.adminAction(sender.getName(), String.format("Banning IP: %s.", p.getName(), user_ip), true); TFM_Util.adminAction(sender.getName(), String.format("Banning IP: %s.", player.getName(), user_ip), true);
TFM_ServerInterface.banIP(user_ip, null, null, null); TFM_ServerInterface.banIP(user_ip, null, null, null);
p.kickPlayer("IP address banned by Administrator."); player.kickPlayer("IP address banned by Administrator.");
} }
else if (mode.equals("ban")) else if (mode.equals("ban"))
{ {
String user_ip = p.getAddress().getAddress().getHostAddress(); String user_ip = player.getAddress().getAddress().getHostAddress();
String[] ip_parts = user_ip.split("\\."); String[] ip_parts = user_ip.split("\\.");
if (ip_parts.length == 4) if (ip_parts.length == 4)
{ {
user_ip = String.format("%s.%s.*.*", ip_parts[0], ip_parts[1]); user_ip = String.format("%s.%s.*.*", ip_parts[0], ip_parts[1]);
} }
TFM_Util.adminAction(sender.getName(), String.format("Banning Name: %s, IP: %s.", p.getName(), user_ip), true); TFM_Util.adminAction(sender.getName(), String.format("Banning Name: %s, IP: %s.", player.getName(), user_ip), true);
TFM_ServerInterface.banIP(user_ip, null, null, null); TFM_ServerInterface.banIP(user_ip, null, null, null);
TFM_ServerInterface.banUsername(p.getName(), null, null, null); TFM_ServerInterface.banUsername(player.getName(), null, null, null);
p.kickPlayer("IP and username banned by Administrator."); player.kickPlayer("IP and username banned by Administrator.");
} }
else if (mode.equals("op")) else if (mode.equals("op"))
{ {
TFM_Util.adminAction(sender.getName(), String.format("Opping %s.", p.getName()), false); TFM_Util.adminAction(sender.getName(), String.format("Opping %s.", player.getName()), false);
p.setOp(false); player.setOp(false);
p.sendMessage(TotalFreedomMod.YOU_ARE_OP); player.sendMessage(TotalFreedomMod.YOU_ARE_OP);
} }
else if (mode.equals("deop")) else if (mode.equals("deop"))
{ {
TFM_Util.adminAction(sender.getName(), String.format("Deopping %s.", p.getName()), false); TFM_Util.adminAction(sender.getName(), String.format("Deopping %s.", player.getName()), false);
p.setOp(false); player.setOp(false);
p.sendMessage(TotalFreedomMod.YOU_ARE_NOT_OP); player.sendMessage(TotalFreedomMod.YOU_ARE_NOT_OP);
} }
else if (mode.equals("ci")) else if (mode.equals("ci"))
{ {
p.getInventory().clear(); player.getInventory().clear();
} }
else if (mode.equals("fr")) else if (mode.equals("fr"))
{ {
TFM_PlayerData playerdata = TFM_PlayerData.getPlayerData(p); TFM_PlayerData playerdata = TFM_PlayerData.getPlayerData(player);
playerdata.setFrozen(!playerdata.isFrozen()); playerdata.setFrozen(!playerdata.isFrozen());
playerMsg(p.getName() + " has been " + (playerdata.isFrozen() ? "frozen" : "unfrozen") + "."); playerMsg(player.getName() + " has been " + (playerdata.isFrozen() ? "frozen" : "unfrozen") + ".");
p.sendMessage(ChatColor.AQUA + "You have been " + (playerdata.isFrozen() ? "frozen" : "unfrozen") + "."); player.sendMessage(ChatColor.AQUA + "You have been " + (playerdata.isFrozen() ? "frozen" : "unfrozen") + ".");
} }
return true; return true;

View File

@ -17,12 +17,12 @@ public class Command_gcmd extends TFM_Command
return false; return false;
} }
Player p; Player player;
try try
{ {
p = getPlayer(args[0]); player = getPlayer(args[0]);
} }
catch (CantFindPlayerException ex) catch (PlayerNotFoundException ex)
{ {
sender.sendMessage(ex.getMessage()); sender.sendMessage(ex.getMessage());
return true; return true;
@ -46,8 +46,8 @@ public class Command_gcmd extends TFM_Command
try try
{ {
playerMsg("Sending command as " + p.getName() + ": " + outcommand); playerMsg("Sending command as " + player.getName() + ": " + outcommand);
if (server.dispatchCommand(p, outcommand)) if (server.dispatchCommand(player, outcommand))
{ {
playerMsg("Command sent."); playerMsg("Command sent.");
} }

View File

@ -51,12 +51,12 @@ public class Command_glist extends TFM_Command
try try
{ {
Player p = getPlayer(args[1]); Player player = getPlayer(args[1]);
username = p.getName(); username = player.getName();
ip_addresses.add(p.getAddress().getAddress().getHostAddress()); ip_addresses.add(player.getAddress().getAddress().getHostAddress());
} }
catch (CantFindPlayerException ex) catch (PlayerNotFoundException ex)
{ {
TFM_UserListEntry entry = TFM_UserList.getInstance(plugin).getEntry(args[1]); TFM_UserListEntry entry = TFM_UserList.getInstance(plugin).getEntry(args[1]);
@ -75,11 +75,11 @@ public class Command_glist extends TFM_Command
{ {
TFM_Util.adminAction(sender.getName(), "Banning " + username + " and IPs: " + StringUtils.join(ip_addresses, ","), true); TFM_Util.adminAction(sender.getName(), "Banning " + username + " and IPs: " + StringUtils.join(ip_addresses, ","), true);
Player p = server.getPlayerExact(username); Player player = server.getPlayerExact(username);
if (p != null) if (player != null)
{ {
TFM_ServerInterface.banUsername(p.getName(), null, null, null); TFM_ServerInterface.banUsername(player.getName(), null, null, null);
p.kickPlayer("You have been banned by " + sender.getName() + "\n If you think you have been banned wrongly, appeal here: http://www.totalfreedom.boards.net"); player.kickPlayer("You have been banned by " + sender.getName() + "\n If you think you have been banned wrongly, appeal here: http://www.totalfreedom.boards.net");
} }
else else
{ {

View File

@ -25,12 +25,12 @@ public class Command_gtfo extends TFM_Command
return false; return false;
} }
Player p; Player player;
try try
{ {
p = getPlayer(args[0]); player = getPlayer(args[0]);
} }
catch (CantFindPlayerException ex) catch (PlayerNotFoundException ex)
{ {
playerMsg(ex.getMessage(), ChatColor.RED); playerMsg(ex.getMessage(), ChatColor.RED);
return true; return true;
@ -42,49 +42,49 @@ public class Command_gtfo extends TFM_Command
ban_reason = StringUtils.join(ArrayUtils.subarray(args, 1, args.length), " "); ban_reason = StringUtils.join(ArrayUtils.subarray(args, 1, args.length), " ");
} }
TFM_Util.bcastMsg(p.getName() + " has been a VERY naughty, naughty boy.", ChatColor.RED); TFM_Util.bcastMsg(player.getName() + " has been a VERY naughty, naughty boy.", ChatColor.RED);
// Undo WorldEdits: // Undo WorldEdits:
TFM_WorldEditBridge.getInstance().undo(p, 15); TFM_WorldEditBridge.getInstance().undo(player, 15);
// rollback // rollback
TFM_RollbackManager.rollback(p.getName()); TFM_RollbackManager.rollback(player.getName());
// deop // deop
p.setOp(false); player.setOp(false);
// set gamemode to survival: // set gamemode to survival:
p.setGameMode(GameMode.SURVIVAL); player.setGameMode(GameMode.SURVIVAL);
// clear inventory: // clear inventory:
p.getInventory().clear(); player.getInventory().clear();
// strike with lightning effect: // strike with lightning effect:
final Location target_pos = p.getLocation(); final Location targetPos = player.getLocation();
for (int x = -1; x <= 1; x++) for (int x = -1; x <= 1; x++)
{ {
for (int z = -1; z <= 1; z++) for (int z = -1; z <= 1; z++)
{ {
final Location strike_pos = new Location(target_pos.getWorld(), target_pos.getBlockX() + x, target_pos.getBlockY(), target_pos.getBlockZ() + z); final Location strike_pos = new Location(targetPos.getWorld(), targetPos.getBlockX() + x, targetPos.getBlockY(), targetPos.getBlockZ() + z);
target_pos.getWorld().strikeLightning(strike_pos); targetPos.getWorld().strikeLightning(strike_pos);
} }
} }
// ban IP address: // ban IP address:
String user_ip = p.getAddress().getAddress().getHostAddress(); String user_ip = player.getAddress().getAddress().getHostAddress();
String[] ip_parts = user_ip.split("\\."); String[] ip_parts = user_ip.split("\\.");
if (ip_parts.length == 4) if (ip_parts.length == 4)
{ {
user_ip = String.format("%s.%s.*.*", ip_parts[0], ip_parts[1]); user_ip = String.format("%s.%s.*.*", ip_parts[0], ip_parts[1]);
} }
TFM_Util.bcastMsg(String.format("Banning: %s, IP: %s.", p.getName(), user_ip), ChatColor.RED); TFM_Util.bcastMsg(String.format("Banning: %s, IP: %s.", player.getName(), user_ip), ChatColor.RED);
TFM_ServerInterface.banIP(user_ip, ban_reason, null, null); TFM_ServerInterface.banIP(user_ip, ban_reason, null, null);
// ban username: // ban username:
TFM_ServerInterface.banUsername(p.getName(), ban_reason, null, null); TFM_ServerInterface.banUsername(player.getName(), ban_reason, null, null);
// kick Player: // kick Player:
p.kickPlayer(ChatColor.RED + "GTFO" + (ban_reason != null ? ("\nReason: " + ChatColor.YELLOW + ban_reason) : "")); player.kickPlayer(ChatColor.RED + "GTFO" + (ban_reason != null ? ("\nReason: " + ChatColor.YELLOW + ban_reason) : ""));
return true; return true;
} }

View File

@ -23,11 +23,11 @@ public class Command_halt extends TFM_Command
{ {
TFM_Util.adminAction(sender.getName(), "Halting all non-superadmins.", true); TFM_Util.adminAction(sender.getName(), "Halting all non-superadmins.", true);
int counter = 0; int counter = 0;
for (Player p : server.getOnlinePlayers()) for (Player player : server.getOnlinePlayers())
{ {
if (!TFM_SuperadminList.isUserSuperadmin(p)) if (!TFM_SuperadminList.isUserSuperadmin(player))
{ {
TFM_PlayerData.getPlayerData(p).setHalted(true); TFM_PlayerData.getPlayerData(player).setHalted(true);
counter++; counter++;
} }
} }
@ -39,10 +39,10 @@ public class Command_halt extends TFM_Command
{ {
TFM_Util.adminAction(sender.getName(), "Unhalting all players.", true); TFM_Util.adminAction(sender.getName(), "Unhalting all players.", true);
int counter = 0; int counter = 0;
for (Player p : server.getOnlinePlayers()) for (Player player : server.getOnlinePlayers())
{ {
TFM_PlayerData playerdata = TFM_PlayerData.getPlayerData(p); TFM_PlayerData playerdata = TFM_PlayerData.getPlayerData(player);
if (TFM_PlayerData.getPlayerData(p).isHalted()) if (TFM_PlayerData.getPlayerData(player).isHalted())
{ {
playerdata.setHalted(false); playerdata.setHalted(false);
counter++; counter++;
@ -76,28 +76,28 @@ public class Command_halt extends TFM_Command
return true; return true;
} }
Player p; Player player;
try try
{ {
p = getPlayer(args[0]); player = getPlayer(args[0]);
} }
catch (CantFindPlayerException ex) catch (PlayerNotFoundException ex)
{ {
sender.sendMessage(ex.getMessage()); sender.sendMessage(ex.getMessage());
return true; return true;
} }
TFM_PlayerData playerdata = TFM_PlayerData.getPlayerData(p); TFM_PlayerData playerdata = TFM_PlayerData.getPlayerData(player);
if (!playerdata.isHalted()) if (!playerdata.isHalted())
{ {
TFM_Util.adminAction(sender.getName(), "Halting " + p.getName(), true); TFM_Util.adminAction(sender.getName(), "Halting " + player.getName(), true);
playerdata.setHalted(true); playerdata.setHalted(true);
return true; return true;
} }
else else
{ {
TFM_Util.adminAction(sender.getName(), "Unhalting " + p.getName(), true); TFM_Util.adminAction(sender.getName(), "Unhalting " + player.getName(), true);
playerdata.setHalted(false); playerdata.setHalted(false);
return true; return true;
} }

View File

@ -1,62 +1,100 @@
package me.StevenLawson.TotalFreedomMod.Commands; package me.StevenLawson.TotalFreedomMod.Commands;
import java.text.DecimalFormat; import java.text.DecimalFormat;
import java.util.concurrent.atomic.AtomicInteger;
import me.StevenLawson.TotalFreedomMod.TFM_Log; import me.StevenLawson.TotalFreedomMod.TFM_Log;
import me.StevenLawson.TotalFreedomMod.TFM_TickMeter;
import me.StevenLawson.TotalFreedomMod.TotalFreedomMod; import me.StevenLawson.TotalFreedomMod.TotalFreedomMod;
import org.apache.commons.lang.exception.ExceptionUtils; import org.apache.commons.lang.math.DoubleRange;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.scheduler.BukkitTask;
@CommandPermissions(level = AdminLevel.SUPER, source = SourceType.BOTH) @CommandPermissions(level = AdminLevel.SUPER, source = SourceType.BOTH)
@CommandParameters(description = "View ticks-per-second", usage = "/<command>") @CommandParameters(description = "View ticks-per-second", usage = "/<command>")
public class Command_health extends TFM_Command public class Command_health extends TFM_Command
{ {
private static final int BYTES_PER_MB = 1024 * 1024;
private static final DoubleRange TPS_RANGE = new DoubleRange(20.0 - 0.1, 20.0 + 0.1);
@Override @Override
public boolean run(final CommandSender sender, Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) public boolean run(final CommandSender sender, Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
{ {
Runtime runtime = Runtime.getRuntime();
long usedMem = runtime.totalMemory() - runtime.freeMemory();
playerMsg("Reserved Memory: " + (double) runtime.totalMemory() / (double) BYTES_PER_MB + "mb");
playerMsg("Used Memory: " + new DecimalFormat("#").format((double) usedMem / (double) BYTES_PER_MB) + "mb (" + new DecimalFormat("#").format(((double) usedMem / (double) runtime.totalMemory()) * 100.0) + "%)");
playerMsg("Max Memory: " + (double) runtime.maxMemory() / (double) BYTES_PER_MB + "mb");
playerMsg("Calculating ticks per second, please wait...");
new BukkitRunnable() new BukkitRunnable()
{ {
@Override @Override
public void run() public void run()
{ {
try try
{ {
final TFM_TickMeter meter = new TFM_TickMeter(plugin); TFM_TickMeter tickMeter = new TFM_TickMeter(plugin);
meter.startTicking(); tickMeter.startTicking();
Thread.sleep(1000); // per second Thread.sleep(2500);
meter.stopTicking(); final double ticksPerSecond = tickMeter.stopTicking();
final Runtime runtime = Runtime.getRuntime();
final int mb = 1048576; // 1024 * 1024
final float usedMem = runtime.totalMemory() - runtime.freeMemory();
new BukkitRunnable() new BukkitRunnable()
{ {
@Override @Override
public void run() { public void run()
playerMsg("Reserved Memory: " + runtime.totalMemory() / mb + "mb"); {
playerMsg("Used Memory: " + new DecimalFormat("#").format(usedMem / mb) + "mb (" + new DecimalFormat("#").format((usedMem / runtime.totalMemory()) * 100) + "%)"); playerMsg("Ticks per second: " + (TPS_RANGE.containsDouble(ticksPerSecond) ? ChatColor.GREEN : ChatColor.RED) + ticksPerSecond);
playerMsg("Max Memory: " + runtime.maxMemory() / mb + "mb");
playerMsg("Ticks per second: " + (meter.getTicks() == 20 ? ChatColor.GREEN : ChatColor.RED) + meter.getTicks());
} }
}.runTask(TotalFreedomMod.plugin); }.runTask(plugin);
} }
catch (Exception iex) catch (Exception ex)
{ {
TFM_Log.warning("Exception in TFM_TickMeter: Thread was interupted in sleeping process."); TFM_Log.severe(ex);
TFM_Log.warning(ExceptionUtils.getStackTrace(iex));
} }
} }
}.runTaskAsynchronously(plugin);
}.runTaskAsynchronously(TotalFreedomMod.plugin);
return true; return true;
} }
private class TFM_TickMeter
{
private final AtomicInteger ticks = new AtomicInteger();
private final TotalFreedomMod plugin;
private long startTime;
private BukkitTask task;
public TFM_TickMeter(TotalFreedomMod plugin)
{
this.plugin = plugin;
}
public void startTicking()
{
startTime = System.currentTimeMillis();
ticks.set(0);
task = new BukkitRunnable()
{
@Override
public void run()
{
ticks.incrementAndGet();
}
}.runTaskTimer(plugin, 0L, 1L);
}
public double stopTicking()
{
task.cancel();
long elapsed = System.currentTimeMillis() - startTime;
int tickCount = ticks.get();
return (double) tickCount / ((double) elapsed / 1000.0);
}
}
} }

View File

@ -33,14 +33,14 @@ public class Command_invis extends TFM_Command
List<String> players = new ArrayList<String>(); List<String> players = new ArrayList<String>();
int smites = 0; int smites = 0;
for (Player p : server.getOnlinePlayers()) for (Player player : server.getOnlinePlayers())
{ {
if (p.hasPotionEffect(PotionEffectType.INVISIBILITY)) if (player.hasPotionEffect(PotionEffectType.INVISIBILITY))
{ {
players.add(p.getName()); players.add(player.getName());
if (smite && !TFM_SuperadminList.isUserSuperadmin(p)) if (smite && !TFM_SuperadminList.isUserSuperadmin(player))
{ {
Command_smite.smite(p); Command_smite.smite(player);
smites++; smites++;
} }
} }

View File

@ -0,0 +1,94 @@
package me.StevenLawson.TotalFreedomMod.Commands;
import me.StevenLawson.TotalFreedomMod.TFM_Jumppads;
import me.StevenLawson.TotalFreedomMod.TFM_Util;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@CommandPermissions(level = AdminLevel.SUPER, source = SourceType.BOTH)
@CommandParameters(description = "Manage jumppads", usage = "/<command> <on | off | info |sideways <on | off> | strength <strength (1-10)>>", aliases = "launchpads,jp")
public class Command_jumppads extends TFM_Command
{
@Override
public boolean run(CommandSender sender, Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
{
if (args.length == 0 || args.length > 2)
{
return false;
}
if (args.length == 1)
{
if (args[0].equalsIgnoreCase("info"))
{
playerMsg("Jumppads: " + (TFM_Jumppads.getInstance().getMode().isOn() ? "Enabled" : "Disabled"), ChatColor.BLUE);
playerMsg("Sideways: " + (TFM_Jumppads.getInstance().getMode() == TFM_Jumppads.JumpPadMode.NORMAL_AND_SIDEWAYS ? "Enabled" : "Disabled"), ChatColor.BLUE);
playerMsg("Strength: " + (TFM_Jumppads.getInstance().getStrength() * 10 - 1), ChatColor.BLUE);
return true;
}
if (TFM_Util.isStopCommand(args[0]))
{
TFM_Util.adminAction(sender.getName(), "Disabling Jumppads", false);
TFM_Jumppads.getInstance().setMode(TFM_Jumppads.JumpPadMode.OFF);
}
else
{
TFM_Util.adminAction(sender.getName(), "Enabling Jumppads", false);
TFM_Jumppads.getInstance().setMode(TFM_Jumppads.JumpPadMode.MADGEEK);
}
}
else
{
if (TFM_Jumppads.getInstance().getMode() == TFM_Jumppads.JumpPadMode.OFF)
{
playerMsg("Jumppads are currently disabled, please enable them before changing jumppads settings.");
return true;
}
if (args[0].equalsIgnoreCase("sideways"))
{
if (TFM_Util.isStopCommand(args[1]))
{
TFM_Util.adminAction(sender.getName(), "Setting Jumppads mode to: Madgeek", false);
TFM_Jumppads.getInstance().setMode(TFM_Jumppads.JumpPadMode.MADGEEK);
}
else
{
TFM_Util.adminAction(sender.getName(), "Setting Jumppads mode to: Normal and Sideways", false);
TFM_Jumppads.getInstance().setMode(TFM_Jumppads.JumpPadMode.NORMAL_AND_SIDEWAYS);
}
}
else if (args[0].equalsIgnoreCase("strength"))
{
final float strength;
try
{
strength = Float.parseFloat(args[1]);
}
catch (NumberFormatException ex)
{
playerMsg("Invalid Strength");
return true;
}
if (strength > 10 || strength < 1)
{
playerMsg("Invalid Strength: The strength may be 1 through 10.");
return true;
}
TFM_Util.adminAction(sender.getName(), "Setting Jumppads strength to: " + String.valueOf(strength), false);
TFM_Jumppads.getInstance().setStrength((strength / 10) + 0.1F);
}
else
{
return false;
}
}
return true;
}
}

View File

@ -16,11 +16,11 @@ public class Command_kicknoob extends TFM_Command
{ {
TFM_Util.adminAction(sender.getName(), "Disconnecting all non-superadmins.", true); TFM_Util.adminAction(sender.getName(), "Disconnecting all non-superadmins.", true);
for (Player p : server.getOnlinePlayers()) for (Player player : server.getOnlinePlayers())
{ {
if (!TFM_SuperadminList.isUserSuperadmin(p)) if (!TFM_SuperadminList.isUserSuperadmin(player))
{ {
p.kickPlayer(ChatColor.RED + "Disconnected by admin."); player.kickPlayer(ChatColor.RED + "Disconnected by admin.");
} }
} }

View File

@ -1,7 +1,7 @@
package me.StevenLawson.TotalFreedomMod.Commands; package me.StevenLawson.TotalFreedomMod.Commands;
import me.StevenLawson.TotalFreedomMod.TFM_ConfigEntry;
import me.StevenLawson.TotalFreedomMod.TFM_LandmineData; import me.StevenLawson.TotalFreedomMod.TFM_LandmineData;
import me.StevenLawson.TotalFreedomMod.TotalFreedomMod;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.block.Block; import org.bukkit.block.Block;
@ -17,11 +17,11 @@ public class Command_landmine extends TFM_Command
@Override @Override
public boolean run(CommandSender sender, Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) public boolean run(CommandSender sender, Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
{ {
if (!TotalFreedomMod.landminesEnabled) if (!TFM_ConfigEntry.LANDMINES_ENABLED.getBoolean())
{ {
playerMsg("The landmine is currently disabled.", ChatColor.GREEN); playerMsg("The landmine is currently disabled.", ChatColor.GREEN);
} }
else if (!TotalFreedomMod.allowExplosions) else if (!TFM_ConfigEntry.ALLOW_EXPLOSIONS.getBoolean())
{ {
playerMsg("Explosions are currently disabled.", ChatColor.GREEN); playerMsg("Explosions are currently disabled.", ChatColor.GREEN);
} }

View File

@ -18,18 +18,18 @@ public class Command_lastcmd extends TFM_Command
return false; return false;
} }
Player p; Player player;
try try
{ {
p = getPlayer(args[0]); player = getPlayer(args[0]);
} }
catch (CantFindPlayerException ex) catch (PlayerNotFoundException ex)
{ {
playerMsg(ex.getMessage(), ChatColor.RED); playerMsg(ex.getMessage(), ChatColor.RED);
return true; return true;
} }
TFM_PlayerData playerdata = TFM_PlayerData.getPlayerData(p); TFM_PlayerData playerdata = TFM_PlayerData.getPlayerData(player);
if (playerdata != null) if (playerdata != null)
{ {
@ -38,7 +38,7 @@ public class Command_lastcmd extends TFM_Command
{ {
last_command = "(none)"; last_command = "(none)";
} }
playerMsg(p.getName() + " - Last Command: " + last_command, ChatColor.GRAY); playerMsg(player.getName() + " - Last Command: " + last_command, ChatColor.GRAY);
} }
return true; return true;

View File

@ -1,6 +1,6 @@
package me.StevenLawson.TotalFreedomMod.Commands; package me.StevenLawson.TotalFreedomMod.Commands;
import me.StevenLawson.TotalFreedomMod.TotalFreedomMod; import me.StevenLawson.TotalFreedomMod.TFM_ConfigEntry;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -17,16 +17,7 @@ public class Command_lavadmg extends TFM_Command
return false; return false;
} }
if (args[0].equalsIgnoreCase("on")) playerMsg("Lava damage is now " + (TFM_ConfigEntry.ALLOW_LAVA_DAMAGE.setBoolean(!args[0].equalsIgnoreCase("off")) ? "enabled" : "disabled") + ".");
{
TotalFreedomMod.allowLavaDamage = true;
playerMsg("Lava damage is now enabled.");
}
else
{
TotalFreedomMod.allowLavaDamage = false;
playerMsg("Lava damage is now disabled.");
}
return true; return true;
} }

View File

@ -1,6 +1,6 @@
package me.StevenLawson.TotalFreedomMod.Commands; package me.StevenLawson.TotalFreedomMod.Commands;
import me.StevenLawson.TotalFreedomMod.TotalFreedomMod; import me.StevenLawson.TotalFreedomMod.TFM_ConfigEntry;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -17,16 +17,7 @@ public class Command_lavaplace extends TFM_Command
return false; return false;
} }
if (args[0].equalsIgnoreCase("on")) playerMsg("Lava placement is now " + (TFM_ConfigEntry.ALLOW_LAVA_PLACE.setBoolean(!args[0].equalsIgnoreCase("off")) ? "enabled" : "disabled") + ".");
{
TotalFreedomMod.allowLavaPlace = true;
playerMsg("Lava placement is now enabled.");
}
else
{
TotalFreedomMod.allowLavaPlace = false;
playerMsg("Lava placement is now disabled.");
}
return true; return true;
} }

View File

@ -25,9 +25,9 @@ public class Command_list extends TFM_Command
if (TFM_Util.isFromHostConsole(sender.getName())) if (TFM_Util.isFromHostConsole(sender.getName()))
{ {
List<String> player_names = new ArrayList<String>(); List<String> player_names = new ArrayList<String>();
for (Player p : server.getOnlinePlayers()) for (Player player : server.getOnlinePlayers())
{ {
player_names.add(p.getName()); player_names.add(player.getName());
} }
playerMsg("There are " + player_names.size() + "/" + server.getMaxPlayers() + " players online:\n" + StringUtils.join(player_names, ", "), ChatColor.WHITE); playerMsg("There are " + player_names.size() + "/" + server.getMaxPlayers() + " players online:\n" + StringUtils.join(player_names, ", "), ChatColor.WHITE);
return true; return true;
@ -50,9 +50,9 @@ public class Command_list extends TFM_Command
onlineStats.append(ChatColor.BLUE).append(" players online."); onlineStats.append(ChatColor.BLUE).append(" players online.");
List<String> player_names = new ArrayList<String>(); List<String> player_names = new ArrayList<String>();
for (Player p : server.getOnlinePlayers()) for (Player player : server.getOnlinePlayers())
{ {
boolean userSuperadmin = TFM_SuperadminList.isUserSuperadmin(p); boolean userSuperadmin = TFM_SuperadminList.isUserSuperadmin(player);
if (listFilter == ListFilter.SHOW_ADMINS && !userSuperadmin) if (listFilter == ListFilter.SHOW_ADMINS && !userSuperadmin)
{ {
@ -63,7 +63,7 @@ public class Command_list extends TFM_Command
if (userSuperadmin) if (userSuperadmin)
{ {
if (TFM_SuperadminList.isSeniorAdmin(p)) if (TFM_SuperadminList.isSeniorAdmin(player))
{ {
prefix = (ChatColor.LIGHT_PURPLE + "[SrA]"); prefix = (ChatColor.LIGHT_PURPLE + "[SrA]");
} }
@ -72,25 +72,25 @@ public class Command_list extends TFM_Command
prefix = (ChatColor.GOLD + "[SA]"); prefix = (ChatColor.GOLD + "[SA]");
} }
if (TFM_Util.DEVELOPERS.contains(p.getName())) if (TFM_Util.DEVELOPERS.contains(player.getName()))
{ {
prefix = (ChatColor.DARK_PURPLE + "[Dev]"); prefix = (ChatColor.DARK_PURPLE + "[Dev]");
} }
if (p.getName().equals("markbyron")) if (player.getName().equals("markbyron"))
{ {
prefix = (ChatColor.BLUE + "[Owner]"); prefix = (ChatColor.BLUE + "[Owner]");
} }
} }
else else
{ {
if (p.isOp()) if (player.isOp())
{ {
prefix = (ChatColor.RED + "[OP]"); prefix = (ChatColor.RED + "[OP]");
} }
} }
player_names.add(prefix + p.getName() + ChatColor.WHITE); player_names.add(prefix + player.getName() + ChatColor.WHITE);
} }
onlineUsers.append("Connected ").append(listFilter == ListFilter.SHOW_ADMINS ? "admins" : "players").append(": ").append(StringUtils.join(player_names, ", ")); onlineUsers.append("Connected ").append(listFilter == ListFilter.SHOW_ADMINS ? "admins" : "players").append(": ").append(StringUtils.join(player_names, ", "));

View File

@ -0,0 +1,34 @@
package me.StevenLawson.TotalFreedomMod.Commands;
import me.StevenLawson.TotalFreedomMod.TFM_Util;
import me.StevenLawson.TotalFreedomMod.TotalFreedomMod;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@CommandPermissions(level = AdminLevel.SUPER, source = SourceType.BOTH)
@CommandParameters(description = "Prevents new players from joining the server", usage = "/<command> <on | off>")
public class Command_lockdown extends TFM_Command
{
@Override
public boolean run(CommandSender sender, Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
{
if (args.length != 1)
{
return false;
}
if (TFM_Util.isStopCommand(args[0]))
{
TFM_Util.adminAction(sender.getName(), "De-activating server lockdown", true);
TotalFreedomMod.lockdownEnabled = false;
}
else
{
TFM_Util.adminAction(sender.getName(), "Activating server lockdown", true);
TotalFreedomMod.lockdownEnabled = true;
}
return true;
}
}

View File

@ -21,18 +21,18 @@ public class Command_lockup extends TFM_Command
{ {
TFM_Util.adminAction(sender.getName(), "Locking up all players", true); TFM_Util.adminAction(sender.getName(), "Locking up all players", true);
for (Player p : server.getOnlinePlayers()) for (Player player : server.getOnlinePlayers())
{ {
startLockup(p); startLockup(player);
} }
playerMsg("Locked up all players."); playerMsg("Locked up all players.");
} }
else if (args[0].equalsIgnoreCase("purge")) else if (args[0].equalsIgnoreCase("purge"))
{ {
TFM_Util.adminAction(sender.getName(), "Unlocking all players", true); TFM_Util.adminAction(sender.getName(), "Unlocking all players", true);
for (Player p : server.getOnlinePlayers()) for (Player player : server.getOnlinePlayers())
{ {
cancelLockup(p); cancelLockup(player);
} }
playerMsg("Unlocked all players."); playerMsg("Unlocked all players.");
@ -46,37 +46,37 @@ public class Command_lockup extends TFM_Command
{ {
if (args[1].equalsIgnoreCase("on")) if (args[1].equalsIgnoreCase("on"))
{ {
final Player p; final Player player;
try try
{ {
p = getPlayer(args[0]); player = getPlayer(args[0]);
} }
catch (CantFindPlayerException ex) catch (PlayerNotFoundException ex)
{ {
sender.sendMessage(ex.getMessage()); sender.sendMessage(ex.getMessage());
return true; return true;
} }
TFM_Util.adminAction(sender.getName(), "Locking up " + p.getName(), true); TFM_Util.adminAction(sender.getName(), "Locking up " + player.getName(), true);
startLockup(p); startLockup(player);
playerMsg("Locked up " + p.getName() + "."); playerMsg("Locked up " + player.getName() + ".");
} }
else if (TFM_Util.isStopCommand(args[1])) else if (TFM_Util.isStopCommand(args[1]))
{ {
final Player p; final Player player;
try try
{ {
p = getPlayer(args[0]); player = getPlayer(args[0]);
} }
catch (CantFindPlayerException ex) catch (PlayerNotFoundException ex)
{ {
sender.sendMessage(ex.getMessage()); sender.sendMessage(ex.getMessage());
return true; return true;
} }
TFM_Util.adminAction(sender.getName(), "Unlocking " + p.getName(), true); TFM_Util.adminAction(sender.getName(), "Unlocking " + player.getName(), true);
cancelLockup(p); cancelLockup(player);
playerMsg("Unlocked " + p.getName() + "."); playerMsg("Unlocked " + player.getName() + ".");
} }
else else
{ {
@ -101,14 +101,14 @@ public class Command_lockup extends TFM_Command
} }
} }
private void cancelLockup(final Player p) private void cancelLockup(final Player player)
{ {
cancelLockup(TFM_PlayerData.getPlayerData(p)); cancelLockup(TFM_PlayerData.getPlayerData(player));
} }
private void startLockup(final Player p) private void startLockup(final Player player)
{ {
final TFM_PlayerData playerdata = TFM_PlayerData.getPlayerData(p); final TFM_PlayerData playerdata = TFM_PlayerData.getPlayerData(player);
cancelLockup(playerdata); cancelLockup(playerdata);
@ -117,9 +117,9 @@ public class Command_lockup extends TFM_Command
@Override @Override
public void run() public void run()
{ {
if (p.isOnline()) if (player.isOnline())
{ {
p.openInventory(p.getInventory()); player.openInventory(player.getInventory());
} }
else else
{ {

View File

@ -9,6 +9,7 @@ import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Map.Entry; import java.util.Map.Entry;
import me.StevenLawson.TotalFreedomMod.TFM_ConfigEntry;
import me.StevenLawson.TotalFreedomMod.TFM_Log; import me.StevenLawson.TotalFreedomMod.TFM_Log;
import me.StevenLawson.TotalFreedomMod.TFM_Superadmin; import me.StevenLawson.TotalFreedomMod.TFM_Superadmin;
import me.StevenLawson.TotalFreedomMod.TFM_Util; import me.StevenLawson.TotalFreedomMod.TFM_Util;
@ -46,12 +47,10 @@ public class Command_logs extends TFM_Command
public static void updateLogsRegistration(final CommandSender sender, final String targetName, final String targetIP, final LogsRegistrationMode mode) public static void updateLogsRegistration(final CommandSender sender, final String targetName, final String targetIP, final LogsRegistrationMode mode)
{ {
if (TotalFreedomMod.logsRegisterURL == null || TotalFreedomMod.logsRegisterPassword == null) final String logsRegisterURL = TFM_ConfigEntry.LOGS_REGISTER_URL.getString();
{ final String logsRegisterPassword = TFM_ConfigEntry.LOGS_REGISTER_PASSWORD.getString();
return;
}
if (TotalFreedomMod.logsRegisterPassword.isEmpty() || TotalFreedomMod.logsRegisterURL.isEmpty()) if (logsRegisterURL == null || logsRegisterPassword == null || logsRegisterURL.isEmpty() || logsRegisterPassword.isEmpty())
{ {
return; return;
} }
@ -68,9 +67,9 @@ public class Command_logs extends TFM_Command
sender.sendMessage(ChatColor.YELLOW + "Connecting..."); sender.sendMessage(ChatColor.YELLOW + "Connecting...");
} }
URL url = new URLBuilder(TotalFreedomMod.logsRegisterURL) URL url = new URLBuilder(logsRegisterURL)
.addQueryParameter("mode", mode.toString()) .addQueryParameter("mode", mode.toString())
.addQueryParameter("password", TotalFreedomMod.logsRegisterPassword) .addQueryParameter("password", logsRegisterPassword)
.addQueryParameter("name", targetName) .addQueryParameter("name", targetName)
.addQueryParameter("ip", targetIP) .addQueryParameter("ip", targetIP)
.getURL(); .getURL();

View File

@ -1,7 +1,7 @@
package me.StevenLawson.TotalFreedomMod.Commands; package me.StevenLawson.TotalFreedomMod.Commands;
import me.StevenLawson.TotalFreedomMod.TFM_ConfigEntry;
import me.StevenLawson.TotalFreedomMod.TFM_GameRuleHandler; import me.StevenLawson.TotalFreedomMod.TFM_GameRuleHandler;
import me.StevenLawson.TotalFreedomMod.TotalFreedomMod;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -20,27 +20,27 @@ public class Command_moblimiter extends TFM_Command
if (args[0].equalsIgnoreCase("on")) if (args[0].equalsIgnoreCase("on"))
{ {
TotalFreedomMod.mobLimiterEnabled = true; TFM_ConfigEntry.MOB_LIMITER_ENABLED.setBoolean(true);
} }
else if (args[0].equalsIgnoreCase("off")) else if (args[0].equalsIgnoreCase("off"))
{ {
TotalFreedomMod.mobLimiterEnabled = false; TFM_ConfigEntry.MOB_LIMITER_ENABLED.setBoolean(false);
} }
else if (args[0].equalsIgnoreCase("dragon")) else if (args[0].equalsIgnoreCase("dragon"))
{ {
TotalFreedomMod.mobLimiterDisableDragon = !TotalFreedomMod.mobLimiterDisableDragon; TFM_ConfigEntry.MOB_LIMITER_DISABLE_DRAGON.setBoolean(!TFM_ConfigEntry.MOB_LIMITER_DISABLE_DRAGON.getBoolean());
} }
else if (args[0].equalsIgnoreCase("giant")) else if (args[0].equalsIgnoreCase("giant"))
{ {
TotalFreedomMod.mobLimiterDisableGiant = !TotalFreedomMod.mobLimiterDisableGiant; TFM_ConfigEntry.MOB_LIMITER_DISABLE_GIANT.setBoolean(!TFM_ConfigEntry.MOB_LIMITER_DISABLE_GIANT.getBoolean());
} }
else if (args[0].equalsIgnoreCase("slime")) else if (args[0].equalsIgnoreCase("slime"))
{ {
TotalFreedomMod.mobLimiterDisableSlime = !TotalFreedomMod.mobLimiterDisableSlime; TFM_ConfigEntry.MOB_LIMITER_DISABLE_SLIME.setBoolean(!TFM_ConfigEntry.MOB_LIMITER_DISABLE_SLIME.getBoolean());
} }
else if (args[0].equalsIgnoreCase("ghast")) else if (args[0].equalsIgnoreCase("ghast"))
{ {
TotalFreedomMod.mobLimiterDisableGhast = !TotalFreedomMod.mobLimiterDisableGhast; TFM_ConfigEntry.MOB_LIMITER_DISABLE_GHAST.setBoolean(!TFM_ConfigEntry.MOB_LIMITER_DISABLE_GHAST.getBoolean());
} }
else else
{ {
@ -53,7 +53,7 @@ public class Command_moblimiter extends TFM_Command
{ {
try try
{ {
TotalFreedomMod.mobLimiterMax = Math.max(0, Math.min(2000, Integer.parseInt(args[1]))); TFM_ConfigEntry.MOB_LIMITER_MAX.setInteger(Math.max(0, Math.min(2000, Integer.parseInt(args[1]))));
} }
catch (NumberFormatException nfex) catch (NumberFormatException nfex)
{ {
@ -61,21 +61,21 @@ public class Command_moblimiter extends TFM_Command
} }
} }
if (TotalFreedomMod.mobLimiterEnabled) if (TFM_ConfigEntry.MOB_LIMITER_ENABLED.getBoolean())
{ {
sender.sendMessage("Moblimiter enabled. Maximum mobcount set to: " + TotalFreedomMod.mobLimiterMax + "."); sender.sendMessage("Moblimiter enabled. Maximum mobcount set to: " + TFM_ConfigEntry.MOB_LIMITER_MAX.getInteger() + ".");
playerMsg("Dragon: " + (TotalFreedomMod.mobLimiterDisableDragon ? "disabled" : "enabled") + "."); playerMsg("Dragon: " + (TFM_ConfigEntry.MOB_LIMITER_DISABLE_DRAGON.getBoolean() ? "disabled" : "enabled") + ".");
playerMsg("Giant: " + (TotalFreedomMod.mobLimiterDisableGiant ? "disabled" : "enabled") + "."); playerMsg("Giant: " + (TFM_ConfigEntry.MOB_LIMITER_DISABLE_GIANT.getBoolean() ? "disabled" : "enabled") + ".");
playerMsg("Slime: " + (TotalFreedomMod.mobLimiterDisableSlime ? "disabled" : "enabled") + "."); playerMsg("Slime: " + (TFM_ConfigEntry.MOB_LIMITER_DISABLE_SLIME.getBoolean() ? "disabled" : "enabled") + ".");
playerMsg("Ghast: " + (TotalFreedomMod.mobLimiterDisableGhast ? "disabled" : "enabled") + "."); playerMsg("Ghast: " + (TFM_ConfigEntry.MOB_LIMITER_DISABLE_GHAST.getBoolean() ? "disabled" : "enabled") + ".");
} }
else else
{ {
playerMsg("Moblimiter is disabled. No mob restrictions are in effect."); playerMsg("Moblimiter is disabled. No mob restrictions are in effect.");
} }
TFM_GameRuleHandler.setGameRule(TFM_GameRuleHandler.TFM_GameRule.DO_MOB_SPAWNING, !TotalFreedomMod.mobLimiterEnabled); TFM_GameRuleHandler.setGameRule(TFM_GameRuleHandler.TFM_GameRule.DO_MOB_SPAWNING, !TFM_ConfigEntry.MOB_LIMITER_ENABLED.getBoolean());
return true; return true;
} }

View File

@ -1,7 +1,7 @@
package me.StevenLawson.TotalFreedomMod.Commands; package me.StevenLawson.TotalFreedomMod.Commands;
import me.StevenLawson.TotalFreedomMod.TFM_ConfigEntry;
import me.StevenLawson.TotalFreedomMod.TFM_PlayerData; import me.StevenLawson.TotalFreedomMod.TFM_PlayerData;
import me.StevenLawson.TotalFreedomMod.TotalFreedomMod;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.command.Command; import org.bukkit.command.Command;
@ -16,7 +16,7 @@ public class Command_mp44 extends TFM_Command
@Override @Override
public boolean run(CommandSender sender, Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) public boolean run(CommandSender sender, Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
{ {
if (!TotalFreedomMod.mp44Enabled) if (!TFM_ConfigEntry.MP44_ENABLED.getBoolean())
{ {
playerMsg("The mp44 is currently disabled.", ChatColor.GREEN); playerMsg("The mp44 is currently disabled.", ChatColor.GREEN);
return true; return true;

View File

@ -0,0 +1,125 @@
package me.StevenLawson.TotalFreedomMod.Commands;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.commons.lang.StringUtils;
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.OP, source = SourceType.BOTH)
@CommandParameters(description = "NickFilter: Prefix any command with this command to replace nicknames in that command with real names. Nicknames should be prefixed with a !.", usage = "/<command> <other_command> !<playernick>")
public class Command_nf extends TFM_Command
{
@Override
public boolean run(CommandSender sender, Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
{
boolean nickMatched = false;
final List<String> outputCommand = new ArrayList<String>();
if (args.length >= 1)
{
final List<String> argsList = Arrays.asList(args);
for (String arg : argsList)
{
Player player = null;
Matcher matcher = Pattern.compile("^!(.+)$").matcher(arg);
if (matcher.find())
{
String displayName = matcher.group(1);
try
{
player = getPlayerByDisplayName(displayName);
}
catch (PlayerNotFoundException ex)
{
}
if (player == null)
{
try
{
player = getPlayerByDisplayNameAlt(displayName);
}
catch (PlayerNotFoundException ex)
{
sender.sendMessage(ChatColor.GRAY + "Can't find player by nickname: " + displayName);
return true;
}
}
}
if (player == null)
{
outputCommand.add(arg);
}
else
{
nickMatched = true;
outputCommand.add(player.getName());
}
}
}
if (!nickMatched)
{
sender.sendMessage("No nicknames replaced in command.");
return true;
}
String newCommand = StringUtils.join(outputCommand, " ");
sender.sendMessage("Sending command: \"" + newCommand + "\".");
server.dispatchCommand(sender, newCommand);
return true;
}
private static Player getPlayerByDisplayName(String needle) throws PlayerNotFoundException
{
needle = needle.toLowerCase().trim();
Player[] onlinePlayers = Bukkit.getOnlinePlayers();
for (Player player : onlinePlayers)
{
if (player.getDisplayName().toLowerCase().trim().contains(needle))
{
return player;
}
}
throw new PlayerNotFoundException();
}
private static Player getPlayerByDisplayNameAlt(String needle) throws PlayerNotFoundException
{
needle = needle.toLowerCase().trim();
Integer minEditDistance = null;
Player minEditMatch = null;
Player[] onlinePlayers = Bukkit.getOnlinePlayers();
for (Player player : onlinePlayers)
{
String haystack = player.getDisplayName().toLowerCase().trim();
int editDistance = StringUtils.getLevenshteinDistance(needle, haystack.toLowerCase());
if (minEditDistance == null || minEditDistance.intValue() > editDistance)
{
minEditDistance = editDistance;
minEditMatch = player;
}
}
if (minEditMatch == null)
{
throw new PlayerNotFoundException();
}
return minEditMatch;
}
}

View File

@ -1,6 +1,6 @@
package me.StevenLawson.TotalFreedomMod.Commands; package me.StevenLawson.TotalFreedomMod.Commands;
import me.StevenLawson.TotalFreedomMod.TotalFreedomMod; import me.StevenLawson.TotalFreedomMod.TFM_ConfigEntry;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -21,7 +21,7 @@ public class Command_nonuke extends TFM_Command
{ {
try try
{ {
TotalFreedomMod.nukeMonitorRange = Math.max(1.0, Math.min(500.0, Double.parseDouble(args[1]))); TFM_ConfigEntry.NUKE_MONITOR_RANGE.setDouble(Math.max(1.0, Math.min(500.0, Double.parseDouble(args[1]))));
} }
catch (NumberFormatException nfex) catch (NumberFormatException nfex)
{ {
@ -32,7 +32,7 @@ public class Command_nonuke extends TFM_Command
{ {
try try
{ {
TotalFreedomMod.nukeMonitorCountBreak = Math.max(1, Math.min(500, Integer.parseInt(args[2]))); TFM_ConfigEntry.NUKE_MONITOR_COUNT_BREAK.setInteger(Math.max(1, Math.min(500, Integer.parseInt(args[2]))));
} }
catch (NumberFormatException nfex) catch (NumberFormatException nfex)
{ {
@ -41,14 +41,14 @@ public class Command_nonuke extends TFM_Command
if (args[0].equalsIgnoreCase("on")) if (args[0].equalsIgnoreCase("on"))
{ {
TotalFreedomMod.nukeMonitor = true; TFM_ConfigEntry.NUKE_MONITOR.setBoolean(true);
playerMsg("Nuke monitor is enabled."); playerMsg("Nuke monitor is enabled.");
playerMsg("Anti-freecam range is set to " + TotalFreedomMod.nukeMonitorRange + " blocks."); playerMsg("Anti-freecam range is set to " + TFM_ConfigEntry.NUKE_MONITOR_RANGE.getDouble() + " blocks.");
playerMsg("Block throttle rate is set to " + TotalFreedomMod.nukeMonitorCountBreak + " blocks destroyed per 5 seconds."); playerMsg("Block throttle rate is set to " + TFM_ConfigEntry.NUKE_MONITOR_COUNT_BREAK.getInteger() + " blocks destroyed per 5 seconds.");
} }
else else
{ {
TotalFreedomMod.nukeMonitor = false; TFM_ConfigEntry.NUKE_MONITOR.setBoolean(false);
playerMsg("Nuke monitor is disabled."); playerMsg("Nuke monitor is disabled.");
} }

View File

@ -43,9 +43,9 @@ public class Command_onlinemode extends TFM_Command
if (online_mode) if (online_mode)
{ {
for (Player p : server.getOnlinePlayers()) for (Player player : server.getOnlinePlayers())
{ {
p.kickPlayer("Server is activating \"online-mode=true\". Please reconnect."); player.kickPlayer("Server is activating \"online-mode=true\". Please reconnect.");
} }
} }

View File

@ -26,21 +26,21 @@ public class Command_op extends TFM_Command
return true; return true;
} }
OfflinePlayer p = null; OfflinePlayer player = null;
for (Player onlinePlayer : server.getOnlinePlayers()) for (Player onlinePlayer : server.getOnlinePlayers())
{ {
if (args[0].equalsIgnoreCase(onlinePlayer.getName())) if (args[0].equalsIgnoreCase(onlinePlayer.getName()))
{ {
p = onlinePlayer; player = onlinePlayer;
} }
} }
// if the player is not online // if the player is not online
if (p == null) if (player == null)
{ {
if (TFM_SuperadminList.isUserSuperadmin(sender) || senderIsConsole) if (TFM_SuperadminList.isUserSuperadmin(sender) || senderIsConsole)
{ {
p = server.getOfflinePlayer(args[0]); player = server.getOfflinePlayer(args[0]);
} }
else else
{ {
@ -50,8 +50,8 @@ public class Command_op extends TFM_Command
} }
} }
TFM_Util.adminAction(sender.getName(), "Opping " + p.getName(), false); TFM_Util.adminAction(sender.getName(), "Opping " + player.getName(), false);
p.setOp(true); player.setOp(true);
return true; return true;
} }

View File

@ -32,14 +32,14 @@ public class Command_opall extends TFM_Command
} }
} }
for (Player p : server.getOnlinePlayers()) for (Player player : server.getOnlinePlayers())
{ {
p.setOp(true); player.setOp(true);
p.sendMessage(TotalFreedomMod.YOU_ARE_OP); player.sendMessage(TotalFreedomMod.YOU_ARE_OP);
if (doSetGamemode) if (doSetGamemode)
{ {
p.setGameMode(targetGamemode); player.setGameMode(targetGamemode);
} }
} }

View File

@ -31,9 +31,9 @@ public class Command_ops extends TFM_Command
int offlineOPs = 0; int offlineOPs = 0;
int totalOPs = 0; int totalOPs = 0;
for (OfflinePlayer p : server.getOperators()) for (OfflinePlayer player : server.getOperators())
{ {
if (p.isOnline()) if (player.isOnline())
{ {
onlineOPs++; onlineOPs++;
} }
@ -61,13 +61,13 @@ public class Command_ops extends TFM_Command
TFM_Util.adminAction(sender.getName(), "Removing all operators", true); TFM_Util.adminAction(sender.getName(), "Removing all operators", true);
for (OfflinePlayer p : server.getOperators()) for (OfflinePlayer player : server.getOperators())
{ {
p.setOp(false); player.setOp(false);
if (p.isOnline()) if (player.isOnline())
{ {
p.getPlayer().sendMessage(TotalFreedomMod.YOU_ARE_NOT_OP); player.getPlayer().sendMessage(TotalFreedomMod.YOU_ARE_NOT_OP);
} }
} }

View File

@ -21,18 +21,18 @@ public class Command_orbit extends TFM_Command
return false; return false;
} }
Player p; Player player;
try try
{ {
p = getPlayer(args[0]); player = getPlayer(args[0]);
} }
catch (CantFindPlayerException ex) catch (PlayerNotFoundException ex)
{ {
playerMsg(ex.getMessage(), ChatColor.RED); playerMsg(ex.getMessage(), ChatColor.RED);
return true; return true;
} }
TFM_PlayerData playerdata = TFM_PlayerData.getPlayerData(p); TFM_PlayerData playerdata = TFM_PlayerData.getPlayerData(player);
double strength = 10.0; double strength = 10.0;
@ -40,7 +40,7 @@ public class Command_orbit extends TFM_Command
{ {
if (TFM_Util.isStopCommand(args[1])) if (TFM_Util.isStopCommand(args[1]))
{ {
playerMsg("Stopped orbiting " + p.getName()); playerMsg("Stopped orbiting " + player.getName());
playerdata.stopOrbiting(); playerdata.stopOrbiting();
return true; return true;
} }
@ -56,11 +56,11 @@ public class Command_orbit extends TFM_Command
} }
} }
p.setGameMode(GameMode.SURVIVAL); player.setGameMode(GameMode.SURVIVAL);
playerdata.startOrbiting(strength); playerdata.startOrbiting(strength);
p.setVelocity(new Vector(0, strength, 0)); player.setVelocity(new Vector(0, strength, 0));
TFM_Util.adminAction(sender.getName(), "Orbiting " + p.getName() + ".", false); TFM_Util.adminAction(sender.getName(), "Orbiting " + player.getName() + ".", false);
return true; return true;
} }

View File

@ -1,7 +1,7 @@
package me.StevenLawson.TotalFreedomMod.Commands; package me.StevenLawson.TotalFreedomMod.Commands;
import me.StevenLawson.TotalFreedomMod.TFM_ConfigEntry;
import me.StevenLawson.TotalFreedomMod.TFM_Util; import me.StevenLawson.TotalFreedomMod.TFM_Util;
import me.StevenLawson.TotalFreedomMod.TotalFreedomMod;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -18,11 +18,9 @@ public class Command_petprotect extends TFM_Command
return false; return false;
} }
TotalFreedomMod.petProtectEnabled = !TFM_Util.isStopCommand(args[0]);
TFM_Util.adminAction( TFM_Util.adminAction(
sender.getName(), sender.getName(),
"Tamed pet protection is now " + (TotalFreedomMod.petProtectEnabled ? "enabled" : "disabled") + ".", "Tamed pet protection is now " + (TFM_ConfigEntry.PET_PROTECT_ENABLED.setBoolean(!TFM_Util.isStopCommand(args[0])) ? "enabled" : "disabled") + ".",
false); false);
return true; return true;

View File

@ -58,20 +58,20 @@ public class Command_plugincontrol extends TFM_Command
else if (commandMode == CommandMode.RELOAD) else if (commandMode == CommandMode.RELOAD)
{ {
playerMsg("Disabling all plugins."); playerMsg("Disabling all plugins.");
for (Plugin p : pluginManager.getPlugins()) for (Plugin targetPlugin : pluginManager.getPlugins())
{ {
if (!p.getName().toLowerCase().startsWith("totalfreedommod")) if (!targetPlugin.getName().toLowerCase().startsWith("totalfreedommod"))
{ {
pluginManager.disablePlugin(p); pluginManager.disablePlugin(targetPlugin);
} }
} }
playerMsg("Enabling all plugins."); playerMsg("Enabling all plugins.");
for (Plugin p : pluginManager.getPlugins()) for (Plugin targetPlugin : pluginManager.getPlugins())
{ {
if (!p.getName().toLowerCase().startsWith("totalfreedommod")) if (!targetPlugin.getName().toLowerCase().startsWith("totalfreedommod"))
{ {
pluginManager.enablePlugin(p); pluginManager.enablePlugin(targetPlugin);
} }
} }
} }
@ -81,11 +81,11 @@ public class Command_plugincontrol extends TFM_Command
Plugin targetPlugin = null; Plugin targetPlugin = null;
for (Plugin p : pluginManager.getPlugins()) for (Plugin serverPlugin : pluginManager.getPlugins())
{ {
if (searchPluginName.equalsIgnoreCase(p.getName().toLowerCase().trim())) if (searchPluginName.equalsIgnoreCase(serverPlugin.getName().toLowerCase().trim()))
{ {
targetPlugin = p; targetPlugin = serverPlugin;
break; break;
} }
} }

View File

@ -16,7 +16,7 @@ import org.bukkit.potion.PotionEffectType;
@CommandPermissions(level = AdminLevel.OP, source = SourceType.BOTH) @CommandPermissions(level = AdminLevel.OP, source = SourceType.BOTH)
@CommandParameters( @CommandParameters(
description = "Manipulate potion effects. Duration is measured in server ticks (~20 ticks per second).", description = "Manipulate potion effects. Duration is measured in server ticks (~20 ticks per second).",
usage = "/<command> <list | clear [target_name] | add <type> <duration> <amplifier> [target_name]>") usage = "/<command> <list | clear [target name] | add <type> <duration> <amplifier> [target name]>")
public class Command_potion extends TFM_Command public class Command_potion extends TFM_Command
{ {
@Override @Override
@ -62,7 +62,7 @@ public class Command_potion extends TFM_Command
{ {
target = getPlayer(args[1]); target = getPlayer(args[1]);
} }
catch (CantFindPlayerException ex) catch (PlayerNotFoundException ex)
{ {
playerMsg(ex.getMessage(), ChatColor.RED); playerMsg(ex.getMessage(), ChatColor.RED);
return true; return true;
@ -107,7 +107,7 @@ public class Command_potion extends TFM_Command
{ {
target = getPlayer(args[4]); target = getPlayer(args[4]);
} }
catch (CantFindPlayerException ex) catch (PlayerNotFoundException ex)
{ {
playerMsg(ex.getMessage(), ChatColor.RED); playerMsg(ex.getMessage(), ChatColor.RED);
return true; return true;

View File

@ -1,6 +1,6 @@
package me.StevenLawson.TotalFreedomMod.Commands; package me.StevenLawson.TotalFreedomMod.Commands;
import me.StevenLawson.TotalFreedomMod.TotalFreedomMod; import me.StevenLawson.TotalFreedomMod.TFM_ConfigEntry;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -21,12 +21,12 @@ public class Command_prelog extends TFM_Command
if (args[0].equalsIgnoreCase("on")) if (args[0].equalsIgnoreCase("on"))
{ {
TotalFreedomMod.preprocessLogEnabled = true; TFM_ConfigEntry.PREPROCESS_LOG_ENABLED.setBoolean(true);
playerMsg("Command preprocess logging is now enabled. This will be spammy in the log."); playerMsg("Command preprocess logging is now enabled. This will be spammy in the log.");
} }
else else
{ {
TotalFreedomMod.preprocessLogEnabled = false; TFM_ConfigEntry.PREPROCESS_LOG_ENABLED.setBoolean(false);
playerMsg("Command preprocess logging is now disabled."); playerMsg("Command preprocess logging is now disabled.");
} }

View File

@ -0,0 +1,72 @@
package me.StevenLawson.TotalFreedomMod.Commands;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import me.StevenLawson.TotalFreedomMod.TFM_Log;
import org.apache.commons.lang.exception.ExceptionUtils;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitRunnable;
@CommandPermissions(level = AdminLevel.SUPER, source = SourceType.BOTH)
@CommandParameters(description = "Validates if a given account is premium.", usage = "/<command> <player>", aliases = "prem")
public class Command_premium extends TFM_Command
{
@Override
public boolean run(CommandSender sender, Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
{
if (args.length != 1)
{
return false;
}
String name;
try
{
name = getPlayer(args[0]).getName();
}
catch (PlayerNotFoundException ex)
{
name = args[0];
}
final String playername = name;
new BukkitRunnable()
{
@Override
public void run()
{
try
{
final URL getUrl = new URL("https://minecraft.net/haspaid.jsp?user=" + playername);
final URLConnection urlConnection = getUrl.openConnection();
// Read the response
final BufferedReader in = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
final String message = ("false".equalsIgnoreCase(in.readLine()) ? ChatColor.RED + "No" : ChatColor.DARK_GREEN + "Yes");
in.close();
new BukkitRunnable()
{
@Override
public void run()
{
playerMsg("Player " + playername + " is premium: " + message);
}
}.runTask(plugin);
}
catch (Exception ex)
{
TFM_Log.severe(ExceptionUtils.getStackTrace(ex));
playerMsg("There was an error querying the mojang server.", ChatColor.RED);
}
}
}.runTaskAsynchronously(plugin);
return true;
}
}

View File

@ -1,7 +1,8 @@
package me.StevenLawson.TotalFreedomMod.Commands; package me.StevenLawson.TotalFreedomMod.Commands;
import me.StevenLawson.TotalFreedomMod.TFM_ConfigEntry;
import me.StevenLawson.TotalFreedomMod.TFM_ProtectedArea; import me.StevenLawson.TotalFreedomMod.TFM_ProtectedArea;
import me.StevenLawson.TotalFreedomMod.TotalFreedomMod; import me.StevenLawson.TotalFreedomMod.TFM_Util;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
@ -16,7 +17,7 @@ public class Command_protectarea extends TFM_Command
@Override @Override
public boolean run(CommandSender sender, Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) public boolean run(CommandSender sender, Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
{ {
if (!TotalFreedomMod.protectedAreasEnabled) if (!TFM_ConfigEntry.PROTECTED_AREAS_ENABLED.getBoolean())
{ {
playerMsg("Protected areas are currently disabled in the TotalFreedomMod configuration."); playerMsg("Protected areas are currently disabled in the TotalFreedomMod configuration.");
return true; return true;
@ -43,7 +44,7 @@ public class Command_protectarea extends TFM_Command
} }
else if (args.length == 2) else if (args.length == 2)
{ {
if (args[0].equalsIgnoreCase("remove")) if (TFM_Util.isRemoveCommand(args[0]))
{ {
TFM_ProtectedArea.removeProtectedArea(args[1]); TFM_ProtectedArea.removeProtectedArea(args[1]);

View File

@ -19,14 +19,14 @@ public class Command_purgeall extends TFM_Command
TFM_Util.adminAction(sender.getName(), "Purging all player data", true); TFM_Util.adminAction(sender.getName(), "Purging all player data", true);
// Purge entities // Purge entities
TFM_Util.wipeEntities(true, true); TFM_Util.TFM_EntityWiper.wipeEntities(true, true);
// Undisguise all players // Undisguise all players
TFM_DisguiseCraftBridge.undisguiseAllPlayers(); TFM_DisguiseCraftBridge.undisguiseAllPlayers();
for (Player p : server.getOnlinePlayers()) for (Player player : server.getOnlinePlayers())
{ {
TFM_PlayerData playerdata = TFM_PlayerData.getPlayerData(p); TFM_PlayerData playerdata = TFM_PlayerData.getPlayerData(player);
// Unmute all players // Unmute all players
if (playerdata.isMuted()) if (playerdata.isMuted())
@ -59,9 +59,9 @@ public class Command_purgeall extends TFM_Command
} }
// Purge potion effects // Purge potion effects
for (PotionEffect potion_effect : p.getActivePotionEffects()) for (PotionEffect potion_effect : player.getActivePotionEffects())
{ {
p.removePotionEffect(potion_effect.getType()); player.removePotionEffect(potion_effect.getType());
} }
// Uncage // Uncage

View File

@ -26,20 +26,20 @@ public class Command_qdeop extends TFM_Command
boolean matched_player = false; boolean matched_player = false;
String target_name = args[0].toLowerCase(); String targetName = args[0].toLowerCase();
for (Player p : server.getOnlinePlayers()) for (Player player : server.getOnlinePlayers())
{ {
if (p.getName().toLowerCase().indexOf(target_name) != -1 || p.getDisplayName().toLowerCase().indexOf(target_name) != -1) if (player.getName().toLowerCase().indexOf(targetName) != -1 || player.getDisplayName().toLowerCase().indexOf(targetName) != -1)
{ {
matched_player = true; matched_player = true;
if (!silent) if (!silent)
{ {
TFM_Util.adminAction(sender.getName(), "De-opping " + p.getName(), false); TFM_Util.adminAction(sender.getName(), "De-opping " + player.getName(), false);
} }
p.setOp(false); player.setOp(false);
p.sendMessage(TotalFreedomMod.YOU_ARE_NOT_OP); player.sendMessage(TotalFreedomMod.YOU_ARE_NOT_OP);
} }
} }

View File

@ -26,20 +26,20 @@ public class Command_qop extends TFM_Command
boolean matched_player = false; boolean matched_player = false;
String target_name = args[0].toLowerCase(); String targetName = args[0].toLowerCase();
for (Player p : server.getOnlinePlayers()) for (Player player : server.getOnlinePlayers())
{ {
if (p.getName().toLowerCase().indexOf(target_name) != -1 || p.getDisplayName().toLowerCase().indexOf(target_name) != -1) if (player.getName().toLowerCase().indexOf(targetName) != -1 || player.getDisplayName().toLowerCase().indexOf(targetName) != -1)
{ {
matched_player = true; matched_player = true;
if (!silent) if (!silent)
{ {
TFM_Util.adminAction(sender.getName(), "Opping " + p.getName(), false); TFM_Util.adminAction(sender.getName(), "Opping " + player.getName(), false);
} }
p.setOp(true); player.setOp(true);
p.sendMessage(TotalFreedomMod.YOU_ARE_OP); player.sendMessage(TotalFreedomMod.YOU_ARE_OP);
} }
} }

View File

@ -21,13 +21,13 @@ public class Command_radar extends TFM_Command
List<TFM_RadarData> radar_data = new ArrayList<TFM_RadarData>(); List<TFM_RadarData> radar_data = new ArrayList<TFM_RadarData>();
for (Player p : sender_pos.getWorld().getPlayers()) for (Player player : sender_pos.getWorld().getPlayers())
{ {
if (!p.equals(sender_p)) if (!player.equals(sender_p))
{ {
try try
{ {
radar_data.add(new TFM_RadarData(p, sender_pos.distance(p.getLocation()), p.getLocation())); radar_data.add(new TFM_RadarData(player, sender_pos.distance(player.getLocation()), player.getLocation()));
} }
catch (IllegalArgumentException ex) catch (IllegalArgumentException ex)
{ {

View File

@ -15,9 +15,9 @@ public class Command_rank extends TFM_Command
{ {
if (senderIsConsole && args.length < 1) if (senderIsConsole && args.length < 1)
{ {
for (Player p : server.getOnlinePlayers()) for (Player player : server.getOnlinePlayers())
{ {
playerMsg(p.getName() + " is " + TFM_Util.getRank(p)); playerMsg(player.getName() + " is " + TFM_Util.getRank(player));
} }
return true; return true;
} }
@ -33,18 +33,18 @@ public class Command_rank extends TFM_Command
return true; return true;
} }
Player p; Player player;
try try
{ {
p = getPlayer(args[0]); player = getPlayer(args[0]);
} }
catch (CantFindPlayerException ex) catch (PlayerNotFoundException ex)
{ {
sender.sendMessage(ex.getMessage()); sender.sendMessage(ex.getMessage());
return true; return true;
} }
playerMsg(p.getName() + " is " + TFM_Util.getRank(p), ChatColor.AQUA); playerMsg(player.getName() + " is " + TFM_Util.getRank(player), ChatColor.AQUA);
return true; return true;
} }

View File

@ -2,7 +2,6 @@ package me.StevenLawson.TotalFreedomMod.Commands;
import me.StevenLawson.TotalFreedomMod.TFM_Util; import me.StevenLawson.TotalFreedomMod.TFM_Util;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.bukkit.ChatColor;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -16,7 +15,7 @@ public class Command_rawsay extends TFM_Command
{ {
if (args.length > 0) if (args.length > 0)
{ {
TFM_Util.bcastMsg(ChatColor.translateAlternateColorCodes('&', StringUtils.join(args, " "))); TFM_Util.bcastMsg(TFM_Util.colorise(StringUtils.join(args, " ")));
} }
return true; return true;

View File

@ -13,7 +13,7 @@ public class Command_rd extends TFM_Command
public boolean run(CommandSender sender, Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) public boolean run(CommandSender sender, Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
{ {
TFM_Util.adminAction(sender.getName(), "Removing all server entities.", true); TFM_Util.adminAction(sender.getName(), "Removing all server entities.", true);
playerMsg((TFM_Util.wipeEntities(true, true)) + " enties removed."); playerMsg((TFM_Util.TFM_EntityWiper.wipeEntities(true, true)) + " enties removed.");
return true; return true;
} }

View File

@ -51,14 +51,14 @@ public class Command_ro extends TFM_Command
} }
} }
Player target_player = null; Player targetPlayer = null;
if (args.length == 3) if (args.length == 3)
{ {
try try
{ {
target_player = getPlayer(args[2]); targetPlayer = getPlayer(args[2]);
} }
catch (CantFindPlayerException ex) catch (PlayerNotFoundException ex)
{ {
playerMsg(ex.getMessage(), ChatColor.RED); playerMsg(ex.getMessage(), ChatColor.RED);
return true; return true;
@ -67,18 +67,18 @@ public class Command_ro extends TFM_Command
int affected = 0; int affected = 0;
if (target_player == null) if (targetPlayer == null)
{ {
TFM_Util.adminAction(sender.getName(), "Removing all " + from_material.name() + " within " + radius + " blocks of all players. Brace for lag...", senderIsConsole); TFM_Util.adminAction(sender.getName(), "Removing all " + from_material.name() + " within " + radius + " blocks of all players. Brace for lag...", senderIsConsole);
for (Player p : server.getOnlinePlayers()) for (Player player : server.getOnlinePlayers())
{ {
affected += TFM_Util.replaceBlocks(p.getLocation(), from_material, Material.AIR, radius); affected += TFM_Util.replaceBlocks(player.getLocation(), from_material, Material.AIR, radius);
} }
} }
else else
{ {
TFM_Util.adminAction(sender.getName(), "Removing all " + from_material.name() + " within " + radius + " blocks of " + target_player.getName() + ".", senderIsConsole); TFM_Util.adminAction(sender.getName(), "Removing all " + from_material.name() + " within " + radius + " blocks of " + targetPlayer.getName() + ".", senderIsConsole);
affected += TFM_Util.replaceBlocks(target_player.getLocation(), from_material, Material.AIR, radius); affected += TFM_Util.replaceBlocks(targetPlayer.getLocation(), from_material, Material.AIR, radius);
} }
TFM_Util.adminAction(sender.getName(), "Remove complete. " + affected + " blocks removed.", senderIsConsole); TFM_Util.adminAction(sender.getName(), "Remove complete. " + affected + " blocks removed.", senderIsConsole);

View File

@ -8,7 +8,7 @@ import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@CommandPermissions(level = AdminLevel.SUPER, source = SourceType.BOTH, block_host_console = true) @CommandPermissions(level = AdminLevel.SUPER, source = SourceType.BOTH, block_host_console = true)
@CommandParameters(description = "Issues a rollback on a player", usage = "/<command> <[partialname] | purge [partialname] | purgeall>", aliases = "rb") @CommandParameters(description = "Issues a rollback on a player", usage = "/<command> <[partialname] | undo [partialname] purge [partialname] | purgeall>", aliases = "rb")
public class Command_rollback extends TFM_Command public class Command_rollback extends TFM_Command
{ {
@Override @Override
@ -16,25 +16,58 @@ public class Command_rollback extends TFM_Command
{ {
if (args.length == 1) if (args.length == 1)
{ {
if (args[0].equalsIgnoreCase("purgeall")) if ("purgeall".equalsIgnoreCase(args[0]))
{ {
TFM_Util.adminAction(sender.getName(), "Purging all rollback history.", false); TFM_Util.adminAction(sender.getName(), "Purging all rollback history", false);
playerMsg("Purged all rollback history for " + TFM_RollbackManager.purgeEntries() + " players."); playerMsg("Purged all rollback history for " + TFM_RollbackManager.purgeEntries() + " players.");
} }
else else
{ {
String playerName = getPlayerName(args[0]); String playerName = getPlayerName(args[0]);
if (!TFM_RollbackManager.canRollback(playerName))
{
playerMsg("That player has no entries stored.");
return true;
}
if (TFM_RollbackManager.canUndoRollback(playerName))
{
playerMsg("That player has just been rolled back.");
}
TFM_Util.adminAction(sender.getName(), "Rolling back player: " + playerName, false); TFM_Util.adminAction(sender.getName(), "Rolling back player: " + playerName, false);
playerMsg("Rolled back " + TFM_RollbackManager.rollback(playerName) + " edits for " + playerName + "."); playerMsg("Rolled back " + TFM_RollbackManager.rollback(playerName) + " edits for " + playerName + ".");
playerMsg("If this rollback was a mistake, use /rollback undo " + playerName + " within 20 seconds to reverse the rollback.");
} }
} }
else if (args.length == 2) else if (args.length == 2)
{ {
if (args[0].equalsIgnoreCase("purge")) if ("purge".equalsIgnoreCase(args[0]))
{ {
String playerName = getPlayerName(args[1]); String playerName = getPlayerName(args[1]);
if (!TFM_RollbackManager.canRollback(playerName))
{
playerMsg("That player has no entries stored.");
return true;
}
playerMsg("Purged " + TFM_RollbackManager.purgeEntries(playerName) + " rollback history entries for " + playerName + "."); playerMsg("Purged " + TFM_RollbackManager.purgeEntries(playerName) + " rollback history entries for " + playerName + ".");
} }
else if ("undo".equalsIgnoreCase(args[0]))
{
String playerName = getPlayerName(args[1]);
if (!TFM_RollbackManager.canUndoRollback(playerName))
{
playerMsg("That player hasn't been rolled back recently.");
return true;
}
TFM_Util.adminAction(sender.getName(), "Reverting rollback for player: " + playerName, false);
playerMsg("Reverted " + TFM_RollbackManager.undoRollback(playerName) + " edits for " + playerName + ".");
}
else else
{ {
return false; return false;
@ -60,7 +93,7 @@ public class Command_rollback extends TFM_Command
playerName = player.getName(); playerName = player.getName();
} }
} }
catch (CantFindPlayerException ex) catch (PlayerNotFoundException ex)
{ {
} }

View File

@ -1,5 +1,6 @@
package me.StevenLawson.TotalFreedomMod.Commands; package me.StevenLawson.TotalFreedomMod.Commands;
import me.StevenLawson.TotalFreedomMod.TFM_ConfigEntry;
import me.StevenLawson.TotalFreedomMod.TFM_Superadmin; import me.StevenLawson.TotalFreedomMod.TFM_Superadmin;
import me.StevenLawson.TotalFreedomMod.TFM_SuperadminList; import me.StevenLawson.TotalFreedomMod.TFM_SuperadminList;
import me.StevenLawson.TotalFreedomMod.TFM_TwitterHandler; import me.StevenLawson.TotalFreedomMod.TFM_TwitterHandler;
@ -26,15 +27,15 @@ public class Command_saconfig extends TFM_Command
} }
else else
{ {
if (!senderIsConsole) if (!TFM_SuperadminList.isSeniorAdmin(sender))
{ {
playerMsg("This command may only be used from the console."); playerMsg(TotalFreedomMod.MSG_NO_PERMS);
return true; return true;
} }
if (args[0].equals("clean")) if (args[0].equals("clean"))
{ {
TFM_Util.adminAction(sender.getName(), "Cleaning superadmin list.", true); TFM_Util.adminAction(sender.getName(), "Cleaning superadmin list", true);
TFM_SuperadminList.cleanSuperadminList(true); TFM_SuperadminList.cleanSuperadminList(true);
playerMsg("Superadmins: " + StringUtils.join(TFM_SuperadminList.getSuperadminNames(), ", "), ChatColor.YELLOW); playerMsg("Superadmins: " + StringUtils.join(TFM_SuperadminList.getSuperadminNames(), ", "), ChatColor.YELLOW);
} }
@ -66,7 +67,7 @@ public class Command_saconfig extends TFM_Command
{ {
superadmin = TFM_SuperadminList.getAdminEntry(getPlayer(args[1]).getName().toLowerCase()); superadmin = TFM_SuperadminList.getAdminEntry(getPlayer(args[1]).getName().toLowerCase());
} }
catch (CantFindPlayerException ex) catch (PlayerNotFoundException ex)
{ {
} }
} }
@ -77,7 +78,7 @@ public class Command_saconfig extends TFM_Command
} }
else else
{ {
playerMsg(ChatColor.stripColor(ChatColor.translateAlternateColorCodes('&', superadmin.toString()))); playerMsg(ChatColor.stripColor(TFM_Util.colorise(superadmin.toString())));
} }
return true; return true;
@ -91,14 +92,14 @@ public class Command_saconfig extends TFM_Command
if (args[0].equalsIgnoreCase("add")) if (args[0].equalsIgnoreCase("add"))
{ {
Player p = null; Player player = null;
String admin_name = null; String admin_name = null;
try try
{ {
p = getPlayer(args[1]); player = getPlayer(args[1]);
} }
catch (CantFindPlayerException ex) catch (PlayerNotFoundException ex)
{ {
TFM_Superadmin superadmin = TFM_SuperadminList.getAdminEntry(args[1].toLowerCase()); TFM_Superadmin superadmin = TFM_SuperadminList.getAdminEntry(args[1].toLowerCase());
if (superadmin != null) if (superadmin != null)
@ -112,10 +113,10 @@ public class Command_saconfig extends TFM_Command
} }
} }
if (p != null) if (player != null)
{ {
TFM_Util.adminAction(sender.getName(), "Adding " + p.getName() + " to the superadmin list.", true); TFM_Util.adminAction(sender.getName(), "Adding " + player.getName() + " to the superadmin list.", true);
TFM_SuperadminList.addSuperadmin(p); TFM_SuperadminList.addSuperadmin(player);
} }
else if (admin_name != null) else if (admin_name != null)
{ {
@ -123,7 +124,7 @@ public class Command_saconfig extends TFM_Command
TFM_SuperadminList.addSuperadmin(admin_name); TFM_SuperadminList.addSuperadmin(admin_name);
} }
} }
else if (args[0].equalsIgnoreCase("delete") || args[0].equalsIgnoreCase("del") || args[0].equalsIgnoreCase("remove")) else if (TFM_Util.isRemoveCommand(args[0]))
{ {
if (!TFM_SuperadminList.isSeniorAdmin(sender)) if (!TFM_SuperadminList.isSeniorAdmin(sender))
{ {
@ -131,41 +132,41 @@ public class Command_saconfig extends TFM_Command
return true; return true;
} }
String target_name = args[1]; String targetName = args[1];
try try
{ {
target_name = getPlayer(target_name).getName(); targetName = getPlayer(targetName).getName();
} }
catch (CantFindPlayerException ex) catch (PlayerNotFoundException ex)
{ {
} }
if (!TFM_SuperadminList.getSuperadminNames().contains(target_name.toLowerCase())) if (!TFM_SuperadminList.getSuperadminNames().contains(targetName.toLowerCase()))
{ {
playerMsg("Superadmin not found: " + target_name); playerMsg("Superadmin not found: " + targetName);
return true; return true;
} }
TFM_Util.adminAction(sender.getName(), "Removing " + target_name + " from the superadmin list", true); TFM_Util.adminAction(sender.getName(), "Removing " + targetName + " from the superadmin list", true);
TFM_SuperadminList.removeSuperadmin(target_name); TFM_SuperadminList.removeSuperadmin(targetName);
if (!TotalFreedomMod.twitterbotEnabled) if (!TFM_ConfigEntry.TWITTERBOT_ENABLED.getBoolean())
{ {
return true; return true;
} }
// Twitterbot // Twitterbot
TFM_TwitterHandler twitterbot = TFM_TwitterHandler.getInstance(plugin); TFM_TwitterHandler twitterbot = TFM_TwitterHandler.getInstance();
String reply = twitterbot.delTwitter(target_name); String reply = twitterbot.delTwitter(targetName);
if ("ok".equals(reply)) if ("ok".equals(reply))
{ {
TFM_Util.adminAction(sender.getName(), "Removing " + target_name + " from TwitterBot", true); TFM_Util.adminAction(sender.getName(), "Removing " + targetName + " from TwitterBot", true);
} }
else if ("disabled".equals(reply)) else if ("disabled".equals(reply))
{ {
TFM_Util.playerMsg(sender, "Warning: Could not check if player has a twitter handle!"); TFM_Util.playerMsg(sender, "Warning: Could not check if player has a twitter handle!");
TFM_Util.playerMsg(sender, "TwitterBot has been temporarily disabled,, please wait until it get re-enabled", ChatColor.RED); TFM_Util.playerMsg(sender, "TwitterBot has been temporarily disabled, please wait until it gets re-enabled", ChatColor.RED);
} }
else if ("failed".equals(reply)) else if ("failed".equals(reply))
{ {
@ -184,7 +185,7 @@ public class Command_saconfig extends TFM_Command
} }
else if ("notfound".equals(reply)) else if ("notfound".equals(reply))
{ {
TFM_Util.playerMsg(sender, target_name + " did not have a twitter handle registered to their name.", ChatColor.GREEN); TFM_Util.playerMsg(sender, targetName + " did not have a twitter handle registered to their name.", ChatColor.GREEN);
} }
} }

View File

@ -27,9 +27,9 @@ public class Command_say extends TFM_Command
{ {
TFM_Util.bcastMsg("Server is going offline.", ChatColor.GRAY); TFM_Util.bcastMsg("Server is going offline.", ChatColor.GRAY);
for (Player p : server.getOnlinePlayers()) for (Player player : server.getOnlinePlayers())
{ {
p.kickPlayer("Server is going offline, come back in a few minutes."); player.kickPlayer("Server is going offline, come back in a few minutes.");
} }
server.shutdown(); server.shutdown();

View File

@ -0,0 +1,28 @@
package me.StevenLawson.TotalFreedomMod.Commands;
import me.StevenLawson.TotalFreedomMod.TFM_ServiceChecker;
import me.StevenLawson.TotalFreedomMod.TFM_ServiceChecker.TFM_ServiceChecker_ServiceStatus;
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.BOTH)
@CommandParameters(description = "Shows the status of all Mojang services", usage = "/<command>")
public class Command_services extends TFM_Command
{
@Override
public boolean run(CommandSender sender, Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
{
playerMsg("Mojang Services" + ChatColor.WHITE + ":", ChatColor.BLUE);
for (TFM_ServiceChecker_ServiceStatus service : TFM_ServiceChecker.getInstance().getAllStatuses())
{
playerMsg(service.getFormattedStatus());
}
playerMsg("Version" + ChatColor.WHITE + ": " + TFM_ServiceChecker.getInstance().version, ChatColor.DARK_PURPLE);
playerMsg("Last Check" + ChatColor.WHITE + ": " + TFM_ServiceChecker.getInstance().lastCheck, ChatColor.DARK_PURPLE);
return true;
}
}

View File

@ -15,9 +15,9 @@ public class Command_setl extends TFM_Command
{ {
TFM_Util.adminAction(sender.getName(), "Setting everyone's Worldedit block modification limit to 500.", true); TFM_Util.adminAction(sender.getName(), "Setting everyone's Worldedit block modification limit to 500.", true);
TFM_WorldEditBridge web = TFM_WorldEditBridge.getInstance(); TFM_WorldEditBridge web = TFM_WorldEditBridge.getInstance();
for (final Player p : server.getOnlinePlayers()) for (final Player player : server.getOnlinePlayers())
{ {
web.setLimit(p, 500); web.setLimit(player, 500);
} }
return true; return true;
} }

View File

@ -1,8 +1,8 @@
package me.StevenLawson.TotalFreedomMod.Commands; package me.StevenLawson.TotalFreedomMod.Commands;
import me.StevenLawson.TotalFreedomMod.TFM_ConfigEntry;
import me.StevenLawson.TotalFreedomMod.TFM_ProtectedArea; import me.StevenLawson.TotalFreedomMod.TFM_ProtectedArea;
import me.StevenLawson.TotalFreedomMod.TFM_Util; import me.StevenLawson.TotalFreedomMod.TFM_Util;
import me.StevenLawson.TotalFreedomMod.TotalFreedomMod;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
@ -20,9 +20,9 @@ public class Command_setspawnworld extends TFM_Command
playerMsg("Spawn location for this world set to: " + TFM_Util.formatLocation(sender_p.getWorld().getSpawnLocation())); playerMsg("Spawn location for this world set to: " + TFM_Util.formatLocation(sender_p.getWorld().getSpawnLocation()));
if (TotalFreedomMod.protectedAreasEnabled && TotalFreedomMod.autoProtectSpawnpoints) if (TFM_ConfigEntry.PROTECTED_AREAS_ENABLED.getBoolean() && TFM_ConfigEntry.AUTO_PROTECT_SPAWNPOINTS.getBoolean())
{ {
TFM_ProtectedArea.addProtectedArea("spawn_" + sender_p.getWorld().getName(), pos, TotalFreedomMod.autoProtectRadius); TFM_ProtectedArea.addProtectedArea("spawn_" + sender_p.getWorld().getName(), pos, TFM_ConfigEntry.AUTO_PROTECT_RADIUS.getDouble());
} }
return true; return true;

View File

@ -21,48 +21,48 @@ public class Command_smite extends TFM_Command
return false; return false;
} }
Player p; Player player;
try try
{ {
p = getPlayer(args[0]); player = getPlayer(args[0]);
} }
catch (CantFindPlayerException ex) catch (PlayerNotFoundException ex)
{ {
playerMsg(ex.getMessage(), ChatColor.RED); playerMsg(ex.getMessage(), ChatColor.RED);
return true; return true;
} }
smite(p); smite(player);
return true; return true;
} }
public static void smite(final Player p) public static void smite(final Player player)
{ {
TFM_Util.bcastMsg(p.getName() + " has been a naughty, naughty boy.", ChatColor.RED); TFM_Util.bcastMsg(player.getName() + " has been a naughty, naughty boy.", ChatColor.RED);
//Deop //Deop
p.setOp(false); player.setOp(false);
//Set gamemode to survival: //Set gamemode to survival:
p.setGameMode(GameMode.SURVIVAL); player.setGameMode(GameMode.SURVIVAL);
//Clear inventory: //Clear inventory:
p.getInventory().clear(); player.getInventory().clear();
//Strike with lightning effect: //Strike with lightning effect:
final Location target_pos = p.getLocation(); final Location targetPos = player.getLocation();
final World world = p.getWorld(); final World world = player.getWorld();
for (int x = -1; x <= 1; x++) for (int x = -1; x <= 1; x++)
{ {
for (int z = -1; z <= 1; z++) for (int z = -1; z <= 1; z++)
{ {
final Location strike_pos = new Location(world, target_pos.getBlockX() + x, target_pos.getBlockY(), target_pos.getBlockZ() + z); final Location strike_pos = new Location(world, targetPos.getBlockX() + x, targetPos.getBlockY(), targetPos.getBlockZ() + z);
world.strikeLightning(strike_pos); world.strikeLightning(strike_pos);
} }
} }
//Kill: //Kill:
p.setHealth(0.0); player.setHealth(0.0);
} }
} }

View File

@ -1,25 +1,12 @@
package me.StevenLawson.TotalFreedomMod.Commands; package me.StevenLawson.TotalFreedomMod.Commands;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Map.Entry;
import me.StevenLawson.TotalFreedomMod.TFM_Log;
import org.apache.commons.lang.StringUtils;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.World; import org.bukkit.World;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitRunnable;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.JSONValue;
@CommandPermissions(level = AdminLevel.ALL, source = SourceType.BOTH) @CommandPermissions(level = AdminLevel.ALL, source = SourceType.BOTH)
@CommandParameters(description = "Show misc. server info.", usage = "/<command>") @CommandParameters(description = "Show misc. server info.", usage = "/<command>")
@ -50,66 +37,6 @@ public class Command_status extends TFM_Command
playerMsg(String.format("World %d: %s - %d players.", i++, world.getName(), world.getPlayers().size()), ChatColor.BLUE); playerMsg(String.format("World %d: %s - %d players.", i++, world.getName(), world.getPlayers().size()), ChatColor.BLUE);
} }
new BukkitRunnable()
{
@SuppressWarnings("unchecked")
@Override
public void run()
{
try
{
URL mojang_status = new URL("http://status.mojang.com/check");
BufferedReader in = new BufferedReader(new InputStreamReader(mojang_status.openStream()));
JSONArray status_json = (JSONArray) JSONValue.parse(in.readLine());
in.close();
Map<String, Boolean> service_status = new HashMap<String, Boolean>();
Iterator status_it = status_json.iterator();
while (status_it.hasNext())
{
JSONObject service = (JSONObject) status_it.next();
Iterator service_it = service.entrySet().iterator();
while (service_it.hasNext())
{
Entry<String, String> pair = (Entry<String, String>) service_it.next();
service_status.put(pair.getKey(), (pair.getValue().equals("green") ? Boolean.TRUE : Boolean.FALSE));
}
}
final List<String> status_output = new ArrayList<String>();
Iterator<Entry<String, Boolean>> output_it = service_status.entrySet().iterator();
while (output_it.hasNext())
{
Entry<String, Boolean> pair = output_it.next();
String service_name = pair.getKey();
boolean service_online = pair.getValue().booleanValue();
if (SERVICE_MAP.containsKey(service_name))
{
service_name = SERVICE_MAP.get(service_name);
}
status_output.add(String.format("%s is %s", service_name, (service_online ? ChatColor.GREEN + "ONLINE" + ChatColor.GRAY : ChatColor.RED + "OFFLINE" + ChatColor.GRAY)));
}
new BukkitRunnable()
{
@Override
public void run()
{
playerMsg(String.format("Mojang Service Status: %s.", StringUtils.join(status_output, ", ")), ChatColor.GRAY);
}
}.runTask(plugin);
}
catch (Exception ex)
{
TFM_Log.severe(ex);
}
}
}.runTaskAsynchronously(plugin);
return true; return true;
} }
} }

View File

@ -66,11 +66,11 @@ public class Command_stfu extends TFM_Command
TFM_PlayerData playerdata; TFM_PlayerData playerdata;
int counter = 0; int counter = 0;
for (Player p : server.getOnlinePlayers()) for (Player player : server.getOnlinePlayers())
{ {
if (!TFM_SuperadminList.isUserSuperadmin(p)) if (!TFM_SuperadminList.isUserSuperadmin(player))
{ {
playerdata = TFM_PlayerData.getPlayerData(p); playerdata = TFM_PlayerData.getPlayerData(player);
playerdata.setMuted(true); playerdata.setMuted(true);
counter++; counter++;
} }
@ -87,9 +87,9 @@ public class Command_stfu extends TFM_Command
public void run() public void run()
{ {
TFM_Util.adminAction("MuteTimer", "Unmuting all players", false); TFM_Util.adminAction("MuteTimer", "Unmuting all players", false);
for (Player p : server.getOnlinePlayers()) for (Player player : server.getOnlinePlayers())
{ {
TFM_PlayerData.getPlayerData(p).setMuted(false); TFM_PlayerData.getPlayerData(player).setMuted(false);
} }
} }
}.runTaskLater(plugin, 20L * 60L * 5L); }.runTaskLater(plugin, 20L * 60L * 5L);
@ -98,35 +98,35 @@ public class Command_stfu extends TFM_Command
} }
else else
{ {
Player p; Player player;
try try
{ {
p = getPlayer(args[0]); player = getPlayer(args[0]);
} }
catch (CantFindPlayerException ex) catch (PlayerNotFoundException ex)
{ {
sender.sendMessage(ex.getMessage()); sender.sendMessage(ex.getMessage());
return true; return true;
} }
TFM_PlayerData playerdata = TFM_PlayerData.getPlayerData(p); TFM_PlayerData playerdata = TFM_PlayerData.getPlayerData(player);
if (playerdata.isMuted()) if (playerdata.isMuted())
{ {
TFM_Util.adminAction(sender.getName(), "Unmuting " + p.getName(), true); TFM_Util.adminAction(sender.getName(), "Unmuting " + player.getName(), true);
playerdata.setMuted(false); playerdata.setMuted(false);
playerMsg("Unmuted " + p.getName()); playerMsg("Unmuted " + player.getName());
} }
else else
{ {
if (!TFM_SuperadminList.isUserSuperadmin(p)) if (!TFM_SuperadminList.isUserSuperadmin(player))
{ {
TFM_Util.adminAction(sender.getName(), "Muting " + p.getName(), true); TFM_Util.adminAction(sender.getName(), "Muting " + player.getName(), true);
playerdata.setMuted(true); playerdata.setMuted(true);
playerMsg("Muted " + p.getName()); playerMsg("Muted " + player.getName());
} }
else else
{ {
playerMsg(p.getName() + " is a superadmin, and can't be muted."); playerMsg(player.getName() + " is a superadmin, and can't be muted.");
} }
} }
} }

View File

@ -15,9 +15,9 @@ public class Command_stop extends TFM_Command
{ {
TFM_Util.bcastMsg("Server is going offline!", ChatColor.LIGHT_PURPLE); TFM_Util.bcastMsg("Server is going offline!", ChatColor.LIGHT_PURPLE);
for (Player p : server.getOnlinePlayers()) for (Player player : server.getOnlinePlayers())
{ {
p.kickPlayer("Server is going offline, come back in about 20 seconds."); player.kickPlayer("Server is going offline, come back in about 20 seconds.");
} }
server.shutdown(); server.shutdown();

View File

@ -3,7 +3,6 @@ package me.StevenLawson.TotalFreedomMod.Commands;
import me.StevenLawson.TotalFreedomMod.TFM_SuperadminList; import me.StevenLawson.TotalFreedomMod.TFM_SuperadminList;
import me.StevenLawson.TotalFreedomMod.TFM_Util; import me.StevenLawson.TotalFreedomMod.TFM_Util;
import me.StevenLawson.TotalFreedomMod.TotalFreedomMod; import me.StevenLawson.TotalFreedomMod.TotalFreedomMod;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.GameMode; import org.bukkit.GameMode;
import org.bukkit.command.Command; import org.bukkit.command.Command;
@ -26,11 +25,11 @@ public class Command_survival extends TFM_Command
} }
} }
Player p; Player player;
if (args.length == 0) if (args.length == 0)
{ {
p = sender_p; player = sender_p;
} }
else else
{ {
@ -42,9 +41,9 @@ public class Command_survival extends TFM_Command
return true; return true;
} }
for (Player player : server.getOnlinePlayers()) for (Player targetPlayer : server.getOnlinePlayers())
{ {
player.setGameMode(GameMode.SURVIVAL); targetPlayer.setGameMode(GameMode.SURVIVAL);
} }
TFM_Util.adminAction(sender.getName(), "Changing everyone's gamemode to survival", false); TFM_Util.adminAction(sender.getName(), "Changing everyone's gamemode to survival", false);
@ -55,9 +54,9 @@ public class Command_survival extends TFM_Command
{ {
try try
{ {
p = getPlayer(args[0]); player = getPlayer(args[0]);
} }
catch (CantFindPlayerException ex) catch (PlayerNotFoundException ex)
{ {
playerMsg(ex.getMessage(), ChatColor.RED); playerMsg(ex.getMessage(), ChatColor.RED);
return true; return true;
@ -70,9 +69,9 @@ public class Command_survival extends TFM_Command
} }
} }
playerMsg("Setting " + p.getName() + " to game mode 'Survival'."); playerMsg("Setting " + player.getName() + " to game mode 'Survival'.");
p.sendMessage(sender.getName() + " set your game mode to 'Survival'."); player.sendMessage(sender.getName() + " set your game mode to 'Survival'.");
p.setGameMode(GameMode.SURVIVAL); player.setGameMode(GameMode.SURVIVAL);
return true; return true;
} }

View File

@ -0,0 +1,128 @@
package me.StevenLawson.TotalFreedomMod.Commands;
import java.util.Arrays;
import java.util.List;
import me.StevenLawson.TotalFreedomMod.TFM_PlayerData;
import me.StevenLawson.TotalFreedomMod.TFM_SuperadminList;
import me.StevenLawson.TotalFreedomMod.TFM_Util;
import me.StevenLawson.TotalFreedomMod.TotalFreedomMod;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@CommandPermissions(level = AdminLevel.OP, source = SourceType.BOTH)
@CommandParameters(description = "Sets yourself a prefix", usage = "/<command> <<prefix> | off | clear <player> | clearall>")
public class Command_tag extends TFM_Command
{
public static final List<String> FORBIDDEN_WORDS = Arrays.asList(new String[]
{
"admin", "owner", "moderator", "developer", "&k"
});
@Override
public boolean run(CommandSender sender, Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
{
if (args.length == 1)
{
if ("clearall".equals(args[0]))
{
if (!TFM_SuperadminList.isUserSuperadmin(sender))
{
playerMsg(TotalFreedomMod.MSG_NO_PERMS);
return true;
}
TFM_Util.adminAction(sender.getName(), "Removing all tags", false);
int count = 0;
for (Player player : server.getOnlinePlayers())
{
TFM_PlayerData playerdata = TFM_PlayerData.getPlayerData(player);
if (playerdata.getTag() != null)
{
count++;
TFM_PlayerData.getPlayerData(player).setTag(null);
}
}
playerMsg(count + " tag(s) removed.");
return true;
}
if (senderIsConsole)
{
playerMsg("Only in-game players can set tags. Use \"/tag clearall\" to reset all tags.");
return true;
}
if (TFM_Util.isStopCommand(args[0]))
{
TFM_PlayerData.getPlayerData(sender_p).setTag(null);
playerMsg("Your tag has been removed.");
return true;
}
if (args[0].length() > 15)
{
playerMsg("That tag is too long.");
return true;
}
if (!TFM_SuperadminList.isUserSuperadmin(sender))
{
for (String word : FORBIDDEN_WORDS)
{
if (args[0].toLowerCase().contains(word.toLowerCase()))
{
if (word.contains(String.valueOf(ChatColor.COLOR_CHAR)))
{
playerMsg("That tag contains a forbidden color-code.");
}
else
{
playerMsg("That tag contains a forbidden word.");
}
return true;
}
}
}
TFM_PlayerData.getPlayerData(sender_p).setTag(args[0]);
playerMsg("Tag set.");
return true;
}
else if (args.length == 2)
{
if ("clear".equals(args[0]))
{
if (!TFM_SuperadminList.isUserSuperadmin(sender))
{
playerMsg(TotalFreedomMod.MSG_NO_PERMS);
return true;
}
final Player player;
try
{
player = getPlayer(args[1]);
}
catch (PlayerNotFoundException ex)
{
playerMsg(ex.getMessage());
return true;
}
TFM_PlayerData.getPlayerData(player).setTag(null);
playerMsg("Removed " + player.getName() + "'s tag.");
return true;
}
return false;
}
return false;
}
}

View File

@ -8,7 +8,7 @@ import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@CommandPermissions(level = AdminLevel.SUPER, source = SourceType.BOTH) @CommandPermissions(level = AdminLevel.SUPER, source = SourceType.BOTH)
@CommandParameters(description = "Temporarily bans a player for five minutes.", usage = "/<command> <partialname>", aliases = "nope") @CommandParameters(description = "Temporarily bans a player for five minutes.", usage = "/<command> <partialname>", aliases = "noob")
public class Command_tban extends TFM_Command public class Command_tban extends TFM_Command
{ {
@Override @Override
@ -19,21 +19,20 @@ public class Command_tban extends TFM_Command
return false; return false;
} }
Player p; Player player;
try try
{ {
p = getPlayer(args[0]); player = getPlayer(args[0]);
} }
catch (CantFindPlayerException ex) catch (PlayerNotFoundException ex)
{ {
playerMsg(ex.getMessage(), ChatColor.RED); playerMsg(ex.getMessage(), ChatColor.RED);
return true; return true;
} }
TFM_Util.adminAction(sender.getName(), "NOPE: " + p.getName(), true); TFM_Util.adminAction(sender.getName(), "Tempbanning: " + player.getName() + " for 5 minutes.", true);
TFM_ServerInterface.banUsername(p.getName(), ChatColor.RED + "You have been temporarily banned for 5 minutes", TFM_ServerInterface.banUsername(player.getName(), ChatColor.RED + "You have been temporarily banned for 5 minutes.", sender.getName(), TFM_Util.parseDateOffset("5m"));
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.");
p.kickPlayer(ChatColor.RED + "NOPE!\nYou have been temporarily banned for five minutes.");
return true; return true;
} }

View File

@ -25,18 +25,18 @@ public class Command_tempban extends TFM_Command
return false; return false;
} }
Player p; Player player;
try try
{ {
p = getPlayer(args[0]); player = getPlayer(args[0]);
} }
catch (CantFindPlayerException ex) catch (PlayerNotFoundException ex)
{ {
playerMsg(ex.getMessage(), ChatColor.RED); playerMsg(ex.getMessage(), ChatColor.RED);
return true; return true;
} }
StringBuilder bcast_msg = new StringBuilder("Temporarily banned " + p.getName()); StringBuilder bcast_msg = new StringBuilder("Temporarily banned " + player.getName());
Date ban_duration = TFM_Util.parseDateOffset("30m"); Date ban_duration = TFM_Util.parseDateOffset("30m");
if (args.length >= 2) if (args.length >= 2)
@ -57,9 +57,9 @@ public class Command_tempban extends TFM_Command
} }
TFM_Util.adminAction(sender.getName(), bcast_msg.toString(), true); TFM_Util.adminAction(sender.getName(), bcast_msg.toString(), true);
TFM_ServerInterface.banUsername(p.getName(), ban_reason, sender.getName(), ban_duration); TFM_ServerInterface.banUsername(player.getName(), ban_reason, sender.getName(), ban_duration);
TFM_ServerInterface.banIP(p.getAddress().getAddress().getHostAddress().trim(), ban_reason, sender.getName(), ban_duration); TFM_ServerInterface.banIP(player.getAddress().getAddress().getHostAddress().trim(), ban_reason, sender.getName(), ban_duration);
p.kickPlayer(sender.getName() + " - " + bcast_msg.toString()); player.kickPlayer(sender.getName() + " - " + bcast_msg.toString());
return true; return true;
} }

View File

@ -46,14 +46,14 @@ public class Command_tfbanlist extends TFM_Command
StringBuilder banned_players = new StringBuilder(); StringBuilder banned_players = new StringBuilder();
banned_players.append("Banned Players: "); banned_players.append("Banned Players: ");
boolean first = true; boolean first = true;
for (OfflinePlayer p : server.getBannedPlayers()) for (OfflinePlayer player : server.getBannedPlayers())
{ {
if (!first) if (!first)
{ {
banned_players.append(", "); banned_players.append(", ");
} }
first = false; first = false;
banned_players.append(p.getName().trim()); banned_players.append(player.getName().trim());
} }
playerMsg(banned_players.toString()); playerMsg(banned_players.toString());

View File

@ -12,13 +12,12 @@ public class Command_tfm extends TFM_Command
{ {
@Override @Override
public boolean run(CommandSender sender, Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) public boolean run(CommandSender sender, Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
{ {
playerMsg("TotalFreedomMod for 'TotalFreedom', the original all-op server.", ChatColor.GOLD); playerMsg("TotalFreedomMod for 'TotalFreedom', the original all-op server.", ChatColor.GOLD);
playerMsg(String.format("Version " + ChatColor.BLUE + "%s.%s" + ChatColor.BLUE + ", built %s.", TotalFreedomMod.pluginVersion, TotalFreedomMod.buildNumber, TotalFreedomMod.buildDate), ChatColor.GOLD); playerMsg(String.format("Version " + ChatColor.BLUE + "%s.%s" + ChatColor.BLUE + ", built %s.", TotalFreedomMod.pluginVersion, TotalFreedomMod.buildNumber, TotalFreedomMod.buildDate), ChatColor.GOLD);
playerMsg("Created by Madgeek1450 and DarthSalamon.", ChatColor.GOLD); playerMsg("Created by Madgeek1450 and DarthSalamon.", ChatColor.GOLD);
playerMsg("Visit " + ChatColor.AQUA + "http://totalfreedom.me/" + ChatColor.GREEN + " for more information.", ChatColor.DARK_GREEN); playerMsg("Visit " + ChatColor.AQUA + "http://totalfreedom.me/" + ChatColor.GREEN + " for more information.", ChatColor.GREEN);
return true; return true;
} }
} }

View File

@ -1,8 +1,8 @@
package me.StevenLawson.TotalFreedomMod.Commands; package me.StevenLawson.TotalFreedomMod.Commands;
import me.StevenLawson.TotalFreedomMod.TFM_ConfigEntry;
import me.StevenLawson.TotalFreedomMod.TFM_PlayerData; import me.StevenLawson.TotalFreedomMod.TFM_PlayerData;
import me.StevenLawson.TotalFreedomMod.TFM_Util; import me.StevenLawson.TotalFreedomMod.TFM_Util;
import me.StevenLawson.TotalFreedomMod.TotalFreedomMod;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.Material; import org.bukkit.Material;
@ -19,7 +19,7 @@ public class Command_tossmob extends TFM_Command
@Override @Override
public boolean run(CommandSender sender, Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) public boolean run(CommandSender sender, Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
{ {
if (!TotalFreedomMod.tossmobEnabled) if (!TFM_ConfigEntry.TOSSMOB_ENABLED.getBoolean())
{ {
playerMsg("Tossmob is currently disabled."); playerMsg("Tossmob is currently disabled.");
return true; return true;

View File

@ -0,0 +1,131 @@
package me.StevenLawson.TotalFreedomMod.Commands;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import me.StevenLawson.TotalFreedomMod.TFM_Util;
import me.StevenLawson.TotalFreedomMod.TotalFreedomMod;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerMoveEvent;
import org.bukkit.plugin.RegisteredListener;
@CommandPermissions(level = AdminLevel.SUPER, source = SourceType.ONLY_IN_GAME)
@CommandParameters(description = "Pretty rainbow trails.", usage = "/<command> [off]")
public class Command_trail extends TFM_Command
{
private static Listener movementListener = null;
private static final List<Player> trailPlayers = new ArrayList<Player>();
private static final Random RANDOM = new Random();
@Override
public boolean run(CommandSender sender, Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
{
if (args.length > 0 && TFM_Util.isStopCommand(args[0]))
{
trailPlayers.remove(sender_p);
playerMsg("Trail disabled.");
}
else
{
if (!trailPlayers.contains(sender_p))
{
trailPlayers.add(sender_p);
}
playerMsg("Trail enabled. Use \"/trail off\" to disable.");
}
if (!trailPlayers.isEmpty())
{
registerMovementHandler();
}
else
{
unregisterMovementHandler();
}
return true;
}
private static void registerMovementHandler()
{
if (getRegisteredListener(movementListener) == null)
{
Bukkit.getPluginManager().registerEvents(movementListener = new Listener()
{
@EventHandler(priority = EventPriority.NORMAL)
public void onPlayerMove(PlayerMoveEvent event)
{
Player player = event.getPlayer();
if (trailPlayers.contains(player))
{
Block fromBlock = event.getFrom().getBlock();
if (fromBlock.isEmpty())
{
Block toBlock = event.getTo().getBlock();
if (!fromBlock.equals(toBlock))
{
fromBlock.setType(Material.WOOL);
fromBlock.setData((byte) RANDOM.nextInt(16));
}
}
}
}
}, TotalFreedomMod.plugin);
}
}
private static void unregisterMovementHandler()
{
Listener registeredListener = getRegisteredListener(movementListener);
if (registeredListener != null)
{
PlayerMoveEvent.getHandlerList().unregister(registeredListener);
}
}
private static Listener getRegisteredListener(Listener listener)
{
RegisteredListener[] registeredListeners = PlayerMoveEvent.getHandlerList().getRegisteredListeners();
for (RegisteredListener registeredListener : registeredListeners)
{
if (registeredListener.getListener() == listener)
{
return listener;
}
}
return null;
}
public static void startTrail(Player player)
{
if (!trailPlayers.contains(player))
{
trailPlayers.add(player);
}
if (!trailPlayers.isEmpty())
{
registerMovementHandler();
}
}
public static void stopTrail(Player player)
{
trailPlayers.remove(player);
if (trailPlayers.isEmpty())
{
unregisterMovementHandler();
}
}
}

View File

@ -1,5 +1,6 @@
package me.StevenLawson.TotalFreedomMod.Commands; package me.StevenLawson.TotalFreedomMod.Commands;
import me.StevenLawson.TotalFreedomMod.TFM_ConfigEntry;
import me.StevenLawson.TotalFreedomMod.TFM_TwitterHandler; import me.StevenLawson.TotalFreedomMod.TFM_TwitterHandler;
import me.StevenLawson.TotalFreedomMod.TFM_Util; import me.StevenLawson.TotalFreedomMod.TFM_Util;
import me.StevenLawson.TotalFreedomMod.TotalFreedomMod; import me.StevenLawson.TotalFreedomMod.TotalFreedomMod;
@ -15,7 +16,7 @@ public class Command_twitter extends TFM_Command
@Override @Override
public boolean run(CommandSender sender, Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) public boolean run(CommandSender sender, Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
{ {
if (!TotalFreedomMod.twitterbotEnabled) if (!TFM_ConfigEntry.TWITTERBOT_ENABLED.getBoolean())
{ {
TFM_Util.playerMsg(sender, "TwitterBot has been disabled in config.", ChatColor.RED); TFM_Util.playerMsg(sender, "TwitterBot has been disabled in config.", ChatColor.RED);
return true; return true;
@ -26,7 +27,7 @@ public class Command_twitter extends TFM_Command
return false; return false;
} }
TFM_TwitterHandler twitterbot = TFM_TwitterHandler.getInstance(plugin); TFM_TwitterHandler twitterbot = TFM_TwitterHandler.getInstance();
if ("set".equals(args[0])) if ("set".equals(args[0]))
{ {

View File

@ -1,6 +1,6 @@
package me.StevenLawson.TotalFreedomMod.Commands; package me.StevenLawson.TotalFreedomMod.Commands;
import me.StevenLawson.TotalFreedomMod.TotalFreedomMod; import me.StevenLawson.TotalFreedomMod.TFM_ConfigEntry;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -12,22 +12,12 @@ public class Command_waterplace extends TFM_Command
@Override @Override
public boolean run(CommandSender sender, Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) public boolean run(CommandSender sender, Player sender_p, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
{ {
if (args.length != 1) if (args.length != 1)
{ {
return false; return false;
} }
if (args[0].equalsIgnoreCase("on")) playerMsg("Water placement is now " + (TFM_ConfigEntry.ALLOW_WATER_PLACE.setBoolean(!args[0].equalsIgnoreCase("off")) ? "enabled" : "disabled") + ".");
{
TotalFreedomMod.allowWaterPlace = true;
playerMsg("Water placement is now enabled.");
}
else
{
TotalFreedomMod.allowWaterPlace = false;
playerMsg("Water placement is now disabled.");
}
return true; return true;
} }

View File

@ -35,9 +35,9 @@ public class Command_whitelist extends TFM_Command
int offlineWPs = 0; int offlineWPs = 0;
int totalWPs = 0; int totalWPs = 0;
for (OfflinePlayer p : server.getWhitelistedPlayers()) for (OfflinePlayer player : server.getWhitelistedPlayers())
{ {
if (p.isOnline()) if (player.isOnline())
{ {
onlineWPs++; onlineWPs++;
} }
@ -88,23 +88,23 @@ public class Command_whitelist extends TFM_Command
String search_name = args[1].trim().toLowerCase(); String search_name = args[1].trim().toLowerCase();
OfflinePlayer p; OfflinePlayer player;
try try
{ {
p = getPlayer(search_name); player = getPlayer(search_name);
} }
catch (CantFindPlayerException ex) catch (PlayerNotFoundException ex)
{ {
p = server.getOfflinePlayer(search_name); player = server.getOfflinePlayer(search_name);
} }
TFM_Util.adminAction(sender.getName(), "Adding " + p.getName() + " to the whitelist.", false); TFM_Util.adminAction(sender.getName(), "Adding " + player.getName() + " to the whitelist.", false);
p.setWhitelisted(true); player.setWhitelisted(true);
return true; return true;
} }
// remove // remove
if (args[0].equalsIgnoreCase("remove")) if (TFM_Util.isRemoveCommand(args[0]))
{ {
if (args.length < 2) if (args.length < 2)
{ {
@ -113,20 +113,20 @@ public class Command_whitelist extends TFM_Command
String search_name = args[1].trim().toLowerCase(); String search_name = args[1].trim().toLowerCase();
OfflinePlayer p; OfflinePlayer player;
try try
{ {
p = getPlayer(search_name); player = getPlayer(search_name);
} }
catch (CantFindPlayerException ex) catch (PlayerNotFoundException ex)
{ {
p = server.getOfflinePlayer(search_name); player = server.getOfflinePlayer(search_name);
} }
if (p.isWhitelisted()) if (player.isWhitelisted())
{ {
TFM_Util.adminAction(sender.getName(), "Removing " + p.getName() + " from the whitelist.", false); TFM_Util.adminAction(sender.getName(), "Removing " + player.getName() + " from the whitelist.", false);
p.setWhitelisted(false); player.setWhitelisted(false);
return true; return true;
} }
else else
@ -142,11 +142,11 @@ public class Command_whitelist extends TFM_Command
{ {
TFM_Util.adminAction(sender.getName(), "Adding all online players to the whitelist.", false); TFM_Util.adminAction(sender.getName(), "Adding all online players to the whitelist.", false);
int counter = 0; int counter = 0;
for (Player p : server.getOnlinePlayers()) for (Player player : server.getOnlinePlayers())
{ {
if (!p.isWhitelisted()) if (!player.isWhitelisted())
{ {
p.setWhitelisted(true); player.setWhitelisted(true);
counter++; counter++;
} }
} }

View File

@ -52,14 +52,14 @@ public class Command_whohas extends TFM_Command
List<String> players = new ArrayList<String>(); List<String> players = new ArrayList<String>();
for (Player p : server.getOnlinePlayers()) for (Player player : server.getOnlinePlayers())
{ {
if (p.getInventory().contains(material)) if (player.getInventory().contains(material))
{ {
players.add(p.getName()); players.add(player.getName());
if (smite & !TFM_SuperadminList.isUserSuperadmin(p)) if (smite & !TFM_SuperadminList.isUserSuperadmin(player))
{ {
Command_smite.smite(p); Command_smite.smite(player);
} }
} }
} }

View File

@ -36,9 +36,9 @@ public class Command_wildcard extends TFM_Command
String base_command = StringUtils.join(args, " "); String base_command = StringUtils.join(args, " ");
for (Player p : server.getOnlinePlayers()) for (Player player : server.getOnlinePlayers())
{ {
String out_command = base_command.replaceAll("\\x3f", p.getName()); String out_command = base_command.replaceAll("\\x3f", player.getName());
playerMsg("Running Command: " + out_command); playerMsg("Running Command: " + out_command);
server.dispatchCommand(sender, out_command); server.dispatchCommand(sender, out_command);
} }

View File

@ -17,9 +17,9 @@ public class Command_wipeflatlands extends TFM_Command
TFM_Util.bcastMsg("Server is going offline for flatlands wipe.", ChatColor.GRAY); TFM_Util.bcastMsg("Server is going offline for flatlands wipe.", ChatColor.GRAY);
for (Player p : server.getOnlinePlayers()) for (Player player : server.getOnlinePlayers())
{ {
p.kickPlayer("Server is going offline for flatlands wipe, come back in a few minutes."); player.kickPlayer("Server is going offline for flatlands wipe, come back in a few minutes.");
} }
server.shutdown(); server.shutdown();

View File

@ -2,17 +2,17 @@ package me.StevenLawson.TotalFreedomMod.Commands;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
public class CantFindPlayerException extends Exception public class PlayerNotFoundException extends Exception
{ {
// apparently, java needs this // apparently, java needs this
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
public CantFindPlayerException() public PlayerNotFoundException()
{ {
super(ChatColor.GRAY + "Can't find player."); super(ChatColor.GRAY + "Can't find player.");
} }
public CantFindPlayerException(String msg) public PlayerNotFoundException(String msg)
{ {
super(ChatColor.GRAY + "Can't find player: " + msg); super(ChatColor.GRAY + "Can't find player: " + msg);
} }

View File

@ -138,19 +138,19 @@ public abstract class TFM_Command
return true; return true;
} }
public Player getPlayer(final String partialname) throws CantFindPlayerException public Player getPlayer(final String partialname) throws PlayerNotFoundException
{ {
List<Player> matches = server.matchPlayer(partialname); List<Player> matches = server.matchPlayer(partialname);
if (matches.isEmpty()) if (matches.isEmpty())
{ {
for (Player p : server.getOnlinePlayers()) for (Player player : server.getOnlinePlayers())
{ {
if (p.getDisplayName().toLowerCase().contains(partialname.toLowerCase())) if (player.getDisplayName().toLowerCase().contains(partialname.toLowerCase()))
{ {
return p; return player;
} }
} }
throw new CantFindPlayerException(partialname); throw new PlayerNotFoundException(partialname);
} }
else else
{ {

View File

@ -46,26 +46,11 @@ public class TFM_CommandLoader
for (TFM_CommandInfo commandInfo : commandList) for (TFM_CommandInfo commandInfo : commandList)
{ {
String description = commandInfo.getDescription(); TFM_DynamicCommand dynamicCommand = new TFM_DynamicCommand(commandInfo);
switch (commandInfo.getLevel())
{
case SENIOR:
description = "Senior " + (commandInfo.getSource() == SourceType.ONLY_CONSOLE ? "Console" : "") + " Command - " + description;
break;
case SUPER:
description = "Superadmin Command - " + description;
break;
case OP:
description = "OP Command - " + description;
break;
}
TFM_DynamicCommand dynamicCommand = new TFM_DynamicCommand(commandInfo.getCommandName(), description, commandInfo.getUsage(), commandInfo.getAliases());
Command existing = commandMap.getCommand(dynamicCommand.getName()); Command existing = commandMap.getCommand(dynamicCommand.getName());
if (existing != null) if (existing != null)
{ {
TFM_Log.info("Replacing command: " + existing.getName());
unregisterCommand(existing, commandMap); unregisterCommand(existing, commandMap);
} }
@ -192,7 +177,7 @@ public class TFM_CommandLoader
return commandList; return commandList;
} }
private static class TFM_CommandInfo public static class TFM_CommandInfo
{ {
private final String commandName; private final String commandName;
private final Class<?> commandClass; private final Class<?> commandClass;
@ -235,6 +220,26 @@ public class TFM_CommandLoader
return description; return description;
} }
public String getDescriptionPermissioned()
{
String _description = description;
switch (this.getLevel())
{
case SENIOR:
_description = "Senior " + (this.getSource() == SourceType.ONLY_CONSOLE ? "Console" : "") + " Command - " + _description;
break;
case SUPER:
_description = "Superadmin Command - " + _description;
break;
case OP:
_description = "OP Command - " + _description;
break;
}
return _description;
}
public AdminLevel getLevel() public AdminLevel getLevel()
{ {
return level; return level;
@ -271,11 +276,15 @@ public class TFM_CommandLoader
} }
} }
private class TFM_DynamicCommand extends Command implements PluginIdentifiableCommand public class TFM_DynamicCommand extends Command implements PluginIdentifiableCommand
{ {
public TFM_DynamicCommand(String commandName, String description, String usage, List<String> aliases) private final TFM_CommandInfo commandInfo;
private TFM_DynamicCommand(TFM_CommandInfo commandInfo)
{ {
super(commandName, description, usage, aliases); super(commandInfo.getCommandName(), commandInfo.getDescriptionPermissioned(), commandInfo.getUsage(), commandInfo.getAliases());
this.commandInfo = commandInfo;
} }
@Override @Override
@ -313,6 +322,11 @@ public class TFM_CommandLoader
{ {
return TotalFreedomMod.plugin; return TotalFreedomMod.plugin;
} }
public TFM_CommandInfo getCommandInfo()
{
return commandInfo;
}
} }
public static TFM_CommandLoader getInstance() public static TFM_CommandLoader getInstance()

View File

@ -0,0 +1,59 @@
package me.StevenLawson.TotalFreedomMod.HTTPD;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import static org.apache.commons.lang3.StringEscapeUtils.*;
public class HTMLGenerationTools
{
private HTMLGenerationTools()
{
throw new AssertionError();
}
public static String paragraph(String data)
{
return "<p>" + escapeHtml4(data) + "</p>\r\n";
}
public static String heading(String data, int level)
{
return "<h" + level + ">" + escapeHtml4(data) + "</h" + level + ">\r\n";
}
public static <K, V> String list(Map<K, V> map)
{
StringBuilder output = new StringBuilder();
output.append("<ul>\r\n");
Iterator<Map.Entry<K, V>> it = map.entrySet().iterator();
while (it.hasNext())
{
Map.Entry<K, V> entry = it.next();
output.append("<li>").append(escapeHtml4(entry.getKey().toString() + " = " + entry.getValue().toString())).append("</li>\r\n");
}
output.append("</ul>\r\n");
return output.toString();
}
public static <T> String list(List<T> list)
{
StringBuilder output = new StringBuilder();
output.append("<ul>\r\n");
for (T entry : list)
{
output.append("<li>").append(escapeHtml4(entry.toString())).append("</li>\r\n");
}
output.append("</ul>\r\n");
return output.toString();
}
}

View File

@ -0,0 +1,41 @@
package me.StevenLawson.TotalFreedomMod.HTTPD;
import java.util.Map;
import org.apache.commons.lang.StringUtils;
import static me.StevenLawson.TotalFreedomMod.HTTPD.HTMLGenerationTools.*;
public class Module_dump extends TFM_HTTPD_Module
{
public Module_dump(String uri, NanoHTTPD.Method method, Map<String, String> headers, Map<String, String> params, Map<String, String> files)
{
super(uri, method, headers, params, files);
}
@Override
public String getBody()
{
StringBuilder responseBody = new StringBuilder();
String[] args = StringUtils.split(uri, "/");
responseBody
.append(paragraph("URI: " + uri))
.append(paragraph("args (Length: " + args.length + "): " + StringUtils.join(args, ",")))
.append(paragraph("Method: " + method.toString()))
.append(paragraph("Headers:"))
.append(list(headers))
.append(paragraph("Params:"))
.append(list(params))
.append(paragraph("Files:"))
.append(list(files));
return responseBody.toString();
}
@Override
public String getTitle()
{
return "TotalFreedomMod :: Request Debug Dumper";
}
}

View File

@ -0,0 +1,363 @@
package me.StevenLawson.TotalFreedomMod.HTTPD;
import java.io.File;
import java.io.FileInputStream;
import java.io.FilenameFilter;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.StringTokenizer;
import static me.StevenLawson.TotalFreedomMod.HTTPD.NanoHTTPD.*;
import me.StevenLawson.TotalFreedomMod.TFM_ConfigEntry;
/*
* This class was adapted from https://github.com/NanoHttpd/nanohttpd/blob/master/webserver/src/main/java/fi/iki/elonen/SimpleWebServer.java
*/
public class Module_file extends TFM_HTTPD_Module
{
private final File rootDir = new File(TFM_ConfigEntry.HTTPD_PUBLIC_FOLDER.getString());
private static final Map<String, String> MIME_TYPES = new HashMap<String, String>();
static
{
MIME_TYPES.put("css", "text/css");
MIME_TYPES.put("htm", "text/html");
MIME_TYPES.put("html", "text/html");
MIME_TYPES.put("xml", "text/xml");
MIME_TYPES.put("java", "text/x-java-source, text/java");
MIME_TYPES.put("txt", "text/plain");
MIME_TYPES.put("asc", "text/plain");
MIME_TYPES.put("gif", "image/gif");
MIME_TYPES.put("jpg", "image/jpeg");
MIME_TYPES.put("jpeg", "image/jpeg");
MIME_TYPES.put("png", "image/png");
MIME_TYPES.put("mp3", "audio/mpeg");
MIME_TYPES.put("m3u", "audio/mpeg-url");
MIME_TYPES.put("mp4", "video/mp4");
MIME_TYPES.put("ogv", "video/ogg");
MIME_TYPES.put("flv", "video/x-flv");
MIME_TYPES.put("mov", "video/quicktime");
MIME_TYPES.put("swf", "application/x-shockwave-flash");
MIME_TYPES.put("js", "application/javascript");
MIME_TYPES.put("pdf", "application/pdf");
MIME_TYPES.put("doc", "application/msword");
MIME_TYPES.put("ogg", "application/x-ogg");
MIME_TYPES.put("zip", "application/octet-stream");
MIME_TYPES.put("exe", "application/octet-stream");
MIME_TYPES.put("class", "application/octet-stream");
}
public Module_file(String uri, NanoHTTPD.Method method, Map<String, String> headers, Map<String, String> params, Map<String, String> files)
{
super(uri, method, headers, params, files);
}
private File getRootDir()
{
return rootDir;
}
private String encodeUri(String uri)
{
String newUri = "";
StringTokenizer st = new StringTokenizer(uri, "/ ", true);
while (st.hasMoreTokens())
{
String tok = st.nextToken();
if (tok.equals("/"))
{
newUri += "/";
}
else if (tok.equals(" "))
{
newUri += "%20";
}
else
{
try
{
newUri += URLEncoder.encode(tok, "UTF-8");
}
catch (UnsupportedEncodingException ignored)
{
}
}
}
return newUri;
}
private Response serveFile(String uri, Map<String, String> header, File homeDir)
{
Response res = null;
// Make sure we won't die of an exception later
if (!homeDir.isDirectory())
{
res = new Response(Response.Status.INTERNAL_ERROR, NanoHTTPD.MIME_PLAINTEXT, "INTERNAL ERRROR: serveFile(): given homeDir is not a directory.");
}
if (res == null)
{
// Remove URL arguments
uri = uri.trim().replace(File.separatorChar, '/');
if (uri.indexOf('?') >= 0)
{
uri = uri.substring(0, uri.indexOf('?'));
}
// Prohibit getting out of current directory
if (uri.startsWith("src/main") || uri.endsWith("src/main") || uri.contains("../"))
{
res = new Response(Response.Status.FORBIDDEN, NanoHTTPD.MIME_PLAINTEXT, "FORBIDDEN: Won't serve ../ for security reasons.");
}
}
File f = new File(homeDir, uri);
if (res == null && !f.exists())
{
res = new Response(Response.Status.NOT_FOUND, NanoHTTPD.MIME_PLAINTEXT, "Error 404, file not found.");
}
// List the directory, if necessary
if (res == null && f.isDirectory())
{
// Browsers get confused without '/' after the
// directory, send a redirect.
if (!uri.endsWith("/"))
{
uri += "/";
res = new Response(Response.Status.REDIRECT, NanoHTTPD.MIME_HTML, "<html><body>Redirected: <a href=\"" + uri + "\">" + uri
+ "</a></body></html>");
res.addHeader("Location", uri);
}
if (res == null)
{
// First try index.html and index.htm
if (new File(f, "index.html").exists())
{
f = new File(homeDir, uri + "/index.html");
}
else if (new File(f, "index.htm").exists())
{
f = new File(homeDir, uri + "/index.htm");
}
else if (f.canRead())
{
// No index file, list the directory if it is readable
res = new Response(listDirectory(uri, f));
}
else
{
res = new Response(Response.Status.FORBIDDEN, NanoHTTPD.MIME_PLAINTEXT, "FORBIDDEN: No directory listing.");
}
}
}
try
{
if (res == null)
{
// Get MIME type from file name extension, if possible
String mime = null;
int dot = f.getCanonicalPath().lastIndexOf('.');
if (dot >= 0)
{
mime = MIME_TYPES.get(f.getCanonicalPath().substring(dot + 1).toLowerCase());
}
if (mime == null)
{
mime = NanoHTTPD.MIME_DEFAULT_BINARY;
}
// Calculate etag
String etag = Integer.toHexString((f.getAbsolutePath() + f.lastModified() + "" + f.length()).hashCode());
// Support (simple) skipping:
long startFrom = 0;
long endAt = -1;
String range = header.get("range");
if (range != null)
{
if (range.startsWith("bytes="))
{
range = range.substring("bytes=".length());
int minus = range.indexOf('-');
try
{
if (minus > 0)
{
startFrom = Long.parseLong(range.substring(0, minus));
endAt = Long.parseLong(range.substring(minus + 1));
}
}
catch (NumberFormatException ignored)
{
}
}
}
// Change return code and add Content-Range header when skipping is requested
long fileLen = f.length();
if (range != null && startFrom >= 0)
{
if (startFrom >= fileLen)
{
res = new Response(Response.Status.RANGE_NOT_SATISFIABLE, NanoHTTPD.MIME_PLAINTEXT, "");
res.addHeader("Content-Range", "bytes 0-0/" + fileLen);
res.addHeader("ETag", etag);
}
else
{
if (endAt < 0)
{
endAt = fileLen - 1;
}
long newLen = endAt - startFrom + 1;
if (newLen < 0)
{
newLen = 0;
}
final long dataLen = newLen;
FileInputStream fis = new FileInputStream(f)
{
@Override
public int available() throws IOException
{
return (int) dataLen;
}
};
fis.skip(startFrom);
res = new Response(Response.Status.PARTIAL_CONTENT, mime, fis);
res.addHeader("Content-Length", "" + dataLen);
res.addHeader("Content-Range", "bytes " + startFrom + "-" + endAt + "/" + fileLen);
res.addHeader("ETag", etag);
}
}
else
{
if (etag.equals(header.get("if-none-match")))
{
res = new Response(Response.Status.NOT_MODIFIED, mime, "");
}
else
{
res = new Response(Response.Status.OK, mime, new FileInputStream(f));
res.addHeader("Content-Length", "" + fileLen);
res.addHeader("ETag", etag);
}
}
}
}
catch (IOException ioe)
{
res = new Response(Response.Status.FORBIDDEN, NanoHTTPD.MIME_PLAINTEXT, "FORBIDDEN: Reading file failed.");
}
res.addHeader("Accept-Ranges", "bytes"); // Announce that the file server accepts partial content requestes
return res;
}
private String listDirectory(String uri, File f)
{
String heading = "Directory " + uri;
String msg = "<html><head><title>" + heading + "</title><style><!--\n"
+ "span.dirname { font-weight: bold; }\n"
+ "span.filesize { font-size: 75%; }\n"
+ "// -->\n"
+ "</style>"
+ "</head><body><h1>" + heading + "</h1>";
String up = null;
if (uri.length() > 1)
{
String u = uri.substring(0, uri.length() - 1);
int slash = u.lastIndexOf('/');
if (slash >= 0 && slash < u.length())
{
up = uri.substring(0, slash + 1);
}
}
List<String> _files = Arrays.asList(f.list(new FilenameFilter()
{
@Override
public boolean accept(File dir, String name)
{
return new File(dir, name).isFile();
}
}));
Collections.sort(_files);
List<String> directories = Arrays.asList(f.list(new FilenameFilter()
{
@Override
public boolean accept(File dir, String name)
{
return new File(dir, name).isDirectory();
}
}));
Collections.sort(directories);
if (up != null || directories.size() + _files.size() > 0)
{
msg += "<ul>";
if (up != null || directories.size() > 0)
{
msg += "<section class=\"directories\">";
if (up != null)
{
msg += "<li><a rel=\"directory\" href=\"" + up + "\"><span class=\"dirname\">..</span></a></b></li>";
}
for (int i = 0; i < directories.size(); i++)
{
String dir = directories.get(i) + "/";
msg += "<li><a rel=\"directory\" href=\"" + encodeUri(uri + dir) + "\"><span class=\"dirname\">" + dir + "</span></a></b></li>";
}
msg += "</section>";
}
if (_files.size() > 0)
{
msg += "<section class=\"files\">";
for (int i = 0; i < _files.size(); i++)
{
String file = _files.get(i);
msg += "<li><a href=\"" + encodeUri(uri + file) + "\"><span class=\"filename\">" + file + "</span></a>";
File curFile = new File(f, file);
long len = curFile.length();
msg += "&nbsp;<span class=\"filesize\">(";
if (len < 1024)
{
msg += len + " bytes";
}
else if (len < 1024 * 1024)
{
msg += len / 1024 + "." + (len % 1024 / 10 % 100) + " KB";
}
else
{
msg += len / (1024 * 1024) + "." + len % (1024 * 1024) / 10 % 100 + " MB";
}
msg += ")</span></li>";
}
msg += "</section>";
}
msg += "</ul>";
}
msg += "</body></html>";
return msg;
}
@Override
public Response getResponse()
{
return serveFile(uri, headers, getRootDir());
}
}

Some files were not shown because too many files have changed in this diff Show More