2018-05-13 19:49:13 +00:00
package me.totalfreedom.totalfreedommod.command ;
2020-08-31 00:13:46 +00:00
import io.papermc.lib.PaperLib ;
2019-01-29 04:57:41 +00:00
import java.util.Arrays ;
import java.util.Collections ;
import java.util.List ;
2018-05-13 19:49:13 +00:00
import me.totalfreedom.totalfreedommod.rank.Rank ;
import me.totalfreedom.totalfreedommod.world.WorldTime ;
import me.totalfreedom.totalfreedommod.world.WorldWeather ;
import org.bukkit.World ;
import org.bukkit.command.Command ;
import org.bukkit.command.CommandSender ;
import org.bukkit.entity.Player ;
@CommandPermissions ( level = Rank . OP , source = SourceType . BOTH )
2020-03-30 23:43:57 +00:00
@CommandParameters ( description = " Allows for master builders to configure the time, the weather of the MasterBuilder, and allows for players to go to the MasterBuilderWorld. " ,
2019-01-29 04:57:41 +00:00
usage = " /<command> [time <morning | noon | evening | night> | weather <off | rain | storm>] " ,
2018-05-18 00:46:20 +00:00
aliases = " mbw,mbworld " )
2018-05-13 19:49:13 +00:00
public class Command_masterbuilderworld extends FreedomCommand
{
private enum CommandMode
{
TELEPORT , TIME , WEATHER
}
@Override
public boolean run ( CommandSender sender , Player playerSender , Command cmd , String commandLabel , String [ ] args , boolean senderIsConsole )
{
CommandMode commandMode = null ;
if ( args . length = = 0 )
{
commandMode = CommandMode . TELEPORT ;
}
else if ( args . length > = 2 )
{
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 ) | | playerSender = = null )
{
2020-07-29 03:14:58 +00:00
return false ;
2018-05-13 19:49:13 +00:00
}
World masterBuilderWorld = null ;
try
{
masterBuilderWorld = plugin . wm . masterBuilderWorld . getWorld ( ) ;
}
catch ( Exception ex )
{
}
if ( masterBuilderWorld = = null | | playerSender . getWorld ( ) = = masterBuilderWorld )
{
msg ( " Going to the main world. " ) ;
2020-08-31 00:13:46 +00:00
PaperLib . teleportAsync ( playerSender , server . getWorlds ( ) . get ( 0 ) . getSpawnLocation ( ) ) ;
2018-05-13 19:49:13 +00:00
}
else
{
msg ( " Going to the Master Builder world " ) ;
plugin . wm . masterBuilderWorld . sendToWorld ( playerSender ) ;
}
break ;
}
case TIME :
{
assertCommandPerms ( sender , playerSender ) ;
if ( args . length = = 2 )
{
WorldTime timeOfDay = WorldTime . getByAlias ( args [ 1 ] ) ;
if ( timeOfDay ! = null )
{
plugin . wm . masterBuilderWorld . setTimeOfDay ( timeOfDay ) ;
msg ( " MasterBuilder world time set to: " + timeOfDay . name ( ) ) ;
}
else
{
msg ( " Invalid time of day. Can be: sunrise, noon, sunset, midnight " ) ;
}
}
else
{
return false ;
}
break ;
}
case WEATHER :
{
assertCommandPerms ( sender , playerSender ) ;
if ( args . length = = 2 )
{
WorldWeather weatherMode = WorldWeather . getByAlias ( args [ 1 ] ) ;
if ( weatherMode ! = null )
{
plugin . wm . masterBuilderWorld . setWeatherMode ( weatherMode ) ;
msg ( " MasterBuilder world weather set to: " + weatherMode . name ( ) ) ;
}
else
{
msg ( " Invalid weather mode. Can be: off, rain, storm " ) ;
}
}
else
{
return false ;
}
break ;
}
default :
{
return false ;
}
}
}
catch ( PermissionDeniedException ex )
{
if ( ex . getMessage ( ) . isEmpty ( ) )
{
return noPerms ( ) ;
}
sender . sendMessage ( ex . getMessage ( ) ) ;
return true ;
}
return true ;
}
2019-01-29 04:57:41 +00:00
@Override
public List < String > getTabCompleteOptions ( CommandSender sender , Command command , String alias , String [ ] args )
{
2020-08-15 22:42:46 +00:00
if ( ! plugin . sl . isStaff ( sender ) )
2019-01-29 04:57:41 +00:00
{
return Collections . emptyList ( ) ;
}
if ( args . length = = 1 )
{
return Arrays . asList ( " time " , " weather " ) ;
}
else if ( args . length = = 2 )
{
if ( args [ 0 ] . equals ( " time " ) )
{
return Arrays . asList ( " morning " , " noon " , " evening " , " night " ) ;
}
else if ( args [ 0 ] . equals ( " weather " ) )
{
return Arrays . asList ( " off " , " rain " , " storm " ) ;
}
}
return Collections . emptyList ( ) ;
}
2018-05-13 19:49:13 +00:00
// TODO: Redo this properly
private void assertCommandPerms ( CommandSender sender , Player playerSender ) throws PermissionDeniedException
{
2020-08-15 22:42:46 +00:00
if ( ! ( sender instanceof Player ) | | playerSender = = null | | ! plugin . sl . isAdmin ( playerSender ) )
2018-05-13 19:49:13 +00:00
{
throw new PermissionDeniedException ( ) ;
}
}
private class PermissionDeniedException extends Exception
{
private static final long serialVersionUID = 1L ;
private PermissionDeniedException ( )
{
super ( " " ) ;
}
private PermissionDeniedException ( String string )
{
super ( string ) ;
}
}
2020-07-29 03:14:58 +00:00
}