FancyMenu Wiki/自定义占位符:修订间差异

(创建页面,内容为“== 关于 == 通过在拓展模组中调用 FancyMenu API,即可创建在文本元素中使用的自定义占位符文本值。 == 准备开发环境 == 请参阅 准备工作区。 == 添加新的占位符 == 每个自定义占位符都需要被封装成一个PlaceholderTextContainer类的对象,并被注册到PlaceholderTextRegistry中。 === 创建Container === 创建自定义占位符仅需 PlaceholderTextContainer…”)
 
第8行: 第8行:
每个自定义占位符都需要被封装成一个PlaceholderTextContainer类的对象,并被注册到PlaceholderTextRegistry中。
每个自定义占位符都需要被封装成一个PlaceholderTextContainer类的对象,并被注册到PlaceholderTextRegistry中。
=== 创建Container ===
=== 创建Container ===
创建自定义占位符仅需 PlaceholderTextContainer 一个类。该类提供自定义占位符的实际值和其余所有的重要属性。
创建自定义占位符仅需 <code>PlaceholderTextContainer</code> 一个类。该类提供自定义占位符的实际值和其余所有的重要属性。
 
FancyMenu 每游戏刻都会重新获取容器的值,即你可以随时对容器值进行操作。
FancyMenu 每游戏刻都会重新获取容器的值,即你可以随时对容器值进行操作。
为你的自定义占位符创建一个新类,给它起一个合适的类名,并继承PlaceholderTextContainer。此实例中自定义占位符的类名为ExamplePlaceholderTextContainer。
 
占位符标识符
为你的自定义占位符创建一个新类,给它起一个合适的类名,并继承<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 需要知道在输入框中如何找到这个占位符。


占位符本体
当占位符在被添加到文本元素中时会被替换成实际值,但 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 会在每个渲染刻调用该获取方法。
注意,因为该方**在布局中的每个文本元素每次被渲染时被调用,所以不要使用过于影响性能的东西。
 
完整样例
注意,因为该方法会在布局中的每个文本元素每次被渲染时被调用,所以不要使用过于影响性能的东西。
这是PlaceholderTextContainer的完整样例。
==== 完整样例 ====
这是<code>PlaceholderTextContainer</code>的完整样例。
<syntaxhighlight lang="java">
package de.keksuccino.fancymenu.api.placeholder.example;
package de.keksuccino.fancymenu.api.placeholder.example;


第114行: 第120行:


}
}
复制代码
</syntaxhighlight>


=== 注册容器 ===
=== 注册容器 ===
维护员、​界面管理员、​巡查员、​监督员、​小部件编辑者
3,469

个编辑