所以目前我有这样的代码:
@Override
public void onEnable(){
ProtocolManager manager = ProtocolLibrary.getProtocolManager();
manager.addPacketListener(
new PacketAdapter(this, ListenerPriority.HIGHEST,
PacketType.Play.Server.NAMED_SOUND_EFFECT) {
@Override
public void onPacketSending(PacketEvent event) {
// Item packets (id: 0x29)
if (event.getPacketType() ==
PacketType.Play.Server.NAMED_SOUND_EFFECT) {
if (packet.getSoundEffetcs().getValues().contains(Sound.BLOCK_PISTON_CONTRACT || packet.getSoundEffetcs().getValues().contains(Sound.BLOCK_PISTON_EXTEND))){
}
event.setCancelled(true);
}
}
});
}
@Override
public void onDisable() {
// Plugin shutdown logic
}}
这是不完整的,一旦它完成,它应该取消所有的数据包,得到发送到服务器/客户端,活塞声音参与其中。代码if (packet.getSoundEffetcs().getValues().contains(Sound.BLOCK_PISTON_CONTRACT || packet.getSoundEffetcs().getValues().contains(Sound.BLOCK_PISTON_EXTEND)))给我带来了麻烦,因为if (packet.getSoundEffetcs().getValues().contains(Sound.BLOCK_PISTON_CONTRACT || packet.getSoundEffetcs().getValues().contains(Sound.BLOCK_PISTON_EXTEND)))告诉我,它“不能将符号”“数据包”解析为错误。哪些导入必须添加到我的插件中,以便正确识别“数据包”?
发布于 2021-10-18 13:06:33
您从未定义过packet变量。
你必须这样做:
@Override
public void onPacketSending(PacketEvent event) {
// Item packets (id: 0x29)
if (event.getPacketType() == PacketType.Play.Server.NAMED_SOUND_EFFECT) {
PacketContainer packet = event.getPacket(); // get ProtocolLib packet
List<Sound> sounds = packet.getSoundEffetcs().getValues(); // get values from it
if (sounds.contains(Sound.BLOCK_PISTON_CONTRACT || sounds.contains(Sound.BLOCK_PISTON_EXTEND))){
// here what you want
}
event.setCancelled(true);
}
}https://stackoverflow.com/questions/66072372
复制相似问题