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:
@@ -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 {
|
||||||
|
|||||||
@@ -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));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user