-
Notifications
You must be signed in to change notification settings - Fork 4
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
25a8f8e
commit b1a75cb
Showing
24 changed files
with
974 additions
and
63 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
30 changes: 0 additions & 30 deletions
30
Common/src/main/java/ca/objectobject/hexdebug/HexDebug.java
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
16 changes: 16 additions & 0 deletions
16
Common/src/main/java/ca/objectobject/hexdebug/IHexDebugAbstractions.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
package ca.objectobject.hexdebug; | ||
|
||
import net.minecraft.server.MinecraftServer; | ||
|
||
import java.nio.file.Path; | ||
import java.util.function.Consumer; | ||
|
||
public interface IHexDebugAbstractions { | ||
Path getConfigDirectory(); | ||
|
||
void initPlatformSpecific(); | ||
|
||
void onServerStarted(Consumer<MinecraftServer> callback); | ||
|
||
void onServerStopping(Consumer<MinecraftServer> callback); | ||
} |
22 changes: 22 additions & 0 deletions
22
Common/src/main/java/ca/objectobject/hexdebug/registry/HexDebugItemRegistry.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
package ca.objectobject.hexdebug.registry; | ||
|
||
import ca.objectobject.hexdebug.HexDebug; | ||
import ca.objectobject.hexdebug.common.items.ItemDebugger; | ||
import dev.architectury.registry.registries.DeferredRegister; | ||
import dev.architectury.registry.registries.RegistrySupplier; | ||
import net.minecraft.core.registries.Registries; | ||
import net.minecraft.world.item.Item; | ||
|
||
public class HexDebugItemRegistry { | ||
// Register items through this | ||
public static final DeferredRegister<Item> ITEMS = DeferredRegister.create(HexDebug.MODID, Registries.ITEM); | ||
|
||
public static void init() { | ||
ITEMS.register(); | ||
} | ||
|
||
// During the loading phase, refrain from accessing suppliers' items (e.g. EXAMPLE_ITEM.get()), they will not be available | ||
public static final RegistrySupplier<Item> DUMMY_ITEM = ITEMS.register("debugger", () -> new ItemDebugger(new ItemDebugger.Properties())); | ||
|
||
|
||
} |
32 changes: 32 additions & 0 deletions
32
Common/src/main/kotlin/ca/objectobject/hexdebug/HexDebug.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
package ca.objectobject.hexdebug | ||
|
||
import ca.objectobject.hexdebug.registry.HexDebugItemRegistry | ||
import ca.objectobject.hexdebug.server.HexDebugServerManager | ||
import net.minecraft.resources.ResourceLocation | ||
import org.apache.logging.log4j.LogManager | ||
import org.apache.logging.log4j.Logger | ||
|
||
object HexDebug { | ||
const val MODID = "hexdebug" | ||
|
||
@JvmField | ||
val LOGGER: Logger = LogManager.getLogger(MODID) | ||
|
||
@JvmStatic | ||
fun init() { | ||
LOGGER.info("HexDebug is here!") | ||
HexDebugItemRegistry.init() | ||
HexDebugAbstractions.get().apply { | ||
initPlatformSpecific() | ||
onServerStarted { | ||
HexDebugServerManager.start() | ||
} | ||
onServerStopping { | ||
HexDebugServerManager.stop() | ||
} | ||
} | ||
} | ||
|
||
@JvmStatic | ||
fun id(path: String) = ResourceLocation(MODID, path) | ||
} |
111 changes: 111 additions & 0 deletions
111
Common/src/main/kotlin/ca/objectobject/hexdebug/common/items/ItemDebugger.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,111 @@ | ||
package ca.objectobject.hexdebug.common.items | ||
|
||
import at.petrak.hexcasting.api.casting.ParticleSpray | ||
import at.petrak.hexcasting.api.casting.eval.vm.CastingVM | ||
import at.petrak.hexcasting.api.casting.iota.Iota | ||
import at.petrak.hexcasting.api.casting.iota.ListIota | ||
import at.petrak.hexcasting.api.casting.iota.PatternIota | ||
import at.petrak.hexcasting.api.item.IotaHolderItem | ||
import at.petrak.hexcasting.api.mod.HexConfig | ||
import at.petrak.hexcasting.api.utils.getCompound | ||
import at.petrak.hexcasting.common.items.magic.ItemPackagedHex | ||
import at.petrak.hexcasting.common.msgs.MsgNewSpiralPatternsS2C | ||
import at.petrak.hexcasting.xplat.IXplatAbstractions | ||
import ca.objectobject.hexdebug.debugger.DebugCastArgs | ||
import ca.objectobject.hexdebug.debugger.DebugItemCastEnv | ||
import ca.objectobject.hexdebug.server.HexDebugServerManager | ||
import ca.objectobject.hexdebug.server.HexDebugServerState | ||
import net.minecraft.network.chat.Component | ||
import net.minecraft.server.level.ServerLevel | ||
import net.minecraft.server.level.ServerPlayer | ||
import net.minecraft.stats.Stat | ||
import net.minecraft.stats.Stats | ||
import net.minecraft.world.InteractionHand | ||
import net.minecraft.world.InteractionResultHolder | ||
import net.minecraft.world.entity.player.Player | ||
import net.minecraft.world.item.ItemStack | ||
import net.minecraft.world.level.Level | ||
import net.minecraft.world.phys.Vec3 | ||
|
||
class ItemDebugger(properties: Properties) : ItemPackagedHex(properties), IotaHolderItem { | ||
override fun canDrawMediaFromInventory(stack: ItemStack?) = true | ||
|
||
override fun breakAfterDepletion() = false | ||
|
||
override fun cooldown() = HexConfig.common().artifactCooldown() | ||
|
||
override fun readIotaTag(stack: ItemStack?) = stack?.getCompound(TAG_PROGRAM) | ||
|
||
override fun canWrite(stack: ItemStack?, iota: Iota?) = iota is ListIota | ||
|
||
override fun writeDatum(stack: ItemStack?, iota: Iota?) = writeHex(stack, (iota as ListIota).list.toList(), null, 0) | ||
|
||
override fun use(world: Level, player: Player, usedHand: InteractionHand): InteractionResultHolder<ItemStack> { | ||
val stack = player.getItemInHand(usedHand) | ||
|
||
if (world.isClientSide) { | ||
return InteractionResultHolder.success(stack) | ||
} | ||
|
||
val serverPlayer = player as ServerPlayer | ||
val serverLevel = world as ServerLevel | ||
|
||
val instrs = if (hasHex(stack)) { | ||
getHex(stack, serverLevel) ?: return InteractionResultHolder.fail(stack) | ||
} else { | ||
val datumHolder = IXplatAbstractions.INSTANCE.findDataHolder(player.getItemInHand(usedHand.otherHand)) | ||
when (val iota = datumHolder?.readIota(serverLevel)) { | ||
is ListIota -> iota.list.toList() | ||
else -> null | ||
} | ||
} ?: return InteractionResultHolder.fail(stack) | ||
|
||
val ctx = DebugItemCastEnv(serverPlayer, usedHand) | ||
val vm = CastingVM.empty(ctx) | ||
val castArgs = DebugCastArgs(vm, instrs, serverLevel) { | ||
if (it is PatternIota) { | ||
val packet = MsgNewSpiralPatternsS2C(serverPlayer.uuid, listOf(it.pattern), 140) | ||
IXplatAbstractions.INSTANCE.sendPacketToPlayer(serverPlayer, packet) | ||
IXplatAbstractions.INSTANCE.sendPacketTracking(serverPlayer, packet) | ||
} | ||
} | ||
|
||
val debugServer = HexDebugServerManager.server | ||
if (debugServer == null) { | ||
HexDebugServerManager.queuedCast = castArgs | ||
player.sendSystemMessage(Component.translatable("text.hexdebug.no_client"), false) | ||
} else when (debugServer.state) { | ||
HexDebugServerState.NOT_READY, HexDebugServerState.READY -> if (!debugServer.startDebugging(castArgs)) { | ||
return InteractionResultHolder.fail(stack) | ||
} | ||
HexDebugServerState.DEBUGGING -> debugServer.next(null) | ||
else -> return InteractionResultHolder.fail(stack) | ||
} | ||
|
||
ParticleSpray(player.position(), Vec3(0.0, 1.5, 0.0), 0.4, Math.PI / 3, 30) | ||
.sprayParticles(serverPlayer.serverLevel(), ctx.pigment) | ||
|
||
val broken = breakAfterDepletion() && getMedia(stack) == 0L | ||
val stat: Stat<*> = if (broken) { | ||
Stats.ITEM_BROKEN[this] | ||
} else { | ||
Stats.ITEM_USED[this] | ||
} | ||
player.awardStat(stat) | ||
|
||
serverPlayer.cooldowns.addCooldown(this, this.cooldown()) | ||
|
||
if (broken) { | ||
stack.shrink(1) | ||
player.broadcastBreakEvent(usedHand) | ||
return InteractionResultHolder.consume(stack) | ||
} else { | ||
return InteractionResultHolder.success(stack) | ||
} | ||
} | ||
} | ||
|
||
val InteractionHand.otherHand get() = when (this) { | ||
InteractionHand.MAIN_HAND -> InteractionHand.OFF_HAND | ||
InteractionHand.OFF_HAND -> InteractionHand.MAIN_HAND | ||
} |
12 changes: 12 additions & 0 deletions
12
Common/src/main/kotlin/ca/objectobject/hexdebug/debugger/DebugCastArgs.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
package ca.objectobject.hexdebug.debugger | ||
|
||
import at.petrak.hexcasting.api.casting.eval.vm.CastingVM | ||
import at.petrak.hexcasting.api.casting.iota.Iota | ||
import net.minecraft.server.level.ServerLevel | ||
|
||
data class DebugCastArgs( | ||
val vm: CastingVM, | ||
val iotas: List<Iota>, | ||
val world: ServerLevel, | ||
val onExecute: ((Iota) -> Unit)? = null | ||
) |
14 changes: 14 additions & 0 deletions
14
Common/src/main/kotlin/ca/objectobject/hexdebug/debugger/DebugCastEnv.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
package ca.objectobject.hexdebug.debugger | ||
|
||
import at.petrak.hexcasting.api.casting.eval.env.PackagedItemCastEnv | ||
import ca.objectobject.hexdebug.server.HexDebugServerManager | ||
import net.minecraft.network.chat.Component | ||
import net.minecraft.server.level.ServerPlayer | ||
import net.minecraft.world.InteractionHand | ||
|
||
class DebugItemCastEnv(caster: ServerPlayer, castingHand: InteractionHand) : PackagedItemCastEnv(caster, castingHand) { | ||
override fun printMessage(message: Component) { | ||
super.printMessage(message) | ||
HexDebugServerManager.server?.print(message.string + "\n") | ||
} | ||
} |
Oops, something went wrong.