diff options
Diffstat (limited to 'src/main/kotlin/features/debug/PowerUserTools.kt')
| -rw-r--r-- | src/main/kotlin/features/debug/PowerUserTools.kt | 78 | 
1 files changed, 53 insertions, 25 deletions
diff --git a/src/main/kotlin/features/debug/PowerUserTools.kt b/src/main/kotlin/features/debug/PowerUserTools.kt index 251fc8b..a549f7e 100644 --- a/src/main/kotlin/features/debug/PowerUserTools.kt +++ b/src/main/kotlin/features/debug/PowerUserTools.kt @@ -1,44 +1,40 @@  package moe.nea.firmament.features.debug -import com.mojang.serialization.Codec -import com.mojang.serialization.DynamicOps  import com.mojang.serialization.JsonOps -import com.mojang.serialization.codecs.RecordCodecBuilder  import kotlin.jvm.optionals.getOrNull  import net.minecraft.block.SkullBlock  import net.minecraft.block.entity.SkullBlockEntity  import net.minecraft.component.DataComponentTypes  import net.minecraft.component.type.ProfileComponent  import net.minecraft.entity.Entity -import net.minecraft.entity.EntityType  import net.minecraft.entity.LivingEntity  import net.minecraft.item.ItemStack  import net.minecraft.item.Items -import net.minecraft.nbt.NbtCompound +import net.minecraft.nbt.NbtList  import net.minecraft.nbt.NbtOps -import net.minecraft.nbt.NbtString  import net.minecraft.predicate.NbtPredicate  import net.minecraft.text.Text  import net.minecraft.text.TextCodecs  import net.minecraft.util.Identifier +import net.minecraft.util.Nameable  import net.minecraft.util.hit.BlockHitResult  import net.minecraft.util.hit.EntityHitResult  import net.minecraft.util.hit.HitResult -import net.minecraft.util.math.Position -import net.minecraft.util.math.Vec3d  import moe.nea.firmament.annotations.Subscribe  import moe.nea.firmament.events.CustomItemModelEvent  import moe.nea.firmament.events.HandledScreenKeyPressedEvent  import moe.nea.firmament.events.ItemTooltipEvent  import moe.nea.firmament.events.ScreenChangeEvent +import moe.nea.firmament.events.SlotRenderEvents  import moe.nea.firmament.events.TickEvent  import moe.nea.firmament.events.WorldKeyboardEvent -import moe.nea.firmament.features.FirmamentFeature -import moe.nea.firmament.gui.config.ManagedConfig  import moe.nea.firmament.mixins.accessor.AccessorHandledScreen  import moe.nea.firmament.util.ClipboardUtils  import moe.nea.firmament.util.MC +import moe.nea.firmament.util.data.Config +import moe.nea.firmament.util.data.ManagedConfig  import moe.nea.firmament.util.focusedItemStack +import moe.nea.firmament.util.grey  import moe.nea.firmament.util.mc.IntrospectableItemModelManager  import moe.nea.firmament.util.mc.SNbtFormatter  import moe.nea.firmament.util.mc.SNbtFormatter.Companion.toPrettyString @@ -46,11 +42,13 @@ import moe.nea.firmament.util.mc.displayNameAccordingToNbt  import moe.nea.firmament.util.mc.iterableArmorItems  import moe.nea.firmament.util.mc.loreAccordingToNbt  import moe.nea.firmament.util.skyBlockId +import moe.nea.firmament.util.tr -object PowerUserTools : FirmamentFeature { -	override val identifier: String +object PowerUserTools { +	val identifier: String  		get() = "power-user" +	@Config  	object TConfig : ManagedConfig(identifier, Category.DEV) {  		val showItemIds by toggle("show-item-id") { false }  		val copyItemId by keyBindingWithDefaultUnbound("copy-item-id") @@ -60,22 +58,26 @@ object PowerUserTools : FirmamentFeature {  		val copySkullTexture by keyBindingWithDefaultUnbound("copy-skull-texture")  		val copyEntityData by keyBindingWithDefaultUnbound("entity-data")  		val copyItemStack by keyBindingWithDefaultUnbound("copy-item-stack") +		val copyTitle by keyBindingWithDefaultUnbound("copy-title") +		val exportItemStackToRepo by keyBindingWithDefaultUnbound("export-item-stack") +		val exportUIRecipes by keyBindingWithDefaultUnbound("export-recipe") +		val exportNpcLocation by keyBindingWithDefaultUnbound("export-npc-location") +		val highlightNonOverlayItems by toggle("highlight-non-overlay") { false } +		val dontHighlightSemicolonItems by toggle("dont-highlight-semicolon-items") { false } +		val showSlotNumbers by keyBindingWithDefaultUnbound("slot-numbers") +		val autoCopyAnimatedSkins by toggle("copy-animated-skins") { false }  	} -	override val config -		get() = TConfig -  	var lastCopiedStack: Pair<ItemStack, Text>? = null  		set(value) {  			field = value -			if (value != null) lastCopiedStackViewTime = true +			if (value != null) lastCopiedStackViewTime = 2  		} -	var lastCopiedStackViewTime = false +	var lastCopiedStackViewTime = 0  	@Subscribe  	fun resetLastCopiedStack(event: TickEvent) { -		if (!lastCopiedStackViewTime) lastCopiedStack = null -		lastCopiedStackViewTime = false +		if (lastCopiedStackViewTime-- < 0) lastCopiedStack = null  	}  	@Subscribe @@ -88,6 +90,20 @@ object PowerUserTools : FirmamentFeature {  	}  	@Subscribe +	fun onRender(event: SlotRenderEvents.After) { +		if (TConfig.showSlotNumbers.isPressed()) { +			event.context.drawText( +				MC.font, +				event.slot.id.toString(), event.slot.x, event.slot.y, 0xFF00FF00.toInt(), true +			) +			event.context.drawText( +				MC.font, +				event.slot.index.toString(), event.slot.x, event.slot.y + MC.font.fontHeight, 0xFFFF0000.toInt(), true +			) +		} +	} + +	@Subscribe  	fun onEntityInfo(event: WorldKeyboardEvent) {  		if (!event.matches(TConfig.copyEntityData)) return  		val target = (MC.instance.crosshairTarget as? EntityHitResult)?.entity @@ -180,11 +196,23 @@ object PowerUserTools : FirmamentFeature {  				Pair(item, Text.stringifiedTranslatable("firmament.tooltip.copied.skull-id", skullTexture.toString()))  			println("Copied skull id: $skullTexture")  		} else if (it.matches(TConfig.copyItemStack)) { -			ClipboardUtils.setTextContent( -				ItemStack.CODEC -					.encodeStart(MC.currentOrDefaultRegistries.getOps(NbtOps.INSTANCE), item) -					.orThrow.toPrettyString()) +			val nbt = ItemStack.CODEC +				.encodeStart(MC.currentOrDefaultRegistries.getOps(NbtOps.INSTANCE), item) +				.orThrow +			ClipboardUtils.setTextContent(nbt.toPrettyString())  			lastCopiedStack = Pair(item, Text.stringifiedTranslatable("firmament.tooltip.copied.stack")) +		} else if (it.matches(TConfig.copyTitle)) { +			val allTitles = NbtList() +			val inventoryNames = +				it.screen.screenHandler.slots +					.mapNotNullTo(mutableSetOf()) { it.inventory } +					.filterIsInstance<Nameable>() +					.map { it.name } +			for (it in listOf(it.screen.title) + inventoryNames) { +				allTitles.add(TextCodecs.CODEC.encodeStart(NbtOps.INSTANCE, it).result().getOrNull()!!) +			} +			ClipboardUtils.setTextContent(allTitles.toPrettyString()) +			MC.sendChat(tr("firmament.power-user.title.copied", "Copied screen and inventory titles"))  		}  	} @@ -217,14 +245,14 @@ object PowerUserTools : FirmamentFeature {  	fun addItemId(it: ItemTooltipEvent) {  		if (TConfig.showItemIds) {  			val id = it.stack.skyBlockId ?: return -			it.lines.add(Text.stringifiedTranslatable("firmament.tooltip.skyblockid", id.neuItem)) +			it.lines.add(Text.stringifiedTranslatable("firmament.tooltip.skyblockid", id.neuItem).grey())  		}  		val (item, text) = lastCopiedStack ?: return  		if (!ItemStack.areEqual(item, it.stack)) {  			lastCopiedStack = null  			return  		} -		lastCopiedStackViewTime = true +		lastCopiedStackViewTime = 0  		it.lines.add(text)  	}  | 
