optional item/block tags display in tooltips

This commit is contained in:
YuRaNnNzZZ 2023-10-24 08:01:34 +03:00
parent c4dbc79707
commit ff547f9a5e
Signed by: YuRaNnNzZZ
GPG Key ID: 5F71738C85A6006D
5 changed files with 60 additions and 0 deletions

View File

@ -865,6 +865,11 @@ private fun gui(provider: MatteryLanguageProvider) {
gui("slot_filter.hint", "To remove slot filter press Ctrl + LMB")
gui("tooltip.enum.active", "> %s")
gui("debug.tags.help", "Hold Shift to display tags")
gui("debug.tags.item.title", "Item tags:")
gui("debug.tags.block.title", "Block tags:")
gui("debug.tags.tag.entry", " - %s")
}
}

View File

@ -862,6 +862,10 @@ private fun gui(provider: MatteryLanguageProvider) {
gui("slot_filter.filtered", "Данный слот отфильтрован для автоматизации")
gui("slot_filter.forbidden", "Данный слот запрещён для взаимодействия средствами автоматизации")
gui("slot_filter.hint", "Для удаления фильтра нажмите Ctrl + ЛКМ")
gui("debug.tags.help", "Удерживайте Shift для отображения тегов")
gui("debug.tags.item.title", "Теги предмета:")
gui("debug.tags.block.title", "Теги блока:")
}
}

View File

@ -242,6 +242,7 @@ public final class OverdriveThatMatters {
EVENT_BUS.addListener(EventPriority.LOWEST, ClientTickHandlerKt::onClientTick);
EVENT_BUS.addListener(EventPriority.HIGHEST, ClientTickHandlerKt::onClientConnected);
EVENT_BUS.addListener(EventPriority.HIGHEST, ClientTickHandlerKt::onClientDisconnected);
EVENT_BUS.addListener(EventPriority.NORMAL, ClientEventHandlerKt::tooltipEvent);
EVENT_BUS.addListener(EventPriority.NORMAL, QuantumBatteryItem.Companion::clientDisconnect);

View File

@ -2,16 +2,22 @@ package ru.dbotthepony.mc.otm.client
import com.mojang.blaze3d.platform.InputConstants
import it.unimi.dsi.fastutil.ints.Int2ObjectArrayMap
import net.minecraft.ChatFormatting
import net.minecraft.client.gui.components.events.GuiEventListener
import net.minecraft.client.gui.screens.Screen
import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen
import net.minecraft.client.gui.screens.inventory.InventoryScreen
import net.minecraft.tags.TagKey
import net.minecraft.world.inventory.InventoryMenu
import net.minecraft.world.inventory.Slot
import net.minecraft.world.item.BlockItem
import net.minecraft.world.item.Item
import net.minecraft.world.level.block.Block
import net.minecraftforge.client.event.MovementInputUpdateEvent
import net.minecraftforge.client.event.ScreenEvent
import net.minecraftforge.client.event.ScreenEvent.MouseDragged
import net.minecraftforge.client.event.ScreenEvent.MouseScrolled
import net.minecraftforge.event.entity.player.ItemTooltipEvent
import ru.dbotthepony.mc.otm.config.ClientConfig
import ru.dbotthepony.mc.otm.android.feature.JumpBoostFeature
import ru.dbotthepony.mc.otm.capability.MatteryPlayerCapability
@ -27,6 +33,7 @@ import ru.dbotthepony.mc.otm.client.screen.panels.Panel2Widget
import ru.dbotthepony.mc.otm.compat.vanilla.InventoryScrollPacket
import ru.dbotthepony.mc.otm.compat.cos.isCosmeticArmorScreen
import ru.dbotthepony.mc.otm.core.TranslatableComponent
import ru.dbotthepony.mc.otm.core.addAll
import ru.dbotthepony.mc.otm.core.math.integerDivisionUp
import ru.dbotthepony.mc.otm.menu.MatteryMenu
import ru.dbotthepony.mc.otm.network.MenuNetworkChannel
@ -253,3 +260,42 @@ fun onScreenOpen(event: ScreenEvent.Opening) {
event.newScreen = ExopackInventoryScreen(player.exoPackMenu)
}
}
private val TOOLTIP_TAG_DISPLAY_HELP = TranslatableComponent("otm.gui.debug.tags.help").withStyle(ChatFormatting.GRAY)
private val TOOLTIP_TAG_DISPLAY_ITEM_TITLE = TranslatableComponent("otm.gui.debug.tags.item.title").withStyle(ChatFormatting.DARK_GRAY)
private val TOOLTIP_TAG_DISPLAY_BLOCK_TITLE = TranslatableComponent("otm.gui.debug.tags.block.title").withStyle(ChatFormatting.DARK_GRAY)
fun tooltipEvent(event: ItemTooltipEvent) {
if (event.flags.isAdvanced && ClientConfig.TOOLTIP_DISPLAY_TAGS && !event.itemStack.isEmpty) {
val itemTags = ArrayList<TagKey<Item>>()
if (event.itemStack.tags.count() > 0) {
itemTags.addAll(event.itemStack.tags)
}
val blockTags = ArrayList<TagKey<Block>>()
if (event.itemStack.item is BlockItem) {
blockTags.addAll((event.itemStack.item as BlockItem).block.defaultBlockState().tags)
}
if (itemTags.isNotEmpty() || blockTags.isNotEmpty()) {
if (!minecraft.window.isShiftDown) {
event.toolTip.add(TOOLTIP_TAG_DISPLAY_HELP)
return
}
}
if (itemTags.isNotEmpty()) {
event.toolTip.add(TOOLTIP_TAG_DISPLAY_ITEM_TITLE)
for (tag in itemTags) {
event.toolTip.add(TranslatableComponent("otm.gui.debug.tags.tag.entry", tag.location).withStyle(ChatFormatting.DARK_GRAY))
}
}
if (blockTags.isNotEmpty()) {
event.toolTip.add(TOOLTIP_TAG_DISPLAY_BLOCK_TITLE)
for (tag in blockTags) {
event.toolTip.add(TranslatableComponent("otm.gui.debug.tags.tag.entry", tag.location).withStyle(ChatFormatting.DARK_GRAY))
}
}
}
}

View File

@ -28,4 +28,8 @@ object ClientConfig : AbstractConfig("client", ModConfig.Type.CLIENT) {
.comment("Display redstone control button using items instead of custom sprites")
.comment("For those who want it.")
.define("REDSTONE_CONTROLS_ITEM_ICONS", false)
var TOOLTIP_DISPLAY_TAGS: Boolean by builder
.comment("Display block/item tags in advanced item tooltips")
.define("TOOLTIP_DISPLAY_TAGS", false)
}