mirror of
https://github.com/Wurst-Imperium/Wurst7.git
synced 2024-09-20 01:12:13 +02:00
Add keybinds
This commit is contained in:
parent
fb1bd65db3
commit
2213bdb586
@ -18,7 +18,10 @@ import net.wurstclient.command.CmdList;
|
|||||||
import net.wurstclient.command.CmdProcessor;
|
import net.wurstclient.command.CmdProcessor;
|
||||||
import net.wurstclient.event.EventManager;
|
import net.wurstclient.event.EventManager;
|
||||||
import net.wurstclient.events.ChatOutputListener;
|
import net.wurstclient.events.ChatOutputListener;
|
||||||
|
import net.wurstclient.events.KeyPressListener;
|
||||||
import net.wurstclient.hack.HackList;
|
import net.wurstclient.hack.HackList;
|
||||||
|
import net.wurstclient.keybinds.KeybindList;
|
||||||
|
import net.wurstclient.keybinds.KeybindProcessor;
|
||||||
|
|
||||||
public enum WurstClient
|
public enum WurstClient
|
||||||
{
|
{
|
||||||
@ -54,11 +57,20 @@ public enum WurstClient
|
|||||||
|
|
||||||
cmds = new CmdList();
|
cmds = new CmdList();
|
||||||
|
|
||||||
gui = new ClickGui(wurstFolder.resolve("windows.json"));
|
Path keybindsFile = wurstFolder.resolve("keybinds.json");
|
||||||
|
KeybindList keybinds = new KeybindList(keybindsFile);
|
||||||
|
keybinds.init();
|
||||||
|
|
||||||
|
Path guiFile = wurstFolder.resolve("windows.json");
|
||||||
|
gui = new ClickGui(guiFile);
|
||||||
|
|
||||||
CmdProcessor cmdProcessor = new CmdProcessor(cmds);
|
CmdProcessor cmdProcessor = new CmdProcessor(cmds);
|
||||||
eventManager.add(ChatOutputListener.class, cmdProcessor);
|
eventManager.add(ChatOutputListener.class, cmdProcessor);
|
||||||
|
|
||||||
|
KeybindProcessor keybindProcessor =
|
||||||
|
new KeybindProcessor(hax, keybinds, cmdProcessor);
|
||||||
|
eventManager.add(KeyPressListener.class, keybindProcessor);
|
||||||
|
|
||||||
analytics.trackPageView("/mc1.14.2/v" + VERSION,
|
analytics.trackPageView("/mc1.14.2/v" + VERSION,
|
||||||
"Wurst " + VERSION + " MC1.14.2");
|
"Wurst " + VERSION + " MC1.14.2");
|
||||||
}
|
}
|
||||||
|
68
src/main/java/net/wurstclient/events/KeyPressListener.java
Normal file
68
src/main/java/net/wurstclient/events/KeyPressListener.java
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2014 - 2019 | Wurst-Imperium | 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.events;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
import net.wurstclient.event.Event;
|
||||||
|
import net.wurstclient.event.Listener;
|
||||||
|
|
||||||
|
public interface KeyPressListener extends Listener
|
||||||
|
{
|
||||||
|
public void onKeyPress(KeyPressEvent event);
|
||||||
|
|
||||||
|
public static class KeyPressEvent extends Event<KeyPressListener>
|
||||||
|
{
|
||||||
|
private final int keyCode;
|
||||||
|
private final int scanCode;
|
||||||
|
private final int action;
|
||||||
|
private final int modifiers;
|
||||||
|
|
||||||
|
public KeyPressEvent(int keyCode, int scanCode, int action,
|
||||||
|
int modifiers)
|
||||||
|
{
|
||||||
|
this.keyCode = keyCode;
|
||||||
|
this.scanCode = scanCode;
|
||||||
|
this.action = action;
|
||||||
|
this.modifiers = modifiers;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void fire(ArrayList<KeyPressListener> listeners)
|
||||||
|
{
|
||||||
|
for(KeyPressListener listener : listeners)
|
||||||
|
listener.onKeyPress(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Class<KeyPressListener> getListenerType()
|
||||||
|
{
|
||||||
|
return KeyPressListener.class;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getKeyCode()
|
||||||
|
{
|
||||||
|
return keyCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getScanCode()
|
||||||
|
{
|
||||||
|
return scanCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getAction()
|
||||||
|
{
|
||||||
|
return action;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getModifiers()
|
||||||
|
{
|
||||||
|
return modifiers;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
30
src/main/java/net/wurstclient/keybinds/Keybind.java
Normal file
30
src/main/java/net/wurstclient/keybinds/Keybind.java
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2014 - 2019 | Wurst-Imperium | 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.keybinds;
|
||||||
|
|
||||||
|
public class Keybind
|
||||||
|
{
|
||||||
|
private final String key;
|
||||||
|
private final String commands;
|
||||||
|
|
||||||
|
public Keybind(String key, String commands)
|
||||||
|
{
|
||||||
|
this.key = key;
|
||||||
|
this.commands = commands;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getKey()
|
||||||
|
{
|
||||||
|
return key;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getCommands()
|
||||||
|
{
|
||||||
|
return commands;
|
||||||
|
}
|
||||||
|
}
|
179
src/main/java/net/wurstclient/keybinds/KeybindList.java
Normal file
179
src/main/java/net/wurstclient/keybinds/KeybindList.java
Normal file
@ -0,0 +1,179 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2014 - 2019 | Wurst-Imperium | 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.keybinds;
|
||||||
|
|
||||||
|
import java.io.BufferedReader;
|
||||||
|
import java.io.BufferedWriter;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.nio.file.Files;
|
||||||
|
import java.nio.file.NoSuchFileException;
|
||||||
|
import java.nio.file.Path;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Comparator;
|
||||||
|
import java.util.Map.Entry;
|
||||||
|
import java.util.TreeMap;
|
||||||
|
|
||||||
|
import com.google.gson.JsonElement;
|
||||||
|
import com.google.gson.JsonObject;
|
||||||
|
|
||||||
|
import net.minecraft.client.util.InputUtil;
|
||||||
|
import net.wurstclient.util.json.JsonUtils;
|
||||||
|
|
||||||
|
public final class KeybindList
|
||||||
|
{
|
||||||
|
private final Path path;
|
||||||
|
private final ArrayList<Keybind> keybinds = new ArrayList<>();
|
||||||
|
|
||||||
|
public KeybindList(Path file)
|
||||||
|
{
|
||||||
|
path = file;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void init()
|
||||||
|
{
|
||||||
|
JsonObject json;
|
||||||
|
try(BufferedReader reader = Files.newBufferedReader(path))
|
||||||
|
{
|
||||||
|
json = JsonUtils.JSON_PARSER.parse(reader).getAsJsonObject();
|
||||||
|
|
||||||
|
}catch(NoSuchFileException e)
|
||||||
|
{
|
||||||
|
loadDefaults();
|
||||||
|
return;
|
||||||
|
|
||||||
|
}catch(Exception e)
|
||||||
|
{
|
||||||
|
System.out.println("Failed to load " + path.getFileName());
|
||||||
|
e.printStackTrace();
|
||||||
|
|
||||||
|
loadDefaults();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
keybinds.clear();
|
||||||
|
|
||||||
|
TreeMap<String, String> keybinds2 = new TreeMap<>();
|
||||||
|
for(Entry<String, JsonElement> entry : json.entrySet())
|
||||||
|
{
|
||||||
|
String key = entry.getKey();
|
||||||
|
|
||||||
|
// test if key is valid
|
||||||
|
try
|
||||||
|
{
|
||||||
|
InputUtil.fromName(key);
|
||||||
|
|
||||||
|
}catch(IllegalArgumentException e)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
JsonElement value = entry.getValue();
|
||||||
|
String commands;
|
||||||
|
if(value.isJsonPrimitive() && value.getAsJsonPrimitive().isString())
|
||||||
|
commands = value.getAsString();
|
||||||
|
else if(value.isJsonArray())
|
||||||
|
{
|
||||||
|
ArrayList<String> commands2 = new ArrayList<>();
|
||||||
|
|
||||||
|
for(JsonElement e : value.getAsJsonArray())
|
||||||
|
if(e.isJsonPrimitive() && e.getAsJsonPrimitive().isString())
|
||||||
|
commands2.add(e.getAsString());
|
||||||
|
|
||||||
|
commands = String.join(";", commands2);
|
||||||
|
}else
|
||||||
|
continue;
|
||||||
|
|
||||||
|
keybinds2.put(key, commands);
|
||||||
|
}
|
||||||
|
|
||||||
|
for(Entry<String, String> entry : keybinds2.entrySet())
|
||||||
|
keybinds.add(new Keybind(entry.getKey(), entry.getValue()));
|
||||||
|
|
||||||
|
save();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void loadDefaults()
|
||||||
|
{
|
||||||
|
keybinds.clear();
|
||||||
|
keybinds.add(new Keybind("key.keyboard.b", "fastplace;fastbreak"));
|
||||||
|
keybinds.add(new Keybind("key.keyboard.c", "fullbright"));
|
||||||
|
keybinds.add(new Keybind("key.keyboard.g", "flight"));
|
||||||
|
keybinds.add(new Keybind("key.keyboard.semicolon", "speednuker"));
|
||||||
|
keybinds.add(new Keybind("key.keyboard.h", "/home"));
|
||||||
|
keybinds.add(new Keybind("key.keyboard.j", "jesus"));
|
||||||
|
keybinds.add(new Keybind("key.keyboard.k", "multiaura"));
|
||||||
|
keybinds.add(new Keybind("key.keyboard.n", "nuker"));
|
||||||
|
keybinds.add(new Keybind("key.keyboard.r", "killaura"));
|
||||||
|
keybinds.add(new Keybind("key.keyboard.right.shift", "navigator"));
|
||||||
|
keybinds.add(new Keybind("key.keyboard.right.control", "clickgui"));
|
||||||
|
keybinds.add(new Keybind("key.keyboard.u", "freecam"));
|
||||||
|
keybinds.add(new Keybind("key.keyboard.x", "x-ray"));
|
||||||
|
keybinds.add(new Keybind("key.keyboard.y", "sneak"));
|
||||||
|
save();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void save()
|
||||||
|
{
|
||||||
|
JsonObject json = new JsonObject();
|
||||||
|
for(Keybind keybind : keybinds)
|
||||||
|
json.addProperty(keybind.getKey(), keybind.getCommands());
|
||||||
|
|
||||||
|
try(BufferedWriter writer = Files.newBufferedWriter(path))
|
||||||
|
{
|
||||||
|
JsonUtils.PRETTY_GSON.toJson(json, writer);
|
||||||
|
|
||||||
|
}catch(IOException e)
|
||||||
|
{
|
||||||
|
System.out.println("Failed to save " + path.getFileName());
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public int size()
|
||||||
|
{
|
||||||
|
return keybinds.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
public Keybind get(int index)
|
||||||
|
{
|
||||||
|
return keybinds.get(index);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getCommands(String key)
|
||||||
|
{
|
||||||
|
for(Keybind keybind : keybinds)
|
||||||
|
{
|
||||||
|
if(!key.equals(keybind.getKey()))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
return keybind.getCommands();
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void add(String key, String commands)
|
||||||
|
{
|
||||||
|
keybinds.removeIf(keybind -> key.equals(keybind.getKey()));
|
||||||
|
keybinds.add(new Keybind(key, commands));
|
||||||
|
keybinds.sort(Comparator.comparing(Keybind::getKey));
|
||||||
|
save();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void remove(String key)
|
||||||
|
{
|
||||||
|
keybinds.removeIf(keybind -> key.equals(keybind.getKey()));
|
||||||
|
save();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void removeAll()
|
||||||
|
{
|
||||||
|
keybinds.clear();
|
||||||
|
save();
|
||||||
|
}
|
||||||
|
}
|
73
src/main/java/net/wurstclient/keybinds/KeybindProcessor.java
Normal file
73
src/main/java/net/wurstclient/keybinds/KeybindProcessor.java
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2014 - 2019 | Wurst-Imperium | 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.keybinds;
|
||||||
|
|
||||||
|
import org.lwjgl.glfw.GLFW;
|
||||||
|
|
||||||
|
import net.minecraft.client.gui.screen.Screen;
|
||||||
|
import net.minecraft.client.util.InputUtil;
|
||||||
|
import net.wurstclient.WurstClient;
|
||||||
|
import net.wurstclient.clickgui.ClickGuiScreen;
|
||||||
|
import net.wurstclient.command.CmdProcessor;
|
||||||
|
import net.wurstclient.events.KeyPressListener;
|
||||||
|
import net.wurstclient.hack.Hack;
|
||||||
|
import net.wurstclient.hack.HackList;
|
||||||
|
|
||||||
|
public final class KeybindProcessor implements KeyPressListener
|
||||||
|
{
|
||||||
|
private final HackList hax;
|
||||||
|
private final KeybindList keybinds;
|
||||||
|
private final CmdProcessor cmdProcessor;
|
||||||
|
|
||||||
|
public KeybindProcessor(HackList hax, KeybindList keybinds,
|
||||||
|
CmdProcessor cmdProcessor)
|
||||||
|
{
|
||||||
|
this.hax = hax;
|
||||||
|
this.keybinds = keybinds;
|
||||||
|
this.cmdProcessor = cmdProcessor;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onKeyPress(KeyPressEvent event)
|
||||||
|
{
|
||||||
|
Screen screen = WurstClient.MC.currentScreen;
|
||||||
|
if(screen != null && !(screen instanceof ClickGuiScreen))
|
||||||
|
return;
|
||||||
|
|
||||||
|
if(event.getAction() != GLFW.GLFW_PRESS)
|
||||||
|
return;
|
||||||
|
|
||||||
|
int keyCode = event.getKeyCode();
|
||||||
|
int scanCode = event.getScanCode();
|
||||||
|
String keyName = InputUtil.getKeyCode(keyCode, scanCode).getName();
|
||||||
|
|
||||||
|
String cmds = keybinds.getCommands(keyName);
|
||||||
|
if(cmds == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
cmds = cmds.replace(";", "\u00a7").replace("\u00a7\u00a7", ";");
|
||||||
|
for(String cmd : cmds.split("\u00a7"))
|
||||||
|
{
|
||||||
|
cmd = cmd.trim();
|
||||||
|
|
||||||
|
if(cmd.startsWith("."))
|
||||||
|
cmdProcessor.process(cmd.substring(1));
|
||||||
|
else if(cmd.contains(" "))
|
||||||
|
cmdProcessor.process(cmd);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Hack hack = hax.getHackByName(cmd);
|
||||||
|
|
||||||
|
if(hack != null)
|
||||||
|
hack.setEnabled(!hack.isEnabled());
|
||||||
|
else
|
||||||
|
cmdProcessor.process(cmd);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
31
src/main/java/net/wurstclient/mixin/KeyboardMixin.java
Normal file
31
src/main/java/net/wurstclient/mixin/KeyboardMixin.java
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2014 - 2019 | Wurst-Imperium | 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.mixin;
|
||||||
|
|
||||||
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
|
import org.spongepowered.asm.mixin.injection.At;
|
||||||
|
import org.spongepowered.asm.mixin.injection.Inject;
|
||||||
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||||
|
|
||||||
|
import net.minecraft.client.Keyboard;
|
||||||
|
import net.wurstclient.WurstClient;
|
||||||
|
import net.wurstclient.events.KeyPressListener.KeyPressEvent;
|
||||||
|
|
||||||
|
@Mixin(Keyboard.class)
|
||||||
|
public class KeyboardMixin
|
||||||
|
{
|
||||||
|
@Inject(at = @At("HEAD"), method = "onKey(JIIII)V")
|
||||||
|
private void onOnKey(long windowHandle, int keyCode, int scanCode,
|
||||||
|
int action, int modifiers, CallbackInfo ci)
|
||||||
|
{
|
||||||
|
KeyPressEvent event =
|
||||||
|
new KeyPressEvent(keyCode, scanCode, action, modifiers);
|
||||||
|
|
||||||
|
WurstClient.INSTANCE.getEventManager().fire(event);
|
||||||
|
}
|
||||||
|
}
|
@ -6,7 +6,8 @@
|
|||||||
],
|
],
|
||||||
"client": [
|
"client": [
|
||||||
"ChatHudMixin",
|
"ChatHudMixin",
|
||||||
"ClientPlayerEntityMixin"
|
"ClientPlayerEntityMixin",
|
||||||
|
"KeyboardMixin"
|
||||||
],
|
],
|
||||||
"injectors": {
|
"injectors": {
|
||||||
"defaultRequire": 1
|
"defaultRequire": 1
|
||||||
|
Loading…
Reference in New Issue
Block a user