From d44c9082fa54323a062cfdb2a72b9fed9ba28e1b Mon Sep 17 00:00:00 2001 From: RainWarrior Date: Tue, 5 Apr 2016 10:41:42 +0300 Subject: [PATCH] Fixed mod languages not being loaded on the server. --- .../fml/server/FMLServerHandler.java | 43 ++++++++++++++++++- 1 file changed, 41 insertions(+), 2 deletions(-) diff --git a/src/main/java/net/minecraftforge/fml/server/FMLServerHandler.java b/src/main/java/net/minecraftforge/fml/server/FMLServerHandler.java index b80bf1e342..0a798eb546 100644 --- a/src/main/java/net/minecraftforge/fml/server/FMLServerHandler.java +++ b/src/main/java/net/minecraftforge/fml/server/FMLServerHandler.java @@ -12,18 +12,21 @@ */ package net.minecraftforge.fml.server; -import java.io.File; +import java.io.*; import java.util.Iterator; import java.util.List; import java.util.Set; +import java.util.zip.ZipFile; import net.minecraft.command.ServerCommand; +import net.minecraft.launchwrapper.Launch; import net.minecraft.network.INetHandler; import net.minecraft.network.NetHandlerPlayServer; import net.minecraft.network.NetworkManager; import net.minecraft.server.MinecraftServer; import net.minecraft.server.dedicated.DedicatedServer; import net.minecraft.util.IThreadListener; +import net.minecraft.util.text.translation.LanguageMap; import net.minecraft.world.storage.SaveFormatOld; import net.minecraftforge.fml.common.FMLCommonHandler; import net.minecraftforge.fml.common.FMLLog; @@ -37,6 +40,7 @@ import net.minecraftforge.fml.common.network.FMLNetworkEvent; import net.minecraftforge.fml.relauncher.Side; import com.google.common.collect.ImmutableList; +import org.apache.commons.io.IOUtils; /** * Handles primary communication from hooked code into the system @@ -218,7 +222,42 @@ public class FMLServerHandler implements IFMLSidedHandler @Override public void addModAsResource(ModContainer container) { - // NOOP + String langFile = "assets/" + container.getModId().toLowerCase() + "/lang/en_US.lang"; + File source = container.getSource(); + InputStream stream = null; + ZipFile zip = null; + try + { + if (source.isDirectory() && (Boolean) Launch.blackboard.get("fml.deobfuscatedEnvironment")) + { + stream = new FileInputStream(new File(source.toURI().resolve(langFile).getPath())); + } + else + { + try + { + zip = new ZipFile(source); + stream = zip.getInputStream(zip.getEntry(langFile)); + } + finally + { + if(zip != null) zip.close(); + } + } + LanguageMap.inject(stream); + } + catch (IOException e) + { + // hush + } + catch(Exception e) + { + FMLLog.getLogger().error(e); + } + finally + { + IOUtils.closeQuietly(stream); + } } @Override