ForgePatch/patches/minecraft/net/minecraft/data/Main.java.patch

52 lines
3.0 KiB
Diff

--- a/net/minecraft/data/Main.java
+++ b/net/minecraft/data/Main.java
@@ -1,5 +1,6 @@
package net.minecraft.data;
+import java.io.File;
import java.io.IOException;
import java.nio.file.Path;
import java.nio.file.Paths;
@@ -21,8 +22,12 @@
OptionSpec<Void> optionspec6 = optionparser.accepts("all", "Include all generators");
OptionSpec<String> optionspec7 = optionparser.accepts("output", "Output folder").withRequiredArg().defaultsTo("generated");
OptionSpec<String> optionspec8 = optionparser.accepts("input", "Input folder").withRequiredArg();
+ OptionSpec<File> gameDir = optionparser.accepts("gameDir").withRequiredArg().ofType(File.class).defaultsTo(new File("."));
+ OptionSpec<String> mod = optionparser.accepts("mod", "The mod to dump").withRequiredArg();
+ net.minecraft.util.registry.Bootstrap.func_151354_b();
+ net.minecraftforge.fml.ModLoader.get().loadMods();
OptionSet optionset = optionparser.parse(p_main_0_);
- if (!optionset.has(optionspec) && optionset.hasOptions()) {
+ if (!optionset.has(optionspec) && optionset.hasOptions() && !(optionset.specs().size() == 1 && optionset.has(gameDir))) {
Path path = Paths.get(optionspec7.value(optionset));
boolean flag = optionset.has(optionspec6);
boolean flag1 = flag || optionset.has(optionspec2);
@@ -30,10 +35,23 @@
boolean flag3 = flag || optionset.has(optionspec3);
boolean flag4 = flag || optionset.has(optionspec4);
boolean flag5 = flag || optionset.has(optionspec5);
- DataGenerator datagenerator = func_200264_a(path, optionset.valuesOf(optionspec8).stream().map((p_200263_0_) -> {
- return Paths.get(p_200263_0_);
- }).collect(Collectors.toList()), flag1, flag2, flag3, flag4, flag5);
- datagenerator.func_200392_c();
+ Collection<Path> inputs = optionset.valuesOf(optionspec8).stream().map(Paths::get).collect(Collectors.toList());
+ java.util.Set<String> mods = optionset.valuesOf(mod).stream().collect(Collectors.toSet());
+ net.minecraftforge.fml.ModList.get().forEachModContainer((modid, mc) -> {
+ try {
+ //We have to go to the subclass, as ModContainer doesn't have the event bus.
+ if (mods.contains(modid) && mc instanceof net.minecraftforge.fml.javafmlmod.FMLModContainer) {
+ DataGenerator gen = new DataGenerator(mods.size() == 1 ? path : path.resolve(modid), inputs);
+ ((net.minecraftforge.fml.javafmlmod.FMLModContainer)mc).getEventBus().post(new net.minecraftforge.event.GatherDataEvent(gen, flag2, flag1, flag3, flag4, flag5));
+ gen.func_200392_c();
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ });
+
+ if (mods.contains("minecraft") || mods.isEmpty())
+ func_200264_a(mods.isEmpty() ? path : path.resolve("minecraft"), inputs, flag1, flag2, flag3, flag4, flag5).func_200392_c();
} else {
optionparser.printHelpOn(System.out);
}