Apollo icon indicating copy to clipboard operation
Apollo copied to clipboard

[Bug Report] Glow outline does not match vanilla behaviour when armor is equipped

Open Beaness opened this issue 7 months ago • 1 comments

Checklist before creating an issue:

  • [x] I'm using the latest version of Apollo.
  • [x] I'm using the latest version of Lunar Client. (Relaunched in the last hour)
  • [x] I'm running Apollo on ONLY the backend server OR the proxy. (YOU CANNOT RUN IT ON BOTH)
  • [x] I do NOT have both Apollo and the LEGACY API installed on the same server. (YOU CANNOT RUN BOTH AT THE SAME TIME)
  • [x] I've gathered all screenshots, logs and appropriate information related to creating a bug report.

Issue Description

When armor is equipped the glow module does not outline the armor but still outlines the player's body. This does not match vanilla behaivour.

Reproduction steps

Apply glow effect on a player while he has armor on

Code Snippet (If applicable, if not write N/A)

N/A

Versions

1.8

Platforms

Spigot / Bukkit

Server Version

1.8

Modules

Optifine

Screenshots

Lunar Client outline:
https://lunr.pics/UkVw7TcZ

Modern outglow:
https://imgur.com/a/rm1aS1e

Contact Information

Discord: @1.7.10

Additional Context (Examples, Links, ETC)

No response

Beaness avatar Jun 05 '25 19:06 Beaness

This is a 1.8 bug (AFAICT Lunar is using the existing spectator highlighting shader added in 1.8, see the highlighting keybind in MC settings), in the entity outline render pass no layers are rendered.

This is how it looks like in 1.8 (MCP RendererLivingEntity)

if (this.renderOutlines) {
    // This is the outlines pass
    boolean flag1 = this.setScoreTeamColor(entity);
    this.renderModel(entity, f6, f5, f8, f2, f7, 0.0625F);

    if (flag1) {
        this.unsetScoreTeamColor();
    }
} else {
    // This is the regular pass
    boolean flag = this.setDoRenderBrightness(entity, partialTicks);
    this.renderModel(entity, f6, f5, f8, f2, f7, 0.0625F);

    if (flag) {
        this.unsetBrightness();
    }

    GlStateManager.depthMask(true);

    if (!(entity instanceof EntityPlayer) || !((EntityPlayer)entity).isSpectator()) {
        this.renderLayers(entity, f6, f5, partialTicks, f8, f2, f7, 0.0625F);
    }
}

while this is 1.9 (RenderLivingBase)

if (this.renderOutlines) {
    // This is the outlines pass
    boolean flag1 = this.setScoreTeamColor(entity);
    // ...
  
    if (!this.field_188323_j) {
        this.renderModel(entity, f6, f5, f8, f2, f7, f4);
    }
  
    // This is missing in 1.8
    if (!(entity instanceof EntityPlayer) || !((EntityPlayer)entity).isSpectator()) {
        this.renderLayers(entity, f6, f5, partialTicks, f8, f2, f7, f4);
    }
  
    // ...
  
    if (flag1) {
        this.unsetScoreTeamColor();
    }
} else {
    // This is the regular pass
    boolean flag = this.setDoRenderBrightness(entity, partialTicks);
    this.renderModel(entity, f6, f5, f8, f2, f7, f4);

    if (flag) {
        this.unsetBrightness();
    }

    GlStateManager.depthMask(true);

    if (!(entity instanceof EntityPlayer) || !((EntityPlayer)entity).isSpectator()) {
        this.renderLayers(entity, f6, f5, partialTicks, f8, f2, f7, f4);
    }
}

Haven't tried, but the fix might be quite simple.

roccodev avatar Oct 04 '25 11:10 roccodev