java - 如何检测 Minecraft forge 1.16.5 中任何被破坏的方 block

标签 java minecraft minecraft-forge

我正在 1.16.5 中使用 Forge 制作一个 mod,一旦破坏了 50 个任何类型的方 block ,就会掉落祖母绿,但我无法弄清楚。我尝试过 BlockEvent.BreakEventonBlockHarvestedharvestBlock,但我无法弄清楚。另一个问题是我无法给玩家元素,我尝试了几种方法。有人可以帮忙吗?

我当前的代码是:

package com.taxolotl.cubitemerald;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

import net.minecraft.world.World;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.eventbus.api.IEventBus;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;;

@Mod("cubitemerald")
public class CubitEmerald {

    public static final Logger LOGGER = LogManager.getLogger();
    public static final String MOD_ID = "cubitemerald";
    public static int blok = 0;

    public CubitEmerald() {
        IEventBus bus = FMLJavaModLoadingContext.get().getModEventBus();
        MinecraftForge.EVENT_BUS.register(this);

        if(/*block broken*/) {
            blok = blok + 1;
        }
        
        if(blok>=50) {
            /*drop an emerald*/
            blok = 0;
        }   
    }
}

最佳答案

您需要听BlockEvent.BreakEvent像这样:

@SubscribeEvent
public void blockBreakEvent(BlockEvent.BreakEvent e){
    blok += 1;
}

您需要了解 Forge 的事件总线系统,您可以从他们简短但足够的 documentation 中做到这一点。 .

当然,您的 blok 变量只会在运行时存在,这意味着,当客户端重新启动时,该值将消失。如果您希望玩家从上次停下的地方继续,您将需要研究一种存储持久数据的方法。

关于java - 如何检测 Minecraft forge 1.16.5 中任何被破坏的方 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72352533/

相关文章:

java - 为什么 Java 与其他编程语言相比是安全的?

java - 如何在 Java 应用程序中强制使用 Windows 行结尾?

java - 取消伤害动画

java - Intellij 无法正确导出

java - 如何用java记录Minecraft玩家的视线位置

java - 如何在不编辑源文件的情况下向源文件添加方法?

由于 sun.misc.IOUtils.createTempFile ("+~JF"、 ".tmp"、null,Java Font.createFont 在 Linux 上失败)

java - ASP .net C# Decimal 与 Java Double 之间的舍入不匹配

java - NPE on plugin.getConfig().set(... , ...);

java - Gradle不创建库(minecraft forge mdk)