V乐乐 发表于 2017-12-31 11:36:27

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

这么重要的东西居然没人搬运,耶?


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





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

他的作用就是允许你使用API替换你需要的文字或其他部分。
简单粗暴但是很有效。
“占位符”一词最好解释为字符、单词或字符串,可用于在消息/文本中占用空间,直到这样一个时间,该空间应填充与该唯一占位符相对应的值。
如果你在这里,从另一个插件发送,只需下载PlaceholderAPI并把它添加到你的插件文件夹。一旦载入插件你可以使用占位符在任何你喜欢的插件,Hook它。
给开发者,API使用方法:
官方教程地址:
https://www.spigotmc.org/wiki/hooking-into-placeholderapi/
那么就由乐乐来教你简单粗暴使用吧!

所以你想让你们在其他插件,获取信息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举例子)
name: AntiAttack
version: 4.0.0
main: com.mcml.space.Bukkit.AntiAttack
softdepend: #对,就是这样,把这行复制到你的plugin.yml里面。
commands:
antiattack:
    description: AntiAttack中心指令。
    usage: /aat help
    aliases:


然后写一些检查代码,代码如下:
在主类的onEnable() 里面写入这些代码:      Plugin plugin = Bukkit.getPluginManager().getPlugin("PlaceholderAPI"); //用服务端获取PAPI插件
      if(plugin != null){ //如果是null,意味着插件没有安装,因为服务器获取不到PAPI
            System.out.println("这个服务器安装了PAPI插件!");
      }
   
第二步:HOOK到PAPI!
创建一个新的类:然后让他继承EZPlaceholderHook,然后照葫芦画瓢,直接把我这部分代码复制到你的类里(我才不会告你抄袭(滑稽))
public class PAPIHooker extends EZPlaceholderHook{
   
    public PAPIHooker(Plugin plugin){
      super(plugin, "customplaceholder");
    }

    @Override
    public String onPlaceholderRequest(Player player, String string) {
            return null;
    }
   
}


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




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





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


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

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

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

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

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


岛主 发表于 2018-1-3 13:53:22

好深奥~乐乐大神

往事如烟 发表于 2018-1-6 20:21:40

路过围观

wo的曾经 发表于 2018-2-8 12:36:13

看不懂

维森同学 发表于 2018-5-13 13:59:15

我想在crackshot内弄一个mythicmobs<&heart>那样的变量应该怎么弄?

Mgazul 发表于 2018-6-13 08:31:29

楼主你的教程只适用于低版本的papi高版本的hook已经改了
页: [1]
查看完整版本: 【PAPI】PlaceholderAPI —— 开发者!随意替换你需要的吧![内置开发者教程]