1
0
mirror of https://github.com/GeyserMC/Rainbow.git synced 2025-12-19 14:59:16 +00:00

Some tweaks, add equipment infos param to datagen provider

This commit is contained in:
Eclipse
2025-10-14 17:34:39 +00:00
parent b19c319a18
commit c4653f5072
6 changed files with 39 additions and 22 deletions

View File

@@ -4,9 +4,7 @@ plugins {
} }
dependencies { dependencies {
// Implement namedElements so IDEs can use it correctly, but include the remapped build
implementation(project(path = ":rainbow", configuration = "namedElements")) implementation(project(path = ":rainbow", configuration = "namedElements"))
include(project(":rainbow"))
} }
loom { loom {

View File

@@ -22,6 +22,7 @@ import net.minecraft.world.item.equipment.EquipmentAsset;
import org.geysermc.rainbow.mapping.AssetResolver; import org.geysermc.rainbow.mapping.AssetResolver;
import org.geysermc.rainbow.mapping.PackSerializer; import org.geysermc.rainbow.mapping.PackSerializer;
import org.geysermc.rainbow.pack.BedrockPack; import org.geysermc.rainbow.pack.BedrockPack;
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
@@ -37,15 +38,22 @@ import java.util.concurrent.CompletableFuture;
public abstract class RainbowModelProvider extends FabricModelProvider { public abstract class RainbowModelProvider extends FabricModelProvider {
private final CompletableFuture<HolderLookup.Provider> registries; private final CompletableFuture<HolderLookup.Provider> registries;
private final PackOutput.PathProvider bedrockPackPathProvider; private final PackOutput.PathProvider bedrockPackPathProvider;
private Map<Item, ClientItem> itemInfosMap; private final Map<ResourceKey<EquipmentAsset>, EquipmentClientInfo> equipmentInfos;
private Map<Item, ClientItem> itemInfos;
private Map<ResourceLocation, ModelInstance> models; private Map<ResourceLocation, ModelInstance> models;
public RainbowModelProvider(FabricDataOutput output, CompletableFuture<HolderLookup.Provider> registries) { public RainbowModelProvider(FabricDataOutput output, CompletableFuture<HolderLookup.Provider> registries,
Map<ResourceKey<EquipmentAsset>, EquipmentClientInfo> equipmentInfos) {
super(output); super(output);
this.registries = registries; this.registries = registries;
this.equipmentInfos = equipmentInfos;
bedrockPackPathProvider = output.createPathProvider(PackOutput.Target.RESOURCE_PACK, "bedrock"); bedrockPackPathProvider = output.createPathProvider(PackOutput.Target.RESOURCE_PACK, "bedrock");
} }
public RainbowModelProvider(FabricDataOutput output, CompletableFuture<HolderLookup.Provider> registries) {
this(output, registries, Map.of());
}
@Override @Override
public @NotNull CompletableFuture<?> run(CachedOutput output) { public @NotNull CompletableFuture<?> run(CachedOutput output) {
CompletableFuture<?> vanillaModels = super.run(output); CompletableFuture<?> vanillaModels = super.run(output);
@@ -53,10 +61,10 @@ public abstract class RainbowModelProvider extends FabricModelProvider {
CompletableFuture<BedrockPack> bedrockPack = ClientPackLoader.openClientResources() CompletableFuture<BedrockPack> bedrockPack = ClientPackLoader.openClientResources()
.thenCompose(resourceManager -> registries.thenApply(registries -> { .thenCompose(resourceManager -> registries.thenApply(registries -> {
try (resourceManager) { try (resourceManager) {
BedrockPack pack = BedrockPack.builder("rainbow", Path.of("geyser_mappings"), Path.of("pack"), BedrockPack pack = createBedrockPack(new Serializer(output, registries, bedrockPackPathProvider),
new Serializer(output, registries, bedrockPackPathProvider), new ModelResolver(resourceManager, itemInfosMap, models)).build(); new DatagenResolver(resourceManager, equipmentInfos, itemInfos, models)).build();
for (Item item : itemInfosMap.keySet()) { for (Item item : itemInfos.keySet()) {
pack.map(getVanillaItem(item).builtInRegistryHolder(), getVanillaDataComponentPatch(item)); pack.map(getVanillaItem(item).builtInRegistryHolder(), getVanillaDataComponentPatch(item));
} }
return pack; return pack;
@@ -66,6 +74,10 @@ public abstract class RainbowModelProvider extends FabricModelProvider {
return CompletableFuture.allOf(vanillaModels, bedrockPack.thenCompose(BedrockPack::save)); 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 abstract Item getVanillaItem(Item modded);
protected DataComponentPatch getVanillaDataComponentPatch(Item modded) { protected DataComponentPatch getVanillaDataComponentPatch(Item modded) {
@@ -74,10 +86,12 @@ public abstract class RainbowModelProvider extends FabricModelProvider {
return builder.build(); return builder.build();
} }
public void setItemInfosMap(Map<Item, ClientItem> itemInfosMap) { @ApiStatus.Internal
this.itemInfosMap = itemInfosMap; public void setItemInfos(Map<Item, ClientItem> itemInfos) {
this.itemInfos = itemInfos;
} }
@ApiStatus.Internal
public void setModels(Map<ResourceLocation, ModelInstance> models) { public void setModels(Map<ResourceLocation, ModelInstance> models) {
this.models = 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 ResourceManager resourceManager;
private final Map<ResourceLocation, ClientItem> itemInfosMap; private final Map<ResourceKey<EquipmentAsset>, EquipmentClientInfo> equipmentInfos;
private final Map<ResourceLocation, ClientItem> itemInfos;
private final Map<ResourceLocation, ModelInstance> models; private final Map<ResourceLocation, ModelInstance> models;
private final Map<ResourceLocation, Optional<ResolvedModel>> resolvedModelCache = new HashMap<>(); private final Map<ResourceLocation, Optional<ResolvedModel>> resolvedModelCache = new HashMap<>();
private ModelResolver(ResourceManager resourceManager, Map<Item, ClientItem> itemInfosMap, Map<ResourceLocation, ModelInstance> models) { private DatagenResolver(ResourceManager resourceManager, Map<ResourceKey<EquipmentAsset>, EquipmentClientInfo> equipmentInfos,
Map<Item, ClientItem> itemInfos, Map<ResourceLocation, ModelInstance> models) {
this.resourceManager = resourceManager; this.resourceManager = resourceManager;
this.itemInfosMap = new HashMap<>(); this.equipmentInfos = equipmentInfos;
for (Map.Entry<Item, ClientItem> entry : itemInfosMap.entrySet()) { this.itemInfos = new HashMap<>();
this.itemInfosMap.put(entry.getKey().builtInRegistryHolder().key().location(), entry.getValue()); for (Map.Entry<Item, ClientItem> entry : itemInfos.entrySet()) {
this.itemInfos.put(entry.getKey().builtInRegistryHolder().key().location(), entry.getValue());
} }
this.models = models; this.models = models;
} }
@@ -141,12 +158,12 @@ public abstract class RainbowModelProvider extends FabricModelProvider {
@Override @Override
public Optional<ClientItem> getClientItem(ResourceLocation location) { public Optional<ClientItem> getClientItem(ResourceLocation location) {
return Optional.ofNullable(itemInfosMap.get(location)); return Optional.ofNullable(itemInfos.get(location));
} }
@Override @Override
public Optional<EquipmentClientInfo> getEquipmentInfo(ResourceKey<EquipmentAsset> key) { public Optional<EquipmentClientInfo> getEquipmentInfo(ResourceKey<EquipmentAsset> key) {
return Optional.empty(); // TODO return Optional.ofNullable(equipmentInfos.get(key));
} }
} }
} }

View File

@@ -1,5 +1,6 @@
package org.geysermc.rainbow.datagen.mixin; package org.geysermc.rainbow.datagen.mixin;
import net.minecraft.client.data.models.ModelProvider;
import net.minecraft.client.renderer.item.ClientItem; import net.minecraft.client.renderer.item.ClientItem;
import net.minecraft.world.item.Item; import net.minecraft.world.item.Item;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
@@ -7,7 +8,7 @@ import org.spongepowered.asm.mixin.gen.Accessor;
import java.util.Map; import java.util.Map;
@Mixin(targets = "net.minecraft.client.data.models.ModelProvider$ItemInfoCollector") @Mixin(ModelProvider.ItemInfoCollector.class)
public interface ItemInfoCollectorAccessor { public interface ItemInfoCollectorAccessor {
@Accessor @Accessor

View File

@@ -19,7 +19,7 @@ public abstract class ModelProviderMixin implements DataProvider {
public void setItemInfosInRainbowModelProvider(CachedOutput output, CallbackInfoReturnable<CompletableFuture<?>> callbackInfoReturnable, public void setItemInfosInRainbowModelProvider(CachedOutput output, CallbackInfoReturnable<CompletableFuture<?>> callbackInfoReturnable,
@Local ModelProvider.ItemInfoCollector itemInfoCollector, @Local ModelProvider.SimpleModelCollector simpleModelCollector) { @Local ModelProvider.ItemInfoCollector itemInfoCollector, @Local ModelProvider.SimpleModelCollector simpleModelCollector) {
if ((Object) this instanceof RainbowModelProvider rainbowModelProvider) { if ((Object) this instanceof RainbowModelProvider rainbowModelProvider) {
rainbowModelProvider.setItemInfosMap(((ItemInfoCollectorAccessor) itemInfoCollector).getItemInfos()); rainbowModelProvider.setItemInfos(((ItemInfoCollectorAccessor) itemInfoCollector).getItemInfos());
rainbowModelProvider.setModels(((SimpleModelCollectorAccessor) simpleModelCollector).getModels()); rainbowModelProvider.setModels(((SimpleModelCollectorAccessor) simpleModelCollector).getModels());
} }
} }

View File

@@ -1,5 +1,6 @@
package org.geysermc.rainbow.datagen.mixin; package org.geysermc.rainbow.datagen.mixin;
import net.minecraft.client.data.models.ModelProvider;
import net.minecraft.client.data.models.model.ModelInstance; import net.minecraft.client.data.models.model.ModelInstance;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
@@ -7,7 +8,7 @@ import org.spongepowered.asm.mixin.gen.Accessor;
import java.util.Map; import java.util.Map;
@Mixin(targets = "net.minecraft.client.data.models.ModelProvider$SimpleModelCollector") @Mixin(ModelProvider.SimpleModelCollector.class)
public interface SimpleModelCollectorAccessor { public interface SimpleModelCollectorAccessor {
@Accessor @Accessor

View File

@@ -1,3 +1,3 @@
accessWidener v2 named accessWidener v2 named
accessible class net/minecraft/client/data/models/ModelProvider$ItemInfoCollector transitive-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$SimpleModelCollector