mirror of
https://github.com/GeyserMC/Rainbow.git
synced 2025-12-19 14:59:16 +00:00
Datagen module fixes
This commit is contained in:
@@ -5,7 +5,6 @@ import com.mojang.blaze3d.platform.NativeImage;
|
|||||||
import com.mojang.serialization.Codec;
|
import com.mojang.serialization.Codec;
|
||||||
import net.fabricmc.fabric.api.client.datagen.v1.provider.FabricModelProvider;
|
import net.fabricmc.fabric.api.client.datagen.v1.provider.FabricModelProvider;
|
||||||
import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput;
|
import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput;
|
||||||
import net.minecraft.Util;
|
|
||||||
import net.minecraft.client.data.models.model.ModelInstance;
|
import net.minecraft.client.data.models.model.ModelInstance;
|
||||||
import net.minecraft.client.renderer.block.model.BlockModel;
|
import net.minecraft.client.renderer.block.model.BlockModel;
|
||||||
import net.minecraft.client.renderer.block.model.ItemModelGenerator;
|
import net.minecraft.client.renderer.block.model.ItemModelGenerator;
|
||||||
@@ -19,10 +18,11 @@ import net.minecraft.core.component.DataComponentPatch;
|
|||||||
import net.minecraft.data.CachedOutput;
|
import net.minecraft.data.CachedOutput;
|
||||||
import net.minecraft.data.DataProvider;
|
import net.minecraft.data.DataProvider;
|
||||||
import net.minecraft.data.PackOutput;
|
import net.minecraft.data.PackOutput;
|
||||||
|
import net.minecraft.resources.Identifier;
|
||||||
import net.minecraft.resources.ResourceKey;
|
import net.minecraft.resources.ResourceKey;
|
||||||
import net.minecraft.resources.ResourceLocation;
|
|
||||||
import net.minecraft.server.packs.resources.ResourceManager;
|
import net.minecraft.server.packs.resources.ResourceManager;
|
||||||
import net.minecraft.util.ProblemReporter;
|
import net.minecraft.util.ProblemReporter;
|
||||||
|
import net.minecraft.util.Util;
|
||||||
import net.minecraft.world.item.Item;
|
import net.minecraft.world.item.Item;
|
||||||
import net.minecraft.world.item.equipment.EquipmentAsset;
|
import net.minecraft.world.item.equipment.EquipmentAsset;
|
||||||
import org.geysermc.rainbow.Rainbow;
|
import org.geysermc.rainbow.Rainbow;
|
||||||
@@ -60,11 +60,11 @@ public abstract class RainbowModelProvider extends FabricModelProvider {
|
|||||||
private final Path packPath;
|
private final Path packPath;
|
||||||
|
|
||||||
private Map<Item, ClientItem> itemInfos;
|
private Map<Item, ClientItem> itemInfos;
|
||||||
private Map<ResourceLocation, ModelInstance> models;
|
private Map<Identifier, ModelInstance> models;
|
||||||
|
|
||||||
protected RainbowModelProvider(FabricDataOutput output, CompletableFuture<HolderLookup.Provider> registries,
|
protected RainbowModelProvider(FabricDataOutput output, CompletableFuture<HolderLookup.Provider> registries,
|
||||||
Map<ResourceKey<EquipmentAsset>, EquipmentClientInfo> equipmentInfos, String packName,
|
Map<ResourceKey<EquipmentAsset>, EquipmentClientInfo> equipmentInfos, String packName,
|
||||||
ResourceLocation outputRoot, Path geyserMappingsPath, Path packPath) {
|
Identifier outputRoot, Path geyserMappingsPath, Path packPath) {
|
||||||
super(output);
|
super(output);
|
||||||
this.registries = registries;
|
this.registries = registries;
|
||||||
this.equipmentInfos = equipmentInfos;
|
this.equipmentInfos = equipmentInfos;
|
||||||
@@ -78,13 +78,13 @@ public abstract class RainbowModelProvider extends FabricModelProvider {
|
|||||||
|
|
||||||
protected RainbowModelProvider(FabricDataOutput output, CompletableFuture<HolderLookup.Provider> registries,
|
protected RainbowModelProvider(FabricDataOutput output, CompletableFuture<HolderLookup.Provider> registries,
|
||||||
Map<ResourceKey<EquipmentAsset>, EquipmentClientInfo> equipmentInfos, String packName,
|
Map<ResourceKey<EquipmentAsset>, EquipmentClientInfo> equipmentInfos, String packName,
|
||||||
ResourceLocation outputRoot) {
|
Identifier outputRoot) {
|
||||||
this(output, registries, equipmentInfos, packName, outputRoot, Path.of("geyser_mappings.json"), Path.of("pack"));
|
this(output, registries, equipmentInfos, packName, outputRoot, Path.of("geyser_mappings.json"), Path.of("pack"));
|
||||||
}
|
}
|
||||||
|
|
||||||
protected RainbowModelProvider(FabricDataOutput output, CompletableFuture<HolderLookup.Provider> registries,
|
protected RainbowModelProvider(FabricDataOutput output, CompletableFuture<HolderLookup.Provider> registries,
|
||||||
Map<ResourceKey<EquipmentAsset>, EquipmentClientInfo> equipmentInfos, String packName) {
|
Map<ResourceKey<EquipmentAsset>, EquipmentClientInfo> equipmentInfos, String packName) {
|
||||||
this(output, registries, equipmentInfos, packName, ResourceLocation.withDefaultNamespace("bedrock"));
|
this(output, registries, equipmentInfos, packName, Identifier.withDefaultNamespace("bedrock"));
|
||||||
}
|
}
|
||||||
|
|
||||||
protected RainbowModelProvider(FabricDataOutput output, CompletableFuture<HolderLookup.Provider> registries, String packName) {
|
protected RainbowModelProvider(FabricDataOutput output, CompletableFuture<HolderLookup.Provider> registries, String packName) {
|
||||||
@@ -105,7 +105,7 @@ public abstract class RainbowModelProvider extends FabricModelProvider {
|
|||||||
BedrockPack pack = createBedrockPack(new Serializer(output, registries),
|
BedrockPack pack = createBedrockPack(new Serializer(output, registries),
|
||||||
new DatagenResolver(resourceManager, equipmentInfos, itemInfos, models)).build();
|
new DatagenResolver(resourceManager, equipmentInfos, itemInfos, models)).build();
|
||||||
|
|
||||||
Set<Item> sortedItemInfos = new TreeSet<>(Comparator.comparing(item -> item.builtInRegistryHolder().key().location()));
|
Set<Item> sortedItemInfos = new TreeSet<>(Comparator.comparing(item -> item.builtInRegistryHolder().key().identifier()));
|
||||||
sortedItemInfos.addAll(itemInfos.keySet());
|
sortedItemInfos.addAll(itemInfos.keySet());
|
||||||
for (Item item : sortedItemInfos) {
|
for (Item item : sortedItemInfos) {
|
||||||
pack.map(getVanillaItem(item).builtInRegistryHolder(), getVanillaDataComponentPatch(item));
|
pack.map(getVanillaItem(item).builtInRegistryHolder(), getVanillaDataComponentPatch(item));
|
||||||
@@ -136,7 +136,7 @@ public abstract class RainbowModelProvider extends FabricModelProvider {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@ApiStatus.Internal
|
@ApiStatus.Internal
|
||||||
public void setModels(Map<ResourceLocation, ModelInstance> models) {
|
public void setModels(Map<Identifier, ModelInstance> models) {
|
||||||
this.models = models;
|
this.models = models;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -162,33 +162,33 @@ public abstract class RainbowModelProvider extends FabricModelProvider {
|
|||||||
private static class DatagenResolver implements AssetResolver {
|
private static class DatagenResolver implements AssetResolver {
|
||||||
private final ResourceManager resourceManager;
|
private final ResourceManager resourceManager;
|
||||||
private final Map<ResourceKey<EquipmentAsset>, EquipmentClientInfo> equipmentInfos;
|
private final Map<ResourceKey<EquipmentAsset>, EquipmentClientInfo> equipmentInfos;
|
||||||
private final Map<ResourceLocation, ClientItem> itemInfos;
|
private final Map<Identifier, ClientItem> itemInfos;
|
||||||
private final Map<ResourceLocation, ModelInstance> models;
|
private final Map<Identifier, ModelInstance> models;
|
||||||
private final Map<ResourceLocation, Optional<ResolvedModel>> resolvedModelCache = new HashMap<>();
|
private final Map<Identifier, Optional<ResolvedModel>> resolvedModelCache = new HashMap<>();
|
||||||
|
|
||||||
private DatagenResolver(ResourceManager resourceManager, Map<ResourceKey<EquipmentAsset>, EquipmentClientInfo> equipmentInfos,
|
private DatagenResolver(ResourceManager resourceManager, Map<ResourceKey<EquipmentAsset>, EquipmentClientInfo> equipmentInfos,
|
||||||
Map<Item, ClientItem> itemInfos, Map<ResourceLocation, ModelInstance> models) {
|
Map<Item, ClientItem> itemInfos, Map<Identifier, ModelInstance> models) {
|
||||||
this.resourceManager = resourceManager;
|
this.resourceManager = resourceManager;
|
||||||
this.equipmentInfos = equipmentInfos;
|
this.equipmentInfos = equipmentInfos;
|
||||||
this.itemInfos = new HashMap<>();
|
this.itemInfos = new HashMap<>();
|
||||||
for (Map.Entry<Item, ClientItem> entry : itemInfos.entrySet()) {
|
for (Map.Entry<Item, ClientItem> entry : itemInfos.entrySet()) {
|
||||||
this.itemInfos.put(entry.getKey().builtInRegistryHolder().key().location(), entry.getValue());
|
this.itemInfos.put(entry.getKey().builtInRegistryHolder().key().identifier(), entry.getValue());
|
||||||
}
|
}
|
||||||
this.models = models;
|
this.models = models;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Optional<ResolvedModel> getResolvedModel(ResourceLocation location) {
|
public Optional<ResolvedModel> getResolvedModel(Identifier identifier) {
|
||||||
return resolvedModelCache.computeIfAbsent(location, key -> Optional.ofNullable(models.get(location))
|
return resolvedModelCache.computeIfAbsent(identifier, key -> Optional.ofNullable(models.get(identifier))
|
||||||
.<UnbakedModel>map(instance -> BlockModel.fromStream(new StringReader(instance.get().toString())))
|
.<UnbakedModel>map(instance -> BlockModel.fromStream(new StringReader(instance.get().toString())))
|
||||||
.or(() -> {
|
.or(() -> {
|
||||||
if (location.equals(ItemModelGenerator.GENERATED_ITEM_MODEL_ID)) {
|
if (identifier.equals(ItemModelGenerator.GENERATED_ITEM_MODEL_ID)) {
|
||||||
return Optional.of(new ItemModelGenerator());
|
return Optional.of(new ItemModelGenerator());
|
||||||
}
|
}
|
||||||
return Optional.empty();
|
return Optional.empty();
|
||||||
})
|
})
|
||||||
.or(() -> RainbowIO.safeIO(() -> {
|
.or(() -> RainbowIO.safeIO(() -> {
|
||||||
try (BufferedReader reader = resourceManager.openAsReader(location.withPrefix("models/").withSuffix(".json"))) {
|
try (BufferedReader reader = resourceManager.openAsReader(identifier.withPrefix("models/").withSuffix(".json"))) {
|
||||||
return BlockModel.fromStream(reader);
|
return BlockModel.fromStream(reader);
|
||||||
}
|
}
|
||||||
}))
|
}))
|
||||||
@@ -205,14 +205,14 @@ public abstract class RainbowModelProvider extends FabricModelProvider {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @NotNull String debugName() {
|
public @NotNull String debugName() {
|
||||||
return location.toString();
|
return identifier.toString();
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Optional<ClientItem> getClientItem(ResourceLocation location) {
|
public Optional<ClientItem> getClientItem(Identifier identifier) {
|
||||||
return Optional.ofNullable(itemInfos.get(location));
|
return Optional.ofNullable(itemInfos.get(identifier));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -221,9 +221,9 @@ public abstract class RainbowModelProvider extends FabricModelProvider {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Optional<TextureResource> getTexture(ResourceLocation atlas, ResourceLocation location) {
|
public Optional<TextureResource> getTexture(Identifier atlas, Identifier identifier) {
|
||||||
// We don't care about atlas since there are none loaded at datagen
|
// We don't care about atlas since there are none loaded at datagen
|
||||||
return resourceManager.getResource(Rainbow.decorateTextureIdentifier(location))
|
return resourceManager.getResource(Rainbow.decorateTextureIdentifier(identifier))
|
||||||
.flatMap(resource -> RainbowIO.safeIO(() -> {
|
.flatMap(resource -> RainbowIO.safeIO(() -> {
|
||||||
Optional<AnimationMetadataSection> animationMetadata = resource.metadata().getSection(AnimationMetadataSection.TYPE);
|
Optional<AnimationMetadataSection> animationMetadata = resource.metadata().getSection(AnimationMetadataSection.TYPE);
|
||||||
try (InputStream textureStream = resource.open()) {
|
try (InputStream textureStream = resource.open()) {
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ package org.geysermc.rainbow.datagen.mixin;
|
|||||||
|
|
||||||
import net.minecraft.client.data.models.ModelProvider;
|
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.Identifier;
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
import org.spongepowered.asm.mixin.gen.Accessor;
|
import org.spongepowered.asm.mixin.gen.Accessor;
|
||||||
|
|
||||||
@@ -12,5 +12,5 @@ import java.util.Map;
|
|||||||
public interface SimpleModelCollectorAccessor {
|
public interface SimpleModelCollectorAccessor {
|
||||||
|
|
||||||
@Accessor
|
@Accessor
|
||||||
Map<ResourceLocation, ModelInstance> getModels();
|
Map<Identifier, ModelInstance> getModels();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user