- ◆ 支持核心
- Spigot
- ◆ 插件前置
- FICore[1.2.4+],FIScript[1.3.2+],PlaceholderAPI
介绍:
依赖:FICore[1.2.4+],FIScript[1.3.2+],PlaceholderAPI
功能:
空手右键玩家,会打开玩家交互界面
界面内可以有许多功能,功能需要自
行配置.功能都是针对被交互的玩家
======================
玩家更具权限不同打开不同的交互
界面,主要配置界面内可以用的功能
每个界面都需要配置权重
给op用的配置0是最好的
======================
本插件自带一个物品交易的功能
======================
插件默认配置内有一些功能,分别是:
invsee,物品交易,给钱,快关飞行
效果图:
物品交易:
配置内容:
config.yml[配置的gui玩家需要有权限才能打开,不如打开的就是一个空功能的交互界面,比如下方配置了op和player,普通的op默认两个都有,就会判断优先级,配置的op界面优先级优先所以打开的op界面,player界面给玩家用的所以要给一个权限playerinteract.player
所以配置的界面名不要和原本就有的指令权限重名,当然你也可以配置成这样的Test.player1带.也可以.界面是可以配置多个的自己看着办,比如搞个vip交互界面什么的.优先级写的值一定是低于普通玩家,高于op的]:
functions.yml:
指令:
指令节点: [插件名].[指令全名]
建议: 玩家最好给的权限 物品交易请求,同意,拒绝|交互指令可以直接都不够,毕竟右键就能打开
注意: playerinteract指令不需要给权限,只有他的子命令需要给权限,子命令权限组在用的时没权限会提示你
其他:
插件主要支持原版,脚本是可以涉及Forge的
脚本语言是Groovy会点java就能写
https://github.com/FullIdle/PlayerInteract
依赖:FICore[1.2.4+],FIScript[1.3.2+],PlaceholderAPI
功能:
空手右键玩家,会打开玩家交互界面
界面内可以有许多功能,功能需要自
行配置.功能都是针对被交互的玩家
======================
玩家更具权限不同打开不同的交互
界面,主要配置界面内可以用的功能
每个界面都需要配置权重
给op用的配置0是最好的
======================
本插件自带一个物品交易的功能
======================
插件默认配置内有一些功能,分别是:
invsee,物品交易,给钱,快关飞行
效果图:
物品交易:
配置内容:
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'
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);
指令节点: [插件名].[指令全名]
建议: 玩家最好给的权限 物品交易请求,同意,拒绝|交互指令可以直接都不够,毕竟右键就能打开
注意: playerinteract指令不需要给权限,只有他的子命令需要给权限,子命令权限组在用的时没权限会提示你
其他:
插件主要支持原版,脚本是可以涉及Forge的
脚本语言是Groovy会点java就能写
https://github.com/FullIdle/PlayerInteract