@@ -3,12 +3,14 @@ package com.github.zly2006.enclosure
33import  com.github.zly2006.enclosure.ServerMain.enclosures 
44import  com.github.zly2006.enclosure.ServerMain.getAllEnclosures 
55import  com.github.zly2006.enclosure.access.ChunkAccess 
6- import  com.github.zly2006.enclosure.utils.Serializable2Text  
6+ import  com.github.zly2006.enclosure.command.MAX_CHUNK_LEVEL  
77import  com.github.zly2006.enclosure.utils.Serializable2Text.SerializationSettings.NameHover 
88import  net.minecraft.nbt.NbtCompound 
99import  net.minecraft.nbt.NbtList 
1010import  net.minecraft.nbt.NbtString 
1111import  net.minecraft.registry.RegistryWrapper 
12+ import  net.minecraft.server.world.ChunkLevelType 
13+ import  net.minecraft.server.world.ChunkLevels 
1214import  net.minecraft.server.world.ChunkTicketType 
1315import  net.minecraft.server.world.ServerWorld 
1416import  net.minecraft.text.Text 
@@ -114,8 +116,8 @@ class EnclosureList(world: ServerWorld, private val isRoot: Boolean) : Persisten
114116            if  (area.ticket !=  null ) {
115117                area.ticket!! .remainingTicks-- 
116118                if  (area.ticket!! .remainingTicks <=  0 ) {
117-                     area.ticket =  null 
118119                    removeTicket(area, world)
120+                     area.ticket =  null 
119121                    world.server.playerManager.broadcast(
120122                        Text .literal(" Force loading for "  ).append(area.serialize(NameHover , null )).append("  expired."  ), false 
121123                    )
@@ -130,13 +132,15 @@ class EnclosureList(world: ServerWorld, private val isRoot: Boolean) : Persisten
130132        area.toBlockBox().streamChunkPos().forEach {
131133            val  chunk =  world.getChunkAsView(it.x, it.z)
132134            if  (chunk is  ChunkAccess ) {
133-                 val  targetLevel =  chunk.cache.mapNotNull { it.ticket }.minOfOrNull { it.level }
134-                 world.chunkManager.ticketManager.ticketsByPosition.remove(it.toLong())
135-                 if  (targetLevel !=  null ) {
136-                     world.chunkManager.addTicket(ChunkTicketType .FORCED , it, targetLevel, it)
135+                 val  targetLevel =  chunk.cache
136+                     .filter { it.ticket !=  null  &&  it !=  area }
137+                     .minOfOrNull { it.ticket!! .level }
138+                     ? :  ChunkLevels .getLevelFromType(ChunkLevelType .FULL ) //  chunk border level
139+                 if  (targetLevel >  area.ticket!! .level) {
140+                     world.chunkManager.removeTicket(ChunkTicketType .FORCED , it, MAX_CHUNK_LEVEL  -  area.ticket!! .level, it)
137141                }
138142            } else  {
139-                 world.chunkManager.removeTicket(ChunkTicketType .FORCED , it, area.ticket!! .level, it)
143+                 world.chunkManager.removeTicket(ChunkTicketType .FORCED , it, MAX_CHUNK_LEVEL   -   area.ticket!! .level, it)
140144            }
141145        }
142146    }
@@ -146,7 +150,7 @@ class EnclosureList(world: ServerWorld, private val isRoot: Boolean) : Persisten
146150            if  (area.ticket !=  null ) {
147151                if  (area.ticket!! .remainingTicks >  0 ) {
148152                    area.toBlockBox().streamChunkPos().forEach {
149-                         world.chunkManager.addTicket(ChunkTicketType .FORCED , it, area.ticket!! .level, it)
153+                         world.chunkManager.addTicket(ChunkTicketType .FORCED , it, MAX_CHUNK_LEVEL   -   area.ticket!! .level, it)
150154                    }
151155                    //  todo: message
152156                }
0 commit comments