load statistic registry, fix some bugs

This commit is contained in:
Bixilon 2022-08-23 21:21:07 +02:00
parent 68e52c5182
commit e3ce5a6c68
No known key found for this signature in database
GPG Key ID: 5CAD791931B09AC4
6 changed files with 54 additions and 12 deletions

View File

@ -73,7 +73,7 @@ class Registries {
val enchantmentRegistry: Registry<Enchantment> = register("enchantment", Registry(codec = Enchantment)) val enchantmentRegistry: Registry<Enchantment> = register("enchantment", Registry(codec = Enchantment))
val particleTypeRegistry: Registry<ParticleType> = register("particle_type", Registry(codec = ParticleType)) val particleTypeRegistry: Registry<ParticleType> = register("particle_type", Registry(codec = ParticleType))
val statusEffectRegistry: Registry<StatusEffect> = register("mob_effect", Registry(codec = StatusEffect)) val statusEffectRegistry: Registry<StatusEffect> = register("mob_effect", Registry(codec = StatusEffect))
val statisticRegistry: Registry<Statistic> = register("custom_stat", Registry()) val statisticRegistry: Registry<Statistic> = register("custom_stat", Registry(codec = Statistic))
val biomeRegistry: Registry<Biome> = register("biome", Registry(codec = Biome)) val biomeRegistry: Registry<Biome> = register("biome", Registry(codec = Biome))
val dimensionRegistry: Registry<Dimension> = register("dimension_type", Registry(codec = Dimension)) val dimensionRegistry: Registry<Dimension> = register("dimension_type", Registry(codec = Dimension))
val materialRegistry: Registry<Material> = register("material", Registry(codec = Material)) val materialRegistry: Registry<Material> = register("material", Registry(codec = Material))
@ -196,6 +196,8 @@ class Registries {
worker += Task(this::catVariants) { catVariants.rawUpdate(pixlyzerData["variant/cat"]?.toJsonObject(), this) } worker += Task(this::catVariants) { catVariants.rawUpdate(pixlyzerData["variant/cat"]?.toJsonObject(), this) }
worker += Task(this::frogVariants) { frogVariants.rawUpdate(pixlyzerData["variant/frog"]?.toJsonObject(), this) } worker += Task(this::frogVariants) { frogVariants.rawUpdate(pixlyzerData["variant/frog"]?.toJsonObject(), this) }
worker += Task(this::statisticRegistry) { statisticRegistry.rawUpdate(pixlyzerData["statistics"]?.toJsonObject(), this) }
val inner = CountUpAndDownLatch(1, latch) val inner = CountUpAndDownLatch(1, latch)
worker.work(inner) worker.work(inner)
inner.dec() inner.dec()

View File

@ -1,6 +1,6 @@
/* /*
* Minosoft * Minosoft
* Copyright (C) 2021 Moritz Zwerger * Copyright (C) 2020-2022 Moritz Zwerger
* *
* This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
* *
@ -15,6 +15,9 @@ package de.bixilon.minosoft.data.registries.statistics
import de.bixilon.minosoft.data.registries.ResourceLocation import de.bixilon.minosoft.data.registries.ResourceLocation
data class SubStatistic( class CustomStatistic(
val resourceLocation: ResourceLocation, resourceLocation: ResourceLocation,
) translationKey: ResourceLocation?,
unit: StatisticUnits,
val custom: Set<ResourceLocation>,
) : Statistic(resourceLocation, translationKey, unit)

View File

@ -12,18 +12,47 @@
*/ */
package de.bixilon.minosoft.data.registries.statistics package de.bixilon.minosoft.data.registries.statistics
import de.bixilon.kutil.cast.CastUtil.unsafeCast
import de.bixilon.minosoft.data.language.Translatable import de.bixilon.minosoft.data.language.Translatable
import de.bixilon.minosoft.data.registries.ResourceLocation import de.bixilon.minosoft.data.registries.ResourceLocation
import de.bixilon.minosoft.data.registries.registries.Registries
import de.bixilon.minosoft.data.registries.registries.registry.RegistryItem import de.bixilon.minosoft.data.registries.registries.registry.RegistryItem
import de.bixilon.minosoft.data.registries.registries.registry.codec.ResourceLocationCodec
import de.bixilon.minosoft.util.KUtil.toResourceLocation
data class Statistic( open class Statistic(
override val resourceLocation: ResourceLocation, override val resourceLocation: ResourceLocation,
override val translationKey: ResourceLocation?, override val translationKey: ResourceLocation?,
val unit: StatisticUnits, val unit: StatisticUnits,
@Deprecated("TODO") val subStatistics: Map<ResourceLocation, SubStatistic>,
) : RegistryItem(), Translatable { ) : RegistryItem(), Translatable {
override fun toString(): String { override fun toString(): String {
return resourceLocation.full return resourceLocation.full
} }
companion object : ResourceLocationCodec<Statistic> {
override fun deserialize(registries: Registries?, resourceLocation: ResourceLocation, data: Map<String, Any>): Statistic {
val translationKey = data["translation_id"]?.toResourceLocation()
val unit = StatisticUnits[data["unit"]!!]!!
data["sub_statistics"]?.unsafeCast<Set<*>>()?.let {
val custom: MutableSet<ResourceLocation> = mutableSetOf()
for (value in it) {
custom += value.toResourceLocation()
}
return CustomStatistic(
resourceLocation = resourceLocation,
translationKey = translationKey,
unit = unit,
custom = custom,
)
}
return Statistic(
resourceLocation = resourceLocation,
translationKey = translationKey,
unit = unit,
)
}
}
} }

View File

@ -1,6 +1,6 @@
/* /*
* Minosoft * Minosoft
* Copyright (C) 2021 Moritz Zwerger * Copyright (C) 2020-2022 Moritz Zwerger
* *
* This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
* *
@ -13,9 +13,18 @@
package de.bixilon.minosoft.data.registries.statistics package de.bixilon.minosoft.data.registries.statistics
import de.bixilon.kutil.enums.EnumUtil
import de.bixilon.kutil.enums.ValuesEnum
enum class StatisticUnits { enum class StatisticUnits {
BLOCK, BLOCK,
ITEM, ITEM,
ENTITY_TYPE, ENTITY_TYPE,
CUSTOM, CUSTOM,
;
companion object : ValuesEnum<StatisticUnits> {
override val VALUES: Array<StatisticUnits> = values()
override val NAME_MAP: Map<String, StatisticUnits> = EnumUtil.getEnumValues(VALUES)
}
} }

View File

@ -14,7 +14,6 @@ package de.bixilon.minosoft.modding.event.events
import de.bixilon.kutil.cast.CastUtil.unsafeCast import de.bixilon.kutil.cast.CastUtil.unsafeCast
import de.bixilon.minosoft.data.entities.entities.Entity import de.bixilon.minosoft.data.entities.entities.Entity
import de.bixilon.minosoft.data.entities.entities.LivingEntity
import de.bixilon.minosoft.modding.event.EventInitiators import de.bixilon.minosoft.modding.event.EventInitiators
import de.bixilon.minosoft.modding.event.events.connection.play.PlayConnectionEvent import de.bixilon.minosoft.modding.event.events.connection.play.PlayConnectionEvent
import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection
@ -24,9 +23,9 @@ class CollectItemAnimationEvent(
connection: PlayConnection, connection: PlayConnection,
initiator: EventInitiators, initiator: EventInitiators,
val collectedEntity: Entity, val collectedEntity: Entity,
val collector: LivingEntity, val collector: Entity,
val count: Int, val count: Int,
) : PlayConnectionEvent(connection, initiator), CancelableEvent { ) : PlayConnectionEvent(connection, initiator), CancelableEvent {
constructor(connection: PlayConnection, packet: EntityCollectS2CP) : this(connection, EventInitiators.SERVER, connection.world.entities[packet.itemEntityId].unsafeCast<Entity>(), connection.world.entities[packet.collectorEntityId].unsafeCast<LivingEntity>(), packet.count) constructor(connection: PlayConnection, packet: EntityCollectS2CP) : this(connection, EventInitiators.SERVER, connection.world.entities[packet.itemEntityId].unsafeCast<Entity>(), connection.world.entities[packet.collectorEntityId].unsafeCast<Entity>(), packet.count)
} }

View File

@ -35,7 +35,7 @@ class BlockDataS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket {
val type = if (buffer.versionId >= V_21W37A) { val type = if (buffer.versionId >= V_21W37A) {
buffer.connection.registries.blockEntityTypeRegistry[buffer.readVarInt()].resourceLocation buffer.connection.registries.blockEntityTypeRegistry[buffer.readVarInt()].resourceLocation
} else { } else {
buffer.connection.registries.blockDataTypeRegistry[buffer.readUnsignedByte()].resourceLocation buffer.connection.registries.blockDataTypeRegistry.getOrNull(buffer.readUnsignedByte())?.resourceLocation
} }
val nbt = buffer.readNBT().toJsonObject() val nbt = buffer.readNBT().toJsonObject()