繁体   English   中英

在 mod [Java] 中更改 minecraft 代理

[英]Change minecraft proxy in mod [Java]

不久之前,我发布了一个关于如何在我的世界中使用代理的问题。

总结大部分问题,我正在研究一个暴民,我希望能够在代码期间随时更改 JVM 的代理。 我知道在调用 VM 时设置代理很容易,但我希望能够在游戏中实时更改它,这样当我连接到服务器时我的 IP 是不同的(这个 mod 主要是去供偏执于加入服务器的人和知道其 IP 的人使用。

tried setting System Properties as so:试过这样设置系统属性:

    System.setProperty("http.proxyHost", "186.116.8.170");
    System.setProperty("http.proxyPort", "8080");

也试过做

System.setProperty("https.proxyHost", "186.116.8.170");
System.setProperty("https.proxyPort", "8080");

但这些都没有用。

我将不胜感激任何帮助,谢谢。

minecraft使用netty ,需要使用mixin修改net.minecraft.network.NetworkManager
下面 1.8.9 的代码

@Mixin(NetworkManager.class)
public abstract class MixinNetworkManager {
    @Shadow
    @Final
    public static LazyLoadBase<NioEventLoopGroup> CLIENT_NIO_EVENTLOOP;

    @Overwrite
    public static NetworkManager createNetworkManagerAndConnect(InetAddress address, int serverPort, boolean useNativeTransport) {
        final NetworkManager networkmanager = new NetworkManager(EnumPacketDirection.CLIENTBOUND);

        Bootstrap bootstrap=new Bootstrap();

        EventLoopGroup eventLoopGroup;
        Proxy proxy=ProxyManager.INSTANCE.getProxy();
        if(proxy.type().equals(Proxy.Type.DIRECT)){
            eventLoopGroup=CLIENT_NIO_EVENTLOOP.getValue();
            bootstrap.channel(NioSocketChannel.class);
        }else {
            if(!Epoll.isAvailable()||!useNativeTransport){
                System.out.println("Something goes wrong! Maybe you can disable proxy. [Epoll="+Epoll.isAvailable()+", UNT="+useNativeTransport+"]");
            }
            eventLoopGroup=new OioEventLoopGroup(0, (new ThreadFactoryBuilder()).setNameFormat("Netty Client IO #%d").setDaemon(true).build());
            bootstrap.channelFactory(new ProxyOioChannelFactory(proxy));
        }

        bootstrap.group(eventLoopGroup).handler(new ChannelInitializer<Channel>() {
            protected void initChannel(Channel channel) {
                try {
                    channel.config().setOption(ChannelOption.TCP_NODELAY, true);
                } catch (ChannelException var3) {
                    var3.printStackTrace();
                }
                channel.pipeline().addLast("timeout", new ReadTimeoutHandler(30)).addLast("splitter", new MessageDeserializer2()).addLast("decoder", new MessageDeserializer(EnumPacketDirection.CLIENTBOUND)).addLast("prepender", new MessageSerializer2()).addLast("encoder", new MessageSerializer(EnumPacketDirection.SERVERBOUND)).addLast("packet_handler", networkmanager);
            }
        });

        bootstrap.connect(address, serverPort).syncUninterruptibly();

        return networkmanager;
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM