我试图做的第一次新的命令,并跟随本教程这是稍微老了,但我相信仍然可以工作。 完成它后,我试图运行我的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));
}
}
阅读更多:
见@Unihedron答案修复与此代码中的实际问题。 这个答案只是更加清理他的代码。
CommandBase
从中继承实际上有几个静态方法,使从参数解析数字和这样更安全。
你可能想使用的有:
-
CommandBase.parseDouble(ICommandSender, String)
-解析给定的字符串,并安全地返回一个双 -
CommandBase.parseDoubleWithMin(ICommandSender, String, int min)
-与上述相同,但具有所需最小值 -
CommandBase.parseDoubleBounded(ICommandSender, String, int min, int max)
-与上述相同,但有一个上限,以及
所有这些都有一个整数对口为好。 另外,你的背景下,也许为将来使用没有什么用处,但是是这样的:
-
CommandBase.parseBoolean(ICommandSender, String)
-解析给定的字符串,并安全地返回boolean
看看通过CommandBase
类有更多的有用的静态方法。
因此,例如,而不是这样的:
if (var2.length > 0) try {
power = Float.parseFloat(var2[0]); // Parse the first argument.
} catch(NumberFormatException ex) {}
尝试这个:
if(var2.length > 0){
//bounded because you don't want a size less than 0, could really be anything
power = CommandBase.parseDoubleWithMin(sender, var2[0], 0);
}
我的世界会自动告诉球员,如果有什么问题存在输入和分析得到的值安全返回给你。
祝你的MOD和乐趣!