<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # :-: 自定義事件 我們在`EventLoader`類中新建一個我們想要的事件類。 `src/main/java/net/xiaobang/bm/common/EventLoader.java`(部分) ~~~ @Cancelable public static class PlayerRightClickRainBowBlockEvent extends net.minecraftforge.event.entity.player;.PlayerEvent { public final int x; public final int y; public final int z; public final World world; public PlayerRightClickRainBowBlockEvent(EntityPlayer player, int x, int y, int z, World world) { super(player); this.x = x; this.y = y; this.z = z; this.world = world; } } ~~~ 很明顯,這個類和玩家右鍵彩虹方塊相關。該事件類繼承了`PlayerEvent`,`@Cancelable`注解表明了該事件可取消。 ## 自定義事件的注冊機制 在上一部分,我們注意到`FMLCommonHandler.instance().bus()`和`MinecraftForge.EVENT_BUS`均為`EventBus`類型。該類型提供了名為`register`的方法使得事件可以被注冊。 顯然,我們自己也可以創建這樣一個`EventBus`,并且使得所有自定義的事件在這里被注冊。 `src/main/java/net/xiaobang/bm/common/EventLoader.java`**(部分)** `public static final EventBus EVENT_BUS = new EventBus();` ## 使自定義事件會被觸發到 `EventBus`本身提供了一個名為`post`的方法,負責執行事件。大家如果經常翻源代碼的話,會在Minecraft的許多類中找到這個方法的調用。這里我們希望在玩家點擊草塊時觸發,我們也如法炮制。 `src/main/java/net/xiaobang/bm/block/BlockRainBow.java`**(部分)** ~~~ public boolean onBlockActivated(World worldIn, int x, int y, int z, EntityPlayer player, int side, float subX, float subY,float subZ){ EventHandler.PlayerRightClickRainBowBlockEvent event = EventHandler.PlayerRightClickRainBowBlockEvent(player,x,y,z,worldIn); EventHandler.EVENT_BUS.post(event); if (!event.isCanceled() && !worldIn.isRemote) { worldIn.setBlockToAir(x,y,z);//設置xyz位置的方塊為空氣。 return true; } return false; } ~~~ 這段代碼的意思是:如果事件被取消,那么阻止彩虹方塊變成空氣,否則彩虹方塊變成空氣。 ## 自定義事件的實現 自定義事件的實現和Forge提供的完全一樣,只不過我們要找準在哪里注冊。 在`EventLoader`類中添加一個方法。 `src/main/java/net/xiaobang/bm/common/EventLoader.java`**(部分)** ~~~ @SubscribeEvent public void onPlayerRightClickRainBowBlock(PlayerRightClickRainBowBlockEvent event) { if (!event.world.isRemote) { Entity tnt = new EntityTNTPrimed(event.world, event.x + 0.5, event.y + 0.5, event.z + 0.5, null);//實例化炸彈實體 event.world.spawnEntityInWorld(tnt);//生成炸彈,讓玩家Boom!嘿嘿嘿 } } ~~~ 最后我們注冊這個事件: `src/main/java/net/xiaobang/bm/common/EventLoader.java`**(部分)** ~~~ public EventLoader() { MinecraftForge.EVENT_BUS.register(this); EventLoader.EVENT_BUS.register(this); } ~~~ 現在打開游戲,拿出一個彩虹方塊,并右鍵它,一,二,三.......Duang!直接讓你雙手空空。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看