Hi,guys.
I want to add some commands in the mod.
I use FMLServerStartingEvent#registerServerCommand to add a test command.
It works well in Gradle.
But when I export the jar file into the .minecraft\mods folder, then run Minecarft. It's stuck in loading world interface
Here is the log:
[01:07:56] [Server thread/INFO]: Starting integrated minecraft server version 1.12
[01:07:56] [Server thread/INFO]: Generating keypair
[01:07:57] [Server thread/INFO] [FML]: Injecting existing registry data into this server instance
[01:07:59] [Server thread/INFO] [FML]: Applying holder lookups
[01:07:59] [Server thread/INFO] [FML]: Holder lookups applied
[01:07:59] [Server thread/INFO] [FML]: Loading dimension 0 (RSM_test2) (net.minecraft.server.integrated.IntegratedServer@278b1a95)
[01:08:01] [Server thread/INFO]: Loaded 488 advancements
[01:08:01] [Server thread/INFO] [FML]: Loading dimension 1 (RSM_test2) (net.minecraft.server.integrated.IntegratedServer@278b1a95)
[01:08:01] [Server thread/INFO] [FML]: Loading dimension -1 (RSM_test2) (net.minecraft.server.integrated.IntegratedServer@278b1a95)
[01:08:01] [Server thread/INFO]: Preparing start region for level 0
[01:08:02] [Server thread/INFO]: Preparing spawn area: 17%
[01:08:03] [Server thread/INFO]: Preparing spawn area: 44%
[01:08:04] [Server thread/INFO]: Preparing spawn area: 77%
[01:08:05] [Server thread/FATAL] [FML]: Fatal errors were detected during the transition from SERVER_ABOUT_TO_START to SERVER_STARTING. Loading cannot continue
[01:08:05] [Server thread/FATAL] [FML]:
States: 'U' = Unloaded 'L' = Loaded 'C' = Constructed 'H' = Pre-initialized 'I' = Initialized 'J' = Post-initialized 'A' = Available 'D' = Disabled 'E' = Errored
UCHIJAAA minecraft{1.12} [Minecraft] (minecraft.jar)
UCHIJAAA mcp{9.19} [Minecraft Coder Pack] (minecraft.jar)
UCHIJAAA FML{8.0.99.99} [Forge Mod Loader] (forge-1.12-14.21.1.2387.jar)
UCHIJAAA forge{14.21.1.2387} [Minecraft Forge] (forge-1.12-14.21.1.2387.jar)
UCHIJAAE test{1.0.0} [test] (test.jar)
UCHIJAAA tickratechanger{1.0.13} [Tickrate Changer] (TickrateChanger-Mod-1.12.jar)
[01:08:05] [Server thread/FATAL] [FML]: The following problems were captured during this phase
[01:08:05] [Server thread/ERROR] [FML]: Caught exception from test (java.lang.AbstractMethodError)
[01:08:05] [Server thread/ERROR] [FML]: A fatal exception occurred during the server starting event
net.minecraftforge.fml.common.LoaderExceptionModCrash: Caught exception from test (test)
Caused by: java.lang.AbstractMethodError
at net.minecraft.command.CommandHandler.func_71560_a(CommandHandler.java:149) ~[bj.class:?]
at net.minecraftforge.fml.common.event.FMLServerStartingEvent.registerServerCommand(FMLServerStartingEvent.java:59) ~[FMLServerStartingEvent.class:?]
at test.Test.start(Test.java:30) ~[Test.class:?]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_144]
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_144]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_144]
at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_144]
at net.minecraftforge.fml.common.FMLModContainer.handleModStateEvent(FMLModContainer.java:628) ~[forge-1.12-14.21.1.2387.jar:?]
at sun.reflect.GeneratedMethodAccessor21.invoke(Unknown Source) ~[?:?]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_144]
at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_144]
at com.google.common.eventbus.Subscriber.invokeSubscriberMethod(Subscriber.java:91) ~[guava-21.0.jar:?]
at com.google.common.eventbus.Subscriber$SynchronizedSubscriber.invokeSubscriberMethod(Subscriber.java:150) ~[guava-21.0.jar:?]
at com.google.common.eventbus.Subscriber$1.run(Subscriber.java:76) ~[guava-21.0.jar:?]
at com.google.common.util.concurrent.MoreExecutors$DirectExecutor.execute(MoreExecutors.java:399) ~[guava-21.0.jar:?]
at com.google.common.eventbus.Subscriber.dispatchEvent(Subscriber.java:71) ~[guava-21.0.jar:?]
at com.google.common.eventbus.Dispatcher$PerThreadQueuedDispatcher.dispatch(Dispatcher.java:116) ~[guava-21.0.jar:?]
at com.google.common.eventbus.EventBus.post(EventBus.java:217) ~[guava-21.0.jar:?]
at net.minecraftforge.fml.common.LoadController.sendEventToModContainer(LoadController.java:252) ~[forge-1.12-14.21.1.2387.jar:?]
at net.minecraftforge.fml.common.LoadController.propogateStateMessage(LoadController.java:230) ~[forge-1.12-14.21.1.2387.jar:?]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_144]
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_144]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_144]
at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_144]
at com.google.common.eventbus.Subscriber.invokeSubscriberMethod(Subscriber.java:91) ~[guava-21.0.jar:?]
at com.google.common.eventbus.Subscriber$SynchronizedSubscriber.invokeSubscriberMethod(Subscriber.java:150) ~[guava-21.0.jar:?]
at com.google.common.eventbus.Subscriber$1.run(Subscriber.java:76) ~[guava-21.0.jar:?]
at com.google.common.util.concurrent.MoreExecutors$DirectExecutor.execute(MoreExecutors.java:399) ~[guava-21.0.jar:?]
at com.google.common.eventbus.Subscriber.dispatchEvent(Subscriber.java:71) ~[guava-21.0.jar:?]
at com.google.common.eventbus.Dispatcher$PerThreadQueuedDispatcher.dispatch(Dispatcher.java:116) ~[guava-21.0.jar:?]
at com.google.common.eventbus.EventBus.post(EventBus.java:217) ~[guava-21.0.jar:?]
at net.minecraftforge.fml.common.LoadController.distributeStateMessage(LoadController.java:147) ~[LoadController.class:?]
at net.minecraftforge.fml.common.Loader.serverStarting(Loader.java:831) [Loader.class:?]
at net.minecraftforge.fml.common.FMLCommonHandler.handleServerStarting(FMLCommonHandler.java:299) [FMLCommonHandler.class:?]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_144]
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_144]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_144]
at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_144]
at Reflector.callBoolean(Reflector.java:737) [Reflector.class:?]
at net.minecraft.server.integrated.IntegratedServer.func_71197_b(IntegratedServer.java:204) [chb.class:?]
at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:483) [MinecraftServer.class:?]
at java.lang.Thread.run(Unknown Source) [?:1.8.0_144]
[01:08:05] [Server thread/INFO]: Stopping server
[01:08:05] [Server thread/INFO]: Saving players
[01:08:05] [Server thread/INFO]: Saving worlds
[01:08:05] [Server thread/INFO]: Saving chunks for level 'RSM_test2'/overworld
[01:08:05] [Server thread/INFO]: Saving chunks for level 'RSM_test2'/the_nether
[01:08:06] [Server thread/INFO]: Saving chunks for level 'RSM_test2'/the_end
[01:08:06] [Server thread/INFO] [FML]: Unloading dimension 0
[01:08:06] [Server thread/INFO] [FML]: Unloading dimension -1
[01:08:06] [Server thread/INFO] [FML]: Unloading dimension 1
[01:08:06] [Server thread/INFO] [FML]: Applying holder lookups
[01:08:06] [Server thread/INFO] [FML]: Holder lookups applied
[01:08:06] [Server thread/INFO] [FML]: The state engine was in incorrect state ERRORED and forced into state SERVER_STOPPED. Errors may have been discarded.
[01:08:06] [Server thread/INFO] [FML]: The state engine was in incorrect state ERRORED and forced into state AVAILABLE. Errors may have been discarded.
And here is code:
Command.java:
package test;
import net.minecraft.command.CommandBase;
import net.minecraft.command.CommandException;
import net.minecraft.command.ICommandSender;
import net.minecraft.server.MinecraftServer;
import net.minecraft.util.text.TextComponentString;
public class Command extends CommandBase {
@Override
public String getName() {
return "test";
}
@Override
public String getUsage(ICommandSender sender) {
return "/test";
}
@Override
public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException {
sender.sendMessage(new TextComponentString("test"));
}
}
Test.java:
package test;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.Mod.EventHandler;
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
import net.minecraftforge.fml.common.event.FMLServerStartingEvent;
@Mod(modid="test", name="test", version="1.0.0")
public class Test {
@EventHandler
public void preInit(FMLPreInitializationEvent event) {
}
@EventHandler
public void init(FMLInitializationEvent event) {
}
@EventHandler
public void postInit(FMLPostInitializationEvent event){
}
@EventHandler
public void start(FMLServerStartingEvent event){
event.registerServerCommand(new Command());
}
}
Sorry, my English is poor.