mirror of
https://gitlab.bixilon.de/bixilon/minosoft.git
synced 2025-09-12 08:58:02 -04:00
vibration source registry
fixes network packet reading of ParticleS2CP in > 1.12.2?
This commit is contained in:
parent
67722f8e78
commit
c24c92aa29
@ -70,6 +70,7 @@ object FallbackRegistries {
|
||||
|
||||
|
||||
val MESSAGE_TYPES_REGISTRY: PerVersionRegistry<ChatMessageType, Registry<ChatMessageType>> = PerVersionRegistry { Registry(codec = ChatMessageType) }
|
||||
val VIBRATION_SOURCE: PerVersionRegistry<ResourceLocation, ResourceLocationRegistry> = PerVersionRegistry { ResourceLocationRegistry() }
|
||||
|
||||
|
||||
fun load() {
|
||||
@ -93,21 +94,22 @@ object FallbackRegistries {
|
||||
|
||||
val registriesJson: Map<ResourceLocation, Any> = IntegratedAssets.DEFAULT[REGISTRIES_RESOURCE_LOCATION].readJson()
|
||||
|
||||
DEFAULT_PLUGIN_CHANNELS_REGISTRY.initialize(registriesJson[ResourceLocation.of("default_channels")].asJsonObject(), PluginChannel)
|
||||
DEFAULT_PLUGIN_CHANNELS_REGISTRY.initialize(registriesJson[ResourceLocation.of("default_channels")].asJsonObject())
|
||||
|
||||
ENTITY_OBJECT_REGISTRY.initialize(registriesJson[ResourceLocation.of("entity_objects")].asJsonObject(), EntityObjectType)
|
||||
ENTITY_OBJECT_REGISTRY.initialize(registriesJson[ResourceLocation.of("entity_objects")].asJsonObject())
|
||||
|
||||
BLOCK_DATA_TYPE_REGISTRY.initialize(registriesJson[ResourceLocation.of("block_data_data_types")].asJsonObject(), BlockDataDataType)
|
||||
BLOCK_DATA_TYPE_REGISTRY.initialize(registriesJson[ResourceLocation.of("block_data_data_types")].asJsonObject())
|
||||
|
||||
CONTAINER_TYPE_REGISTRY.initialize(registriesJson[ResourceLocation.of("container_types")].asJsonObject(), ContainerType)
|
||||
CONTAINER_TYPE_REGISTRY.initialize(registriesJson[ResourceLocation.of("container_types")].asJsonObject())
|
||||
|
||||
GAME_EVENT_REGISTRY.initialize(registriesJson[ResourceLocation.of("game_events")].asJsonObject(), null)
|
||||
WORLD_EVENT_REGISTRY.initialize(registriesJson[ResourceLocation.of("world_events")].asJsonObject(), null)
|
||||
GAME_EVENT_REGISTRY.initialize(registriesJson[ResourceLocation.of("game_events")].asJsonObject())
|
||||
WORLD_EVENT_REGISTRY.initialize(registriesJson[ResourceLocation.of("world_events")].asJsonObject())
|
||||
|
||||
|
||||
CAT_VARIANT_REGISTRY.initialize(registriesJson[ResourceLocation.of("variants/cat")].asJsonObject(), CatVariant)
|
||||
CAT_VARIANT_REGISTRY.initialize(registriesJson[ResourceLocation.of("variants/cat")].asJsonObject())
|
||||
|
||||
MESSAGE_TYPES_REGISTRY.initialize(registriesJson[minecraft("message_types")].asJsonObject(), ChatMessageType)
|
||||
MESSAGE_TYPES_REGISTRY.initialize(registriesJson[minecraft("message_types")].asJsonObject())
|
||||
VIBRATION_SOURCE.initialize(registriesJson[minecraft("vibration_source")].asJsonObject())
|
||||
|
||||
initialized = true
|
||||
Log.log(LogMessageType.OTHER, LogLevels.VERBOSE) { "Loaded default registries!" }
|
||||
|
@ -14,6 +14,7 @@
|
||||
package de.bixilon.minosoft.data.registries.particle.data.vibration
|
||||
|
||||
import de.bixilon.minosoft.data.registries.factory.DefaultFactory
|
||||
import de.bixilon.minosoft.protocol.protocol.ProtocolVersions.V_1_20_2
|
||||
import de.bixilon.minosoft.protocol.protocol.buffers.play.PlayInByteBuffer
|
||||
|
||||
object VibrationSources : DefaultFactory<VibrationFactory<*>>(
|
||||
@ -22,7 +23,7 @@ object VibrationSources : DefaultFactory<VibrationFactory<*>>(
|
||||
) {
|
||||
|
||||
fun read(buffer: PlayInByteBuffer): VibrationSource {
|
||||
val type = buffer.readResourceLocation()
|
||||
val type = if (buffer.versionId <= V_1_20_2) buffer.readResourceLocation() else buffer.readRegistryItem(buffer.connection.registries.vibrationSource) // TODO: fix out version
|
||||
val factory = this[type] ?: throw IllegalArgumentException("Can not find vibration source: $type")
|
||||
|
||||
return factory.read(buffer)
|
||||
|
@ -130,6 +130,7 @@ class Registries(
|
||||
val containerType: Registry<ContainerType> = Registry(codec = ContainerType)
|
||||
val gameEvent: ResourceLocationRegistry = ResourceLocationRegistry()
|
||||
val worldEvent: ResourceLocationRegistry = ResourceLocationRegistry()
|
||||
val vibrationSource: ResourceLocationRegistry = ResourceLocationRegistry()
|
||||
|
||||
val argumentType: ResourceLocationRegistry = ResourceLocationRegistry()
|
||||
val messageType: Registry<ChatMessageType> = register("chat_type", Registry(codec = ChatMessageType))
|
||||
@ -183,6 +184,7 @@ class Registries(
|
||||
worker += WorkerTask(this::containerType.i) { containerType.update(pixlyzerData["container_types", "container_type"]?.toJsonObject(), version, this) }
|
||||
worker += WorkerTask(this::gameEvent.i) { gameEvent.update(pixlyzerData["game_events"]?.toJsonObject(), version, this) }
|
||||
worker += WorkerTask(this::worldEvent.i) { worldEvent.update(pixlyzerData["world_events"]?.toJsonObject(), version, this) }
|
||||
worker += WorkerTask(this::vibrationSource.i) { vibrationSource.update(pixlyzerData["vibration_source"]?.toJsonObject(), version, this) }
|
||||
worker += WorkerTask(this::argumentType.i) { argumentType.update(pixlyzerData["argument_type"]?.toJsonObject(), version, this) }
|
||||
worker += WorkerTask(this::messageType.i) { messageType.update(pixlyzerData["message_types"]?.toJsonObject(), version, this) }
|
||||
|
||||
|
@ -46,6 +46,7 @@ object RegistriesLoader {
|
||||
gameEvent.parent = FallbackRegistries.GAME_EVENT_REGISTRY.forVersion(version)
|
||||
worldEvent.parent = FallbackRegistries.WORLD_EVENT_REGISTRY.forVersion(version)
|
||||
blockDataType.parent = FallbackRegistries.BLOCK_DATA_TYPE_REGISTRY.forVersion(version)
|
||||
vibrationSource.parent = FallbackRegistries.VIBRATION_SOURCE.forVersion(version)
|
||||
catVariants.parent = FallbackRegistries.CAT_VARIANT_REGISTRY.forVersion(version)
|
||||
}
|
||||
}
|
||||
|
@ -15,7 +15,6 @@ package de.bixilon.minosoft.data.registries.registries.registry
|
||||
|
||||
import de.bixilon.kutil.json.JsonUtil.toJsonObject
|
||||
import de.bixilon.kutil.primitive.IntUtil.toInt
|
||||
import de.bixilon.minosoft.data.registries.registries.registry.codec.IdentifierCodec
|
||||
import de.bixilon.minosoft.protocol.versions.Version
|
||||
import de.bixilon.minosoft.protocol.versions.Versions
|
||||
import java.util.*
|
||||
@ -34,7 +33,7 @@ class PerVersionRegistry<E, R : AbstractRegistry<E>>(private val registryCreator
|
||||
throw IllegalArgumentException("Can not find a registry for version $version")
|
||||
}
|
||||
|
||||
fun initialize(data: Map<String, Any>, codec: IdentifierCodec<E>?) {
|
||||
fun initialize(data: Map<String, Any>) {
|
||||
check(!this::versions.isInitialized) { "Already initialized!" }
|
||||
|
||||
val versions: SortedMap<Int, R> = sortedMapOf({ t, t2 -> t2 - t })
|
||||
|
@ -14,7 +14,6 @@ package de.bixilon.minosoft.protocol.packets.s2c.play.world
|
||||
|
||||
import de.bixilon.kotlinglm.vec3.Vec3
|
||||
import de.bixilon.kotlinglm.vec3.Vec3d
|
||||
import de.bixilon.minosoft.data.registries.particle.ParticleType
|
||||
import de.bixilon.minosoft.data.registries.particle.data.ParticleData
|
||||
import de.bixilon.minosoft.modding.event.events.ParticleSpawnEvent
|
||||
import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection
|
||||
@ -26,18 +25,8 @@ import de.bixilon.minosoft.util.logging.LogLevels
|
||||
import de.bixilon.minosoft.util.logging.LogMessageType
|
||||
|
||||
class ParticleS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket {
|
||||
val type: ParticleType = if (buffer.versionId < ProtocolVersions.V_14W19A) {
|
||||
buffer.readLegacyRegistryItem(buffer.connection.registries.particleType)!!
|
||||
} else if (buffer.versionId >= ProtocolVersions.V_22W17A) { // ToDo: maybe this was even earlier, should only differ some snapshots
|
||||
buffer.readRegistryItem(buffer.connection.registries.particleType)
|
||||
} else {
|
||||
buffer.connection.registries.particleType[buffer.readInt()]
|
||||
}
|
||||
val longDistance = if (buffer.versionId >= ProtocolVersions.V_14W29A) {
|
||||
buffer.readBoolean()
|
||||
} else {
|
||||
false
|
||||
}
|
||||
val type = buffer.readParticleType()
|
||||
val longDistance = if (buffer.versionId >= ProtocolVersions.V_14W29A) buffer.readBoolean() else false
|
||||
val position: Vec3d = if (buffer.versionId < ProtocolVersions.V_1_15_PRE4) {
|
||||
Vec3d(buffer.readVec3f())
|
||||
} else {
|
||||
@ -49,6 +38,12 @@ class ParticleS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket {
|
||||
val data: ParticleData = buffer.readParticleData(type)
|
||||
|
||||
|
||||
private fun PlayInByteBuffer.readParticleType() = when {
|
||||
versionId >= ProtocolVersions.V_22W17A -> readRegistryItem(connection.registries.particleType) // ToDo: maybe this was even earlier, should only differ some snapshots
|
||||
versionId >= ProtocolVersions.V_14W19A -> connection.registries.particleType[readInt()]
|
||||
else -> readLegacyRegistryItem(connection.registries.particleType)!!
|
||||
}
|
||||
|
||||
override fun handle(connection: PlayConnection) {
|
||||
if (!connection.profiles.particle.types.packet) {
|
||||
return
|
||||
|
@ -767,5 +767,15 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"minecraft:vibration_source": {
|
||||
"0": {
|
||||
"minecraft:block": {
|
||||
"id": 0
|
||||
},
|
||||
"minecraft:entity": {
|
||||
"id": 1
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user