完整项目
带属性的模块
@Module(name="Auto Jump", category="MOVE")
void meta(vm) {
vm.registerBoolean("sprint", "Require Sprint", true);
}
@EventTarget(events="tick")
void onTick(event) {
if (me.getBool("sprint") && !me.getPlayer().isSprinting()) return;
if (me.getPlayer().isOnGround()) {
me.getPlayer().jump();
}
}
命令
@Command(name="tpa", aliases="tpaccept,tpyes")
void exec(args) {
me.command("/tpaccept");
}
2D ESP
@Module(name="Player Box", category="VISUAL", defaultEnabled=true)
void meta(vm) { vm.registerColor("color", "Color", 0xFF00FF00); }
@EventTarget(events="render_2d")
void onRender(event) {
for (p : me.getWorld().getPlayerEntities()) {
if (p.getId() == me.getPlayer().getId()) continue;
rect = render.worldBoxToScreenEntity(p);
if (rect == null) continue;
render.outline(rect[0], rect[1], rect[2]-rect[0], rect[3]-rect[1], 1.0, moduleManager.self().getProperty("color").getRGB());
}
}
3D 盒子 + 文字
@EventTarget(events="render_3d")
void onRender3D(event) {
if (!render3d.isPost()) return;
for (item : me.getWorld().getItemEntities()) {
render3d.boxEntityOutline(item, 0xFF00FF00);
}
render3d.clearDepth();
for (item : me.getWorld().getItemEntities()) {
p = render3d.interpolatedPos(item);
render3d.text("Item", p.x, p.y + 0.8, p.z, 1.5, true);
}
}
发包
packet.send(packet.createServerboundSwingPacket("MAIN_HAND"));
packet.sendNoEvent(packet.createServerboundContainerClosePacket(0));
跨脚本调用
// _math_libs.bsh (下划线开头,优先加载)
@OnLoad void reg() { bridge.addPublicMethod("math", "distance"); }
double distance(double x1, double y1, double x2, double y2) {
return Math.sqrt((x2-x1)*(x2-x1) + (y2-y1)*(y2-y1));
}
// user.bsh
d = bridge.invokePublicMethod("math", "distance", 0.0, 0.0, 3.0, 4.0);
HTTP + Gson
@Command(name="ip")
void exec(args) { me.async("fetchIp"); }
void fetchIp() {
r = HttpClient.get("https://api.ipify.org?format=json");
me.log(r);
if (!r.isOk()) return;
obj = JsonParser.parseString(r.body).getAsJsonObject();
me.subChat("ip: " + obj.get("ip").getAsString());
}