# 指南
# 安装
# CF4M Maven (opens new window)
# Releases (opens new window)
# 使用
# Instance
创建主类.
public enum Example {
INSTANCE;
public void run() {
CF4M.run(this);
// CF4M.run(this, Minecraft.getMinecraft().mcDataDir.toString() + "/" + name);
}
}
# Start
在游戏运行时使用Run
.
Example.INSTANCE.run();
# Event
public class Events {
public static class UpdateEvent {
}
public static class Render2DEvent {
}
}
注意
必须和主类在同级包下
# Module
注意
您必须使用CF4M.MODULE.onKey(key);
才可以使用快捷键
创建Sprint
类.
@Module(value = "Sprint", key = Keyboard.KEY_V, type = "MOVEMENT")
//@Module("Sprint")
public class Sprint {
@Event
private void onUpdate(UpdateEvent updateEvent) {
Minecraft.getMinecraft().thePlayer.setSprinting(true);
}
}
提示
@Module
注解CF4M会自动为您添加
# Enable和Disable
@Enable
public void onEnable() {
System.out.println("onEnable");
}
@Disable
public void onDisable() {
System.out.println("onDisable");
}
# 扩展
为Module扩展变量
@Extend
public class ModuleExtend {
public String tag;
public int age;
public Action fun;
public interface Action {
void on();
}
}
提示
@Extend
注解CF4M会自动为您添加
private ModuleExtend moduleExtend;
@Enable
public void enable() {
moduleExtend = CF4M.MODULE.getByInstance(this).getExtend();
moduleExtend.tag = "tag1";
moduleExtend.age = 1;
moduleExtend.fun = () -> System.out.println("FUN1");
}
@Disable
public void disable() {
System.out.println(moduleExtend);
System.out.println(moduleExtend.tag);
System.out.println(moduleExtend.age);
moduleExtend.fun.on();
}
# Setting
@Module(value = "Sprint", key = Keyboard.KEY_V, type = Category.MOVEMENT)
public class Sprint {
@Setting(value = "test1", description = "description")
private EnableSetting test1 = new EnableSetting(false);
@Setting("test2")
private IntegerSetting test2 = new IntegerSetting(1, 1, 1);
@Event
private void onUpdate(UpdateEvent updateEvent) {
Minecraft.getMinecraft().thePlayer.setSprinting(true);
}
}
# 自定义Setting
public class EnableSetting {
private boolean enable;
public EnableSetting(boolean enable) {
this.enable = enable;
}
public boolean getEnable() {
return enable;
}
public void setEnable(boolean enable) {
this.enable = enable;
}
}
public class IntegerSetting {
private Integer current;
private Integer min;
private Integer max;
public IntegerSetting(Integer current, Integer min, Integer max) {
this.current = current;
this.min = min;
this.max = max;
}
public Integer getCurrent() {
return current;
}
public void setCurrent(Integer current) {
this.current = current;
}
public Integer getMin() {
return min;
}
public void setMin(Integer min) {
this.min = min;
}
public Integer getMax() {
return max;
}
public void setMax(Integer max) {
this.max = max;
}
}
提示
@Setting
注解CF4M会自动为您添加
# Command
注意
您需要在游戏的sendChatMessage
方法下使用CF4M.COMMAND.execCommand(message)
prefix: `
@Command({"e", "enable"})
public class EnableCommand {
@Exec
private void exec(@Param("module") String name) {
ModuleProvider module = CF4M.MODULE.getByName(name);
if (module == null) {
CF4M.configuration.command().message("The module with the name " + name + " does not exist.");
return;
}
module.enable();
}
}
提示
@Command({"index"})
注解CF4M会自动为您添加
# Config
@Config("Module")
public class ModuleConfig {
@Load
public void load() {
for (ModuleProvider module : CF4M.MODULE.getAll()) {
JsonArray jsonArray = new JsonArray();
try {
jsonArray = new Gson().fromJson(read(CF4M.CONFIG.getByInstance(this).getPath()), JsonArray.class);
} catch (IOException e) {
e.printStackTrace();
}
for (JsonElement jsonElement : jsonArray) {
JsonObject jsonObject = jsonElement.getAsJsonObject();
if (module.getName().equals(new Gson().fromJson(jsonObject, JsonObject.class).get("name").getAsString())) {
if (jsonObject.get("enable").getAsBoolean()) {
module.enable();
}
module.setKey(jsonObject.get("key").getAsInt());
}
}
}
}
@Save
public void save() {
JsonArray jsonArray = new JsonArray();
for (ModuleProvider module : CF4M.MODULE.getAll()) {
JsonObject jsonObject = new JsonObject();
jsonObject.addProperty("name", module.getName());
jsonObject.addProperty("enable", module.getEnable());
jsonObject.addProperty("key", module.getKey());
jsonArray.add(jsonObject);
}
try {
write(CF4M.CONFIG.getByInstance(this).getPath(), new Gson().toJson(jsonArray));
} catch (IOException e) {
e.printStackTrace();
}
}
private String read(String path) throws IOException {
return FileUtils.readFileToString(new File(path));
}
private void write(String path, String string) throws IOException {
FileUtils.writeStringToFile(new File(path), string, "UTF-8");
}
}
提示
@Config
注解CF4M会自动为您添加
# Autowired
支持的字段所有Container
@Autowired
private ModuleContainer moduleContainer;
@Autowired
public class Test {
private ModuleContainer moduleContainer;
}
# 成分
实例化可以被Autowried
注入
@Component
public class UtilTest {
public void util() {
System.out.println("Util test");
}
}
# Bean
@Bean
public UtilBean utilBean() {
return new UtilBean();
}
# 配置
更新前缀
public class Message extends CommandConfiguration {
@Override
public String getPrefix() {
return "-";
}
}
您还可以使用配置文件cf4m.configuration.properties
进行配置
cf4m.command.prefix=-
cf4m.command.message=cn.enaium.cf4m.example.utils.ChatUtil:message
cf4m.config.enable=false
# 自定义配置
@Configuration("test")
public class ConfigurationTest {
//@Value("value")
@Value
private String value;
public String getValue() {
return value;
}
}
test.value=ConfigurationTest
提示
@Configuration
注解CF4M会自动为您添加
# 插件
CF4M还提供了插件的支持
public class PluginExample implements PluginInitialize {
@Override
public void initialize(Plugin plugin) {
}
}
配置文件 cf4m.plugin.properties
plugin=org.cf4m.plugin.PluginExample
name=CF4M-Plugin-Example
description=a plugin for cf4m
version=1.0
author=Enaium
# 注解
注解 | 描述 |
---|---|
@Module | 加上这个注解,这个类是module |
@Setting | 加上这个注解,这个字段是module 的setting |
@Extend | 加上这个注解,这个类是module 的扩展 |
@Enable | 加上这个注解,这个方法在module 启用时被调用 |
@Disable | 加上这个注解,这个方法在module 禁用时被调用 |
@Command | 加上这个注解,这个类是command |
@Exec | 加上这个注解,这个方法是可以执行的command |
@Param | 加上这个注解,这个方法的参数是command 的参数名称 |
@Config | 加上这个注解,这个类是config |
@Load | 加上这个注解,这个方法会在config 加载时调用 |
@Save | 加上这个注解,这个方法会在config 保存时调用 |
@Autowired | 加上这个注解,这个类\方法会自己赋值 |
@Configuration | 加上这个注解,这个类是 configuration |