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 9477500..bbed475 100644 --- a/datagen/src/main/java/org/geysermc/rainbow/datagen/RainbowModelProvider.java +++ b/datagen/src/main/java/org/geysermc/rainbow/datagen/RainbowModelProvider.java @@ -37,20 +37,26 @@ import java.util.concurrent.CompletableFuture; public abstract class RainbowModelProvider extends FabricModelProvider { private final CompletableFuture registries; - private final PackOutput.PathProvider bedrockPackPathProvider; private final Map, EquipmentClientInfo> equipmentInfos; + private final Path outputRoot; private Map itemInfos; private Map models; - public RainbowModelProvider(FabricDataOutput output, CompletableFuture registries, - Map, EquipmentClientInfo> equipmentInfos) { + protected RainbowModelProvider(FabricDataOutput output, CompletableFuture registries, + Map, EquipmentClientInfo> equipmentInfos, ResourceLocation outputRoot) { super(output); this.registries = registries; this.equipmentInfos = equipmentInfos; - bedrockPackPathProvider = output.createPathProvider(PackOutput.Target.RESOURCE_PACK, "bedrock"); + this.outputRoot = output.createPathProvider(PackOutput.Target.RESOURCE_PACK, outputRoot.getPath()) + .file(outputRoot, "").getParent(); } - public RainbowModelProvider(FabricDataOutput output, CompletableFuture registries) { + protected RainbowModelProvider(FabricDataOutput output, CompletableFuture registries, + Map, EquipmentClientInfo> equipmentInfos) { + this(output, registries, equipmentInfos, ResourceLocation.withDefaultNamespace("bedrock")); + } + + protected RainbowModelProvider(FabricDataOutput output, CompletableFuture registries) { this(output, registries, Map.of()); } @@ -61,7 +67,7 @@ public abstract class RainbowModelProvider extends FabricModelProvider { CompletableFuture bedrockPack = ClientPackLoader.openClientResources() .thenCompose(resourceManager -> registries.thenApply(registries -> { try (resourceManager) { - BedrockPack pack = createBedrockPack(new Serializer(output, registries, bedrockPackPathProvider), + BedrockPack pack = createBedrockPack(outputRoot, new Serializer(output, registries), new DatagenResolver(resourceManager, equipmentInfos, itemInfos, models)).build(); for (Item item : itemInfos.keySet()) { @@ -74,8 +80,8 @@ 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 BedrockPack.Builder createBedrockPack(Path outputRoot, PackSerializer serializer, AssetResolver resolver) { + return BedrockPack.builder("rainbow", outputRoot.resolve("geyser_mappings.json"), outputRoot.resolve("pack"), serializer, resolver); } protected abstract Item getVanillaItem(Item modded); @@ -96,12 +102,11 @@ public abstract class RainbowModelProvider extends FabricModelProvider { this.models = models; } - private record Serializer(CachedOutput output, HolderLookup.Provider registries, PackOutput.PathProvider provider) implements PackSerializer { + private record Serializer(CachedOutput output, HolderLookup.Provider registries) implements PackSerializer { @Override public CompletableFuture saveJson(Codec codec, T object, Path path) { - ResourceLocation location = ResourceLocation.withDefaultNamespace(path.toString()); - return DataProvider.saveStable(output, registries, codec, object, provider.json(location)); + return DataProvider.saveStable(output, registries, codec, object, path); } @Override diff --git a/rainbow/src/main/java/org/geysermc/rainbow/mapping/BedrockItemMapper.java b/rainbow/src/main/java/org/geysermc/rainbow/mapping/BedrockItemMapper.java index cf94d06..72c1d7b 100644 --- a/rainbow/src/main/java/org/geysermc/rainbow/mapping/BedrockItemMapper.java +++ b/rainbow/src/main/java/org/geysermc/rainbow/mapping/BedrockItemMapper.java @@ -81,6 +81,7 @@ public class BedrockItemMapper { } public static void tryMapStack(ItemStack stack, int customModelData, ProblemReporter reporter, PackContext context) { + // TODO Improve this, use resouce log in problemreporter ItemModel.Unbaked vanillaModel = context.assetResolver().getClientItem(stack.get(DataComponents.ITEM_MODEL)).map(ClientItem::model).orElseThrow(); ProblemReporter childReporter = reporter.forChild(() -> "item model " + vanillaModel + " with custom model data " + customModelData + " "); if (vanillaModel instanceof RangeSelectItemModel.Unbaked(RangeSelectItemModelProperty property, float scale, List entries, Optional fallback)) { diff --git a/rainbow/src/main/java/org/geysermc/rainbow/pack/BedrockPack.java b/rainbow/src/main/java/org/geysermc/rainbow/pack/BedrockPack.java index 54c9442..4252d29 100644 --- a/rainbow/src/main/java/org/geysermc/rainbow/pack/BedrockPack.java +++ b/rainbow/src/main/java/org/geysermc/rainbow/pack/BedrockPack.java @@ -174,8 +174,8 @@ public class BedrockPack { private static final Path GEOMETRY_DIRECTORY = Path.of("models/entity"); private static final Path ANIMATION_DIRECTORY = Path.of("animations"); - private static final Path MANIFEST_FILE = Path.of("manifest"); - private static final Path ITEM_ATLAS_FILE = Path.of("textures/item_texture"); + private static final Path MANIFEST_FILE = Path.of("manifest.json"); + private static final Path ITEM_ATLAS_FILE = Path.of("textures/item_texture.json"); private final String name; private final Path mappingsPath; diff --git a/rainbow/src/main/java/org/geysermc/rainbow/pack/animation/BedrockAnimation.java b/rainbow/src/main/java/org/geysermc/rainbow/pack/animation/BedrockAnimation.java index 9131dad..263813e 100644 --- a/rainbow/src/main/java/org/geysermc/rainbow/pack/animation/BedrockAnimation.java +++ b/rainbow/src/main/java/org/geysermc/rainbow/pack/animation/BedrockAnimation.java @@ -26,7 +26,7 @@ public record BedrockAnimation(BedrockVersion formatVersion, Map save(PackSerializer serializer, Path animationDirectory, String identifier) { - return serializer.saveJson(CODEC, this, animationDirectory.resolve(identifier + ".animation")); + return serializer.saveJson(CODEC, this, animationDirectory.resolve(identifier + ".animation.json")); } public static Builder builder() { diff --git a/rainbow/src/main/java/org/geysermc/rainbow/pack/attachable/BedrockAttachable.java b/rainbow/src/main/java/org/geysermc/rainbow/pack/attachable/BedrockAttachable.java index baf940f..32b95d0 100644 --- a/rainbow/src/main/java/org/geysermc/rainbow/pack/attachable/BedrockAttachable.java +++ b/rainbow/src/main/java/org/geysermc/rainbow/pack/attachable/BedrockAttachable.java @@ -37,7 +37,7 @@ public record BedrockAttachable(BedrockVersion formatVersion, AttachableInfo inf public CompletableFuture save(PackSerializer serializer, Path attachablesDirectory) { // Get a safe attachable path by using Geyser's way of getting icons - return serializer.saveJson(CODEC, this, attachablesDirectory.resolve(Rainbow.fileSafeResourceLocation(info.identifier))); + return serializer.saveJson(CODEC, this, attachablesDirectory.resolve(Rainbow.fileSafeResourceLocation(info.identifier) + ".json")); } public static Builder builder(ResourceLocation identifier) { diff --git a/rainbow/src/main/java/org/geysermc/rainbow/pack/geometry/BedrockGeometry.java b/rainbow/src/main/java/org/geysermc/rainbow/pack/geometry/BedrockGeometry.java index 665d445..29048fe 100644 --- a/rainbow/src/main/java/org/geysermc/rainbow/pack/geometry/BedrockGeometry.java +++ b/rainbow/src/main/java/org/geysermc/rainbow/pack/geometry/BedrockGeometry.java @@ -33,7 +33,7 @@ public record BedrockGeometry(BedrockVersion formatVersion, List save(PackSerializer serializer, Path geometryDirectory) { - return serializer.saveJson(CODEC, this, geometryDirectory.resolve(definitions.getFirst().info.identifier + ".geo")); + return serializer.saveJson(CODEC, this, geometryDirectory.resolve(definitions.getFirst().info.identifier + ".geo.json")); } public static BedrockGeometry of(GeometryDefinition... definitions) {