diff --git a/src/main/java/at/hannibal2/skyhanni/config/storage/ProfileSpecificStorage.java b/src/main/java/at/hannibal2/skyhanni/config/storage/ProfileSpecificStorage.java index 74cafed47ca0..d8812c6d4919 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/storage/ProfileSpecificStorage.java +++ b/src/main/java/at/hannibal2/skyhanni/config/storage/ProfileSpecificStorage.java @@ -12,7 +12,6 @@ import at.hannibal2.skyhanni.features.dungeon.DungeonFloor; import at.hannibal2.skyhanni.features.event.diana.DianaProfitTracker; import at.hannibal2.skyhanni.features.event.diana.MythologicalCreatureTracker; -import at.hannibal2.skyhanni.features.event.hoppity.HoppityCollectionStats; import at.hannibal2.skyhanni.features.event.jerry.frozentreasure.FrozenTreasureTracker; import at.hannibal2.skyhanni.features.fishing.tracker.FishingProfitTracker; import at.hannibal2.skyhanni.features.fishing.tracker.SeaCreatureTracker; @@ -623,6 +622,7 @@ public static class WardrobeStorage { public Map wardrobeData = new HashMap<>(); @Expose + @Nullable public Integer currentWardrobeSlot = null; } diff --git a/src/main/java/at/hannibal2/skyhanni/features/inventory/wardrobe/CustomWardrobe.kt b/src/main/java/at/hannibal2/skyhanni/features/inventory/wardrobe/CustomWardrobe.kt index 9f39326a0bab..12570084f379 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/inventory/wardrobe/CustomWardrobe.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/inventory/wardrobe/CustomWardrobe.kt @@ -28,6 +28,7 @@ import at.hannibal2.skyhanni.utils.LorenzUtils import at.hannibal2.skyhanni.utils.RenderUtils.HorizontalAlignment import at.hannibal2.skyhanni.utils.RenderUtils.VerticalAlignment import at.hannibal2.skyhanni.utils.RenderUtils.renderRenderable +import at.hannibal2.skyhanni.utils.SimpleTimeMark import at.hannibal2.skyhanni.utils.renderables.Renderable import net.minecraft.client.Minecraft import net.minecraft.client.gui.inventory.GuiContainer @@ -43,67 +44,26 @@ object CustomWardrobe { private val config get() = SkyHanniMod.feature.inventory.customWardrobe private var displayRenderable: Renderable? = null - private var buttonsRenderable: Renderable? = null private var inventoryButton: Renderable? = null private var editMode = false private var waitingForInventoryUpdate = false + private var lastEditClick = SimpleTimeMark.farPast() @SubscribeEvent fun onGuiRender(event: GuiContainerEvent.BeforeDraw) { if (!isEnabled() || editMode) return - event.cancel() - } - - @SubscribeEvent - fun onRenderOverlay(event: GuiRenderEvent) { - if (!isEnabled()) return - val gui = Minecraft.getMinecraft().currentScreen as? GuiContainer ?: return - if (editMode) { // Inventory Button for re-enabling the Custom Wardrobe - val renderable = inventoryButton ?: addReEnableButton().also { inventoryButton = it } - val accessorGui = gui as AccessorGuiContainer - val posX = accessorGui.guiLeft + (1.05 * accessorGui.width).toInt() - val posY = accessorGui.guiTop + (accessorGui.height - renderable.height) / 2 - Position(posX, posY).renderRenderable(renderable, posLabel = "Custom Wardrobe", addToGuiManager = false) - return - } + val gui = event.gui val renderable = displayRenderable ?: run { update() displayRenderable ?: return } - val button = buttonsRenderable ?: return - - val fullRenderable = Renderable.drawInsideRoundedRect( - Renderable.doubleLayered( - Renderable.verticalContainer( - listOf(renderable, button), - config.spacing.buttonSlotsVerticalSpacing, - horizontalAlign = HorizontalAlignment.CENTER - ), - Renderable.clickable( - Renderable.string( - "§7SkyHanni", - horizontalAlign = HorizontalAlignment.RIGHT, - verticalAlign = VerticalAlignment.BOTTOM, - scale = 1.0 * (config.spacing.globalScale / 100.0) - ).let { Renderable.hoverable(hovered = Renderable.underlined(it), unhovered = it) }, - onClick = { - config::enabled.jumpToEditor() - reset() - currentPage = null - } - ), - blockBottomHover = false - ), - config.color.backgroundColor.toChromaColor(), - padding = 10 - ) // Change global wardrobe scale if its taller or wider than the screen - if (fullRenderable.width > gui.width || fullRenderable.height > gui.height) { + if (renderable.width > gui.width || renderable.height > gui.height) { if (config.spacing.globalScale <= 1) return val newScale = (config.spacing.globalScale * (0.9 / max( - fullRenderable.width.toDouble() / gui.width, - fullRenderable.height.toDouble() / gui.height + renderable.width.toDouble() / gui.width, + renderable.height.toDouble() / gui.height ))).toInt() config.spacing.globalScale = newScale ChatUtils.clickableChat( @@ -111,10 +71,9 @@ object CustomWardrobe { onClick = { config::spacing.jumpToEditor() } ) update() - return } - val (width, height) = fullRenderable.width to fullRenderable.height + val (width, height) = renderable.width to renderable.height val pos = Position((gui.width - width) / 2, (gui.height - height) / 2) if (waitingForInventoryUpdate && config.loadingText) { val loadingRenderable = Renderable.string("§cLoading...") @@ -124,8 +83,21 @@ object CustomWardrobe { } GlStateManager.translate(0f, 0f, 100f) - pos.renderRenderable(fullRenderable, posLabel = "Custom Wardrobe", addToGuiManager = false) + pos.renderRenderable(renderable, posLabel = "Custom Wardrobe", addToGuiManager = false) GlStateManager.translate(0f, 0f, -100f) + event.cancel() + } + + @SubscribeEvent + fun onRenderOverlay(event: GuiRenderEvent.ChestGuiOverlayRenderEvent) { + if (!isEnabled()) return + if (!editMode) return + val gui = Minecraft.getMinecraft().currentScreen as? GuiContainer ?: return + val renderable = inventoryButton ?: addReEnableButton().also { inventoryButton = it } + val accessorGui = gui as AccessorGuiContainer + val posX = accessorGui.guiLeft + (1.05 * accessorGui.width).toInt() + val posY = accessorGui.guiTop + (accessorGui.height - renderable.height) / 2 + Position(posX, posY).renderRenderable(renderable, posLabel = "Custom Wardrobe", addToGuiManager = false) } @SubscribeEvent @@ -144,9 +116,13 @@ object CustomWardrobe { update() } + @SubscribeEvent + fun onSlotClick(event: GuiContainerEvent.SlotClickEvent) { + if (lastEditClick.passedSince() < 50.milliseconds) event.cancel() + } + private fun update() { displayRenderable = createRenderables() - buttonsRenderable = addButtons() } private fun createRenderables(): Renderable { @@ -259,14 +235,40 @@ object CustomWardrobe { horizontalAlign = HorizontalAlignment.CENTER ) - return allSlotsRenderable + val button = addButtons() + + val fullRenderable = Renderable.drawInsideRoundedRect( + Renderable.doubleLayered( + Renderable.verticalContainer( + listOf(allSlotsRenderable, button), + config.spacing.buttonSlotsVerticalSpacing, + horizontalAlign = HorizontalAlignment.CENTER + ), + Renderable.clickable( + Renderable.string( + "§7SkyHanni", + horizontalAlign = HorizontalAlignment.RIGHT, + verticalAlign = VerticalAlignment.BOTTOM, + scale = 1.0 * (config.spacing.globalScale / 100.0) + ).let { Renderable.hoverable(hovered = Renderable.underlined(it), unhovered = it) }, + onClick = { + config::enabled.jumpToEditor() + reset() + currentPage = null + } + ), + blockBottomHover = false + ), + config.color.backgroundColor.toChromaColor(), + padding = 10 + ) + return fullRenderable } private fun reset() { inCustomWardrobe = false editMode = false displayRenderable = null - buttonsRenderable = null inventoryButton = null } @@ -308,6 +310,7 @@ object CustomWardrobe { "§bEdit", onClick = { reset() + lastEditClick = SimpleTimeMark.now() editMode = true } ) @@ -337,6 +340,7 @@ object CustomWardrobe { onClick = { inCustomWardrobe = false editMode = false + lastEditClick = SimpleTimeMark.now() update() } ) diff --git a/src/main/java/at/hannibal2/skyhanni/features/inventory/wardrobe/EstimatedWardrobePrice.kt b/src/main/java/at/hannibal2/skyhanni/features/inventory/wardrobe/EstimatedWardrobePrice.kt index 51baa176c059..7c2610c83ce4 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/inventory/wardrobe/EstimatedWardrobePrice.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/inventory/wardrobe/EstimatedWardrobePrice.kt @@ -3,9 +3,6 @@ package at.hannibal2.skyhanni.features.inventory.wardrobe import at.hannibal2.skyhanni.SkyHanniMod import at.hannibal2.skyhanni.config.ConfigUpdaterMigrator import at.hannibal2.skyhanni.events.LorenzToolTipEvent -import at.hannibal2.skyhanni.features.inventory.wardrobe.WardrobeAPI.inCustomWardrobe -import at.hannibal2.skyhanni.features.inventory.wardrobe.WardrobeAPI.inWardrobe -import at.hannibal2.skyhanni.features.inventory.wardrobe.WardrobeAPI.wardrobeSlots import at.hannibal2.skyhanni.utils.LorenzUtils import net.minecraftforge.fml.common.eventhandler.SubscribeEvent @@ -17,10 +14,10 @@ class EstimatedWardrobePrice { fun onTooltip(event: LorenzToolTipEvent) { if (!LorenzUtils.inSkyBlock) return if (!config.armor) return - if (!inWardrobe()) return - if (inCustomWardrobe) return + if (!WardrobeAPI.inWardrobe()) return + if (WardrobeAPI.inCustomWardrobe) return - val slot = wardrobeSlots.firstOrNull { + val slot = WardrobeAPI.wardrobeSlots.firstOrNull { event.slot.slotNumber == it.inventorySlot && it.isInCurrentPage() } ?: return @@ -32,9 +29,7 @@ class EstimatedWardrobePrice { var index = 3 tooltip.add(index++, "") - lore.forEach { - tooltip.add(index++, it) - } + tooltip.addAll(index, lore) } @SubscribeEvent diff --git a/src/main/java/at/hannibal2/skyhanni/features/inventory/wardrobe/WardrobeAPI.kt b/src/main/java/at/hannibal2/skyhanni/features/inventory/wardrobe/WardrobeAPI.kt index 8d18717d7097..00fcc300a605 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/inventory/wardrobe/WardrobeAPI.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/inventory/wardrobe/WardrobeAPI.kt @@ -137,8 +137,7 @@ object WardrobeAPI { val chestplateSlot = FIRST_CHESTPLATE_SLOT + slot val leggingsSlot = FIRST_LEGGINGS_SLOT + slot val bootsSlot = FIRST_BOOTS_SLOT + slot - list.add(WardrobeSlot(id, page, inventorySlot, helmetSlot, chestplateSlot, leggingsSlot, bootsSlot)) - id++ + list.add(WardrobeSlot(++id, page, inventorySlot, helmetSlot, chestplateSlot, leggingsSlot, bootsSlot)) } } wardrobeSlots = list @@ -169,11 +168,9 @@ object WardrobeAPI { fun onInventoryUpdate(event: InventoryUpdatedEvent) { if (!LorenzUtils.inSkyBlock) return - val inWardrobe = inventoryPattern.matchMatcher(event.inventoryName) { + inventoryPattern.matchMatcher(event.inventoryName) { currentPage = group("currentPage").formatInt() - true - } ?: false - if (!inWardrobe) return + } ?: return if (currentPage == null) return val itemsList = event.inventoryItems diff --git a/src/main/java/at/hannibal2/skyhanni/mixins/transformers/MixinRendererLivingEntity.java b/src/main/java/at/hannibal2/skyhanni/mixins/transformers/MixinRendererLivingEntity.java index 6a6b401f393b..c5659419af54 100644 --- a/src/main/java/at/hannibal2/skyhanni/mixins/transformers/MixinRendererLivingEntity.java +++ b/src/main/java/at/hannibal2/skyhanni/mixins/transformers/MixinRendererLivingEntity.java @@ -6,6 +6,7 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; + @Mixin(RendererLivingEntity.class) public class MixinRendererLivingEntity { diff --git a/src/main/java/at/hannibal2/skyhanni/utils/RenderUtils.kt b/src/main/java/at/hannibal2/skyhanni/utils/RenderUtils.kt index 0d5661b1599a..426ecf7a30e7 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/RenderUtils.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/RenderUtils.kt @@ -587,7 +587,7 @@ object RenderUtils { GlStateManager.pushMatrix() val (x, y) = transform() Renderable.withMousePosition(x, y) { - renderable.renderXAligned(0, 0, renderable.width) + renderable.render(0, 0) } GlStateManager.popMatrix() if (addToGuiManager) GuiEditManager.add(this, posLabel, renderable.width, 0) diff --git a/src/main/java/at/hannibal2/skyhanni/utils/renderables/Renderable.kt b/src/main/java/at/hannibal2/skyhanni/utils/renderables/Renderable.kt index c311ea994c4f..75253a0a331a 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/renderables/Renderable.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/renderables/Renderable.kt @@ -27,7 +27,6 @@ import at.hannibal2.skyhanni.utils.renderables.RenderableUtils.renderXAligned import at.hannibal2.skyhanni.utils.renderables.RenderableUtils.renderXYAligned import at.hannibal2.skyhanni.utils.renderables.RenderableUtils.renderYAligned import at.hannibal2.skyhanni.utils.shader.ShaderManager -import io.github.moulberry.notenoughupdates.util.Utils import io.github.notenoughupdates.moulconfig.gui.GuiScreenElementWrapper import net.minecraft.client.Minecraft import net.minecraft.client.gui.Gui @@ -296,10 +295,8 @@ interface Renderable { highlightsOnHoverSlots: List = emptyList(), onHover: () -> Unit = {}, ) = object : Renderable { - override val width: Int - get() = max(hovered.width, unhovered.width) - override val height: Int - get() = max(hovered.height, unhovered.height) + override val width = max(hovered.width, unhovered.width) + override val height = max(hovered.height, unhovered.height) override val horizontalAlign get() = if (isHovered) hovered.horizontalAlign else unhovered.horizontalAlign override val verticalAlign get() = if (isHovered) hovered.verticalAlign else unhovered.verticalAlign @@ -562,14 +559,14 @@ interface Renderable { } // TODO use this to render current boosted crop in next jacob contest crops - fun Renderable.renderBounds(color: Color = LorenzColor.GREEN.toColor()) = object : Renderable { + fun Renderable.renderBounds(color: Int = LorenzColor.GREEN.toColor().withAlpha(100)) = object : Renderable { override val width = this@renderBounds.width override val height = this@renderBounds.height override val horizontalAlign = this@renderBounds.horizontalAlign override val verticalAlign = this@renderBounds.verticalAlign override fun render(posX: Int, posY: Int) { - Gui.drawRect(0, 0, width, height, color.withAlpha(100)) + Gui.drawRect(0, 0, width, height, color) this@renderBounds.render(posX, posY) } @@ -854,16 +851,14 @@ interface Renderable { val playerY = height / 2 + playerHeight / 2 + padding override fun render(posX: Int, posY: Int) { - GlStateManager.color(1f, 1f, 1f, 1f) if (color != null) RenderLivingEntityHelper.setEntityColor(player, color, colorCondition) - val mouse = currentRenderPassMousePosition + val mouse = currentRenderPassMousePosition ?: return val mouseXRelativeToPlayer = - if (followMouse) (posX + playerX - (mouse?.first ?: Utils.getMouseX())).toFloat() else eyesX + if (followMouse) (posX + playerX - mouse.first).toFloat() else eyesX val mouseYRelativeToPlayer = - if (followMouse) (posY + playerY - (mouse?.second - ?: Utils.getMouseY()) - 1.62 * entityScale).toFloat() else eyesY - GlStateManager.translate(0f, 0f, 500f) + if (followMouse) (posY + playerY - mouse.second - 1.62 * entityScale).toFloat() else eyesY + GlStateManager.translate(0f, 0f, 100f) drawEntityOnScreen( playerX, playerY, @@ -872,7 +867,7 @@ interface Renderable { mouseYRelativeToPlayer, player ) - GlStateManager.translate(0f, 0f, -500f) + GlStateManager.translate(0f, 0f, -100f) } } }