ClayCoffee
本帖最后由 ClayCoffee 于 2022-7-29 15:55 编辑

我做了一个小游戏插件,想使用ProtocolLib实现敌人的发光效果
wiki.vg查了,找到https://wiki.vg/Protocol#Entity_Effect这个包,尝试监听了这个包,发现这个包只会发送某个玩家他自己的药水效果,而不会发送别人的药水效果给他  
Particle的GLOW也只是粒子效果,并不能实现发光
之前发过一次,忘加思考被认定为伸手了

已解决,解决方法可以看下面
Packet还要deepclone一下,不然会出现莫名其妙的问题
Player receiver = event.getPlayer();
PacketContainer pc = event.getPacket();
int entityID = pc.getIntegers().read(0);
Entity entity = pm.getEntityFromID(receiver.getWorld(), entityID);
if(entity instanceof Player target && !target.equals(receiver)) {
    if(GameManager.isEnemy(receiver, target)) {        pc = pc.deepClone();
        // 修改Metadata        List<WrappedWatchableObject> wdw = pc.getWatchableCollectionModifier().read(0);
        WrappedWatchableObject wwo = wdw.get(0);
        if(wwo.getValue() instanceof Byte) {
            byte b = (byte) wwo.getValue();
            wwo.setValue(BitMask.bit_true(b, GLOWING_BIT_MASK));            
event.setPacket(pc);
        }
    }
}





HotPe_e
https://wiki.vg/Protocol#Set_Entity_Metadata
采用 ENTITY METADATA包

ClayCoffee
本帖最后由 ClayCoffee 于 2022-7-28 17:25 编辑

谢谢,解决了

ClayCoffee
HotPe_e 发表于 2022-7-28 13:48
https://wiki.vg/Protocol#Set_Entity_Metadata
采用 ENTITY METADATA包

Entity Metadata在ProtocolLib里对应哪个类啊...
找了一圈没找到

结冰的离季
你需要这个
https://www.spigotmc.org/resources/api-glowapi.19422/
比发包用起来简单

ClayCoffee
本帖最后由 ClayCoffee 于 2022-7-28 19:12 编辑

使用起来有问题,有的时候设置之后发光,有时候不能,但是玩家名的颜色显示正常
  1. if (!GlowAPI.isGlowing(p, enemies, true)) {
  2.          GlowAPI.setGlowing(p, GlowAPI.Color.DARK_RED, enemies);
  3. }
复制代码



结冰的离季
ClayCoffee 发表于 2022-7-28 19:09
使用起来有问题,有的时候设置之后发光,有时候不能,但是玩家名的颜色显示正常

...

依赖的依赖装了么 https://www.spigotmc.org/resources/api-packetlistenerapi.2930/
不是这个问题的话我也不清楚了,我没用过这个api = =

ClayCoffee
结冰的离季 发表于 2022-7-28 22:58
依赖的依赖装了么 https://www.spigotmc.org/resources/api-packetlistenerapi.2930/
不是这个问题的话我 ...

装了 还是没用

HotPe_e
ClayCoffee 发表于 2022-7-28 17:25
Entity Metadata在ProtocolLib里对应哪个类啊...
找了一圈没找到

PacketType.Play.Server.ENTITY_METADATA

ClayCoffee
本帖最后由 ClayCoffee 于 2022-7-29 14:23 编辑
HotPe_e 发表于 2022-7-28 23:53
PacketType.Play.Server.ENTITY_METADATA

我指的是这个包Field Type里的Entity Metadata  
是DataWatcher吗?
反编译之后这个变量的类型是List<DataWatcher.Item<?>>
尝试用getDataWatcherModifier()读了一下,报错

ClayCoffee
HotPe_e 发表于 2022-7-28 23:53
PacketType.Play.Server.ENTITY_METADATA

解决了,是List<WrappedWatchableObject>

ClayCoffee
本帖最后由 ClayCoffee 于 2022-7-29 15:23 编辑
HotPe_e 发表于 2022-7-28 23:53
PacketType.Play.Server.ENTITY_METADATA

没事了 谢谢