Skip to content

Commit f5d2b99

Browse files
committed
Create DebuggableBlock interface and rename DebuggableCastEnv
1 parent 3066307 commit f5d2b99

File tree

5 files changed

+57
-5
lines changed

5 files changed

+57
-5
lines changed

Common/src/main/kotlin/gay/object/hexdebug/casting/eval/DebuggerCastEnv.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ package gay.`object`.hexdebug.casting.eval
22

33
import at.petrak.hexcasting.api.casting.eval.env.PackagedItemCastEnv
44
import at.petrak.hexcasting.api.casting.eval.sideeffects.OperatorSideEffect
5-
import gay.`object`.hexdebug.core.api.debugging.IDebuggableCastEnv
5+
import gay.`object`.hexdebug.core.api.debugging.DebuggableCastEnv
66
import gay.`object`.hexdebug.utils.findMediaHolderInHand
77
import gay.`object`.hexdebug.utils.otherHand
88
import net.minecraft.network.chat.Component
@@ -12,7 +12,8 @@ import net.minecraft.world.InteractionHand
1212
class DebuggerCastEnv(
1313
caster: ServerPlayer,
1414
castingHand: InteractionHand,
15-
) : PackagedItemCastEnv(caster, castingHand), IDebuggableCastEnv {
15+
) : PackagedItemCastEnv(caster, castingHand),
16+
DebuggableCastEnv {
1617
private val item = caster.getItemInHand(castingHand).item
1718

1819
override fun printMessage(message: Component) {

Common/src/main/kotlin/gay/object/hexdebug/casting/eval/EvaluatorCastEnv.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,15 @@ package gay.`object`.hexdebug.casting.eval
22

33
import at.petrak.hexcasting.api.casting.eval.env.StaffCastEnv
44
import at.petrak.hexcasting.api.casting.eval.sideeffects.OperatorSideEffect
5-
import gay.`object`.hexdebug.core.api.debugging.IDebuggableCastEnv
5+
import gay.`object`.hexdebug.core.api.debugging.DebuggableCastEnv
66
import net.minecraft.network.chat.Component
77
import net.minecraft.server.level.ServerPlayer
88
import net.minecraft.world.InteractionHand
99

1010
class EvaluatorCastEnv(
1111
caster: ServerPlayer,
1212
castingHand: InteractionHand,
13-
) : StaffCastEnv(caster, castingHand), IDebuggableCastEnv {
13+
) : StaffCastEnv(caster, castingHand), DebuggableCastEnv {
1414
override fun printMessage(message: Component) {
1515
super.printMessage(message)
1616
debugEnv?.printDebugMessage(message)

Common/src/main/kotlin/gay/object/hexdebug/items/DebuggerItem.kt

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import at.petrak.hexcasting.xplat.IXplatAbstractions
88
import gay.`object`.hexdebug.HexDebug
99
import gay.`object`.hexdebug.adapter.DebugAdapterManager
1010
import gay.`object`.hexdebug.casting.eval.DebuggerCastEnv
11+
import gay.`object`.hexdebug.core.api.debugging.DebuggableBlock
1112
import gay.`object`.hexdebug.core.api.debugging.SimplePlayerBasedDebugEnv
1213
import gay.`object`.hexdebug.core.api.exceptions.DebugException
1314
import gay.`object`.hexdebug.items.base.*
@@ -20,11 +21,13 @@ import net.minecraft.server.level.ServerLevel
2021
import net.minecraft.server.level.ServerPlayer
2122
import net.minecraft.stats.Stats
2223
import net.minecraft.world.InteractionHand
24+
import net.minecraft.world.InteractionResult
2325
import net.minecraft.world.InteractionResultHolder
2426
import net.minecraft.world.entity.LivingEntity
2527
import net.minecraft.world.entity.player.Player
2628
import net.minecraft.world.item.ItemStack
2729
import net.minecraft.world.item.Rarity
30+
import net.minecraft.world.item.context.UseOnContext
2831
import net.minecraft.world.item.enchantment.EnchantmentHelper
2932
import net.minecraft.world.item.enchantment.Enchantments
3033
import net.minecraft.world.level.Level
@@ -60,6 +63,35 @@ class DebuggerItem(
6063
EnchantmentHelper.setEnchantments(enchantments, stack)
6164
}
6265

66+
override fun useOn(context: UseOnContext): InteractionResult {
67+
val block = context.level.getBlockState(context.clickedPos).block as? DebuggableBlock
68+
?: return InteractionResult.PASS
69+
70+
val threadId = getThreadId(context.itemInHand)
71+
72+
if (context.level.isClientSide) {
73+
val isDebugging = debugStates[threadId] == DebugState.DEBUGGING
74+
return if (isDebugging) InteractionResult.PASS else InteractionResult.SUCCESS
75+
}
76+
77+
val player = context.player as ServerPlayer
78+
79+
if (DebugAdapterManager[player]?.isDebugging(threadId) != false) {
80+
return InteractionResult.PASS
81+
}
82+
83+
return block.startDebugging(context, threadId).also {
84+
if (it.shouldAwardStats()) {
85+
val stat = Stats.ITEM_USED[this]
86+
player.awardStat(stat)
87+
}
88+
89+
if (it.consumesAction()) {
90+
player.cooldowns.addCooldown(this, this.cooldown())
91+
}
92+
}
93+
}
94+
6395
override fun use(world: Level, player: Player, usedHand: InteractionHand): InteractionResultHolder<ItemStack> {
6496
val stack = player.getItemInHand(usedHand)
6597

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package gay.object.hexdebug.core.api.debugging;
2+
3+
import net.minecraft.world.InteractionResult;
4+
import net.minecraft.world.level.block.Block;
5+
import net.minecraft.world.item.context.UseOnContext;
6+
import org.jetbrains.annotations.NotNull;
7+
8+
/**
9+
* An interface to start debugging {@link Block} subclasses when right-clicked by a debugger.
10+
*/
11+
@FunctionalInterface
12+
public interface DebuggableBlock {
13+
/**
14+
* Called server-side by {@code DebuggerItem#useOn} to start a debug session for this block on
15+
* the given thread.
16+
*/
17+
@NotNull
18+
InteractionResult startDebugging(@NotNull UseOnContext context, int threadId);
19+
}

Core/src/main/java/gay/object/hexdebug/core/api/debugging/IDebuggableCastEnv.java renamed to Core/src/main/java/gay/object/hexdebug/core/api/debugging/DebuggableCastEnv.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
/**
88
* An optional helper interface for implementing casting environments with debug support.
99
*/
10-
public interface IDebuggableCastEnv {
10+
public interface DebuggableCastEnv {
1111
@Nullable
1212
default DebugEnvironment getDebugEnv() {
1313
return HexDebugCoreAPI.INSTANCE.getDebugEnv((CastingEnvironment) this);

0 commit comments

Comments
 (0)