java - 加载预先编写的对象而不是将它们全部写入[插件系统]

标签 java oop

好吧,我(尝试)制作一个对象系统,我可以在其中加载类或文件夹中的 .java 文件,可能称为“插件”,它们将添加到名为“base”的数组列表中,base 将控制对象和循环它们,别担心,我有所有的例子。

但我先解释一下它是如何工作的。

这些插件将从 (BaseHack) 扩展的基类,所有扩展 BaseHack 的对象都将添加到数组列表中。我编写了自己的类并将它们手动添加到数组列表中,但我在想是否人们可以在那里创建自己的类并将它们加载到插件目录中而不是我手动执行。

代码示例: 扩展对象基础的东西:

package crow.ingame.hacks;

import java.awt.AWTException;
import java.awt.MouseInfo;
import java.awt.Robot;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.List;

import net.minecraft.src.Entity;
import net.minecraft.src.EntityLiving;
import net.minecraft.src.EntityPlayer;
import net.minecraft.src.MouseHelper;
import net.minecraft.src.Packet19EntityAction;

import org.lwjgl.input.Keyboard;

import crow.controller.BaseHack;
import crow.controller.BaseHackController;
import crow.main.Crow;

public class BunnyHop extends BaseHack{

    public float clickDelay = 0;
    public BunnyHop() 
    {
        super(true,false,false,"BunnyHop", "-hop", "Auto Hops for pvping", 0xFF75ffaf , Keyboard.KEY_J,Keyboard.KEY_J);
    }

    @Override
    public void onGameTick()
    {
        if(enabled)
        {
            if(Crow.mc.inGameHasFocus && Crow.mc.theWorld != null && !(BaseHackController.getBaseByCMD("-nofall").enabled))
            {
                Robot robot;
                try {
                    robot = new Robot();
                    robot.keyPress(KeyEvent.VK_SPACE);
                } catch (AWTException e)     {
                    e.printStackTrace();
                }
            }
        }
    }

    @Override
    public void onDisable()
    {
        Robot robot;
        try {
            robot = new Robot();
            robot.keyPress(KeyEvent.VK_SPACE);
            robot.keyRelease(KeyEvent.VK_SPACE);
        } catch (AWTException e)     {
            e.printStackTrace();
        }
    }

}

我如何添加黑客:

public static void AddHacks()
{
    //Hacks
    Fly fly = new Fly();
    Sprint sprint = new Sprint();
    Aimbot aimbot = new Aimbot();
    KillAura killaura = new KillAura();
    AutoBlock autoblock = new AutoBlock();
    NoFall nofall = new NoFall();
    Freecam freecam = new Freecam();
    Xray xray = new Xray();
    Step step = new Step();
    FullBright fullbright = new FullBright();
    BunnyHop hop = new BunnyHop();
    base.add(hop);
    base.add(fullbright);
    base.add(step);
    base.add(xray);
    base.add(freecam);
    base.add(nofall);       
    base.add(autoblock);
    base.add(aimbot);
    base.add(sprint);
    base.add(killaura);
    base.add(fly);
    //CMD
    Friends friends = new Friends();
    CMDController cmdcontroller = new CMDController();
    crow.ingame.cmd.Settings settings = new crow.ingame.cmd.Settings();
    base.add(settings);
    base.add(cmdcontroller);
    base.add(friends);
}

有人可以告诉我如何加载像我的 bunny hop 这样的类,然后将它添加到数组列表中吗? 谢谢!<3

最佳答案

如果我对您的问题的理解正确,您希望创建各种类的实例而不将类名硬编码到您的源代码中。 This can be done via reflection如下:

String className = "crow.ingame.hacks.BunnyHop";

try {
    Class myClass = Class.forName(className);
    BaseHack object = (BaseHack)myClass.getConstructor().newInstance();
    base.add(object);
} catch (Exception e) {
    e.printStackTrace();
    //TODO - Proper Exception handling
} 

只要包含您尝试加载的类的 .class 文件的文件夹在您的类路径中,这就会起作用;如果只有 .java 文件放在文件夹中,这将不起作用。换句话说,确保将 plunins 文件夹添加到类路径中。

关于java - 加载预先编写的对象而不是将它们全部写入[插件系统],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13043955/

相关文章:

java - Jboss 服务器错误 : Failed to start service jboss. deployment.unit ."jbpm-console.war"

java - 在绘图应用程序中分离模型和 View / Controller

c++ - 类成员值的合法或错误成员使用?

php - 新关键字与创建实例

java - 检查类型为 "Object"的参数对象的特定类型

java - 如何比较原始类类型?喜欢 Integer 和 Void?

java - 性能 OpenJPA 查询(3000 多条记录)很慢

java - 在 Java JTree 上显示数据库中的数据

java - 使用时间戳作为主键时避免违反主键约束

c# - 许多构造函数参数 - 有更好的方法吗?