跳到主要内容

目的

添加一些自己的组件或者修改现有组件添加一些字段。 可以配合客户端脚本或者实现更多更灵活的操作。

代码示例

import com.germ.germplugin.api.dynamic.DynamicBase;
import com.germ.germplugin.api.dynamic.gui.GermGuiPart;
import com.germ.germplugin.api.dynamic.gui.GermGuiScreen;
import com.germ.germplugin.api.dynamic.gui.GermGuiTexture;
import com.germ.germplugin.api.dynamic.gui.GermGuiPartMapping;
import com.germ.germplugin.api.yaml.YamlGetMethod;
import com.germ.germplugin.api.yaml.YamlSetMethod;
import org.bukkit.configuration.file.YamlConfiguration;

import java.io.StringReader;
import java.util.ArrayList;
import java.util.List;

public class TestMappingType {

public static void main(String[] args) {
String yaml = "nihao:\n" +
" addpart:\n" +
" type: 16\n" +
" test: 666\n" +
" modifypart:\n" +
" type: 1\n" +
" path: textures/misc/logo.png\n" +
" clickDos:\n" +
" - \"message`<->`好好好\"";
YamlConfiguration yamlConfiguration = YamlConfiguration.loadConfiguration(new StringReader(yaml));
GermGuiScreen germGuiScreen = new GermGuiScreen("nihao");
germGuiScreen.setMappingType(new MappingTypeTest());
germGuiScreen.loadSrc("nihao", yamlConfiguration);

GermGuiPart`<? extends DynamicBase>` addpart = germGuiScreen.getGuiPart("addpart");
System.out.println("addpart = " + addpart.getClass());
if (addpart instanceof Custom16Part) {
System.out.println("test = " + ((Custom16Part) addpart).getTest());
}

GermGuiPart`<? extends DynamicBase>` modifypart = germGuiScreen.getGuiPart("modifypart");
System.out.println("modifypart = " + modifypart.getClass());
if (modifypart instanceof CustomGermGuiTexture) {
System.out.println("clickDos = " + ((CustomGermGuiTexture) modifypart).getClickDos());
}
//也可以直接调用静态方法 注册指定guiName使用的mapping
GermGuiScreen.registerMappingType("nihao", new MappingTypeTest());
//如果要替换所有GuiScreen的mapping GuiName传入 @all
GermGuiScreen.registerMappingType("@all", new MappingTypeTest());
}

public static class MappingTypeTest extends GermGuiPartMapping {
@Override
public Class`<? extends DynamicBase>` map(Object type) {
if (type instanceof Integer) {
if (((Integer) type) == 1) {
return CustomGermGuiTexture.class;
} else if (((Integer) type) == 16) {
return Custom16Part.class;
}
} else if (type instanceof String) {
if (((String) type).equals("texture")) {
return CustomGermGuiTexture.class;
}
}
return super.map(type);
}
}

public static class Custom16Part extends GermGuiPart` {

public Custom16Part(String indexName) {
super(indexName);
}

private int test;


//这个YamlGetMethod注解方法是用来从javaBean生成yaml时用的 如果不需要调用getSrc方法生成yaml可以省略
@YamlGetMethod("test")
public final int getTest() {
return test;
}

@YamlSetMethod("test")
public final Custom16Part setTest(int test) {
this.test = test;
return this;
}
}

public static class CustomGermGuiTexture extends GermGuiTexture {

public CustomGermGuiTexture(String indexName) {
super(indexName);
}

private List` clickDos = new ArrayList<>();

@YamlGetMethod("clickDos")
public List` getClickDos() {
return clickDos;
}

@YamlSetMethod("clickDos")
public CustomGermGuiTexture setClickDos(List` clickDos) {
this.clickDos = clickDos;
return this;
}

@Override
public CustomGermGuiTexture clone() {
CustomGermGuiTexture clone = (CustomGermGuiTexture) super.clone();
clone.clickDos = new ArrayList<>(this.clickDos);
return clone;
}
}
}