panic: runtime error: index out of range [64] with length 64
goroutine 19 [running]:
github.com/golangmc/minecraft-server/impl/conn/crypto.(*cfb8).XORKeyStream(0xc0001428c0, 0xc001ba0000, 0x1d19f, 0x1d19f, 0xc001b82000, 0x1d19f, 0x1e000)
/home/jack/Dev/minecraft-server/impl/conn/crypto/cfb8.go:66 +0x249
github.com/golangmc/minecraft-server/impl/conn.(*connection).Encrypt(...)
/home/jack/Dev/minecraft-server/impl/conn/connect.go:64
github.com/golangmc/minecraft-server/impl/conn.(*connection).SendPacket(0xc000296150, 0x7bf040, 0xc000396010)
/home/jack/Dev/minecraft-server/impl/conn/connect.go:172 +0x248
github.com/golangmc/minecraft-server/impl/game/mode.HandleState3.func5(0xc00010e1e0, 0xc000162400)
/home/jack/Dev/minecraft-server/impl/game/mode/mode_state3.go:154 +0xeb
created by github.com/golangmc/minecraft-server/impl/game/mode.HandleState3
/home/jack/Dev/minecraft-server/impl/game/mode/mode_state3.go:80 +0x20e
import com.github.steveice10.mc.auth.exception.request.RequestException;
import com.github.steveice10.mc.protocol.MinecraftConstants;
import com.github.steveice10.mc.protocol.MinecraftProtocol;
import com.github.steveice10.mc.protocol.data.SubProtocol;
import com.github.steveice10.mc.protocol.data.message.Message;
import com.github.steveice10.mc.protocol.data.message.TranslationMessage;
import com.github.steveice10.mc.protocol.data.status.ServerStatusInfo;
import com.github.steveice10.mc.protocol.data.status.handler.ServerInfoHandler;
import com.github.steveice10.mc.protocol.data.status.handler.ServerPingTimeHandler;
import com.github.steveice10.mc.protocol.packet.ingame.client.ClientChatPacket;
import com.github.steveice10.mc.protocol.packet.ingame.server.ServerChatPacket;
import com.github.steveice10.mc.protocol.packet.ingame.server.ServerJoinGamePacket;
import com.github.steveice10.mc.protocol.packet.ingame.server.world.ServerChunkDataPacket;
import com.github.steveice10.packetlib.Client;
import com.github.steveice10.packetlib.ProxyInfo;
import com.github.steveice10.packetlib.Session;
import com.github.steveice10.packetlib.event.session.DisconnectedEvent;
import com.github.steveice10.packetlib.event.session.PacketReceivedEvent;
import com.github.steveice10.packetlib.event.session.SessionAdapter;
import com.github.steveice10.packetlib.tcp.TcpSessionFactory;
import java.net.Proxy;
import java.util.Arrays;
public class TestClient {
private static final boolean SPAWN_SERVER = false;
private static final boolean VERIFY_USERS = true;
private static final String HOST = "127.0.0.1";
private static final int PORT = 25565;
private static final ProxyInfo PROXY = null;
private static final Proxy AUTH_PROXY = Proxy.NO_PROXY;
private static final String USERNAME = "********";
private static final String PASSWORD = "********";
public static void main(String[] args) {
status();
login();
}
private static void status() {
MinecraftProtocol protocol = new MinecraftProtocol(SubProtocol.STATUS);
Client client = new Client(HOST, PORT, protocol, new TcpSessionFactory(PROXY));
client.getSession().setFlag(MinecraftConstants.AUTH_PROXY_KEY, AUTH_PROXY);
client.getSession().setFlag(MinecraftConstants.SERVER_INFO_HANDLER_KEY, new ServerInfoHandler() {
@Override
public void handle(Session session, ServerStatusInfo info) {
System.out.println("Version: " + info.getVersionInfo().getVersionName() + ", " + info.getVersionInfo().getProtocolVersion());
System.out.println("Player Count: " + info.getPlayerInfo().getOnlinePlayers() + " / " + info.getPlayerInfo().getMaxPlayers());
System.out.println("Players: " + Arrays.toString(info.getPlayerInfo().getPlayers()));
System.out.println("Description: " + info.getDescription().getFullText());
System.out.println("Icon: " + info.getIconPng());
}
});
client.getSession().setFlag(MinecraftConstants.SERVER_PING_TIME_HANDLER_KEY, new ServerPingTimeHandler() {
@Override
public void handle(Session session, long pingTime) {
System.out.println("Server ping took " + pingTime + "ms");
}
});
client.getSession().connect();
while(client.getSession().isConnected()) {
try {
Thread.sleep(5);
} catch(InterruptedException e) {
e.printStackTrace();
}
}
}
private static void login() {
MinecraftProtocol protocol = null;
if(VERIFY_USERS) {
try {
protocol = new MinecraftProtocol(USERNAME, PASSWORD);
System.out.println("Successfully authenticated user.");
} catch(RequestException e) {
e.printStackTrace();
return;
}
} else {
protocol = new MinecraftProtocol(USERNAME);
}
Client client = new Client(HOST, PORT, protocol, new TcpSessionFactory(PROXY));
client.getSession().setFlag(MinecraftConstants.AUTH_PROXY_KEY, AUTH_PROXY);
client.getSession().addListener(new SessionAdapter() {
@Override
public void packetReceived(PacketReceivedEvent event) {
if(event.getPacket() instanceof ServerJoinGamePacket) {
event.getSession().send(new ClientChatPacket("Hello, this is a test of MCProtocolLib."));
} else if(event.getPacket() instanceof ServerChatPacket) {
Message message = event.<ServerChatPacket>getPacket().getMessage();
System.out.println("Received Message: " + message.getFullText());
if(message instanceof TranslationMessage) {
System.out.println("Received Translation Components: " + Arrays.toString(((TranslationMessage) message).getTranslationParams()));
}
// event.getSession().disconnect("Finished");
}
else if (event.getPacket() instanceof ServerChunkDataPacket) {
// This increases probability of crashing
ServerChunkDataPacket data = event.getPacket();
System.out.println("Received message: " + data);
}
}
@Override
public void disconnected(DisconnectedEvent event) {
System.out.println("Disconnected: " + Message.fromString(event.getReason()).getFullText());
if(event.getCause() != null) {
event.getCause().printStackTrace();
}
}
});
client.getSession().connect();
}
}