@@ -109,7 +109,8 @@ public static HypertaleModGatherer gatherMods(String[] args) {
109109 ArrayList <File > libraries = new ArrayList <>();
110110 File modSyncBootstrap = null ;
111111 if (HypertalePaths .hytaleEarlyPlugins .isDirectory ()) {
112- modSyncBootstrap = appendEarlyLoaderMods (mods , useMixins );
112+ modSyncBootstrap = appendEarlyLoaderMods (
113+ hypertaleMods , mods , useMixins );
113114 }
114115 if (HypertalePaths .hytaleMods .isDirectory ()) {
115116 appendMods (hypertaleMods , mods , libraries , useMixins );
@@ -164,16 +165,36 @@ private static List<ClassPathModCandidate> gatherClassPathMods(boolean[] useMixi
164165 }
165166 }
166167
167- private static File appendEarlyLoaderMods (ArrayList <File > mods , boolean [] useMixins ) {
168+ private static File appendEarlyLoaderMods (
169+ ArrayList <File > hypertaleMods , ArrayList <File > mods , boolean [] useMixins ) {
168170 File modSyncBootstrap = null ;
169171 for (File file : Objects .requireNonNull (HypertalePaths .hytaleEarlyPlugins .listFiles ())) {
170172 if (file .isFile () && file .getName ().endsWith (".jar" )) {
171173 try (ZipFile zipFile = new ZipFile (file )) {
174+ if (zipFile .getEntry (
175+ "com/fox2code/hypertale/init/Main.class" ) != null ) {
176+ continue ; // <- Do not consider HypertaleInit as a mod!
177+ }
172178 if (zipFile .getEntry (HypertaleCompatibility .entryHyxinMixinService ) != null ||
173179 zipFile .getEntry (HypertaleCompatibility .entryHyxinTransformer ) != null ) {
174180 useMixins [1 ] = true ;
175181 continue ; // <- We already implement Hyxin APIs
176182 }
183+ ZipEntry manifestEntry ;
184+ if ((manifestEntry = zipFile .getEntry ("manifest.json" )) != null ) {
185+ String modInfo ;
186+ try (InputStream inputStream = zipFile .getInputStream (manifestEntry )) {
187+ modInfo = new String (IOUtils .readAllBytes (inputStream ), StandardCharsets .UTF_8 );
188+ } catch (RuntimeException _) {
189+ modInfo = "" ;
190+ }
191+ if (modInfo .contains ("\" Hyxin\" " )) {
192+ useMixins [0 ] = true ;
193+ hypertaleMods .add (file );
194+ mods .add (file );
195+ continue ;
196+ }
197+ }
177198 if (zipFile .getEntry (HypertaleCompatibility .entryModSyncBootstrap ) != null ) {
178199 modSyncBootstrap = file ; // Mod sync bootstrap need special handling
179200 } else {
@@ -208,10 +229,12 @@ private static void appendMods(ArrayList<File> hypertaleMods, ArrayList<File> mo
208229 } catch (RuntimeException _) {
209230 modInfo = "" ;
210231 }
232+ boolean modUseMixins = false ;
211233 if (modInfo .contains ("\" HypertaleMixinConfig\" " ) || modInfo .contains ("\" Hyxin\" " )) {
212234 useMixins [0 ] = true ;
235+ modUseMixins = true ;
213236 }
214- if (modInfo .contains ("\" Hypertale" )) {
237+ if (modInfo .contains ("\" Hypertale" ) || modUseMixins ) {
215238 hypertaleMods .add (file );
216239 mods .add (file );
217240 continue ;
0 commit comments