From b038f4d25485de5f90a99bb01cf70e329c72c550 Mon Sep 17 00:00:00 2001 From: IzzelAliz Date: Sat, 10 Sep 2022 22:04:14 +0800 Subject: [PATCH] Optimize villager bed chunk loads (#719) --- .../chunkload/SleepInBedMixin_Optimize.java | 23 +++++++++++++++++++ ...xins.arclight.impl.forge.optimization.json | 1 + 2 files changed, 24 insertions(+) create mode 100644 arclight-common/src/main/java/io/izzel/arclight/common/mixin/optimization/general/chunkload/SleepInBedMixin_Optimize.java diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/optimization/general/chunkload/SleepInBedMixin_Optimize.java b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/optimization/general/chunkload/SleepInBedMixin_Optimize.java new file mode 100644 index 00000000..42ae2b1e --- /dev/null +++ b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/optimization/general/chunkload/SleepInBedMixin_Optimize.java @@ -0,0 +1,23 @@ +package io.izzel.arclight.common.mixin.optimization.general.chunkload; + +import net.minecraft.core.GlobalPos; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.ai.Brain; +import net.minecraft.world.entity.ai.behavior.SleepInBed; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import org.spongepowered.asm.mixin.injection.callback.LocalCapture; + +@Mixin(SleepInBed.class) +public class SleepInBedMixin_Optimize { + + @Inject(method = "checkExtraStartConditions",cancellable = true, locals = LocalCapture.CAPTURE_FAILHARD, at = @At(value = "INVOKE", target = "Lnet/minecraft/server/level/ServerLevel;getBlockState(Lnet/minecraft/core/BlockPos;)Lnet/minecraft/world/level/block/state/BlockState;")) + private void arclight$returnIfNotLoaded(ServerLevel level, LivingEntity entity, CallbackInfoReturnable cir, Brain brain, GlobalPos pos) { + if (!level.isLoaded(pos.pos())) { + cir.setReturnValue(false); + } + } +} diff --git a/arclight-common/src/main/resources/mixins.arclight.impl.forge.optimization.json b/arclight-common/src/main/resources/mixins.arclight.impl.forge.optimization.json index 9be266a3..1f84500a 100644 --- a/arclight-common/src/main/resources/mixins.arclight.impl.forge.optimization.json +++ b/arclight-common/src/main/resources/mixins.arclight.impl.forge.optimization.json @@ -22,6 +22,7 @@ "activationrange.entity.ItemEntityMixin_ActivationRange", "activationrange.entity.LivingEntityMixin_ActivationRange", "activationrange.entity.VillagerEntityMixin_ActivationRange", + "chunkload.SleepInBedMixin_Optimize", "network.ChunkMapMixin_Optimize", "network.ChunkMapMixin_Optimize$TrackedEntityMixin", "network.ConnectionMixin_Optimize",