Java 红石颗粒不';不要改变他们的颜色

Java 红石颗粒不';不要改变他们的颜色,java,minecraft,bukkit,packets,Java,Minecraft,Bukkit,Packets,我试图通过使用ProtocolLib的数据包将彩色红石粒子发送给播放器。我用谷歌搜索了一下,为了使它们着色,我需要使用偏移量参数作为RGB系统。然而,它并没有按预期工作;粒子仍然是红色或具有随机颜色(请参见下文),并且偏移量仍然用作给定位置的每个粒子的随机化器。 我的代码: 我试图更改数量和粒子数据。如果粒子data为0,则粒子为红色,在其他情况下,1粒子为随机颜色。 我正在使用ProtocolLib 4.3.0和Spigot 1.12.2我解决了我的问题,要生成彩色的真红石粒子,必须有三件事:

我试图通过使用ProtocolLib的数据包将彩色红石粒子发送给播放器。我用谷歌搜索了一下,为了使它们着色,我需要使用
偏移量
参数作为RGB系统。然而,它并没有按预期工作;粒子仍然是红色或具有随机颜色(请参见下文),并且
偏移量
仍然用作给定位置的每个粒子的随机化器。 我的代码:

我试图更改
数量
和粒子
数据
。如果粒子
data
0
,则粒子为红色,在其他情况下,
1
粒子为随机颜色。

我正在使用ProtocolLib 4.3.0和Spigot 1.12.2

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

  • 金额
    必须为
    0
  • 数据
    必须是
    1
  • 红色分量(x偏移量)必须为
    x-1
    (因为此分量在推入数据包之前自动增加1)
  • 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();}