/*
** j###t ########## #### ####
** j###t ########## #### ####
** j###T "###L J###"
** ######P' ########## #########
** ######k, ########## T######T
** ####~###L ####
** #### q###L ########## .#####
** #### \###L ########## #####"
**
** Class History
**
** Date Name Description
** ---------|------------|-----------------------------------------------
** 22Jul97 merlin created this command
**
*/
package key.commands;
import key.*;
import key.primitive.DateTime;
import java.io.*;
import java.util.StringTokenizer;
/**
* This command is intended to unban a player after
* receiving a sneeze, splat, or banish
*/
public class Unbanish extends Command
{
public static final AtomicElement[] ELEMENTS =
{
AtomicElement.construct( Unbanish.class, String.class, "commandType",
AtomicElement.PUBLIC_FIELD,
"the default type of the banish to undo" )
};
public static final AtomicStructure STRUCTURE = new AtomicStructure( Command.STRUCTURE, ELEMENTS );
public String commandType = "";
public Unbanish()
{
setKey( "unbanish" );
usage = "<player>";
}
public AtomicStructure getDeclaredStructure()
{
return( STRUCTURE );
}
public void run( Player p, StringTokenizer args, String fullLine, CategoryCommand caller, InteractiveConnection ic, Flags flags ) throws IOException
{
if( args.hasMoreTokens() )
{
Player causePlayer = null;
String name = args.nextToken();
causePlayer = (Player) getPlayer( ic, name );
if( causePlayer == null )
return;
if( p == causePlayer )
{
ic.sendFeedback( "Try using a name other than your own" );
return;
}
String playerBanType = (String) causePlayer.getProperty( "banishType" );
if( !playerBanType.equals( (String) getProperty( "commandType" ) ) )
{
ic.sendFeedback( name + " is not currently " + getCommandType() );
return;
}
DateTime until = (DateTime) causePlayer.getProperty( "banishedUntil" );
causePlayer.setProperty( "banishedUntil", null );
causePlayer.setProperty( "banishType", "" );
causePlayer.sync();
ic.sendFeedback( causePlayer.getName() + " unbanned..." );
// if the command Type is "P", then check the site, and
// remove the site ban if it is the same end date
if( playerBanType.equals( "P" ) )
{
Site si = (Site) causePlayer.getProperty( "bannedWithSite" );
DateTime siteUntil = (DateTime) si.getProperty( "bannedUntil" );
if( si == null || siteUntil == null )
{
return;
}
if( siteUntil.getTime() == until.getTime() )
{
si.setBan( "", p, new DateTime(), null, "Unbanish of Site" );
ic.sendFeedback( si + " unbannned..." );
}
else
{
ic.sendFeedback( si + " has different ban information... skipping unban..." );
}
}
}
else
usage( ic );
}
private String getCommandType()
{
return( new String( getName() + "ed" ) );
}
}