diff --git a/forge/build.gradle b/forge/build.gradle index e84c40d1..905fbba8 100644 --- a/forge/build.gradle +++ b/forge/build.gradle @@ -234,7 +234,7 @@ tasks.updateResources.dependsOn processResources // options.failOnError(true) //} -jar.finalizedBy('reobfJar') +//jar.finalizedBy('reobfJar') //publish.dependsOn('reobfJar') publishing { diff --git a/forge/deps/generic/cloth-config-api/14.0.126/cloth-config-api-14.0.126.jar b/forge/deps/generic/cloth-config-api/14.0.126/cloth-config-api-14.0.126.jar index a134351e..3c81eb4a 100644 Binary files a/forge/deps/generic/cloth-config-api/14.0.126/cloth-config-api-14.0.126.jar and b/forge/deps/generic/cloth-config-api/14.0.126/cloth-config-api-14.0.126.jar differ diff --git a/forge/src/main/resources/META-INF/accesstransformer.cfg b/forge/src/main/resources/META-INF/accesstransformer.cfg index 2c4ba72a..f1cd529d 100644 --- a/forge/src/main/resources/META-INF/accesstransformer.cfg +++ b/forge/src/main/resources/META-INF/accesstransformer.cfg @@ -12,7 +12,7 @@ public net.minecraft.client.gui.components.Tooltip f_256766_ #cachedTooltip public net.minecraft.client.gui.screens.Screen f_96541_ #minecraft public net.minecraft.client.gui.screens.Screen f_96542_ #itemRenderer public net.minecraft.client.gui.screens.Screen f_96547_ #font -public net.minecraft.client.gui.components.AbstractWidget f_256816_ #tooltip +public-f net.minecraft.client.gui.components.AbstractWidget f_256816_ #tooltip #public net.minecraft.client.gui.components.AbstractWidget f_256936_ #tooltipMsDelay public net.minecraft.client.gui.screens.OptionsScreen f_260594_ #TELEMETRY @@ -20,4 +20,5 @@ public net.minecraft.client.gui.components.Tooltip (Lnet/minecraft/network #public-f net.minecraft.client.gui.components.AbstractWidget m_257936_()V #updateTooltip #public-f net.minecraft.client.gui.components.CycleButton m_257795_()V #updateTooltip -public-f net.minecraft.client.gui.components.AbstractWidget m_88315_(Lnet/minecraft/client/gui/GuiGraphics;IIF)V #render \ No newline at end of file +public-f net.minecraft.client.gui.components.AbstractWidget m_88315_(Lnet/minecraft/client/gui/GuiGraphics;IIF)V #render +public net.minecraft.client.gui.components.WidgetTooltipHolder m_323619_(Lnet/minecraft/client/gui/navigation/ScreenRectangle;ZZ)Lnet/minecraft/client/gui/screens/inventory/tooltip/ClientTooltipPositioner; #createTooltipPositioner \ No newline at end of file diff --git a/neoforge/src/main/java/com/aizistral/nochatreports/neoforge/NoChatReports.java b/neoforge/src/main/java/com/aizistral/nochatreports/neoforge/NoChatReports.java index 172183dd..11071ece 100644 --- a/neoforge/src/main/java/com/aizistral/nochatreports/neoforge/NoChatReports.java +++ b/neoforge/src/main/java/com/aizistral/nochatreports/neoforge/NoChatReports.java @@ -10,9 +10,9 @@ import net.neoforged.neoforge.client.event.ClientPlayerNetworkEvent; import net.neoforged.neoforge.event.server.ServerStartedEvent; import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.fml.common.EventBusSubscriber; +import net.neoforged.fml.common.EventBusSubscriber.Bus; import net.neoforged.fml.common.Mod; -import net.neoforged.fml.common.Mod.EventBusSubscriber; -import net.neoforged.fml.common.Mod.EventBusSubscriber.Bus; import net.neoforged.fml.loading.FMLEnvironment; import net.neoforged.fml.loading.FMLPaths; @@ -45,7 +45,7 @@ public Path getConfigDir() { return FMLPaths.CONFIGDIR.get(); } - @EventBusSubscriber(modid = "nochatreports", bus = Bus.FORGE) + @EventBusSubscriber(modid = "nochatreports", bus = Bus.GAME) public static class Events { @SubscribeEvent diff --git a/neoforge/src/main/resources/META-INF/accesstransformer.cfg b/neoforge/src/main/resources/META-INF/accesstransformer.cfg index 7106c8d6..018dcf89 100644 --- a/neoforge/src/main/resources/META-INF/accesstransformer.cfg +++ b/neoforge/src/main/resources/META-INF/accesstransformer.cfg @@ -12,7 +12,7 @@ public net.minecraft.client.gui.components.Tooltip cachedTooltip public net.minecraft.client.gui.screens.Screen minecraft public net.minecraft.client.gui.screens.Screen itemRenderer public net.minecraft.client.gui.screens.Screen font -public net.minecraft.client.gui.components.AbstractWidget tooltip +public-f net.minecraft.client.gui.components.AbstractWidget tooltip #public net.minecraft.client.gui.components.AbstractWidget tooltipMsDelay public net.minecraft.client.gui.screens.OptionsScreen TELEMETRY @@ -20,4 +20,5 @@ public net.minecraft.client.gui.components.Tooltip (Lnet/minecraft/network #public-f net.minecraft.client.gui.components.AbstractWidget updateTooltip()V #public-f net.minecraft.client.gui.components.CycleButton updateTooltip()V -public-f net.minecraft.client.gui.components.AbstractWidget render(Lnet/minecraft/client/gui/GuiGraphics;IIF)V \ No newline at end of file +public-f net.minecraft.client.gui.components.AbstractWidget render(Lnet/minecraft/client/gui/GuiGraphics;IIF)V +public net.minecraft.client.gui.components.WidgetTooltipHolder createTooltipPositioner(Lnet/minecraft/client/gui/navigation/ScreenRectangle;ZZ)Lnet/minecraft/client/gui/screens/inventory/tooltip/ClientTooltipPositioner; \ No newline at end of file diff --git a/src/main/java/com/aizistral/nochatreports/common/core/EncryptionUtil.java b/src/main/java/com/aizistral/nochatreports/common/core/EncryptionUtil.java index 1155a989..b1b22e5a 100644 --- a/src/main/java/com/aizistral/nochatreports/common/core/EncryptionUtil.java +++ b/src/main/java/com/aizistral/nochatreports/common/core/EncryptionUtil.java @@ -6,6 +6,7 @@ import com.aizistral.nochatreports.common.config.NCRConfig; import com.aizistral.nochatreports.common.encryption.Encryptor; +import net.minecraft.core.RegistryAccess; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.ComponentContents; import net.minecraft.network.chat.MutableComponent; @@ -72,7 +73,7 @@ public static Optional tryDecrypt(String message, Encryptor encryptor } public static Component recreate(Component component) { - return Component.Serializer.fromJson(Component.Serializer.toJson(component)); + return Component.Serializer.fromJson(Component.Serializer.toJson(component, RegistryAccess.EMPTY), RegistryAccess.EMPTY); } } diff --git a/src/main/java/com/aizistral/nochatreports/common/gui/AdvancedImageButton.java b/src/main/java/com/aizistral/nochatreports/common/gui/AdvancedImageButton.java index 1f5ba23b..47f913b0 100644 --- a/src/main/java/com/aizistral/nochatreports/common/gui/AdvancedImageButton.java +++ b/src/main/java/com/aizistral/nochatreports/common/gui/AdvancedImageButton.java @@ -6,6 +6,7 @@ import net.fabricmc.api.Environment; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.ImageButton; +import net.minecraft.client.gui.components.Tooltip; import net.minecraft.client.gui.components.WidgetSprites; import net.minecraft.client.gui.screens.Screen; import net.minecraft.client.gui.screens.inventory.tooltip.ClientTooltipPositioner; @@ -42,10 +43,19 @@ public void renderWidget(GuiGraphics graphics, int mouseX, int mouseY, float del graphics.blitSprite(this.getCurrentTexture(), this.getX(), this.getY(), this.width, this.height); if (this.isHovered) - if (this.tooltip instanceof AdvancedTooltip tooltip && tooltip.hasCustomRender()) { - tooltip.doCustomRender(this.parent, graphics, mouseX, mouseY, tooltip.createTooltipPositioner( - this.isHovered(), this.isFocused(), this.getRectangle())); + if (this.tooltip instanceof AdvancedWidgetTooltipHolder holder && holder.hasCustomRender()) { + holder.doCustomRender(this.parent, graphics, mouseX, mouseY, holder.createTooltipPositioner( + this.getRectangle(), this.isHovered(), this.isFocused())); } } + @Override + public void setTooltip(Tooltip tooltip) { + if (tooltip instanceof AdvancedTooltip) { + this.tooltip = new AdvancedWidgetTooltipHolder(); + } + + super.setTooltip(tooltip); + } + } diff --git a/src/main/java/com/aizistral/nochatreports/common/gui/AdvancedTooltip.java b/src/main/java/com/aizistral/nochatreports/common/gui/AdvancedTooltip.java index adfc32bc..67d26bf9 100644 --- a/src/main/java/com/aizistral/nochatreports/common/gui/AdvancedTooltip.java +++ b/src/main/java/com/aizistral/nochatreports/common/gui/AdvancedTooltip.java @@ -137,17 +137,4 @@ protected void renderTooltipInternalNoGap(Screen screen, GuiGraphics graphics, L graphics.pose().popPose(); } - @Override - public ClientTooltipPositioner createTooltipPositioner(boolean hovered, boolean focused, ScreenRectangle rectangle) { - return super.createTooltipPositioner(hovered, focused, rectangle); - } - - @Override // ideally tooltip shouldn't control it's own render like this, but for now it does - public void refreshTooltipForNextRenderPass(boolean hovered, boolean focused, ScreenRectangle screenRectangle) { - if (this.hasCustomRender()) - return; - - super.refreshTooltipForNextRenderPass(hovered, focused, screenRectangle); - } - } diff --git a/src/main/java/com/aizistral/nochatreports/common/gui/AdvancedWidgetTooltipHolder.java b/src/main/java/com/aizistral/nochatreports/common/gui/AdvancedWidgetTooltipHolder.java new file mode 100644 index 00000000..9daefde9 --- /dev/null +++ b/src/main/java/com/aizistral/nochatreports/common/gui/AdvancedWidgetTooltipHolder.java @@ -0,0 +1,36 @@ +package com.aizistral.nochatreports.common.gui; + +import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.components.Tooltip; +import net.minecraft.client.gui.components.WidgetTooltipHolder; +import net.minecraft.client.gui.navigation.ScreenRectangle; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.client.gui.screens.inventory.tooltip.ClientTooltipPositioner; + +public class AdvancedWidgetTooltipHolder extends WidgetTooltipHolder { + + public AdvancedWidgetTooltipHolder() { + super(); + } + + public AdvancedWidgetTooltipHolder(Tooltip tooltip) { + this(); + } + + public boolean hasCustomRender() { + return this.get() instanceof AdvancedTooltip advanced && advanced.hasCustomRender(); + } + + public void doCustomRender(Screen screen, GuiGraphics graphics, int x, int y, ClientTooltipPositioner positioner) { + ((AdvancedTooltip) this.get()).doCustomRender(screen, graphics, x, y, positioner); + } + + @Override // ideally tooltip shouldn't control it's own render like this, but for now it does + public void refreshTooltipForNextRenderPass(boolean hovered, boolean focused, ScreenRectangle screenRectangle) { + if (this.hasCustomRender()) + return; + + super.refreshTooltipForNextRenderPass(hovered, focused, screenRectangle); + } + +} diff --git a/src/main/java/com/aizistral/nochatreports/common/gui/EncryptionConfigScreen.java b/src/main/java/com/aizistral/nochatreports/common/gui/EncryptionConfigScreen.java index 42f6f202..8c935fb2 100644 --- a/src/main/java/com/aizistral/nochatreports/common/gui/EncryptionConfigScreen.java +++ b/src/main/java/com/aizistral/nochatreports/common/gui/EncryptionConfigScreen.java @@ -146,6 +146,7 @@ protected void init() { this.unfocusFields(); this.onAlgorithmUpdate(value); }); + cycle.tooltip = new AdvancedWidgetTooltipHolder(cycle.tooltip.get()); this.addRenderableWidget(this.algorithmButton = cycle); diff --git a/src/main/java/com/aizistral/nochatreports/common/mixins/client/MixinChatComponent.java b/src/main/java/com/aizistral/nochatreports/common/mixins/client/MixinChatComponent.java index 81d6c561..1c1a57b5 100644 --- a/src/main/java/com/aizistral/nochatreports/common/mixins/client/MixinChatComponent.java +++ b/src/main/java/com/aizistral/nochatreports/common/mixins/client/MixinChatComponent.java @@ -14,6 +14,7 @@ import net.minecraft.ChatFormatting; import net.minecraft.client.GuiMessageTag; import net.minecraft.client.gui.components.ChatComponent; +import net.minecraft.core.RegistryAccess; import net.minecraft.network.chat.CommonComponents; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.FormattedText; @@ -59,7 +60,7 @@ private synchronized GuiMessageTag modifyGUITag(GuiMessageTag tag) { private FormattedText modifyGUIMessage(FormattedText msg) { if (NCRConfig.getCommon().enableDebugLog()) { NCRCore.LOGGER.info("Adding chat message, structure: " + - Component.Serializer.toJson((Component) msg)); + Component.Serializer.toJson((Component) msg, RegistryAccess.EMPTY)); } var decrypted = EncryptionUtil.tryDecrypt((Component) msg); diff --git a/src/main/java/com/aizistral/nochatreports/common/mixins/client/MixinChatListener.java b/src/main/java/com/aizistral/nochatreports/common/mixins/client/MixinChatListener.java index e304ad83..7c5371d0 100644 --- a/src/main/java/com/aizistral/nochatreports/common/mixins/client/MixinChatListener.java +++ b/src/main/java/com/aizistral/nochatreports/common/mixins/client/MixinChatListener.java @@ -25,6 +25,7 @@ import net.minecraft.client.gui.screens.ChatScreen; import net.minecraft.client.multiplayer.chat.ChatListener; import net.minecraft.client.multiplayer.chat.ChatTrustLevel; +import net.minecraft.core.RegistryAccess; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.MutableComponent; import net.minecraft.network.chat.PlayerChatMessage; @@ -102,7 +103,7 @@ private void onEvaluateTrustLevel(PlayerChatMessage playerChatMessage, Component // Debug never dies if (NCRConfig.getCommon().enableDebugLog()) { NCRCore.LOGGER.info("Received message: {}, from: {}, signature: {}", - Component.Serializer.toJson(playerChatMessage.unsignedContent()), + Component.Serializer.toJson(playerChatMessage.unsignedContent(), RegistryAccess.EMPTY), playerChatMessage.link().sender(), Base64.getEncoder().encodeToString(playerChatMessage.signature() != null ? playerChatMessage.signature().bytes() : new byte[0])); } diff --git a/src/main/java/com/aizistral/nochatreports/common/mixins/client/MixinOnlineServerEntry.java b/src/main/java/com/aizistral/nochatreports/common/mixins/client/MixinOnlineServerEntry.java index 5ab245b4..bbd86bd7 100644 --- a/src/main/java/com/aizistral/nochatreports/common/mixins/client/MixinOnlineServerEntry.java +++ b/src/main/java/com/aizistral/nochatreports/common/mixins/client/MixinOnlineServerEntry.java @@ -13,6 +13,7 @@ import com.aizistral.nochatreports.common.config.NCRConfig; import com.aizistral.nochatreports.common.core.ServerDataExtension; import com.aizistral.nochatreports.common.gui.FontHelper; +import com.google.common.collect.Lists; import com.mojang.blaze3d.systems.RenderSystem; import com.mojang.blaze3d.vertex.PoseStack; @@ -52,10 +53,10 @@ private void onRender(GuiGraphics graphics, int i, int j, int k, int l, int m, i int t = n - k; int u = o - j; if (t >= l - 35 + xOffset && t <= l - 22 + xOffset && u >= 0 + yOffset && u <= 11 + yOffset) { - this.screen.setToolTip(FontHelper.wrap(this.minecraft.font, Language.getInstance() - .getOrDefault("gui.nochatreports.verified_server"), 250).stream() + this.screen.setTooltipForNextRenderPass(Lists.transform(FontHelper.wrap(this.minecraft.font, + Language.getInstance().getOrDefault("gui.nochatreports.verified_server"), 250).stream() .map(Component::literal).collect(Collectors.toCollection(() -> - new ArrayList()))); + new ArrayList())), Component::getVisualOrderText)); } } } diff --git a/src/main/java/com/aizistral/nochatreports/common/mixins/client/MixinPlayerEntry.java b/src/main/java/com/aizistral/nochatreports/common/mixins/client/MixinPlayerEntry.java index 720aebeb..b9f31af3 100644 --- a/src/main/java/com/aizistral/nochatreports/common/mixins/client/MixinPlayerEntry.java +++ b/src/main/java/com/aizistral/nochatreports/common/mixins/client/MixinPlayerEntry.java @@ -1,5 +1,6 @@ package com.aizistral.nochatreports.common.mixins.client; +import java.time.Duration; import java.util.UUID; import java.util.function.Supplier; @@ -46,7 +47,7 @@ private void onConstructed(Minecraft minecraft, SocialInteractionsScreen screen, this.reportButton = new AdvancedImageButton(0, 0, 20, 20, SwitchableSprites.of(REPORT_BUTTON_SPRITES), button -> {}, Component.translatable("gui.socialInteractions.report"), screen); this.reportButton.setTooltip(Tooltip.create(NCR_BUTTON_TOOLTIP)); - this.reportButton.setTooltipDelay(10); + this.reportButton.setTooltipDelay(Duration.ofMillis(500L)); this.reportButton.active = false; } } diff --git a/src/main/java/com/aizistral/nochatreports/common/mixins/common/MixinFriendlyByteBuf.java b/src/main/java/com/aizistral/nochatreports/common/mixins/common/MixinFriendlyByteBuf.java index 8204bb94..3ebed252 100644 --- a/src/main/java/com/aizistral/nochatreports/common/mixins/common/MixinFriendlyByteBuf.java +++ b/src/main/java/com/aizistral/nochatreports/common/mixins/common/MixinFriendlyByteBuf.java @@ -37,7 +37,7 @@ private void onReadJsonWithCodec(Codec codec, CallbackInfoReturnable info) throw JsonElement jsonElement = GsonHelper.fromJson(GSON, this.readUtf(), JsonElement.class); DataResult dataResult = codec.parse(JsonOps.INSTANCE, jsonElement); - Object result = Util.getOrThrow(dataResult, string -> new DecoderException("Failed to decode json: " + string)); + Object result = dataResult.getOrThrow(string -> new DecoderException("Failed to decode json: " + string)); if (jsonElement.getAsJsonObject().has("preventsChatReports")) { ((ServerDataExtension) result).setPreventsChatReports(jsonElement.getAsJsonObject() @@ -57,7 +57,7 @@ private void onWriteJsonWithCodec(Codec codec, Object object, CallbackInfo info) info.cancel(); DataResult dataResult = codec.encodeStart(JsonOps.INSTANCE, object); - JsonElement element = Util.getOrThrow(dataResult, string -> new EncoderException("Failed to encode: " + string + " " + object)); + JsonElement element = dataResult.getOrThrow(string -> new EncoderException("Failed to encode: " + string + " " + object)); element.getAsJsonObject().addProperty("preventsChatReports", true); diff --git a/src/main/java/com/aizistral/nochatreports/common/mixins/server/MixinServerCommonPacketListenerImpl.java b/src/main/java/com/aizistral/nochatreports/common/mixins/server/MixinServerCommonPacketListenerImpl.java index 2b162520..307efaac 100644 --- a/src/main/java/com/aizistral/nochatreports/common/mixins/server/MixinServerCommonPacketListenerImpl.java +++ b/src/main/java/com/aizistral/nochatreports/common/mixins/server/MixinServerCommonPacketListenerImpl.java @@ -44,9 +44,10 @@ private void onSend(Packet packet, CallbackInfo info) { if (NCRConfig.getCommon().convertToGameMessage()) { if (packet instanceof ClientboundPlayerChatPacket chat) { - packet = new ClientboundSystemChatPacket(chat.chatType().resolve(listener.player.level() - .registryAccess()).get().decorate(chat.unsignedContent() != null ? chat.unsignedContent() - : Component.literal(chat.body().content())), false); + packet = new ClientboundSystemChatPacket(chat.chatType().decorate( + chat.unsignedContent() != null ? chat.unsignedContent() + : Component.literal(chat.body().content()) + ), false); info.cancel(); listener.send(packet); diff --git a/src/main/resources/nochatreports.accesswidener b/src/main/resources/nochatreports.accesswidener index aa9d5db8..ef232a41 100644 --- a/src/main/resources/nochatreports.accesswidener +++ b/src/main/resources/nochatreports.accesswidener @@ -24,4 +24,10 @@ accessible method net/minecraft/client/gui/components/AbstractWidget render (Lne extendable method net/minecraft/client/gui/components/AbstractWidget render (Lnet/minecraft/client/gui/GuiGraphics;IIF)V #accessible method net/minecraft/client/gui/components/Tooltip createTooltipPositioner (ZZLnet/minecraft/client/gui/navigation/ScreenRectangle;)Lnet/minecraft/client/gui/screens/inventory/tooltip/ClientTooltipPositioner; -#extendable method net/minecraft/client/gui/components/Tooltip createTooltipPositioner (ZZLnet/minecraft/client/gui/navigation/ScreenRectangle;)Lnet/minecraft/client/gui/screens/inventory/tooltip/ClientTooltipPositioner; \ No newline at end of file +#extendable method net/minecraft/client/gui/components/Tooltip createTooltipPositioner (ZZLnet/minecraft/client/gui/navigation/ScreenRectangle;)Lnet/minecraft/client/gui/screens/inventory/tooltip/ClientTooltipPositioner; + +accessible field net/minecraft/client/gui/components/AbstractWidget tooltip Lnet/minecraft/client/gui/components/WidgetTooltipHolder; +mutable field net/minecraft/client/gui/components/AbstractWidget tooltip Lnet/minecraft/client/gui/components/WidgetTooltipHolder; + +accessible method net/minecraft/client/gui/components/WidgetTooltipHolder createTooltipPositioner (Lnet/minecraft/client/gui/navigation/ScreenRectangle;ZZ)Lnet/minecraft/client/gui/screens/inventory/tooltip/ClientTooltipPositioner; +extendable method net/minecraft/client/gui/components/WidgetTooltipHolder createTooltipPositioner (Lnet/minecraft/client/gui/navigation/ScreenRectangle;ZZ)Lnet/minecraft/client/gui/screens/inventory/tooltip/ClientTooltipPositioner; \ No newline at end of file