Files
saturnclient/src/main/java/org/saturnclient/impl/cosmetics/HatFeatureRenderer.java
T
selimaj-devandclaude af27907356 Build every version with Mojang mappings instead of Yarn
Minecraft ships unobfuscated from 26.1, and 1.21.11 has the last Yarn
release, so the shared src/ has to use Mojang's names before newer
versions can be added (#39).

Each version's sources were migrated with Loom's migrateMappings and
merged back into src/, so code that is only active on other versions
is migrated too. Where Mojang's names differ between 1.21.x versions,
src/ uses the newest ones: Stonecutter replacements swap in the older
Identifier/ResourceLocation and Avatar/Player renderer names, and
version comments cover the few package moves and renamed methods.

The fog mixin now targets setupFog on every version. Yarn's applyFog
named two methods from 1.21.6 on, so it also applied to updateBuffer.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-09-30 17:39:14 +02:00

65 lines
2.4 KiB
Java

package org.saturnclient.impl.cosmetics;
import org.saturnclient.client.player.SaturnPlayer;
import org.saturnclient.impl.cosmetics.obj.MtlLoader;
import org.saturnclient.impl.cosmetics.obj.ObjModel;
import org.saturnclient.saturnclient.SaturnRenderState;
import net.minecraft.client.renderer.texture.OverlayTexture;
//? if >=1.21.9 {
import net.minecraft.client.renderer.SubmitNodeCollector;
//?} else
//import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.entity.layers.RenderLayer;
import net.minecraft.client.renderer.entity.RenderLayerParent;
//? if >=1.21.11 {
import net.minecraft.client.model.player.PlayerModel;
//?} else
//import net.minecraft.client.model.PlayerModel;
import net.minecraft.client.renderer.entity.state.AvatarRenderState;
import com.mojang.blaze3d.vertex.PoseStack;
public class HatFeatureRenderer extends RenderLayer<AvatarRenderState, PlayerModel> {
public HatFeatureRenderer(RenderLayerParent<AvatarRenderState, PlayerModel> context) {
super(context);
}
@Override
//? if >=1.21.9 {
public void submit(PoseStack matrices,
//?} else
//public void render(PoseStack matrices,
//? if >=1.21.9 {
SubmitNodeCollector output,
//?} else
//MultiBufferSource output,
int light, AvatarRenderState state, float limbAngle, float limbDistance) {
//? if >=1.21.8 {
SaturnPlayer player = state.getData(SaturnRenderState.saturnDataKey);
//?} else
//SaturnPlayer player = SaturnPlayer.get(state.name);
if (state.isInvisible || player == null || player.hat.isEmpty()) {
return;
}
matrices.pushPose();
// On the head, as vanilla places head items: the whole player (which emotes like the backflip
// turn), then the head's position, turn and scale (which crouching and emotes move)
PlayerModel model = this.getParentModel();
//? if >=1.21.5 {
model.root().translateAndRotate(matrices);
model.head.translateAndRotate(matrices);
//?} else {
/*model.root().translateAndRotate(matrices);
model.head.translateAndRotate(matrices);
*///?}
ObjModel.cosmetic("hat", player.hat).render(MtlLoader.cosmetic(player.hat),
matrices, output, light,
OverlayTexture.NO_OVERLAY);
matrices.popPose();
}
}