feat: option to simulate gravity

This commit is contained in:
CreeperMaxCZ committed 2022-07-31 17:53:41 +02:00
1 parent 32d760e9eb
commit 22c05d18db
3 files changed
+59

No files matched your search

+1
View File
@@ -35,6 +35,7 @@ When running, you can write a chat message to the terminal to send it by all bot
`-x` The most minimal run - No listeners, no control, no chat - useful for large amounts of bots for better performance
`-t` Set proxy type - SOCKS4 or SOCKS5
`-l` Set proxy list file
`-g` Try to simulate gravity by falling down
`-nicks` Set nicknames file
## ⚠ DISCLAIMER
@@ -2,7 +2,10 @@ package me.creepermaxcz.mcbots;
import com.github.steveice10.mc.protocol.MinecraftProtocol;
import com.github.steveice10.mc.protocol.packet.ingame.clientbound.ClientboundLoginPacket;
import com.github.steveice10.mc.protocol.packet.ingame.clientbound.entity.player.ClientboundPlayerPositionPacket;
import com.github.steveice10.mc.protocol.packet.ingame.serverbound.ServerboundChatPacket;
import com.github.steveice10.mc.protocol.packet.ingame.serverbound.level.ServerboundAcceptTeleportationPacket;
import com.github.steveice10.mc.protocol.packet.ingame.serverbound.player.*;
import com.github.steveice10.packetlib.ProxyInfo;
import com.github.steveice10.packetlib.Session;
import com.github.steveice10.packetlib.event.session.DisconnectedEvent;
@@ -22,6 +25,10 @@ public class Bot extends Thread {
private Session client;
private boolean hasMainListener;
private double lastX, lastY, lastZ = -1;
private boolean connected;
public Bot(String nickname, InetSocketAddress address, ProxyInfo proxy) {
this.nickname = nickname;
this.address = address;
@@ -41,15 +48,26 @@ public class Bot extends Thread {
@Override
public void packetReceived(Session session, Packet packet) {
if (packet instanceof ClientboundLoginPacket) {
connected = true;
Log.info(nickname + " connected");
if (Main.joinMessage != null) {
sendChat(Main.joinMessage);
}
}
else if (packet instanceof ClientboundPlayerPositionPacket) {
ClientboundPlayerPositionPacket p = (ClientboundPlayerPositionPacket) packet;
lastX = p.getX();
lastY = p.getY();
lastZ = p.getZ();
client.send(new ServerboundAcceptTeleportationPacket(p.getTeleportId()));
}
}
@Override
public void disconnected(DisconnectedEvent event) {
connected = false;
Log.info();
Log.info(nickname + " disconnected");
Log.info(" -> " + event.getReason());
@@ -83,4 +101,28 @@ public class Bot extends Thread {
public boolean hasMainListener() {
return hasMainListener;
}
public void fallDown()
{
if (connected && lastY > 0) {
move(0, -0.5, 0);
}
}
public void move(double x, double y, double z)
{
lastX += x;
lastY += y;
lastZ += z;
moveTo(lastX, lastY, lastZ);
}
public void moveTo(double x, double y, double z)
{
client.send(new ServerboundMovePlayerPosPacket(true, x, y, z));
}
public boolean isConnected() {
return connected;
}
}
@@ -13,6 +13,8 @@ import java.net.*;
import java.security.SecureRandom;
import java.util.ArrayList;
import java.util.Scanner;
import java.util.Timer;
import java.util.TimerTask;
public class Main {
@@ -35,6 +37,8 @@ public class Main {
private static int proxyCount = 0;
private static ProxyInfo.Type proxyType;
private static Timer timer = new Timer();
public static void main(String[] args) throws Exception {
Options options = new Options();
@@ -61,6 +65,8 @@ public class Main {
options.addOption("nicks", true, "Path to nicks file with nick on every line");
options.addOption("g", "gravity", false, "Try to simulate gravity by falling down");
CommandLineParser parser = new DefaultParser();
CommandLine cmd = null;
@@ -283,6 +289,16 @@ public class Main {
}
}).start();
//gravity timer
if (cmd.hasOption("g")) {
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
bots.forEach(Bot::fallDown);
}
}, 1000L, 500L);
}
Scanner scanner = new Scanner(System.in);