TabooLib/docs/tlocale.md

5.6 KiB
Raw Blame History

TLocale

通过简单的 yml 文件自定义你的所有信息

添加一个语言文件

TLocale 的语言文件是自动加载的,你可以在 TabooLib 初始化你的插件完毕后任意的调用来发送,前提是你在 plugin.yml 添加了 TabooLib 为 dependsoftdepend

语言文件应该放在 /lang/xx_XX.ymlTabooLib 默认会加载 zh_CNen_US 的语言文件。

在添加了语言文件后,你就应该可以使用 com.ilummc.tlib.resources.TLocale 类的所有静态方法了。

/TaabooLib/config.yml 中有 LOCALE 下的几个选项可以设置加载的语言和是否默认启用 PlaceholderAPI

发送一条消息

/lang/zh_CN.yml

TEST: '{0} 加入服务器'
TITLE_TEST:
  ==: TITLE
  title: '&b{0} 加入了服务器'
  subtitle: '&a{0} 太强了以至于他还有 subtitle 显示'

代码部分

package com.ilummc.tlib;

import org.bukkit.Bukkit;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.event.player.PlayerJoinEvent;
import com.ilummc.tlib.resources.TLocale;

public class ExampleMain extends JavaPlugin implements Listener {
    
    @Override
    public void onEnable() {
        Bukkit.getPluginManager().registerEvents(this, this);
    }
    
    @EventHandler
    public void onJoin(PlayerJoinEvent event) {
        TLocale.sendTo(event.getPlayer(), "TEST", event.getPlayer().getName());
        TLocale.sendTo(event.getPlayer(), "TITLE_TEST", event.getPlayer().getName());
    }
}

语言文本格式

TLocale 的语言文本采用 yml 存储,每一个键对应一个或多个值、

以下的格式都是可以的:

normal: '一条普通的测试信息'
multiline: |-
  多行的测试信息
  这是 YAML 表示带有换行符字符串的方法  
typeMessage:
  ==: TITLE
  title: 这是带有类型的语言文本
  subtitle: 在下方你可以看到所有可用的类型
combinedTypeMessage:
  - ==: TEXT
    text:
      - '这也是一条普通的测试信息'
      - '但是他有很多行'
      - '还有可替换的文本 {0}'
  - ==: ACTION
    text: '一条 ActionBar 消息'
  - ==: JSON
    text:
      - '这条消息仍然可以使用 TLocale.sendTo(sender, "combinedTypeMessage") 来发送'
      - '玩家会收到一条聊天栏消息'
      - '一条 ActionBar 的消息'
      - '和一条 JSON 文本,比如<§a§n点击这里就会执行一条命令@cmd>'
    args:
      cmd:
        hover: |-
          命令是 /tp ~ ~50 ~
          这一条消息展示了 TLocale 的所有特性          
        command: '/tp ~ ~50 ~'
  - '最后,这个消息也能混着普通字符串用'

TLocale 可以发送普通的聊天消息和其他复杂的消息,比如 ActionBar 和 Title 消息。

为了方便起见,我们将如下的配置

==: 种类
参数1: xxxx
参数2: yyyy

称为一个 语言对象

每个语言对象可以有以下几种排列方式:

文本1: 语言对象
文本2:
  - 语言对象
  - 语言对象
节点1:
  文本3: 语言对象

TLocale 的文本都支持替换,如 {N} ,替换的文本是 TLocale 的方法调用时传入的对应字符串。

!> 因为写这个功能的人是程序员,所以 N 从 0 开始

以下内容列举了所有的语言对象种类

TEXT

TEXT 类型代表一条普通的聊天栏文本,有以下几种表示方法:

node1: '文本'
node2:
  - '文本'
  - '文本'
node3:
  ==: TEXT
  text: '文本'
node4:
  ==: TEXT
  text:
    - '文本'
    - 'Placeholder API 测试 %vault_eco_balance%'
  papi: true

你可以在任意一个 TEXT 中添加 papi: true 来启用对 PlaceholderAPI 的支持,如果不添加,默认值为 /TaabooLib/config.yml 中的 LOCALE.USE_PAPI 设置的值。

所有的选项都是可选的

TITLE

TITLE 类型代表一条 title 消息,可以含有淡入淡出的时间选项。所有的选项都是可选的

node:
  ==: TITLE
  title: '显示在屏幕正中的 title 文本'
  subtitle: 'subtitle 文本'
  fadein: 10
  fadeout: 10
  stay: 20
  papi: false

ACTION

ACTION 类型代表一条 ActionBar 消息。所有的选项都是可选的

node:
  ==: ACTION
  text: '&6ActionBar &e文本'
  papi: false

JSON

JSON 类型代表一条可以点击和可以含有悬浮文字的消息。

消息的文本在 text 中指定。

可以点击、鼠标停留的文本需要使用 <可选的文本@参数名称> 来表示,然后在 args 参数中添加你指定的参数名称并添加点击和悬浮的文本。

全部 JSON 的任何地方都可以启用替换功能,包括内置的替换和 PAPI 。

所有的选项都是可选的

node:
  ==: JSON
  text:
    - '<点击建议命令@test1>'
    - '<点击执行命令@test2>'
    - '<鼠标停留查看悬浮字@test3>'
    - '<@test4>'
    - '<又可以点击又可以悬浮的信息@combined>'
    - '替换测试1 {0}'
    - '<@test6>'
  papi: true
  args:
    test1:
      suggest: '/say 建议执行的命令'
    test2:
      command: '/say 点击直接执行的命令'
    test3:
      hover: |-
        &6鼠标悬浮显示的文字
        &9可以是单行也可以是多行        
    test4:
      text: '你可以在参数中指定显示的文本,比如这一条'
    test5:
      command: '/say Hello World.'
      hover: '点击说一句 &cHello World'
    test6:
      text: 'JSON 文本也有参数替换的功能,比如 {1}'
      hover: |-
        悬浮字中也可以替换 {1}
        甚至可以加入 PAPI 变量如 %player_name%        
      command: '点击文本也可以替换,不做演示'