protected void refreshTablist() { if (protocolversion >= 47) { bot.refreshtablist(Tablist, Tablist_nicks, playerTeams, TeamsByNames); } else { bot.refreshtablist(Tablist, playerTeams, TeamsByNames); } }
/** * Stop the connector (Disconnect) */ @SuppressWarnings("deprecation") public void stopMe() { communicationavailable = false; // Send logout commands if (bot.sendlogoutcommands()) { String[] cmds = bot.getlogoutcommands(); for (String cmd : cmds) { sendToServer(cmd, true); } } // Stop afkter process if (this.afkter != null) { this.afkter.stop(); this.afkter = null; } // Reset tablist bot.resetPlayerList(); // Reset info table bot.resetInfoTable(); bot.hideInfoTable(); // Deal with socket if (sock != null) { try { sock.close(); } catch (IOException e) { } sock = null; } }
private long delaymessage(boolean automessage) { long current = System.currentTimeMillis() / 1000; if (bot.messagesDelayed()) { int delay = bot.getMessageDelay(); int towait = (int) (current - lastmessagetime); if (towait <= 0) { towait = -(towait) + delay; lastmessagetime = towait + current; if (!automessage) { lastmessagetimewithoutautomessage = lastmessagetime; } return (towait + current); } else if (towait <= delay && towait >= 0) { lastmessagetime = towait + current; if (!automessage) { lastmessagetimewithoutautomessage = lastmessagetime; } return (towait + current); } else { lastmessagetime = current; if (!automessage) { lastmessagetimewithoutautomessage = lastmessagetime; } return 0; } } else { lastmessagetime = current; if (!automessage) { lastmessagetimewithoutautomessage = lastmessagetime; } return 0; } }
private void tryandsendlogin() { // First invocation gets it if (!this.haslogged) { this.haslogged = true; if (bot.sendlogincommands()) { this.sendMessage("Sending login commands"); String[] cmds = bot.getlogincommands(); for (String cmd : cmds) { this.sendToServer(cmd, true); } } } }
protected void settablesize(int x, int y) { // int[] dim = new int[2]; // dim[0] = x; // dim[1] = y; // bot.tablistsize = dim; bot.setTabSize(y, x); }
/** * Sends message to server * * @param Message * @param isAutomatic * @return Returns True if successful, False if otherwise */ public boolean sendToServer(String Message, boolean isAutomatic) { if (Message.length() > 0) { if (Message.toLowerCase().equals("/revive")) { try { new ClientStatusPacket(reader).Write(CLIENT_STATUS.PERFORM_RESPAWN); sendmsg("�espawn requested"); return true; } catch (IOException e) { return false; } } else { if (this.sock != null) { ChatEvent e = new ChatEvent(bot, Message, true); storage.pluginManager.invokeEvent(e, bot.getAllowedPlugins()); if (e.isCancelled()) { return true; } if (Message.length() >= 100) { String[] msgs = splitter(Message, 100); for (String m : msgs) { sendToServerRaw(m, isAutomatic); } return true; } else { sendToServerRaw(Message, isAutomatic); return true; } } } } return false; }
@Override public synchronized void run() { storage.changemenuitems(); do { bot.seticon(ICONSTATE.CONNECTING); bot.refreshOnlineMode(); if (!this.bot.verifyonlinesettings()) { sendmsg("�atal error: Bot needs Mojang Authentication!"); break; } mainloop(); bot.hideInfoTable(); sendmsg("�onnection has been closed"); stopMe(); if (reconnect) { bot.seticon(ICONSTATE.CONNECTING); try { wait(bot.getautoreconnectdelay() * 1000); } catch (InterruptedException e) { } } } while (reconnect); bot.seticon(ICONSTATE.DISCONNECTED); storage.changemenuitems(); bot.connector = null; }
private void processpreloginpacket(int pid, int len, ByteBuffer buf) throws Exception { Event e = null; switch (pid) { case ConnectionResetPacket.ID2: { ConnectionResetEvent dcevent = new ConnectionResetPacket(buf, reader).Read(); sendmsg("�erver closed connection. Reason:\n" + dcevent.getReason()); communicationavailable = false; } break; case SetCompressionPacket.ID: SetCompressionPacket compack = new SetCompressionPacket(buf, reader); compack.Read(); sendmsg("�ompression activated"); reader.compression = true; break; case LoginSuccessPacket.ID: LoginSuccessEvent logse = new LoginSuccessPacket(buf, reader).Read(); String uuid = logse.getUUID(); String username = logse.getUsername(); sendmsg("�eceived UUID: " + uuid); sendmsg("�eceived Nick: " + username); nowConnected(); e = logse; encryptiondecided = true; break; case EncryptionRequestPacket.ID: // Maybe the server wants some encryption EncryptionRequestPacket encr = new EncryptionRequestPacket(buf, reader); try { encr.Read(); encr.Write(bot); setEncryption(encr.getSecret(), reader); } catch (BufferUnderflowException e1) { } break; } if (e != null) { storage.pluginManager.invokeEvent(e, bot.getAllowedPlugins()); } }
public connector(mcbot bot) throws UnknownHostException, IOException { this.bot = bot; this.protocolversion = bot.getprotocolversion(); }
private void nowConnected() { this.reconnect = bot.getautoreconnect(); bot.showInfoTable(); }
private void processpacket(int pid, int len, ByteBuffer buf, packetStruct packet) throws Exception { Event e = null; switch (pid) { // default: // sendmsg("�Unhandled packet " + pid); // new Ignored_Packet(len, reader).Read(); // break; /* * case EntityStatusPacket.ID: e = new EntityStatusPacket(reader, * buf).Read(); break; */ case SignUpdatePacket.ID: e = new SignUpdatePacket(buf, reader).Read(); break; case TimeUpdatePacket.ID: new TimeUpdatePacket(buf, reader).Read(); break; case UpdateHealthPacket.ID: UpdateHealthEvent upheal = new UpdateHealthPacket(reader, buf).Read(); this.Health = upheal.getHealth(); this.Food = upheal.getFood(); this.Satur = upheal.getSaturation(); bot.updateHealth(this.Health, this.Food, this.Satur); break; case PlayerPositionAndLookPacket.ID: PlayerPositionAndLookEvent ppal = new PlayerPositionAndLookPacket(reader, buf).Read(); this.pos_x = (int) ppal.getX(); this.pos_y = (int) ppal.getY(); this.pos_z = (int) ppal.getZ(); bot.updateposition(this.pos_x, this.pos_y, this.pos_z); break; case TabCompletePacket.ID: TabCompletePacket tabpack = new TabCompletePacket(reader, buf); TabCompleteEvent tabev = tabpack.Read(); tabcomp.setNames(tabev.getNames()); tabcomp.getNext(); e = tabev; break; case KeepAlivePacket.ID: // Keep us alive KeepAlivePacket keepalivepack = new KeepAlivePacket(reader, buf); keepalivepack.Read(); keepalivepack.Write(); break; case JoinGamePacket.ID: // join game JoinGameEvent joingameevent = new JoinGamePacket(buf, reader).Read(); if (joingameevent.getMaxPlayers() > 25 && joingameevent.getMaxPlayers() < 50) { // 2 Columns 20 rows settablesize(2, 20); } else if (joingameevent.getMaxPlayers() >= 50 && joingameevent.getMaxPlayers() < 70) { // 3 Columns 20 rows settablesize(3, 20); } else if (joingameevent.getMaxPlayers() >= 70) { // 4 Columns 20 rows settablesize(4, 20); } else { // 1 Columns 20 rows settablesize(1, 20); } e = joingameevent; break; case ChatPacket.ID: // Chat ChatEvent event = new ChatPacket(buf, reader).Read(); if (!event.isIgnored()) { String msg = event.getFormatedMessage(); sendChatMsg(msg); tryandsendlogin(); } e = event; break; case SpawnPositionPacket.ID: new SpawnPositionPacket(buf, reader).Read(); break; case RespawnPacket.ID: new RespawnPacket(buf, reader).Read(); break; case PlayerListItemPacket.ID: PlayerListItemPacket playerlistitem = new PlayerListItemPacket(buf, reader); PlayerListEvent plevent = playerlistitem.Read(Tablist, Tablist_nicks); if (servePlayerList(plevent, Tablist, Tablist_nicks)) { this.refreshTablist(); } e = plevent; break; case DisplayScoreBoardPacket.ID: // Scoreboard display new DisplayScoreBoardPacket(buf, reader).Read(); break; case SetCompressionPacket.ID2: new SetCompressionPacket(buf, reader).Read(); sendmsg("Compression activated"); // compack.Write(); reader.compression = true; break; case TeamPacket.ID: // Teams this.handleteam(new TeamPacket(buf, reader).Read()); break; case PluginMessagePacket.ID: // Plugin message // PluginMessageEvent plmsge = new PluginMessagePacket(buf, // reader).Read(); // e = plmsge; // sendmsg("Channel: " + plmsge.getChannel() + " Message: " + // plmsge.getMessageAsString()); break; case ConnectionResetPacket.ID: ConnectionResetEvent dcevent = new ConnectionResetPacket(buf, reader).Read(); sendmsg("�erver closed connection. (" + dcevent.getReason() + ")"); break; } if (e != null) { storage.pluginManager.invokeEvent(e, bot.getAllowedPlugins()); } }
private void mainloop() { // Main loop try { sendmsg("�onnecting"); if (protocolversion == 4 || protocolversion == 5) { this.maxpacketid = 0x40; } else if (protocolversion == 47) { this.maxpacketid = 0x49; } BotInitEvent botinitevent = new BotInitEvent(bot); storage.pluginManager.invokeEvent(botinitevent, bot.getAllowedPlugins()); Tablist = new ArrayList<String>(); Tablist_nicks = new HashMap<String, String>(); playerTeams = new HashMap<String, String>(); TeamsByNames = new HashMap<String, team_struct>(); haslogged = false; encryptiondecided = false; sock = null; bot.seticon(ICONSTATE.CONNECTING); if (bot.useProxy()) { Proxy proxy = bot.getProxyAddress(); if (proxy != null) { sock = new Socket(proxy); sock.connect(bot.getServerAddress()); } else { bot.logmsg("�nvalid proxy"); this.reconnect = false; return; } } else { sock = new Socket(bot.serverip, bot.serverport); } cin = sock.getInputStream(); cout = sock.getOutputStream(); reader = new packet(bot, cin, cout); reader.ProtocolVersion = protocolversion; // definepackets(reader); storage.changemenuitems(); // First, we must send HandShake and hope for good response new HandShakePacket(reader).Write(bot.serverip, bot.serverport); new LoginStartPacket(reader).Write(bot.username); connecttime = System.currentTimeMillis() / 1000; // Init routine communicationavailable = true; int pid; int len = 0; boolean connectedicon = true; // Connection established, time to create AntiAFK this.afkter = new AntiAFK(this); this.afkter.start(); // The loop while (communicationavailable) { packetStruct packet = reader.readNexter(); if (packet == null) { continue; } len = packet.packetLength; pid = packet.packetID; int datalen = packet.dataLength; // TODO: Debug part // System.out.println("PID: " + Integer.toHexString(pid) + // " LEN: " + len); if (pid > maxpacketid) { sendmsg("Received packet id " + pid + " (Length: " + len + ",Compression: " + reader.compression + ", Encryption: " + reader.isEncrypted() + ")"); sendmsg("�alformed communication"); break; } if (connectedicon) { bot.seticon(ICONSTATE.CONNECTED); } PacketReceiveEvent packevent = new PacketReceiveEvent(bot, packet, !encryptiondecided); storage.pluginManager.invokeEvent(packevent, bot.getAllowedPlugins()); if (packevent.isCancelled()) { continue; } if (datalen > 0) { ByteBuffer buf = packet.generateBuffer(); if (encryptiondecided) { processpacket(pid, datalen, buf, packet); } else { processpreloginpacket(pid, datalen, buf); } } } } catch (UnknownHostException e) { sendmsg("�o such host is known."); } catch (SerialException e) { } catch (IllegalArgumentException e) { if (!storage.reportthis(e)) { sendmsg("�ata stream error happened. Error log written into main tab. Please report this."); e.printStackTrace(); } } catch (NullPointerException e) { if (!storage.reportthis(e)) { sendmsg("�trange error happened. Please report this."); e.printStackTrace(); } } catch (SocketException e) { } catch (IOException e) { if (!storage.reportthis(e)) { e.printStackTrace(); } } catch (RuntimeException e) { if (!storage.reportthis(e)) { sendmsg("�rror happened. Error log written into main tab. Please report this."); e.printStackTrace(); } } catch (Exception e) { if (!storage.reportthis(e)) { sendmsg("�rror happened. Error log written into main tab. Please report this."); e.printStackTrace(); } } }
/** * @return Returns bot tab name */ public String getTabName() { return bot.gettabname(); }
private void sendrawmsg(String message) { bot.logmsg(message); }