iT邦幫忙

第 11 屆 iT 邦幫忙鐵人賽

DAY 15
1

一個自己製作的方塊,除了定義響亮的名字外,再來就是賦予它好玩的功能與酷炫的外觀,我們的方塊就算達到一個可以用在模組內的目標了。
今天我們將在新方塊的事件內加上一些自定義的功能。

變更方塊

第一個功能我們給方塊一個複製的能力 - 放置的時候會自動變成與下方方塊一樣的東西。

  1. Block類別內,定義了很多事件可以使用:
    https://ithelp.ithome.com.tw/upload/images/20190929/20115823DJbRf1Vz5o.png

    • onBlockAdded : 在方塊被放置到世界後發生。
    • onBlockClicked : 在方塊被點擊後發生。
    • onBlockDestroyedByPlayer : 在方塊
      等等

    這些方法預設不會做任何事情,所以當我們繼承這個類別後,可以根據自己所需要的事件來定義要做的事情。在Java內,這種動作稱之為override

  2. 我們要更改的動作是在方塊被放置後發生,所以在EnderBlock類別內,覆寫onBlockAdded方法:

    @Override
    public void onBlockAdded(World world, BlockPos pos, IBlockState state) {
        // 取得我們要複製的方塊資訊,即Y軸往下一格處的方塊
        IBlockState newBlockState = world.getBlockState(pos.offset(EnumFacing.DOWN));
    
        // 將我們的方塊做變化
        world.setBlockState(pos, newBlockState);
    
        // 增加一點閃電特效
        EntityLightningBolt lightningBolt = new EntityLightningBolt(
                world,
                pos.getX(),
                pos.getY(),
                pos.getZ()
        );
        world.addWeatherEffect(lightningBolt);
    }
    
  3. 存檔後進入遊戲,在一個你想要複製的方塊上放置我們的EnderBlock。這時候你應該會看到閃電特效,然後
    蹦!
    https://ithelp.ithome.com.tw/upload/images/20190929/20115823kZKVIzpyOG.png

終界方塊

第二個功能讓我們的新方塊變成真正的"終界方塊"。

  1. 到目前為止,這些功能好像都與Ender這個字搭不上關係,所以我們要改變一點功能 - 當使用者對著它按下右鍵後,會跳出一個終界之眼
  2. 首先,因為第一個功能會置換我們的新方塊,點擊事件會沒辦法使用,因此先把上面覆蓋的事件onBlockAdded方法移除。
  3. 因為是按下右鍵後執行事件,因此我們覆寫onBlockActivated事件:
    @Override
    public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumFacing side, float hitX, float hitY, float hitZ) {
        if (world.isRemote) {
            EntityEnderEye eye = new EntityEnderEye(
                    world,
                    pos.getX() + 0.5,
                    pos.getY() + 1.5,
                    pos.getZ() + 0.5
            );
            player.addChatComponentMessage(new ChatComponentText(
                    EnumChatFormatting.DARK_PURPLE +
                            "EnderBlock Clicked!"
            ));
            // 讓終界之眼緩緩升起
            eye.motionY = 0.1;
            world.spawnEntityInWorld(eye);
    
            return true;
        } else {
            // 伺服器端,不做任何事
            return false;
        }
    }
    
  4. 進入遊戲,當方塊放置後,用右鍵點選就會看到緩緩升起的終界之眼。
    https://ithelp.ithome.com.tw/upload/images/20190929/20115823NMnMDBDqrg.png

上一篇
[Day14] 創造獨一無二的方塊
下一篇
[Day16] 變更方塊外觀
系列文
[Minecraft - 當個創世神] 從玩遊戲到設計遊戲30

尚未有邦友留言

立即登入留言