aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/de/hype/bbsentials/communication/BBsentialConnection.java
diff options
context:
space:
mode:
authorHacktheTime <l4bg0jb7@duck.com>2023-09-03 11:09:38 +0200
committerHacktheTime <l4bg0jb7@duck.com>2023-09-03 11:09:38 +0200
commitcdd951d912e172ea42fc9707a786db6e69ba2901 (patch)
tree006302c766d9e09e141a9ee03e73c0626750191b /src/main/java/de/hype/bbsentials/communication/BBsentialConnection.java
parent7d9f695e2603c2349ce0693bb0e1e6dbbd274fbc (diff)
downloadBBsentials-cdd951d912e172ea42fc9707a786db6e69ba2901.tar.gz
BBsentials-cdd951d912e172ea42fc9707a786db6e69ba2901.tar.bz2
BBsentials-cdd951d912e172ea42fc9707a786db6e69ba2901.zip
added packet communication to work now at least as base. not all features changed and therefore supported yet. first version working at least partially with the new server.
fixed trapper yes via chat prompt action not working. changed the get getter of the string from messageOriginal in Chat.java to now use just messageOriginal.getString(). previosly removed everything in [] brackets.
Diffstat (limited to 'src/main/java/de/hype/bbsentials/communication/BBsentialConnection.java')
-rw-r--r--src/main/java/de/hype/bbsentials/communication/BBsentialConnection.java283
1 files changed, 172 insertions, 111 deletions
diff --git a/src/main/java/de/hype/bbsentials/communication/BBsentialConnection.java b/src/main/java/de/hype/bbsentials/communication/BBsentialConnection.java
index 2c6c7d2..ddf8749 100644
--- a/src/main/java/de/hype/bbsentials/communication/BBsentialConnection.java
+++ b/src/main/java/de/hype/bbsentials/communication/BBsentialConnection.java
@@ -2,11 +2,21 @@ package de.hype.bbsentials.communication;
import de.hype.bbsentials.chat.Chat;
import de.hype.bbsentials.client.BBsentials;
+import de.hype.bbsentials.constants.enviromentShared.AuthenticationConstants;
+import de.hype.bbsentials.constants.enviromentShared.ChChestItem;
+import de.hype.bbsentials.constants.enviromentShared.Islands;
+import de.hype.bbsentials.packets.AbstractPacket;
+import de.hype.bbsentials.packets.PacketManager;
+import de.hype.bbsentials.packets.PacketUtils;
+import de.hype.bbsentials.packets.packets.*;
import net.minecraft.client.MinecraftClient;
import net.minecraft.entity.effect.StatusEffectInstance;
import net.minecraft.entity.effect.StatusEffects;
-import javax.net.ssl.*;
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.SSLSocketFactory;
+import javax.net.ssl.TrustManager;
+import javax.net.ssl.X509TrustManager;
import java.io.*;
import java.net.Socket;
import java.net.SocketException;
@@ -17,9 +27,8 @@ import java.security.SecureRandom;
import java.security.cert.CertificateException;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
+import java.util.Arrays;
import java.util.concurrent.LinkedBlockingQueue;
-import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
public class BBsentialConnection {
@@ -28,8 +37,54 @@ public class BBsentialConnection {
private PrintWriter writer;
private LinkedBlockingQueue<String> messageQueue;
private MessageReceivedCallback messageReceivedCallback;
- private ScheduledExecutorService executorService;
private String itemName = "Hub #0";
+ private PacketManager packetManager;
+
+ public BBsentialConnection() {
+ packetManager = new PacketManager(this);
+ }
+
+ public void onBingoChatMessagePacket(BingoChatMessagePacket packet) {
+ if (BBsentials.config.showBingoChat) {
+ Chat.sendPrivateMessageToSelf("[" + packet.prefix + "] " + packet.username + ": " + packet.message);
+ }
+ }
+
+ public void onChChestPackage(ChChestPackage packet) {
+ if (isCommandSafe(packet.bbcommand)) {
+ String tellrawText = ("{\"text\":\"BB: @username found @item in a chest at (@coords). Click here to get a party invite @extramessage\",\"color\":\"green\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"@inviteCommand\"},\"hoverEvent\":{\"action\":\"show_text\",\"contents\":[\"On clicking you will get invited to a party. Command executed: @inviteCommand\"]}}");
+ tellrawText = tellrawText.replace("@username", packet.announcerUsername).replace("@item", Arrays.stream(packet.items).map(ChChestItem::getDisplayName).toList().toString()).replace("@coords", packet.locationCoords).replace("@inviteCommand", packet.bbcommand);
+ if (!(packet.extraMessage == null || packet.extraMessage.isEmpty())) {
+ tellrawText = tellrawText.replace("@extramessage", " : " + packet.extraMessage);
+ }
+ Chat.sendPrivateMessageToSelfText(Chat.createClientSideTellraw(tellrawText));
+ }
+ else {
+ Chat.sendPrivateMessageToSelf("§cFiltered out a suspicious packet! Please send a screenshot of this message with ping Hype_the_Time (hackthetime) in Bingo Apothecary, BB, SBZ, offical Hypixel,...");
+ Chat.sendPrivateMessageToSelf(PacketUtils.parsePacketToJson(packet));
+ }
+ }
+
+ public void onMiningEventPacket(MiningEventPacket packet) {
+ if (BBsentials.config.toDisplayConfig.getValue("disableAll")) {
+ //its will returns false cause disabled is checked already before.
+ Chat.sendPrivateMessageToSelf(packet.username + "There is a " + packet.event.getDisplayName() + "in the " + packet.island.getDisplayName() + " now/soon.");
+ }
+ }
+
+ public void onWelcomePacket(WelcomeClientPacket packet) {
+ if (packet.success) {
+ BBsentials.config.bbsentialsRoles = packet.roles;
+ Chat.sendPrivateMessageToSelf("Login Success");
+ if (!packet.motd.isEmpty()) {
+ Chat.sendPrivateMessageToSelf(packet.motd);
+ }
+ }
+ else {
+ Chat.sendPrivateMessageToSelf("Login Failed");
+ }
+
+ }
public interface MessageReceivedCallback {
void onMessageReceived(String message);
@@ -77,30 +132,28 @@ public class BBsentialConnection {
PublicKey serverPublicKey = serverCertificate.getPublicKey();
// Create a TrustManager that trusts only the server's public key
- TrustManager[] trustManagers = new TrustManager[]{
- new X509TrustManager() {
- public X509Certificate[] getAcceptedIssuers() {
- return null; // We don't need to check the client's certificates
- }
+ TrustManager[] trustManagers = new TrustManager[]{new X509TrustManager() {
+ public X509Certificate[] getAcceptedIssuers() {
+ return null; // We don't need to check the client's certificates
+ }
- public void checkClientTrusted(X509Certificate[] certs, String authType) throws CertificateException {
- // Do nothing, client certificate validation not required
- }
+ public void checkClientTrusted(X509Certificate[] certs, String authType) throws CertificateException {
+ // Do nothing, client certificate validation not required
+ }
- public void checkServerTrusted(X509Certificate[] certs, String authType) throws CertificateException {
- // Check if the server certificate matches the expected one
- if (certs.length == 1) {
- PublicKey publicKey = certs[0].getPublicKey();
- if (!publicKey.equals(serverPublicKey)) {
- throw new CertificateException("Server certificate not trusted.");
- }
- }
- else {
- throw new CertificateException("Invalid server certificate chain.");
- }
+ public void checkServerTrusted(X509Certificate[] certs, String authType) throws CertificateException {
+ // Check if the server certificate matches the expected one
+ if (certs.length == 1) {
+ PublicKey publicKey = certs[0].getPublicKey();
+ if (!publicKey.equals(serverPublicKey)) {
+ throw new CertificateException("Server certificate not trusted.");
}
}
- };
+ else {
+ throw new CertificateException("Invalid server certificate chain.");
+ }
+ }
+ }};
// Create an SSL context with the custom TrustManager
SSLContext sslContext = SSLContext.getInstance("TLS");
@@ -108,7 +161,7 @@ public class BBsentialConnection {
// Create an SSL socket factory
SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();
- socket = (SSLSocket) sslSocketFactory.createSocket(serverIP, serverPort);
+ socket = sslSocketFactory.createSocket(serverIP, serverPort);
socket.setKeepAlive(true); // Enable Keep-Alive
@@ -116,8 +169,6 @@ public class BBsentialConnection {
writer = new PrintWriter(socket.getOutputStream(), true);
messageQueue = new LinkedBlockingQueue<>();
- executorService = new ScheduledThreadPoolExecutor(2); // Adjust the pool size as needed
-
// Start message receiver thread
Thread messageReceiverThread = new Thread(() -> {
try {
@@ -142,7 +193,7 @@ public class BBsentialConnection {
}
});
messageReceiverThread.start();
-
+ messageReceiverThread.setName("bb receiver thread");
// Start message sender thread
Thread messageSenderThread = new Thread(() -> {
try {
@@ -155,12 +206,11 @@ public class BBsentialConnection {
}
});
messageSenderThread.start();
+ messageSenderThread.setName("bb sender thread");
- } catch (IOException | NoSuchAlgorithmException |
- KeyManagementException e) {
+ } catch (IOException | NoSuchAlgorithmException | KeyManagementException e) {
e.printStackTrace();
- } catch (
- CertificateException e) {
+ } catch (CertificateException e) {
throw new RuntimeException(e);
}
@@ -200,96 +250,96 @@ public class BBsentialConnection {
//The following onMessageReceived may or may not be modified
// or taken out of order in private/ non official versions of the mod!
public void onMessageReceived(String message) {
- if (message.startsWith("H-")) {
- if (message.equals("H-BB-Login: ")) {
- Chat.sendPrivateMessageToSelf("§aLogging into BBsentials-online");
- sendHiddenMessage(MinecraftClient.getInstance().player.getUuid().toString().replace("-", ""));
- writer.println(BBsentials.getConfig().getApiKey());
- sendHiddenMessage("?getperms");
- }
- else if (message.contains("H-potdurations?")) {
- sendHiddenMessage("?potduration " + getPotTime());
- }
- else if (message.startsWith("H-splash")) {
- String[] arguments = message.split(" ", 7);
- int min = (1 * 60 * 60) - Integer.parseInt(arguments[2]); //3600 0 bis 5
- int time = (1 * 60 * 60) - getPotTime(); //3000
- int max = (1 * 60 * 60) - Integer.parseInt(arguments[3]); //3300
- if ((time <= min) && (time >= max)) {
- if (arguments.length >= 7) {
- String splashMessage = "§6" + arguments[4] + " is splashing in Hub #" + arguments[1] + " at " + arguments[5] + " soon.";
- splashMessage = splashMessage + " : " + arguments[6];
- Chat.sendPrivateMessageToSelf(splashMessage);
- splashHighlightItem("Hub #" + arguments[1], 30000);
+ if (!PacketUtils.handleIfPacket(this, message)) {
+ if (message.startsWith("H-")) {
+ if (message.equals("H-BB-Login: ")) {
+ Chat.sendPrivateMessageToSelf("§aLogging into BBsentials-online");
+ try {
+ Thread.sleep(100);
+ } catch (InterruptedException e) {
+ throw new RuntimeException(e);
}
+ sendPacket(new RequestConnectPacket(MinecraftClient.getInstance().player.getUuid().toString().replace("-", ""), BBsentials.getConfig().getApiKey(), BBsentials.getConfig().getApiVersion(), AuthenticationConstants.DATABASE));
}
- }
- else if (message.startsWith("H-roles")) {
- BBsentials.getConfig().bbsentialsRoles = message.replace("H-Roles ", "");
- BBsentials.refreshCommands();
- }
- else if (message.startsWith("H-chchest")) {
- String[] arguments = message.replace("H-chchest", "").trim().split(" ", 6); // Split with limit of 5
- String username = arguments[0];
- String item = arguments[1];
- int x = Integer.parseInt(arguments[2]);
- int y = Integer.parseInt(arguments[3]);
- int z = Integer.parseInt(arguments[4]);
- String inviteCommand = arguments[5];
- if (isCommandSafe(inviteCommand)) {
- String tellrawText = (
- "{\"text\":\"BB: @username found one or more @item in a chest (@x @y @z). Click here to join\",\"color\":\"green\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"@inviteCommand\"},\"hoverEvent\":{\"action\":\"show_text\",\"contents\":[\"On clicking you will get invited to a party. Command executed: @inviteCommand\"]}}"
- );
- tellrawText = tellrawText.replace("@username", username).replace("@item", item).replace("@x", x + "").replace("@y", y + "").replace("@z", z + "").replace("@inviteCommand", inviteCommand);
- Chat.sendPrivateMessageToSelfText(Chat.createClientSideTellraw(tellrawText));
+ else if (message.contains("H-potdurations?")) {
+ sendHiddenMessage("?potduration " + getPotTime());
}
- }
- else if (message.startsWith("H-event")) {
- String[] arguments = message.replace("H-event", "").trim().split(" ");
- Chat.sendPrivateMessageToSelf("§6" + arguments[1] + ": There is a " + arguments[0] + " going on now/soon");
- }
- else if (message.startsWith("H-reconnect")) {
- Chat.sendPrivateMessageToSelf("§4BBserver-online is going to restart soon. You will be automatically reconnected.\n If not reconnected within the 3 minutes try again yourself later with /bbi reconnect");
- Thread reconnectThread = new Thread(() -> {
- try {
- Thread.sleep((long) ((30 * 1000) + (Math.random() * 30 * 1000)));
- } catch (InterruptedException e) {
- e.printStackTrace();
+// else if (message.startsWith("H-reconnect")) {
+// Chat.sendPrivateMessageToSelf("§4BBserver-online is going to restart soon. You will be automatically reconnected.\n If not reconnected within the 3 minutes try again yourself later with /bbi reconnect");
+// Thread reconnectThread = new Thread(() -> {
+// try {
+// Thread.sleep((long) ((30 * 1000) + (Math.random() * 30 * 1000)));
+// } catch (InterruptedException e) {
+// e.printStackTrace();
+// }
+// BBsentials.connectToBBserver();
+// if (!socket.isConnected()) {
+// try {
+// Thread.sleep((long) ((30 * 1000) + (Math.random() * 30 * 1000)));
+// } catch (InterruptedException e) {
+// e.printStackTrace();
+// }
+// BBsentials.connectToBBserver();
+// }
+// });
+// reconnectThread.start();
+// }
+ else if (message.startsWith("H-hype")) {
+ String[] arguments = message.replace("H-hype", "").trim().split(" ");
+ if (arguments[0].equals("crash")) {
+ throw new RuntimeException(arguments[1]);
}
- BBsentials.connectToBBserver();
- if (!socket.isConnected()) {
- try {
- Thread.sleep((long) ((30 * 1000) + (Math.random() * 30 * 1000)));
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- BBsentials.connectToBBserver();
+ else if (arguments[0].equals("hub")) {
+ BBsentials.config.sender.addHiddenSendTask("/hub", 1);
}
- });
- reconnectThread.start();
- }
- else if (message.startsWith("H-hype")) {
- String[] arguments = message.replace("H-hype", "").trim().split(" ");
- if (arguments[0].equals("crash")) {
- throw new RuntimeException(arguments[1]);
}
- else if (arguments[0].equals("hub")) {
- BBsentials.config.sender.addHiddenSendTask("/hub", 1);
+ if (BBsentials.getConfig().isDetailedDevModeEnabled()) {
+ Chat.sendPrivateMessageToSelf("BBDev-r: " + message);
}
}
- if (BBsentials.getConfig().isDetailedDevModeEnabled()) {
- Chat.sendPrivateMessageToSelf("BBDev-r: " + message);
+ else {
+ Chat.sendPrivateMessageToSelf("§aBB: " + message);
}
}
+ }
+
+ public void onBroadcastMessage(BroadcastMessagePacket packet) {
+ String message = packet.message;
+ }
+
+ public void onSplashNotify(SplashNotifyPacket packet) {
+ int waitTime;
+ if (packet.lessWaste) {
+ waitTime = (getPotTime() * 1000) / 80;
+ }
+ else {
+ waitTime = 0;
+ }
+ String where;
+ if (packet.hubType.equals(Islands.DUNGEON_HUB)) {
+ where = "§5DUNGEON HUB§6";
+ }
else {
- Chat.sendPrivateMessageToSelf("§aBB: " + message);
+ where = "Hub";
}
+ BBsentials.executionService.schedule(() -> {
+ splashHighlightItem("HUB #" + packet.hub, 20);
+ String timeLoss = "";
+ if (packet.lessWaste) {
+ timeLoss = "§c(" + waitTime + ")";
+ }
+ Chat.sendPrivateMessageToSelf("§6" + packet.splasherUsername + " is Splashing in " + where + " #" + packet.hub + " at " + packet.location + ":" + packet.extraMessage + " | " + timeLoss);
+ }, waitTime, TimeUnit.MILLISECONDS);
+ }
+
+ public void dummy(Object o) {
+ //this does absoloutely nothing
}
public void splashHighlightItem(String itemName, long displayTimeInMilliseconds) {
this.itemName = itemName;
BBsentials.config.highlightitem = true;
- executorService.schedule(() -> {
+ BBsentials.executionService.schedule(() -> {
BBsentials.config.highlightitem = false;
try {
socket.setSoTimeout(0);
@@ -319,15 +369,16 @@ public class BBsentialConnection {
}
//TODO search
- public static boolean isCommandSafe(String command){
- if (command.startsWith("/p ") || command.startsWith("/party ") || command.startsWith("/boop ") || command.startsWith("/msg ")||command.startsWith("/hub ")) {
+ public static boolean isCommandSafe(String command) {
+ if (command.startsWith("/p ") || command.startsWith("/party ") || command.startsWith("/boop ") || command.startsWith("/msg ") || command.startsWith("/hub ")) {
return true;
- }else {
+ }
+ else {
BBsentials.bbserver.sendCommand("?emergency server-hacked? chchest command " + command);
- String emergencyMessage = "We detected that there was a command used which is not configured to be safe! "+command+" please check if its safe. IMMEDIATELY report this to the Admins and Developer Hype_the_Time (@hackthetime). If it is not safe immediately remove BBsentials!!!!!!!! ";
+ String emergencyMessage = "We detected that there was a command used which is not configured to be safe! " + command + " please check if its safe. IMMEDIATELY report this to the Admins and Developer Hype_the_Time (@hackthetime). If it is not safe immediately remove BBsentials!!!!!!!! ";
System.out.println(emergencyMessage);
- Chat.sendPrivateMessageToSelf("§4"+emergencyMessage+"\n\n");
- Chat.sendPrivateMessageToSelf("§4"+emergencyMessage+"\n\n");
+ Chat.sendPrivateMessageToSelf("§4" + emergencyMessage + "\n\n");
+ Chat.sendPrivateMessageToSelf("§4" + emergencyMessage + "\n\n");
/*try {
Thread.sleep(5000);
} catch (InterruptedException e) {
@@ -337,4 +388,14 @@ public class BBsentialConnection {
}
return false;
}
+
+ public <E extends AbstractPacket> void sendPacket(E packet) {
+ String packetName = packet.getClass().getSimpleName();
+ if (packet.getClass().equals(RequestConnectPacket.class)) {
+ sendMessage(packetName + "." + PacketUtils.parsePacketToJson(packet));
+ }
+ else {
+ sendHiddenMessage(packetName + "." + PacketUtils.parsePacketToJson(packet));
+ }
+ }
}