我在1.16.5中使用Forge制作了一个mod,一旦50个任何类型的块被破坏,我就会丢弃一块祖母绿,但我无法弄清楚。我尝试过BlockEvent。断开事件
、onBlock收获
和收获块
,但我无法弄清楚。另一个问题是我不能给玩家一个物品,我已经尝试了几种方法。有人能帮忙吗?
我当前的代码是:
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。像这样的断点事件:
@SubscribeEvent
public void blockBreakEvent(BlockEvent.BreakEvent e){
blok += 1;
}
您需要了解Forge的事件总线系统,您可以从其简短但充分的文档中了解。
当然,您的blok变量只在运行时存在,这意味着当客户端重新启动时,该值将消失。如果您希望玩家从他们离开的地方开始,那么您需要研究一种存储持久数据的方法。
问题内容: 我尝试了这个: 只能得到: :声明前缺失 那么,我将如何打破JavaScript中的嵌套循环? 问题答案: 您应该能够打破标签,就像这样:
问题内容: 您将如何格式化这样的长行?我希望宽度不超过80个字符: 这是我最好的选择吗? 问题答案: 那是一个开始。在使用长字符串的代码之外定义更长的字符串并不是一个坏习惯。这是分离数据和行为的一种方式。您的第一个选择是通过使字符串文字彼此相邻来隐式地将它们连接在一起: 或使用行尾连续符,这有点脆弱,因为它可以工作: 但这不是: 看到不同?没有?好吧,也不会是您的代码。 隐式连接的不利之处在于,它
问题内容: 我这样承诺 返回一个promise,yes 不能被修改 。 我如何在第一场比赛中脱颖而出?(除了显式抛出错误以外,还有其他方法吗?) 问题答案: 我想你不想在这里连锁。以同步的方式,您会写 这就是应如何将其转化为承诺: 诺言没有实现。
问题内容: 如何检测Java中给定的SQL数据库中是否存在某个表? 问题答案: 您可以使用DatabaseMetaData.getTables()获取有关现有表的信息。 该方法透明地工作,并且独立于数据库引擎。我认为它查询后台的信息模式表。 编辑: 这是一个显示所有现有表名的示例。
问题内容: 我想编写一个简单的Java代理,它可以打印所检测的Java程序调用的方法的名称。 例如,我要检测的Java程序是: 我想显示这样的东西: 谢谢你的帮助! 问题答案: 您可以使用Javassist之类的工具库来执行此操作。 让我为您提供一个方法的示例,您可以使用Javassist或反射将其扩展到所有方法: 检查此链接以获取详细信息: http // www.csg.ci.iu- toky
以下是我尝试的: 将设置为。永远不会被调用 将设置为。从不调用 研究了和类。找不到类似的内容。