--- a/net/minecraft/network/NetworkSystem.java
+++ b/net/minecraft/network/NetworkSystem.java
@@ -41,11 +41,12 @@
 
 public class NetworkSystem {
    private static final Logger field_151275_b = LogManager.getLogger();
+   private static final int READ_TIMEOUT = Integer.parseInt(System.getProperty("forge.readTimeout", "30"));
    public static final LazyValue<NioEventLoopGroup> field_151276_c = new LazyValue<>(() -> {
-      return new NioEventLoopGroup(0, (new ThreadFactoryBuilder()).setNameFormat("Netty Server IO #%d").setDaemon(true).build());
+      return new NioEventLoopGroup(0, (new ThreadFactoryBuilder()).setNameFormat("Netty Server IO #%d").setDaemon(true).setThreadFactory(net.minecraftforge.fml.common.thread.SidedThreadGroups.SERVER).build());
    });
    public static final LazyValue<EpollEventLoopGroup> field_181141_b = new LazyValue<>(() -> {
-      return new EpollEventLoopGroup(0, (new ThreadFactoryBuilder()).setNameFormat("Netty Epoll Server IO #%d").setDaemon(true).build());
+      return new EpollEventLoopGroup(0, (new ThreadFactoryBuilder()).setNameFormat("Netty Epoll Server IO #%d").setDaemon(true).setThreadFactory(net.minecraftforge.fml.common.thread.SidedThreadGroups.SERVER).build());
    });
    private final MinecraftServer field_151273_d;
    public volatile boolean field_151277_a;
@@ -58,6 +59,7 @@
    }
 
    public void func_151265_a(@Nullable InetAddress p_151265_1_, int p_151265_2_) throws IOException {
+      if (p_151265_1_ instanceof java.net.Inet6Address) System.setProperty("java.net.preferIPv4Stack", "false");
       synchronized(this.field_151274_e) {
          Class<? extends ServerSocketChannel> oclass;
          LazyValue<? extends EventLoopGroup> lazyvalue;
@@ -78,7 +80,7 @@
                } catch (ChannelException channelexception) {
                }
 
-               p_initChannel_1_.pipeline().addLast("timeout", new ReadTimeoutHandler(30)).addLast("legacy_query", new LegacyPingHandler(NetworkSystem.this)).addLast("splitter", new NettyVarint21FrameDecoder()).addLast("decoder", new NettyPacketDecoder(PacketDirection.SERVERBOUND)).addLast("prepender", new NettyVarint21FrameEncoder()).addLast("encoder", new NettyPacketEncoder(PacketDirection.CLIENTBOUND));
+               p_initChannel_1_.pipeline().addLast("timeout", new ReadTimeoutHandler(READ_TIMEOUT)).addLast("legacy_query", new LegacyPingHandler(NetworkSystem.this)).addLast("splitter", new NettyVarint21FrameDecoder()).addLast("decoder", new NettyPacketDecoder(PacketDirection.SERVERBOUND)).addLast("prepender", new NettyVarint21FrameEncoder()).addLast("encoder", new NettyPacketEncoder(PacketDirection.CLIENTBOUND));
                int i = NetworkSystem.this.field_151273_d.func_241871_k();
                NetworkManager networkmanager = (NetworkManager)(i > 0 ? new RateLimitedNetworkManager(i) : new NetworkManager(PacketDirection.SERVERBOUND));
                NetworkSystem.this.field_151272_f.add(networkmanager);
