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 ;
2011-03-31 22:40:00 +02:00
import java.util.Random ;
2010-12-22 16:22:23 +01:00
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
2011-02-23 13:56:36 +01:00
import java.io.PrintStream ;
2011-01-11 09:25:13 +01:00
import java.net.UnknownHostException ;
2011-02-25 17:12:38 +01:00
import jline.ConsoleReader ;
2011-01-11 09:25:13 +01:00
import joptsimple.OptionSet ;
2010-12-22 16:22:23 +01:00
import org.bukkit.craftbukkit.CraftServer ;
2011-02-20 02:53:06 +01:00
import org.bukkit.craftbukkit.LoggerOutputStream ;
2011-02-25 17:12:38 +01:00
import org.bukkit.craftbukkit.command.ColouredConsoleSender ;
2011-02-03 00:53:04 +01:00
import org.bukkit.craftbukkit.scheduler.CraftScheduler ;
2011-03-29 22:01:04 +02:00
import org.bukkit.craftbukkit.util.ServerShutdownThread ;
2011-03-26 23:20:35 +01:00
import org.bukkit.event.world.WorldSaveEvent ;
2011-04-20 19:05:14 +02:00
// CraftBukkit
2010-12-22 16:22:23 +01:00
2011-02-23 03:37:56 +01:00
public class MinecraftServer implements Runnable , ICommandListener {
2010-12-22 16:22:23 +01:00
2011-04-20 19:05:14 +02:00
public static Logger log = Logger . getLogger ( " Minecraft " ) ;
2011-01-11 09:25:13 +01:00
public static HashMap b = new HashMap ( ) ;
2011-04-20 19:05:14 +02:00
public NetworkListenThread networkListenThread ;
public PropertyManager propertyManager ;
// public WorldServer worldServer; // CraftBukkit - removed
public ServerConfigurationManager serverConfigurationManager ;
public ConsoleCommandHandler consoleCommandHandler ; // CraftBukkit - made public
private boolean isRunning = true ;
public boolean isStopped = false ;
int ticks = 0 ;
2010-12-22 16:22:23 +01:00
public String i ;
public int j ;
2011-02-23 03:37:56 +01:00
private List q = new ArrayList ( ) ;
private List r = Collections . synchronizedList ( new ArrayList ( ) ) ;
2011-04-20 19:05:14 +02:00
public EntityTracker tracker ;
public boolean onlineMode ;
public boolean spawnAnimals ;
public boolean pvpMode ;
2010-12-28 20:52:24 +01:00
2011-02-23 13:56:36 +01:00
// CraftBukkit start
2011-02-21 23:30:01 +01:00
public int spawnProtection ;
public List < WorldServer > worlds = new ArrayList < WorldServer > ( ) ;
2011-01-29 22:50:29 +01:00
public CraftServer server ;
public OptionSet options ;
2011-02-25 17:12:38 +01:00
public ColouredConsoleSender console ;
public ConsoleReader reader ;
2011-02-21 23:30:01 +01:00
// Craftbukkit end
2010-12-22 16:22:23 +01:00
2011-02-23 13:56:36 +01:00
public MinecraftServer ( OptionSet options ) { // CraftBukkit - adds argument OptionSet
2011-02-21 23:30:01 +01:00
new ThreadSleepForever ( this ) ;
2011-02-25 17:12:38 +01:00
// CraftBukkit start
this . options = options ;
try {
this . reader = new ConsoleReader ( ) ;
} catch ( IOException ex ) {
Logger . getLogger ( MinecraftServer . class . getName ( ) ) . log ( Level . SEVERE , null , ex ) ;
}
2011-03-29 22:01:04 +02:00
Runtime . getRuntime ( ) . addShutdownHook ( new ServerShutdownThread ( this ) ) ;
2011-02-25 17:12:38 +01:00
// CraftBukkit end
2011-02-21 23:30:01 +01:00
}
2011-04-20 19:05:14 +02:00
private boolean init ( ) throws UnknownHostException { // CraftBukkit - added throws UnknownHostException
this . consoleCommandHandler = new ConsoleCommandHandler ( this ) ;
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 ( ) ;
2011-04-20 19:05:14 +02:00
ConsoleLogManager . init ( this ) ; // Craftbukkit
2011-02-20 02:53:06 +01:00
2011-02-23 13:56:36 +01:00
// CraftBukkit start
2011-04-20 19:05:14 +02:00
System . setOut ( new PrintStream ( new LoggerOutputStream ( log , Level . INFO ) , true ) ) ;
System . setErr ( new PrintStream ( new LoggerOutputStream ( log , Level . SEVERE ) , true ) ) ;
2011-02-23 13:56:36 +01:00
// CraftBukkit end
2011-02-20 02:53:06 +01:00
2011-04-20 19:05:14 +02:00
log . info ( " Starting minecraft server version Beta 1.3 " ) ;
2010-12-22 16:22:23 +01:00
if ( Runtime . getRuntime ( ) . maxMemory ( ) / 1024L / 1024L < 512L ) {
2011-04-20 19:05:14 +02:00
log . warning ( " **** NOT ENOUGH RAM! " ) ;
log . warning ( " To start the server with more ram, launch it as \" java -Xmx1024M -Xms1024M -jar minecraft_server.jar \" " ) ;
2010-12-22 16:22:23 +01:00
}
2011-01-29 22:50:29 +01:00
2011-04-20 19:05:14 +02:00
log . info ( " Loading properties " ) ;
this . propertyManager = new PropertyManager ( new File ( " server.properties " ) ) ;
String s = this . propertyManager . getString ( " server-ip " , " " ) ;
2010-12-22 16:22:23 +01:00
2011-04-20 19:05:14 +02:00
this . onlineMode = this . propertyManager . getBoolean ( " online-mode " , true ) ;
this . spawnAnimals = this . propertyManager . getBoolean ( " spawn-animals " , true ) ;
this . pvpMode = this . propertyManager . getBoolean ( " pvp " , true ) ;
this . spawnProtection = this . propertyManager . getInt ( " spawn-protection " , 16 ) ; // CraftBukkit Configurable spawn protection start
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-04-20 19:05:14 +02:00
int i = this . propertyManager . getInt ( " server-port " , 25565 ) ;
2011-01-29 22:50:29 +01:00
2011-04-20 19:05:14 +02:00
log . info ( " Starting Minecraft server on " + ( s . length ( ) = = 0 ? " * " : s ) + " : " + i ) ;
2011-01-29 22:50:29 +01:00
2010-12-22 16:22:23 +01:00
try {
2011-04-20 19:05:14 +02:00
this . networkListenThread = new NetworkListenThread ( this , inetaddress , i ) ;
2011-02-21 23:30:01 +01:00
} catch ( Throwable ioexception ) { // CraftBukkit - IOException -> Throwable
2011-04-20 19:05:14 +02:00
log . warning ( " **** FAILED TO BIND TO PORT! " ) ;
log . log ( Level . WARNING , " The exception was: " + ioexception . toString ( ) ) ;
log . warning ( " Perhaps a server is already running on that port? " ) ;
2010-12-22 16:22:23 +01:00
return false ;
}
2011-01-29 22:50:29 +01:00
2011-04-20 19:05:14 +02:00
if ( ! this . onlineMode ) {
log . warning ( " **** SERVER IS RUNNING IN OFFLINE/INSECURE MODE! " ) ;
log . warning ( " The server will make no attempt to authenticate usernames. Beware. " ) ;
log . 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. " ) ;
log . warning ( " To change this, set \" online-mode \" to \" true \" in the server.settings file. " ) ;
2010-12-22 16:22:23 +01:00
}
2010-12-26 03:20:29 +01:00
2011-04-20 19:05:14 +02:00
this . serverConfigurationManager = new ServerConfigurationManager ( this ) ;
this . tracker = new EntityTracker ( this ) ;
2011-02-23 03:37:56 +01:00
long j = System . nanoTime ( ) ;
2011-04-20 19:05:14 +02:00
String s1 = this . propertyManager . getString ( " level-name " , " world " ) ;
String s2 = this . propertyManager . getString ( " level-seed " , " " ) ;
2011-03-31 22:40:00 +02:00
long k = ( new Random ( ) ) . nextLong ( ) ;
if ( s2 . length ( ) > 0 ) {
try {
k = Long . parseLong ( s2 ) ;
} catch ( NumberFormatException numberformatexception ) {
k = ( long ) s2 . hashCode ( ) ;
}
}
2011-01-29 22:50:29 +01:00
2011-04-20 19:05:14 +02:00
log . info ( " Preparing level \" " + s1 + " \" " ) ;
2011-03-31 22:40:00 +02:00
this . a ( new WorldLoaderServer ( new File ( " . " ) ) , s1 , k ) ;
2011-02-25 21:57:38 +01:00
// CraftBukkit start
long elapsed = System . nanoTime ( ) - j ;
String time = String . format ( " %.3fs " , elapsed / 10000000000 . 0D ) ;
2011-04-20 19:05:14 +02:00
log . info ( " Done ( " + time + " )! For help, type \" help \" or \" ? \" " ) ;
2011-02-25 21:57:38 +01:00
// CraftBukkit end
2010-12-22 16:22:23 +01:00
return true ;
}
2011-03-31 22:40:00 +02:00
private void a ( Convertable convertable , String s , long i ) {
2011-04-20 19:05:14 +02:00
if ( convertable . isConvertable ( s ) ) {
log . info ( " Converting map! " ) ;
convertable . convert ( s , new ConvertProgressUpdater ( this ) ) ;
2011-02-23 03:37:56 +01:00
}
2011-04-20 19:05:14 +02:00
log . info ( " Preparing start region " ) ;
2011-02-05 19:15:04 +01:00
2011-02-23 13:56:36 +01:00
// CraftBukkit start
2011-04-20 19:05:14 +02:00
WorldServer world = new WorldServer ( this , new ServerNBTManager ( new File ( " . " ) , s , true ) , s , this . propertyManager . getBoolean ( " hellworld " , false ) ? - 1 : 0 , i ) ;
world . addIWorldAccess ( new WorldManager ( this , world ) ) ;
world . spawnMonsters = this . propertyManager . getBoolean ( " spawn-monsters " , true ) ? 1 : 0 ;
world . setSpawnFlags ( this . propertyManager . getBoolean ( " spawn-monsters " , true ) , this . spawnAnimals ) ;
this . serverConfigurationManager . setPlayerFileData ( world ) ;
2011-02-05 19:15:04 +01:00
worlds . add ( world ) ;
2011-02-23 13:56:36 +01:00
// CraftBukkit end
2011-02-05 19:15:04 +01:00
2011-01-29 22:50:29 +01:00
short short1 = 196 ;
2011-03-31 22:40:00 +02:00
long j = System . currentTimeMillis ( ) ;
2011-04-20 19:05:14 +02:00
ChunkCoordinates chunkcoordinates = world . getSpawn ( ) ; // CraftBukkit
2011-01-29 22:50:29 +01:00
2011-04-20 19:05:14 +02:00
for ( int k = - short1 ; k < = short1 & & this . isRunning ; k + = 16 ) {
for ( int l = - short1 ; l < = short1 & & this . isRunning ; l + = 16 ) {
2011-03-31 22:40:00 +02:00
long i1 = System . currentTimeMillis ( ) ;
2011-01-29 22:50:29 +01:00
2011-03-31 22:40:00 +02:00
if ( i1 < j ) {
j = i1 ;
2011-01-14 14:31:10 +01:00
}
2011-03-31 22:40:00 +02:00
if ( i1 > j + 1000L ) {
int j1 = ( short1 * 2 + 1 ) * ( short1 * 2 + 1 ) ;
int k1 = ( k + short1 ) * ( short1 * 2 + 1 ) + l + 1 ;
2011-01-29 22:50:29 +01:00
2011-03-31 22:40:00 +02:00
this . a ( " Preparing spawn area " , k1 * 100 / j1 ) ;
j = i1 ;
2011-01-14 14:31:10 +01:00
}
2011-01-29 22:50:29 +01:00
2011-02-23 13:56:36 +01:00
// CraftBukkit start
for ( WorldServer worldserver : worlds ) {
2011-04-20 19:05:14 +02:00
world . chunkProviderServer . getChunkAt ( chunkcoordinates . x + k > > 4 , chunkcoordinates . z + l > > 4 ) ;
2011-01-29 22:50:29 +01:00
2011-04-20 19:05:14 +02:00
while ( world . doLighting ( ) & & this . isRunning ) {
2011-02-05 19:15:04 +01:00
;
}
2010-12-22 16:22:23 +01:00
}
2011-02-23 13:56:36 +01:00
// CraftBukkit end
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 ;
2011-04-20 19:05:14 +02:00
log . 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
}
2011-04-20 19:05:14 +02:00
void saveChunks ( ) { // CraftBukkit - private -> default
log . info ( " Saving chunks " ) ;
2011-02-05 19:15:04 +01:00
2011-02-23 13:56:36 +01:00
// CraftBukkit start
for ( WorldServer world : worlds ) {
2011-04-20 19:05:14 +02:00
world . save ( true , ( IProgressUpdate ) null ) ;
world . saveLevel ( ) ;
2011-02-19 21:29:51 +01:00
2011-03-26 23:20:35 +01:00
WorldSaveEvent event = new WorldSaveEvent ( world . getWorld ( ) ) ;
2011-02-23 13:56:36 +01:00
server . getPluginManager ( ) . callEvent ( event ) ;
2011-02-05 19:15:04 +01:00
}
2011-02-25 18:15:43 +01:00
2011-04-20 19:05:14 +02:00
this . serverConfigurationManager . savePlayers ( ) ; // CraftBukkit - player data should be saved whenever a save happens.
2011-02-23 13:56:36 +01:00
// CraftBukkit end
2010-12-22 16:22:23 +01:00
}
2011-04-20 19:05:14 +02:00
public void stop ( ) { // Craftbukkit: private -> public
log . info ( " Stopping server " ) ;
2011-02-21 23:30:01 +01:00
// CraftBukkit start
2011-02-23 13:56:36 +01:00
if ( server ! = null ) {
2011-02-01 21:37:07 +01:00
server . disablePlugins ( ) ;
}
2011-02-23 13:56:36 +01:00
// CraftBukkit end
2011-02-02 00:32:18 +01:00
2011-04-20 19:05:14 +02:00
if ( this . serverConfigurationManager ! = null ) {
this . serverConfigurationManager . savePlayers ( ) ;
2011-01-27 22:15:41 +01:00
}
2011-02-23 13:56:36 +01:00
if ( this . worlds . size ( ) > 0 ) { // CraftBukkit
2011-04-20 19:05:14 +02:00
this . saveChunks ( ) ;
2010-12-22 16:22:23 +01:00
}
}
public void a ( ) {
2011-04-20 19:05:14 +02:00
this . isRunning = false ;
2010-12-22 16:22:23 +01:00
}
public void run ( ) {
try {
2011-04-20 19:05:14 +02:00
if ( this . init ( ) ) {
2011-01-29 22:50:29 +01:00
long i = System . currentTimeMillis ( ) ;
2010-12-28 20:52:24 +01:00
2011-04-20 19:05:14 +02:00
for ( long j = 0L ; this . isRunning ; Thread . sleep ( 1L ) ) {
2011-01-29 22:50:29 +01:00
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 ) {
2011-04-20 19:05:14 +02:00
log . warning ( " Can \ 't keep up! Did the system time change, or is the server overloaded? " ) ;
2011-01-29 22:50:29 +01:00
l = 2000L ;
2010-12-22 16:22:23 +01:00
}
2011-01-29 22:50:29 +01:00
if ( l < 0L ) {
2011-04-20 19:05:14 +02:00
log . 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 ;
2011-02-23 13:56:36 +01:00
// CraftBukkit - TODO - Replace with loop?
2011-04-20 19:05:14 +02:00
if ( this . worlds . size ( ) > 0 & & this . worlds . get ( 0 ) . everyoneDeeplySleeping ( ) ) {
2011-01-29 22:50:29 +01:00
this . h ( ) ;
2011-02-23 03:37:56 +01:00
j = 0L ;
} else {
while ( j > 50L ) {
j - = 50L ;
this . h ( ) ;
}
2010-12-22 16:22:23 +01:00
}
}
} else {
2011-04-20 19:05:14 +02:00
while ( this . isRunning ) {
2011-01-29 22:50:29 +01:00
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
}
}
}
2011-02-23 03:37:56 +01:00
} catch ( Throwable throwable ) {
throwable . printStackTrace ( ) ;
2011-04-20 19:05:14 +02:00
log . log ( Level . SEVERE , " Unexpected exception " , throwable ) ;
2011-01-29 22:50:29 +01:00
2011-04-20 19:05:14 +02:00
while ( this . isRunning ) {
2011-01-29 22:50:29 +01:00
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-04-20 19:05:14 +02:00
this . stop ( ) ;
this . isStopped = true ;
2011-02-23 03:37:56 +01:00
} catch ( Throwable throwable1 ) {
throwable1 . printStackTrace ( ) ;
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-04-20 19:05:14 +02:00
+ + this . ticks ;
2011-02-05 19:15:04 +01:00
2011-02-23 13:56:36 +01:00
// CraftBukkit start
2011-04-20 19:05:14 +02:00
if ( this . ticks % 20 = = 0 ) {
for ( int i = 0 ; i < this . serverConfigurationManager . players . size ( ) ; + + i ) {
EntityPlayer entityplayer = ( EntityPlayer ) this . serverConfigurationManager . players . get ( i ) ;
entityplayer . netServerHandler . sendPacket ( new Packet4UpdateTime ( entityplayer . world . getTime ( ) ) ) ;
2011-02-05 19:15:04 +01:00
}
2010-12-22 16:22:23 +01:00
}
2011-02-07 02:59:06 +01:00
2011-04-20 19:05:14 +02:00
( ( CraftScheduler ) server . getScheduler ( ) ) . mainThreadHeartbeat ( this . ticks ) ;
2011-02-19 21:29:51 +01:00
2011-02-23 13:56:36 +01:00
for ( WorldServer world : worlds ) {
2011-04-20 19:05:14 +02:00
world . doTick ( ) ;
2011-01-29 22:50:29 +01:00
2011-04-20 19:05:14 +02:00
while ( world . doLighting ( ) ) {
2011-02-05 19:15:04 +01:00
;
}
2011-02-19 21:29:51 +01:00
2011-04-20 19:05:14 +02:00
world . cleanUp ( ) ;
2010-12-22 16:22:23 +01:00
}
2011-02-23 13:56:36 +01:00
// CraftBukkit end
2011-04-20 19:05:14 +02:00
this . networkListenThread . a ( ) ;
this . serverConfigurationManager . b ( ) ;
this . tracker . a ( ) ;
2011-01-29 22:50:29 +01:00
2011-02-23 03:37:56 +01:00
for ( j = 0 ; j < this . q . size ( ) ; + + j ) {
( ( IUpdatePlayerListBox ) this . q . 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-04-20 19:05:14 +02:00
log . log ( Level . WARNING , " Unexpected exception while parsing console command " , exception ) ;
2010-12-22 16:22:23 +01:00
}
}
2011-04-20 19:05:14 +02:00
public void issueCommand ( String s , ICommandListener icommandlistener ) {
2011-02-23 03:37:56 +01:00
this . r . add ( new ServerCommand ( s , icommandlistener ) ) ;
2010-12-22 16:22:23 +01:00
}
public void b ( ) {
2011-02-23 03:37:56 +01:00
while ( this . r . size ( ) > 0 ) {
ServerCommand servercommand = ( ServerCommand ) this . r . remove ( 0 ) ;
2010-12-28 20:52:24 +01:00
2011-04-20 19:05:14 +02:00
// this.consoleCommandHandler.a(servercommand); // CraftBukkit - Removed its now called in server.displatchCommand
2011-03-12 19:23:57 +01:00
server . dispatchCommand ( console , servercommand ) ; // CraftBukkit
2010-12-22 16:22:23 +01:00
}
}
2010-12-28 20:52:24 +01:00
public void a ( IUpdatePlayerListBox iupdateplayerlistbox ) {
2011-02-23 03:37:56 +01:00
this . q . add ( iupdateplayerlistbox ) ;
2010-12-22 16:22:23 +01:00
}
2011-02-23 13:56:36 +01:00
public static void main ( final OptionSet options ) { // CraftBukkit - replaces main(String args[])
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-04-20 19:05:14 +02:00
log . 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
}
2011-04-20 19:05:14 +02:00
public void sendMessage ( String s ) {
log . info ( s ) ;
2010-12-22 16:22:23 +01:00
}
2011-03-31 22:40:00 +02:00
public void c ( String s ) {
2011-04-20 19:05:14 +02:00
log . warning ( s ) ;
2011-03-31 22:40:00 +02:00
}
2011-04-20 19:05:14 +02:00
public String getName ( ) {
2010-12-22 16:22:23 +01:00
return " CONSOLE " ;
}
2010-12-28 20:52:24 +01:00
2011-04-20 19:05:14 +02:00
public static boolean isRunning ( MinecraftServer minecraftserver ) {
return minecraftserver . isRunning ;
2010-12-28 20:52:24 +01:00
}
2011-01-11 09:25:13 +01:00
}