Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
60 commits
Select commit Hold shift + click to select a range
55a6b8d
Blockstate pattern matching
Avanatiker Mar 27, 2024
8bba416
Item flow management
Avanatiker Mar 27, 2024
d76d2cc
Container ecosystem and new task builder DSL
Avanatiker Mar 31, 2024
e89de22
Baritone helper
Avanatiker Mar 31, 2024
71af663
Merge branch 'master' into feature/taskflow
Avanatiker Apr 2, 2024
f7e0651
Merge branch 'master' into feature/taskflow
Avanatiker Apr 4, 2024
25b3bf0
Merge branch 'master' into feature/taskflow
Avanatiker Apr 11, 2024
15d10bf
Merge branch 'master' into feature/taskflow
Avanatiker Apr 16, 2024
448aaec
Task control with registry, block break tests
Avanatiker Apr 17, 2024
09d037f
Merge remote-tracking branch 'origin/master' into feature/taskflow
Avanatiker Apr 30, 2024
1978c74
Merge branch 'master' into feature/taskflow
Avanatiker May 20, 2024
6b27bcc
Dynamic blueprints and structure building prototype
Avanatiker May 22, 2024
0a45e44
Synchronous indirect task tree traversal
Avanatiker May 26, 2024
253bd83
Consistent task builder
Avanatiker May 26, 2024
d1199cd
Update docs to new architecture
Avanatiker May 26, 2024
69d31f2
Fix task usecases
Avanatiker May 27, 2024
c813e30
Break result optimization
Avanatiker May 30, 2024
d1e0c66
Stack selection container transfer fixes
Avanatiker May 30, 2024
8bf3778
Break optimizations
Avanatiker May 30, 2024
f280938
Placement interaction simulation
Avanatiker May 30, 2024
08859f6
Place fixes
Avanatiker May 30, 2024
9bae188
Added HighwayTools
Avanatiker May 30, 2024
51365d7
Merge branch 'master' into feature/taskflow
Avanatiker May 31, 2024
8c8548c
Merge fixes
Avanatiker May 31, 2024
10fda23
Merge branch 'master' into feature/taskflow
Avanatiker May 31, 2024
054f454
Fix merge conflict
Avanatiker May 31, 2024
0e93ec0
do NOT use mojang gl
emyfops May 31, 2024
9ec4c1d
Revert "do NOT use mojang gl"
emyfops May 31, 2024
518283f
Granular global build settings and tons of fixes
Avanatiker Jun 1, 2024
66675f2
Structure slicing for HWT
Avanatiker Jun 1, 2024
ba1ded8
Build in n long slices
Avanatiker Jun 1, 2024
b3a55da
Stacktraceing and shulker container
Avanatiker Jun 2, 2024
d3b2fa4
Fixed ambiguous container matching
Avanatiker Jun 2, 2024
8a6e8fd
Build simulator and transfer command
Avanatiker Jun 3, 2024
9daee66
Bug fixes
Avanatiker Jun 3, 2024
24fda9c
Better error handling
Avanatiker Jun 3, 2024
e4a5e7b
Merge branch 'master' into feature/taskflow
Avanatiker Jun 3, 2024
623a6ff
Fix rim height setting default
Avanatiker Jun 3, 2024
5269725
Merge branch 'master' into feature/taskflow
Avanatiker Jun 6, 2024
dfacc21
Gaussian rotation speed calculation
Avanatiker Jun 7, 2024
ebb61f8
Fix slots loaded mixin
Avanatiker Jun 7, 2024
ae2c06f
Improved rotation settings. No range but Gaussian distribution
Avanatiker Jun 7, 2024
26c510a
Set correct freecam perspective
Avanatiker Jun 7, 2024
bd00fb4
Nuker floor filling
Avanatiker Jun 7, 2024
b97f0b1
Remove default hotkey for HWT
Avanatiker Jun 7, 2024
97b1cb1
Prevent pathing on results
Avanatiker Jun 7, 2024
a12bcaa
Better build settings
Avanatiker Jun 7, 2024
fe82165
Task control flow improvements
Avanatiker Jun 7, 2024
070c2b7
Material transaction optimizations, task cooldown, drop collection ...
Avanatiker Jun 7, 2024
1ce6971
Merge branch 'master' into feature/taskflow
Avanatiker Jun 9, 2024
a854f40
Fix creative related issues and more clear transfer command
Avanatiker Jun 10, 2024
c3dbc56
Dont override cancelled and correct place break cooldown unit
Avanatiker Jun 10, 2024
0e0880e
Fix cooldown
Avanatiker Jun 10, 2024
857ea42
Merge remote-tracking branch 'origin/master' into feature/taskflow
Avanatiker Jun 10, 2024
9fc5ebe
Pathing strategies and more options
Avanatiker Jun 10, 2024
f42d592
Merge branch 'master' into feature/taskflow
Avanatiker Jun 10, 2024
c50ad7b
Advanced break place settings
Avanatiker Jun 10, 2024
3a577cf
Working drop collection
Avanatiker Jun 10, 2024
d564d26
Corner support blocks
Avanatiker Jun 10, 2024
daf9b13
Bring back block setting
Avanatiker Jun 11, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 7 additions & 1 deletion common/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,12 @@ dependencies {
implementation(kotlin("reflect"))

// Baritone
modImplementation("baritone-api:baritone-api:1.10.2")
// modImplementation("baritone-api:baritone-api:1.10.2")
modImplementation("baritone-api:baritone-unoptimized-fabric:1.10.2")

testImplementation(kotlin("test"))
}

tasks.test {
useJUnitPlatform()
}
29 changes: 29 additions & 0 deletions common/src/main/java/com/lambda/mixin/MinecraftClientMixin.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,27 @@
import com.lambda.Lambda;
import com.lambda.event.EventFlow;
import com.lambda.event.events.ClientEvent;
import com.lambda.event.events.ScreenEvent;
import com.lambda.event.events.ScreenHandlerEvent;
import com.lambda.event.events.TickEvent;
import com.lambda.module.modules.player.Interact;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.gui.screen.ingame.HandledScreen;
import net.minecraft.client.gui.screen.ingame.ScreenHandlerProvider;
import net.minecraft.client.network.ClientPlayerInteractionManager;
import org.jetbrains.annotations.Nullable;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.Redirect;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;

@Mixin(MinecraftClient.class)
public class MinecraftClientMixin {
@Shadow @Nullable public Screen currentScreen;

@Inject(method = "tick", at = @At("HEAD"))
void onTickPre(CallbackInfo ci) {
EventFlow.post(new TickEvent.Pre());
Expand All @@ -38,6 +47,26 @@ private void onStartup(CallbackInfo ci) {
EventFlow.post(new ClientEvent.Startup());
}

@Inject(method = "setScreen", at = @At("HEAD"))
private void onScreenOpen(@Nullable Screen screen, CallbackInfo ci) {
if (screen == null) return;
if (screen instanceof ScreenHandlerProvider<?> handledScreen) {
EventFlow.post(new ScreenHandlerEvent.Open<>(handledScreen.getScreenHandler()));
}

EventFlow.post(new ScreenEvent.Open<>(screen));
}

@Inject(method = "setScreen", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screen/Screen;removed()V", shift = At.Shift.AFTER))
private void onScreenRemove(@Nullable Screen screen, CallbackInfo ci) {
if (currentScreen == null) return;
if (currentScreen instanceof ScreenHandlerProvider<?> handledScreen) {
EventFlow.post(new ScreenHandlerEvent.Close<>(handledScreen.getScreenHandler()));
}

EventFlow.post(new ScreenEvent.Close<>(currentScreen));
}

@Redirect(method = "doItemUse", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/ClientPlayerInteractionManager;isBreakingBlock()Z"))
boolean injectMultiActon(ClientPlayerInteractionManager instance) {
if (instance == null) return true;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@ void syncRotationWithBaritone(CallbackInfoReturnable<Rotation> cir) {
if (baritone != BaritoneUtils.getPrimary()) return;

RotationManager rm = RotationManager.INSTANCE;
cir.setReturnValue(new Rotation((float) rm.getCurrentRotation().getYaw(), (float) rm.getCurrentRotation().getPitch()));
cir.setReturnValue(new Rotation(
(float) rm.getCurrentRotation().getYaw(), (float) rm.getCurrentRotation().getPitch())
);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package com.lambda.mixin.entity;

import com.lambda.event.EventFlow;
import com.lambda.event.events.InteractionEvent;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.network.ClientPlayerEntity;
import net.minecraft.client.network.ClientPlayerInteractionManager;
import net.minecraft.util.ActionResult;
import net.minecraft.util.Hand;
import net.minecraft.util.hit.BlockHitResult;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;

@Mixin(ClientPlayerInteractionManager.class)
public class ClientPlayInteractionManagerMixin {

@Final
@Shadow
private MinecraftClient client;

@Inject(method = "interactBlock", at = @At("HEAD"))
public void interactBlockHead(final ClientPlayerEntity player, final Hand hand, final BlockHitResult hitResult, final CallbackInfoReturnable<ActionResult> cir) {
if (client.world == null) return;
EventFlow.post(new InteractionEvent.Block(client.world, hitResult));
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.lambda.mixin.render;

import com.lambda.task.RootTask;
import com.lambda.util.DebugInfoHud;
import net.minecraft.client.gui.hud.DebugHud;
import org.spongepowered.asm.mixin.Mixin;
Expand All @@ -15,4 +16,9 @@ public class DebugHudMixin {
private void onGetRightText(CallbackInfoReturnable<List<String>> cir) {
DebugInfoHud.addDebugInfo(cir.getReturnValue());
}

@Inject(method = "getLeftText", at = @At(value = "TAIL"))
private void onGetLeftText(CallbackInfoReturnable<List<String>> cir) {
RootTask.INSTANCE.addInfo(cir.getReturnValue());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.lambda.mixin.render;

import com.lambda.event.EventFlow;
import com.lambda.event.events.ScreenEvent;
import com.lambda.event.events.ScreenHandlerEvent;
import net.minecraft.item.ItemStack;
import net.minecraft.screen.ScreenHandler;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;

import java.util.List;

@Mixin(ScreenHandler.class)
public class ScreenHandlerMixin {
@Inject(method = "updateSlotStacks", at = @At("TAIL"))
private void onUpdateSlotStacksHead(int revision, List<ItemStack> stacks, ItemStack cursorStack, CallbackInfo ci) {
EventFlow.post(new ScreenHandlerEvent.Loaded(revision, stacks, cursorStack));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import com.lambda.event.events.WorldEvent;
import net.minecraft.block.BlockState;
import net.minecraft.client.world.ClientWorld;
import net.minecraft.entity.Entity;
import net.minecraft.util.math.BlockPos;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
Expand All @@ -18,4 +19,9 @@ private void handleBlockUpdateInject(BlockPos pos, BlockState state, int flags,
ci.cancel();
}
}
}

@Inject(method = "addEntity", at = @At("HEAD"), cancellable = true)
private void addEntity(Entity entity, CallbackInfo ci) {
if (EventFlow.post(new WorldEvent.EntitySpawn(entity)).isCanceled()) ci.cancel();
}
}
106 changes: 106 additions & 0 deletions common/src/main/kotlin/com/lambda/brigadier/argument/ItemArguments.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
/*
* Copyright 2023 The Quilt Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

/*
* Preserve binary compatibility when moving extensions between files
*/
@file:JvmMultifileClass
@file:JvmName("ArgumentsKt")

package com.lambda.brigadier.argument


import com.lambda.brigadier.*
import com.lambda.brigadier.assumeSourceNotUsed
import net.minecraft.command.CommandRegistryAccess
import net.minecraft.command.argument.ItemPredicateArgumentType
import net.minecraft.command.argument.ItemSlotArgumentType
import net.minecraft.command.argument.ItemStackArgument
import net.minecraft.command.argument.ItemStackArgumentType
import net.minecraft.item.ItemStack
import java.util.function.Predicate

/**
* Reads the [ItemStack] predicate value from the
* argument in the receiver [ArgumentReader].
*
* @see ItemPredicateArgumentType.getItemPredicate
*/
@JvmName("valueItemPredicateArg")
@BrigadierDsl
fun DefaultArgumentReader<ItemPredicateArgumentType>.value(): Predicate<ItemStack> {
return ItemPredicateArgumentType.getItemStackPredicate(context.assumeSourceNotUsed(), name)
}

/**
* Reads the integer value from the
* argument in the receiver [ArgumentReader].
*
* @see ItemSlotArgumentType.getItemSlot
*/
@JvmName("valueItemSlotArg")
@BrigadierDsl
fun DefaultArgumentReader<ItemSlotArgumentType>.value(): Int {
return ItemSlotArgumentType.getItemSlot(context.assumeSourceNotUsed(), name)
}

/**
* Reads the [ItemStackArgument] value from the
* argument in the receiver [ArgumentReader].
*
* @see ItemStackArgumentType.getItemStackArgument
*/
@JvmName("valueItemStackArg")
@BrigadierDsl
fun DefaultArgumentReader<ItemStackArgumentType>.value(): ItemStackArgument {
return ItemStackArgumentType.getItemStackArgument(context, name)
}

/**
* Creates an item predicate argument with [name] as the parameter name.
*
* @param context The command build context
*/
@BrigadierDsl
fun <S> itemPredicate(
name: String,
context: CommandRegistryAccess
): DefaultArgumentConstructor<S, ItemPredicateArgumentType> {
return argument(name, ItemPredicateArgumentType.itemPredicate(context))
}

/**
* Creates an item slot argument with [name] as the parameter name.
*/
@BrigadierDsl
fun <S> itemSlot(
name: String
): DefaultArgumentConstructor<S, ItemSlotArgumentType> {
return argument(name, ItemSlotArgumentType.itemSlot())
}

/**
* Creates an item stack argument with [name] as the parameter name.
*
* @param context The command build context
*/
@BrigadierDsl
fun <S> itemStack(
name: String,
context: CommandRegistryAccess
): DefaultArgumentConstructor<S, ItemStackArgumentType> {
return argument(name, ItemStackArgumentType.itemStack(context))
}
7 changes: 7 additions & 0 deletions common/src/main/kotlin/com/lambda/command/LambdaCommand.kt
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,21 @@ import com.lambda.command.CommandManager.dispatcher
import com.lambda.util.Nameable
import com.lambda.util.primitives.extension.CommandBuilder
import com.mojang.brigadier.builder.LiteralArgumentBuilder
import net.minecraft.command.CommandRegistryAccess
import net.minecraft.command.CommandSource
import net.minecraft.registry.BuiltinRegistries
import net.minecraft.server.command.CommandManager

abstract class LambdaCommand(
final override val name: String,
val aliases: Set<String> = emptySet(),
val usage: String = "",
val description: String = "",
) : Nameable {
val registry: CommandRegistryAccess by lazy {
CommandManager.createRegistryAccess(BuiltinRegistries.createWrapperLookup())
}

// ToDo: Include usage and description in the help command
init {
(listOf(name) + aliases).forEach {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package com.lambda.command.commands

import com.lambda.brigadier.CommandResult.Companion.failure
import com.lambda.brigadier.CommandResult.Companion.success
import com.lambda.brigadier.argument.literal
import com.lambda.brigadier.executeWithResult
Expand All @@ -20,19 +19,17 @@ object ConfigCommand : LambdaCommand(
required(literal("save")) {
executeWithResult {
Configuration.configurations.forEach { config ->
config.trySave()?.let { return@executeWithResult failure(it) }
config.trySave(true)
}

this@ConfigCommand.info("Saved ${Configuration.configurations.size} configuration files.")
return@executeWithResult success()
}
}
required(literal("load")) {
executeWithResult {
Configuration.configurations.forEach { config ->
config.tryLoad()?.let { return@executeWithResult failure(it) }
config.tryLoad()
}

this@ConfigCommand.info("Loaded ${Configuration.configurations.size} configuration files.")
return@executeWithResult success()
}
Expand Down
Loading