feat: Highlight century cake slice players
This commit is contained in:
@@ -1,22 +1,31 @@
|
||||
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.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.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
|
||||
@@ -31,6 +40,7 @@ import moe.nea.firmament.util.ClipboardUtils
|
||||
import moe.nea.firmament.util.MC
|
||||
import moe.nea.firmament.util.focusedItemStack
|
||||
import moe.nea.firmament.util.mc.IntrospectableItemModelManager
|
||||
import moe.nea.firmament.util.mc.SNbtFormatter
|
||||
import moe.nea.firmament.util.mc.SNbtFormatter.Companion.toPrettyString
|
||||
import moe.nea.firmament.util.mc.displayNameAccordingToNbt
|
||||
import moe.nea.firmament.util.mc.loreAccordingToNbt
|
||||
@@ -88,6 +98,11 @@ object PowerUserTools : FirmamentFeature {
|
||||
}
|
||||
|
||||
fun showEntity(target: Entity) {
|
||||
val nbt = NbtPredicate.entityToNbt(target)
|
||||
nbt.remove("Inventory")
|
||||
nbt.put("StyledName", TextCodecs.CODEC.encodeStart(NbtOps.INSTANCE, target.styledDisplayName).orThrow)
|
||||
println(SNbtFormatter.prettify(nbt))
|
||||
ClipboardUtils.setTextContent(SNbtFormatter.prettify(nbt))
|
||||
MC.sendChat(Text.translatable("firmament.poweruser.entity.type", target.type))
|
||||
MC.sendChat(Text.translatable("firmament.poweruser.entity.name", target.name))
|
||||
MC.sendChat(Text.stringifiedTranslatable("firmament.poweruser.entity.position", target.pos))
|
||||
|
||||
@@ -0,0 +1,63 @@
|
||||
package moe.nea.firmament.features.events.anniversity
|
||||
|
||||
import java.util.Optional
|
||||
import me.shedaniel.math.Color
|
||||
import kotlin.jvm.optionals.getOrNull
|
||||
import net.minecraft.entity.player.PlayerEntity
|
||||
import net.minecraft.text.Style
|
||||
import net.minecraft.util.Formatting
|
||||
import moe.nea.firmament.annotations.Subscribe
|
||||
import moe.nea.firmament.events.EntityRenderTintEvent
|
||||
import moe.nea.firmament.gui.config.ManagedConfig
|
||||
import moe.nea.firmament.util.MC
|
||||
import moe.nea.firmament.util.SkyblockId
|
||||
import moe.nea.firmament.util.render.TintedOverlayTexture
|
||||
import moe.nea.firmament.util.skyBlockId
|
||||
import moe.nea.firmament.util.skyblock.SkyBlockItems
|
||||
|
||||
object CenturyRaffleFeatures {
|
||||
object TConfig : ManagedConfig("centuryraffle", Category.EVENTS) {
|
||||
val highlightPlayersForSlice by toggle("highlight-cake-players") { true }
|
||||
// val highlightAllPlayers by toggle("highlight-all-cake-players") { true }
|
||||
}
|
||||
|
||||
val cakeIcon = "⛃"
|
||||
|
||||
val cakeColors = listOf(
|
||||
CakeTeam(SkyBlockItems.SLICE_OF_BLUEBERRY_CAKE, Formatting.BLUE),
|
||||
CakeTeam(SkyBlockItems.SLICE_OF_CHEESECAKE, Formatting.YELLOW),
|
||||
CakeTeam(SkyBlockItems.SLICE_OF_GREEN_VELVET_CAKE, Formatting.GREEN),
|
||||
CakeTeam(SkyBlockItems.SLICE_OF_RED_VELVET_CAKE, Formatting.RED),
|
||||
CakeTeam(SkyBlockItems.SLICE_OF_STRAWBERRY_SHORTCAKE, Formatting.LIGHT_PURPLE),
|
||||
)
|
||||
|
||||
data class CakeTeam(
|
||||
val id: SkyblockId,
|
||||
val formatting: Formatting,
|
||||
) {
|
||||
val searchedTextRgb = formatting.colorValue!!
|
||||
val brightenedRgb = Color.ofOpaque(searchedTextRgb)//.brighter(2.0)
|
||||
val tintOverlay by lazy {
|
||||
TintedOverlayTexture().setColor(brightenedRgb)
|
||||
}
|
||||
}
|
||||
|
||||
val sliceToColor = cakeColors.associateBy { it.id }
|
||||
|
||||
@Subscribe
|
||||
fun onEntityRender(event: EntityRenderTintEvent) {
|
||||
if (!TConfig.highlightPlayersForSlice) return
|
||||
val requestedCakeTeam = sliceToColor[MC.stackInHand?.skyBlockId] ?: return
|
||||
// TODO: cache the requested color
|
||||
val player = event.entity as? PlayerEntity ?: return
|
||||
val cakeColor: Style = player.styledDisplayName.visit(
|
||||
{ style, text ->
|
||||
if (text == cakeIcon) Optional.of(style)
|
||||
else Optional.empty()
|
||||
}, Style.EMPTY).getOrNull() ?: return
|
||||
if (cakeColor.color?.rgb == requestedCakeTeam.searchedTextRgb) {
|
||||
event.renderState.overlayTexture_firmament = requestedCakeTeam.tintOverlay
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user