Skip to content

Commit 0cf5751

Browse files
committed
Merge branch 'master' into refactor/buildscript
2 parents 8657ce9 + e554776 commit 0cf5751

File tree

77 files changed

+4474
-128
lines changed

Some content is hidden

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

77 files changed

+4474
-128
lines changed
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package com.lambda.mixin;
2+
3+
import com.lambda.command.CommandManager;
4+
import com.mojang.brigadier.CommandDispatcher;
5+
import net.minecraft.client.gui.screen.ChatInputSuggestor;
6+
import net.minecraft.client.gui.widget.TextFieldWidget;
7+
import net.minecraft.client.network.ClientPlayNetworkHandler;
8+
import net.minecraft.command.CommandSource;
9+
import org.spongepowered.asm.mixin.Final;
10+
import org.spongepowered.asm.mixin.Mixin;
11+
import org.spongepowered.asm.mixin.Shadow;
12+
import org.spongepowered.asm.mixin.injection.At;
13+
import org.spongepowered.asm.mixin.injection.ModifyVariable;
14+
import org.spongepowered.asm.mixin.injection.Redirect;
15+
16+
@Mixin(ChatInputSuggestor.class)
17+
public class ChatInputSuggestorMixin {
18+
19+
@Shadow
20+
@Final
21+
TextFieldWidget textField;
22+
23+
@ModifyVariable(method = "refresh", at = @At(value = "STORE"), index = 3)
24+
private boolean refreshModify(boolean showCompletions) {
25+
return CommandManager.INSTANCE.isCommand(textField.getText());
26+
}
27+
28+
@Redirect(method = "refresh", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/ClientPlayNetworkHandler;getCommandDispatcher()Lcom/mojang/brigadier/CommandDispatcher;"))
29+
private CommandDispatcher<CommandSource> refreshRedirect(ClientPlayNetworkHandler instance) {
30+
return CommandManager.INSTANCE.currentDispatcher(textField.getText());
31+
}
32+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package com.lambda.mixin;
2+
3+
import com.lambda.command.CommandManager;
4+
import net.minecraft.client.gui.screen.ChatScreen;
5+
import org.spongepowered.asm.mixin.Mixin;
6+
import org.spongepowered.asm.mixin.injection.At;
7+
import org.spongepowered.asm.mixin.injection.Inject;
8+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
9+
10+
@Mixin(ChatScreen.class)
11+
public abstract class ChatScreenMixin {
12+
13+
@Inject(method = "sendMessage", at = @At("HEAD"), cancellable = true)
14+
void sendMessageInject(String chatText, boolean addToHistory, CallbackInfoReturnable<Boolean> cir) {
15+
if (!CommandManager.INSTANCE.isLambdaCommand(chatText)) return;
16+
CommandManager.INSTANCE.executeCommand(chatText);
17+
18+
cir.setReturnValue(true);
19+
}
20+
}

common/src/main/java/com/lambda/mixin/ClientConnectionMixin.java

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,9 @@ public class ClientConnectionMixin {
2121

2222
@Inject(method = "send(Lnet/minecraft/network/packet/Packet;)V", at = @At("HEAD"), cancellable = true)
2323
private void sendingPacket(Packet<?> packet, final CallbackInfo callbackInfo) {
24-
PacketEvent.Send.Pre event = new PacketEvent.Send.Pre(packet);
25-
EventFlow.post(event);
26-
if (event.isCanceled()) callbackInfo.cancel();
24+
if (EventFlow.post(new PacketEvent.Send.Pre(packet)).isCanceled()) {
25+
callbackInfo.cancel();
26+
}
2727
}
2828

2929
@Inject(method = "send(Lnet/minecraft/network/packet/Packet;)V", at = @At("RETURN"))
@@ -38,10 +38,9 @@ private void receivingPacket(
3838
CallbackInfo callbackInfo
3939
) {
4040
if (side != NetworkSide.CLIENTBOUND) return;
41-
42-
PacketEvent.Receive.Pre event = new PacketEvent.Receive.Pre(packet);
43-
EventFlow.post(event);
44-
if (event.isCanceled()) callbackInfo.cancel();
41+
if (EventFlow.post(new PacketEvent.Receive.Pre(packet)).isCanceled()) {
42+
callbackInfo.cancel();
43+
}
4544
}
4645

4746
@Inject(method = "channelRead0(Lio/netty/channel/ChannelHandlerContext;Lnet/minecraft/network/packet/Packet;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/ClientConnection;handlePacket(Lnet/minecraft/network/packet/Packet;Lnet/minecraft/network/listener/PacketListener;)V", shift = At.Shift.AFTER))

common/src/main/java/com/lambda/mixin/MinecraftClientMixin.java

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,18 @@
11
package com.lambda.mixin;
22

3+
import com.lambda.Lambda;
34
import com.lambda.event.EventFlow;
45
import com.lambda.event.events.ClientEvent;
56
import com.lambda.event.events.TickEvent;
7+
import com.lambda.module.modules.player.Interact;
68
import net.minecraft.client.MinecraftClient;
9+
import net.minecraft.client.network.ClientPlayerInteractionManager;
710
import org.spongepowered.asm.mixin.Mixin;
811
import org.spongepowered.asm.mixin.injection.At;
912
import org.spongepowered.asm.mixin.injection.Inject;
13+
import org.spongepowered.asm.mixin.injection.Redirect;
1014
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
15+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
1116

1217
@Mixin(MinecraftClient.class)
1318
public class MinecraftClientMixin {
@@ -23,14 +28,29 @@ void onTickPost(CallbackInfo ci) {
2328

2429
@Inject(at = @At(value = "INVOKE", target = "Lorg/slf4j/Logger;info(Ljava/lang/String;)V", shift = At.Shift.AFTER, remap = false), method = "stop")
2530
private void onShutdown(CallbackInfo ci) {
26-
EventFlow.post(ClientEvent.Shutdown.INSTANCE);
31+
EventFlow.post(new ClientEvent.Shutdown());
2732
}
2833

2934
/**
3035
* Inject after the thread field is set so `ThreadExecutor#getThread` is available
3136
*/
3237
@Inject(at = @At(value = "FIELD", target = "Lnet/minecraft/client/MinecraftClient;thread:Ljava/lang/Thread;", shift = At.Shift.AFTER, ordinal = 0), method = "run")
3338
private void onStartup(CallbackInfo ci) {
34-
EventFlow.post(ClientEvent.Startup.INSTANCE);
39+
EventFlow.post(new ClientEvent.Startup());
40+
}
41+
42+
@Redirect(method = "doItemUse", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/ClientPlayerInteractionManager;isBreakingBlock()Z"))
43+
boolean injectMultiActon(ClientPlayerInteractionManager instance) {
44+
if (instance == null) return true;
45+
46+
if (Interact.INSTANCE.isEnabled() && Interact.getMultiAction()) return false;
47+
return instance.isBreakingBlock();
48+
}
49+
50+
@Inject(method = "doItemUse", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/ClientPlayerEntity;isRiding()Z"))
51+
void injectFastPlace(CallbackInfo ci) {
52+
if (!Interact.INSTANCE.isEnabled()) return;
53+
54+
Lambda.INSTANCE.getMc().itemUseCooldown = Interact.getPlaceDelay();
3555
}
3656
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package com.lambda.mixin;
2+
3+
import com.lambda.module.modules.movement.Sprint;
4+
import net.minecraft.client.option.KeyBinding;
5+
import org.spongepowered.asm.mixin.Mixin;
6+
import org.spongepowered.asm.mixin.injection.At;
7+
import org.spongepowered.asm.mixin.injection.Inject;
8+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
9+
10+
import java.util.Objects;
11+
12+
@Mixin(KeyBinding.class)
13+
public class MixinKeyBinding {
14+
@Inject(method = "isPressed", at = @At("HEAD"), cancellable = true)
15+
void autoSprint(CallbackInfoReturnable<Boolean> cir) {
16+
KeyBinding instance = (KeyBinding) (Object) this;
17+
if (!Objects.equals(instance.getTranslationKey(), "key.sprint")) return;
18+
19+
if (Sprint.INSTANCE.isEnabled()) cir.setReturnValue(true);
20+
}
21+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package com.lambda.mixin;
2+
3+
import com.lambda.event.EventFlow;
4+
import com.lambda.event.events.MovementEvent;
5+
import net.minecraft.entity.player.PlayerEntity;
6+
import org.spongepowered.asm.mixin.Mixin;
7+
import org.spongepowered.asm.mixin.injection.At;
8+
import org.spongepowered.asm.mixin.injection.Inject;
9+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
10+
11+
@Mixin(PlayerEntity.class)
12+
public class PlayerEntityMixin {
13+
@Inject(method = "clipAtLedge", at = @At(value = "HEAD"), cancellable = true)
14+
private void injectSafeWalk(CallbackInfoReturnable<Boolean> cir) {
15+
if (EventFlow.post(new MovementEvent.ClipAtLedge()).isCanceled()) {
16+
cir.setReturnValue(true);
17+
}
18+
}
19+
}

common/src/main/kotlin/com/lambda/Lambda.kt

Lines changed: 11 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -4,62 +4,32 @@ import com.google.gson.Gson
44
import com.google.gson.GsonBuilder
55
import com.lambda.config.serializer.BlockPosSerializer
66
import com.lambda.config.serializer.BlockSerializer
7-
import com.lambda.module.ModuleRegistry
8-
import com.lambda.module.modules.BoringModule
7+
import com.lambda.config.serializer.ColorSerializer
8+
import dev.architectury.platform.Platform
99
import net.minecraft.block.Block
1010
import net.minecraft.client.MinecraftClient
1111
import net.minecraft.util.math.BlockPos
12+
import org.apache.logging.log4j.Level
1213
import org.apache.logging.log4j.LogManager
13-
import org.apache.logging.log4j.Logger
14+
import org.apache.logging.log4j.core.Logger
15+
import java.awt.Color
16+
1417

1518
object Lambda {
1619
const val MOD_NAME = "Lambda"
1720
const val MOD_ID = "lambda"
18-
private const val SYMBOL = "λ"
21+
const val SYMBOL = "λ"
1922
val VERSION: String = LoaderInfo.getVersion()
20-
21-
val LOG: Logger = LogManager.getLogger(SYMBOL)
23+
val LOG = (LogManager.getLogger(SYMBOL) as Logger)
24+
.apply { level = if (Platform.isDevelopmentEnvironment()) Level.DEBUG else Level.INFO }
2225
val mc: MinecraftClient by lazy { MinecraftClient.getInstance() }
2326

2427
val gson: Gson = GsonBuilder()
2528
.setPrettyPrinting()
29+
.registerTypeAdapter(Color::class.java, ColorSerializer)
2630
.registerTypeAdapter(BlockPos::class.java, BlockPosSerializer)
2731
.registerTypeAdapter(Block::class.java, BlockSerializer)
2832
.create()
2933

30-
init {
31-
// ToDo: Why do i have to call these?
32-
BoringModule
33-
ModuleRegistry
34-
35-
// listener<KeyPressEvent> {
36-
// if (it.key != GLFW.GLFW_KEY_Z) {
37-
// return@listener
38-
// }
39-
//
40-
// taskContext {
41-
// HelloWorldTask()
42-
// .withDelay(500L)
43-
// .withTimeout(200L)
44-
// .withRepeats(10)
45-
// .withMaxAttempts(5)
46-
// .onSuccess {
47-
// LOG.info("Hello, World! Task completed")
48-
// }.onRepeat { repeats ->
49-
// LOG.info("Hello, World! Task $name repeated $repeats times")
50-
// }.onTimeout {
51-
// LOG.warn("Hello, World! Task $name timed out")
52-
// HelloWorldTask().execute()
53-
// }.onRetry {
54-
// LOG.warn("Hello, World! Task $name retrying")
55-
// }.onFailure { error ->
56-
// LOG.error("Hello, World! Task failed", error)
57-
// }.execute()
58-
// }
59-
// }
60-
}
61-
62-
fun initialize() {
63-
LOG.info("Initializing $MOD_NAME $VERSION")
64-
}
34+
fun initialize() = Loader.initialize()
6535
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package com.lambda
2+
3+
interface Loadable {
4+
fun load(): String
5+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package com.lambda
2+
3+
import com.lambda.Lambda.LOG
4+
import com.lambda.command.CommandManager
5+
import com.lambda.module.ModuleRegistry
6+
import kotlin.system.measureTimeMillis
7+
8+
object Loader {
9+
private val loadables = listOf(
10+
ModuleRegistry,
11+
CommandManager
12+
)
13+
14+
fun initialize() {
15+
LOG.info("Initializing ${Lambda.MOD_NAME} ${Lambda.VERSION}")
16+
17+
val initTime = measureTimeMillis {
18+
loadables.forEach { loadable ->
19+
var info: String
20+
val phaseTime = measureTimeMillis {
21+
info = loadable.load()
22+
}
23+
24+
LOG.info("$info in ${phaseTime}ms")
25+
}
26+
}
27+
28+
LOG.info("${Lambda.MOD_NAME} ${Lambda.VERSION} was successfully initialized (${initTime}ms)")
29+
}
30+
}

0 commit comments

Comments
 (0)