我想用我的插件覆盖Bukkit api中的一个类。我知道这不是不可能的,因为PEX开发人员会这样做。
这里是链接:https://github.com/PEXPlugins/PermissionsEx/blob/master/src/main/java/ru/tehkode/permissions/bukkit/regexperms/PermissiblePEX.java
我想知道,最简单的工作方式是什么。
我在PEX中找到了方法并简化了它:
首先我需要声明一个Field变量:
public static Field mezo;
之后,在OnEnable方法中,我需要获取CraftPeople Entitys perm字段:
try{
mezo=Class.forName("org.bukkit.craftbukkit.v1_7_R1.entity.CraftHumanEntity").getDeclaredField("perm");
}
catch(Throwable h){
}
在每个玩家加入时,我需要注册玩家:
Jogkezelheto uj=new Jogkezelheto(j);
try{
mezo.setAccessible(true);
mezo.set(j,uj);
}
catch (Throwable h){
}
Jogkezelheto是我的类,它扩展了PermissibleBase,例如PermissiblePex是PEX。它正在工作!
我假设当你说“覆盖”时,你的意思是“扩展”。如果这是正确的,Java有一个很好的关键字:
public class MyBukkitClass extends BukkitClass {
...
}
这使您可以访问您正在扩展的原始BukkitClass中的所有方法/变量。
如果您查看您在github中发布的那个类,第52行使用了扩展关键字。第77行显示了构建您正在扩展的类的示例。