fix(test): Unit Tests not DFUing items
This commit is contained in:
@@ -81,7 +81,6 @@ object AnimatedClothingScanner {
|
||||
if (subject == null) run {
|
||||
val entity = MC.instance.targetedEntity ?: return@run null
|
||||
val clipboard = ClipboardUtils.getTextContents()
|
||||
MC.instance.entit
|
||||
if (!clipboard.startsWith(EXPORT_WATERMARK)) {
|
||||
ClipboardUtils.setTextContent(EXPORT_WATERMARK)
|
||||
} else {
|
||||
|
||||
19
src/main/kotlin/features/debug/ExportedTestConstantMeta.kt
Normal file
19
src/main/kotlin/features/debug/ExportedTestConstantMeta.kt
Normal file
@@ -0,0 +1,19 @@
|
||||
package moe.nea.firmament.features.debug
|
||||
|
||||
import com.mojang.serialization.Codec
|
||||
import com.mojang.serialization.codecs.RecordCodecBuilder
|
||||
import java.util.Optional
|
||||
|
||||
data class ExportedTestConstantMeta(
|
||||
val dataVersion: Int,
|
||||
val modVersion: Optional<String>,
|
||||
) {
|
||||
companion object {
|
||||
val CODEC: Codec<ExportedTestConstantMeta> = RecordCodecBuilder.create {
|
||||
it.group(
|
||||
Codec.INT.fieldOf("dataVersion").forGetter(ExportedTestConstantMeta::dataVersion),
|
||||
Codec.STRING.optionalFieldOf("modVersion").forGetter(ExportedTestConstantMeta::modVersion),
|
||||
).apply(it, ::ExportedTestConstantMeta)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -180,10 +180,10 @@ 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"))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,13 +1,23 @@
|
||||
package moe.nea.firmament.test.testutil
|
||||
|
||||
import com.mojang.datafixers.DSL
|
||||
import com.mojang.datafixers.DataFixUtils
|
||||
import com.mojang.datafixers.types.templates.Named
|
||||
import com.mojang.serialization.Dynamic
|
||||
import com.mojang.serialization.JsonOps
|
||||
import net.minecraft.SharedConstants
|
||||
import net.minecraft.datafixer.Schemas
|
||||
import net.minecraft.datafixer.TypeReferences
|
||||
import net.minecraft.item.ItemStack
|
||||
import net.minecraft.nbt.NbtCompound
|
||||
import net.minecraft.nbt.NbtElement
|
||||
import net.minecraft.nbt.NbtOps
|
||||
import net.minecraft.nbt.NbtString
|
||||
import net.minecraft.nbt.StringNbtReader
|
||||
import net.minecraft.registry.RegistryOps
|
||||
import net.minecraft.text.Text
|
||||
import net.minecraft.text.TextCodecs
|
||||
import moe.nea.firmament.features.debug.ExportedTestConstantMeta
|
||||
import moe.nea.firmament.test.FirmTestBootstrap
|
||||
import moe.nea.firmament.util.MC
|
||||
|
||||
@@ -28,15 +38,45 @@ object ItemResources {
|
||||
}
|
||||
fun getNbtOps(): RegistryOps<NbtElement> = MC.currentOrDefaultRegistries.getOps(NbtOps.INSTANCE)
|
||||
|
||||
fun tryMigrateNbt(
|
||||
nbtCompound: NbtCompound,
|
||||
typ: DSL.TypeReference,
|
||||
): NbtElement {
|
||||
val source = nbtCompound.get("source", ExportedTestConstantMeta.CODEC)
|
||||
nbtCompound.remove("source")
|
||||
if (source.isPresent) {
|
||||
val wrappedNbtSource = if (typ == TypeReferences.TEXT_COMPONENT && source.get().dataVersion < 4325) {
|
||||
// Per 1.21.5 text components are wrapped in a string, which firmament unwrapped in the snbt files
|
||||
NbtString.of(
|
||||
NbtOps.INSTANCE.convertTo(JsonOps.INSTANCE, nbtCompound)
|
||||
.toString())
|
||||
} else {
|
||||
nbtCompound
|
||||
}
|
||||
return Schemas.getFixer()
|
||||
.update(
|
||||
typ,
|
||||
Dynamic(NbtOps.INSTANCE, wrappedNbtSource),
|
||||
source.get().dataVersion,
|
||||
SharedConstants.getGameVersion().saveVersion.id
|
||||
).value
|
||||
}
|
||||
return nbtCompound
|
||||
}
|
||||
|
||||
fun loadText(name: String): Text {
|
||||
return TextCodecs.CODEC.parse(getNbtOps(), loadSNbt("testdata/chat/$name.snbt"))
|
||||
.getOrThrow { IllegalStateException("Could not load test chat '$name': $it") }
|
||||
return TextCodecs.CODEC.parse(
|
||||
getNbtOps(),
|
||||
tryMigrateNbt(loadSNbt("testdata/chat/$name.snbt"), TypeReferences.TEXT_COMPONENT)
|
||||
).getOrThrow { IllegalStateException("Could not load test chat '$name': $it") }
|
||||
}
|
||||
|
||||
fun loadItem(name: String): ItemStack {
|
||||
// TODO: make the load work with enchantments
|
||||
// TODO: use DFU to load older items
|
||||
return ItemStack.CODEC.parse(getNbtOps(), loadSNbt("testdata/items/$name.snbt"))
|
||||
.getOrThrow { IllegalStateException("Could not load test item '$name': $it") }
|
||||
try {
|
||||
val itemNbt = loadSNbt("testdata/items/$name.snbt")
|
||||
return ItemStack.CODEC.parse(getNbtOps(), tryMigrateNbt(itemNbt, TypeReferences.ITEM_STACK)).orThrow
|
||||
} catch (ex: Exception) {
|
||||
throw RuntimeException("Could not load item resource '$name'", ex)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
{
|
||||
source: {
|
||||
dataVersion: 4189,
|
||||
},
|
||||
extra: [
|
||||
{
|
||||
bold: 0b,
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
{
|
||||
source: {
|
||||
dataVersion: 4189,
|
||||
},
|
||||
color: "#FFAA00",
|
||||
extra: [
|
||||
{
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
{
|
||||
source: {
|
||||
dataVersion: 4189,
|
||||
},
|
||||
color: "#FFAA00",
|
||||
extra: [
|
||||
{
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
{
|
||||
source: {
|
||||
dataVersion: 4189,
|
||||
},
|
||||
components: {
|
||||
"minecraft:attribute_modifiers": {
|
||||
modifiers: [
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
{
|
||||
source: {
|
||||
dataVersion: 4189,
|
||||
},
|
||||
components: {
|
||||
"minecraft:attribute_modifiers": {
|
||||
modifiers: [
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
{
|
||||
source: {
|
||||
dataVersion: 4189,
|
||||
},
|
||||
components: {
|
||||
"minecraft:attribute_modifiers": {
|
||||
modifiers: [
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
{
|
||||
source: {
|
||||
dataVersion: 4189,
|
||||
},
|
||||
components: {
|
||||
"minecraft:attribute_modifiers": {
|
||||
modifiers: [
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
{
|
||||
source: {
|
||||
dataVersion: 4189,
|
||||
},
|
||||
components: {
|
||||
"minecraft:attribute_modifiers": {
|
||||
modifiers: [
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
{
|
||||
source: {
|
||||
dataVersion: 4189,
|
||||
},
|
||||
components: {
|
||||
"minecraft:attribute_modifiers": {
|
||||
modifiers: [
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
{
|
||||
source: {
|
||||
dataVersion: 4189,
|
||||
},
|
||||
components: {
|
||||
"minecraft:attribute_modifiers": {
|
||||
modifiers: [
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
{
|
||||
source: {
|
||||
dataVersion: 4189,
|
||||
},
|
||||
components: {
|
||||
"minecraft:attribute_modifiers": {
|
||||
modifiers: [
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
{
|
||||
source: {
|
||||
dataVersion: 4189,
|
||||
},
|
||||
components: {
|
||||
"minecraft:custom_data": {
|
||||
id: "PET",
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
{
|
||||
source: {
|
||||
dataVersion: 4189,
|
||||
},
|
||||
components: {
|
||||
"minecraft:custom_data": {
|
||||
id: "PET",
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
{
|
||||
source: {
|
||||
dataVersion: 4189,
|
||||
},
|
||||
components: {
|
||||
"minecraft:custom_data": {
|
||||
},
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
{
|
||||
source: {
|
||||
dataVersion: 4189,
|
||||
},
|
||||
components: {
|
||||
"minecraft:attribute_modifiers": {
|
||||
modifiers: [
|
||||
|
||||
Reference in New Issue
Block a user