此代码存在问题会导致无法正常启动游戏请分析并解决package comsen;import commojangblaze3dplatformInputConstants;import commojangloggingLogUtils;import cpwmodsutilLazy;import netminecraftclientKeyMapping;import netminecraftclien
该代码存在以下问题:
- 缺少必要的导入语句,例如
import net.minecraftforge.eventbus.api.SubscribeEvent和import net.minecraftforge.fml.common.Mod。 - 缺少必要的注解,例如
@Mod和@SubscribeEvent。 - 在
auto_sprint类中,缺少构造函数的实现。 - 在
registerBindings方法中,缺少@SubscribeEvent注解。 - 在
onClientTick方法中,缺少@SubscribeEvent注解。 - 在
onClientTick方法中,缺少对Minecraft.getInstance().gui和Minecraft.getInstance().player的空指针判断。
解决以上问题后的代码如下:
package com.sen;
import com.mojang.blaze3d.platform.InputConstants;
import com.mojang.logging.LogUtils;
import cpw.mods.util.Lazy;
import net.minecraft.client.KeyMapping;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiGraphics;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.core.registries.Registries;
import net.minecraft.world.food.FoodProperties;
import net.minecraft.world.item.BlockItem;
import net.minecraft.world.item.CreativeModeTab;
import net.minecraft.world.item.CreativeModeTabs;
import net.minecraft.world.item.Item;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.block.state.BlockBehaviour;
import net.minecraft.world.level.material.MapColor;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.client.event.RegisterKeyMappingsEvent;
import net.minecraftforge.client.settings.IKeyConflictContext;
import net.minecraftforge.client.settings.KeyConflictContext;
import net.minecraftforge.client.settings.KeyModifier;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.BuildCreativeModeTabContentsEvent;
import net.minecraftforge.event.TickEvent;
import net.minecraftforge.event.server.ServerStartingEvent;
import net.minecraftforge.eventbus.api.IEventBus;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.ModLoadingContext;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.config.ModConfig;
import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent;
import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
import net.minecraftforge.registries.DeferredRegister;
import net.minecraftforge.registries.ForgeRegistries;
import net.minecraftforge.registries.RegistryObject;
import org.lwjgl.glfw.GLFW;
import org.slf4j.Logger;
import javax.swing.text.JTextComponent;
import java.awt.event.KeyEvent;
import java.util.function.Consumer;
import java.util.function.Supplier;
// The value here should match an entry in the META-INF/mods.toml file
@Mod(auto_sprint.MODID)
public class auto_sprint {
// Define mod id in a common place for everything to reference
public static final String MODID = "auto_sprint";
// Directly reference a slf4j logger
private static final Logger LOGGER = LogUtils.getLogger();
public static final Lazy<KeyMapping> AUTO_SPRINT_MAPPING = Lazy.of(() -> new KeyMapping(
"key.auto_sprint.as",
KeyConflictContext.UNIVERSAL,
KeyModifier.SHIFT, // Default mapping requires shift to be held down
InputConstants.Type.KEYSYM, // Default mapping is on the keyboard
GLFW.GLFW_KEY_I, // Default key is G
"key.auto_sprint.as"
));
public static boolean auto_sprint = false;
public auto_sprint() {
IEventBus modEventBus = FMLJavaModLoadingContext.get().getModEventBus();
MinecraftForge.EVENT_BUS.register(this);
}
// You can use EventBusSubscriber to automatically register all static methods in the class annotated with @SubscribeEvent
@Mod.EventBusSubscriber(modid = MODID, bus = Mod.EventBusSubscriber.Bus.MOD, value = Dist.CLIENT)
public static class ClientModEvents {
@SubscribeEvent
public static void onClientSetup(FMLClientSetupEvent event)
{
}
}
@SubscribeEvent
public static void registerBindings(RegisterKeyMappingsEvent event) {
event.register(AUTO_SPRINT_MAPPING.get());
}
@SubscribeEvent
public static void onClientTick(TickEvent.ClientTickEvent event) {
if (event.phase == TickEvent.Phase.END) { // Only call code once as the tick event is called twice every tick
while (AUTO_SPRINT_MAPPING.get().consumeClick()) {
auto_sprint = !auto_sprint;
Minecraft mc = Minecraft.getInstance();
if (mc != null && mc.gui != null && mc.gui.getChat() != null) {
mc.gui.getChat().addRecentChat("自动疾跑已" + ((auto_sprint) ? "开启!" : "关闭!"));
}
}
}
if (auto_sprint) {
Minecraft mc = Minecraft.getInstance();
if (mc != null && mc.player != null) {
mc.player.setSprinting(true);
}
}
}
}
``
原文地址: https://www.cveoy.top/t/topic/iTHH 著作权归作者所有。请勿转载和采集!