本帖最后由 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);
}
}
}
我做了一个小游戏插件,想使用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);
}
}
}
https://wiki.vg/Protocol#Set_Entity_Metadata
采用 ENTITY METADATA包
采用 ENTITY METADATA包
 本帖最后由 ClayCoffee 于 2022-7-28 17:25 编辑 
谢谢,解决了
HotPe_e 发表于 2022-7-28 13:48
https://wiki.vg/Protocol#Set_Entity_Metadata
采用 ENTITY METADATA包
谢谢,解决了
HotPe_e 发表于 2022-7-28 13:48
https://wiki.vg/Protocol#Set_Entity_Metadata
采用 ENTITY METADATA包
Entity Metadata在ProtocolLib里对应哪个类啊...
找了一圈没找到
 本帖最后由 ClayCoffee 于 2022-7-28 19:12 编辑 
使用起来有问题,有的时候设置之后发光,有时候不能,但是玩家名的颜色显示正常复制代码
使用起来有问题,有的时候设置之后发光,有时候不能,但是玩家名的颜色显示正常
- if (!GlowAPI.isGlowing(p, enemies, true)) {
 
-          GlowAPI.setGlowing(p, GlowAPI.Color.DARK_RED, enemies);
 
- }
ClayCoffee 发表于 2022-7-28 19:09
使用起来有问题,有的时候设置之后发光,有时候不能,但是玩家名的颜色显示正常
...
依赖的依赖装了么 https://www.spigotmc.org/resources/api-packetlistenerapi.2930/
不是这个问题的话我也不清楚了,我没用过这个api = =
结冰的离季 发表于 2022-7-28 22:58
依赖的依赖装了么 https://www.spigotmc.org/resources/api-packetlistenerapi.2930/
不是这个问题的话我 ...
装了 还是没用
ClayCoffee 发表于 2022-7-28 17:25
Entity Metadata在ProtocolLib里对应哪个类啊...
找了一圈没找到
PacketType.Play.Server.ENTITY_METADATA
 本帖最后由 ClayCoffee 于 2022-7-29 14:23 编辑 
我指的是这个包Field Type里的Entity Metadata
是DataWatcher吗?
反编译之后这个变量的类型是List<DataWatcher.Item<?>>
尝试用getDataWatcherModifier()读了一下,报错
HotPe_e 发表于 2022-7-28 23:53
PacketType.Play.Server.ENTITY_METADATA
我指的是这个包Field Type里的Entity Metadata
是DataWatcher吗?
反编译之后这个变量的类型是List<DataWatcher.Item<?>>
尝试用getDataWatcherModifier()读了一下,报错
HotPe_e 发表于 2022-7-28 23:53
PacketType.Play.Server.ENTITY_METADATA
解决了,是List<WrappedWatchableObject>
 本帖最后由 ClayCoffee 于 2022-7-29 15:23 编辑 
没事了 谢谢
HotPe_e 发表于 2022-7-28 23:53
PacketType.Play.Server.ENTITY_METADATA
没事了 谢谢