2016-03-02 19:28:01 +00:00
package me.totalfreedom.totalfreedommod.command ;
2013-08-12 02:02:18 +00:00
2019-01-29 04:57:41 +00:00
import java.util.ArrayList ;
import java.util.Arrays ;
import java.util.Collections ;
import java.util.List ;
2016-03-06 15:56:15 +00:00
import me.totalfreedom.totalfreedommod.rank.Rank ;
2015-10-19 17:43:46 +00:00
import me.totalfreedom.totalfreedommod.util.FUtil ;
import me.totalfreedom.totalfreedommod.world.WorldTime ;
import me.totalfreedom.totalfreedommod.world.WorldWeather ;
2013-08-22 00:07:14 +00:00
import org.bukkit.World ;
2013-08-12 02:02:18 +00:00
import org.bukkit.command.Command ;
import org.bukkit.command.CommandSender ;
import org.bukkit.entity.Player ;
2016-03-06 15:56:15 +00:00
@CommandPermissions ( level = Rank . OP , source = SourceType . BOTH )
2020-03-30 23:43:57 +00:00
@CommandParameters ( description = " Allows for admins to configure guests, time, and weather of the AdminWorld, and allows for admins and guests to go to the AdminWorld. " ,
2019-01-29 04:57:41 +00:00
usage = " /<command> [guest < list | purge | add <player> | remove <player> > | time <morning | noon | evening | night> | weather <off | rain | storm>] " ,
2017-10-13 18:35:11 +00:00
aliases = " aw " )
2015-10-19 17:43:46 +00:00
public class Command_adminworld extends FreedomCommand
2013-08-12 02:02:18 +00:00
{
2015-10-19 17:43:46 +00:00
2013-08-15 21:40:35 +00:00
private enum CommandMode
{
2018-05-13 19:49:13 +00:00
TELEPORT , GUEST , TIME , WEATHER
2013-08-15 21:40:35 +00:00
}
2013-08-12 02:02:18 +00:00
@Override
2015-11-22 18:26:47 +00:00
public boolean run ( CommandSender sender , Player playerSender , Command cmd , String commandLabel , String [ ] args , boolean senderIsConsole )
2013-08-12 02:02:18 +00:00
{
2013-08-15 21:40:35 +00:00
CommandMode commandMode = null ;
if ( args . length = = 0 )
{
commandMode = CommandMode . TELEPORT ;
}
else if ( args . length > = 2 )
2013-08-12 16:51:30 +00:00
{
2013-08-15 21:40:35 +00:00
if ( " guest " . equalsIgnoreCase ( args [ 0 ] ) )
{
commandMode = CommandMode . GUEST ;
}
else if ( " time " . equalsIgnoreCase ( args [ 0 ] ) )
{
commandMode = CommandMode . TIME ;
}
2013-08-17 01:36:25 +00:00
else if ( " weather " . equalsIgnoreCase ( args [ 0 ] ) )
{
commandMode = CommandMode . WEATHER ;
}
2013-08-12 16:51:30 +00:00
}
2013-08-15 21:40:35 +00:00
if ( commandMode = = null )
2013-08-12 16:51:30 +00:00
{
2013-08-15 21:40:35 +00:00
return false ;
2013-08-12 16:51:30 +00:00
}
2013-08-15 21:40:35 +00:00
2013-08-23 18:43:58 +00:00
try
2013-08-15 21:40:35 +00:00
{
2013-08-23 18:43:58 +00:00
switch ( commandMode )
2013-08-15 21:40:35 +00:00
{
2013-08-23 18:43:58 +00:00
case TELEPORT :
2013-08-22 00:07:14 +00:00
{
2015-11-22 18:26:47 +00:00
if ( ! ( sender instanceof Player ) | | playerSender = = null )
2013-08-23 20:59:31 +00:00
{
return true ;
}
2013-08-23 18:43:58 +00:00
World adminWorld = null ;
try
{
2015-10-19 17:43:46 +00:00
adminWorld = plugin . wm . adminworld . getWorld ( ) ;
2013-08-23 18:43:58 +00:00
}
catch ( Exception ex )
{
}
2013-08-15 21:40:35 +00:00
2015-11-22 18:26:47 +00:00
if ( adminWorld = = null | | playerSender . getWorld ( ) = = adminWorld )
2013-08-15 21:40:35 +00:00
{
2016-03-02 19:28:01 +00:00
msg ( " Going to the main world. " ) ;
2015-11-22 18:26:47 +00:00
playerSender . teleport ( server . getWorlds ( ) . get ( 0 ) . getSpawnLocation ( ) ) ;
2013-08-15 21:40:35 +00:00
}
2013-08-23 18:43:58 +00:00
else
2013-08-22 19:26:12 +00:00
{
2015-11-22 18:26:47 +00:00
if ( plugin . wm . adminworld . canAccessWorld ( playerSender ) )
2013-08-23 20:59:31 +00:00
{
2016-03-02 19:28:01 +00:00
msg ( " Going to the AdminWorld. " ) ;
2015-11-22 18:26:47 +00:00
plugin . wm . adminworld . sendToWorld ( playerSender ) ;
2013-08-23 20:59:31 +00:00
}
else
{
2016-03-02 19:28:01 +00:00
msg ( " You don't have permission to access the AdminWorld. " ) ;
2013-08-23 20:59:31 +00:00
}
2013-08-22 19:26:12 +00:00
}
2013-08-23 18:43:58 +00:00
break ;
}
case GUEST :
{
if ( args . length = = 2 )
2013-08-15 21:40:35 +00:00
{
2013-08-23 18:43:58 +00:00
if ( " list " . equalsIgnoreCase ( args [ 1 ] ) )
{
2016-03-02 19:28:01 +00:00
msg ( " AdminWorld guest list: " + plugin . wm . adminworld . guestListToString ( ) ) ;
2013-08-23 18:43:58 +00:00
}
else if ( " purge " . equalsIgnoreCase ( args [ 1 ] ) )
{
2015-11-22 18:26:47 +00:00
assertCommandPerms ( sender , playerSender ) ;
2015-10-19 17:43:46 +00:00
plugin . wm . adminworld . purgeGuestList ( ) ;
FUtil . adminAction ( sender . getName ( ) , " AdminWorld guest list purged. " , false ) ;
2013-08-23 18:43:58 +00:00
}
else
{
return false ;
}
2013-08-15 21:40:35 +00:00
}
2013-08-23 18:43:58 +00:00
else if ( args . length = = 3 )
2013-08-15 21:40:35 +00:00
{
2015-11-22 18:26:47 +00:00
assertCommandPerms ( sender , playerSender ) ;
2013-08-23 18:43:58 +00:00
if ( " add " . equalsIgnoreCase ( args [ 1 ] ) )
{
2014-04-26 11:55:24 +00:00
final Player player = getPlayer ( args [ 2 ] ) ;
if ( player = = null )
2013-08-23 18:43:58 +00:00
{
2015-10-19 17:43:46 +00:00
sender . sendMessage ( FreedomCommand . PLAYER_NOT_FOUND ) ;
2013-08-23 18:43:58 +00:00
return true ;
}
2013-08-23 20:29:46 +00:00
2015-11-22 18:26:47 +00:00
if ( plugin . wm . adminworld . addGuest ( player , playerSender ) )
2013-08-23 20:29:46 +00:00
{
2015-10-19 17:43:46 +00:00
FUtil . adminAction ( sender . getName ( ) , " AdminWorld guest added: " + player . getName ( ) , false ) ;
2013-08-23 20:29:46 +00:00
}
else
{
2016-03-02 19:28:01 +00:00
msg ( " Could not add player to guest list. " ) ;
2013-08-23 20:29:46 +00:00
}
2013-08-23 18:43:58 +00:00
}
2014-05-05 13:31:12 +00:00
else if ( " remove " . equals ( args [ 1 ] ) )
2013-08-23 18:43:58 +00:00
{
2015-10-19 17:43:46 +00:00
final Player player = plugin . wm . adminworld . removeGuest ( args [ 2 ] ) ;
2013-08-23 18:43:58 +00:00
if ( player ! = null )
{
2015-10-19 17:43:46 +00:00
FUtil . adminAction ( sender . getName ( ) , " AdminWorld guest removed: " + player . getName ( ) , false ) ;
2013-08-23 18:43:58 +00:00
}
else
{
2016-03-02 19:28:01 +00:00
msg ( " Can't find guest entry for: " + args [ 2 ] ) ;
2013-08-23 18:43:58 +00:00
}
}
else
{
return false ;
}
2013-08-15 21:40:35 +00:00
}
2013-08-23 18:43:58 +00:00
break ;
2013-08-15 21:40:35 +00:00
}
2013-08-23 18:43:58 +00:00
case TIME :
{
2015-11-22 18:26:47 +00:00
assertCommandPerms ( sender , playerSender ) ;
2013-08-15 21:40:35 +00:00
2013-08-23 18:43:58 +00:00
if ( args . length = = 2 )
{
2015-10-19 17:43:46 +00:00
WorldTime timeOfDay = WorldTime . getByAlias ( args [ 1 ] ) ;
2013-08-24 01:22:13 +00:00
if ( timeOfDay ! = null )
{
2015-10-19 17:43:46 +00:00
plugin . wm . adminworld . setTimeOfDay ( timeOfDay ) ;
2016-03-02 19:28:01 +00:00
msg ( " AdminWorld time set to: " + timeOfDay . name ( ) ) ;
2013-08-24 01:22:13 +00:00
}
else
{
2016-03-02 19:28:01 +00:00
msg ( " Invalid time of day. Can be: sunrise, noon, sunset, midnight " ) ;
2013-08-24 01:22:13 +00:00
}
2013-08-23 18:43:58 +00:00
}
else
{
return false ;
}
2013-08-22 19:26:12 +00:00
2013-08-23 18:43:58 +00:00
break ;
2013-08-15 21:40:35 +00:00
}
2013-08-23 18:43:58 +00:00
case WEATHER :
{
2015-11-22 18:26:47 +00:00
assertCommandPerms ( sender , playerSender ) ;
2013-08-15 21:40:35 +00:00
2013-08-23 18:43:58 +00:00
if ( args . length = = 2 )
{
2015-10-19 17:43:46 +00:00
WorldWeather weatherMode = WorldWeather . getByAlias ( args [ 1 ] ) ;
2013-08-24 01:22:13 +00:00
if ( weatherMode ! = null )
{
2015-10-19 17:43:46 +00:00
plugin . wm . adminworld . setWeatherMode ( weatherMode ) ;
2016-03-02 19:28:01 +00:00
msg ( " AdminWorld weather set to: " + weatherMode . name ( ) ) ;
2013-08-24 01:22:13 +00:00
}
else
{
2016-03-02 19:28:01 +00:00
msg ( " Invalid weather mode. Can be: off, rain, storm " ) ;
2013-08-24 01:22:13 +00:00
}
2013-08-23 18:43:58 +00:00
}
else
{
return false ;
}
2013-08-22 19:26:12 +00:00
2013-08-23 18:43:58 +00:00
break ;
}
default :
2013-08-17 01:36:25 +00:00
{
2013-08-23 18:43:58 +00:00
return false ;
2013-08-17 01:36:25 +00:00
}
2013-08-15 21:40:35 +00:00
}
}
2013-08-23 18:43:58 +00:00
catch ( PermissionDeniedException ex )
{
2015-11-15 23:32:04 +00:00
if ( ex . getMessage ( ) . isEmpty ( ) )
{
return noPerms ( ) ;
}
2013-08-23 18:43:58 +00:00
sender . sendMessage ( ex . getMessage ( ) ) ;
2015-11-15 23:32:04 +00:00
return true ;
2013-08-23 18:43:58 +00:00
}
2013-08-15 21:40:35 +00:00
2013-08-12 02:02:18 +00:00
return true ;
}
2013-08-23 18:43:58 +00:00
2015-10-19 17:43:46 +00:00
// TODO: Redo this properly
2015-11-22 18:26:47 +00:00
private void assertCommandPerms ( CommandSender sender , Player playerSender ) throws PermissionDeniedException
2013-08-23 18:43:58 +00:00
{
2015-11-22 18:26:47 +00:00
if ( ! ( sender instanceof Player ) | | playerSender = = null | | ! isAdmin ( sender ) )
2013-08-23 18:43:58 +00:00
{
2015-11-15 23:32:04 +00:00
throw new PermissionDeniedException ( ) ;
2013-08-23 18:43:58 +00:00
}
}
private class PermissionDeniedException extends Exception
{
2015-10-19 17:43:46 +00:00
2014-06-22 15:53:50 +00:00
private static final long serialVersionUID = 1L ;
2015-11-15 23:32:04 +00:00
private PermissionDeniedException ( )
{
super ( " " ) ;
}
2014-06-22 15:53:50 +00:00
private PermissionDeniedException ( String string )
2013-08-23 18:43:58 +00:00
{
super ( string ) ;
}
}
2015-10-19 17:43:46 +00:00
2019-01-29 04:57:41 +00:00
@Override
public List < String > getTabCompleteOptions ( CommandSender sender , Command command , String alias , String [ ] args )
{
if ( ! plugin . al . isAdmin ( sender ) )
{
return Collections . emptyList ( ) ;
}
if ( args . length = = 1 )
{
return Arrays . asList ( " guest " , " time " , " weather " ) ;
}
else if ( args . length = = 2 )
{
if ( args [ 0 ] . equals ( " guest " ) )
{
return Arrays . asList ( " add " , " remove " , " list " , " purge " ) ;
}
else if ( args [ 0 ] . equals ( " time " ) )
{
return Arrays . asList ( " morning " , " noon " , " evening " , " night " ) ;
}
else if ( args [ 0 ] . equals ( " weather " ) )
{
return Arrays . asList ( " off " , " rain " , " storm " ) ;
}
}
else if ( args . length = = 3 )
{
if ( args [ 0 ] . equals ( " guest " ) )
{
if ( args [ 1 ] . equals ( " add " ) )
{
return FUtil . getPlayerList ( ) ;
}
else if ( args [ 1 ] . equals ( " remove " ) )
{
return plugin . wm . adminworld . getGuestList ( ) ;
}
}
}
return Collections . emptyList ( ) ;
}
2013-08-12 02:02:18 +00:00
}