aboutsummaryrefslogtreecommitdiff
path: root/src/main/kotlin/moe/nea/ledger/ItemIdProvider.kt
blob: 43f2cb74022339c1458dc8da311c2c9d818b7d69 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
package moe.nea.ledger

import moe.nea.ledger.events.BeforeGuiAction
import net.minecraft.client.gui.inventory.GuiChest
import net.minecraft.inventory.ContainerChest
import net.minecraft.nbt.NBTTagCompound
import net.minecraftforge.client.event.GuiScreenEvent
import net.minecraftforge.common.MinecraftForge
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
import org.lwjgl.input.Mouse

class ItemIdProvider {

	@SubscribeEvent
	fun onMouseInput(event: GuiScreenEvent.MouseInputEvent.Pre) {
		if (Mouse.getEventButton() == -1) return
		MinecraftForge.EVENT_BUS.post(BeforeGuiAction(event.gui))
	}

	@SubscribeEvent
	fun onKeyInput(event: GuiScreenEvent.KeyboardInputEvent.Pre) {
		MinecraftForge.EVENT_BUS.post(BeforeGuiAction(event.gui))
	}

	private val knownNames = mutableMapOf<String, ItemId>()

	@SubscribeEvent
	fun saveInventoryIds(event: BeforeGuiAction) {
		val chest = (event.gui as? GuiChest) ?: return
		val slots = chest.inventorySlots as ContainerChest
		val chestName = slots.lowerChestInventory.name.unformattedString()
		val isOrderMenu = chestName == "Your Bazaar Orders" || chestName == "Co-op Bazaar Orders"
		slots.inventorySlots.forEach {
			val stack = it.stack ?: return@forEach
			val nbt = stack.tagCompound ?: NBTTagCompound()
			val display = nbt.getCompoundTag("display")
			var name = display.getString("Name").unformattedString()
			if (isOrderMenu)
				name = name.removePrefix("BUY ").removePrefix("SELL ")
			name = name.trim()
			val id = stack.getInternalId()
			if (id != null && name.isNotBlank()) {
				knownNames[name] = id
			}
		}
	}

	fun findForName(name: String): ItemId? {
		return knownNames[name]
	}

}