diff options
author | inglettronald <inglettronald@gmail.com> | 2023-07-17 03:05:11 -0500 |
---|---|---|
committer | inglettronald <inglettronald@gmail.com> | 2023-07-17 03:05:11 -0500 |
commit | 1a8e45d8519a8ae69e14db8ea103a7fdf7b80923 (patch) | |
tree | 5568ffc7575c4da682a9526199ea535be57ae637 /src/main/kotlin | |
parent | 2003a3d2be24ae3faed0e45a8c6cc5e0b8343cc3 (diff) | |
download | DulkirMod-Fabric-1a8e45d8519a8ae69e14db8ea103a7fdf7b80923.tar.gz DulkirMod-Fabric-1a8e45d8519a8ae69e14db8ea103a7fdf7b80923.tar.bz2 DulkirMod-Fabric-1a8e45d8519a8ae69e14db8ea103a7fdf7b80923.zip |
wip
Diffstat (limited to 'src/main/kotlin')
9 files changed, 159 insertions, 30 deletions
diff --git a/src/main/kotlin/com/dulkirfabric/Registrations.kt b/src/main/kotlin/com/dulkirfabric/Registrations.kt index 5fa7cd8..519319e 100644 --- a/src/main/kotlin/com/dulkirfabric/Registrations.kt +++ b/src/main/kotlin/com/dulkirfabric/Registrations.kt @@ -12,12 +12,14 @@ import com.dulkirfabric.features.* import com.dulkirfabric.features.chat.AbiPhoneDND import com.dulkirfabric.util.TablistUtils import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback +import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientEntityEvents import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents import net.fabricmc.fabric.api.client.message.v1.ClientReceiveMessageEvents import net.fabricmc.fabric.api.client.message.v1.ClientSendMessageEvents import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderEvents import net.fabricmc.fabric.api.client.screen.v1.ScreenEvents import net.fabricmc.fabric.api.client.screen.v1.ScreenMouseEvents +import net.fabricmc.fabric.api.event.lifecycle.v1.ServerWorldEvents /** @@ -59,43 +61,44 @@ object Registrations { EVENT_BUS.subscribe(EffigyDisplay) EVENT_BUS.subscribe(TablistUtils) EVENT_BUS.subscribe(CullExplosionParticles) + EVENT_BUS.subscribe(CooldownDisplays) } fun registerEvents() { // Register Custom Tick event, so we can use it like 1.8.9 forge - ClientTickEvents.START_CLIENT_TICK.register( - ClientTickEvents.StartTick { _ -> - ClientTickEvent.post() - if (tickCount % 20 == 0) LongUpdateEvent.post() - tickCount++ - } - ) - ClientReceiveMessageEvents.ALLOW_GAME.register( - ClientReceiveMessageEvents.AllowGame { message, overlay -> - if (overlay) !OverlayReceivedEvent(message.toString()).post() - else !ChatReceivedEvent(message).post() - } - ) - ClientSendMessageEvents.MODIFY_COMMAND.register( - ClientSendMessageEvents.ModifyCommand { command -> - ModifyCommandEvent(command).also { it.post() }.command - } - ) - WorldRenderEvents.END.register( - WorldRenderEvents.End { context -> WorldRenderLastEvent(context).post()} - ) + ClientTickEvents.START_CLIENT_TICK.register { _ -> + ClientTickEvent.post() + if (tickCount % 20 == 0) LongUpdateEvent.post() + tickCount++ + } + ClientReceiveMessageEvents.ALLOW_GAME.register { message, overlay -> + if (overlay) !OverlayReceivedEvent(message.toString()).post() + else !ChatReceivedEvent(message).post() + } + + ClientSendMessageEvents.MODIFY_COMMAND.register { command -> + ModifyCommandEvent(command).also { it.post() }.command + } + + WorldRenderEvents.END.register { context -> WorldRenderLastEvent(context).post() } + ScreenEvents.BEFORE_INIT.register( ScreenEvents.BeforeInit { client, screen, scaledWidth, scaledHeight -> - ScreenMouseEvents.beforeMouseScroll(screen).register(ScreenMouseEvents.BeforeMouseScroll { - coolScreen, mouseX, mouseY, horizontalAmount, verticalAmount -> - MouseScrollEvent(coolScreen, mouseX, mouseY, horizontalAmount, verticalAmount).post() - }) - } - ) - WorldRenderEvents.BLOCK_OUTLINE.register( - WorldRenderEvents.BlockOutline { worldRenderContext, blockOutlineContext -> - !BlockOutlineEvent(worldRenderContext, blockOutlineContext).post() + ScreenMouseEvents.beforeMouseScroll(screen) + .register(ScreenMouseEvents.BeforeMouseScroll { coolScreen, mouseX, mouseY, horizontalAmount, verticalAmount -> + MouseScrollEvent(coolScreen, mouseX, mouseY, horizontalAmount, verticalAmount).post() + }) } ) + + WorldRenderEvents.BLOCK_OUTLINE.register { worldRenderContext, blockOutlineContext -> + !BlockOutlineEvent(worldRenderContext, blockOutlineContext).post() + } + ClientEntityEvents.ENTITY_LOAD.register { entity, world -> + EntityLoadEvent(entity, world) + } + ServerWorldEvents.LOAD.register { server, world -> + WorldLoadEvent(server, world) + } } }
\ No newline at end of file diff --git a/src/main/kotlin/com/dulkirfabric/events/EntityLoadEvent.kt b/src/main/kotlin/com/dulkirfabric/events/EntityLoadEvent.kt new file mode 100644 index 0000000..e588ed2 --- /dev/null +++ b/src/main/kotlin/com/dulkirfabric/events/EntityLoadEvent.kt @@ -0,0 +1,10 @@ +package com.dulkirfabric.events + +import com.dulkirfabric.events.base.Event +import net.minecraft.entity.Entity +import net.minecraft.world.World + +data class EntityLoadEvent( + val entity: Entity, + val world: World +): Event() diff --git a/src/main/kotlin/com/dulkirfabric/events/WorldLoadEvent.kt b/src/main/kotlin/com/dulkirfabric/events/WorldLoadEvent.kt new file mode 100644 index 0000000..d43f74b --- /dev/null +++ b/src/main/kotlin/com/dulkirfabric/events/WorldLoadEvent.kt @@ -0,0 +1,10 @@ +package com.dulkirfabric.events + +import com.dulkirfabric.events.base.Event +import net.minecraft.server.MinecraftServer +import net.minecraft.world.World + +data class WorldLoadEvent( + val server: MinecraftServer, + val world: World +): Event() diff --git a/src/main/kotlin/com/dulkirfabric/features/CooldownDisplays.kt b/src/main/kotlin/com/dulkirfabric/features/CooldownDisplays.kt new file mode 100644 index 0000000..86a3863 --- /dev/null +++ b/src/main/kotlin/com/dulkirfabric/features/CooldownDisplays.kt @@ -0,0 +1,61 @@ +package com.dulkirfabric.features + +import com.dulkirfabric.events.PlaySoundEvent +import com.dulkirfabric.events.WorldLoadEvent +import com.dulkirfabric.util.SoundInfo +import com.dulkirfabric.util.TrackedCooldown +import meteordevelopment.orbit.EventHandler +import net.minecraft.item.ItemStack +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable + +object CooldownDisplays { + private val trackedCooldowns: Map<SoundInfo, TrackedCooldown> = mapOf( + Pair( + SoundInfo("mob.zombie.remedy", 1f, .5f), + TrackedCooldown("(REAPER_CHESTPLATE)|(REAPER_LEGGINGS)|(REAPER_BOOTS)".toRegex(), 25000, 0) + ), + Pair( + SoundInfo("mob.zombie.remedy", 0.6984127f, 1f), + TrackedCooldown("(HYPERION|ASTRAEA|SCYLLA|VALKYRIE)".toRegex(), 5000, 0) + ) + ) + + fun shouldDisplay(stack: ItemStack, cir: CallbackInfoReturnable<Boolean>) { + val cooldown = fetchCooldownItem(stack) ?: return + cir.returnValue = true + // cir.returnValue = System.currentTimeMillis() - cooldown.lastUsage < cooldown.cooldownDuration + } + + fun calcDurability(stack: ItemStack, cir: CallbackInfoReturnable<Int>) { + val cooldown = fetchCooldownItem(stack) ?: return + cir.returnValue = 300 + } + @EventHandler + fun onSound(event: PlaySoundEvent) { + val path = event.sound.id.path + val pitch = event.sound.pitch + val volume = event.sound.volume + + // Figure out if we have a match in trackedCooldowns + val matchResult = trackedCooldowns[SoundInfo(path, pitch, volume)] ?: return + matchResult.lastUsage = System.currentTimeMillis() + } + + @EventHandler + fun onWorldLoad(event: WorldLoadEvent) { + trackedCooldowns.forEach { + it.value.lastUsage = 0 + } + } + + private fun fetchCooldownItem(stack: ItemStack): TrackedCooldown? { + val tag = stack.nbt ?: return null + val id = tag.getCompound("ExtraAttributes").get("id") ?: return null + val idStr = id.toString().trim('"') + trackedCooldowns.forEach { + if (idStr matches it.value.itemID) + return it.value + } + return null + } +}
\ No newline at end of file diff --git a/src/main/kotlin/com/dulkirfabric/features/RenderTest.kt b/src/main/kotlin/com/dulkirfabric/features/RenderTest.kt index 8ad270d..1f96a7b 100644 --- a/src/main/kotlin/com/dulkirfabric/features/RenderTest.kt +++ b/src/main/kotlin/com/dulkirfabric/features/RenderTest.kt @@ -17,4 +17,10 @@ object RenderTest { Vec3d(-183.5, 79.0, -465.5) ) } + +// @EventHandler +// fun onLoadEnt(event: EntityLoadEvent) { +// if (event.entity !is GlowingEntityInterface) return +// event.entity.setDulkirEntityGlow(true, Color(255, 255, 255, 255), true) +// } }
\ No newline at end of file diff --git a/src/main/kotlin/com/dulkirfabric/util/GlowingEntityInterface.kt b/src/main/kotlin/com/dulkirfabric/util/GlowingEntityInterface.kt new file mode 100644 index 0000000..5a76890 --- /dev/null +++ b/src/main/kotlin/com/dulkirfabric/util/GlowingEntityInterface.kt @@ -0,0 +1,13 @@ +package com.dulkirfabric.util + +import java.awt.Color + +interface GlowingEntityInterface { + fun setDulkirEntityGlow(shouldGlow: Boolean, glowColor: Color, shouldESP: Boolean = false) + + fun shouldDulkirEntityGlow() : Boolean + + fun getDulkirEntityGlowColor() : Color? + + fun shouldDulkirEntityESP() : Boolean +}
\ No newline at end of file diff --git a/src/main/kotlin/com/dulkirfabric/util/SoundInfo.kt b/src/main/kotlin/com/dulkirfabric/util/SoundInfo.kt new file mode 100644 index 0000000..c9f339a --- /dev/null +++ b/src/main/kotlin/com/dulkirfabric/util/SoundInfo.kt @@ -0,0 +1,7 @@ +package com.dulkirfabric.util + +data class SoundInfo( + val path: String, + val pitch: Float, + val volume: Float +) diff --git a/src/main/kotlin/com/dulkirfabric/util/TrackedCooldown.kt b/src/main/kotlin/com/dulkirfabric/util/TrackedCooldown.kt new file mode 100644 index 0000000..9aa93d7 --- /dev/null +++ b/src/main/kotlin/com/dulkirfabric/util/TrackedCooldown.kt @@ -0,0 +1,8 @@ +package com.dulkirfabric.util + +// Currently, this will be used to create A list of items that have audible sounds associated with their usages +data class TrackedCooldown ( + val itemID: Regex, + val cooldownDuration: Int, // in millis + var lastUsage: Long, // from System.currentTimeMillis +)
\ No newline at end of file diff --git a/src/main/kotlin/com/dulkirfabric/util/Utils.kt b/src/main/kotlin/com/dulkirfabric/util/Utils.kt index ce6665b..ae98cf6 100644 --- a/src/main/kotlin/com/dulkirfabric/util/Utils.kt +++ b/src/main/kotlin/com/dulkirfabric/util/Utils.kt @@ -1,7 +1,18 @@ package com.dulkirfabric.util +import com.dulkirfabric.events.PlaySoundEvent + object Utils { fun isInSkyblock(): Boolean { return ScoreBoardUtils.getLines() != null } + + /** + * Prints relevant information about a sound that is being displayed + */ + fun debugSound(event: PlaySoundEvent) { + println("Path: ${event.sound.id.path}") + println("Pitch: ${event.sound.pitch}") + println("Volume: ${event.sound.volume}") + } }
\ No newline at end of file |