d_w___b
本帖最后由 d_w___b 于 2022-12-27 11:06 编辑

听说现在forge1.18.2的新建权限节点得监听net.minecraftforge.server.permission.events.PermissionGatherEvent.Nodes事件,在该事件里注册,但是它具体得怎么注册呢?



无敌三脚猫
啊不是,你想,在物品注册事件里注册物品之类的,用到的都是event点什么什么
自然这里也应该操作的是event点什么什么,具体来说是event.addNodes
1.18权限节点升级了,不再只是布尔值,不过还是布尔值简单
比如
PermissionNode<Boolean> node = new PermissionNode<>("modid", "name", PermissionTypes.BOOLEAN, (player, playerUUID, context) ->{return player.hasPermissions(4);});
最后那个参数是默认……怎么说呢,默认处理器什么的,这里用来让op也视作有这个权限
然后你就可以event.addNodes(node)了
那个node你要存起来,等之后需要判断玩家权限的地方写PermissionAPI.getPermission(player, node)

d_w___b
无敌三脚猫 发表于 2022-12-26 16:44
啊不是,你想,在物品注册事件里注册物品之类的,用到的都是event点什么什么
自然这里也应该操作的是event ...

前面倒是都已经弄好了,可是在判断部分怎么又出问题了呢,前面明明有定义变量node呀,难道是用不了变量node吗?

无敌三脚猫
d_w___b 发表于 2022-12-26 19:52
前面倒是都已经弄好了,可是在判断部分怎么又出问题了呢,前面明明有定义变量node呀,难道是用不了变量no ...

这种就别截图了吧,你直接把全部代码复制粘贴上来反而更清楚

d_w___b
无敌三脚猫 发表于 2022-12-26 21:05
这种就别截图了吧,你直接把全部代码复制粘贴上来反而更清楚


无敌三脚猫

好怪哦,你这则回复我没收到提醒……
你现在的写法,node是局部变量啊,就是,基础的java知识,这里你应该把node保存为静态全局变量,不然后面不能方便地调用到它
检查玩家是否为OP不是这么写的,用player.hasPermissions(4)就是了,这是原版的权限等级,权限等级为4的就是op
现在这个node是boolean型的权限,那PermissionAPI.getPermission(player, node)的返回值也只能是boolean,不会是数字,这么能跟4比较大小呢

d_w___b
无敌三脚猫 发表于 2022-12-27 09:20
好怪哦,你这则回复我没收到提醒……
你现在的写法,node是局部变量啊,就是,基础的java知识,这里你应 ...

player.hasPermissions()用不了啊
另外这个node变量怎么把它变成静态全局的变量,我在变量前加public final static不好使,它也没法用return

无敌三脚猫
比如你开头这么写
  1. public class CreateKeys{
  2. private static final PermissionNode<Boolean> node = new PermissionNode<>(MOD_ID, "command.ltr.create_keys", PermissionTypes.BOOLEAN, (player, playerUUID, context) ->{return player.hasPermissions(4);});
  3.     // 新建权限节点(仅OP可用)
  4.     @SubscribeEvent
  5.     public void Permission(PermissionGatherEvent.Nodes event) {
  6.         event.addNodes(node);
  7.     }
复制代码
后面node就能直接用了
后面你没有直接的player对象啊,你前后都写了Minecraft.getInstance().player,这里也一样写就是了
Minecraft.getInstance().player.hasPermissions

无敌三脚猫
d_w___b 发表于 2022-12-27 11:06
player.hasPermissions()用不了啊
另外这个node变量怎么把它变成静态全局的变量,我在变量前加public fin ...

为啥你的回复我都收不到提醒啊……
你这个位置没有名叫player的变量啊,但你可以通过上面的Minecraft来获取,也就是写Minecraft.getIntance().player.hasPermissions(4),如果你想要检测的不是本地的玩家,而是执行命令的玩家的话,可以写context.getSource().hasPermissions(4)
你说的不好使是什么?没有代码,也没有那个位置的截图

d_w___b
无敌三脚猫 发表于 2022-12-31 15:30
为啥你的回复我都收不到提醒啊……
你这个位置没有名叫player的变量啊,但你可以通过上面的Minecraft来获 ...

哦,那个问题已经解决了。谢谢你的回复,看来我还得多学习学习Java才行啊