From 1c14c2c1177131e96a0e82562163ca50477c1655 Mon Sep 17 00:00:00 2001 From: UnlikePaladin <36827970+UnlikePaladin@users.noreply.github.com> Date: Tue, 2 Jan 2024 11:17:20 -0600 Subject: [PATCH] Improved POI further --- .../pfm/PaladinFurnitureMod.java | 5 +++- .../mixin/PFMPointOfInterestTypeAccessor.java | 24 +++++++++++++++++++ .../src/main/resources/pfm-common.mixins.json | 1 + common/src/main/resources/pfm.accesswidener | 8 +++---- 4 files changed, 32 insertions(+), 6 deletions(-) create mode 100644 common/src/main/java/com/unlikepaladin/pfm/mixin/PFMPointOfInterestTypeAccessor.java diff --git a/common/src/main/java/com/unlikepaladin/pfm/PaladinFurnitureMod.java b/common/src/main/java/com/unlikepaladin/pfm/PaladinFurnitureMod.java index 43f15f3bb..26e198ee3 100644 --- a/common/src/main/java/com/unlikepaladin/pfm/PaladinFurnitureMod.java +++ b/common/src/main/java/com/unlikepaladin/pfm/PaladinFurnitureMod.java @@ -12,12 +12,14 @@ import com.unlikepaladin.pfm.data.materials.DynamicBlockRegistry; import com.unlikepaladin.pfm.data.materials.WoodVariantRegistry; +import com.unlikepaladin.pfm.mixin.PFMPointOfInterestTypeAccessor; import com.unlikepaladin.pfm.registry.BlockEntityRegistry; import com.unlikepaladin.pfm.registry.PaladinFurnitureModBlocksItems; import com.unlikepaladin.pfm.registry.dynamic.LateBlockRegistry; import com.unlikepaladin.pfm.runtime.PFMRuntimeResources; import com.unlikepaladin.pfm.utilities.Version; import dev.architectury.injectables.annotations.ExpectPlatform; +import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet; import net.minecraft.block.BlockState; import net.minecraft.block.enums.BedPart; import net.minecraft.item.ItemGroup; @@ -82,7 +84,8 @@ public static void replaceHomePOI() { newBedStates.addAll(originalBedStates); newBedStates.addAll(addedBedStates); PointOfInterestType.HOME.blockStates = ImmutableSet.copyOf(newBedStates); - addedBedStates.forEach(state -> PointOfInterestType.BLOCK_STATE_TO_POINT_OF_INTEREST_TYPE.put(state, PointOfInterestType.HOME)); + addedBedStates.forEach(state -> PFMPointOfInterestTypeAccessor.getBlockStateToPointOfInterestType().put(state, PointOfInterestType.HOME)); + PFMPointOfInterestTypeAccessor.setRegisteredStates(new ObjectOpenHashSet<>(PFMPointOfInterestTypeAccessor.getBlockStateToPointOfInterestType().keySet())); } @ExpectPlatform diff --git a/common/src/main/java/com/unlikepaladin/pfm/mixin/PFMPointOfInterestTypeAccessor.java b/common/src/main/java/com/unlikepaladin/pfm/mixin/PFMPointOfInterestTypeAccessor.java new file mode 100644 index 000000000..72503ed7f --- /dev/null +++ b/common/src/main/java/com/unlikepaladin/pfm/mixin/PFMPointOfInterestTypeAccessor.java @@ -0,0 +1,24 @@ +package com.unlikepaladin.pfm.mixin; + +import net.minecraft.block.BlockState; +import net.minecraft.world.poi.PointOfInterestType; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Mutable; +import org.spongepowered.asm.mixin.gen.Accessor; + +import java.util.Map; +import java.util.Set; + +@Mixin(PointOfInterestType.class) +public interface PFMPointOfInterestTypeAccessor { + @Accessor("BLOCK_STATE_TO_POINT_OF_INTEREST_TYPE") + static Map getBlockStateToPointOfInterestType() { + throw new AssertionError(); + } + + @Mutable + @Accessor("REGISTERED_STATES") + static void setRegisteredStates(Set states) { + throw new AssertionError(); + } +} diff --git a/common/src/main/resources/pfm-common.mixins.json b/common/src/main/resources/pfm-common.mixins.json index 0c68dd391..713eaa5e8 100644 --- a/common/src/main/resources/pfm-common.mixins.json +++ b/common/src/main/resources/pfm-common.mixins.json @@ -6,6 +6,7 @@ "mixins": [ "PFMAbstractTagProvider$ObjectBuilderMixin", "PFMPlayerInventoryMixin", + "PFMPointOfInterestTypeAccessor", "PFMTextureKeyFactory" ], "server": [ diff --git a/common/src/main/resources/pfm.accesswidener b/common/src/main/resources/pfm.accesswidener index 74e444c2f..7f0aba7bc 100644 --- a/common/src/main/resources/pfm.accesswidener +++ b/common/src/main/resources/pfm.accesswidener @@ -2,13 +2,11 @@ accessWidener v1 named accessible class net/minecraft/recipe/CookingRecipeSerializer$RecipeFactory accessible class net/minecraft/block/entity/BlockEntityType$BlockEntityFactory -accessible field net/minecraft/world/poi/PointOfInterestType BED_STATES Ljava/util/Set; -accessible method net/minecraft/world/poi/PointOfInterestType setup (Lnet/minecraft/world/poi/PointOfInterestType;)Lnet/minecraft/world/poi/PointOfInterestType; -mutable field net/minecraft/world/poi/PointOfInterestType HOME Lnet/minecraft/world/poi/PointOfInterestType; accessible method net/minecraft/data/server/BlockLootTableGenerator drops (Lnet/minecraft/item/ItemConvertible;)Lnet/minecraft/loot/LootTable$Builder; accessible method net/minecraft/data/server/BlockLootTableGenerator dropsWithProperty (Lnet/minecraft/block/Block;Lnet/minecraft/state/property/Property;Ljava/lang/Comparable;)Lnet/minecraft/loot/LootTable$Builder; accessible class net/minecraft/data/server/AbstractTagProvider$ObjectBuilder accessible method net/minecraft/client/render/item/ItemRenderer renderBakedItemModel (Lnet/minecraft/client/render/model/BakedModel;Lnet/minecraft/item/ItemStack;IILnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumer;)V +accessible field net/minecraft/client/resource/language/LanguageManager field_25291 Lnet/minecraft/client/resource/language/LanguageDefinition; +accessible field net/minecraft/block/AbstractBlock$Settings material Lnet/minecraft/block/Material; accessible field net/minecraft/world/poi/PointOfInterestType blockStates Ljava/util/Set; -mutable field net/minecraft/world/poi/PointOfInterestType blockStates Ljava/util/Set; -accessible field net/minecraft/world/poi/PointOfInterestType BLOCK_STATE_TO_POINT_OF_INTEREST_TYPE Ljava/util/Map; \ No newline at end of file +mutable field net/minecraft/world/poi/PointOfInterestType blockStates Ljava/util/Set; \ No newline at end of file