From 18a35c1ab7cf60d45f1eaa342df177757306f468 Mon Sep 17 00:00:00 2001 From: Christian Weeks Date: Fri, 1 Jun 2012 14:55:49 -0400 Subject: [PATCH] Add in optifine visibility for the mod list. Will search for an "optifine_mod.info" file on the class path if sp614x wants to add one to optifine. --- .../cpw/mods/fml/client/FMLClientHandler.java | 26 ++ client/cpw/mods/fml/client/GuiModList.java | 2 +- .../mods/fml/client/OptifineModContainer.java | 302 ++++++++++++++++++ 3 files changed, 329 insertions(+), 1 deletion(-) create mode 100644 client/cpw/mods/fml/client/OptifineModContainer.java diff --git a/client/cpw/mods/fml/client/FMLClientHandler.java b/client/cpw/mods/fml/client/FMLClientHandler.java index 30db6722dd..0068ebbec2 100644 --- a/client/cpw/mods/fml/client/FMLClientHandler.java +++ b/client/cpw/mods/fml/client/FMLClientHandler.java @@ -77,6 +77,7 @@ import net.minecraft.src.WorldType; import argo.jdom.JdomParser; import argo.jdom.JsonNode; import cpw.mods.fml.common.FMLCommonHandler; +import cpw.mods.fml.common.FMLModLoaderContainer; import cpw.mods.fml.common.IFMLSidedHandler; import cpw.mods.fml.common.IKeyHandler; import cpw.mods.fml.common.Loader; @@ -149,6 +150,9 @@ public class FMLClientHandler implements IFMLSidedHandler * * @param minecraftServer */ + + private OptifineModContainer optifineContainer; + public void onPreLoad(Minecraft minecraft) { /* try @@ -184,6 +188,17 @@ public class FMLClientHandler implements IFMLSidedHandler FMLCommonHandler.instance().registerSidedDelegate(this); FMLRegistry.registerRegistry(new ClientRegistry()); Loader.instance().loadMods(); + try + { + Class optifineConfig = Class.forName("Config", false, Loader.instance().getModClassLoader()); + optifineContainer = new OptifineModContainer(optifineConfig); + ModMetadata optifineMetadata = readMetadataFrom(Loader.instance().getModClassLoader().getResourceAsStream("optifinemod.info"), optifineContainer); + optifineContainer.setMetadata(optifineMetadata); + } + catch (Exception e) + { + // OPTIFINE not found + } } /** @@ -1072,4 +1087,15 @@ public class FMLClientHandler implements IFMLSidedHandler } return null; } + + /** + * @param mods + */ + public void addSpecialModEntries(ArrayList mods) + { + mods.add(new FMLModLoaderContainer()); + if (optifineContainer!=null) { + mods.add(optifineContainer); + } + } } diff --git a/client/cpw/mods/fml/client/GuiModList.java b/client/cpw/mods/fml/client/GuiModList.java index e959193d99..4680182d6f 100644 --- a/client/cpw/mods/fml/client/GuiModList.java +++ b/client/cpw/mods/fml/client/GuiModList.java @@ -52,7 +52,7 @@ public class GuiModList extends GuiScreen { this.mainMenu=mainMenu; this.mods=new ArrayList(); - mods.add(new FMLModLoaderContainer()); + FMLClientHandler.instance().addSpecialModEntries(mods); for (ModContainer mod : Loader.getModList()) { if (mod.getMetadata()!=null && mod.getMetadata().parentMod != null) { continue; diff --git a/client/cpw/mods/fml/client/OptifineModContainer.java b/client/cpw/mods/fml/client/OptifineModContainer.java new file mode 100644 index 0000000000..40ae4afa8a --- /dev/null +++ b/client/cpw/mods/fml/client/OptifineModContainer.java @@ -0,0 +1,302 @@ +/* + * The FML Forge Mod Loader suite. + * Copyright (C) 2012 cpw + * + * This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free + * Software Foundation; either version 2.1 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 + * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +package cpw.mods.fml.client; + +import java.io.File; +import java.util.Collections; +import java.util.List; +import java.util.Map; + +import cpw.mods.fml.common.IConsoleHandler; +import cpw.mods.fml.common.ICraftingHandler; +import cpw.mods.fml.common.IDispenseHandler; +import cpw.mods.fml.common.IKeyHandler; +import cpw.mods.fml.common.INetworkHandler; +import cpw.mods.fml.common.IPickupNotifier; +import cpw.mods.fml.common.IPlayerTracker; +import cpw.mods.fml.common.IWorldGenerator; +import cpw.mods.fml.common.ModContainer; +import cpw.mods.fml.common.ModMetadata; + +/** + * @author cpw + * + */ +public class OptifineModContainer implements ModContainer +{ + private String optifineVersion; + private ModMetadata metadata; + /** + * @param optifineConfig + */ + public OptifineModContainer(Class optifineConfig) + { + try + { + optifineVersion = (String) optifineConfig.getField("VERSION").get(null); + } + catch (Exception e) + { + throw new RuntimeException(e); + } + } + + @Override + public boolean wantsPreInit() + { + return false; + } + + @Override + public boolean wantsPostInit() + { + return false; + } + + @Override + public void preInit() + { + + } + + @Override + public void init() + { + + } + + @Override + public void postInit() + { + + } + + @Override + public String getName() + { + return "Optifine"; + } + + @Override + public ModState getModState() + { + return ModState.AVAILABLE; + } + + @Override + public void nextState() + { + + } + + @Override + public void tickStart(TickType tick, Object... data) + { + + } + + @Override + public void tickEnd(TickType tick, Object... data) + { + + } + + @Override + public boolean matches(Object mod) + { + return false; + } + + @Override + public File getSource() + { + return new File("."); + } + + @Override + public String getSortingRules() + { + return ""; + } + + @Override + public Object getMod() + { + return null; + } + + @Override + public boolean generatesWorld() + { + return false; + } + + @Override + public IWorldGenerator getWorldGenerator() + { + return null; + } + + @Override + public int lookupFuelValue(int itemId, int itemDamage) + { + return 0; + } + + @Override + public boolean wantsPickupNotification() + { + return false; + } + + @Override + public IPickupNotifier getPickupNotifier() + { + return null; + } + + @Override + public boolean wantsToDispense() + { + return false; + } + + @Override + public IDispenseHandler getDispenseHandler() + { + return null; + } + + @Override + public boolean wantsCraftingNotification() + { + return false; + } + + @Override + public ICraftingHandler getCraftingHandler() + { + return null; + } + + @Override + public List getDependencies() + { + return Collections.emptyList(); + } + + @Override + public List getPreDepends() + { + return Collections.emptyList(); + } + + @Override + public List getPostDepends() + { + return Collections.emptyList(); + } + + @Override + public boolean wantsNetworkPackets() + { + return false; + } + + @Override + public INetworkHandler getNetworkHandler() + { + return null; + } + + @Override + public boolean ownsNetworkChannel(String channel) + { + return false; + } + + @Override + public boolean wantsConsoleCommands() + { + return false; + } + + @Override + public IConsoleHandler getConsoleHandler() + { + return null; + } + + @Override + public boolean wantsPlayerTracking() + { + return false; + } + + @Override + public IPlayerTracker getPlayerTracker() + { + return null; + } + + @Override + public List getKeys() + { + return null; + } + + @Override + public SourceType getSourceType() + { + return SourceType.CLASSPATH; + } + + @Override + public void setSourceType(SourceType type) + { + + } + + @Override + public ModMetadata getMetadata() + { + return metadata; + } + + @Override + public void setMetadata(ModMetadata meta) + { + this.metadata=meta; + } + + @Override + public void gatherRenderers(Map renderers) + { + + } + + @Override + public void requestAnimations() + { + + } + + @Override + public String getVersion() + { + return optifineVersion; + } + +}