diff --git a/build.gradle b/build.gradle index f1451f7..9ccba51 100755 --- a/build.gradle +++ b/build.gradle @@ -1,6 +1,6 @@ // Based on https://github.com/OnyxStudios/Cardinal-Components-API/blob/1.17/build.gradle plugins { - id "fabric-loom" version "0.12-SNAPSHOT" apply false + id "fabric-loom" version "1.1-SNAPSHOT" apply false id "com.matthewprenger.cursegradle" version "1.4.0" id "maven-publish" id "java-library" @@ -134,6 +134,7 @@ dependencies { modImplementation ("maven.modrinth:entitytexturefeatures:${project.entitytexturefeatures_version}") modImplementation ("maven.modrinth:cem:${project.cem_version}") modImplementation "com.github.Lortseam.completeconfig:base:${project.complete_config_version}" + modImplementation ("maven.modrinth:exordium:${project.exordium_version}") modImplementation("org.aperlambda:lambdajcommon:1.8.1") { exclude group: 'com.google.code.gson' diff --git a/gradle.properties b/gradle.properties index fae19f3..036c581 100755 --- a/gradle.properties +++ b/gradle.properties @@ -3,33 +3,34 @@ org.gradle.jvmargs=-Xmx4G # Fabric Properties # check these on https://fabricmc.net/use - minecraft_version=1.19.3 - yarn_mappings=1.19.3+build.5 - loader_version=0.14.12 + minecraft_version=1.19.4-rc2 + yarn_mappings=1.19.4-rc2+build.1 + loader_version=0.14.17 # Mod Properties - mod_version = 1.4.2-1.19.3 + mod_version = 1.5.0+1.19.4 maven_group = net.puzzlemc archives_base_name = puzzle # Dependencies # currently not on the main fabric site, check on the maven: https://maven.fabricmc.net/net/fabricmc/fabric-api/fabric-api - fabric_version=0.70.0+1.19.3 - mod_menu_version = 5.0.2 + fabric_version=0.75.3+1.19.4 + mod_menu_version = 6.1.0-beta.3 + midnightlib_version=1.2.1-fabric cull_leaves_version = 3.0.2-fabric ldl_version = 2.2.0+1.19.3 lbg_version = 1.3.0+1.19 - iris_version = 1.19.3-v1.4.6 + iris_version = 1.5.2+1.19.3 continuity_version = 2.0.0+1.19 animatica_version = 0.5+1.19 colormatic_version = 3.1.2 borderless_mining_version = 1.1.6+1.19.3 - dynamic_fps_version = 2.2.0 + dynamic_fps_version = v2.2.0 toml4j_version = 0.7.2 cit_resewn_version = 1.1.1+1.19 cem_version = 0.7.1-1.19.3 complete_config_version = 2.2.0 spruceui_version=4.1.0+1.19.3 - midnightlib_version=1.1.0-fabric entitytexturefeatures_version=4.2.0.1.fabric.1.19.3 + exordium_version=1.0.3-1.19.4 diff --git a/puzzle-base/src/main/java/net/puzzlemc/core/config/PuzzleConfig.java b/puzzle-base/src/main/java/net/puzzlemc/core/config/PuzzleConfig.java index 59d3ee6..6945fa6 100755 --- a/puzzle-base/src/main/java/net/puzzlemc/core/config/PuzzleConfig.java +++ b/puzzle-base/src/main/java/net/puzzlemc/core/config/PuzzleConfig.java @@ -6,19 +6,19 @@ import java.util.List; public class PuzzleConfig extends MidnightConfig { - @Entry public static List disabledIntegrations = new ArrayList<>(); - @Entry public static boolean enablePuzzleButton = true; - @Entry public static boolean debugMessages = false; + @Entry(category = "gui", name = "Disabled integrations") public static List disabledIntegrations = new ArrayList<>(); + @Entry(category = "gui", name = "Enable Puzzle button") public static boolean enablePuzzleButton = true; + @Entry(category = "debug", name = "Enable debug messages") public static boolean debugMessages = false; - @Entry public static boolean checkUpdates = true; - @Entry public static boolean showPuzzleInfo = true; - @Entry public static boolean resourcepackSplashScreen = true; - @Entry public static boolean unlimitedRotations = true; - @Entry public static boolean biggerModels = true; + @Entry(category = "debug", name = "puzzle.option.check_for_updates") public static boolean checkUpdates = true; + @Entry(category = "gui", name = "puzzle.option.show_version_info") public static boolean showPuzzleInfo = true; + @Entry(category = "features", name = "puzzle.option.resourcepack_splash_screen") public static boolean resourcepackSplashScreen = true; + @Entry(category = "features", name = "puzzle.option.unlimited_model_rotations") public static boolean unlimitedRotations = true; + @Entry(category = "features", name = "puzzle.option.bigger_custom_models") public static boolean biggerModels = true; - @Entry public static int backgroundColor = 15675965; - @Entry public static int progressBarColor = 16777215; - @Entry public static int progressBarBackgroundColor = 15675965; - @Entry public static int progressFrameColor = 16777215; - @Entry public static boolean disableBlend = false; + @Entry(category = "features", name = "Splash Background Color") public static int backgroundColor = 15675965; + @Entry(category = "features", name = "Splash Progress Bar Color") public static int progressBarColor = 16777215; + @Entry(category = "features", name = "Splash Progress Bar Background Color") public static int progressBarBackgroundColor = 15675965; + @Entry(category = "features", name = "Splash Progress Bar Frame Color") public static int progressFrameColor = 16777215; + @Entry(category = "features", name = "puzzle.option.better_splash_screen_blend") public static boolean disableBlend = false; } diff --git a/puzzle-base/src/main/java/net/puzzlemc/core/mixin/MixinTitleScreen.java b/puzzle-base/src/main/java/net/puzzlemc/core/mixin/MixinTitleScreen.java index bc00bad..800b9bb 100755 --- a/puzzle-base/src/main/java/net/puzzlemc/core/mixin/MixinTitleScreen.java +++ b/puzzle-base/src/main/java/net/puzzlemc/core/mixin/MixinTitleScreen.java @@ -1,59 +1,45 @@ package net.puzzlemc.core.mixin; -import net.fabricmc.loader.api.FabricLoader; +import net.minecraft.client.gui.widget.PressableTextWidget; import net.puzzlemc.core.PuzzleCore; import net.puzzlemc.core.config.PuzzleConfig; import net.puzzlemc.core.util.UpdateChecker; import net.minecraft.client.gui.screen.*; -import net.minecraft.client.util.math.MatrixStack; import net.minecraft.text.Text; import net.minecraft.util.Util; -import net.minecraft.util.math.MathHelper; -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.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import java.util.Objects; @Mixin(TitleScreen.class) public abstract class MixinTitleScreen extends Screen { - - @Shadow @Final private boolean doBackgroundFade; - @Shadow private long backgroundFadeStart; - private Text puzzleText; - private int puzzleTextWidth; - private int yOffset; + private final String versionText = PuzzleCore.version.replace("+", " for "); protected MixinTitleScreen(Text title) { super(title); } @Inject(at = @At("TAIL"), method = "init") private void puzzle$init(CallbackInfo ci) { - yOffset = 20; - if (FabricLoader.getInstance().isModLoaded("dashloader")) yOffset = yOffset + 10; + int yOffset = 20; + Text puzzleText; if (UpdateChecker.isUpToDate) { - puzzleText = Text.of(PuzzleCore.version); + puzzleText = Text.literal(versionText); } else { - puzzleText = Text.translatable("").append(Text.of(PuzzleCore.version + " | ")).append(Text.translatable("puzzle.text.update_available")); - this.puzzleTextWidth = this.textRenderer.getWidth(puzzleText); + puzzleText = Text.literal("").append(Text.of(versionText+" | ")).append(Text.translatable("puzzle.text.update_available")); } - } - - @Inject(at = @At("TAIL"), method = "render") - private void puzzle$render(MatrixStack matrices, int mouseX, int mouseY, float delta, CallbackInfo ci) { if (PuzzleConfig.showPuzzleInfo) { - float f = this.doBackgroundFade ? (float) (Util.getMeasuringTimeMs() - this.backgroundFadeStart) / 1000.0F : 1.0F; - float g = this.doBackgroundFade ? MathHelper.clamp(f - 1.0F, 0.0F, 1.0F) : 1.0F; - int l = MathHelper.ceil(g * 255.0F) << 24; - textRenderer.drawWithShadow(matrices, puzzleText,2,this.height - yOffset, 16777215 | l); - if (mouseX > 2 && mouseX < 2 + this.puzzleTextWidth && mouseY > this.height - yOffset && mouseY < this.height - yOffset + 10) { - fill(matrices, 2, this.height - yOffset + 9, 2 + this.puzzleTextWidth, this.height - yOffset + 10, 16777215 | l); - } + PressableTextWidget text = this.addDrawableChild(new PressableTextWidget(2, this.height - 12 - yOffset, this.textRenderer.getWidth(puzzleText), 10, puzzleText, (button) -> { + if (Objects.requireNonNull(this.client).options.getChatLinksPrompt().getValue()) { + this.client.setScreen(new ConfirmLinkScreen(this::confirmLink, PuzzleCore.updateURL, true)); + } else { + Util.getOperatingSystem().open(PuzzleCore.updateURL); + } + }, this.textRenderer)); + if (UpdateChecker.isUpToDate) text.active = false; } } @@ -63,16 +49,4 @@ private void confirmLink(boolean open) { } Objects.requireNonNull(this.client).setScreen(this); } - - @Inject(at = @At("HEAD"), method = "mouseClicked",cancellable = true) - private void puzzle$mouseClicked(double mouseX, double mouseY, int button, CallbackInfoReturnable cir) { - if (mouseX > 2 && mouseX < (double)(2 + this.puzzleTextWidth) && mouseY > (double)(this.height - yOffset) && mouseY < (double)this.height - yOffset + 10) { - if (Objects.requireNonNull(this.client).options.getChatLinksPrompt().getValue()) { - this.client.setScreen(new ConfirmLinkScreen(this::confirmLink, PuzzleCore.updateURL, true)); - } else { - Util.getOperatingSystem().open(PuzzleCore.updateURL); - } - cir.setReturnValue(false); - } - } } diff --git a/puzzle-base/src/main/java/net/puzzlemc/core/util/UpdateChecker.java b/puzzle-base/src/main/java/net/puzzlemc/core/util/UpdateChecker.java index 4167665..e4e9b59 100755 --- a/puzzle-base/src/main/java/net/puzzlemc/core/util/UpdateChecker.java +++ b/puzzle-base/src/main/java/net/puzzlemc/core/util/UpdateChecker.java @@ -20,7 +20,7 @@ public class UpdateChecker { private static final Gson GSON = new Gson(); - private static final String minecraftVersion = MinecraftClient.getInstance().getGame().getVersion().getId(); + private static final String minecraftVersion = MinecraftClient.getInstance().getGameVersion(); public static final Logger logger = LogManager.getLogger(PuzzleCore.name); public static final Type UPDATE_TYPE_TOKEN = new TypeToken>(){}.getType(); diff --git a/puzzle-gui/build.gradle b/puzzle-gui/build.gradle index 7731672..b88ce77 100755 --- a/puzzle-gui/build.gradle +++ b/puzzle-gui/build.gradle @@ -48,6 +48,7 @@ dependencies { modImplementation ("maven.modrinth:entitytexturefeatures:${project.entitytexturefeatures_version}") modImplementation ("maven.modrinth:cem:${project.cem_version}") modImplementation "com.github.Lortseam.completeconfig:base:${project.complete_config_version}" + modImplementation ("maven.modrinth:exordium:${project.exordium_version}") modImplementation("org.aperlambda:lambdajcommon:1.8.1") { exclude group: 'com.google.code.gson' diff --git a/puzzle-gui/src/main/java/net/puzzlemc/gui/PuzzleClient.java b/puzzle-gui/src/main/java/net/puzzlemc/gui/PuzzleClient.java index 4b8afff..190fc3a 100755 --- a/puzzle-gui/src/main/java/net/puzzlemc/gui/PuzzleClient.java +++ b/puzzle-gui/src/main/java/net/puzzlemc/gui/PuzzleClient.java @@ -4,10 +4,14 @@ import dev.lambdaurora.lambdabettergrass.LambdaBetterGrass; import dev.lambdaurora.lambdynlights.DynamicLightsConfig; import dev.lambdaurora.lambdynlights.LambDynLights; +import dev.tr7zw.exordium.Config; +import dev.tr7zw.exordium.ExordiumMod; +import dev.tr7zw.exordium.ExordiumModBase; import dynamicfps.DynamicFPSConfig; import dynamicfps.DynamicFPSMod; import eu.midnightdust.core.MidnightLibClient; import eu.midnightdust.cullleaves.config.CullLeavesConfig; +import eu.midnightdust.lib.util.PlatformFunctions; import io.github.kvverti.colormatic.Colormatic; import io.github.kvverti.colormatic.ColormaticConfigController; import link.infra.borderlessmining.config.ConfigHandler; @@ -54,7 +58,7 @@ public void onInitializeClient() { client.setScreen(PuzzleConfig.getScreen(client.currentScreen, "puzzle")); })); PuzzleApi.addToResourceOptions(new PuzzleWidget(Text.of("Puzzle"))); - if (FabricLoader.getInstance().isModLoaded("puzzle-splashscreen") && !PuzzleConfig.disabledIntegrations.contains("puzzle-splashscreen")) { + if (isActive("puzzle-splashscreen")) { PuzzleApi.addToResourceOptions(new PuzzleWidget(Text.translatable("puzzle.option.resourcepack_splash_screen"), (button) -> button.setMessage(PuzzleConfig.resourcepackSplashScreen ? YES : NO), (button) -> { PuzzleConfig.resourcepackSplashScreen = !PuzzleConfig.resourcepackSplashScreen; PuzzleConfig.write(id); @@ -62,7 +66,7 @@ public void onInitializeClient() { MinecraftClient.getInstance().getTextureManager().registerTexture(PuzzleSplashScreen.LOGO, new PuzzleSplashScreen.LogoTexture(PuzzleSplashScreen.LOGO)); })); } - if (FabricLoader.getInstance().isModLoaded("puzzle-models") && !PuzzleConfig.disabledIntegrations.contains("puzzle-models")) { + if (isActive("puzzle-models")) { PuzzleApi.addToResourceOptions(new PuzzleWidget(Text.translatable("puzzle.option.unlimited_model_rotations"), (button) -> button.setMessage(PuzzleConfig.unlimitedRotations ? YES : NO), (button) -> { PuzzleConfig.unlimitedRotations = !PuzzleConfig.unlimitedRotations; PuzzleConfig.write(id); @@ -72,7 +76,7 @@ public void onInitializeClient() { PuzzleConfig.write(id); })); } - if (FabricLoader.getInstance().isModLoaded("cullleaves") && !PuzzleConfig.disabledIntegrations.contains("cullleaves")) { + if (isActive("cullleaves")) { PuzzleApi.addToPerformanceOptions(new PuzzleWidget(Text.of("CullLeaves"))); PuzzleApi.addToPerformanceOptions(new PuzzleWidget(Text.translatable("cullleaves.puzzle.option.enabled"), (button) -> button.setMessage(CullLeavesConfig.enabled ? YES : NO), (button) -> { CullLeavesConfig.enabled = !CullLeavesConfig.enabled; @@ -80,7 +84,7 @@ public void onInitializeClient() { MinecraftClient.getInstance().worldRenderer.reload(); })); } - if (FabricLoader.getInstance().isModLoaded("colormatic") && !PuzzleConfig.disabledIntegrations.contains("colormatic")) { + if (isActive("colormatic")) { PuzzleApi.addToResourceOptions(new PuzzleWidget(Text.of("Colormatic"))); ColormaticConfig colormaticConfig = Colormatic.config(); PuzzleApi.addToResourceOptions(new PuzzleWidget(Text.translatable("colormatic.config.option.clearSky"), (button) -> button.setMessage(colormaticConfig.clearSky ? YES : NO), (button) -> { @@ -112,7 +116,7 @@ public void onInitializeClient() { catch (NumberFormatException ignored) {} })); } - if (FabricLoader.getInstance().isModLoaded("dynamicfps") && !PuzzleConfig.disabledIntegrations.contains("dynamicfps")) { + if (isActive("dynamicfps")) { PuzzleApi.addToPerformanceOptions(new PuzzleWidget(Text.of("Dynamic FPS"))); DynamicFPSConfig fpsConfig = DynamicFPSMod.config; PuzzleApi.addToPerformanceOptions(new PuzzleWidget(Text.translatable("config.dynamicfps.reduce_when_unfocused"), (button) -> button.setMessage(fpsConfig.reduceFPSWhenUnfocused ? YES : NO), (button) -> { @@ -155,7 +159,7 @@ public void onInitializeClient() { finally {fpsConfig.save();} })); } - if (FabricLoader.getInstance().isModLoaded("borderlessmining") && !PuzzleConfig.disabledIntegrations.contains("borderlessmining")) { + if (isActive("borderlessmining")) { PuzzleApi.addToMiscOptions(new PuzzleWidget(Text.of("Borderless Mining"))); ConfigHandler bmConfig = ConfigHandler.getInstance(); PuzzleApi.addToMiscOptions(new PuzzleWidget(Text.translatable("config.borderlessmining.general.enabled"), (button) -> button.setMessage(bmConfig.isEnabledOrPending() ? YES : NO), (button) -> { @@ -170,13 +174,13 @@ public void onInitializeClient() { })); } } - if (FabricLoader.getInstance().isModLoaded("iris") && !PuzzleConfig.disabledIntegrations.contains("iris")) { + if (isActive("iris")) { IrisCompat.init(); } } public static boolean lateInitDone = false; public static void lateInit() { // Some mods are initialized after Puzzle, so we can't access them in our ClientModInitializer - if (FabricLoader.getInstance().isModLoaded("lambdynlights") && !PuzzleConfig.disabledIntegrations.contains("lambdynlights")) { + if (isActive("lambdynlights")) { DynamicLightsConfig ldlConfig = LambDynLights.get().config; PuzzleApi.addToGraphicsOptions(new PuzzleWidget(Text.of("LambDynamicLights"))); @@ -187,7 +191,7 @@ public static void lateInit() { // Some mods are initialized after Puzzle, so we PuzzleApi.addToGraphicsOptions(new PuzzleWidget(Text.translatable("").append("DynLights: ").append(Text.translatable("block.minecraft.tnt")), (button) -> button.setMessage(ldlConfig.getTntLightingMode().getTranslatedText()), (button) -> ldlConfig.setTntLightingMode(ldlConfig.getTntLightingMode().next()))); PuzzleApi.addToGraphicsOptions(new PuzzleWidget(Text.translatable("").append("DynLights: ").append(Text.translatable("lambdynlights.option.light_sources.water_sensitive_check")), (button) -> button.setMessage(ldlConfig.getWaterSensitiveCheck().get() ? YES : NO), (button) -> ldlConfig.getWaterSensitiveCheck().set(!ldlConfig.getWaterSensitiveCheck().get()))); } - if (FabricLoader.getInstance().isModLoaded("citresewn") && !PuzzleConfig.disabledIntegrations.contains("citresewn") && CITResewnConfig.INSTANCE != null) { + if (isActive("citresewn") && CITResewnConfig.INSTANCE != null) { PuzzleApi.addToResourceOptions(new PuzzleWidget(Text.of("CIT Resewn"))); CITResewnConfig citConfig = CITResewnConfig.INSTANCE; PuzzleApi.addToResourceOptions(new PuzzleWidget(Text.translatable("config.citresewn.enabled.title"), (button) -> button.setMessage(citConfig.enabled ? YES : NO), (button) -> { @@ -217,13 +221,13 @@ public static void lateInit() { // Some mods are initialized after Puzzle, so we citConfig.write(); })); } - if (FabricLoader.getInstance().isModLoaded("lambdabettergrass") && !PuzzleConfig.disabledIntegrations.contains("lambdabettergrass")) { + if (isActive("lambdabettergrass")) { LBGConfig lbgConfig = LambdaBetterGrass.get().config; PuzzleApi.addToGraphicsOptions(new PuzzleWidget(Text.of("LambdaBetterGrass"))); PuzzleApi.addToGraphicsOptions(new PuzzleWidget(Text.translatable("lambdabettergrass.option.mode"), (button) -> button.setMessage(lbgConfig.getMode().getTranslatedText()), (button) -> lbgConfig.setMode(lbgConfig.getMode().next()))); PuzzleApi.addToGraphicsOptions(new PuzzleWidget(Text.translatable("lambdabettergrass.option.better_snow"), (button) -> button.setMessage(lbgConfig.hasBetterLayer() ? YES : NO), (button) -> lbgConfig.setBetterLayer(!lbgConfig.hasBetterLayer()))); } - if (FabricLoader.getInstance().isModLoaded("cem") && FabricLoader.getInstance().isModLoaded("completeconfig") && !PuzzleConfig.disabledIntegrations.contains("cem")) { + if (isActive("cem") && FabricLoader.getInstance().isModLoaded("completeconfig")) { PuzzleApi.addToResourceOptions(new PuzzleWidget(Text.of("Custom Entity Models"))); CemConfig cemConfig = (CemConfig) CemConfigFairy.getConfig(); CemOptions cemOptions = CemConfigFairy.getConfig(); @@ -240,7 +244,7 @@ public static void lateInit() { // Some mods are initialized after Puzzle, so we cemConfig.save(); })); } - if (FabricLoader.getInstance().isModLoaded("continuity") && !PuzzleConfig.disabledIntegrations.contains("continuity")) { + if (isActive("continuity")) { PuzzleApi.addToResourceOptions(new PuzzleWidget(Text.of("Continuity"))); ContinuityConfig contConfig = ContinuityConfig.INSTANCE; contConfig.getOptionMapView().forEach((s, option) -> { @@ -255,7 +259,7 @@ public static void lateInit() { // Some mods are initialized after Puzzle, so we } catch (Exception ignored) {} }); } - if (FabricLoader.getInstance().isModLoaded("entity_texture_features") && !PuzzleConfig.disabledIntegrations.contains("entity_texture_features")) { + if (isActive("entity_texture_features")) { PuzzleApi.addToResourceOptions(new PuzzleWidget(Text.translatable("config.entity_texture_features.title"))); ETFConfig etfConfig = ETFApi.getETFConfigObject; PuzzleApi.addToResourceOptions(new PuzzleWidget(Text.translatable("config.entity_texture_features.enable_custom_textures.title"), (button) -> button.setMessage(etfConfig.enableCustomTextures ? YES : NO), (button) -> { @@ -280,6 +284,38 @@ public static void lateInit() { // Some mods are initialized after Puzzle, so we ETFApi.saveETFConfigChangesAndResetETF(); })); } + if (isActive("exordium")) { + PuzzleApi.addToPerformanceOptions(new PuzzleWidget(Text.translatable("text.exordium.title"))); + Config exordiumConfig = ExordiumModBase.instance.config; + PuzzleApi.addToPerformanceOptions(new PuzzleWidget(Text.translatable("text.exordium.enableGui"), (button) -> button.setMessage(exordiumConfig.enabledGui ? YES : NO), (button) -> { + exordiumConfig.enabledGui = !exordiumConfig.enabledGui; + ExordiumModBase.instance.writeConfig(); + })); + PuzzleApi.addToPerformanceOptions(new PuzzleWidget(5, 60, Text.translatable("text.exordium.targetFramerateGui"), () -> exordiumConfig.targetFPSIngameGui, (button) -> button.setMessage(Text.literal(exordiumConfig.targetFPSIngameGui+"")), (slider) -> { + exordiumConfig.targetFPSIngameGui = slider.getInt(); + ExordiumModBase.instance.writeConfig(); + })); + PuzzleApi.addToPerformanceOptions(new PuzzleWidget(Text.translatable("text.exordium.enabledGuiAnimationSpeedup"), (button) -> button.setMessage(exordiumConfig.enabledGuiAnimationSpeedup ? YES : NO), (button) -> { + exordiumConfig.enabledGuiAnimationSpeedup = !exordiumConfig.enabledGuiAnimationSpeedup; + ExordiumModBase.instance.writeConfig(); + })); + PuzzleApi.addToPerformanceOptions(new PuzzleWidget(30, 120, Text.translatable("text.exordium.targetFPSIngameGuiAnimated"), () -> exordiumConfig.targetFPSIngameGuiAnimated, (button) -> button.setMessage(Text.literal(exordiumConfig.targetFPSIngameGuiAnimated+"")), (slider) -> { + exordiumConfig.targetFPSIngameGuiAnimated = slider.getInt(); + ExordiumModBase.instance.writeConfig(); + })); + PuzzleApi.addToPerformanceOptions(new PuzzleWidget(Text.translatable("text.exordium.enableNametagScreenBuffering"), (button) -> button.setMessage(exordiumConfig.enableNametagScreenBuffering ? YES : NO), (button) -> { + exordiumConfig.enableNametagScreenBuffering = !exordiumConfig.enableNametagScreenBuffering; + ExordiumModBase.instance.writeConfig(); + })); + PuzzleApi.addToPerformanceOptions(new PuzzleWidget(30, 80, Text.translatable("text.exordium.targetFPSNameTags"), () -> exordiumConfig.targetFPSNameTags, (button) -> button.setMessage(Text.literal(exordiumConfig.targetFPSNameTags+"")), (slider) -> { + exordiumConfig.targetFPSNameTags = slider.getInt(); + ExordiumModBase.instance.writeConfig(); + })); + PuzzleApi.addToPerformanceOptions(new PuzzleWidget(Text.translatable("text.exordium.enableSignBuffering"), (button) -> button.setMessage(exordiumConfig.enableSignBuffering ? YES : NO), (button) -> { + exordiumConfig.enableSignBuffering = !exordiumConfig.enableSignBuffering; + ExordiumModBase.instance.writeConfig(); + })); + } lateInitDone = true; } public static Text message(CITResewnConfig config) { @@ -307,4 +343,7 @@ public static Text message(CITResewnConfig config) { return (Text.translatable("config.citresewn.cache_ms.ticks.any", ticks)).formatted(color); } } + public static boolean isActive(String modid) { + return PlatformFunctions.isModLoaded(modid) && !PuzzleConfig.disabledIntegrations.contains(modid); + } } diff --git a/puzzle-gui/src/main/java/net/puzzlemc/gui/screen/PuzzleOptionsScreen.java b/puzzle-gui/src/main/java/net/puzzlemc/gui/screen/PuzzleOptionsScreen.java index d06de45..834f4c2 100755 --- a/puzzle-gui/src/main/java/net/puzzlemc/gui/screen/PuzzleOptionsScreen.java +++ b/puzzle-gui/src/main/java/net/puzzlemc/gui/screen/PuzzleOptionsScreen.java @@ -1,20 +1,33 @@ package net.puzzlemc.gui.screen; +import com.google.common.collect.Lists; +import net.minecraft.client.gui.tab.GridScreenTab; +import net.minecraft.client.gui.tab.Tab; +import net.minecraft.client.gui.tab.TabManager; +import net.minecraft.client.gui.widget.TabNavigationWidget; import net.minecraft.screen.ScreenTexts; import net.minecraft.text.Text; import net.puzzlemc.gui.PuzzleApi; import net.puzzlemc.gui.PuzzleClient; -import net.puzzlemc.gui.screen.page.GraphicsPage; -import net.puzzlemc.gui.screen.page.MiscPage; -import net.puzzlemc.gui.screen.page.PerformancePage; -import net.puzzlemc.gui.screen.page.ResourcesPage; +import net.puzzlemc.gui.screen.widget.PuzzleOptionListWidget; +import net.puzzlemc.gui.screen.widget.PuzzleWidget; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.widget.ButtonWidget; import net.minecraft.client.util.math.MatrixStack; +import java.util.List; import java.util.Objects; public class PuzzleOptionsScreen extends Screen { + public PuzzleOptionListWidget list; + public List tooltip = null; + public TabManager tabManager = new TabManager(a -> {}, a -> {}); + public Tab prevTab; + public TabNavigationWidget tabNavigation; + public static Text graphicsTab = Text.translatable("puzzle.page.graphics"); + public static Text miscTab = Text.translatable("puzzle.page.misc"); + public static Text performanceTab = Text.translatable("puzzle.page.performance"); + public static Text resourcesTab = Text.translatable("puzzle.page.resources"); public PuzzleOptionsScreen(Screen parent) { super(Text.translatable("puzzle.screen.title")); @@ -24,25 +37,67 @@ public PuzzleOptionsScreen(Screen parent) { @Override protected void init() { - super.init(); if (!PuzzleClient.lateInitDone) PuzzleClient.lateInit(); - GraphicsPage graphicsPage = new GraphicsPage(this); - MiscPage miscPage = new MiscPage(this); - PerformancePage performancePage = new PerformancePage(this); - ResourcesPage resourcesPage = new ResourcesPage(this); - - if (!PuzzleApi.GRAPHICS_OPTIONS.isEmpty()) this.addDrawableChild(ButtonWidget.builder(graphicsPage.getTitle().copy().append("..."), (button) -> Objects.requireNonNull(client).setScreen(graphicsPage)).dimensions(this.width / 2 - 155, this.height / 6 + 48 - 6, 150, 20).build()); - if (!PuzzleApi.RESOURCE_OPTIONS.isEmpty()) this.addDrawableChild(ButtonWidget.builder(resourcesPage.getTitle().copy().append("..."), (button) -> Objects.requireNonNull(client).setScreen(resourcesPage)).dimensions(this.width / 2 + 5, this.height / 6 + 48 - 6, 150, 20).build()); - if (!PuzzleApi.PERFORMANCE_OPTIONS.isEmpty()) this.addDrawableChild(ButtonWidget.builder(performancePage.getTitle().copy().append("..."), (button) -> Objects.requireNonNull(client).setScreen(performancePage)).dimensions(this.width / 2 - 155, this.height / 6 + 72 - 6, 150, 20).build()); - if (!PuzzleApi.MISC_OPTIONS.isEmpty()) this.addDrawableChild(ButtonWidget.builder(miscPage.getTitle().copy().append("..."), (button) -> Objects.requireNonNull(client).setScreen(miscPage)).dimensions(this.width / 2 + 5, this.height / 6 + 72 - 6, 150, 20).build()); - this.addDrawableChild(ButtonWidget.builder(ScreenTexts.DONE, (button) -> Objects.requireNonNull(client).setScreen(parent)).dimensions(this.width / 2 - 100, this.height / 6 + 168, 200, 20).build()); + + List tabs = Lists.newArrayList(); + if (!PuzzleApi.GRAPHICS_OPTIONS.isEmpty()) tabs.add(new GridScreenTab(graphicsTab)); + if (!PuzzleApi.RESOURCE_OPTIONS.isEmpty()) tabs.add(new GridScreenTab(resourcesTab)); + if (!PuzzleApi.PERFORMANCE_OPTIONS.isEmpty()) tabs.add(new GridScreenTab(performanceTab)); + if (!PuzzleApi.MISC_OPTIONS.isEmpty()) tabs.add(new GridScreenTab(miscTab)); + + tabNavigation = TabNavigationWidget.builder(tabManager, this.width).tabs(tabs.toArray(new Tab[0])).build(); + if (tabs.size() > 1) this.addDrawableChild(tabNavigation); + tabNavigation.selectTab(0, false); + tabNavigation.init(); + prevTab = tabManager.getCurrentTab(); + this.addDrawableChild(tabNavigation); + this.list = new PuzzleOptionListWidget(this.client, this.width, this.height, 32, this.height - 32, 25); + fillList(); + this.addSelectableChild(this.list); + + super.init(); + + this.addDrawableChild(ButtonWidget.builder(ScreenTexts.DONE, (button) -> Objects.requireNonNull(client).setScreen(parent)).dimensions(this.width / 2 - 100, this.height - 28, 200, 20).build()); + } + private void fillList() { + List options = List.of(); + if (tabManager.getCurrentTab() == null) return; + else if (tabManager.getCurrentTab().getTitle().equals(graphicsTab)) options = PuzzleApi.GRAPHICS_OPTIONS; + else if (tabManager.getCurrentTab().getTitle().equals(miscTab)) options = PuzzleApi.MISC_OPTIONS; + else if (tabManager.getCurrentTab().getTitle().equals(performanceTab)) options = PuzzleApi.PERFORMANCE_OPTIONS; + else if (tabManager.getCurrentTab().getTitle().equals(resourcesTab)) options = PuzzleApi.RESOURCE_OPTIONS; + list.addAll(options); + } + @Override + public boolean keyPressed(int keyCode, int scanCode, int modifiers) { + if (this.tabNavigation.trySwitchTabsWithKey(keyCode)) return true; + return super.keyPressed(keyCode, scanCode, modifiers); + } + @Override + public void tick() { + super.tick(); + if (prevTab != null && prevTab != tabManager.getCurrentTab()) { + prevTab = tabManager.getCurrentTab(); + this.list.clear(); + fillList(); + list.setScrollAmount(0); + } } @Override public void render(MatrixStack matrices, int mouseX, int mouseY, float delta) { this.renderBackground(matrices); + if (client != null && client.world != null) this.list.setRenderBackground(false); + this.list.render(matrices, mouseX, mouseY, delta); + drawCenteredTextWithShadow(matrices, textRenderer, title, width/2, 15, 0xFFFFFF); super.render(matrices, mouseX, mouseY, delta); - drawCenteredText(matrices, textRenderer, title, width/2, 15, 0xFFFFFF); + if (tooltip != null) { + if (this.list.getFocused() != null && (this.list.getHoveredEntry() == null || this.list.getHoveredEntry().button == null || !this.list.getHoveredEntry().button.isMouseOver(mouseX, mouseY))) { + renderTooltip(matrices, tooltip, this.list.getFocused().getX(), this.list.getFocused().getY() + (this.list.getFocused().getHeight() * 2)); + } + else renderTooltip(matrices, tooltip, mouseX, mouseY); + } + tooltip = null; } } diff --git a/puzzle-gui/src/main/java/net/puzzlemc/gui/screen/page/AbstractPuzzleOptionsPage.java b/puzzle-gui/src/main/java/net/puzzlemc/gui/screen/page/AbstractPuzzleOptionsPage.java deleted file mode 100755 index 35ac269..0000000 --- a/puzzle-gui/src/main/java/net/puzzlemc/gui/screen/page/AbstractPuzzleOptionsPage.java +++ /dev/null @@ -1,53 +0,0 @@ -package net.puzzlemc.gui.screen.page; - -import net.minecraft.screen.ScreenTexts; -import net.minecraft.text.Text; -import net.puzzlemc.gui.screen.widget.PuzzleOptionListWidget; -import net.puzzlemc.gui.screen.widget.PuzzleWidget; -import net.minecraft.client.gui.screen.Screen; -import net.minecraft.client.gui.widget.ButtonWidget; -import net.minecraft.client.util.math.MatrixStack; - -import java.util.List; -import java.util.Objects; - -public abstract class AbstractPuzzleOptionsPage extends Screen { - public PuzzleOptionListWidget list; - private final List options; - public List tooltip = null; - - public AbstractPuzzleOptionsPage(Screen parent, Text title, List options) { - super(title); - this.parent = parent; - this.options = options; - } - private final Screen parent; - - @Override - protected void init() { - this.list = new PuzzleOptionListWidget(this.client, this.width, this.height, 32, this.height - 32, 25); - list.addAll(options); - this.addSelectableChild(this.list); - - super.init(); - - this.addDrawableChild(ButtonWidget.builder(ScreenTexts.DONE, (button) -> Objects.requireNonNull(client).setScreen(parent)).dimensions(this.width / 2 - 100, this.height - 28, 200, 20).build()); - } - - @Override - public void render(MatrixStack matrices, int mouseX, int mouseY, float delta) { - this.renderBackground(matrices); - if (client != null && client.world != null) this.list.setRenderBackground(false); - this.list.render(matrices, mouseX, mouseY, delta); - - drawCenteredText(matrices, textRenderer, title, width/2, 15, 0xFFFFFF); - super.render(matrices, mouseX, mouseY, delta); - if (tooltip != null) { - if (this.list.getFocused() != null && (this.list.getHoveredEntry() == null || this.list.getHoveredEntry().button == null || !this.list.getHoveredEntry().button.isMouseOver(mouseX, mouseY))) { - renderTooltip(matrices, tooltip, this.list.getFocused().getX() + this.list.getFocused().getWidth(), this.list.getFocused().getY() + (this.list.getFocused().getHeight() * 2)); - } - else renderTooltip(matrices, tooltip, mouseX, mouseY); - } - tooltip = null; - } -} diff --git a/puzzle-gui/src/main/java/net/puzzlemc/gui/screen/page/GraphicsPage.java b/puzzle-gui/src/main/java/net/puzzlemc/gui/screen/page/GraphicsPage.java deleted file mode 100755 index 9e621d2..0000000 --- a/puzzle-gui/src/main/java/net/puzzlemc/gui/screen/page/GraphicsPage.java +++ /dev/null @@ -1,12 +0,0 @@ -package net.puzzlemc.gui.screen.page; - -import net.minecraft.text.Text; -import net.puzzlemc.gui.PuzzleApi; -import net.minecraft.client.gui.screen.Screen; - -public class GraphicsPage extends AbstractPuzzleOptionsPage { - - public GraphicsPage(Screen parent) { - super(parent, Text.translatable("puzzle.page.graphics"), PuzzleApi.GRAPHICS_OPTIONS); - } -} diff --git a/puzzle-gui/src/main/java/net/puzzlemc/gui/screen/page/MiscPage.java b/puzzle-gui/src/main/java/net/puzzlemc/gui/screen/page/MiscPage.java deleted file mode 100755 index 0ad1f60..0000000 --- a/puzzle-gui/src/main/java/net/puzzlemc/gui/screen/page/MiscPage.java +++ /dev/null @@ -1,12 +0,0 @@ -package net.puzzlemc.gui.screen.page; - -import net.minecraft.text.Text; -import net.puzzlemc.gui.PuzzleApi; -import net.minecraft.client.gui.screen.Screen; - -public class MiscPage extends AbstractPuzzleOptionsPage { - - public MiscPage(Screen parent) { - super(parent, Text.translatable("puzzle.page.misc"), PuzzleApi.MISC_OPTIONS); - } -} diff --git a/puzzle-gui/src/main/java/net/puzzlemc/gui/screen/page/PerformancePage.java b/puzzle-gui/src/main/java/net/puzzlemc/gui/screen/page/PerformancePage.java deleted file mode 100755 index 6bfcd5d..0000000 --- a/puzzle-gui/src/main/java/net/puzzlemc/gui/screen/page/PerformancePage.java +++ /dev/null @@ -1,12 +0,0 @@ -package net.puzzlemc.gui.screen.page; - -import net.minecraft.text.Text; -import net.puzzlemc.gui.PuzzleApi; -import net.minecraft.client.gui.screen.Screen; - -public class PerformancePage extends AbstractPuzzleOptionsPage { - - public PerformancePage(Screen parent) { - super(parent, Text.translatable("puzzle.page.performance"), PuzzleApi.PERFORMANCE_OPTIONS); - } -} diff --git a/puzzle-gui/src/main/java/net/puzzlemc/gui/screen/page/ResourcesPage.java b/puzzle-gui/src/main/java/net/puzzlemc/gui/screen/page/ResourcesPage.java deleted file mode 100755 index 54d3845..0000000 --- a/puzzle-gui/src/main/java/net/puzzlemc/gui/screen/page/ResourcesPage.java +++ /dev/null @@ -1,12 +0,0 @@ -package net.puzzlemc.gui.screen.page; - -import net.minecraft.text.Text; -import net.puzzlemc.gui.PuzzleApi; -import net.minecraft.client.gui.screen.Screen; - -public class ResourcesPage extends AbstractPuzzleOptionsPage { - - public ResourcesPage(Screen parent) { - super(parent, Text.translatable("puzzle.page.resources"), PuzzleApi.RESOURCE_OPTIONS); - } -} diff --git a/puzzle-gui/src/main/java/net/puzzlemc/gui/screen/widget/PuzzleOptionListWidget.java b/puzzle-gui/src/main/java/net/puzzlemc/gui/screen/widget/PuzzleOptionListWidget.java index 2ccd256..9805ad3 100755 --- a/puzzle-gui/src/main/java/net/puzzlemc/gui/screen/widget/PuzzleOptionListWidget.java +++ b/puzzle-gui/src/main/java/net/puzzlemc/gui/screen/widget/PuzzleOptionListWidget.java @@ -12,7 +12,7 @@ import net.minecraft.client.util.math.MatrixStack; import net.minecraft.text.Text; import net.minecraft.text.TranslatableTextContent; -import net.puzzlemc.gui.screen.page.AbstractPuzzleOptionsPage; +import net.puzzlemc.gui.screen.PuzzleOptionsScreen; import org.apache.logging.log4j.LogManager; import java.util.*; @@ -46,6 +46,9 @@ public void addAll(List buttons) { } } + public void clear() { + super.clearEntries(); + } public int getRowWidth() { return 400; } @@ -82,10 +85,10 @@ public void render(MatrixStack matrices, int index, int y, int x, int entryWidth button.setY(y); button.render(matrices, mouseX, mouseY, tickDelta); } - if (button == null) drawCenteredText(matrices,textRenderer, Text.literal("------ ").append(text).append(" ------"),x + 200,y+5,0xFFFFFF); + if (button == null) drawCenteredTextWithShadow(matrices,textRenderer, Text.literal("------ ").append(text).append(" ------"),x + 200,y+5,0xFFFFFF); else drawTextWithShadow(matrices,textRenderer, text,x+15,y+5,0xFFFFFF); - if (!(client.currentScreen instanceof AbstractPuzzleOptionsPage page)) return; + if (!(client.currentScreen instanceof PuzzleOptionsScreen page)) return; if (button != null && (button.isMouseOver(mouseX, mouseY) || ((page.list.getHoveredEntry() == null || page.list.getHoveredEntry().button == null || !page.list.getHoveredEntry().button.isMouseOver(mouseX, mouseY)) && button.isFocused())) && text.getContent() instanceof TranslatableTextContent content) { String key = null; if (I18n.hasTranslation(content.getKey() + ".tooltip")) key = content.getKey() + ".tooltip"; diff --git a/puzzle-splashscreen/src/main/java/net/puzzlemc/splashscreen/PuzzleSplashScreen.java b/puzzle-splashscreen/src/main/java/net/puzzlemc/splashscreen/PuzzleSplashScreen.java index 727844c..8c9a697 100755 --- a/puzzle-splashscreen/src/main/java/net/puzzlemc/splashscreen/PuzzleSplashScreen.java +++ b/puzzle-splashscreen/src/main/java/net/puzzlemc/splashscreen/PuzzleSplashScreen.java @@ -1,7 +1,10 @@ package net.puzzlemc.splashscreen; +import com.mojang.blaze3d.platform.TextureUtil; +import com.mojang.blaze3d.systems.RenderSystem; import eu.midnightdust.lib.util.MidnightColorUtil; import net.fabricmc.api.ClientModInitializer; +import net.minecraft.client.texture.AbstractTexture; import net.minecraft.client.texture.NativeImageBackedTexture; import net.minecraft.util.Util; import net.minecraft.util.math.ColorHelper; @@ -22,10 +25,8 @@ import org.apache.logging.log4j.LogManager; import java.awt.*; -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; +import java.io.*; +import java.net.URL; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; @@ -67,10 +68,6 @@ public void onInitializeClient() { public Identifier getFabricId() { return new Identifier("puzzle", "splash_screen"); } - - public void method_14491(ResourceManager manager) { - reload(manager); - } @Override public void reload(ResourceManager manager) { if (PuzzleConfig.resourcepackSplashScreen) { @@ -107,8 +104,7 @@ public void reload(ResourceManager manager) { manager.findResources("textures", path -> path.getPath().contains("mojangstudios.png")).forEach((id, resource) -> { try (InputStream stream = manager.getResource(id).get().getInputStream()) { Files.copy(stream, LOGO_TEXTURE, StandardCopyOption.REPLACE_EXISTING); - InputStream input = new FileInputStream(String.valueOf(PuzzleSplashScreen.LOGO_TEXTURE)); - client.getTextureManager().registerTexture(LOGO, new NativeImageBackedTexture(NativeImage.read(input))); + client.getTextureManager().registerTexture(LOGO, new DynamicLogoTexture()); } catch (Exception e) { LogManager.getLogger("Puzzle").error("Error occurred while loading custom minecraft logo " + id.toString(), e); } @@ -156,4 +152,18 @@ protected TextureData loadTextureData(ResourceManager resourceManager) { } } } + @Environment(EnvType.CLIENT) + public static class DynamicLogoTexture extends ResourceTexture { + public DynamicLogoTexture() { + super(LOGO); + } + protected TextureData loadTextureData(ResourceManager resourceManager) { + try { + InputStream input = new FileInputStream(String.valueOf(PuzzleSplashScreen.LOGO_TEXTURE)); + return new TextureData(new TextureResourceMetadata(true, true), NativeImage.read(input)); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + } } diff --git a/puzzle-splashscreen/src/main/java/net/puzzlemc/splashscreen/mixin/MixinSplashScreen.java b/puzzle-splashscreen/src/main/java/net/puzzlemc/splashscreen/mixin/MixinSplashScreen.java index 2422e50..d845ca8 100755 --- a/puzzle-splashscreen/src/main/java/net/puzzlemc/splashscreen/mixin/MixinSplashScreen.java +++ b/puzzle-splashscreen/src/main/java/net/puzzlemc/splashscreen/mixin/MixinSplashScreen.java @@ -45,11 +45,7 @@ private static int withAlpha(int color, int alpha) { private static void puzzle$initSplashscreen(MinecraftClient client, CallbackInfo ci) { // Load our custom textures at game start // if (PuzzleConfig.resourcepackSplashScreen) { if (PuzzleSplashScreen.LOGO_TEXTURE.toFile().exists()) { - try { - InputStream input = new FileInputStream(String.valueOf(PuzzleSplashScreen.LOGO_TEXTURE)); - client.getTextureManager().registerTexture(LOGO, new NativeImageBackedTexture(NativeImage.read(input))); - } catch (IOException ignored) { - } + client.getTextureManager().registerTexture(LOGO, new PuzzleSplashScreen.DynamicLogoTexture()); } if (PuzzleSplashScreen.BACKGROUND_TEXTURE.toFile().exists()) { try { @@ -68,7 +64,7 @@ private static int withAlpha(int color, int alpha) { private void puzzle$betterBlend(MatrixStack matrices, int mouseX, int mouseY, float delta, CallbackInfo ci) { if (PuzzleConfig.disableBlend) RenderSystem.defaultBlendFunc(); } - @Inject(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/util/Window;getScaledWidth()I", shift = At.Shift.BEFORE)) + @Inject(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/util/Window;getScaledWidth()I", shift = At.Shift.BEFORE, ordinal = 2)) private void puzzle$renderSplashBackground(MatrixStack matrices, int mouseX, int mouseY, float delta, CallbackInfo ci) { if (Files.exists(PuzzleSplashScreen.BACKGROUND_TEXTURE)) { int width = client.getWindow().getScaledWidth(); @@ -96,11 +92,11 @@ else if (reloading) } @Inject(method = "renderProgressBar", at = @At("HEAD")) private void puzzle$addProgressBarBackground(MatrixStack matrices, int minX, int minY, int maxX, int maxY, float opacity, CallbackInfo ci) { - RenderSystem.disableBlend(); if (!PuzzleConfig.resourcepackSplashScreen || PuzzleConfig.progressBarBackgroundColor == 15675965) return; long l = Util.getMeasuringTimeMs(); float f = this.reloadCompleteTime > -1L ? (float)(l - this.reloadCompleteTime) / 1000.0F : -1.0F; int m = MathHelper.ceil((1.0F - MathHelper.clamp(f - 1.0F, 0.0F, 1.0F)) * 255.0F); + RenderSystem.disableBlend(); fill(matrices, minX, minY, maxX, maxY, withAlpha(PuzzleConfig.progressBarBackgroundColor, m)); } diff --git a/src/main/resources/assets/puzzle/lang/de_de.json b/src/main/resources/assets/puzzle/lang/de_de.json index c37f5b9..42c9c48 100644 --- a/src/main/resources/assets/puzzle/lang/de_de.json +++ b/src/main/resources/assets/puzzle/lang/de_de.json @@ -1,10 +1,10 @@ { "puzzle.text.update_available":"Ein Update ist verfügbar!", "puzzle.screen.title":"Puzzle Einstellungen", - "puzzle.page.graphics":"Grafik Einstellungen", - "puzzle.page.resources":"Resourcen Einstellungen", - "puzzle.page.performance":"Performance Einstellungen", - "puzzle.page.misc":"Sonstige Einstellungen", + "puzzle.page.graphics":"Grafik", + "puzzle.page.resources":"Resourcen", + "puzzle.page.performance":"Performance", + "puzzle.page.misc":"Sonstiges", "puzzle.option.check_for_updates":"Auf Updates überprüfen", "puzzle.option.show_version_info":"Zeige Informationen über Puzzle's Version", "puzzle.option.resourcepack_splash_screen":"Nutze Resourcepack-Ladebildschirm", diff --git a/src/main/resources/assets/puzzle/lang/el_gr.json b/src/main/resources/assets/puzzle/lang/el_gr.json index 37cd056..822f037 100644 --- a/src/main/resources/assets/puzzle/lang/el_gr.json +++ b/src/main/resources/assets/puzzle/lang/el_gr.json @@ -1,10 +1,10 @@ { "puzzle.text.update_available":"Μια καινούρια έκδοση είναι διαθέσιμη!", "puzzle.screen.title":"Ρυθμίσεις του Puzzle", - "puzzle.page.graphics":"Ρυθμίσεις Γραφικών", - "puzzle.page.resources":"Ρυθμίσεις Πόρων", - "puzzle.page.performance":"Ρυθμίσεις Απόδοσης", - "puzzle.page.misc":"Διάφορες Ρυθμίσεις", + "puzzle.page.graphics":"Γραφικών", + "puzzle.page.resources":"Πόρων", + "puzzle.page.performance":"Απόδοσης", + "puzzle.page.misc":"Διάφορες", "puzzle.option.check_for_updates":"Έλεγχος για αναβαθμίσεις", "puzzle.option.show_version_info":"Εμφάνηση έκδοσης του Puzzle", "puzzle.option.resourcepack_splash_screen":"Οθόνη φόρτωσης πακέτου πόρων", diff --git a/src/main/resources/assets/puzzle/lang/en_us.json b/src/main/resources/assets/puzzle/lang/en_us.json index f6b1c9c..715c743 100755 --- a/src/main/resources/assets/puzzle/lang/en_us.json +++ b/src/main/resources/assets/puzzle/lang/en_us.json @@ -1,10 +1,10 @@ { "puzzle.text.update_available":"An update is available!", "puzzle.screen.title":"Puzzle Settings", - "puzzle.page.graphics":"Graphics Settings", - "puzzle.page.resources":"Resource Settings", - "puzzle.page.performance":"Performance Settings", - "puzzle.page.misc":"Miscellaneous Settings", + "puzzle.page.graphics":"Graphics", + "puzzle.page.resources":"Resource", + "puzzle.page.performance":"Performance", + "puzzle.page.misc":"Miscellaneous", "puzzle.option.check_for_updates":"Check for Updates", "puzzle.option.check_for_updates.tooltip":"Enables Puzzle's built-in update checker", "puzzle.option.show_version_info":"Show Puzzle version info", @@ -18,6 +18,9 @@ "puzzle.option.bigger_custom_models":"Bigger Custom Models", "puzzle.option.bigger_custom_models.tooltip":"Increases the limit of\ncustom block/item model sizes\nfrom 3x3x3 to 5x5x5", "puzzle.midnightconfig.title":"Puzzle Advanced Config", + "puzzle.midnightconfig.category.gui":"GUI", + "puzzle.midnightconfig.category.features":"Features", + "puzzle.midnightconfig.category.debug":"Debug", "puzzle.midnightconfig.tooltip":"Options for advanced users only", "cullleaves.puzzle.option.enabled": "Cull Leaves", diff --git a/src/main/resources/assets/puzzle/lang/et_ee.json b/src/main/resources/assets/puzzle/lang/et_ee.json index 3a81a26..a819d65 100644 --- a/src/main/resources/assets/puzzle/lang/et_ee.json +++ b/src/main/resources/assets/puzzle/lang/et_ee.json @@ -1,10 +1,10 @@ { "puzzle.text.update_available":"Uuendus on saadaval!", "puzzle.screen.title":"Puzzle sätted", - "puzzle.page.graphics":"Graafikasätted", - "puzzle.page.resources":"Ressursisätted", - "puzzle.page.performance":"Jõudlussätted", - "puzzle.page.misc":"Muud sätted", + "puzzle.page.graphics":"Graafika", + "puzzle.page.resources":"Ressursi", + "puzzle.page.performance":"Jõudlus", + "puzzle.page.misc":"Muud", "puzzle.option.check_for_updates":"Uuenduste kontroll", "puzzle.option.show_version_info":"Kuva Puzzle versiooniteavet", "puzzle.option.resourcepack_splash_screen":"Kasuta ressursipaki laadimiskuva", diff --git a/src/main/resources/assets/puzzle/lang/ko_kr.json b/src/main/resources/assets/puzzle/lang/ko_kr.json index 2b51dee..6a45a0f 100644 --- a/src/main/resources/assets/puzzle/lang/ko_kr.json +++ b/src/main/resources/assets/puzzle/lang/ko_kr.json @@ -1,10 +1,10 @@ { "puzzle.text.update_available":"업데이트가 가능합니다!", "puzzle.screen.title":"Puzzle 설정", - "puzzle.page.graphics":"그래픽 설정", - "puzzle.page.resources":"리소스 설정", - "puzzle.page.performance":"성능 설정", - "puzzle.page.misc":"기타 설정", + "puzzle.page.graphics":"그래픽", + "puzzle.page.resources":"리소스", + "puzzle.page.performance":"성능", + "puzzle.page.misc":"기타", "puzzle.option.check_for_updates":"업데이트 확인", "puzzle.option.show_version_info":"Puzzle 버전 정보 보기", "puzzle.option.resourcepack_splash_screen":"스플래시 화면에서 리소스팩 사용", diff --git a/src/main/resources/assets/puzzle/lang/pl_pl.json b/src/main/resources/assets/puzzle/lang/pl_pl.json index 3870ac1..4ca7d7e 100644 --- a/src/main/resources/assets/puzzle/lang/pl_pl.json +++ b/src/main/resources/assets/puzzle/lang/pl_pl.json @@ -1,10 +1,10 @@ { "puzzle.text.update_available":"Aktualizacja jest dostępna!", "puzzle.screen.title":"Ustawienia Puzzle", - "puzzle.page.graphics":"Ustawienia grafiki", - "puzzle.page.resources":"Ustawienia zasobów", - "puzzle.page.performance":"Ustawienia wydajności", - "puzzle.page.misc":"Różne ustawienia", + "puzzle.page.graphics":"Grafiki", + "puzzle.page.resources":"Zasobów", + "puzzle.page.performance":"Wydajności", + "puzzle.page.misc":"Ustawienia", "puzzle.option.check_for_updates":"Sprawdź aktualizacje", "puzzle.option.show_version_info":"Pokaż informacje o wersji Puzzle", "puzzle.option.resourcepack_splash_screen":"Użyj ekranu powitalnego paczek zasobów", diff --git a/src/main/resources/assets/puzzle/lang/pt_br.json b/src/main/resources/assets/puzzle/lang/pt_br.json index cf227f2..78152b2 100644 --- a/src/main/resources/assets/puzzle/lang/pt_br.json +++ b/src/main/resources/assets/puzzle/lang/pt_br.json @@ -1,10 +1,10 @@ { "puzzle.text.update_available":"Uma atualização está disponível!", "puzzle.screen.title":"Puzzle Definições", - "puzzle.page.graphics":"Configurações gráficas", - "puzzle.page.resources":"Configurações de recursos", - "puzzle.page.performance":"Configurações de desempenho", - "puzzle.page.misc":"Configurações Diversas", + "puzzle.page.graphics":"Gráficas", + "puzzle.page.resources":"Recursos", + "puzzle.page.performance":"Desempenho", + "puzzle.page.misc":"Diversas", "puzzle.option.check_for_updates":"Verifique se há atualizações", "puzzle.option.check_for_updates.tooltip":"Ativa o verificador de atualização integrado do Puzzle", "puzzle.option.show_version_info":"Mostrar informações da versão do Puzzle", diff --git a/src/main/resources/assets/puzzle/lang/ru_ru.json b/src/main/resources/assets/puzzle/lang/ru_ru.json index 74ed66f..5bc5179 100644 --- a/src/main/resources/assets/puzzle/lang/ru_ru.json +++ b/src/main/resources/assets/puzzle/lang/ru_ru.json @@ -1,10 +1,10 @@ { "puzzle.text.update_available":"Доступно обновление!", "puzzle.screen.title":"Настройки Puzzle", - "puzzle.page.graphics":"Настройки графики", - "puzzle.page.resources":"Настройки ресурсов", + "puzzle.page.graphics":"графики", + "puzzle.page.resources":"ресурсов", "puzzle.page.performance":"Производительность", - "puzzle.page.misc":"Прочие настройки", + "puzzle.page.misc":"Прочие", "puzzle.option.check_for_updates":"Проверять обновления", "puzzle.option.check_for_updates.tooltip":"Включить встроенную в Puzzle проверку обновлений", "puzzle.option.show_version_info":"Показывать информацию о версии",