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