Java 加载预先写入的对象,而不是全部写入[Plugin system]
嗯,我(正在尝试)制作一个对象系统,我可以从一个文件夹中加载类或.java文件,可能称为“插件”,它们将添加到一个名为“base”的arraylist中,base将控制对象并循环它们,别担心,我有所有的例子 但我先解释一下它是如何工作的 这些插件将从一个基类(BaseHack)扩展,所有扩展BaseHack的对象都将添加到arraylist中。我编写自己的类并将它们添加到arraylist manuelly中,但我在想,人们是否可以创建自己的类并将它们加载到插件目录中,而不是手动执行 代码示例: 扩展对象库的内容:Java 加载预先写入的对象,而不是全部写入[Plugin system],java,oop,Java,Oop,嗯,我(正在尝试)制作一个对象系统,我可以从一个文件夹中加载类或.java文件,可能称为“插件”,它们将添加到一个名为“base”的arraylist中,base将控制对象并循环它们,别担心,我有所有的例子 但我先解释一下它是如何工作的 这些插件将从一个基类(BaseHack)扩展,所有扩展BaseHack的对象都将添加到arraylist中。我编写自己的类并将它们添加到arraylist manuelly中,但我在想,人们是否可以创建自己的类并将它们加载到插件目录中,而不是手动执行 代码示例:
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);
}
有人能告诉我如何加载像我的兔子跳这样的类,然后将其添加到arraylist中吗?
谢谢 如果我正确理解了您的问题,那么您希望创建各种类的实例,而无需将类名硬编码到源代码中。详情如下:
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,然后使用cmd编译它,但由于错误,它无法编译。我如何生成可以加载的类?简单的回答是,您必须使用javac
命令将.java
编译为.class
,因为JVM不理解任何其他内容。如果您发布关于编译错误的另一个问题可以解决。我猜你没有为编译正确设置类路径。设置类路径是什么意思?我只在minecraft java stuff之外创建了非常基本的java应用程序。这些都是为我设置的。类路径告诉javac
where to查找代码所依赖的类。java.util.List
等类是内置的,但您需要告诉java在哪里可以找到其他类,如net.minecraft.src.Entity
。通过java教程学习基础知识可能是值得的。