Skip to content

Commit ecd23e4

Browse files
committed
Refactor inventory and container structure
Reorganize container classes into a dedicated `containers` package for improved modularity and clarity. Introduced new inventory transaction utilities, including `PickFromInventoryTransaction`, `DropItemInHandTransaction`, and `SwapHandsTransaction`, to streamline and enhance inventory management. Updated configurations, task flows, and dependencies to align with this new structure.
1 parent 7d8e384 commit ecd23e4

39 files changed

+650
-166
lines changed
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
/*
2+
* Copyright 2024 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.network;
19+
20+
import com.lambda.event.EventFlow;
21+
import com.lambda.event.events.InventoryEvent;
22+
import net.minecraft.client.network.ClientPlayNetworkHandler;
23+
import net.minecraft.network.packet.s2c.play.ScreenHandlerSlotUpdateS2CPacket;
24+
import net.minecraft.network.packet.s2c.play.UpdateSelectedSlotS2CPacket;
25+
import org.spongepowered.asm.mixin.Mixin;
26+
import org.spongepowered.asm.mixin.injection.At;
27+
import org.spongepowered.asm.mixin.injection.Inject;
28+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
29+
30+
@Mixin(ClientPlayNetworkHandler.class)
31+
public class ClientPlayNetworkHandlerMixin {
32+
@Inject(method = "onUpdateSelectedSlot", at = @At(value = "TAIL"))
33+
private void onUpdateSelectedSlot(UpdateSelectedSlotS2CPacket packet, CallbackInfo ci) {
34+
EventFlow.post(new InventoryEvent.SelectedSlotUpdate(packet.getSlot()));
35+
}
36+
37+
@Inject(method = "onScreenHandlerSlotUpdate", at = @At(value = "TAIL"))
38+
private void onScreenHandlerSlotUpdate(ScreenHandlerSlotUpdateS2CPacket packet, CallbackInfo ci) {
39+
EventFlow.post(new InventoryEvent.SlotUpdate(packet.getSyncId(), packet.getRevision(), packet.getSlot(), packet.getStack()));
40+
}
41+
}

common/src/main/kotlin/com/lambda/command/commands/TransferCommand.kt

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,9 @@ import com.lambda.brigadier.argument.*
2323
import com.lambda.brigadier.executeWithResult
2424
import com.lambda.brigadier.required
2525
import com.lambda.command.LambdaCommand
26-
import com.lambda.interaction.material.ContainerManager
27-
import com.lambda.interaction.material.ContainerManager.containerWithMaterial
28-
import com.lambda.interaction.material.ContainerManager.containerWithSpace
26+
import com.lambda.interaction.material.container.ContainerManager
27+
import com.lambda.interaction.material.container.ContainerManager.containerWithMaterial
28+
import com.lambda.interaction.material.container.ContainerManager.containerWithSpace
2929
import com.lambda.interaction.material.StackSelection.Companion.selectStack
3030
import com.lambda.interaction.material.transfer.TransferResult
3131
import com.lambda.task.TaskFlow.run
@@ -37,7 +37,7 @@ object TransferCommand : LambdaCommand(
3737
usage = "transfer <move | cancel | undo> <item> <amount> <to>",
3838
description = "Transfer items from anywhere to anywhere",
3939
) {
40-
private var lastTransfer: TransferResult.Transfer? = null
40+
private var lastContainerTransfer: TransferResult.ContainerTransfer? = null
4141

4242
override fun CommandBuilder.create() {
4343
required(itemStack("stack", registry)) { stack ->
@@ -76,9 +76,9 @@ object TransferCommand : LambdaCommand(
7676
} ?: return@executeWithResult failure("To container not found")
7777

7878
when (val transaction = fromContainer.transfer(selection, toContainer)) {
79-
is TransferResult.Transfer -> {
79+
is TransferResult.ContainerTransfer -> {
8080
info("${transaction.name} started.")
81-
lastTransfer = transaction
81+
lastContainerTransfer = transaction
8282
transaction.finally {
8383
info("${transaction.name} completed.")
8484
}.run()
@@ -103,11 +103,11 @@ object TransferCommand : LambdaCommand(
103103

104104
required(literal("cancel")) {
105105
executeWithResult {
106-
lastTransfer?.cancel() ?: run {
106+
lastContainerTransfer?.cancel() ?: run {
107107
return@executeWithResult failure("No transfer to cancel")
108108
}
109-
info("$lastTransfer cancelled")
110-
lastTransfer = null
109+
info("$lastContainerTransfer cancelled")
110+
lastContainerTransfer = null
111111
success()
112112
}
113113
}

common/src/main/kotlin/com/lambda/config/groups/InventoryConfig.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,13 @@
1717

1818
package com.lambda.config.groups
1919

20-
import com.lambda.interaction.material.MaterialContainer
20+
import com.lambda.interaction.material.container.MaterialContainer
2121
import com.lambda.interaction.material.StackSelection
2222

2323
interface InventoryConfig {
24+
val actionTimout: Int
25+
val swapWithDisposables: Boolean
26+
2427
val providerPriority: Priority
2528
val storePriority: Priority
2629

common/src/main/kotlin/com/lambda/config/groups/InventorySettings.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@ class InventorySettings(
2323
c: Configurable,
2424
vis: () -> Boolean = { true },
2525
) : InventoryConfig {
26+
override val actionTimout by c.setting("Action Timeout", 10, 0..100, 1, "How long to wait for after each inventory action", " ticks")
27+
override val swapWithDisposables by c.setting("Swap With Disposables", true, "Swap items with disposable ones", vis)
28+
2629
override val providerPriority by c.setting("Provider Priority", InventoryConfig.Priority.WITH_MIN_ITEMS, "What container to prefer when retrieving the item from", vis)
2730
override val storePriority by c.setting("Store Priority", InventoryConfig.Priority.WITH_MIN_ITEMS, "What container to prefer when storing the item to", vis)
2831
}

common/src/main/kotlin/com/lambda/interaction/material/transfer/TransferStep.kt renamed to common/src/main/kotlin/com/lambda/event/events/InventoryEvent.kt

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,12 @@
1515
* along with this program. If not, see <http://www.gnu.org/licenses/>.
1616
*/
1717

18-
package com.lambda.interaction.material.transfer
18+
package com.lambda.event.events
1919

20-
import com.lambda.task.Task
20+
import com.lambda.event.Event
21+
import net.minecraft.item.ItemStack
2122

22-
abstract class TransferStep<T> : Task<T>() {
23-
24-
25-
companion object {
26-
27-
}
28-
}
23+
sealed class InventoryEvent {
24+
class SelectedSlotUpdate(val slot: Int) : Event
25+
class SlotUpdate(val syncId: Int, val revision: Int, val slot: Int, val stack: ItemStack) : Event
26+
}

common/src/main/kotlin/com/lambda/interaction/construction/result/BreakResult.kt

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,12 @@ import baritone.api.pathing.goals.GoalBlock
2121
import baritone.api.pathing.goals.GoalInverted
2222
import com.lambda.context.SafeContext
2323
import com.lambda.interaction.construction.context.BreakContext
24-
import com.lambda.interaction.material.ContainerManager.findBestAvailableTool
25-
import com.lambda.interaction.material.ContainerManager.transfer
26-
import com.lambda.interaction.material.MaterialContainer
24+
import com.lambda.interaction.material.container.ContainerManager.findBestAvailableTool
25+
import com.lambda.interaction.material.container.ContainerManager.transfer
26+
import com.lambda.interaction.material.container.MaterialContainer
2727
import com.lambda.interaction.material.StackSelection.Companion.select
2828
import com.lambda.interaction.material.StackSelection.Companion.selectStack
29-
import com.lambda.interaction.material.container.MainHandContainer
30-
import com.lambda.task.Task
29+
import com.lambda.interaction.material.container.containers.MainHandContainer
3130
import com.lambda.task.tasks.BreakBlock
3231
import net.minecraft.block.BlockState
3332
import net.minecraft.item.Item

common/src/main/kotlin/com/lambda/interaction/construction/result/BuildResult.kt

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,10 @@ import baritone.api.pathing.goals.GoalBlock
2121
import baritone.api.pathing.goals.GoalNear
2222
import com.lambda.context.SafeContext
2323
import com.lambda.interaction.construction.context.BuildContext
24-
import com.lambda.interaction.material.ContainerManager.transfer
25-
import com.lambda.interaction.material.MaterialContainer
24+
import com.lambda.interaction.material.container.ContainerManager.transfer
25+
import com.lambda.interaction.material.container.MaterialContainer
2626
import com.lambda.interaction.material.StackSelection.Companion.select
27-
import com.lambda.interaction.material.container.MainHandContainer
28-
import com.lambda.task.Task
27+
import com.lambda.interaction.material.container.containers.MainHandContainer
2928
import com.lambda.util.BlockUtils.blockState
3029
import com.lambda.util.Nameable
3130
import net.minecraft.block.BlockState

common/src/main/kotlin/com/lambda/interaction/construction/simulation/BuildSimulator.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ import com.lambda.interaction.construction.result.BreakResult
2727
import com.lambda.interaction.construction.result.BuildResult
2828
import com.lambda.interaction.construction.result.PlaceResult
2929
import com.lambda.interaction.construction.verify.TargetState
30-
import com.lambda.interaction.material.ContainerManager.findBestAvailableTool
30+
import com.lambda.interaction.material.container.ContainerManager.findBestAvailableTool
3131
import com.lambda.interaction.rotation.Rotation.Companion.rotation
3232
import com.lambda.interaction.rotation.Rotation.Companion.rotationTo
3333
import com.lambda.interaction.rotation.RotationContext

common/src/main/kotlin/com/lambda/interaction/construction/verify/TargetState.kt

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

1818
package com.lambda.interaction.construction.verify
1919

20-
import com.lambda.interaction.material.ContainerManager.findDisposable
20+
import com.lambda.interaction.material.container.ContainerManager.findDisposable
2121
import com.lambda.module.modules.client.TaskFlowModule
2222
import com.lambda.util.BlockUtils.blockState
2323
import com.lambda.util.StringUtils.capitalize

common/src/main/kotlin/com/lambda/interaction/material/ContainerManager.kt renamed to common/src/main/kotlin/com/lambda/interaction/material/container/ContainerManager.kt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,16 @@
1515
* along with this program. If not, see <http://www.gnu.org/licenses/>.
1616
*/
1717

18-
package com.lambda.interaction.material
18+
package com.lambda.interaction.material.container
1919

2020
import com.lambda.core.Loadable
2121
import com.lambda.event.events.PlayerEvent
2222
import com.lambda.event.events.ScreenHandlerEvent
2323
import com.lambda.event.listener.SafeListener.Companion.listen
24+
import com.lambda.interaction.material.StackSelection
2425
import com.lambda.interaction.material.StackSelection.Companion.select
25-
import com.lambda.interaction.material.container.*
26+
import com.lambda.interaction.material.container.containers.ChestContainer
27+
import com.lambda.interaction.material.container.containers.EnderChestContainer
2628
import com.lambda.module.modules.client.TaskFlowModule
2729
import com.lambda.util.BlockUtils.blockEntity
2830
import com.lambda.util.BlockUtils.item

0 commit comments

Comments
 (0)