refactoring
This commit is contained in:
@@ -15,8 +15,6 @@ object NotEnoughUpdates {
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
fun init() {
|
||||
|
||||
}
|
||||
|
||||
@@ -1,37 +1,15 @@
|
||||
package moe.nea.notenoughupdates.rei
|
||||
|
||||
import com.mojang.blaze3d.vertex.PoseStack
|
||||
import com.mojang.serialization.Dynamic
|
||||
import io.github.moulberry.repo.data.NEUItem
|
||||
import me.shedaniel.math.Point
|
||||
import me.shedaniel.math.Rectangle
|
||||
import me.shedaniel.rei.api.client.entry.renderer.EntryRenderer
|
||||
import me.shedaniel.rei.api.client.gui.widgets.Tooltip
|
||||
import me.shedaniel.rei.api.client.plugins.REIClientPlugin
|
||||
import me.shedaniel.rei.api.client.registry.entry.EntryRegistry
|
||||
import me.shedaniel.rei.api.common.entry.EntrySerializer
|
||||
import me.shedaniel.rei.api.common.entry.EntryStack
|
||||
import me.shedaniel.rei.api.common.entry.comparison.ComparisonContext
|
||||
import me.shedaniel.rei.api.common.entry.type.EntryDefinition
|
||||
import me.shedaniel.rei.api.common.entry.type.EntryType
|
||||
import me.shedaniel.rei.api.common.entry.type.EntryTypeRegistry
|
||||
import me.shedaniel.rei.api.common.entry.type.VanillaEntryTypes
|
||||
import moe.nea.notenoughupdates.LegacyTagParser
|
||||
import moe.nea.notenoughupdates.NotEnoughUpdates.neuRepo
|
||||
import net.minecraft.ChatFormatting
|
||||
import net.minecraft.nbt.CompoundTag
|
||||
import net.minecraft.nbt.NbtOps
|
||||
import net.minecraft.nbt.StringTag
|
||||
import net.minecraft.network.chat.Component
|
||||
import net.minecraft.network.chat.TextComponent
|
||||
import moe.nea.notenoughupdates.repo.ItemCache.asItemStack
|
||||
import net.minecraft.resources.ResourceLocation
|
||||
import net.minecraft.tags.TagKey
|
||||
import net.minecraft.util.datafix.DataFixers.getDataFixer
|
||||
import net.minecraft.util.datafix.fixes.References
|
||||
import net.minecraft.world.item.ItemStack
|
||||
import net.minecraft.world.item.Items
|
||||
import java.util.concurrent.ConcurrentHashMap
|
||||
import java.util.stream.Stream
|
||||
|
||||
|
||||
class NEUReiPlugin : REIClientPlugin {
|
||||
@@ -42,142 +20,12 @@ class NEUReiPlugin : REIClientPlugin {
|
||||
return EntryStack.of(VanillaEntryTypes.ITEM, value.asItemStack())
|
||||
}
|
||||
|
||||
fun ItemStack.appendLore(args: List<Component>) {
|
||||
val compoundTag = getOrCreateTagElement("display")
|
||||
val loreList = compoundTag.getList("Lore", StringTag.TAG_STRING.toInt())
|
||||
for (arg in args) {
|
||||
loreList.add(StringTag.valueOf(Component.Serializer.toJson(arg)))
|
||||
}
|
||||
compoundTag.put("Lore", loreList)
|
||||
}
|
||||
|
||||
val cache: MutableMap<String, ItemStack> = ConcurrentHashMap()
|
||||
|
||||
fun NEUItem.asItemStackNow(): ItemStack {
|
||||
val df = getDataFixer()
|
||||
val itemTag1_8_9 = CompoundTag()
|
||||
itemTag1_8_9.put("tag", LegacyTagParser.parse(this.nbttag))
|
||||
itemTag1_8_9.putString("id", this.minecraftItemId)
|
||||
itemTag1_8_9.putByte("Count", 1)
|
||||
itemTag1_8_9.putShort("Damage", this.damage.toShort())
|
||||
val itemTag_modern = try {
|
||||
df.update(
|
||||
References.ITEM_STACK,
|
||||
Dynamic(NbtOps.INSTANCE, itemTag1_8_9),
|
||||
99,
|
||||
2975
|
||||
).value as CompoundTag
|
||||
} catch (e: Exception) {
|
||||
e.printStackTrace()
|
||||
return ItemStack(Items.PAINTING).apply {
|
||||
appendLore(listOf(TextComponent("Exception rendering item: $skyblockItemId")))
|
||||
}
|
||||
}
|
||||
val itemInstance = ItemStack.of(itemTag_modern)
|
||||
return itemInstance.also {
|
||||
if (false) it.appendLore(
|
||||
listOf(
|
||||
TextComponent("Old: $minecraftItemId").withStyle {
|
||||
it.withItalic(false).withColor(ChatFormatting.RED)
|
||||
},
|
||||
TextComponent("Modern: $itemTag_modern").withStyle {
|
||||
it.withItalic(false).withColor(ChatFormatting.RED)
|
||||
},
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
fun NEUItem.asItemStack(): ItemStack {
|
||||
var s = cache[this.skyblockItemId]
|
||||
if (s == null) {
|
||||
s = asItemStackNow()
|
||||
cache[this.skyblockItemId] = s
|
||||
}
|
||||
return s
|
||||
}
|
||||
|
||||
|
||||
val hehe = ResourceLocation("notenoughupdates", "skyblockitems")
|
||||
}
|
||||
|
||||
object SBItemEntryDefinition : EntryDefinition<NEUItem> {
|
||||
override fun equals(o1: NEUItem?, o2: NEUItem?, context: ComparisonContext?): Boolean {
|
||||
return o1 == o2
|
||||
}
|
||||
|
||||
override fun cheatsAs(entry: EntryStack<NEUItem>?, value: NEUItem?): ItemStack? {
|
||||
return value?.asItemStack()
|
||||
}
|
||||
|
||||
override fun getValueType(): Class<NEUItem> = NEUItem::class.java
|
||||
override fun getType(): EntryType<NEUItem> =
|
||||
EntryType.deferred(hehe)
|
||||
|
||||
override fun getRenderer(): EntryRenderer<NEUItem> = object : EntryRenderer<NEUItem> {
|
||||
override fun render(
|
||||
entry: EntryStack<NEUItem>,
|
||||
matrices: PoseStack,
|
||||
bounds: Rectangle,
|
||||
mouseX: Int,
|
||||
mouseY: Int,
|
||||
delta: Float
|
||||
) {
|
||||
VanillaEntryTypes.ITEM.definition.renderer
|
||||
.render(
|
||||
entry.asItemEntry(),
|
||||
matrices, bounds, mouseX, mouseY, delta
|
||||
)
|
||||
}
|
||||
|
||||
override fun getTooltip(entry: EntryStack<NEUItem>, mouse: Point): Tooltip? {
|
||||
return VanillaEntryTypes.ITEM.definition.renderer
|
||||
.getTooltip(entry.asItemEntry(), mouse)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
override fun getSerializer(): EntrySerializer<NEUItem>? {
|
||||
return null
|
||||
}
|
||||
|
||||
override fun getTagsFor(entry: EntryStack<NEUItem>?, value: NEUItem?): Stream<out TagKey<*>> {
|
||||
return Stream.empty()
|
||||
}
|
||||
|
||||
override fun asFormattedText(entry: EntryStack<NEUItem>, value: NEUItem): Component {
|
||||
return VanillaEntryTypes.ITEM.definition.asFormattedText(entry.asItemEntry(), value.asItemStack())
|
||||
}
|
||||
|
||||
override fun hash(entry: EntryStack<NEUItem>, value: NEUItem, context: ComparisonContext): Long {
|
||||
return value.skyblockItemId.hashCode().toLong()
|
||||
}
|
||||
|
||||
override fun wildcard(entry: EntryStack<NEUItem>, value: NEUItem): NEUItem {
|
||||
return value
|
||||
}
|
||||
|
||||
override fun normalize(entry: EntryStack<NEUItem>, value: NEUItem): NEUItem {
|
||||
return value
|
||||
}
|
||||
|
||||
override fun copy(entry: EntryStack<NEUItem>?, value: NEUItem): NEUItem {
|
||||
return value
|
||||
}
|
||||
|
||||
override fun isEmpty(entry: EntryStack<NEUItem>?, value: NEUItem?): Boolean {
|
||||
return false
|
||||
}
|
||||
|
||||
override fun getIdentifier(entry: EntryStack<NEUItem>?, value: NEUItem): ResourceLocation {
|
||||
return ResourceLocation("skyblockitem", value.skyblockItemId.lowercase().replace(";", "__"))
|
||||
}
|
||||
|
||||
|
||||
val SKYBLOCK_ITEM_TYPE_ID = ResourceLocation("notenoughupdates", "skyblockitems")
|
||||
}
|
||||
|
||||
override fun registerEntryTypes(registry: EntryTypeRegistry) {
|
||||
registry.register(hehe, SBItemEntryDefinition)
|
||||
registry.register(SKYBLOCK_ITEM_TYPE_ID, SBItemEntryDefinition)
|
||||
}
|
||||
|
||||
override fun registerEntries(registry: EntryRegistry) {
|
||||
|
||||
@@ -0,0 +1,97 @@
|
||||
package moe.nea.notenoughupdates.rei
|
||||
|
||||
import com.mojang.blaze3d.vertex.PoseStack
|
||||
import io.github.moulberry.repo.data.NEUItem
|
||||
import me.shedaniel.math.Point
|
||||
import me.shedaniel.math.Rectangle
|
||||
import me.shedaniel.rei.api.client.entry.renderer.EntryRenderer
|
||||
import me.shedaniel.rei.api.client.gui.widgets.Tooltip
|
||||
import me.shedaniel.rei.api.common.entry.EntrySerializer
|
||||
import me.shedaniel.rei.api.common.entry.EntryStack
|
||||
import me.shedaniel.rei.api.common.entry.comparison.ComparisonContext
|
||||
import me.shedaniel.rei.api.common.entry.type.EntryDefinition
|
||||
import me.shedaniel.rei.api.common.entry.type.EntryType
|
||||
import me.shedaniel.rei.api.common.entry.type.VanillaEntryTypes
|
||||
import moe.nea.notenoughupdates.rei.NEUReiPlugin.Companion.asItemEntry
|
||||
import moe.nea.notenoughupdates.repo.ItemCache.asItemStack
|
||||
import moe.nea.notenoughupdates.repo.ItemCache.getResourceLocation
|
||||
import net.minecraft.network.chat.Component
|
||||
import net.minecraft.resources.ResourceLocation
|
||||
import net.minecraft.tags.TagKey
|
||||
import net.minecraft.world.item.ItemStack
|
||||
import java.util.stream.Stream
|
||||
|
||||
object SBItemEntryDefinition : EntryDefinition<NEUItem> {
|
||||
override fun equals(o1: NEUItem?, o2: NEUItem?, context: ComparisonContext?): Boolean {
|
||||
return o1 == o2
|
||||
}
|
||||
|
||||
override fun cheatsAs(entry: EntryStack<NEUItem>?, value: NEUItem?): ItemStack? {
|
||||
return value?.asItemStack()
|
||||
}
|
||||
|
||||
override fun getValueType(): Class<NEUItem> = NEUItem::class.java
|
||||
override fun getType(): EntryType<NEUItem> =
|
||||
EntryType.deferred(NEUReiPlugin.SKYBLOCK_ITEM_TYPE_ID)
|
||||
|
||||
override fun getRenderer(): EntryRenderer<NEUItem> = object : EntryRenderer<NEUItem> {
|
||||
override fun render(
|
||||
entry: EntryStack<NEUItem>,
|
||||
matrices: PoseStack,
|
||||
bounds: Rectangle,
|
||||
mouseX: Int,
|
||||
mouseY: Int,
|
||||
delta: Float
|
||||
) {
|
||||
VanillaEntryTypes.ITEM.definition.renderer
|
||||
.render(
|
||||
entry.asItemEntry(),
|
||||
matrices, bounds, mouseX, mouseY, delta
|
||||
)
|
||||
}
|
||||
|
||||
override fun getTooltip(entry: EntryStack<NEUItem>, mouse: Point): Tooltip? {
|
||||
return VanillaEntryTypes.ITEM.definition.renderer
|
||||
.getTooltip(entry.asItemEntry(), mouse)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
override fun getSerializer(): EntrySerializer<NEUItem>? {
|
||||
return null
|
||||
}
|
||||
|
||||
override fun getTagsFor(entry: EntryStack<NEUItem>?, value: NEUItem?): Stream<out TagKey<*>> {
|
||||
return Stream.empty()
|
||||
}
|
||||
|
||||
override fun asFormattedText(entry: EntryStack<NEUItem>, value: NEUItem): Component {
|
||||
return VanillaEntryTypes.ITEM.definition.asFormattedText(entry.asItemEntry(), value.asItemStack())
|
||||
}
|
||||
|
||||
override fun hash(entry: EntryStack<NEUItem>, value: NEUItem, context: ComparisonContext): Long {
|
||||
return value.skyblockItemId.hashCode().toLong()
|
||||
}
|
||||
|
||||
override fun wildcard(entry: EntryStack<NEUItem>, value: NEUItem): NEUItem {
|
||||
return value
|
||||
}
|
||||
|
||||
override fun normalize(entry: EntryStack<NEUItem>, value: NEUItem): NEUItem {
|
||||
return value
|
||||
}
|
||||
|
||||
override fun copy(entry: EntryStack<NEUItem>?, value: NEUItem): NEUItem {
|
||||
return value
|
||||
}
|
||||
|
||||
override fun isEmpty(entry: EntryStack<NEUItem>?, value: NEUItem?): Boolean {
|
||||
return false
|
||||
}
|
||||
|
||||
override fun getIdentifier(entry: EntryStack<NEUItem>?, value: NEUItem): ResourceLocation {
|
||||
return value.getResourceLocation()
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,76 @@
|
||||
package moe.nea.notenoughupdates.repo
|
||||
|
||||
import com.mojang.serialization.Dynamic
|
||||
import io.github.moulberry.repo.IReloadable
|
||||
import io.github.moulberry.repo.NEURepository
|
||||
import io.github.moulberry.repo.data.NEUItem
|
||||
import moe.nea.notenoughupdates.util.LegacyTagParser
|
||||
import moe.nea.notenoughupdates.util.appendLore
|
||||
import net.minecraft.nbt.CompoundTag
|
||||
import net.minecraft.nbt.NbtOps
|
||||
import net.minecraft.network.chat.TextComponent
|
||||
import net.minecraft.resources.ResourceLocation
|
||||
import net.minecraft.util.datafix.DataFixers
|
||||
import net.minecraft.util.datafix.fixes.References
|
||||
import net.minecraft.world.item.ItemStack
|
||||
import net.minecraft.world.item.Items
|
||||
import java.util.concurrent.ConcurrentHashMap
|
||||
|
||||
object ItemCache : IReloadable {
|
||||
val cache: MutableMap<String, ItemStack> = ConcurrentHashMap()
|
||||
val df = DataFixers.getDataFixer()
|
||||
var isFlawless = true
|
||||
|
||||
private fun NEUItem.get10809CompoundTag(): CompoundTag = CompoundTag().apply {
|
||||
put("tag", LegacyTagParser.parse(nbttag))
|
||||
putString("id", minecraftItemId)
|
||||
putByte("Count", 1)
|
||||
putShort("Damage", damage.toShort())
|
||||
}
|
||||
|
||||
private fun CompoundTag.transformFrom10809ToModern(): CompoundTag? =
|
||||
try {
|
||||
df.update(
|
||||
References.ITEM_STACK,
|
||||
Dynamic(NbtOps.INSTANCE, this),
|
||||
-1,
|
||||
2975
|
||||
).value as CompoundTag
|
||||
} catch (e: Exception) {
|
||||
e.printStackTrace()
|
||||
isFlawless = false
|
||||
null
|
||||
}
|
||||
|
||||
private fun NEUItem.asItemStackNow(): ItemStack {
|
||||
val oldItemTag = get10809CompoundTag()
|
||||
val modernItemTag = oldItemTag.transformFrom10809ToModern()
|
||||
?: return ItemStack(Items.PAINTING).apply {
|
||||
setHoverName(TextComponent(this@asItemStackNow.displayName))
|
||||
appendLore(listOf(TextComponent("Exception rendering item: $skyblockItemId")))
|
||||
}
|
||||
val itemInstance = ItemStack.of(modernItemTag)
|
||||
if (itemInstance.tag?.contains("Enchantments") == true) {
|
||||
itemInstance.enchantmentTags.add(CompoundTag())
|
||||
}
|
||||
return itemInstance
|
||||
}
|
||||
|
||||
fun NEUItem.asItemStack(): ItemStack {
|
||||
var s = cache[this.skyblockItemId]
|
||||
if (s == null) {
|
||||
s = asItemStackNow()
|
||||
cache[this.skyblockItemId] = s
|
||||
}
|
||||
return s
|
||||
}
|
||||
|
||||
fun NEUItem.getResourceLocation() =
|
||||
ResourceLocation("skyblockitem", skyblockItemId.lowercase().replace(";", "__"))
|
||||
|
||||
|
||||
|
||||
override fun reload(repository: NEURepository) {
|
||||
cache.clear()
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
package moe.nea.notenoughupdates.util
|
||||
|
||||
import net.minecraft.nbt.CompoundTag
|
||||
import net.minecraft.nbt.ListTag
|
||||
import net.minecraft.nbt.StringTag
|
||||
import net.minecraft.network.chat.Component
|
||||
import net.minecraft.world.item.ItemStack
|
||||
|
||||
fun ItemStack.appendLore(args: List<Component>) {
|
||||
val compoundTag = getOrCreateTagElement("display")
|
||||
val loreList = compoundTag.getOrCreateList("Lore", StringTag.TAG_STRING)
|
||||
for (arg in args) {
|
||||
loreList.add(StringTag.valueOf(Component.Serializer.toJson(arg)))
|
||||
}
|
||||
}
|
||||
|
||||
fun CompoundTag.getOrCreateList(label: String, tag: Byte): ListTag = getList(label, tag.toInt()).also {
|
||||
put(label, it)
|
||||
}
|
||||
|
||||
fun CompoundTag.getOrCreateCompoundTag(label: String): CompoundTag = getCompound(label).also {
|
||||
put(label, it)
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package moe.nea.notenoughupdates
|
||||
package moe.nea.notenoughupdates.util
|
||||
|
||||
import net.minecraft.nbt.*
|
||||
import java.util.*
|
||||
Reference in New Issue
Block a user