From 65afbf6ae6383b35dc7ed27c14f2c5b37c1c5ac2 Mon Sep 17 00:00:00 2001 From: retuci0 Date: Sun, 3 May 2026 15:06:20 +0200 Subject: [PATCH] v4.5 --- cambios.md | 12 ++-- gradle.properties | 2 +- src/main/java/me/retucio/sputnik/Sputnik.java | 3 +- .../DrawingBackgroundGraphicsAccessMixin.java | 59 +++++++++++++++++++ .../DrawingFocusedGraphicsAccessMixin.java | 5 ++ .../mixin/mixins/render/CameraMixin.java | 10 ++-- .../render/ItemFeatureRendererMixin.java | 42 +++++++++---- .../sputnik/module/modules/misc/ChatPlus.java | 26 ++++---- .../module/modules/render/GlintPlus.java | 6 ++ .../retucio/sputnik/ui/screen/ClickGUI.java | 7 +-- .../ui/widgets/buttons/ModuleButton.java | 12 ++-- .../sputnik/util/render/GlintRenderType.java | 56 ++++++++++++------ src/main/resources/sputnik.accesswidener | 5 ++ src/main/resources/sputnik.mixins.json | 1 + 14 files changed, 179 insertions(+), 67 deletions(-) create mode 100644 src/main/java/me/retucio/sputnik/mixin/mixins/hud/DrawingBackgroundGraphicsAccessMixin.java diff --git a/cambios.md b/cambios.md index 18b0b01..ff50464 100644 --- a/cambios.md +++ b/cambios.md @@ -1,4 +1,4 @@ -# v4.4 +# v4.5 ## novedades @@ -8,17 +8,15 @@ ### arreglos / mejoras -- brilli brilli ya funciona -- zoom ya funciona +- zoom ahora ya sí que ya funciona +- arreglado el movimiento laggy de cámara libre +- las cabezas de chatplus ya se renderizan correctamente ## problemas reconocidos - lo de siempre, además de: - `colocar en aire` no funciona si el bloque está muy cerca, aunque no colisione con el jugador - `delay de paquetes` puede crashear el juego - - las cabezas de `chat plus` solo se dibujar en la pantalla del chat, no en el overlay - - movimiento laggy en `cámara libre` - `inventario plus` no funciona en creativo - `RPC de Discord` no funciona e incluso puede provocar crashes - - `destello de enchants.` no funciona. - + - `destello de enchants.` no funciona, solamente lo hace en la armadura equipada y en ítems translúcidos. \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 2595374..79d3a91 100644 --- a/gradle.properties +++ b/gradle.properties @@ -10,6 +10,6 @@ discord_rpc_version=1.0.3 neutrino_version=1.1.0 jdk_version=25 -mod_version=4.4 +mod_version=4.5 maven_group=me.retucio archives_base_name=sputnik \ No newline at end of file diff --git a/src/main/java/me/retucio/sputnik/Sputnik.java b/src/main/java/me/retucio/sputnik/Sputnik.java index 4a6585e..dae477b 100644 --- a/src/main/java/me/retucio/sputnik/Sputnik.java +++ b/src/main/java/me/retucio/sputnik/Sputnik.java @@ -140,7 +140,8 @@ public class Sputnik implements ClientModInitializer { // se ejecuta cada vez que se presiona una tecla public void onInput(int key, int action) { - if (key == GLFW.GLFW_KEY_F3) return; // prevenir interrumpir combos de F3 + // prevenir interrumpir combos de F3 + if (key == GLFW.GLFW_KEY_F3) return; boolean anyFocused = isAnySettingButtonFocused() || ClickGUI.INSTANCE.getSearchBar().isFocused(); ClickGUI.INSTANCE.setAnyFocused(anyFocused); diff --git a/src/main/java/me/retucio/sputnik/mixin/mixins/hud/DrawingBackgroundGraphicsAccessMixin.java b/src/main/java/me/retucio/sputnik/mixin/mixins/hud/DrawingBackgroundGraphicsAccessMixin.java new file mode 100644 index 0000000..a891cd5 --- /dev/null +++ b/src/main/java/me/retucio/sputnik/mixin/mixins/hud/DrawingBackgroundGraphicsAccessMixin.java @@ -0,0 +1,59 @@ +package me.retucio.sputnik.mixin.mixins.hud; + +import me.retucio.sputnik.module.ModuleManager; +import me.retucio.sputnik.module.modules.misc.ChatPlus; + +import net.minecraft.client.gui.ActiveTextCollector; +import net.minecraft.client.gui.GuiGraphicsExtractor; +import net.minecraft.client.gui.TextAlignment; +import net.minecraft.client.gui.components.ChatComponent; +import net.minecraft.util.ARGB; +import net.minecraft.util.FormattedCharSequence; + +import com.llamalad7.mixinextras.injector.ModifyReceiver; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.Unique; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.ModifyArg; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + + +/** + * al parecer si hago un mixin combinado ninguno de los dos funciona + * @see DrawingFocusedGraphicsAccessMixin + */ + +@Mixin(ChatComponent.DrawingBackgroundGraphicsAccess.class) +public abstract class DrawingBackgroundGraphicsAccessMixin { + + @Unique + private static ChatPlus chatPlus; + + @Shadow @Final + private GuiGraphicsExtractor graphics; + + @Inject(method = "", at = @At("TAIL")) + private void getModules(CallbackInfo ci) { + chatPlus = ModuleManager.INSTANCE.getModuleByClass(ChatPlus.class); + } + + @ModifyReceiver(method = "handleMessage", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/ActiveTextCollector;accept(Lnet/minecraft/client/gui/TextAlignment;IILnet/minecraft/client/gui/ActiveTextCollector$Parameters;Lnet/minecraft/util/FormattedCharSequence;)V")) + private ActiveTextCollector onRender_beforeDrawTextWithShadow(ActiveTextCollector instance, TextAlignment textAlignment, int x, int y, ActiveTextCollector.Parameters parameters, FormattedCharSequence formattedCharSequence) { + chatPlus.beforeDrawMessage(graphics, y, ARGB.white(parameters.opacity())); + return instance; + } + + @ModifyArg(method = "handleMessage", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/ActiveTextCollector;accept(Lnet/minecraft/client/gui/TextAlignment;IILnet/minecraft/client/gui/ActiveTextCollector$Parameters;Lnet/minecraft/util/FormattedCharSequence;)V"), index = 1) + private int modifyX(int x) { + return (chatPlus.isEnabled() && chatPlus.showHeads.getValue()) ? x + 10 : x; + } + + @Inject(method = "handleMessage", at = @At("TAIL")) + private void onRender_afterDrawTextWithShadow(int textTop, float opacity, FormattedCharSequence message, CallbackInfoReturnable cir) { + chatPlus.afterDrawMessage(); + } +} diff --git a/src/main/java/me/retucio/sputnik/mixin/mixins/hud/DrawingFocusedGraphicsAccessMixin.java b/src/main/java/me/retucio/sputnik/mixin/mixins/hud/DrawingFocusedGraphicsAccessMixin.java index 5a904e8..3171a2c 100644 --- a/src/main/java/me/retucio/sputnik/mixin/mixins/hud/DrawingFocusedGraphicsAccessMixin.java +++ b/src/main/java/me/retucio/sputnik/mixin/mixins/hud/DrawingFocusedGraphicsAccessMixin.java @@ -22,6 +22,11 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +/** + * al parecer si hago un mixin combinado ninguno de los dos funciona + * @see DrawingBackgroundGraphicsAccessMixin + */ + @Mixin(ChatComponent.DrawingFocusedGraphicsAccess.class) public abstract class DrawingFocusedGraphicsAccessMixin { diff --git a/src/main/java/me/retucio/sputnik/mixin/mixins/render/CameraMixin.java b/src/main/java/me/retucio/sputnik/mixin/mixins/render/CameraMixin.java index f67d0f5..3959538 100644 --- a/src/main/java/me/retucio/sputnik/mixin/mixins/render/CameraMixin.java +++ b/src/main/java/me/retucio/sputnik/mixin/mixins/render/CameraMixin.java @@ -1,6 +1,7 @@ package me.retucio.sputnik.mixin.mixins.render; import com.llamalad7.mixinextras.injector.ModifyReturnValue; +import me.retucio.sputnik.Sputnik; import me.retucio.sputnik.event.render.GetFOVEvent; import me.retucio.sputnik.module.ModuleManager; import me.retucio.sputnik.module.modules.camera.Freelook; @@ -8,7 +9,6 @@ import me.retucio.sputnik.module.modules.camera.Freecam; import me.retucio.sputnik.module.modules.camera.PerspectivePlus; import net.minecraft.client.Camera; import net.minecraft.client.DeltaTracker; -import net.minecraft.world.entity.Entity; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.Unique; @@ -20,8 +20,6 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import org.spongepowered.asm.mixin.injection.invoke.arg.Args; -import static me.retucio.sputnik.Sputnik.EVENT_BUS; - @Mixin(Camera.class) public abstract class CameraMixin { @@ -50,12 +48,12 @@ public abstract class CameraMixin { @Inject(method = "update", at = @At("HEAD")) private void onUpdateHead(DeltaTracker deltaTracker, CallbackInfo ci) { - this.tickDelta = deltaTracker.getGameTimeDeltaTicks(); + this.tickDelta = deltaTracker.getGameTimeDeltaPartialTick(true); } - @ModifyReturnValue(method = "getFov", at = @At("RETURN")) + @ModifyReturnValue(method = "calculateFov", at = @At("RETURN")) private float modifyFov(float original) { - return EVENT_BUS.post(new GetFOVEvent(original)).getFov(); + return Sputnik.EVENT_BUS.post(new GetFOVEvent(original)).getFov(); } // perspectiva diff --git a/src/main/java/me/retucio/sputnik/mixin/mixins/render/ItemFeatureRendererMixin.java b/src/main/java/me/retucio/sputnik/mixin/mixins/render/ItemFeatureRendererMixin.java index 509d56b..3ceea40 100644 --- a/src/main/java/me/retucio/sputnik/mixin/mixins/render/ItemFeatureRendererMixin.java +++ b/src/main/java/me/retucio/sputnik/mixin/mixins/render/ItemFeatureRendererMixin.java @@ -4,31 +4,49 @@ import me.retucio.sputnik.module.ModuleManager; import me.retucio.sputnik.module.modules.render.GlintPlus; import net.minecraft.client.renderer.feature.ItemFeatureRenderer; import net.minecraft.client.renderer.rendertype.RenderType; +import net.minecraft.client.renderer.rendertype.RenderTypes; import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Unique; +import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Redirect; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(ItemFeatureRenderer.class) public abstract class ItemFeatureRendererMixin { - @Unique - private static GlintPlus glintPlus; + // obtener módulo en cada redirect, ya que tiene un inicializador estático - @Inject(method = "", at = @At("TAIL")) - private void getModules(CallbackInfo ci) { - glintPlus = ModuleManager.INSTANCE.getModuleByClass(GlintPlus.class); + @Shadow + private static boolean useTransparentGlint(RenderType renderType) { + throw new UnsupportedOperationException("implemented via mixin"); + } + + @Redirect(method = "getFoilRenderType", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/feature/ItemFeatureRenderer;useTransparentGlint(Lnet/minecraft/client/renderer/rendertype/RenderType;)Z")) + private static boolean alwaysUseTranslucentGlint(RenderType renderType) { + GlintPlus glintPlus = ModuleManager.INSTANCE.getModuleByClass(GlintPlus.class); + if (!glintPlus.isEnabled()) { + useTransparentGlint(renderType); + } + return true; } @Redirect(method = "getFoilRenderType", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/rendertype/RenderTypes;glint()Lnet/minecraft/client/renderer/rendertype/RenderType;")) - private static RenderType getGlint() { - return glintPlus.getGlint(); + private static RenderType redirectGlint() { + GlintPlus glintPlus = ModuleManager.INSTANCE.getModuleByClass(GlintPlus.class); + if (glintPlus == null) return RenderTypes.glint(); + return glintPlus.getGlintTranslucent(); } @Redirect(method = "getFoilRenderType", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/rendertype/RenderTypes;entityGlint()Lnet/minecraft/client/renderer/rendertype/RenderType;")) - private static RenderType getEntityGlint() { - return glintPlus.getEntityGlint(); + private static RenderType redirectEntityGlint() { + GlintPlus glintPlus = ModuleManager.INSTANCE.getModuleByClass(GlintPlus.class); + if (glintPlus == null) return RenderTypes.entityGlint(); + return glintPlus.getGlintTranslucent(); + } + + @Redirect(method = "getFoilRenderType", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/rendertype/RenderTypes;glintTranslucent()Lnet/minecraft/client/renderer/rendertype/RenderType;")) + private static RenderType redirectGlintTranslucent() { + GlintPlus glintPlus = ModuleManager.INSTANCE.getModuleByClass(GlintPlus.class); + if (glintPlus == null) return RenderTypes.glintTranslucent(); + return glintPlus.getGlintTranslucent(); } } diff --git a/src/main/java/me/retucio/sputnik/module/modules/misc/ChatPlus.java b/src/main/java/me/retucio/sputnik/module/modules/misc/ChatPlus.java index ddb008c..1a794f9 100644 --- a/src/main/java/me/retucio/sputnik/module/modules/misc/ChatPlus.java +++ b/src/main/java/me/retucio/sputnik/module/modules/misc/ChatPlus.java @@ -9,10 +9,6 @@ import me.retucio.sputnik.command.CommandManager; import me.retucio.sputnik.event.input.ClientClickEvent; import me.retucio.sputnik.event.network.ReceiveMessageEvent; import me.retucio.sputnik.event.network.SendMessageEvent; -import me.retucio.sputnik.mixin.mixins.hud.ChatComponentMixin; -import me.retucio.sputnik.mixin.mixins.hud.GuiMixin; -import me.retucio.sputnik.mixin.mixins.misc.StringUtilMixin; -import me.retucio.sputnik.mixin.mixins.screen.ChatScreenMixin; import me.retucio.sputnik.module.Category; import me.retucio.sputnik.module.Module; import me.retucio.sputnik.module.setting.SettingGroup; @@ -45,8 +41,12 @@ import java.util.regex.Pattern; /** continúa en: * @see ChatComponentMixin * @see ChatScreenMixin + * @see DrawingBackgroundGraphicsAccessMixin + * @see DrawingFocusedGraphicsAccessMixin * @see GuiMixin * @see StringUtilMixin + * + * @author retucio */ public class ChatPlus extends Module { @@ -82,10 +82,10 @@ public class ChatPlus extends Module { private static final List CUSTOM_HEAD_ENTRIES = new ArrayList<>(); private SimpleDateFormat dateFormat; - private static final Pattern loggerRegex = Pattern.compile("\\n(\\n|\\s)+\\n"); - private static final Pattern usernameRegex = Pattern.compile("^(?:\\[[0-9]{2}:[0-9]{2}\\]\\s*)?(?:<([^<>\\s]+)>|([^<>\\s]+)).*"); - private static final Pattern timestampRegex = Pattern.compile("^<\\d{1,2}:\\d{1,2}>"); - private static final Pattern coordRegex = Pattern.compile("(?-?\\d{3,}(?:\\.\\d*)?)(?:\\s+(?-?\\d{1,3}(?:\\.\\d*)?))?\\s+(?-?\\d{3,}(?:\\.\\d*)?)"); + private static final Pattern LOGGER_REGEX = Pattern.compile("\\n([\\n\\s])+\\n"); + private static final Pattern USERNAME_REGEX = Pattern.compile("^(?:\\[[0-9]{2}:[0-9]{2}]\\s*)?(?:<([^<>\\s]+)>|([^<>\\s]+)).*"); + private static final Pattern TIMESTAMP_REGEX = Pattern.compile("^<\\d{1,2}:\\d{1,2}>"); + private static final Pattern COORDS_REGEX = Pattern.compile("(?-?\\d{3,}(?:\\.\\d*)?)(?:\\s+(?-?\\d{1,3}(?:\\.\\d*)?))?\\s+(?-?\\d{3,}(?:\\.\\d*)?)"); @EventListener private void onReceiveMessage(ReceiveMessageEvent event) { @@ -94,10 +94,10 @@ public class ChatPlus extends Module { // registrar mensajes para evitar su eliminación if (logger.getValue()) { String messageString = message.getString(); - if (loggerRegex.matcher(messageString).find()) { + if (LOGGER_REGEX.matcher(messageString).find()) { MutableComponent newMessage = Component.empty(); TextVisitor.visit(message, (text, style, string) -> { - Matcher antiClearMatcher = loggerRegex.matcher(string); + Matcher antiClearMatcher = LOGGER_REGEX.matcher(string); if (antiClearMatcher.find()) newMessage.append(Component.literal(antiClearMatcher.replaceAll("\n\n")).setStyle(style)); else @@ -156,7 +156,7 @@ public class ChatPlus extends Module { int startOffset = 0; try { - Matcher m = timestampRegex.matcher(text); + Matcher m = TIMESTAMP_REGEX.matcher(text); if (m.find()) startOffset = m.end() + 1; } catch (IllegalStateException ignored) {} @@ -183,7 +183,7 @@ public class ChatPlus extends Module { GameProfile sender = line.sputnik$getSender(); if (sender == null) { - Matcher usernameMatcher = usernameRegex.matcher(text); + Matcher usernameMatcher = USERNAME_REGEX.matcher(text); if (usernameMatcher.matches()) { String username = usernameMatcher.group(1); @@ -226,6 +226,6 @@ public class ChatPlus extends Module { } private boolean containsCoordinates(String message) { - return coordRegex.matcher(message).find(); + return COORDS_REGEX.matcher(message).find(); } } \ No newline at end of file diff --git a/src/main/java/me/retucio/sputnik/module/modules/render/GlintPlus.java b/src/main/java/me/retucio/sputnik/module/modules/render/GlintPlus.java index f731fb5..6e683b8 100644 --- a/src/main/java/me/retucio/sputnik/module/modules/render/GlintPlus.java +++ b/src/main/java/me/retucio/sputnik/module/modules/render/GlintPlus.java @@ -51,6 +51,12 @@ public class GlintPlus extends Module { return GlintRenderType.glintColor.get(color); } + public RenderType getGlintTranslucent() { + int color = getColor(); + if (!isEnabled() || !items.getValue()) return RenderTypes.glintTranslucent(); + return GlintRenderType.glintTranslucentColor.get(color); + } + public RenderType getEntityGlint() { int color = getColor(); if (!isEnabled() || !items.getValue()) return RenderTypes.entityGlint(); diff --git a/src/main/java/me/retucio/sputnik/ui/screen/ClickGUI.java b/src/main/java/me/retucio/sputnik/ui/screen/ClickGUI.java index 2d44210..935a09d 100644 --- a/src/main/java/me/retucio/sputnik/ui/screen/ClickGUI.java +++ b/src/main/java/me/retucio/sputnik/ui/screen/ClickGUI.java @@ -163,7 +163,7 @@ public class ClickGUI extends Screen { } @Override - public boolean mouseDragged(MouseButtonEvent click, double deltaX, double deltaY) { + public boolean mouseDragged(@NonNull MouseButtonEvent click, double deltaX, double deltaY) { miscWidgets.forEach(w -> w.mouseDragged( (int) click.x(), (int) click.y())); @@ -275,7 +275,6 @@ public class ClickGUI extends Screen { public void openSettingsFrame(Module module, int x, int y) { // asegurarse de que no se sale de la pantalla x = Math.clamp(x, 0, mc.getWindow().getGuiScaledWidth() - 80); - y = Math.clamp(y, 0, mc.getWindow().getGuiScaledHeight() - 120); SettingsFrame frame = new SettingsFrame(module, x, y, 100, 20); settingsFrames.add(frame); @@ -378,8 +377,8 @@ public class ClickGUI extends Screen { } @Override - protected void extractBlurredBackground(GuiGraphicsExtractor ctx) { - if (guiSettings.blur.getValue()) super.extractBlurredBackground(ctx); + protected void extractBlurredBackground(@NonNull GuiGraphicsExtractor gui) { + if (guiSettings.blur.getValue()) super.extractBlurredBackground(gui); } diff --git a/src/main/java/me/retucio/sputnik/ui/widgets/buttons/ModuleButton.java b/src/main/java/me/retucio/sputnik/ui/widgets/buttons/ModuleButton.java index 3afad9e..e494a3c 100644 --- a/src/main/java/me/retucio/sputnik/ui/widgets/buttons/ModuleButton.java +++ b/src/main/java/me/retucio/sputnik/ui/widgets/buttons/ModuleButton.java @@ -49,11 +49,15 @@ public class ModuleButton extends Button { if (button == 0) { // clic izquierdo para activar / desactivar el módulo module.toggle(); } else if (button == 1) { // clic derecho para el marco de ajustes (también lo cierra si está abierto) - if (ClickGUI.INSTANCE.isSettingsFrameOpen(module)) + if (ClickGUI.INSTANCE.isSettingsFrameOpen(module)) { ClickGUI.INSTANCE.closeSettingsFrame(module); - else - ClickGUI.INSTANCE.openSettingsFrame(module, - parent.getX() + parent.getW() + 120, parent.getRenderY() + offset); + } else { + ClickGUI.INSTANCE.openSettingsFrame( + module, + parent.getX() + parent.getW() + 120, + parent.getY() + offset + ); + } } } } diff --git a/src/main/java/me/retucio/sputnik/util/render/GlintRenderType.java b/src/main/java/me/retucio/sputnik/util/render/GlintRenderType.java index f499d7d..7508db0 100644 --- a/src/main/java/me/retucio/sputnik/util/render/GlintRenderType.java +++ b/src/main/java/me/retucio/sputnik/util/render/GlintRenderType.java @@ -1,6 +1,5 @@ package me.retucio.sputnik.util.render; -import com.mojang.blaze3d.pipeline.RenderPipeline; import com.mojang.blaze3d.vertex.ByteBufferBuilder; import com.mojang.blaze3d.vertex.MeshData; import com.mojang.blaze3d.vertex.VertexFormat; @@ -26,12 +25,14 @@ import java.util.function.Function; public class GlintRenderType extends RenderType { - public static List glintColor = newRenderList(GlintRenderType::buildGlintRenderLayer); - public static List entityGlintColor = newRenderList(GlintRenderType::buildEntityGlintRenderLayer); - public static List armorEntityGlintColor = newRenderList(GlintRenderType::buildArmorEntityGlintRenderLayer); + public static List glintColor = newRenderList(GlintRenderType::buildGlintRenderType); + public static List entityGlintColor = newRenderList(GlintRenderType::buildEntityGlintRenderType); + public static List armorEntityGlintColor = newRenderList(GlintRenderType::buildArmorEntityGlintRenderType); + public static List glintTranslucentColor = newRenderList(GlintRenderType::buildGlintTranslucentRenderType); public static void addGlintTypes(Object2ObjectLinkedOpenHashMap map) { addGlintTypes(map, glintColor); + addGlintTypes(map, glintTranslucentColor); addGlintTypes(map, entityGlintColor); addGlintTypes(map, armorEntityGlintColor); } @@ -58,38 +59,55 @@ public class GlintRenderType extends RenderType { map.put(renderType, new ByteBufferBuilder(renderType.bufferSize())); } - private static RenderType buildGlintRenderLayer(String name) { + private static RenderType buildGlintRenderType(String name) { final Identifier res = Identifier.fromNamespaceAndPath(Sputnik.MOD_ID, "textures/misc/glint_" + name.toLowerCase() + ".png"); - return RenderType.create("glint_" + name, RenderSetup.builder(RenderPipelines.GLINT) + return RenderType.create( + "glint_" + name, + RenderSetup.builder(RenderPipelines.GLINT) .withTexture("Sampler0", res) .setTextureTransform(TextureTransform.GLINT_TEXTURING) - .sortOnUpload() - .createRenderSetup()); - + .setOutputTarget(OutputTarget.ITEM_ENTITY_TARGET) + .createRenderSetup() + ); } - private static RenderType buildEntityGlintRenderLayer(String name) { + private static RenderType buildGlintTranslucentRenderType(String name) { final Identifier res = Identifier.fromNamespaceAndPath(Sputnik.MOD_ID, "textures/misc/glint_" + name.toLowerCase() + ".png"); - return RenderType.create("entity_glint_" + name, RenderSetup.builder(RenderPipelines.GLINT) + return RenderType.create( + "glint_translucent_" + name, + RenderSetup.builder(RenderPipelines.GLINT) + .withTexture("Sampler0", res) + .setTextureTransform(TextureTransform.GLINT_TEXTURING) + .setOutputTarget(OutputTarget.ITEM_ENTITY_TARGET) + .createRenderSetup() + ); + } + + private static RenderType buildEntityGlintRenderType(String name) { + final Identifier res = Identifier.fromNamespaceAndPath(Sputnik.MOD_ID, "textures/misc/glint_" + name.toLowerCase() + ".png"); + + return RenderType.create( + "entity_glint_" + name, + RenderSetup.builder(RenderPipelines.GLINT) .withTexture("Sampler0", res) .setTextureTransform(TextureTransform.ENTITY_GLINT_TEXTURING) - .setOutputTarget(OutputTarget.ITEM_ENTITY_TARGET) - .sortOnUpload() - .createRenderSetup()); + .createRenderSetup() + ); } - - private static RenderType buildArmorEntityGlintRenderLayer(String name) { + private static RenderType buildArmorEntityGlintRenderType(String name) { final Identifier res = Identifier.fromNamespaceAndPath(Sputnik.MOD_ID, "textures/misc/glint_" + name.toLowerCase() + ".png"); - return RenderType.create("armor_glint_" + name, RenderSetup.builder(RenderPipelines.GLINT) + return RenderType.create( + "armor_glint_" + name, + RenderSetup.builder(RenderPipelines.GLINT) .withTexture("Sampler0", res) .setTextureTransform(TextureTransform.ARMOR_ENTITY_GLINT_TEXTURING) .setLayeringTransform(LayeringTransform.VIEW_OFFSET_Z_LAYERING) - .sortOnUpload() - .createRenderSetup()); + .createRenderSetup() + ); } @Override diff --git a/src/main/resources/sputnik.accesswidener b/src/main/resources/sputnik.accesswidener index bf02c51..cf207b3 100644 --- a/src/main/resources/sputnik.accesswidener +++ b/src/main/resources/sputnik.accesswidener @@ -16,6 +16,7 @@ accessible field net/minecraft/client/StringSplitter widthProvider Lnet/minecraf # chat accessible class net/minecraft/client/gui/components/ChatComponent$DrawingFocusedGraphicsAccess accessible method net/minecraft/client/gui/components/ChatComponent addMessage (Lnet/minecraft/network/chat/Component;Lnet/minecraft/network/chat/MessageSignature;Lnet/minecraft/client/multiplayer/chat/GuiMessageSource;Lnet/minecraft/client/multiplayer/chat/GuiMessageTag;)V +accessible class net/minecraft/client/gui/components/ChatComponent$DrawingBackgroundGraphicsAccess # entidad accessible method net/minecraft/client/multiplayer/ClientLevel getEntities ()Lnet/minecraft/world/level/entity/LevelEntityGetter; @@ -32,6 +33,10 @@ accessible field net/minecraft/client/particle/Particle hasPhysics Z # renderizado 3d accessible method net/minecraft/client/renderer/rendertype/RenderType (Ljava/lang/String;Lnet/minecraft/client/renderer/rendertype/RenderSetup;)V +accessible method net/minecraft/client/renderer/rendertype/RenderType create (Ljava/lang/String;Lnet/minecraft/client/renderer/rendertype/RenderSetup;)Lnet/minecraft/client/renderer/rendertype/RenderType; +accessible field net/minecraft/client/renderer/RenderPipelines LINES_SNIPPET Lcom/mojang/blaze3d/pipeline/RenderPipeline$Snippet; +accessible field net/minecraft/client/renderer/RenderPipelines DEBUG_FILLED_SNIPPET Lcom/mojang/blaze3d/pipeline/RenderPipeline$Snippet; +accessible field net/minecraft/client/renderer/RenderPipelines GUI_TEXTURED_SNIPPET Lcom/mojang/blaze3d/pipeline/RenderPipeline$Snippet; # pantallas accessible field net/minecraft/client/gui/screens/inventory/AbstractContainerScreen imageWidth I diff --git a/src/main/resources/sputnik.mixins.json b/src/main/resources/sputnik.mixins.json index 82eaeb0..3179f27 100644 --- a/src/main/resources/sputnik.mixins.json +++ b/src/main/resources/sputnik.mixins.json @@ -46,6 +46,7 @@ "mixins.hud.BossBarHudMixin", "mixins.hud.ChatComponentLineConsumerMixin", "mixins.hud.ChatComponentMixin", + "mixins.hud.DrawingBackgroundGraphicsAccessMixin", "mixins.hud.DrawingFocusedGraphicsAccessMixin", "mixins.hud.GuiMessageLineMixin", "mixins.hud.GuiMessageMixin",