修复服务器端加载模组会崩溃的问题

This commit is contained in:
叁玖领域 2026-01-18 11:08:04 +08:00
parent ac0db34a0b
commit a6fe95557f
4 changed files with 19 additions and 8 deletions

View File

@ -33,7 +33,7 @@ mod_name=3944Realms 's Lib Mod
# The license of the mod. Review your options at https://choosealicense.com/. All Rights Reserved is the default.
mod_license=MIT
# The mod version. See https://semver.org/
mod_version=0.1.7
mod_version=0.1.8
# The group ID for the mod. It is only important when publishing as an artifact to a Maven repository.
# This should match the base package used for the mod sources.
# See https://maven.apache.org/guides/mini/guide-naming-conventions.html

View File

@ -1,9 +1,11 @@
package top.r3944realms.lib39.core.event;
import net.minecraft.client.multiplayer.ClientLevel;
import net.minecraft.server.level.ServerLevel;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.event.level.LevelEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod;
import top.r3944realms.lib39.Lib39;
import top.r3944realms.lib39.util.ILevelHelper;
@ -19,7 +21,7 @@ public class ServerEventHandler {
/**
* The type Game.
*/
@net.minecraftforge.fml.common.Mod.EventBusSubscriber(value = Dist.DEDICATED_SERVER, bus = net.minecraftforge.fml.common.Mod.EventBusSubscriber.Bus.MOD, modid = Lib39.MOD_ID)
@net.minecraftforge.fml.common.Mod.EventBusSubscriber(value = Dist.DEDICATED_SERVER, bus = net.minecraftforge.fml.common.Mod.EventBusSubscriber.Bus.FORGE, modid = Lib39.MOD_ID)
public static class Game extends ServerEventHandler {
/**
* Register layer definitions.
@ -28,8 +30,8 @@ public class ServerEventHandler {
*/
@SubscribeEvent
public static void registerLayerDefinitions(LevelEvent.Load event) {
if (event.getLevel() != null && event.getLevel() instanceof ClientLevel level) {
ILevelHelper.LevelHelper.CLIENT.setLevel(level);
if (event.getLevel() != null && event.getLevel() instanceof ServerLevel level) {
ILevelHelper.LevelHelper.SERVER.setLevel(level);
}
}
@ -40,8 +42,8 @@ public class ServerEventHandler {
*/
@SubscribeEvent
public static void registerLayerDefinitions(LevelEvent.Unload event) {
if (event.getLevel() != null && event.getLevel() instanceof ClientLevel level) {
ILevelHelper.LevelHelper.CLIENT.setLevel(null);
if (event.getLevel() != null && event.getLevel() instanceof ServerLevel) {
ILevelHelper.LevelHelper.SERVER.setLevel(null);
}
}
}

View File

@ -7,6 +7,8 @@ import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.Level;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import org.jetbrains.annotations.NotNull;
import top.r3944realms.lib39.example.client.screen.ForgeScreen;
@ -26,8 +28,13 @@ public class ForgeItem extends Item {
@Override
public @NotNull InteractionResultHolder<ItemStack> use(@NotNull Level level, @NotNull Player player, @NotNull InteractionHand usedHand) {
if (level.isClientSide() && usedHand == InteractionHand.MAIN_HAND) {
Minecraft.getInstance().setScreen(new ForgeScreen(usedHand, 0));
clientUse(usedHand);
}
return super.use(level, player, usedHand);
}
@OnlyIn(Dist.CLIENT)
private static void clientUse(@NotNull InteractionHand usedHand) {
Minecraft.getInstance().setScreen(new ForgeScreen(usedHand, 0));
}
}

View File

@ -1,7 +1,8 @@
package top.r3944realms.lib39.util;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.LevelAccessor;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.Nullable;
@ -65,6 +66,7 @@ public interface ILevelHelper {
* @return the client level
*/
@Nullable
@OnlyIn(Dist.CLIENT)
static Level getClientLevel() {
return LevelHelper.CLIENT.getLevel();
}