From 1c80af14d02830cb85b5d059d4ac815788d9fb64 Mon Sep 17 00:00:00 2001 From: zeroeightsix Date: Sun, 14 Oct 2018 01:31:30 +0200 Subject: [PATCH] Enum settings, converted some old settings to new --- .../java/me/zeroeightsix/kami/KamiMod.java | 15 +++---- .../gui/rgui/component/AbstractComponent.java | 12 +++--- .../me/zeroeightsix/kami/module/Module.java | 11 +++-- .../kami/module/modules/misc/SkinFlicker.java | 15 +++---- .../kami/module/modules/render/NoRender.java | 23 ++++++----- .../zeroeightsix/kami/setting/Settings.java | 33 +++++++++++++++ .../builder/primitive/EnumSettingBuilder.java | 15 +++++++ .../kami/setting/config/Configuration.java | 40 +++++++++++++++---- .../kami/setting/converter/EnumConverter.java | 27 +++++++++++++ .../kami/setting/impl/EnumSetting.java | 28 +++++++++++++ .../me/zeroeightsix/kami/util/Friends.java | 31 +++++++------- 11 files changed, 193 insertions(+), 57 deletions(-) create mode 100644 src/main/java/me/zeroeightsix/kami/setting/builder/primitive/EnumSettingBuilder.java create mode 100644 src/main/java/me/zeroeightsix/kami/setting/converter/EnumConverter.java create mode 100644 src/main/java/me/zeroeightsix/kami/setting/impl/EnumSetting.java diff --git a/src/main/java/me/zeroeightsix/kami/KamiMod.java b/src/main/java/me/zeroeightsix/kami/KamiMod.java index 48175ba0..7a414aa0 100644 --- a/src/main/java/me/zeroeightsix/kami/KamiMod.java +++ b/src/main/java/me/zeroeightsix/kami/KamiMod.java @@ -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(); diff --git a/src/main/java/me/zeroeightsix/kami/gui/rgui/component/AbstractComponent.java b/src/main/java/me/zeroeightsix/kami/gui/rgui/component/AbstractComponent.java index 4a450885..7ae2e5fb 100644 --- a/src/main/java/me/zeroeightsix/kami/gui/rgui/component/AbstractComponent.java +++ b/src/main/java/me/zeroeightsix/kami/gui/rgui/component/AbstractComponent.java @@ -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 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() { diff --git a/src/main/java/me/zeroeightsix/kami/module/Module.java b/src/main/java/me/zeroeightsix/kami/module/Module.java index 5bdef39e..d72bd51a 100644 --- a/src/main/java/me/zeroeightsix/kami/module/Module.java +++ b/src/main/java/me/zeroeightsix/kami/module/Module.java @@ -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 { + private class BindConverter extends Converter { @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; diff --git a/src/main/java/me/zeroeightsix/kami/module/modules/misc/SkinFlicker.java b/src/main/java/me/zeroeightsix/kami/module/modules/misc/SkinFlicker.java index 2b2d723c..5ba2f871 100644 --- a/src/main/java/me/zeroeightsix/kami/module/modules/misc/SkinFlicker.java +++ b/src/main/java/me/zeroeightsix/kami/module/modules/misc/SkinFlicker.java @@ -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 mode = register(Settings.e("Mode", FlickerMode.HORIZONTAL)); + private Setting 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); } } diff --git a/src/main/java/me/zeroeightsix/kami/module/modules/render/NoRender.java b/src/main/java/me/zeroeightsix/kami/module/modules/render/NoRender.java index 516264bc..0e1a6b4e 100644 --- a/src/main/java/me/zeroeightsix/kami/module/modules/render/NoRender.java +++ b/src/main/java/me/zeroeightsix/kami/module/modules/render/NoRender.java @@ -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 mob = register(Settings.b("Mob")); + private Setting gentity = register(Settings.b("GEntity")); + private Setting object = register(Settings.b("Object")); + private Setting xp = register(Settings.b("XP")); + private Setting paint = register(Settings.b("Paintings")); @EventHandler public Listener 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(); }); diff --git a/src/main/java/me/zeroeightsix/kami/setting/Settings.java b/src/main/java/me/zeroeightsix/kami/setting/Settings.java index 7cf5591f..f7892c3d 100644 --- a/src/main/java/me/zeroeightsix/kami/setting/Settings.java +++ b/src/main/java/me/zeroeightsix/kami/setting/Settings.java @@ -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 f(String name, float value) { + return floatBuilder(name).withValue(value).build(); + } + + public static Setting d(String name, double value) { + return doubleBuilder(name).withValue(value).build(); + } + + public static Setting i(String name, int value) { + return integerBuilder(name).withValue(value).build(); + } + + public static Setting b(String name, boolean value) { + return booleanBuilder(name).withValue(value).build(); + } + + public static Setting b(String name) { + return booleanBuilder(name).withValue(true).build(); + } + + public static Setting s(String name, String value) { + return stringBuilder(name).withValue(value).build(); + } + + public static Setting e(String name, Enum value) { + return enumBuilder().withName(name).withValue(value).build(); + } + public static NumericalSettingBuilder floatBuilder(String name) { return new FloatSettingBuilder().withName(name); } diff --git a/src/main/java/me/zeroeightsix/kami/setting/builder/primitive/EnumSettingBuilder.java b/src/main/java/me/zeroeightsix/kami/setting/builder/primitive/EnumSettingBuilder.java new file mode 100644 index 00000000..44fce603 --- /dev/null +++ b/src/main/java/me/zeroeightsix/kami/setting/builder/primitive/EnumSettingBuilder.java @@ -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 extends SettingBuilder { + @Override + public Setting build() { + return new EnumSetting<>(initialValue, predicate(), consumer(), name, visibilityPredicate()); + } +} diff --git a/src/main/java/me/zeroeightsix/kami/setting/config/Configuration.java b/src/main/java/me/zeroeightsix/kami/setting/config/Configuration.java index e1f58ed0..a8940821 100644 --- a/src/main/java/me/zeroeightsix/kami/setting/config/Configuration.java +++ b/src/main/java/me/zeroeightsix/kami/setting/config/Configuration.java @@ -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 entry : register.registerHashMap.entrySet()) { object.add(entry.getKey(), produceConfig(entry.getValue())); @@ -25,12 +25,37 @@ public class Configuration { for (Map.Entry entry : register.settingHashMap.entrySet()) { Setting setting = entry.getValue(); if (!(setting instanceof Convertable)) continue; - object.add(entry.getKey(), ((Convertable) 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 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) setting).converter().reverse().convert(element)); + setting.setValue(((Convertable) setting).converter().reverse().convert(element)); } } } - } diff --git a/src/main/java/me/zeroeightsix/kami/setting/converter/EnumConverter.java b/src/main/java/me/zeroeightsix/kami/setting/converter/EnumConverter.java new file mode 100644 index 00000000..2dc1c1fe --- /dev/null +++ b/src/main/java/me/zeroeightsix/kami/setting/converter/EnumConverter.java @@ -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 { + + Class clazz; + + public EnumConverter(Class 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()); + } +} diff --git a/src/main/java/me/zeroeightsix/kami/setting/impl/EnumSetting.java b/src/main/java/me/zeroeightsix/kami/setting/impl/EnumSetting.java new file mode 100644 index 00000000..93b2a97c --- /dev/null +++ b/src/main/java/me/zeroeightsix/kami/setting/impl/EnumSetting.java @@ -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 extends AbstractSetting { + + private EnumConverter converter; + + public EnumSetting(T value, Predicate restriction, BiConsumer consumer, String name, Predicate visibilityPredicate) { + super(value, restriction, consumer, name, visibilityPredicate); + this.converter = new EnumConverter((Class) ((ParameterizedType) this.getClass().getGenericSuperclass()).getActualTypeArguments()[0]); + } + + @Override + public Converter converter() { + return converter; + } + +} diff --git a/src/main/java/me/zeroeightsix/kami/util/Friends.java b/src/main/java/me/zeroeightsix/kami/util/Friends.java index 8fb539ad..0dc1d6b1 100644 --- a/src/main/java/me/zeroeightsix/kami/util/Friends.java +++ b/src/main/java/me/zeroeightsix/kami/util/Friends.java @@ -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 friends = new ArrayList<>(); + private static Setting> friends; - public Friends() { + private Friends() { + } + + public static void initFriends() { + friends = Settings.custom("Friends", new ArrayList(), 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, JsonElement> { public FriendListConverter() {} @Override - public JsonElement toJson(StaticSetting setting) { + protected JsonElement doForward(ArrayList list) { StringBuilder present = new StringBuilder(); - ArrayList friends = (ArrayList) 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 doBackward(JsonElement jsonElement) { + String v = jsonElement.getAsString(); String[] pairs = v.split(Pattern.quote("$")); - List friends = new ArrayList<>(); + ArrayList friends = new ArrayList<>(); for (String pair : pairs) { try { String[] split = pair.split(";");