java - 红石粒子不会改变它们的颜色

标签 java minecraft bukkit packets

我正在尝试使用 ProtocolLib 通过数据包向玩家发送彩色红石粒子。我在谷歌上搜索到要使它们着色,我需要使用 offset 参数作为 RGB 系统。但是,它没有按预期工作;粒子仍然是红色或具有随机颜色(见下文),并且 offset 仍然用作来自给定位置的每个粒子的随机化器。 我的代码:

PacketContainer packet = new PacketContainer(PacketType.Play.Server.WORLD_PARTICLES);
packet.getModifier().writeDefaults();
packet.getParticles().write(0, Particle.REDSTONE);
float x = (float) loc.getX();
float y = (float) loc.getY() + 3;
float z = (float) loc.getZ();
float red = 0;
float green = 0;
float blue = 1;
packet.getFloat().write(0, x).write(1, y).write(2, z); // Location
packet.getFloat().write(3, red).write(4, green).write(5, blue); // Offset
packet.getFloat().write(6, 0F); // Particle data ?
packet.getIntegers().write(0, 1); // Amount

ProtocolManager manager = ProtocolLibrary.getProtocolManager();
try {
    for (Player player : getters) manager.sendServerPacket(player, packet);
} catch (Exception ex) {ex.printStackTrace();}

我尝试更改数量 和粒子数据。如果粒子 data0,则粒子为红色,在其他情况下,最多 1 粒子为随机着色。
我正在使用 ProtocolLib 4.3.0 和 Spigot 1.12.2

最佳答案

我解决了我的问题,要生成彩色真正的红石粒子必须有 3 件事:

  1. 数量必须是0
  2. 数据必须是1
  3. 红色分量(x 偏移量)必须是x - 1(因为这个分量在插入数据包之前自动增加 1)

关于java - 红石粒子不会改变它们的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47969668/

相关文章:

java - 如何使用数组来验证另一个数组中的元素长度?

java - 对象的字符串表示形式...详细与十六进制

java - 我怎样才能给玩家一个随机 block ?谢谢! (我的世界 Forge 模组 1.15)

java - 在通过 super() 调用实例化对象后,如何将变量传递到对象中?

java - 我的循环仅检查第一个数组项

java - getHealth() 方法对于 Player 类型不明确 - Bukkit 1.6.4

java - ParticleEffect Lib block 数据

java - 如何实现RMI连接、J2EE服务的通用测试?

java - 如何修改默认世界生成器

java - 点燃检查异常 : Failed to start processor: GridProcessorAdapter []