gpt4 book ai didi

java - 龙头无限烟火

转载 作者:行者123 更新时间:2023-11-30 05:39:35 25 4
gpt4 key购买 nike

我目前正在开发一个应该卡住实体的插件。我已经完成了大部分,但现在我对烟花真的很困惑。我已经有了一个函数,可以在每个时间点将所有“移动”实体传送回其位置。

Bukkit.getScheduler().runTaskTimer(instance, () -> {
for (Entity e : entities) {
//teleporting and setting velocity
if (e instanceof Firework) {
Firework f = (Firework) e;
//TODO how can I make it NOT disappear after one or two seconds
}
}
});

现在烟花的问题是,它们在触发某种生命周期并爆炸后会自动被移除。如果实体被卡住,我只是不希望出现这种情况。

我已经尝试过f.setTicksLived(1);但遗憾的是这根本不会改变任何东西。 (我真的不认为这个函数按照它应该的方式工作)

我的下一个方法是改变烟花的威力。

FireworkMeta fm = f.getFireworkMeta();
fm.setPower(127);
f.setFireworkMeta(fm);

但是由于 127 是 .setPower() 允许的最大数字,烟花仍然会在一两分钟后消失。

我真的希望烟花能够无限期地可见。它根本不应该消失,并且每隔 10 秒发射一次新的烟花也不是一个选择,因为它总是会播放我根本不想要的发射声音。

最佳答案

根据 Minecraft 的实体数据部分 Firework Rocket页面,Firework Rockets 拥有以下 NBT 数据(除其他外):

  • 整数Life是火箭飞行的滴答数。

  • 整数 LifeTimeLife 必须大于或等于才会爆炸的刻度数。

据我所知,这些值都不能使用 Firework 进行修改实体或FireworkMeta Bukkit 提供的类(class)。

但是,通过直接修改 Firework Rocket 实体的 NBT 数据,我们可以更改这些值:

net.minecraft.server.v1_5_R1.Entity mcFireworkEntity = ((CraftEntity) bukkitFireworkEntity).getHandle();
NBTTagCompound tag = new NBTTagCompound();

mcFireworkEntity.c(tag); // gets the firework to dump nbt data into our 'tag' object

// set the entity life flag to 1.
tag.setInt("Life", 1);
// you can optionally also set the `LifeTime` value to the maximum setting as well
// tag.setInt("LifeTime", 2147483647)

// write the tag back into the entity. This needs to happen every game tick
// because minecraft will increase this value by 1 every tick
((EntityLiving)mcFireworkEntity).a(tag); //

NBTTagCompound是反编译的minecraft服务器的一部分repository由 bukkit 提供(不确定是否默认,可能需要您进行一些修改)。

关于java - 龙头无限烟火,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55921514/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com