nageyqma·git
HTTPS https://git.nageyqma.icu/nageyqma/odin_next.git SSH git@git.nageyqma.icu:nageyqma/odin_next.git

HTTPS 链接可直接 git clone;推送代码请使用 SSH。

4.9 KB · 100 行raw
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
package com.odtheking.odin.events

import com.mojang.blaze3d.platform.InputConstants
import com.odtheking.odin.events.core.CancellableEvent
import com.odtheking.odin.events.core.Event
import com.odtheking.odin.features.impl.dungeon.map.tile.DungeonRoom
import com.odtheking.odin.features.impl.dungeon.map.tile.MapCheckmark
import com.odtheking.odin.utils.skyblock.dungeon.Floor
import com.odtheking.odin.utils.skyblock.dungeon.terminals.terminalhandler.TerminalHandler
import net.fabricmc.fabric.api.client.rendering.v1.level.LevelRenderContext
import net.minecraft.client.multiplayer.ClientLevel
import net.minecraft.core.BlockPos
import net.minecraft.network.chat.Component
import net.minecraft.network.protocol.Packet
import net.minecraft.network.protocol.game.ClientboundSoundPacket
import net.minecraft.network.syncher.SynchedEntityData
import net.minecraft.world.BossEvent
import net.minecraft.world.InteractionHand
import net.minecraft.world.InteractionResult
import net.minecraft.world.entity.Entity
import net.minecraft.world.entity.EquipmentSlot
import net.minecraft.world.entity.item.ItemEntity
import net.minecraft.world.inventory.AbstractContainerMenu
import net.minecraft.world.inventory.Slot
import net.minecraft.world.item.ItemStack
import net.minecraft.world.level.block.state.BlockState
import net.minecraft.world.phys.BlockHitResult
import net.minecraft.world.phys.Vec3

class InputEvent(val key: InputConstants.Key) : CancellableEvent() // better mixin is prob ideal no need for cancellable

class BlockUpdateEvent(val pos: BlockPos, val old: BlockState, val updated: BlockState) : Event

class BlockInteractEvent(val pos: BlockPos) : CancellableEvent()
class EntityInteractEvent(val pos: Vec3, val entity: Entity) : CancellableEvent()
class UseItemOnPostEvent(val hand: InteractionHand, val hitResult: BlockHitResult, val interactionResult: InteractionResult) : Event

open class MessageEvent(val message: String, open val component: Component) : CancellableEvent() {
    class Chat(value: String, component: Component) : MessageEvent(value, component)
    class Overlay(value: String, component: Component) : MessageEvent(value, component)
    class ModifyChat(value: String, override var component: Component) : MessageEvent(value, component)
    class ModifyOverlay(value: String, override var component: Component) : MessageEvent(value, component)
}

class MessageSentEvent(val message: String) : CancellableEvent()
class RenderBossBarEvent(val bossBar: BossEvent) : CancellableEvent()

interface SecretPickupEvent : Event { // all are currently packet based but can probably use mixins
    class Interact(val blockPos: BlockPos, val blockState: BlockState) : SecretPickupEvent
    class Item(val entity: ItemEntity) : SecretPickupEvent
    class Bat(val packet: ClientboundSoundPacket) : SecretPickupEvent
}

abstract class TerminalEvent(val terminal: TerminalHandler) : Event {
    class Open(terminal: TerminalHandler) : TerminalEvent(terminal)
    class Close(terminal: TerminalHandler) : TerminalEvent(terminal)
    class Solve(terminal: TerminalHandler) : TerminalEvent(terminal)
    class Click(terminal: TerminalHandler, val slotIndex: Int, val button: Int, val solution: ArrayList<Int>) : TerminalEvent(terminal)
}

interface TickEvent : Event {
    class End(val level: ClientLevel) : TickEvent
    object Server : TickEvent
}

interface LevelEvent : Event {
    object Load : LevelEvent
    object Unload : LevelEvent
}

class RenderExtractEvent(val context: LevelRenderContext) : Event

abstract class PartyEvent(val members: List<String>) : Event {
    class Leave(members: List<String>) : PartyEvent(members)
}

abstract class PacketEvent(val packet: Packet<*>) : CancellableEvent() { // ideally used less
    class Receive(packet: Packet<*>) : PacketEvent(packet)
    class Send(packet: Packet<*>) : PacketEvent(packet)
}

class RoomEnterEvent(val room: DungeonRoom?) : Event
class FloorEnterEvent(val floor: Floor) : Event
class ScoreUpdateEvent(val score: Int) : Event
data object MapUpdateEvent : Event
class CheckmarkUpdateEvent(val room: DungeonRoom, val checkmark: MapCheckmark) : Event
class SecretsUpdateEvent(val room: DungeonRoom, val foundSecrets: Int) : Event

object LocationChangeEvent : Event
object ScreenCloseEvent : Event
class SetSlotEvent(val slotIndex: Int, val itemStack: ItemStack, val slots: List<Slot>, val menu: AbstractContainerMenu) : Event

abstract class EntityEvent(val entity: Entity) : Event {
    class Add(entity: Entity) : EntityEvent(entity)
    class Remove(entity: Entity) : EntityEvent(entity)
    class Move(entity: Entity, val newPos: Vec3, val yRot: Float, val xRot: Float, val onGround: Boolean) : EntityEvent(entity)
    class SetItemSlot(entity: Entity, val slot: EquipmentSlot, val stack: ItemStack) : EntityEvent(entity)
    class SetData(entity: Entity, val synchedDataValues: List<SynchedEntityData.DataValue<*>>) : EntityEvent(entity)
    class Event(entity: Entity, val id: Byte) : EntityEvent(entity)
}