diff --git a/README.md b/README.md index 8eb2179c..317f32d8 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ If you just want to talk or need help with ViaFabricPlus feel free to join my ## Why? ViaFabricPlus implements ViaLegacy/ViaAprilFools clientside and adds a ton of fixes that improve the game experience,
-as does [MultiConnect](https://github.com/Earthcomputer/multiconnect) from Earthcomputer. +as does [multiconnect](https://github.com/Earthcomputer/multiconnect) from Earthcomputer. ### Important: The focus on ViaFabricPlus is on client side fixes, so reporting bugs and contributing is welcome. ## Dependencies @@ -25,13 +25,6 @@ as does [MultiConnect](https://github.com/Earthcomputer/multiconnect) from Earth | MC-Structs | https://github.com/Lenni0451/MCStructs | | ViaLoadingBase | https://github.com/FlorianMichael/ViaLoadingBase | -## Project structure -ViaFabricPlus splits into two major parts: -| Part | Description | -|-------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| ViaFabricPlus | Core of the project, all fixes here are stable and have been tested many times | -| ViaFabricPlus-Visual | Addon for the core, it adds only visual changes between the versions like old textures,
optional and not necessary for the gameplay, but recommended. | - ## Setting up a Workspace ViaFabricPlus uses Gradle, to make sure that it is installed properly you can check [Gradle's website](https://gradle.org/install/). 1. Clone the repository using `git clone https://github.com/FlorianMichael/ViaFabricPlus`. @@ -52,18 +45,11 @@ to make a ViaFabricPlus addon you just have to implement the ViaFabricPlusAddon ```java package net.example; -import de.florianmichael.viafabricplus.ViaFabricPlusAddon; - public class ViaFabricPlusExampleAddon implements ViaFabricPlusAddon { @Override - public void onPreLoad() { - // called directly after Via* is initialized - } - - @Override - public void onPostLoad() { - // called after Minecraft is initialized + public void onLoad() { + // called after ViaVersion and Minecraft is initialized } @Override @@ -83,6 +69,21 @@ To load the addon you have to specify the addon main class as entrypoint in your } ``` +### Create Setting Group +To create a setting group, you can simply use the SettingGroup class: +```java +public class ExampleSettingGroup extends SettingGroup { + public final static ExampleSettingGroup INSTANCE = new ExampleSettingGroup(); + + public final BooleanSetting testValue = new BooleanSetting("Test", false); + + public ExampleSettingGroup() { + super("Example"); + ViaFabricPlus.getClassWrapper().loadGroup(this); + } +} +``` + ## Alternatives - [ClientViaVersion](https://github.com/Gerrygames/ClientViaVersion): Discontinued 5zig plugin. - [multiconnect](https://www.curseforge.com/minecraft/mc-mods/multiconnect): Fabric mod for connecting to older diff --git a/ViaFabricPlus-Visual/build.gradle b/ViaFabricPlus-Visual/build.gradle deleted file mode 100644 index c61cfd0c..00000000 --- a/ViaFabricPlus-Visual/build.gradle +++ /dev/null @@ -1,34 +0,0 @@ -plugins { - id "fabric-loom" version "1.1-SNAPSHOT" -} - -sourceCompatibility = JavaVersion.VERSION_17 -targetCompatibility = JavaVersion.VERSION_17 - -archivesBaseName = project.archives_base_name + "-visual" -version = project.mod_version -group = project.maven_group - -repositories { - mavenCentral() -} - -dependencies { - minecraft "com.mojang:minecraft:${project.minecraft_version}" - mappings "net.fabricmc:yarn:${project.yarn_mappings}:v2" - modImplementation "net.fabricmc:fabric-loader:${project.loader_version}" - - implementation "com.viaversion:viaversion:${project.viaversion_version}" - - implementation "com.github.RaphiMC:ViaLegacy:${project.vialegacy_version}" - - implementation project(":") -} - -processResources { - inputs.property "version", project.version - - filesMatching("fabric.mod.json") { - expand "version": project.version - } -} diff --git a/ViaFabricPlus-Visual/src/main/java/de/florianmichael/viafabricplus_visual/ViaFabricPlusVisual.java b/ViaFabricPlus-Visual/src/main/java/de/florianmichael/viafabricplus_visual/ViaFabricPlusVisual.java deleted file mode 100644 index 52db30c0..00000000 --- a/ViaFabricPlus-Visual/src/main/java/de/florianmichael/viafabricplus_visual/ViaFabricPlusVisual.java +++ /dev/null @@ -1,46 +0,0 @@ -package de.florianmichael.viafabricplus_visual; - -import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import de.florianmichael.viafabricplus.ViaFabricPlusAddon; -import de.florianmichael.viafabricplus.platform.ProtocolRange; -import de.florianmichael.viafabricplus.value.impl.ProtocolSyncBooleanValue; -import de.florianmichael.viafabricplus_visual.definition.c0_30.ClassicItemSelectionScreen; -import de.florianmichael.viafabricplus_visual.definition.v1_8_x.ArmorPointsDefinition; -import de.florianmichael.vialoadingbase.platform.ComparableProtocolVersion; -import de.florianmichael.vialoadingbase.platform.InternalProtocolList; -import net.raphimc.vialegacy.api.LegacyProtocolVersion; - -public class ViaFabricPlusVisual implements ViaFabricPlusAddon { - - // 1.19.2 -> 1.19 - public final static ProtocolSyncBooleanValue disableSecureChatWarning = new ProtocolSyncBooleanValue("Disable secure chat warning", ProtocolRange.andOlder(ProtocolVersion.v1_19)); - - // 1.19 -> 1.18.2 - public final static ProtocolSyncBooleanValue hideSignatureIndicator = new ProtocolSyncBooleanValue("Hide signature indicator", ProtocolRange.andOlder(ProtocolVersion.v1_18_2)); - - // 1.16 -> 1.15.2 - public final static ProtocolSyncBooleanValue removeNewerFeaturesFromJigsawScreen = new ProtocolSyncBooleanValue("Remove newer features from Jigsaw screen", ProtocolRange.andOlder(ProtocolVersion.v1_15_2)); - - // 1.13 -> 1.12.2 - public final static ProtocolSyncBooleanValue replacePetrifiedOakSlab = new ProtocolSyncBooleanValue("Replace petrified oak slab", new ProtocolRange(ProtocolVersion.v1_12_2, LegacyProtocolVersion.r1_3_1tor1_3_2)); - - // 1.9 -> 1.8.x - public final static ProtocolSyncBooleanValue emulateArmorHud = new ProtocolSyncBooleanValue("Emulate Armor hud", ProtocolRange.andOlder(ProtocolVersion.v1_8)); - public final static ProtocolSyncBooleanValue removeNewerFeaturesFromCommandBlockScreen = new ProtocolSyncBooleanValue("Remove newer features from Command block screen", ProtocolRange.andOlder(ProtocolVersion.v1_8)); - - // a1_0_15 -> c0_28toc0_30 - public final static ProtocolSyncBooleanValue replaceCreativeInventory = new ProtocolSyncBooleanValue("Replace creative inventory", ProtocolRange.andOlder(LegacyProtocolVersion.c0_28toc0_30)); - - @Override - public void onPostLoad() { - ArmorPointsDefinition.load(); - ClassicItemSelectionScreen.create(InternalProtocolList.fromProtocolVersion(LegacyProtocolVersion.c0_28toc0_30)); - } - - @Override - public void onChangeVersion(ComparableProtocolVersion protocolVersion) { - if (ClassicItemSelectionScreen.INSTANCE != null) { - ClassicItemSelectionScreen.INSTANCE.reload(protocolVersion); - } - } -} diff --git a/ViaFabricPlus-Visual/src/main/resources/assets/viafabricplus-visual/icon.png b/ViaFabricPlus-Visual/src/main/resources/assets/viafabricplus-visual/icon.png deleted file mode 100644 index de404379..00000000 Binary files a/ViaFabricPlus-Visual/src/main/resources/assets/viafabricplus-visual/icon.png and /dev/null differ diff --git a/ViaFabricPlus-Visual/src/main/resources/fabric.mod.json b/ViaFabricPlus-Visual/src/main/resources/fabric.mod.json deleted file mode 100644 index e679a5ba..00000000 --- a/ViaFabricPlus-Visual/src/main/resources/fabric.mod.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "schemaVersion": 1, - "id": "viafabricplus-visual", - "version": "${version}", - - "name": "ViaFabricPlus Visual", - "description": " ViaFabricPlus addon which adds visual fixes", - "authors": [ - "FlorianMichael", - "EnZaXD", - "JesseUwU" - ], - "contact": { - "homepage": "https://github.com/FlorianMichael/", - "sources": "https://github.com/FlorianMichael/ViaFabricPlus" - }, - "entrypoints": { - "viafabricplus": [ - "de.florianmichael.viafabricplus_visual.ViaFabricPlusVisual" - ] - }, - "license": "GPL-v3", - "icon": "assets/viafabricplus-visual/icon.png", - "environment": "*", - "mixins": [ - "viafabricplus-visual.mixins.json" - ], - "depends": { - "fabricloader": ">=0.14.11", - "minecraft": "~1.19.3", - "java": ">=17", - "viafabricplus": "*" - }, - "custom": { - "modmenu": { - "parent": "viafabricplus" - } - } -} diff --git a/ViaFabricPlus-Visual/src/main/resources/viafabricplus-visual.mixins.json b/ViaFabricPlus-Visual/src/main/resources/viafabricplus-visual.mixins.json deleted file mode 100644 index 3cd51444..00000000 --- a/ViaFabricPlus-Visual/src/main/resources/viafabricplus-visual.mixins.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "required": true, - "minVersion": "0.8", - "package": "de.florianmichael.viafabricplus_visual.injection.mixin", - "compatibilityLevel": "JAVA_17", - "mixins": [ - "MixinChatHud", - "MixinChatScreen", - "MixinClientPlayerEntity", - "MixinClientPlayNetworkHandler", - "MixinCommandBlockScreen", - "MixinItemRenderer", - "MixinJigsawBlockScreen" - ], - "injectors": { - "defaultRequire": 1 - }, - "client": [ - "MixinCreativeInventoryScreen" - ] -} diff --git a/build.gradle b/build.gradle index 83ff792c..d1bbe497 100644 --- a/build.gradle +++ b/build.gradle @@ -23,7 +23,10 @@ allprojects { } maven { name = "ViaVersion" - url "https://repo.viaversion.com" + url = "https://repo.viaversion.com" + } + maven { + url = "https://maven.terraformersmc.com/releases" } } } @@ -36,7 +39,7 @@ dependencies { minecraft "com.mojang:minecraft:${project.minecraft_version}" mappings "net.fabricmc:yarn:${project.yarn_mappings}:v2" modImplementation "net.fabricmc:fabric-loader:${project.loader_version}" - include project(":ViaFabricPlus-Visual") + modImplementation "com.terraformersmc:modmenu:${project.mod_menu_version}" libs "com.github.FlorianMichael:ViaLoadingBase:${project.vialoadingbase_version}" diff --git a/gradle.properties b/gradle.properties index bd13b628..d159b1c8 100644 --- a/gradle.properties +++ b/gradle.properties @@ -5,7 +5,7 @@ minecraft_version=1.19.3 yarn_mappings=1.19.3+build.5 loader_version=0.14.14 -mod_version=1.4.1 +mod_version=1.5.1 maven_group=de.florianmichael archives_base_name=viafabricplus @@ -16,3 +16,5 @@ vialegacy_version=29a7082d7f viaaprilfools_version=cd4d0a2973 mcstructs_text_version=2.2.0 + +mod_menu_version=5.0.0 diff --git a/image/values.png b/image/values.png index cfd44987..6bac4ab2 100644 Binary files a/image/values.png and b/image/values.png differ diff --git a/settings.gradle b/settings.gradle index 3f5033ba..df583440 100644 --- a/settings.gradle +++ b/settings.gradle @@ -8,5 +8,4 @@ pluginManagement { gradlePluginPortal() } } -include 'ViaFabricPlus-Visual' diff --git a/src/main/java/de/florianmichael/viafabricplus/ViaFabricPlus.java b/src/main/java/de/florianmichael/viafabricplus/ViaFabricPlus.java index c6851633..3d65fe3e 100644 --- a/src/main/java/de/florianmichael/viafabricplus/ViaFabricPlus.java +++ b/src/main/java/de/florianmichael/viafabricplus/ViaFabricPlus.java @@ -9,12 +9,19 @@ import com.viaversion.viaversion.protocols.protocol1_9to1_8.providers.MovementTr import de.florianmichael.viafabricplus.definition.ChatLengthDefinition; import de.florianmichael.viafabricplus.definition.ItemReleaseVersionDefinition; import de.florianmichael.viafabricplus.definition.PackFormatsDefinition; +import de.florianmichael.viafabricplus.definition.c0_30.ClassicItemSelectionScreen; import de.florianmichael.viafabricplus.definition.v1_19_0.provider.CommandArgumentsProvider; +import de.florianmichael.viafabricplus.definition.v1_8_x.ArmorPointsDefinition; import de.florianmichael.viafabricplus.platform.ViaAprilFoolsPlatformImpl; import de.florianmichael.viafabricplus.platform.ViaLegacyPlatformImpl; import de.florianmichael.viafabricplus.provider.*; -import de.florianmichael.viafabricplus.util.SavingSystem; +import de.florianmichael.viafabricplus.setting.SettingGroup; +import de.florianmichael.viafabricplus.setting.groups.DebugSettings; +import de.florianmichael.viafabricplus.setting.groups.GeneralSettings; +import de.florianmichael.viafabricplus.setting.groups.VisualSettings; +import de.florianmichael.viafabricplus.util.SettingsSave; import de.florianmichael.vialoadingbase.ViaLoadingBase; +import de.florianmichael.vialoadingbase.platform.InternalProtocolList; import de.florianmichael.vialoadingbase.platform.SubPlatform; import io.netty.channel.DefaultEventLoop; import io.netty.util.AttributeKey; @@ -34,6 +41,7 @@ import net.raphimc.vialegacy.protocols.release.protocol1_8to1_7_6_10.providers.G import java.io.File; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collections; import java.util.List; @@ -44,6 +52,8 @@ public class ViaFabricPlus { private final static ViaFabricPlus self = new ViaFabricPlus(); + private final List settingGroups = new ArrayList<>(); + private final SubPlatform SUB_PLATFORM_VIA_LEGACY = new SubPlatform("ViaLegacy", () -> true, ViaLegacyPlatformImpl::new, protocolVersions -> { final List legacyProtocols = new ArrayList<>(LegacyProtocolVersion.PROTOCOLS); Collections.reverse(legacyProtocols); @@ -123,29 +133,40 @@ public class ViaFabricPlus { ChatLengthDefinition.reload(protocolVersion); }); builder.build(); - - FabricLoader.getInstance().getEntrypoints("viafabricplus", ViaFabricPlusAddon.class).forEach(ViaFabricPlusAddon::onPreLoad); } public void postLoad() throws Exception { - SavingSystem.setup(); + FabricLoader.getInstance().getEntrypoints("viafabricplus", ViaFabricPlusAddon.class).forEach(ViaFabricPlusAddon::onLoad); + + loadGroup( + GeneralSettings.getClassWrapper(), + VisualSettings.getClassWrapper(), + DebugSettings.getClassWrapper() + ); + + SettingsSave.load(this); PackFormatsDefinition.load(); ItemReleaseVersionDefinition.load(); + ArmorPointsDefinition.load(); + + ClassicItemSelectionScreen.create(InternalProtocolList.fromProtocolVersion(LegacyProtocolVersion.c0_28toc0_30)); Runtime.getRuntime().addShutdownHook(new Thread(() -> { try { - this.close(); + SettingsSave.save(this); } catch (Exception e) { throw new RuntimeException(e); } })); - - FabricLoader.getInstance().getEntrypoints("viafabricplus", ViaFabricPlusAddon.class).forEach(ViaFabricPlusAddon::onPostLoad); } - public void close() throws Exception { - SavingSystem.save(); + public void loadGroup(final SettingGroup... groups) { + this.settingGroups.addAll(Arrays.asList(groups)); + } + + public List getSettingGroups() { + return settingGroups; } public static ViaFabricPlus getClassWrapper() { diff --git a/src/main/java/de/florianmichael/viafabricplus/ViaFabricPlusAddon.java b/src/main/java/de/florianmichael/viafabricplus/ViaFabricPlusAddon.java index 6071a9cd..c0b16eaa 100644 --- a/src/main/java/de/florianmichael/viafabricplus/ViaFabricPlusAddon.java +++ b/src/main/java/de/florianmichael/viafabricplus/ViaFabricPlusAddon.java @@ -4,11 +4,7 @@ import de.florianmichael.vialoadingbase.platform.ComparableProtocolVersion; public interface ViaFabricPlusAddon { - default void onPreLoad() { - } - default void onPostLoad() { - } - + default void onLoad() {} default void onChangeVersion(final ComparableProtocolVersion protocolVersion) { } } diff --git a/ViaFabricPlus-Visual/src/main/java/de/florianmichael/viafabricplus_visual/definition/c0_30/ClassicItemSelectionScreen.java b/src/main/java/de/florianmichael/viafabricplus/definition/c0_30/ClassicItemSelectionScreen.java similarity index 99% rename from ViaFabricPlus-Visual/src/main/java/de/florianmichael/viafabricplus_visual/definition/c0_30/ClassicItemSelectionScreen.java rename to src/main/java/de/florianmichael/viafabricplus/definition/c0_30/ClassicItemSelectionScreen.java index b363978b..cc621776 100644 --- a/ViaFabricPlus-Visual/src/main/java/de/florianmichael/viafabricplus_visual/definition/c0_30/ClassicItemSelectionScreen.java +++ b/src/main/java/de/florianmichael/viafabricplus/definition/c0_30/ClassicItemSelectionScreen.java @@ -1,4 +1,4 @@ -package de.florianmichael.viafabricplus_visual.definition.c0_30; +package de.florianmichael.viafabricplus.definition.c0_30; import de.florianmichael.vialoadingbase.platform.ComparableProtocolVersion; import net.minecraft.client.MinecraftClient; diff --git a/ViaFabricPlus-Visual/src/main/java/de/florianmichael/viafabricplus_visual/definition/v1_8_x/ArmorPointsDefinition.java b/src/main/java/de/florianmichael/viafabricplus/definition/v1_8_x/ArmorPointsDefinition.java similarity index 96% rename from ViaFabricPlus-Visual/src/main/java/de/florianmichael/viafabricplus_visual/definition/v1_8_x/ArmorPointsDefinition.java rename to src/main/java/de/florianmichael/viafabricplus/definition/v1_8_x/ArmorPointsDefinition.java index 8edfc62c..ebd772c6 100644 --- a/ViaFabricPlus-Visual/src/main/java/de/florianmichael/viafabricplus_visual/definition/v1_8_x/ArmorPointsDefinition.java +++ b/src/main/java/de/florianmichael/viafabricplus/definition/v1_8_x/ArmorPointsDefinition.java @@ -1,4 +1,4 @@ -package de.florianmichael.viafabricplus_visual.definition.v1_8_x; +package de.florianmichael.viafabricplus.definition.v1_8_x; import com.viaversion.viaversion.protocols.protocol1_9to1_8.ArmorType; import net.minecraft.client.MinecraftClient; diff --git a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/base/MixinMinecraftClient.java b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/base/MixinMinecraftClient.java index d0ea267b..4460de4e 100644 --- a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/base/MixinMinecraftClient.java +++ b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/base/MixinMinecraftClient.java @@ -12,7 +12,9 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; public class MixinMinecraftClient { @Inject(method = "", at = @At("RETURN")) - public void postLoad(RunArgs args, CallbackInfo ci) throws Exception { - ViaFabricPlus.getClassWrapper().postLoad(); + public void postLoad(RunArgs args, CallbackInfo ci) { + try { + ViaFabricPlus.getClassWrapper().postLoad(); + } catch (Exception ignored) {} } } diff --git a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/base/MixinMultiplayerScreen.java b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/base/MixinMultiplayerScreen.java index 2a1cd68d..5d7c5259 100644 --- a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/base/MixinMultiplayerScreen.java +++ b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/base/MixinMultiplayerScreen.java @@ -1,7 +1,7 @@ package de.florianmichael.viafabricplus.injection.mixin.base; import de.florianmichael.viafabricplus.screen.ProtocolSelectionScreen; -import de.florianmichael.viafabricplus.value.ValueHolder; +import de.florianmichael.viafabricplus.setting.groups.GeneralSettings; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.screen.multiplayer.MultiplayerScreen; import net.minecraft.client.gui.widget.ButtonWidget; @@ -22,7 +22,7 @@ public class MixinMultiplayerScreen extends Screen { public void addProtocolSelectionButton(CallbackInfo ci) { ButtonWidget.Builder builder = ButtonWidget.builder(Text.literal("ViaFabricPlus"), button -> ProtocolSelectionScreen.open(this)); - final int orientation = ValueHolder.mainButtonOrientation.getIndex(); + final int orientation = GeneralSettings.getClassWrapper().mainButtonOrientation.getIndex(); switch (orientation) { case 0 -> builder = builder.position(0, 0); case 1 -> builder = builder.position(width - 98, 0); diff --git a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/base/MixinOptionsScreen.java b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/base/MixinOptionsScreen.java index a5d800f9..ef31f494 100644 --- a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/base/MixinOptionsScreen.java +++ b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/base/MixinOptionsScreen.java @@ -1,6 +1,6 @@ package de.florianmichael.viafabricplus.injection.mixin.base; -import de.florianmichael.viafabricplus.screen.ValuesScreen; +import de.florianmichael.viafabricplus.screen.settings.ValuesScreen; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.screen.option.OptionsScreen; import net.minecraft.client.gui.widget.ButtonWidget; diff --git a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/MixinCamera.java b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/MixinCamera.java index 0b8f3e80..cca44bcf 100644 --- a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/MixinCamera.java +++ b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/MixinCamera.java @@ -1,6 +1,6 @@ package de.florianmichael.viafabricplus.injection.mixin.fixes; -import de.florianmichael.viafabricplus.value.ValueHolder; +import de.florianmichael.viafabricplus.setting.groups.DebugSettings; import net.minecraft.client.render.Camera; import net.minecraft.entity.Entity; import net.minecraft.entity.player.PlayerEntity; @@ -25,7 +25,7 @@ public class MixinCamera { @Inject(method = "update", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/Camera;setPos(DDD)V", shift = At.Shift.BEFORE)) public void onUpdateHeight(BlockView area, Entity focusedEntity, boolean thirdPerson, boolean inverseView, float tickDelta, CallbackInfo ci) { - if (!ValueHolder.replaceSneaking.getValue() && ValueHolder.sneakInstant.getValue()) { + if (!DebugSettings.getClassWrapper().replaceSneaking.getValue() && DebugSettings.getClassWrapper().sneakInstant.getValue()) { cameraY = lastCameraY = focusedEntity.getStandingEyeHeight(); } } @@ -34,14 +34,14 @@ public class MixinCamera { public void onUpdateEyeHeight(CallbackInfo ci) { if (this.focusedEntity == null) return; - if (ValueHolder.replaceSneaking.getValue()) { + if (DebugSettings.getClassWrapper().replaceSneaking.getValue()) { ci.cancel(); this.lastCameraY = this.cameraY; if (this.focusedEntity instanceof PlayerEntity player && !player.isSleeping()) { if (player.isSneaking()) { cameraY = 1.54F; - } else if (!ValueHolder.longSneaking.getValue()) { + } else if (!DebugSettings.getClassWrapper().longSneaking.getValue()) { cameraY = 1.62F; } else if (cameraY < 1.62F) { float delta = 1.62F - cameraY; diff --git a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/MixinMinecraftClient.java b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/MixinMinecraftClient.java index b9f9a177..3aeb7142 100644 --- a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/MixinMinecraftClient.java +++ b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/MixinMinecraftClient.java @@ -2,7 +2,7 @@ package de.florianmichael.viafabricplus.injection.mixin.fixes; import de.florianmichael.viafabricplus.definition.v1_12_2.SyncInputExecutor; import de.florianmichael.viafabricplus.definition.v1_8_x.InventoryPacketSender; -import de.florianmichael.viafabricplus.value.ValueHolder; +import de.florianmichael.viafabricplus.setting.groups.DebugSettings; import de.florianmichael.vialoadingbase.ViaLoadingBase; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; import net.minecraft.client.MinecraftClient; @@ -76,7 +76,7 @@ public abstract class MixinMinecraftClient { @Inject(method = "tick", at = @At(value = "FIELD", target = "Lnet/minecraft/client/MinecraftClient;currentScreen:Lnet/minecraft/client/gui/screen/Screen;", ordinal = 4, shift = At.Shift.BEFORE)) public void injectTick(CallbackInfo ci) { - if (!ValueHolder.executeInputsInSync.getValue()) return; + if (!DebugSettings.getClassWrapper().executeInputsInSync.getValue()) return; SyncInputExecutor.callback(); } diff --git a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/MixinPendingUpdateManager.java b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/MixinPendingUpdateManager.java index 196a0b91..1dfb9d2e 100644 --- a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/MixinPendingUpdateManager.java +++ b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/MixinPendingUpdateManager.java @@ -1,6 +1,6 @@ package de.florianmichael.viafabricplus.injection.mixin.fixes; -import de.florianmichael.viafabricplus.value.ValueHolder; +import de.florianmichael.viafabricplus.setting.groups.DebugSettings; import net.minecraft.client.network.PendingUpdateManager; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; @@ -12,7 +12,7 @@ public class MixinPendingUpdateManager { @Inject(method = "incrementSequence", at = @At(value = "FIELD", target = "Lnet/minecraft/client/network/PendingUpdateManager;pendingSequence:Z", shift = At.Shift.BEFORE), cancellable = true) public void injectIncrementSequence(CallbackInfoReturnable cir) { - if (ValueHolder.disableSequencing.getValue()) { + if (DebugSettings.getClassWrapper().disableSequencing.getValue()) { cir.setReturnValue((PendingUpdateManager) (Object) this); } } diff --git a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/entity/MixinClientPlayerEntity.java b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/entity/MixinClientPlayerEntity.java index 163974a1..6c83ab6a 100644 --- a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/entity/MixinClientPlayerEntity.java +++ b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/entity/MixinClientPlayerEntity.java @@ -4,7 +4,7 @@ import com.mojang.authlib.GameProfile; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; import de.florianmichael.viafabricplus.definition.v1_8_x.IdlePacketExecutor; import de.florianmichael.viafabricplus.injection.access.IClientPlayerEntity; -import de.florianmichael.viafabricplus.value.ValueHolder; +import de.florianmichael.viafabricplus.setting.groups.DebugSettings; import de.florianmichael.vialoadingbase.ViaLoadingBase; import net.minecraft.client.MinecraftClient; import net.minecraft.client.input.Input; @@ -94,7 +94,7 @@ public abstract class MixinClientPlayerEntity extends AbstractClientPlayerEntity this.networkHandler.sendPacket(new PlayerMoveC2SPacket.PositionAndOnGround(this.getX(), this.getY(), this.getZ(), this.onGround)); } else if (bl4) { this.networkHandler.sendPacket(new PlayerMoveC2SPacket.LookAndOnGround(this.getYaw(), this.getPitch(), this.onGround)); - } else if (this.lastOnGround != this.onGround || ValueHolder.sendIdlePacket.getValue()) { + } else if (this.lastOnGround != this.onGround || DebugSettings.getClassWrapper().sendIdlePacket.getValue()) { this.networkHandler.sendPacket(new PlayerMoveC2SPacket.OnGroundOnly(this.onGround)); } else { IdlePacketExecutor.skipIdlePacket(); diff --git a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/input/MixinKeyboard.java b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/input/MixinKeyboard.java index 9368808b..b5433ac7 100644 --- a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/input/MixinKeyboard.java +++ b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/input/MixinKeyboard.java @@ -2,14 +2,12 @@ package de.florianmichael.viafabricplus.injection.mixin.fixes.input; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; import de.florianmichael.viafabricplus.definition.v1_12_2.SyncInputExecutor; -import de.florianmichael.viafabricplus.value.ValueHolder; +import de.florianmichael.viafabricplus.setting.groups.DebugSettings; import de.florianmichael.vialoadingbase.ViaLoadingBase; import net.minecraft.client.Keyboard; import net.minecraft.client.MinecraftClient; import net.minecraft.client.network.ClientPlayNetworkHandler; -import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; @@ -18,7 +16,7 @@ public class MixinKeyboard { @Redirect(method = "*", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/MinecraftClient;execute(Ljava/lang/Runnable;)V")) public void redirectSync(MinecraftClient instance, Runnable runnable) { - if (ValueHolder.executeInputsInSync.getValue()) { + if (DebugSettings.getClassWrapper().executeInputsInSync.getValue()) { SyncInputExecutor.trackKeyboardInteraction(runnable); return; } diff --git a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/input/MixinMouse.java b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/input/MixinMouse.java index 4f1f2823..df3fbf77 100644 --- a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/input/MixinMouse.java +++ b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/input/MixinMouse.java @@ -1,12 +1,10 @@ package de.florianmichael.viafabricplus.injection.mixin.fixes.input; import de.florianmichael.viafabricplus.definition.v1_12_2.SyncInputExecutor; -import de.florianmichael.viafabricplus.value.ValueHolder; +import de.florianmichael.viafabricplus.setting.groups.DebugSettings; import net.minecraft.client.MinecraftClient; import net.minecraft.client.Mouse; -import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; @@ -15,7 +13,7 @@ public class MixinMouse { @Redirect(method = { "method_29615", "method_22685", "method_22684" }, at = @At(value = "INVOKE", target = "Lnet/minecraft/client/MinecraftClient;execute(Ljava/lang/Runnable;)V")) public void redirectSync(MinecraftClient instance, Runnable runnable) { - if (ValueHolder.executeInputsInSync.getValue()) { + if (DebugSettings.getClassWrapper().executeInputsInSync.getValue()) { SyncInputExecutor.trackMouseInteraction(runnable); return; } diff --git a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/item/MixinItemCooldownManager.java b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/item/MixinItemCooldownManager.java index 372f5544..23e299d2 100644 --- a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/item/MixinItemCooldownManager.java +++ b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/item/MixinItemCooldownManager.java @@ -1,6 +1,6 @@ package de.florianmichael.viafabricplus.injection.mixin.fixes.item; -import de.florianmichael.viafabricplus.value.ValueHolder; +import de.florianmichael.viafabricplus.setting.groups.DebugSettings; import net.minecraft.entity.player.ItemCooldownManager; import net.minecraft.item.Item; import org.spongepowered.asm.mixin.Mixin; @@ -13,7 +13,7 @@ public class MixinItemCooldownManager { @Inject(method = "set", at = @At("HEAD"), cancellable = true) public void injectSet(Item item, int duration, CallbackInfo ci) { - if (ValueHolder.removeCooldowns.getValue()) { + if (DebugSettings.getClassWrapper().removeCooldowns.getValue()) { ci.cancel(); } } diff --git a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/item/MixinItemGroup_EntriesImpl.java b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/item/MixinItemGroup_EntriesImpl.java index 15ee1b76..93b6bf18 100644 --- a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/item/MixinItemGroup_EntriesImpl.java +++ b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/item/MixinItemGroup_EntriesImpl.java @@ -1,7 +1,7 @@ package de.florianmichael.viafabricplus.injection.mixin.fixes.item; import de.florianmichael.viafabricplus.definition.ItemReleaseVersionDefinition; -import de.florianmichael.viafabricplus.value.ValueHolder; +import de.florianmichael.viafabricplus.setting.groups.GeneralSettings; import net.minecraft.client.MinecraftClient; import net.minecraft.item.Item; import net.minecraft.resource.featuretoggle.FeatureSet; @@ -14,7 +14,7 @@ public class MixinItemGroup_EntriesImpl { @Redirect(method = "add", at = @At(value = "INVOKE", target = "Lnet/minecraft/item/Item;isEnabled(Lnet/minecraft/resource/featuretoggle/FeatureSet;)Z")) public boolean removeUnknownItems(Item instance, FeatureSet featureSet) { - if (!ValueHolder.removeNotAvailableItemsFromCreativeTab.getValue() || MinecraftClient.getInstance().isInSingleplayer()) return instance.isEnabled(featureSet); + if (!GeneralSettings.getClassWrapper().removeNotAvailableItemsFromCreativeTab.getValue() || MinecraftClient.getInstance().isInSingleplayer()) return instance.isEnabled(featureSet); if (ItemReleaseVersionDefinition.getCurrentMap().contains(instance)) return instance.isEnabled(featureSet); return false; diff --git a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/item/MixinItemGroups.java b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/item/MixinItemGroups.java index 2081c762..268d15fb 100644 --- a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/item/MixinItemGroups.java +++ b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/item/MixinItemGroups.java @@ -1,6 +1,6 @@ package de.florianmichael.viafabricplus.injection.mixin.fixes.item; -import de.florianmichael.viafabricplus.value.ValueHolder; +import de.florianmichael.viafabricplus.setting.groups.GeneralSettings; import de.florianmichael.vialoadingbase.ViaLoadingBase; import de.florianmichael.vialoadingbase.platform.ComparableProtocolVersion; import net.minecraft.item.ItemGroups; @@ -23,12 +23,12 @@ public class MixinItemGroups { @Redirect(method = "displayParametersMatch", at = @At(value = "INVOKE", target = "Lnet/minecraft/resource/featuretoggle/FeatureSet;equals(Ljava/lang/Object;)Z")) private static boolean adjustLastVersionMatchCheck(FeatureSet instance, Object o) { - return instance.equals(o) && viafabricplus_version == ViaLoadingBase.getTargetVersion() && viafabricplus_state == ValueHolder.removeNotAvailableItemsFromCreativeTab.getValue(); + return instance.equals(o) && viafabricplus_version == ViaLoadingBase.getTargetVersion() && viafabricplus_state == GeneralSettings.getClassWrapper().removeNotAvailableItemsFromCreativeTab.getValue(); } @Inject(method = "updateDisplayParameters", at = @At(value = "INVOKE", target = "Lnet/minecraft/item/ItemGroups;updateEntries(Lnet/minecraft/resource/featuretoggle/FeatureSet;Z)V", shift = At.Shift.BEFORE)) private static void trackLastVersion(FeatureSet enabledFeatures, boolean operatorEnabled, CallbackInfoReturnable cir) { viafabricplus_version = ViaLoadingBase.getTargetVersion(); - viafabricplus_state = ValueHolder.removeNotAvailableItemsFromCreativeTab.getValue(); + viafabricplus_state = GeneralSettings.getClassWrapper().removeNotAvailableItemsFromCreativeTab.getValue(); } } diff --git a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/screen/merchant/MixinMerchantScreen.java b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/screen/merchant/MixinMerchantScreen.java index 8da67ea3..8f7394b8 100644 --- a/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/screen/merchant/MixinMerchantScreen.java +++ b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/screen/merchant/MixinMerchantScreen.java @@ -1,6 +1,6 @@ package de.florianmichael.viafabricplus.injection.mixin.fixes.screen.merchant; -import de.florianmichael.viafabricplus.value.ValueHolder; +import de.florianmichael.viafabricplus.setting.groups.DebugSettings; import net.minecraft.client.gui.screen.ingame.HandledScreen; import net.minecraft.client.gui.screen.ingame.MerchantScreen; import net.minecraft.entity.player.PlayerInventory; @@ -34,7 +34,7 @@ public abstract class MixinMerchantScreen extends HandledScreen cir) { - if (ViaFabricPlusVisual.replacePetrifiedOakSlab.getValue() && world != null /* world is null in gui rendering */ && stack.isOf(Items.PETRIFIED_OAK_SLAB)) { + if (VisualSettings.getClassWrapper().replacePetrifiedOakSlab.getValue() && world != null /* world is null in gui rendering */ && stack.isOf(Items.PETRIFIED_OAK_SLAB)) { cir.setReturnValue(this.models.getModelManager().getMissingModel()); } } diff --git a/ViaFabricPlus-Visual/src/main/java/de/florianmichael/viafabricplus_visual/injection/mixin/MixinJigsawBlockScreen.java b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/visual/MixinJigsawBlockScreen.java similarity index 84% rename from ViaFabricPlus-Visual/src/main/java/de/florianmichael/viafabricplus_visual/injection/mixin/MixinJigsawBlockScreen.java rename to src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/visual/MixinJigsawBlockScreen.java index 61bd3990..3c2ddc52 100644 --- a/ViaFabricPlus-Visual/src/main/java/de/florianmichael/viafabricplus_visual/injection/mixin/MixinJigsawBlockScreen.java +++ b/src/main/java/de/florianmichael/viafabricplus/injection/mixin/fixes/visual/MixinJigsawBlockScreen.java @@ -1,6 +1,6 @@ -package de.florianmichael.viafabricplus_visual.injection.mixin; +package de.florianmichael.viafabricplus.injection.mixin.fixes.visual; -import de.florianmichael.viafabricplus_visual.ViaFabricPlusVisual; +import de.florianmichael.viafabricplus.setting.groups.VisualSettings; import net.minecraft.block.entity.JigsawBlockEntity; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.screen.ingame.JigsawBlockScreen; @@ -33,7 +33,7 @@ public class MixinJigsawBlockScreen extends Screen { @Inject(method = "init", at = @At("RETURN")) public void injectInit(CallbackInfo ci) { - if (ViaFabricPlusVisual.removeNewerFeaturesFromJigsawScreen.getValue()) { + if (VisualSettings.getClassWrapper().removeNewerFeaturesFromJigsawScreen.getValue()) { nameField.active = false; jointRotationButton.active = false; int index = children().indexOf(jointRotationButton); @@ -45,7 +45,7 @@ public class MixinJigsawBlockScreen extends Screen { @Inject(method = "render", at = @At("HEAD")) public void injectRender(MatrixStack matrices, int mouseX, int mouseY, float delta, CallbackInfo ci) { - if (ViaFabricPlusVisual.removeNewerFeaturesFromJigsawScreen.getValue()) { + if (VisualSettings.getClassWrapper().removeNewerFeaturesFromJigsawScreen.getValue()) { nameField.setText(targetField.getText()); } } diff --git a/src/main/java/de/florianmichael/viafabricplus/integration/ModMenuImpl.java b/src/main/java/de/florianmichael/viafabricplus/integration/ModMenuImpl.java new file mode 100644 index 00000000..a683bf91 --- /dev/null +++ b/src/main/java/de/florianmichael/viafabricplus/integration/ModMenuImpl.java @@ -0,0 +1,17 @@ +package de.florianmichael.viafabricplus.integration; + +import com.terraformersmc.modmenu.api.ConfigScreenFactory; +import com.terraformersmc.modmenu.api.ModMenuApi; +import de.florianmichael.viafabricplus.screen.settings.ValuesScreen; +import net.minecraft.client.gui.screen.Screen; + +public class ModMenuImpl implements ModMenuApi { + + @Override + public ConfigScreenFactory getModConfigScreenFactory() { + return (ConfigScreenFactory) parent -> { + ValuesScreen.INSTANCE.prevScreen = parent; + return ValuesScreen.INSTANCE; + }; + } +} diff --git a/src/main/java/de/florianmichael/viafabricplus/provider/ViaFabricPlusClassicMPPassProvider.java b/src/main/java/de/florianmichael/viafabricplus/provider/ViaFabricPlusClassicMPPassProvider.java index 8b064a5a..418c7f1d 100644 --- a/src/main/java/de/florianmichael/viafabricplus/provider/ViaFabricPlusClassicMPPassProvider.java +++ b/src/main/java/de/florianmichael/viafabricplus/provider/ViaFabricPlusClassicMPPassProvider.java @@ -4,7 +4,7 @@ import com.google.common.hash.Hashing; import com.google.common.io.Resources; import com.viaversion.viaversion.api.Via; import com.viaversion.viaversion.api.connection.UserConnection; -import de.florianmichael.viafabricplus.value.ValueHolder; +import de.florianmichael.viafabricplus.setting.groups.GeneralSettings; import net.raphimc.vialegacy.protocols.classic.protocola1_0_15toc0_28_30.providers.ClassicMPPassProvider; import net.raphimc.vialegacy.protocols.release.protocol1_3_1_2to1_2_4_5.providers.OldAuthProvider; import net.raphimc.vialegacy.protocols.release.protocol1_7_2_5to1_6_4.storage.HandshakeStorage; @@ -18,7 +18,7 @@ public class ViaFabricPlusClassicMPPassProvider extends ClassicMPPassProvider { @Override public String getMpPass(UserConnection user) { - if (ValueHolder.useBetaCraftAuthentication.getValue()) { + if (GeneralSettings.getClassWrapper().useBetaCraftAuthentication.getValue()) { final HandshakeStorage handshakeStorage = user.get(HandshakeStorage.class); return getBetaCraftMpPass(user, user.getProtocolInfo().getUsername(), handshakeStorage.getHostname(), handshakeStorage.getPort()); } else { diff --git a/src/main/java/de/florianmichael/viafabricplus/screen/ProtocolSelectionScreen.java b/src/main/java/de/florianmichael/viafabricplus/screen/ProtocolSelectionScreen.java index f49cc3d5..e3cfcb5e 100644 --- a/src/main/java/de/florianmichael/viafabricplus/screen/ProtocolSelectionScreen.java +++ b/src/main/java/de/florianmichael/viafabricplus/screen/ProtocolSelectionScreen.java @@ -12,7 +12,6 @@ import net.minecraft.client.sound.PositionedSoundInstance; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.sound.SoundEvents; import net.minecraft.text.Text; -import net.minecraft.util.Formatting; import java.awt.*; @@ -89,7 +88,7 @@ public class ProtocolSelectionScreen extends Screen { matrices.push(); matrices.translate(x, y - 1, 0); final TextRenderer textRenderer = MinecraftClient.getInstance().textRenderer; - drawCenteredText(matrices, textRenderer, (isSelected ? Formatting.UNDERLINE : "") + this.protocolVersion.getName(), entryWidth / 2, entryHeight / 2 - textRenderer.fontHeight / 2, isSelected ? Color.GREEN.getRGB() : Color.RED.getRGB()); + drawCenteredText(matrices, textRenderer, this.protocolVersion.getName(), entryWidth / 2, entryHeight / 2 - textRenderer.fontHeight / 2, isSelected ? Color.GREEN.getRGB() : Color.RED.getRGB()); matrices.pop(); } } diff --git a/src/main/java/de/florianmichael/viafabricplus/screen/ValuesScreen.java b/src/main/java/de/florianmichael/viafabricplus/screen/ValuesScreen.java deleted file mode 100644 index 734b022d..00000000 --- a/src/main/java/de/florianmichael/viafabricplus/screen/ValuesScreen.java +++ /dev/null @@ -1,136 +0,0 @@ -package de.florianmichael.viafabricplus.screen; - -import de.florianmichael.viafabricplus.util.ScreenUtil; -import de.florianmichael.viafabricplus.value.AbstractValue; -import de.florianmichael.viafabricplus.value.ValueHolder; -import de.florianmichael.viafabricplus.value.impl.BooleanValue; -import de.florianmichael.viafabricplus.value.impl.ModeValue; -import de.florianmichael.viafabricplus.value.impl.ProtocolSyncBooleanValue; -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.font.TextRenderer; -import net.minecraft.client.gui.screen.Screen; -import net.minecraft.client.gui.widget.AlwaysSelectedEntryListWidget; -import net.minecraft.client.gui.widget.ButtonWidget; -import net.minecraft.client.util.math.MatrixStack; -import net.minecraft.text.Text; -import net.minecraft.util.Formatting; -import org.lwjgl.glfw.GLFW; - -import java.awt.*; -import java.text.Format; -import java.util.Arrays; - -@SuppressWarnings({"DataFlowIssue", "DuplicatedCode"}) -public class ValuesScreen extends Screen { - public final static ValuesScreen INSTANCE = new ValuesScreen(); - public Screen prevScreen; - - protected ValuesScreen() { - super(Text.literal("Values")); - } - - public static void open(final Screen current) { - INSTANCE.prevScreen = current; - MinecraftClient.getInstance().setScreen(INSTANCE); - } - - @Override - protected void init() { - super.init(); - - this.addDrawableChild(new SlotList(this.client, width, height, 3 + 3 /* start offset */ + (textRenderer.fontHeight + 2) * 3 /* title is 2 */, height + 5, (textRenderer.fontHeight + 2) * 2)); - this.addDrawableChild(ButtonWidget.builder(Text.literal("<-"), button -> this.close()).position(0, height - 20).size(20, 20).build()); - } - - @Override - public void render(MatrixStack matrices, int mouseX, int mouseY, float delta) { - super.render(matrices, mouseX, mouseY, delta); - - drawCenteredText(matrices, textRenderer, "Press right mouse button for toggling protocol sync", width / 2, 3, -1); - drawCenteredText(matrices, textRenderer, "Press left mouse button for normal toggling", width / 2, textRenderer.fontHeight + 2 + 3, -1); - drawCenteredText(matrices, textRenderer, "Values that have sync enabled will be toggled depending on the target version.", width / 2, (textRenderer.fontHeight + 2) * 2 + 3, -1); - } - - @Override - public void close() { - client.setScreen(prevScreen); - } - - public static class SlotList extends AlwaysSelectedEntryListWidget { - - public SlotList(MinecraftClient minecraftClient, int width, int height, int top, int bottom, int entryHeight) { - super(minecraftClient, width, height, top, bottom, entryHeight); - - ValueHolder.values.stream().map(ValueSlot::new).forEach(this::addEntry); - } - - @Override - public int getRowWidth() { - return super.getRowWidth() + 140; - } - - @Override - protected int getScrollbarPositionX() { - return this.width - 5; - } - } - - public static class ValueSlot extends AlwaysSelectedEntryListWidget.Entry { - private final AbstractValue value; - - public ValueSlot(AbstractValue value) { - this.value = value; - } - - @Override - public Text getNarration() { - return Text.literal(this.value.getName()); - } - - @Override - public boolean mouseClicked(double mouseX, double mouseY, int button) { - if (value instanceof BooleanValue booleanValue) { - booleanValue.setValue(!booleanValue.getValue()); - ScreenUtil.playClickSound(); - } - if (value instanceof ProtocolSyncBooleanValue protocolSyncBooleanValue) { - if (button == GLFW.GLFW_MOUSE_BUTTON_RIGHT) { - protocolSyncBooleanValue.setSyncWithProtocol(!protocolSyncBooleanValue.isSyncWithProtocol()); - ScreenUtil.playClickSound(); - } - if (button == GLFW.GLFW_MOUSE_BUTTON_LEFT) { - protocolSyncBooleanValue.setValue(!protocolSyncBooleanValue.getValue()); - ScreenUtil.playClickSound(); - } - } - if (value instanceof ModeValue modeValue) { - final int currentIndex = Arrays.stream(modeValue.getOptions()).toList().indexOf(modeValue.value) + 1; - modeValue.setValue(currentIndex > modeValue.getOptions().length - 1 ? 0 : currentIndex); - ScreenUtil.playClickSound(); - } - return super.mouseClicked(mouseX, mouseY, button); - } - - @Override - public void render(MatrixStack matrices, int index, int y, int x, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean hovered, float tickDelta) { - matrices.push(); - matrices.translate(x, y, 0); - fill(matrices, 0, 0, entryWidth, entryHeight, Integer.MIN_VALUE); - final TextRenderer textRenderer = MinecraftClient.getInstance().textRenderer; - if (value instanceof BooleanValue booleanValue) { - final boolean isEnabled = booleanValue.getValue(); - drawStringWithShadow(matrices, textRenderer, booleanValue.getName(), 3, entryHeight / 2 - textRenderer.fontHeight / 2, isEnabled ? Color.GREEN.getRGB() : Color.RED.getRGB()); - } else if (value instanceof ProtocolSyncBooleanValue protocolSyncBooleanValue) { - final boolean isEnabled = protocolSyncBooleanValue.getValue(); - Color color = isEnabled ? Color.GREEN : Color.RED; - if (protocolSyncBooleanValue.isSyncWithProtocol()) { - drawStringWithShadow(matrices, textRenderer, "Sync", entryWidth - textRenderer.getWidth("Sync") - 3, entryHeight / 2 - textRenderer.fontHeight / 2, Color.ORANGE.getRGB()); - } - drawStringWithShadow(matrices, textRenderer, protocolSyncBooleanValue.getName(), 3, entryHeight / 2 - textRenderer.fontHeight / 2, color.getRGB()); - } else if (value instanceof ModeValue modeValue) { - drawStringWithShadow(matrices, textRenderer, modeValue.getName() + ": " + Formatting.GOLD + modeValue.getValue(), 3, entryHeight / 2 - textRenderer.fontHeight / 2, -1); - } - matrices.pop(); - } - } -} diff --git a/src/main/java/de/florianmichael/viafabricplus/screen/settings/DummySlot.java b/src/main/java/de/florianmichael/viafabricplus/screen/settings/DummySlot.java new file mode 100644 index 00000000..aa7ff281 --- /dev/null +++ b/src/main/java/de/florianmichael/viafabricplus/screen/settings/DummySlot.java @@ -0,0 +1,7 @@ +package de.florianmichael.viafabricplus.screen.settings; + +import net.minecraft.client.gui.widget.AlwaysSelectedEntryListWidget; + +public abstract class DummySlot extends AlwaysSelectedEntryListWidget.Entry { + +} diff --git a/src/main/java/de/florianmichael/viafabricplus/screen/settings/SettingSlot.java b/src/main/java/de/florianmichael/viafabricplus/screen/settings/SettingSlot.java new file mode 100644 index 00000000..7d30ad4d --- /dev/null +++ b/src/main/java/de/florianmichael/viafabricplus/screen/settings/SettingSlot.java @@ -0,0 +1,68 @@ +package de.florianmichael.viafabricplus.screen.settings; + +import de.florianmichael.viafabricplus.setting.AbstractSetting; +import de.florianmichael.viafabricplus.setting.groups.GeneralSettings; +import de.florianmichael.viafabricplus.setting.impl.BooleanSetting; +import de.florianmichael.viafabricplus.setting.impl.ModeSetting; +import de.florianmichael.viafabricplus.setting.impl.ProtocolSyncBooleanSetting; +import de.florianmichael.viafabricplus.util.ScreenUtil; +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.font.TextRenderer; +import net.minecraft.client.gui.DrawableHelper; +import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.text.Text; +import net.minecraft.util.Formatting; + +import java.awt.*; +import java.util.Arrays; + +public class SettingSlot extends DummySlot { + private final AbstractSetting value; + + public SettingSlot(AbstractSetting value) { + this.value = value; + } + + @Override + public Text getNarration() { + return Text.literal(this.value.getName()); + } + + @Override + public boolean mouseClicked(double mouseX, double mouseY, int button) { + if (value instanceof BooleanSetting booleanValue) { + booleanValue.setValue(!booleanValue.getValue()); + ScreenUtil.playClickSound(); + } + if (value instanceof ModeSetting modeValue) { + final int currentIndex = Arrays.stream(modeValue.getOptions()).toList().indexOf(modeValue.value) + 1; + modeValue.setValue(currentIndex > modeValue.getOptions().length - 1 ? 0 : currentIndex); + ScreenUtil.playClickSound(); + } + return super.mouseClicked(mouseX, mouseY, button); + } + + @Override + public void render(MatrixStack matrices, int index, int y, int x, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean hovered, float tickDelta) { + matrices.push(); + matrices.translate(x, y, 0); + DrawableHelper.fill(matrices, 0, 0, entryWidth - 4 /* int i = this.left + (this.width - entryWidth) / 2; int j = this.left + (this.width + entryWidth) / 2; */, entryHeight, Integer.MIN_VALUE); + final TextRenderer textRenderer = MinecraftClient.getInstance().textRenderer; + if (value instanceof BooleanSetting booleanValue) { + final String text = booleanValue.getValue() ? "On" : "Off"; + Color color = booleanValue.getValue() ? Color.GREEN : Color.RED; + + final int length = textRenderer.drawWithShadow(matrices, Formatting.GRAY + booleanValue.getName(), 3, entryHeight / 2F - textRenderer.fontHeight / 2F, -1); + if (value instanceof ProtocolSyncBooleanSetting protocolSyncBooleanValue) { + textRenderer.drawWithShadow(matrices, "(" + protocolSyncBooleanValue.getProtocolRange().toString() + ")", length + 2, entryHeight / 2F - textRenderer.fontHeight / 2F, -1); + if (GeneralSettings.getClassWrapper().automaticallyChangeValuesBasedOnTheCurrentVersion.getValue()) color = color.darker().darker(); + } + + textRenderer.drawWithShadow(matrices, text, entryWidth - textRenderer.getWidth(text) - 3 - 3, entryHeight / 2F - textRenderer.fontHeight / 2F, color.getRGB()); + } else if (value instanceof ModeSetting modeValue) { + textRenderer.drawWithShadow(matrices, Formatting.GRAY + modeValue.getName(), 3, entryHeight / 2F - textRenderer.fontHeight / 2F, -1); + textRenderer.drawWithShadow(matrices, modeValue.getValue(), entryWidth - textRenderer.getWidth(modeValue.getValue()) - 3 - 3, entryHeight / 2F - textRenderer.fontHeight / 2F, -1); + } + matrices.pop(); + } +} diff --git a/src/main/java/de/florianmichael/viafabricplus/screen/settings/TitleSlot.java b/src/main/java/de/florianmichael/viafabricplus/screen/settings/TitleSlot.java new file mode 100644 index 00000000..f546d177 --- /dev/null +++ b/src/main/java/de/florianmichael/viafabricplus/screen/settings/TitleSlot.java @@ -0,0 +1,30 @@ +package de.florianmichael.viafabricplus.screen.settings; + +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.font.TextRenderer; +import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.text.Text; +import net.minecraft.util.Formatting; + +public class TitleSlot extends DummySlot { + private final String name; + + public TitleSlot(String name) { + this.name = name; + } + + @Override + public Text getNarration() { + return Text.literal(this.name); + } + + @Override + public void render(MatrixStack matrices, int index, int y, int x, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean hovered, float tickDelta) { + final TextRenderer textRenderer = MinecraftClient.getInstance().textRenderer; + + matrices.push(); + matrices.translate(x, y, 0); + textRenderer.drawWithShadow(matrices, Formatting.BOLD + this.name, 3, entryHeight / 2F - textRenderer.fontHeight / 2F, -1); + matrices.pop(); + } +} diff --git a/src/main/java/de/florianmichael/viafabricplus/screen/settings/ValuesScreen.java b/src/main/java/de/florianmichael/viafabricplus/screen/settings/ValuesScreen.java new file mode 100644 index 00000000..7ed73323 --- /dev/null +++ b/src/main/java/de/florianmichael/viafabricplus/screen/settings/ValuesScreen.java @@ -0,0 +1,71 @@ +package de.florianmichael.viafabricplus.screen.settings; + +import de.florianmichael.viafabricplus.ViaFabricPlus; +import de.florianmichael.viafabricplus.setting.AbstractSetting; +import de.florianmichael.viafabricplus.setting.SettingGroup; +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.gui.screen.Screen; +import net.minecraft.client.gui.widget.AlwaysSelectedEntryListWidget; +import net.minecraft.client.gui.widget.ButtonWidget; +import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.text.Text; + +import java.awt.*; + +@SuppressWarnings({"DataFlowIssue", "DuplicatedCode"}) +public class ValuesScreen extends Screen { + public final static ValuesScreen INSTANCE = new ValuesScreen(); + public Screen prevScreen; + + protected ValuesScreen() { + super(Text.literal("Values")); + } + + @Override + protected void init() { + super.init(); + + this.addDrawableChild(new SlotList(this.client, width, height, 3 + 3 /* start offset */ + (textRenderer.fontHeight + 2) * 3 /* title is 2 */, height + 5, (textRenderer.fontHeight + 2) * 2)); + this.addDrawableChild(ButtonWidget.builder(Text.literal("<-"), button -> this.close()).position(0, height - 20).size(20, 20).build()); + } + + @Override + public void render(MatrixStack matrices, int mouseX, int mouseY, float delta) { + super.render(matrices, mouseX, mouseY, delta); + + matrices.push(); + matrices.scale(2F, 2F, 2F); + drawCenteredText(matrices, textRenderer, "ViaFabricPlus", width / 4, 3, Color.ORANGE.getRGB()); + matrices.pop(); + drawCenteredText(matrices, textRenderer, "https://github.com/FlorianMichael/ViaFabricPlus", width / 2, (textRenderer.fontHeight + 2) * 2 + 3, -1); + } + + @Override + public void close() { + client.setScreen(prevScreen); + } + + public static class SlotList extends AlwaysSelectedEntryListWidget { + + public SlotList(MinecraftClient minecraftClient, int width, int height, int top, int bottom, int entryHeight) { + super(minecraftClient, width, height, top, bottom, entryHeight); + + for (SettingGroup group : ViaFabricPlus.getClassWrapper().getSettingGroups()) { + this.addEntry(new TitleSlot(group.getName())); + for (AbstractSetting setting : group.getSettings()) { + this.addEntry(new SettingSlot(setting)); + } + } + } + + @Override + public int getRowWidth() { + return super.getRowWidth() + 140; + } + + @Override + protected int getScrollbarPositionX() { + return this.width - 5; + } + } +} diff --git a/src/main/java/de/florianmichael/viafabricplus/value/AbstractValue.java b/src/main/java/de/florianmichael/viafabricplus/setting/AbstractSetting.java similarity index 72% rename from src/main/java/de/florianmichael/viafabricplus/value/AbstractValue.java rename to src/main/java/de/florianmichael/viafabricplus/setting/AbstractSetting.java index 3bde3bd6..d781109d 100644 --- a/src/main/java/de/florianmichael/viafabricplus/value/AbstractValue.java +++ b/src/main/java/de/florianmichael/viafabricplus/setting/AbstractSetting.java @@ -1,20 +1,20 @@ -package de.florianmichael.viafabricplus.value; +package de.florianmichael.viafabricplus.setting; import com.google.gson.JsonObject; -public abstract class AbstractValue { +public abstract class AbstractSetting { private final String name; private final T defaultValue; public T value; - public AbstractValue(final String name, final T defaultValue) { + public AbstractSetting(final SettingGroup parent, final String name, final T defaultValue) { this.name = name; this.defaultValue = defaultValue; this.value = defaultValue; - ValueHolder.values.add(this); + parent.getSettings().add(this); } public abstract void write(final JsonObject object); diff --git a/src/main/java/de/florianmichael/viafabricplus/setting/SettingGroup.java b/src/main/java/de/florianmichael/viafabricplus/setting/SettingGroup.java new file mode 100644 index 00000000..c17e4862 --- /dev/null +++ b/src/main/java/de/florianmichael/viafabricplus/setting/SettingGroup.java @@ -0,0 +1,21 @@ +package de.florianmichael.viafabricplus.setting; + +import java.util.ArrayList; +import java.util.List; + +public class SettingGroup { + private final List> settings = new ArrayList<>(); + private final String name; + + public SettingGroup(String name) { + this.name = name; + } + + public List> getSettings() { + return settings; + } + + public String getName() { + return name; + } +} diff --git a/src/main/java/de/florianmichael/viafabricplus/setting/groups/DebugSettings.java b/src/main/java/de/florianmichael/viafabricplus/setting/groups/DebugSettings.java new file mode 100644 index 00000000..40a8c0a1 --- /dev/null +++ b/src/main/java/de/florianmichael/viafabricplus/setting/groups/DebugSettings.java @@ -0,0 +1,37 @@ +package de.florianmichael.viafabricplus.setting.groups; + +import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; +import de.florianmichael.viafabricplus.platform.ProtocolRange; +import de.florianmichael.viafabricplus.setting.SettingGroup; +import de.florianmichael.viafabricplus.setting.impl.ProtocolSyncBooleanSetting; +import net.raphimc.vialegacy.api.LegacyProtocolVersion; + +public class DebugSettings extends SettingGroup { + public static final DebugSettings self = new DebugSettings(); + + // 1.19 -> 1.18.2 + public final ProtocolSyncBooleanSetting disableSequencing = new ProtocolSyncBooleanSetting(this, "Disable sequencing", ProtocolRange.andOlder(ProtocolVersion.v1_18_2)); + + // 1.14 -> 1.13.2 + public final ProtocolSyncBooleanSetting smoothOutMerchantScreens = new ProtocolSyncBooleanSetting(this, "Smooth out merchant screens", ProtocolRange.andOlder(ProtocolVersion.v1_13_2)); + + // 1.13 -> 1.12.2 + public final ProtocolSyncBooleanSetting executeInputsInSync = new ProtocolSyncBooleanSetting(this, "Execute inputs in sync", ProtocolRange.andOlder(ProtocolVersion.v1_12_2)); + public final ProtocolSyncBooleanSetting sneakInstant = new ProtocolSyncBooleanSetting(this, "Sneak instant", new ProtocolRange(ProtocolVersion.v1_12_2, ProtocolVersion.v1_8)); + + // 1.9 -> 1.8.x + public final ProtocolSyncBooleanSetting removeCooldowns = new ProtocolSyncBooleanSetting(this, "Remove cooldowns", ProtocolRange.andOlder(ProtocolVersion.v1_8)); + public final ProtocolSyncBooleanSetting sendIdlePacket = new ProtocolSyncBooleanSetting(this, "Send idle packet", new ProtocolRange(ProtocolVersion.v1_8, LegacyProtocolVersion.r1_3_1tor1_3_2)); + + // 1.8.x -> 1.7.6 + public final ProtocolSyncBooleanSetting replaceSneaking = new ProtocolSyncBooleanSetting(this, "Replace sneaking", ProtocolRange.andOlder(ProtocolVersion.v1_7_6)); + public final ProtocolSyncBooleanSetting longSneaking = new ProtocolSyncBooleanSetting(this, "Long sneaking", ProtocolRange.andOlder(ProtocolVersion.v1_7_6)); + + public DebugSettings() { + super("Debug"); + } + + public static DebugSettings getClassWrapper() { + return DebugSettings.self; + } +} diff --git a/src/main/java/de/florianmichael/viafabricplus/setting/groups/GeneralSettings.java b/src/main/java/de/florianmichael/viafabricplus/setting/groups/GeneralSettings.java new file mode 100644 index 00000000..0e957b30 --- /dev/null +++ b/src/main/java/de/florianmichael/viafabricplus/setting/groups/GeneralSettings.java @@ -0,0 +1,22 @@ +package de.florianmichael.viafabricplus.setting.groups; + +import de.florianmichael.viafabricplus.setting.SettingGroup; +import de.florianmichael.viafabricplus.setting.impl.BooleanSetting; +import de.florianmichael.viafabricplus.setting.impl.ModeSetting; + +public class GeneralSettings extends SettingGroup { + private final static GeneralSettings self = new GeneralSettings(); + + public final ModeSetting mainButtonOrientation = new ModeSetting(this, "Main button orientation", "Left; Top", "Right; Top", "Left; Bottom", "Right: Bottom"); + public final BooleanSetting removeNotAvailableItemsFromCreativeTab = new BooleanSetting(this, "Remove not available items from creative tab", true); + public final BooleanSetting automaticallyChangeValuesBasedOnTheCurrentVersion = new BooleanSetting(this, "Automatically change Settings based on the current version", true); + public final BooleanSetting useBetaCraftAuthentication = new BooleanSetting(this, "Use BetaCraft authentication", true); + + public GeneralSettings() { + super("General"); + } + + public static GeneralSettings getClassWrapper() { + return GeneralSettings.self; + } +} diff --git a/src/main/java/de/florianmichael/viafabricplus/setting/groups/VisualSettings.java b/src/main/java/de/florianmichael/viafabricplus/setting/groups/VisualSettings.java new file mode 100644 index 00000000..454fc651 --- /dev/null +++ b/src/main/java/de/florianmichael/viafabricplus/setting/groups/VisualSettings.java @@ -0,0 +1,38 @@ +package de.florianmichael.viafabricplus.setting.groups; + +import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; +import de.florianmichael.viafabricplus.platform.ProtocolRange; +import de.florianmichael.viafabricplus.setting.SettingGroup; +import de.florianmichael.viafabricplus.setting.impl.ProtocolSyncBooleanSetting; +import net.raphimc.vialegacy.api.LegacyProtocolVersion; + +public class VisualSettings extends SettingGroup { + public final static VisualSettings self = new VisualSettings(); + + // 1.19.2 -> 1.19 + public final ProtocolSyncBooleanSetting disableSecureChatWarning = new ProtocolSyncBooleanSetting(this, "Disable secure chat warning", ProtocolRange.andOlder(ProtocolVersion.v1_19)); + + // 1.19 -> 1.18.2 + public final ProtocolSyncBooleanSetting hideSignatureIndicator = new ProtocolSyncBooleanSetting(this, "Hide signature indicator", ProtocolRange.andOlder(ProtocolVersion.v1_18_2)); + + // 1.16 -> 1.15.2 + public final ProtocolSyncBooleanSetting removeNewerFeaturesFromJigsawScreen = new ProtocolSyncBooleanSetting(this, "Remove newer features from Jigsaw screen", ProtocolRange.andOlder(ProtocolVersion.v1_15_2)); + + // 1.13 -> 1.12.2 + public final ProtocolSyncBooleanSetting replacePetrifiedOakSlab = new ProtocolSyncBooleanSetting(this, "Replace petrified oak slab", new ProtocolRange(ProtocolVersion.v1_12_2, LegacyProtocolVersion.r1_3_1tor1_3_2)); + + // 1.9 -> 1.8.x + public final ProtocolSyncBooleanSetting emulateArmorHud = new ProtocolSyncBooleanSetting(this, "Emulate Armor hud", ProtocolRange.andOlder(ProtocolVersion.v1_8)); + public final ProtocolSyncBooleanSetting removeNewerFeaturesFromCommandBlockScreen = new ProtocolSyncBooleanSetting(this, "Remove newer features from Command block screen", ProtocolRange.andOlder(ProtocolVersion.v1_8)); + + // a1_0_15 -> c0_28toc0_30 + public final ProtocolSyncBooleanSetting replaceCreativeInventory = new ProtocolSyncBooleanSetting(this, "Replace creative inventory", ProtocolRange.andOlder(LegacyProtocolVersion.c0_28toc0_30)); + + public VisualSettings() { + super("Visual"); + } + + public static VisualSettings getClassWrapper() { + return VisualSettings.self; + } +} diff --git a/src/main/java/de/florianmichael/viafabricplus/setting/impl/BooleanSetting.java b/src/main/java/de/florianmichael/viafabricplus/setting/impl/BooleanSetting.java new file mode 100644 index 00000000..609f5323 --- /dev/null +++ b/src/main/java/de/florianmichael/viafabricplus/setting/impl/BooleanSetting.java @@ -0,0 +1,24 @@ +package de.florianmichael.viafabricplus.setting.impl; + +import com.google.gson.JsonObject; +import de.florianmichael.viafabricplus.setting.AbstractSetting; +import de.florianmichael.viafabricplus.setting.SettingGroup; + +public class BooleanSetting extends AbstractSetting { + + public BooleanSetting(SettingGroup parent, String name, Boolean defaultValue) { + super(parent, name, defaultValue); + } + + @Override + public void write(JsonObject object) { + object.addProperty(getName(), getValue()); + } + + @Override + public void read(JsonObject object) { + if (!object.has(getName())) return; + + setValue(object.get(getName()).getAsBoolean()); + } +} diff --git a/src/main/java/de/florianmichael/viafabricplus/value/impl/ModeValue.java b/src/main/java/de/florianmichael/viafabricplus/setting/impl/ModeSetting.java similarity index 65% rename from src/main/java/de/florianmichael/viafabricplus/value/impl/ModeValue.java rename to src/main/java/de/florianmichael/viafabricplus/setting/impl/ModeSetting.java index 59784ce8..44d51d3d 100644 --- a/src/main/java/de/florianmichael/viafabricplus/value/impl/ModeValue.java +++ b/src/main/java/de/florianmichael/viafabricplus/setting/impl/ModeSetting.java @@ -1,15 +1,16 @@ -package de.florianmichael.viafabricplus.value.impl; +package de.florianmichael.viafabricplus.setting.impl; import com.google.gson.JsonObject; -import de.florianmichael.viafabricplus.value.AbstractValue; +import de.florianmichael.viafabricplus.setting.AbstractSetting; +import de.florianmichael.viafabricplus.setting.SettingGroup; import java.util.Arrays; -public class ModeValue extends AbstractValue { +public class ModeSetting extends AbstractSetting { private final String[] options; - public ModeValue(String name, String... options) { - super(name, options[0]); + public ModeSetting(SettingGroup parent, String name, String... options) { + super(parent, name, options[0]); this.options = options; } diff --git a/src/main/java/de/florianmichael/viafabricplus/setting/impl/ProtocolSyncBooleanSetting.java b/src/main/java/de/florianmichael/viafabricplus/setting/impl/ProtocolSyncBooleanSetting.java new file mode 100644 index 00000000..ae0c7d97 --- /dev/null +++ b/src/main/java/de/florianmichael/viafabricplus/setting/impl/ProtocolSyncBooleanSetting.java @@ -0,0 +1,40 @@ +package de.florianmichael.viafabricplus.setting.impl; + +import com.google.gson.JsonObject; +import de.florianmichael.viafabricplus.platform.ProtocolRange; +import de.florianmichael.viafabricplus.setting.SettingGroup; +import de.florianmichael.viafabricplus.setting.groups.GeneralSettings; +import de.florianmichael.vialoadingbase.ViaLoadingBase; + +public class ProtocolSyncBooleanSetting extends BooleanSetting { + private final ProtocolRange protocolRange; + + public ProtocolSyncBooleanSetting(SettingGroup parent, String name, ProtocolRange protocolRange) { + super(parent, name, true); + + this.protocolRange = protocolRange; + } + + @Override + public void write(JsonObject object) { + object.addProperty(getName(), getValue()); + } + + @Override + public void read(JsonObject object) { + if (!object.has(getName())) return; + + setValue(object.get(getName()).getAsBoolean()); + } + + @Override + public Boolean getValue() { + if (GeneralSettings.getClassWrapper().automaticallyChangeValuesBasedOnTheCurrentVersion.getValue()) return this.getProtocolRange().contains(ViaLoadingBase.getTargetVersion()); + + return super.getValue(); + } + + public ProtocolRange getProtocolRange() { + return protocolRange; + } +} diff --git a/src/main/java/de/florianmichael/viafabricplus/util/SavingSystem.java b/src/main/java/de/florianmichael/viafabricplus/util/SettingsSave.java similarity index 63% rename from src/main/java/de/florianmichael/viafabricplus/util/SavingSystem.java rename to src/main/java/de/florianmichael/viafabricplus/util/SettingsSave.java index d89968fd..864f4518 100644 --- a/src/main/java/de/florianmichael/viafabricplus/util/SavingSystem.java +++ b/src/main/java/de/florianmichael/viafabricplus/util/SettingsSave.java @@ -4,38 +4,42 @@ import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.JsonObject; import de.florianmichael.viafabricplus.ViaFabricPlus; -import de.florianmichael.viafabricplus.value.AbstractValue; -import de.florianmichael.viafabricplus.value.ValueHolder; +import de.florianmichael.viafabricplus.setting.AbstractSetting; +import de.florianmichael.viafabricplus.setting.SettingGroup; import de.florianmichael.vialoadingbase.ViaLoadingBase; import de.florianmichael.vialoadingbase.platform.InternalProtocolList; import java.io.*; -public class SavingSystem { +public class SettingsSave { public static final Gson GSON = new GsonBuilder().setPrettyPrinting().create(); public final static File CONFIG_FILE = new File(ViaFabricPlus.RUN_DIRECTORY, "settings.json"); - public static void setup() throws FileNotFoundException { + public static void load(final ViaFabricPlus viaFabricPlus) throws Exception { if (CONFIG_FILE.exists()) { final JsonObject parentNode = GSON.fromJson(new FileReader(CONFIG_FILE), JsonObject.class).getAsJsonObject(); if (parentNode.has("protocol")) { ViaLoadingBase.getClassWrapper().reload(InternalProtocolList.fromProtocolId(parentNode.get("protocol").getAsInt())); } - for (AbstractValue value : ValueHolder.values) { - value.read(parentNode); + for (SettingGroup group : viaFabricPlus.getSettingGroups()) { + for (AbstractSetting setting : group.getSettings()) { + setting.read(parentNode); + } } } } - public static void save() throws IOException { + public static void save(final ViaFabricPlus viaFabricPlus) throws IOException { CONFIG_FILE.delete(); CONFIG_FILE.createNewFile(); try (final FileWriter fw = new FileWriter(CONFIG_FILE)) { final JsonObject parentNode = new JsonObject(); parentNode.addProperty("protocol", ViaLoadingBase.getTargetVersion().getVersion()); - for (AbstractValue value : ValueHolder.values) { - value.write(parentNode); + for (SettingGroup group : viaFabricPlus.getSettingGroups()) { + for (AbstractSetting setting : group.getSettings()) { + setting.write(parentNode); + } } fw.write(GSON.toJson(parentNode)); fw.flush(); diff --git a/src/main/java/de/florianmichael/viafabricplus/value/ValueHolder.java b/src/main/java/de/florianmichael/viafabricplus/value/ValueHolder.java deleted file mode 100644 index e6e00001..00000000 --- a/src/main/java/de/florianmichael/viafabricplus/value/ValueHolder.java +++ /dev/null @@ -1,40 +0,0 @@ -package de.florianmichael.viafabricplus.value; - -import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import de.florianmichael.viafabricplus.platform.ProtocolRange; -import de.florianmichael.viafabricplus.value.impl.BooleanValue; -import de.florianmichael.viafabricplus.value.impl.ModeValue; -import de.florianmichael.viafabricplus.value.impl.ProtocolSyncBooleanValue; -import net.raphimc.vialegacy.api.LegacyProtocolVersion; - -import java.util.ArrayList; -import java.util.List; - -public class ValueHolder { - public final static List> values = new ArrayList<>(); - - // General settings - public static final ModeValue mainButtonOrientation = new ModeValue("Main button orientation", "Left; Top", "Right; Top", "Left; Bottom", "Right: Bottom"); - public static final BooleanValue removeNotAvailableItemsFromCreativeTab = new BooleanValue("Remove not available items from creative tab", true); - - // 1.19 -> 1.18.2 - public static final ProtocolSyncBooleanValue disableSequencing = new ProtocolSyncBooleanValue("Disable sequencing", ProtocolRange.andOlder(ProtocolVersion.v1_18_2)); - - // 1.14 -> 1.13.2 - public static final ProtocolSyncBooleanValue smoothOutMerchantScreens = new ProtocolSyncBooleanValue("Smooth out merchant screens", ProtocolRange.andOlder(ProtocolVersion.v1_13_2)); - - // 1.13 -> 1.12.2 - public static final ProtocolSyncBooleanValue executeInputsInSync = new ProtocolSyncBooleanValue("Execute inputs in sync", ProtocolRange.andOlder(ProtocolVersion.v1_12_2)); - public static final ProtocolSyncBooleanValue sneakInstant = new ProtocolSyncBooleanValue("Sneak instant", new ProtocolRange(ProtocolVersion.v1_12_2, ProtocolVersion.v1_8)); - - // 1.9 -> 1.8.x - public static final ProtocolSyncBooleanValue removeCooldowns = new ProtocolSyncBooleanValue("Remove cooldowns", ProtocolRange.andOlder(ProtocolVersion.v1_8)); - public static final ProtocolSyncBooleanValue sendIdlePacket = new ProtocolSyncBooleanValue("Send idle packet", new ProtocolRange(ProtocolVersion.v1_8, LegacyProtocolVersion.r1_3_1tor1_3_2)); - - // 1.8.x -> 1.7.6 - public static final ProtocolSyncBooleanValue replaceSneaking = new ProtocolSyncBooleanValue("Replace sneaking", ProtocolRange.andOlder(ProtocolVersion.v1_7_6)); - public static final ProtocolSyncBooleanValue longSneaking = new ProtocolSyncBooleanValue("Long sneaking", ProtocolRange.andOlder(ProtocolVersion.v1_7_6)); - - // a1_0_15 -> c0_28toc0_30 - public static final ProtocolSyncBooleanValue useBetaCraftAuthentication = new ProtocolSyncBooleanValue("Use BetaCraft authentication", ProtocolRange.andOlder(LegacyProtocolVersion.c0_28toc0_30)); -} diff --git a/src/main/java/de/florianmichael/viafabricplus/value/impl/BooleanValue.java b/src/main/java/de/florianmichael/viafabricplus/value/impl/BooleanValue.java deleted file mode 100644 index 15eecaa1..00000000 --- a/src/main/java/de/florianmichael/viafabricplus/value/impl/BooleanValue.java +++ /dev/null @@ -1,23 +0,0 @@ -package de.florianmichael.viafabricplus.value.impl; - -import com.google.gson.JsonObject; -import de.florianmichael.viafabricplus.value.AbstractValue; - -public class BooleanValue extends AbstractValue { - - public BooleanValue(String name, Boolean defaultValue) { - super(name, defaultValue); - } - - @Override - public void write(JsonObject object) { - object.addProperty(getName(), getValue()); - } - - @Override - public void read(JsonObject object) { - if (!object.has(getName())) return; - - setValue(object.get(getName()).getAsBoolean()); - } -} diff --git a/src/main/java/de/florianmichael/viafabricplus/value/impl/ProtocolSyncBooleanValue.java b/src/main/java/de/florianmichael/viafabricplus/value/impl/ProtocolSyncBooleanValue.java deleted file mode 100644 index d4ec89b5..00000000 --- a/src/main/java/de/florianmichael/viafabricplus/value/impl/ProtocolSyncBooleanValue.java +++ /dev/null @@ -1,56 +0,0 @@ -package de.florianmichael.viafabricplus.value.impl; - -import com.google.gson.JsonObject; -import de.florianmichael.viafabricplus.platform.ProtocolRange; -import de.florianmichael.viafabricplus.value.AbstractValue; -import de.florianmichael.vialoadingbase.ViaLoadingBase; - -public class ProtocolSyncBooleanValue extends AbstractValue { - private final ProtocolRange protocolRange; - - private boolean syncWithProtocol; - - public ProtocolSyncBooleanValue(String name, ProtocolRange protocolRange) { - super(name + " (" + protocolRange.toString() + ")", true); - - this.protocolRange = protocolRange; - this.syncWithProtocol = true; - } - - @Override - public void write(JsonObject object) { - final JsonObject valueNode = new JsonObject(); - - valueNode.addProperty("value", this.getValue()); - valueNode.addProperty("sync-with-protocol", this.isSyncWithProtocol()); - - object.add(getName(), valueNode); - } - - @Override - public void read(JsonObject object) { - if (!object.has(getName())) return; - final JsonObject valueNode = object.get(getName()).getAsJsonObject(); - - setValue(valueNode.get("value").getAsBoolean()); - setSyncWithProtocol(valueNode.get("sync-with-protocol").getAsBoolean()); - } - - @Override - public Boolean getValue() { - if (this.syncWithProtocol) return protocolRange.contains(ViaLoadingBase.getTargetVersion()); - return super.getValue(); - } - - public boolean isSyncWithProtocol() { - return syncWithProtocol; - } - - public void setSyncWithProtocol(boolean syncWithProtocol) { - this.syncWithProtocol = syncWithProtocol; - } - - public ProtocolRange getProtocolRange() { - return protocolRange; - } -} diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 14eeb2b2..c38bc81d 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -18,6 +18,11 @@ "license": "GPL-v3", "icon": "assets/viafabricplus/icon.png", "environment": "*", + "entrypoints": { + "modmenu": [ + "de.florianmichael.viafabricplus.integration.ModMenuImpl" + ] + }, "mixins": [ "viafabricplus.mixins.json" ], diff --git a/src/main/resources/viafabricplus.mixins.json b/src/main/resources/viafabricplus.mixins.json index 7f4c89b7..9816eb54 100644 --- a/src/main/resources/viafabricplus.mixins.json +++ b/src/main/resources/viafabricplus.mixins.json @@ -133,6 +133,14 @@ "base.MixinOptionsScreen", "bridge.MixinConnectScreen", "bridge.MixinDownloadingTerrainScreen", - "fixes.screen.MixinChatScreen" + "fixes.screen.MixinChatScreen", + "fixes.visual.MixinChatHud", + "fixes.visual.MixinChatScreen", + "fixes.visual.MixinClientPlayerEntity", + "fixes.visual.MixinClientPlayNetworkHandler", + "fixes.visual.MixinCommandBlockScreen", + "fixes.visual.MixinCreativeInventoryScreen", + "fixes.visual.MixinItemRenderer", + "fixes.visual.MixinJigsawBlockScreen" ] }