From ceab389cdbdf66acc6ab5f90ee579b27109431b2 Mon Sep 17 00:00:00 2001 From: DefinitlyEvil Date: Tue, 26 Dec 2017 22:39:38 +0800 Subject: [PATCH] new login method, and release 0.3.3 --- pom.xml | 2 +- screenshots/form-login.jpg | Bin 0 -> 58022 bytes .../dragonet/proxy/configuration/Lang.java | 13 ++++-- .../dragonet/proxy/gui/InputComponent.java | 37 +++++++++++++++ .../org/dragonet/proxy/network/CacheKey.java | 3 -- .../proxy/network/PEPacketProcessor.java | 42 ++++++++++++++---- .../proxy/network/UpstreamSession.java | 12 +++-- .../translator/pe/PEChatPacketTranslator.java | 9 ++-- .../packets/ModalFormResponsePacket.java | 4 +- .../dragonet/proxy/utilities/DebugTools.java | 18 ++++++++ .../dragonet/proxy/utilities/Versioning.java | 2 +- src/main/resources/en_US.properties | 13 ++++-- 12 files changed, 121 insertions(+), 34 deletions(-) create mode 100644 screenshots/form-login.jpg create mode 100644 src/main/java/org/dragonet/proxy/gui/InputComponent.java diff --git a/pom.xml b/pom.xml index 9727aba3d..7099fc629 100644 --- a/pom.xml +++ b/pom.xml @@ -1,7 +1,7 @@ 4.0.0 proxy - 0.3.2 + 0.3.3 DragonProxy org.dragonet.proxy diff --git a/screenshots/form-login.jpg b/screenshots/form-login.jpg new file mode 100644 index 0000000000000000000000000000000000000000..43f0a8b99e244bb90d1f854b67616fbdaaaca4b5 GIT binary patch literal 58022 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 { try { - protocol = new MinecraftProtocol((String) dataCache.get(CacheKey.AUTHENTICATION_EMAIL), password, - false); + protocol = new MinecraftProtocol(email, password, false); } catch (RequestException ex) { if (ex.getMessage().toLowerCase().contains("invalid")) { sendChat(proxy.getLang().get(Lang.MESSAGE_ONLINE_LOGIN_FAILD)); @@ -347,14 +346,13 @@ public void postLogin() { sendPacket(new FullChunkDataPacket(-1, 0, data.getBuffer())); sendPacket(new FullChunkDataPacket(-1, -1, data.getBuffer())); + dataCache.put(CacheKey.AUTHENTICATION_STATE, "online_login_wait"); + PlayStatusPacket pkStat = new PlayStatusPacket(); pkStat.status = PlayStatusPacket.PLAYER_SPAWN; sendPacket(pkStat, true); - dataCache.put(CacheKey.AUTHENTICATION_STATE, "email"); - - sendChat(proxy.getLang().get(Lang.MESSAGE_ONLINE_NOTICE, username)); - sendChat(proxy.getLang().get(Lang.MESSAGE_ONLINE_EMAIL)); + sendChat(proxy.getLang().get(Lang.MESSAGE_LOGIN_PROMPT)); } else if (proxy.getAuthMode().equals("cls")) { // CLS LOGIN! if ((username.length() < 6 + 1 + 1) || (!username.contains("_"))) { diff --git a/src/main/java/org/dragonet/proxy/network/translator/pe/PEChatPacketTranslator.java b/src/main/java/org/dragonet/proxy/network/translator/pe/PEChatPacketTranslator.java index 47831d54e..2a397fbcc 100644 --- a/src/main/java/org/dragonet/proxy/network/translator/pe/PEChatPacketTranslator.java +++ b/src/main/java/org/dragonet/proxy/network/translator/pe/PEChatPacketTranslator.java @@ -14,17 +14,14 @@ import com.github.steveice10.mc.protocol.packet.ingame.client.ClientChatPacket; import com.github.steveice10.packetlib.packet.Packet; -import org.dragonet.proxy.configuration.Lang; -import org.dragonet.proxy.network.CacheKey; import org.dragonet.proxy.network.UpstreamSession; import org.dragonet.proxy.network.translator.IPEPacketTranslator; import org.dragonet.proxy.protocol.packets.TextPacket; -import org.dragonet.proxy.utilities.PatternChecker; public class PEChatPacketTranslator implements IPEPacketTranslator { public Packet[] translate(UpstreamSession session, TextPacket packet) { - if (session.getDataCache().get(CacheKey.AUTHENTICATION_STATE) != null) { + /*if (session.getDataCache().get(CacheKey.AUTHENTICATION_STATE) != null) { if (session.getDataCache().get(CacheKey.AUTHENTICATION_STATE).equals("email")) { if (!PatternChecker.matchEmail(packet.message.trim())) { session.sendChat(session.getProxy().getLang().get(Lang.MESSAGE_ONLINE_ERROR)); @@ -40,12 +37,12 @@ public Packet[] translate(UpstreamSession session, TextPacket packet) { session.disconnect(session.getProxy().getLang().get(Lang.MESSAGE_ONLINE_ERROR)); return null; } - session.sendChat(session.getProxy().getLang().get(Lang.MESSAGE_ONLINE_LOGGIN_IN)); + session.sendChat(session.getProxy().getLang().get(Lang.MESSAGE_ONLINE_LOGGING_IN)); session.getDataCache().remove(CacheKey.AUTHENTICATION_STATE); session.authenticate(packet.message); // We NEVER cache password for better security. } return null; - } + }*/ ClientChatPacket pk = new ClientChatPacket(packet.message); return new Packet[]{pk}; diff --git a/src/main/java/org/dragonet/proxy/protocol/packets/ModalFormResponsePacket.java b/src/main/java/org/dragonet/proxy/protocol/packets/ModalFormResponsePacket.java index 3f442ea6d..c06bfe9df 100644 --- a/src/main/java/org/dragonet/proxy/protocol/packets/ModalFormResponsePacket.java +++ b/src/main/java/org/dragonet/proxy/protocol/packets/ModalFormResponsePacket.java @@ -8,8 +8,8 @@ */ public class ModalFormResponsePacket extends PEPacket { - private int formId; - private String formData; + public int formId; + public String formData; @Override public int pid() { diff --git a/src/main/java/org/dragonet/proxy/utilities/DebugTools.java b/src/main/java/org/dragonet/proxy/utilities/DebugTools.java index 1b287b3a1..44cd7772d 100644 --- a/src/main/java/org/dragonet/proxy/utilities/DebugTools.java +++ b/src/main/java/org/dragonet/proxy/utilities/DebugTools.java @@ -60,4 +60,22 @@ public static String getAllFields(Object obj) { } return data; } + + public static String matchConstant(Object obj, Class target) { + if(obj == null) return "NULL"; + try { + for (Field f : target.getDeclaredFields()) { + if ((f.getModifiers() & Modifier.STATIC) > 0) { + if (obj == f.get(null)) { + return f.getName(); + } + } + } + }catch (Exception e){ + e.printStackTrace(); + System.out.println("DebugTools.matchConstant() ERROR! "); + return "ERROR(" + obj.toString() + ")"; + } + return "NOT_FOUND(" + obj.toString() + ")"; + } } diff --git a/src/main/java/org/dragonet/proxy/utilities/Versioning.java b/src/main/java/org/dragonet/proxy/utilities/Versioning.java index 1fa5dedc9..10b5c4bc6 100644 --- a/src/main/java/org/dragonet/proxy/utilities/Versioning.java +++ b/src/main/java/org/dragonet/proxy/utilities/Versioning.java @@ -16,7 +16,7 @@ public class Versioning { - public static final String RELEASE_VERSION = "0.3.2"; + public static final String RELEASE_VERSION = "0.3.3"; public static final String MINECRAFT_PC_VERSION = "1.12.2"; // public static final int MINECRAFT_PC_PROTOCOL = 47; // This is STRICT to MCPE binary's definition, DO NOT CHANGE diff --git a/src/main/resources/en_US.properties b/src/main/resources/en_US.properties index fb3e28e42..9bca2a9c5 100644 --- a/src/main/resources/en_US.properties +++ b/src/main/resources/en_US.properties @@ -10,9 +10,16 @@ init_creating_thread_pool=Creating thread pool(Size:%s)... init_binding=Binding on %s:%s ... init_done=The proxy has started! command_not_found=\u00a7cCommand not found! -message_client_connected=Player %s[%s] connected! -message_online_notice=\u00b7------------------------\n\u00b7* Minecraft Login *\n\u00b7Powered by DragonProxy! \n\u00b7http://dragonet.org/proxy\n\u00b7\n\u00b7Logging in as [%s]. \n\u00b7------------------------ -message_online_email=\u00b7Please enter your Minecraft PC/Mac account e-mail address in chat: +message_client_connected=Player %s[%s] connected! +message_login_prompt=\u00a7e==== \u00a7bLogin to \u00a74Minecraft \u00a7e====\n\ +\u00a7fpowered by DragonProxy\n\ +\u00a7aMove a bit to login! +message_login_progress=\u00a76authenticating... +form_login_title=\u00a71\u00a7lLogin to \u00a74\u00a7lMinecraft \u00a71\u00a7lAccount +form_login_desc=DragonProxy is a software to allow Bedrock players joining Minecraft: Java Edition servers. +form_login_prompt=\u00a7aYou are logging in to Minecraft: Java Edition account +form_login_username=\u00a7bUsername: +form_login_password=\u00a7bPassword: message_online_error=\u00a7cYour details were wrong. Please rejoin. message_online_password=\u00b7Please enter password: message_online_logging_in=\u00b7Logging in via Mojang AB, please wait...