From 84e27a7c4d848deeeab912b853c25d9fb72d2b44 Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Mon, 24 Jul 2023 17:15:10 -0400 Subject: [PATCH] Fix ender dragon model leaking client world --- .../EnderDragonRendererMixin.java | 24 +++++++++++++++++++ .../main/resources/modernfix.accesswidener | 3 ++- 2 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 common/src/main/java/org/embeddedt/modernfix/common/mixin/bugfix/ender_dragon_leak/EnderDragonRendererMixin.java diff --git a/common/src/main/java/org/embeddedt/modernfix/common/mixin/bugfix/ender_dragon_leak/EnderDragonRendererMixin.java b/common/src/main/java/org/embeddedt/modernfix/common/mixin/bugfix/ender_dragon_leak/EnderDragonRendererMixin.java new file mode 100644 index 00000000..d3600b87 --- /dev/null +++ b/common/src/main/java/org/embeddedt/modernfix/common/mixin/bugfix/ender_dragon_leak/EnderDragonRendererMixin.java @@ -0,0 +1,24 @@ +package org.embeddedt.modernfix.common.mixin.bugfix.ender_dragon_leak; + +import net.minecraft.client.renderer.entity.EnderDragonRenderer; +import org.embeddedt.modernfix.annotation.ClientOnlyMixin; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +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.callback.CallbackInfo; + +@Mixin(EnderDragonRenderer.class) +@ClientOnlyMixin +public abstract class EnderDragonRendererMixin { + @Shadow @Final private EnderDragonRenderer.DragonModel model; + + /** + * Prevent leaking the client world through the entity reference. + */ + @Inject(method = "render(Lnet/minecraft/world/entity/boss/enderdragon/EnderDragon;FFLcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/MultiBufferSource;I)V", at = @At("RETURN")) + private void clearDragonEntityReference(CallbackInfo ci) { + this.model.entity = null; + } +} diff --git a/common/src/main/resources/modernfix.accesswidener b/common/src/main/resources/modernfix.accesswidener index a9dd0458..62759631 100644 --- a/common/src/main/resources/modernfix.accesswidener +++ b/common/src/main/resources/modernfix.accesswidener @@ -29,4 +29,5 @@ accessible field net/minecraft/client/renderer/block/model/BlockModel GSON Lcom/ accessible field net/minecraft/server/MinecraftServer resources Lnet/minecraft/server/ServerResources; accessible field net/minecraft/client/renderer/RenderStateShard name Ljava/lang/String; accessible method net/minecraft/client/gui/screens/Screen addButton (Lnet/minecraft/client/gui/components/AbstractWidget;)Lnet/minecraft/client/gui/components/AbstractWidget; -accessible field net/minecraft/server/packs/resources/SimpleReloadableResourceManager namespacedPacks Ljava/util/Map; \ No newline at end of file +accessible field net/minecraft/server/packs/resources/SimpleReloadableResourceManager namespacedPacks Ljava/util/Map; +accessible field net/minecraft/client/renderer/entity/EnderDragonRenderer$DragonModel entity Lnet/minecraft/world/entity/boss/enderdragon/EnderDragon;