Fix problem with connecting to vanilla.
SHOW what's modded and what's vanilla in the list. Hooks that make the blocking work to come
This commit is contained in:
parent
5e4ddab6ba
commit
f7d932d418
|
@ -44,7 +44,7 @@
|
|||
Display.setVSyncEnabled(this.field_71474_y.field_74352_v);
|
||||
}
|
||||
|
||||
@@ -915,9 +922,11 @@
|
||||
@@ -916,9 +923,11 @@
|
||||
|
||||
if (!this.field_71454_w)
|
||||
{
|
||||
|
@ -56,7 +56,7 @@
|
|||
}
|
||||
|
||||
GL11.glFlush();
|
||||
@@ -1495,6 +1504,8 @@
|
||||
@@ -1496,6 +1505,8 @@
|
||||
--this.field_71467_ac;
|
||||
}
|
||||
|
||||
|
@ -65,7 +65,7 @@
|
|||
this.field_71424_I.func_76320_a("gui");
|
||||
|
||||
if (!this.field_71445_n)
|
||||
@@ -1645,6 +1656,7 @@
|
||||
@@ -1646,6 +1657,7 @@
|
||||
this.field_71462_r.func_146274_d();
|
||||
}
|
||||
}
|
||||
|
@ -73,7 +73,7 @@
|
|||
}
|
||||
|
||||
if (this.field_71429_W > 0)
|
||||
@@ -1786,6 +1798,7 @@
|
||||
@@ -1787,6 +1799,7 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -81,7 +81,7 @@
|
|||
}
|
||||
}
|
||||
|
||||
@@ -1977,6 +1990,8 @@
|
||||
@@ -1978,6 +1991,8 @@
|
||||
this.field_71453_ak.func_74428_b();
|
||||
}
|
||||
|
||||
|
@ -90,7 +90,7 @@
|
|||
this.field_71424_I.func_76319_b();
|
||||
this.field_71423_H = func_71386_F();
|
||||
}
|
||||
@@ -2093,6 +2108,7 @@
|
||||
@@ -2094,6 +2109,7 @@
|
||||
this.field_110448_aq.func_148529_f();
|
||||
this.func_71351_a((ServerData)null);
|
||||
this.field_71455_al = false;
|
||||
|
|
|
@ -0,0 +1,18 @@
|
|||
--- ../src-base/minecraft/net/minecraft/client/gui/GuiMultiplayer.java
|
||||
+++ ../src-work/minecraft/net/minecraft/client/gui/GuiMultiplayer.java
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
import com.google.common.base.Splitter;
|
||||
import com.google.common.collect.Lists;
|
||||
+import cpw.mods.fml.client.FMLClientHandler;
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import java.util.List;
|
||||
@@ -40,6 +41,7 @@
|
||||
public GuiMultiplayer(GuiScreen p_i1040_1_)
|
||||
{
|
||||
this.field_146798_g = p_i1040_1_;
|
||||
+ FMLClientHandler.instance().setupServerList();
|
||||
}
|
||||
|
||||
public void func_73866_w_()
|
|
@ -0,0 +1,31 @@
|
|||
--- ../src-base/minecraft/net/minecraft/client/gui/ServerListEntryNormal.java
|
||||
+++ ../src-work/minecraft/net/minecraft/client/gui/ServerListEntryNormal.java
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
import com.google.common.base.Charsets;
|
||||
import com.google.common.util.concurrent.ThreadFactoryBuilder;
|
||||
+import cpw.mods.fml.client.FMLClientHandler;
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import io.netty.buffer.ByteBuf;
|
||||
@@ -83,7 +84,7 @@
|
||||
boolean flag2 = this.field_148301_e.field_82821_f < 4;
|
||||
boolean flag3 = flag1 || flag2;
|
||||
this.field_148300_d.field_71466_p.func_78276_b(this.field_148301_e.field_78847_a, p_148279_2_ + 32 + 3, p_148279_3_ + 1, 16777215);
|
||||
- List list = this.field_148300_d.field_71466_p.func_78271_c(this.field_148301_e.field_78843_d, p_148279_4_ - 32 - 2);
|
||||
+ List list = this.field_148300_d.field_71466_p.func_78271_c(FMLClientHandler.instance().fixDescription(this.field_148301_e.field_78843_d), p_148279_4_ - 32 - 2);
|
||||
|
||||
for (int l1 = 0; l1 < Math.min(list.size(), 2); ++l1)
|
||||
{
|
||||
@@ -174,6 +175,11 @@
|
||||
int k2 = p_148279_7_ - p_148279_2_;
|
||||
int l2 = p_148279_8_ - p_148279_3_;
|
||||
|
||||
+ String tooltip = FMLClientHandler.instance().enhanceServerListEntry(this, this.field_148301_e, p_148279_2_, p_148279_4_, p_148279_3_, k2, l2);
|
||||
+ if (tooltip != null)
|
||||
+ {
|
||||
+ this.field_148303_c.func_146793_a(tooltip);
|
||||
+ } else
|
||||
if (k2 >= p_148279_4_ - 15 && k2 <= p_148279_4_ - 5 && l2 >= 0 && l2 <= 8)
|
||||
{
|
||||
this.field_148303_c.func_146793_a(s1);
|
|
@ -0,0 +1,18 @@
|
|||
--- ../src-base/minecraft/net/minecraft/client/network/OldServerPinger.java
|
||||
+++ ../src-work/minecraft/net/minecraft/client/network/OldServerPinger.java
|
||||
@@ -4,6 +4,7 @@
|
||||
import com.google.common.base.Splitter;
|
||||
import com.google.common.collect.Iterables;
|
||||
import com.mojang.authlib.GameProfile;
|
||||
+import cpw.mods.fml.client.FMLClientHandler;
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import io.netty.bootstrap.Bootstrap;
|
||||
@@ -148,6 +149,7 @@
|
||||
p_147224_1_.func_147407_a((String)null);
|
||||
}
|
||||
|
||||
+ FMLClientHandler.instance().bindServerListData(p_147224_1_, serverstatusresponse);
|
||||
networkmanager.func_150725_a(new C01PacketPing(Minecraft.func_71386_F()), new GenericFutureListener[0]);
|
||||
this.field_147403_d = true;
|
||||
}
|
|
@ -0,0 +1,27 @@
|
|||
--- ../src-base/minecraft/net/minecraft/network/ServerStatusResponse.java
|
||||
+++ ../src-work/minecraft/net/minecraft/network/ServerStatusResponse.java
|
||||
@@ -8,6 +8,8 @@
|
||||
import com.google.gson.JsonSerializationContext;
|
||||
import com.google.gson.JsonSerializer;
|
||||
import com.mojang.authlib.GameProfile;
|
||||
+import cpw.mods.fml.client.FMLClientHandler;
|
||||
+import cpw.mods.fml.common.network.internal.FMLNetworkHandler;
|
||||
import java.lang.reflect.Type;
|
||||
import net.minecraft.util.IChatComponent;
|
||||
import net.minecraft.util.JsonUtils;
|
||||
@@ -230,6 +232,7 @@
|
||||
serverstatusresponse.func_151320_a(JsonUtils.func_151200_h(jsonobject, "favicon"));
|
||||
}
|
||||
|
||||
+ FMLClientHandler.instance().captureAdditionalData(serverstatusresponse, jsonobject);
|
||||
return serverstatusresponse;
|
||||
}
|
||||
|
||||
@@ -257,6 +260,7 @@
|
||||
jsonobject.addProperty("favicon", p_151313_1_.func_151316_d());
|
||||
}
|
||||
|
||||
+ FMLNetworkHandler.enhanceStatusQuery(jsonobject);
|
||||
return jsonobject;
|
||||
}
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
package cpw.mods.fml.client;
|
||||
|
||||
public class ExtendedServerListData {
|
||||
public final String type;
|
||||
public final boolean isCompatible;
|
||||
public final int modCount;
|
||||
public final boolean isBlocked;
|
||||
|
||||
public ExtendedServerListData(String type, boolean isCompatible, int modCount, boolean isBlocked)
|
||||
{
|
||||
this.type = type;
|
||||
this.isCompatible = isCompatible;
|
||||
this.modCount = modCount;
|
||||
this.isBlocked = isBlocked;
|
||||
}
|
||||
}
|
|
@ -14,15 +14,19 @@ package cpw.mods.fml.client;
|
|||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.logging.Logger;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.entity.EntityClientPlayerMP;
|
||||
import net.minecraft.client.gui.Gui;
|
||||
import net.minecraft.client.gui.GuiIngameMenu;
|
||||
import net.minecraft.client.gui.GuiScreen;
|
||||
import net.minecraft.client.gui.GuiSelectWorld;
|
||||
import net.minecraft.client.gui.ServerListEntryNormal;
|
||||
import net.minecraft.client.multiplayer.ServerData;
|
||||
import net.minecraft.client.multiplayer.WorldClient;
|
||||
import net.minecraft.client.renderer.entity.Render;
|
||||
import net.minecraft.client.renderer.entity.RenderManager;
|
||||
|
@ -34,7 +38,9 @@ import net.minecraft.entity.player.EntityPlayer;
|
|||
import net.minecraft.launchwrapper.Launch;
|
||||
import net.minecraft.network.INetHandler;
|
||||
import net.minecraft.network.NetworkManager;
|
||||
import net.minecraft.network.ServerStatusResponse;
|
||||
import net.minecraft.server.MinecraftServer;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import org.apache.logging.log4j.Level;
|
||||
import com.google.common.base.Strings;
|
||||
import com.google.common.base.Throwables;
|
||||
|
@ -43,6 +49,7 @@ import com.google.common.collect.HashBiMap;
|
|||
import com.google.common.collect.ImmutableList;
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import com.google.common.collect.Maps;
|
||||
import com.google.gson.JsonObject;
|
||||
import cpw.mods.fml.client.registry.RenderingRegistry;
|
||||
import cpw.mods.fml.common.DummyModContainer;
|
||||
import cpw.mods.fml.common.DuplicateModsFoundException;
|
||||
|
@ -124,6 +131,9 @@ public class FMLClientHandler implements IFMLSidedHandler
|
|||
|
||||
private BiMap<ModContainer, IModGuiFactory> guiFactories;
|
||||
|
||||
private Map<ServerStatusResponse,JsonObject> extraServerListData;
|
||||
private Map<ServerData, ExtendedServerListData> serverDataTag;
|
||||
|
||||
/**
|
||||
* Called to start the whole game off
|
||||
*
|
||||
|
@ -544,4 +554,97 @@ public class FMLClientHandler implements IFMLSidedHandler
|
|||
{
|
||||
return guiFactories.get(selectedMod);
|
||||
}
|
||||
|
||||
|
||||
public void setupServerList()
|
||||
{
|
||||
extraServerListData = Collections.synchronizedMap(Maps.<ServerStatusResponse,JsonObject>newHashMap());
|
||||
serverDataTag = Collections.synchronizedMap(Maps.<ServerData,ExtendedServerListData>newHashMap());
|
||||
}
|
||||
|
||||
public void captureAdditionalData(ServerStatusResponse serverstatusresponse, JsonObject jsonobject)
|
||||
{
|
||||
if (jsonobject.has("modinfo"))
|
||||
{
|
||||
JsonObject fmlData = jsonobject.get("modinfo").getAsJsonObject();
|
||||
extraServerListData.put(serverstatusresponse, fmlData);
|
||||
}
|
||||
}
|
||||
public void bindServerListData(ServerData data, ServerStatusResponse originalResponse)
|
||||
{
|
||||
if (extraServerListData.containsKey(originalResponse))
|
||||
{
|
||||
JsonObject jsonData = extraServerListData.get(originalResponse);
|
||||
String type = jsonData.get("type").getAsString();
|
||||
int modCount = jsonData.get("modList").getAsJsonArray().size();
|
||||
boolean moddedClientAllowed = jsonData.has("clientModsAllowed") ? jsonData.get("clientModsAllowed").getAsBoolean() : true;
|
||||
serverDataTag.put(data, new ExtendedServerListData(type, true, modCount, !moddedClientAllowed));
|
||||
}
|
||||
else
|
||||
{
|
||||
String serverDescription = data.field_78843_d;
|
||||
boolean moddedClientAllowed = true;
|
||||
if (!Strings.isNullOrEmpty(serverDescription))
|
||||
{
|
||||
moddedClientAllowed = !serverDescription.endsWith(":NOFML§r");
|
||||
}
|
||||
serverDataTag.put(data, new ExtendedServerListData("VANILLA", false, -1, !moddedClientAllowed));
|
||||
}
|
||||
}
|
||||
|
||||
private static final ResourceLocation iconSheet = new ResourceLocation("fml:textures/gui/icons.png");
|
||||
|
||||
public String enhanceServerListEntry(ServerListEntryNormal serverListEntry, ServerData serverEntry, int x, int width, int y, int relativeMouseX, int relativeMouseY)
|
||||
{
|
||||
String tooltip;
|
||||
int idx;
|
||||
boolean blocked = false;
|
||||
if (serverDataTag.containsKey(serverEntry))
|
||||
{
|
||||
ExtendedServerListData extendedData = serverDataTag.get(serverEntry);
|
||||
if ("FML".equals(extendedData.type) && extendedData.isCompatible)
|
||||
{
|
||||
idx = 0;
|
||||
tooltip = String.format("Compatible FML modded server\n%d mods present", extendedData.modCount);
|
||||
}
|
||||
else if ("FML".equals(extendedData.type) && !extendedData.isCompatible)
|
||||
{
|
||||
idx = 16;
|
||||
tooltip = String.format("Incompatible FML modded server\n%d mods present", extendedData.modCount);
|
||||
}
|
||||
else if ("BUKKIT".equals(extendedData.type))
|
||||
{
|
||||
idx = 32;
|
||||
tooltip = String.format("Bukkit modded server");
|
||||
}
|
||||
else if ("VANILLA".equals(extendedData.type))
|
||||
{
|
||||
idx = 48;
|
||||
tooltip = String.format("Vanilla server");
|
||||
}
|
||||
else
|
||||
{
|
||||
idx = 64;
|
||||
tooltip = String.format("Unknown server data");
|
||||
}
|
||||
blocked = extendedData.isBlocked;
|
||||
}
|
||||
else
|
||||
{
|
||||
return null;
|
||||
}
|
||||
this.client.func_110434_K().func_110577_a(iconSheet);
|
||||
Gui.func_146110_a(x + width - 18, y + 10, 0, (float)idx, 16, 16, 256.0f, 256.0f);
|
||||
if (blocked)
|
||||
{
|
||||
Gui.func_146110_a(x + width - 18, y + 10, 0, 80, 16, 16, 256.0f, 256.0f);
|
||||
}
|
||||
|
||||
return relativeMouseX > width - 15 && relativeMouseX < width && relativeMouseY > 10 && relativeMouseY < 26 ? tooltip : null;
|
||||
}
|
||||
|
||||
public String fixDescription(String description)
|
||||
{
|
||||
return description.endsWith(":NOFML§r") ? description.substring(0, description.length() - 8)+"§r" : description;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -20,10 +20,12 @@ public class FMLNetworkEvent<T extends INetHandler> extends Event {
|
|||
}
|
||||
public static class ClientConnectedToServerEvent extends FMLNetworkEvent<INetHandlerPlayClient> {
|
||||
public final boolean isLocal;
|
||||
public ClientConnectedToServerEvent(NetworkManager manager)
|
||||
public final String connectionType;
|
||||
public ClientConnectedToServerEvent(NetworkManager manager, String connectionType)
|
||||
{
|
||||
super((INetHandlerPlayClient) manager.func_150729_e(), INetHandlerPlayClient.class, manager);
|
||||
isLocal = manager.func_150731_c();
|
||||
this.isLocal = manager.func_150731_c();
|
||||
this.connectionType = connectionType;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -32,7 +34,7 @@ public class FMLNetworkEvent<T extends INetHandler> extends Event {
|
|||
public ServerConnectionFromClientEvent(NetworkManager manager)
|
||||
{
|
||||
super((INetHandlerPlayServer) manager.func_150729_e(), INetHandlerPlayServer.class, manager);
|
||||
isLocal = manager.func_150731_c();
|
||||
this.isLocal = manager.func_150731_c();
|
||||
}
|
||||
}
|
||||
public static class ServerDisconnectionFromClientEvent extends FMLNetworkEvent<INetHandlerPlayServer> {
|
||||
|
|
|
@ -37,8 +37,17 @@ enum FMLHandshakeClientState implements IHandshakeState<FMLHandshakeClientState>
|
|||
@Override
|
||||
public FMLHandshakeClientState accept(ChannelHandlerContext ctx, FMLHandshakeMessage msg)
|
||||
{
|
||||
FMLLog.info("Server protocol version %x", ((FMLHandshakeMessage.ServerHello)msg).protocolVersion());
|
||||
// write our custom packet registration, always
|
||||
ctx.writeAndFlush(FMLHandshakeMessage.makeCustomChannelRegistration(NetworkRegistry.INSTANCE.channelNamesFor(Side.CLIENT)));
|
||||
if (msg == null)
|
||||
{
|
||||
NetworkDispatcher dispatcher = ctx.channel().attr(NetworkDispatcher.FML_DISPATCHER).get();
|
||||
dispatcher.abortClientHandshake("VANILLA");
|
||||
// VANILLA login
|
||||
return DONE;
|
||||
}
|
||||
|
||||
FMLLog.info("Server protocol version %x", ((FMLHandshakeMessage.ServerHello)msg).protocolVersion());
|
||||
ctx.writeAndFlush(new FMLHandshakeMessage.ClientHello());
|
||||
ctx.writeAndFlush(new FMLHandshakeMessage.ModList(Loader.instance().getActiveModList()));
|
||||
return WAITINGSERVERDATA;
|
||||
|
|
|
@ -12,6 +12,7 @@ import io.netty.util.concurrent.GenericFutureListener;
|
|||
import io.netty.util.concurrent.ScheduledFuture;
|
||||
import java.net.SocketAddress;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.concurrent.Callable;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import net.minecraft.entity.player.EntityPlayerMP;
|
||||
|
@ -21,6 +22,7 @@ import net.minecraft.network.NetHandlerPlayServer;
|
|||
import net.minecraft.network.NetworkManager;
|
||||
import net.minecraft.network.Packet;
|
||||
import net.minecraft.network.play.client.C17PacketCustomPayload;
|
||||
import net.minecraft.network.play.server.S01PacketJoinGame;
|
||||
import net.minecraft.network.play.server.S3FPacketCustomPayload;
|
||||
import net.minecraft.network.play.server.S40PacketDisconnect;
|
||||
import net.minecraft.server.management.ServerConfigurationManager;
|
||||
|
@ -69,7 +71,6 @@ public class NetworkDispatcher extends SimpleChannelInboundHandler<Packet> imple
|
|||
private final ServerConfigurationManager scm;
|
||||
private EntityPlayerMP player;
|
||||
private ConnectionState state;
|
||||
@SuppressWarnings("unused")
|
||||
private ConnectionType connectionType;
|
||||
private final Side side;
|
||||
private final EmbeddedChannel handshakeChannel;
|
||||
|
@ -151,19 +152,19 @@ public class NetworkDispatcher extends SimpleChannelInboundHandler<Packet> imple
|
|||
this.state = ConnectionState.AWAITING_HANDSHAKE;
|
||||
}
|
||||
|
||||
private void completeClientSideConnection()
|
||||
private void completeClientSideConnection(ConnectionType type)
|
||||
{
|
||||
FMLLog.info("[%s] Client side modded connection established", Thread.currentThread().getName());
|
||||
this.connectionType = type;
|
||||
FMLLog.info("[%s] Client side %s connection established", Thread.currentThread().getName(), this.connectionType.name().toLowerCase(Locale.ENGLISH));
|
||||
this.state = ConnectionState.CONNECTED;
|
||||
this.connectionType = ConnectionType.MODDED;
|
||||
FMLCommonHandler.instance().bus().post(new FMLNetworkEvent.ClientConnectedToServerEvent(manager));
|
||||
FMLCommonHandler.instance().bus().post(new FMLNetworkEvent.ClientConnectedToServerEvent(manager, this.connectionType.name()));
|
||||
}
|
||||
|
||||
private void completeServerSideConnection()
|
||||
private void completeServerSideConnection(ConnectionType type)
|
||||
{
|
||||
FMLLog.info("[%s] Server side modded connection established", Thread.currentThread().getName());
|
||||
this.connectionType = type;
|
||||
FMLLog.info("[%s] Server side %s connection established", Thread.currentThread().getName(), this.connectionType.name().toLowerCase(Locale.ENGLISH));
|
||||
this.state = ConnectionState.CONNECTED;
|
||||
this.connectionType = ConnectionType.MODDED;
|
||||
FMLCommonHandler.instance().bus().post(new FMLNetworkEvent.ServerConnectionFromClientEvent(manager));
|
||||
scm.func_72355_a(manager, player, serverHandler);
|
||||
}
|
||||
|
@ -181,7 +182,7 @@ public class NetworkDispatcher extends SimpleChannelInboundHandler<Packet> imple
|
|||
}
|
||||
else if (state != ConnectionState.CONNECTED && state != ConnectionState.HANDSHAKECOMPLETE)
|
||||
{
|
||||
FMLLog.info("Unexpected packet during modded negotiation - assuming vanilla or keepalives : %s", msg.getClass().getName());
|
||||
handled = handleVanilla(msg);
|
||||
}
|
||||
if (!handled)
|
||||
{
|
||||
|
@ -189,6 +190,19 @@ public class NetworkDispatcher extends SimpleChannelInboundHandler<Packet> imple
|
|||
}
|
||||
}
|
||||
|
||||
private boolean handleVanilla(Packet msg)
|
||||
{
|
||||
if (state == ConnectionState.AWAITING_HANDSHAKE && msg instanceof S01PacketJoinGame)
|
||||
{
|
||||
handshakeChannel.pipeline().fireUserEventTriggered(msg);
|
||||
}
|
||||
else
|
||||
{
|
||||
FMLLog.info("Unexpected packet during modded negotiation - assuming vanilla or keepalives : %s", msg.getClass().getName());
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public INetHandler getNetHandler()
|
||||
{
|
||||
return netHandler;
|
||||
|
@ -399,11 +413,11 @@ public class NetworkDispatcher extends SimpleChannelInboundHandler<Packet> imple
|
|||
}
|
||||
if (side == Side.CLIENT)
|
||||
{
|
||||
completeClientSideConnection();
|
||||
completeClientSideConnection(ConnectionType.MODDED);
|
||||
}
|
||||
else
|
||||
{
|
||||
completeServerSideConnection();
|
||||
completeServerSideConnection(ConnectionType.MODDED);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -411,4 +425,9 @@ public class NetworkDispatcher extends SimpleChannelInboundHandler<Packet> imple
|
|||
{
|
||||
state = ConnectionState.HANDSHAKECOMPLETE;
|
||||
}
|
||||
|
||||
public void abortClientHandshake(String type)
|
||||
{
|
||||
completeClientSideConnection(ConnectionType.valueOf(type));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -29,9 +29,12 @@ import net.minecraft.server.management.ServerConfigurationManager;
|
|||
import net.minecraft.world.World;
|
||||
import org.apache.logging.log4j.core.helpers.Integers;
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.gson.JsonArray;
|
||||
import com.google.gson.JsonObject;
|
||||
import cpw.mods.fml.common.FMLCommonHandler;
|
||||
import cpw.mods.fml.common.FMLContainer;
|
||||
import cpw.mods.fml.common.FMLLog;
|
||||
import cpw.mods.fml.common.Loader;
|
||||
import cpw.mods.fml.common.ModContainer;
|
||||
import cpw.mods.fml.common.network.FMLEmbeddedChannel;
|
||||
import cpw.mods.fml.common.network.FMLOutboundHandler;
|
||||
|
@ -176,4 +179,20 @@ public class FMLNetworkHandler
|
|||
return list;
|
||||
}
|
||||
|
||||
|
||||
public static void enhanceStatusQuery(JsonObject jsonobject)
|
||||
{
|
||||
JsonObject fmlData = new JsonObject();
|
||||
fmlData.addProperty("type", "FML");
|
||||
JsonArray modList = new JsonArray();
|
||||
for (ModContainer mc : Loader.instance().getActiveModList())
|
||||
{
|
||||
JsonObject modData = new JsonObject();
|
||||
modData.addProperty("modid", mc.getModId());
|
||||
modData.addProperty("version", mc.getVersion());
|
||||
modList.add(modData);
|
||||
}
|
||||
fmlData.add("modList", modList);
|
||||
jsonobject.add("modinfo", fmlData);
|
||||
}
|
||||
}
|
||||
|
|
Binary file not shown.
After Width: | Height: | Size: 5.1 KiB |
Loading…
Reference in New Issue