From 3423dffea23edef9861594294e3c56bb8a7a3c87 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ampflower=20=F0=9F=8C=BA?= Date: Thu, 13 Mar 2025 12:48:46 -0700 Subject: [PATCH] fix: villagers unable to sleep in Joy's bed Fixes #55 --- .../joy/data/JoyBlockTagProvider.java | 18 ++---------- xplat/src/datagen/resources/fabric.mod.json | 1 + .../main/java/gay/pridecraft/joy/JoyUtil.java | 14 +++++++++ .../main/java/gay/pridecraft/joy/Pivot.java | 2 ++ .../joy/mixin/minecraft/AccessorPoi.java | 29 +++++++++++++++++++ .../pridecraft/joy/registry/JoyBlocks.java | 21 ++++++++++++++ .../gay/pridecraft/joy/registry/JoyPoi.java | 26 +++++++++++++++++ xplat/src/main/resources/joy.mixins.json | 5 +++- 8 files changed, 99 insertions(+), 17 deletions(-) create mode 100644 xplat/src/main/java/gay/pridecraft/joy/mixin/minecraft/AccessorPoi.java create mode 100644 xplat/src/main/java/gay/pridecraft/joy/registry/JoyPoi.java diff --git a/xplat/src/datagen/java/gay/pridecraft/joy/data/JoyBlockTagProvider.java b/xplat/src/datagen/java/gay/pridecraft/joy/data/JoyBlockTagProvider.java index 27abe53..403e1d4 100644 --- a/xplat/src/datagen/java/gay/pridecraft/joy/data/JoyBlockTagProvider.java +++ b/xplat/src/datagen/java/gay/pridecraft/joy/data/JoyBlockTagProvider.java @@ -3,6 +3,7 @@ package gay.pridecraft.joy.data; import gay.pridecraft.joy.registry.JoyBlocks; import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput; import net.fabricmc.fabric.api.datagen.v1.provider.FabricTagProvider; +import net.minecraft.block.Block; import net.minecraft.registry.RegistryWrapper; import net.minecraft.registry.tag.BlockTags; @@ -35,22 +36,7 @@ public class JoyBlockTagProvider extends FabricTagProvider.BlockTagProvider { .add(JoyBlocks.PROGRESS_CANDLE); getOrCreateTagBuilder(BlockTags.BEDS) - .add(JoyBlocks.GAY_BED) - .add(JoyBlocks.ENBY_BED) - .add(JoyBlocks.INTERSEX_BED) - .add(JoyBlocks.AGENDER_BED) - .add(JoyBlocks.BIGENDER_BED) - .add(JoyBlocks.BISEXUAL_BED) - .add(JoyBlocks.MLM_BED) - .add(JoyBlocks.ACE_BED) - .add(JoyBlocks.ARO_BED) - .add(JoyBlocks.APLATONIC_BED) - .add(JoyBlocks.GENDER_FLUID_BED) - .add(JoyBlocks.PAN_BED) - .add(JoyBlocks.TRANS_BED) - .add(JoyBlocks.AROACE_BED) - .add(JoyBlocks.LESBIAN_BED) - .add(JoyBlocks.PROGRESS_BED); + .add(JoyBlocks.BEDS.toArray(Block[]::new)); getOrCreateTagBuilder(BlockTags.CANDLE_CAKES) .add(JoyBlocks.QUEER_CANDLE_CAKE) diff --git a/xplat/src/datagen/resources/fabric.mod.json b/xplat/src/datagen/resources/fabric.mod.json index b2cc3e8..c3c0b98 100644 --- a/xplat/src/datagen/resources/fabric.mod.json +++ b/xplat/src/datagen/resources/fabric.mod.json @@ -12,6 +12,7 @@ ] }, "mixins": [ + "joy.mixins.json", "joy-data.mixin.json" ] } diff --git a/xplat/src/main/java/gay/pridecraft/joy/JoyUtil.java b/xplat/src/main/java/gay/pridecraft/joy/JoyUtil.java index 7040f25..f1f4671 100644 --- a/xplat/src/main/java/gay/pridecraft/joy/JoyUtil.java +++ b/xplat/src/main/java/gay/pridecraft/joy/JoyUtil.java @@ -1,7 +1,13 @@ package gay.pridecraft.joy; +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.registry.RegistryKey; +import net.minecraft.registry.entry.RegistryEntry; import net.minecraft.util.Identifier; +import java.util.stream.Stream; + /** * @author Ampflower * @since 1.0.0 @@ -15,4 +21,12 @@ public final class JoyUtil { public static Identifier id(String name) { return Identifier.of(id, name); } + + public static Stream streamBlockStates(Block block) { + return block.getStateManager().getStates().stream(); + } + + public static RegistryEntry getEntry(RegistryKey entry) { + return Pivot.getRegistry(entry.getRegistryRef()).entryOf(entry); + } } diff --git a/xplat/src/main/java/gay/pridecraft/joy/Pivot.java b/xplat/src/main/java/gay/pridecraft/joy/Pivot.java index 9a9194e..2478984 100644 --- a/xplat/src/main/java/gay/pridecraft/joy/Pivot.java +++ b/xplat/src/main/java/gay/pridecraft/joy/Pivot.java @@ -7,6 +7,7 @@ import gay.pridecraft.joy.registry.JoyEntities; import gay.pridecraft.joy.registry.JoyItemGroups; import gay.pridecraft.joy.registry.JoyItems; import gay.pridecraft.joy.registry.JoyParticles; +import gay.pridecraft.joy.registry.JoyPoi; import gay.pridecraft.joy.registry.JoySoundEvents; import net.minecraft.item.ItemGroup; import net.minecraft.particle.SimpleParticleType; @@ -61,5 +62,6 @@ public interface Pivot { BlahajDataComponentTypes.init(); BlahajBlocks.init(); JoyItemGroups.init(); + JoyPoi.init(); } } diff --git a/xplat/src/main/java/gay/pridecraft/joy/mixin/minecraft/AccessorPoi.java b/xplat/src/main/java/gay/pridecraft/joy/mixin/minecraft/AccessorPoi.java new file mode 100644 index 0000000..99cfb16 --- /dev/null +++ b/xplat/src/main/java/gay/pridecraft/joy/mixin/minecraft/AccessorPoi.java @@ -0,0 +1,29 @@ +package gay.pridecraft.joy.mixin.minecraft; + +import net.minecraft.block.BlockState; +import net.minecraft.registry.entry.RegistryEntry; +import net.minecraft.world.poi.PointOfInterestType; +import net.minecraft.world.poi.PointOfInterestTypes; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; +import org.spongepowered.asm.mixin.gen.Invoker; + +import java.util.Map; +import java.util.Set; + +/** + * @author Ampflower + * @since 1.0.0 + **/ +@Mixin(PointOfInterestTypes.class) +public interface AccessorPoi { + @Accessor("POI_STATES_TO_TYPE") + static Map> getPoiStatesToType() { + throw new AssertionError(); + } + + @Invoker + static void invokeRegisterStates(RegistryEntry poi, Set states) { + throw new AssertionError(); + } +} 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 b45716f..39c01ed 100644 --- a/xplat/src/main/java/gay/pridecraft/joy/registry/JoyBlocks.java +++ b/xplat/src/main/java/gay/pridecraft/joy/registry/JoyBlocks.java @@ -15,6 +15,8 @@ import net.minecraft.item.Item; import net.minecraft.registry.Registries; import net.minecraft.registry.RegistryKeys; +import java.util.List; + import static net.minecraft.block.AbstractBlock.Settings.copy; public final class JoyBlocks { @@ -37,6 +39,25 @@ public final class JoyBlocks { LESBIAN_BED = registerBed("lesbian_bed", Blocks.ORANGE_BED), PROGRESS_BED = registerBed("progress_bed", Blocks.WHITE_BED); + public static final List BEDS = List.of( + GAY_BED, + ENBY_BED, + INTERSEX_BED, + AGENDER_BED, + BIGENDER_BED, + BISEXUAL_BED, + MLM_BED, + ACE_BED, + ARO_BED, + APLATONIC_BED, + GENDER_FLUID_BED, + PAN_BED, + TRANS_BED, + AROACE_BED, + LESBIAN_BED, + PROGRESS_BED + ); + private static Block registerBed(String name, Block src) { final var block = new JoyBedBlock(copy(src)); Pivot.INSTANCE.register(RegistryKeys.ITEM, name, new BedItem(block, new Item.Settings().maxCount(1))); diff --git a/xplat/src/main/java/gay/pridecraft/joy/registry/JoyPoi.java b/xplat/src/main/java/gay/pridecraft/joy/registry/JoyPoi.java new file mode 100644 index 0000000..c1d7765 --- /dev/null +++ b/xplat/src/main/java/gay/pridecraft/joy/registry/JoyPoi.java @@ -0,0 +1,26 @@ +package gay.pridecraft.joy.registry; + +import gay.pridecraft.joy.JoyUtil; +import gay.pridecraft.joy.mixin.minecraft.AccessorPoi; +import net.minecraft.block.BedBlock; +import net.minecraft.block.enums.BedPart; +import net.minecraft.world.poi.PointOfInterestTypes; + +import java.util.stream.Collectors; + +/** + * @author Ampflower + * @since 1.0.0 + **/ +public final class JoyPoi { + + public static void init() { + AccessorPoi.invokeRegisterStates( + JoyUtil.getEntry(PointOfInterestTypes.HOME), + JoyBlocks.BEDS.stream() + .flatMap(JoyUtil::streamBlockStates) + .filter(state -> state.get(BedBlock.PART) == BedPart.HEAD) + .collect(Collectors.toSet()) + ); + } +} diff --git a/xplat/src/main/resources/joy.mixins.json b/xplat/src/main/resources/joy.mixins.json index 666caa9..c8d387f 100644 --- a/xplat/src/main/resources/joy.mixins.json +++ b/xplat/src/main/resources/joy.mixins.json @@ -4,7 +4,10 @@ "package": "gay.pridecraft.joy.mixin", "refmap": "joy.refmap.json", "compatibilityLevel": "JAVA_21", - "mixins": ["AllayEntityMixin", "LivingEntityMixin", "PaintingVariantsMixin"], + "mixins": [ + "AllayEntityMixin", "LivingEntityMixin", "PaintingVariantsMixin", + "minecraft.AccessorPoi" + ], "injectors": { "defaultRequire": 1 },