diff --git a/xplat/src/datagen/java/gay/pridecraft/joy/data/JoyModelProvider.java b/xplat/src/datagen/java/gay/pridecraft/joy/data/JoyModelProvider.java index a335d02..5508526 100644 --- a/xplat/src/datagen/java/gay/pridecraft/joy/data/JoyModelProvider.java +++ b/xplat/src/datagen/java/gay/pridecraft/joy/data/JoyModelProvider.java @@ -7,13 +7,19 @@ import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput; import net.fabricmc.fabric.api.datagen.v1.provider.FabricModelProvider; import net.minecraft.block.Block; import net.minecraft.block.Blocks; +import net.minecraft.block.CakeBlock; import net.minecraft.data.client.BlockStateModelGenerator; +import net.minecraft.data.client.BlockStateSupplier; +import net.minecraft.data.client.BlockStateVariant; import net.minecraft.data.client.ItemModelGenerator; import net.minecraft.data.client.Model; import net.minecraft.data.client.ModelIds; import net.minecraft.data.client.Models; +import net.minecraft.data.client.MultipartBlockStateSupplier; import net.minecraft.data.client.TextureKey; import net.minecraft.data.client.TextureMap; +import net.minecraft.data.client.VariantSettings; +import net.minecraft.data.client.When; import net.minecraft.util.Identifier; import java.util.Optional; @@ -58,6 +64,7 @@ public class JoyModelProvider extends FabricModelProvider { gen.registerCandle(JoyBlocks.AROACE_CANDLE, JoyBlocks.AROACE_CANDLE_CAKE); gen.registerCandle(JoyBlocks.LESBIAN_CANDLE, JoyBlocks.LESBIAN_CANDLE_CAKE); gen.registerCandle(JoyBlocks.PROGRESS_CANDLE, JoyBlocks.PROGRESS_CANDLE_CAKE); + registerCake(gen, JoyBlocks.PRIDE_CAKE); } private static void registerBed(BlockStateModelGenerator gen, Block block) { @@ -72,6 +79,44 @@ public class JoyModelProvider extends FabricModelProvider { gen.blockStateCollector.accept(BlockStateModelGenerator.createSingletonBlockState(block, ModelIds.getBlockModelId(block))); } + public static void registerCake(BlockStateModelGenerator gen, Block cake) { + gen.registerItemModel(cake.asItem()); + + final var base = blockVanilla("cake", TextureKey.TOP); + base.upload( + ModelIds.getBlockModelId(cake), + TextureMap.top(cake), + gen.modelCollector + ); + + for (int i = 1; i <= 6; i++) { + final var slice = blockVanilla("cake_slice" + i, TextureKey.TOP); + slice.upload( + ModelIds.getBlockSubModelId(cake, "_slice" + i), + TextureMap.top(cake), + gen.modelCollector + ); + } + + gen.blockStateCollector.accept(cakeBlockState(cake, ModelIds.getBlockModelId(cake))); + } + + private static BlockStateSupplier cakeBlockState(Block block, Identifier base) { + final var supplier = MultipartBlockStateSupplier.create(block) + .with(When.create().set(CakeBlock.BITES, 0), model(base)); + + for (int i = 1; i <= 6; i++) { + supplier.with(When.create().set(CakeBlock.BITES, i), model(base.withSuffixedPath("_slice" + i))); + } + + return supplier; + } + + private static BlockStateVariant model(Identifier model) { + return BlockStateVariant.create() + .put(VariantSettings.MODEL, model); + } + @Override public void generateItemModels(ItemModelGenerator gen) { for (final var bundle : JoyItems.BUNDLES) { @@ -102,6 +147,10 @@ public class JoyModelProvider extends FabricModelProvider { return new Model(Optional.of(JoyUtil.id("block/" + parent)), Optional.empty(), requiredTextureKeys);// 191 } + private static Model blockVanilla(String parent, TextureKey... requiredTextureKeys) { + return new Model(Optional.of(Identifier.ofVanilla("block/" + parent)), Optional.empty(), requiredTextureKeys);// 191 + } + private static Model item(String parent, TextureKey... requiredTextureKeys) { return new Model(Optional.of(JoyUtil.id("item/" + parent)), Optional.empty(), requiredTextureKeys);// 195 } diff --git a/xplat/src/main/java/gay/pridecraft/joy/item/JoyItemGroups.java b/xplat/src/main/java/gay/pridecraft/joy/item/JoyItemGroups.java index bc5fc66..faa8a43 100644 --- a/xplat/src/main/java/gay/pridecraft/joy/item/JoyItemGroups.java +++ b/xplat/src/main/java/gay/pridecraft/joy/item/JoyItemGroups.java @@ -96,6 +96,12 @@ public final class JoyItemGroups { entries.add(JoyItems.PRIDE_ELYTRA); }); + public static final ItemGroup FOOD = register("food", + () -> new ItemStack(JoyBlocks.PRIDE_CAKE), + (ctx, entries) -> { + entries.add(JoyBlocks.PRIDE_CAKE); + }); + public static final ItemGroup JOY_BUNDLES = register("bundles", JoyItems.PROGRESS_BUNDLE::getDefaultStack, (ctx, entries) -> JoyItems.BUNDLES.forEach(entries::add)); diff --git a/xplat/src/main/java/gay/pridecraft/joy/registry/JoyBlocks.java b/xplat/src/main/java/gay/pridecraft/joy/registry/JoyBlocks.java index 4d9628c..909e751 100644 --- a/xplat/src/main/java/gay/pridecraft/joy/registry/JoyBlocks.java +++ b/xplat/src/main/java/gay/pridecraft/joy/registry/JoyBlocks.java @@ -5,6 +5,7 @@ import gay.pridecraft.joy.block.JoyBedBlock; import net.minecraft.block.AbstractBlock; import net.minecraft.block.Block; import net.minecraft.block.Blocks; +import net.minecraft.block.CakeBlock; import net.minecraft.block.CandleBlock; import net.minecraft.block.CandleCakeBlock; import net.minecraft.item.BlockItem; @@ -159,15 +160,18 @@ public final class JoyBlocks { new CandleCakeBlock(TRANS_CANDLE, AbstractBlock.Settings.copy(Blocks.CANDLE_CAKE))); public static final Block AROACE_CANDLE_CAKE = registerBlock("aroace_candle_cake", - new CandleCakeBlock(AROACE_CANDLE, AbstractBlock.Settings.copy(Blocks.CANDLE_CAKE))); + new CandleCakeBlock(AROACE_CANDLE, AbstractBlock.Settings.copy(Blocks.CANDLE_CAKE))); public static final Block LESBIAN_CANDLE_CAKE = registerBlock("lesbian_candle_cake", - new CandleCakeBlock(LESBIAN_CANDLE, AbstractBlock.Settings.copy(Blocks.CANDLE_CAKE))); + new CandleCakeBlock(LESBIAN_CANDLE, AbstractBlock.Settings.copy(Blocks.CANDLE_CAKE))); public static final Block PROGRESS_CANDLE_CAKE = registerBlock("progress_candle_cake", - new CandleCakeBlock(PROGRESS_CANDLE, AbstractBlock.Settings.copy(Blocks.CANDLE_CAKE))); + new CandleCakeBlock(PROGRESS_CANDLE, AbstractBlock.Settings.copy(Blocks.CANDLE_CAKE))); // endregion + public static final Block PRIDE_CAKE = registerBlock("pride_cake", + new CakeBlock(AbstractBlock.Settings.copy(Blocks.CAKE))); + // region Registration Helpers private static Block registerBlock(String name, Block block) { registerBlockItem(name, block); diff --git a/xplat/src/main/resources/assets/joy/lang/en_us.json b/xplat/src/main/resources/assets/joy/lang/en_us.json index 91a92ad..50b6563 100644 --- a/xplat/src/main/resources/assets/joy/lang/en_us.json +++ b/xplat/src/main/resources/assets/joy/lang/en_us.json @@ -5,6 +5,7 @@ "itemgroup.joy.entities": "Joy Entities", "itemgroup.joy.hajs": "Håjs", "itemgroup.joy.misc": "Joy Misc", + "itemgroup.joy.food": "Joy Food", "block.joy.gay_bed": "Gay Bed", "block.joy.enby_bed": "Enby Bed", @@ -41,6 +42,8 @@ "block.joy.lesbian_candle": "Lesbian Candle", "block.joy.progress_candle": "Progress Candle", + "block.joy.pride_cake": "Pride Cake", + "item.joy.pride_elytra": "Pride Elytra", "item.joy.totem_of_pride": "Totem of Pride", "item.joy.pride_brush": "Pride Brush",