2 Commits
1.20 ... 1.20.4

Author SHA1 Message Date
Martin Prokoph
39261272bf Puzzle 1.6.1 for 1.20.4
- Update to 1.20.4
- Re-Use MidnightConfig's list widget -> prettier background
2023-12-11 21:33:54 +01:00
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
16 changed files with 98 additions and 203 deletions

View File

@@ -134,7 +134,7 @@ dependencies {
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 ("maven.modrinth:exordium:${project.exordium_version}")
modImplementation("org.aperlambda:lambdajcommon:1.8.1") {
exclude group: 'com.google.code.gson'

View File

@@ -3,38 +3,37 @@ org.gradle.jvmargs=-Xmx4G
# Fabric Properties
# check these on https://fabricmc.net/use
minecraft_version=1.20
yarn_mappings=1.20+build.1
loader_version=0.14.21
minecraft_version=1.20.4
yarn_mappings=1.20.4+build.1
loader_version=0.15.1
# Mod Properties
mod_version = 1.5.2+1.20
mod_version = 1.6.1+1.20.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.83.0+1.20
fabric_version=0.91.2+1.20.4
mod_menu_version = 7.0.1
midnightlib_version = 1.4.1-fabric
midnightlib_version = 1.5.2-fabric
cull_leaves_version = 3.0.2-fabric
ldl_version = 2.3.0+1.19.4
lbg_version = 1.5.1+1.20
iris_version = 1.6.4+1.20
continuity_version = 3.0.0-beta.2+1.19.3
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.7+1.19.4
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.3+1.20
cem_version = 0.7.1-1.19.3
complete_config_version = 2.3.0
spruceui_version=5.0.0+1.20
emf_version=0.2.10
etf_version=4.4.4
exordium_version=1.1.1-1.19.4
emf_version=1.2
etf_version=5.0
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-8.1-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

View File

@@ -43,10 +43,10 @@ dependencies {
modCompileOnlyApi ("maven.modrinth:lambdabettergrass:${project.lbg_version}")
modCompileOnly "org.quiltmc:quilt-loader:${rootProject.quilt_loader_version}"
modCompileOnlyApi "org.quiltmc.quilted-fabric-api:quilted-fabric-api:${rootProject.quilt_fabric_api_version}"
modImplementation ("maven.modrinth:iris:${project.iris_version}")
modCompileOnlyApi ("maven.modrinth:iris:${project.iris_version}")
modCompileOnly ("maven.modrinth:cit-resewn:${project.cit_resewn_version}")
modCompileOnlyApi ("maven.modrinth:continuity:${project.continuity_version}")
modImplementation ("maven.modrinth:animatica:${project.animatica_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}")
@@ -54,7 +54,7 @@ dependencies {
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 ("maven.modrinth:exordium:${project.exordium_version}")
modImplementation("org.aperlambda:lambdajcommon:1.8.1") {
exclude group: 'com.google.code.gson'

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,9 +4,7 @@ import dev.lambdaurora.lambdabettergrass.LBGConfig;
import dev.lambdaurora.lambdabettergrass.LambdaBetterGrass;
import dev.lambdaurora.lambdynlights.DynamicLightsConfig;
import dev.lambdaurora.lambdynlights.LambDynLights;
import dynamicfps.DynamicFPSConfig;
import dynamicfps.DynamicFPSMod;
import eu.midnightdust.core.MidnightLibClient;
import eu.midnightdust.core.MidnightLib;
import eu.midnightdust.cullleaves.config.CullLeavesConfig;
import eu.midnightdust.lib.util.PlatformFunctions;
import io.github.kvverti.colormatic.Colormatic;
@@ -14,6 +12,8 @@ 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.minecraft.screen.ScreenTexts;
import net.minecraft.util.Identifier;
import net.puzzlemc.core.config.PuzzleConfig;
import net.puzzlemc.gui.screen.widget.PuzzleWidget;
import net.fabricmc.api.ClientModInitializer;
@@ -23,7 +23,6 @@ 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_model_features.utils.EMFManager;
import traben.entity_texture_features.ETFApi;
import traben.entity_texture_features.config.ETFConfig;
import io.github.kvverti.colormatic.ColormaticConfig;
@@ -33,10 +32,11 @@ 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() {
MidnightLibClient.hiddenMods.add("puzzle");
MidnightLib.hiddenMods.add("puzzle");
MinecraftClient client = MinecraftClient.getInstance();
PuzzleApi.addToMiscOptions(new PuzzleWidget(Text.of("Puzzle")));
PuzzleApi.addToMiscOptions(new PuzzleWidget(Text.translatable("puzzle.option.check_for_updates"), (button) -> button.setMessage(PuzzleConfig.checkUpdates ? YES : NO), (button) -> {
@@ -109,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();
@@ -178,11 +135,11 @@ public class PuzzleClient implements ClientModInitializer {
PuzzleApi.addToGraphicsOptions(new PuzzleWidget(Text.of("LambDynamicLights")));
PuzzleApi.addToGraphicsOptions(new PuzzleWidget(Text.translatable("lambdynlights.option.mode"), (button) -> button.setMessage(ldlConfig.getDynamicLightsMode().getTranslatedText()), (button) -> ldlConfig.setDynamicLightsMode(ldlConfig.getDynamicLightsMode().next())));
PuzzleApi.addToGraphicsOptions(new PuzzleWidget(Text.translatable("").append("DynLights: ").append(Text.translatable("lambdynlights.option.light_sources.entities")), (button) -> button.setMessage(ldlConfig.getEntitiesLightSource().get() ? YES : NO), (button) -> ldlConfig.getEntitiesLightSource().set(!ldlConfig.getEntitiesLightSource().get())));
PuzzleApi.addToGraphicsOptions(new PuzzleWidget(Text.translatable("").append("DynLights: ").append(Text.translatable("lambdynlights.option.light_sources.block_entities")), (button) -> button.setMessage(ldlConfig.getBlockEntitiesLightSource().get() ? YES : NO), (button) -> ldlConfig.getBlockEntitiesLightSource().set(!ldlConfig.getBlockEntitiesLightSource().get())));
PuzzleApi.addToGraphicsOptions(new PuzzleWidget(Text.translatable("").append("DynLights: ").append(Text.translatable("entity.minecraft.creeper")), (button) -> button.setMessage(ldlConfig.getCreeperLightingMode().getTranslatedText()), (button) -> ldlConfig.setCreeperLightingMode(ldlConfig.getCreeperLightingMode().next())));
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())));
PuzzleApi.addToGraphicsOptions(new PuzzleWidget(Text.empty().append("DynLights: ").append(Text.translatable("lambdynlights.option.light_sources.entities")), (button) -> button.setMessage(ldlConfig.getEntitiesLightSource().get() ? YES : NO), (button) -> ldlConfig.getEntitiesLightSource().set(!ldlConfig.getEntitiesLightSource().get())));
PuzzleApi.addToGraphicsOptions(new PuzzleWidget(Text.empty().append("DynLights: ").append(Text.translatable("lambdynlights.option.light_sources.block_entities")), (button) -> button.setMessage(ldlConfig.getBlockEntitiesLightSource().get() ? YES : NO), (button) -> ldlConfig.getBlockEntitiesLightSource().set(!ldlConfig.getBlockEntitiesLightSource().get())));
PuzzleApi.addToGraphicsOptions(new PuzzleWidget(Text.empty().append("DynLights: ").append(Text.translatable("entity.minecraft.creeper")), (button) -> button.setMessage(ldlConfig.getCreeperLightingMode().getTranslatedText()), (button) -> ldlConfig.setCreeperLightingMode(ldlConfig.getCreeperLightingMode().next())));
PuzzleApi.addToGraphicsOptions(new PuzzleWidget(Text.empty().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.empty().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 (isActive("citresewn") && CITResewnConfig.INSTANCE != null) {
PuzzleApi.addToResourceOptions(new PuzzleWidget(Text.of("CIT Resewn")));
@@ -229,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) {}
@@ -263,13 +219,17 @@ public class PuzzleClient implements ClientModInitializer {
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.substitute_vanilla"), (button) -> button.setMessage(emfConfig.attemptToCopyVanillaModelIntoMissingModelPart ? YES : NO), (button) -> {
emfConfig.attemptToCopyVanillaModelIntoMissingModelPart = !emfConfig.attemptToCopyVanillaModelIntoMissingModelPart;
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 (EMFConfig.getConfig().reloadMode == EMFConfig.ModelDataRefreshMode.MANUAL) {
EMFManager.resetInstance();
}
}));
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,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

@@ -10,8 +10,7 @@ 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.widget.PuzzleOptionListWidget;
import net.puzzlemc.gui.screen.widget.PuzzleWidget;
import net.puzzlemc.gui.screen.widget.*;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.gui.widget.ButtonWidget;
@@ -51,11 +50,12 @@ public class PuzzleOptionsScreen extends Screen {
tabNavigation.init();
prevTab = tabManager.getCurrentTab();
this.addDrawableChild(tabNavigation);
this.list = new PuzzleOptionListWidget(this.client, this.width, this.height, 32, this.height - 32, 25);
this.list = new PuzzleOptionListWidget(this.client, this.width, this.height - 64, 32, 25);
fillList();
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());
}
@@ -86,17 +86,9 @@ public class PuzzleOptionsScreen extends Screen {
@Override
public void render(DrawContext context, int mouseX, int mouseY, float delta) {
this.renderBackground(context);
if (client != null && client.world != null) this.list.setRenderBackground(false);
if (client != null && client.world != null) super.renderInGameBackground(context);
this.list.render(context, mouseX, mouseY, delta);
super.render(context, 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))) {
context.drawTooltip(textRenderer, tooltip, this.list.getFocused().getX(), this.list.getFocused().getY() + (this.list.getFocused().getHeight() * 2));
}
else context.drawTooltip(textRenderer, tooltip, mouseX, mouseY);
}
tooltip = null;
}
@Override public void renderBackground(DrawContext c, int x, int y, float d) {}
}

View File

@@ -2,7 +2,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;
import java.util.function.Supplier;
@@ -15,8 +14,10 @@ public class PuzzleButtonWidget extends ButtonWidget {
this.title = title;
}
@Override
public void renderButton(DrawContext context, int mouseX, int mouseY, float delta) {
title.setTitle(this);
super.renderButton(context, mouseX, mouseY, delta);
public void renderWidget(DrawContext context, int mouseX, int mouseY, float delta) {
try {
title.setTitle(this);
} catch (Exception e) {e.fillInStackTrace(); this.visible = false;}
super.renderWidget(context, mouseX, mouseY, delta);
}
}

View File

@@ -1,133 +1,74 @@
package net.puzzlemc.gui.screen.widget;
import eu.midnightdust.lib.config.MidnightConfig;
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.minecraft.util.Formatting;
import net.puzzlemc.gui.screen.PuzzleOptionsScreen;
import org.apache.logging.log4j.LogManager;
import java.util.*;
@Environment(EnvType.CLIENT)
public class PuzzleOptionListWidget extends ElementListWidget<PuzzleOptionListWidget.ButtonEntry> {
public class PuzzleOptionListWidget extends MidnightConfig.MidnightConfigListWidget {
TextRenderer textRenderer;
public PuzzleOptionListWidget(MinecraftClient minecraftClient, int i, int j, int k, int l, int m) {
super(minecraftClient, i, j, k, l, m);
public PuzzleOptionListWidget(MinecraftClient minecraftClient, int i, int j, int k, int l) {
super(minecraftClient, i, j, k, l);
this.centerListVertically = false;
textRenderer = minecraftClient.textRenderer;
}
public void addButton(ClickableWidget button, Text text) {
this.addEntry(ButtonEntry.create(button, text));
}
public void addAll(List<PuzzleWidget> buttons) {
for (PuzzleWidget button : buttons) {
if (button.buttonType == ButtonType.TEXT) {
this.addButton(null, button.descriptionText);
this.addButton(List.of(), Text.literal("> ").append(button.descriptionText).formatted(Formatting.BOLD), new MidnightConfig.EntryInfo());
} else if (button.buttonType == ButtonType.BUTTON) {
this.addButton(new PuzzleButtonWidget(this.width / 2 + 25, 0, 150, 20, button.buttonTextAction, button.onPress), button.descriptionText);
this.addButton(List.of(new PuzzleButtonWidget(this.width / 2 + 25, 0, 150, 20, button.buttonTextAction, button.onPress)), button.descriptionText, new MidnightConfig.EntryInfo());
} else if (button.buttonType == ButtonType.SLIDER) {
this.addButton(new PuzzleSliderWidget(button.min, button.max, this.width / 2 + 25, 0, 150, 20, button.defaultSliderValue.getAsInt(), button.buttonTextAction, button.changeSliderValue), button.descriptionText);
this.addButton(List.of(new PuzzleSliderWidget(button.min, button.max, this.width / 2 + 25, 0, 150, 20, button.defaultSliderValue.getAsInt(), button.buttonTextAction, button.changeSliderValue)), button.descriptionText, new MidnightConfig.EntryInfo());
} else if (button.buttonType == ButtonType.TEXT_FIELD) {
this.addButton(new PuzzleTextFieldWidget(textRenderer, this.width / 2 + 25, 0, 150, 20, button.setTextValue, button.changeTextValue), button.descriptionText);
this.addButton(List.of(new PuzzleTextFieldWidget(textRenderer, this.width / 2 + 25, 0, 150, 20, button.setTextValue, button.changeTextValue)), button.descriptionText, new MidnightConfig.EntryInfo());
} else
LogManager.getLogger("Puzzle").warn("Button " + button + " is missing the buttonType variable. This shouldn't happen!");
}
}
public void renderWidget(DrawContext context, int mouseX, int mouseY, float delta) {
super.renderWidget(context, mouseX, mouseY, delta);
MidnightConfig.ButtonEntry e = this.getHoveredEntry();
if (client.currentScreen instanceof PuzzleOptionsScreen page && e != null && !e.buttons.isEmpty() && MidnightConfig.ButtonEntry.buttonsWithText.get(e.buttons.get(0)).getContent() instanceof TranslatableTextContent content) {
ClickableWidget button = e.buttons.get(0);
String key = null;
if (I18n.hasTranslation(content.getKey() + ".tooltip")) key = content.getKey() + ".tooltip";
else if (I18n.hasTranslation(content.getKey() + ".desc")) key = content.getKey() + ".desc";
if (key == null && content.getKey().endsWith(".title")) {
String strippedContent = content.getKey().substring(0, content.getKey().length()-6);
if (I18n.hasTranslation(strippedContent + ".tooltip")) key = strippedContent + ".tooltip";
else if (I18n.hasTranslation(strippedContent + ".desc")) key = strippedContent + ".desc";
}
public void clear() {
super.clearEntries();
}
public int getRowWidth() {
return 400;
}
protected int getScrollbarPositionX() {
return super.getScrollbarPositionX() + 60;
if (key != null) {
List<Text> list = new ArrayList<>();
for (String str : I18n.translate(key).split("\n"))
list.add(Text.literal(str));
page.tooltip = list;
if (!button.isMouseOver(mouseX, mouseY)) {
context.drawTooltip(textRenderer, list, button.getX(), button.getY() + (button.getHeight() * 2));
}
else context.drawTooltip(textRenderer, list, mouseX, mouseY);
}
}
}
@Override
public ButtonEntry getHoveredEntry() {
public MidnightConfig.ButtonEntry getHoveredEntry() {
return super.getHoveredEntry();
}
public static class ButtonEntry extends ElementListWidget.Entry<ButtonEntry> {
private static final TextRenderer textRenderer = MinecraftClient.getInstance().textRenderer;
private List<ClickableWidget> buttons = new ArrayList<>();
public final ClickableWidget button;
public final Text text;
private MinecraftClient client = MinecraftClient.getInstance();
private ButtonEntry(ClickableWidget button, Text text) {
if (button != null)
this.buttons.add(button);
this.button = button;
this.text = text;
}
public static ButtonEntry create(ClickableWidget button, Text text) {
return new ButtonEntry(button, text);
}
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(context, mouseX, mouseY, tickDelta);
}
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) {
String key = null;
if (I18n.hasTranslation(content.getKey() + ".tooltip")) key = content.getKey() + ".tooltip";
else if (I18n.hasTranslation(content.getKey() + ".desc")) key = content.getKey() + ".desc";
if (key == null && content.getKey().endsWith(".title")) {
String strippedContent = content.getKey().substring(0, content.getKey().length()-6);
if (I18n.hasTranslation(strippedContent + ".tooltip")) key = strippedContent + ".tooltip";
else if (I18n.hasTranslation(strippedContent + ".desc")) key = strippedContent + ".desc";
}
if (key != null) {
List<Text> list = new ArrayList<>();
for (String str : I18n.translate(key).split("\n"))
list.add(Text.literal(str));
page.tooltip = list;
}
}
}
public int getY() {
return button.getY();
}
public int getX() {
return button.getX();
}
public int getHeight() {
return button.getHeight();
}
public int getWidth() {
return button.getWidth();
}
public List<? extends Element> children() {
return buttons;
}
@Override
public List<? extends Selectable> selectableChildren() {
return buttons;
}
}
}

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: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 152 B

View File

@@ -8,7 +8,6 @@ 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;

View File

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