Skip to content

Commit

Permalink
v0.4
Browse files Browse the repository at this point in the history
restructured for inheritance, implemented elementa for features, added clock feature
  • Loading branch information
shmoe6 committed May 14, 2024
1 parent 1c52db3 commit f00b9b2
Show file tree
Hide file tree
Showing 20 changed files with 6,969 additions and 43 deletions.
6,645 changes: 6,645 additions & 0 deletions mcpmethods.csv

Large diffs are not rendered by default.

29 changes: 21 additions & 8 deletions src/main/kotlin/com/github/shmoe6/melody/Melody.kt
Original file line number Diff line number Diff line change
@@ -1,55 +1,68 @@
@file:SuppressWarnings("unused")
package com.github.shmoe6.melody

import com.github.shmoe6.melody.command.MelodyCommand
import com.github.shmoe6.melody.command.SimulateCommand
import com.github.shmoe6.melody.command.TestCommand
import com.github.shmoe6.melody.features.*
import com.github.shmoe6.melody.features.combat.DisplayArrowCount
import com.github.shmoe6.melody.features.farming.GardenVisitorDisplay
import com.github.shmoe6.melody.features.general.SilenceSkyBlockNotifications
import com.github.shmoe6.melody.features.inventory.HideEffectsHud
import com.github.shmoe6.melody.features.inventory.LockSlots
import com.github.shmoe6.melody.features.inventory.MissingMaxEnchantments
import com.github.shmoe6.melody.features.mining.WormCooldownTimer
import com.github.shmoe6.melody.features.overlay.Clock
import com.github.shmoe6.melody.handlers.*
import net.minecraft.client.Minecraft
import net.minecraft.client.gui.GuiScreen
import net.minecraft.init.Blocks
import net.minecraft.util.StringUtils
import net.minecraftforge.client.ClientCommandHandler
import net.minecraftforge.common.MinecraftForge
import net.minecraftforge.fml.common.Mod
import net.minecraftforge.fml.common.event.FMLInitializationEvent

@Mod(modid = "melody", useMetadata = true)
class Melody {
fun String.stripControlCodes(): String = StringUtils.stripControlCodes(this)

@Mod.EventHandler
fun init(event: FMLInitializationEvent) {
try {
val resource: net.minecraft.client.resources.IResource = Minecraft.getMinecraft().getResourceManager()
val resource: net.minecraft.client.resources.IResource = Minecraft.getMinecraft().resourceManager
.getResource(net.minecraft.util.ResourceLocation("test:test.txt"))
org.apache.commons.io.IOUtils.copy(resource.getInputStream(), java.lang.System.out)
org.apache.commons.io.IOUtils.copy(resource.inputStream, java.lang.System.out)
} catch (e: java.io.IOException) {
throw java.lang.RuntimeException(e)
}

println("Dirt: ${Blocks.dirt.unlocalizedName}")

// register general event handlers
MinecraftForge.EVENT_BUS.register(overlayHandler)
MinecraftForge.EVENT_BUS.register(TickHandler)

// register feature-specific event handlers
MinecraftForge.EVENT_BUS.register(Clock)
MinecraftForge.EVENT_BUS.register(DisplayArrowCount)
MinecraftForge.EVENT_BUS.register(GardenVisitorDisplay)
MinecraftForge.EVENT_BUS.register(HideEffectsHud)
MinecraftForge.EVENT_BUS.register(LockSlots)
MinecraftForge.EVENT_BUS.register(MissingMaxEnchantments)
MinecraftForge.EVENT_BUS.register(SilenceSkyBlockNotifications)
MinecraftForge.EVENT_BUS.register(WormCooldownTimer)

// register other event handlers
MinecraftForge.EVENT_BUS.register(TickHandler)

// register commands
ClientCommandHandler.instance.registerCommand(MelodyCommand)
ClientCommandHandler.instance.registerCommand(SimulateCommand)
ClientCommandHandler.instance.registerCommand(TestCommand)

doneLoading = true
}

companion object {
const val MODID = "MELODY"
var doneLoading = false
var currentWorld: String? = null
var currentGui: GuiScreen? = null
val overlayHandler = OverlayHandler
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package com.github.shmoe6.melody.command

import com.github.shmoe6.melody.Melody
import com.github.shmoe6.melody.core.MelodyConfig
import net.minecraft.client.Minecraft
import net.minecraft.command.CommandBase
import net.minecraft.command.ICommandSender
import net.minecraft.util.ChatComponentText
Expand All @@ -19,7 +20,7 @@ object SimulateCommand : CommandBase() {
var msg = ""
args?.forEach { msg += "$it "}
msg = msg.substring(0..<msg.length - 1)
sender?.addChatMessage(ChatComponentText(msg))
Minecraft.getMinecraft().thePlayer.sendChatMessage(msg)
}

override fun canCommandSenderUseCommand(sender: ICommandSender?): Boolean {
Expand Down
43 changes: 43 additions & 0 deletions src/main/kotlin/com/github/shmoe6/melody/core/MelodyConfig.kt
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,49 @@ object MelodyConfig: Vigilant(File("./config/Melody.toml")) {
)
var wormCooldownTimerEnabled = false

@Property(
type = PropertyType.SWITCH,
name = "Lock Slots",
description = "Enables locking slots. Press L to toggle locking on a slot.",
category = "General",
)
var lockSlotsEnabled = false

@Property(
type = PropertyType.TEXT,
name = "Locked Slots",
description = "List of locked slots represented by their int index in the mainInventory.",
category = "General",
hidden = true
)
var lockedSlots = ""

@Property(
type = PropertyType.SWITCH,
name = "Clock",
description = "Displays the current time.",
category = "General"
)
var clockEnabled = false

@Property(
type = PropertyType.NUMBER,
name = "Clock xPos",
description = "x coordinate to render the feature at",
category = "General",
hidden = true
)
var clockXPos = 50

@Property(
type = PropertyType.NUMBER,
name = "Clock yPos",
description = "y coordinate to render the feature at",
category = "General",
hidden = true
)
var clockYPos = 50

init {
initialize()
preload()
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package com.github.shmoe6.melody.features

interface MelodyFeature {

fun isFeatureEnabled(): Boolean
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.github.shmoe6.melody.features

import gg.essential.elementa.UIComponent
import gg.essential.elementa.components.UIText

interface MelodyFeatureRenderable : MelodyFeature {

var xPos: Int
var yPos: Int
var mainUiComponent: UIText
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
package com.github.shmoe6.melody.features.combat

import com.github.shmoe6.melody.Melody
import com.github.shmoe6.melody.core.MelodyConfig
import com.github.shmoe6.melody.features.MelodyFeatureRenderable
import gg.essential.elementa.components.UIText
import gg.essential.elementa.dsl.constrain
import gg.essential.elementa.dsl.pixels
import net.minecraft.client.Minecraft
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
import net.minecraftforge.fml.common.gameevent.TickEvent
import scala.swing.Applet.UI

object DisplayArrowCount : MelodyFeatureRenderable {

override var xPos: Int = 550
override var yPos: Int = 450
override var mainUiComponent: UIText = UIText().constrain {
x = xPos.pixels
y = yPos.pixels
}

init {

Melody.overlayHandler.overlay.addToScreen(this)
}

@SubscribeEvent
fun onTick(event: TickEvent) {
val player = Minecraft.getMinecraft().thePlayer

if (!isFeatureEnabled() || player?.inventory?.mainInventory?.get(8)?.displayName?.contains("Quiver") == false) {
clearText()
return
}

val numArrows = player?.inventory?.mainInventory?.get(8)?.getTooltip(player, false)?.get(5)
(this.mainUiComponent as UIText).setText("$numArrows")
}

private fun clearText() {
if ((this.mainUiComponent as UIText).getText() != "") {
(this.mainUiComponent as UIText).setText("")
}
}

override fun isFeatureEnabled(): Boolean {
return MelodyConfig.displayArrowCountEnabled
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.github.shmoe6.melody.features
package com.github.shmoe6.melody.features.farming

import com.github.shmoe6.melody.Melody
import com.github.shmoe6.melody.core.MelodyConfig
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,9 @@
package com.github.shmoe6.melody.features
package com.github.shmoe6.melody.features.general

import com.github.shmoe6.melody.core.MelodyConfig
import net.minecraft.util.StringUtils
import net.minecraftforge.client.event.ClientChatReceivedEvent
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
import java.util.*
import kotlin.collections.ArrayList
import kotlin.collections.HashSet

object SilenceSkyBlockNotifications {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.github.shmoe6.melody.features
package com.github.shmoe6.melody.features.inventory

import com.github.shmoe6.melody.core.MelodyConfig
import com.github.shmoe6.melody.features.MelodyFeature
import net.minecraft.client.renderer.InventoryEffectRenderer
import net.minecraftforge.client.event.GuiOpenEvent
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
Expand All @@ -9,6 +10,6 @@ object HideEffectsHud {

@SubscribeEvent
fun onGuiOpen(event: GuiOpenEvent){
// TODO implement mixin to hide potion effect hud in invenotry
// TODO implement mixin to hide potion effect hud in inventory
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
package com.github.shmoe6.melody.features.inventory

import com.github.shmoe6.melody.core.MelodyConfig
import com.github.shmoe6.melody.mixin.IsMouseOverSlotAccessor
import net.minecraft.client.Minecraft
import net.minecraft.client.gui.inventory.GuiInventory
import net.minecraft.inventory.Slot
import net.minecraftforge.client.event.GuiOpenEvent
import net.minecraftforge.client.event.GuiScreenEvent
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
import org.lwjgl.input.Keyboard
import org.lwjgl.input.Mouse

object LockSlots {

private var allowSlotLockEditing: Boolean = false

@SubscribeEvent
fun onGuiOpen(event: GuiOpenEvent) {
if (!MelodyConfig.lockSlotsEnabled) return

allowSlotLockEditing = (event.gui is GuiInventory)
}

@SubscribeEvent
fun onKeyInput(event: GuiScreenEvent) {

//println("Event triggered. L pressed: ${Keyboard.isKeyDown(Keyboard.KEY_L)}, editing enabled: ${this.allowSlotLockEditing}")
if (!MelodyConfig.lockSlotsEnabled || !allowSlotLockEditing || !Keyboard.isKeyDown(Keyboard.KEY_L)) return

//println("Condition passed")
val inventory = Minecraft.getMinecraft().thePlayer.inventory
val guiWidth = event.gui.width
val guiHeight = event.gui.height
val mouseX = Mouse.getEventX() * guiWidth / Minecraft.getMinecraft().displayWidth
val mouseY = guiHeight - Mouse.getEventY() * guiHeight / Minecraft.getMinecraft().displayHeight

fun isMouseOverSlot(slotIn: Slot, mouseX: Int, mouseY: Int) = (event.gui as IsMouseOverSlotAccessor).isMouseOverSlot_melody(slotIn, mouseX, mouseY)

var hoveredItemIndex: Int? = null
inventory.mainInventory.indices.forEach {
val slotToCheck = Minecraft.getMinecraft().thePlayer.openContainer.inventorySlots[it] as Slot

if (isMouseOverSlot(slotToCheck, mouseX, mouseY)) {
hoveredItemIndex = it
println("Mouse over slot!")

val currentLockedSlots = HashSet<String>()
MelodyConfig.lockedSlots.removePrefix("[").removeSuffix("]").split(",").forEach { slotIndex ->
if (currentLockedSlots.contains(slotIndex)) {
currentLockedSlots.remove(slotIndex)
println("Slot $slotIndex unlocked!")
} else {
currentLockedSlots.add(slotIndex)
println("Slot $slotIndex locked!")
}

println(currentLockedSlots)
MelodyConfig.lockedSlots = currentLockedSlots.toString()
}
}
}

// println("Event handling finished. Hovered slot: $hoveredItemIndex")
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.github.shmoe6.melody.features
package com.github.shmoe6.melody.features.inventory

import com.github.shmoe6.melody.core.MelodyConfig
import net.minecraft.util.StringUtils
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
package com.github.shmoe6.melody.features
package com.github.shmoe6.melody.features.mining

import com.github.shmoe6.melody.core.MelodyConfig
import net.minecraft.client.Minecraft
import net.minecraft.util.StringUtils
import net.minecraftforge.client.event.ClientChatReceivedEvent
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
import net.minecraftforge.fml.common.gameevent.TickEvent
import kotlin.math.floor
import net.minecraftforge.fml.common.gameevent.TickEvent.Phase

object WormCooldownTimer {

Expand All @@ -16,15 +16,16 @@ object WormCooldownTimer {
@SubscribeEvent
fun onClientChatReceived(event: ClientChatReceivedEvent) {
if (!MelodyConfig.wormCooldownTimerEnabled ||
StringUtils.stripControlCodes(event.message.formattedText) != "You hear the sound of something approaching...")
!StringUtils.stripControlCodes(event.message.formattedText).equals("You hear the sound of something approaching...") ||
!StringUtils.stripControlCodes(event.message.formattedText).equals("[311] α [MVP+] musicallyanna: testd"))
return

runTimer = true
}

@SubscribeEvent
fun onTick(event: TickEvent) {
if (!MelodyConfig.wormCooldownTimerEnabled || !runTimer) return
if (!MelodyConfig.wormCooldownTimerEnabled || !event.phase.equals(Phase.START) || !runTimer) return

if (startTime == null) {
startTime = System.currentTimeMillis()
Expand All @@ -35,7 +36,6 @@ object WormCooldownTimer {
if (timeLeft < 0) {
startTime = null
runTimer = false

} else {
Minecraft.getMinecraft().fontRendererObj.drawStringWithShadow("Worm Cooldown: $timeLeft", 550.0F, 450.0F, 0xdcbeb8)
}
Expand Down
Loading

0 comments on commit f00b9b2

Please sign in to comment.