From 9d4fdccb0fc0ade08a0e2acf304a4fddff0c59f4 Mon Sep 17 00:00:00 2001 From: CrushedPixel Date: Fri, 4 Sep 2015 01:32:57 +0200 Subject: [PATCH] Added option to completely hide invisible entities like Armor Stands instead of them being rendered semi-transparent --- .../replaymod/gui/GuiReplaySettings.java | 15 ++------------- .../mixin/MixinRendererLivingEntity.java | 12 ++++++++++++ .../replaymod/settings/ReplaySettings.java | 3 ++- .../resources/assets/replaymod/lang/en_US.lang | 1 + 4 files changed, 17 insertions(+), 14 deletions(-) diff --git a/src/main/java/eu/crushedpixel/replaymod/gui/GuiReplaySettings.java b/src/main/java/eu/crushedpixel/replaymod/gui/GuiReplaySettings.java index 802665a8..40c2c9fa 100755 --- a/src/main/java/eu/crushedpixel/replaymod/gui/GuiReplaySettings.java +++ b/src/main/java/eu/crushedpixel/replaymod/gui/GuiReplaySettings.java @@ -69,23 +69,12 @@ public class GuiReplaySettings extends GuiScreen { int xPos = this.width / 2 - 155 + i % 2 * 160; int yPos = this.height / 6 + 24 * (i >> 1); - if(o == ReplayOptions.lighting) { - GuiToggleButton lightingButton = new GuiSettingsOnOffButton(REPLAY_SETTINGS_ENABLE_LIGHTING, xPos, yPos, 150, 20, o); - buttonList.add(lightingButton); - - } else if(o == ReplayOptions.linear) { + if(o == ReplayOptions.linear) { GuiToggleButton linearButton = new GuiSettingsOnOffButton(REPLAY_SETTINGS_FORCE_LINEAR, xPos, yPos, 150, 20, o, I18n.format("replaymod.gui.settings.interpolation.linear"), I18n.format("replaymod.gui.settings.interpolation.cubic")); buttonList.add(linearButton); - } else if(o == ReplayOptions.previewPath) { - GuiToggleButton pathPreviewButton = new GuiSettingsOnOffButton(REPLAY_SETTINGS_PATHPREVIEW_ID, xPos, yPos, 150, 20, o); - buttonList.add(pathPreviewButton); - - } else if(o == ReplayOptions.keyframeCleanCallback) { - GuiToggleButton keyframeClearCallbackButton = new GuiSettingsOnOffButton(REPLAY_SETTINGS_CLEARCALLBACK_ID, xPos, yPos, 150, 20, o); - buttonList.add(keyframeClearCallbackButton); - } else if(o == ReplayOptions.showChat) { + } else { buttonList.add(new GuiSettingsOnOffButton(0, xPos, yPos, 150, 20, o)); } diff --git a/src/main/java/eu/crushedpixel/replaymod/mixin/MixinRendererLivingEntity.java b/src/main/java/eu/crushedpixel/replaymod/mixin/MixinRendererLivingEntity.java index 991234a8..6b6cde79 100644 --- a/src/main/java/eu/crushedpixel/replaymod/mixin/MixinRendererLivingEntity.java +++ b/src/main/java/eu/crushedpixel/replaymod/mixin/MixinRendererLivingEntity.java @@ -1,12 +1,16 @@ package eu.crushedpixel.replaymod.mixin; +import eu.crushedpixel.replaymod.replay.ReplayHandler; +import eu.crushedpixel.replaymod.settings.ReplaySettings; import eu.crushedpixel.replaymod.video.EntityRendererHandler; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.entity.RendererLivingEntity; import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; 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.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; @Mixin(RendererLivingEntity.class) @@ -19,4 +23,12 @@ public abstract class MixinRendererLivingEntity { ci.cancel(); } } + + @Redirect(method = "renderModel", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/EntityLivingBase;isInvisibleToPlayer(Lnet/minecraft/entity/player/EntityPlayer;)Z")) + private boolean shouldInvisibleNotBeRendered(EntityLivingBase entity, EntityPlayer thePlayer) { + if(ReplaySettings.ReplayOptions.renderInvisible.getValue() == Boolean.TRUE|| !ReplayHandler.isInReplay()) { + return entity.isInvisibleToPlayer(thePlayer); + } + return true; //the original method inverts the return value + } } diff --git a/src/main/java/eu/crushedpixel/replaymod/settings/ReplaySettings.java b/src/main/java/eu/crushedpixel/replaymod/settings/ReplaySettings.java index 386503aa..3ec6e629 100755 --- a/src/main/java/eu/crushedpixel/replaymod/settings/ReplaySettings.java +++ b/src/main/java/eu/crushedpixel/replaymod/settings/ReplaySettings.java @@ -204,7 +204,8 @@ public class ReplaySettings { lighting(false, "replaymod.gui.settings.lighting"), previewPath(false, "replaymod.gui.settings.pathpreview"), keyframeCleanCallback(true, "replaymod.gui.settings.keyframecleancallback"), - showChat(false, "options.chat.visibility"); + showChat(false, "options.chat.visibility"), + renderInvisible(true, "replaymod.gui.settings.renderinvisible"); private Object value; private String name; diff --git a/src/main/resources/assets/replaymod/lang/en_US.lang b/src/main/resources/assets/replaymod/lang/en_US.lang index f0e8299e..0025fbcf 100644 --- a/src/main/resources/assets/replaymod/lang/en_US.lang +++ b/src/main/resources/assets/replaymod/lang/en_US.lang @@ -261,6 +261,7 @@ replaymod.gui.settings.resources=Server Resource Packs replaymod.gui.settings.interpolation=Path Interpolation replaymod.gui.settings.pathpreview=Show Path Preview replaymod.gui.settings.keyframecleancallback=Clear Confirmation +replaymod.gui.settings.renderinvisible=Render invisible Entities replaymod.gui.settings.warning.linea=WARNING: Recording settings will be replaymod.gui.settings.warning.lineb=applied the next time you join a world.