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 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)

View File

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

View File

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

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.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<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) {
final var block = new JoyBedBlock(copy(src));
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",
"refmap": "joy.refmap.json",
"compatibilityLevel": "JAVA_21",
"mixins": ["AllayEntityMixin", "LivingEntityMixin", "PaintingVariantsMixin"],
"mixins": [
"AllayEntityMixin", "LivingEntityMixin", "PaintingVariantsMixin",
"minecraft.AccessorPoi"
],
"injectors": {
"defaultRequire": 1
},