本帖最后由 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包