Enum settings, converted some old settings to new

This commit is contained in:
zeroeightsix 2018-10-14 01:31:30 +02:00
parent 0383356584
commit 1c80af14d0
11 changed files with 193 additions and 57 deletions

View File

@ -7,6 +7,7 @@ import me.zeroeightsix.kami.event.ForgeEventProcessor;
import me.zeroeightsix.kami.gui.kami.KamiGUI;
import me.zeroeightsix.kami.module.Module;
import me.zeroeightsix.kami.module.ModuleManager;
import me.zeroeightsix.kami.setting.config.Configuration;
import me.zeroeightsix.kami.util.Friends;
import me.zeroeightsix.kami.util.LagCompensator;
import me.zeroeightsix.kami.util.Wrapper;
@ -66,11 +67,11 @@ public class KamiMod {
commandManager = new CommandManager();
File file = new File("kami.settings");
Friends.INSTANCE.initSettings();
File file = new File("KAMISettings.json");
Friends.initFriends();
if (file.exists()) {
try {
SettingsPool.load(file);
Configuration.loadConfiguration(file);
} catch (Exception e) {
e.printStackTrace();
}
@ -82,10 +83,10 @@ public class KamiMod {
Runtime.getRuntime().addShutdownHook(new Thread(() -> {
try {
File f = new File("kami.settings");
if (!f.exists())
f.createNewFile();
SettingsPool.save(f);
File outputFile = new File("kami.settings");
if (!outputFile.exists())
outputFile.createNewFile();
Configuration.saveConfiguration(outputFile);
ModuleManager.getModules().forEach(Module::destroy);
}catch (IOException e) {
e.printStackTrace();

View File

@ -8,7 +8,8 @@ import me.zeroeightsix.kami.gui.rgui.poof.IPoof;
import me.zeroeightsix.kami.gui.rgui.poof.PoofInfo;
import me.zeroeightsix.kami.gui.rgui.render.ComponentUI;
import me.zeroeightsix.kami.gui.rgui.render.theme.Theme;
import me.zeroeightsix.kami.setting.ISetting;
import me.zeroeightsix.kami.setting.Setting;
import me.zeroeightsix.kami.setting.Settings;
import java.util.ArrayList;
@ -28,8 +29,7 @@ public abstract class AbstractComponent implements Component {
int maxHeight = Integer.MAX_VALUE;
protected int priority = 0;
@ISetting(name = "Visible")
private boolean visible = true;
private Setting<Boolean> visible = Settings.b("Visible", true);
float opacity = 1f;
private boolean focus = false;
ComponentUI ui;
@ -190,12 +190,12 @@ public abstract class AbstractComponent implements Component {
@Override
public boolean isVisible() {
return visible;
return visible.getValue();
}
@Override
public void setVisible(boolean visible) {
this.visible = visible;
this.visible.setValue(visible);
}
@Override
@ -205,7 +205,7 @@ public abstract class AbstractComponent implements Component {
@Override
public void kill() {
visible = false;
setVisible(false);
}
private boolean isMouseOver() {

View File

@ -1,6 +1,8 @@
package me.zeroeightsix.kami.module;
import com.google.common.base.Converter;
import com.google.gson.JsonElement;
import com.google.gson.JsonPrimitive;
import me.zeroeightsix.kami.KamiMod;
import me.zeroeightsix.kami.event.events.RenderEvent;
import me.zeroeightsix.kami.module.modules.movement.Sprint;
@ -150,14 +152,15 @@ public class Module {
*/
public void destroy(){};
private class BindConverter extends Converter<Bind, String> {
private class BindConverter extends Converter<Bind, JsonElement> {
@Override
protected String doForward(Bind bind) {
return bind.toString();
protected JsonElement doForward(Bind bind) {
return new JsonPrimitive(bind.toString());
}
@Override
protected Bind doBackward(String s) {
protected Bind doBackward(JsonElement jsonElement) {
String s = jsonElement.getAsString();
s = s.toLowerCase();
if (s.equals("None")) return Bind.none();
boolean ctrl = false, alt = false, shift = false;

View File

@ -1,7 +1,8 @@
package me.zeroeightsix.kami.module.modules.misc;
import me.zeroeightsix.kami.module.Module;
import me.zeroeightsix.kami.setting.ISetting;
import me.zeroeightsix.kami.setting.Setting;
import me.zeroeightsix.kami.setting.Settings;
import net.minecraft.entity.player.EnumPlayerModelParts;
import java.util.Random;
@ -12,8 +13,8 @@ import java.util.Random;
@Module.Info(name = "SkinFlicker", description = "Toggle the jacket layer rapidly for a cool skin effect", category = Module.Category.MISC)
public class SkinFlicker extends Module {
@ISetting(name = "Mode") private static FlickerMode mode = FlickerMode.HORIZONTAL;
@ISetting(name = "Slowness", min = 1) private int slowness = 2;
private Setting<FlickerMode> mode = register(Settings.e("Mode", FlickerMode.HORIZONTAL));
private Setting<Integer> slowness = register(Settings.integerBuilder().withName("Slowness").withValue(2).withMinimum(1).build());
private final static EnumPlayerModelParts[] PARTS_HORIZONTAL = new EnumPlayerModelParts[]{
EnumPlayerModelParts.LEFT_SLEEVE,
@ -38,20 +39,20 @@ public class SkinFlicker extends Module {
@Override
public void onUpdate() {
switch (mode) {
switch (mode.getValue()) {
case RANDOM:
if (mc.player.ticksExisted%slowness!=0) return;
if (mc.player.ticksExisted % slowness.getValue() != 0) return;
mc.gameSettings.switchModelPartEnabled(EnumPlayerModelParts.values()[r.nextInt(len)]);
break;
case VERTICAL:
case HORIZONTAL:
int i = (mc.player.ticksExisted/slowness)%(PARTS_HORIZONTAL.length*2); // *2 for on/off
int i = (mc.player.ticksExisted / slowness.getValue()) % (PARTS_HORIZONTAL.length * 2); // *2 for on/off
boolean on = false;
if (i >= PARTS_HORIZONTAL.length) {
on = true;
i -= PARTS_HORIZONTAL.length;
}
mc.gameSettings.setModelPartEnabled(mode==FlickerMode.VERTICAL ? PARTS_VERTICAL[i] : PARTS_HORIZONTAL[i], on);
mc.gameSettings.setModelPartEnabled(mode.getValue() == FlickerMode.VERTICAL ? PARTS_VERTICAL[i] : PARTS_HORIZONTAL[i], on);
}
}

View File

@ -4,7 +4,8 @@ import me.zero.alpine.listener.EventHandler;
import me.zero.alpine.listener.Listener;
import me.zeroeightsix.kami.event.events.PacketEvent;
import me.zeroeightsix.kami.module.Module;
import me.zeroeightsix.kami.setting.ISetting;
import me.zeroeightsix.kami.setting.Setting;
import me.zeroeightsix.kami.setting.Settings;
import net.minecraft.network.Packet;
import net.minecraft.network.play.server.*;
@ -14,20 +15,20 @@ import net.minecraft.network.play.server.*;
@Module.Info(name = "NoRender", category = Module.Category.RENDER, description = "Ignore entity spawn packets")
public class NoRender extends Module {
@ISetting(name = "Mob") private boolean mob = true;
@ISetting(name = "GEntity") private boolean gentity = true;
@ISetting(name = "Object") private boolean object = true;
@ISetting(name = "XP") private boolean xp = true;
@ISetting(name = "Painting") private boolean paint = true;
private Setting<Boolean> mob = register(Settings.b("Mob"));
private Setting<Boolean> gentity = register(Settings.b("GEntity"));
private Setting<Boolean> object = register(Settings.b("Object"));
private Setting<Boolean> xp = register(Settings.b("XP"));
private Setting<Boolean> paint = register(Settings.b("Paintings"));
@EventHandler
public Listener<PacketEvent.Receive> receiveListener = new Listener<>(event -> {
Packet packet = event.getPacket();
if ((packet instanceof SPacketSpawnMob && mob) ||
(packet instanceof SPacketSpawnGlobalEntity && gentity) ||
(packet instanceof SPacketSpawnObject && object) ||
(packet instanceof SPacketSpawnExperienceOrb && xp) ||
(packet instanceof SPacketSpawnPainting && paint))
if ((packet instanceof SPacketSpawnMob && mob.getValue()) ||
(packet instanceof SPacketSpawnGlobalEntity && gentity.getValue()) ||
(packet instanceof SPacketSpawnObject && object.getValue()) ||
(packet instanceof SPacketSpawnExperienceOrb && xp.getValue()) ||
(packet instanceof SPacketSpawnPainting && paint.getValue()))
event.cancel();
});

View File

@ -7,6 +7,7 @@ import me.zeroeightsix.kami.setting.builder.numerical.FloatSettingBuilder;
import me.zeroeightsix.kami.setting.builder.numerical.IntegerSettingBuilder;
import me.zeroeightsix.kami.setting.builder.numerical.NumericalSettingBuilder;
import me.zeroeightsix.kami.setting.builder.primitive.BooleanSettingBuilder;
import me.zeroeightsix.kami.setting.builder.primitive.EnumSettingBuilder;
import me.zeroeightsix.kami.setting.builder.primitive.StringSettingBuilder;
import java.util.function.BiConsumer;
@ -37,6 +38,38 @@ public class Settings {
return new StringSettingBuilder();
}
public static EnumSettingBuilder enumBuilder() {
return new EnumSettingBuilder();
}
public static Setting<Float> f(String name, float value) {
return floatBuilder(name).withValue(value).build();
}
public static Setting<Float> d(String name, double value) {
return doubleBuilder(name).withValue(value).build();
}
public static Setting<Float> i(String name, int value) {
return integerBuilder(name).withValue(value).build();
}
public static Setting<Boolean> b(String name, boolean value) {
return booleanBuilder(name).withValue(value).build();
}
public static Setting<Boolean> b(String name) {
return booleanBuilder(name).withValue(true).build();
}
public static Setting<String> s(String name, String value) {
return stringBuilder(name).withValue(value).build();
}
public static <T extends Enum> Setting<T> e(String name, Enum value) {
return enumBuilder().withName(name).withValue(value).build();
}
public static NumericalSettingBuilder<Float> floatBuilder(String name) {
return new FloatSettingBuilder().withName(name);
}

View File

@ -0,0 +1,15 @@
package me.zeroeightsix.kami.setting.builder.primitive;
import me.zeroeightsix.kami.setting.Setting;
import me.zeroeightsix.kami.setting.builder.SettingBuilder;
import me.zeroeightsix.kami.setting.impl.EnumSetting;
/**
* Created by 086 on 14/10/2018.
*/
public class EnumSettingBuilder<T extends Enum> extends SettingBuilder<T> {
@Override
public Setting<T> build() {
return new EnumSetting<>(initialValue, predicate(), consumer(), name, visibilityPredicate());
}
}

View File

@ -1,11 +1,11 @@
package me.zeroeightsix.kami.setting.config;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.*;
import me.zeroeightsix.kami.setting.Setting;
import me.zeroeightsix.kami.setting.SettingsRegister;
import me.zeroeightsix.kami.setting.converter.Convertable;
import java.io.*;
import java.util.Map;
/**
@ -13,11 +13,11 @@ import java.util.Map;
*/
public class Configuration {
public JsonObject produceConfig() {
public static JsonObject produceConfig() {
return produceConfig(SettingsRegister.ROOT);
}
private JsonObject produceConfig(SettingsRegister register) {
private static JsonObject produceConfig(SettingsRegister register) {
JsonObject object = new JsonObject();
for (Map.Entry<String, SettingsRegister> entry : register.registerHashMap.entrySet()) {
object.add(entry.getKey(), produceConfig(entry.getValue()));
@ -25,12 +25,37 @@ public class Configuration {
for (Map.Entry<String, Setting> entry : register.settingHashMap.entrySet()) {
Setting setting = entry.getValue();
if (!(setting instanceof Convertable)) continue;
object.add(entry.getKey(), ((Convertable<Object, JsonElement>) setting).converter().convert(setting.getValue()));
object.add(entry.getKey(), (JsonElement) ((Convertable) setting).converter().convert(setting.getValue()));
}
return object;
}
public void loadConfiguration(SettingsRegister register, JsonObject input) {
public static void saveConfiguration(File file) throws IOException {
saveConfiguration(new FileOutputStream(file));
}
public static void saveConfiguration(OutputStream stream) throws IOException {
Gson gson = new GsonBuilder().setPrettyPrinting().create();
String json = gson.toJson(produceConfig());
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(stream));
writer.write(json);
}
public static void loadConfiguration(File file) throws IOException {
InputStream stream = new FileInputStream(file);
loadConfiguration(stream);
stream.close();
}
public static void loadConfiguration(InputStream stream) {
loadConfiguration(new JsonParser().parse(new InputStreamReader(stream)).getAsJsonObject());
}
public static void loadConfiguration(JsonObject input) {
loadConfiguration(SettingsRegister.ROOT, input);
}
private static void loadConfiguration(SettingsRegister register, JsonObject input) {
for (Map.Entry<String, JsonElement> entry : input.entrySet()) {
String key = entry.getKey();
JsonElement element = entry.getValue();
@ -38,10 +63,9 @@ public class Configuration {
loadConfiguration(register.subregister(key), element.getAsJsonObject());
} else {
Setting setting = register.getSetting(key);
setting.setValue(((Convertable<Object, JsonElement>) setting).converter().reverse().convert(element));
setting.setValue(((Convertable) setting).converter().reverse().convert(element));
}
}
}
}

View File

@ -0,0 +1,27 @@
package me.zeroeightsix.kami.setting.converter;
import com.google.common.base.Converter;
import com.google.gson.JsonElement;
import com.google.gson.JsonPrimitive;
/**
* Created by 086 on 14/10/2018.
*/
public class EnumConverter extends Converter<Enum, JsonElement> {
Class<? extends Enum> clazz;
public EnumConverter(Class<? extends Enum> clazz) {
this.clazz = clazz;
}
@Override
protected JsonElement doForward(Enum anEnum) {
return new JsonPrimitive(anEnum.toString());
}
@Override
protected Enum doBackward(JsonElement jsonElement) {
return Enum.valueOf(clazz, jsonElement.getAsString());
}
}

View File

@ -0,0 +1,28 @@
package me.zeroeightsix.kami.setting.impl;
import com.google.common.base.Converter;
import me.zeroeightsix.kami.setting.AbstractSetting;
import me.zeroeightsix.kami.setting.converter.EnumConverter;
import java.lang.reflect.ParameterizedType;
import java.util.function.BiConsumer;
import java.util.function.Predicate;
/**
* Created by 086 on 14/10/2018.
*/
public class EnumSetting<T extends Enum> extends AbstractSetting<T> {
private EnumConverter converter;
public EnumSetting(T value, Predicate<T> restriction, BiConsumer<T, T> consumer, String name, Predicate<T> visibilityPredicate) {
super(value, restriction, consumer, name, visibilityPredicate);
this.converter = new EnumConverter((Class<T>) ((ParameterizedType) this.getClass().getGenericSuperclass()).getActualTypeArguments()[0]);
}
@Override
public Converter converter() {
return converter;
}
}

View File

@ -1,33 +1,37 @@
package me.zeroeightsix.kami.util;
import com.google.common.base.Converter;
import com.google.gson.JsonElement;
import com.google.gson.JsonParser;
import com.google.gson.JsonPrimitive;
import me.zeroeightsix.kami.setting.ISetting;
import me.zeroeightsix.kami.setting.Setting;
import me.zeroeightsix.kami.setting.Settings;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import java.util.regex.Pattern;
/**
* Created by 086 on 13/12/2017.
*/
public class Friends extends SettingsClass {
public class Friends {
public static final Friends INSTANCE = new Friends();
@ISetting(name = "Friends", converter = FriendListConverter.class)
public List<Friend> friends = new ArrayList<>();
private static Setting<ArrayList<Friend>> friends;
public Friends() {
private Friends() {
}
public static void initFriends() {
friends = Settings.custom("Friends", new ArrayList<Friend>(), new FriendListConverter()).buildAndRegister("friends");
}
public static boolean isFriend(String name) {
return INSTANCE.friends.stream().anyMatch(friend -> friend.username.equalsIgnoreCase(name));
return friends.getValue().stream().anyMatch(friend -> friend.username.equalsIgnoreCase(name));
}
public static class Friend {
@ -44,23 +48,22 @@ public class Friends extends SettingsClass {
}
}
public static class FriendListConverter implements FieldConverter {
public static class FriendListConverter extends Converter<ArrayList<Friend>, JsonElement> {
public FriendListConverter() {}
@Override
public JsonElement toJson(StaticSetting setting) {
protected JsonElement doForward(ArrayList<Friend> list) {
StringBuilder present = new StringBuilder();
ArrayList<Friend> friends = (ArrayList<Friend>) setting.getValue();
for (Friend friend : friends)
for (Friend friend : list)
present.append(String.format("%s;%s$", friend.username, friend.uuid.toString()));
return new JsonPrimitive(present.toString());
}
@Override
public Object fromJson(StaticSetting setting, JsonElement value) {
String v = value.getAsString();
protected ArrayList<Friend> doBackward(JsonElement jsonElement) {
String v = jsonElement.getAsString();
String[] pairs = v.split(Pattern.quote("$"));
List<Friend> friends = new ArrayList<>();
ArrayList<Friend> friends = new ArrayList<>();
for (String pair : pairs) {
try {
String[] split = pair.split(";");