我第一次尝试创建一个新命令,并且正在关注 this tutorial 这有点旧,但我相信仍然可以使用。完成后,我尝试运行我的 mod,一切运行良好,但我的命令不存在。这是我的代码:
public class MainRegistry {
@EventHandler
public void serverStart(FMLServerStartingEvent event) {
MinecraftServer server = MinecraftServer.getServer();
ICommandManager command = server.getCommandManager();
ServerCommandManager manager = (ServerCommandManager) command;
manager.registerCommand(new FireBall5());
}
}
还有我实际的 CommandBase
类:
public class FireBall5 extends CommandBase {
@Override
public String getCommandName() {
return "fireball 5";
}
@Override
public String getCommandUsage(ICommandSender var1) {
return "Shoots fireball with explosive power 5";
}
@Override
public void processCommand(ICommandSender icommandsender, String[] var2) {
if (icommandsender instanceof EntityPlayer) {
EntityPlayer player = (EntityPlayer) icommandsender;
World par2World = player.worldObj;
if (!par2World.isRemote)
par2World.spawnEntityInWorld(new PlayerFireBall(par2World, 5.0f));
}
}
}
它正在调用我自己创建的实体 PlayerFireBall
,它只是一个具有增强爆炸力的火球。
最佳答案
命令不能包含空格。要执行您的命令,请遵循以下步骤:
@Override
public String getCommandName() {
return "fireball"; // Remove the argument - Leave the command only.
}
参数必须这样读:
{
if (sender instanceof EntityPlayer) {
final EntityPlayer player = (EntityPlayer) sender;
final World par2World = player.worldObj;
final float power;
// The "default" method:
// power = 5; // Write the default value here!
if (var2.length > 0) try {
power = Float.parseFloat(var2[0]); // Parse the first argument.
} catch(NumberFormatException ex) {}
// The "validation" method:
if (var2.length == 0) {
sender.sendMessage("You forgot to specify the fireball power.");
return;
}
if ( !var2[0].matches("\\d{2}")) { // Asserts this argument is two digits
sender.sendMessage("Incorrect.");
return;
}
power = Float.parseFloat(var2[0]);
if ( !par2World.isRemote)
par2World.spawnEntityInWorld(new PlayerFireBall(par2World, power));
}
}
阅读更多:
关于java - Minecraft Forge 自定义播放器命令问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25196339/