[英]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.