fix: villagers unable to sleep in Joy's bed

Fixes #55
This commit is contained in:
Ampflower 🌺 2025-03-13 12:48:46 -07:00
parent d1c34aa464
commit 3423dffea2
No known key found for this signature in database
GPG Key ID: FC0397C90D508D7F
8 changed files with 99 additions and 17 deletions

View File

@ -3,6 +3,7 @@ package gay.pridecraft.joy.data;
import gay.pridecraft.joy.registry.JoyBlocks; import gay.pridecraft.joy.registry.JoyBlocks;
import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput; import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput;
import net.fabricmc.fabric.api.datagen.v1.provider.FabricTagProvider; import net.fabricmc.fabric.api.datagen.v1.provider.FabricTagProvider;
import net.minecraft.block.Block;
import net.minecraft.registry.RegistryWrapper; import net.minecraft.registry.RegistryWrapper;
import net.minecraft.registry.tag.BlockTags; import net.minecraft.registry.tag.BlockTags;
@ -35,22 +36,7 @@ public class JoyBlockTagProvider extends FabricTagProvider.BlockTagProvider {
.add(JoyBlocks.PROGRESS_CANDLE); .add(JoyBlocks.PROGRESS_CANDLE);
getOrCreateTagBuilder(BlockTags.BEDS) getOrCreateTagBuilder(BlockTags.BEDS)
.add(JoyBlocks.GAY_BED) .add(JoyBlocks.BEDS.toArray(Block[]::new));
.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);
getOrCreateTagBuilder(BlockTags.CANDLE_CAKES) getOrCreateTagBuilder(BlockTags.CANDLE_CAKES)
.add(JoyBlocks.QUEER_CANDLE_CAKE) .add(JoyBlocks.QUEER_CANDLE_CAKE)

View File

@ -12,6 +12,7 @@
] ]
}, },
"mixins": [ "mixins": [
"joy.mixins.json",
"joy-data.mixin.json" "joy-data.mixin.json"
] ]
} }

View File

@ -1,7 +1,13 @@
package gay.pridecraft.joy; 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 net.minecraft.util.Identifier;
import java.util.stream.Stream;
/** /**
* @author Ampflower * @author Ampflower
* @since 1.0.0 * @since 1.0.0
@ -15,4 +21,12 @@ public final class JoyUtil {
public static Identifier id(String name) { public static Identifier id(String name) {
return Identifier.of(id, name); return Identifier.of(id, name);
} }
public static Stream<BlockState> streamBlockStates(Block block) {
return block.getStateManager().getStates().stream();
}
public static <T> RegistryEntry<T> getEntry(RegistryKey<T> entry) {
return Pivot.getRegistry(entry.getRegistryRef()).entryOf(entry);
}
} }

View File

@ -7,6 +7,7 @@ import gay.pridecraft.joy.registry.JoyEntities;
import gay.pridecraft.joy.registry.JoyItemGroups; import gay.pridecraft.joy.registry.JoyItemGroups;
import gay.pridecraft.joy.registry.JoyItems; import gay.pridecraft.joy.registry.JoyItems;
import gay.pridecraft.joy.registry.JoyParticles; import gay.pridecraft.joy.registry.JoyParticles;
import gay.pridecraft.joy.registry.JoyPoi;
import gay.pridecraft.joy.registry.JoySoundEvents; import gay.pridecraft.joy.registry.JoySoundEvents;
import net.minecraft.item.ItemGroup; import net.minecraft.item.ItemGroup;
import net.minecraft.particle.SimpleParticleType; import net.minecraft.particle.SimpleParticleType;
@ -61,5 +62,6 @@ public interface Pivot {
BlahajDataComponentTypes.init(); BlahajDataComponentTypes.init();
BlahajBlocks.init(); BlahajBlocks.init();
JoyItemGroups.init(); JoyItemGroups.init();
JoyPoi.init();
} }
} }

View File

@ -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<BlockState, RegistryEntry<PointOfInterestType>> getPoiStatesToType() {
throw new AssertionError();
}
@Invoker
static void invokeRegisterStates(RegistryEntry<PointOfInterestType> poi, Set<BlockState> states) {
throw new AssertionError();
}
}

View File

@ -15,6 +15,8 @@ import net.minecraft.item.Item;
import net.minecraft.registry.Registries; import net.minecraft.registry.Registries;
import net.minecraft.registry.RegistryKeys; import net.minecraft.registry.RegistryKeys;
import java.util.List;
import static net.minecraft.block.AbstractBlock.Settings.copy; import static net.minecraft.block.AbstractBlock.Settings.copy;
public final class JoyBlocks { public final class JoyBlocks {
@ -37,6 +39,25 @@ public final class JoyBlocks {
LESBIAN_BED = registerBed("lesbian_bed", Blocks.ORANGE_BED), LESBIAN_BED = registerBed("lesbian_bed", Blocks.ORANGE_BED),
PROGRESS_BED = registerBed("progress_bed", Blocks.WHITE_BED); PROGRESS_BED = registerBed("progress_bed", Blocks.WHITE_BED);
public static final List<Block> 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) { private static Block registerBed(String name, Block src) {
final var block = new JoyBedBlock(copy(src)); final var block = new JoyBedBlock(copy(src));
Pivot.INSTANCE.register(RegistryKeys.ITEM, name, new BedItem(block, new Item.Settings().maxCount(1))); Pivot.INSTANCE.register(RegistryKeys.ITEM, name, new BedItem(block, new Item.Settings().maxCount(1)));

View File

@ -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())
);
}
}

View File

@ -4,7 +4,10 @@
"package": "gay.pridecraft.joy.mixin", "package": "gay.pridecraft.joy.mixin",
"refmap": "joy.refmap.json", "refmap": "joy.refmap.json",
"compatibilityLevel": "JAVA_21", "compatibilityLevel": "JAVA_21",
"mixins": ["AllayEntityMixin", "LivingEntityMixin", "PaintingVariantsMixin"], "mixins": [
"AllayEntityMixin", "LivingEntityMixin", "PaintingVariantsMixin",
"minecraft.AccessorPoi"
],
"injectors": { "injectors": {
"defaultRequire": 1 "defaultRequire": 1
}, },