Switch to yarn mappings

This commit is contained in:
nea
2022-08-27 01:38:49 +02:00
parent 4c7bd601c4
commit 973c13e84f
18 changed files with 142 additions and 129 deletions

View File

@@ -1,6 +1,6 @@
# architectury-template-kotlin-dsl
architectury template with kotlin-dsl
## NotEnoughUpdates 1.19
Based on [Architectury-templates(1.18.2-forge-fabric-quilt-mixin)](https://github.com/architectury/architectury-templates/releases)
> This is still very much more of a tech demo, than an actual usable project. Please do not confuse it for one.
### Building your own
If you find bugs, please open a issues or PR to help me fix bugs.

View File

@@ -7,8 +7,9 @@ plugins {
kotlin("plugin.serialization") version "1.7.10"
id("dev.architectury.loom") version "0.12.0.+"
id("com.github.johnrengelman.shadow") version "7.1.2"
id("moe.nea.licenseextractificator") version "0.0.1"
id("moe.nea.licenseextractificator") version "fffc76c"
id("com.github.eutro.hierarchical-lang") version "1.1.3"
id("io.github.juuxel.loom-quiltflower") version "1.7.2"
}
loom {
@@ -52,7 +53,7 @@ val transInclude by configurations.creating {
dependencies {
// Minecraft dependencies
"minecraft"("com.mojang:minecraft:${project.property("minecraft_version")}")
"mappings"(loom.officialMojangMappings())
"mappings"("net.fabricmc:yarn:${project.property("yarn_version")}:v2")
// Fabric dependencies
modImplementation("net.fabricmc:fabric-loader:${project.property("fabric_loader_version")}")
@@ -130,7 +131,7 @@ tasks.processResources {
}
tasks.create<moe.nea.licenseextractificator.LicenseDiscoveryTask>("license") {
tasks.license {
scanConfiguration(project.configurations.compileClasspath.get())
outputFile.set(file("$buildDir/LICENSES.json"))
licenseFormatter.set(moe.nea.licenseextractificator.JsonLicenseFormatter())

View File

@@ -12,6 +12,7 @@ architectury_version=5.10.33
fabric_loader_version=0.14.8
fabric_api_version=0.58.0+1.19
fabric_kotlin_version=1.8.2+kotlin.1.7.10
yarn_version=1.19.2+build.8
libgui_version=6.0.0+1.19
rei_version=9.1.518

View File

@@ -13,8 +13,19 @@ pluginManagement {
name = "forgemc"
url = uri("https://maven.minecraftforge.net/")
}
maven {
name = "jitpack"
url = uri("https://jitpack.io")
}
gradlePluginPortal()
}
resolutionStrategy {
eachPlugin {
when (requested.id.id) {
"moe.nea.licenseextractificator" -> useModule("com.github.romangraef:neaslicenseextractificator:${requested.version}")
}
}
}
}
rootProject.name = "NotEnoughApdates"

View File

@@ -23,8 +23,8 @@ import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientLifecycleEvents
import net.fabricmc.loader.api.FabricLoader
import net.fabricmc.loader.api.Version
import net.fabricmc.loader.api.metadata.ModMetadata
import net.minecraft.commands.CommandBuildContext
import net.minecraft.network.chat.Component
import net.minecraft.command.CommandRegistryAccess
import net.minecraft.text.Text
import org.apache.logging.log4j.LogManager
import org.freedesktop.dbus.connections.impl.DBusConnectionBuilder
import java.nio.file.Files
@@ -68,16 +68,16 @@ object NotEnoughUpdates : ModInitializer, ClientModInitializer {
private fun registerCommands(
dispatcher: CommandDispatcher<FabricClientCommandSource>,
@Suppress("UNUSED_PARAMETER")
_ctx: CommandBuildContext
_ctx: CommandRegistryAccess
) {
dispatcher.register(ClientCommandManager.literal("neureload")
.then(ClientCommandManager.literal("fetch").executes {
it.source.sendFeedback(Component.literal("Trying to redownload the repository")) // TODO better reporting
it.source.sendFeedback(Text.literal("Trying to redownload the repository")) // TODO better reporting
RepoManager.launchAsyncUpdate()
Command.SINGLE_SUCCESS
})
.executes {
it.source.sendFeedback(Component.translatable("notenoughupdates.repo.reload.disk"))
it.source.sendFeedback(Text.translatable("notenoughupdates.repo.reload.disk"))
RepoManager.reload()
Command.SINGLE_SUCCESS
})

View File

@@ -2,13 +2,13 @@ package moe.nea.notenoughupdates.events
import moe.nea.notenoughupdates.events.NEUScreenEvents.OnScreenOpen
import net.fabricmc.fabric.api.event.EventFactory
import net.minecraft.client.gui.screens.Screen
import net.minecraft.client.Minecraft
import net.minecraft.client.gui.screen.Screen
import net.minecraft.client.MinecraftClient
object NEUScreenEvents {
fun interface OnScreenOpen {
/**
* Called when a new Screen is opened via [Minecraft.setScreen]. If [new] is null, this corresponds to closing a [Screen].
* Called when a new Screen is opened via [MinecraftClient.setScreen]. If [new] is null, this corresponds to closing a [Screen].
* @return true to prevent this event from happening.
*/
fun onScreenOpen(old: Screen?, new: Screen?): Boolean
@@ -20,4 +20,4 @@ object NEUScreenEvents {
}
}
}
}

View File

@@ -10,7 +10,7 @@ import io.github.cottonmc.cotton.gui.widget.data.Insets
import io.github.cottonmc.cotton.gui.widget.data.VerticalAlignment
import moe.nea.notenoughupdates.NotEnoughUpdates
import moe.nea.notenoughupdates.util.ConfigHolder
import net.minecraft.network.chat.Component
import net.minecraft.text.Text
import kotlin.reflect.KMutableProperty1
class ConfigGui<K>(val holder: ConfigHolder<K>, val build: ConfigGui<K>.() -> Unit) : LightweightGuiDescription() {
@@ -24,48 +24,48 @@ class ConfigGui<K>(val holder: ConfigHolder<K>, val build: ConfigGui<K>.() -> Un
reload()
}
fun title(component: Component) {
fun title(text: Text) {
if (col != 0) {
NotEnoughUpdates.logger.warn("Set title not at the top of the ConfigGui")
}
val label = WLabel(component)
val label = WLabel(text)
label.verticalAlignment = VerticalAlignment.TOP
label.horizontalAlignment = HorizontalAlignment.CENTER
root.add(label, 0, col, 11, 1)
col++
}
private fun label(component: Component) {
val label = WLabel(component)
private fun label(text: Text) {
val label = WLabel(text)
label.verticalAlignment = VerticalAlignment.CENTER
root.add(label, 0, col, 5, 1)
}
fun toggle(component: Component, prop: KMutableProperty1<K, Boolean>) {
val toggle = WToggleButton(component)
fun toggle(text: Text, prop: KMutableProperty1<K, Boolean>) {
val toggle = WToggleButton(text)
reloadables.add { toggle.toggle = prop.get(holder.config) }
toggle.setOnToggle {
prop.set(holder.config, true)
holder.markDirty()
}
root.add(toggle, 5, col, 6, 1)
label(component)
label(text)
col++
}
fun button(component: Component, buttonText: Component, runnable: () -> Unit) {
fun button(text: Text, buttonText: Text, runnable: () -> Unit) {
val button = WButton(buttonText)
button.setOnClick {
runnable.invoke()
}
root.add(button, 5, col, 6, 1)
label(component)
label(text)
col++
}
fun textfield(
component: Component,
background: Component,
text: Text,
background: Text,
prop: KMutableProperty1<K, String>,
maxLength: Int = 255
) {
@@ -80,7 +80,7 @@ class ConfigGui<K>(val holder: ConfigHolder<K>, val build: ConfigGui<K>.() -> Un
holder.markDirty()
}
root.add(textfield, 5, col, 6, 11)
label(component)
label(text)
col++
}

View File

@@ -1,31 +1,31 @@
package moe.nea.notenoughupdates.gui
import moe.nea.notenoughupdates.repo.RepoManager
import net.minecraft.network.chat.Component
import net.minecraft.text.Text
fun repoGui(): ConfigGui<RepoManager.Config> {
return ConfigGui(RepoManager) {
title(Component.literal("NotEnoughUpdates Repo Settings"))
toggle(Component.literal("Auto Update"), RepoManager.Config::autoUpdate)
title(Text.literal("NotEnoughUpdates Repo Settings"))
toggle(Text.literal("Auto Update"), RepoManager.Config::autoUpdate)
textfield(
Component.literal("Repo Username"),
Component.literal("<github user>"),
Text.literal("Repo Username"),
Text.literal("<github user>"),
RepoManager.Config::user,
maxLength = 255
)
textfield(
Component.literal("Repo Name"),
Component.literal("<repo name>"),
Text.literal("Repo Name"),
Text.literal("<repo name>"),
RepoManager.Config::repo
)
textfield(
Component.literal("Repo Branch"),
Component.literal("<repo branch>"),
Text.literal("Repo Branch"),
Text.literal("<repo branch>"),
RepoManager.Config::branch
)
button(
Component.literal("Reset to Defaults"),
Component.literal("Reset"),
Text.literal("Reset to Defaults"),
Text.literal("Reset"),
) {
RepoManager.config.user = "NotEnoughUpdates"
RepoManager.config.repo = "NotEnoughUpdates-REPO"

View File

@@ -1,10 +1,10 @@
package moe.nea.notenoughupdates.hud
import com.mojang.blaze3d.vertex.PoseStack
import io.github.cottonmc.cotton.gui.client.ScreenDrawing
import io.github.cottonmc.cotton.gui.widget.WWidget
import io.github.cottonmc.cotton.gui.widget.data.HorizontalAlignment
import io.github.cottonmc.cotton.gui.widget.data.Insets
import net.minecraft.client.util.math.MatrixStack
import kotlin.math.roundToInt
import kotlin.math.sin
@@ -31,7 +31,7 @@ class ProgressBar(
}
override fun paint(matrices: PoseStack, x: Int, y: Int, mouseX: Int, mouseY: Int) {
override fun paint(matrices: MatrixStack, x: Int, y: Int, mouseX: Int, mouseY: Int) {
ScreenDrawing.coloredRect(matrices, x, y, width, height, 0xFF808080.toInt())
val (l, prog) = synchronized(this) {
label to (progress to total)

View File

@@ -1,19 +1,19 @@
package moe.nea.notenoughupdates.mixins
import moe.nea.notenoughupdates.events.NEUScreenEvents
import net.minecraft.client.Minecraft
import net.minecraft.client.gui.screens.Screen
import net.minecraft.client.MinecraftClient
import net.minecraft.client.gui.screen.Screen
import org.spongepowered.asm.mixin.Mixin
import org.spongepowered.asm.mixin.injection.At
import org.spongepowered.asm.mixin.injection.Inject
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo
@Suppress("CAST_NEVER_SUCCEEDS")
@Mixin(Minecraft::class)
@Mixin(MinecraftClient::class)
class MixinMinecraft {
@Inject(method = ["setScreen"], at = [At("HEAD")], cancellable = true)
fun momo(screen: Screen?, ci: CallbackInfo) {
if (NEUScreenEvents.SCREEN_OPEN.invoker().onScreenOpen((this as Minecraft).screen, screen))
fun onScreenChange(screen: Screen?, ci: CallbackInfo) {
if (NEUScreenEvents.SCREEN_OPEN.invoker().onScreenOpen((this as MinecraftClient).currentScreen, screen))
ci.cancel()
}
}
}

View File

@@ -8,19 +8,18 @@ import me.shedaniel.rei.api.common.entry.type.EntryTypeRegistry
import me.shedaniel.rei.api.common.entry.type.VanillaEntryTypes
import moe.nea.notenoughupdates.repo.ItemCache.asItemStack
import moe.nea.notenoughupdates.repo.RepoManager
import net.minecraft.resources.ResourceLocation
import net.minecraft.world.item.ItemStack
import net.minecraft.item.ItemStack
import net.minecraft.util.Identifier
class NEUReiPlugin : REIClientPlugin {
companion object {
fun EntryStack<NEUItem>.asItemEntry(): EntryStack<ItemStack> {
return EntryStack.of(VanillaEntryTypes.ITEM, value.asItemStack())
}
val SKYBLOCK_ITEM_TYPE_ID = ResourceLocation("notenoughupdates", "skyblockitems")
val SKYBLOCK_ITEM_TYPE_ID = Identifier("notenoughupdates", "skyblockitems")
}
override fun registerEntryTypes(registry: EntryTypeRegistry) {

View File

@@ -1,6 +1,5 @@
package moe.nea.notenoughupdates.rei
import com.mojang.blaze3d.vertex.PoseStack
import io.github.moulberry.repo.data.NEUItem
import me.shedaniel.math.Rectangle
import me.shedaniel.rei.api.client.entry.renderer.EntryRenderer
@@ -14,11 +13,12 @@ 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 moe.nea.notenoughupdates.repo.ItemCache.getIdentifier
import net.minecraft.client.util.math.MatrixStack
import net.minecraft.item.ItemStack
import net.minecraft.tag.TagKey
import net.minecraft.text.Text
import net.minecraft.util.Identifier
import java.util.stream.Stream
object SBItemEntryDefinition : EntryDefinition<NEUItem> {
@@ -37,7 +37,7 @@ object SBItemEntryDefinition : EntryDefinition<NEUItem> {
override fun getRenderer(): EntryRenderer<NEUItem> = object : EntryRenderer<NEUItem> {
override fun render(
entry: EntryStack<NEUItem>,
matrices: PoseStack,
matrices: MatrixStack,
bounds: Rectangle,
mouseX: Int,
mouseY: Int,
@@ -65,7 +65,7 @@ object SBItemEntryDefinition : EntryDefinition<NEUItem> {
return Stream.empty()
}
override fun asFormattedText(entry: EntryStack<NEUItem>, value: NEUItem): Component {
override fun asFormattedText(entry: EntryStack<NEUItem>, value: NEUItem): Text {
return VanillaEntryTypes.ITEM.definition.asFormattedText(entry.asItemEntry(), value.asItemStack())
}
@@ -89,8 +89,8 @@ object SBItemEntryDefinition : EntryDefinition<NEUItem> {
return false
}
override fun getIdentifier(entry: EntryStack<NEUItem>?, value: NEUItem): ResourceLocation {
return value.getResourceLocation()
override fun getIdentifier(entry: EntryStack<NEUItem>?, value: NEUItem): Identifier {
return value.getIdentifier()
}

View File

@@ -10,36 +10,36 @@ import kotlinx.coroutines.launch
import moe.nea.notenoughupdates.NotEnoughUpdates
import moe.nea.notenoughupdates.util.LegacyTagParser
import moe.nea.notenoughupdates.util.appendLore
import net.minecraft.nbt.CompoundTag
import net.minecraft.datafixer.Schemas
import net.minecraft.datafixer.TypeReferences
import net.minecraft.item.ItemStack
import net.minecraft.item.Items
import net.minecraft.nbt.NbtCompound
import net.minecraft.nbt.NbtOps
import net.minecraft.network.chat.Component
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 net.minecraft.text.Text
import net.minecraft.util.Identifier
import java.util.concurrent.ConcurrentHashMap
object ItemCache : IReloadable {
val cache: MutableMap<String, ItemStack> = ConcurrentHashMap()
val df = DataFixers.getDataFixer()
val df = Schemas.getFixer()
var isFlawless = true
private fun NEUItem.get10809CompoundTag(): CompoundTag = CompoundTag().apply {
private fun NEUItem.get10809CompoundTag(): NbtCompound = NbtCompound().apply {
put("tag", LegacyTagParser.parse(nbttag))
putString("id", minecraftItemId)
putByte("Count", 1)
putShort("Damage", damage.toShort())
}
private fun CompoundTag.transformFrom10809ToModern(): CompoundTag? =
private fun NbtCompound.transformFrom10809ToModern(): NbtCompound? =
try {
df.update(
References.ITEM_STACK,
TypeReferences.ITEM_STACK,
Dynamic(NbtOps.INSTANCE, this),
-1,
2975
).value as CompoundTag
).value as NbtCompound
} catch (e: Exception) {
NotEnoughUpdates.logger.error("Failed to datafixer an item", e)
isFlawless = false
@@ -50,12 +50,12 @@ object ItemCache : IReloadable {
val oldItemTag = get10809CompoundTag()
val modernItemTag = oldItemTag.transformFrom10809ToModern()
?: return ItemStack(Items.PAINTING).apply {
hoverName = Component.literal(this@asItemStackNow.displayName)
appendLore(listOf(Component.literal("Exception rendering item: $skyblockItemId")))
setCustomName(Text.literal(this@asItemStackNow.displayName))
appendLore(listOf(Text.literal("Exception rendering item: $skyblockItemId")))
}
val itemInstance = ItemStack.of(modernItemTag)
if (itemInstance.tag?.contains("Enchantments") == true) {
itemInstance.enchantmentTags.add(CompoundTag())
val itemInstance = ItemStack.fromNbt(modernItemTag)
if (itemInstance.nbt?.contains("Enchantments") == true) {
itemInstance.enchantments.add(NbtCompound())
}
return itemInstance
}
@@ -69,8 +69,8 @@ object ItemCache : IReloadable {
return s
}
fun NEUItem.getResourceLocation() =
ResourceLocation("skyblockitem", skyblockItemId.lowercase().replace(";", "__"))
fun NEUItem.getIdentifier() =
Identifier("skyblockitem", skyblockItemId.lowercase().replace(";", "__"))
var job: Job? = null

View File

@@ -11,9 +11,9 @@ import moe.nea.notenoughupdates.NotEnoughUpdates.logger
import moe.nea.notenoughupdates.hud.ProgressBar
import moe.nea.notenoughupdates.util.ConfigHolder
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents
import net.minecraft.client.Minecraft
import net.minecraft.network.chat.Component
import net.minecraft.network.protocol.game.ClientboundUpdateRecipesPacket
import net.minecraft.client.MinecraftClient
import net.minecraft.network.packet.s2c.play.SynchronizeRecipesS2CPacket
import net.minecraft.text.Text
object RepoManager : ConfigHolder<RepoManager.Config>(serializer(), "repo", ::Config) {
@Serializable
@@ -43,8 +43,8 @@ object RepoManager : ConfigHolder<RepoManager.Config>(serializer(), "repo", ::Co
}
private fun trySendClientboundUpdateRecipesPacket(): Boolean {
return Minecraft.getInstance().level != null && Minecraft.getInstance().connection?.handleUpdateRecipes(
ClientboundUpdateRecipesPacket(mutableListOf())
return MinecraftClient.getInstance().world != null && MinecraftClient.getInstance().networkHandler?.onSynchronizeRecipes(
SynchronizeRecipesS2CPacket(mutableListOf())
) != null
}
@@ -71,8 +71,8 @@ object RepoManager : ConfigHolder<RepoManager.Config>(serializer(), "repo", ::Co
CottonHud.add(progressBar)
neuRepo.reload()
} catch (exc: NEURepositoryException) {
Minecraft.getInstance().player?.sendSystemMessage(
Component.literal("Failed to reload repository. This will result in some mod features not working.")
MinecraftClient.getInstance().player?.sendMessage(
Text.literal("Failed to reload repository. This will result in some mod features not working.")
)
CottonHud.remove(progressBar)
exc.printStackTrace()

View File

@@ -5,9 +5,10 @@ import kotlinx.serialization.SerializationException
import moe.nea.notenoughupdates.NotEnoughUpdates
import moe.nea.notenoughupdates.events.NEUScreenEvents
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientLifecycleEvents
import net.minecraft.client.Minecraft
import net.minecraft.commands.CommandSource
import net.minecraft.network.chat.Component
import net.minecraft.client.MinecraftClient
import net.minecraft.command.CommandSource
import net.minecraft.server.command.CommandOutput
import net.minecraft.text.Text
import java.io.IOException
import java.nio.file.Path
import java.util.concurrent.CopyOnWriteArrayList
@@ -102,10 +103,10 @@ abstract class ConfigHolder<T>(
}
}
private fun warnForResetConfigs(player: CommandSource) {
private fun warnForResetConfigs(player: CommandOutput) {
if (badLoads.isNotEmpty()) {
player.sendSystemMessage(
Component.literal(
player.sendMessage(
Text.literal(
"The following configs have been reset: ${badLoads.joinToString(", ")}. " +
"This can be intentional, but probably isn't."
)
@@ -117,7 +118,7 @@ abstract class ConfigHolder<T>(
fun registerEvents() {
NEUScreenEvents.SCREEN_OPEN.register(NEUScreenEvents.OnScreenOpen { old, new ->
performSaves()
val p = Minecraft.getInstance().player
val p = MinecraftClient.getInstance().player
if (p != null) {
warnForResetConfigs(p)
}
@@ -128,6 +129,5 @@ abstract class ConfigHolder<T>(
})
}
}
}
}

View File

@@ -1,23 +1,24 @@
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
import net.minecraft.item.ItemStack
import net.minecraft.nbt.NbtCompound
import net.minecraft.nbt.NbtList
import net.minecraft.nbt.NbtString
import net.minecraft.text.Text
fun ItemStack.appendLore(args: List<Component>) {
val compoundTag = getOrCreateTagElement("display")
val loreList = compoundTag.getOrCreateList("Lore", StringTag.TAG_STRING)
fun ItemStack.appendLore(args: List<Text>) {
val compoundTag = getOrCreateSubNbt("display")
val loreList = compoundTag.getOrCreateList("Lore", NbtString.STRING_TYPE)
for (arg in args) {
loreList.add(StringTag.valueOf(Component.Serializer.toJson(arg)))
loreList.add(NbtString.of(Text.Serializer.toJson(arg)))
}
}
fun CompoundTag.getOrCreateList(label: String, tag: Byte): ListTag = getList(label, tag.toInt()).also {
fun NbtCompound.getOrCreateList(label: String, tag: Byte): NbtList = getList(label, tag.toInt()).also {
put(label, it)
}
fun CompoundTag.getOrCreateCompoundTag(label: String): CompoundTag = getCompound(label).also {
fun NbtCompound.getOrCreateCompoundTag(label: String): NbtCompound = getCompound(label).also {
put(label, it)
}

View File

@@ -81,7 +81,7 @@ class LegacyTagParser private constructor(string: String) {
companion object {
val digitRange = '0'..'9'
fun parse(string: String): CompoundTag {
fun parse(string: String): NbtCompound {
return LegacyTagParser(string).baseTag
}
}
@@ -90,11 +90,11 @@ class LegacyTagParser private constructor(string: String) {
racer.consumeWhile { Character.isWhitespace(it.last()) } // Only check last since other chars are always checked before.
}
fun parseTag(): CompoundTag {
fun parseTag(): NbtCompound {
skipWhitespace()
racer.expect("{", "Expected '{ at start of tag")
skipWhitespace()
val tag = CompoundTag()
val tag = NbtCompound()
while (!racer.tryConsume("}")) {
skipWhitespace()
val lhs = parseIdentifier()
@@ -109,7 +109,7 @@ class LegacyTagParser private constructor(string: String) {
return tag
}
private fun parseAny(): Tag {
private fun parseAny(): NbtElement {
skipWhitespace()
val nextChar = racer.peekReq(1) ?: racer.error("Expected new object, found EOF")
return when {
@@ -121,11 +121,11 @@ class LegacyTagParser private constructor(string: String) {
}
}
fun parseList(): ListTag {
fun parseList(): NbtList {
skipWhitespace()
racer.expect("[", "Expected '[' at start of tag")
skipWhitespace()
val list = ListTag()
val list = NbtList()
while (!racer.tryConsume("]")) {
skipWhitespace()
racer.pushState()
@@ -170,8 +170,8 @@ class LegacyTagParser private constructor(string: String) {
return sb.toString()
}
fun parseStringTag(): StringTag {
return StringTag.valueOf(parseQuotedString())
fun parseStringTag(): NbtString {
return NbtString.of(parseQuotedString())
}
object Patterns {
@@ -185,7 +185,7 @@ class LegacyTagParser private constructor(string: String) {
val ROUGH_PATTERN = "[-+]?[0-9]*\\.?[0-9]+[dDbBfFlLsS]?".toRegex()
}
fun parseNumericTag(): NumericTag {
fun parseNumericTag(): AbstractNbtNumber {
skipWhitespace()
val textForm = racer.consumeWhile { Patterns.ROUGH_PATTERN.matchEntire(it) != null }
if (textForm.isEmpty()) {
@@ -193,27 +193,27 @@ class LegacyTagParser private constructor(string: String) {
}
val doubleMatch = Patterns.DOUBLE.matchEntire(textForm) ?: Patterns.DOUBLE_UNTYPED.matchEntire(textForm)
if (doubleMatch != null) {
return DoubleTag.valueOf(doubleMatch.groups[1]!!.value.toDouble())
return NbtDouble.of(doubleMatch.groups[1]!!.value.toDouble())
}
val floatMatch = Patterns.FLOAT.matchEntire(textForm)
if (floatMatch != null) {
return FloatTag.valueOf(floatMatch.groups[1]!!.value.toFloat())
return NbtFloat.of(floatMatch.groups[1]!!.value.toFloat())
}
val byteMatch = Patterns.BYTE.matchEntire(textForm)
if (byteMatch != null) {
return ByteTag.valueOf(byteMatch.groups[1]!!.value.toByte())
return NbtByte.of(byteMatch.groups[1]!!.value.toByte())
}
val longMatch = Patterns.LONG.matchEntire(textForm)
if (longMatch != null) {
return LongTag.valueOf(longMatch.groups[1]!!.value.toLong())
return NbtLong.of(longMatch.groups[1]!!.value.toLong())
}
val shortMatch = Patterns.SHORT.matchEntire(textForm)
if (shortMatch != null) {
return ShortTag.valueOf(shortMatch.groups[1]!!.value.toShort())
return NbtShort.of(shortMatch.groups[1]!!.value.toShort())
}
val integerMatch = Patterns.INTEGER.matchEntire(textForm)
if (integerMatch != null) {
return IntTag.valueOf(integerMatch.groups[1]!!.value.toInt())
return NbtInt.of(integerMatch.groups[1]!!.value.toInt())
}
throw IllegalStateException("Could not properly parse numeric tag '$textForm', despite passing rough verification. This is a bug in the LegacyTagParser")
}

View File

@@ -2,19 +2,19 @@ package moe.nea.notenoughupdates.util
import moe.nea.notenoughupdates.NotEnoughUpdates
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents
import net.minecraft.client.Minecraft
import net.minecraft.client.gui.screens.Screen
import net.minecraft.client.MinecraftClient
import net.minecraft.client.gui.screen.Screen
object ScreenUtil {
init {
ClientTickEvents.START_CLIENT_TICK.register(::onTick)
}
private fun onTick(minecraft: Minecraft) {
private fun onTick(minecraft: MinecraftClient) {
if (nextOpenedGui != null) {
val p = minecraft.player
if (p?.containerMenu != null) {
p.closeContainer()
if (p?.currentScreenHandler != null) {
p.closeHandledScreen()
}
minecraft.setScreen(nextOpenedGui)
nextOpenedGui = null
@@ -33,4 +33,4 @@ object ScreenUtil {
}
}
}