Java 插口无限烟花

Java 插口无限烟花,java,minecraft,bukkit,Java,Minecraft,Bukkit,我目前正在开发一个可以冻结实体的插件。我已经做了大部分,但我现在真的被烟火搞得一团糟。我已经有了一个功能,可以将所有“移动”的实体在每次滴答声时传送回它们的位置 Bukkit.getScheduler().runTaskTimer(实例,()->{ 对于(实体e:实体){ //传送和设定速度 如果(例如烟花){ 烟花f=(烟花)e; //TODO我怎样才能让它在一两秒钟后不消失 } } }); 现在烟花的问题是,它们在触发某种寿命并引爆后会自动被移除。我只是不希望实体被冻结 我已经试过f.se

我目前正在开发一个可以冻结实体的插件。我已经做了大部分,但我现在真的被烟火搞得一团糟。我已经有了一个功能,可以将所有“移动”的实体在每次滴答声时传送回它们的位置

Bukkit.getScheduler().runTaskTimer(实例,()->{
对于(实体e:实体){
//传送和设定速度
如果(例如烟花){
烟花f=(烟花)e;
//TODO我怎样才能让它在一两秒钟后不消失
}
}
});
现在烟花的问题是,它们在触发某种寿命并引爆后会自动被移除。我只是不希望实体被冻结

我已经试过
f.setTicksLived(1)
我的下一个方法是改变烟火的威力

FireworkMeta fm=f.getFireworkMeta();
fm.setPower(127);
f、 setFireworkMeta(fm);
但是由于127是
.setPower()
允许的最大值,烟花在一两分钟后仍然会消失


我真的希望烟花在无限的时间跨度内可见。它不应该消失,每10秒发射一次新的烟火不是一个选项,因为它总是播放我根本不想要的发射声音。

根据Minecraft页面的实体数据部分,烟火火箭有以下NBT数据(除其他外):

  • integer
    Life
    是火箭飞行的时间间隔数

  • integer
    LifeTime
    是要爆炸必须大于或等于的刻度数
    Life

AFAIK这些值都不能使用Bukkit提供的实体或类进行修改

但是,通过直接修改焰火火箭实体的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); // 
是bukkit提供的反编译minecraft服务器的一部分(不确定默认情况下是否需要一些处理)