Skip to content

Commit 0a45e44

Browse files
committed
Synchronous indirect task tree traversal
1 parent 6b27bcc commit 0a45e44

Some content is hidden

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

43 files changed

+635
-667
lines changed
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package com.lambda.mixin.world;
2+
3+
import com.lambda.event.EventFlow;
4+
import com.lambda.event.events.WorldEvent;
5+
import net.minecraft.client.world.ClientWorld;
6+
import net.minecraft.entity.Entity;
7+
import org.spongepowered.asm.mixin.Mixin;
8+
import org.spongepowered.asm.mixin.injection.At;
9+
import org.spongepowered.asm.mixin.injection.Inject;
10+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
11+
12+
@Mixin(ClientWorld.class)
13+
public class ClientWorldMixin {
14+
@Inject(method = "addEntity", at = @At("HEAD"), cancellable = true)
15+
private void addEntity(Entity entity, CallbackInfo ci) {
16+
if (EventFlow.post(new WorldEvent.EntitySpawn(entity)).isCanceled()) ci.cancel();
17+
}
18+
}

common/src/main/kotlin/com/lambda/core/Loader.kt

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ import com.lambda.interaction.PlayerPacketManager
1010
import com.lambda.interaction.RotationManager
1111
import com.lambda.module.ModuleRegistry
1212
import com.lambda.sound.SoundRegistry
13-
import com.lambda.task.TaskRegistry
1413
import com.lambda.util.Communication.ascii
1514
import kotlin.system.measureTimeMillis
1615

@@ -42,7 +41,5 @@ object Loader {
4241
}
4342

4443
LOG.info("${Lambda.MOD_NAME} ${Lambda.VERSION} was successfully initialized (${initTime}ms)")
45-
46-
TaskRegistry
4744
}
4845
}

common/src/main/kotlin/com/lambda/event/events/RotationEvent.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import com.lambda.interaction.rotation.RotationContext
1010
import com.lambda.interaction.visibilty.VisibilityChecker.findRotation
1111
import com.lambda.module.modules.client.TaskFlow
1212
import com.lambda.threading.runSafe
13+
import com.lambda.util.BlockUtils.blockState
1314
import com.lambda.util.world.raycast.RayCastUtils.blockResult
1415
import com.lambda.util.world.raycast.RayCastUtils.entityResult
1516
import net.minecraft.entity.Entity
@@ -55,7 +56,7 @@ abstract class RotationEvent : Event {
5556
interactionConfig: InteractionConfig = TaskFlow.interactionSettings,
5657
sides: Set<Direction> = emptySet()
5758
) = runSafe {
58-
val state = world.getBlockState(blockPos)
59+
val state = blockPos.blockState(world)
5960
val voxelShape = state.getOutlineShape(world, blockPos)
6061
val boundingBoxes = voxelShape.boundingBoxes.map { it.offset(blockPos) }
6162
findRotation(rotationConfig, interactionConfig, boundingBoxes, sides) {
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package com.lambda.event.events
2+
3+
import com.lambda.event.Event
4+
import com.lambda.event.callback.Cancellable
5+
import com.lambda.event.callback.ICancellable
6+
import net.minecraft.entity.Entity
7+
8+
abstract class WorldEvent : Event {
9+
class EntitySpawn(
10+
val entity: Entity
11+
) : WorldEvent(), ICancellable by Cancellable()
12+
}

common/src/main/kotlin/com/lambda/event/listener/SafeListener.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ class SafeListener(
126126
noinline function: SafeContext.(T) -> Unit,
127127
): SafeListener {
128128
val listener = SafeListener(priority, this, alwaysListen) { event ->
129-
function(event as T)
129+
function(event as T) // ToDo: run function always on game thread
130130
}
131131

132132
syncListeners.subscribe<T>(listener)

common/src/main/kotlin/com/lambda/interaction/construction/Blueprint.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package com.lambda.interaction.construction
33
import com.lambda.context.SafeContext
44
import com.lambda.interaction.construction.verify.TargetState
55
import com.lambda.util.BlockUtils.blockPos
6+
import com.lambda.util.BlockUtils.blockState
67
import com.lambda.util.primitives.extension.Structure
78
import net.minecraft.structure.StructureTemplate
89
import net.minecraft.util.math.BlockBox
@@ -12,10 +13,10 @@ import net.minecraft.util.math.Box
1213
abstract class Blueprint {
1314
abstract val structure: Structure
1415

15-
fun isDone(safeContext: SafeContext) =
16+
open fun isDone(safeContext: SafeContext) =
1617
structure.all { (pos, targetState) ->
1718
with(safeContext) {
18-
targetState.matches(world.getBlockState(pos), pos, world)
19+
targetState.matches(pos.blockState(world), pos, world)
1920
}
2021
}
2122

common/src/main/kotlin/com/lambda/interaction/construction/context/BreakContext.kt

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,7 @@ data class BreakContext(
2424

2525
override fun compareTo(other: ComparableContext): Int {
2626
return when (other) {
27-
is BreakContext -> compareByDescending<BreakContext> {
28-
it.exposedSides
29-
}.thenBy {
27+
is BreakContext -> compareBy<BreakContext> {
3028
it.distance
3129
}.compare(this, other)
3230
else -> 1

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

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
package com.lambda.interaction.construction.result
22

33
import com.lambda.interaction.construction.context.BreakContext
4-
import com.lambda.task.buildChain
5-
import com.lambda.task.tasks.BreakBlock.Companion.breakBlock
4+
import com.lambda.task.tasks.BreakBlock.Companion.uncheckedBreak
65

76
sealed class BreakResult : BuildResult() {
87

@@ -13,9 +12,7 @@ sealed class BreakResult : BuildResult() {
1312
data class Success(val context: BreakContext) : Resolvable, BreakResult() {
1413
override val rank = Rank.BREAK_SUCCESS
1514

16-
override val resolve = buildChain {
17-
breakBlock(context.hitPos)
18-
}
15+
override val resolve = uncheckedBreak(context.hitPos)
1916

2017
override fun compareTo(other: ComparableResult<Rank>): Int {
2118
return when (other) {
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package com.lambda.interaction.construction.result
22

3-
import com.lambda.task.TaskChain
3+
import com.lambda.task.Task
44

55
interface Resolvable {
6-
val resolve: TaskChain
6+
val resolve: Task<*>
77
}

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.lambda.interaction.construction.verify
22

3+
import com.lambda.util.BlockUtils.blockState
34
import com.lambda.util.item.ItemUtils.block
45
import net.minecraft.block.BlockState
56
import net.minecraft.client.world.ClientWorld
@@ -23,7 +24,7 @@ sealed class TargetState : StateMatcher {
2324
}
2425
data class Support(val direction: Direction) : TargetState() {
2526
override fun matches(state: BlockState, pos: BlockPos, world: ClientWorld) =
26-
world.getBlockState(pos.offset(direction)).isSolidBlock(world, pos.offset(direction))
27+
pos.offset(direction).blockState(world).isSolidBlock(world, pos.offset(direction))
2728

2829
override fun getStack(world: ClientWorld, pos: BlockPos) =
2930
ItemStack(Items.NETHERRACK)

0 commit comments

Comments
 (0)