# 指南

# 安装

# CF4M Maven (opens new window)

Maven URL (opens new window)

# Releases (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 加上这个注解,这个字段是modulesetting
@Extend 加上这个注解,这个类是module的扩展
@Enable 加上这个注解,这个方法在module启用时被调用
@Disable 加上这个注解,这个方法在module禁用时被调用
@Command 加上这个注解,这个类是command
@Exec 加上这个注解,这个方法是可以执行的command
@Param 加上这个注解,这个方法的参数是command的参数名称
@Config 加上这个注解,这个类是config
@Load 加上这个注解,这个方法会在config加载时调用
@Save 加上这个注解,这个方法会在config保存时调用
@Autowired 加上这个注解,这个类\方法会自己赋值
@Configuration 加上这个注解,这个类是 configuration