From 42d720c73ebfcbe6bf8856b376ae128339628a92 Mon Sep 17 00:00:00 2001 From: Calum Date: Wed, 21 Aug 2024 12:28:09 +0100 Subject: [PATCH] fix: QOL changes --- build.gradle | 4 +- settings.gradle | 4 +- .../client/gui/PresetEditScreen.java | 32 +++++++++++----- .../client/gui/cursed/GuiEntityRenderer.java | 38 +++++++++++++++---- .../mixin/MinecraftClientMixin.java | 4 ++ .../assets/skinshuffle/lang/en_us.json | 3 +- src/main/resources/aw/1.20.1.accesswidener | 15 ++++++++ src/main/resources/aw/1.20.4.accesswidener | 15 ++++++++ src/main/resources/aw/1.20.6.accesswidener | 15 ++++++++ .../1.21.accesswidener} | 0 src/main/resources/fabric.mod.json | 2 +- 11 files changed, 108 insertions(+), 24 deletions(-) create mode 100644 src/main/resources/aw/1.20.1.accesswidener create mode 100644 src/main/resources/aw/1.20.4.accesswidener create mode 100644 src/main/resources/aw/1.20.6.accesswidener rename src/main/resources/{skinshuffle.accesswidener => aw/1.21.accesswidener} (100%) diff --git a/build.gradle b/build.gradle index 9c83145..5835f60 100644 --- a/build.gradle +++ b/build.gradle @@ -50,7 +50,7 @@ if (stonecutter.current.active) { // run configs for non-active version would be } loom { - accessWidenerPath = getRootProject().file("src/main/resources/skinshuffle.accesswidener") + accessWidenerPath = getRootProject().file("src/main/resources/aw/" + stonecutter.current.version + ".accesswidener") } dependencies { @@ -65,7 +65,7 @@ dependencies { include implementation('com.konghq:unirest-java:3.11.09:standalone') include modImplementation("dev.lambdaurora:spruceui:${property('deps.spruceui')}") - include modImplementation("dev.isxander:yet-another-config-lib:${property('deps.yacl')}") + modImplementation(include("dev.isxander:yet-another-config-lib:3.5.0+${stonecutter.current.version}-fabric")) include implementation("org.jsoup:jsoup:1.16.1") include implementation("org.mineskin:java-client:1.2.4-SNAPSHOT") diff --git a/settings.gradle b/settings.gradle index 9beb0b0..e23d23e 100644 --- a/settings.gradle +++ b/settings.gradle @@ -5,14 +5,14 @@ pluginManagement { url = 'https://maven.fabricmc.net/' } maven { - url = "https://maven.kikugie.dev/releases" + url = "https://maven.kikugie.dev/snapshots" } gradlePluginPortal() } } plugins { - id "dev.kikugie.stonecutter" version "0.4.1" + id "dev.kikugie.stonecutter" version "0.5-alpha.4" } stonecutter { diff --git a/src/main/java/com/mineblock11/skinshuffle/client/gui/PresetEditScreen.java b/src/main/java/com/mineblock11/skinshuffle/client/gui/PresetEditScreen.java index f36c854..2726d2b 100644 --- a/src/main/java/com/mineblock11/skinshuffle/client/gui/PresetEditScreen.java +++ b/src/main/java/com/mineblock11/skinshuffle/client/gui/PresetEditScreen.java @@ -15,7 +15,7 @@ package com.mineblock11.skinshuffle.client.gui; import com.mineblock11.skinshuffle.SkinShuffle; -import com.mineblock11.skinshuffle.client.config.SkinPresetManager; +import com.mineblock11.skinshuffle.client.SkinShuffleClient;import com.mineblock11.skinshuffle.client.config.SkinPresetManager; import com.mineblock11.skinshuffle.client.config.SkinShuffleConfig; import com.mineblock11.skinshuffle.client.gui.cursed.GuiEntityRenderer; import com.mineblock11.skinshuffle.client.gui.widgets.IconButtonWidget; @@ -281,13 +281,23 @@ public void render(DrawContext graphics, int mouseX, int mouseY, float delta) { rotation = getEntityRotation() * SkinShuffleConfig.get().rotationMultiplier; } - if (!this.preset.getSkin().isLoading()) { + if (!this.preset.getSkin().isLoading() && !this.skinSourceTab.loading) { graphics.getMatrices().push(); GuiEntityRenderer.drawEntity( graphics.getMatrices(), entityX, entityY, previewSpanY / 10 * 8, rotation, followX, followY, this.preset.getSkin(), renderStyle ); graphics.getMatrices().pop(); + } else { + var txt = Text.translatable("skinshuffle.edit.loading"); + int textWidth = this.textRenderer.getWidth(txt); + float totalDeltaTick = SkinShuffleClient.TOTAL_TICK_DELTA * 5f; + float hue = (totalDeltaTick % 360) / 360; + float saturation = 0.75f; + float lightness = 1f; + int color = java.awt.Color.HSBtoRGB(hue, saturation, lightness); + color = (color & 0x00FFFFFF) | 0xFF000000; + graphics.drawTextWithShadow(this.textRenderer, txt, previewCenterX - (textWidth / 2), previewCenterY - (this.textRenderer.fontHeight), color); } } else { // We call getTexture() anyway to make sure the texture is being loaded in the background. @@ -336,6 +346,7 @@ private class SkinSourceTab extends GridScreenTab { public PresetEditScreen.SourceType currentSourceType; private final CyclingButtonWidget skinModelButton; private final ButtonWidget loadButton; + private boolean loading = false; private SkinSourceTab() { super(Text.translatable("skinshuffle.edit.source.title")); @@ -434,6 +445,7 @@ public int getHeight() { } private void loadSkin() { + this.loading = true; String skinSource = textFieldWidget.getText(); String model = skinModelButton.getValue(); @@ -447,15 +459,15 @@ private void loadSkin() { default -> Skin.randomDefaultSkin(); }; - preset.setSkin(skin); - skin.getTexture(); + CompletableFuture.runAsync(() -> { + preset.setSkin(skin.saveToConfig()); + skin.getTexture(); + while (preset.getSkin().isLoading()) { + Thread.onSpinWait(); + } + this.loading = false; + }, Util.getIoWorkerExecutor()); } - - CompletableFuture.runAsync(() -> { - while (preset.getSkin().isLoading()) { - Thread.onSpinWait(); - } - }, Util.getIoWorkerExecutor()); } } diff --git a/src/main/java/com/mineblock11/skinshuffle/client/gui/cursed/GuiEntityRenderer.java b/src/main/java/com/mineblock11/skinshuffle/client/gui/cursed/GuiEntityRenderer.java index cf92f3b..676ea57 100644 --- a/src/main/java/com/mineblock11/skinshuffle/client/gui/cursed/GuiEntityRenderer.java +++ b/src/main/java/com/mineblock11/skinshuffle/client/gui/cursed/GuiEntityRenderer.java @@ -18,6 +18,7 @@ import com.mineblock11.skinshuffle.client.config.SkinShuffleConfig; import com.mineblock11.skinshuffle.client.skin.Skin; import com.mineblock11.skinshuffle.compat.ETFCompat; +import com.mojang.authlib.minecraft.MinecraftProfileTexture; import com.mojang.blaze3d.systems.RenderSystem; import net.fabricmc.loader.api.FabricLoader; import net.minecraft.client.MinecraftClient; @@ -61,17 +62,17 @@ public static void drawEntity(MatrixStack matrices, int x, int y, int size, floa } private static void setupModelViewStack() { - /*? if >=1.20.5 {*/ + //? if >=1.20.5 { Matrix4fStack modelViewStack = RenderSystem.getModelViewStack(); modelViewStack.pushMatrix(); modelViewStack.translate(0.0f, 0.0f, 1000.0f); RenderSystem.applyModelViewMatrix(); - /*?} else {*/ + //?} else { /*MatrixStack modelViewStack = RenderSystem.getModelViewStack(); modelViewStack.push(); modelViewStack.translate(0.0, 0.0, 1000.0); - RenderSystem.applyModelViewMatrix();*/ - /*?}*/ + RenderSystem.applyModelViewMatrix(); + *///?} } private static void setupMatrices(MatrixStack matrices, int x, int y, int size, Quaternionf entityRotation) { @@ -85,8 +86,8 @@ private static void setupMatrices(MatrixStack matrices, int x, int y, int size, } private static void renderEntity(MatrixStack matrices, float yaw, float pitch, Skin skin, float totalTickDelta) { - var modelData = PlayerEntityModel.getTexturedModelData(Dilation.NONE, false); - NoEntityPlayerModel model = new NoEntityPlayerModel(TexturedModelData.of(modelData, 64, 64).createModel(), false); + var modelData = PlayerEntityModel.getTexturedModelData(Dilation.NONE, skin.getModel().equals("slim")); + NoEntityPlayerModel model = new NoEntityPlayerModel(TexturedModelData.of(modelData, 64, 64).createModel(), skin.getModel().equals("slim")); model.swingArmsGently(totalTickDelta); model.setHeadPos(yaw, pitch); @@ -102,14 +103,29 @@ private static void renderEntity(MatrixStack matrices, float yaw, float pitch, S vertexConsumers.getBuffer(RenderLayer.getEntityTranslucent(skin.getTexture())), 0, OverlayTexture.DEFAULT_UV, - 0xFFFFFFFF); + //? if >=1.21 { + 0xFFFFFFFF + //?} else { + /*1f, 1f, 1f, 1f + *///?} + ); + + //? if =1.20.1 { + /*MinecraftClient client = MinecraftClient.getInstance(); + var hasCape = client.getSkinProvider().getTextures(client.getSession().getProfile()).containsKey(MinecraftProfileTexture.Type.CAPE); + if (hasCape && SkinShuffleConfig.get().showCapeInPreview) { + *///?} else { if (skin.getSkinTextures().capeTexture() != null && SkinShuffleConfig.get().showCapeInPreview) { + //?} matrices.push(); matrices.translate(0.0F, 0.0F, 0.2F); -// matrices.multiply(new Quaternionf().rotateY(180F)); model.renderCape( matrices, + //? if !=1.20.1 { vertexConsumers.getBuffer(RenderLayer.getEntityTranslucent(skin.getSkinTextures().capeTexture())), + //?} else { + /*vertexConsumers.getBuffer(RenderLayer.getEntityTranslucentCull(client.getSkinProvider().loadSkin(client.getSkinProvider().getTextures(client.getSession().getProfile()).get(MinecraftProfileTexture.Type.CAPE), MinecraftProfileTexture.Type.CAPE))), + *///?} 0, OverlayTexture.DEFAULT_UV ); @@ -124,9 +140,15 @@ private static void cleanupMatrices(MatrixStack matrices) { } private static void cleanupModelViewStack() { + //? if >=1.20.5 { Matrix4fStack modelViewStack = RenderSystem.getModelViewStack(); modelViewStack.popMatrix(); RenderSystem.applyModelViewMatrix(); + //?} else { + /*MatrixStack modelViewStack = RenderSystem.getModelViewStack(); + modelViewStack.pop(); + RenderSystem.applyModelViewMatrix(); + *///?} } public static class NoEntityPlayerModel extends PlayerEntityModel { diff --git a/src/main/java/com/mineblock11/skinshuffle/mixin/MinecraftClientMixin.java b/src/main/java/com/mineblock11/skinshuffle/mixin/MinecraftClientMixin.java index 839bdb2..0ce6412 100644 --- a/src/main/java/com/mineblock11/skinshuffle/mixin/MinecraftClientMixin.java +++ b/src/main/java/com/mineblock11/skinshuffle/mixin/MinecraftClientMixin.java @@ -11,6 +11,10 @@ public class MinecraftClientMixin { @Inject(method = "render", at = @At("HEAD")) public void render(boolean tick, CallbackInfo ci) { + //? if >=1.21 { SkinShuffleClient.TOTAL_TICK_DELTA += MinecraftClient.getInstance().getRenderTickCounter().getTickDelta(true); + //?} else { + /*SkinShuffleClient.TOTAL_TICK_DELTA += MinecraftClient.getInstance().getTickDelta(); + *///?} } } diff --git a/src/main/resources/assets/skinshuffle/lang/en_us.json b/src/main/resources/assets/skinshuffle/lang/en_us.json index 473515a..7a1526d 100644 --- a/src/main/resources/assets/skinshuffle/lang/en_us.json +++ b/src/main/resources/assets/skinshuffle/lang/en_us.json @@ -99,5 +99,6 @@ "skinshuffle.edit.source.cycle_prefix": "Source", "skinshuffle.edit.source.title": "Skin Source", "skinshuffle.edit.source.skin_model": "Skin Model", - "skinshuffle.edit.source.load_skin": "Load Skin" + "skinshuffle.edit.source.load_skin": "Load Skin", + "skinshuffle.edit.loading": "Loading..." } \ No newline at end of file diff --git a/src/main/resources/aw/1.20.1.accesswidener b/src/main/resources/aw/1.20.1.accesswidener new file mode 100644 index 0000000..5eaff6d --- /dev/null +++ b/src/main/resources/aw/1.20.1.accesswidener @@ -0,0 +1,15 @@ +accessWidener v1 named + +accessible method net/minecraft/client/render/entity/model/BipedEntityModel getPreferredArm (Lnet/minecraft/entity/LivingEntity;)Lnet/minecraft/util/Arm; +accessible class net/minecraft/client/texture/ResourceTexture$TextureData +accessible method net/minecraft/client/QuickPlay startSingleplayer (Lnet/minecraft/client/MinecraftClient;Ljava/lang/String;)V +accessible method net/minecraft/client/QuickPlay startMultiplayer (Lnet/minecraft/client/MinecraftClient;Ljava/lang/String;)V +accessible method net/minecraft/client/QuickPlay startRealms (Lnet/minecraft/client/MinecraftClient;Lnet/minecraft/client/realms/RealmsClient;Ljava/lang/String;)V +accessible class net/minecraft/client/toast/ToastManager$Entry +accessible class net/minecraft/server/world/ThreadedAnvilChunkStorage$EntityTracker +accessible field net/minecraft/server/world/ThreadedAnvilChunkStorage entityTrackers Lit/unimi/dsi/fastutil/ints/Int2ObjectMap; +accessible field net/minecraft/server/world/ThreadedAnvilChunkStorage$EntityTracker entry Lnet/minecraft/server/network/EntityTrackerEntry; +accessible field net/minecraft/server/world/ThreadedAnvilChunkStorage$EntityTracker listeners Ljava/util/Set; +accessible method net/minecraft/client/gui/widget/ClickableWidget drawScrollableText (Lnet/minecraft/client/gui/DrawContext;Lnet/minecraft/client/font/TextRenderer;Lnet/minecraft/text/Text;IIIII)V +accessible method net/minecraft/client/gui/widget/CyclingButtonWidget (IIIILnet/minecraft/text/Text;Lnet/minecraft/text/Text;ILjava/lang/Object;Lnet/minecraft/client/gui/widget/CyclingButtonWidget$Values;Ljava/util/function/Function;Ljava/util/function/Function;Lnet/minecraft/client/gui/widget/CyclingButtonWidget$UpdateCallback;Lnet/minecraft/client/option/SimpleOption$TooltipFactory;Z)V +accessible field net/minecraft/client/render/entity/model/PlayerEntityModel cloak Lnet/minecraft/client/model/ModelPart; \ No newline at end of file diff --git a/src/main/resources/aw/1.20.4.accesswidener b/src/main/resources/aw/1.20.4.accesswidener new file mode 100644 index 0000000..5eaff6d --- /dev/null +++ b/src/main/resources/aw/1.20.4.accesswidener @@ -0,0 +1,15 @@ +accessWidener v1 named + +accessible method net/minecraft/client/render/entity/model/BipedEntityModel getPreferredArm (Lnet/minecraft/entity/LivingEntity;)Lnet/minecraft/util/Arm; +accessible class net/minecraft/client/texture/ResourceTexture$TextureData +accessible method net/minecraft/client/QuickPlay startSingleplayer (Lnet/minecraft/client/MinecraftClient;Ljava/lang/String;)V +accessible method net/minecraft/client/QuickPlay startMultiplayer (Lnet/minecraft/client/MinecraftClient;Ljava/lang/String;)V +accessible method net/minecraft/client/QuickPlay startRealms (Lnet/minecraft/client/MinecraftClient;Lnet/minecraft/client/realms/RealmsClient;Ljava/lang/String;)V +accessible class net/minecraft/client/toast/ToastManager$Entry +accessible class net/minecraft/server/world/ThreadedAnvilChunkStorage$EntityTracker +accessible field net/minecraft/server/world/ThreadedAnvilChunkStorage entityTrackers Lit/unimi/dsi/fastutil/ints/Int2ObjectMap; +accessible field net/minecraft/server/world/ThreadedAnvilChunkStorage$EntityTracker entry Lnet/minecraft/server/network/EntityTrackerEntry; +accessible field net/minecraft/server/world/ThreadedAnvilChunkStorage$EntityTracker listeners Ljava/util/Set; +accessible method net/minecraft/client/gui/widget/ClickableWidget drawScrollableText (Lnet/minecraft/client/gui/DrawContext;Lnet/minecraft/client/font/TextRenderer;Lnet/minecraft/text/Text;IIIII)V +accessible method net/minecraft/client/gui/widget/CyclingButtonWidget (IIIILnet/minecraft/text/Text;Lnet/minecraft/text/Text;ILjava/lang/Object;Lnet/minecraft/client/gui/widget/CyclingButtonWidget$Values;Ljava/util/function/Function;Ljava/util/function/Function;Lnet/minecraft/client/gui/widget/CyclingButtonWidget$UpdateCallback;Lnet/minecraft/client/option/SimpleOption$TooltipFactory;Z)V +accessible field net/minecraft/client/render/entity/model/PlayerEntityModel cloak Lnet/minecraft/client/model/ModelPart; \ No newline at end of file diff --git a/src/main/resources/aw/1.20.6.accesswidener b/src/main/resources/aw/1.20.6.accesswidener new file mode 100644 index 0000000..5eaff6d --- /dev/null +++ b/src/main/resources/aw/1.20.6.accesswidener @@ -0,0 +1,15 @@ +accessWidener v1 named + +accessible method net/minecraft/client/render/entity/model/BipedEntityModel getPreferredArm (Lnet/minecraft/entity/LivingEntity;)Lnet/minecraft/util/Arm; +accessible class net/minecraft/client/texture/ResourceTexture$TextureData +accessible method net/minecraft/client/QuickPlay startSingleplayer (Lnet/minecraft/client/MinecraftClient;Ljava/lang/String;)V +accessible method net/minecraft/client/QuickPlay startMultiplayer (Lnet/minecraft/client/MinecraftClient;Ljava/lang/String;)V +accessible method net/minecraft/client/QuickPlay startRealms (Lnet/minecraft/client/MinecraftClient;Lnet/minecraft/client/realms/RealmsClient;Ljava/lang/String;)V +accessible class net/minecraft/client/toast/ToastManager$Entry +accessible class net/minecraft/server/world/ThreadedAnvilChunkStorage$EntityTracker +accessible field net/minecraft/server/world/ThreadedAnvilChunkStorage entityTrackers Lit/unimi/dsi/fastutil/ints/Int2ObjectMap; +accessible field net/minecraft/server/world/ThreadedAnvilChunkStorage$EntityTracker entry Lnet/minecraft/server/network/EntityTrackerEntry; +accessible field net/minecraft/server/world/ThreadedAnvilChunkStorage$EntityTracker listeners Ljava/util/Set; +accessible method net/minecraft/client/gui/widget/ClickableWidget drawScrollableText (Lnet/minecraft/client/gui/DrawContext;Lnet/minecraft/client/font/TextRenderer;Lnet/minecraft/text/Text;IIIII)V +accessible method net/minecraft/client/gui/widget/CyclingButtonWidget (IIIILnet/minecraft/text/Text;Lnet/minecraft/text/Text;ILjava/lang/Object;Lnet/minecraft/client/gui/widget/CyclingButtonWidget$Values;Ljava/util/function/Function;Ljava/util/function/Function;Lnet/minecraft/client/gui/widget/CyclingButtonWidget$UpdateCallback;Lnet/minecraft/client/option/SimpleOption$TooltipFactory;Z)V +accessible field net/minecraft/client/render/entity/model/PlayerEntityModel cloak Lnet/minecraft/client/model/ModelPart; \ No newline at end of file diff --git a/src/main/resources/skinshuffle.accesswidener b/src/main/resources/aw/1.21.accesswidener similarity index 100% rename from src/main/resources/skinshuffle.accesswidener rename to src/main/resources/aw/1.21.accesswidener diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 9fbdc69..049edc8 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -13,7 +13,7 @@ }, "license": "MIT", "icon": "assets/skinshuffle/icon.png", - "accessWidener": "skinshuffle.accesswidener", + "accessWidener": "aw/${minecraft_version}.accesswidener", "environment": "*", "entrypoints": { "client": [