mirror of
https://github.com/Wurst-Imperium/Wurst7.git
synced 2024-09-20 01:12:13 +02:00
Merge #52
This commit is contained in:
commit
d5b6c61a11
@ -64,6 +64,8 @@ public final class HackList implements UpdateListener
|
||||
public final BunnyHopHack bunnyHopHack = new BunnyHopHack();
|
||||
public final CameraNoClipHack cameraNoClipHack = new CameraNoClipHack();
|
||||
public final CaveFinderHack caveFinderHack = new CaveFinderHack();
|
||||
public final ChatTranslatorHack chatTranslatorHack =
|
||||
new ChatTranslatorHack();
|
||||
public final ChestEspHack chestEspHack = new ChestEspHack();
|
||||
public final ClickAuraHack clickAuraHack = new ClickAuraHack();
|
||||
public final ClickGuiHack clickGuiHack = new ClickGuiHack();
|
||||
|
182
src/main/java/net/wurstclient/hacks/ChatTranslatorHack.java
Normal file
182
src/main/java/net/wurstclient/hacks/ChatTranslatorHack.java
Normal file
@ -0,0 +1,182 @@
|
||||
/*
|
||||
* Copyright (C) 2014 - 2020 | Alexander01998 | All rights reserved.
|
||||
*
|
||||
* This source code is subject to the terms of the GNU General Public
|
||||
* License, version 3. If a copy of the GPL was not distributed with this
|
||||
* file, You can obtain one at: https://www.gnu.org/licenses/gpl-3.0.txt
|
||||
*/
|
||||
package net.wurstclient.hacks;
|
||||
|
||||
import net.minecraft.text.LiteralText;
|
||||
import net.minecraft.text.Text;
|
||||
import net.wurstclient.Category;
|
||||
import net.wurstclient.SearchTags;
|
||||
import net.wurstclient.events.ChatInputListener;
|
||||
import net.wurstclient.hack.Hack;
|
||||
import net.wurstclient.settings.EnumSetting;
|
||||
import net.wurstclient.util.ChatUtils;
|
||||
import net.wurstclient.util.GoogleTranslate;
|
||||
|
||||
@SearchTags({"chat translator", "ChatTranslate", "chat translate",
|
||||
"ChatTranslation", "chat translation", "AutoTranslate", "auto translate",
|
||||
"AutoTranslator", "auto translator", "AutoTranslation", "auto translation",
|
||||
"GoogleTranslate", "google translate", "GoogleTranslator",
|
||||
"google translator", "GoogleTranslation", "google translation"})
|
||||
public final class ChatTranslatorHack extends Hack implements ChatInputListener
|
||||
{
|
||||
private static final GoogleTranslate googleTranslate =
|
||||
new GoogleTranslate();
|
||||
|
||||
private final EnumSetting<FromLanguage> langFrom = new EnumSetting<>(
|
||||
"Translate from", FromLanguage.values(), FromLanguage.AUTO_DETECT);
|
||||
|
||||
private final EnumSetting<ToLanguage> langTo = new EnumSetting<>(
|
||||
"Translate to", ToLanguage.values(), ToLanguage.ENGLISH);
|
||||
|
||||
public ChatTranslatorHack()
|
||||
{
|
||||
super("ChatTranslator",
|
||||
"Translates incoming chat messages using Google Translate.");
|
||||
setCategory(Category.CHAT);
|
||||
|
||||
addSetting(langFrom);
|
||||
addSetting(langTo);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onEnable()
|
||||
{
|
||||
EVENTS.add(ChatInputListener.class, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDisable()
|
||||
{
|
||||
EVENTS.remove(ChatInputListener.class, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onReceivedMessage(ChatInputEvent event)
|
||||
{
|
||||
new Thread(() -> {
|
||||
try
|
||||
{
|
||||
translate(event);
|
||||
|
||||
}catch(Exception e)
|
||||
{
|
||||
|
||||
}
|
||||
}, "ChatTranslator").start();
|
||||
}
|
||||
|
||||
private void translate(ChatInputEvent event)
|
||||
{
|
||||
String incomingMsg = event.getComponent().getString();
|
||||
|
||||
String translatorPrefix =
|
||||
"\u00a7a[\u00a7b" + langTo.getSelected().name + "\u00a7a]:\u00a7r ";
|
||||
|
||||
if(incomingMsg.startsWith(ChatUtils.WURST_PREFIX)
|
||||
|| incomingMsg.startsWith(translatorPrefix))
|
||||
return;
|
||||
|
||||
String translated = googleTranslate.translate(incomingMsg,
|
||||
langFrom.getSelected().value, langTo.getSelected().value);
|
||||
|
||||
if(translated == null)
|
||||
return;
|
||||
|
||||
Text translationMsg = new LiteralText(translatorPrefix)
|
||||
.append(new LiteralText(translated));
|
||||
|
||||
MC.inGameHud.getChatHud().addMessage(translationMsg);
|
||||
}
|
||||
|
||||
public static enum FromLanguage
|
||||
{
|
||||
AUTO_DETECT("Detect Language", "auto"),
|
||||
AFRIKAANS("Afrikaans", "af"),
|
||||
ARABIC("Arabic", "ar"),
|
||||
CZECH("Czech", "cs"),
|
||||
CHINESE_SIMPLIFIED("Chinese (simplified)", "zh-CN"),
|
||||
CHINESE_TRADITIONAL("Chinese (traditional)", "zh-TW"),
|
||||
DANISH("Danish", "da"),
|
||||
DUTCH("Dutch", "nl"),
|
||||
ENGLISH("English", "en"),
|
||||
FINNISH("Finnish", "fi"),
|
||||
FRENCH("French", "fr"),
|
||||
GERMAN("Deutsch!", "de"),
|
||||
GREEK("Greek", "el"),
|
||||
HINDI("Hindi", "hi"),
|
||||
ITALIAN("Italian", "it"),
|
||||
JAPANESE("Japanese", "ja"),
|
||||
KOREAN("Korean", "ko"),
|
||||
NORWEGIAN("Norwegian", "no"),
|
||||
POLISH("Polish", "pl"),
|
||||
PORTUGUESE("Portugese", "pt"),
|
||||
RUSSIAN("Russian", "ru"),
|
||||
SPANISH("Spanish", "es"),
|
||||
SWAHILI("Swahili", "sw"),
|
||||
SWEDISH("Swedish", "sv"),
|
||||
TURKISH("Turkish", "tr");
|
||||
|
||||
private final String name;
|
||||
private final String value;
|
||||
|
||||
private FromLanguage(String name, String value)
|
||||
{
|
||||
this.name = name;
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString()
|
||||
{
|
||||
return name;
|
||||
}
|
||||
}
|
||||
|
||||
public static enum ToLanguage
|
||||
{
|
||||
AFRIKAANS("Afrikaans", "af"),
|
||||
ARABIC("Arabic", "ar"),
|
||||
CZECH("Czech", "cs"),
|
||||
CHINESE_SIMPLIFIED("Chinese (simplified)", "zh-CN"),
|
||||
CHINESE_TRADITIONAL("Chinese (traditional)", "zh-TW"),
|
||||
DANISH("Danish", "da"),
|
||||
DUTCH("Dutch", "nl"),
|
||||
ENGLISH("English", "en"),
|
||||
FINNISH("Finnish", "fi"),
|
||||
FRENCH("French", "fr"),
|
||||
GERMAN("Deutsch!", "de"),
|
||||
GREEK("Greek", "el"),
|
||||
HINDI("Hindi", "hi"),
|
||||
ITALIAN("Italian", "it"),
|
||||
JAPANESE("Japanese", "ja"),
|
||||
KOREAN("Korean", "ko"),
|
||||
NORWEGIAN("Norwegian", "no"),
|
||||
POLISH("Polish", "pl"),
|
||||
PORTUGUESE("Portugese", "pt"),
|
||||
RUSSIAN("Russian", "ru"),
|
||||
SPANISH("Spanish", "es"),
|
||||
SWAHILI("Swahili", "sw"),
|
||||
SWEDISH("Swedish", "sv"),
|
||||
TURKISH("Turkish", "tr");
|
||||
|
||||
private final String name;
|
||||
private final String value;
|
||||
|
||||
private ToLanguage(String name, String value)
|
||||
{
|
||||
this.name = name;
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString()
|
||||
{
|
||||
return name;
|
||||
}
|
||||
}
|
||||
}
|
105
src/main/java/net/wurstclient/util/GoogleTranslate.java
Normal file
105
src/main/java/net/wurstclient/util/GoogleTranslate.java
Normal file
@ -0,0 +1,105 @@
|
||||
/*
|
||||
* Copyright (C) 2014 - 2020 | Alexander01998 | All rights reserved.
|
||||
*
|
||||
* This source code is subject to the terms of the GNU General Public
|
||||
* License, version 3. If a copy of the GPL was not distributed with this
|
||||
* file, You can obtain one at: https://www.gnu.org/licenses/gpl-3.0.txt
|
||||
*/
|
||||
package net.wurstclient.util;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.URL;
|
||||
import java.net.URLConnection;
|
||||
import java.net.URLEncoder;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import org.apache.commons.lang3.StringEscapeUtils;
|
||||
|
||||
public class GoogleTranslate
|
||||
{
|
||||
public String translate(String text, String langFrom, String langTo)
|
||||
{
|
||||
String html = getHTML(text, langFrom, langTo);
|
||||
String translated = parseHTML(html);
|
||||
|
||||
if(text.equalsIgnoreCase(translated))
|
||||
return null;
|
||||
|
||||
return translated;
|
||||
}
|
||||
|
||||
private String getHTML(String text, String langFrom, String langTo)
|
||||
{
|
||||
URL url = createURL(text, langFrom, langTo);
|
||||
|
||||
try
|
||||
{
|
||||
URLConnection connection = setupConnection(url);
|
||||
|
||||
try(BufferedReader br = new BufferedReader(
|
||||
new InputStreamReader(connection.getInputStream(), "UTF-8")))
|
||||
{
|
||||
StringBuilder html = new StringBuilder();
|
||||
|
||||
String line;
|
||||
while((line = br.readLine()) != null)
|
||||
html.append(line + "\n");
|
||||
|
||||
return html.toString();
|
||||
}
|
||||
|
||||
}catch(IOException e)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
private URL createURL(String text, String langFrom, String langTo)
|
||||
{
|
||||
try
|
||||
{
|
||||
String encodedText = URLEncoder.encode(text.trim(), "UTF-8");
|
||||
|
||||
String urlString = String.format(
|
||||
"https://translate.google.com/m?hl=en&sl=%s&tl=%s&ie=UTF-8&prev=_m&q=%s",
|
||||
langFrom, langTo, encodedText);
|
||||
|
||||
return new URL(urlString);
|
||||
|
||||
}catch(MalformedURLException | UnsupportedEncodingException e)
|
||||
{
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
private URLConnection setupConnection(URL url) throws IOException
|
||||
{
|
||||
URLConnection connection = url.openConnection();
|
||||
|
||||
connection.setConnectTimeout(5000);
|
||||
connection.setRequestProperty("User-Agent",
|
||||
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11");
|
||||
|
||||
return connection;
|
||||
}
|
||||
|
||||
private String parseHTML(String html)
|
||||
{
|
||||
String regex = "class=\"t0\">([^<]*)<\\/div>";
|
||||
Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
|
||||
|
||||
Matcher matcher = pattern.matcher(html);
|
||||
matcher.find();
|
||||
String match = matcher.group(1);
|
||||
|
||||
if(match == null || match.isEmpty())
|
||||
return null;
|
||||
|
||||
return StringEscapeUtils.unescapeHtml4(match);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user