forked from ChomeNS/chomens-bot-java
ACTUALLY MAKE IT WORK
yeah its finished this will probably be the last idea i skid (m a b e)
This commit is contained in:
parent
eb73b886ca
commit
cd5d3d9132
6 changed files with 85 additions and 52 deletions
|
@ -12,17 +12,12 @@ import land.chipmunk.chayapak.chomens_bot.data.voiceChat.RawUdpPacket;
|
||||||
import land.chipmunk.chayapak.chomens_bot.util.FriendlyByteBuf;
|
import land.chipmunk.chayapak.chomens_bot.util.FriendlyByteBuf;
|
||||||
import land.chipmunk.chayapak.chomens_bot.voiceChat.InitializationData;
|
import land.chipmunk.chayapak.chomens_bot.voiceChat.InitializationData;
|
||||||
import land.chipmunk.chayapak.chomens_bot.voiceChat.NetworkMessage;
|
import land.chipmunk.chayapak.chomens_bot.voiceChat.NetworkMessage;
|
||||||
import land.chipmunk.chayapak.chomens_bot.voiceChat.packets.KeepAlivePacket;
|
import land.chipmunk.chayapak.chomens_bot.voiceChat.packets.*;
|
||||||
import land.chipmunk.chayapak.chomens_bot.voiceChat.packets.PingPacket;
|
|
||||||
import land.chipmunk.chayapak.chomens_bot.voiceChat.packets.SecretPacket;
|
|
||||||
import land.chipmunk.chayapak.chomens_bot.voiceChat.packets.AuthenticatePacket;
|
|
||||||
|
|
||||||
import java.net.*;
|
import java.net.*;
|
||||||
|
|
||||||
// exists for some reason, still wip and will be finished in the next 69 years
|
// most of these codes are from the simple voice chat mod itself including the other voicechat classes
|
||||||
// and i prob implemented it in a wrong way lol
|
// i didn't implement mic yet because my goal is to make `/voicechat test` work with the bot
|
||||||
// at least when you do `/voicechat test (bot username)` it will show `Client not connected`
|
|
||||||
// instead of `(bot username) does not have Simple Voice Chat installed`
|
|
||||||
public class VoiceChatPlugin extends Bot.Listener {
|
public class VoiceChatPlugin extends Bot.Listener {
|
||||||
private final Bot bot;
|
private final Bot bot;
|
||||||
|
|
||||||
|
@ -31,6 +26,8 @@ public class VoiceChatPlugin extends Bot.Listener {
|
||||||
private InetAddress address;
|
private InetAddress address;
|
||||||
private InetSocketAddress socketAddress;
|
private InetSocketAddress socketAddress;
|
||||||
|
|
||||||
|
private boolean running = false;
|
||||||
|
|
||||||
public VoiceChatPlugin(Bot bot) {
|
public VoiceChatPlugin(Bot bot) {
|
||||||
this.bot = bot;
|
this.bot = bot;
|
||||||
|
|
||||||
|
@ -59,16 +56,12 @@ public class VoiceChatPlugin extends Bot.Listener {
|
||||||
"voicechat:update_state",
|
"voicechat:update_state",
|
||||||
new FriendlyByteBuf(Unpooled.buffer()).writeBoolean(false).array()
|
new FriendlyByteBuf(Unpooled.buffer()).writeBoolean(false).array()
|
||||||
));
|
));
|
||||||
|
|
||||||
|
running = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void packetReceived(ClientboundCustomPayloadPacket _packet) {
|
public void packetReceived(ClientboundCustomPayloadPacket _packet) {
|
||||||
// sus
|
if (_packet.getChannel().equals("voicechat:secret")) { // fard
|
||||||
/*
|
|
||||||
System.out.println("\"" + _packet.getChannel() + "\"");
|
|
||||||
System.out.println(Arrays.toString(_packet.getData()));
|
|
||||||
System.out.println(new String(_packet.getData()));
|
|
||||||
*/
|
|
||||||
if (_packet.getChannel().equals("voicechat:secret")) {
|
|
||||||
final byte[] bytes = _packet.getData();
|
final byte[] bytes = _packet.getData();
|
||||||
final FriendlyByteBuf buf = new FriendlyByteBuf(Unpooled.wrappedBuffer(bytes));
|
final FriendlyByteBuf buf = new FriendlyByteBuf(Unpooled.wrappedBuffer(bytes));
|
||||||
|
|
||||||
|
@ -91,41 +84,38 @@ public class VoiceChatPlugin extends Bot.Listener {
|
||||||
}
|
}
|
||||||
|
|
||||||
bot.executorService().execute(() -> {
|
bot.executorService().execute(() -> {
|
||||||
while (true) {
|
sendToServer(new NetworkMessage(new AuthenticatePacket(initializationData.playerUUID(), initializationData.secret())));
|
||||||
try {
|
|
||||||
if (socket.isClosed()) continue;
|
|
||||||
|
|
||||||
|
while (running) {
|
||||||
|
try {
|
||||||
final NetworkMessage message = NetworkMessage.readPacket(socket.read(), initializationData);
|
final NetworkMessage message = NetworkMessage.readPacket(socket.read(), initializationData);
|
||||||
|
|
||||||
if (message == null) continue;
|
if (message == null) continue;
|
||||||
|
|
||||||
if (message.packet() instanceof AuthenticatePacket) {
|
if (message.packet() instanceof PingPacket pingPacket) sendToServer(new NetworkMessage(pingPacket));
|
||||||
System.out.println("SERVER AUTHENTICATED FINALLYYYYYYYYYYYYYYYY");
|
else if (message.packet() instanceof KeepAlivePacket) sendToServer(new NetworkMessage(new KeepAlivePacket()));
|
||||||
} else if (message.packet() instanceof PingPacket pingPacket) {
|
else if (message.packet() instanceof AuthenticateAckPacket) sendToServer(new NetworkMessage(new ConnectionCheckPacket()));
|
||||||
System.out.println("got ping packet");
|
|
||||||
sendToServer(new NetworkMessage(pingPacket));
|
|
||||||
} else if (message.packet() instanceof KeepAlivePacket) {
|
|
||||||
System.out.println("got keep alive packet");
|
|
||||||
sendToServer(new NetworkMessage(new KeepAlivePacket()));
|
|
||||||
} else {
|
|
||||||
System.out.println("got " + message.packet().getClass().getName());
|
|
||||||
}
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
if (running) e.printStackTrace();
|
||||||
|
else break; // is this neccessary?
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void sendToServer (NetworkMessage message) throws Exception {
|
public void sendToServer (NetworkMessage message) {
|
||||||
socket.send(
|
try {
|
||||||
message.writeClient(initializationData),
|
socket.send(
|
||||||
socketAddress
|
message.writeClient(initializationData),
|
||||||
);
|
socketAddress
|
||||||
|
);
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static class VoiceChatSocketBase {
|
private class VoiceChatSocketBase {
|
||||||
private final byte[] BUFFER = new byte[4096];
|
private final byte[] BUFFER = new byte[4096];
|
||||||
|
|
||||||
public RawUdpPacket read (DatagramSocket socket) {
|
public RawUdpPacket read (DatagramSocket socket) {
|
||||||
|
@ -133,13 +123,8 @@ public class VoiceChatPlugin extends Bot.Listener {
|
||||||
try {
|
try {
|
||||||
DatagramPacket packet = new DatagramPacket(BUFFER, BUFFER.length);
|
DatagramPacket packet = new DatagramPacket(BUFFER, BUFFER.length);
|
||||||
|
|
||||||
System.out.println("receiving packet");
|
|
||||||
|
|
||||||
// the problem is this next line, just this 1 line. it makes the entire thing froze
|
|
||||||
socket.receive(packet);
|
socket.receive(packet);
|
||||||
|
|
||||||
System.out.println("FINALLY DONE RECEIVING AAAAHHHHHHHHHHHHHHHHHHH");
|
|
||||||
|
|
||||||
// Setting the timestamp after receiving the packet
|
// Setting the timestamp after receiving the packet
|
||||||
long timestamp = System.currentTimeMillis();
|
long timestamp = System.currentTimeMillis();
|
||||||
byte[] data = new byte[packet.getLength()];
|
byte[] data = new byte[packet.getLength()];
|
||||||
|
@ -157,9 +142,11 @@ public class VoiceChatPlugin extends Bot.Listener {
|
||||||
@Override
|
@Override
|
||||||
public void disconnected(DisconnectedEvent event) {
|
public void disconnected(DisconnectedEvent event) {
|
||||||
socket.close();
|
socket.close();
|
||||||
|
|
||||||
|
running = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static class ClientVoiceChatSocket extends VoiceChatSocketBase {
|
private class ClientVoiceChatSocket extends VoiceChatSocketBase {
|
||||||
private DatagramSocket socket;
|
private DatagramSocket socket;
|
||||||
|
|
||||||
public void open() throws SocketException {
|
public void open() throws SocketException {
|
||||||
|
|
|
@ -4,7 +4,7 @@ import io.netty.buffer.Unpooled;
|
||||||
import land.chipmunk.chayapak.chomens_bot.data.voiceChat.RawUdpPacket;
|
import land.chipmunk.chayapak.chomens_bot.data.voiceChat.RawUdpPacket;
|
||||||
import land.chipmunk.chayapak.chomens_bot.util.AES;
|
import land.chipmunk.chayapak.chomens_bot.util.AES;
|
||||||
import land.chipmunk.chayapak.chomens_bot.util.FriendlyByteBuf;
|
import land.chipmunk.chayapak.chomens_bot.util.FriendlyByteBuf;
|
||||||
import land.chipmunk.chayapak.chomens_bot.voiceChat.packets.AuthenticatePacket;
|
import land.chipmunk.chayapak.chomens_bot.voiceChat.packets.*;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
|
||||||
import javax.crypto.BadPaddingException;
|
import javax.crypto.BadPaddingException;
|
||||||
|
@ -49,11 +49,11 @@ public class NetworkMessage {
|
||||||
// packetRegistry.put((byte) 0x3, GroupSoundPacket.class);
|
// packetRegistry.put((byte) 0x3, GroupSoundPacket.class);
|
||||||
// packetRegistry.put((byte) 0x4, LocationSoundPacket.class);
|
// packetRegistry.put((byte) 0x4, LocationSoundPacket.class);
|
||||||
packetRegistry.put((byte) 0x5, AuthenticatePacket.class);
|
packetRegistry.put((byte) 0x5, AuthenticatePacket.class);
|
||||||
// packetRegistry.put((byte) 0x6, AuthenticateAckPacket.class);
|
packetRegistry.put((byte) 0x6, AuthenticateAckPacket.class);
|
||||||
// packetRegistry.put((byte) 0x7, PingPacket.class);
|
packetRegistry.put((byte) 0x7, PingPacket.class);
|
||||||
// packetRegistry.put((byte) 0x8, KeepAlivePacket.class);
|
packetRegistry.put((byte) 0x8, KeepAlivePacket.class);
|
||||||
// packetRegistry.put((byte) 0x9, ConnectionCheckPacket.class);
|
packetRegistry.put((byte) 0x9, ConnectionCheckPacket.class);
|
||||||
// packetRegistry.put((byte) 0xA, ConnectionCheckAckPacket.class);
|
packetRegistry.put((byte) 0xA, ConnectionAckPacket.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static NetworkMessage readPacket (RawUdpPacket packet, InitializationData initializationData) throws IllegalAccessException, InstantiationException, InvocationTargetException, NoSuchMethodException {
|
public static NetworkMessage readPacket (RawUdpPacket packet, InitializationData initializationData) throws IllegalAccessException, InstantiationException, InvocationTargetException, NoSuchMethodException {
|
||||||
|
@ -79,10 +79,7 @@ public class NetworkMessage {
|
||||||
FriendlyByteBuf buffer = new FriendlyByteBuf(Unpooled.wrappedBuffer(decrypt));
|
FriendlyByteBuf buffer = new FriendlyByteBuf(Unpooled.wrappedBuffer(decrypt));
|
||||||
byte packetType = buffer.readByte();
|
byte packetType = buffer.readByte();
|
||||||
final Class<? extends Packet<?>> packetClass = packetRegistry.get(packetType);
|
final Class<? extends Packet<?>> packetClass = packetRegistry.get(packetType);
|
||||||
if (packetClass == null) {
|
if (packetClass == null) return null;
|
||||||
System.out.println("packet type is null " + packetType);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
Packet<?> p = packetClass.getDeclaredConstructor().newInstance();
|
Packet<?> p = packetClass.getDeclaredConstructor().newInstance();
|
||||||
|
|
||||||
NetworkMessage message = new NetworkMessage(timestamp);
|
NetworkMessage message = new NetworkMessage(timestamp);
|
||||||
|
|
|
@ -0,0 +1,15 @@
|
||||||
|
package land.chipmunk.chayapak.chomens_bot.voiceChat.packets;
|
||||||
|
|
||||||
|
import land.chipmunk.chayapak.chomens_bot.util.FriendlyByteBuf;
|
||||||
|
import land.chipmunk.chayapak.chomens_bot.voiceChat.Packet;
|
||||||
|
|
||||||
|
public class AuthenticateAckPacket implements Packet<AuthenticateAckPacket> {
|
||||||
|
@Override
|
||||||
|
public AuthenticateAckPacket fromBytes(FriendlyByteBuf buf) {
|
||||||
|
return new AuthenticateAckPacket();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void toBytes(FriendlyByteBuf buf) {
|
||||||
|
}
|
||||||
|
}
|
|
@ -2,14 +2,18 @@ package land.chipmunk.chayapak.chomens_bot.voiceChat.packets;
|
||||||
|
|
||||||
import land.chipmunk.chayapak.chomens_bot.util.FriendlyByteBuf;
|
import land.chipmunk.chayapak.chomens_bot.util.FriendlyByteBuf;
|
||||||
import land.chipmunk.chayapak.chomens_bot.voiceChat.Packet;
|
import land.chipmunk.chayapak.chomens_bot.voiceChat.Packet;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
|
@AllArgsConstructor
|
||||||
public class AuthenticatePacket implements Packet<AuthenticatePacket> {
|
public class AuthenticatePacket implements Packet<AuthenticatePacket> {
|
||||||
@Getter private UUID playerUUID;
|
@Getter private UUID playerUUID;
|
||||||
@Getter private UUID secret;
|
@Getter private UUID secret;
|
||||||
|
|
||||||
|
public AuthenticatePacket () {}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public AuthenticatePacket fromBytes (FriendlyByteBuf buf) {
|
public AuthenticatePacket fromBytes (FriendlyByteBuf buf) {
|
||||||
AuthenticatePacket packet = new AuthenticatePacket();
|
AuthenticatePacket packet = new AuthenticatePacket();
|
||||||
|
|
|
@ -0,0 +1,15 @@
|
||||||
|
package land.chipmunk.chayapak.chomens_bot.voiceChat.packets;
|
||||||
|
|
||||||
|
import land.chipmunk.chayapak.chomens_bot.util.FriendlyByteBuf;
|
||||||
|
import land.chipmunk.chayapak.chomens_bot.voiceChat.Packet;
|
||||||
|
|
||||||
|
public class ConnectionAckPacket implements Packet<ConnectionAckPacket> {
|
||||||
|
@Override
|
||||||
|
public ConnectionAckPacket fromBytes(FriendlyByteBuf buf) {
|
||||||
|
return new ConnectionAckPacket();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void toBytes(FriendlyByteBuf buf) {
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,15 @@
|
||||||
|
package land.chipmunk.chayapak.chomens_bot.voiceChat.packets;
|
||||||
|
|
||||||
|
import land.chipmunk.chayapak.chomens_bot.util.FriendlyByteBuf;
|
||||||
|
import land.chipmunk.chayapak.chomens_bot.voiceChat.Packet;
|
||||||
|
|
||||||
|
public class ConnectionCheckPacket implements Packet<ConnectionCheckPacket> {
|
||||||
|
@Override
|
||||||
|
public ConnectionCheckPacket fromBytes(FriendlyByteBuf buf) {
|
||||||
|
return new ConnectionCheckPacket();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void toBytes(FriendlyByteBuf buf) {
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue