Build 1.21.7 with Stonecutter from the shared src/

Step 5 of #8. versions/1.21.7/src is gone; 1.21.7 builds from src/ as
:1.21.7.

1.21.7's copy differed from 1.21.8's in the player render state: Fabric
API's RenderStateDataKey only exists from 1.21.8 (fabric-rendering-v1
12.6.0), so 1.21.7 had no updateRenderState hook, no SaturnRenderState,
and looked players up by name for the cloak and hat. That stays the case:
- The cloak and hat use getData on >=1.21.8 and SaturnPlayer.get(name)
  before that.
- PlayerEntityRendererMixin's updateRenderState exists only on >=1.21.8,
  as flat ranges (>=1.21.9, else if >=1.21.8) calling a shared
  saturn$applyPlayer helper, instead of nested version blocks.
- SaturnRenderState's key only exists on >=1.21.8; the class is empty
  before.
- TODO: 1.21.6 and 1.21.7 still don't show the role icon in names.

1.21.7's NameTagMixin isn't carried over: it wasn't registered in any
mixin config, so it never ran.

The 1.21.7 jar differs from the old one only as 1.21.8's did in step 4
(entityAlpha and drawGroup helpers, getIconId, and the cloak getting its
buffer at the draw call), plus the empty SaturnRenderState and the
missing dead NameTagMixin. 1.21.8-1.21.11 only differ in
PlayerEntityRendererMixin (the helper).

Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
2026-09-27 05:46:41 +02:00
co-authored by claude
parent 85e5ef3f59
commit 6f122b5237
63 changed files with 41 additions and 3715 deletions
@@ -411,7 +411,10 @@ public class CloakFeatureRenderer extends FeatureRenderer<PlayerEntityRenderStat
return;
}
//? if >=1.21.8 {
SaturnPlayer player = state.getData(SaturnRenderState.saturnDataKey);
//?} else
//SaturnPlayer player = SaturnPlayer.get(state.name);
if (player == null) {
return;
@@ -30,7 +30,10 @@ public class HatFeatureRenderer extends FeatureRenderer<PlayerEntityRenderState,
//?} 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;
@@ -2,13 +2,23 @@ package org.saturnclient.saturnclient;
//? if >=1.21.11
import org.jspecify.annotations.NonNull;
//? if >=1.21.8 {
import org.saturnclient.client.player.SaturnPlayer;
import net.fabricmc.fabric.api.client.rendering.v1.RenderStateDataKey;
//?}
/**
* The key PlayerEntityRendererMixin stores each player's SaturnPlayer under in their render state.
* Fabric API's render state data only exists from 1.21.8, so older versions look players up by name.
*/
public class SaturnRenderState {
//? if >=1.21.11
//? if >=1.21.11 {
@NonNull
public static RenderStateDataKey<SaturnPlayer> saturnDataKey = RenderStateDataKey
.create(() -> "saturn-client-player");
//?} else if >=1.21.8 {
/*public static RenderStateDataKey<SaturnPlayer> saturnDataKey = RenderStateDataKey
.create(() -> "saturn-client-player");
*///?}
}
@@ -10,6 +10,7 @@ import net.minecraft.client.render.entity.LivingEntityRenderer;
import net.minecraft.client.render.entity.PlayerEntityRenderer;
import net.minecraft.client.render.entity.model.PlayerEntityModel;
import net.minecraft.client.render.entity.state.PlayerEntityRenderState;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.text.MutableText;
import net.minecraft.text.Text;
@@ -39,15 +40,25 @@ public abstract class PlayerEntityRendererMixin
this.addFeature(new CloakFeatureRenderer(this, ctx.getEquipmentModelLoader()));
}
@Inject(method = "updateRenderState", at = @At("TAIL"))
// Stores the SaturnPlayer in the render state and adds the role icon to the name. Render state
// data only exists from 1.21.8.
// TODO: 1.21.6 and 1.21.7 don't show the role icon in player names.
//? if >=1.21.9 {
@Inject(method = "updateRenderState", at = @At("TAIL"))
public <A extends PlayerLikeEntity & ClientPlayerLikeEntity> void updateRenderState(
A entity, PlayerEntityRenderState state,
//?} else {
/*public void updateRenderState(
AbstractClientPlayerEntity entity, PlayerEntityRenderState state,
A entity, PlayerEntityRenderState state, float f, CallbackInfo ci) {
saturn$applyPlayer(entity, state);
}
//?} else if >=1.21.8 {
/*@Inject(method = "updateRenderState", at = @At("TAIL"))
public void updateRenderState(
AbstractClientPlayerEntity entity, PlayerEntityRenderState state, float f, CallbackInfo ci) {
saturn$applyPlayer(entity, state);
}
*///?}
float f, CallbackInfo ci) {
//? if >=1.21.8 {
private void saturn$applyPlayer(Entity entity, PlayerEntityRenderState state) {
if (entity == null) {
return;
}
@@ -66,4 +77,5 @@ public abstract class PlayerEntityRendererMixin
.append(state.displayName.copy());
}
}
//?}
}