From 9c5c5121cb769eeccf06d66ef37cc999189d2293 Mon Sep 17 00:00:00 2001 From: Cat Core Date: Wed, 16 Sep 2026 16:30:49 +0200 Subject: [PATCH 01/12] 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 33bc9646e..74d08a168 100644 --- a/settings.gradle +++ b/settings.gradle @@ -191,3 +191,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 6d13b56bf171f27c2577732f35e972b691e970b7 Mon Sep 17 00:00:00 2001 From: Cat Core Date: Wed, 16 Sep 2026 19:39:05 +0200 Subject: [PATCH 02/12] 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 8a40dde46877fd4cabf964afc2be9d2992f97fd4 Mon Sep 17 00:00:00 2001 From: Cat Core Date: Fri, 18 Sep 2026 23:01:13 +0200 Subject: [PATCH 03/12] 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 4a2b9d2b6f8579cecbe9ce633d671160db64d398 Mon Sep 17 00:00:00 2001 From: Cat Core Date: Mon, 21 Sep 2026 21:01:05 +0200 Subject: [PATCH 04/12] 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 74d08a168..9c74a3a2b 100644 --- a/settings.gradle +++ b/settings.gradle @@ -193,4 +193,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 03b808790d629b35d166386f220e4cf9bb514725 Mon Sep 17 00:00:00 2001 From: Cat Core Date: Tue, 22 Sep 2026 14:35:02 +0200 Subject: [PATCH 05/12] 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); } From 3c5f4d1b916f295941fe5beda5b9f7a7e562ade0 Mon Sep 17 00:00:00 2001 From: Cat Core Date: Mon, 5 Oct 2026 12:25:44 +0200 Subject: [PATCH 06/12] Improvements to the way providers are registered in the PackGenerator --- .../api/provider/ModModelProvider.java | 2 +- .../api/provider/ModRecipesProvider.java | 1 + .../osl/datagen/impl/DataGenMixinPlugin.java | 51 ------------------- .../datagen/impl/ModDataGeneratorImpl.java | 4 +- .../datagen/impl/PackDataGeneratorImpl.java | 36 ++++++++++++- .../impl/mixin/C_23159014NewMixin.java | 3 ++ .../impl/mixin/C_23159014OldMixin.java | 3 ++ .../impl/mixin/DataGeneratorMixin.java | 12 ----- .../main/resources/osl.data-gen.classtweaker | 4 +- .../main/resources/osl.data-gen.mixins.json | 2 +- .../osl/datagen/api/PackGenerator.java | 6 ++- 11 files changed, 52 insertions(+), 72 deletions(-) delete mode 100644 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-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 index a7fdcdb7f..fa8b45d15 100644 --- 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 @@ -13,7 +13,7 @@ import java.nio.file.Path; import java.util.function.BiConsumer; -public abstract class ModModelProvider extends GsonPackProvider{ +public abstract class ModModelProvider extends GsonPackProvider { protected ModModelProvider(PackGenerator generator, ModContainer mod) { super(generator, mod); } diff --git a/libraries/data-gen/data-gen-mc18w43a-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 index 523ceefca..7804f2238 100644 --- a/libraries/data-gen/data-gen-mc18w43a-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 @@ -2,6 +2,7 @@ import com.google.common.collect.Sets; import com.google.gson.JsonObject; +import net.fabricmc.loader.api.ModContainer; import net.minecraft.data.DataGenerator; import net.minecraft.data.HashCache; import net.minecraft.data.recipe.RecipesProvider; diff --git a/libraries/data-gen/data-gen-mc18w43a-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 deleted file mode 100644 index 50c1fcd86..000000000 --- a/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/DataGenMixinPlugin.java +++ /dev/null @@ -1,51 +0,0 @@ -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-mc18w43a-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 index c363ef8e2..0f9c82b0a 100644 --- a/libraries/data-gen/data-gen-mc18w43a-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 @@ -25,14 +25,14 @@ public ModDataGeneratorImpl(Path basePath, ModContainer modContainer) { @Override public PackGenerator createPack() { - DataGenerator generator = new PackDataGeneratorImpl(basePath, Collections.emptySet(), modContainer.getMetadata().getDescription()); + DataGenerator generator = new PackDataGeneratorImpl(basePath, Collections.emptySet(), modContainer.getMetadata().getDescription(), modContainer); generators.add(generator); return generator; } @Override public PackGenerator createBuiltinResourcePack(NamespacedIdentifier id) { - DataGenerator generator = new PackDataGeneratorImpl(basePath.resolve(id.prefixed("resourcepacks/").identifier()), Collections.emptySet(), id.toString()); + DataGenerator generator = new PackDataGeneratorImpl(basePath.resolve(id.prefixed("resourcepacks/").identifier()), Collections.emptySet(), id.toString(), modContainer); generators.add(generator); return generator; } diff --git a/libraries/data-gen/data-gen-mc18w43a-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 index 775409620..8d6b73985 100644 --- a/libraries/data-gen/data-gen-mc18w43a-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 @@ -1,14 +1,46 @@ package net.ornithemc.osl.datagen.impl; +import net.fabricmc.loader.api.ModContainer; 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.provider.MCMetaProvider; +import net.ornithemc.osl.datagen.impl.wrapper.PackProviderWrapper; import java.nio.file.Path; import java.util.Collection; +import java.util.function.BiFunction; +import java.util.function.Function; public class PackDataGeneratorImpl extends DataGenerator { - public PackDataGeneratorImpl(Path output, Collection inputs, String description) { + private final ModContainer mod; + + public PackDataGeneratorImpl(Path output, Collection inputs, String description, ModContainer mod) { super(output, inputs); - this.addProvider(new MCMetaProvider(this, description)); + this.mod = mod; + this.addProvider((p, m) -> new MCMetaProvider(p, description)); + } + + @Override + public void addProvider(BiFunction providerFunction) { + PackProvider provider = providerFunction.apply(this, this.mod); + + if (provider instanceof DataProvider) { + addProvider((DataProvider) provider); + } else { + addProvider(new PackProviderWrapper(provider)); + } + } + + @Override + public void addProvider(Function providerFunction) { + PackProvider provider = providerFunction.apply(this); + + if (provider instanceof DataProvider) { + addProvider((DataProvider) provider); + } else { + addProvider(new PackProviderWrapper(provider)); + } } } diff --git a/libraries/data-gen/data-gen-mc18w43a-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 index 003acf19c..188c1ab62 100644 --- a/libraries/data-gen/data-gen-mc18w43a-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 @@ -2,10 +2,13 @@ import com.google.gson.JsonObject; import net.minecraft.unmapped.C_23159014; +import net.ornithemc.conditionalmixin.annotations.Conditional; +import net.ornithemc.conditionalmixin.annotations.Version; import net.ornithemc.osl.datagen.impl.access.RecipeBuilderAccess; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; +@Conditional(minecraftVersion = @Version(">=19w03a")) @Mixin(C_23159014.class) public interface C_23159014NewMixin extends RecipeBuilderAccess { @Shadow diff --git a/libraries/data-gen/data-gen-mc18w43a-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 index 8001fc529..34937238c 100644 --- a/libraries/data-gen/data-gen-mc18w43a-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 @@ -2,10 +2,13 @@ import com.google.gson.JsonObject; import net.minecraft.unmapped.C_23159014; +import net.ornithemc.conditionalmixin.annotations.Conditional; +import net.ornithemc.conditionalmixin.annotations.Version; import net.ornithemc.osl.datagen.impl.access.RecipeBuilderAccess; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; +@Conditional(minecraftVersion = @Version("<19w03a")) @Mixin(C_23159014.class) public interface C_23159014OldMixin extends RecipeBuilderAccess { @Shadow diff --git a/libraries/data-gen/data-gen-mc18w43a-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 index ce2c6baeb..ee1e5c4c8 100644 --- a/libraries/data-gen/data-gen-mc18w43a-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 @@ -12,21 +12,9 @@ @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-mc18w43a-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 index 30b3574b2..4f13f7a7c 100644 --- a/libraries/data-gen/data-gen-mc18w43a-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 @@ -7,8 +7,8 @@ transitive-accessible method net/minecraft/data/recipe/RecipesProvider m_5336340 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/DataProvider net/ornithemc/osl/datagen/impl/PackProviderExtension 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 +accessible method net/minecraft/data/recipe/RecipesProvider saveAdvancement (Lnet/minecraft/data/HashCache;Lcom/google/gson/JsonObject;Ljava/nio/file/Path;)V diff --git a/libraries/data-gen/data-gen-mc18w43a-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 index 5cf9acaf3..0019af499 100644 --- a/libraries/data-gen/data-gen-mc18w43a-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 @@ -3,7 +3,7 @@ "minVersion": "0.8", "package": "net.ornithemc.osl.datagen.impl.mixin", "compatibilityLevel": "JAVA_8", - "plugin": "net.ornithemc.osl.datagen.impl.DataGenMixinPlugin", + "plugin": "net.ornithemc.conditionalmixin.mixin.ConditionalMixinPlugin", "mixins": [ "C_23159014NewMixin", "C_23159014OldMixin", 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 index 52e075f7a..47116edf1 100644 --- 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 @@ -1,10 +1,14 @@ package net.ornithemc.osl.datagen.api; +import net.fabricmc.loader.api.ModContainer; import net.ornithemc.osl.datagen.api.provider.PackProvider; import java.nio.file.Path; +import java.util.function.BiFunction; +import java.util.function.Function; public interface PackGenerator { - void addProvider(PackProvider provider); + void addProvider(BiFunction provider); + void addProvider(Function provider); Path getOutputPath(); } From 2ac4c6a7fe685c73c692a46842e5a44b9aa4c193 Mon Sep 17 00:00:00 2001 From: Cat Core Date: Mon, 5 Oct 2026 13:38:49 +0200 Subject: [PATCH 07/12] Add documentation to the data-gen module. --- libraries/data-gen/README.md | 66 +++++++ .../osl/datagen/api/model/ModelBuilder.java | 27 +++ .../osl/datagen/api/model/ModelGenerator.java | 46 +++++ .../block/BlockModelDefinitionBuilder.java | 91 +++++++++ .../api/model/block/BlockModelTemplates.java | 172 ++++++++++++++++++ .../api/model/block/ConditionsBuilder.java | 67 +++++-- .../api/model/block/VariantsBuilder.java | 39 ++++ .../api/model/item/ItemModelTemplates.java | 16 ++ .../api/provider/ModAdvancementProvider.java | 10 + .../api/provider/ModLanguageProvider.java | 55 ++++++ .../api/provider/ModLootTablesProvider.java | 8 + .../api/provider/ModModelProvider.java | 32 ++++ .../api/provider/ModRecipesProvider.java | 9 + .../datagen/api/DataGeneratorInitializer.java | 3 + .../osl/datagen/api/ModDataGenerator.java | 12 ++ .../ornithemc/osl/datagen/api/PackCache.java | 16 ++ .../osl/datagen/api/PackGenerator.java | 12 ++ .../api/provider/GsonPackProvider.java | 12 ++ .../datagen/api/provider/PackProvider.java | 13 ++ 19 files changed, 692 insertions(+), 14 deletions(-) create mode 100644 libraries/data-gen/README.md diff --git a/libraries/data-gen/README.md b/libraries/data-gen/README.md new file mode 100644 index 000000000..4c7cd970a --- /dev/null +++ b/libraries/data-gen/README.md @@ -0,0 +1,66 @@ +# Data Generator API + +The Data Generator API is a library that provides a simple and intuitive way to generate data files for Minecraft mods. +It allows mod developers to easily create block models, item models, and other data files without having to manually write JSON files. + +## Registering Data Generators +### Entrypoint + +The Data Generator API provides an entrypoint that allows mod developers to register their data generators. +This entrypoint is used to register the data generators that will be used to generate the data files for the mod. + +An example is shown below. + +`fabric.mod.json` +```json +{ + ... + "entrypoints": { + ... + "datagen": [ + "com.example.ExampleDataGenerator" + ], + ... + }, + ... +} +``` + +```java +package com.example; + +import net.ornithemc.osl.datagen.api.DataGeneratorInitializer; + +public class ExampleDataGenerator implements DataGeneratorInitializer { + @Override + public void onDatagenInit(ModDataGenerator dataGenerator) { + PackGenerator pack = dataGenerator.createPack(); + pack.addProvider(ExampleModelProvider::new); + } +} +``` + +### Pack Providers + +Pack providers are used to provide data to the pack generator. +There are a few builtin providers, such as the model provider, and language provider. + +An example for the model provider is shown below. + +```java +package com.example; + +public class ExampleModelProvider extends ModModelProvider { + public ExampleModelProvider(PackGenerator generator, ModContainer mod) { + super(generator, mod); + } + + public void generateModels(ModelGenerator generator) { + BlockModelTemplates templates = generator.blockTemplates(); + templates.simpleBlock(Blocks.OAK_PLANKS, block("oak_planks")); + } +} +``` + +Vanilla DataProviders can also be extended to provide data such as tags. +In the extended constructor, replace DataGenerator with PackGenerator and upcast it back to DataGenerator. 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 index eb0e12b3e..07a9c1c80 100644 --- 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 @@ -6,23 +6,50 @@ import java.util.HashMap; import java.util.Map; +/** + * Represents a block or item model. + */ public class ModelBuilder { private NamespacedIdentifier parent; private Map textures = new HashMap<>(); + /** + * Creates a new model builder. + * + * @return the model builder + */ public static ModelBuilder create() { return new ModelBuilder(); } + /** + * Creates a new model builder with the given parent. + * + * @param parent the parent model + * @return the model builder + */ public static ModelBuilder create(NamespacedIdentifier parent) { return new ModelBuilder().parent(parent); } + /** + * Sets the parent model. + * + * @param parent the parent model + * @return the model builder + */ public ModelBuilder parent(NamespacedIdentifier parent) { this.parent = parent; return this; } + /** + * Sets the texture path for the given name. + * + * @param name the name of the texture + * @param texture the texture path + * @return the model builder + */ public ModelBuilder texture(String name, NamespacedIdentifier texture) { this.textures.put(name, texture); return this; 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 index 20e83b9f6..8e4effe0b 100644 --- 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 @@ -6,12 +6,58 @@ import net.ornithemc.osl.datagen.api.model.block.BlockModelDefinitionBuilder; import net.ornithemc.osl.datagen.api.model.block.BlockModelTemplates; +/** + * Provides methods for generating model resources. + */ public interface ModelGenerator { + /** + * Generates a blockstate file for the given block. + * + * @param block the block to generate the blockstate for + * @param builder the builder to use for generating the blockstate + */ void blockstate(Block block, BlockModelDefinitionBuilder builder); + + /** + * Generates an item model file for the given item or block item. + * + * @param item the item to generate the item model for + * @param builder the builder to use for generating the item model + */ void itemModel(ItemLike item, ModelBuilder builder); + + /** + * Generates a block model file for the given identifier. + * + * @param identifier the identifier to generate the block model for + * @param builder the builder to use for generating the block model + * @return the generated block model identifier + */ NamespacedIdentifier blockModel(NamespacedIdentifier identifier, ModelBuilder builder); + + /** + * Generates a block model file for the given block. + * + * @param block the block to generate the block model for + * @param builder the builder to use for generating the block model + * @return the generated block model identifier + */ NamespacedIdentifier blockModel(Block block, ModelBuilder builder); + + /** + * Generates a block model file for the given block with the given suffix. + * + * @param block the block to generate the block model for + * @param suffix the suffix to append to the block model identifier + * @param builder the builder to use for generating the block model + * @return the generated block model identifier + */ NamespacedIdentifier blockModel(Block block, String suffix, ModelBuilder builder); + /** + * Returns the block model templates. + * + * @return the block model templates + */ 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 index 1ef1c8b15..ba42477ca 100644 --- 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 @@ -9,6 +9,9 @@ import java.util.*; +/** + * Builder for blockstate model definitions. + */ public class BlockModelDefinitionBuilder { private final Map variants = new HashMap<>(); private final List selectors = new ArrayList<>(); @@ -16,54 +19,126 @@ public class BlockModelDefinitionBuilder { private BlockModelDefinitionBuilder() { } + /** + * Creates a new block model definition builder. + * + * @return the new block model definition builder + */ public static BlockModelDefinitionBuilder create() { return new BlockModelDefinitionBuilder(); } + /** + * Creates a new block model definition builder with a default variant. + * + * @param modelLocation the model location + * @return the new block model definition builder + */ public static BlockModelDefinitionBuilder createSimple(NamespacedIdentifier modelLocation) { return new BlockModelDefinitionBuilder().variant("", VariantsBuilder.of(modelLocation)); } + /** + * Adds a variant to the block model definition. + * + * @param state the block state predicate + * @param variants the variants builder + * @return this builder + */ public BlockModelDefinitionBuilder variant(BlockState state, VariantsBuilder variants) { this.variants.put(BlockModelShaper.propertiesToString(state.values()), variants); return this; } + /** + * Adds a variant to the block model definition. + * + * @param state the block state predicate + * @param modelLocation the model location + * @return this builder + */ public BlockModelDefinitionBuilder variant(BlockState state, NamespacedIdentifier modelLocation) { this.variants.put(BlockModelShaper.propertiesToString(state.values()), VariantsBuilder.of(modelLocation)); return this; } + /** + * Adds a variant to the block model definition. + * + * @param predicateBuilder the blockstate predicate builder + * @param variants the variants builder + * @return this builder + */ public BlockModelDefinitionBuilder variant(PredicateBuilder predicateBuilder, VariantsBuilder variants) { this.variants.put(predicateBuilder.build(), variants); return this; } + /** + * Adds a variant to the block model definition. + * + * @param predicateBuilder the blockstate predicate builder + * @param modelLocation the model location + * @return this builder + */ public BlockModelDefinitionBuilder variant(PredicateBuilder predicateBuilder, NamespacedIdentifier modelLocation) { this.variants.put(predicateBuilder.build(), VariantsBuilder.of(modelLocation)); return this; } + /** + * Adds a variant to the block model definition. + * + * @param variantName the variant name + * @param variants the variants builder + * @return this builder + */ private BlockModelDefinitionBuilder variant(String variantName, VariantsBuilder variants) { this.variants.put(variantName, variants); return this; } + /** + * Adds a selector to the block model definition. + * + * @param variants the variants builder + * @return this builder + */ public BlockModelDefinitionBuilder selector(VariantsBuilder variants) { this.selectors.add(new SelectorBuilder(null, variants)); return this; } + /** + * Adds a selector to the block model definition. + * + * @param modelLocation the model location + * @return this builder + */ public BlockModelDefinitionBuilder selector(NamespacedIdentifier modelLocation) { this.selectors.add(new SelectorBuilder(null, VariantsBuilder.of(modelLocation))); return this; } + /** + * Adds a selector to the block model definition. + * + * @param conditions the conditions builder + * @param variants the variants builder + * @return this builder + */ public BlockModelDefinitionBuilder selector(ConditionsBuilder conditions, VariantsBuilder variants) { this.selectors.add(new SelectorBuilder(conditions, variants)); return this; } + /** + * Adds a selector to the block model definition. + * + * @param conditions the conditions builder + * @param modelLocation the model location + * @return this builder + */ public BlockModelDefinitionBuilder selector(ConditionsBuilder conditions, NamespacedIdentifier modelLocation) { this.selectors.add(new SelectorBuilder(conditions, VariantsBuilder.of(modelLocation))); return this; @@ -118,6 +193,14 @@ private JsonObject build() { } } + /** + * Creates a predicate builder with the specified property and value. + * + * @param property the property + * @param value the value + * @return the predicate builder + * @param the property type + */ public static > PredicateBuilder predicate(Property property, T value) { return new PredicateBuilder().set(property, value); } @@ -125,6 +208,14 @@ public static > PredicateBuilder predicate(Property p public static class PredicateBuilder { private final Map, Comparable> predicates = new HashMap<>(); + /** + * Sets the specified property and value. + * + * @param property the property + * @param value the value + * @return this builder + * @param the property type + */ public > PredicateBuilder set(Property property, T value) { predicates.put(property, value); return this; 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 index 6365db111..84b3eefb6 100644 --- 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 @@ -5,14 +5,84 @@ import net.ornithemc.osl.core.api.util.NamespacedIdentifiers; import net.ornithemc.osl.datagen.api.model.ModelBuilder; +/** + * A collection of block model and definition templates. + */ public interface BlockModelTemplates { + /** + * Creates a simple block model, definition, and item model with the given texture. + * + * @param block the block + * @param texture the texture + */ BlockModelTemplates simpleBlock(Block block, NamespacedIdentifier texture); + + /** + * Creates a simple block model, definition, and item model with the given textures. + * + * @param block the block + * @param firstLayer the first texture + * @param secondLayer the second texture + */ + BlockModelTemplates simpleBlock(Block block, NamespacedIdentifier firstLayer, NamespacedIdentifier secondLayer); + + /** + * Creates a simple block model, definition, without an item model with the given texture. + * + * @param block the block + * @param texture the texture + */ BlockModelTemplates simpleBlockWithoutItem(Block block, NamespacedIdentifier texture); + + /** + * Creates a slab block model, definition, and item model with the given textures. + * + * @param block the block + * @param doubleModelLocation the double slab model location + * @param sideTexture the side texture + * @param topTexture the top texture + * @param bottomTexture the bottom texture + */ BlockModelTemplates slab(Block block, NamespacedIdentifier doubleModelLocation, NamespacedIdentifier sideTexture, NamespacedIdentifier topTexture, NamespacedIdentifier bottomTexture); + + /** + * Creates a slab block model, definition, and item model with the given texture. + * + * @param block the block + * @param doubleModelLocation the double slab model location + * @param texture the texture + */ BlockModelTemplates simpleSlab(Block block, NamespacedIdentifier doubleModelLocation, NamespacedIdentifier texture); + + /** + * Creates a stairs block model, definition, and item model with the given textures. + * + * @param block the block + * @param sideTexture the side texture + * @param topTexture the top texture + * @param bottomTexture the bottom texture + */ BlockModelTemplates stairs(Block block, NamespacedIdentifier sideTexture, NamespacedIdentifier topTexture, NamespacedIdentifier bottomTexture); + + /** + * Creates a stairs block model, definition, and item model with the given texture. + * + * @param block the block + * @param texture the texture + */ BlockModelTemplates simpleStairs(Block block, NamespacedIdentifier texture); + /** + * Creates a cube block model with the given textures. + * + * @param downTexture the bottom texture + * @param upTexture the top texture + * @param northTexture the north texture + * @param southTexture the south texture + * @param westTexture the west texture + * @param eastTexture the east texture + * @return the model builder + */ static ModelBuilder cube( NamespacedIdentifier downTexture, NamespacedIdentifier upTexture, @@ -30,10 +100,24 @@ static ModelBuilder cube( .texture("east", eastTexture); } + /** + * Creates a cube block model with the given texture for all sides. + * + * @param texture the texture + * @return the model builder + */ static ModelBuilder cubeAll(NamespacedIdentifier texture) { return ModelBuilder.create(NamespacedIdentifiers.from("block/cube_all")).texture("all", texture); } + /** + * Creates a cube block model with the given textures. + * + * @param sideTexture the side texture + * @param topTexture the top texture + * @param bottomTexture the bottom texture + * @return the model builder + */ static ModelBuilder cubeBottomTop(NamespacedIdentifier sideTexture, NamespacedIdentifier topTexture, NamespacedIdentifier bottomTexture) { return ModelBuilder.create(NamespacedIdentifiers.from("block/cube_bottom_top")) .texture("side", sideTexture) @@ -41,12 +125,30 @@ static ModelBuilder cubeBottomTop(NamespacedIdentifier sideTexture, NamespacedId .texture("top", topTexture); } + /** + * Creates a cube block model with the given textures for the sides and a different texture for the ends. + * + * @param sideTexture the side texture + * @param endTexture the end texture + * @return the model builder + */ static ModelBuilder cubeColumn(NamespacedIdentifier sideTexture, NamespacedIdentifier endTexture) { return ModelBuilder.create(NamespacedIdentifiers.from("block/cube_column")) .texture("side", sideTexture) .texture("end", endTexture); } + /** + * Creates a cube block model with the given textures for the sides and different textures for the ends. + * + * @param downTexture the bottom texture + * @param upTexture the top texture + * @param northTexture the north texture + * @param southTexture the south texture + * @param westTexture the west texture + * @param eastTexture the east texture + * @return the model builder + */ static ModelBuilder cubeDirectional( NamespacedIdentifier downTexture, NamespacedIdentifier upTexture, @@ -64,6 +166,17 @@ static ModelBuilder cubeDirectional( .texture("east", eastTexture); } + /** + * Creates a cube block model with the given texture for all sides mirrored. + * + * @param downTexture the bottom texture + * @param upTexture the top texture + * @param northTexture the north texture + * @param southTexture the south texture + * @param westTexture the west texture + * @param eastTexture the east texture + * @return the model builder + */ static ModelBuilder cubeMirrored( NamespacedIdentifier downTexture, NamespacedIdentifier upTexture, @@ -81,16 +194,37 @@ static ModelBuilder cubeMirrored( .texture("east", eastTexture); } + /** + * Creates a cube block model with the given texture for all sides mirrored. + * + * @param texture the texture + * @return the model builder + */ static ModelBuilder cubeAllMirrored(NamespacedIdentifier texture) { return ModelBuilder.create(NamespacedIdentifiers.from("block/cube_all_mirrored")).texture("all", texture); } + /** + * Creates a cube block model with the given texture for the sides and a different texture for the top. + * + * @param sideTexture the side texture + * @param topTexture the top texture + * @return the model builder + */ static ModelBuilder cubeTop(NamespacedIdentifier sideTexture, NamespacedIdentifier topTexture) { return ModelBuilder.create(NamespacedIdentifiers.from("block/cube_top")) .texture("side", sideTexture) .texture("top", topTexture); } + /** + * Creates a bottom slab block model with the given textures. + * + * @param sideTexture the side texture + * @param topTexture the top texture + * @param bottomTexture the bottom texture + * @return the model builder + */ static ModelBuilder slabBottom(NamespacedIdentifier sideTexture, NamespacedIdentifier topTexture, NamespacedIdentifier bottomTexture) { return ModelBuilder.create(NamespacedIdentifiers.from("block/slab")) .texture("side", sideTexture) @@ -98,6 +232,14 @@ static ModelBuilder slabBottom(NamespacedIdentifier sideTexture, NamespacedIdent .texture("bottom", bottomTexture); } + /** + * Creates a top slab block model with the given textures. + * + * @param sideTexture the side texture + * @param topTexture the top texture + * @param bottomTexture the bottom texture + * @return the model builder + */ static ModelBuilder slabTop(NamespacedIdentifier sideTexture, NamespacedIdentifier topTexture, NamespacedIdentifier bottomTexture) { return ModelBuilder.create(NamespacedIdentifiers.from("block/slab_top")) .texture("side", sideTexture) @@ -105,10 +247,24 @@ static ModelBuilder slabTop(NamespacedIdentifier sideTexture, NamespacedIdentifi .texture("bottom", bottomTexture); } + /** + * Creates a cross-like block model with the given texture. + * + * @param texture the texture + * @return the model builder + */ static ModelBuilder cross(NamespacedIdentifier texture) { return ModelBuilder.create(NamespacedIdentifiers.from("block/cross")).texture("cross", texture); } + /** + * Creates a stairs block model with the given textures. + * + * @param sideTexture the side texture + * @param topTexture the top texture + * @param bottomTexture the bottom texture + * @return the model builder + */ static ModelBuilder stairs(NamespacedIdentifier sideTexture, NamespacedIdentifier topTexture, NamespacedIdentifier bottomTexture) { return ModelBuilder.create(NamespacedIdentifiers.from("block/stairs")) .texture("side", sideTexture) @@ -116,6 +272,14 @@ static ModelBuilder stairs(NamespacedIdentifier sideTexture, NamespacedIdentifie .texture("bottom", bottomTexture); } + /** + * Creates an inner stairs block model with the given textures. + * + * @param sideTexture the side texture + * @param topTexture the top texture + * @param bottomTexture the bottom texture + * @return the model builder + */ static ModelBuilder stairsInner(NamespacedIdentifier sideTexture, NamespacedIdentifier topTexture, NamespacedIdentifier bottomTexture) { return ModelBuilder.create(NamespacedIdentifiers.from("block/inner_stairs")) .texture("side", sideTexture) @@ -123,6 +287,14 @@ static ModelBuilder stairsInner(NamespacedIdentifier sideTexture, NamespacedIden .texture("bottom", bottomTexture); } + /** + * Creates an outer stairs block model with the given textures. + * + * @param sideTexture the side texture + * @param topTexture the top texture + * @param bottomTexture the bottom texture + * @return the model builder + */ static ModelBuilder stairsOuter(NamespacedIdentifier sideTexture, NamespacedIdentifier topTexture, NamespacedIdentifier bottomTexture) { return ModelBuilder.create(NamespacedIdentifiers.from("block/outer_stairs")) .texture("side", sideTexture) 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 index 324d955c1..825d14359 100644 --- 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 @@ -10,26 +10,53 @@ import java.util.List; import java.util.stream.Collectors; +/** + * Represents block model definition selector conditions. + */ public interface ConditionsBuilder { JsonObject build(); + /** + * Creates an inverted property predicate with the specified property and values. + * + * @param property the property + * @param mainMatch the main match value + * @param extraPossibleMatch the extra possible match values + * @param the type of the property + * @return the property builder + */ @SafeVarargs - static > PropertyBuilder propertyNegated(Property property, @NotNull T mainMatch, T... extraPossibleMatch) { + static > PropertyPredicate propertyInverted(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); + return new PropertyPredicate<>(false, property, valueList); } + /** + * Creates a property predicate with the specified property and values. + * + * @param property the property + * @param mainMatch the main match value + * @param extraPossibleMatch the extra possible match values + * @param the type of the property + * @return the property builder + */ @SafeVarargs - static > PropertyBuilder property(Property property, @NotNull T mainMatch, T... extraPossibleMatch) { + static > PropertyPredicate 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); + return new PropertyPredicate<>(false, property, valueList); } - static ConditionsBuilder properties(PropertyBuilder...properties) { + /** + * Creates a simple conditions builder with the specified properties. + * + * @param properties the properties + * @return the conditions builder + */ + static ConditionsBuilder properties(PropertyPredicate...properties) { if (properties.length == 0) { throw new IllegalArgumentException("Must provide at least one property"); } @@ -37,6 +64,12 @@ static ConditionsBuilder properties(PropertyBuilder...properties) { return new PropertyConditionBuilder(properties); } + /** + * Creates a "or" conditions builder with the specified conditions. + * + * @param conditions the conditions + * @return the conditions builder + */ static ConditionsBuilder or(ConditionsBuilder...conditions) { if (conditions.length == 0) { throw new IllegalArgumentException("Must provide at least one condition"); @@ -45,6 +78,12 @@ static ConditionsBuilder or(ConditionsBuilder...conditions) { return new OrConditonBuilder(conditions); } + /** + * Creates a "and" conditions builder with the specified conditions. + * + * @param conditions the conditions + * @return the conditions builder + */ static ConditionsBuilder and(ConditionsBuilder...conditions) { if (conditions.length == 0) { throw new IllegalArgumentException("Must provide at least one condition"); @@ -53,26 +92,26 @@ static ConditionsBuilder and(ConditionsBuilder...conditions) { return new AndConditonBuilder(conditions); } - class PropertyBuilder> { - private final boolean negated; + class PropertyPredicate> { + private final boolean inverted; private final Property property; private final List values; - private PropertyBuilder(boolean negated, Property property, List values) { - this.negated = negated; + private PropertyPredicate(boolean inverted, Property property, List values) { + this.inverted = inverted; this.property = property; this.values = values; } private void write(JsonObject object) { - object.addProperty(property.getName(), (negated ? "!" : "") + values.stream().map(property::getName).collect(Collectors.joining("|"))); + object.addProperty(property.getName(), (inverted ? "!" : "") + values.stream().map(property::getName).collect(Collectors.joining("|"))); } } class PropertyConditionBuilder implements ConditionsBuilder { - private final PropertyBuilder[] properties; + private final PropertyPredicate[] properties; - private PropertyConditionBuilder(PropertyBuilder[] properties) { + private PropertyConditionBuilder(PropertyPredicate[] properties) { this.properties = properties; } @@ -80,8 +119,8 @@ private PropertyConditionBuilder(PropertyBuilder[] properties) { public JsonObject build() { JsonObject object = new JsonObject(); - for (PropertyBuilder propertyBuilder : properties) { - propertyBuilder.write(object); + for (PropertyPredicate propertyPredicate : properties) { + propertyPredicate.write(object); } 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 index d67d29fbe..a0709a762 100644 --- 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 @@ -6,13 +6,28 @@ import net.minecraft.client.resource.model.ModelRotation; import net.ornithemc.osl.core.api.util.NamespacedIdentifier; +/** + * Represents block model definition variants. + */ public interface VariantsBuilder { JsonElement build(); + /** + * Creates a variant builder with the specified model location. + * + * @param modelLocation the model location + * @return the variant builder + */ static VariantBuilder of(NamespacedIdentifier modelLocation) { return new VariantBuilder(modelLocation); } + /** + * Creates a multi-variant builder with the specified variants. + * + * @param variants the variants + * @return the multi-variant builder + */ static VariantsBuilder multi(VariantBuilder... variants) { if (variants.length == 0) { throw new IllegalArgumentException("Must provide at least one variant"); @@ -32,6 +47,12 @@ private VariantBuilder(NamespacedIdentifier modelLocation) { this.modelLocation = modelLocation; } + /** + * Sets the x rotation of the model. + * + * @param x the x rotation + * @return the variant builder + */ public VariantBuilder x(int x) { ModelRotation rotation = ModelRotation.by(x, y); @@ -43,6 +64,12 @@ public VariantBuilder x(int x) { return this; } + /** + * Sets the y rotation of the model. + * + * @param y the y rotation + * @return the variant builder + */ public VariantBuilder y(int y) { ModelRotation rotation = ModelRotation.by(x, y); @@ -54,11 +81,23 @@ public VariantBuilder y(int y) { return this; } + /** + * Sets whether the UV coordinates of the model should be locked. + * + * @param lockUV whether the UV coordinates should be locked + * @return the variant builder + */ public VariantBuilder lockedUV(boolean lockUV) { this.lockedUV = lockUV; return this; } + /** + * Sets the weight of the variant. + * + * @param weight the weight + * @return the variant builder + */ public VariantBuilder weight(int weight) { if (weight <= 0) { throw new IllegalArgumentException("Weight must be greater than 0"); 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 index bd9848282..05919f024 100644 --- 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 @@ -4,11 +4,27 @@ import net.ornithemc.osl.core.api.util.NamespacedIdentifiers; import net.ornithemc.osl.datagen.api.model.ModelBuilder; +/** + * A collection of item model templates. + */ public final class ItemModelTemplates { + /** + * Creates a basic item model with the given texture. + * + * @param texture the texture + * @return the model builder + */ public static ModelBuilder basic(NamespacedIdentifier texture) { return ModelBuilder.create(NamespacedIdentifiers.from("item/generated")).texture("layer0", texture); } + /** + * Creates a basic item model with the given textures. + * + * @param firstLayer the first texture + * @param secondLayer the second texture + * @return the model builder + */ 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 d2de35180..8b9dc30a4 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 @@ -12,6 +12,9 @@ import java.util.function.BiConsumer; import java.util.function.Consumer; +/** + * A PackProvider for generating advancements. + */ public abstract class ModAdvancementProvider extends GsonPackProvider { protected ModAdvancementProvider(PackGenerator generator, ModContainer mod) { super(generator, mod); @@ -26,6 +29,13 @@ protected final void generate(BiConsumer cons generateAdvancements(advancementConsumer); } + /** + * Generates advancements. + *

+ * Use {@link Advancement#builder()} to create advancements before passing them to the consumer. + * + * @param consumer the consumer to accept the advancements + */ public abstract void generateAdvancements(Consumer consumer); @Override 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 04b0217ef..bf259a4d7 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 @@ -18,14 +18,31 @@ import java.util.Map; import java.util.function.BiConsumer; +/** + * A provider for language files generated by a ModDataGenerator. + */ public abstract class ModLanguageProvider extends GsonPackProvider { private final String languageCode; + /** + * Constructs a {@code ModLanguageProvider} with the specified generator, mod, and language code. + * + * @param generator the pack generator responsible for creating and registering resources + * @param mod the mod container providing metadata and context for the mod + * @param languageCode the language code to use for the language file + */ protected ModLanguageProvider(PackGenerator generator, ModContainer mod, String languageCode) { super(generator, mod); this.languageCode = languageCode; } + /** + * Constructs a {@code ModLanguageProvider} with the specified generator and mod, + * using "en_us" as the default language code. + * + * @param generator the pack generator responsible for creating and registering resources + * @param mod the mod container providing metadata and context for the mod + */ protected ModLanguageProvider(PackGenerator generator, ModContainer mod) { this(generator, mod, "en_us"); } @@ -42,6 +59,11 @@ protected final void generate(BiConsumer cons consumer.accept(new Identifier(mod.getMetadata().getId(), this.languageCode), jsonObject); } + /** + * Generates translations for the language file. + * + * @param builder the translation builder to use for adding translations + */ protected abstract void generateTranslations(TranslationBuilder builder); @Override @@ -54,21 +76,54 @@ public String getProviderName() { return String.format("Language (%s)", this.languageCode); } + /** + * A builder for language translations. + */ public interface TranslationBuilder { + /** + * Adds a translation for the specified key and value. + * + * @param key the translation key + * @param value the translation value + */ void add(String key, String value); + /** + * Adds a translation for the specified block and value. + * + * @param block the block to add a translation for + * @param value the translation value + */ default void add(Block block, String value) { this.add(block.getTranslationKey(), value); } + /** + * Adds a translation for the specified item and value. + * + * @param item the item to add a translation for + * @param value the translation value + */ default void add(Item item, String value) { this.add(item.getTranslationKey(), value); } + /** + * Adds a translation for the specified entity type and value. + * + * @param entityType the entity type to add a translation for + * @param value the translation value + */ default void add(EntityType entityType, String value) { this.add(entityType.getTranslationKey(), value); } + /** + * Adds a translation for the specified biome and value. + * + * @param biome the biome to add a translation for + * @param value the translation value + */ default void add(Biome biome, String value) { this.add(biome.getTranslationKey(), value); } 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 3350ce696..2c16aa8b4 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 @@ -12,6 +12,9 @@ import java.nio.file.Path; import java.util.function.BiConsumer; +/** + * A PackProvider to generate loot tables. + */ public abstract class ModLootTablesProvider extends GsonPackProvider { protected ModLootTablesProvider(PackGenerator generator, ModContainer mod) { super(generator, mod); @@ -22,6 +25,11 @@ protected final void generate(BiConsumer cons generateLootTables((id, lootTable) -> consumer.accept(id, LootTables.m_19064268(lootTable.m_74891066()).getAsJsonObject())); } + /** + * Generates loot tables. + * + * @param consumer the consumer to accept the loot tables + */ public abstract void generateLootTables(BiConsumer consumer); @Override 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 index fa8b45d15..3ee53f77e 100644 --- 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 @@ -13,6 +13,9 @@ import java.nio.file.Path; import java.util.function.BiConsumer; +/** + * A PackProvider to generate block and item models. + */ public abstract class ModModelProvider extends GsonPackProvider { protected ModModelProvider(PackGenerator generator, ModContainer mod) { super(generator, mod); @@ -24,20 +27,49 @@ protected final void generate(BiConsumer cons generateModels(modelGenerator); } + /** + * Generates block and item models. + * + * @param generator the generator to register the models + */ public abstract void generateModels(ModelGenerator generator); + /** + * Prefixes the given identifier with "block/". + * + * @param id the identifier to prefix + * @return the prefixed identifier + */ public NamespacedIdentifier block(NamespacedIdentifier id) { return id.suffixed("block/"); } + /** + * Prefixes the given path with "block/". + * + * @param path the path to prefix + * @return the prefixed path as a NamespacedIdentifier + */ public NamespacedIdentifier block(String path) { return block(NamespacedIdentifiers.parse(path)); } + /** + * Prefixes the given identifier with "item/". + * + * @param id the identifier to prefix + * @return the prefixed identifier + */ public NamespacedIdentifier item(NamespacedIdentifier id) { return id.suffixed("item/"); } + /** + * Prefixes the given path with "item/". + * + * @param path the path to prefix + * @return the prefixed path as a NamespacedIdentifier + */ public NamespacedIdentifier item(String path) { return item(NamespacedIdentifiers.parse(path)); } diff --git a/libraries/data-gen/data-gen-mc18w43a-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 index 7804f2238..2bf01df9d 100644 --- a/libraries/data-gen/data-gen-mc18w43a-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 @@ -16,6 +16,9 @@ import java.util.Set; import java.util.function.Consumer; +/** + * A PackProvider for generating recipes. + */ public abstract class ModRecipesProvider extends RecipesProvider { public ModRecipesProvider(PackGenerator generator) { super((DataGenerator) generator); @@ -39,5 +42,11 @@ public final void run(HashCache cache) { }); } + /** + * Generates recipes. + * @see RecipesProvider#buildShapelessRecipes(Consumer) for usage examples. + * + * @param consumer the consumer to accept the recipes + */ protected abstract void generateRecipes(Consumer consumer); } 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 index 928e8b19b..015beaded 100644 --- 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 @@ -1,5 +1,8 @@ package net.ornithemc.osl.datagen.api; +/** + * An initializer for data generators. + */ public interface DataGeneratorInitializer { String KEY = "datagen"; 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 ce93bf75b..e39ec6d57 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 @@ -3,8 +3,20 @@ import net.fabricmc.loader.api.ModContainer; import net.ornithemc.osl.core.api.util.NamespacedIdentifier; +/** + * A data generator for a mod. + */ public interface ModDataGenerator { + /** + * Creates a pack generator for the mod. + */ PackGenerator createPack(); + /** + * Creates a builtin resource pack generator for the mod. + */ PackGenerator createBuiltinResourcePack(NamespacedIdentifier id); + /** + * Returns the mod container assigned to this ModDataGenerator. + */ ModContainer getMod(); } 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 index ca7f24740..680865a39 100644 --- 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 @@ -6,9 +6,25 @@ import java.io.IOException; import java.nio.file.Path; +/** + * A cache for pack resources generated by a ModDataGenerator. + */ public interface PackCache { HashFunction SHA1 = Hashing.sha1(); + /** + * Checks if the data for the given path has changed and writes it to the cache if it has. + * @param path the path to check + * @param data the data to write + * @throws IOException if an I/O error occurs + */ void checkAndWrite(Path path, byte[] data) throws IOException; + + /** + * Checks if the data for the given path has changed and writes it to the cache if it has. + * @param path the path to check + * @param data the data to write + * @throws IOException if an I/O error occurs + */ 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 index 47116edf1..71f1002b2 100644 --- 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 @@ -7,8 +7,20 @@ import java.util.function.BiFunction; import java.util.function.Function; +/** + * A generator for a pack of resources. + */ public interface PackGenerator { + /** + * Adds a provider to the pack. + */ void addProvider(BiFunction provider); + /** + * Adds a provider to the pack. + */ void addProvider(Function provider); + /** + * Returns the output path for the pack. + */ Path getOutputPath(); } 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 0e287a796..26bef27e4 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 @@ -14,6 +14,9 @@ import java.nio.file.Path; import java.util.function.BiConsumer; +/** + * A provider for pack resources generated by a ModDataGenerator that generates JSON files using GSON. + */ public abstract class GsonPackProvider implements PackProvider { private static final Logger LOGGER = LogManager.getLogger(); private static final Gson GSON = (new GsonBuilder()).setPrettyPrinting().create(); @@ -39,7 +42,16 @@ public void provide(PackCache cache) { }); } + /** + * Generates pack resources using the given consumer. + * @param consumer the consumer to generate pack resources with + */ protected abstract void generate(BiConsumer consumer); + /** + * Gets the resource path for the given identifier. + * @param id the identifier + * @return the resource path for the given identifier + */ protected abstract Path getPath(NamespacedIdentifier id); } 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 b192a0082..f2118a93f 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 @@ -4,7 +4,20 @@ import java.io.IOException; +/** + * A provider for pack resources generated by a ModDataGenerator. + */ public interface PackProvider { + /** + * Gets the name of this provider. + * @return the name of this provider + */ String getProviderName(); + + /** + * Provides pack resources to the given cache. + * @param cache the cache to provide pack resources to + * @throws IOException if an I/O error occurs + */ void provide(PackCache cache) throws IOException; } From 9935e56ea836e00a81cbda0f35417dc98a65203a Mon Sep 17 00:00:00 2001 From: Cat Core Date: Mon, 5 Oct 2026 16:06:38 +0200 Subject: [PATCH 08/12] Add more model templates --- .../api/model/block/BlockModelTemplates.java | 317 ++++++- .../impl/model/BlockModelTemplatesImpl.java | 773 +++++++++++++++++- 2 files changed, 1075 insertions(+), 15 deletions(-) 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 index 84b3eefb6..cd337c420 100644 --- 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 @@ -17,15 +17,6 @@ public interface BlockModelTemplates { */ BlockModelTemplates simpleBlock(Block block, NamespacedIdentifier texture); - /** - * Creates a simple block model, definition, and item model with the given textures. - * - * @param block the block - * @param firstLayer the first texture - * @param secondLayer the second texture - */ - BlockModelTemplates simpleBlock(Block block, NamespacedIdentifier firstLayer, NamespacedIdentifier secondLayer); - /** * Creates a simple block model, definition, without an item model with the given texture. * @@ -72,6 +63,80 @@ public interface BlockModelTemplates { */ BlockModelTemplates simpleStairs(Block block, NamespacedIdentifier texture); + /** + * Creates a wall block model, definition, and item model with the given texture. + * + * @param block the block + * @param texture the texture + * @return the model builder + */ + BlockModelTemplates wall(Block block, NamespacedIdentifier texture); + + /** + * Creates a fence block model, definition, and item model with the given texture. + * + * @param block the block + * @param texture the texture + * @return the model builder + */ + BlockModelTemplates fence(Block block, NamespacedIdentifier texture); + + /** + * Creates a button block model, definition, and item model with the given texture. + * + * @param block the block + * @param texture the texture + * @return the model builder + */ + BlockModelTemplates button(Block block, NamespacedIdentifier texture); + + /** + * Creates a door block model, definition, and item model with the given textures. + * + * @param block the block + * @param inventoryTexture the inventory texture + * @param topTexture the top texture + * @param bottomTexture the bottom texture + * @return the model builder + */ + BlockModelTemplates door(Block block, NamespacedIdentifier inventoryTexture, NamespacedIdentifier topTexture, NamespacedIdentifier bottomTexture); + + /** + * Creates a fence gate block model, definition, and item model with the given texture. + * + * @param block the block + * @param texture the texture + * @return the model builder + */ + BlockModelTemplates fenceGate(Block block, NamespacedIdentifier texture); + + /** + * Creates a leaves block model, definition, and item model with the given texture. + * + * @param block the block + * @param texture the texture + * @return the model builder + */ + BlockModelTemplates leaves(Block block, NamespacedIdentifier texture); + + /** + * Creates a pressure plate block model, definition, and item model with the given texture. + * + * @param block the block + * @param texture the texture + * @return the model builder + */ + BlockModelTemplates pressurePlate(Block block, NamespacedIdentifier texture); + + /** + * Creates a trapdoor block model, definition, and item model with the given texture. + * + * @param block the block + * @param texture the texture + * @return the model builder + */ + BlockModelTemplates trapdoor(Block block, NamespacedIdentifier texture); + /** * Creates a cube block model with the given textures. * @@ -301,4 +366,238 @@ static ModelBuilder stairsOuter(NamespacedIdentifier sideTexture, NamespacedIden .texture("top", topTexture) .texture("bottom", bottomTexture); } + + /** + * Creates a wall inventory block model with the given texture. + * + * @param texture the texture + * @return the model builder + */ + static ModelBuilder wallInventory(NamespacedIdentifier texture) { + return ModelBuilder.create(NamespacedIdentifiers.from("block/wall_inventory")).texture("wall", texture); + } + + /** + * Creates a wall post block model with the given texture. + * + * @param texture the texture + * @return the model builder + */ + static ModelBuilder wallPost(NamespacedIdentifier texture) { + return ModelBuilder.create(NamespacedIdentifiers.from("block/template_wall_post")).texture("wall", texture); + } + + /** + * Creates a wall side block model with the given texture. + * + * @param texture the texture + * @return the model builder + */ + static ModelBuilder wallSide(NamespacedIdentifier texture) { + return ModelBuilder.create(NamespacedIdentifiers.from("block/template_wall_side")).texture("wall", texture); + } + + /** + * Creates a fence inventory block model with the given texture. + * + * @param texture the texture + * @return the model builder + */ + static ModelBuilder fenceInventory(NamespacedIdentifier texture) { + return ModelBuilder.create(NamespacedIdentifiers.from("block/fence_inventory")).texture("texture", texture); + } + + /** + * Creates a fence post, block model with the given texture. + * + * @param texture the texture + * @return the model builder + */ + static ModelBuilder fencePost(NamespacedIdentifier texture) { + return ModelBuilder.create(NamespacedIdentifiers.from("block/fence_post")).texture("texture", texture); + } + + /** + * Creates a fence side block model with the given texture. + * + * @param texture the texture + * @return the model builder + */ + static ModelBuilder fenceSide(NamespacedIdentifier texture) { + return ModelBuilder.create(NamespacedIdentifiers.from("block/fence_side")).texture("texture", texture); + } + + /** + * Creates a button block model with the given texture. + * + * @param texture the texture + * @return the model builder + */ + static ModelBuilder button(NamespacedIdentifier texture) { + return ModelBuilder.create(NamespacedIdentifiers.from("block/button")).texture("texture", texture); + } + + /** + * Creates a button inventory block model with the given texture. + * + * @param texture the texture + * @return the model builder + */ + static ModelBuilder buttonInventory(NamespacedIdentifier texture) { + return ModelBuilder.create(NamespacedIdentifiers.from("block/button_inventory")).texture("texture", texture); + } + + /** + * Creates a button pressed, block model with the given texture. + * + * @param texture the texture + * @return the model builder + */ + static ModelBuilder buttonPressed(NamespacedIdentifier texture) { + return ModelBuilder.create(NamespacedIdentifiers.from("block/button_pressed")).texture("texture", texture); + } + + /** + * Creates a door bottom block model with the given top and bottom textures. + * + * @param topTexture the top texture + * @param bottomTexture the bottom texture + * @return the model builder + */ + static ModelBuilder doorBottom(NamespacedIdentifier topTexture, NamespacedIdentifier bottomTexture) { + return ModelBuilder.create(NamespacedIdentifiers.from("block/door_bottom")).texture("top", topTexture).texture("bottom", bottomTexture); + } + + /** + * Creates a door bottom block model with the given top and bottom textures, with the hinge on the right. + * + * @param topTexture the top texture + * @param bottomTexture the bottom texture + * @return the model builder + */ + static ModelBuilder doorBottomHinge(NamespacedIdentifier topTexture, NamespacedIdentifier bottomTexture) { + return ModelBuilder.create(NamespacedIdentifiers.from("block/door_bottom_rh")).texture("top", topTexture).texture("bottom", bottomTexture); + } + + /** + * Creates a door top block model with the given top and bottom textures. + * + * @param topTexture the top texture + * @param bottomTexture the bottom texture + * @return the model builder + */ + static ModelBuilder doorTop(NamespacedIdentifier topTexture, NamespacedIdentifier bottomTexture) { + return ModelBuilder.create(NamespacedIdentifiers.from("block/door_top")).texture("top", topTexture).texture("bottom", bottomTexture); + } + + /** + * Creates a door top block model with the given top and bottom textures, with the hinge on the right. + * + * @param topTexture the top texture + * @param bottomTexture the bottom texture + * @return the model builder + */ + static ModelBuilder doorTopHinge(NamespacedIdentifier topTexture, NamespacedIdentifier bottomTexture) { + return ModelBuilder.create(NamespacedIdentifiers.from("block/door_top_rh")).texture("top", topTexture).texture("bottom", bottomTexture); + } + + /** + * Creates a fence gate block model with the given texture. + * + * @param texture the texture + * @return the model builder + */ + static ModelBuilder fenceGate(NamespacedIdentifier texture) { + return ModelBuilder.create(NamespacedIdentifiers.from("block/template_fence_gate")).texture("texture", texture); + } + + /** + * Creates a fence gate block model with the given texture, with the gate open. + * + * @param texture the texture + * @return the model builder + */ + static ModelBuilder fenceGateOpen(NamespacedIdentifier texture) { + return ModelBuilder.create(NamespacedIdentifiers.from("block/template_fence_gate_open")).texture("texture", texture); + } + + /** + * Creates a fence gate block model with the given texture, with the gate open and on a wall. + * + * @param texture the texture + * @return the model builder + */ + static ModelBuilder fenceGateWall(NamespacedIdentifier texture) { + return ModelBuilder.create(NamespacedIdentifiers.from("block/template_fence_gate_wall")).texture("texture", texture); + } + + /** + * Creates a fence gate block model with the given texture, with the gate open and on a wall. + * + * @param texture the texture + * @return the model builder + */ + static ModelBuilder fenceGateWallOpen(NamespacedIdentifier texture) { + return ModelBuilder.create(NamespacedIdentifiers.from("block/template_fence_gate_wall_open")).texture("texture", texture); + } + + /** + * Creates a leaves block model with the given texture. + * + * @param texture the texture + * @return the model builder + */ + static ModelBuilder leaves(NamespacedIdentifier texture) { + return ModelBuilder.create(NamespacedIdentifiers.from("block/leaves")).texture("all", texture); + } + + /** + * Creates a pressure plate block model with the given texture, with the plate up. + * + * @param texture the texture + * @return the model builder + */ + static ModelBuilder pressurePlateUp(NamespacedIdentifier texture) { + return ModelBuilder.create(NamespacedIdentifiers.from("block/pressure_plate_up")).texture("texture", texture); + } + + /** + * Creates a pressure plate block model with the given texture, with the plate down. + * + * @param texture the texture + * @return the model builder + */ + static ModelBuilder pressurePlateDown(NamespacedIdentifier texture) { + return ModelBuilder.create(NamespacedIdentifiers.from("block/pressure_plate_down")).texture("texture", texture); + } + + /** + * Creates a closed trapdoor block model with the given texture, with the trapdoor at the bottom. + * + * @param texture the texture + * @return the model builder + */ + static ModelBuilder trapdoorBottom(NamespacedIdentifier texture) { + return ModelBuilder.create(NamespacedIdentifiers.from("block/template_orientable_trapdoor_bottom")).texture("texture", texture); + } + + /** + * Creates a trapdoor block model with the given texture, with the trapdoor open. + * + * @param texture the texture + * @return the model builder + */ + static ModelBuilder trapdoorOpen(NamespacedIdentifier texture) { + return ModelBuilder.create(NamespacedIdentifiers.from("block/template_orientable_trapdoor_open")).texture("texture", texture); + } + + /** + * Creates a closed trapdoor block model with the given texture, with the trapdoor at the top. + * + * @param texture the texture + * @return the model builder + */ + static ModelBuilder trapdoorTop(NamespacedIdentifier texture) { + return ModelBuilder.create(NamespacedIdentifiers.from("block/template_orientable_trapdoor_top")).texture("texture", texture); + } } 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 index 6254e03bd..c328777fb 100644 --- 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 @@ -1,18 +1,16 @@ 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.block.*; +import net.minecraft.block.state.property.*; 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.ConditionsBuilder; import net.ornithemc.osl.datagen.api.model.block.VariantsBuilder; +import net.ornithemc.osl.datagen.api.model.item.ItemModelTemplates; public class BlockModelTemplatesImpl implements BlockModelTemplates { private final ModelGenerator modelGenerator; @@ -329,4 +327,767 @@ public BlockModelTemplates stairs(Block block, NamespacedIdentifier sideTexture, public BlockModelTemplates simpleStairs(Block block, NamespacedIdentifier texture) { return stairs(block, texture, texture, texture); } + + @Override + public BlockModelTemplates wall(Block block, NamespacedIdentifier texture) { + NamespacedIdentifier inventoryId = modelGenerator.blockModel(block, "_inventory", BlockModelTemplates.wallInventory(texture)); + NamespacedIdentifier postId = modelGenerator.blockModel(block, "_post", BlockModelTemplates.wallPost(texture)); + NamespacedIdentifier sideId = modelGenerator.blockModel(block, "_side", BlockModelTemplates.wallSide(texture)); + modelGenerator.itemModel(block, ModelBuilder.create(inventoryId)); + + modelGenerator.blockstate( + block, + BlockModelDefinitionBuilder.create() + .selector( + ConditionsBuilder.properties( + ConditionsBuilder.property(WallBlock.UP, true) + ), + VariantsBuilder.of(postId) + ) + .selector( + ConditionsBuilder.properties( + ConditionsBuilder.property(WallBlock.NORTH, true) + ), + VariantsBuilder.of(sideId).lockedUV(true) + ) + .selector( + ConditionsBuilder.properties( + ConditionsBuilder.property(WallBlock.EAST, true) + ), + VariantsBuilder.of(sideId).lockedUV(true).y(90) + ) + .selector( + ConditionsBuilder.properties( + ConditionsBuilder.property(WallBlock.SOUTH, true) + ), + VariantsBuilder.of(sideId).lockedUV(true).y(180) + ) + .selector( + ConditionsBuilder.properties( + ConditionsBuilder.property(WallBlock.WEST, true) + ), + VariantsBuilder.of(sideId).lockedUV(true).y(270) + ) + ); + + return this; + } + + @Override + public BlockModelTemplates fence(Block block, NamespacedIdentifier texture) { + NamespacedIdentifier inventoryId = modelGenerator.blockModel(block, "_inventory", BlockModelTemplates.fenceInventory(texture)); + NamespacedIdentifier postId = modelGenerator.blockModel(block, "_post", BlockModelTemplates.fencePost(texture)); + NamespacedIdentifier sideId = modelGenerator.blockModel(block, "_side", BlockModelTemplates.fenceSide(texture)); + modelGenerator.itemModel(block, ModelBuilder.create(inventoryId)); + + modelGenerator.blockstate( + block, + BlockModelDefinitionBuilder.create() + .selector(postId) + .selector( + ConditionsBuilder.properties( + ConditionsBuilder.property(FenceBlock.NORTH, true) + ), + VariantsBuilder.of(sideId).lockedUV(true) + ) + .selector( + ConditionsBuilder.properties( + ConditionsBuilder.property(FenceBlock.EAST, true) + ), + VariantsBuilder.of(sideId).lockedUV(true).y(90) + ) + .selector( + ConditionsBuilder.properties( + ConditionsBuilder.property(FenceBlock.SOUTH, true) + ), + VariantsBuilder.of(sideId).lockedUV(true).y(180) + ) + .selector( + ConditionsBuilder.properties( + ConditionsBuilder.property(FenceBlock.WEST, true) + ), + VariantsBuilder.of(sideId).lockedUV(true).y(270) + ) + ); + + return this; + } + + @Override + public BlockModelTemplates button(Block block, NamespacedIdentifier texture) { + NamespacedIdentifier inventoryId = modelGenerator.blockModel(block, "_inventory", BlockModelTemplates.buttonInventory(texture)); + NamespacedIdentifier baseId = modelGenerator.blockModel(block, BlockModelTemplates.button(texture)); + NamespacedIdentifier pressedId = modelGenerator.blockModel(block, "_pressed", BlockModelTemplates.buttonPressed(texture)); + modelGenerator.itemModel(block, ModelBuilder.create(inventoryId)); + + modelGenerator.blockstate( + block, + BlockModelDefinitionBuilder.create() + // Floor not powered + .variant( + BlockModelDefinitionBuilder.predicate(ButtonBlock.FACE, AttachFace.FLOOR) + .set(ButtonBlock.FACING, Direction.EAST) + .set(ButtonBlock.POWERED, false), + VariantsBuilder.of(baseId).y(90) + ) + .variant( + BlockModelDefinitionBuilder.predicate(ButtonBlock.FACE, AttachFace.FLOOR) + .set(ButtonBlock.FACING, Direction.WEST) + .set(ButtonBlock.POWERED, false), + VariantsBuilder.of(baseId).y(270) + ) + .variant( + BlockModelDefinitionBuilder.predicate(ButtonBlock.FACE, AttachFace.FLOOR) + .set(ButtonBlock.FACING, Direction.SOUTH) + .set(ButtonBlock.POWERED, false), + VariantsBuilder.of(baseId).y(180) + ) + .variant( + BlockModelDefinitionBuilder.predicate(ButtonBlock.FACE, AttachFace.FLOOR) + .set(ButtonBlock.FACING, Direction.NORTH) + .set(ButtonBlock.POWERED, false), + VariantsBuilder.of(baseId) + ) + // Wall not powered + .variant( + BlockModelDefinitionBuilder.predicate(ButtonBlock.FACE, AttachFace.WALL) + .set(ButtonBlock.FACING, Direction.EAST) + .set(ButtonBlock.POWERED, false), + VariantsBuilder.of(baseId).lockedUV(true).x(90).y(90) + ) + .variant( + BlockModelDefinitionBuilder.predicate(ButtonBlock.FACE, AttachFace.WALL) + .set(ButtonBlock.FACING, Direction.WEST) + .set(ButtonBlock.POWERED, false), + VariantsBuilder.of(baseId).lockedUV(true).x(90).y(270) + ) + .variant( + BlockModelDefinitionBuilder.predicate(ButtonBlock.FACE, AttachFace.WALL) + .set(ButtonBlock.FACING, Direction.SOUTH) + .set(ButtonBlock.POWERED, false), + VariantsBuilder.of(baseId).lockedUV(true).x(90).y(180) + ) + .variant( + BlockModelDefinitionBuilder.predicate(ButtonBlock.FACE, AttachFace.WALL) + .set(ButtonBlock.FACING, Direction.NORTH) + .set(ButtonBlock.POWERED, false), + VariantsBuilder.of(baseId).lockedUV(true).x(90) + ) + // Ceiling not powered + .variant( + BlockModelDefinitionBuilder.predicate(ButtonBlock.FACE, AttachFace.CEILING) + .set(ButtonBlock.FACING, Direction.EAST) + .set(ButtonBlock.POWERED, false), + VariantsBuilder.of(baseId).x(180).y(270) + ) + .variant( + BlockModelDefinitionBuilder.predicate(ButtonBlock.FACE, AttachFace.CEILING) + .set(ButtonBlock.FACING, Direction.WEST) + .set(ButtonBlock.POWERED, false), + VariantsBuilder.of(baseId).x(180).y(90) + ) + .variant( + BlockModelDefinitionBuilder.predicate(ButtonBlock.FACE, AttachFace.CEILING) + .set(ButtonBlock.FACING, Direction.SOUTH) + .set(ButtonBlock.POWERED, false), + VariantsBuilder.of(baseId).x(180) + ) + .variant( + BlockModelDefinitionBuilder.predicate(ButtonBlock.FACE, AttachFace.CEILING) + .set(ButtonBlock.FACING, Direction.NORTH) + .set(ButtonBlock.POWERED, false), + VariantsBuilder.of(baseId).x(180).y(180) + ) + + // Floor powered + .variant( + BlockModelDefinitionBuilder.predicate(ButtonBlock.FACE, AttachFace.FLOOR) + .set(ButtonBlock.FACING, Direction.EAST) + .set(ButtonBlock.POWERED, true), + VariantsBuilder.of(pressedId).y(90) + ) + .variant( + BlockModelDefinitionBuilder.predicate(ButtonBlock.FACE, AttachFace.FLOOR) + .set(ButtonBlock.FACING, Direction.WEST) + .set(ButtonBlock.POWERED, true), + VariantsBuilder.of(pressedId).y(270) + ) + .variant( + BlockModelDefinitionBuilder.predicate(ButtonBlock.FACE, AttachFace.FLOOR) + .set(ButtonBlock.FACING, Direction.SOUTH) + .set(ButtonBlock.POWERED, true), + VariantsBuilder.of(pressedId).y(180) + ) + .variant( + BlockModelDefinitionBuilder.predicate(ButtonBlock.FACE, AttachFace.FLOOR) + .set(ButtonBlock.FACING, Direction.NORTH) + .set(ButtonBlock.POWERED, true), + VariantsBuilder.of(pressedId) + ) + // Wall powered + .variant( + BlockModelDefinitionBuilder.predicate(ButtonBlock.FACE, AttachFace.WALL) + .set(ButtonBlock.FACING, Direction.EAST) + .set(ButtonBlock.POWERED, true), + VariantsBuilder.of(pressedId).lockedUV(true).x(90).y(90) + ) + .variant( + BlockModelDefinitionBuilder.predicate(ButtonBlock.FACE, AttachFace.WALL) + .set(ButtonBlock.FACING, Direction.WEST) + .set(ButtonBlock.POWERED, true), + VariantsBuilder.of(pressedId).lockedUV(true).x(90).y(270) + ) + .variant( + BlockModelDefinitionBuilder.predicate(ButtonBlock.FACE, AttachFace.WALL) + .set(ButtonBlock.FACING, Direction.SOUTH) + .set(ButtonBlock.POWERED, true), + VariantsBuilder.of(pressedId).lockedUV(true).x(90).y(180) + ) + .variant( + BlockModelDefinitionBuilder.predicate(ButtonBlock.FACE, AttachFace.WALL) + .set(ButtonBlock.FACING, Direction.NORTH) + .set(ButtonBlock.POWERED, true), + VariantsBuilder.of(pressedId).lockedUV(true).x(90) + ) + // Ceiling powered + .variant( + BlockModelDefinitionBuilder.predicate(ButtonBlock.FACE, AttachFace.CEILING) + .set(ButtonBlock.FACING, Direction.EAST) + .set(ButtonBlock.POWERED, true), + VariantsBuilder.of(pressedId).x(180).y(270) + ) + .variant( + BlockModelDefinitionBuilder.predicate(ButtonBlock.FACE, AttachFace.CEILING) + .set(ButtonBlock.FACING, Direction.WEST) + .set(ButtonBlock.POWERED, true), + VariantsBuilder.of(pressedId).x(180).y(90) + ) + .variant( + BlockModelDefinitionBuilder.predicate(ButtonBlock.FACE, AttachFace.CEILING) + .set(ButtonBlock.FACING, Direction.SOUTH) + .set(ButtonBlock.POWERED, true), + VariantsBuilder.of(pressedId).x(180) + ) + .variant( + BlockModelDefinitionBuilder.predicate(ButtonBlock.FACE, AttachFace.CEILING) + .set(ButtonBlock.FACING, Direction.NORTH) + .set(ButtonBlock.POWERED, true), + VariantsBuilder.of(pressedId).x(180).y(180) + ) + ); + + return this; + } + + @Override + public BlockModelTemplates door(Block block, NamespacedIdentifier inventoryTexture, NamespacedIdentifier topTexture, NamespacedIdentifier bottomTexture) { + NamespacedIdentifier bottomId = modelGenerator.blockModel(block, "_bottom", BlockModelTemplates.doorBottom(topTexture, bottomTexture)); + NamespacedIdentifier bottomHingeId = modelGenerator.blockModel(block, "_bottom_hinge", BlockModelTemplates.doorBottomHinge(topTexture, bottomTexture)); + NamespacedIdentifier topId = modelGenerator.blockModel(block, "_top", BlockModelTemplates.doorTop(topTexture, bottomTexture)); + NamespacedIdentifier topHingeId = modelGenerator.blockModel(block, "_top_hinge", BlockModelTemplates.doorTopHinge(topTexture, bottomTexture)); + modelGenerator.itemModel(block, ItemModelTemplates.basic(inventoryTexture)); + + modelGenerator.blockstate( + block, + BlockModelDefinitionBuilder.create() + // Closed lower left + .variant( + BlockModelDefinitionBuilder.predicate(DoorBlock.FACING, Direction.EAST) + .set(DoorBlock.HALF, Half.LOWER) + .set(DoorBlock.HINGE, DoorHinge.LEFT) + .set(DoorBlock.OPEN, false), + VariantsBuilder.of(bottomId) + ) + .variant( + BlockModelDefinitionBuilder.predicate(DoorBlock.FACING, Direction.SOUTH) + .set(DoorBlock.HALF, Half.LOWER) + .set(DoorBlock.HINGE, DoorHinge.LEFT) + .set(DoorBlock.OPEN, false), + VariantsBuilder.of(bottomId).y(90) + ) + .variant( + BlockModelDefinitionBuilder.predicate(DoorBlock.FACING, Direction.WEST) + .set(DoorBlock.HALF, Half.LOWER) + .set(DoorBlock.HINGE, DoorHinge.LEFT) + .set(DoorBlock.OPEN, false), + VariantsBuilder.of(bottomId).y(180) + ) + .variant( + BlockModelDefinitionBuilder.predicate(DoorBlock.FACING, Direction.NORTH) + .set(DoorBlock.HALF, Half.LOWER) + .set(DoorBlock.HINGE, DoorHinge.LEFT) + .set(DoorBlock.OPEN, false), + VariantsBuilder.of(bottomId).y(270) + ) + // Closed lower right + .variant( + BlockModelDefinitionBuilder.predicate(DoorBlock.FACING, Direction.EAST) + .set(DoorBlock.HALF, Half.LOWER) + .set(DoorBlock.HINGE, DoorHinge.RIGHT) + .set(DoorBlock.OPEN, false), + VariantsBuilder.of(bottomHingeId) + ) + .variant( + BlockModelDefinitionBuilder.predicate(DoorBlock.FACING, Direction.SOUTH) + .set(DoorBlock.HALF, Half.LOWER) + .set(DoorBlock.HINGE, DoorHinge.RIGHT) + .set(DoorBlock.OPEN, false), + VariantsBuilder.of(bottomHingeId).y(90) + ) + .variant( + BlockModelDefinitionBuilder.predicate(DoorBlock.FACING, Direction.WEST) + .set(DoorBlock.HALF, Half.LOWER) + .set(DoorBlock.HINGE, DoorHinge.RIGHT) + .set(DoorBlock.OPEN, false), + VariantsBuilder.of(bottomHingeId).y(180) + ) + .variant( + BlockModelDefinitionBuilder.predicate(DoorBlock.FACING, Direction.NORTH) + .set(DoorBlock.HALF, Half.LOWER) + .set(DoorBlock.HINGE, DoorHinge.RIGHT) + .set(DoorBlock.OPEN, false), + VariantsBuilder.of(bottomHingeId).y(270) + ) + // Opened lower left + .variant( + BlockModelDefinitionBuilder.predicate(DoorBlock.FACING, Direction.EAST) + .set(DoorBlock.HALF, Half.LOWER) + .set(DoorBlock.HINGE, DoorHinge.LEFT) + .set(DoorBlock.OPEN, true), + VariantsBuilder.of(bottomHingeId).y(90) + ) + .variant( + BlockModelDefinitionBuilder.predicate(DoorBlock.FACING, Direction.SOUTH) + .set(DoorBlock.HALF, Half.LOWER) + .set(DoorBlock.HINGE, DoorHinge.LEFT) + .set(DoorBlock.OPEN, true), + VariantsBuilder.of(bottomHingeId).y(180) + ) + .variant( + BlockModelDefinitionBuilder.predicate(DoorBlock.FACING, Direction.WEST) + .set(DoorBlock.HALF, Half.LOWER) + .set(DoorBlock.HINGE, DoorHinge.LEFT) + .set(DoorBlock.OPEN, true), + VariantsBuilder.of(bottomHingeId).y(270) + ) + .variant( + BlockModelDefinitionBuilder.predicate(DoorBlock.FACING, Direction.NORTH) + .set(DoorBlock.HALF, Half.LOWER) + .set(DoorBlock.HINGE, DoorHinge.LEFT) + .set(DoorBlock.OPEN, true), + VariantsBuilder.of(bottomHingeId) + ) + // Opened lower right + .variant( + BlockModelDefinitionBuilder.predicate(DoorBlock.FACING, Direction.EAST) + .set(DoorBlock.HALF, Half.LOWER) + .set(DoorBlock.HINGE, DoorHinge.RIGHT) + .set(DoorBlock.OPEN, true), + VariantsBuilder.of(bottomId).y(270) + ) + .variant( + BlockModelDefinitionBuilder.predicate(DoorBlock.FACING, Direction.SOUTH) + .set(DoorBlock.HALF, Half.LOWER) + .set(DoorBlock.HINGE, DoorHinge.RIGHT) + .set(DoorBlock.OPEN, true), + VariantsBuilder.of(bottomId) + ) + .variant( + BlockModelDefinitionBuilder.predicate(DoorBlock.FACING, Direction.WEST) + .set(DoorBlock.HALF, Half.LOWER) + .set(DoorBlock.HINGE, DoorHinge.RIGHT) + .set(DoorBlock.OPEN, true), + VariantsBuilder.of(bottomId).y(90) + ) + .variant( + BlockModelDefinitionBuilder.predicate(DoorBlock.FACING, Direction.NORTH) + .set(DoorBlock.HALF, Half.LOWER) + .set(DoorBlock.HINGE, DoorHinge.RIGHT) + .set(DoorBlock.OPEN, true), + VariantsBuilder.of(bottomId).y(180) + ) + + // Closed top left + .variant( + BlockModelDefinitionBuilder.predicate(DoorBlock.FACING, Direction.EAST) + .set(DoorBlock.HALF, Half.UPPER) + .set(DoorBlock.HINGE, DoorHinge.LEFT) + .set(DoorBlock.OPEN, false), + VariantsBuilder.of(topId) + ) + .variant( + BlockModelDefinitionBuilder.predicate(DoorBlock.FACING, Direction.SOUTH) + .set(DoorBlock.HALF, Half.UPPER) + .set(DoorBlock.HINGE, DoorHinge.LEFT) + .set(DoorBlock.OPEN, false), + VariantsBuilder.of(topId).y(90) + ) + .variant( + BlockModelDefinitionBuilder.predicate(DoorBlock.FACING, Direction.WEST) + .set(DoorBlock.HALF, Half.UPPER) + .set(DoorBlock.HINGE, DoorHinge.LEFT) + .set(DoorBlock.OPEN, false), + VariantsBuilder.of(topId).y(180) + ) + .variant( + BlockModelDefinitionBuilder.predicate(DoorBlock.FACING, Direction.NORTH) + .set(DoorBlock.HALF, Half.UPPER) + .set(DoorBlock.HINGE, DoorHinge.LEFT) + .set(DoorBlock.OPEN, false), + VariantsBuilder.of(topId).y(270) + ) + // Closed top right + .variant( + BlockModelDefinitionBuilder.predicate(DoorBlock.FACING, Direction.EAST) + .set(DoorBlock.HALF, Half.UPPER) + .set(DoorBlock.HINGE, DoorHinge.RIGHT) + .set(DoorBlock.OPEN, false), + VariantsBuilder.of(topHingeId) + ) + .variant( + BlockModelDefinitionBuilder.predicate(DoorBlock.FACING, Direction.SOUTH) + .set(DoorBlock.HALF, Half.UPPER) + .set(DoorBlock.HINGE, DoorHinge.RIGHT) + .set(DoorBlock.OPEN, false), + VariantsBuilder.of(topHingeId).y(90) + ) + .variant( + BlockModelDefinitionBuilder.predicate(DoorBlock.FACING, Direction.WEST) + .set(DoorBlock.HALF, Half.UPPER) + .set(DoorBlock.HINGE, DoorHinge.RIGHT) + .set(DoorBlock.OPEN, false), + VariantsBuilder.of(topHingeId).y(180) + ) + .variant( + BlockModelDefinitionBuilder.predicate(DoorBlock.FACING, Direction.NORTH) + .set(DoorBlock.HALF, Half.UPPER) + .set(DoorBlock.HINGE, DoorHinge.RIGHT) + .set(DoorBlock.OPEN, false), + VariantsBuilder.of(topHingeId).y(270) + ) + // Opened top left + .variant( + BlockModelDefinitionBuilder.predicate(DoorBlock.FACING, Direction.EAST) + .set(DoorBlock.HALF, Half.UPPER) + .set(DoorBlock.HINGE, DoorHinge.LEFT) + .set(DoorBlock.OPEN, true), + VariantsBuilder.of(topHingeId).y(90) + ) + .variant( + BlockModelDefinitionBuilder.predicate(DoorBlock.FACING, Direction.SOUTH) + .set(DoorBlock.HALF, Half.UPPER) + .set(DoorBlock.HINGE, DoorHinge.LEFT) + .set(DoorBlock.OPEN, true), + VariantsBuilder.of(topHingeId).y(180) + ) + .variant( + BlockModelDefinitionBuilder.predicate(DoorBlock.FACING, Direction.WEST) + .set(DoorBlock.HALF, Half.UPPER) + .set(DoorBlock.HINGE, DoorHinge.LEFT) + .set(DoorBlock.OPEN, true), + VariantsBuilder.of(topHingeId).y(270) + ) + .variant( + BlockModelDefinitionBuilder.predicate(DoorBlock.FACING, Direction.NORTH) + .set(DoorBlock.HALF, Half.UPPER) + .set(DoorBlock.HINGE, DoorHinge.LEFT) + .set(DoorBlock.OPEN, true), + VariantsBuilder.of(topHingeId) + ) + // Opened top right + .variant( + BlockModelDefinitionBuilder.predicate(DoorBlock.FACING, Direction.EAST) + .set(DoorBlock.HALF, Half.UPPER) + .set(DoorBlock.HINGE, DoorHinge.RIGHT) + .set(DoorBlock.OPEN, true), + VariantsBuilder.of(topId).y(270) + ) + .variant( + BlockModelDefinitionBuilder.predicate(DoorBlock.FACING, Direction.SOUTH) + .set(DoorBlock.HALF, Half.UPPER) + .set(DoorBlock.HINGE, DoorHinge.RIGHT) + .set(DoorBlock.OPEN, true), + VariantsBuilder.of(topId) + ) + .variant( + BlockModelDefinitionBuilder.predicate(DoorBlock.FACING, Direction.WEST) + .set(DoorBlock.HALF, Half.UPPER) + .set(DoorBlock.HINGE, DoorHinge.RIGHT) + .set(DoorBlock.OPEN, true), + VariantsBuilder.of(topId).y(90) + ) + .variant( + BlockModelDefinitionBuilder.predicate(DoorBlock.FACING, Direction.NORTH) + .set(DoorBlock.HALF, Half.UPPER) + .set(DoorBlock.HINGE, DoorHinge.RIGHT) + .set(DoorBlock.OPEN, true), + VariantsBuilder.of(topId).y(180) + ) + ); + + return this; + } + + @Override + public BlockModelTemplates fenceGate(Block block, NamespacedIdentifier texture) { + NamespacedIdentifier baseId = modelGenerator.blockModel(block, BlockModelTemplates.fenceGate(texture)); + NamespacedIdentifier openedId = modelGenerator.blockModel(block, "_open", BlockModelTemplates.fenceGateOpen(texture)); + NamespacedIdentifier wallId = modelGenerator.blockModel(block, "_wall", BlockModelTemplates.fenceGateWall(texture)); + NamespacedIdentifier wallOpenedId = modelGenerator.blockModel(block, "_wall_open", BlockModelTemplates.fenceGateWallOpen(texture)); + modelGenerator.itemModel(block, ModelBuilder.create(baseId)); + + modelGenerator.blockstate( + block, + BlockModelDefinitionBuilder.create() + // Closed not in wall + .variant( + BlockModelDefinitionBuilder.predicate(FenceGateBlock.FACING, Direction.SOUTH) + .set(FenceGateBlock.IN_WALL, false) + .set(FenceGateBlock.OPEN, false), + VariantsBuilder.of(baseId).lockedUV(true) + ) + .variant( + BlockModelDefinitionBuilder.predicate(FenceGateBlock.FACING, Direction.WEST) + .set(FenceGateBlock.IN_WALL, false) + .set(FenceGateBlock.OPEN, false), + VariantsBuilder.of(baseId).lockedUV(true).y(90) + ) + .variant( + BlockModelDefinitionBuilder.predicate(FenceGateBlock.FACING, Direction.NORTH) + .set(FenceGateBlock.IN_WALL, false) + .set(FenceGateBlock.OPEN, false), + VariantsBuilder.of(baseId).lockedUV(true).y(180) + ) + .variant( + BlockModelDefinitionBuilder.predicate(FenceGateBlock.FACING, Direction.EAST) + .set(FenceGateBlock.IN_WALL, false) + .set(FenceGateBlock.OPEN, false), + VariantsBuilder.of(baseId).lockedUV(true).y(270) + ) + // Opened not in wall + .variant( + BlockModelDefinitionBuilder.predicate(FenceGateBlock.FACING, Direction.SOUTH) + .set(FenceGateBlock.IN_WALL, false) + .set(FenceGateBlock.OPEN, true), + VariantsBuilder.of(openedId).lockedUV(true) + ) + .variant( + BlockModelDefinitionBuilder.predicate(FenceGateBlock.FACING, Direction.WEST) + .set(FenceGateBlock.IN_WALL, false) + .set(FenceGateBlock.OPEN, true), + VariantsBuilder.of(openedId).lockedUV(true).y(90) + ) + .variant( + BlockModelDefinitionBuilder.predicate(FenceGateBlock.FACING, Direction.NORTH) + .set(FenceGateBlock.IN_WALL, false) + .set(FenceGateBlock.OPEN, true), + VariantsBuilder.of(openedId).lockedUV(true).y(180) + ) + .variant( + BlockModelDefinitionBuilder.predicate(FenceGateBlock.FACING, Direction.EAST) + .set(FenceGateBlock.IN_WALL, false) + .set(FenceGateBlock.OPEN, true), + VariantsBuilder.of(openedId).lockedUV(true).y(270) + ) + // Closed in wall + .variant( + BlockModelDefinitionBuilder.predicate(FenceGateBlock.FACING, Direction.SOUTH) + .set(FenceGateBlock.IN_WALL, true) + .set(FenceGateBlock.OPEN, false), + VariantsBuilder.of(wallId).lockedUV(true) + ) + .variant( + BlockModelDefinitionBuilder.predicate(FenceGateBlock.FACING, Direction.WEST) + .set(FenceGateBlock.IN_WALL, true) + .set(FenceGateBlock.OPEN, false), + VariantsBuilder.of(wallId).lockedUV(true).y(90) + ) + .variant( + BlockModelDefinitionBuilder.predicate(FenceGateBlock.FACING, Direction.NORTH) + .set(FenceGateBlock.IN_WALL, true) + .set(FenceGateBlock.OPEN, false), + VariantsBuilder.of(wallId).lockedUV(true).y(180) + ) + .variant( + BlockModelDefinitionBuilder.predicate(FenceGateBlock.FACING, Direction.EAST) + .set(FenceGateBlock.IN_WALL, true) + .set(FenceGateBlock.OPEN, false), + VariantsBuilder.of(wallId).lockedUV(true).y(270) + ) + // Opened in wall + .variant( + BlockModelDefinitionBuilder.predicate(FenceGateBlock.FACING, Direction.SOUTH) + .set(FenceGateBlock.IN_WALL, true) + .set(FenceGateBlock.OPEN, true), + VariantsBuilder.of(wallOpenedId).lockedUV(true) + ) + .variant( + BlockModelDefinitionBuilder.predicate(FenceGateBlock.FACING, Direction.WEST) + .set(FenceGateBlock.IN_WALL, true) + .set(FenceGateBlock.OPEN, true), + VariantsBuilder.of(wallOpenedId).lockedUV(true).y(90) + ) + .variant( + BlockModelDefinitionBuilder.predicate(FenceGateBlock.FACING, Direction.NORTH) + .set(FenceGateBlock.IN_WALL, true) + .set(FenceGateBlock.OPEN, true), + VariantsBuilder.of(wallOpenedId).lockedUV(true).y(180) + ) + .variant( + BlockModelDefinitionBuilder.predicate(FenceGateBlock.FACING, Direction.EAST) + .set(FenceGateBlock.IN_WALL, true) + .set(FenceGateBlock.OPEN, true), + VariantsBuilder.of(wallOpenedId).lockedUV(true).y(270) + ) + ); + + return this; + } + + @Override + public BlockModelTemplates leaves(Block block, NamespacedIdentifier texture) { + NamespacedIdentifier modelId = modelGenerator.blockModel(block, BlockModelTemplates.leaves(texture)); + modelGenerator.itemModel(block, ModelBuilder.create(modelId)); + modelGenerator.blockstate(block, BlockModelDefinitionBuilder.createSimple(modelId)); + + return this; + } + + @Override + public BlockModelTemplates pressurePlate(Block block, NamespacedIdentifier texture) { + NamespacedIdentifier baseId = modelGenerator.blockModel(block, BlockModelTemplates.pressurePlateUp(texture)); + NamespacedIdentifier downId = modelGenerator.blockModel(block, "_down", BlockModelTemplates.pressurePlateDown(texture)); + modelGenerator.itemModel(block, ModelBuilder.create(baseId)); + + modelGenerator.blockstate( + block, + BlockModelDefinitionBuilder.create() + .variant( + BlockModelDefinitionBuilder.predicate(PressurePlateBlock.POWERED, false), + VariantsBuilder.of(baseId) + ) + .variant( + BlockModelDefinitionBuilder.predicate(PressurePlateBlock.POWERED, true), + VariantsBuilder.of(downId) + ) + ); + + return this; + } + + @Override + public BlockModelTemplates trapdoor(Block block, NamespacedIdentifier texture) { + NamespacedIdentifier bottomId = modelGenerator.blockModel(block, "_bottom", BlockModelTemplates.trapdoorBottom(texture)); + NamespacedIdentifier topId = modelGenerator.blockModel(block, "_top", BlockModelTemplates.trapdoorTop(texture)); + NamespacedIdentifier openedId = modelGenerator.blockModel(block, "_open", BlockModelTemplates.trapdoorOpen(texture)); + modelGenerator.itemModel(block, ModelBuilder.create(bottomId)); + + modelGenerator.blockstate( + block, + BlockModelDefinitionBuilder.create() + // Closed bottom + .variant( + BlockModelDefinitionBuilder.predicate(TrapdoorBlock.FACING, Direction.NORTH) + .set(TrapdoorBlock.HALF, StairHalf.BOTTOM) + .set(TrapdoorBlock.OPEN, false), + VariantsBuilder.of(bottomId) + ) + .variant( + BlockModelDefinitionBuilder.predicate(TrapdoorBlock.FACING, Direction.SOUTH) + .set(TrapdoorBlock.HALF, StairHalf.BOTTOM) + .set(TrapdoorBlock.OPEN, false), + VariantsBuilder.of(bottomId).y(180) + ) + .variant( + BlockModelDefinitionBuilder.predicate(TrapdoorBlock.FACING, Direction.EAST) + .set(TrapdoorBlock.HALF, StairHalf.BOTTOM) + .set(TrapdoorBlock.OPEN, false), + VariantsBuilder.of(bottomId).y(90) + ) + .variant( + BlockModelDefinitionBuilder.predicate(TrapdoorBlock.FACING, Direction.WEST) + .set(TrapdoorBlock.HALF, StairHalf.BOTTOM) + .set(TrapdoorBlock.OPEN, false), + VariantsBuilder.of(bottomId).y(270) + ) + // Closed top + .variant( + BlockModelDefinitionBuilder.predicate(TrapdoorBlock.FACING, Direction.NORTH) + .set(TrapdoorBlock.HALF, StairHalf.TOP) + .set(TrapdoorBlock.OPEN, false), + VariantsBuilder.of(topId) + ) + .variant( + BlockModelDefinitionBuilder.predicate(TrapdoorBlock.FACING, Direction.SOUTH) + .set(TrapdoorBlock.HALF, StairHalf.TOP) + .set(TrapdoorBlock.OPEN, false), + VariantsBuilder.of(topId).y(180) + ) + .variant( + BlockModelDefinitionBuilder.predicate(TrapdoorBlock.FACING, Direction.EAST) + .set(TrapdoorBlock.HALF, StairHalf.TOP) + .set(TrapdoorBlock.OPEN, false), + VariantsBuilder.of(topId).y(90) + ) + .variant( + BlockModelDefinitionBuilder.predicate(TrapdoorBlock.FACING, Direction.WEST) + .set(TrapdoorBlock.HALF, StairHalf.TOP) + .set(TrapdoorBlock.OPEN, false), + VariantsBuilder.of(topId).y(270) + ) + + // Opened bottom + .variant( + BlockModelDefinitionBuilder.predicate(TrapdoorBlock.FACING, Direction.NORTH) + .set(TrapdoorBlock.HALF, StairHalf.BOTTOM) + .set(TrapdoorBlock.OPEN, true), + VariantsBuilder.of(openedId) + ) + .variant( + BlockModelDefinitionBuilder.predicate(TrapdoorBlock.FACING, Direction.SOUTH) + .set(TrapdoorBlock.HALF, StairHalf.BOTTOM) + .set(TrapdoorBlock.OPEN, true), + VariantsBuilder.of(openedId).y(180) + ) + .variant( + BlockModelDefinitionBuilder.predicate(TrapdoorBlock.FACING, Direction.EAST) + .set(TrapdoorBlock.HALF, StairHalf.BOTTOM) + .set(TrapdoorBlock.OPEN, true), + VariantsBuilder.of(openedId).y(90) + ) + .variant( + BlockModelDefinitionBuilder.predicate(TrapdoorBlock.FACING, Direction.WEST) + .set(TrapdoorBlock.HALF, StairHalf.BOTTOM) + .set(TrapdoorBlock.OPEN, true), + VariantsBuilder.of(openedId).y(270) + ) + // Opened top + .variant( + BlockModelDefinitionBuilder.predicate(TrapdoorBlock.FACING, Direction.NORTH) + .set(TrapdoorBlock.HALF, StairHalf.TOP) + .set(TrapdoorBlock.OPEN, true), + VariantsBuilder.of(openedId).x(180).y(180) + ) + .variant( + BlockModelDefinitionBuilder.predicate(TrapdoorBlock.FACING, Direction.SOUTH) + .set(TrapdoorBlock.HALF, StairHalf.TOP) + .set(TrapdoorBlock.OPEN, true), + VariantsBuilder.of(openedId).x(180).y(0) + ) + .variant( + BlockModelDefinitionBuilder.predicate(TrapdoorBlock.FACING, Direction.EAST) + .set(TrapdoorBlock.HALF, StairHalf.TOP) + .set(TrapdoorBlock.OPEN, true), + VariantsBuilder.of(openedId).x(180).y(270) + ) + .variant( + BlockModelDefinitionBuilder.predicate(TrapdoorBlock.FACING, Direction.WEST) + .set(TrapdoorBlock.HALF, StairHalf.TOP) + .set(TrapdoorBlock.OPEN, true), + VariantsBuilder.of(openedId).x(180).y(90) + ) + ); + + return this; + } } From 8918c5ad111391c9b0732f1d66c0d2255d9914d6 Mon Sep 17 00:00:00 2001 From: Cat Core Date: Mon, 5 Oct 2026 16:50:41 +0200 Subject: [PATCH 09/12] Fix build errors --- .../src/main/resources/osl.data-gen.classtweaker | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/data-gen/data-gen-mc18w43a-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 index 4f13f7a7c..44ba8e840 100644 --- a/libraries/data-gen/data-gen-mc18w43a-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 @@ -7,7 +7,7 @@ transitive-accessible method net/minecraft/data/recipe/RecipesProvider m_5336340 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/impl/PackProviderExtension +transitive-inject-interface net/minecraft/data/DataProvider net/ornithemc/osl/datagen/impl/PackProviderExtensionImpl 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 From eedaba40f37c87c9177a50c91f7541162c6fde5b Mon Sep 17 00:00:00 2001 From: Cat Core Date: Mon, 5 Oct 2026 16:51:06 +0200 Subject: [PATCH 10/12] Run Bootstrap before running data generators --- .../java/net/ornithemc/osl/datagen/impl/DataGeneratorInit.java | 3 +++ 1 file changed, 3 insertions(+) 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 61c2c5747..44b8d54dc 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 @@ -2,6 +2,7 @@ import net.fabricmc.loader.api.FabricLoader; import net.fabricmc.loader.api.entrypoint.EntrypointContainer; +import net.minecraft.Bootstrap; import net.ornithemc.osl.datagen.api.DataGeneratorInitializer; import net.ornithemc.osl.entrypoints.api.ModInitializer; import net.ornithemc.osl.registries.api.RegistryEvents; @@ -16,6 +17,8 @@ public void init() { if (!DataGenHelperImpl.ENABLED) return; RegistryEvents.REGISTRIES_FROZEN.register(() -> { + Bootstrap.init(); + Path basePath = DataGenHelperImpl.getOutputDir(); List> entrypoints = FabricLoader.getInstance() From a4d0f0dfcac3d62f17ba2826f61a5eda477eea9b Mon Sep 17 00:00:00 2001 From: Cat Core Date: Thu, 8 Oct 2026 19:07:21 +0200 Subject: [PATCH 11/12] Address review comments --- libraries/{data-gen => datagen}/README.md | 4 ++-- libraries/{data-gen => datagen}/build.gradle | 0 .../datagen-mc18w43a-mc1.14.4}/build.gradle | 0 .../datagen-mc18w43a-mc1.14.4}/gradle.properties | 0 .../osl/datagen/api/model/ModelBuilder.java | 0 .../osl/datagen/api/model/ModelGenerator.java | 0 .../model/block/BlockModelDefinitionBuilder.java | 0 .../api/model/block/BlockModelTemplates.java | 0 .../api/model/block/ConditionsBuilder.java | 0 .../datagen/api/model/block/VariantsBuilder.java | 0 .../api/model/item/ItemModelTemplates.java | 0 .../api/provider/ModAdvancementProvider.java | 2 +- .../api/provider/ModLanguageProvider.java | 2 +- .../api/provider/ModLootTablesProvider.java | 2 +- .../datagen/api/provider/ModModelProvider.java | 2 +- .../datagen/api/provider/ModRecipesProvider.java | 0 .../osl/datagen/impl/DataGeneratorInit.java | 0 .../osl/datagen/impl/ModDataGeneratorImpl.java | 2 +- .../impl/ModDataProviderExtensionImpl.java} | 4 ++-- .../osl/datagen/impl/PackDataGeneratorImpl.java | 10 +++++----- .../datagen/impl/access/RecipeBuilderAccess.java | 0 .../datagen/impl/mixin/C_23159014NewMixin.java | 0 .../datagen/impl/mixin/C_23159014OldMixin.java | 0 .../datagen/impl/mixin/DataGeneratorMixin.java | 3 --- .../datagen/impl/mixin/DataProviderMixin.java | 4 ++-- .../osl/datagen/impl/mixin/HashCacheMixin.java | 0 .../impl/model/BlockModelTemplatesImpl.java | 0 .../datagen/impl/model/ModelGeneratorImpl.java | 0 .../impl/wrapper/PackProviderWrapper.java | 6 +++--- .../src/main/resources/fabric.mod.json | 15 ++++++++------- .../src/main/resources/osl.datagen.classtweaker} | 0 .../src/main/resources/osl.datagen.mixins.json} | 0 .../{data-gen => datagen}/gradle.properties | 4 ++-- .../datagen/api/DataGeneratorInitializer.java | 0 .../osl/datagen/api/ModDataGenerator.java | 4 ++-- .../net/ornithemc/osl/datagen/api/PackCache.java | 0 .../ornithemc/osl/datagen/api/PackGenerator.java | 16 +++++++++++++--- .../datagen/api/provider/GsonDataProvider.java} | 4 ++-- .../datagen/api/provider/ModDataProvider.java} | 2 +- .../osl/datagen/impl/DataGenHelperImpl.java | 0 .../datagen/impl/provider/MCMetaProvider.java | 4 ++-- settings.gradle | 4 ++-- 42 files changed, 51 insertions(+), 43 deletions(-) rename libraries/{data-gen => datagen}/README.md (95%) rename libraries/{data-gen => datagen}/build.gradle (100%) rename libraries/{data-gen/data-gen-mc18w43a-mc1.14.4 => datagen/datagen-mc18w43a-mc1.14.4}/build.gradle (100%) rename libraries/{data-gen/data-gen-mc18w43a-mc1.14.4 => datagen/datagen-mc18w43a-mc1.14.4}/gradle.properties (100%) rename libraries/{data-gen/data-gen-mc18w43a-mc1.14.4 => datagen/datagen-mc18w43a-mc1.14.4}/src/main/java/net/ornithemc/osl/datagen/api/model/ModelBuilder.java (100%) rename libraries/{data-gen/data-gen-mc18w43a-mc1.14.4 => datagen/datagen-mc18w43a-mc1.14.4}/src/main/java/net/ornithemc/osl/datagen/api/model/ModelGenerator.java (100%) rename libraries/{data-gen/data-gen-mc18w43a-mc1.14.4 => datagen/datagen-mc18w43a-mc1.14.4}/src/main/java/net/ornithemc/osl/datagen/api/model/block/BlockModelDefinitionBuilder.java (100%) rename libraries/{data-gen/data-gen-mc18w43a-mc1.14.4 => datagen/datagen-mc18w43a-mc1.14.4}/src/main/java/net/ornithemc/osl/datagen/api/model/block/BlockModelTemplates.java (100%) rename libraries/{data-gen/data-gen-mc18w43a-mc1.14.4 => datagen/datagen-mc18w43a-mc1.14.4}/src/main/java/net/ornithemc/osl/datagen/api/model/block/ConditionsBuilder.java (100%) rename libraries/{data-gen/data-gen-mc18w43a-mc1.14.4 => datagen/datagen-mc18w43a-mc1.14.4}/src/main/java/net/ornithemc/osl/datagen/api/model/block/VariantsBuilder.java (100%) rename libraries/{data-gen/data-gen-mc18w43a-mc1.14.4 => datagen/datagen-mc18w43a-mc1.14.4}/src/main/java/net/ornithemc/osl/datagen/api/model/item/ItemModelTemplates.java (100%) rename libraries/{data-gen/data-gen-mc18w43a-mc1.14.4 => datagen/datagen-mc18w43a-mc1.14.4}/src/main/java/net/ornithemc/osl/datagen/api/provider/ModAdvancementProvider.java (96%) rename libraries/{data-gen/data-gen-mc18w43a-mc1.14.4 => datagen/datagen-mc18w43a-mc1.14.4}/src/main/java/net/ornithemc/osl/datagen/api/provider/ModLanguageProvider.java (98%) rename libraries/{data-gen/data-gen-mc18w43a-mc1.14.4 => datagen/datagen-mc18w43a-mc1.14.4}/src/main/java/net/ornithemc/osl/datagen/api/provider/ModLootTablesProvider.java (95%) rename libraries/{data-gen/data-gen-mc18w43a-mc1.14.4 => datagen/datagen-mc18w43a-mc1.14.4}/src/main/java/net/ornithemc/osl/datagen/api/provider/ModModelProvider.java (97%) rename libraries/{data-gen/data-gen-mc18w43a-mc1.14.4 => datagen/datagen-mc18w43a-mc1.14.4}/src/main/java/net/ornithemc/osl/datagen/api/provider/ModRecipesProvider.java (100%) rename libraries/{data-gen/data-gen-mc18w43a-mc1.14.4 => datagen/datagen-mc18w43a-mc1.14.4}/src/main/java/net/ornithemc/osl/datagen/impl/DataGeneratorInit.java (100%) rename libraries/{data-gen/data-gen-mc18w43a-mc1.14.4 => datagen/datagen-mc18w43a-mc1.14.4}/src/main/java/net/ornithemc/osl/datagen/impl/ModDataGeneratorImpl.java (96%) rename libraries/{data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/PackProviderExtensionImpl.java => datagen/datagen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/ModDataProviderExtensionImpl.java} (63%) rename libraries/{data-gen/data-gen-mc18w43a-mc1.14.4 => datagen/datagen-mc18w43a-mc1.14.4}/src/main/java/net/ornithemc/osl/datagen/impl/PackDataGeneratorImpl.java (76%) rename libraries/{data-gen/data-gen-mc18w43a-mc1.14.4 => datagen/datagen-mc18w43a-mc1.14.4}/src/main/java/net/ornithemc/osl/datagen/impl/access/RecipeBuilderAccess.java (100%) rename libraries/{data-gen/data-gen-mc18w43a-mc1.14.4 => datagen/datagen-mc18w43a-mc1.14.4}/src/main/java/net/ornithemc/osl/datagen/impl/mixin/C_23159014NewMixin.java (100%) rename libraries/{data-gen/data-gen-mc18w43a-mc1.14.4 => datagen/datagen-mc18w43a-mc1.14.4}/src/main/java/net/ornithemc/osl/datagen/impl/mixin/C_23159014OldMixin.java (100%) rename libraries/{data-gen/data-gen-mc18w43a-mc1.14.4 => datagen/datagen-mc18w43a-mc1.14.4}/src/main/java/net/ornithemc/osl/datagen/impl/mixin/DataGeneratorMixin.java (74%) rename libraries/{data-gen/data-gen-mc18w43a-mc1.14.4 => datagen/datagen-mc18w43a-mc1.14.4}/src/main/java/net/ornithemc/osl/datagen/impl/mixin/DataProviderMixin.java (69%) rename libraries/{data-gen/data-gen-mc18w43a-mc1.14.4 => datagen/datagen-mc18w43a-mc1.14.4}/src/main/java/net/ornithemc/osl/datagen/impl/mixin/HashCacheMixin.java (100%) rename libraries/{data-gen/data-gen-mc18w43a-mc1.14.4 => datagen/datagen-mc18w43a-mc1.14.4}/src/main/java/net/ornithemc/osl/datagen/impl/model/BlockModelTemplatesImpl.java (100%) rename libraries/{data-gen/data-gen-mc18w43a-mc1.14.4 => datagen/datagen-mc18w43a-mc1.14.4}/src/main/java/net/ornithemc/osl/datagen/impl/model/ModelGeneratorImpl.java (100%) rename libraries/{data-gen/data-gen-mc18w43a-mc1.14.4 => datagen/datagen-mc18w43a-mc1.14.4}/src/main/java/net/ornithemc/osl/datagen/impl/wrapper/PackProviderWrapper.java (73%) rename libraries/{data-gen/data-gen-mc18w43a-mc1.14.4 => datagen/datagen-mc18w43a-mc1.14.4}/src/main/resources/fabric.mod.json (77%) rename libraries/{data-gen/data-gen-mc18w43a-mc1.14.4/src/main/resources/osl.data-gen.classtweaker => datagen/datagen-mc18w43a-mc1.14.4/src/main/resources/osl.datagen.classtweaker} (100%) rename libraries/{data-gen/data-gen-mc18w43a-mc1.14.4/src/main/resources/osl.data-gen.mixins.json => datagen/datagen-mc18w43a-mc1.14.4/src/main/resources/osl.datagen.mixins.json} (100%) rename libraries/{data-gen => datagen}/gradle.properties (83%) rename libraries/{data-gen => datagen}/src/main/java/net/ornithemc/osl/datagen/api/DataGeneratorInitializer.java (100%) rename libraries/{data-gen => datagen}/src/main/java/net/ornithemc/osl/datagen/api/ModDataGenerator.java (78%) rename libraries/{data-gen => datagen}/src/main/java/net/ornithemc/osl/datagen/api/PackCache.java (100%) rename libraries/{data-gen => datagen}/src/main/java/net/ornithemc/osl/datagen/api/PackGenerator.java (50%) rename libraries/{data-gen/src/main/java/net/ornithemc/osl/datagen/api/provider/GsonPackProvider.java => datagen/src/main/java/net/ornithemc/osl/datagen/api/provider/GsonDataProvider.java} (93%) rename libraries/{data-gen/src/main/java/net/ornithemc/osl/datagen/api/provider/PackProvider.java => datagen/src/main/java/net/ornithemc/osl/datagen/api/provider/ModDataProvider.java} (94%) rename libraries/{data-gen => datagen}/src/main/java/net/ornithemc/osl/datagen/impl/DataGenHelperImpl.java (100%) rename libraries/{data-gen => datagen}/src/main/java/net/ornithemc/osl/datagen/impl/provider/MCMetaProvider.java (91%) diff --git a/libraries/data-gen/README.md b/libraries/datagen/README.md similarity index 95% rename from libraries/data-gen/README.md rename to libraries/datagen/README.md index 4c7cd970a..bd0dc95d7 100644 --- a/libraries/data-gen/README.md +++ b/libraries/datagen/README.md @@ -40,9 +40,9 @@ public class ExampleDataGenerator implements DataGeneratorInitializer { } ``` -### Pack Providers +### Mod Data Providers -Pack providers are used to provide data to the pack generator. +Mod data providers are used to provide data to the pack generator. There are a few builtin providers, such as the model provider, and language provider. An example for the model provider is shown below. diff --git a/libraries/data-gen/build.gradle b/libraries/datagen/build.gradle similarity index 100% rename from libraries/data-gen/build.gradle rename to libraries/datagen/build.gradle diff --git a/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/build.gradle b/libraries/datagen/datagen-mc18w43a-mc1.14.4/build.gradle similarity index 100% rename from libraries/data-gen/data-gen-mc18w43a-mc1.14.4/build.gradle rename to libraries/datagen/datagen-mc18w43a-mc1.14.4/build.gradle diff --git a/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/gradle.properties b/libraries/datagen/datagen-mc18w43a-mc1.14.4/gradle.properties similarity index 100% rename from libraries/data-gen/data-gen-mc18w43a-mc1.14.4/gradle.properties rename to libraries/datagen/datagen-mc18w43a-mc1.14.4/gradle.properties 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/datagen/datagen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/model/ModelBuilder.java similarity index 100% rename from libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/model/ModelBuilder.java rename to libraries/datagen/datagen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/model/ModelBuilder.java 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/datagen/datagen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/model/ModelGenerator.java similarity index 100% rename from libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/model/ModelGenerator.java rename to libraries/datagen/datagen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/model/ModelGenerator.java 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/datagen/datagen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/model/block/BlockModelDefinitionBuilder.java similarity index 100% rename from libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/model/block/BlockModelDefinitionBuilder.java rename to libraries/datagen/datagen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/model/block/BlockModelDefinitionBuilder.java 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/datagen/datagen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/model/block/BlockModelTemplates.java similarity index 100% rename from libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/model/block/BlockModelTemplates.java rename to libraries/datagen/datagen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/model/block/BlockModelTemplates.java 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/datagen/datagen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/model/block/ConditionsBuilder.java similarity index 100% rename from libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/model/block/ConditionsBuilder.java rename to libraries/datagen/datagen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/model/block/ConditionsBuilder.java 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/datagen/datagen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/model/block/VariantsBuilder.java similarity index 100% rename from libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/model/block/VariantsBuilder.java rename to libraries/datagen/datagen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/model/block/VariantsBuilder.java 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/datagen/datagen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/model/item/ItemModelTemplates.java similarity index 100% rename from libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/model/item/ItemModelTemplates.java rename to libraries/datagen/datagen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/model/item/ItemModelTemplates.java 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/datagen/datagen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/provider/ModAdvancementProvider.java similarity index 96% rename from libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/provider/ModAdvancementProvider.java rename to libraries/datagen/datagen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/provider/ModAdvancementProvider.java index 8b9dc30a4..c45298d8c 100644 --- a/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/provider/ModAdvancementProvider.java +++ b/libraries/datagen/datagen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/provider/ModAdvancementProvider.java @@ -15,7 +15,7 @@ /** * A PackProvider for generating advancements. */ -public abstract class ModAdvancementProvider extends GsonPackProvider { +public abstract class ModAdvancementProvider extends GsonDataProvider { protected ModAdvancementProvider(PackGenerator generator, ModContainer mod) { super(generator, mod); } 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/datagen/datagen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/provider/ModLanguageProvider.java similarity index 98% rename from libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/provider/ModLanguageProvider.java rename to libraries/datagen/datagen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/provider/ModLanguageProvider.java index bf259a4d7..cde0ae742 100644 --- a/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/provider/ModLanguageProvider.java +++ b/libraries/datagen/datagen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/provider/ModLanguageProvider.java @@ -21,7 +21,7 @@ /** * A provider for language files generated by a ModDataGenerator. */ -public abstract class ModLanguageProvider extends GsonPackProvider { +public abstract class ModLanguageProvider extends GsonDataProvider { private final String languageCode; /** 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/datagen/datagen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/provider/ModLootTablesProvider.java similarity index 95% rename from libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/provider/ModLootTablesProvider.java rename to libraries/datagen/datagen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/provider/ModLootTablesProvider.java index 2c16aa8b4..bb5066395 100644 --- a/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/provider/ModLootTablesProvider.java +++ b/libraries/datagen/datagen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/provider/ModLootTablesProvider.java @@ -15,7 +15,7 @@ /** * A PackProvider to generate loot tables. */ -public abstract class ModLootTablesProvider extends GsonPackProvider { +public abstract class ModLootTablesProvider extends GsonDataProvider { protected ModLootTablesProvider(PackGenerator generator, ModContainer mod) { super(generator, mod); } 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/datagen/datagen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/provider/ModModelProvider.java similarity index 97% rename from libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/provider/ModModelProvider.java rename to libraries/datagen/datagen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/provider/ModModelProvider.java index 3ee53f77e..df5a7bbe1 100644 --- a/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/provider/ModModelProvider.java +++ b/libraries/datagen/datagen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/provider/ModModelProvider.java @@ -16,7 +16,7 @@ /** * A PackProvider to generate block and item models. */ -public abstract class ModModelProvider extends GsonPackProvider { +public abstract class ModModelProvider extends GsonDataProvider { protected ModModelProvider(PackGenerator generator, ModContainer mod) { super(generator, mod); } diff --git a/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/provider/ModRecipesProvider.java b/libraries/datagen/datagen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/provider/ModRecipesProvider.java similarity index 100% rename from libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/provider/ModRecipesProvider.java rename to libraries/datagen/datagen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/api/provider/ModRecipesProvider.java diff --git a/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/DataGeneratorInit.java b/libraries/datagen/datagen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/DataGeneratorInit.java similarity index 100% rename from libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/DataGeneratorInit.java rename to libraries/datagen/datagen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/DataGeneratorInit.java diff --git a/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/ModDataGeneratorImpl.java b/libraries/datagen/datagen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/ModDataGeneratorImpl.java similarity index 96% rename from libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/ModDataGeneratorImpl.java rename to libraries/datagen/datagen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/ModDataGeneratorImpl.java index 0f9c82b0a..0a67499fa 100644 --- a/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/ModDataGeneratorImpl.java +++ b/libraries/datagen/datagen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/ModDataGeneratorImpl.java @@ -31,7 +31,7 @@ public PackGenerator createPack() { } @Override - public PackGenerator createBuiltinResourcePack(NamespacedIdentifier id) { + public PackGenerator createBundledResourcePack(NamespacedIdentifier id) { DataGenerator generator = new PackDataGeneratorImpl(basePath.resolve(id.prefixed("resourcepacks/").identifier()), Collections.emptySet(), id.toString(), modContainer); generators.add(generator); return generator; diff --git a/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/PackProviderExtensionImpl.java b/libraries/datagen/datagen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/ModDataProviderExtensionImpl.java similarity index 63% rename from libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/PackProviderExtensionImpl.java rename to libraries/datagen/datagen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/ModDataProviderExtensionImpl.java index 6b9d44e75..7fddef4de 100644 --- a/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/PackProviderExtensionImpl.java +++ b/libraries/datagen/datagen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/ModDataProviderExtensionImpl.java @@ -1,9 +1,9 @@ package net.ornithemc.osl.datagen.impl; import net.ornithemc.osl.datagen.api.PackCache; -import net.ornithemc.osl.datagen.api.provider.PackProvider; +import net.ornithemc.osl.datagen.api.provider.ModDataProvider; -public interface PackProviderExtensionImpl extends PackProvider { +public interface ModDataProviderExtensionImpl extends ModDataProvider { @Override default void provide(PackCache cache) {} diff --git a/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/PackDataGeneratorImpl.java b/libraries/datagen/datagen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/PackDataGeneratorImpl.java similarity index 76% rename from libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/PackDataGeneratorImpl.java rename to libraries/datagen/datagen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/PackDataGeneratorImpl.java index 8d6b73985..d959a2ef7 100644 --- a/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/PackDataGeneratorImpl.java +++ b/libraries/datagen/datagen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/PackDataGeneratorImpl.java @@ -4,7 +4,7 @@ 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.api.provider.ModDataProvider; import net.ornithemc.osl.datagen.impl.provider.MCMetaProvider; import net.ornithemc.osl.datagen.impl.wrapper.PackProviderWrapper; @@ -23,8 +23,8 @@ public PackDataGeneratorImpl(Path output, Collection inputs, String descri } @Override - public void addProvider(BiFunction providerFunction) { - PackProvider provider = providerFunction.apply(this, this.mod); + public void addProvider(ComplexProviderFactory providerFunction) { + ModDataProvider provider = providerFunction.create(this, this.mod); if (provider instanceof DataProvider) { addProvider((DataProvider) provider); @@ -34,8 +34,8 @@ public void addProvider(BiFunction pr } @Override - public void addProvider(Function providerFunction) { - PackProvider provider = providerFunction.apply(this); + public void addProvider(SimpleProviderFactory providerFunction) { + ModDataProvider provider = providerFunction.create(this); if (provider instanceof DataProvider) { addProvider((DataProvider) provider); diff --git a/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/access/RecipeBuilderAccess.java b/libraries/datagen/datagen-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-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/access/RecipeBuilderAccess.java rename to libraries/datagen/datagen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/access/RecipeBuilderAccess.java diff --git a/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/mixin/C_23159014NewMixin.java b/libraries/datagen/datagen-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-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/mixin/C_23159014NewMixin.java rename to libraries/datagen/datagen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/mixin/C_23159014NewMixin.java diff --git a/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/mixin/C_23159014OldMixin.java b/libraries/datagen/datagen-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-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/mixin/C_23159014OldMixin.java rename to libraries/datagen/datagen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/mixin/C_23159014OldMixin.java diff --git a/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/mixin/DataGeneratorMixin.java b/libraries/datagen/datagen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/mixin/DataGeneratorMixin.java similarity index 74% rename from libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/mixin/DataGeneratorMixin.java rename to libraries/datagen/datagen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/mixin/DataGeneratorMixin.java index ee1e5c4c8..1ddec8542 100644 --- a/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/mixin/DataGeneratorMixin.java +++ b/libraries/datagen/datagen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/mixin/DataGeneratorMixin.java @@ -1,10 +1,7 @@ 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; diff --git a/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/mixin/DataProviderMixin.java b/libraries/datagen/datagen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/mixin/DataProviderMixin.java similarity index 69% rename from libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/mixin/DataProviderMixin.java rename to libraries/datagen/datagen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/mixin/DataProviderMixin.java index 8938cb919..53404586f 100644 --- a/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/mixin/DataProviderMixin.java +++ b/libraries/datagen/datagen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/mixin/DataProviderMixin.java @@ -1,12 +1,12 @@ package net.ornithemc.osl.datagen.impl.mixin; import net.minecraft.data.DataProvider; -import net.ornithemc.osl.datagen.impl.PackProviderExtensionImpl; +import net.ornithemc.osl.datagen.impl.ModDataProviderExtensionImpl; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @Mixin(DataProvider.class) -public interface DataProviderMixin extends PackProviderExtensionImpl { +public interface DataProviderMixin extends ModDataProviderExtensionImpl { @Shadow String getName(); diff --git a/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/mixin/HashCacheMixin.java b/libraries/datagen/datagen-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-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/mixin/HashCacheMixin.java rename to libraries/datagen/datagen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/mixin/HashCacheMixin.java 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/datagen/datagen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/model/BlockModelTemplatesImpl.java similarity index 100% rename from libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/model/BlockModelTemplatesImpl.java rename to libraries/datagen/datagen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/model/BlockModelTemplatesImpl.java 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/datagen/datagen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/model/ModelGeneratorImpl.java similarity index 100% rename from libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/model/ModelGeneratorImpl.java rename to libraries/datagen/datagen-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/impl/wrapper/PackProviderWrapper.java b/libraries/datagen/datagen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/wrapper/PackProviderWrapper.java similarity index 73% rename from libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/wrapper/PackProviderWrapper.java rename to libraries/datagen/datagen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/wrapper/PackProviderWrapper.java index 548c94b56..980140bce 100644 --- a/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/wrapper/PackProviderWrapper.java +++ b/libraries/datagen/datagen-mc18w43a-mc1.14.4/src/main/java/net/ornithemc/osl/datagen/impl/wrapper/PackProviderWrapper.java @@ -2,14 +2,14 @@ import net.minecraft.data.DataProvider; import net.minecraft.data.HashCache; -import net.ornithemc.osl.datagen.api.provider.PackProvider; +import net.ornithemc.osl.datagen.api.provider.ModDataProvider; import java.io.IOException; public class PackProviderWrapper implements DataProvider { - private final PackProvider delegate; + private final ModDataProvider delegate; - public PackProviderWrapper(PackProvider delegate) { + public PackProviderWrapper(ModDataProvider delegate) { this.delegate = delegate; } diff --git a/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/resources/fabric.mod.json b/libraries/datagen/datagen-mc18w43a-mc1.14.4/src/main/resources/fabric.mod.json similarity index 77% rename from libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/resources/fabric.mod.json rename to libraries/datagen/datagen-mc18w43a-mc1.14.4/src/main/resources/fabric.mod.json index 3dde67e4a..c8529f681 100644 --- a/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/resources/fabric.mod.json +++ b/libraries/datagen/datagen-mc18w43a-mc1.14.4/src/main/resources/fabric.mod.json @@ -1,6 +1,6 @@ { "schemaVersion": 1, - "id": "osl-data-gen", + "id": "osl-datagen", "version": "0.1.0-alpha.1+mc18w43a-mc1.14.4", "environment": "*", "entrypoints": { @@ -9,25 +9,26 @@ ] }, "mixins": [ - "osl.data-gen.mixins.json" + "osl.datagen.mixins.json" ], - "accessWidener": "osl.data-gen.classtweaker", + "accessWidener": "osl.datagen.classtweaker", "depends": { "fabricloader": "\u003e\u003d0.18.0", "minecraft": "\u003e\u003d1.14-alpha.18.43.a \u003c\u003d1.14.4", - "osl-core": "\u003e\u003d0.10.0", + "osl-core": "\u003e\u003d0.11.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-registries": "\u003e\u003d0.2.0", "osl-resource-loader": "\u003e\u003d0.8.0", - "osl-blocks": "\u003e\u003d0.2.0", + "osl-blockstates": "\u003e\u003d0.1.0", + "osl-blocks": "\u003e\u003d0.3.0", "osl-items": "\u003e\u003d0.2.0" }, - "name": "OSL Data Gen", + "name": "OSL Data Generator", "description": "Data Generator api.", "authors": [ "OrnitheMC" diff --git a/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/resources/osl.data-gen.classtweaker b/libraries/datagen/datagen-mc18w43a-mc1.14.4/src/main/resources/osl.datagen.classtweaker similarity index 100% rename from libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/resources/osl.data-gen.classtweaker rename to libraries/datagen/datagen-mc18w43a-mc1.14.4/src/main/resources/osl.datagen.classtweaker diff --git a/libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/resources/osl.data-gen.mixins.json b/libraries/datagen/datagen-mc18w43a-mc1.14.4/src/main/resources/osl.datagen.mixins.json similarity index 100% rename from libraries/data-gen/data-gen-mc18w43a-mc1.14.4/src/main/resources/osl.data-gen.mixins.json rename to libraries/datagen/datagen-mc18w43a-mc1.14.4/src/main/resources/osl.datagen.mixins.json diff --git a/libraries/data-gen/gradle.properties b/libraries/datagen/gradle.properties similarity index 83% rename from libraries/data-gen/gradle.properties rename to libraries/datagen/gradle.properties index 84a9b26c1..2c6f8a503 100644 --- a/libraries/data-gen/gradle.properties +++ b/libraries/datagen/gradle.properties @@ -1,5 +1,5 @@ -library_id = data-gen -library_name = Data Gen +library_id = datagen +library_name = Data Generator library_description = Data Generator api. library_version = 0.1.0-alpha.1 diff --git a/libraries/data-gen/src/main/java/net/ornithemc/osl/datagen/api/DataGeneratorInitializer.java b/libraries/datagen/src/main/java/net/ornithemc/osl/datagen/api/DataGeneratorInitializer.java similarity index 100% rename from libraries/data-gen/src/main/java/net/ornithemc/osl/datagen/api/DataGeneratorInitializer.java rename to libraries/datagen/src/main/java/net/ornithemc/osl/datagen/api/DataGeneratorInitializer.java diff --git a/libraries/data-gen/src/main/java/net/ornithemc/osl/datagen/api/ModDataGenerator.java b/libraries/datagen/src/main/java/net/ornithemc/osl/datagen/api/ModDataGenerator.java similarity index 78% rename from libraries/data-gen/src/main/java/net/ornithemc/osl/datagen/api/ModDataGenerator.java rename to libraries/datagen/src/main/java/net/ornithemc/osl/datagen/api/ModDataGenerator.java index e39ec6d57..4cccc9f6b 100644 --- a/libraries/data-gen/src/main/java/net/ornithemc/osl/datagen/api/ModDataGenerator.java +++ b/libraries/datagen/src/main/java/net/ornithemc/osl/datagen/api/ModDataGenerator.java @@ -12,9 +12,9 @@ public interface ModDataGenerator { */ PackGenerator createPack(); /** - * Creates a builtin resource pack generator for the mod. + * Creates a bundled resource pack generator for the mod. */ - PackGenerator createBuiltinResourcePack(NamespacedIdentifier id); + PackGenerator createBundledResourcePack(NamespacedIdentifier id); /** * Returns the mod container assigned to this ModDataGenerator. */ diff --git a/libraries/data-gen/src/main/java/net/ornithemc/osl/datagen/api/PackCache.java b/libraries/datagen/src/main/java/net/ornithemc/osl/datagen/api/PackCache.java similarity index 100% rename from libraries/data-gen/src/main/java/net/ornithemc/osl/datagen/api/PackCache.java rename to libraries/datagen/src/main/java/net/ornithemc/osl/datagen/api/PackCache.java diff --git a/libraries/data-gen/src/main/java/net/ornithemc/osl/datagen/api/PackGenerator.java b/libraries/datagen/src/main/java/net/ornithemc/osl/datagen/api/PackGenerator.java similarity index 50% rename from libraries/data-gen/src/main/java/net/ornithemc/osl/datagen/api/PackGenerator.java rename to libraries/datagen/src/main/java/net/ornithemc/osl/datagen/api/PackGenerator.java index 71f1002b2..b8632d6b1 100644 --- a/libraries/data-gen/src/main/java/net/ornithemc/osl/datagen/api/PackGenerator.java +++ b/libraries/datagen/src/main/java/net/ornithemc/osl/datagen/api/PackGenerator.java @@ -1,7 +1,7 @@ package net.ornithemc.osl.datagen.api; import net.fabricmc.loader.api.ModContainer; -import net.ornithemc.osl.datagen.api.provider.PackProvider; +import net.ornithemc.osl.datagen.api.provider.ModDataProvider; import java.nio.file.Path; import java.util.function.BiFunction; @@ -14,13 +14,23 @@ public interface PackGenerator { /** * Adds a provider to the pack. */ - void addProvider(BiFunction provider); + void addProvider(ComplexProviderFactory provider); /** * Adds a provider to the pack. */ - void addProvider(Function provider); + void addProvider(SimpleProviderFactory provider); /** * Returns the output path for the pack. */ Path getOutputPath(); + + @FunctionalInterface + interface SimpleProviderFactory { + ModDataProvider create(PackGenerator generator); + } + + @FunctionalInterface + interface ComplexProviderFactory { + ModDataProvider create(PackGenerator generator, ModContainer container); + } } diff --git a/libraries/data-gen/src/main/java/net/ornithemc/osl/datagen/api/provider/GsonPackProvider.java b/libraries/datagen/src/main/java/net/ornithemc/osl/datagen/api/provider/GsonDataProvider.java similarity index 93% rename from libraries/data-gen/src/main/java/net/ornithemc/osl/datagen/api/provider/GsonPackProvider.java rename to libraries/datagen/src/main/java/net/ornithemc/osl/datagen/api/provider/GsonDataProvider.java index 26bef27e4..6cbd51df9 100644 --- a/libraries/data-gen/src/main/java/net/ornithemc/osl/datagen/api/provider/GsonPackProvider.java +++ b/libraries/datagen/src/main/java/net/ornithemc/osl/datagen/api/provider/GsonDataProvider.java @@ -17,13 +17,13 @@ /** * A provider for pack resources generated by a ModDataGenerator that generates JSON files using GSON. */ -public abstract class GsonPackProvider implements PackProvider { +public abstract class GsonDataProvider implements ModDataProvider { private static final Logger LOGGER = LogManager.getLogger(); private static final Gson GSON = (new GsonBuilder()).setPrettyPrinting().create(); public final PackGenerator generator; public final ModContainer mod; - protected GsonPackProvider(PackGenerator generator, ModContainer mod) { + protected GsonDataProvider(PackGenerator generator, ModContainer mod) { this.generator = generator; this.mod = mod; } diff --git a/libraries/data-gen/src/main/java/net/ornithemc/osl/datagen/api/provider/PackProvider.java b/libraries/datagen/src/main/java/net/ornithemc/osl/datagen/api/provider/ModDataProvider.java similarity index 94% rename from libraries/data-gen/src/main/java/net/ornithemc/osl/datagen/api/provider/PackProvider.java rename to libraries/datagen/src/main/java/net/ornithemc/osl/datagen/api/provider/ModDataProvider.java index f2118a93f..ba6d43094 100644 --- a/libraries/data-gen/src/main/java/net/ornithemc/osl/datagen/api/provider/PackProvider.java +++ b/libraries/datagen/src/main/java/net/ornithemc/osl/datagen/api/provider/ModDataProvider.java @@ -7,7 +7,7 @@ /** * A provider for pack resources generated by a ModDataGenerator. */ -public interface PackProvider { +public interface ModDataProvider { /** * Gets the name of this provider. * @return the name of this provider diff --git a/libraries/data-gen/src/main/java/net/ornithemc/osl/datagen/impl/DataGenHelperImpl.java b/libraries/datagen/src/main/java/net/ornithemc/osl/datagen/impl/DataGenHelperImpl.java similarity index 100% rename from libraries/data-gen/src/main/java/net/ornithemc/osl/datagen/impl/DataGenHelperImpl.java rename to libraries/datagen/src/main/java/net/ornithemc/osl/datagen/impl/DataGenHelperImpl.java diff --git a/libraries/data-gen/src/main/java/net/ornithemc/osl/datagen/impl/provider/MCMetaProvider.java b/libraries/datagen/src/main/java/net/ornithemc/osl/datagen/impl/provider/MCMetaProvider.java similarity index 91% rename from libraries/data-gen/src/main/java/net/ornithemc/osl/datagen/impl/provider/MCMetaProvider.java rename to libraries/datagen/src/main/java/net/ornithemc/osl/datagen/impl/provider/MCMetaProvider.java index 3720449b8..20756ea82 100644 --- a/libraries/data-gen/src/main/java/net/ornithemc/osl/datagen/impl/provider/MCMetaProvider.java +++ b/libraries/datagen/src/main/java/net/ornithemc/osl/datagen/impl/provider/MCMetaProvider.java @@ -2,7 +2,7 @@ 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.datagen.api.provider.ModDataProvider; 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; @@ -11,7 +11,7 @@ import java.io.IOException; import java.nio.file.Path; -public class MCMetaProvider implements PackProvider { +public class MCMetaProvider implements ModDataProvider { private final PackGenerator generator; private final String description; diff --git a/settings.gradle b/settings.gradle index 9c74a3a2b..392dd4ecc 100644 --- a/settings.gradle +++ b/settings.gradle @@ -192,5 +192,5 @@ 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-mc18w43a-mc1.14.4' +include ':libraries:datagen' +include ':libraries:datagen:datagen-mc18w43a-mc1.14.4' From b239f1fea77a0ad1ee48599250a9fec082bf37b2 Mon Sep 17 00:00:00 2001 From: Cat Core Date: Thu, 8 Oct 2026 19:10:42 +0200 Subject: [PATCH 12/12] Fix injected interface name --- .../src/main/resources/osl.datagen.classtweaker | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/datagen/datagen-mc18w43a-mc1.14.4/src/main/resources/osl.datagen.classtweaker b/libraries/datagen/datagen-mc18w43a-mc1.14.4/src/main/resources/osl.datagen.classtweaker index 44ba8e840..72cd6dda2 100644 --- a/libraries/datagen/datagen-mc18w43a-mc1.14.4/src/main/resources/osl.datagen.classtweaker +++ b/libraries/datagen/datagen-mc18w43a-mc1.14.4/src/main/resources/osl.datagen.classtweaker @@ -7,7 +7,7 @@ transitive-accessible method net/minecraft/data/recipe/RecipesProvider m_5336340 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/impl/PackProviderExtensionImpl +transitive-inject-interface net/minecraft/data/DataProvider net/ornithemc/osl/datagen/impl/ModDataProviderExtensionImpl 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