Skip to content

Commit

Permalink
Fix vanilla tile entities accessing world state async
Browse files Browse the repository at this point in the history
  • Loading branch information
NichtStudioCode committed Apr 27, 2024
1 parent b52bdcb commit 6e8f4f7
Show file tree
Hide file tree
Showing 4 changed files with 28 additions and 17 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import xyz.xenondevs.nova.tileentity.network.node.EndPointDataHolder
import xyz.xenondevs.nova.tileentity.network.type.NetworkConnectionType
import xyz.xenondevs.nova.tileentity.network.type.fluid.container.CauldronFluidContainer
import xyz.xenondevs.nova.tileentity.network.type.fluid.holder.DefaultFluidHolder
import xyz.xenondevs.nova.tileentity.network.type.fluid.holder.FluidHolder
import xyz.xenondevs.nova.util.CUBE_FACES
import xyz.xenondevs.nova.world.BlockPos
import java.util.*
Expand All @@ -17,17 +18,20 @@ internal class VanillaCauldronTileEntity internal constructor(

override val type = Type.CAULDRON

private val container = CauldronFluidContainer(UUID(0L, 0L), pos.block)
private val fluidHolder = DefaultFluidHolder(
storedValue("fluidHolder", ::Compound).get(), // TODO: legacy conversion
mapOf(container to NetworkConnectionType.BUFFER),
{ CUBE_FACES.associateWithTo(enumMap()) { container } },
{ CUBE_FACES.associateWithTo(enumMap()) { NetworkConnectionType.BUFFER } }
)
private lateinit var container: CauldronFluidContainer
private lateinit var fluidHolder: FluidHolder
override lateinit var holders: Set<EndPointDataHolder>

override val holders: Set<EndPointDataHolder> = setOf(fluidHolder)
override fun handleEnable() {
container = CauldronFluidContainer(UUID(0L, 0L), pos.block)
fluidHolder = DefaultFluidHolder(
storedValue("fluidHolder", ::Compound).get(), // TODO: legacy conversion
mapOf(container to NetworkConnectionType.BUFFER),
{ CUBE_FACES.associateWithTo(enumMap()) { container } },
{ CUBE_FACES.associateWithTo(enumMap()) { NetworkConnectionType.BUFFER } }
)
holders = setOf(fluidHolder)

init {
handleBlockUpdate()
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import org.bukkit.block.Container
import org.bukkit.block.ShulkerBox
import xyz.xenondevs.cbf.Compound
import xyz.xenondevs.commons.collections.enumMap
import xyz.xenondevs.nova.tileentity.network.type.item.holder.ItemHolder
import xyz.xenondevs.nova.tileentity.network.type.item.holder.StaticVanillaItemHolder
import xyz.xenondevs.nova.tileentity.network.type.item.inventory.NetworkedBukkitInventory
import xyz.xenondevs.nova.tileentity.network.type.item.inventory.NetworkedInventory
Expand All @@ -18,9 +19,9 @@ internal class VanillaContainerTileEntity internal constructor(
) : ItemStorageVanillaTileEntity(pos, data) {

override val type = Type.CONTAINER
override val itemHolder: StaticVanillaItemHolder
override lateinit var itemHolder: ItemHolder

init {
override fun handleEnable() {
val container = pos.block.state as Container

val inventory = if (container is ShulkerBox) NetworkedShulkerBoxInventory(container.inventory) else NetworkedBukkitInventory(container.inventory)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import org.bukkit.block.BlockFace
import org.bukkit.block.Furnace
import xyz.xenondevs.cbf.Compound
import xyz.xenondevs.commons.collections.enumMap
import xyz.xenondevs.nova.tileentity.network.type.item.holder.ItemHolder
import xyz.xenondevs.nova.tileentity.network.type.item.holder.StaticVanillaItemHolder
import xyz.xenondevs.nova.tileentity.network.type.item.inventory.NetworkedInventory
import xyz.xenondevs.nova.tileentity.network.type.item.inventory.NetworkedRangedBukkitInventory
Expand All @@ -17,10 +18,14 @@ internal class VanillaFurnaceTileEntity internal constructor(
) : ItemStorageVanillaTileEntity(pos, data) {

override val type = Type.FURNACE
override val itemHolder = StaticVanillaItemHolder(
storedValue("itemHolder", ::Compound).get(), // TODO: legacy support
getInventories(pos.block.state as Furnace)
)
override lateinit var itemHolder: ItemHolder

override fun handleEnable() {
itemHolder = StaticVanillaItemHolder(
storedValue("itemHolder", ::Compound).get(), // TODO: legacy support
getInventories(pos.block.state as Furnace)
)
}

private fun getInventories(furnace: Furnace): EnumMap<BlockFace, NetworkedInventory> {
val bukkitInventory = furnace.inventory
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import kotlinx.coroutines.runBlocking
import org.bukkit.Bukkit
import org.bukkit.World
import org.bukkit.event.EventHandler
import org.bukkit.event.EventPriority
import org.bukkit.event.Listener
import org.bukkit.event.world.ChunkLoadEvent
import org.bukkit.event.world.ChunkUnloadEvent
Expand Down Expand Up @@ -60,12 +61,12 @@ object WorldDataManager : Listener {
}
}

@EventHandler
@EventHandler(priority = EventPriority.LOWEST)
private fun handleChunkLoad(event: ChunkLoadEvent) {
runBlocking { getOrLoadChunk(event.chunk.pos).enable() }
}

@EventHandler
@EventHandler(priority = EventPriority.MONITOR)
private fun handleChunkUnload(event: ChunkUnloadEvent) {
runBlocking { getOrLoadChunk(event.chunk.pos).disable() }
}
Expand Down

0 comments on commit 6e8f4f7

Please sign in to comment.