15 Commits

Author SHA1 Message Date
Motschen
bc01662cda Puzzle 1.6.0 - 1.20.2 & Stability improvements
- Port to 1.20.2
- Improve stability by skipping outdated compat entries
- Update EMF integration
2023-09-24 21:18:45 +02:00
Martin Prokoph
1dc7245a99 Merge pull request #72 from Gazmanovich/1.20-1
Create be_by.json
2023-09-23 12:24:59 +02:00
Martin Prokoph
860d969c1d Merge pull request #69 from ImVietnam/patch-1
Create vi_vn.json
2023-09-23 12:24:37 +02:00
Alex Gazmanovich
acd3dbf9e2 Create be_by.json 2023-08-09 12:02:14 +03:00
I_am_Vietnam
cbd48603d2 Create vi_vn.json 2023-07-19 11:18:10 +07:00
Motschen
f91274dd90 Puzzle 1.5.2 - Fix crash without ModMenu
Fixes #67 & #68
2023-07-12 11:34:38 +02:00
Motschen
884ee8caf6 Puzzle 1.5.1 - 1.20 & Fixes
- Update to 1.20
- Fix version string behaving weirdly with ModMenu installed
- Integration for CEM replaced with EMF
2023-06-10 18:55:29 +02:00
Martin Prokoph
c921f3ff99 Update Traditional Chinese by @notlin4
Update Traditional Chinese by @notlin4
2023-06-10 16:52:45 +02:00
Martin Prokoph
8532a24b5e Merge pull request #59 from notlin4/patch-1
Update Traditional Chinese
2023-06-10 16:50:25 +02:00
Martin Prokoph
3a873df26a Merge pull request #60 from Felix14-v2/1.19.4
Update ru_ru.json
2023-06-10 16:49:57 +02:00
Martin Prokoph
e3615a79c4 Merge pull request #62 from Madis0/patch-2
Readme badges
2023-05-24 19:02:01 +02:00
Madis Otenurm
2704c2c80b Update README.md 2023-05-16 07:43:05 +03:00
Felix14-v2
83897109fe Update ru_ru.json
Oops
2023-04-21 15:41:08 +03:00
Felix14-v2
fc20a1b182 Update ru_ru.json 2023-04-21 15:29:29 +03:00
notlin4
927faea146 Update Traditional Chinese 2023-04-16 14:33:21 +08:00
29 changed files with 261 additions and 220 deletions

View File

@@ -1,2 +1,4 @@
# Puzzle
Unites optifine replacement mods in a clean & vanilla-style gui
[![Download from Curseforge](https://cf.way2muchnoise.eu/full_563977_downloads%20on%20Curseforge.svg?badge_style=for_the_badge)](https://www.curseforge.com/minecraft/mc-mods/puzzle) [![Download from Modrinth](https://img.shields.io/modrinth/dt/puzzle?color=4&label=Download%20from%20Modrinth&style=for-the-badge)](https://modrinth.com/mod/puzzle)

View File

@@ -1,6 +1,6 @@
// Based on https://github.com/OnyxStudios/Cardinal-Components-API/blob/1.17/build.gradle
plugins {
id "fabric-loom" version "1.1-SNAPSHOT" apply false
id "fabric-loom" version "1.2-SNAPSHOT" apply false
id "com.matthewprenger.cursegradle" version "1.4.0"
id "maven-publish"
id "java-library"
@@ -131,9 +131,9 @@ dependencies {
modImplementation ("maven.modrinth:borderless-mining:${project.borderless_mining_version}")
modImplementation ("maven.modrinth:dynamic-fps:${project.dynamic_fps_version}")
modImplementation("com.moandjiezana.toml:toml4j:${project.toml4j_version}")
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:entitytexturefeatures:${project.etf_version}")
modImplementation ("maven.modrinth:entity-model-features:${project.emf_version}")
modImplementation ("maven.modrinth:completeconfig:${project.complete_config_version}")
modImplementation ("maven.modrinth:exordium:${project.exordium_version}")
modImplementation("org.aperlambda:lambdajcommon:1.8.1") {

View File

@@ -3,34 +3,37 @@ org.gradle.jvmargs=-Xmx4G
# Fabric Properties
# check these on https://fabricmc.net/use
minecraft_version=1.19.4-rc2
yarn_mappings=1.19.4-rc2+build.1
loader_version=0.14.17
minecraft_version=1.20.2
yarn_mappings=1.20.2+build.1
loader_version=0.14.22
# Mod Properties
mod_version = 1.5.0+1.19.4
mod_version = 1.6.0+1.20.2
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.75.3+1.19.4
mod_menu_version = 6.1.0-beta.3
midnightlib_version=1.2.1-fabric
fabric_version=0.89.2+1.20.2
mod_menu_version = 7.0.1
midnightlib_version = 1.5.0-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.5.2+1.19.3
continuity_version = 2.0.0+1.19
animatica_version = 0.5+1.19
ldl_version = 2.3.2+1.20.1
lbg_version = 1.5.2+1.20.1
iris_version = 1.6.9+1.20.2
continuity_version = 3.0.0-beta.3+1.20.1
animatica_version = 0.6+1.20
colormatic_version = 3.1.2
borderless_mining_version = 1.1.6+1.19.3
dynamic_fps_version = v2.2.0
borderless_mining_version = 1.1.8+1.20.1
dynamic_fps_version = 3.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
entitytexturefeatures_version=4.2.0.1.fabric.1.19.3
exordium_version=1.0.3-1.19.4
cit_resewn_version = 1.1.3+1.20
complete_config_version = 2.3.0
spruceui_version=5.0.0+1.20
emf_version=1.0.2
etf_version=4.5.1
exordium_version=1.2.1-1.20.2
# Required for LBG
quilt_loader_version=0.19.0-beta.18
quilt_fabric_api_version=7.0.1+0.83.0-1.20

View File

@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.3-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.1-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

View File

@@ -1,9 +1,11 @@
archivesBaseName = "puzzle-base"
repositories {
maven { url "https://maven.terraformersmc.com/releases" }
maven {
url = "https://api.modrinth.com/maven"
}
}
dependencies {
modImplementation "maven.modrinth:midnightlib:${project.midnightlib_version}"
modImplementation ("com.terraformersmc:modmenu:${project.mod_menu_version}")
}

View File

@@ -4,7 +4,6 @@ import com.mojang.blaze3d.platform.GlDebugInfo;
import net.puzzlemc.core.PuzzleCore;
import net.puzzlemc.core.config.PuzzleConfig;
import net.puzzlemc.core.util.UpdateChecker;
import net.minecraft.client.gui.DrawableHelper;
import net.minecraft.client.gui.hud.DebugHud;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
@@ -14,7 +13,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import java.util.List;
@Mixin(DebugHud.class)
public abstract class MixinDebugHud extends DrawableHelper {
public abstract class MixinDebugHud {
@Inject(at = @At("RETURN"), method = "getRightText")
private void puzzle$getRightText(CallbackInfoReturnable<List<String>> cir) {
if (PuzzleConfig.showPuzzleInfo) {

View File

@@ -1,8 +1,10 @@
package net.puzzlemc.core.mixin;
import eu.midnightdust.lib.util.PlatformFunctions;
import net.minecraft.client.gui.widget.PressableTextWidget;
import net.puzzlemc.core.PuzzleCore;
import net.puzzlemc.core.config.PuzzleConfig;
import net.puzzlemc.core.util.ModMenuUtil;
import net.puzzlemc.core.util.UpdateChecker;
import net.minecraft.client.gui.screen.*;
import net.minecraft.text.Text;
@@ -23,7 +25,10 @@ public abstract class MixinTitleScreen extends Screen {
}
@Inject(at = @At("TAIL"), method = "init")
private void puzzle$init(CallbackInfo ci) {
int yOffset = 20;
int yOffset = 8;
if (PlatformFunctions.isModLoaded("modmenu") && ModMenuUtil.hasClassicButton()) {
yOffset += 12;
}
Text puzzleText;
if (UpdateChecker.isUpToDate) {
puzzleText = Text.literal(versionText);

View File

@@ -0,0 +1,9 @@
package net.puzzlemc.core.util;
import com.terraformersmc.modmenu.config.ModMenuConfig;
public class ModMenuUtil {
public static boolean hasClassicButton() {
return ModMenuConfig.MODIFY_TITLE_SCREEN.getValue() && ModMenuConfig.MODS_BUTTON_STYLE.getValue() == ModMenuConfig.TitleMenuButtonStyle.CLASSIC;
}
}

View File

@@ -27,6 +27,7 @@ repositories {
maven {
url "https://maven.shedaniel.me/"
}
maven { url "https://maven.quiltmc.org/repository/release/" }
}
dependencies {
@@ -35,26 +36,28 @@ dependencies {
modImplementation "dev.lambdaurora:spruceui:${project.spruceui_version}"
modImplementation "maven.modrinth:midnightlib:${project.midnightlib_version}"
modImplementation ("com.terraformersmc:modmenu:${project.mod_menu_version}")
modImplementation ("maven.modrinth:cull-leaves:${project.cull_leaves_version}")
modImplementation ("maven.modrinth:lambdynamiclights:${project.ldl_version}")
modCompileOnlyApi ("maven.modrinth:lambdabettergrass:${project.lbg_version}")
modImplementation ("maven.modrinth:iris:${project.iris_version}")
modImplementation ("maven.modrinth:cit-resewn:${project.cit_resewn_version}")
modCompileOnly "org.quiltmc:quilt-loader:${rootProject.quilt_loader_version}"
modCompileOnlyApi "org.quiltmc.quilted-fabric-api:quilted-fabric-api:${rootProject.quilt_fabric_api_version}"
modCompileOnlyApi ("maven.modrinth:iris:${project.iris_version}")
modCompileOnly ("maven.modrinth:cit-resewn:${project.cit_resewn_version}")
modCompileOnlyApi ("maven.modrinth:continuity:${project.continuity_version}")
modCompileOnlyApi ("maven.modrinth:animatica:${project.animatica_version}")
modCompileOnlyApi ("maven.modrinth:colormatic:${project.colormatic_version}")
modImplementation ("maven.modrinth:borderless-mining:${project.borderless_mining_version}")
modImplementation ("maven.modrinth:dynamic-fps:${project.dynamic_fps_version}")
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("com.moandjiezana.toml:toml4j:${project.toml4j_version}")
modImplementation ("maven.modrinth:entitytexturefeatures:${project.etf_version}")
modImplementation ("maven.modrinth:entity-model-features:${project.emf_version}")
modImplementation ("maven.modrinth:completeconfig:${project.complete_config_version}")
modImplementation ("maven.modrinth:exordium:${project.exordium_version}")
modImplementation("org.aperlambda:lambdajcommon:1.8.1") {
exclude group: 'com.google.code.gson'
exclude group: 'com.google.guava'
}
modCompileOnlyApi ("maven.modrinth:continuity:${project.continuity_version}") {
exclude module: "modmenu"
}
}

View File

@@ -1,13 +1,12 @@
package net.puzzlemc.gui;
import eu.midnightdust.lib.util.MidnightColorUtil;
import net.fabricmc.loader.api.FabricLoader;
import net.irisshaders.iris.api.v0.IrisApi;
import net.irisshaders.iris.api.v0.IrisApiConfig;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.text.Style;
import net.minecraft.text.Text;
import net.minecraft.util.Formatting;
import net.puzzlemc.gui.screen.widget.PuzzleWidget;
public class IrisCompat {
@@ -18,7 +17,7 @@ public class IrisCompat {
IrisApiConfig irisConfig = IrisApi.getInstance().getConfig();
irisConfig.setShadersEnabledAndApply(!irisConfig.areShadersEnabled());
}));
PuzzleApi.addToGraphicsOptions(new PuzzleWidget(Text.translatable("options.iris.shaderPackSelection.title"), (button) -> button.setMessage(Text.literal("").append(Text.translatable("iris.puzzle.option.open").setStyle(Style.EMPTY.withColor(MidnightColorUtil.radialRainbow(0.5f, 1).getRGB())))), (button) -> {
PuzzleApi.addToGraphicsOptions(new PuzzleWidget(Text.translatable("options.iris.shaderPackSelection.title"), (button) -> button.setMessage(Text.literal("").append(Text.translatable("iris.puzzle.option.open").formatted(Formatting.GOLD))), (button) -> {
MinecraftClient client = MinecraftClient.getInstance();
client.setScreen((Screen) IrisApi.getInstance().openMainIrisScreenObj(client.currentScreen));
}));

View File

@@ -4,11 +4,6 @@ import dev.lambdaurora.lambdabettergrass.LBGConfig;
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;
@@ -17,29 +12,27 @@ import io.github.kvverti.colormatic.ColormaticConfigController;
import link.infra.borderlessmining.config.ConfigHandler;
import me.pepperbell.continuity.client.config.ContinuityConfig;
import me.pepperbell.continuity.client.config.Option;
import net.dorianpb.cem.internal.config.CemConfig;
import net.dorianpb.cem.internal.config.CemConfigFairy;
import net.dorianpb.cem.internal.config.CemOptions;
import net.minecraft.screen.ScreenTexts;
import net.minecraft.util.Identifier;
import net.puzzlemc.core.config.PuzzleConfig;
import net.puzzlemc.gui.mixin.CemConfigAccessor;
import net.puzzlemc.gui.screen.widget.PuzzleWidget;
import net.fabricmc.api.ClientModInitializer;
import net.fabricmc.loader.api.FabricLoader;
import net.minecraft.client.MinecraftClient;
import net.minecraft.text.Text;
import net.minecraft.util.Formatting;
import net.puzzlemc.splashscreen.PuzzleSplashScreen;
import shcm.shsupercm.fabric.citresewn.config.CITResewnConfig;
import traben.entity_model_features.config.EMFConfig;
import traben.entity_texture_features.ETFApi;
import traben.entity_texture_features.config.ETFConfig;
import io.github.kvverti.colormatic.ColormaticConfig;
import traben.entity_texture_features.texture_handlers.ETFManager;
public class PuzzleClient implements ClientModInitializer {
public final static String id = "puzzle";
public static final Text YES = Text.translatable("gui.yes").formatted(Formatting.GREEN);
public static final Text NO = Text.translatable("gui.no").formatted(Formatting.RED);
public static final Identifier PUZZLE_BUTTON = new Identifier(id, "icon/button");
@Override
public void onInitializeClient() {
@@ -116,49 +109,6 @@ public class PuzzleClient implements ClientModInitializer {
catch (NumberFormatException ignored) {}
}));
}
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) -> {
fpsConfig.reduceFPSWhenUnfocused = !fpsConfig.reduceFPSWhenUnfocused;
fpsConfig.save();
}));
PuzzleApi.addToPerformanceOptions(new PuzzleWidget(0, 60,Text.translatable("config.dynamicfps.unfocused_fps"), () -> fpsConfig.unfocusedFPS,
(button) -> button.setMessage(Text.of(fpsConfig.unfocusedFPS + " FPS")),
(slider) -> {
try {
fpsConfig.unfocusedFPS = slider.getInt();
}
catch (NumberFormatException ignored) {}
finally {fpsConfig.save();}
}));
PuzzleApi.addToPerformanceOptions(new PuzzleWidget(Text.translatable("config.dynamicfps.restore_when_hovered"), (button) -> button.setMessage(fpsConfig.restoreFPSWhenHovered ? YES : NO), (button) -> {
fpsConfig.restoreFPSWhenHovered = !fpsConfig.restoreFPSWhenHovered;
fpsConfig.save();
}));
PuzzleApi.addToPerformanceOptions(new PuzzleWidget(Text.translatable("config.dynamicfps.run_gc_on_unfocus"), (button) -> button.setMessage(fpsConfig.runGCOnUnfocus ? YES : NO), (button) -> {
fpsConfig.runGCOnUnfocus = !fpsConfig.runGCOnUnfocus;
fpsConfig.save();
}));
PuzzleApi.addToPerformanceOptions(new PuzzleWidget(0, 100,Text.translatable("config.dynamicfps.unfocused_volume"), () -> ((Number)(fpsConfig.unfocusedVolumeMultiplier * 100)).intValue(),
(button) -> button.setMessage(Text.of(((Number)(fpsConfig.unfocusedVolumeMultiplier * 100)).intValue() + "%")),
(slider) -> {
try {
fpsConfig.unfocusedVolumeMultiplier = ((Number)slider.getInt()).floatValue() / 100;
}
catch (NumberFormatException ignored) {}
finally {fpsConfig.save();}
}));
PuzzleApi.addToPerformanceOptions(new PuzzleWidget(0, 100,Text.translatable("config.dynamicfps.hidden_volume"), () -> ((Number)(fpsConfig.hiddenVolumeMultiplier * 100)).intValue(),
(button) -> button.setMessage(Text.of(((Number)(fpsConfig.hiddenVolumeMultiplier * 100)).intValue() + "%")),
(slider) -> {
try {
fpsConfig.hiddenVolumeMultiplier = ((Number)slider.getInt()).floatValue() / 100;
}
catch (NumberFormatException ignored) {}
finally {fpsConfig.save();}
}));
}
if (isActive("borderlessmining")) {
PuzzleApi.addToMiscOptions(new PuzzleWidget(Text.of("Borderless Mining")));
ConfigHandler bmConfig = ConfigHandler.getInstance();
@@ -227,23 +177,6 @@ public class PuzzleClient implements ClientModInitializer {
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 (isActive("cem") && FabricLoader.getInstance().isModLoaded("completeconfig")) {
PuzzleApi.addToResourceOptions(new PuzzleWidget(Text.of("Custom Entity Models")));
CemConfig cemConfig = (CemConfig) CemConfigFairy.getConfig();
CemOptions cemOptions = CemConfigFairy.getConfig();
PuzzleApi.addToResourceOptions(new PuzzleWidget(Text.translatable("config.cem.use_optifine_folder"), (button) -> button.setMessage(cemConfig.useOptifineFolder() ? YES : NO), (button) -> {
((CemConfigAccessor)cemOptions).setUseOptifineFolder(!cemConfig.useOptifineFolder());
cemConfig.save();
}));
PuzzleApi.addToResourceOptions(new PuzzleWidget(Text.translatable("config.cem.use_new_model_creation_fix"), (button) -> button.setMessage(cemConfig.useTransparentParts() ? YES : NO), (button) -> {
((CemConfigAccessor)cemOptions).setUseModelCreationFix(!cemConfig.useTransparentParts());
cemConfig.save();
}));
PuzzleApi.addToResourceOptions(new PuzzleWidget(Text.translatable("config.cem.use_old_animations"), (button) -> button.setMessage(cemConfig.useOldAnimations() ? YES : NO), (button) -> {
((CemConfigAccessor)cemOptions).setUseOldAnimations(!cemConfig.useOldAnimations());
cemConfig.save();
}));
}
if (isActive("continuity")) {
PuzzleApi.addToResourceOptions(new PuzzleWidget(Text.of("Continuity")));
ContinuityConfig contConfig = ContinuityConfig.INSTANCE;
@@ -253,7 +186,6 @@ public class PuzzleClient implements ClientModInitializer {
Option.BooleanOption booleanOption = ((Option.BooleanOption)option);
PuzzleApi.addToResourceOptions(new PuzzleWidget(Text.translatable("options.continuity."+s), (button) -> button.setMessage(booleanOption.get() ? YES : NO), (button) -> {
booleanOption.set(!booleanOption.get());
contConfig.onChange();
contConfig.save();
}));
} catch (Exception ignored) {}
@@ -261,7 +193,7 @@ public class PuzzleClient implements ClientModInitializer {
}
if (isActive("entity_texture_features")) {
PuzzleApi.addToResourceOptions(new PuzzleWidget(Text.translatable("config.entity_texture_features.title")));
ETFConfig etfConfig = ETFApi.getETFConfigObject;
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) -> {
etfConfig.enableCustomTextures = !etfConfig.enableCustomTextures;
ETFApi.saveETFConfigChangesAndResetETF();
@@ -284,37 +216,20 @@ public class PuzzleClient implements ClientModInitializer {
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();
if (isActive("entity_model_features")) {
PuzzleApi.addToResourceOptions(new PuzzleWidget(Text.translatable("entity_model_features.title")));
EMFConfig emfConfig = EMFConfig.getConfig();
PuzzleApi.addToResourceOptions(new PuzzleWidget(Text.translatable("entity_model_features.config.force_models"), (button) -> button.setMessage(emfConfig.attemptRevertingEntityModelsAlteredByAnotherMod ? YES : NO), (button) -> {
emfConfig.attemptRevertingEntityModelsAlteredByAnotherMod = !emfConfig.attemptRevertingEntityModelsAlteredByAnotherMod;
EMFConfig.EMF_saveConfig();
}));
if (PlatformFunctions.isModLoaded("physicsmod")) {
PuzzleApi.addToResourceOptions(new PuzzleWidget(Text.translatable("entity_model_features.config.physics"), (button) -> button.setMessage(emfConfig.attemptPhysicsModPatch_2 != EMFConfig.PhysicsModCompatChoice.OFF ?
Text.translatable("entity_model_features.config." + (emfConfig.attemptPhysicsModPatch_2 == EMFConfig.PhysicsModCompatChoice.VANILLA ? "physics.1" : "physics.2")) : ScreenTexts.OFF), (button) -> {
emfConfig.attemptPhysicsModPatch_2 = emfConfig.attemptPhysicsModPatch_2.next();
EMFConfig.EMF_saveConfig();
}));
}
}
lateInitDone = true;
}

View File

@@ -1,17 +0,0 @@
package net.puzzlemc.gui.mixin;
import net.dorianpb.cem.internal.config.CemConfig;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Accessor;
@Mixin(value = CemConfig.class, remap = false)
public interface CemConfigAccessor {
@Accessor("use_optifine_folder")
void setUseOptifineFolder(boolean value);
@Accessor("use_new_model_creation_fix")
void setUseModelCreationFix(boolean value);
@Accessor("use_old_animations")
void setUseOldAnimations(boolean value);
}

View File

@@ -1,9 +1,8 @@
package net.puzzlemc.gui.mixin;
import eu.midnightdust.core.config.MidnightLibConfig;
import eu.midnightdust.lib.util.screen.TexturedOverlayButtonWidget;
import net.fabricmc.loader.api.FabricLoader;
import net.minecraft.util.Identifier;
import net.minecraft.client.gui.widget.TextIconButtonWidget;
import net.puzzlemc.core.config.PuzzleConfig;
import net.puzzlemc.gui.PuzzleClient;
import net.puzzlemc.gui.screen.PuzzleOptionsScreen;
@@ -19,8 +18,6 @@ import java.util.Objects;
@Mixin(OptionsScreen.class)
public abstract class MixinOptionsScreen extends Screen {
private static final Identifier PUZZLE_ICON_TEXTURE = new Identifier(PuzzleClient.id, "textures/gui/puzzle_button.png");
protected MixinOptionsScreen(Text title) {
super(title);
}
@@ -31,7 +28,9 @@ public abstract class MixinOptionsScreen extends Screen {
int i = 0;
if (FabricLoader.getInstance().isModLoaded("lod")) i = i + 358;
if (MidnightLibConfig.config_screen_list.equals(MidnightLibConfig.ConfigButton.FALSE)) i = i - 25;
this.addDrawableChild(new TexturedOverlayButtonWidget(this.width / 2 - 178 + i, this.height / 6 - 12, 20, 20, 0, 0, 20, PUZZLE_ICON_TEXTURE, 32, 64, (buttonWidget) -> (Objects.requireNonNull(this.client)).setScreen(new PuzzleOptionsScreen(this)), Text.translatable("midnightlib.overview.title")));
TextIconButtonWidget iconButton = TextIconButtonWidget.builder(Text.translatable("puzzle.screen.title"), (buttonWidget) -> (Objects.requireNonNull(this.client)).setScreen(new PuzzleOptionsScreen(this)), true).dimension(20, 20).texture(PuzzleClient.PUZZLE_BUTTON, 20, 20).build();
iconButton.setPosition(this.width / 2 - 178 + i, this.height / 6 - 12);
this.addDrawableChild(iconButton);
}
}
}

View File

@@ -1,6 +1,7 @@
package net.puzzlemc.gui.screen;
import com.google.common.collect.Lists;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.gui.tab.GridScreenTab;
import net.minecraft.client.gui.tab.Tab;
import net.minecraft.client.gui.tab.TabManager;
@@ -13,7 +14,6 @@ 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;
@@ -56,6 +56,7 @@ public class PuzzleOptionsScreen extends Screen {
this.addSelectableChild(this.list);
super.init();
if (client != null && client.world != null) this.list.setRenderBackground(false);
this.addDrawableChild(ButtonWidget.builder(ScreenTexts.DONE, (button) -> Objects.requireNonNull(client).setScreen(parent)).dimensions(this.width / 2 - 100, this.height - 28, 200, 20).build());
}
@@ -85,18 +86,16 @@ public class PuzzleOptionsScreen extends Screen {
}
@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);
public void render(DrawContext context, int mouseX, int mouseY, float delta) {
super.render(context, mouseX, mouseY, delta);
this.list.render(context, mouseX, mouseY, delta);
drawCenteredTextWithShadow(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().getY() + (this.list.getFocused().getHeight() * 2));
context.drawTooltip(textRenderer, tooltip, this.list.getFocused().getX(), this.list.getFocused().getY() + (this.list.getFocused().getHeight() * 2));
}
else renderTooltip(matrices, tooltip, mouseX, mouseY);
else context.drawTooltip(textRenderer, tooltip, mouseX, mouseY);
}
tooltip = null;
}

View File

@@ -1,5 +1,6 @@
package net.puzzlemc.gui.screen.widget;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.gui.widget.ButtonWidget;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.text.Text;
@@ -14,8 +15,10 @@ public class PuzzleButtonWidget extends ButtonWidget {
this.title = title;
}
@Override
public void renderButton(MatrixStack matrices, int mouseX, int mouseY, float delta) {
title.setTitle(this);
super.renderButton(matrices, mouseX, mouseY, delta);
public void renderButton(DrawContext context, int mouseX, int mouseY, float delta) {
try {
title.setTitle(this);
} catch (Exception e) {e.printStackTrace(); this.visible = false;}
super.renderButton(context, mouseX, mouseY, delta);
}
}

View File

@@ -4,12 +4,12 @@ import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.font.TextRenderer;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.gui.Element;
import net.minecraft.client.gui.Selectable;
import net.minecraft.client.gui.widget.ClickableWidget;
import net.minecraft.client.gui.widget.ElementListWidget;
import net.minecraft.client.resource.language.I18n;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.text.Text;
import net.minecraft.text.TranslatableTextContent;
import net.puzzlemc.gui.screen.PuzzleOptionsScreen;
@@ -80,13 +80,13 @@ public class PuzzleOptionListWidget extends ElementListWidget<PuzzleOptionListWi
return new ButtonEntry(button, text);
}
public void render(MatrixStack matrices, int index, int y, int x, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean hovered, float tickDelta) {
public void render(DrawContext context, int index, int y, int x, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean hovered, float tickDelta) {
if (button != null) {
button.setY(y);
button.render(matrices, mouseX, mouseY, tickDelta);
button.render(context, mouseX, mouseY, tickDelta);
}
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 (button == null) context.drawCenteredTextWithShadow(textRenderer, Text.literal(" ").append(text).append(" "),x + 200,y+5,0xFFFFFF);
else context.drawTextWithShadow(textRenderer, text,x+15,y+5,0xFFFFFF);
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) {

View File

@@ -17,7 +17,9 @@ public class PuzzleSliderWidget extends SliderWidget {
this.setTextAction = setTextAction;
this.changeAction = changeAction;
this.updateMessage();
try {
this.updateMessage();
} catch (Exception e) {e.printStackTrace(); this.visible = false;}
}
public int getInt() {
int difference = max - min;

View File

@@ -12,7 +12,9 @@ public class PuzzleTextFieldWidget extends TextFieldWidget {
super(textRenderer, x, y, width, height, Text.of(""));
this.setValueAction = setValue;
this.change = change;
setValueAction.setTextValue(this);
try {
setValueAction.setTextValue(this);
} catch (Exception e) {e.printStackTrace(); this.setVisible(false);}
}
@Override
public void write(String text) {

Binary file not shown.

Before

Width:  |  Height:  |  Size: 179 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 152 B

View File

@@ -3,8 +3,7 @@
"package": "net.puzzlemc.gui.mixin",
"compatibilityLevel": "JAVA_17",
"client": [
"MixinOptionsScreen",
"CemConfigAccessor"
"MixinOptionsScreen"
],
"injectors": {
"defaultRequire": 1

View File

@@ -4,6 +4,7 @@ loom {
accessWidenerPath = file("src/main/resources/puzzle-models.accesswidener")
}
repositories {
maven { url "https://maven.terraformersmc.com/releases" }
maven {
url = "https://api.modrinth.com/maven"
}

View File

@@ -1,5 +1,6 @@
archivesBaseName = "puzzle-splashscreen"
repositories {
maven { url "https://maven.terraformersmc.com/releases" }
maven {
url = "https://api.modrinth.com/maven"
}

View File

@@ -2,12 +2,12 @@ package net.puzzlemc.splashscreen.mixin;
import com.mojang.blaze3d.systems.RenderSystem;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.gui.screen.Overlay;
import net.minecraft.client.gui.screen.SplashOverlay;
import net.minecraft.client.render.GameRenderer;
import net.minecraft.client.texture.NativeImage;
import net.minecraft.client.texture.NativeImageBackedTexture;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.util.Identifier;
import net.minecraft.util.Util;
import net.minecraft.util.math.MathHelper;
@@ -61,12 +61,12 @@ public abstract class MixinSplashScreen extends Overlay {
return (!PuzzleConfig.resourcepackSplashScreen || PuzzleConfig.progressBarBackgroundColor == 15675965) ? instance.getAsInt() : PuzzleConfig.backgroundColor | 255 << 24;
}
@Inject(method = "render", at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/systems/RenderSystem;blendFunc(II)V", shift = At.Shift.AFTER), remap = false)
private void puzzle$betterBlend(MatrixStack matrices, int mouseX, int mouseY, float delta, CallbackInfo ci) {
if (PuzzleConfig.disableBlend) RenderSystem.defaultBlendFunc();
private void puzzle$betterBlend(DrawContext context, int mouseX, int mouseY, float delta, CallbackInfo ci) {
if (PuzzleConfig.disableBlend && PuzzleConfig.resourcepackSplashScreen) RenderSystem.defaultBlendFunc();
}
@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)) {
@Inject(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/DrawContext;getScaledWindowWidth()I", shift = At.Shift.BEFORE, ordinal = 2))
private void puzzle$renderSplashBackground(DrawContext context, int mouseX, int mouseY, float delta, CallbackInfo ci) {
if (Files.exists(PuzzleSplashScreen.BACKGROUND_TEXTURE) && PuzzleConfig.resourcepackSplashScreen) {
int width = client.getWindow().getScaledWidth();
int height = client.getWindow().getScaledHeight();
long l = Util.getMeasuringTimeMs();
@@ -79,32 +79,31 @@ public abstract class MixinSplashScreen extends Overlay {
s = MathHelper.clamp(g, 0.0F, 1.0F);
else
s = 1.0F;
RenderSystem.setShaderTexture(0, PuzzleSplashScreen.BACKGROUND);
RenderSystem.enableBlend();
RenderSystem.blendEquation(32774);
RenderSystem.defaultBlendFunc();
RenderSystem.setShader(GameRenderer::getPositionTexProgram);
RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, s);
drawTexture(matrices, 0, 0, 0, 0, 0, width, height, width, height);
context.drawTexture(PuzzleSplashScreen.BACKGROUND, 0, 0, 0, 0, 0, width, height, width, height);
RenderSystem.defaultBlendFunc();
RenderSystem.disableBlend();
}
}
@Inject(method = "renderProgressBar", at = @At("HEAD"))
private void puzzle$addProgressBarBackground(MatrixStack matrices, int minX, int minY, int maxX, int maxY, float opacity, CallbackInfo ci) {
private void puzzle$addProgressBarBackground(DrawContext context, int minX, int minY, int maxX, int maxY, float opacity, CallbackInfo ci) {
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));
context.fill(minX, minY, maxX, maxY, withAlpha(PuzzleConfig.progressBarBackgroundColor, m));
}
@ModifyArg(method = "renderProgressBar", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screen/SplashOverlay;fill(Lnet/minecraft/client/util/math/MatrixStack;IIIII)V"), index = 5)
@ModifyArg(method = "renderProgressBar", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/DrawContext;fill(IIIII)V"), index = 4)
private int puzzle$modifyProgressFrame(int color) { // Set the Progress Bar Frame Color to our configured value //
return (!PuzzleConfig.resourcepackSplashScreen || PuzzleConfig.progressFrameColor == 16777215) ? color : PuzzleConfig.progressFrameColor | 255 << 24;
}
@ModifyArg(method = "renderProgressBar", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screen/SplashOverlay;fill(Lnet/minecraft/client/util/math/MatrixStack;IIIII)V", ordinal = 0), index = 5)
@ModifyArg(method = "renderProgressBar", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/DrawContext;fill(IIIII)V", ordinal = 0), index = 4)
private int puzzle$modifyProgressColor(int color) { // Set the Progress Bar Color to our configured value //
return (!PuzzleConfig.resourcepackSplashScreen || PuzzleConfig.progressBarColor == 16777215) ? color : PuzzleConfig.progressBarColor | 255 << 24;
}

View File

@@ -0,0 +1,42 @@
{
"puzzle.text.update_available":"Даступна абнаўленне!",
"puzzle.screen.title":"Налады Puzzle",
"puzzle.page.graphics":"Графіка",
"puzzle.page.resources":"Рэсурсы",
"puzzle.page.performance":"Прадукцыйнасць",
"puzzle.page.misc":"Рознае",
"puzzle.option.check_for_updates":"Праверыць абнаўленні",
"puzzle.option.check_for_updates.tooltip":"Уключае ўбудаваны правершчык абнаўленняў",
"puzzle.option.show_version_info":"Паказваць версію Puzzle",
"puzzle.option.show_version_info.tooltip":"Паказваць інфармацыю пра бягучую\nверсію Puzzle и наяўнасць абнаўленняў на\nтытульным экране і меню F3",
"puzzle.option.resourcepack_splash_screen":"Выкарыстанне пакетаў рэсурсаў для сплэшэй",
"puzzle.option.resourcepack_splash_screen.tooltip":"Уключае пакеты рэсурсаў, якія змяняюць\nзагрузачныя экраны/сплэшы\nMinecraft, якія выкарыстоўваюць фармат OptiFine",
"puzzle.option.better_splash_screen_blend":"Палепшанае спалучэнне сплэшэй і лагатыпу",
"puzzle.option.better_splash_screen_blend.tooltip":"Змяняе тып спалучэння\nлагатыпу і сплэшэй\nкаб палепшыць працу з лагатыпамі карыстальніцкіх колераў",
"puzzle.option.unlimited_model_rotations":"Неабмежаванае вярчэнне мадэлі",
"puzzle.option.unlimited_model_rotations.tooltip":"Дазваляе вярчэнне на 360° на карыстальніцкіх мадэляў блокаў/прадметаў",
"puzzle.option.bigger_custom_models":"Павялічаныя карыстальніцкія мадэлі",
"puzzle.option.bigger_custom_models.tooltip":"Павялічвае ліміт памеру\nкарыстальніцкіх мадэляў блокаў/прадметаў\nз 3x3x3 да 5x5x5",
"puzzle.midnightconfig.title":"Пашыраныя налады Puzzle",
"puzzle.midnightconfig.category.gui":"GUI",
"puzzle.midnightconfig.category.features":"Асаблівасці",
"puzzle.midnightconfig.category.debug":"Debug",
"puzzle.midnightconfig.tooltip":"Налады толькі для вопытных карыстальнікаў",
"cullleaves.puzzle.option.enabled": "Адбракоўваць лісце",
"cullleaves.puzzle.option.enabled.tooltip": "Уключыць адбракоўванне лісця, каб павялічыць прадукцыйнасць",
"iris.puzzle.option.enableShaders": "Уключыць шэйдэры",
"iris.puzzle.option.enableShaders.tooltip": "Дазваляе уключаць ці выключаць шэйдэры",
"iris.puzzle.option.open": "АДКРЫЦЬ",
"options.iris.shaderPackSelection.tooltip": "Адкрывае экран выбару\nшэйдэраў і іх налад",
"lambdabettergrass.option.mode.tooltip": "Робіць бакі\nзямлі з дзёрнам злучанымі з\nверхам гэтага блоку",
"lambdabettergrass.option.better_snow.tooltip": "Дадае крыху бачны слой снег/імху\nна непоўныя блокі, якія\nакружаны снегам/імхом",
"config.dynamicfps.reduce_when_unfocused.tooltip": "Зніжае FPS у Minecraft калі ён не актыўны\n(то бок калі іншая прагракма адчынена ці гульня згорнута)\nкаб захаваць рэсурсы сістэмы",
"config.dynamicfps.unfocused_fps.tooltip": "Колькасць кадраў у секунду, калі\nMinecraft згорнуты",
"config.dynamicfps.restore_when_hovered.tooltip": "Дазваляе скасаваць ці не\nабмежаванне FPS, калі Minecraft актыны\n(то бок актыўны ці наведзены курсорам з панелі задач)",
"config.dynamicfps.run_gc_on_unfocus.tooltip": "Запусціць збіральнік смецця калі\nMinecraft неактыўны,\n каб ачысціць крыху АЗУ",
"config.dynamicfps.unfocused_volume.tooltip": "Гучнасць прайгравальных гукаў\nкалі гульня не актыўна\n(то бок іншае акно абрана)",
"config.dynamicfps.hidden_volume.tooltip": "Гучнасць прайгравальных гукаў\nкали гульня не бачна\n(то бок згорнута, знаходзіцца пад іншымі вокнамі\nці на ішай віртуальнай машыне)",
"entity_texture_features.puzzle.emissive_type.brighter": "§eЯрчэй",
"entity_texture_features.puzzle.emissive_type.default": "§6Стандартна"
}

View File

@@ -1,9 +1,9 @@
{
"puzzle.text.update_available":"Доступно обновление!",
"puzzle.screen.title":"Настройки Puzzle",
"puzzle.page.graphics":"графики",
"puzzle.page.resources":"ресурсов",
"puzzle.page.performance":"Производительность",
"puzzle.page.graphics":"Графика",
"puzzle.page.resources":"Ресурсы",
"puzzle.page.performance":"Оптимизация",
"puzzle.page.misc":"Прочие",
"puzzle.option.check_for_updates":"Проверять обновления",
"puzzle.option.check_for_updates.tooltip":"Включить встроенную в Puzzle проверку обновлений",
@@ -18,10 +18,13 @@
"puzzle.option.bigger_custom_models":"Увеличенный размер моделей",
"puzzle.option.bigger_custom_models.tooltip":"Увеличить предельный размер\nпользовательских моделей блоков\nи предметов с 3×3×3 до 5×5×5",
"puzzle.midnightconfig.title":"Расширенные настройки Puzzle",
"puzzle.midnightconfig.category.gui":"Интерфейс",
"puzzle.midnightconfig.category.features":"Функционал",
"puzzle.midnightconfig.category.debug":"Отладка",
"puzzle.midnightconfig.tooltip":"Только для продвинутых пользователей!",
"cullleaves.puzzle.option.enabled": "Отбраковка листвы",
"cullleaves.puzzle.option.enabled.tooltip": "Включить отбраковку блоков листвы\nдля улучшения производительности",
"cullleaves.puzzle.option.enabled": "Отбраковка листьев",
"cullleaves.puzzle.option.enabled.tooltip": "Включить отбраковку блоков листьев\nдля улучшения производительности",
"iris.puzzle.option.enableShaders": "Шейдеры",
"iris.puzzle.option.enableShaders.tooltip": "Включить выбранный набор шейдеров",
"iris.puzzle.option.open": "Выбрать ",
@@ -35,5 +38,11 @@
"config.dynamicfps.unfocused_volume.tooltip": "Громкость звука игры в состоянии фона\n(когда активно другое окно)",
"config.dynamicfps.hidden_volume.tooltip": "Громкость звука игры в скрытом состоянии\n(когда окно свёрнуто, закрыто другим окном\nили находится на другом рабочем столе)",
"entity_texture_features.puzzle.emissive_type.brighter": "§eЯркие",
"entity_texture_features.puzzle.emissive_type.default": "§6Обычные"
"entity_texture_features.puzzle.emissive_type.default": "§6Обычные",
"modmenu.descriptionTranslation.puzzle": "Функции улучшения внешнего вида и производительности.",
"modmenu.descriptionTranslation.puzzle-base": "Общий код всех модулей Puzzle.",
"modmenu.descriptionTranslation.puzzle-gui": "Альтернативы Optifine, объединённые в едином меню.",
"modmenu.descriptionTranslation.puzzle-models": "Больше свободы моделям блоков и предметов!",
"modmenu.descriptionTranslation.puzzle-splashscreen": "Свой экран загрузки при помощи наборов ресурсов."
}

View File

@@ -0,0 +1,42 @@
{
"puzzle.text.update_available":"Đã có bản cập nhật!",
"puzzle.screen.title":"Cài đặt Puzzle",
"puzzle.page.graphics":"Đồ họa",
"puzzle.page.resources":"Tài nguyên",
"puzzle.page.performance":"Hiệu năng",
"puzzle.page.misc":"Khác",
"puzzle.option.check_for_updates":"Kiểm tra cập nhật",
"puzzle.option.check_for_updates.tooltip":"Bật trình kiểm tra cập nhật tích hợp của Puzzle",
"puzzle.option.show_version_info":"Hiển thị thông tin phiên bản Puzzle",
"puzzle.option.show_version_info.tooltip":"Hiển thị thông tin về phiên bản \nPuzzle hiện tại và trạng thái cập nhật trên\nMàn hình Tiêu đề và Menu F3",
"puzzle.option.resourcepack_splash_screen":"Sử dụng màn hình đốm gói tài nguyên",
"puzzle.option.resourcepack_splash_screen.tooltip":"Cho phép gói tài nguyên thay đổi giao diện\nmàn hình tải/đốm\ncủa Minecraft bằng định dạng OptiFine",
"puzzle.option.better_splash_screen_blend":"Logo màn hình đốm tốt hơn",
"puzzle.option.better_splash_screen_blend.tooltip":"Thay đổi kiểu hòa trộn được sử dụng\nbởi biểu trưng trên màn hình đốm\nđể hoạt động tốt hơn với các biểu trưng có màu tùy chỉnh",
"puzzle.option.unlimited_model_rotations":"Xoay mô hình không giới hạn",
"puzzle.option.unlimited_model_rotations.tooltip":"Mở khóa xoay 360° đầy đủ trên các mô hình khối/vật phẩm tùy chỉnh",
"puzzle.option.bigger_custom_models":"Mô hình tùy chỉnh lớn hơn",
"puzzle.option.bigger_custom_models.tooltip":"Tăng giới hạn của\nkích thước mô hình khối/vật phẩm tùy chỉnh\ntừ 3x3x3 lên 5x5x5",
"puzzle.midnightconfig.title":"Cấu hình Puzzle nâng cao",
"puzzle.midnightconfig.category.gui":"GUI",
"puzzle.midnightconfig.category.features":"Tính năng",
"puzzle.midnightconfig.category.debug":"Gỡ lỗi",
"puzzle.midnightconfig.tooltip":"Tùy chọn chỉ dành cho người dùng nâng cao",
"cullleaves.puzzle.option.enabled": "Loại bỏ Lá",
"cullleaves.puzzle.option.enabled.tooltip": "Bật tính năng loại bỏ lá để nâng cao hiệu suất",
"iris.puzzle.option.enableShaders": "Bật Shader",
"iris.puzzle.option.enableShaders.tooltip": "Bật shaderpack",
"iris.puzzle.option.open": "MỞ",
"options.iris.shaderPackSelection.tooltip": "Mở một màn hình để chọn\nshaderpack và định cấu hình chúng",
"lambdabettergrass.option.mode.tooltip": "Làm cho các cạnh của\nkhối cỏ kết nối với\nkhối cỏ liền kề",
"lambdabettergrass.option.better_snow.tooltip": "Thêm một lớp tuyết/rêu hoàn toàn trực quan\nvào các khối không đầy đủ\nđược bao quanh bởi tuyết/rêu",
"config.dynamicfps.reduce_when_unfocused.tooltip": "Giảm FPS của Minecraft khi không tập trung\n(tức là một cửa sổ khác được tập trung hoặc trò chơi bị ẩn)\nđể tiết kiệm năng lượng và tài nguyên hệ thống",
"config.dynamicfps.unfocused_fps.tooltip": "Lượng khung hình mỗi giây\nMinecraft được phép\nkết xuất khi không tập trung",
"config.dynamicfps.restore_when_hovered.tooltip": "Dừng giới hạn\nFPS trong khi Minecraft được xem trước\n(tức là được di chuột trên thanh tác vụ hoặc thanh công cụ)",
"config.dynamicfps.run_gc_on_unfocus.tooltip": "Chạy trình thu gom rác trong khi\nMinecraft không tập trung vào\ngiải phóng một số RAM",
"config.dynamicfps.unfocused_volume.tooltip": "Âm lượng mà trò chơi sẽ phát\nâm thanh khi không tập trung\n(tức là một cửa sổ khác được chọn)",
"config.dynamicfps.hidden_volume.tooltip": "Âm lượng mà trò chơi sẽ phát\nâm thanh trong khi không hiển thị\n(tức là được thu nhỏ, bị che bởi các cửa sổ khác\ncũng như trên màn hình ảo khác)",
"entity_texture_features.puzzle.emissive_type.brighter": "§eSáng hơn",
"entity_texture_features.puzzle.emissive_type.default": "§6Mặc định"
}

View File

@@ -1,17 +1,39 @@
{
"puzzle.text.update_available":"有新版本可供升級!",
"puzzle.screen.title":"拼圖設置",
"puzzle.page.graphics":"顯示設",
"puzzle.page.resources":"資源設",
"puzzle.page.performance":"能設",
"puzzle.page.misc":"其他設",
"puzzle.option.check_for_updates":"檢查更新",
"puzzle.option.show_version_info":"顯示拼圖版本信息",
"puzzle.option.resourcepack_splash_screen":"使用資源包的加載界面",
"puzzle.option.disable_splash_screen_blend":"禁止加載界面徽標渲染",
"puzzle.option.emissive_textures":"發光貼圖",
"puzzle.option.unlimited_model_rotations":"無限模型旋轉",
"puzzle.option.bigger_custom_models":"更大的自定義模型",
"puzzle.option.render_layer_overrides":"覆蓋渲染層",
"puzzle.midnightconfig.title":"拼圖高級設置"
"puzzle.text.update_available": "有新版本可供升級!",
"puzzle.screen.title": "Puzzle 設定",
"puzzle.page.graphics": "顯示設",
"puzzle.page.resources": "資源設",
"puzzle.page.performance": "能設",
"puzzle.page.misc": "其他設",
"puzzle.option.check_for_updates": "檢查更新",
"puzzle.option.check_for_updates.tooltip": "開啟 Puzzle 內建的更新檢查",
"puzzle.option.show_version_info": "顯示 Puzzle 版本信息",
"puzzle.option.show_version_info.tooltip": "在標題畫面和 F3 選單上\n顯示有關目前 Puzzle 版本和更新狀態的資訊",
"puzzle.option.resourcepack_splash_screen": "使用資源包載入畫面",
"puzzle.option.resourcepack_splash_screen.tooltip": "使資源包可以使用 OptiFine 格式\n更改 Minecraft 的載入畫面",
"puzzle.option.better_splash_screen_blend": "更好的載入畫面圖示混和",
"puzzle.option.better_splash_screen_blend.tooltip": "更改激活畫面上標誌的混合方式\n以便更好地與自訂顏色的標誌配合使用",
"puzzle.option.unlimited_model_rotations": "無限模型旋轉",
"puzzle.option.unlimited_model_rotations.tooltip": "在自訂方塊/物品模型上解鎖完整 360° 旋轉",
"puzzle.option.bigger_custom_models": "更大的自訂模型",
"puzzle.option.bigger_custom_models.tooltip": "增加將自訂方塊/物品模型大小\n從 3x3x3 增加到 5x5x5",
"puzzle.midnightconfig.title": "Puzzle 進階設定",
"puzzle.midnightconfig.tooltip": "給予進階使用者使用的選項",
"cullleaves.puzzle.option.enabled": "樹葉剔除",
"cullleaves.puzzle.option.enabled.tooltip": "開啟樹葉剔除以提升效能。",
"iris.puzzle.option.enableShaders": "開啟光影",
"iris.puzzle.option.enableShaders.tooltip": "開啟或關閉光影包",
"iris.puzzle.option.open": "開",
"options.iris.shaderPackSelection.tooltip": "開啟選擇畫面光影包和設定",
"lambdabettergrass.option.mode.tooltip": "讓草的側面連接相鄰的草塊",
"lambdabettergrass.option.better_snow.tooltip": "對雪塊/苔蘚方塊被包圍的不完整方塊\n增加視覺效果",
"config.dynamicfps.reduce_when_unfocused.tooltip": "當 Minecraft 失去焦點時限制 FPS\n如切換到其他視窗或是遊戲被隱藏\n以節省電源和系統資源",
"config.dynamicfps.unfocused_fps.tooltip": "當 Minecraft 失去焦點時允許的最大 FPS",
"config.dynamicfps.restore_when_hovered.tooltip": "開啟或關閉預覽 Mineceraft 時是否停止 FPS 限制\n如停留在工作列或 Dock",
"config.dynamicfps.run_gc_on_unfocus.tooltip": "當 Minecraft 失去焦點時執行垃圾清理\n以減少一些記憶體",
"config.dynamicfps.unfocused_volume.tooltip": "當 Minecraft 失去焦點時撥放的音量\n如選擇了另一個視窗",
"config.dynamicfps.hidden_volume.tooltip": "遊戲在不可見時應該播放的音量\n如最小化、被其他視窗覆蓋或在另一個虛擬桌面上",
"entity_texture_features.puzzle.emissive_type.brighter": "§e更亮",
"entity_texture_features.puzzle.emissive_type.default": "§6預設"
}

View File

@@ -21,6 +21,7 @@
"environment": "client",
"depends": {
"fabric": "*"
"fabric": "*",
"minecraft": ">=1.20.2"
}
}