From c4653f5072f79b3b83e0b90b22e52ec64142077f Mon Sep 17 00:00:00 2001 From: Eclipse Date: Tue, 14 Oct 2025 17:34:39 +0000 Subject: [PATCH] Some tweaks, add equipment infos param to datagen provider --- datagen/build.gradle.kts | 2 - .../rainbow/datagen/RainbowModelProvider.java | 47 +++++++++++++------ .../mixin/ItemInfoCollectorAccessor.java | 3 +- .../datagen/mixin/ModelProviderMixin.java | 2 +- .../mixin/SimpleModelCollectorAccessor.java | 3 +- .../resources/rainbow-datagen.accesswidener | 4 +- 6 files changed, 39 insertions(+), 22 deletions(-) diff --git a/datagen/build.gradle.kts b/datagen/build.gradle.kts index 715fcb3..d0fae2f 100644 --- a/datagen/build.gradle.kts +++ b/datagen/build.gradle.kts @@ -4,9 +4,7 @@ plugins { } dependencies { - // Implement namedElements so IDEs can use it correctly, but include the remapped build implementation(project(path = ":rainbow", configuration = "namedElements")) - include(project(":rainbow")) } loom { diff --git a/datagen/src/main/java/org/geysermc/rainbow/datagen/RainbowModelProvider.java b/datagen/src/main/java/org/geysermc/rainbow/datagen/RainbowModelProvider.java index b0925df..9477500 100644 --- a/datagen/src/main/java/org/geysermc/rainbow/datagen/RainbowModelProvider.java +++ b/datagen/src/main/java/org/geysermc/rainbow/datagen/RainbowModelProvider.java @@ -22,6 +22,7 @@ import net.minecraft.world.item.equipment.EquipmentAsset; import org.geysermc.rainbow.mapping.AssetResolver; import org.geysermc.rainbow.mapping.PackSerializer; import org.geysermc.rainbow.pack.BedrockPack; +import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -37,15 +38,22 @@ import java.util.concurrent.CompletableFuture; public abstract class RainbowModelProvider extends FabricModelProvider { private final CompletableFuture registries; private final PackOutput.PathProvider bedrockPackPathProvider; - private Map itemInfosMap; + private final Map, EquipmentClientInfo> equipmentInfos; + private Map itemInfos; private Map models; - public RainbowModelProvider(FabricDataOutput output, CompletableFuture registries) { + public RainbowModelProvider(FabricDataOutput output, CompletableFuture registries, + Map, EquipmentClientInfo> equipmentInfos) { super(output); this.registries = registries; + this.equipmentInfos = equipmentInfos; bedrockPackPathProvider = output.createPathProvider(PackOutput.Target.RESOURCE_PACK, "bedrock"); } + public RainbowModelProvider(FabricDataOutput output, CompletableFuture registries) { + this(output, registries, Map.of()); + } + @Override public @NotNull CompletableFuture run(CachedOutput output) { CompletableFuture vanillaModels = super.run(output); @@ -53,10 +61,10 @@ public abstract class RainbowModelProvider extends FabricModelProvider { CompletableFuture bedrockPack = ClientPackLoader.openClientResources() .thenCompose(resourceManager -> registries.thenApply(registries -> { try (resourceManager) { - BedrockPack pack = BedrockPack.builder("rainbow", Path.of("geyser_mappings"), Path.of("pack"), - new Serializer(output, registries, bedrockPackPathProvider), new ModelResolver(resourceManager, itemInfosMap, models)).build(); + BedrockPack pack = createBedrockPack(new Serializer(output, registries, bedrockPackPathProvider), + new DatagenResolver(resourceManager, equipmentInfos, itemInfos, models)).build(); - for (Item item : itemInfosMap.keySet()) { + for (Item item : itemInfos.keySet()) { pack.map(getVanillaItem(item).builtInRegistryHolder(), getVanillaDataComponentPatch(item)); } return pack; @@ -66,6 +74,10 @@ public abstract class RainbowModelProvider extends FabricModelProvider { return CompletableFuture.allOf(vanillaModels, bedrockPack.thenCompose(BedrockPack::save)); } + protected BedrockPack.Builder createBedrockPack(PackSerializer serializer, AssetResolver resolver) { + return BedrockPack.builder("rainbow", Path.of("geyser_mappings"), Path.of("pack"), serializer, resolver); + } + protected abstract Item getVanillaItem(Item modded); protected DataComponentPatch getVanillaDataComponentPatch(Item modded) { @@ -74,10 +86,12 @@ public abstract class RainbowModelProvider extends FabricModelProvider { return builder.build(); } - public void setItemInfosMap(Map itemInfosMap) { - this.itemInfosMap = itemInfosMap; + @ApiStatus.Internal + public void setItemInfos(Map itemInfos) { + this.itemInfos = itemInfos; } + @ApiStatus.Internal public void setModels(Map models) { this.models = models; } @@ -96,17 +110,20 @@ public abstract class RainbowModelProvider extends FabricModelProvider { } } - private static class ModelResolver implements AssetResolver { + private static class DatagenResolver implements AssetResolver { private final ResourceManager resourceManager; - private final Map itemInfosMap; + private final Map, EquipmentClientInfo> equipmentInfos; + private final Map itemInfos; private final Map models; private final Map> resolvedModelCache = new HashMap<>(); - private ModelResolver(ResourceManager resourceManager, Map itemInfosMap, Map models) { + private DatagenResolver(ResourceManager resourceManager, Map, EquipmentClientInfo> equipmentInfos, + Map itemInfos, Map models) { this.resourceManager = resourceManager; - this.itemInfosMap = new HashMap<>(); - for (Map.Entry entry : itemInfosMap.entrySet()) { - this.itemInfosMap.put(entry.getKey().builtInRegistryHolder().key().location(), entry.getValue()); + this.equipmentInfos = equipmentInfos; + this.itemInfos = new HashMap<>(); + for (Map.Entry entry : itemInfos.entrySet()) { + this.itemInfos.put(entry.getKey().builtInRegistryHolder().key().location(), entry.getValue()); } this.models = models; } @@ -141,12 +158,12 @@ public abstract class RainbowModelProvider extends FabricModelProvider { @Override public Optional getClientItem(ResourceLocation location) { - return Optional.ofNullable(itemInfosMap.get(location)); + return Optional.ofNullable(itemInfos.get(location)); } @Override public Optional getEquipmentInfo(ResourceKey key) { - return Optional.empty(); // TODO + return Optional.ofNullable(equipmentInfos.get(key)); } } } diff --git a/datagen/src/main/java/org/geysermc/rainbow/datagen/mixin/ItemInfoCollectorAccessor.java b/datagen/src/main/java/org/geysermc/rainbow/datagen/mixin/ItemInfoCollectorAccessor.java index 2afb1ff..b9450ae 100644 --- a/datagen/src/main/java/org/geysermc/rainbow/datagen/mixin/ItemInfoCollectorAccessor.java +++ b/datagen/src/main/java/org/geysermc/rainbow/datagen/mixin/ItemInfoCollectorAccessor.java @@ -1,5 +1,6 @@ package org.geysermc.rainbow.datagen.mixin; +import net.minecraft.client.data.models.ModelProvider; import net.minecraft.client.renderer.item.ClientItem; import net.minecraft.world.item.Item; import org.spongepowered.asm.mixin.Mixin; @@ -7,7 +8,7 @@ import org.spongepowered.asm.mixin.gen.Accessor; import java.util.Map; -@Mixin(targets = "net.minecraft.client.data.models.ModelProvider$ItemInfoCollector") +@Mixin(ModelProvider.ItemInfoCollector.class) public interface ItemInfoCollectorAccessor { @Accessor diff --git a/datagen/src/main/java/org/geysermc/rainbow/datagen/mixin/ModelProviderMixin.java b/datagen/src/main/java/org/geysermc/rainbow/datagen/mixin/ModelProviderMixin.java index 678b22f..69842c4 100644 --- a/datagen/src/main/java/org/geysermc/rainbow/datagen/mixin/ModelProviderMixin.java +++ b/datagen/src/main/java/org/geysermc/rainbow/datagen/mixin/ModelProviderMixin.java @@ -19,7 +19,7 @@ public abstract class ModelProviderMixin implements DataProvider { public void setItemInfosInRainbowModelProvider(CachedOutput output, CallbackInfoReturnable> callbackInfoReturnable, @Local ModelProvider.ItemInfoCollector itemInfoCollector, @Local ModelProvider.SimpleModelCollector simpleModelCollector) { if ((Object) this instanceof RainbowModelProvider rainbowModelProvider) { - rainbowModelProvider.setItemInfosMap(((ItemInfoCollectorAccessor) itemInfoCollector).getItemInfos()); + rainbowModelProvider.setItemInfos(((ItemInfoCollectorAccessor) itemInfoCollector).getItemInfos()); rainbowModelProvider.setModels(((SimpleModelCollectorAccessor) simpleModelCollector).getModels()); } } diff --git a/datagen/src/main/java/org/geysermc/rainbow/datagen/mixin/SimpleModelCollectorAccessor.java b/datagen/src/main/java/org/geysermc/rainbow/datagen/mixin/SimpleModelCollectorAccessor.java index e21983c..0f85752 100644 --- a/datagen/src/main/java/org/geysermc/rainbow/datagen/mixin/SimpleModelCollectorAccessor.java +++ b/datagen/src/main/java/org/geysermc/rainbow/datagen/mixin/SimpleModelCollectorAccessor.java @@ -1,5 +1,6 @@ package org.geysermc.rainbow.datagen.mixin; +import net.minecraft.client.data.models.ModelProvider; import net.minecraft.client.data.models.model.ModelInstance; import net.minecraft.resources.ResourceLocation; import org.spongepowered.asm.mixin.Mixin; @@ -7,7 +8,7 @@ import org.spongepowered.asm.mixin.gen.Accessor; import java.util.Map; -@Mixin(targets = "net.minecraft.client.data.models.ModelProvider$SimpleModelCollector") +@Mixin(ModelProvider.SimpleModelCollector.class) public interface SimpleModelCollectorAccessor { @Accessor diff --git a/datagen/src/main/resources/rainbow-datagen.accesswidener b/datagen/src/main/resources/rainbow-datagen.accesswidener index 5ab114f..71454eb 100644 --- a/datagen/src/main/resources/rainbow-datagen.accesswidener +++ b/datagen/src/main/resources/rainbow-datagen.accesswidener @@ -1,3 +1,3 @@ accessWidener v2 named -accessible class net/minecraft/client/data/models/ModelProvider$ItemInfoCollector -accessible class net/minecraft/client/data/models/ModelProvider$SimpleModelCollector +transitive-accessible class net/minecraft/client/data/models/ModelProvider$ItemInfoCollector +transitive-accessible class net/minecraft/client/data/models/ModelProvider$SimpleModelCollector