提问者:小点点

覆盖Bukkit中的类API


我想用我的插件覆盖Bukkit api中的一个类。我知道这不是不可能的,因为PEX开发人员会这样做。

这里是链接:https://github.com/PEXPlugins/PermissionsEx/blob/master/src/main/java/ru/tehkode/permissions/bukkit/regexperms/PermissiblePEX.java

我想知道,最简单的工作方式是什么。


共2个答案

匿名用户

我在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行显示了构建您正在扩展的类的示例。