3,469
个编辑
MCBBS Wiki欢迎您共同参与编辑!在参与编辑之前请先阅读Wiki方针。
如果在编辑的过程中遇到了什么问题,可以去讨论板提问。
为了您能够无阻碍地参与编辑 未验证/绑定过邮箱的用户,请尽快绑定/验证。
MCBBS Wiki GitHub群组已上线!
您可以在回声洞中发表吐槽!
服务器状态监控。点击进入
本站由MCBBS用户自行搭建,与MCBBS及东银河系漫游指南(北京)科技有限公司没有从属关系。点此了解 MCBBS Wiki 不是什么>>
(创建页面,内容为“== 关于 == 通过在拓展模组中调用 FancyMenu API,即可创建在文本元素中使用的自定义占位符文本值。 == 准备开发环境 == 请参阅 准备工作区。 == 添加新的占位符 == 每个自定义占位符都需要被封装成一个PlaceholderTextContainer类的对象,并被注册到PlaceholderTextRegistry中。 === 创建Container === 创建自定义占位符仅需 PlaceholderTextContainer…”) |
|||
| 第8行: | 第8行: | ||
每个自定义占位符都需要被封装成一个PlaceholderTextContainer类的对象,并被注册到PlaceholderTextRegistry中。 | 每个自定义占位符都需要被封装成一个PlaceholderTextContainer类的对象,并被注册到PlaceholderTextRegistry中。 | ||
=== 创建Container === | === 创建Container === | ||
创建自定义占位符仅需 PlaceholderTextContainer 一个类。该类提供自定义占位符的实际值和其余所有的重要属性。 | 创建自定义占位符仅需 <code>PlaceholderTextContainer</code> 一个类。该类提供自定义占位符的实际值和其余所有的重要属性。 | ||
FancyMenu 每游戏刻都会重新获取容器的值,即你可以随时对容器值进行操作。 | FancyMenu 每游戏刻都会重新获取容器的值,即你可以随时对容器值进行操作。 | ||
占位符标识符 | 为你的自定义占位符创建一个新类,给它起一个合适的类名,并继承<code>PlaceholderTextContainer</code>。此实例中自定义占位符的类名为<code>ExamplePlaceholderTextContainer</code>。 | ||
==== 占位符标识符 ==== | |||
每个占位符都需要有一个唯一的标识符,建议使用你的用户名或模组 ID 作为前缀以避免冲突。标识符需要在构造函数中被定义,如下: | 每个占位符都需要有一个唯一的标识符,建议使用你的用户名或模组 ID 作为前缀以避免冲突。标识符需要在构造函数中被定义,如下: | ||
<syntaxhighlight lang="java"> | |||
public ExamplePlaceholderTextContainer() { | public ExamplePlaceholderTextContainer() { | ||
super("example_placeholder_identifier"); | super("example_placeholder_identifier"); | ||
} | } | ||
</syntaxhighlight> | |||
==== 占位符本体 ==== | |||
当占位符在被添加到文本元素中时会被替换成实际值,但 FancyMenu 需要知道在输入框中如何找到这个占位符。 | |||
每个占位符都应该以%开头和结尾。 | 每个占位符都应该以%开头和结尾。 | ||
<syntaxhighlight lang="java"> | |||
@Override | @Override | ||
public String getPlaceholder() | public String getPlaceholder() | ||
| 第26行: | 第30行: | ||
return "%example_placeholder%"; | return "%example_placeholder%"; | ||
} | } | ||
</syntaxhighlight> | |||
==== 分类 ==== | |||
分类 | |||
布局编辑器会将占位符分类,供用户查询所需。 | 布局编辑器会将占位符分类,供用户查询所需。 | ||
<syntaxhighlight lang="java"> | |||
@Override | @Override | ||
public String getCategory() | public String getCategory() | ||
| 第35行: | 第39行: | ||
return "Example Category"; | return "Example Category"; | ||
} | } | ||
</syntaxhighlight> | |||
如在此处返回空,则该占位符会被自动归为"其他"分类中。 | 如在此处返回空,则该占位符会被自动归为"其他"分类中。 | ||
显示名 | ==== 显示名 ==== | ||
显示名会在布局编辑器中显示,供用户查看。 | 显示名会在布局编辑器中显示,供用户查看。 | ||
<syntaxhighlight lang="java"> | |||
@Override | @Override | ||
public String getDisplayName() | public String getDisplayName() | ||
| 第45行: | 第49行: | ||
return "Example Placeholder"; | return "Example Placeholder"; | ||
} | } | ||
</syntaxhighlight> | |||
==== 描述 ==== | |||
描述 | |||
在布局编辑器中设置文本时,此处定义的描述文本会在光标悬停在添加对应占位符的按钮上时显示。 | 在布局编辑器中设置文本时,此处定义的描述文本会在光标悬停在添加对应占位符的按钮上时显示。 | ||
<syntaxhighlight lang="java"> | |||
@Override | @Override | ||
public String[] getDescription() | public String[] getDescription() | ||
| 第57行: | 第61行: | ||
}; | }; | ||
} | } | ||
</syntaxhighlight> | |||
如不想设置描述,返回空即可。 | 如不想设置描述,返回空即可。 | ||
获取实际值 | ==== 获取实际值 ==== | ||
获取用于替换的实际值的方法是整个占位符中最重要的部分。 | 获取用于替换的实际值的方法是整个占位符中最重要的部分。 | ||
部分占位符的内容需要被频繁更新,所以 FancyMenu 会在每个渲染刻调用该获取方法。 | 部分占位符的内容需要被频繁更新,所以 FancyMenu 会在每个渲染刻调用该获取方法。 | ||
完整样例 | 注意,因为该方法会在布局中的每个文本元素每次被渲染时被调用,所以不要使用过于影响性能的东西。 | ||
==== 完整样例 ==== | |||
这是<code>PlaceholderTextContainer</code>的完整样例。 | |||
<syntaxhighlight lang="java"> | |||
package de.keksuccino.fancymenu.api.placeholder.example; | package de.keksuccino.fancymenu.api.placeholder.example; | ||
| 第114行: | 第120行: | ||
} | } | ||
</syntaxhighlight> | |||
=== 注册容器 === | === 注册容器 === | ||