Check / compile (pull_request) Successful in 2m57s
The hat only took the head's rotation from 1.21.5, and the cloak sat at a fixed spot with a hard-coded crouch, so crouching and emotes left them where the head and body had been. Both now follow the whole player (the root, which emotes like the backflip turn) and then the head or body, as vanilla places head items, and the cloak leans with the chest when an emote bends the torso. Co-Authored-By: Claude Opus 5.5 <[email protected]>
59 lines
2.3 KiB
Java
59 lines
2.3 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.render.OverlayTexture;
|
|
//? if >=1.21.9 {
|
|
import net.minecraft.client.render.command.OrderedRenderCommandQueue;
|
|
//?} else
|
|
//import net.minecraft.client.render.VertexConsumerProvider;
|
|
import net.minecraft.client.render.entity.feature.FeatureRenderer;
|
|
import net.minecraft.client.render.entity.feature.FeatureRendererContext;
|
|
import net.minecraft.client.render.entity.model.PlayerEntityModel;
|
|
import net.minecraft.client.render.entity.state.PlayerEntityRenderState;
|
|
import net.minecraft.client.util.math.MatrixStack;
|
|
|
|
public class HatFeatureRenderer extends FeatureRenderer<PlayerEntityRenderState, PlayerEntityModel> {
|
|
public HatFeatureRenderer(FeatureRendererContext<PlayerEntityRenderState, PlayerEntityModel> context) {
|
|
super(context);
|
|
}
|
|
|
|
@Override
|
|
public void render(MatrixStack matrices,
|
|
//? if >=1.21.9 {
|
|
OrderedRenderCommandQueue output,
|
|
//?} else
|
|
//VertexConsumerProvider output,
|
|
int light, PlayerEntityRenderState state, float limbAngle, float limbDistance) {
|
|
//? if >=1.21.8 {
|
|
SaturnPlayer player = state.getData(SaturnRenderState.saturnDataKey);
|
|
//?} else
|
|
//SaturnPlayer player = SaturnPlayer.get(state.name);
|
|
|
|
if (state.invisible || player == null || player.hat.isEmpty()) {
|
|
return;
|
|
}
|
|
|
|
matrices.push();
|
|
|
|
// 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)
|
|
PlayerEntityModel model = this.getContextModel();
|
|
//? if >=1.21.5 {
|
|
model.getRootPart().applyTransform(matrices);
|
|
model.head.applyTransform(matrices);
|
|
//?} else {
|
|
/*model.getRootPart().rotate(matrices);
|
|
model.head.rotate(matrices);
|
|
*///?}
|
|
|
|
ObjModel.cosmetic("hat", player.hat).render(MtlLoader.cosmetic(player.hat),
|
|
matrices, output, light,
|
|
OverlayTexture.DEFAULT_UV);
|
|
|
|
matrices.pop();
|
|
}
|
|
} |