From eaf2f409152d2a79e4fe7ee91ba667e867d86e29 Mon Sep 17 00:00:00 2001 From: Cat Core Date: Wed, 16 Sep 2026 16:30:49 +0200 Subject: [PATCH 1/5] Implement Data Gen API prototype for 1.13-1.14 --- libraries/data-gen/build.gradle | 1 + .../build.gradle | 1 + .../gradle.properties | 4 ++ .../datagen/api/DataGeneratorInitializer.java | 10 ++++ .../api/provider/ModRecipesProvider.java | 46 ++++++++++++++++ .../osl/datagen/impl/DataGenMixinPlugin.java | 51 +++++++++++++++++ .../osl/datagen/impl/DataGeneratorInit.java | 45 +++++++++++++++ .../datagen/impl/ModDataGeneratorImpl.java | 48 ++++++++++++++++ .../datagen/impl/PackDataGeneratorImpl.java | 14 +++++ .../impl/access/RecipeBuilderAccess.java | 7 +++ .../impl/mixin/C_23159014NewMixin.java | 18 ++++++ .../impl/mixin/C_23159014OldMixin.java | 18 ++++++ .../datagen/impl/provider/MCMetaProvider.java | 55 +++++++++++++++++++ .../src/main/resources/fabric.mod.json | 39 +++++++++++++ .../main/resources/osl.data-gen.classtweaker | 10 ++++ .../main/resources/osl.data-gen.mixins.json | 18 ++++++ libraries/data-gen/gradle.properties | 7 +++ .../osl/datagen/api/ModDataGenerator.java | 8 +++ .../osl/datagen/impl/DataGenHelperImpl.java | 33 +++++++++++ .../osl/registries/api/RegistryEvents.java | 2 + .../impl/registry/RegistriesImpl.java | 2 + settings.gradle | 3 + 22 files changed, 440 insertions(+) create mode 100644 libraries/data-gen/build.gradle create mode 100644 libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/build.gradle create mode 100644 libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/gradle.properties create mode 100644 libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/DataGeneratorInitializer.java create mode 100644 libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/provider/ModRecipesProvider.java create mode 100644 libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/DataGenMixinPlugin.java create mode 100644 libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/DataGeneratorInit.java create mode 100644 libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/ModDataGeneratorImpl.java create mode 100644 libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/PackDataGeneratorImpl.java create mode 100644 libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/access/RecipeBuilderAccess.java create mode 100644 libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/mixin/C_23159014NewMixin.java create mode 100644 libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/mixin/C_23159014OldMixin.java create mode 100644 libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/provider/MCMetaProvider.java create mode 100644 libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/resources/fabric.mod.json create mode 100644 libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/resources/osl.data-gen.classtweaker create mode 100644 libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/resources/osl.data-gen.mixins.json create mode 100644 libraries/data-gen/gradle.properties create mode 100644 libraries/data-gen/src/main/java/net/ornithemc/osl/datagen/api/ModDataGenerator.java create mode 100644 libraries/data-gen/src/main/java/net/ornithemc/osl/datagen/impl/DataGenHelperImpl.java diff --git a/libraries/data-gen/build.gradle b/libraries/data-gen/build.gradle new file mode 100644 index 000000000..e98ba2c6a --- /dev/null +++ b/libraries/data-gen/build.gradle @@ -0,0 +1 @@ +setUpLibrary(project) diff --git a/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/build.gradle b/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/build.gradle new file mode 100644 index 000000000..0a350fdb3 --- /dev/null +++ b/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/build.gradle @@ -0,0 +1 @@ +setUpModule(project) diff --git a/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/gradle.properties b/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/gradle.properties new file mode 100644 index 000000000..e2fc66839 --- /dev/null +++ b/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/gradle.properties @@ -0,0 +1,4 @@ +min_mc_version = 1.13-pre6 +max_mc_version = 1.14.4 + +minecraft_version = 1.14.4 diff --git a/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/DataGeneratorInitializer.java b/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/DataGeneratorInitializer.java new file mode 100644 index 000000000..1f990ed05 --- /dev/null +++ b/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/DataGeneratorInitializer.java @@ -0,0 +1,10 @@ +package net.ornithemc.osl.datagen.api; + +import net.minecraft.data.DataGenerator; +import net.ornithemc.osl.datagen.impl.DataGenHelperImpl; + +public interface DataGeneratorInitializer { + String KEY = DataGenHelperImpl.ENTRYPOINT_KEY; + + void onDatagenInit(ModDataGenerator dataGenerator); +} diff --git a/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/provider/ModRecipesProvider.java b/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/provider/ModRecipesProvider.java new file mode 100644 index 000000000..9d61fc5e8 --- /dev/null +++ b/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/provider/ModRecipesProvider.java @@ -0,0 +1,46 @@ +package net.ornithemc.osl.datagen.api.provider; + +import com.google.common.collect.Sets; +import com.google.gson.JsonObject; +import net.minecraft.data.DataGenerator; +import net.minecraft.data.HashCache; +import net.minecraft.data.recipe.RecipesProvider; +import net.minecraft.resource.Identifier; +import net.minecraft.unmapped.C_23159014; +import net.ornithemc.osl.datagen.impl.access.RecipeBuilderAccess; + +import java.io.IOException; +import java.nio.file.Path; +import java.util.Set; +import java.util.function.Consumer; + +public abstract class ModRecipesProvider extends RecipesProvider { + public ModRecipesProvider(DataGenerator generator) { + super(generator); + } + + @Override + public void run(HashCache cache) throws IOException { + Path path = this.generator.getOutput(); + Set set = Sets.newHashSet(); + this.buildRecipes((c_23159014) -> { + if (!set.add(c_23159014.m_80989661())) { + throw new IllegalStateException("Duplicate recipe " + c_23159014.m_80989661()); + } else { + this.save(cache, ((RecipeBuilderAccess) c_23159014).getRecipe(), path.resolve("data/" + c_23159014.m_80989661().getNamespace() + "/recipes/" + c_23159014.m_80989661().getPath() + ".json")); + JsonObject jsonObject = c_23159014.m_38911806(); + if (jsonObject != null) { + this.saveAdvancement(cache, jsonObject, path.resolve("data/" + c_23159014.m_80989661().getNamespace() + "/advancements/" + c_23159014.m_66233363().getPath() + ".json")); + } + + } + }); + } + + protected abstract void buildRecipes(Consumer consumer); + + @Override + public String getName() { + return "Mod Recipes"; + } +} diff --git a/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/DataGenMixinPlugin.java b/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/DataGenMixinPlugin.java new file mode 100644 index 000000000..50c1fcd86 --- /dev/null +++ b/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/DataGenMixinPlugin.java @@ -0,0 +1,51 @@ +package net.ornithemc.osl.datagen.impl; + +import net.ornithemc.osl.core.impl.util.MinecraftVersion; +import org.objectweb.asm.tree.ClassNode; +import org.spongepowered.asm.mixin.extensibility.IMixinConfigPlugin; +import org.spongepowered.asm.mixin.extensibility.IMixinInfo; + +import java.util.List; +import java.util.Set; + +public class DataGenMixinPlugin implements IMixinConfigPlugin { + + @Override + public void onLoad(String mixinPackage) { + } + + @Override + public String getRefMapperConfig() { + return null; + } + + @Override + public boolean shouldApplyMixin(String targetClassName, String mixinClassName) { + if ("net.ornithemc.osl.datagen.impl.mixin.C_23159014NewMixin".equals(mixinClassName)) { + return MinecraftVersion.resolve().compareTo("19w03a") >= 0; + } + + if ("net.ornithemc.osl.datagen.impl.mixin.C_23159014OldMixin".equals(mixinClassName)) { + return MinecraftVersion.resolve().compareTo("19w03a") < 0; + } + + return true; + } + + @Override + public void acceptTargets(Set myTargets, Set otherTargets) { + } + + @Override + public List getMixins() { + return null; + } + + @Override + public void preApply(String targetClassName, ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) { + } + + @Override + public void postApply(String targetClassName, ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) { + } +} diff --git a/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/DataGeneratorInit.java b/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/DataGeneratorInit.java new file mode 100644 index 000000000..486249832 --- /dev/null +++ b/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/DataGeneratorInit.java @@ -0,0 +1,45 @@ +package net.ornithemc.osl.datagen.impl; + +import net.fabricmc.loader.api.FabricLoader; +import net.fabricmc.loader.api.entrypoint.EntrypointContainer; +import net.ornithemc.osl.datagen.api.DataGeneratorInitializer; +import net.ornithemc.osl.entrypoints.api.ModInitializer; +import net.ornithemc.osl.registries.api.RegistryEvents; + +import java.nio.file.Path; +import java.util.ArrayList; +import java.util.List; + +public class DataGeneratorInit implements ModInitializer { + @Override + public void init() { + if (!DataGenHelperImpl.ENABLED) return; + + RegistryEvents.REGISTRIES_FROZEN.register(() -> { + Path basePath = DataGenHelperImpl.getOutputDir(); + + List> entrypoints = FabricLoader.getInstance() + .getEntrypointContainers(DataGeneratorInitializer.KEY, DataGeneratorInitializer.class); + + List generators = new ArrayList<>(); + + for (EntrypointContainer entrypoint : entrypoints) { + final String modId = entrypoint.getProvider().getMetadata().getId(); + + if (DataGenHelperImpl.MOD_ID_FILTER != null && !modId.equals(DataGenHelperImpl.MOD_ID_FILTER)) { + continue; + } + + ModDataGeneratorImpl generator = new ModDataGeneratorImpl(basePath, entrypoint.getProvider()); + generators.add(generator); + + DataGeneratorInitializer initializer = entrypoint.getEntrypoint(); + initializer.onDatagenInit(generator); + } + + for (ModDataGeneratorImpl generator : generators) { + generator.run(); + } + }); + } +} diff --git a/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/ModDataGeneratorImpl.java b/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/ModDataGeneratorImpl.java new file mode 100644 index 000000000..f7159eb31 --- /dev/null +++ b/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/ModDataGeneratorImpl.java @@ -0,0 +1,48 @@ +package net.ornithemc.osl.datagen.impl; + +import net.fabricmc.loader.api.ModContainer; +import net.minecraft.data.DataGenerator; +import net.ornithemc.osl.core.api.util.NamespacedIdentifier; +import net.ornithemc.osl.datagen.api.ModDataGenerator; + +import java.io.IOException; +import java.nio.file.Path; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +public class ModDataGeneratorImpl implements ModDataGenerator { + private final Path basePath; + private final ModContainer modContainer; + private final List generators; + + public ModDataGeneratorImpl(Path basePath, ModContainer modContainer) { + this.basePath = basePath; + this.modContainer = modContainer; + generators = new ArrayList<>(); + } + + @Override + public DataGenerator createPack() { + DataGenerator generator = new PackDataGeneratorImpl(basePath, Collections.emptySet(), modContainer.getMetadata().getDescription()); + generators.add(generator); + return generator; + } + + @Override + public DataGenerator createBuiltinResourcePack(NamespacedIdentifier id) { + DataGenerator generator = new PackDataGeneratorImpl(basePath.resolve(id.prefixed("resourcepacks/").identifier()), Collections.emptySet(), id.toString()); + generators.add(generator); + return generator; + } + + public void run() { + for (DataGenerator generator : generators) { + try { + generator.run(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } +} diff --git a/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/PackDataGeneratorImpl.java b/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/PackDataGeneratorImpl.java new file mode 100644 index 000000000..775409620 --- /dev/null +++ b/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/PackDataGeneratorImpl.java @@ -0,0 +1,14 @@ +package net.ornithemc.osl.datagen.impl; + +import net.minecraft.data.DataGenerator; +import net.ornithemc.osl.datagen.impl.provider.MCMetaProvider; + +import java.nio.file.Path; +import java.util.Collection; + +public class PackDataGeneratorImpl extends DataGenerator { + public PackDataGeneratorImpl(Path output, Collection inputs, String description) { + super(output, inputs); + this.addProvider(new MCMetaProvider(this, description)); + } +} diff --git a/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/access/RecipeBuilderAccess.java b/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/access/RecipeBuilderAccess.java new file mode 100644 index 000000000..b7d6fa283 --- /dev/null +++ b/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/access/RecipeBuilderAccess.java @@ -0,0 +1,7 @@ +package net.ornithemc.osl.datagen.impl.access; + +import com.google.gson.JsonObject; + +public interface RecipeBuilderAccess { + JsonObject getRecipe(); +} diff --git a/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/mixin/C_23159014NewMixin.java b/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/mixin/C_23159014NewMixin.java new file mode 100644 index 000000000..003acf19c --- /dev/null +++ b/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/mixin/C_23159014NewMixin.java @@ -0,0 +1,18 @@ +package net.ornithemc.osl.datagen.impl.mixin; + +import com.google.gson.JsonObject; +import net.minecraft.unmapped.C_23159014; +import net.ornithemc.osl.datagen.impl.access.RecipeBuilderAccess; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; + +@Mixin(C_23159014.class) +public interface C_23159014NewMixin extends RecipeBuilderAccess { + @Shadow + JsonObject m_77277228(); + + @Override + default JsonObject getRecipe() { + return this.m_77277228(); + } +} diff --git a/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/mixin/C_23159014OldMixin.java b/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/mixin/C_23159014OldMixin.java new file mode 100644 index 000000000..8001fc529 --- /dev/null +++ b/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/mixin/C_23159014OldMixin.java @@ -0,0 +1,18 @@ +package net.ornithemc.osl.datagen.impl.mixin; + +import com.google.gson.JsonObject; +import net.minecraft.unmapped.C_23159014; +import net.ornithemc.osl.datagen.impl.access.RecipeBuilderAccess; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; + +@Mixin(C_23159014.class) +public interface C_23159014OldMixin extends RecipeBuilderAccess { + @Shadow + JsonObject m_13901626(); + + @Override + default JsonObject getRecipe() { + return this.m_13901626(); + } +} diff --git a/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/provider/MCMetaProvider.java b/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/provider/MCMetaProvider.java new file mode 100644 index 000000000..e9b744c7a --- /dev/null +++ b/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/provider/MCMetaProvider.java @@ -0,0 +1,55 @@ +package net.ornithemc.osl.datagen.impl.provider; + +import net.minecraft.data.DataGenerator; +import net.minecraft.data.DataProvider; +import net.minecraft.data.HashCache; +import net.ornithemc.osl.resource.loader.api.resource.pack.ResourcePackMetadata; +import net.ornithemc.osl.resource.loader.impl.resource.pack.ResourcePacks; +import net.ornithemc.osl.resource.loader.impl.resource.pack.SimpleResourcePackMetadata; +import net.ornithemc.osl.text.api.TextComponents; + +import java.io.BufferedWriter; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.LinkOption; +import java.nio.file.Path; +import java.util.Objects; + +public class MCMetaProvider implements DataProvider { + private final DataGenerator generator; + private final String description; + + public MCMetaProvider(DataGenerator generator, String description) { + this.generator = generator; + this.description = description; + } + + @Override + public void run(HashCache cache) throws IOException { + ResourcePackMetadata metadata = new SimpleResourcePackMetadata(ResourcePacks.getSupportedFormat(), TextComponents.literal(this.description)); + + Path path = getPath(); + + String json = SimpleResourcePackMetadata.SERIALIZER.serialize(metadata).toString(); + String hash = SHA1.hashUnencodedChars(json).toString(); + + if (!Objects.equals(cache.get(path), hash) || !Files.exists(path, new LinkOption[0])) { + Files.createDirectories(path.getParent()); + + try (BufferedWriter bufferedWriter = Files.newBufferedWriter(path)) { + bufferedWriter.write(json); + } + } + + cache.put(path, hash); + } + + private Path getPath() { + return this.generator.getOutput().resolve("pack.mcmeta"); + } + + @Override + public String getName() { + return "MCMeta"; + } +} diff --git a/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/resources/fabric.mod.json b/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/resources/fabric.mod.json new file mode 100644 index 000000000..be95b1633 --- /dev/null +++ b/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/resources/fabric.mod.json @@ -0,0 +1,39 @@ +{ + "schemaVersion": 1, + "id": "osl-data-gen", + "version": "0.1.0-alpha.1+mc1.13-pre6-mc1.14.4", + "environment": "*", + "entrypoints": { + "init": [ + "net.ornithemc.osl.datagen.impl.DataGeneratorInit" + ] + }, + "mixins": [ + "osl.data-gen.mixins.json" + ], + "accessWidener": "osl.data-gen.classtweaker", + "depends": { + "fabricloader": "\u003e\u003d0.18.0", + "minecraft": "\u003e\u003d1.13-rc.6 \u003c\u003d1.14.4", + "osl-core": "\u003e\u003d0.8.0", + "osl-entrypoints": "\u003e\u003d0.5.0", + "osl-lifecycle-events": "\u003e\u003d0.6.0", + "osl-executors": "\u003e\u003d0.1.0", + "osl-text-components": "\u003e\u003d0.1.0-", + "osl-networking": "\u003e\u003d0.10.0", + "osl-networking-impl": "\u003e\u003d0.2.0", + "osl-registries": "\u003e\u003d0.1.0", + "osl-resource-loader": "\u003e\u003d0.8.0" + }, + "name": "OSL Data Gen", + "description": "Data Generator api.", + "authors": [ + "OrnitheMC" + ], + "contact": { + "homepage": "https://ornithemc.net/", + "issues": "https://github.com/OrnitheMC/ornithe-standard-libraries/issues", + "sources": "https://github.com/OrnitheMC/ornithe-standard-libraries" + }, + "license": "Apache-2.0" +} \ No newline at end of file diff --git a/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/resources/osl.data-gen.classtweaker b/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/resources/osl.data-gen.classtweaker new file mode 100644 index 000000000..5b3adb23d --- /dev/null +++ b/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/resources/osl.data-gen.classtweaker @@ -0,0 +1,10 @@ +classTweaker v1 named + +transitive-accessible method net/minecraft/data/recipe/RecipesProvider m_22877789 (Lnet/minecraft/block/Block;)Lnet/minecraft/advancement/criterion/EnterBlockTrigger$Instance; +transitive-accessible method net/minecraft/data/recipe/RecipesProvider m_87855158 (Lnet/minecraft/advancement/criterion/NumberPredicate$Ints;Lnet/minecraft/item/ItemLike;)Lnet/minecraft/advancement/criterion/InventoryChangedTrigger$Instance; +transitive-accessible method net/minecraft/data/recipe/RecipesProvider m_04657628 (Lnet/minecraft/item/ItemLike;)Lnet/minecraft/advancement/criterion/InventoryChangedTrigger$Instance; +transitive-accessible method net/minecraft/data/recipe/RecipesProvider m_53363402 (Lnet/minecraft/tag/Tag;)Lnet/minecraft/advancement/criterion/InventoryChangedTrigger$Instance; +transitive-accessible field net/minecraft/data/recipe/RecipesProvider generator Lnet/minecraft/data/DataGenerator; + +accessible method net/minecraft/data/recipe/RecipesProvider save (Lnet/minecraft/data/HashCache;Lcom/google/gson/JsonObject;Ljava/nio/file/Path;)V +accessible method net/minecraft/data/recipe/RecipesProvider saveAdvancement (Lnet/minecraft/data/HashCache;Lcom/google/gson/JsonObject;Ljava/nio/file/Path;)V \ No newline at end of file diff --git a/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/resources/osl.data-gen.mixins.json b/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/resources/osl.data-gen.mixins.json new file mode 100644 index 000000000..7c025b847 --- /dev/null +++ b/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/resources/osl.data-gen.mixins.json @@ -0,0 +1,18 @@ +{ + "required": true, + "minVersion": "0.8", + "package": "net.ornithemc.osl.datagen.impl.mixin", + "compatibilityLevel": "JAVA_8", + "plugin": "net.ornithemc.osl.datagen.impl.DataGenMixinPlugin", + "mixins": [ + "C_23159014NewMixin", + "C_23159014OldMixin" + ], + "client": [ + ], + "server": [ + ], + "injectors": { + "defaultRequire": 1 + } +} diff --git a/libraries/data-gen/gradle.properties b/libraries/data-gen/gradle.properties new file mode 100644 index 000000000..5dd05c738 --- /dev/null +++ b/libraries/data-gen/gradle.properties @@ -0,0 +1,7 @@ +library_id = data-gen +library_name = Data Gen +library_description = Data Generator api. +library_version = 0.1.0-alpha.1 + +entrypoint_init = net.ornithemc.osl.datagen.impl.DataGeneratorInit +osl_dependencies = core:0.8.0,entrypoints:0.5.0,registries:0.1.0,resource-loader:0.8.0 diff --git a/libraries/data-gen/src/main/java/net/ornithemc/osl/datagen/api/ModDataGenerator.java b/libraries/data-gen/src/main/java/net/ornithemc/osl/datagen/api/ModDataGenerator.java new file mode 100644 index 000000000..20834f0d4 --- /dev/null +++ b/libraries/data-gen/src/main/java/net/ornithemc/osl/datagen/api/ModDataGenerator.java @@ -0,0 +1,8 @@ +package net.ornithemc.osl.datagen.api; + +import net.ornithemc.osl.core.api.util.NamespacedIdentifier; + +public interface ModDataGenerator { + T createPack(); + T createBuiltinResourcePack(NamespacedIdentifier id); +} diff --git a/libraries/data-gen/src/main/java/net/ornithemc/osl/datagen/impl/DataGenHelperImpl.java b/libraries/data-gen/src/main/java/net/ornithemc/osl/datagen/impl/DataGenHelperImpl.java new file mode 100644 index 000000000..a4c51d90f --- /dev/null +++ b/libraries/data-gen/src/main/java/net/ornithemc/osl/datagen/impl/DataGenHelperImpl.java @@ -0,0 +1,33 @@ +package net.ornithemc.osl.datagen.impl; + +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.Objects; + +public class DataGenHelperImpl { + /** + * When enabled the startup will be hijacked to run the data generators and then quit. + */ + public static final boolean ENABLED = System.getProperty("fabric-api.datagen") != null; + + /** + * Sets the output directory for the generated data. + */ + private static final String OUTPUT_DIR = System.getProperty("fabric-api.datagen.output-dir"); + + /** + * When enabled providers can enable extra validation, such as ensuring all registry entries have data generated for them. + */ + public static final boolean STRICT_VALIDATION = System.getProperty("fabric-api.datagen.strict-validation") != null; + + /** + * Filter to a specific mod ID with this property, useful if dependencies also have data generators. + */ + public static final String MOD_ID_FILTER = System.getProperty("fabric-api.datagen.modid"); + + public static final String ENTRYPOINT_KEY = "datagen"; + + public static Path getOutputDir() { + return Paths.get(Objects.requireNonNull(OUTPUT_DIR, "No output dir provided with the 'fabric-api.datagen.output-dir' property")); + } +} diff --git a/libraries/registries/src/main/java/net/ornithemc/osl/registries/api/RegistryEvents.java b/libraries/registries/src/main/java/net/ornithemc/osl/registries/api/RegistryEvents.java index 9d8291886..f416acad9 100644 --- a/libraries/registries/src/main/java/net/ornithemc/osl/registries/api/RegistryEvents.java +++ b/libraries/registries/src/main/java/net/ornithemc/osl/registries/api/RegistryEvents.java @@ -28,4 +28,6 @@ public final class RegistryEvents { */ public static final Event BOOTSTRAP_REGISTRIES = Event.runnable(); + public static final Event REGISTRIES_FROZEN = Event.runnable(); + } diff --git a/libraries/registries/src/main/java/net/ornithemc/osl/registries/impl/registry/RegistriesImpl.java b/libraries/registries/src/main/java/net/ornithemc/osl/registries/impl/registry/RegistriesImpl.java index 2b8231958..b89a33fd2 100644 --- a/libraries/registries/src/main/java/net/ornithemc/osl/registries/impl/registry/RegistriesImpl.java +++ b/libraries/registries/src/main/java/net/ornithemc/osl/registries/impl/registry/RegistriesImpl.java @@ -91,6 +91,8 @@ public static void init() { validate(); LOGGER.info("Bootstrapped {} registries.", BOOTSTRAPS.size()); + + RegistryEvents.REGISTRIES_FROZEN.invoker().run(); } private static void bootstrap() { diff --git a/settings.gradle b/settings.gradle index e53df0695..6d6bf29bb 100644 --- a/settings.gradle +++ b/settings.gradle @@ -140,3 +140,6 @@ include ':libraries:resource-loader:resource-loader-mc19w07a-mc1.14.4' include ':libraries:text-components' include ':libraries:text-components:text-components-mca1.0.1_01-mc1.6.4' include ':libraries:text-components:text-components-mc13w36a-mc1.14.4' + +include ':libraries:data-gen' +include ':libraries:data-gen:data-gen-mc1.13-pre6-mc1.14.4' From 08445691bc6102100daf3f6bd6c9e71791fd7b62 Mon Sep 17 00:00:00 2001 From: Cat Core Date: Wed, 16 Sep 2026 19:39:05 +0200 Subject: [PATCH 2/5] Add a basic ModLanguage Provider --- .../datagen/api/provider/ModDataProvider.java | 59 +++++++++++++++ .../api/provider/ModLanguageProvider.java | 75 +++++++++++++++++++ .../api/provider/ModRecipesProvider.java | 4 +- 3 files changed, 136 insertions(+), 2 deletions(-) create mode 100644 libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/provider/ModDataProvider.java create mode 100644 libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/provider/ModLanguageProvider.java diff --git a/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/provider/ModDataProvider.java b/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/provider/ModDataProvider.java new file mode 100644 index 000000000..43bbd584a --- /dev/null +++ b/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/provider/ModDataProvider.java @@ -0,0 +1,59 @@ +package net.ornithemc.osl.datagen.api.provider; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonObject; +import net.fabricmc.loader.api.ModContainer; +import net.minecraft.data.DataGenerator; +import net.minecraft.data.DataProvider; +import net.minecraft.data.HashCache; +import net.ornithemc.osl.core.api.util.NamespacedIdentifier; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import java.io.BufferedWriter; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.LinkOption; +import java.nio.file.Path; +import java.util.Objects; +import java.util.function.BiConsumer; + +public abstract class ModDataProvider implements DataProvider { + private static final Logger LOGGER = LogManager.getLogger(); + private static final Gson GSON = (new GsonBuilder()).setPrettyPrinting().create(); + public final DataGenerator generator; + public final ModContainer mod; + + protected ModDataProvider(DataGenerator generator, ModContainer mod) { + this.generator = generator; + this.mod = mod; + } + + @Override + public void run(HashCache cache) throws IOException { + generate((id, json) -> { + Path path = getPath(id); + + try { + String string = GSON.toJson(json); + String string2 = SHA1.hashUnencodedChars(string).toString(); + if (!Objects.equals(cache.get(path), string2) || !Files.exists(path)) { + Files.createDirectories(path.getParent()); + + try (BufferedWriter bufferedWriter = Files.newBufferedWriter(path)) { + bufferedWriter.write(string); + } + } + + cache.put(path, string2); + } catch (IOException iOException) { + LOGGER.error("Couldn't save tags to {}", path, iOException); + } + }); + } + + protected abstract void generate(BiConsumer consumer); + + protected abstract Path getPath(NamespacedIdentifier id); +} diff --git a/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/provider/ModLanguageProvider.java b/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/provider/ModLanguageProvider.java new file mode 100644 index 000000000..396950895 --- /dev/null +++ b/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/provider/ModLanguageProvider.java @@ -0,0 +1,75 @@ +package net.ornithemc.osl.datagen.api.provider; + +import com.google.gson.JsonObject; +import net.fabricmc.loader.api.ModContainer; +import net.minecraft.block.Block; +import net.minecraft.data.DataGenerator; +import net.minecraft.entity.EntityType; +import net.minecraft.item.Item; +import net.minecraft.resource.Identifier; +import net.minecraft.world.biome.Biome; +import net.ornithemc.osl.core.api.util.NamespacedIdentifier; +import net.ornithemc.osl.resource.loader.api.resource.ResourcePath; +import net.ornithemc.osl.resource.loader.api.resource.ResourceType; + +import java.nio.file.Path; +import java.util.HashMap; +import java.util.Map; +import java.util.function.BiConsumer; + +public abstract class ModLanguageProvider extends ModDataProvider { + private final String languageCode; + + protected ModLanguageProvider(DataGenerator generator, ModContainer mod, String languageCode) { + super(generator, mod); + this.languageCode = languageCode; + } + + protected ModLanguageProvider(DataGenerator generator, ModContainer mod) { + this(generator, mod, "en_us"); + } + + @Override + protected void generate(BiConsumer consumer) { + Map translations = new HashMap<>(); + + generateTranslations(translations::put); + + JsonObject jsonObject = new JsonObject(); + translations.forEach(jsonObject::addProperty); + + consumer.accept(new Identifier(mod.getMetadata().getId(), this.languageCode), jsonObject); + } + + protected abstract void generateTranslations(TranslationBuilder builder); + + @Override + protected Path getPath(NamespacedIdentifier id) { + return this.generator.getOutput().resolve(ResourcePath.nameOf(ResourceType.CLIENT_ASSETS, id.prefixed("lang").suffixed(".json"))); + } + + @Override + public String getName() { + return String.format("Mod Language (%s)", this.languageCode); + } + + public interface TranslationBuilder { + void add(String key, String value); + + default void add(Block block, String value) { + this.add(block.getTranslationKey(), value); + } + + default void add(Item item, String value) { + this.add(item.getTranslationKey(), value); + } + + default void add(EntityType entityType, String value) { + this.add(entityType.getTranslationKey(), value); + } + + default void add(Biome biome, String value) { + this.add(biome.getTranslationKey(), value); + } + } +} diff --git a/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/provider/ModRecipesProvider.java b/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/provider/ModRecipesProvider.java index 9d61fc5e8..537bdb8f2 100644 --- a/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/provider/ModRecipesProvider.java +++ b/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/provider/ModRecipesProvider.java @@ -23,7 +23,7 @@ public ModRecipesProvider(DataGenerator generator) { public void run(HashCache cache) throws IOException { Path path = this.generator.getOutput(); Set set = Sets.newHashSet(); - this.buildRecipes((c_23159014) -> { + this.generateRecipes((c_23159014) -> { if (!set.add(c_23159014.m_80989661())) { throw new IllegalStateException("Duplicate recipe " + c_23159014.m_80989661()); } else { @@ -37,7 +37,7 @@ public void run(HashCache cache) throws IOException { }); } - protected abstract void buildRecipes(Consumer consumer); + protected abstract void generateRecipes(Consumer consumer); @Override public String getName() { From 625397503fed5db45713ebab6a3af7b70fa842ea Mon Sep 17 00:00:00 2001 From: Cat Core Date: Fri, 18 Sep 2026 23:01:13 +0200 Subject: [PATCH 3/5] Refactor and now use a wrapper system for 1.13+ --- libraries/data-gen/build.gradle | 4 ++ .../datagen/api/DataGeneratorInitializer.java | 10 ---- ...ataProvider.java => GsonPackProvider.java} | 30 +++-------- .../api/provider/ModLanguageProvider.java | 13 ++--- .../api/provider/ModRecipesProvider.java | 4 +- .../datagen/impl/ModDataGeneratorImpl.java | 7 +-- .../impl/PackProviderExtensionImpl.java | 14 +++++ .../impl/mixin/DataGeneratorMixin.java | 34 +++++++++++++ .../datagen/impl/mixin/DataProviderMixin.java | 17 +++++++ .../datagen/impl/mixin/HashCacheMixin.java | 51 +++++++++++++++++++ .../impl/wrapper/PackProviderWrapper.java | 25 +++++++++ .../main/resources/osl.data-gen.classtweaker | 4 ++ .../main/resources/osl.data-gen.mixins.json | 5 +- .../datagen/api/DataGeneratorInitializer.java | 7 +++ .../osl/datagen/api/ModDataGenerator.java | 6 +-- .../ornithemc/osl/datagen/api/PackCache.java | 14 +++++ .../osl/datagen/api/PackGenerator.java | 10 ++++ .../datagen/api/provider/PackProvider.java | 8 +++ .../osl/datagen/impl/DataGenHelperImpl.java | 2 - 19 files changed, 216 insertions(+), 49 deletions(-) delete mode 100644 libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/DataGeneratorInitializer.java rename libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/provider/{ModDataProvider.java => GsonPackProvider.java} (52%) create mode 100644 libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/PackProviderExtensionImpl.java create mode 100644 libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/mixin/DataGeneratorMixin.java create mode 100644 libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/mixin/DataProviderMixin.java create mode 100644 libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/mixin/HashCacheMixin.java create mode 100644 libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/wrapper/PackProviderWrapper.java create mode 100644 libraries/data-gen/src/main/java/net/ornithemc/osl/datagen/api/DataGeneratorInitializer.java create mode 100644 libraries/data-gen/src/main/java/net/ornithemc/osl/datagen/api/PackCache.java create mode 100644 libraries/data-gen/src/main/java/net/ornithemc/osl/datagen/api/PackGenerator.java create mode 100644 libraries/data-gen/src/main/java/net/ornithemc/osl/datagen/api/provider/PackProvider.java diff --git a/libraries/data-gen/build.gradle b/libraries/data-gen/build.gradle index e98ba2c6a..e0294f362 100644 --- a/libraries/data-gen/build.gradle +++ b/libraries/data-gen/build.gradle @@ -1 +1,5 @@ setUpLibrary(project) + +dependencies { + implementation 'com.google.guava:guava:17.0' +} \ No newline at end of file diff --git a/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/DataGeneratorInitializer.java b/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/DataGeneratorInitializer.java deleted file mode 100644 index 1f990ed05..000000000 --- a/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/DataGeneratorInitializer.java +++ /dev/null @@ -1,10 +0,0 @@ -package net.ornithemc.osl.datagen.api; - -import net.minecraft.data.DataGenerator; -import net.ornithemc.osl.datagen.impl.DataGenHelperImpl; - -public interface DataGeneratorInitializer { - String KEY = DataGenHelperImpl.ENTRYPOINT_KEY; - - void onDatagenInit(ModDataGenerator dataGenerator); -} diff --git a/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/provider/ModDataProvider.java b/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/provider/GsonPackProvider.java similarity index 52% rename from libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/provider/ModDataProvider.java rename to libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/provider/GsonPackProvider.java index 43bbd584a..75be4f920 100644 --- a/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/provider/ModDataProvider.java +++ b/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/provider/GsonPackProvider.java @@ -4,51 +4,37 @@ import com.google.gson.GsonBuilder; import com.google.gson.JsonObject; import net.fabricmc.loader.api.ModContainer; -import net.minecraft.data.DataGenerator; -import net.minecraft.data.DataProvider; -import net.minecraft.data.HashCache; import net.ornithemc.osl.core.api.util.NamespacedIdentifier; +import net.ornithemc.osl.datagen.api.PackGenerator; +import net.ornithemc.osl.datagen.api.PackCache; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -import java.io.BufferedWriter; import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.LinkOption; import java.nio.file.Path; -import java.util.Objects; import java.util.function.BiConsumer; -public abstract class ModDataProvider implements DataProvider { +public abstract class GsonPackProvider implements PackProvider { private static final Logger LOGGER = LogManager.getLogger(); private static final Gson GSON = (new GsonBuilder()).setPrettyPrinting().create(); - public final DataGenerator generator; + public final PackGenerator generator; public final ModContainer mod; - protected ModDataProvider(DataGenerator generator, ModContainer mod) { + protected GsonPackProvider(PackGenerator generator, ModContainer mod) { this.generator = generator; this.mod = mod; } @Override - public void run(HashCache cache) throws IOException { + public void provide(PackCache cache) { generate((id, json) -> { Path path = getPath(id); try { String string = GSON.toJson(json); - String string2 = SHA1.hashUnencodedChars(string).toString(); - if (!Objects.equals(cache.get(path), string2) || !Files.exists(path)) { - Files.createDirectories(path.getParent()); - - try (BufferedWriter bufferedWriter = Files.newBufferedWriter(path)) { - bufferedWriter.write(string); - } - } - - cache.put(path, string2); + cache.checkAndWrite(path, string); } catch (IOException iOException) { - LOGGER.error("Couldn't save tags to {}", path, iOException); + LOGGER.error("Couldn't save data to {}", path, iOException); } }); } diff --git a/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/provider/ModLanguageProvider.java b/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/provider/ModLanguageProvider.java index 396950895..bb04753e7 100644 --- a/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/provider/ModLanguageProvider.java +++ b/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/provider/ModLanguageProvider.java @@ -9,6 +9,7 @@ import net.minecraft.resource.Identifier; import net.minecraft.world.biome.Biome; import net.ornithemc.osl.core.api.util.NamespacedIdentifier; +import net.ornithemc.osl.datagen.api.PackGenerator; import net.ornithemc.osl.resource.loader.api.resource.ResourcePath; import net.ornithemc.osl.resource.loader.api.resource.ResourceType; @@ -17,15 +18,15 @@ import java.util.Map; import java.util.function.BiConsumer; -public abstract class ModLanguageProvider extends ModDataProvider { +public abstract class ModLanguageProvider extends GsonPackProvider { private final String languageCode; - protected ModLanguageProvider(DataGenerator generator, ModContainer mod, String languageCode) { + protected ModLanguageProvider(PackGenerator generator, ModContainer mod, String languageCode) { super(generator, mod); this.languageCode = languageCode; } - protected ModLanguageProvider(DataGenerator generator, ModContainer mod) { + protected ModLanguageProvider(PackGenerator generator, ModContainer mod) { this(generator, mod, "en_us"); } @@ -45,12 +46,12 @@ protected void generate(BiConsumer consumer) { @Override protected Path getPath(NamespacedIdentifier id) { - return this.generator.getOutput().resolve(ResourcePath.nameOf(ResourceType.CLIENT_ASSETS, id.prefixed("lang").suffixed(".json"))); + return this.generator.getOutputPath().resolve(ResourcePath.nameOf(ResourceType.CLIENT_ASSETS, id.prefixed("lang").suffixed(".json"))); } @Override - public String getName() { - return String.format("Mod Language (%s)", this.languageCode); + public String getProviderName() { + return String.format("Language (%s)", this.languageCode); } public interface TranslationBuilder { diff --git a/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/provider/ModRecipesProvider.java b/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/provider/ModRecipesProvider.java index 537bdb8f2..b5d308183 100644 --- a/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/provider/ModRecipesProvider.java +++ b/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/provider/ModRecipesProvider.java @@ -20,7 +20,7 @@ public ModRecipesProvider(DataGenerator generator) { } @Override - public void run(HashCache cache) throws IOException { + public void run(HashCache cache) { Path path = this.generator.getOutput(); Set set = Sets.newHashSet(); this.generateRecipes((c_23159014) -> { @@ -41,6 +41,6 @@ public void run(HashCache cache) throws IOException { @Override public String getName() { - return "Mod Recipes"; + return "Recipes"; } } diff --git a/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/ModDataGeneratorImpl.java b/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/ModDataGeneratorImpl.java index f7159eb31..e9cd8bfdf 100644 --- a/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/ModDataGeneratorImpl.java +++ b/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/ModDataGeneratorImpl.java @@ -4,6 +4,7 @@ import net.minecraft.data.DataGenerator; import net.ornithemc.osl.core.api.util.NamespacedIdentifier; import net.ornithemc.osl.datagen.api.ModDataGenerator; +import net.ornithemc.osl.datagen.api.PackGenerator; import java.io.IOException; import java.nio.file.Path; @@ -11,7 +12,7 @@ import java.util.Collections; import java.util.List; -public class ModDataGeneratorImpl implements ModDataGenerator { +public class ModDataGeneratorImpl implements ModDataGenerator { private final Path basePath; private final ModContainer modContainer; private final List generators; @@ -23,14 +24,14 @@ public ModDataGeneratorImpl(Path basePath, ModContainer modContainer) { } @Override - public DataGenerator createPack() { + public PackGenerator createPack() { DataGenerator generator = new PackDataGeneratorImpl(basePath, Collections.emptySet(), modContainer.getMetadata().getDescription()); generators.add(generator); return generator; } @Override - public DataGenerator createBuiltinResourcePack(NamespacedIdentifier id) { + public PackGenerator createBuiltinResourcePack(NamespacedIdentifier id) { DataGenerator generator = new PackDataGeneratorImpl(basePath.resolve(id.prefixed("resourcepacks/").identifier()), Collections.emptySet(), id.toString()); generators.add(generator); return generator; diff --git a/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/PackProviderExtensionImpl.java b/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/PackProviderExtensionImpl.java new file mode 100644 index 000000000..6b9d44e75 --- /dev/null +++ b/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/PackProviderExtensionImpl.java @@ -0,0 +1,14 @@ +package net.ornithemc.osl.datagen.impl; + +import net.ornithemc.osl.datagen.api.PackCache; +import net.ornithemc.osl.datagen.api.provider.PackProvider; + +public interface PackProviderExtensionImpl extends PackProvider { + @Override + default void provide(PackCache cache) {} + + @Override + default String getProviderName() { + return ""; + } +} diff --git a/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/mixin/DataGeneratorMixin.java b/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/mixin/DataGeneratorMixin.java new file mode 100644 index 000000000..ce2c6baeb --- /dev/null +++ b/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/mixin/DataGeneratorMixin.java @@ -0,0 +1,34 @@ +package net.ornithemc.osl.datagen.impl.mixin; + +import net.minecraft.data.DataGenerator; +import net.minecraft.data.DataProvider; +import net.ornithemc.osl.datagen.api.PackGenerator; +import net.ornithemc.osl.datagen.api.provider.PackProvider; +import net.ornithemc.osl.datagen.impl.wrapper.PackProviderWrapper; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; + +import java.nio.file.Path; + +@Mixin(DataGenerator.class) +public abstract class DataGeneratorMixin implements PackGenerator { + @Shadow + public abstract void addProvider(DataProvider provider); + + @Shadow + public abstract Path getOutput(); + + @Override + public void addProvider(PackProvider provider) { + if (provider instanceof DataProvider) { + addProvider((DataProvider) provider); + } else { + addProvider(new PackProviderWrapper(provider)); + } + } + + @Override + public Path getOutputPath() { + return this.getOutput(); + } +} diff --git a/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/mixin/DataProviderMixin.java b/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/mixin/DataProviderMixin.java new file mode 100644 index 000000000..8938cb919 --- /dev/null +++ b/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/mixin/DataProviderMixin.java @@ -0,0 +1,17 @@ +package net.ornithemc.osl.datagen.impl.mixin; + +import net.minecraft.data.DataProvider; +import net.ornithemc.osl.datagen.impl.PackProviderExtensionImpl; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; + +@Mixin(DataProvider.class) +public interface DataProviderMixin extends PackProviderExtensionImpl { + @Shadow + String getName(); + + @Override + default String getProviderName() { + return this.getName(); + } +} diff --git a/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/mixin/HashCacheMixin.java b/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/mixin/HashCacheMixin.java new file mode 100644 index 000000000..2626db150 --- /dev/null +++ b/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/mixin/HashCacheMixin.java @@ -0,0 +1,51 @@ +package net.ornithemc.osl.datagen.impl.mixin; + +import net.minecraft.data.HashCache; +import net.ornithemc.osl.datagen.api.PackCache; +import org.jetbrains.annotations.Nullable; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; + +import java.io.BufferedWriter; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.Objects; + +@Mixin(HashCache.class) +public abstract class HashCacheMixin implements PackCache { + @Shadow + @Nullable + public abstract String get(Path path); + + @Shadow + public abstract void put(Path path, String hash); + + @Override + public void checkAndWrite(Path path, byte[] data) throws IOException { + String hash = SHA1.hashBytes(data).toString(); + + if (!Objects.equals(this.get(path), hash) || !Files.exists(path)) { + Files.createDirectories(path.getParent()); + + Files.write(path, data); + } + + this.put(path, hash); + } + + @Override + public void checkAndWrite(Path path, String data) throws IOException { + String hash = SHA1.hashUnencodedChars(data).toString(); + + if (!Objects.equals(this.get(path), hash) || !Files.exists(path)) { + Files.createDirectories(path.getParent()); + + try (BufferedWriter bufferedWriter = Files.newBufferedWriter(path)) { + bufferedWriter.write(data); + } + } + + this.put(path, hash); + } +} diff --git a/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/wrapper/PackProviderWrapper.java b/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/wrapper/PackProviderWrapper.java new file mode 100644 index 000000000..548c94b56 --- /dev/null +++ b/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/wrapper/PackProviderWrapper.java @@ -0,0 +1,25 @@ +package net.ornithemc.osl.datagen.impl.wrapper; + +import net.minecraft.data.DataProvider; +import net.minecraft.data.HashCache; +import net.ornithemc.osl.datagen.api.provider.PackProvider; + +import java.io.IOException; + +public class PackProviderWrapper implements DataProvider { + private final PackProvider delegate; + + public PackProviderWrapper(PackProvider delegate) { + this.delegate = delegate; + } + + @Override + public void run(HashCache cache) throws IOException { + delegate.provide(cache); + } + + @Override + public String getName() { + return delegate.getProviderName(); + } +} diff --git a/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/resources/osl.data-gen.classtweaker b/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/resources/osl.data-gen.classtweaker index 5b3adb23d..30b3574b2 100644 --- a/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/resources/osl.data-gen.classtweaker +++ b/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/resources/osl.data-gen.classtweaker @@ -6,5 +6,9 @@ transitive-accessible method net/minecraft/data/recipe/RecipesProvider m_0465762 transitive-accessible method net/minecraft/data/recipe/RecipesProvider m_53363402 (Lnet/minecraft/tag/Tag;)Lnet/minecraft/advancement/criterion/InventoryChangedTrigger$Instance; transitive-accessible field net/minecraft/data/recipe/RecipesProvider generator Lnet/minecraft/data/DataGenerator; +transitive-inject-interface net/minecraft/data/DataGenerator net/ornithemc/osl/datagen/api/PackGenerator +transitive-inject-interface net/minecraft/data/DataProvider net/ornithemc/osl/datagen/api/provider/PackProvider +transitive-inject-interface net/minecraft/data/HashCache net/ornithemc/osl/datagen/api/PackCache + accessible method net/minecraft/data/recipe/RecipesProvider save (Lnet/minecraft/data/HashCache;Lcom/google/gson/JsonObject;Ljava/nio/file/Path;)V accessible method net/minecraft/data/recipe/RecipesProvider saveAdvancement (Lnet/minecraft/data/HashCache;Lcom/google/gson/JsonObject;Ljava/nio/file/Path;)V \ No newline at end of file diff --git a/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/resources/osl.data-gen.mixins.json b/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/resources/osl.data-gen.mixins.json index 7c025b847..5cf9acaf3 100644 --- a/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/resources/osl.data-gen.mixins.json +++ b/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/resources/osl.data-gen.mixins.json @@ -6,7 +6,10 @@ "plugin": "net.ornithemc.osl.datagen.impl.DataGenMixinPlugin", "mixins": [ "C_23159014NewMixin", - "C_23159014OldMixin" + "C_23159014OldMixin", + "DataGeneratorMixin", + "DataProviderMixin", + "HashCacheMixin" ], "client": [ ], diff --git a/libraries/data-gen/src/main/java/net/ornithemc/osl/datagen/api/DataGeneratorInitializer.java b/libraries/data-gen/src/main/java/net/ornithemc/osl/datagen/api/DataGeneratorInitializer.java new file mode 100644 index 000000000..928e8b19b --- /dev/null +++ b/libraries/data-gen/src/main/java/net/ornithemc/osl/datagen/api/DataGeneratorInitializer.java @@ -0,0 +1,7 @@ +package net.ornithemc.osl.datagen.api; + +public interface DataGeneratorInitializer { + String KEY = "datagen"; + + void onDatagenInit(ModDataGenerator dataGenerator); +} diff --git a/libraries/data-gen/src/main/java/net/ornithemc/osl/datagen/api/ModDataGenerator.java b/libraries/data-gen/src/main/java/net/ornithemc/osl/datagen/api/ModDataGenerator.java index 20834f0d4..37528a3a9 100644 --- a/libraries/data-gen/src/main/java/net/ornithemc/osl/datagen/api/ModDataGenerator.java +++ b/libraries/data-gen/src/main/java/net/ornithemc/osl/datagen/api/ModDataGenerator.java @@ -2,7 +2,7 @@ import net.ornithemc.osl.core.api.util.NamespacedIdentifier; -public interface ModDataGenerator { - T createPack(); - T createBuiltinResourcePack(NamespacedIdentifier id); +public interface ModDataGenerator { + PackGenerator createPack(); + PackGenerator createBuiltinResourcePack(NamespacedIdentifier id); } diff --git a/libraries/data-gen/src/main/java/net/ornithemc/osl/datagen/api/PackCache.java b/libraries/data-gen/src/main/java/net/ornithemc/osl/datagen/api/PackCache.java new file mode 100644 index 000000000..ca7f24740 --- /dev/null +++ b/libraries/data-gen/src/main/java/net/ornithemc/osl/datagen/api/PackCache.java @@ -0,0 +1,14 @@ +package net.ornithemc.osl.datagen.api; + +import com.google.common.hash.HashFunction; +import com.google.common.hash.Hashing; + +import java.io.IOException; +import java.nio.file.Path; + +public interface PackCache { + HashFunction SHA1 = Hashing.sha1(); + + void checkAndWrite(Path path, byte[] data) throws IOException; + void checkAndWrite(Path path, String data) throws IOException; +} diff --git a/libraries/data-gen/src/main/java/net/ornithemc/osl/datagen/api/PackGenerator.java b/libraries/data-gen/src/main/java/net/ornithemc/osl/datagen/api/PackGenerator.java new file mode 100644 index 000000000..52e075f7a --- /dev/null +++ b/libraries/data-gen/src/main/java/net/ornithemc/osl/datagen/api/PackGenerator.java @@ -0,0 +1,10 @@ +package net.ornithemc.osl.datagen.api; + +import net.ornithemc.osl.datagen.api.provider.PackProvider; + +import java.nio.file.Path; + +public interface PackGenerator { + void addProvider(PackProvider provider); + Path getOutputPath(); +} diff --git a/libraries/data-gen/src/main/java/net/ornithemc/osl/datagen/api/provider/PackProvider.java b/libraries/data-gen/src/main/java/net/ornithemc/osl/datagen/api/provider/PackProvider.java new file mode 100644 index 000000000..b60e8bd72 --- /dev/null +++ b/libraries/data-gen/src/main/java/net/ornithemc/osl/datagen/api/provider/PackProvider.java @@ -0,0 +1,8 @@ +package net.ornithemc.osl.datagen.api.provider; + +import net.ornithemc.osl.datagen.api.PackCache; + +public interface PackProvider { + String getProviderName(); + void provide(PackCache cache); +} diff --git a/libraries/data-gen/src/main/java/net/ornithemc/osl/datagen/impl/DataGenHelperImpl.java b/libraries/data-gen/src/main/java/net/ornithemc/osl/datagen/impl/DataGenHelperImpl.java index a4c51d90f..f6162ee21 100644 --- a/libraries/data-gen/src/main/java/net/ornithemc/osl/datagen/impl/DataGenHelperImpl.java +++ b/libraries/data-gen/src/main/java/net/ornithemc/osl/datagen/impl/DataGenHelperImpl.java @@ -25,8 +25,6 @@ public class DataGenHelperImpl { */ public static final String MOD_ID_FILTER = System.getProperty("fabric-api.datagen.modid"); - public static final String ENTRYPOINT_KEY = "datagen"; - public static Path getOutputDir() { return Paths.get(Objects.requireNonNull(OUTPUT_DIR, "No output dir provided with the 'fabric-api.datagen.output-dir' property")); } From 84a42c8cc986542c6b82e1ef1afcf5ac4aad5403 Mon Sep 17 00:00:00 2001 From: Cat Core Date: Mon, 21 Sep 2026 21:01:05 +0200 Subject: [PATCH 4/5] Add basic providers for modded Advancements and LootTables --- libraries/data-gen/build.gradle | 1 + .../datagen/impl/provider/MCMetaProvider.java | 55 ------------------- .../build.gradle | 0 .../gradle.properties | 3 +- .../api/provider/ModAdvancementProvider.java | 40 ++++++++++++++ .../api/provider/ModLanguageProvider.java | 2 +- .../api/provider/ModLootTablesProvider.java | 36 ++++++++++++ .../api/provider/ModRecipesProvider.java | 12 ++-- .../osl/datagen/impl/DataGenMixinPlugin.java | 0 .../osl/datagen/impl/DataGeneratorInit.java | 0 .../datagen/impl/ModDataGeneratorImpl.java | 5 ++ .../datagen/impl/PackDataGeneratorImpl.java | 0 .../impl/PackProviderExtensionImpl.java | 0 .../impl/access/RecipeBuilderAccess.java | 0 .../impl/mixin/C_23159014NewMixin.java | 0 .../impl/mixin/C_23159014OldMixin.java | 0 .../impl/mixin/DataGeneratorMixin.java | 0 .../datagen/impl/mixin/DataProviderMixin.java | 0 .../datagen/impl/mixin/HashCacheMixin.java | 0 .../impl/wrapper/PackProviderWrapper.java | 0 .../src/main/resources/fabric.mod.json | 4 +- .../main/resources/osl.data-gen.classtweaker | 0 .../main/resources/osl.data-gen.mixins.json | 0 .../osl/datagen/api/ModDataGenerator.java | 2 + .../api/provider/GsonPackProvider.java | 0 .../datagen/api/provider/PackProvider.java | 4 +- .../datagen/impl/provider/MCMetaProvider.java | 42 ++++++++++++++ settings.gradle | 2 +- 28 files changed, 139 insertions(+), 69 deletions(-) delete mode 100644 libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/provider/MCMetaProvider.java rename libraries/data-gen/{data-gen-mc1.13-pre6-mc1.14.4 => data-gen-mc18w43a-mc1.14.4}/build.gradle (100%) rename libraries/data-gen/{data-gen-mc1.13-pre6-mc1.14.4 => data-gen-mc18w43a-mc1.14.4}/gradle.properties (50%) create mode 100644 libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/provider/ModAdvancementProvider.java rename libraries/data-gen/{data-gen-mc1.13-pre6-mc1.14.4 => data-gen-mc18w43a-mc1.14.4}/src/main/java/net/ornithemc/osl/datagen/api/provider/ModLanguageProvider.java (96%) create mode 100644 libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/provider/ModLootTablesProvider.java rename libraries/data-gen/{data-gen-mc1.13-pre6-mc1.14.4 => data-gen-mc18w43a-mc1.14.4}/src/main/java/net/ornithemc/osl/datagen/api/provider/ModRecipesProvider.java (88%) rename libraries/data-gen/{data-gen-mc1.13-pre6-mc1.14.4 => data-gen-mc18w43a-mc1.14.4}/src/main/java/net/ornithemc/osl/datagen/impl/DataGenMixinPlugin.java (100%) rename libraries/data-gen/{data-gen-mc1.13-pre6-mc1.14.4 => data-gen-mc18w43a-mc1.14.4}/src/main/java/net/ornithemc/osl/datagen/impl/DataGeneratorInit.java (100%) rename libraries/data-gen/{data-gen-mc1.13-pre6-mc1.14.4 => data-gen-mc18w43a-mc1.14.4}/src/main/java/net/ornithemc/osl/datagen/impl/ModDataGeneratorImpl.java (95%) rename libraries/data-gen/{data-gen-mc1.13-pre6-mc1.14.4 => data-gen-mc18w43a-mc1.14.4}/src/main/java/net/ornithemc/osl/datagen/impl/PackDataGeneratorImpl.java (100%) rename libraries/data-gen/{data-gen-mc1.13-pre6-mc1.14.4 => data-gen-mc18w43a-mc1.14.4}/src/main/java/net/ornithemc/osl/datagen/impl/PackProviderExtensionImpl.java (100%) rename libraries/data-gen/{data-gen-mc1.13-pre6-mc1.14.4 => data-gen-mc18w43a-mc1.14.4}/src/main/java/net/ornithemc/osl/datagen/impl/access/RecipeBuilderAccess.java (100%) rename libraries/data-gen/{data-gen-mc1.13-pre6-mc1.14.4 => data-gen-mc18w43a-mc1.14.4}/src/main/java/net/ornithemc/osl/datagen/impl/mixin/C_23159014NewMixin.java (100%) rename libraries/data-gen/{data-gen-mc1.13-pre6-mc1.14.4 => data-gen-mc18w43a-mc1.14.4}/src/main/java/net/ornithemc/osl/datagen/impl/mixin/C_23159014OldMixin.java (100%) rename libraries/data-gen/{data-gen-mc1.13-pre6-mc1.14.4 => data-gen-mc18w43a-mc1.14.4}/src/main/java/net/ornithemc/osl/datagen/impl/mixin/DataGeneratorMixin.java (100%) rename libraries/data-gen/{data-gen-mc1.13-pre6-mc1.14.4 => data-gen-mc18w43a-mc1.14.4}/src/main/java/net/ornithemc/osl/datagen/impl/mixin/DataProviderMixin.java (100%) rename libraries/data-gen/{data-gen-mc1.13-pre6-mc1.14.4 => data-gen-mc18w43a-mc1.14.4}/src/main/java/net/ornithemc/osl/datagen/impl/mixin/HashCacheMixin.java (100%) rename libraries/data-gen/{data-gen-mc1.13-pre6-mc1.14.4 => data-gen-mc18w43a-mc1.14.4}/src/main/java/net/ornithemc/osl/datagen/impl/wrapper/PackProviderWrapper.java (100%) rename libraries/data-gen/{data-gen-mc1.13-pre6-mc1.14.4 => data-gen-mc18w43a-mc1.14.4}/src/main/resources/fabric.mod.json (90%) rename libraries/data-gen/{data-gen-mc1.13-pre6-mc1.14.4 => data-gen-mc18w43a-mc1.14.4}/src/main/resources/osl.data-gen.classtweaker (100%) rename libraries/data-gen/{data-gen-mc1.13-pre6-mc1.14.4 => data-gen-mc18w43a-mc1.14.4}/src/main/resources/osl.data-gen.mixins.json (100%) rename libraries/data-gen/{data-gen-mc1.13-pre6-mc1.14.4 => }/src/main/java/net/ornithemc/osl/datagen/api/provider/GsonPackProvider.java (100%) create mode 100644 libraries/data-gen/src/main/java/net/ornithemc/osl/datagen/impl/provider/MCMetaProvider.java diff --git a/libraries/data-gen/build.gradle b/libraries/data-gen/build.gradle index e0294f362..99b09f4a9 100644 --- a/libraries/data-gen/build.gradle +++ b/libraries/data-gen/build.gradle @@ -1,5 +1,6 @@ setUpLibrary(project) dependencies { + implementation 'com.google.code.gson:gson:2.8.0' implementation 'com.google.guava:guava:17.0' } \ No newline at end of file diff --git a/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/provider/MCMetaProvider.java b/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/provider/MCMetaProvider.java deleted file mode 100644 index e9b744c7a..000000000 --- a/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/provider/MCMetaProvider.java +++ /dev/null @@ -1,55 +0,0 @@ -package net.ornithemc.osl.datagen.impl.provider; - -import net.minecraft.data.DataGenerator; -import net.minecraft.data.DataProvider; -import net.minecraft.data.HashCache; -import net.ornithemc.osl.resource.loader.api.resource.pack.ResourcePackMetadata; -import net.ornithemc.osl.resource.loader.impl.resource.pack.ResourcePacks; -import net.ornithemc.osl.resource.loader.impl.resource.pack.SimpleResourcePackMetadata; -import net.ornithemc.osl.text.api.TextComponents; - -import java.io.BufferedWriter; -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.LinkOption; -import java.nio.file.Path; -import java.util.Objects; - -public class MCMetaProvider implements DataProvider { - private final DataGenerator generator; - private final String description; - - public MCMetaProvider(DataGenerator generator, String description) { - this.generator = generator; - this.description = description; - } - - @Override - public void run(HashCache cache) throws IOException { - ResourcePackMetadata metadata = new SimpleResourcePackMetadata(ResourcePacks.getSupportedFormat(), TextComponents.literal(this.description)); - - Path path = getPath(); - - String json = SimpleResourcePackMetadata.SERIALIZER.serialize(metadata).toString(); - String hash = SHA1.hashUnencodedChars(json).toString(); - - if (!Objects.equals(cache.get(path), hash) || !Files.exists(path, new LinkOption[0])) { - Files.createDirectories(path.getParent()); - - try (BufferedWriter bufferedWriter = Files.newBufferedWriter(path)) { - bufferedWriter.write(json); - } - } - - cache.put(path, hash); - } - - private Path getPath() { - return this.generator.getOutput().resolve("pack.mcmeta"); - } - - @Override - public String getName() { - return "MCMeta"; - } -} diff --git a/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/build.gradle b/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/build.gradle similarity index 100% rename from libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/build.gradle rename to libraries/data-gen/data-gen-mc18w43a-mc1.14.4/build.gradle diff --git a/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/gradle.properties b/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/gradle.properties similarity index 50% rename from libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/gradle.properties rename to libraries/data-gen/data-gen-mc18w43a-mc1.14.4/gradle.properties index e2fc66839..038ff5db2 100644 --- a/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/gradle.properties +++ b/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/gradle.properties @@ -1,4 +1,5 @@ -min_mc_version = 1.13-pre6 +#min_mc_version = 1.13-pre6 +min_mc_version = 18w43a max_mc_version = 1.14.4 minecraft_version = 1.14.4 diff --git a/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/provider/ModAdvancementProvider.java b/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/provider/ModAdvancementProvider.java new file mode 100644 index 000000000..6bbcd2348 --- /dev/null +++ b/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/provider/ModAdvancementProvider.java @@ -0,0 +1,40 @@ +package net.ornithemc.osl.datagen.api.provider; + +import com.google.gson.JsonObject; +import net.fabricmc.loader.api.ModContainer; +import net.minecraft.advancement.Advancement; +import net.ornithemc.osl.core.api.util.NamespacedIdentifier; +import net.ornithemc.osl.datagen.api.PackGenerator; +import net.ornithemc.osl.resource.loader.api.resource.ResourcePath; +import net.ornithemc.osl.resource.loader.api.resource.ResourceType; + +import java.nio.file.Path; +import java.util.function.BiConsumer; +import java.util.function.Consumer; + +public abstract class ModAdvancementProvider extends GsonPackProvider { + protected ModAdvancementProvider(PackGenerator generator, ModContainer mod) { + super(generator, mod); + } + + @Override + protected final void generate(BiConsumer consumer) { + Consumer advancementConsumer = advancement -> { + consumer.accept(advancement.getId(), advancement.builder().toJson()); + }; + + generateAdvancements(advancementConsumer); + } + + public abstract void generateAdvancements(Consumer consumer); + + @Override + protected Path getPath(NamespacedIdentifier id) { + return generator.getOutputPath().resolve(ResourcePath.nameOf(ResourceType.SERVER_DATA, id.prefixed("advancements/").suffixed(".json"))); + } + + @Override + public String getProviderName() { + return "Advancements"; + } +} diff --git a/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/provider/ModLanguageProvider.java b/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/provider/ModLanguageProvider.java similarity index 96% rename from libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/provider/ModLanguageProvider.java rename to libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/provider/ModLanguageProvider.java index bb04753e7..27ef69d5b 100644 --- a/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/provider/ModLanguageProvider.java +++ b/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/provider/ModLanguageProvider.java @@ -31,7 +31,7 @@ protected ModLanguageProvider(PackGenerator generator, ModContainer mod) { } @Override - protected void generate(BiConsumer consumer) { + protected final void generate(BiConsumer consumer) { Map translations = new HashMap<>(); generateTranslations(translations::put); diff --git a/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/provider/ModLootTablesProvider.java b/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/provider/ModLootTablesProvider.java new file mode 100644 index 000000000..fdf62ecc4 --- /dev/null +++ b/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/provider/ModLootTablesProvider.java @@ -0,0 +1,36 @@ +package net.ornithemc.osl.datagen.api.provider; + +import com.google.gson.JsonObject; +import net.fabricmc.loader.api.ModContainer; +import net.minecraft.world.gen.loot.LootTable; +import net.minecraft.world.gen.loot.LootTables; +import net.ornithemc.osl.core.api.util.NamespacedIdentifier; +import net.ornithemc.osl.datagen.api.PackGenerator; +import net.ornithemc.osl.resource.loader.api.resource.ResourcePath; +import net.ornithemc.osl.resource.loader.api.resource.ResourceType; + +import java.nio.file.Path; +import java.util.function.BiConsumer; + +public abstract class ModLootTablesProvider extends GsonPackProvider { + protected ModLootTablesProvider(PackGenerator generator, ModContainer mod) { + super(generator, mod); + } + + @Override + protected final void generate(BiConsumer consumer) { + generateLootTables((id, lootTable) -> consumer.accept(id, LootTables.m_19064268(lootTable.m_74891066()).getAsJsonObject())); + } + + public abstract void generateLootTables(BiConsumer consumer); + + @Override + protected Path getPath(NamespacedIdentifier id) { + return generator.getOutputPath().resolve(ResourcePath.nameOf(ResourceType.SERVER_DATA, id.prefixed("loot_tables/").suffixed(".json"))); + } + + @Override + public String getProviderName() { + return "LootTables"; + } +} diff --git a/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/provider/ModRecipesProvider.java b/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/provider/ModRecipesProvider.java similarity index 88% rename from libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/provider/ModRecipesProvider.java rename to libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/provider/ModRecipesProvider.java index b5d308183..523ceefca 100644 --- a/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/provider/ModRecipesProvider.java +++ b/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/provider/ModRecipesProvider.java @@ -7,6 +7,7 @@ import net.minecraft.data.recipe.RecipesProvider; import net.minecraft.resource.Identifier; import net.minecraft.unmapped.C_23159014; +import net.ornithemc.osl.datagen.api.PackGenerator; import net.ornithemc.osl.datagen.impl.access.RecipeBuilderAccess; import java.io.IOException; @@ -15,12 +16,12 @@ import java.util.function.Consumer; public abstract class ModRecipesProvider extends RecipesProvider { - public ModRecipesProvider(DataGenerator generator) { - super(generator); + public ModRecipesProvider(PackGenerator generator) { + super((DataGenerator) generator); } @Override - public void run(HashCache cache) { + public final void run(HashCache cache) { Path path = this.generator.getOutput(); Set set = Sets.newHashSet(); this.generateRecipes((c_23159014) -> { @@ -38,9 +39,4 @@ public void run(HashCache cache) { } protected abstract void generateRecipes(Consumer consumer); - - @Override - public String getName() { - return "Recipes"; - } } diff --git a/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/DataGenMixinPlugin.java b/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/DataGenMixinPlugin.java similarity index 100% rename from libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/DataGenMixinPlugin.java rename to libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/DataGenMixinPlugin.java diff --git a/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/DataGeneratorInit.java b/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/DataGeneratorInit.java similarity index 100% rename from libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/DataGeneratorInit.java rename to libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/DataGeneratorInit.java diff --git a/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/ModDataGeneratorImpl.java b/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/ModDataGeneratorImpl.java similarity index 95% rename from libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/ModDataGeneratorImpl.java rename to libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/ModDataGeneratorImpl.java index e9cd8bfdf..c363ef8e2 100644 --- a/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/ModDataGeneratorImpl.java +++ b/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/ModDataGeneratorImpl.java @@ -37,6 +37,11 @@ public PackGenerator createBuiltinResourcePack(NamespacedIdentifier id) { return generator; } + @Override + public ModContainer getMod() { + return modContainer; + } + public void run() { for (DataGenerator generator : generators) { try { diff --git a/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/PackDataGeneratorImpl.java b/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/PackDataGeneratorImpl.java similarity index 100% rename from libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/PackDataGeneratorImpl.java rename to libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/PackDataGeneratorImpl.java diff --git a/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/PackProviderExtensionImpl.java b/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/PackProviderExtensionImpl.java similarity index 100% rename from libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/PackProviderExtensionImpl.java rename to libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/PackProviderExtensionImpl.java diff --git a/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/access/RecipeBuilderAccess.java b/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/access/RecipeBuilderAccess.java similarity index 100% rename from libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/access/RecipeBuilderAccess.java rename to libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/access/RecipeBuilderAccess.java diff --git a/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/mixin/C_23159014NewMixin.java b/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/mixin/C_23159014NewMixin.java similarity index 100% rename from libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/mixin/C_23159014NewMixin.java rename to libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/mixin/C_23159014NewMixin.java diff --git a/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/mixin/C_23159014OldMixin.java b/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/mixin/C_23159014OldMixin.java similarity index 100% rename from libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/mixin/C_23159014OldMixin.java rename to libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/mixin/C_23159014OldMixin.java diff --git a/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/mixin/DataGeneratorMixin.java b/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/mixin/DataGeneratorMixin.java similarity index 100% rename from libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/mixin/DataGeneratorMixin.java rename to libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/mixin/DataGeneratorMixin.java diff --git a/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/mixin/DataProviderMixin.java b/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/mixin/DataProviderMixin.java similarity index 100% rename from libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/mixin/DataProviderMixin.java rename to libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/mixin/DataProviderMixin.java diff --git a/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/mixin/HashCacheMixin.java b/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/mixin/HashCacheMixin.java similarity index 100% rename from libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/mixin/HashCacheMixin.java rename to libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/mixin/HashCacheMixin.java diff --git a/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/wrapper/PackProviderWrapper.java b/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/wrapper/PackProviderWrapper.java similarity index 100% rename from libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/wrapper/PackProviderWrapper.java rename to libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/wrapper/PackProviderWrapper.java diff --git a/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/resources/fabric.mod.json b/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/resources/fabric.mod.json similarity index 90% rename from libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/resources/fabric.mod.json rename to libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/resources/fabric.mod.json index be95b1633..c0d72f1a1 100644 --- a/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/resources/fabric.mod.json +++ b/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/resources/fabric.mod.json @@ -1,7 +1,7 @@ { "schemaVersion": 1, "id": "osl-data-gen", - "version": "0.1.0-alpha.1+mc1.13-pre6-mc1.14.4", + "version": "0.1.0-alpha.1+mc18w43a-mc1.14.4", "environment": "*", "entrypoints": { "init": [ @@ -14,7 +14,7 @@ "accessWidener": "osl.data-gen.classtweaker", "depends": { "fabricloader": "\u003e\u003d0.18.0", - "minecraft": "\u003e\u003d1.13-rc.6 \u003c\u003d1.14.4", + "minecraft": "\u003e\u003d1.14-alpha.18.43.a \u003c\u003d1.14.4", "osl-core": "\u003e\u003d0.8.0", "osl-entrypoints": "\u003e\u003d0.5.0", "osl-lifecycle-events": "\u003e\u003d0.6.0", diff --git a/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/resources/osl.data-gen.classtweaker b/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/resources/osl.data-gen.classtweaker similarity index 100% rename from libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/resources/osl.data-gen.classtweaker rename to libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/resources/osl.data-gen.classtweaker diff --git a/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/resources/osl.data-gen.mixins.json b/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/resources/osl.data-gen.mixins.json similarity index 100% rename from libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/resources/osl.data-gen.mixins.json rename to libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/resources/osl.data-gen.mixins.json diff --git a/libraries/data-gen/src/main/java/net/ornithemc/osl/datagen/api/ModDataGenerator.java b/libraries/data-gen/src/main/java/net/ornithemc/osl/datagen/api/ModDataGenerator.java index 37528a3a9..ce93bf75b 100644 --- a/libraries/data-gen/src/main/java/net/ornithemc/osl/datagen/api/ModDataGenerator.java +++ b/libraries/data-gen/src/main/java/net/ornithemc/osl/datagen/api/ModDataGenerator.java @@ -1,8 +1,10 @@ package net.ornithemc.osl.datagen.api; +import net.fabricmc.loader.api.ModContainer; import net.ornithemc.osl.core.api.util.NamespacedIdentifier; public interface ModDataGenerator { PackGenerator createPack(); PackGenerator createBuiltinResourcePack(NamespacedIdentifier id); + ModContainer getMod(); } diff --git a/libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/provider/GsonPackProvider.java b/libraries/data-gen/src/main/java/net/ornithemc/osl/datagen/api/provider/GsonPackProvider.java similarity index 100% rename from libraries/data-gen/data-gen-mc1.13-pre6-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/provider/GsonPackProvider.java rename to libraries/data-gen/src/main/java/net/ornithemc/osl/datagen/api/provider/GsonPackProvider.java diff --git a/libraries/data-gen/src/main/java/net/ornithemc/osl/datagen/api/provider/PackProvider.java b/libraries/data-gen/src/main/java/net/ornithemc/osl/datagen/api/provider/PackProvider.java index b60e8bd72..b192a0082 100644 --- a/libraries/data-gen/src/main/java/net/ornithemc/osl/datagen/api/provider/PackProvider.java +++ b/libraries/data-gen/src/main/java/net/ornithemc/osl/datagen/api/provider/PackProvider.java @@ -2,7 +2,9 @@ import net.ornithemc.osl.datagen.api.PackCache; +import java.io.IOException; + public interface PackProvider { String getProviderName(); - void provide(PackCache cache); + void provide(PackCache cache) throws IOException; } diff --git a/libraries/data-gen/src/main/java/net/ornithemc/osl/datagen/impl/provider/MCMetaProvider.java b/libraries/data-gen/src/main/java/net/ornithemc/osl/datagen/impl/provider/MCMetaProvider.java new file mode 100644 index 000000000..3720449b8 --- /dev/null +++ b/libraries/data-gen/src/main/java/net/ornithemc/osl/datagen/impl/provider/MCMetaProvider.java @@ -0,0 +1,42 @@ +package net.ornithemc.osl.datagen.impl.provider; + +import net.ornithemc.osl.datagen.api.PackCache; +import net.ornithemc.osl.datagen.api.PackGenerator; +import net.ornithemc.osl.datagen.api.provider.PackProvider; +import net.ornithemc.osl.resource.loader.api.resource.pack.ResourcePackMetadata; +import net.ornithemc.osl.resource.loader.impl.resource.pack.ResourcePacks; +import net.ornithemc.osl.resource.loader.impl.resource.pack.SimpleResourcePackMetadata; +import net.ornithemc.osl.text.api.TextComponents; + +import java.io.IOException; +import java.nio.file.Path; + +public class MCMetaProvider implements PackProvider { + private final PackGenerator generator; + private final String description; + + public MCMetaProvider(PackGenerator generator, String description) { + this.generator = generator; + this.description = description; + } + + private Path getPath() { + return this.generator.getOutputPath().resolve("pack.mcmeta"); + } + + @Override + public String getProviderName() { + return "MCMeta"; + } + + @Override + public void provide(PackCache cache) throws IOException { + ResourcePackMetadata metadata = new SimpleResourcePackMetadata(ResourcePacks.getSupportedFormat(), TextComponents.literal(this.description)); + + Path path = getPath(); + + String json = SimpleResourcePackMetadata.SERIALIZER.serialize(metadata).toString(); + + cache.checkAndWrite(path, json); + } +} diff --git a/settings.gradle b/settings.gradle index 6d6bf29bb..ee653dff7 100644 --- a/settings.gradle +++ b/settings.gradle @@ -142,4 +142,4 @@ include ':libraries:text-components:text-components-mca1.0.1_01-mc1.6.4' include ':libraries:text-components:text-components-mc13w36a-mc1.14.4' include ':libraries:data-gen' -include ':libraries:data-gen:data-gen-mc1.13-pre6-mc1.14.4' +include ':libraries:data-gen:data-gen-mc18w43a-mc1.14.4' From e8bdc3b4156054bec67edd641bb96884bf26686a Mon Sep 17 00:00:00 2001 From: Cat Core Date: Tue, 22 Sep 2026 14:35:02 +0200 Subject: [PATCH 5/5] Add ModModelProvider for generating blockstates and block and item models with basic templates --- .../osl/datagen/api/model/ModelBuilder.java | 48 +++ .../osl/datagen/api/model/ModelGenerator.java | 17 + .../block/BlockModelDefinitionBuilder.java | 137 ++++++++ .../api/model/block/BlockModelTemplates.java | 132 +++++++ .../api/model/block/ConditionsBuilder.java | 134 +++++++ .../api/model/block/VariantsBuilder.java | 114 ++++++ .../api/model/item/ItemModelTemplates.java | 15 + .../api/provider/ModAdvancementProvider.java | 4 +- .../api/provider/ModLanguageProvider.java | 4 +- .../api/provider/ModLootTablesProvider.java | 4 +- .../api/provider/ModModelProvider.java | 54 +++ .../osl/datagen/impl/DataGeneratorInit.java | 2 + .../impl/model/BlockModelTemplatesImpl.java | 332 ++++++++++++++++++ .../impl/model/ModelGeneratorImpl.java | 59 ++++ .../src/main/resources/fabric.mod.json | 6 +- libraries/data-gen/gradle.properties | 2 +- .../api/provider/GsonPackProvider.java | 4 +- 17 files changed, 1057 insertions(+), 11 deletions(-) create mode 100644 libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/model/ModelBuilder.java create mode 100644 libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/model/ModelGenerator.java create mode 100644 libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/model/block/BlockModelDefinitionBuilder.java create mode 100644 libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/model/block/BlockModelTemplates.java create mode 100644 libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/model/block/ConditionsBuilder.java create mode 100644 libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/model/block/VariantsBuilder.java create mode 100644 libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/model/item/ItemModelTemplates.java create mode 100644 libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/provider/ModModelProvider.java create mode 100644 libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/model/BlockModelTemplatesImpl.java create mode 100644 libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/model/ModelGeneratorImpl.java diff --git a/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/model/ModelBuilder.java b/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/model/ModelBuilder.java new file mode 100644 index 000000000..eb0e12b3e --- /dev/null +++ b/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/model/ModelBuilder.java @@ -0,0 +1,48 @@ +package net.ornithemc.osl.datagen.api.model; + +import com.google.gson.JsonObject; +import net.ornithemc.osl.core.api.util.NamespacedIdentifier; + +import java.util.HashMap; +import java.util.Map; + +public class ModelBuilder { + private NamespacedIdentifier parent; + private Map textures = new HashMap<>(); + + public static ModelBuilder create() { + return new ModelBuilder(); + } + + public static ModelBuilder create(NamespacedIdentifier parent) { + return new ModelBuilder().parent(parent); + } + + public ModelBuilder parent(NamespacedIdentifier parent) { + this.parent = parent; + return this; + } + + public ModelBuilder texture(String name, NamespacedIdentifier texture) { + this.textures.put(name, texture); + return this; + } + + public JsonObject build() { + JsonObject model = new JsonObject(); + + if (parent != null) { + model.addProperty("parent", parent.toString()); + } + + if (!textures.isEmpty()) { + JsonObject texturesJson = new JsonObject(); + for (Map.Entry entry : textures.entrySet()) { + texturesJson.addProperty(entry.getKey(), entry.getValue().toString()); + } + model.add("textures", texturesJson); + } + + return model; + } +} diff --git a/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/model/ModelGenerator.java b/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/model/ModelGenerator.java new file mode 100644 index 000000000..20e83b9f6 --- /dev/null +++ b/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/model/ModelGenerator.java @@ -0,0 +1,17 @@ +package net.ornithemc.osl.datagen.api.model; + +import net.minecraft.block.Block; +import net.minecraft.item.ItemLike; +import net.ornithemc.osl.core.api.util.NamespacedIdentifier; +import net.ornithemc.osl.datagen.api.model.block.BlockModelDefinitionBuilder; +import net.ornithemc.osl.datagen.api.model.block.BlockModelTemplates; + +public interface ModelGenerator { + void blockstate(Block block, BlockModelDefinitionBuilder builder); + void itemModel(ItemLike item, ModelBuilder builder); + NamespacedIdentifier blockModel(NamespacedIdentifier identifier, ModelBuilder builder); + NamespacedIdentifier blockModel(Block block, ModelBuilder builder); + NamespacedIdentifier blockModel(Block block, String suffix, ModelBuilder builder); + + BlockModelTemplates blockTemplates(); +} diff --git a/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/model/block/BlockModelDefinitionBuilder.java b/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/model/block/BlockModelDefinitionBuilder.java new file mode 100644 index 000000000..1ef1c8b15 --- /dev/null +++ b/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/model/block/BlockModelDefinitionBuilder.java @@ -0,0 +1,137 @@ +package net.ornithemc.osl.datagen.api.model.block; + +import com.google.gson.JsonArray; +import com.google.gson.JsonObject; +import net.minecraft.block.state.BlockState; +import net.minecraft.client.render.block.BlockModelShaper; +import net.minecraft.state.property.Property; +import net.ornithemc.osl.core.api.util.NamespacedIdentifier; + +import java.util.*; + +public class BlockModelDefinitionBuilder { + private final Map variants = new HashMap<>(); + private final List selectors = new ArrayList<>(); + + private BlockModelDefinitionBuilder() { + } + + public static BlockModelDefinitionBuilder create() { + return new BlockModelDefinitionBuilder(); + } + + public static BlockModelDefinitionBuilder createSimple(NamespacedIdentifier modelLocation) { + return new BlockModelDefinitionBuilder().variant("", VariantsBuilder.of(modelLocation)); + } + + public BlockModelDefinitionBuilder variant(BlockState state, VariantsBuilder variants) { + this.variants.put(BlockModelShaper.propertiesToString(state.values()), variants); + return this; + } + + public BlockModelDefinitionBuilder variant(BlockState state, NamespacedIdentifier modelLocation) { + this.variants.put(BlockModelShaper.propertiesToString(state.values()), VariantsBuilder.of(modelLocation)); + return this; + } + + public BlockModelDefinitionBuilder variant(PredicateBuilder predicateBuilder, VariantsBuilder variants) { + this.variants.put(predicateBuilder.build(), variants); + return this; + } + + public BlockModelDefinitionBuilder variant(PredicateBuilder predicateBuilder, NamespacedIdentifier modelLocation) { + this.variants.put(predicateBuilder.build(), VariantsBuilder.of(modelLocation)); + return this; + } + + private BlockModelDefinitionBuilder variant(String variantName, VariantsBuilder variants) { + this.variants.put(variantName, variants); + return this; + } + + public BlockModelDefinitionBuilder selector(VariantsBuilder variants) { + this.selectors.add(new SelectorBuilder(null, variants)); + return this; + } + + public BlockModelDefinitionBuilder selector(NamespacedIdentifier modelLocation) { + this.selectors.add(new SelectorBuilder(null, VariantsBuilder.of(modelLocation))); + return this; + } + + public BlockModelDefinitionBuilder selector(ConditionsBuilder conditions, VariantsBuilder variants) { + this.selectors.add(new SelectorBuilder(conditions, variants)); + return this; + } + + public BlockModelDefinitionBuilder selector(ConditionsBuilder conditions, NamespacedIdentifier modelLocation) { + this.selectors.add(new SelectorBuilder(conditions, VariantsBuilder.of(modelLocation))); + return this; + } + + public JsonObject build() { + JsonObject json = new JsonObject(); + + if (!variants.isEmpty()) { + JsonObject variantsJson = new JsonObject(); + + for (Map.Entry entry : variants.entrySet()) { + variantsJson.add(entry.getKey(), entry.getValue().build()); + } + + json.add("variants", variantsJson); + } + + if (!selectors.isEmpty()) { + JsonArray multiPart = new JsonArray(); + + for (SelectorBuilder entry : selectors) { + multiPart.add(entry.build()); + } + + json.add("multipart", multiPart); + } + + if (json.keySet().isEmpty()) { + throw new IllegalStateException("Block state model definition is empty"); + } + + return json; + } + + static class SelectorBuilder { + private final ConditionsBuilder conditions; + private final VariantsBuilder variants; + + SelectorBuilder(ConditionsBuilder conditions, VariantsBuilder variants) { + this.conditions = conditions; + this.variants = variants; + } + + private JsonObject build() { + JsonObject json = new JsonObject(); + + if (conditions != null) json.add("when", conditions.build()); + json.add("apply", variants.build()); + + return json; + } + } + + public static > PredicateBuilder predicate(Property property, T value) { + return new PredicateBuilder().set(property, value); + } + + public static class PredicateBuilder { + private final Map, Comparable> predicates = new HashMap<>(); + + public > PredicateBuilder set(Property property, T value) { + predicates.put(property, value); + return this; + } + + private String build() { + return BlockModelShaper.propertiesToString(predicates); + } + } +} diff --git a/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/model/block/BlockModelTemplates.java b/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/model/block/BlockModelTemplates.java new file mode 100644 index 000000000..6365db111 --- /dev/null +++ b/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/model/block/BlockModelTemplates.java @@ -0,0 +1,132 @@ +package net.ornithemc.osl.datagen.api.model.block; + +import net.minecraft.block.Block; +import net.ornithemc.osl.core.api.util.NamespacedIdentifier; +import net.ornithemc.osl.core.api.util.NamespacedIdentifiers; +import net.ornithemc.osl.datagen.api.model.ModelBuilder; + +public interface BlockModelTemplates { + BlockModelTemplates simpleBlock(Block block, NamespacedIdentifier texture); + BlockModelTemplates simpleBlockWithoutItem(Block block, NamespacedIdentifier texture); + BlockModelTemplates slab(Block block, NamespacedIdentifier doubleModelLocation, NamespacedIdentifier sideTexture, NamespacedIdentifier topTexture, NamespacedIdentifier bottomTexture); + BlockModelTemplates simpleSlab(Block block, NamespacedIdentifier doubleModelLocation, NamespacedIdentifier texture); + BlockModelTemplates stairs(Block block, NamespacedIdentifier sideTexture, NamespacedIdentifier topTexture, NamespacedIdentifier bottomTexture); + BlockModelTemplates simpleStairs(Block block, NamespacedIdentifier texture); + + static ModelBuilder cube( + NamespacedIdentifier downTexture, + NamespacedIdentifier upTexture, + NamespacedIdentifier northTexture, + NamespacedIdentifier southTexture, + NamespacedIdentifier westTexture, + NamespacedIdentifier eastTexture + ) { + return ModelBuilder.create(NamespacedIdentifiers.from("block/cube")) + .texture("down", downTexture) + .texture("up", upTexture) + .texture("north", northTexture) + .texture("south", southTexture) + .texture("west", westTexture) + .texture("east", eastTexture); + } + + static ModelBuilder cubeAll(NamespacedIdentifier texture) { + return ModelBuilder.create(NamespacedIdentifiers.from("block/cube_all")).texture("all", texture); + } + + static ModelBuilder cubeBottomTop(NamespacedIdentifier sideTexture, NamespacedIdentifier topTexture, NamespacedIdentifier bottomTexture) { + return ModelBuilder.create(NamespacedIdentifiers.from("block/cube_bottom_top")) + .texture("side", sideTexture) + .texture("bottom", bottomTexture) + .texture("top", topTexture); + } + + static ModelBuilder cubeColumn(NamespacedIdentifier sideTexture, NamespacedIdentifier endTexture) { + return ModelBuilder.create(NamespacedIdentifiers.from("block/cube_column")) + .texture("side", sideTexture) + .texture("end", endTexture); + } + + static ModelBuilder cubeDirectional( + NamespacedIdentifier downTexture, + NamespacedIdentifier upTexture, + NamespacedIdentifier northTexture, + NamespacedIdentifier southTexture, + NamespacedIdentifier westTexture, + NamespacedIdentifier eastTexture + ) { + return ModelBuilder.create(NamespacedIdentifiers.from("block/cube_directional")) + .texture("down", downTexture) + .texture("up", upTexture) + .texture("north", northTexture) + .texture("south", southTexture) + .texture("west", westTexture) + .texture("east", eastTexture); + } + + static ModelBuilder cubeMirrored( + NamespacedIdentifier downTexture, + NamespacedIdentifier upTexture, + NamespacedIdentifier northTexture, + NamespacedIdentifier southTexture, + NamespacedIdentifier westTexture, + NamespacedIdentifier eastTexture + ) { + return ModelBuilder.create(NamespacedIdentifiers.from("block/cube_mirrored")) + .texture("down", downTexture) + .texture("up", upTexture) + .texture("north", northTexture) + .texture("south", southTexture) + .texture("west", westTexture) + .texture("east", eastTexture); + } + + static ModelBuilder cubeAllMirrored(NamespacedIdentifier texture) { + return ModelBuilder.create(NamespacedIdentifiers.from("block/cube_all_mirrored")).texture("all", texture); + } + + static ModelBuilder cubeTop(NamespacedIdentifier sideTexture, NamespacedIdentifier topTexture) { + return ModelBuilder.create(NamespacedIdentifiers.from("block/cube_top")) + .texture("side", sideTexture) + .texture("top", topTexture); + } + + static ModelBuilder slabBottom(NamespacedIdentifier sideTexture, NamespacedIdentifier topTexture, NamespacedIdentifier bottomTexture) { + return ModelBuilder.create(NamespacedIdentifiers.from("block/slab")) + .texture("side", sideTexture) + .texture("top", topTexture) + .texture("bottom", bottomTexture); + } + + static ModelBuilder slabTop(NamespacedIdentifier sideTexture, NamespacedIdentifier topTexture, NamespacedIdentifier bottomTexture) { + return ModelBuilder.create(NamespacedIdentifiers.from("block/slab_top")) + .texture("side", sideTexture) + .texture("top", topTexture) + .texture("bottom", bottomTexture); + } + + static ModelBuilder cross(NamespacedIdentifier texture) { + return ModelBuilder.create(NamespacedIdentifiers.from("block/cross")).texture("cross", texture); + } + + static ModelBuilder stairs(NamespacedIdentifier sideTexture, NamespacedIdentifier topTexture, NamespacedIdentifier bottomTexture) { + return ModelBuilder.create(NamespacedIdentifiers.from("block/stairs")) + .texture("side", sideTexture) + .texture("top", topTexture) + .texture("bottom", bottomTexture); + } + + static ModelBuilder stairsInner(NamespacedIdentifier sideTexture, NamespacedIdentifier topTexture, NamespacedIdentifier bottomTexture) { + return ModelBuilder.create(NamespacedIdentifiers.from("block/inner_stairs")) + .texture("side", sideTexture) + .texture("top", topTexture) + .texture("bottom", bottomTexture); + } + + static ModelBuilder stairsOuter(NamespacedIdentifier sideTexture, NamespacedIdentifier topTexture, NamespacedIdentifier bottomTexture) { + return ModelBuilder.create(NamespacedIdentifiers.from("block/outer_stairs")) + .texture("side", sideTexture) + .texture("top", topTexture) + .texture("bottom", bottomTexture); + } +} diff --git a/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/model/block/ConditionsBuilder.java b/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/model/block/ConditionsBuilder.java new file mode 100644 index 000000000..324d955c1 --- /dev/null +++ b/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/model/block/ConditionsBuilder.java @@ -0,0 +1,134 @@ +package net.ornithemc.osl.datagen.api.model.block; + +import com.google.gson.JsonArray; +import com.google.gson.JsonObject; +import net.minecraft.state.property.Property; +import org.jetbrains.annotations.NotNull; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +public interface ConditionsBuilder { + JsonObject build(); + + @SafeVarargs + static > PropertyBuilder propertyNegated(Property property, @NotNull T mainMatch, T... extraPossibleMatch) { + List valueList = new ArrayList<>(); + valueList.add(mainMatch); + valueList.addAll(Arrays.asList(extraPossibleMatch)); + return new PropertyBuilder<>(false, property, valueList); + } + + @SafeVarargs + static > PropertyBuilder property(Property property, @NotNull T mainMatch, T... extraPossibleMatch) { + List valueList = new ArrayList<>(); + valueList.add(mainMatch); + valueList.addAll(Arrays.asList(extraPossibleMatch)); + return new PropertyBuilder<>(false, property, valueList); + } + + static ConditionsBuilder properties(PropertyBuilder...properties) { + if (properties.length == 0) { + throw new IllegalArgumentException("Must provide at least one property"); + } + + return new PropertyConditionBuilder(properties); + } + + static ConditionsBuilder or(ConditionsBuilder...conditions) { + if (conditions.length == 0) { + throw new IllegalArgumentException("Must provide at least one condition"); + } + + return new OrConditonBuilder(conditions); + } + + static ConditionsBuilder and(ConditionsBuilder...conditions) { + if (conditions.length == 0) { + throw new IllegalArgumentException("Must provide at least one condition"); + } + + return new AndConditonBuilder(conditions); + } + + class PropertyBuilder> { + private final boolean negated; + private final Property property; + private final List values; + + private PropertyBuilder(boolean negated, Property property, List values) { + this.negated = negated; + this.property = property; + this.values = values; + } + + private void write(JsonObject object) { + object.addProperty(property.getName(), (negated ? "!" : "") + values.stream().map(property::getName).collect(Collectors.joining("|"))); + } + } + + class PropertyConditionBuilder implements ConditionsBuilder { + private final PropertyBuilder[] properties; + + private PropertyConditionBuilder(PropertyBuilder[] properties) { + this.properties = properties; + } + + @Override + public JsonObject build() { + JsonObject object = new JsonObject(); + + for (PropertyBuilder propertyBuilder : properties) { + propertyBuilder.write(object); + } + + return object; + } + } + + class AndConditonBuilder implements ConditionsBuilder { + private final ConditionsBuilder[] conditions; + + private AndConditonBuilder(ConditionsBuilder[] conditions) { + this.conditions = conditions; + } + + @Override + public JsonObject build() { + JsonArray array = new JsonArray(); + + for (ConditionsBuilder condition : conditions) { + array.add(condition.build()); + } + + JsonObject object = new JsonObject(); + object.add("AND", array); + + return object; + } + } + + class OrConditonBuilder implements ConditionsBuilder { + private final ConditionsBuilder[] conditions; + + private OrConditonBuilder(ConditionsBuilder[] conditions) { + this.conditions = conditions; + } + + @Override + public JsonObject build() { + JsonArray array = new JsonArray(); + + for (ConditionsBuilder condition : conditions) { + array.add(condition.build()); + } + + JsonObject object = new JsonObject(); + object.add("OR", array); + + return object; + } + } +} diff --git a/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/model/block/VariantsBuilder.java b/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/model/block/VariantsBuilder.java new file mode 100644 index 000000000..d67d29fbe --- /dev/null +++ b/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/model/block/VariantsBuilder.java @@ -0,0 +1,114 @@ +package net.ornithemc.osl.datagen.api.model.block; + +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import net.minecraft.client.resource.model.ModelRotation; +import net.ornithemc.osl.core.api.util.NamespacedIdentifier; + +public interface VariantsBuilder { + JsonElement build(); + + static VariantBuilder of(NamespacedIdentifier modelLocation) { + return new VariantBuilder(modelLocation); + } + + static VariantsBuilder multi(VariantBuilder... variants) { + if (variants.length == 0) { + throw new IllegalArgumentException("Must provide at least one variant"); + } + + return new MultiBuilder(variants); + } + + class VariantBuilder implements VariantsBuilder { + private final NamespacedIdentifier modelLocation; + private int x = 0; + private int y = 0; + private boolean lockedUV = false; + private int weight = 1; + + private VariantBuilder(NamespacedIdentifier modelLocation) { + this.modelLocation = modelLocation; + } + + public VariantBuilder x(int x) { + ModelRotation rotation = ModelRotation.by(x, y); + + if (rotation == null) { + throw new IllegalArgumentException("Invalid x rotation " + x); + } + + this.x = x; + return this; + } + + public VariantBuilder y(int y) { + ModelRotation rotation = ModelRotation.by(x, y); + + if (rotation == null) { + throw new IllegalArgumentException("Invalid y rotation " + y); + } + + this.y = y; + return this; + } + + public VariantBuilder lockedUV(boolean lockUV) { + this.lockedUV = lockUV; + return this; + } + + public VariantBuilder weight(int weight) { + if (weight <= 0) { + throw new IllegalArgumentException("Weight must be greater than 0"); + } + + this.weight = weight; + return this; + } + + public JsonElement build() { + JsonObject json = new JsonObject(); + json.addProperty("model", modelLocation.toString()); + + // Defaulted properties + if (x != 0) { + json.addProperty("x", x); + } + + if (y != 0) { + json.addProperty("y", y); + } + + if (lockedUV) { + json.addProperty("uvlock", true); + } + + if (weight > 1) { + json.addProperty("weight", weight); + } + + return json; + } + } + + class MultiBuilder implements VariantsBuilder { + private final VariantBuilder[] variants; + + private MultiBuilder(VariantBuilder... variants) { + this.variants = variants; + } + + @Override + public JsonElement build() { + JsonArray json = new JsonArray(); + + for (VariantBuilder variant : variants) { + json.add(variant.build()); + } + + return json; + } + } +} diff --git a/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/model/item/ItemModelTemplates.java b/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/model/item/ItemModelTemplates.java new file mode 100644 index 000000000..bd9848282 --- /dev/null +++ b/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/model/item/ItemModelTemplates.java @@ -0,0 +1,15 @@ +package net.ornithemc.osl.datagen.api.model.item; + +import net.ornithemc.osl.core.api.util.NamespacedIdentifier; +import net.ornithemc.osl.core.api.util.NamespacedIdentifiers; +import net.ornithemc.osl.datagen.api.model.ModelBuilder; + +public final class ItemModelTemplates { + public static ModelBuilder basic(NamespacedIdentifier texture) { + return ModelBuilder.create(NamespacedIdentifiers.from("item/generated")).texture("layer0", texture); + } + + public static ModelBuilder basic(NamespacedIdentifier firstLayer, NamespacedIdentifier secondLayer) { + return ModelBuilder.create(NamespacedIdentifiers.from("item/generated")).texture("layer0", firstLayer).texture("layer1", secondLayer); + } +} diff --git a/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/provider/ModAdvancementProvider.java b/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/provider/ModAdvancementProvider.java index 6bbcd2348..d2de35180 100644 --- a/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/provider/ModAdvancementProvider.java +++ b/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/provider/ModAdvancementProvider.java @@ -1,6 +1,6 @@ package net.ornithemc.osl.datagen.api.provider; -import com.google.gson.JsonObject; +import com.google.gson.JsonElement; import net.fabricmc.loader.api.ModContainer; import net.minecraft.advancement.Advancement; import net.ornithemc.osl.core.api.util.NamespacedIdentifier; @@ -18,7 +18,7 @@ protected ModAdvancementProvider(PackGenerator generator, ModContainer mod) { } @Override - protected final void generate(BiConsumer consumer) { + protected final void generate(BiConsumer consumer) { Consumer advancementConsumer = advancement -> { consumer.accept(advancement.getId(), advancement.builder().toJson()); }; diff --git a/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/provider/ModLanguageProvider.java b/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/provider/ModLanguageProvider.java index 27ef69d5b..04b0217ef 100644 --- a/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/provider/ModLanguageProvider.java +++ b/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/provider/ModLanguageProvider.java @@ -1,9 +1,9 @@ package net.ornithemc.osl.datagen.api.provider; +import com.google.gson.JsonElement; import com.google.gson.JsonObject; import net.fabricmc.loader.api.ModContainer; import net.minecraft.block.Block; -import net.minecraft.data.DataGenerator; import net.minecraft.entity.EntityType; import net.minecraft.item.Item; import net.minecraft.resource.Identifier; @@ -31,7 +31,7 @@ protected ModLanguageProvider(PackGenerator generator, ModContainer mod) { } @Override - protected final void generate(BiConsumer consumer) { + protected final void generate(BiConsumer consumer) { Map translations = new HashMap<>(); generateTranslations(translations::put); diff --git a/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/provider/ModLootTablesProvider.java b/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/provider/ModLootTablesProvider.java index fdf62ecc4..3350ce696 100644 --- a/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/provider/ModLootTablesProvider.java +++ b/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/provider/ModLootTablesProvider.java @@ -1,6 +1,6 @@ package net.ornithemc.osl.datagen.api.provider; -import com.google.gson.JsonObject; +import com.google.gson.JsonElement; import net.fabricmc.loader.api.ModContainer; import net.minecraft.world.gen.loot.LootTable; import net.minecraft.world.gen.loot.LootTables; @@ -18,7 +18,7 @@ protected ModLootTablesProvider(PackGenerator generator, ModContainer mod) { } @Override - protected final void generate(BiConsumer consumer) { + protected final void generate(BiConsumer consumer) { generateLootTables((id, lootTable) -> consumer.accept(id, LootTables.m_19064268(lootTable.m_74891066()).getAsJsonObject())); } diff --git a/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/provider/ModModelProvider.java b/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/provider/ModModelProvider.java new file mode 100644 index 000000000..a7fdcdb7f --- /dev/null +++ b/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/provider/ModModelProvider.java @@ -0,0 +1,54 @@ +package net.ornithemc.osl.datagen.api.provider; + +import com.google.gson.JsonElement; +import net.fabricmc.loader.api.ModContainer; +import net.ornithemc.osl.core.api.util.NamespacedIdentifier; +import net.ornithemc.osl.core.api.util.NamespacedIdentifiers; +import net.ornithemc.osl.datagen.api.PackGenerator; +import net.ornithemc.osl.datagen.api.model.ModelGenerator; +import net.ornithemc.osl.datagen.impl.model.ModelGeneratorImpl; +import net.ornithemc.osl.resource.loader.api.resource.ResourcePath; +import net.ornithemc.osl.resource.loader.api.resource.ResourceType; + +import java.nio.file.Path; +import java.util.function.BiConsumer; + +public abstract class ModModelProvider extends GsonPackProvider{ + protected ModModelProvider(PackGenerator generator, ModContainer mod) { + super(generator, mod); + } + + @Override + protected final void generate(BiConsumer consumer) { + ModelGenerator modelGenerator = new ModelGeneratorImpl(consumer); + generateModels(modelGenerator); + } + + public abstract void generateModels(ModelGenerator generator); + + public NamespacedIdentifier block(NamespacedIdentifier id) { + return id.suffixed("block/"); + } + + public NamespacedIdentifier block(String path) { + return block(NamespacedIdentifiers.parse(path)); + } + + public NamespacedIdentifier item(NamespacedIdentifier id) { + return id.suffixed("item/"); + } + + public NamespacedIdentifier item(String path) { + return item(NamespacedIdentifiers.parse(path)); + } + + @Override + protected Path getPath(NamespacedIdentifier id) { + return generator.getOutputPath().resolve(ResourcePath.nameOf(ResourceType.CLIENT_ASSETS, id.suffixed(".json"))); + } + + @Override + public String getProviderName() { + return "Models"; + } +} diff --git a/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/DataGeneratorInit.java b/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/DataGeneratorInit.java index 486249832..61c2c5747 100644 --- a/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/DataGeneratorInit.java +++ b/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/DataGeneratorInit.java @@ -40,6 +40,8 @@ public void init() { for (ModDataGeneratorImpl generator : generators) { generator.run(); } + + System.exit(0); }); } } diff --git a/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/model/BlockModelTemplatesImpl.java b/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/model/BlockModelTemplatesImpl.java new file mode 100644 index 000000000..6254e03bd --- /dev/null +++ b/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/model/BlockModelTemplatesImpl.java @@ -0,0 +1,332 @@ +package net.ornithemc.osl.datagen.impl.model; + +import net.minecraft.block.Block; +import net.minecraft.block.SlabBlock; +import net.minecraft.block.StairsBlock; +import net.minecraft.block.state.property.SlabType; +import net.minecraft.block.state.property.StairHalf; +import net.minecraft.block.state.property.StairShape; +import net.minecraft.util.math.Direction; +import net.ornithemc.osl.core.api.util.NamespacedIdentifier; +import net.ornithemc.osl.datagen.api.model.ModelBuilder; +import net.ornithemc.osl.datagen.api.model.ModelGenerator; +import net.ornithemc.osl.datagen.api.model.block.BlockModelDefinitionBuilder; +import net.ornithemc.osl.datagen.api.model.block.BlockModelTemplates; +import net.ornithemc.osl.datagen.api.model.block.VariantsBuilder; + +public class BlockModelTemplatesImpl implements BlockModelTemplates { + private final ModelGenerator modelGenerator; + + public BlockModelTemplatesImpl(ModelGenerator modelGenerator) { + this.modelGenerator = modelGenerator; + } + + @Override + public BlockModelTemplates simpleBlock(Block block, NamespacedIdentifier texture) { + NamespacedIdentifier blockModelId = modelGenerator.blockModel(block, BlockModelTemplates.cubeAll(texture)); + modelGenerator.itemModel(block, ModelBuilder.create(blockModelId)); + modelGenerator.blockstate(block, BlockModelDefinitionBuilder.createSimple(blockModelId)); + + return this; + } + + @Override + public BlockModelTemplates simpleBlockWithoutItem(Block block, NamespacedIdentifier texture) { + NamespacedIdentifier blockModelId = modelGenerator.blockModel(block, BlockModelTemplates.cubeAll(texture)); + modelGenerator.blockstate(block, BlockModelDefinitionBuilder.createSimple(blockModelId)); + + return this; + } + + @Override + public BlockModelTemplates slab(Block block, NamespacedIdentifier doubleModelLocation, NamespacedIdentifier sideTexture, NamespacedIdentifier topTexture, NamespacedIdentifier bottomTexture) { + NamespacedIdentifier bottomId = modelGenerator.blockModel(block, BlockModelTemplates.slabBottom(sideTexture, topTexture, bottomTexture)); + NamespacedIdentifier topId = modelGenerator.blockModel(block, "_top", BlockModelTemplates.slabTop(sideTexture, topTexture, bottomTexture)); + modelGenerator.itemModel(block, ModelBuilder.create(bottomId)); + modelGenerator.blockstate( + block, + BlockModelDefinitionBuilder.create() + .variant(BlockModelDefinitionBuilder.predicate(SlabBlock.HALF, SlabType.BOTTOM), bottomId) + .variant(BlockModelDefinitionBuilder.predicate(SlabBlock.HALF, SlabType.TOP), topId) + .variant(BlockModelDefinitionBuilder.predicate(SlabBlock.HALF, SlabType.DOUBLE), doubleModelLocation) + ); + + return this; + } + + @Override + public BlockModelTemplates simpleSlab(Block block, NamespacedIdentifier doubleModelLocation, NamespacedIdentifier texture) { + return slab(block, doubleModelLocation, texture, texture, texture); + } + + @Override + public BlockModelTemplates stairs(Block block, NamespacedIdentifier sideTexture, NamespacedIdentifier topTexture, NamespacedIdentifier bottomTexture) { + NamespacedIdentifier baseId = modelGenerator.blockModel(block, BlockModelTemplates.stairs(sideTexture, topTexture, bottomTexture)); + NamespacedIdentifier innerId = modelGenerator.blockModel(block, "_inner", BlockModelTemplates.stairsInner(sideTexture, topTexture, bottomTexture)); + NamespacedIdentifier outerId = modelGenerator.blockModel(block, "_outer", BlockModelTemplates.stairsOuter(sideTexture, topTexture, bottomTexture)); + modelGenerator.itemModel(block, ModelBuilder.create(baseId)); + + modelGenerator.blockstate( + block, + BlockModelDefinitionBuilder.create() + // Straight Bottom + .variant( + BlockModelDefinitionBuilder.predicate(StairsBlock.FACING, Direction.EAST) + .set(StairsBlock.HALF, StairHalf.BOTTOM) + .set(StairsBlock.SHAPE, StairShape.STRAIGHT), + VariantsBuilder.of(baseId) + ) + .variant( + BlockModelDefinitionBuilder.predicate(StairsBlock.FACING, Direction.WEST) + .set(StairsBlock.HALF, StairHalf.BOTTOM) + .set(StairsBlock.SHAPE, StairShape.STRAIGHT), + VariantsBuilder.of(baseId).y(180).lockedUV(true) + ) + .variant( + BlockModelDefinitionBuilder.predicate(StairsBlock.FACING, Direction.SOUTH) + .set(StairsBlock.HALF, StairHalf.BOTTOM) + .set(StairsBlock.SHAPE, StairShape.STRAIGHT), + VariantsBuilder.of(baseId).y(90).lockedUV(true) + ) + .variant( + BlockModelDefinitionBuilder.predicate(StairsBlock.FACING, Direction.NORTH) + .set(StairsBlock.HALF, StairHalf.BOTTOM) + .set(StairsBlock.SHAPE, StairShape.STRAIGHT), + VariantsBuilder.of(baseId).y(270).lockedUV(true) + ) + // Outer Right Bottom + .variant( + BlockModelDefinitionBuilder.predicate(StairsBlock.FACING, Direction.EAST) + .set(StairsBlock.HALF, StairHalf.BOTTOM) + .set(StairsBlock.SHAPE, StairShape.OUTER_RIGHT), + VariantsBuilder.of(outerId) + ) + .variant( + BlockModelDefinitionBuilder.predicate(StairsBlock.FACING, Direction.WEST) + .set(StairsBlock.HALF, StairHalf.BOTTOM) + .set(StairsBlock.SHAPE, StairShape.OUTER_RIGHT), + VariantsBuilder.of(outerId).y(180).lockedUV(true) + ) + .variant( + BlockModelDefinitionBuilder.predicate(StairsBlock.FACING, Direction.SOUTH) + .set(StairsBlock.HALF, StairHalf.BOTTOM) + .set(StairsBlock.SHAPE, StairShape.OUTER_RIGHT), + VariantsBuilder.of(outerId).y(90).lockedUV(true) + ) + .variant( + BlockModelDefinitionBuilder.predicate(StairsBlock.FACING, Direction.NORTH) + .set(StairsBlock.HALF, StairHalf.BOTTOM) + .set(StairsBlock.SHAPE, StairShape.OUTER_RIGHT), + VariantsBuilder.of(outerId).y(270).lockedUV(true) + ) + // Outer Left Bottom + .variant( + BlockModelDefinitionBuilder.predicate(StairsBlock.FACING, Direction.EAST) + .set(StairsBlock.HALF, StairHalf.BOTTOM) + .set(StairsBlock.SHAPE, StairShape.OUTER_LEFT), + VariantsBuilder.of(outerId).y(270).lockedUV(true) + ) + .variant( + BlockModelDefinitionBuilder.predicate(StairsBlock.FACING, Direction.WEST) + .set(StairsBlock.HALF, StairHalf.BOTTOM) + .set(StairsBlock.SHAPE, StairShape.OUTER_LEFT), + VariantsBuilder.of(outerId).y(90).lockedUV(true) + ) + .variant( + BlockModelDefinitionBuilder.predicate(StairsBlock.FACING, Direction.SOUTH) + .set(StairsBlock.HALF, StairHalf.BOTTOM) + .set(StairsBlock.SHAPE, StairShape.OUTER_LEFT), + VariantsBuilder.of(outerId) + ) + .variant( + BlockModelDefinitionBuilder.predicate(StairsBlock.FACING, Direction.NORTH) + .set(StairsBlock.HALF, StairHalf.BOTTOM) + .set(StairsBlock.SHAPE, StairShape.OUTER_LEFT), + VariantsBuilder.of(outerId).y(180).lockedUV(true) + ) + // Inner Right Bottom + .variant( + BlockModelDefinitionBuilder.predicate(StairsBlock.FACING, Direction.EAST) + .set(StairsBlock.HALF, StairHalf.BOTTOM) + .set(StairsBlock.SHAPE, StairShape.INNER_RIGHT), + VariantsBuilder.of(innerId) + ) + .variant( + BlockModelDefinitionBuilder.predicate(StairsBlock.FACING, Direction.WEST) + .set(StairsBlock.HALF, StairHalf.BOTTOM) + .set(StairsBlock.SHAPE, StairShape.INNER_RIGHT), + VariantsBuilder.of(innerId).y(180).lockedUV(true) + ) + .variant( + BlockModelDefinitionBuilder.predicate(StairsBlock.FACING, Direction.SOUTH) + .set(StairsBlock.HALF, StairHalf.BOTTOM) + .set(StairsBlock.SHAPE, StairShape.INNER_RIGHT), + VariantsBuilder.of(innerId).y(90).lockedUV(true) + ) + .variant( + BlockModelDefinitionBuilder.predicate(StairsBlock.FACING, Direction.NORTH) + .set(StairsBlock.HALF, StairHalf.BOTTOM) + .set(StairsBlock.SHAPE, StairShape.INNER_RIGHT), + VariantsBuilder.of(innerId).y(270).lockedUV(true) + ) + // Inner Left Bottom + .variant( + BlockModelDefinitionBuilder.predicate(StairsBlock.FACING, Direction.EAST) + .set(StairsBlock.HALF, StairHalf.BOTTOM) + .set(StairsBlock.SHAPE, StairShape.INNER_LEFT), + VariantsBuilder.of(innerId).y(270).lockedUV(true) + ) + .variant( + BlockModelDefinitionBuilder.predicate(StairsBlock.FACING, Direction.WEST) + .set(StairsBlock.HALF, StairHalf.BOTTOM) + .set(StairsBlock.SHAPE, StairShape.INNER_LEFT), + VariantsBuilder.of(innerId).y(90).lockedUV(true) + ) + .variant( + BlockModelDefinitionBuilder.predicate(StairsBlock.FACING, Direction.SOUTH) + .set(StairsBlock.HALF, StairHalf.BOTTOM) + .set(StairsBlock.SHAPE, StairShape.INNER_LEFT), + VariantsBuilder.of(innerId) + ) + .variant( + BlockModelDefinitionBuilder.predicate(StairsBlock.FACING, Direction.NORTH) + .set(StairsBlock.HALF, StairHalf.BOTTOM) + .set(StairsBlock.SHAPE, StairShape.INNER_LEFT), + VariantsBuilder.of(innerId).y(180).lockedUV(true) + ) + + // Straight Top + .variant( + BlockModelDefinitionBuilder.predicate(StairsBlock.FACING, Direction.EAST) + .set(StairsBlock.HALF, StairHalf.TOP) + .set(StairsBlock.SHAPE, StairShape.STRAIGHT), + VariantsBuilder.of(baseId).x(180).lockedUV(true) + ) + .variant( + BlockModelDefinitionBuilder.predicate(StairsBlock.FACING, Direction.WEST) + .set(StairsBlock.HALF, StairHalf.TOP) + .set(StairsBlock.SHAPE, StairShape.STRAIGHT), + VariantsBuilder.of(baseId).x(180).y(180).lockedUV(true) + ) + .variant( + BlockModelDefinitionBuilder.predicate(StairsBlock.FACING, Direction.SOUTH) + .set(StairsBlock.HALF, StairHalf.TOP) + .set(StairsBlock.SHAPE, StairShape.STRAIGHT), + VariantsBuilder.of(baseId).x(180).y(90).lockedUV(true) + ) + .variant( + BlockModelDefinitionBuilder.predicate(StairsBlock.FACING, Direction.NORTH) + .set(StairsBlock.HALF, StairHalf.TOP) + .set(StairsBlock.SHAPE, StairShape.STRAIGHT), + VariantsBuilder.of(baseId).x(180).y(270).lockedUV(true) + ) + // Outer Right Top + .variant( + BlockModelDefinitionBuilder.predicate(StairsBlock.FACING, Direction.EAST) + .set(StairsBlock.HALF, StairHalf.TOP) + .set(StairsBlock.SHAPE, StairShape.OUTER_RIGHT), + VariantsBuilder.of(outerId).x(180).lockedUV(true) + ) + .variant( + BlockModelDefinitionBuilder.predicate(StairsBlock.FACING, Direction.WEST) + .set(StairsBlock.HALF, StairHalf.TOP) + .set(StairsBlock.SHAPE, StairShape.OUTER_RIGHT), + VariantsBuilder.of(outerId).x(180).y(180).lockedUV(true) + ) + .variant( + BlockModelDefinitionBuilder.predicate(StairsBlock.FACING, Direction.SOUTH) + .set(StairsBlock.HALF, StairHalf.TOP) + .set(StairsBlock.SHAPE, StairShape.OUTER_RIGHT), + VariantsBuilder.of(outerId).x(180).y(90).lockedUV(true) + ) + .variant( + BlockModelDefinitionBuilder.predicate(StairsBlock.FACING, Direction.NORTH) + .set(StairsBlock.HALF, StairHalf.TOP) + .set(StairsBlock.SHAPE, StairShape.OUTER_RIGHT), + VariantsBuilder.of(outerId).x(180).y(270).lockedUV(true) + ) + // Outer Left Top + .variant( + BlockModelDefinitionBuilder.predicate(StairsBlock.FACING, Direction.EAST) + .set(StairsBlock.HALF, StairHalf.TOP) + .set(StairsBlock.SHAPE, StairShape.OUTER_LEFT), + VariantsBuilder.of(outerId).x(180).y(270).lockedUV(true) + ) + .variant( + BlockModelDefinitionBuilder.predicate(StairsBlock.FACING, Direction.WEST) + .set(StairsBlock.HALF, StairHalf.TOP) + .set(StairsBlock.SHAPE, StairShape.OUTER_LEFT), + VariantsBuilder.of(outerId).x(180).y(90).lockedUV(true) + ) + .variant( + BlockModelDefinitionBuilder.predicate(StairsBlock.FACING, Direction.SOUTH) + .set(StairsBlock.HALF, StairHalf.TOP) + .set(StairsBlock.SHAPE, StairShape.OUTER_LEFT), + VariantsBuilder.of(outerId).x(180).lockedUV(true) + ) + .variant( + BlockModelDefinitionBuilder.predicate(StairsBlock.FACING, Direction.NORTH) + .set(StairsBlock.HALF, StairHalf.TOP) + .set(StairsBlock.SHAPE, StairShape.OUTER_LEFT), + VariantsBuilder.of(outerId).x(180).y(180).lockedUV(true) + ) + // Inner Right Top + .variant( + BlockModelDefinitionBuilder.predicate(StairsBlock.FACING, Direction.EAST) + .set(StairsBlock.HALF, StairHalf.TOP) + .set(StairsBlock.SHAPE, StairShape.INNER_RIGHT), + VariantsBuilder.of(innerId).x(180).lockedUV(true) + ) + .variant( + BlockModelDefinitionBuilder.predicate(StairsBlock.FACING, Direction.WEST) + .set(StairsBlock.HALF, StairHalf.TOP) + .set(StairsBlock.SHAPE, StairShape.INNER_RIGHT), + VariantsBuilder.of(innerId).x(180).y(180).lockedUV(true) + ) + .variant( + BlockModelDefinitionBuilder.predicate(StairsBlock.FACING, Direction.SOUTH) + .set(StairsBlock.HALF, StairHalf.TOP) + .set(StairsBlock.SHAPE, StairShape.INNER_RIGHT), + VariantsBuilder.of(innerId).x(180).y(90).lockedUV(true) + ) + .variant( + BlockModelDefinitionBuilder.predicate(StairsBlock.FACING, Direction.NORTH) + .set(StairsBlock.HALF, StairHalf.TOP) + .set(StairsBlock.SHAPE, StairShape.INNER_RIGHT), + VariantsBuilder.of(innerId).x(180).y(270).lockedUV(true) + ) + // Inner Left Top + .variant( + BlockModelDefinitionBuilder.predicate(StairsBlock.FACING, Direction.EAST) + .set(StairsBlock.HALF, StairHalf.TOP) + .set(StairsBlock.SHAPE, StairShape.INNER_LEFT), + VariantsBuilder.of(innerId).x(180).y(270).lockedUV(true) + ) + .variant( + BlockModelDefinitionBuilder.predicate(StairsBlock.FACING, Direction.WEST) + .set(StairsBlock.HALF, StairHalf.TOP) + .set(StairsBlock.SHAPE, StairShape.INNER_LEFT), + VariantsBuilder.of(innerId).x(180).y(90).lockedUV(true) + ) + .variant( + BlockModelDefinitionBuilder.predicate(StairsBlock.FACING, Direction.SOUTH) + .set(StairsBlock.HALF, StairHalf.TOP) + .set(StairsBlock.SHAPE, StairShape.INNER_LEFT), + VariantsBuilder.of(innerId).x(180).lockedUV(true) + ) + .variant( + BlockModelDefinitionBuilder.predicate(StairsBlock.FACING, Direction.NORTH) + .set(StairsBlock.HALF, StairHalf.TOP) + .set(StairsBlock.SHAPE, StairShape.INNER_LEFT), + VariantsBuilder.of(innerId).x(180).y(180).lockedUV(true) + ) + ); + + return this; + } + + @Override + public BlockModelTemplates simpleStairs(Block block, NamespacedIdentifier texture) { + return stairs(block, texture, texture, texture); + } +} diff --git a/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/model/ModelGeneratorImpl.java b/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/model/ModelGeneratorImpl.java new file mode 100644 index 000000000..cbc9eea70 --- /dev/null +++ b/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/model/ModelGeneratorImpl.java @@ -0,0 +1,59 @@ +package net.ornithemc.osl.datagen.impl.model; + +import com.google.gson.JsonElement; +import net.minecraft.block.Block; +import net.minecraft.item.ItemLike; +import net.ornithemc.osl.blocks.api.BlockRegistry; +import net.ornithemc.osl.core.api.util.NamespacedIdentifier; +import net.ornithemc.osl.datagen.api.model.ModelBuilder; +import net.ornithemc.osl.datagen.api.model.ModelGenerator; +import net.ornithemc.osl.datagen.api.model.block.BlockModelDefinitionBuilder; +import net.ornithemc.osl.datagen.api.model.block.BlockModelTemplates; +import net.ornithemc.osl.items.api.ItemRegistry; + +import java.util.function.BiConsumer; + +public class ModelGeneratorImpl implements ModelGenerator { + private final BiConsumer writer; + private final BlockModelTemplates templates; + + public ModelGeneratorImpl(BiConsumer writer) { + this.writer = writer; + this.templates = new BlockModelTemplatesImpl(this); + } + + @Override + public void blockstate(Block block, BlockModelDefinitionBuilder builder) { + NamespacedIdentifier blockId = BlockRegistry.getIdentifier(block); + writer.accept(blockId.prefixed("blockstates/"), builder.build()); + } + + @Override + public void itemModel(ItemLike item, ModelBuilder builder) { + NamespacedIdentifier itemId = ItemRegistry.getIdentifier(item.asItem()); + writer.accept(itemId.prefixed("models/item/"), builder.build()); + } + + @Override + public NamespacedIdentifier blockModel(NamespacedIdentifier identifier, ModelBuilder builder) { + writer.accept(identifier.prefixed("models/block/"), builder.build()); + return identifier.prefixed("block/"); + } + + @Override + public NamespacedIdentifier blockModel(Block block, ModelBuilder builder) { + NamespacedIdentifier blockId = BlockRegistry.getIdentifier(block); + return blockModel(blockId, builder); + } + + @Override + public NamespacedIdentifier blockModel(Block block, String suffix, ModelBuilder builder) { + NamespacedIdentifier blockId = BlockRegistry.getIdentifier(block); + return blockModel(blockId.suffixed(suffix), builder); + } + + @Override + public BlockModelTemplates blockTemplates() { + return templates; + } +} diff --git a/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/resources/fabric.mod.json b/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/resources/fabric.mod.json index c0d72f1a1..3dde67e4a 100644 --- a/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/resources/fabric.mod.json +++ b/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/resources/fabric.mod.json @@ -15,7 +15,7 @@ "depends": { "fabricloader": "\u003e\u003d0.18.0", "minecraft": "\u003e\u003d1.14-alpha.18.43.a \u003c\u003d1.14.4", - "osl-core": "\u003e\u003d0.8.0", + "osl-core": "\u003e\u003d0.10.0", "osl-entrypoints": "\u003e\u003d0.5.0", "osl-lifecycle-events": "\u003e\u003d0.6.0", "osl-executors": "\u003e\u003d0.1.0", @@ -23,7 +23,9 @@ "osl-networking": "\u003e\u003d0.10.0", "osl-networking-impl": "\u003e\u003d0.2.0", "osl-registries": "\u003e\u003d0.1.0", - "osl-resource-loader": "\u003e\u003d0.8.0" + "osl-resource-loader": "\u003e\u003d0.8.0", + "osl-blocks": "\u003e\u003d0.2.0", + "osl-items": "\u003e\u003d0.2.0" }, "name": "OSL Data Gen", "description": "Data Generator api.", diff --git a/libraries/data-gen/gradle.properties b/libraries/data-gen/gradle.properties index 5dd05c738..84a9b26c1 100644 --- a/libraries/data-gen/gradle.properties +++ b/libraries/data-gen/gradle.properties @@ -4,4 +4,4 @@ library_description = Data Generator api. library_version = 0.1.0-alpha.1 entrypoint_init = net.ornithemc.osl.datagen.impl.DataGeneratorInit -osl_dependencies = core:0.8.0,entrypoints:0.5.0,registries:0.1.0,resource-loader:0.8.0 +osl_dependencies = core:0.8.0,entrypoints:0.5.0,registries:0.1.0,resource-loader:0.8.0,blocks:0.2.0,items:0.2.0 diff --git a/libraries/data-gen/src/main/java/net/ornithemc/osl/datagen/api/provider/GsonPackProvider.java b/libraries/data-gen/src/main/java/net/ornithemc/osl/datagen/api/provider/GsonPackProvider.java index 75be4f920..0e287a796 100644 --- a/libraries/data-gen/src/main/java/net/ornithemc/osl/datagen/api/provider/GsonPackProvider.java +++ b/libraries/data-gen/src/main/java/net/ornithemc/osl/datagen/api/provider/GsonPackProvider.java @@ -2,7 +2,7 @@ import com.google.gson.Gson; import com.google.gson.GsonBuilder; -import com.google.gson.JsonObject; +import com.google.gson.JsonElement; import net.fabricmc.loader.api.ModContainer; import net.ornithemc.osl.core.api.util.NamespacedIdentifier; import net.ornithemc.osl.datagen.api.PackGenerator; @@ -39,7 +39,7 @@ public void provide(PackCache cache) { }); } - protected abstract void generate(BiConsumer consumer); + protected abstract void generate(BiConsumer consumer); protected abstract Path getPath(NamespacedIdentifier id); }