Из-за чего это?

```kotlin
Could not pass event WorldLoadEvent to quill v0.1.3-OPEN-ALPHA
com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at path $
	at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:397) ~[gson-2.10.1.jar:?]
	at com.google.gson.Gson.fromJson(Gson.java:1227) ~[gson-2.10.1.jar:?]
	at com.google.gson.Gson.fromJson(Gson.java:1329) ~[gson-2.10.1.jar:?]
	at com.google.gson.Gson.fromJson(Gson.java:1271) ~[gson-2.10.1.jar:?]
	at quill-0.1.3-OPEN-ALPHA.jar/me.voxelsquid.quill.settlement.SettlementManager.onWorldLoad(SettlementManager.kt:117) ~[quill-0.1.3-OPEN-ALPHA.jar:?]
	at com.destroystokyo.paper.event.executor.MethodHandleEventExecutor.execute(MethodHandleEventExecutor.java:44) ~[paper-mojangapi-1.21.1-R0.1-SNAPSHOT.jar:?]
	at co.aikar.timings.TimedEventExecutor.execute(TimedEventExecutor.java:80) ~[paper-mojangapi-1.21.1-R0.1-SNAPSHOT.jar:1.21.1-131-84281ce]
	at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:70) ~[paper-mojangapi-1.21.1-R0.1-SNAPSHOT.jar:?]
	at io.papermc.paper.plugin.manager.PaperEventManager.callEvent(PaperEventManager.java:54) ~[paper-1.21.1.jar:1.21.1-131-84281ce]
	at io.papermc.paper.plugin.manager.PaperPluginManagerImpl.callEvent(PaperPluginManagerImpl.java:131) ~[paper-1.21.1.jar:1.21.1-131-84281ce]
	at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:628) ~[paper-mojangapi-1.21.1-R0.1-SNAPSHOT.jar:?]
	at net.minecraft.server.MinecraftServer.loadWorld0(MinecraftServer.java:736) ~[paper-1.21.1.jar:1.21.1-131-84281ce]
	at net.minecraft.server.MinecraftServer.loadLevel(MinecraftServer.java:515) ~[paper-1.21.1.jar:1.21.1-131-84281ce]
	at net.minecraft.server.dedicated.DedicatedServer.initServer(DedicatedServer.java:329) ~[paper-1.21.1.jar:1.21.1-131-84281ce]
	at net.minecraft.server.MinecraftServer.runServer(MinecraftServer.java:1214) ~[paper-1.21.1.jar:1.21.1-131-84281ce]
	at net.minecraft.server.MinecraftServer.lambda$spin$0(MinecraftServer.java:329) ~[paper-1.21.1.jar:1.21.1-131-84281ce]
	at java.base/java.lang.Thread.run(Thread.java:1583) ~[?:?]
Caused by: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at path $
	at com.google.gson.internal.bind.JsonTreeReader.expect(JsonTreeReader.java:165) ~[gson-2.10.1.jar:?]
	at com.google.gson.internal.bind.JsonTreeReader.beginObject(JsonTreeReader.java:89) ~[gson-2.10.1.jar:?]
	at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:386) ~[gson-2.10.1.jar:?]
	... 16 more
```

```kotlin
    @EventHandler
    private fun onWorldLoad(event: WorldLoadEvent) {
        event.world.persistentDataContainer.get(settlementsWorldKey, PersistentDataType.STRING)?.let { serializedSettlements ->
            plugin.gson.fromJson(serializedSettlements, JsonArray::class.java).let { jsonArray ->
                jsonArray.forEach { settlementData ->
                    settlements.add(Settlement(plugin.gson.fromJson(settlementData, Settlement.SettlementData::class.java)))
                }
            }
        }
        plugin.logger.info("Loaded settlements: ${settlements.map { it.data.settlementName}}.")
    }
```

```kotlin
package me.voxelsquid.quill.settlement

import com.google.gson.JsonArray
import me.voxelsquid.quill.QuestIntelligence
import me.voxelsquid.quill.settlement.SettlementManager.Companion.settlementsWorldKey
import org.bukkit.Location
import org.bukkit.Material
import org.bukkit.entity.Player
import org.bukkit.entity.Villager
import org.bukkit.persistence.PersistentDataType
import org.bukkit.util.BoundingBox
import java.util.*

// Сериализация сетлментов происходит при загрузке чанков, когда вилладжер загружается из папки мира
// У вилладжера в PDC хранится информация о поселении, к которому он принадлежит. Это значение инициализириуется, если рядом есть 10 жителей.
class Settlement(val data: SettlementData, val villagers: MutableList<Villager> = mutableListOf()) {

    data class SettlementData(val worldUUID: UUID, var settlementName: String, val center: Location, var currentMayor: UUID?, val creationTime: Long)

    val creationDate = Date(data.creationTime)
    val world        = QuestIntelligence.pluginInstance.server.getWorld(data.worldUUID)!!

    private var borderBoundingBox = BoundingBox.of(data.center, 32.0, 32.0, 32.0)
    private val cuboidVisualizer  = CachedSettlementCuboid(world, borderBoundingBox)
    private val tileEntities      = mutableMapOf<Material, Int>()

    private fun countTileEntities() {

        // Надо будет подумать над тем, какие блоки мы будем требовать для.. эм.. зачем и какие. Да.
        var beds = 0
        var bells = 0

        for (x in borderBoundingBox.minX.toInt()..borderBoundingBox.maxX.toInt()) {
            for (y in borderBoundingBox.minY.toInt()..borderBoundingBox.maxY.toInt()) {
                for (z in borderBoundingBox.minZ.toInt()..borderBoundingBox.maxZ.toInt()) {
                    val block = world.getBlockAt(x, y, z)
                    when {
                        block.type.toString().contains("_BED") -> beds++
                        block.type == Material.BELL -> bells++
                    }
                }
            }
        }

        tileEntities[Material.RED_BED] = beds / 2
        tileEntities[Material.BELL] = bells
    }

    fun visualizeSettlementTerritory(player : Player) {
        cuboidVisualizer.showBoundingBox(player)
    }

    fun bedAmount() : Int = tileEntities[Material.RED_BED] ?: 0
    fun bellAmount() : Int = tileEntities[Material.BELL] ?: 0

    fun size(): SettlementSize {
        return when {
            villagers.size in 1..10 -> SettlementSize.UNDERDEVELOPED
            villagers.size in 11..20 -> SettlementSize.EMERGING
            villagers.size in 21..30 -> SettlementSize.ESTABLISHED
            villagers.size in 31..50 -> SettlementSize.ADVANCED
            villagers.size > 50 -> SettlementSize.METROPOLIS
            else -> SettlementSize.UNDERDEVELOPED
        }
    }

    // Механизм сериализации, мы сохраняем сериализованный в JSON сетлемент в самом мире.
    // Стоит учесть, что поселений может быть много и у нас должен быть некий список.
    // Получается, речь идёт о массиве JSON-элементов.
    fun save() {
        // 1. Сериализация инстанции поселения
        val serializedSettlement = QuestIntelligence.pluginInstance.gson.toJson(this.data)

        // 2. Получение (или инициализация) массива поселений, который хранится в PDC мира
        val settlementsString = world.persistentDataContainer.get(settlementsWorldKey, PersistentDataType.STRING)
        val settlementsArray = if (settlementsString != null) {
            // Если массив уже существует, десериализуем его
            QuestIntelligence.pluginInstance.gson.fromJson(settlementsString, JsonArray::class.java)
        } else {
            // В противном случае создаем новый пустой JsonArray
            JsonArray()
        }

        // 3. Добавление сериализованного значения в этот массив
        settlementsArray.add(serializedSettlement)

        // 4. Сохранение обратно в PDC мира
        world.persistentDataContainer.set(settlementsWorldKey, PersistentDataType.STRING, settlementsArray.toString())
    }

    enum class SettlementSize {
        UNDERDEVELOPED, // Неразвитое поселение
        EMERGING,       // Появляющееся поселение
        ESTABLISHED,    // Установленное поселение
        ADVANCED,       // Продвинутое поселение
        METROPOLIS      // Мегаполис
    }

}
```