2014-03-24 101 views
1

我試圖做一個bukkit插件,我似乎無法找到任何文檔,但我已經看到它完成了,如何將命令輸入,用戶可以點擊像在這樣一個URL如何使用bukkit執行命令的可點擊鏈接

if (commandLabel.equalsIgnoreCase("cmd") { 
    player.sendMessage("Pick a command: " + </motd> + ", " + </mail>); 
} 

更換「」和「」輸出這樣的一個可點擊的鏈接「的形式/ MOTD」在服務器上執行的命令的聊天消息:

選擇一個命令:MOTDMail

並點擊它們將執行命令到服務器。我將如何做到這一點?

回答

4

你可以做這樣的:

IChatBaseComponent comp = ChatSerializer 
      .a("{\"text\":\"" + "Choose one: " + "\",\"extra\":[{\"text\":\"" + "MOTD" + "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + "/motd" + "\"}}]}"); 

PacketPlayOutChat packet = new PacketPlayOutChat(comp, true); 
((CraftPlayer) <player>).getHandle().playerConnection.sendPacket(packet); 

這將會給他們呈現出消息:

Choose one: MOTD 

,當用戶點擊MOTD,它會運行命令/motd作爲玩家。下面是什麼,我們實際上正在做一個小故障:

IChatBaseComponent comp = ChatSerializer 
      .a("{\"text\":\"" + "<Ignored Message> " + 
      "\",\"extra\":[{\"text\":\"" + "<Message that will be clicked>" + 
      "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + 
      "<Command to be run when message is clicked>" + "\"}}]}"); 

PacketPlayOutChat packet = new PacketPlayOutChat(comp, true); 
((CraftPlayer) <player>).getHandle().playerConnection.sendPacket(packet); 

上面的代碼將發送玩家:當玩家點擊<Message that will be clicked>

他們將運行命令

<Ignored Message> <Message that will be clicked> 

<Command to be run when a message is clicked> ,並且因爲它不以命令前綴開始,/,它將強制他們聊天<Command to be run when a message is clicked>

不幸的是,據我所知,你只能把點擊事件每封郵件,所以你會做這樣的事情:

選擇一個:

MOTD
郵件

所以,你必須做的,其中變量player是玩家:

player.sendMessage("Choose one:"); 

IChatBaseComponent comp = ChatSerializer 
      .a("{\"text\":\"" + 
      "\",\"extra\":[{\"text\":\"" + "MOTD" + 
      "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + 
      "/motd" + "\"}}]}");  
PacketPlayOutChat packet = new PacketPlayOutChat(comp, true); 
((CraftPlayer) player).getHandle().playerConnection.sendPacket(packet); 

IChatBaseComponent comp2 = ChatSerializer 
      .a("{\"text\":\"" + 
      "\",\"extra\":[{\"text\":\"" + "Mail" + 
      "\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"" + 
      "/mail" + "\"}}]}");  
PacketPlayOutChat packet2 = new PacketPlayOutChat(comp2, true); 
((CraftPlayer) player).getHandle().playerConnection.sendPacket(packet2); 

MOTD被點擊時,/motd將由玩家運行,當點擊Mail時,/mail將會運行。

正如一個側面說明,你將需要包括craftbukkit在構建路徑,隨着bukkit做到這一點

+0

這個偉大的工程,真可惜有關每行,但它確實與我在你的文章上編輯過的微小修改一起工作。與「comp」 – zfb

0

或者你可以只是簡單地做到這一點(我做了我自己的,你可以對它進行編輯)

/execute @a ~ ~ ~ tellraw @p ["",{"text":"Click this to die","color":"dark_red","bold":true,"clickEvent":{"action":"run_command","value":"/kill @p"},"hoverEvent":{"action":"show_text","value":{"text":"","extra":[{"text":"Kills you!"}]}}}] 

run_command也可以用Open URL替換。

您也可以用任何顏色替換深紅色。如果你願意,你可以將true替換爲false,否則/ kill @p可以替換爲一個命令(或者,如果你打開URL,則可以使用https://鏈接,show_text可以替換爲Show Item,Show entity或Show Achivement 。文本&殺死你可以用不同的東西所取代(例如,顯示實體)(實體替換文本)

我發現了一個網站,如果你的卡!美好的一天:) http://minecraftjson.com/

+0

使用命令塊或在世界上自己輸入它會很好,但我使用的是bukkit api,所以這在這種情況下不會很有幫助。 – zfb