在Minecraft世界裡,有很多現存的指令可以使用。
比如/time
可以更改世界裡的時間,/time set day
可以從晚上直接變成白天;/weather
可以改變天氣,/weather thunder
可以直接從晴天變成暴風雨;/kill
可以直接殺死實體,/kill @e[type=EntityScalePig]
可以將我們的俄羅斯豬全部殺死;/summon
可以生成實體,/summon Giant ~ ~ ~
可以在當前位置生成巨大殭屍。
其他還有很多內建的指令可以使用,但假如今天我們想要做自己的指令呢?比如說生成一群很熱的豬跑來跑去?
com.ithome.mymod
套件內建立BurningPigs
類別。
public class BurningPigs {
}
FMLServerStartingEvent
事件內。這個事件與FMLPreInitializationEvent
及FMLInitializationEvent
相同,是需要告訴Forge這個是處理各種事件的方法:
@EventHandler
public void registerCommands(FMLServerStartingEvent event) {
event.registerServerCommand(new BurningPigs());
}
BurningPigs
並沒有實作ICommand
介面,但我們可以直接繼承CommandBase
來減少程式碼複雜度。因此回到BurningPigs
加上CommandBase
介面與實作必須方法 (沒有特別寫註解的就是預設的方法內容,不用特別實作):
public class BurningPigs implements CommandBase {
// 定義所有允許的指令名稱
private List<String> aliases = new ArrayList<String>();
// 產生的燃燒豬數量
private int numberOfPigs = 0;
public BurningPigs() {
// 我們在建構式內定義可以用的指令名稱
aliases.add("burningpigs");
aliases.add("bp");
}
@Override
public String getName() {
return null;
}
@Override
public String getCommandUsage(ICommandSender sender) {
// 提示使用者如何使用指令
return "/burningpigs <number of pigs>";
}
@Override
public List getAliases() {
// 回傳指令列表
return aliases;
}
@Override
public void execute(ICommandSender sender, String[] args) {
// 主要邏輯
if(args == null || args.length != 1) {
sendErrorMessage(sender, "only accept one argument!");
return;
}
try {
numberOfPigs = Integer.parseInt(args[0]);
} catch (NumberFormatException e) {
sendErrorMessage(sender, "The argument \"" + args[0] + "\" is not a valid number!");
return;
}
// 執行指令的是玩家,這裡直接轉型
EntityPlayer player = (EntityPlayer) sender;
for(int i = 0 ; i < numberOfPigs ; i++) {
EntityPig pig = new EntityPig(player.worldObj);
pig.setLocationAndAngles(player.posX, player.posY, player.posZ, 0, 0);
// 讓豬產生燃燒效果
pig.setFire(10000);
player.worldObj.spawnEntityInWorld(pig);
}
}
private void sendErrorMessage(ICommandSender sender, String message) {
// 自定義暗紅色視窗訊息
sender.addChatMessage(new ChatComponentText(
EnumChatFormatting.DARK_RED + message
));
}
}
/
或T
按鍵開以訊息視窗,然後輸入/burningpigs 50
或/bp 50
,欣賞這群活蹦亂跳的豬豬們吧!題外話:今天我們介紹另一種可以"使用"Minecraft模組的方式 - 這個在很多現有公開的模組都會提供類似的方式來供玩家可以快速使用。實際上,在Minecraft世界還有另一種叫做指令方塊的東西,是一種可以在多人玩家中避免直接在訊息視窗中使用指令,但卻可以有類似效果的東西。由這部分的功能比較屬於如何玩模組
,而這個系列的目的是如何設計模組
,關於指令的篇幅就不會說的很深,主要會用來作為我們快速使用模組的一種方式。