3

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

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

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

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

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);
}

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

4

1 回答 1

0

如果我正确理解您的问题,您希望创建各种类的实例而不将类名硬编码到您的源代码中。 这可以通过反射来完成,如下所示:

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文件夹添加到 Classpath。

于 2012-10-24T07:23:04.240 回答