    001    package net.minecraft.server.integrated;
    002
    003    import cpw.mods.fml.common.Side;
    004    import cpw.mods.fml.common.asm.SideOnly;
    005    import cpw.mods.fml.common.network.FMLNetworkHandler;
    006
    007    import java.io.IOException;
    008    import java.net.InetAddress;
    009    import net.minecraft.entity.player.EntityPlayerMP;
    010    import net.minecraft.network.MemoryConnection;
    011    import net.minecraft.network.NetworkListenThread;
    012    import net.minecraft.network.packet.NetHandler;
    013    import net.minecraft.server.MinecraftServer;
    014    import net.minecraft.server.ServerListenThread;
    015    import net.minecraft.util.HttpUtil;
    016
    017    @SideOnly(Side.CLIENT)
    018    public class IntegratedServerListenThread extends NetworkListenThread
    019    {
    020        private final MemoryConnection netMemoryConnection = new MemoryConnection((NetHandler)null);
    021        private MemoryConnection theMemoryConnection;
    022        private String field_71759_e;
    023        private boolean field_71756_f = false;
    024        private ServerListenThread myServerListenThread;
    025
    026        public IntegratedServerListenThread(IntegratedServer par1IntegratedServer) throws IOException
    027        {
    028            super(par1IntegratedServer);
    029        }
    030
    031        public void func_71754_a(MemoryConnection par1MemoryConnection, String par2Str)
    032        {
    033            this.theMemoryConnection = par1MemoryConnection;
    034            this.field_71759_e = par2Str;
    035        }
    036
    037        public String func_71755_c() throws IOException
    038        {
    039            if (this.myServerListenThread == null)
    040            {
    041                int var1 = -1;
    042
    043                try
    044                {
    045                    var1 = HttpUtil.func_76181_a();
    046                }
    047                catch (IOException var4)
    048                {
    049                    ;
    050                }
    051
    052                if (var1 <= 0)
    053                {
    054                    var1 = 25564;
    055                }
    056
    057                try
    058                {
    059                    this.myServerListenThread = new ServerListenThread(this, (InetAddress)null, var1);
    060                    this.myServerListenThread.start();
    061                }
    062                catch (IOException var3)
    063                {
    064                    throw var3;
    065                }
    066            }
    067
    068            return FMLNetworkHandler.computeLocalHost().getHostAddress() + ":" + this.myServerListenThread.getMyPort();
    069        }
    070
    071        public void stopListening()
    072        {
    073            super.stopListening();
    074
    075            if (this.myServerListenThread != null)
    076            {
    077                System.out.println("Stopping server connection");
    078                this.myServerListenThread.func_71768_b();
    079                this.myServerListenThread.interrupt();
    080                this.myServerListenThread = null;
    081            }
    082        }
    083
    084        /**
    085         * processes packets and pending connections
    086         */
    087        public void networkTick()
    088        {
    089            if (this.theMemoryConnection != null)
    090            {
    091                EntityPlayerMP var1 = this.getIntergatedServerMinecraftServerInstance().getConfigurationManager().createPlayerForUser(this.field_71759_e);
    092
    093                if (var1 != null)
    094                {
    095                    this.netMemoryConnection.pairWith(this.theMemoryConnection);
    096                    this.field_71756_f = true;
    097                    this.getIntergatedServerMinecraftServerInstance().getConfigurationManager().initializeConnectionToPlayer(this.netMemoryConnection, var1);
    098                }
    099
    100                this.theMemoryConnection = null;
    101                this.field_71759_e = null;
    102            }
    103
    104            if (this.myServerListenThread != null)
    105            {
    106                this.myServerListenThread.processPendingConnections();
    107            }
    108
    109            super.networkTick();
    110        }
    111
    112        /**
    113         * Gets MinecraftServer instance.
    114         */
    115        public IntegratedServer getIntergatedServerMinecraftServerInstance()
    116        {
    117            return (IntegratedServer)super.getServer();
    118        }
    119
    120        public boolean func_71752_f()
    121        {
    122            return this.field_71756_f && this.netMemoryConnection.getPairedConnection().isConnectionActive() && this.netMemoryConnection.getPairedConnection().isGamePaused();
    123        }
    124
    125        public MinecraftServer getServer()
    126        {
    127            return this.getIntergatedServerMinecraftServerInstance();
    128        }
    129    }