Build 1.21.8 with Stonecutter from the shared src/
Check / compile (pull_request) Successful in 10m37s
Check / compile (pull_request) Successful in 10m37s
Step 4 of #8, the first version before the 1.21.9 render queue. versions/1.21.8/src is gone; 1.21.8 builds from src/ as :1.21.8. API differences behind version comments (<1.21.9 / >=1.21.9): - Player cosmetics: FeatureRenderer.render takes a VertexConsumerProvider instead of the render queue. The cloak, hat and OBJ renderers name the render target "output" in both, so only the parameter type and the final draw call differ; the OBJ face loop moved into drawGroup. - PlayerEntityRenderer.updateRenderState's entity type, the cape texture accessor, GameProfile getName()/getId() vs name()/id(), fonts in TextMixin, EntityRenderDispatcher vs EntityRenderManager, Screen input events (Click/KeyInput), and KeyBinding categories and isKeyPressed. Features 1.21.9+ lacks stay on 1.21.8, with a TODO for 1.21.9+: - NametagsMixin moves into src/. It hooks renderLabelIfPresent with a VertexConsumerProvider, which 1.21.9 changed, so on 1.21.9+ its body is empty; it stays registered, so features.mixins.json is the same for every version. - The splash screen's loading-bar border, and the real drag deltas in SaturnScreenFabric.mouseDragged. - Status effect icons keep 1.21.8's GUI atlas sprite; 1.21.9+ draws the texture instead (getIconId), as before. Behaviour changes on 1.21.8: the cloak and hat read the Saturn player from the render state (set by PlayerEntityRendererMixin, by UUID) instead of looking it up by name, and the display-name null check applies. Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
@@ -15,7 +15,10 @@ import org.saturnclient.saturnclient.SaturnRenderState;
|
||||
|
||||
import net.minecraft.client.render.OverlayTexture;
|
||||
import net.minecraft.client.render.VertexConsumer;
|
||||
//? if >=1.21.9 {
|
||||
import net.minecraft.client.render.command.OrderedRenderCommandQueue;
|
||||
//?} else
|
||||
//import net.minecraft.client.render.VertexConsumerProvider;
|
||||
import net.minecraft.client.render.entity.equipment.EquipmentModel;
|
||||
import net.minecraft.client.render.entity.equipment.EquipmentModelLoader;
|
||||
import net.minecraft.client.render.entity.equipment.EquipmentModel.LayerType;
|
||||
@@ -394,10 +397,17 @@ public class CloakFeatureRenderer extends FeatureRenderer<PlayerEntityRenderStat
|
||||
private long lastUpdate = 0;
|
||||
|
||||
@Override
|
||||
public void render(MatrixStack matrices, OrderedRenderCommandQueue queue, int light, PlayerEntityRenderState state,
|
||||
float limbAngle, float limbDistance) {
|
||||
public void render(MatrixStack matrices,
|
||||
//? if >=1.21.9 {
|
||||
OrderedRenderCommandQueue output,
|
||||
//?} else
|
||||
//VertexConsumerProvider output,
|
||||
int light, PlayerEntityRenderState state, float limbAngle, float limbDistance) {
|
||||
if (state.invisible || !state.capeVisible
|
||||
//? if >=1.21.9 {
|
||||
|| state.skinTextures.cape() != null) {
|
||||
//?} else
|
||||
//|| state.skinTextures.capeTexture() != null) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -454,9 +464,12 @@ public class CloakFeatureRenderer extends FeatureRenderer<PlayerEntityRenderStat
|
||||
|
||||
horizontalCurve = MathHelper.clamp(state.field_53537 / 150.0f, -1.0f, 1.0f);
|
||||
|
||||
queue.submitCustom(matrices, ShaderUtils.getRenderLayer(customCape), (entry, vertexConsumer) -> {
|
||||
//? if >=1.21.9 {
|
||||
output.submitCustom(matrices, ShaderUtils.getRenderLayer(customCape), (entry, vertexConsumer) -> {
|
||||
renderCape(entry, vertexConsumer, state, l, OverlayTexture.DEFAULT_UV);
|
||||
});
|
||||
//?} else
|
||||
//renderCape(matrices.peek(), output.getBuffer(ShaderUtils.getRenderLayer(customCape)), state, l, OverlayTexture.DEFAULT_UV);
|
||||
|
||||
matrices.pop();
|
||||
}
|
||||
|
||||
@@ -7,7 +7,10 @@ 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;
|
||||
@@ -21,8 +24,12 @@ public class HatFeatureRenderer extends FeatureRenderer<PlayerEntityRenderState,
|
||||
}
|
||||
|
||||
@Override
|
||||
public void render(MatrixStack matrices, OrderedRenderCommandQueue queue, int light, PlayerEntityRenderState state,
|
||||
float limbAngle, float limbDistance) {
|
||||
public void render(MatrixStack matrices,
|
||||
//? if >=1.21.9 {
|
||||
OrderedRenderCommandQueue output,
|
||||
//?} else
|
||||
//VertexConsumerProvider output,
|
||||
int light, PlayerEntityRenderState state, float limbAngle, float limbDistance) {
|
||||
SaturnPlayer player = state.getData(SaturnRenderState.saturnDataKey);
|
||||
|
||||
if (state.invisible || player == null || player.hat.isEmpty()) {
|
||||
@@ -35,7 +42,7 @@ public class HatFeatureRenderer extends FeatureRenderer<PlayerEntityRenderState,
|
||||
matrices.multiply(new Quaternionf().rotationZYX(head.roll, head.yaw, head.pitch));
|
||||
|
||||
ObjModel.cosmetic("hat", player.hat).render(MtlLoader.cosmetic(player.hat),
|
||||
matrices, queue, light,
|
||||
matrices, output, light,
|
||||
OverlayTexture.DEFAULT_UV);
|
||||
|
||||
matrices.pop();
|
||||
|
||||
@@ -13,7 +13,10 @@ import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import de.javagl.obj.Mtl;
|
||||
import de.javagl.obj.Obj;
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
//? if >=1.21.9 {
|
||||
import net.minecraft.client.render.command.OrderedRenderCommandQueue;
|
||||
//?} else
|
||||
//import net.minecraft.client.render.VertexConsumerProvider;
|
||||
import net.minecraft.client.util.math.MatrixStack;
|
||||
import net.minecraft.resource.Resource;
|
||||
import net.minecraft.resource.ResourceManager;
|
||||
@@ -78,8 +81,12 @@ public class ObjModel {
|
||||
}
|
||||
}
|
||||
|
||||
public void render(Map<String, Mtl> mtlMap, MatrixStack matrices, OrderedRenderCommandQueue queue, int light,
|
||||
int overlay) {
|
||||
public void render(Map<String, Mtl> mtlMap, MatrixStack matrices,
|
||||
//? if >=1.21.9 {
|
||||
OrderedRenderCommandQueue output,
|
||||
//?} else
|
||||
//VertexConsumerProvider output,
|
||||
int light, int overlay) {
|
||||
matrices.push();
|
||||
|
||||
matrices.multiply(net.minecraft.util.math.RotationAxis.POSITIVE_X.rotationDegrees(180.0f));
|
||||
@@ -95,7 +102,7 @@ public class ObjModel {
|
||||
matrices.multiply(net.minecraft.util.math.RotationAxis.POSITIVE_Z.rotationDegrees(config.rotation.z));
|
||||
}
|
||||
|
||||
ObjRenderer.renderObj(this.obj, mtlMap, matrices, queue, light, overlay);
|
||||
ObjRenderer.renderObj(this.obj, mtlMap, matrices, output, light, overlay);
|
||||
|
||||
matrices.pop();
|
||||
}
|
||||
|
||||
@@ -12,7 +12,10 @@ import de.javagl.obj.*;
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import net.minecraft.client.render.RenderLayer;
|
||||
import net.minecraft.client.render.VertexConsumer;
|
||||
//? if >=1.21.9 {
|
||||
import net.minecraft.client.render.command.OrderedRenderCommandQueue;
|
||||
//?} else
|
||||
//import net.minecraft.client.render.VertexConsumerProvider;
|
||||
import net.minecraft.client.util.math.MatrixStack;
|
||||
import net.minecraft.util.Identifier;
|
||||
|
||||
@@ -28,7 +31,10 @@ public class ObjRenderer {
|
||||
public static void renderObj(Obj obj,
|
||||
Map<String, Mtl> mtlMap,
|
||||
MatrixStack matrices,
|
||||
OrderedRenderCommandQueue queue,
|
||||
//? if >=1.21.9 {
|
||||
OrderedRenderCommandQueue output,
|
||||
//?} else
|
||||
//VertexConsumerProvider output,
|
||||
int light,
|
||||
int overlay) {
|
||||
|
||||
@@ -64,19 +70,25 @@ public class ObjRenderer {
|
||||
final float fr = r, fg = g, fb = b;
|
||||
final Obj finalObj = groupObj;
|
||||
|
||||
queue.submitCustom(matrices, layer, (e, vertexConsumer) -> {
|
||||
//? if >=1.21.9 {
|
||||
output.submitCustom(matrices, layer,
|
||||
(entry, consumer) -> drawGroup(finalObj, consumer, entry, light, overlay, fr, fg, fb));
|
||||
//?} else
|
||||
//drawGroup(finalObj, output.getBuffer(layer), matrices.peek(), light, overlay, fr, fg, fb);
|
||||
}
|
||||
}
|
||||
|
||||
int faces = finalObj.getNumFaces();
|
||||
private static void drawGroup(Obj obj, VertexConsumer consumer, MatrixStack.Entry entry, int light, int overlay,
|
||||
float r, float g, float b) {
|
||||
int faces = obj.getNumFaces();
|
||||
|
||||
for (int f = 0; f < faces; f++) {
|
||||
ObjFace face = finalObj.getFace(f);
|
||||
int verts = face.getNumVertices();
|
||||
for (int f = 0; f < faces; f++) {
|
||||
ObjFace face = obj.getFace(f);
|
||||
int verts = face.getNumVertices();
|
||||
|
||||
for (int i = verts - 1; i >= 0; i--) {
|
||||
writeVertex(finalObj, face, i, vertexConsumer, e, light, overlay, fr, fg, fb);
|
||||
}
|
||||
}
|
||||
});
|
||||
for (int i = verts - 1; i >= 0; i--) {
|
||||
writeVertex(obj, face, i, consumer, entry, light, overlay, r, g, b);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,101 @@
|
||||
package org.saturnclient.impl.features.mixins.misc;
|
||||
|
||||
import net.minecraft.client.render.entity.EntityRenderer;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
//? if <1.21.9 {
|
||||
/*import net.minecraft.client.render.VertexConsumerProvider;
|
||||
import net.minecraft.client.render.entity.state.EntityRenderState;
|
||||
import net.minecraft.client.render.entity.state.LivingEntityRenderState;
|
||||
import net.minecraft.client.util.math.MatrixStack;
|
||||
import net.minecraft.text.Text;
|
||||
|
||||
import org.saturnclient.impl.features.entity.EntityFeatureImpl;
|
||||
import org.saturnclient.impl.features.entity.HealthRenderState;
|
||||
import org.saturnclient.impl.features.mixins.render.LivingEntityRenderStateMixin;
|
||||
import org.saturnclient.mod.mods.NametagsMod;
|
||||
import org.spongepowered.asm.mixin.Shadow;
|
||||
import org.spongepowered.asm.mixin.Unique;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
*///?}
|
||||
|
||||
/**
|
||||
* Intercepts nametag rendering and replaces the displayed text with
|
||||
* the string produced by {@link NametagsMod#getNametagString}.
|
||||
*
|
||||
* Key changes from the original:
|
||||
*
|
||||
* <ul>
|
||||
* <li>The old {@code NametagsFabric.EntityStateImpl} bridge class is
|
||||
* replaced by {@link EntityFeatureImpl.RenderStateEntityState},
|
||||
* which wraps the {@link HealthRenderState} already injected into
|
||||
* the render state by {@link LivingEntityRenderStateMixin}.</li>
|
||||
* <li>The feature import changes from {@code Nametags} to
|
||||
* {@link NametagsMod}; the two static methods
|
||||
* ({@code shouldReplaceName} / {@code getNametagString}) are
|
||||
* unchanged in signature.</li>
|
||||
* <li>The entity's display name is extracted from the render state's
|
||||
* {@code nameVisible} / text fields where available, falling back
|
||||
* to the plain text string passed to this method.</li>
|
||||
* </ul>
|
||||
*
|
||||
* The re-entrancy guard ({@code saturn$rendering}) is kept intact to
|
||||
* prevent infinite recursion when we call {@code renderLabelIfPresent}
|
||||
* with the replacement text.
|
||||
*/
|
||||
@Mixin(EntityRenderer.class)
|
||||
public abstract class NametagsMixin {
|
||||
// TODO: 1.21.9 moved label rendering to the render queue (renderLabelIfPresent no longer takes a
|
||||
// VertexConsumerProvider), so custom nametags only work on older versions. On 1.21.9+ this mixin is
|
||||
// empty but stays registered, so features.mixins.json is the same for every version.
|
||||
//? if <1.21.9 {
|
||||
/*// Guards against the recursive call we make with the replacement text.
|
||||
@Unique
|
||||
private static final ThreadLocal<Boolean> saturn$rendering = ThreadLocal.withInitial(() -> false);
|
||||
|
||||
@Shadow
|
||||
protected abstract <S extends EntityRenderState> void renderLabelIfPresent(
|
||||
S state, Text text,
|
||||
MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light);
|
||||
|
||||
@Inject(method = "renderLabelIfPresent", at = @At("HEAD"), cancellable = true)
|
||||
private <S extends EntityRenderState> void saturn$replaceNametag(
|
||||
S state, Text text,
|
||||
MatrixStack matrices, VertexConsumerProvider vertexConsumers,
|
||||
int light, CallbackInfo ci) {
|
||||
|
||||
// Skip our own recursive call
|
||||
if (saturn$rendering.get())
|
||||
return;
|
||||
|
||||
if (!NametagsMod.shouldReplaceName())
|
||||
return;
|
||||
|
||||
// Only living entities carry health data
|
||||
if (!(state instanceof LivingEntityRenderState living))
|
||||
return;
|
||||
if (!(living instanceof HealthRenderState hrs))
|
||||
return;
|
||||
|
||||
// Build the platform-neutral EntityState from the render-state snapshot
|
||||
// (health/type were written by LivingEntityRendererMixin at extract time).
|
||||
String customName = text != null ? text.getString() : null;
|
||||
EntityFeatureImpl.RenderStateEntityState entityState = new EntityFeatureImpl.RenderStateEntityState(
|
||||
customName, hrs);
|
||||
|
||||
// Ask the feature for the replacement string
|
||||
String replacement = NametagsMod.getNametagString(entityState);
|
||||
if (replacement == null)
|
||||
return; // feature decided not to replace this entity
|
||||
|
||||
ci.cancel();
|
||||
saturn$rendering.set(true);
|
||||
try {
|
||||
renderLabelIfPresent(state, Text.literal(replacement), matrices, vertexConsumers, light);
|
||||
} finally {
|
||||
saturn$rendering.set(false);
|
||||
}
|
||||
}
|
||||
*///?}
|
||||
}
|
||||
+1
@@ -4,6 +4,7 @@ import net.minecraft.client.render.entity.state.LivingEntityRenderState;
|
||||
|
||||
import org.saturnclient.common.feature.EntityFeature;
|
||||
import org.saturnclient.impl.features.entity.HealthRenderState;
|
||||
import org.saturnclient.impl.features.mixins.misc.NametagsMixin;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Unique;
|
||||
|
||||
|
||||
@@ -141,7 +141,10 @@ public abstract class MinecraftClientMixin implements MinecraftClientRef {
|
||||
if (entry == null)
|
||||
return null;
|
||||
|
||||
//? if >=1.21.9 {
|
||||
return entry.getProfile().name();
|
||||
//?} else
|
||||
//return entry.getProfile().getName();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -157,6 +160,9 @@ public abstract class MinecraftClientMixin implements MinecraftClientRef {
|
||||
if (entry == null)
|
||||
return null;
|
||||
|
||||
//? if >=1.21.9 {
|
||||
return entry.getProfile().id();
|
||||
//?} else
|
||||
//return entry.getProfile().getId();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,6 +3,8 @@ package org.saturnclient.impl.mixins;
|
||||
import org.saturnclient.common.ref.asset.IdentifierRef;
|
||||
import org.saturnclient.common.ref.asset.SpriteRef;
|
||||
import org.saturnclient.common.ref.game.EffectRef;
|
||||
//? if <1.21.9
|
||||
//import org.saturnclient.saturnclient.SaturnClient;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Shadow;
|
||||
|
||||
@@ -29,7 +31,11 @@ public abstract class StatusEffectMixin implements EffectRef {
|
||||
|
||||
@Override
|
||||
public SpriteRef getIcon() {
|
||||
// 1.21.9 changed the GUI atlas, so newer versions draw the effect's texture (getIconId) instead.
|
||||
//? if >=1.21.9 {
|
||||
return null;
|
||||
//?} else
|
||||
//return (SpriteRef) SaturnClient.client.getGuiAtlasManager().getSprite((InGameHud.getEffectTexture(getEffectType())));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -7,6 +7,7 @@ import org.spongepowered.asm.mixin.Mixin;
|
||||
|
||||
import net.minecraft.text.Style;
|
||||
import net.minecraft.text.Text;
|
||||
//? if >=1.21.9
|
||||
import net.minecraft.text.StyleSpriteSource.Font;
|
||||
import net.minecraft.util.Identifier;
|
||||
|
||||
@@ -15,7 +16,10 @@ public interface TextMixin extends TextRef {
|
||||
|
||||
@Override
|
||||
public default TextRef withFont(IdentifierRef font) {
|
||||
//? if >=1.21.9 {
|
||||
return (TextRef) (Text) (((Text) this).copy().setStyle(Style.EMPTY.withFont(new Font((Identifier) (Object) font))));
|
||||
//?} else
|
||||
//return (TextRef) (((Text) this).copy().setStyle(Style.EMPTY.withFont((Identifier) (Object) font)));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -8,7 +8,10 @@ import org.saturnclient.ui.ElementContext;
|
||||
import org.saturnclient.ui.RenderScope;
|
||||
import org.saturnclient.ui.components.SkinPreview.EntityDrawer;
|
||||
|
||||
//? if >=1.21.9 {
|
||||
import net.minecraft.client.render.entity.EntityRenderManager;
|
||||
//?} else
|
||||
//import net.minecraft.client.render.entity.EntityRenderDispatcher;
|
||||
import net.minecraft.client.render.entity.EntityRenderer;
|
||||
import net.minecraft.client.render.entity.state.EntityRenderState;
|
||||
import net.minecraft.entity.LivingEntity;
|
||||
@@ -59,7 +62,10 @@ public class EntityDrawerImpl implements EntityDrawer {
|
||||
public static void drawEntity(RenderScope renderScope, int x1, int y1, int x2, int y2, float scale,
|
||||
Vector3f translation, Quaternionf rotation, @Nullable Quaternionf overrideCameraAngle,
|
||||
LivingEntity entity) {
|
||||
//? if >=1.21.9 {
|
||||
EntityRenderManager entityRenderDispatcher = SaturnClient.client.getEntityRenderDispatcher();
|
||||
//?} else
|
||||
//EntityRenderDispatcher entityRenderDispatcher = SaturnClient.client.getEntityRenderDispatcher();
|
||||
EntityRenderer<? super LivingEntity, ?> entityRenderer = entityRenderDispatcher.getRenderer(entity);
|
||||
EntityRenderState entityRenderState = entityRenderer.getAndUpdateRenderState(entity, 1.0F);
|
||||
//? if <1.21.11
|
||||
|
||||
@@ -8,11 +8,13 @@ import org.saturnclient.ui.SaturnScreen;
|
||||
import org.saturnclient.ui.SaturnScreen.ScreenProvider;
|
||||
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
//? if >=1.21.9
|
||||
import net.minecraft.client.gui.Click;
|
||||
import net.minecraft.client.gui.CubeMapRenderer;
|
||||
import net.minecraft.client.gui.DrawContext;
|
||||
import net.minecraft.client.gui.RotatingCubeMapRenderer;
|
||||
import net.minecraft.client.gui.screen.Screen;
|
||||
//? if >=1.21.9
|
||||
import net.minecraft.client.input.KeyInput;
|
||||
import net.minecraft.client.texture.ResourceTexture;
|
||||
import net.minecraft.client.texture.TextureManager;
|
||||
@@ -72,6 +74,8 @@ public class SaturnScreenFabric extends Screen implements ScreenProvider {
|
||||
screen.render(renderScope, mouseX, mouseY, delta, elapsed);
|
||||
}
|
||||
|
||||
// 1.21.9 moved mouse and key events to Click and KeyInput.
|
||||
//? if >=1.21.9 {
|
||||
@Override
|
||||
public boolean mouseClicked(Click click, boolean doubled) {
|
||||
if (screen.mouseClicked(click.x(), click.y(), click.button())) {
|
||||
@@ -83,6 +87,7 @@ public class SaturnScreenFabric extends Screen implements ScreenProvider {
|
||||
|
||||
@Override
|
||||
public boolean mouseDragged(Click click, double offsetX, double offsetY) {
|
||||
// TODO: 1.21.8 passes the drag deltas; check whether offsetX/offsetY are the same on 1.21.9+.
|
||||
if (screen.mouseDragged(click.x(), click.y(), click.button(), 0.0, 0.0)) {
|
||||
return true;
|
||||
}
|
||||
@@ -98,6 +103,31 @@ public class SaturnScreenFabric extends Screen implements ScreenProvider {
|
||||
|
||||
return super.mouseReleased(click);
|
||||
}
|
||||
//?} else {
|
||||
/*@Override
|
||||
public boolean mouseClicked(double mouseX, double mouseY, int button) {
|
||||
if (screen.mouseClicked(mouseX, mouseY, button)) {
|
||||
return true;
|
||||
}
|
||||
return super.mouseClicked(mouseX, mouseY, button);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean mouseDragged(double mouseX, double mouseY, int button, double deltaX, double deltaY) {
|
||||
if (screen.mouseDragged(mouseX, mouseY, button, deltaX, deltaY)) {
|
||||
return true;
|
||||
}
|
||||
return super.mouseDragged(mouseX, mouseY, button, deltaX, deltaY);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean mouseReleased(double mouseX, double mouseY, int button) {
|
||||
if (screen.mouseReleased(mouseX, mouseY, button)) {
|
||||
return true;
|
||||
}
|
||||
return super.mouseReleased(mouseX, mouseY, button);
|
||||
}
|
||||
*///?}
|
||||
|
||||
@Override
|
||||
public boolean mouseScrolled(double mouseX, double mouseY, double horizontalAmount, double verticalAmount) {
|
||||
@@ -107,6 +137,7 @@ public class SaturnScreenFabric extends Screen implements ScreenProvider {
|
||||
return super.mouseScrolled(mouseX, mouseY, horizontalAmount, verticalAmount);
|
||||
}
|
||||
|
||||
//? if >=1.21.9 {
|
||||
@Override
|
||||
public boolean keyPressed(KeyInput input) {
|
||||
if (screen.keyPressed(input.getKeycode(), input.scancode(), input.modifiers())) {
|
||||
@@ -115,6 +146,15 @@ public class SaturnScreenFabric extends Screen implements ScreenProvider {
|
||||
|
||||
return super.keyPressed(input);
|
||||
}
|
||||
//?} else {
|
||||
/*@Override
|
||||
public boolean keyPressed(int keyCode, int scanCode, int modifiers) {
|
||||
if (screen.keyPressed(keyCode, scanCode, modifiers)) {
|
||||
return true;
|
||||
}
|
||||
return super.keyPressed(keyCode, scanCode, modifiers);
|
||||
}
|
||||
*///?}
|
||||
|
||||
// TODO: resize isn't hooked on 1.21.11 yet.
|
||||
//? if <1.21.11 {
|
||||
|
||||
@@ -4,6 +4,7 @@ import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents;
|
||||
import net.fabricmc.fabric.api.client.keybinding.v1.KeyBindingHelper;
|
||||
import net.minecraft.client.option.KeyBinding;
|
||||
import net.minecraft.client.util.InputUtil;
|
||||
//? if >=1.21.9
|
||||
import net.minecraft.util.Identifier;
|
||||
|
||||
import org.saturnclient.config.Config;
|
||||
@@ -21,17 +22,28 @@ import org.lwjgl.glfw.GLFW;
|
||||
* Manages keybindings and their associated actions.
|
||||
*/
|
||||
public class KeyInputHandler {
|
||||
//? if >=1.21.9 {
|
||||
private static final Identifier KEY_CATEGORY = Identifier.of("saturnclient", "key.category.saturnclient");
|
||||
//?} else
|
||||
//private static final String KEY_CATEGORY = "key.category.saturnclient";
|
||||
private static final String MAIN_MENU_KEY_ID = "key.saturnclient.main_menu";
|
||||
private static final int DEFAULT_MENU_KEY = GLFW.GLFW_KEY_RIGHT_SHIFT;
|
||||
private static KeyBinding mainMenuKeyBinding;
|
||||
|
||||
public static void register() {
|
||||
//? if >=1.21.9 {
|
||||
mainMenuKeyBinding = KeyBindingHelper.registerKeyBinding(
|
||||
new KeyBinding(
|
||||
MAIN_MENU_KEY_ID,
|
||||
DEFAULT_MENU_KEY,
|
||||
KeyBinding.Category.create(KEY_CATEGORY)));
|
||||
//?} else {
|
||||
/*mainMenuKeyBinding = KeyBindingHelper.registerKeyBinding(new KeyBinding(
|
||||
MAIN_MENU_KEY_ID,
|
||||
InputUtil.Type.KEYSYM,
|
||||
DEFAULT_MENU_KEY,
|
||||
KEY_CATEGORY));
|
||||
*///?}
|
||||
|
||||
// Register the event handler for the main menu key
|
||||
ClientTickEvents.END_CLIENT_TICK.register(client -> {
|
||||
@@ -40,7 +52,10 @@ public class KeyInputHandler {
|
||||
}
|
||||
|
||||
if (Config.openEmoteWheel.wasKeyPressed() && client.currentScreen == null
|
||||
//? if >=1.21.9 {
|
||||
&& !InputUtil.isKeyPressed(client.getWindow(), GLFW.GLFW_KEY_F3)) {
|
||||
//?} else
|
||||
//&& !InputUtil.isKeyPressed(client.getWindow().getHandle(), GLFW.GLFW_KEY_F3)) {
|
||||
Providers.saturn.getClient().setScreen(new EmoteWheel());
|
||||
}
|
||||
|
||||
|
||||
@@ -1,12 +1,15 @@
|
||||
package org.saturnclient.saturnclient.mixin;
|
||||
|
||||
//? if >=1.21.9 {
|
||||
import net.minecraft.client.network.ClientPlayerLikeEntity;
|
||||
import net.minecraft.entity.PlayerLikeEntity;
|
||||
//?} else
|
||||
//import net.minecraft.client.network.AbstractClientPlayerEntity;
|
||||
import net.minecraft.client.render.entity.EntityRendererFactory;
|
||||
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.PlayerLikeEntity;
|
||||
import net.minecraft.entity.player.PlayerEntity;
|
||||
import net.minecraft.text.MutableText;
|
||||
import net.minecraft.text.Text;
|
||||
@@ -37,8 +40,13 @@ public abstract class PlayerEntityRendererMixin
|
||||
}
|
||||
|
||||
@Inject(method = "updateRenderState", at = @At("TAIL"))
|
||||
//? if >=1.21.9 {
|
||||
public <A extends PlayerLikeEntity & ClientPlayerLikeEntity> void updateRenderState(
|
||||
A entity, PlayerEntityRenderState state,
|
||||
//?} else {
|
||||
/*public void updateRenderState(
|
||||
AbstractClientPlayerEntity entity, PlayerEntityRenderState state,
|
||||
*///?}
|
||||
float f, CallbackInfo ci) {
|
||||
if (entity == null) {
|
||||
return;
|
||||
|
||||
@@ -126,8 +126,9 @@ public abstract class SplashOverlayMixin {
|
||||
private void renderProgressBar(RenderScope scope, DrawContext context, int screenWidth, int screenHeight,
|
||||
int alpha) {
|
||||
int progressY = ((screenHeight - 5) / 2) + 25;
|
||||
// context.drawBorder((screenWidth - 120) / 2, progressY, 120, 5,
|
||||
// Theme.withAlpha(alpha, 0xFFFFFFFF));
|
||||
// TODO: the loading bar's border isn't drawn on 1.21.9+ yet.
|
||||
//? if <1.21.9
|
||||
//context.drawBorder((screenWidth - 120) / 2, progressY, 120, 5, Theme.withAlpha(alpha, 0xFFFFFFFF));
|
||||
|
||||
int progressWidth = Math.min((int) (progress * 120), 120);
|
||||
int progressX = (screenWidth - 120) / 2;
|
||||
|
||||
@@ -27,8 +27,13 @@ public abstract class TabListMixin {
|
||||
private void saturn$addSaturnIcon(CallbackInfoReturnable<Text> cir) {
|
||||
PlayerListEntry entry = (PlayerListEntry) (Object) this;
|
||||
GameProfile profile = entry.getProfile();
|
||||
//? if >=1.21.9 {
|
||||
String name = profile.name();
|
||||
UUID uuid = profile.id();
|
||||
//?} else {
|
||||
/*String name = profile.getName();
|
||||
UUID uuid = profile.getId();
|
||||
*///?}
|
||||
|
||||
if (SaturnPlayer.get(name, uuid) == null) {
|
||||
return;
|
||||
|
||||
Reference in New Issue
Block a user