2010-12-22 16:22:23 +01:00
package net.minecraft.server ;
2011-01-29 22:50:29 +01:00
import java.awt.GraphicsEnvironment ;
2010-12-22 16:22:23 +01:00
import java.io.File ;
2011-01-11 09:25:13 +01:00
import java.io.IOException ;
2010-12-22 16:22:23 +01:00
import java.net.InetAddress ;
import java.util.ArrayList ;
import java.util.Collections ;
import java.util.HashMap ;
2010-12-28 20:52:24 +01:00
import java.util.Iterator ;
2010-12-22 16:22:23 +01:00
import java.util.List ;
import java.util.logging.Level ;
import java.util.logging.Logger ;
2010-12-28 20:52:24 +01:00
2011-01-11 09:25:13 +01:00
// CraftBukkit start
import java.net.UnknownHostException ;
import joptsimple.OptionSet ;
2011-02-01 19:13:12 +01:00
import org.bukkit.command.ConsoleCommandSender ;
2010-12-22 16:22:23 +01:00
import org.bukkit.craftbukkit.CraftServer ;
2011-01-11 09:25:13 +01:00
// CraftBukkit end
2010-12-22 16:22:23 +01:00
2011-01-11 09:25:13 +01:00
public class MinecraftServer implements ICommandListener , Runnable {
2010-12-22 16:22:23 +01:00
public static Logger a = Logger . getLogger ( " Minecraft " ) ;
2011-01-11 09:25:13 +01:00
public static HashMap b = new HashMap ( ) ;
2010-12-26 03:20:29 +01:00
public NetworkListenThread c ;
public PropertyManager d ;
public WorldServer e ;
public ServerConfigurationManager f ;
2011-01-29 22:50:29 +01:00
private boolean o = true ;
public boolean g = false ;
int h = 0 ;
2010-12-22 16:22:23 +01:00
public String i ;
public int j ;
2011-01-29 22:50:29 +01:00
private List p = new ArrayList ( ) ;
private List q = Collections . synchronizedList ( new ArrayList ( ) ) ;
2010-12-26 03:20:29 +01:00
public EntityTracker k ;
2010-12-22 16:22:23 +01:00
public boolean l ;
public boolean m ;
public boolean n ;
2010-12-28 20:52:24 +01:00
2011-01-30 13:51:20 +01:00
// Craftbukkit start - adds argument OptionSet
public MinecraftServer ( OptionSet options ) {
2010-12-26 03:20:29 +01:00
new ThreadSleepForever ( this ) ;
2011-01-29 22:50:29 +01:00
// CraftBukkit start
this . options = options ;
2010-12-22 16:22:23 +01:00
}
2011-01-29 22:50:29 +01:00
public CraftServer server ;
public OptionSet options ;
2011-02-01 19:13:12 +01:00
public ConsoleCommandSender console = new ConsoleCommandSender ( ) ;
2010-12-22 16:22:23 +01:00
2010-12-26 03:20:29 +01:00
private boolean d ( ) throws UnknownHostException {
2011-01-29 22:50:29 +01:00
// CraftBukkit end -- added throws UnknownHostException
2010-12-28 20:52:24 +01:00
ThreadCommandReader threadcommandreader = new ThreadCommandReader ( this ) ;
2010-12-22 16:22:23 +01:00
2011-01-29 22:50:29 +01:00
threadcommandreader . setDaemon ( true ) ;
threadcommandreader . start ( ) ;
2010-12-26 03:20:29 +01:00
ConsoleLogManager . a ( ) ;
2011-01-14 14:47:47 +01:00
a . info ( " Starting minecraft server version Beta 1.2_01 " ) ;
2010-12-22 16:22:23 +01:00
if ( Runtime . getRuntime ( ) . maxMemory ( ) / 1024L / 1024L < 512L ) {
a . warning ( " **** NOT ENOUGH RAM! " ) ;
a . warning ( " To start the server with more ram, launch it as \" java -Xmx1024M -Xms1024M -jar minecraft_server.jar \" " ) ;
}
2011-01-29 22:50:29 +01:00
2010-12-22 16:22:23 +01:00
a . info ( " Loading properties " ) ;
2011-01-29 22:50:29 +01:00
this . d = new PropertyManager ( new File ( " server.properties " ) ) ;
String s = this . d . a ( " server-ip " , " " ) ;
2010-12-22 16:22:23 +01:00
2011-01-29 22:50:29 +01:00
this . l = this . d . a ( " online-mode " , true ) ;
this . m = this . d . a ( " spawn-animals " , true ) ;
this . n = this . d . a ( " pvp " , true ) ;
2010-12-28 20:52:24 +01:00
InetAddress inetaddress = null ;
2010-12-22 16:22:23 +01:00
2010-12-28 20:52:24 +01:00
if ( s . length ( ) > 0 ) {
inetaddress = InetAddress . getByName ( s ) ;
2010-12-22 16:22:23 +01:00
}
2011-01-29 22:50:29 +01:00
int i = this . d . a ( " server-port " , 25565 ) ;
a . info ( " Starting Minecraft server on " + ( s . length ( ) = = 0 ? " * " : s ) + " : " + i ) ;
2010-12-22 16:22:23 +01:00
try {
2011-01-29 22:50:29 +01:00
this . c = new NetworkListenThread ( this , inetaddress , i ) ;
2011-01-01 14:06:04 +01:00
// CraftBukkit: Be more generic; IOException -> Throwable
2010-12-28 20:52:24 +01:00
} catch ( Throwable ioexception ) {
2010-12-22 16:22:23 +01:00
a . warning ( " **** FAILED TO BIND TO PORT! " ) ;
2011-01-29 22:50:29 +01:00
a . log ( Level . WARNING , " The exception was: " + ioexception . toString ( ) ) ;
2010-12-22 16:22:23 +01:00
a . warning ( " Perhaps a server is already running on that port? " ) ;
return false ;
}
2011-01-29 22:50:29 +01:00
if ( ! this . l ) {
2010-12-22 16:22:23 +01:00
a . warning ( " **** SERVER IS RUNNING IN OFFLINE/INSECURE MODE! " ) ;
a . warning ( " The server will make no attempt to authenticate usernames. Beware. " ) ;
a . warning ( " While this makes the game possible to play without internet access, it also opens up the ability for hackers to connect with any username they choose. " ) ;
a . warning ( " To change this, set \" online-mode \" to \" true \" in the server.settings file. " ) ;
}
2010-12-26 03:20:29 +01:00
2011-01-29 22:50:29 +01:00
this . f = new ServerConfigurationManager ( this ) ;
this . k = new EntityTracker ( this ) ;
String s1 = this . d . a ( " level-name " , " world " ) ;
a . info ( " Preparing level \" " + s1 + " \" " ) ;
this . c ( s1 ) ;
2010-12-22 16:22:23 +01:00
a . info ( " Done! For help, type \" help \" or \" ? \" " ) ;
return true ;
}
2010-12-28 20:52:24 +01:00
private void c ( String s ) {
2010-12-22 16:22:23 +01:00
a . info ( " Preparing start region " ) ;
2011-01-29 22:50:29 +01:00
this . e = new WorldServer ( this , new File ( " . " ) , s , this . d . a ( " hellworld " , false ) ? - 1 : 0 ) ;
this . e . a ( new WorldManager ( this ) ) ;
this . e . k = this . d . a ( " spawn-monsters " , true ) ? 1 : 0 ;
this . e . a ( this . d . a ( " spawn-monsters " , true ) , this . m ) ;
this . f . a ( this . e ) ;
short short1 = 196 ;
long i = System . currentTimeMillis ( ) ;
for ( int j = - short1 ; j < = short1 & & this . o ; j + = 16 ) {
for ( int k = - short1 ; k < = short1 & & this . o ; k + = 16 ) {
long l = System . currentTimeMillis ( ) ;
if ( l < i ) {
i = l ;
2011-01-14 14:31:10 +01:00
}
2011-01-29 22:50:29 +01:00
if ( l > i + 1000L ) {
int i1 = ( short1 * 2 + 1 ) * ( short1 * 2 + 1 ) ;
int j1 = ( j + short1 ) * ( short1 * 2 + 1 ) + k + 1 ;
this . a ( " Preparing spawn area " , j1 * 100 / i1 ) ;
i = l ;
2011-01-14 14:31:10 +01:00
}
2011-01-29 22:50:29 +01:00
this . e . A . d ( this . e . spawnX + j > > 4 , this . e . spawnZ + k > > 4 ) ;
while ( this . e . d ( ) & & this . o ) {
2011-01-14 14:31:10 +01:00
;
2010-12-22 16:22:23 +01:00
}
}
}
2010-12-28 20:52:24 +01:00
2011-01-29 22:50:29 +01:00
this . e ( ) ;
2010-12-22 16:22:23 +01:00
}
2011-01-29 22:50:29 +01:00
private void a ( String s , int i ) {
this . i = s ;
this . j = i ;
a . info ( s + " : " + i + " % " ) ;
2010-12-22 16:22:23 +01:00
}
private void e ( ) {
2011-01-29 22:50:29 +01:00
this . i = null ;
this . j = 0 ;
2011-01-11 09:25:13 +01:00
server . loadPlugins ( ) ; // CraftBukkit
2010-12-22 16:22:23 +01:00
}
private void f ( ) {
a . info ( " Saving chunks " ) ;
2011-01-29 22:50:29 +01:00
this . e . a ( true , ( IProgressUpdate ) null ) ;
2010-12-22 16:22:23 +01:00
}
private void g ( ) {
a . info ( " Stopping server " ) ;
2011-02-01 21:37:07 +01:00
// CraftBukkit
if ( server ! = null ) {
server . disablePlugins ( ) ;
}
2011-02-02 00:32:18 +01:00
2011-01-29 22:50:29 +01:00
if ( this . f ! = null ) {
this . f . d ( ) ;
2011-01-27 22:15:41 +01:00
}
2011-01-29 22:50:29 +01:00
if ( this . e ! = null ) {
this . f ( ) ;
2010-12-22 16:22:23 +01:00
}
}
public void a ( ) {
2011-01-29 22:50:29 +01:00
this . o = false ;
2010-12-22 16:22:23 +01:00
}
public void run ( ) {
try {
2011-01-29 22:50:29 +01:00
if ( this . d ( ) ) {
long i = System . currentTimeMillis ( ) ;
long j = 0L ;
2010-12-28 20:52:24 +01:00
2011-01-29 22:50:29 +01:00
while ( this . o ) {
long k = System . currentTimeMillis ( ) ;
long l = k - i ;
2010-12-28 20:52:24 +01:00
2011-01-29 22:50:29 +01:00
if ( l > 2000L ) {
a . warning ( " Can \ 't keep up! Did the system time change, or is the server overloaded? " ) ;
l = 2000L ;
2010-12-22 16:22:23 +01:00
}
2011-01-29 22:50:29 +01:00
if ( l < 0L ) {
2010-12-22 16:22:23 +01:00
a . warning ( " Time ran backwards! Did the system time change? " ) ;
2011-01-29 22:50:29 +01:00
l = 0L ;
2010-12-22 16:22:23 +01:00
}
2011-01-29 22:50:29 +01:00
j + = l ;
i = k ;
while ( j > 50L ) {
j - = 50L ;
this . h ( ) ;
2010-12-22 16:22:23 +01:00
}
2011-01-29 22:50:29 +01:00
2010-12-22 16:22:23 +01:00
Thread . sleep ( 1L ) ;
}
} else {
2011-01-29 22:50:29 +01:00
while ( this . o ) {
this . b ( ) ;
2010-12-22 16:22:23 +01:00
try {
Thread . sleep ( 10L ) ;
2010-12-28 20:52:24 +01:00
} catch ( InterruptedException interruptedexception ) {
interruptedexception . printStackTrace ( ) ;
2010-12-22 16:22:23 +01:00
}
}
}
2010-12-28 20:52:24 +01:00
} catch ( Exception exception ) {
exception . printStackTrace ( ) ;
2011-01-29 22:50:29 +01:00
a . log ( Level . SEVERE , " Unexpected exception " , exception ) ;
while ( this . o ) {
this . b ( ) ;
2010-12-22 16:22:23 +01:00
try {
Thread . sleep ( 10L ) ;
2010-12-28 20:52:24 +01:00
} catch ( InterruptedException interruptedexception1 ) {
interruptedexception1 . printStackTrace ( ) ;
2010-12-22 16:22:23 +01:00
}
}
} finally {
2011-01-14 14:31:10 +01:00
try {
2011-01-29 22:50:29 +01:00
this . g ( ) ;
this . g = true ;
2011-01-14 14:31:10 +01:00
} finally {
System . exit ( 0 ) ;
}
2010-12-22 16:22:23 +01:00
}
}
private void h ( ) {
2011-01-11 09:25:13 +01:00
ArrayList arraylist = new ArrayList ( ) ;
2011-01-29 22:50:29 +01:00
Iterator iterator = b . keySet ( ) . iterator ( ) ;
2010-12-28 20:52:24 +01:00
2011-01-29 22:50:29 +01:00
while ( iterator . hasNext ( ) ) {
2010-12-28 20:52:24 +01:00
String s = ( String ) iterator . next ( ) ;
2011-01-29 22:50:29 +01:00
int i = ( ( Integer ) b . get ( s ) ) . intValue ( ) ;
2010-12-28 20:52:24 +01:00
2011-01-29 22:50:29 +01:00
if ( i > 0 ) {
b . put ( s , Integer . valueOf ( i - 1 ) ) ;
2010-12-22 16:22:23 +01:00
} else {
2011-01-29 22:50:29 +01:00
arraylist . add ( s ) ;
2010-12-22 16:22:23 +01:00
}
}
2010-12-28 20:52:24 +01:00
2011-01-29 22:50:29 +01:00
int j ;
for ( j = 0 ; j < arraylist . size ( ) ; + + j ) {
b . remove ( arraylist . get ( j ) ) ;
2010-12-22 16:22:23 +01:00
}
2010-12-26 03:20:29 +01:00
AxisAlignedBB . a ( ) ;
Vec3D . a ( ) ;
2011-01-29 22:50:29 +01:00
+ + this . h ;
if ( this . h % 20 = = 0 ) {
this . f . a ( ( Packet ) ( new Packet4UpdateTime ( this . e . e ) ) ) ;
2010-12-22 16:22:23 +01:00
}
2011-01-29 22:50:29 +01:00
this . e . f ( ) ;
while ( this . e . d ( ) ) {
2010-12-28 20:52:24 +01:00
;
2010-12-22 16:22:23 +01:00
}
2011-01-29 22:50:29 +01:00
this . e . c ( ) ;
this . c . a ( ) ;
this . f . b ( ) ;
this . k . a ( ) ;
for ( j = 0 ; j < this . p . size ( ) ; + + j ) {
( ( IUpdatePlayerListBox ) this . p . get ( j ) ) . a ( ) ;
2010-12-28 20:52:24 +01:00
}
2010-12-22 16:22:23 +01:00
try {
2011-01-29 22:50:29 +01:00
this . b ( ) ;
2010-12-28 20:52:24 +01:00
} catch ( Exception exception ) {
2011-01-29 22:50:29 +01:00
a . log ( Level . WARNING , " Unexpected exception while parsing console command " , exception ) ;
2010-12-22 16:22:23 +01:00
}
}
2010-12-28 20:52:24 +01:00
public void a ( String s , ICommandListener icommandlistener ) {
2011-01-29 22:50:29 +01:00
this . q . add ( new ServerCommand ( s , icommandlistener ) ) ;
2010-12-22 16:22:23 +01:00
}
public void b ( ) {
2011-01-29 22:50:29 +01:00
while ( this . q . size ( ) > 0 ) {
ServerCommand servercommand = ( ServerCommand ) this . q . remove ( 0 ) ;
2010-12-28 20:52:24 +01:00
String s = servercommand . a ;
ICommandListener icommandlistener = servercommand . b ;
String s1 = icommandlistener . c ( ) ;
2011-02-01 19:13:12 +01:00
// Craftbukkit start
if ( server . dispatchCommand ( console , s ) ) {
continue ;
}
// Craftbukkit end
2011-01-29 22:50:29 +01:00
if ( ! s . toLowerCase ( ) . startsWith ( " help " ) & & ! s . toLowerCase ( ) . startsWith ( " ? " ) ) {
if ( s . toLowerCase ( ) . startsWith ( " list " ) ) {
icommandlistener . b ( " Connected players: " + this . f . c ( ) ) ;
} else if ( s . toLowerCase ( ) . startsWith ( " stop " ) ) {
this . a ( s1 , " Stopping the server.. " ) ;
this . o = false ;
} else if ( s . toLowerCase ( ) . startsWith ( " save-all " ) ) {
this . a ( s1 , " Forcing save.. " ) ;
this . e . a ( true , ( IProgressUpdate ) null ) ;
2011-02-05 04:49:24 +01:00
// Craftbukkit start -- save player data on save-all.
this . f . d ( ) ;
// Craftbukkit end
2011-01-29 22:50:29 +01:00
this . a ( s1 , " Save complete. " ) ;
} else if ( s . toLowerCase ( ) . startsWith ( " save-off " ) ) {
this . a ( s1 , " Disabling level saving.. " ) ;
this . e . C = true ;
} else if ( s . toLowerCase ( ) . startsWith ( " save-on " ) ) {
this . a ( s1 , " Enabling level saving.. " ) ;
this . e . C = false ;
} else {
String s2 ;
if ( s . toLowerCase ( ) . startsWith ( " op " ) ) {
s2 = s . substring ( s . indexOf ( " " ) ) . trim ( ) ;
this . f . e ( s2 ) ;
this . a ( s1 , " Opping " + s2 ) ;
this . f . a ( s2 , " §eYou are now op! " ) ;
} else if ( s . toLowerCase ( ) . startsWith ( " deop " ) ) {
s2 = s . substring ( s . indexOf ( " " ) ) . trim ( ) ;
this . f . f ( s2 ) ;
this . f . a ( s2 , " §eYou are no longer op! " ) ;
this . a ( s1 , " De-opping " + s2 ) ;
} else if ( s . toLowerCase ( ) . startsWith ( " ban-ip " ) ) {
s2 = s . substring ( s . indexOf ( " " ) ) . trim ( ) ;
this . f . c ( s2 ) ;
this . a ( s1 , " Banning ip " + s2 ) ;
} else if ( s . toLowerCase ( ) . startsWith ( " pardon-ip " ) ) {
s2 = s . substring ( s . indexOf ( " " ) ) . trim ( ) ;
this . f . d ( s2 ) ;
this . a ( s1 , " Pardoning ip " + s2 ) ;
} else {
EntityPlayer entityplayer ;
if ( s . toLowerCase ( ) . startsWith ( " ban " ) ) {
s2 = s . substring ( s . indexOf ( " " ) ) . trim ( ) ;
this . f . a ( s2 ) ;
this . a ( s1 , " Banning " + s2 ) ;
entityplayer = this . f . h ( s2 ) ;
if ( entityplayer ! = null ) {
entityplayer . a . a ( " Banned by admin " ) ;
}
} else if ( s . toLowerCase ( ) . startsWith ( " pardon " ) ) {
s2 = s . substring ( s . indexOf ( " " ) ) . trim ( ) ;
this . f . b ( s2 ) ;
this . a ( s1 , " Pardoning " + s2 ) ;
} else if ( s . toLowerCase ( ) . startsWith ( " kick " ) ) {
s2 = s . substring ( s . indexOf ( " " ) ) . trim ( ) ;
entityplayer = null ;
for ( int i = 0 ; i < this . f . b . size ( ) ; + + i ) {
EntityPlayer entityplayer1 = ( EntityPlayer ) this . f . b . get ( i ) ;
if ( entityplayer1 . name . equalsIgnoreCase ( s2 ) ) {
entityplayer = entityplayer1 ;
}
}
if ( entityplayer ! = null ) {
entityplayer . a . a ( " Kicked by admin " ) ;
this . a ( s1 , " Kicking " + entityplayer . name ) ;
} else {
icommandlistener . b ( " Can \ 't find user " + s2 + " . No kick. " ) ;
}
} else {
String [ ] astring ;
EntityPlayer entityplayer2 ;
if ( s . toLowerCase ( ) . startsWith ( " tp " ) ) {
astring = s . split ( " " ) ;
if ( astring . length = = 3 ) {
entityplayer = this . f . h ( astring [ 1 ] ) ;
entityplayer2 = this . f . h ( astring [ 2 ] ) ;
if ( entityplayer = = null ) {
icommandlistener . b ( " Can \ 't find user " + astring [ 1 ] + " . No tp. " ) ;
} else if ( entityplayer2 = = null ) {
icommandlistener . b ( " Can \ 't find user " + astring [ 2 ] + " . No tp. " ) ;
} else {
entityplayer . a . a ( entityplayer2 . locX , entityplayer2 . locY , entityplayer2 . locZ , entityplayer2 . yaw , entityplayer2 . pitch ) ;
this . a ( s1 , " Teleporting " + astring [ 1 ] + " to " + astring [ 2 ] + " . " ) ;
}
} else {
icommandlistener . b ( " Syntax error, please provice a source and a target. " ) ;
}
} else if ( s . toLowerCase ( ) . startsWith ( " give " ) ) {
astring = s . split ( " " ) ;
if ( astring . length ! = 3 & & astring . length ! = 4 ) {
return ;
}
String s3 = astring [ 1 ] ;
entityplayer2 = this . f . h ( s3 ) ;
if ( entityplayer2 ! = null ) {
try {
int j = Integer . parseInt ( astring [ 2 ] ) ;
if ( Item . byId [ j ] ! = null ) {
this . a ( s1 , " Giving " + entityplayer2 . name + " some " + j ) ;
int k = 1 ;
if ( astring . length > 3 ) {
k = this . b ( astring [ 3 ] , 1 ) ;
}
if ( k < 1 ) {
k = 1 ;
}
if ( k > 64 ) {
k = 64 ;
}
entityplayer2 . b ( new ItemStack ( j , k , 0 ) ) ;
} else {
icommandlistener . b ( " There \ 's no item with id " + j ) ;
}
} catch ( NumberFormatException numberformatexception ) {
icommandlistener . b ( " There \ 's no item with id " + astring [ 2 ] ) ;
}
} else {
icommandlistener . b ( " Can \ 't find user " + s3 ) ;
}
} else if ( s . toLowerCase ( ) . startsWith ( " say " ) ) {
s = s . substring ( s . indexOf ( " " ) ) . trim ( ) ;
a . info ( " [ " + s1 + " ] " + s ) ;
this . f . a ( ( Packet ) ( new Packet3Chat ( " §d[Server] " + s ) ) ) ;
} else if ( s . toLowerCase ( ) . startsWith ( " tell " ) ) {
astring = s . split ( " " ) ;
if ( astring . length > = 3 ) {
s = s . substring ( s . indexOf ( " " ) ) . trim ( ) ;
s = s . substring ( s . indexOf ( " " ) ) . trim ( ) ;
a . info ( " [ " + s1 + " -> " + astring [ 1 ] + " ] " + s ) ;
s = " §7 " + s1 + " whispers " + s ;
a . info ( s ) ;
if ( ! this . f . a ( astring [ 1 ] , ( Packet ) ( new Packet3Chat ( s ) ) ) ) {
icommandlistener . b ( " There \ 's no player by that name online. " ) ;
}
}
} else {
a . info ( " Unknown console command. Type \" help \" for help. " ) ;
}
}
}
}
} else {
2010-12-28 20:52:24 +01:00
icommandlistener . b ( " To run the server without a gui, start it like this: " ) ;
icommandlistener . b ( " java -Xmx1024M -Xms1024M -jar minecraft_server.jar nogui " ) ;
icommandlistener . b ( " Console commands: " ) ;
icommandlistener . b ( " help or ? shows this message " ) ;
icommandlistener . b ( " kick <player> removes a player from the server " ) ;
icommandlistener . b ( " ban <player> bans a player from the server " ) ;
icommandlistener . b ( " pardon <player> pardons a banned player so that they can connect again " ) ;
icommandlistener . b ( " ban-ip <ip> bans an IP address from the server " ) ;
icommandlistener . b ( " pardon-ip <ip> pardons a banned IP address so that they can connect again " ) ;
icommandlistener . b ( " op <player> turns a player into an op " ) ;
icommandlistener . b ( " deop <player> removes op status from a player " ) ;
icommandlistener . b ( " tp <player1> <player2> moves one player to the same location as another player " ) ;
icommandlistener . b ( " give <player> <id> [num] gives a player a resource " ) ;
icommandlistener . b ( " tell <player> <message> sends a private message to a player " ) ;
icommandlistener . b ( " stop gracefully stops the server " ) ;
icommandlistener . b ( " save-all forces a server-wide level save " ) ;
icommandlistener . b ( " save-off disables terrain saving (useful for backup scripts) " ) ;
icommandlistener . b ( " save-on re-enables terrain saving " ) ;
icommandlistener . b ( " list lists all currently connected players " ) ;
icommandlistener . b ( " say <message> broadcasts a message to all players " ) ;
2010-12-22 16:22:23 +01:00
}
2011-01-29 22:50:29 +01:00
}
2010-12-22 16:22:23 +01:00
}
2010-12-28 20:52:24 +01:00
private void a ( String s , String s1 ) {
2011-01-29 22:50:29 +01:00
String s2 = s + " : " + s1 ;
2010-12-28 20:52:24 +01:00
2011-01-29 22:50:29 +01:00
this . f . i ( " §7( " + s2 + " ) " ) ;
2010-12-28 20:52:24 +01:00
a . info ( s2 ) ;
2010-12-22 16:22:23 +01:00
}
2011-01-29 22:50:29 +01:00
private int b ( String s , int i ) {
2010-12-22 16:22:23 +01:00
try {
2010-12-28 20:52:24 +01:00
return Integer . parseInt ( s ) ;
} catch ( NumberFormatException numberformatexception ) {
2011-01-29 22:50:29 +01:00
return i ;
2010-12-22 16:22:23 +01:00
}
}
2010-12-28 20:52:24 +01:00
public void a ( IUpdatePlayerListBox iupdateplayerlistbox ) {
2011-01-29 22:50:29 +01:00
this . p . add ( iupdateplayerlistbox ) ;
2010-12-22 16:22:23 +01:00
}
2011-01-04 01:43:23 +01:00
// Craftbukkit start - replaces main(String args[])
public static void main ( final OptionSet options ) {
2010-12-22 16:22:23 +01:00
try {
2011-01-30 13:51:20 +01:00
MinecraftServer minecraftserver = new MinecraftServer ( options ) ;
2011-01-29 22:50:29 +01:00
2011-01-11 09:25:13 +01:00
// CraftBukkit - remove gui
2010-12-22 16:22:23 +01:00
2010-12-28 20:52:24 +01:00
( new ThreadServerApplication ( " Server thread " , minecraftserver ) ) . start ( ) ;
} catch ( Exception exception ) {
2011-01-29 22:50:29 +01:00
a . log ( Level . SEVERE , " Failed to start the minecraft server " , exception ) ;
2010-12-22 16:22:23 +01:00
}
}
2010-12-28 20:52:24 +01:00
public File a ( String s ) {
return new File ( s ) ;
2010-12-22 16:22:23 +01:00
}
2010-12-28 20:52:24 +01:00
public void b ( String s ) {
a . info ( s ) ;
2010-12-22 16:22:23 +01:00
}
public String c ( ) {
return " CONSOLE " ;
}
2010-12-28 20:52:24 +01:00
public static boolean a ( MinecraftServer minecraftserver ) {
return minecraftserver . o ;
}
2011-01-11 09:25:13 +01:00
}