使用的前置插件: Atlas一下是原帖描述:[ 原帖地址 ]
Description
What is Atlas?
[size=14.6667px]Atlas is an all-in-one and cohesive API for developers who want to improve their Bukkit plugins or anti-cheats.
What does it include?
 
 
[size=14.6667px]
我如何让他监听具有特定NBT的箱子的打开与关闭操作呢?
Description
What is Atlas?
[size=14.6667px]Atlas is an all-in-one and cohesive API for developers who want to improve their Bukkit plugins or anti-cheats.
What does it include?
- An advanced and seemless custom packet-sniffing system, with individual packet-wrappers.
- Custom event system, running asynchronously so servers using your plugin will not experience any slowdowns on the main-thread.
- Enough math utilities to make you forget what you learned in math class.
- Many useful methods for doing little things like sending a colored message to console.
- The most accurate and light, public hitbox-grabbing system.
- Numerous reflection methods and utilities, including grabbers for NMS.
 
 
我如何让他监听具有特定NBT的箱子的打开与关闭操作呢?
 本帖最后由 飞翔之歌 于 2020-6-16 23:50 编辑 
你这个代码写的应该是新事件吧。。。@季末旋律
你这个代码写的应该是新事件吧。。。@季末旋律
飞翔之歌 发表于 2020-6-16 23:44
你这个写的应该是监听器@季末旋律
不是吧,我跟着那个教程写的,应该是监听器吧……,第一次写自定义监听器,不知道这东西长什么样子。
季末旋律 发表于 2020-6-16 23:51
不是吧,我跟着那个教程写的,应该是监听器吧……,第一次写自定义监听器,不知道这东西长什么样子。 ...
这是个新事件类
监听器函数使用@EventHandler注解
所监听的事件作为监听器函数的参数
就像这样(伪代码)
@EventHandler
public static void xxx(xxx e){
xxx
}
这样就会监听xxx事件
至于监听特定NBT的箱子
在函数里判断被打开的箱子是否为特定NBT的箱子,不是则return;
 本帖最后由 季末旋律 于 2020-6-17 00:03 编辑 
我知道我为啥写这个了,监听器会在主方法内写
这个就是负责提供一个异步的事件,然后让监听器监听这个事件后处理
所以,怎么让他知道自己什么时候触发这个事件呢?
如果使用系统的,可能普通箱子也会被一同监听。我怕这样会导致插件耗能过大,毕竟我就是好多箱子里面找东西的玩家
飞翔之歌 发表于 2020-6-16 23:55
这是个新事件类
监听器函数使用@EventHandler注解
所监听的事件作为监听器函数的参数
我知道我为啥写这个了,监听器会在主方法内写
这个就是负责提供一个异步的事件,然后让监听器监听这个事件后处理
所以,怎么让他知道自己什么时候触发这个事件呢?
如果使用系统的,可能普通箱子也会被一同监听。我怕这样会导致插件耗能过大,毕竟我就是好多箱子里面找东西的玩家
 本帖最后由 飞翔之歌 于 2020-6-17 00:10 编辑 
你或许可以实时监听带有特定NBT的箱子,如果该箱子被开启则触发事件
(话说你这是插件呀,TileEntity难道不需要生艹NMS吗?(我没看前置插件sorry))
(而且这样如果这些箱子多了,消耗还是很大)
季末旋律 发表于 2020-6-17 00:01
我知道我为啥写这个了,监听器会在主方法内写
这个就是负责提供一个异步的事件,然后让监听器监听这个事 ...
你或许可以实时监听带有特定NBT的箱子,如果该箱子被开启则触发事件
(
(而且这样如果这些箱子多了,消耗还是很大)
飞翔之歌 发表于 2020-6-17 00:05
你或许可以实时监听带有特定NBT的箱子,如果该箱子被开启则触发事件
(话说你这是插件呀,TileEntity难 ...
所以我才异步处理这个东西以防消耗过大,并且这个东西理论上也不会超过50个还有冷却。
主要是和玩家的开箱操作分开(有一些GUI也是箱子),所以怎么做这个事件?
季末旋律 发表于 2020-6-17 00:56
所以我才异步处理这个东西以防消耗过大,并且这个东西理论上也不会超过50个还有冷却。
主要是和玩家的开 ...
监听所有这个箱子
如果被打开就发布该事件
(还需要判断该箱子周围的玩家是否在开这个箱子)
(事实上可以套娃事件,通过监听事件来触发事件)
粗略看了下回帖
没必要
没必要自己自定义Event 因为你自定义的Event还是在Bukkit的Event的基础上
你可以直接像楼上说的监听箱子打开事件 然后获取箱子的NBT判断是否return
都已经异步监听了 更不用怕什么卡住主线程的问题了
没必要
没必要自己自定义Event 因为你自定义的Event还是在Bukkit的Event的基础上
你可以直接像楼上说的监听箱子打开事件 然后获取箱子的NBT判断是否return
都已经异步监听了 更不用怕什么卡住主线程的问题了
 本帖最后由 季末旋律 于 2020-6-17 12:29 编辑 
那我就直接监听箱子打开事件,然后判断一下就可以了吗?
南柯郡守 发表于 2020-6-17 09:10
粗略看了下回帖
没必要
那我就直接监听箱子打开事件,然后判断一下就可以了吗?
大佬膜拜我来水经验啦
季末旋律 发表于 2020-6-17 12:22
那我就直接监听箱子打开事件,然后判断一下就可以了吗?
是的 如果能监听到打开箱子事件
也可以通过监听玩家与方块的交互事件
比如PlayerInteractEvent
然后判断是不是箱子
再判断是不是要监听的特殊箱子
南柯郡守 发表于 2020-6-17 15:12
是的 如果能监听到打开箱子事件
也可以通过监听玩家与方块的交互事件
能告诉我怎么让事件知道自己需要监听什么,我还是想自己新建出来一个事件,然后自己去监听。
毕竟这样都是异步的,我觉得我需要这样的方式。
 本帖最后由 南柯郡守 于 2020-6-17 20:15 编辑 
当这件事发生的时候
比如
复制代码
这样就是了 会在玩家传送的时候触发一个MyPlayerTeleportEvent如果要监听就是
复制代码
然而你不可能在mc的代码里加入第一段代码
所以你只能先监听Bukkit提供的事件
然后判断是不是你要的功能 再去callEvent
季末旋律 发表于 2020-6-17 20:05
能告诉我怎么让事件知道自己需要监听什么,我还是想自己新建出来一个事件,然后自己去监听。
毕竟这样都 ...
当这件事发生的时候
比如
- player.teleport(loc);
 
- Bukkit.getPluginManager().callEvent(new MyPlayerTeleportEvent(player,loc));
这样就是了 会在玩家传送的时候触发一个MyPlayerTeleportEvent如果要监听就是
- @EventHandler
 
- public void onPlayerTeleport(MyPlayerTeleportEvent e) {
 
-     //do something
 
- }
然而你不可能在mc的代码里加入第一段代码
所以你只能先监听Bukkit提供的事件
然后判断是不是你要的功能 再去callEvent