请选择 进入手机版 | 继续访问电脑版
查看: 220|回复: 2

[工具类] 【PAPI】PlaceholderAPI —— 开发者!随意替换你需要的吧![内置开发者教程]

[复制链接]

11

主题

30

帖子

61

积分

Lv.3 矿物能手

UID
815745
小麦
42
金锭
196
下界之星
0
发表于 2017-12-31 11:36:27 | 显示全部楼层 |阅读模式
  这么重要的东西居然没人搬运,耶?


PlaceholderAPI —— PAPI
转载:原帖地址 SpigotMC






这是什么?
这是一款很出名的API插件,
俗称PAPI,大家肯定都知道。
使用简单,操作便利,效果拔群。

他的作用就是允许你使用API替换你需要的文字或其他部分。
简单粗暴但是很有效。
“占位符”一词最好解释为字符、单词或字符串,可用于在消息/文本中占用空间,直到这样一个时间,该空间应填充与该唯一占位符相对应的值。
如果你在这里,从另一个插件发送,只需下载PlaceholderAPI并把它添加到你的插件文件夹。一旦载入插件你可以使用占位符在任何你喜欢的插件,Hook它。

给开发者,API使用方法:

那么就由乐乐来教你简单粗暴使用吧!


所以你想让你们在其他插件,获取信息placeholderapi插件占位符属性或者信息?
这里有一本关于如何玩PAPI的指南!
注:本指南采用API函数和类仅在placeholderapi 2.0.6或更高!
如果你使用Maven,你需要为你的placeholderapi POM里面添加XML:​依赖信息。
如果你不使用Maven,你可以直接导入到库里。
如何导入一个库,我就不多说了吧,开发者肯定会。

-------------------------------------------------------------------------------------------------------------------
从你的插件placeholderapi添加占位符
如果你不包括在依赖占位符,您可能希望创建一个占位符的扩张。这里可以找到如何创建占位符扩展的指南:
https://www.spigotmc.org/wiki/placeholderapi-expansion-tutorial/
本指南将告诉你如何登记自己的占位符从您的插件,可以用在任何插件,获得从placeholderapi占位符。
看下面的指导如何获得占位符使用它们在您的插件。
所以我们的插件将取决于placeholderapi软。如果PlaceholderAPI没有被发现,
我们将简单地忽略添加自定义占位符。
现在,有许多方法来登记一个HOOK来自己添加占位符。我发现它更清洁和更容易创建一个单独的类来扩展抽象类placeholderhook或ezplaceholderhook。
这2类基本相同,但“EZ”placeholderhook只是让您更容易的事情,因为它有几个方法建立在为你工作时登记的占位符。:)
所以我做了一个名为“ourcoolplaceholders“延伸”ezplaceholderhook”。
一旦我这样做了,它就让我创建一个构造函数,它也告诉我需要添加一个构造函数。
未实现的方法,我们做的工作当一个占位符的值是必要的。
因此,在我们的插件中,我们将跟踪谁是职员和在线员工数量。
在我们的主要类中,我制作了一些事件监听器,这样我们就可以确定一个球员是否是加入的工作人员,如果是的话,将他们添加到在线员工的一组球员名单中。在退出时,我们将他们从在线员工名单中删除。
现在我们有一些统计数据,我们可以将占位符弄好了!!!
让我们返回并完成占位符类。
所以我们走了。现在我们需要做的就是创建这个类的实例,并调用它提供的“钩子”方法:
-------------------------------------------------------------------------------------------------------------------
使用你的插件placeholderapi占位符。
所以在我们的插件,我们要使用占位符,我们将公布球员的名字和排名,当他们加入为例。在你的插件使用placeholderapi获得占位符是很容易的,不应该有太多的解释…


好了,我们开工吧!


【课程一:我要给PAPI做自己的变量。】

第一步:检查PAPI是否在工作,加入前置项目。
先打开你的plugin.yml,写入这一条:(拿我的AntiAttack举例子)
  1. name: AntiAttack
  2. version: 4.0.0
  3. main: com.mcml.space.Bukkit.AntiAttack
  4. softdepend: [PlaceholderAPI] #对,就是这样,把这行复制到你的plugin.yml里面。
  5. commands:
  6.   antiattack:
  7.     description: AntiAttack中心指令。
  8.     usage: /aat help
  9.     aliases: [aat]
复制代码


然后写一些检查代码,代码如下:
在主类的onEnable() 里面写入这些代码:
  1.         Plugin plugin = Bukkit.getPluginManager().getPlugin("PlaceholderAPI"); //用服务端获取PAPI插件
  2.         if(plugin != null){ //如果是null,意味着插件没有安装,因为服务器获取不到PAPI
  3.             System.out.println("这个服务器安装了PAPI插件!");
  4.         }
复制代码

     
第二步:HOOK到PAPI!
创建一个新的类:然后让他继承EZPlaceholderHook,然后照葫芦画瓢,直接把我这部分代码复制到你的类里(我才不会告你抄袭(滑稽))
  1. public class PAPIHooker extends EZPlaceholderHook{
  2.    
  3.     public PAPIHooker(Plugin plugin){
  4.         super(plugin, "customplaceholder");
  5.     }

  6.     @Override
  7.     public String onPlaceholderRequest(Player player, String string) {
  8.             return null;
  9.     }
  10.    
  11. }
复制代码


第三步:搞你想要的PAPI变量吧!
  1.     @Override
  2.     public String onPlaceholderRequest(Player player, String string) {
  3.         if (string.equals("Vlele_hello")) {
  4.             return "大家好!!!"; //如果PAPI要的变量是 %customplaceholder_Vlele_hello% ,就会给你回复一个 大家好!!!
  5.         }
  6.         return null; //这个必须加在句末,如果回复的是null,意思就是我不要了,那么PAPI什么都不会做。
  7.     }
复制代码




第四步:启用这个Hooker!
  1. @Override
  2.     public void onEnable(){
  3.         Plugin plugin = Bukkit.getPluginManager().getPlugin("PlaceholderAPI"); //用服务端获取PAPI插件
  4.         if(plugin != null){ //如果是null,意味着插件没有安装,因为服务器获取不到PAPI
  5.             System.out.println("这个服务器安装了PAPI插件!成功HOOK啦!");
  6.             boolean sucess = new PAPIHooker(this).hook();
  7.             if(sucess == true){
  8.                 System.out.println("已经成功hook到了PAPI!乐乐表示开心!");
  9.             }else{
  10.                 System.out.println("什么情况,HOOK失败!");
  11.             }
  12.         }
  13.     }
复制代码





成功啦!你已经彻底HOOK到了PAPI,别人已经可以和你一起搞基了。


【课程二】我是使用者,我要获取一个PAPI变量
那么问题来了,假如你不是玩HOOK的,你是要获取变量的,那就更简单了。

  1.     @EventHandler
  2.     public void onJoin(PlayerJoinEvent event){ //假如我们要做一个:当玩家进入服务器,就跟他说大家好!!!
  3.         Player player = event.getPlayer();
  4.         String messageWithoutPAPI = "乐乐说: %customplaceholder_Vlele_hello%";
  5.         String messageWithPAPI = PlaceholderAPI.setPlaceholders(player, messageWithoutPAPI); //为什么参数里有个player呢?这是为了部分特殊插件需要根据不同玩家处理不同的变量的而已,如果你要的变量与玩家数据无关的话,你可以直接写null.
  6.         player.sendMessage(messageWithPAPI); //这样玩家会收到 乐乐说: 大家好!!!
  7.     }
  8.         
复制代码

        
看明白没?就这么简单!这个变量既可以用自己的,也可以用其他插件的变量,只要他们HOOK了PAPI。

下载地址:
点击下载【PAPI】

最后:
看我写了这么久的教程,你就给个回复吧


92

主题

210

帖子

175

积分

攻略组

UID
8024
小麦
28
金锭
544
下界之星
0

玩家团队勋章

发表于 2018-1-3 13:53:22 | 显示全部楼层
好深奥~乐乐大神

25

主题

971

帖子

295

积分

Lv.5 农牧专家

UID
4417
小麦
25
金锭
712
下界之星
0
发表于 2018-1-6 20:21:40 | 显示全部楼层
路过围观
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

返回顶部