Skip to content

Commit 3423dff

Browse files
committed
fix: villagers unable to sleep in Joy's bed
Fixes #55
1 parent d1c34aa commit 3423dff

File tree

8 files changed

+99
-17
lines changed

8 files changed

+99
-17
lines changed

xplat/src/datagen/java/gay/pridecraft/joy/data/JoyBlockTagProvider.java

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import gay.pridecraft.joy.registry.JoyBlocks;
44
import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput;
55
import net.fabricmc.fabric.api.datagen.v1.provider.FabricTagProvider;
6+
import net.minecraft.block.Block;
67
import net.minecraft.registry.RegistryWrapper;
78
import net.minecraft.registry.tag.BlockTags;
89

@@ -35,22 +36,7 @@ protected void configure(RegistryWrapper.WrapperLookup arg) {
3536
.add(JoyBlocks.PROGRESS_CANDLE);
3637

3738
getOrCreateTagBuilder(BlockTags.BEDS)
38-
.add(JoyBlocks.GAY_BED)
39-
.add(JoyBlocks.ENBY_BED)
40-
.add(JoyBlocks.INTERSEX_BED)
41-
.add(JoyBlocks.AGENDER_BED)
42-
.add(JoyBlocks.BIGENDER_BED)
43-
.add(JoyBlocks.BISEXUAL_BED)
44-
.add(JoyBlocks.MLM_BED)
45-
.add(JoyBlocks.ACE_BED)
46-
.add(JoyBlocks.ARO_BED)
47-
.add(JoyBlocks.APLATONIC_BED)
48-
.add(JoyBlocks.GENDER_FLUID_BED)
49-
.add(JoyBlocks.PAN_BED)
50-
.add(JoyBlocks.TRANS_BED)
51-
.add(JoyBlocks.AROACE_BED)
52-
.add(JoyBlocks.LESBIAN_BED)
53-
.add(JoyBlocks.PROGRESS_BED);
39+
.add(JoyBlocks.BEDS.toArray(Block[]::new));
5440

5541
getOrCreateTagBuilder(BlockTags.CANDLE_CAKES)
5642
.add(JoyBlocks.QUEER_CANDLE_CAKE)

xplat/src/datagen/resources/fabric.mod.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
]
1313
},
1414
"mixins": [
15+
"joy.mixins.json",
1516
"joy-data.mixin.json"
1617
]
1718
}

xplat/src/main/java/gay/pridecraft/joy/JoyUtil.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,13 @@
11
package gay.pridecraft.joy;
22

3+
import net.minecraft.block.Block;
4+
import net.minecraft.block.BlockState;
5+
import net.minecraft.registry.RegistryKey;
6+
import net.minecraft.registry.entry.RegistryEntry;
37
import net.minecraft.util.Identifier;
48

9+
import java.util.stream.Stream;
10+
511
/**
612
* @author Ampflower
713
* @since 1.0.0
@@ -15,4 +21,12 @@ private JoyUtil() {
1521
public static Identifier id(String name) {
1622
return Identifier.of(id, name);
1723
}
24+
25+
public static Stream<BlockState> streamBlockStates(Block block) {
26+
return block.getStateManager().getStates().stream();
27+
}
28+
29+
public static <T> RegistryEntry<T> getEntry(RegistryKey<T> entry) {
30+
return Pivot.getRegistry(entry.getRegistryRef()).entryOf(entry);
31+
}
1832
}

xplat/src/main/java/gay/pridecraft/joy/Pivot.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import gay.pridecraft.joy.registry.JoyItemGroups;
88
import gay.pridecraft.joy.registry.JoyItems;
99
import gay.pridecraft.joy.registry.JoyParticles;
10+
import gay.pridecraft.joy.registry.JoyPoi;
1011
import gay.pridecraft.joy.registry.JoySoundEvents;
1112
import net.minecraft.item.ItemGroup;
1213
import net.minecraft.particle.SimpleParticleType;
@@ -61,5 +62,6 @@ static void init() {
6162
BlahajDataComponentTypes.init();
6263
BlahajBlocks.init();
6364
JoyItemGroups.init();
65+
JoyPoi.init();
6466
}
6567
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package gay.pridecraft.joy.mixin.minecraft;
2+
3+
import net.minecraft.block.BlockState;
4+
import net.minecraft.registry.entry.RegistryEntry;
5+
import net.minecraft.world.poi.PointOfInterestType;
6+
import net.minecraft.world.poi.PointOfInterestTypes;
7+
import org.spongepowered.asm.mixin.Mixin;
8+
import org.spongepowered.asm.mixin.gen.Accessor;
9+
import org.spongepowered.asm.mixin.gen.Invoker;
10+
11+
import java.util.Map;
12+
import java.util.Set;
13+
14+
/**
15+
* @author Ampflower
16+
* @since 1.0.0
17+
**/
18+
@Mixin(PointOfInterestTypes.class)
19+
public interface AccessorPoi {
20+
@Accessor("POI_STATES_TO_TYPE")
21+
static Map<BlockState, RegistryEntry<PointOfInterestType>> getPoiStatesToType() {
22+
throw new AssertionError();
23+
}
24+
25+
@Invoker
26+
static void invokeRegisterStates(RegistryEntry<PointOfInterestType> poi, Set<BlockState> states) {
27+
throw new AssertionError();
28+
}
29+
}

xplat/src/main/java/gay/pridecraft/joy/registry/JoyBlocks.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
import net.minecraft.registry.Registries;
1616
import net.minecraft.registry.RegistryKeys;
1717

18+
import java.util.List;
19+
1820
import static net.minecraft.block.AbstractBlock.Settings.copy;
1921

2022
public final class JoyBlocks {
@@ -37,6 +39,25 @@ public final class JoyBlocks {
3739
LESBIAN_BED = registerBed("lesbian_bed", Blocks.ORANGE_BED),
3840
PROGRESS_BED = registerBed("progress_bed", Blocks.WHITE_BED);
3941

42+
public static final List<Block> BEDS = List.of(
43+
GAY_BED,
44+
ENBY_BED,
45+
INTERSEX_BED,
46+
AGENDER_BED,
47+
BIGENDER_BED,
48+
BISEXUAL_BED,
49+
MLM_BED,
50+
ACE_BED,
51+
ARO_BED,
52+
APLATONIC_BED,
53+
GENDER_FLUID_BED,
54+
PAN_BED,
55+
TRANS_BED,
56+
AROACE_BED,
57+
LESBIAN_BED,
58+
PROGRESS_BED
59+
);
60+
4061
private static Block registerBed(String name, Block src) {
4162
final var block = new JoyBedBlock(copy(src));
4263
Pivot.INSTANCE.register(RegistryKeys.ITEM, name, new BedItem(block, new Item.Settings().maxCount(1)));
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package gay.pridecraft.joy.registry;
2+
3+
import gay.pridecraft.joy.JoyUtil;
4+
import gay.pridecraft.joy.mixin.minecraft.AccessorPoi;
5+
import net.minecraft.block.BedBlock;
6+
import net.minecraft.block.enums.BedPart;
7+
import net.minecraft.world.poi.PointOfInterestTypes;
8+
9+
import java.util.stream.Collectors;
10+
11+
/**
12+
* @author Ampflower
13+
* @since 1.0.0
14+
**/
15+
public final class JoyPoi {
16+
17+
public static void init() {
18+
AccessorPoi.invokeRegisterStates(
19+
JoyUtil.getEntry(PointOfInterestTypes.HOME),
20+
JoyBlocks.BEDS.stream()
21+
.flatMap(JoyUtil::streamBlockStates)
22+
.filter(state -> state.get(BedBlock.PART) == BedPart.HEAD)
23+
.collect(Collectors.toSet())
24+
);
25+
}
26+
}

xplat/src/main/resources/joy.mixins.json

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,10 @@
44
"package": "gay.pridecraft.joy.mixin",
55
"refmap": "joy.refmap.json",
66
"compatibilityLevel": "JAVA_21",
7-
"mixins": ["AllayEntityMixin", "LivingEntityMixin", "PaintingVariantsMixin"],
7+
"mixins": [
8+
"AllayEntityMixin", "LivingEntityMixin", "PaintingVariantsMixin",
9+
"minecraft.AccessorPoi"
10+
],
811
"injectors": {
912
"defaultRequire": 1
1013
},

0 commit comments

Comments
 (0)