iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 25
1

https://ithelp.ithome.com.tw/upload/images/20191010/20115823ZtByruvRRX.png

進入到倒數的階段,預計會再完成一個有關實體AI的功能與應景的模組。
有沒有想要更了解的功能或是看到有趣的模組想要分享呢?
請留言在下方吧!

檢視功能

今天我們講一個小功能,但是可以讓你在遊戲內說話的時候與眾不同!

還記得我們在[Day3]讓打破方塊會產生訊息嗎?關於方塊的訊息產生的程式碼:

.addChatComponentMessage(new ChatComponentText("Congratulations! You broke a block!"));

建立一個ChatComponentText的物件,然後把訊息文字放進去就完成了。當我們想要文字有不同的顏色,只要在文字前面放上EnumChatFormatting物件就可以了,例如:

new ChatComponentText(EnumChatFormatting.DARK_PURPLE + "Congratulations! You broke a block!")

就會產生深紫色的文字訊息,就像我們之前做的一樣。

但,一句話只能有一個顏色嗎?

建立Utils類別

  1. 凡是共用的方法,一般都會建議放到一個共用的類別,例如Utils。我們先到com.ithome.mymode套件目錄下,建立一個叫做Utils的類別檔案:
    https://ithelp.ithome.com.tw/upload/images/20191010/20115823eZbdHkY0TS.png
  2. 接著在裡面新增一個叫做rainbowString的方法,傳入與傳出都是字串:
    public static String rainbowString(String str) {
    }
    
  3. 在這個方法內,我們將傳入的字串透過迴圈,將每一個字元與隨機的顏色組合,再將最後產生的字串回傳。顏色這裡是使用隨機,你也可以一個一個的使用,或是透過EnumChatFormatting找尋其他你覺得有趣的顏色:
    public static String rainbowString(String str) {
        int stringLength = str.length();
        if (stringLength < 1) {
            return "";
        }
        StringBuilder returnStr = new StringBuilder();
        Random r = new Random();
    
        EnumChatFormatting[] colorChar =
                {
                        EnumChatFormatting.RED,
                        EnumChatFormatting.GOLD,
                        EnumChatFormatting.YELLOW,
                        EnumChatFormatting.GREEN,
                        EnumChatFormatting.AQUA,
                        EnumChatFormatting.BLUE,
                        EnumChatFormatting.LIGHT_PURPLE,
                        EnumChatFormatting.DARK_PURPLE
                };
        for (int i = 0; i < stringLength; i++) {
            returnStr.append(colorChar[r.nextInt(colorChar.length)]).append(str.substring(i, i + 1));
        }
        return returnStr.toString();
    }
    

使用彩色文字

  1. 接著,開啟BlockBreakEvent事件類別,將產生訊息方塊的地方加上我們的彩虹文字方法:
    @SubscribeEvent
    public void sendMessage(BreakEvent event) {
        // 取得打破方塊的玩家資訊
        event.getPlayer()
                // 加入一個訊息到聊天室窗中
                .addChatComponentMessage(
                        // 定義訊息內容為:彩色文字
                        new ChatComponentText(Utils.rainbowString("Congratulations! You broke a block!"))
                );
    }
    
  2. 存檔進入遊戲 (記得要先到Mod設定將你的BlockBreakEvent設定值更改為True才會有效果)。到處去打破方塊,看看你的世界是否也變成彩色了吧!
    https://ithelp.ithome.com.tw/upload/images/20191010/201158239ub43bt3cP.png

若有興趣的人也可以自由將這個"效果"應用在所有的文字上,例如:

  • 我們Mod設定GUI的標題
  • 物品欄的說明文字
  • 模組的作者名
  • ...等等

上一篇
[Day24] 事件註冊也可以變成設定檔
下一篇
[Day26] 來玩玩實體AI吧 (上)
系列文
[Minecraft - 當個創世神] 從玩遊戲到設計遊戲30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言