• 游客, 欢迎您来到九域资源社区,如果您是新人,请前往 论坛公告 板块查看新人引导教程 或者 点我打开
    如果您发现没有下载许可, 请先验证邮箱再进行下载;金锭可通过每日登陆或资源出售获取,目前没有其他渠道可获取。
PlayerInteract —— 玩家交互[全版本]

Bukkit PlayerInteract —— 玩家交互[全版本] 1.0-SNAPSHOT

没有下载权限
◆ 支持核心
Spigot
◆ 插件前置
FICore[1.2.4+],FIScript[1.3.2+],PlaceholderAPI
介绍:
依赖:FICore[1.2.4+],FIScript[1.3.2+],PlaceholderAPI
功能:
空手右键玩家,会打开玩家交互界面
界面内可以有许多功能,功能需要自
行配置.功能都是针对被交互的玩家
======================
玩家更具权限不同打开不同的交互
界面,主要配置界面内可以用的功能
每个界面都需要配置权重
给op用的配置0是最好的
======================
本插件自带一个物品交易的功能
======================
插件默认配置内有一些功能,分别是:
invsee,物品交易,给钱,快关飞行


效果图:
1709865764468.png

物品交易:
1709866041416.png


配置内容:
config.yml[配置的gui玩家需要有权限才能打开,不如打开的就是一个空功能的交互界面,比如下方配置了op和player,普通的op默认两个都有,就会判断优先级,配置的op界面优先级优先所以打开的op界面,player界面给玩家用的所以要给一个权限playerinteract.player
所以配置的界面名不要和原本就有的指令权限重名,当然你也可以配置成这样的Test.player1带.也可以.界面是可以配置多个的自己看着办,比如搞个vip交互界面什么的.优先级写的值一定是低于普通玩家,高于op的]:

YAML:
##不可以配置没有功能的功能页
op:
  peiority: 0
  title: "§6§l%player_name% §c§l[OP-Manage-GUI]"
  functions:
    - 'invsee'
    - 'itr'
    - 'giveMoney'
    - 'setFly'
##主要配置功能列表
player:
  ##权重,小优先,玩家拥有多个交互gui界面权限的时候更具权重来判断给玩家打开那个gui
  # 可以自己写个op专用的交互界面,方便玩坏.呸呸呸.管理玩家
  priority: 1
  ##变量传入的玩家是被交互的玩家~
  title: "%player_name%"
  ##可以多个功能,超出10个自动实现翻页功能
  functions:
    - 'itr'
    - 'giveMoney'
functions.yml:
YAML:
#Invsee 是名称,可以自定义
#Need ess
invsee:
  item:
    material: CHEST
    slot: 1
    name: '&3&lInvSee'
    lore:
      - '&3&l open %player_name% inventory'
  #The 变量 player、other 和 event 可用
  #the 脚本分别是触发播放器,
  #the 交互式播放器,以及触发此脚本的事件。
  script: |
    player.closeInventory()
    player.performCommand("invsee ${other.name}")
    player.sendMessage('已打开对方玩家的背包')
  isAsynchronous: false
#ItemTrad
itr:
  item:
    material: GRASS
    slot: 1
    name: '&3&lSend item trade request'
    lore:
      - '&3&lSend item trade request to %player name%'
      - '&a&l[Click to send!]'
  script: |
    player.closeInventory()
    player.performCommand("itr ${other.name}")
  isAsynchronous: false
#setFly
setFly:
  item:
    material: ELYTRA
    slot: 1
    name: '&3&lSet %player_name% Fly status'
    lore:
      - '&a&lClick the switch %player_name% flight status'
  script: |
    player.closeInventory()
    player.performCommand("fly ${other.name}")
#Need ess
giveMoney:
  item:
    material: GOLD_INGOT
    slot: 1
    name: '&3&lGive money'
    lore:
      - '&e&lClick and enter the price in the input box!'
  script: |
    import org.bukkit.Bukkit
    import org.bukkit.event.Event
    import org.bukkit.event.EventException
    import org.bukkit.event.EventPriority
    import org.bukkit.event.Listener
    import org.bukkit.event.player.AsyncPlayerChatEvent
    import org.bukkit.plugin.EventExecutor
    import org.bukkit.scheduler.BukkitRunnable
    import org.bukkit.metadata.FixedMetadataValue
  
    def plugin = Bukkit.getPluginManager().getPlugin('PlayerInteract')
    //防止重复点击的内容↓
    //用entity内的metaData,有想过用权限的可是我脑子不够,总觉得临时权限要是没有去掉之后一段时间内都没办法点击了。。。
    //判断数据
    if (player.hasMetadata("waitInputPay")){
        for (final def v in player.getMetadata("waitInputPay")) {
            if (v.owningPlugin == plugin) {
                if (v as Boolean) {
                    player.sendMessage("§6§lPlease click on [You can enter non-numbers directly to finish] after the payment is finished.")
                    player.closeInventory()
                    return
                }
            }
        }
    }
    //给上数据
    player.setMetadata("waitInputPay",new FixedMetadataValue(plugin,true))
    //防止重复点击的内容↑
  
  
    //初始化一些东西
    //定期删除侦听器
    def i = 60
    //监听器对象
    def listener = new Listener() {}
    //要定时的任务
    def runnable = new BukkitRunnable() {
        @Override
        void run() {
            if (player != null) {
                player.sendMessage("§c§lPayment timed out!")
            }
            AsyncPlayerChatEvent.class.getHandlerList().unregister(listener)
            //删除数据
            player.removeMetadata("waitInputPay",plugin)
        }
    }
    //执行的内容
    def executor = new EventExecutor() {
        @Override
        void execute(Listener l,Event event) throws EventException {
            def e = event as AsyncPlayerChatEvent
            if (e.player != player) {
                return
            }
            e.cancelled = true;
            try {
                def value = Integer.parseInt(e.message)
                player.performCommand("pay ${other.getName()} ${value}")
            } catch (NumberFormatException ignored) {
                e.player.sendMessage("§6§lThe input is not a number!")
            }
            //Register listener and runnable
            AsyncPlayerChatEvent.getHandlerList().unregister(listener)
            runnable.cancel()
            //删除数据
            player.removeMetadata("waitInputPay",plugin)
        }
    }
    //注册侦听器
    plugin.getServer().getPluginManager().registerEvent(AsyncPlayerChatEvent.class, listener, EventPriority.NORMAL, executor, plugin)
    player.sendMessage("§6§lPlease enter the value to be paid!")
    player.closeInventory()
    //Start a scheduled task
    runnable.runTaskLater(plugin, i * 20);
指令:
1709865996666.png

指令节点: [插件名].[指令全名]
建议: 玩家最好给的权限 物品交易请求,同意,拒绝|交互指令可以直接都不够,毕竟右键就能打开
注意:
playerinteract指令不需要给权限,只有他的子命令需要给权限,子命令权限组在用的时没权限会提示你


其他:
插件主要支持原版,脚本是可以涉及Forge的
脚本语言是Groovy会点java就能写

https://github.com/FullIdle/PlayerInteract
  • Like
反馈: laoruimi
作者
FullIdle
下载
19
查看
1,017
首次发布
最后更新
评分
5.00 星 1 星

来自FullIdle的更多资源

分享资源

最新更新

  1. 小修改

    物品交易的确认次数改成2次,现在需要经过2次确认物品才会交易过去

最新评论

嘎嘎好用