如题,想给一个大型插件改一下判定
但是不值得拆开重写,就想着写个附属
请问各位如何完成此操作?
插件判定是点击方块并输入数字完成出售
我想的是点击方块并检测手上物品lore
若不包含非法lore就可以继续输入数字完成出售
(本人初学者,请各位热心大佬尽量详细点)
判定点击方块用交互事件,之后设置监听权重 @EventHandler(priority = EventPriority.HIGHEST)
之后尝试进行检查与取消事件
之后尝试进行检查与取消事件
2000000 发表于 2022-11-30 15:08
判定点击方块用交互事件,之后设置监听权重 @EventHandler(priority = EventPriority.HIGHEST)
之后尝试进 ...
如果直接在事件上进行检测判断,我想的是只可以拦截原版的数据包吧,插件的不确定能不能拦截到
本帖最后由 2000000 于 2022-11-30 15:56 编辑
ProtocolLib 监听 ARM_ANIMATION
另外您应该使用 API,尝试检查此插件的 API 是否存在您想要的事件,如果含有的话进行一系列检查您应该先尝试使用API,如果没有API则尝试调整优先级,如果不行再去使用数据包检查
奥力給 发表于 2022-11-30 15:22
如果直接在事件上进行检测判断,我想的是只可以拦截原版的数据包吧,插件的不确定能不能拦截到 ...
ProtocolLib 监听 ARM_ANIMATION
ProtocolManager manager = ProtocolLibrary.getProtocolManager();
public void onArmAnimation() {
manager.addPacketListener(new PacketAdapter(main.getInstance(), NORMAL, PacketType.Play.Client.ARM_ANIMATION) {
@Override
public void onPacketReceiving(PacketEvent event) {
}
});
}
另外您应该使用 API,尝试检查此插件的 API 是否存在您想要的事件,如果含有的话进行一系列检查您应该先尝试使用API,如果没有API则尝试调整优先级,如果不行再去使用数据包检查
2000000 发表于 2022-11-30 15:08
判定点击方块用交互事件,之后设置监听权重 @EventHandler(priority = EventPriority.HIGHEST)
之后尝试进 ...
下面的方法有点复杂,刚才尝试了一下这个方法,很好用哎!
请问大佬怎么判定点击的方块id(在onClick内)
奥力給 发表于 2022-11-30 15:40
下面的方法有点复杂,刚才尝试了一下这个方法,很好用哎!
请问大佬怎么判定点击的方块id(在onClick内) ...
PlayerInteractEvent 的话使用 event.getClickedBlock()
2000000 发表于 2022-11-30 15:54
PlayerInteractEvent 的话使用 event.getClickedBlock()
请问在spigot1.8中如果判断点击的方块id?
或者说if (e.getClickedBlock()) 如何使用?
奥力給 发表于 2022-11-30 16:28
请问在spigot1.8中如果判断点击的方块id?
或者说if (e.getClickedBlock()) 如何使用? ...
我这里将演示一个例子
public void playerInteract(PlayerInteractEvent event) {
// 这里检查如果玩家不是左键点击方块的动作那么就不运行下面的代码
if (event.getAction() != LEFT_CLICK_BLOCK) return;
Block clickedBlock = event.getClickedBlock();
if (clickedBlock == null) return;
Material blockType = clickedBlock.getType();
if (blockType.equals(Material.STONE)) event.getPlayer().sendMessage("看来您点击的是石头?");
}