Skip to content

Commit a4b960f

Browse files
committed
Merge remote-tracking branch 'refs/remotes/upstream/1.21.11' into 1.21.11
2 parents bb1c63d + 88c08c6 commit a4b960f

File tree

100 files changed

+1312
-2004
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

100 files changed

+1312
-2004
lines changed

gradle.properties

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,6 @@ modAuthors=Constructor (Avanatiker), Blade, beanbag44, Emy
2626

2727
# General
2828
minecraftVersion=1.21.11
29-
minecraftVersionMin=1.21.11
30-
minecraftVersionMax=1.21.11
3129
lwjglVersion=3.3.3
3230
mixinExtrasVersion=0.5.0
3331
kotlinVersion=2.3.0
@@ -55,5 +53,3 @@ kotlin.code.style=official
5553
# Gradle https://gradle.org/
5654
org.gradle.jvmargs=-Xmx4096M
5755
org.gradle.parallel=true
58-
59-
org.jetbrains.dokka.experimental.gradle.pluginMode.nowarn=true

src/main/java/com/lambda/mixin/baritone/MixinBaritonePlayerContext.java renamed to src/main/java/com/lambda/mixin/baritone/BaritonePlayerContextMixin.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
3131

3232
@Mixin(value = BaritonePlayerContext.class, remap = false) // fix compileJava warning
33-
public class MixinBaritonePlayerContext {
33+
public class BaritonePlayerContextMixin {
3434
@Shadow
3535
@Final
3636
private Baritone baritone;

src/main/java/com/lambda/mixin/baritone/MixinLookBehavior.java renamed to src/main/java/com/lambda/mixin/baritone/LookBehaviourMixin.java

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -24,33 +24,34 @@
2424
import com.lambda.interaction.BaritoneManager;
2525
import com.lambda.interaction.managers.rotating.RotationManager;
2626
import org.spongepowered.asm.mixin.Mixin;
27+
import org.spongepowered.asm.mixin.Unique;
2728
import org.spongepowered.asm.mixin.injection.At;
2829
import org.spongepowered.asm.mixin.injection.Inject;
2930
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
3031

31-
@Mixin(LookBehavior.class)
32-
public class MixinLookBehavior {
32+
@Mixin(value = LookBehavior.class, remap = false)
33+
public class LookBehaviourMixin {
34+
@Unique
35+
LookBehavior instance = ((LookBehavior) (Object) this);
36+
3337
// Redirect baritone's rotations into our rotation engine
34-
@Inject(method = "updateTarget", at = @At("HEAD"), remap = false, cancellable = true)
38+
@Inject(method = "updateTarget", at = @At("HEAD"), cancellable = true)
3539
void onTargetUpdate(Rotation rotation, boolean blockInteract, CallbackInfo ci) {
36-
LookBehavior instance = ((LookBehavior) (Object) this);
3740
if (instance.baritone != BaritoneManager.getPrimary()) return;
3841

3942
RotationManager.handleBaritoneRotation(rotation.getYaw(), rotation.getPitch());
4043
ci.cancel();
4144
}
4245

43-
@Inject(method = "onPlayerUpdate", at = @At("HEAD"), remap = false, cancellable = true)
46+
@Inject(method = "onPlayerUpdate", at = @At("HEAD"), cancellable = true)
4447
void onUpdate(PlayerUpdateEvent event, CallbackInfo ci) {
45-
LookBehavior instance = ((LookBehavior) (Object) this);
4648
if (instance.baritone != BaritoneManager.getPrimary()) return;
4749

4850
ci.cancel();
4951
}
5052

51-
@Inject(method = "onPlayerRotationMove", at = @At("HEAD"), remap = false, cancellable = true)
53+
@Inject(method = "onPlayerRotationMove", at = @At("HEAD"), cancellable = true)
5254
void onMovementUpdate(RotationMoveEvent event, CallbackInfo ci) {
53-
LookBehavior instance = ((LookBehavior) (Object) this);
5455
if (instance.baritone != BaritoneManager.getPrimary()) return;
5556

5657
ci.cancel();

src/main/java/com/lambda/mixin/entity/ClientPlayerEntityMixin.java

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,12 @@
2424
import com.lambda.event.events.TickEvent;
2525
import com.lambda.interaction.PlayerPacketHandler;
2626
import com.lambda.interaction.managers.rotating.RotationManager;
27+
import com.lambda.module.modules.movement.ElytraFly;
28+
import com.lambda.module.modules.movement.NoJumpCooldown;
2729
import com.lambda.module.modules.player.PortalGui;
2830
import com.lambda.module.modules.render.ViewModel;
2931
import com.llamalad7.mixinextras.injector.ModifyExpressionValue;
32+
import com.llamalad7.mixinextras.injector.v2.WrapWithCondition;
3033
import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod;
3134
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
3235
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
@@ -75,15 +78,22 @@ void processMovement(Input input, Operation<Void> original) {
7578
EventFlow.post(new MovementEvent.InputUpdate(input));
7679
}
7780

78-
/**
79-
* Overwrites the movement packet update function to use our code
80-
*/
81-
@Inject(method = "sendMovementPackets", at = @At(value = "HEAD"), cancellable = true)
82-
void sendLambdaMovement(CallbackInfo ci) {
83-
ci.cancel();
81+
@Inject(method = "tickMovement", at = @At("RETURN"))
82+
private void injectTickMovement(CallbackInfo ci) {
83+
if (NoJumpCooldown.INSTANCE.isEnabled() || (ElytraFly.INSTANCE.isEnabled() && ElytraFly.getMode() == ElytraFly.FlyMode.Bounce)) jumpingCooldown = 0;
84+
}
85+
86+
@Inject(method = "sendMovementPackets", at = @At("HEAD"))
87+
private void injectSendMovementPackets(CallbackInfo ci) {
8488
PlayerPacketHandler.sendPlayerPackets();
8589
autoJumpEnabled = Lambda.getMc().options.getAutoJump().getValue();
8690
}
91+
92+
@WrapWithCondition(method = "sendMovementPackets", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/ClientPlayerEntity;sendSprintingPacket()V"))
93+
private boolean wrapSendSprintingPackets(ClientPlayerEntity instance) { return false; }
94+
95+
@ModifyExpressionValue(method = "sendMovementPackets", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/ClientPlayerEntity;isCamera()Z"))
96+
private boolean wrapIsCamera(boolean original) { return false; }
8797

8898
@ModifyExpressionValue(method = "tickMovement", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/ClientPlayerEntity;isSprinting()Z"))
8999
boolean isSprinting(boolean original) {

src/main/java/com/lambda/mixin/entity/EntityMixin.java

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -22,15 +22,16 @@
2222
import com.lambda.event.events.EntityEvent;
2323
import com.lambda.event.events.PlayerEvent;
2424
import com.lambda.interaction.managers.rotating.RotationManager;
25-
import com.lambda.interaction.managers.rotating.RotationMode;
26-
import com.lambda.module.modules.player.RotationLock;
25+
import com.lambda.module.modules.movement.ElytraFly;
2726
import com.lambda.module.modules.render.NoRender;
2827
import com.lambda.util.math.Vec2d;
2928
import com.llamalad7.mixinextras.injector.ModifyExpressionValue;
3029
import com.llamalad7.mixinextras.injector.v2.WrapWithCondition;
3130
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
3231
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
32+
import net.minecraft.client.network.ClientPlayerEntity;
3333
import net.minecraft.entity.Entity;
34+
import net.minecraft.entity.EntityPose;
3435
import net.minecraft.entity.MovementType;
3536
import net.minecraft.entity.data.TrackedData;
3637
import net.minecraft.util.math.Vec3d;
@@ -39,6 +40,7 @@
3940
import org.spongepowered.asm.mixin.injection.At;
4041
import org.spongepowered.asm.mixin.injection.Inject;
4142
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
43+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
4244

4345
@Mixin(Entity.class)
4446
public abstract class EntityMixin {
@@ -149,17 +151,25 @@ private boolean modifyGetFlagGlowing(boolean original) {
149151

150152
@WrapWithCondition(method = "changeLookDirection", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/Entity;setYaw(F)V"))
151153
private boolean wrapSetYaw(Entity instance, float yaw) {
152-
return (instance != Lambda.getMc().player ||
153-
RotationLock.INSTANCE.isDisabled() ||
154-
RotationLock.INSTANCE.getRotationConfig().getRotationMode() != RotationMode.Lock ||
155-
RotationLock.getYawMode() == RotationLock.Mode.None);
154+
return RotationManager.getLockYaw() == null;
156155
}
157156

158157
@WrapWithCondition(method = "changeLookDirection", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/Entity;setPitch(F)V"))
159158
private boolean wrapSetPitch(Entity instance, float yaw) {
160-
return (instance != Lambda.getMc().player ||
161-
RotationLock.INSTANCE.isDisabled() ||
162-
RotationLock.INSTANCE.getRotationConfig().getRotationMode() != RotationMode.Lock ||
163-
RotationLock.getPitchMode() == RotationLock.Mode.None);
159+
return RotationManager.getLockPitch() == null;
160+
}
161+
162+
@Inject(method = "isSprinting()Z", at = @At("HEAD"), cancellable = true)
163+
private void injectIsSprinting(CallbackInfoReturnable<Boolean> cir) {
164+
var player = Lambda.getMc().player;
165+
if ((Object) this != Lambda.getMc().player) return;
166+
if (ElytraFly.INSTANCE.isEnabled() && ElytraFly.getMode() == ElytraFly.FlyMode.Bounce && player.isGliding()) cir.setReturnValue(true);
167+
}
168+
169+
@Inject(method = "getPose", at = @At("HEAD"), cancellable = true)
170+
private void injectGetPose(CallbackInfoReturnable<EntityPose> cir) {
171+
var entity = (Entity) (Object) this;
172+
if (!(entity instanceof ClientPlayerEntity player)) return;
173+
if (ElytraFly.INSTANCE.isEnabled() && ElytraFly.getMode() == ElytraFly.FlyMode.Bounce && player.isGliding()) cir.setReturnValue(EntityPose.GLIDING);
164174
}
165175
}

src/main/java/com/lambda/mixin/entity/FireworkRocketEntityMixin.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
public class FireworkRocketEntityMixin {
3131
@WrapOperation(method = "tick", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/LivingEntity;setVelocity(Lnet/minecraft/util/math/Vec3d;)V"))
3232
private void wrapSetVelocity(LivingEntity shooter, Vec3d vec3d, Operation<Void> original) {
33-
if (ElytraFly.getDoBoost()) {
33+
if (ElytraFly.INSTANCE.isEnabled()) {
3434
ElytraFly.boostRocket();
3535
} else original.call(shooter, vec3d);
3636
}

src/main/java/com/lambda/mixin/entity/LivingEntityMixin.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import com.lambda.event.EventFlow;
2222
import com.lambda.event.events.MovementEvent;
2323
import com.lambda.interaction.managers.rotating.RotationManager;
24+
import com.lambda.module.modules.movement.ElytraFly;
2425
import com.lambda.module.modules.movement.Velocity;
2526
import com.lambda.module.modules.render.ViewModel;
2627
import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod;
@@ -34,11 +35,10 @@
3435
import org.spongepowered.asm.mixin.Shadow;
3536
import org.spongepowered.asm.mixin.Unique;
3637
import org.spongepowered.asm.mixin.injection.At;
37-
import org.spongepowered.asm.mixin.injection.Constant;
3838
import org.spongepowered.asm.mixin.injection.Inject;
39-
import org.spongepowered.asm.mixin.injection.ModifyConstant;
4039
import org.spongepowered.asm.mixin.injection.Slice;
4140
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
41+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
4242

4343
@Mixin(LivingEntity.class)
4444
public abstract class LivingEntityMixin extends EntityMixin {
@@ -184,4 +184,10 @@ private void wrapPushAwayFrom(Entity entity, Operation<Void> original) {
184184
Velocity.getPushed()) return;
185185
original.call(entity);
186186
}
187+
188+
@Inject(method = "isGliding", at = @At("HEAD"), cancellable = true)
189+
private void injectIsGliding(CallbackInfoReturnable<Boolean> cir) {
190+
if (lambda$instance != Lambda.getMc().player) return;
191+
cir.setReturnValue(ElytraFly.isGliding());
192+
}
187193
}

src/main/java/com/lambda/mixin/render/ChatHudMixin.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717

1818
package com.lambda.mixin.render;
1919

20-
import com.lambda.module.modules.client.LambdaMoji;
2120
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
2221
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
2322
import net.minecraft.client.font.TextRenderer;

src/main/java/com/lambda/mixin/render/ChatInputSuggestorMixin.java

Lines changed: 0 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -17,42 +17,23 @@
1717

1818
package com.lambda.mixin.render;
1919

20-
import com.google.common.base.Strings;
2120
import com.lambda.command.CommandManager;
22-
import com.lambda.graphics.renderer.gui.font.core.LambdaAtlas;
23-
import com.lambda.module.modules.client.LambdaMoji;
24-
import com.lambda.module.modules.client.StyleEditor;
2521
import com.mojang.brigadier.CommandDispatcher;
26-
import com.mojang.brigadier.suggestion.Suggestions;
27-
import com.mojang.brigadier.suggestion.SuggestionsBuilder;
2822
import net.minecraft.client.gui.screen.ChatInputSuggestor;
2923
import net.minecraft.client.gui.widget.TextFieldWidget;
3024
import net.minecraft.client.network.ClientPlayNetworkHandler;
3125
import net.minecraft.command.CommandSource;
32-
import org.jetbrains.annotations.Nullable;
3326
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
3427
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
3528
import org.spongepowered.asm.mixin.Final;
3629
import org.spongepowered.asm.mixin.Mixin;
3730
import org.spongepowered.asm.mixin.Shadow;
38-
import org.spongepowered.asm.mixin.Unique;
3931
import org.spongepowered.asm.mixin.injection.At;
40-
import org.spongepowered.asm.mixin.injection.Inject;
4132
import org.spongepowered.asm.mixin.injection.ModifyVariable;
42-
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
43-
44-
import java.util.Map;
45-
import java.util.concurrent.CompletableFuture;
46-
import java.util.regex.Matcher;
47-
import java.util.regex.Pattern;
48-
import java.util.stream.Stream;
4933

5034
@Mixin(ChatInputSuggestor.class)
5135
public abstract class ChatInputSuggestorMixin {
52-
@Unique private static final Pattern COLON_PATTERN = Pattern.compile("(:[a-zA-Z0-9_]+)");
53-
@Unique private static final Pattern EMOJI_PATTERN = Pattern.compile("(:)([a-zA-Z0-9_]+)(:)");
5436
@Shadow @Final TextFieldWidget textField;
55-
@Shadow private @Nullable CompletableFuture<Suggestions> pendingSuggestions;
5637

5738
@Shadow
5839
public abstract void show(boolean narrateFirstSuggestion);
@@ -67,64 +48,4 @@ private boolean refreshModify(boolean showCompletions) {
6748
private CommandDispatcher<CommandSource> wrapRefresh(ClientPlayNetworkHandler instance, Operation<CommandDispatcher<CommandSource>> original) {
6849
return (CommandDispatcher<CommandSource>) CommandManager.INSTANCE.currentDispatcher(textField.getText());
6950
}
70-
71-
@Inject(method = "refresh", at = @At("TAIL"))
72-
private void refreshEmojiSuggestion(CallbackInfo ci) {
73-
if (!LambdaMoji.INSTANCE.isEnabled() ||
74-
!LambdaMoji.INSTANCE.getSuggestions()) return;
75-
76-
String typing = textField.getText();
77-
78-
// Don't suggest emojis in commands
79-
if (CommandManager.INSTANCE.isCommand(typing) ||
80-
CommandManager.INSTANCE.isLambdaCommand(typing)) return;
81-
82-
int cursor = textField.getCursor();
83-
String textToCursor = typing.substring(0, cursor);
84-
if (textToCursor.isEmpty()) return;
85-
86-
// Most right index at the left of the regex expression
87-
int start = neoLambda$getLastColon(textToCursor);
88-
if (start == -1) return;
89-
90-
Matcher emojiMatcher = EMOJI_PATTERN.matcher(textToCursor);
91-
Map<String, ?> emojiKeys = LambdaAtlas.INSTANCE.getKeys(StyleEditor.INSTANCE.getEmojiFont());
92-
while (emojiMatcher.find()) {
93-
int openingColon = emojiMatcher.start(1);
94-
String key = emojiMatcher.group(2);
95-
int closingColon = emojiMatcher.end(3);
96-
97-
if (emojiKeys.containsKey(key) && start >= openingColon && start < closingColon) {
98-
// If the colon is part of a previous valid emoji, return
99-
return;
100-
}
101-
}
102-
103-
String emojiString = textToCursor.substring(start + 1);
104-
105-
Stream<String> results = emojiKeys.keySet().stream()
106-
.filter(s -> s.startsWith(emojiString))
107-
.map(s -> s + ":");
108-
109-
pendingSuggestions = CommandSource.suggestMatching(results, new SuggestionsBuilder(textToCursor, start + 1));
110-
pendingSuggestions.thenRun(() -> {
111-
if (!pendingSuggestions.isDone()) return;
112-
113-
show(false);
114-
});
115-
}
116-
117-
@Unique
118-
private int neoLambda$getLastColon(String input) {
119-
if (Strings.isNullOrEmpty(input)) return -1;
120-
121-
int i = -1;
122-
Matcher matcher = COLON_PATTERN.matcher(input);
123-
124-
while (matcher.find()) {
125-
i = matcher.start();
126-
}
127-
128-
return i;
129-
}
13051
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
/*
2+
* Copyright 2025 Lambda
3+
*
4+
* This program is free software: you can redistribute it and/or modify
5+
* it under the terms of the GNU General Public License as published by
6+
* the Free Software Foundation, either version 3 of the License, or
7+
* (at your option) any later version.
8+
*
9+
* This program is distributed in the hope that it will be useful,
10+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
11+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12+
* GNU General Public License for more details.
13+
*
14+
* You should have received a copy of the GNU General Public License
15+
* along with this program. If not, see <http://www.gnu.org/licenses/>.
16+
*/
17+
18+
package com.lambda.mixin.render;
19+
20+
import com.lambda.module.modules.render.NoRender;
21+
import com.mojang.blaze3d.buffers.GpuBuffer;
22+
import com.mojang.blaze3d.buffers.GpuBufferSlice;
23+
import net.minecraft.client.render.fog.FogRenderer;
24+
import org.spongepowered.asm.mixin.Final;
25+
import org.spongepowered.asm.mixin.Mixin;
26+
import org.spongepowered.asm.mixin.Shadow;
27+
import org.spongepowered.asm.mixin.injection.At;
28+
import org.spongepowered.asm.mixin.injection.Inject;
29+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
30+
31+
import static net.minecraft.client.render.fog.FogRenderer.FOG_UBO_SIZE;
32+
33+
@Mixin(FogRenderer.class)
34+
public class FogRendererMixin {
35+
@Final
36+
@Shadow
37+
private GpuBuffer emptyBuffer;
38+
39+
@Inject(method = "getFogBuffer", at = @At("HEAD"), cancellable = true)
40+
private void modify(FogRenderer.FogType fogType, CallbackInfoReturnable<GpuBufferSlice> cir) {
41+
if (fogType == FogRenderer.FogType.WORLD && NoRender.INSTANCE.isEnabled() && NoRender.getNoTerrainFog())
42+
cir.setReturnValue(emptyBuffer.slice(0L, FOG_UBO_SIZE));
43+
}
44+
}

0 commit comments

Comments
 (0)