Beispiel #1
0
	protected void refreshTablist() {
		if (protocolversion >= 47) {
			bot.refreshtablist(Tablist, Tablist_nicks, playerTeams, TeamsByNames);
		} else {
			bot.refreshtablist(Tablist, playerTeams, TeamsByNames);
		}
	}
Beispiel #2
0
	/**
	 * 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;
		}
	}
Beispiel #3
0
	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;
		}
	}
Beispiel #4
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);
				}
			}
		}
	}
Beispiel #5
0
	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);
	}
Beispiel #6
0
	/**
	 * 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;
	}
Beispiel #7
0
	@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;
	}
Beispiel #8
0
	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());
		}
	}
Beispiel #9
0
	public connector(mcbot bot) throws UnknownHostException, IOException {
		this.bot = bot;
		this.protocolversion = bot.getprotocolversion();
	}
Beispiel #10
0
	private void nowConnected() {
		this.reconnect = bot.getautoreconnect();
		bot.showInfoTable();
	}
Beispiel #11
0
	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());
		}
	}
Beispiel #12
0
	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();
			}
		}
	}
Beispiel #13
0
	/**
	 * @return Returns bot tab name
	 */
	public String getTabName() {
		return bot.gettabname();
	}
Beispiel #14
0
	private void sendrawmsg(String message) {
		bot.logmsg(message);
	}