diff options
author | My-Name-Is-Jeff <37018278+My-Name-Is-Jeff@users.noreply.github.com> | 2021-06-25 12:15:02 -0400 |
---|---|---|
committer | My-Name-Is-Jeff <37018278+My-Name-Is-Jeff@users.noreply.github.com> | 2021-06-25 12:15:02 -0400 |
commit | 680444dbbf5ed0340b4f74e2f596f8cd0d996f00 (patch) | |
tree | ce2eb88d3bfa5394d3f89e36b5277bd7c4be84da /src | |
parent | ebe35687597f5741954e2ccdc60ae239c5a36150 (diff) | |
download | SkytilsMod-680444dbbf5ed0340b4f74e2f596f8cd0d996f00.tar.gz SkytilsMod-680444dbbf5ed0340b4f74e2f596f8cd0d996f00.tar.bz2 SkytilsMod-680444dbbf5ed0340b4f74e2f596f8cd0d996f00.zip |
Fix check render entity event not working on leashed + targeting guardians
Diffstat (limited to 'src')
6 files changed, 107 insertions, 3 deletions
diff --git a/src/main/java/skytils/skytilsmod/mixins/renderer/MixinRender.java b/src/main/java/skytils/skytilsmod/mixins/renderer/MixinRender.java index ea3fdac1..f0d0cb53 100644 --- a/src/main/java/skytils/skytilsmod/mixins/renderer/MixinRender.java +++ b/src/main/java/skytils/skytilsmod/mixins/renderer/MixinRender.java @@ -24,6 +24,7 @@ import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.culling.ICamera; import net.minecraft.client.renderer.entity.Render; import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLiving; import net.minecraft.util.ChatComponentText; import net.minecraft.util.Vec3; import net.minecraftforge.common.MinecraftForge; @@ -41,7 +42,7 @@ public abstract class MixinRender<T extends Entity> { @Inject(method = "shouldRender", at = @At("HEAD"), cancellable = true) private void shouldRender(T livingEntity, ICamera camera, double camX, double camY, double camZ, CallbackInfoReturnable<Boolean> cir) { try { - if (MinecraftForge.EVENT_BUS.post(new CheckRenderEntityEvent<>(livingEntity, camera, camX, camY, camZ))) cir.setReturnValue(false); + if (!(livingEntity instanceof EntityLiving)) if (MinecraftForge.EVENT_BUS.post(new CheckRenderEntityEvent<>(livingEntity, camera, camX, camY, camZ))) cir.setReturnValue(false); } catch (Throwable e) { Minecraft.getMinecraft().ingameGUI.getChatGUI().printChatMessage(new ChatComponentText("§cSkytils caught and logged an exception at CheckRenderEntityEvent. Please report this on the Discord server.")); e.printStackTrace(); diff --git a/src/main/java/skytils/skytilsmod/mixins/renderer/MixinRenderGuardian.java b/src/main/java/skytils/skytilsmod/mixins/renderer/MixinRenderGuardian.java new file mode 100644 index 00000000..b02cc70f --- /dev/null +++ b/src/main/java/skytils/skytilsmod/mixins/renderer/MixinRenderGuardian.java @@ -0,0 +1,50 @@ +/* + * Skytils - Hypixel Skyblock Quality of Life Mod + * Copyright (C) 2021 Skytils + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <https://www.gnu.org/licenses/>. + */ + +package skytils.skytilsmod.mixins.renderer; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.renderer.culling.ICamera; +import net.minecraft.client.renderer.entity.RenderGuardian; +import net.minecraft.client.renderer.entity.RenderLiving; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.entity.monster.EntityGuardian; +import net.minecraft.util.ChatComponentText; +import net.minecraftforge.common.MinecraftForge; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import skytils.skytilsmod.events.CheckRenderEntityEvent; + +@Mixin(RenderGuardian.class) +public abstract class MixinRenderGuardian extends RenderLiving<EntityGuardian> { + public MixinRenderGuardian(RenderManager rendermanagerIn, ModelBase modelbaseIn, float shadowsizeIn) { + super(rendermanagerIn, modelbaseIn, shadowsizeIn); + } + @Inject(method = "shouldRender", at = @At("HEAD"), cancellable = true) + private void shouldRender(EntityGuardian livingEntity, ICamera camera, double camX, double camY, double camZ, CallbackInfoReturnable<Boolean> cir) { + try { + if (MinecraftForge.EVENT_BUS.post(new CheckRenderEntityEvent<>(livingEntity, camera, camX, camY, camZ))) cir.setReturnValue(false); + } catch (Throwable e) { + Minecraft.getMinecraft().ingameGUI.getChatGUI().printChatMessage(new ChatComponentText("§cSkytils caught and logged an exception at CheckRenderEntityEvent. Please report this on the Discord server.")); + e.printStackTrace(); + } + } +} diff --git a/src/main/java/skytils/skytilsmod/mixins/renderer/MixinRenderLiving.java b/src/main/java/skytils/skytilsmod/mixins/renderer/MixinRenderLiving.java new file mode 100644 index 00000000..5eea3c0b --- /dev/null +++ b/src/main/java/skytils/skytilsmod/mixins/renderer/MixinRenderLiving.java @@ -0,0 +1,51 @@ +/* + * Skytils - Hypixel Skyblock Quality of Life Mod + * Copyright (C) 2021 Skytils + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <https://www.gnu.org/licenses/>. + */ + +package skytils.skytilsmod.mixins.renderer; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.renderer.culling.ICamera; +import net.minecraft.client.renderer.entity.Render; +import net.minecraft.client.renderer.entity.RenderLiving; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.monster.EntityGuardian; +import net.minecraft.util.ChatComponentText; +import net.minecraftforge.common.MinecraftForge; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import skytils.skytilsmod.events.CheckRenderEntityEvent; + +@Mixin(RenderLiving.class) +public abstract class MixinRenderLiving<T extends EntityLiving> extends Render<T> { + protected MixinRenderLiving(RenderManager renderManager) { + super(renderManager); + } + @Inject(method = "shouldRender", at = @At("HEAD"), cancellable = true) + private void shouldRender(T livingEntity, ICamera camera, double camX, double camY, double camZ, CallbackInfoReturnable<Boolean> cir) { + try { + if (!(livingEntity instanceof EntityGuardian)) if (MinecraftForge.EVENT_BUS.post(new CheckRenderEntityEvent<>(livingEntity, camera, camX, camY, camZ))) cir.setReturnValue(false); + } catch (Throwable e) { + Minecraft.getMinecraft().ingameGUI.getChatGUI().printChatMessage(new ChatComponentText("§cSkytils caught and logged an exception at CheckRenderEntityEvent. Please report this on the Discord server.")); + e.printStackTrace(); + } + } +} diff --git a/src/main/kotlin/skytils/skytilsmod/events/CheckRenderEntityEvent.kt b/src/main/kotlin/skytils/skytilsmod/events/CheckRenderEntityEvent.kt index b750b751..a99aeb9b 100644 --- a/src/main/kotlin/skytils/skytilsmod/events/CheckRenderEntityEvent.kt +++ b/src/main/kotlin/skytils/skytilsmod/events/CheckRenderEntityEvent.kt @@ -23,7 +23,7 @@ import net.minecraftforge.fml.common.eventhandler.Cancelable import net.minecraftforge.fml.common.eventhandler.Event @Cancelable -class CheckRenderEntityEvent<T : Entity?>( +class CheckRenderEntityEvent<T : Entity>( val entity: T, val camera: ICamera, val camX: Double, diff --git a/src/main/kotlin/skytils/skytilsmod/features/impl/misc/SlayerFeatures.kt b/src/main/kotlin/skytils/skytilsmod/features/impl/misc/SlayerFeatures.kt index 42e0d2b4..af22fdea 100644 --- a/src/main/kotlin/skytils/skytilsmod/features/impl/misc/SlayerFeatures.kt +++ b/src/main/kotlin/skytils/skytilsmod/features/impl/misc/SlayerFeatures.kt @@ -353,7 +353,7 @@ class SlayerFeatures { @SubscribeEvent fun onCheckRender(event: CheckRenderEntityEvent<*>) { // TODO force someone to test this - if (!Skytils.config.hideOthersBrokenHeartRadiation || event.entity !is EntityGuardian) return + if (!Skytils.config.hideOthersBrokenHeartRadiation || !event.entity.isInvisible || event.entity !is EntityGuardian) return if (slayerEntity != null && slayerEntity is EntityEnderman) { if (slayerEntity!!.isRiding) { printDebugMessage("Slayer is Riding") diff --git a/src/main/resources/mixins.skytils.json b/src/main/resources/mixins.skytils.json index 903b61ee..a190e72f 100644 --- a/src/main/resources/mixins.skytils.json +++ b/src/main/resources/mixins.skytils.json @@ -43,8 +43,10 @@ "renderer.MixinRender", "renderer.MixinRenderBat", "renderer.MixinRenderEntityItem", + "renderer.MixinRenderGuardian", "renderer.MixinRenderItem", "renderer.MixinRenderLightningBolt", + "renderer.MixinRenderLiving", "renderer.MixinTileEntityChestRenderer", "renderer.MixinTileEntityItemStackRenderer", "renderer.MixinTileEntitySkullRenderer", |