package top.leisuretimedock.serverpatch.mixin; import com.extendedae_plus.content.wireless.WirelessTransceiverBlockEntity; import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod; import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import net.minecraft.core.BlockPos; import net.minecraft.server.MinecraftServer; import net.minecraft.server.level.ServerLevel; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.state.BlockState; import org.spongepowered.asm.mixin.Mixin; @Mixin(value = WirelessTransceiverBlockEntity.class ,remap = false) public class MixinWirelessTransceiverBlockEntity { /** * 如果服务器正在关闭,直接跳过 updateState */ @WrapMethod( method = "updateState" ) private void SP$onUpdateState(Operation original) { Level level = ((WirelessTransceiverBlockEntity)(Object)this).getLevel(); if (level instanceof ServerLevel serverLevel) { MinecraftServer server = serverLevel.getServer(); if (server != null && server.isRunning()) { original.call(); } } } @WrapMethod( method = "serverTick" ) private static void SP$onServerTick(Level level, BlockPos pos, BlockState state, WirelessTransceiverBlockEntity be, Operation original) { if (level instanceof ServerLevel serverLevel) { MinecraftServer server = serverLevel.getServer(); if (server.isRunning()) { original.call(level, pos, state, be); } } } }