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服务器的一部分(不确定默认情况下是否需要一些处理)