Once again i demand you to STOP updating blockstates in being-unloaded chunks
This commit is contained in:
parent
d65b8df579
commit
80155ba7bc
@ -11,25 +11,38 @@ import ru.dbotthepony.mc.otm.capability.MatteryCapability
|
|||||||
import ru.dbotthepony.mc.otm.graph.matter.MatterNode
|
import ru.dbotthepony.mc.otm.graph.matter.MatterNode
|
||||||
import ru.dbotthepony.mc.otm.graph.storage.StorageGraph
|
import ru.dbotthepony.mc.otm.graph.storage.StorageGraph
|
||||||
import ru.dbotthepony.mc.otm.graph.storage.StorageNode
|
import ru.dbotthepony.mc.otm.graph.storage.StorageNode
|
||||||
|
import ru.dbotthepony.mc.otm.once
|
||||||
import ru.dbotthepony.mc.otm.registry.MBlockEntities
|
import ru.dbotthepony.mc.otm.registry.MBlockEntities
|
||||||
|
|
||||||
class MatterCableBlockEntity(p_155229_: BlockPos, p_155230_: BlockState) : MatteryBlockEntity(MBlockEntities.MATTER_CABLE, p_155229_, p_155230_) {
|
class MatterCableBlockEntity(p_155229_: BlockPos, p_155230_: BlockState) : MatteryBlockEntity(MBlockEntities.MATTER_CABLE, p_155229_, p_155230_) {
|
||||||
val matterNode = object : MatterNode() {
|
val matterNode = object : MatterNode() {
|
||||||
override fun onNeighbour(link: Link) {
|
override fun onNeighbour(link: Link) {
|
||||||
if (link is DirectionLink) {
|
if (link is DirectionLink) {
|
||||||
val newState = blockState.setValue(CableBlock.MAPPING_CONNECTION_PROP[link.direction]!!, true)
|
if (!SERVER_IS_LIVE) return
|
||||||
|
val level = level
|
||||||
|
|
||||||
if (newState !== blockState && SERVER_IS_LIVE)
|
level?.once {
|
||||||
level?.setBlock(blockPos, newState, Block.UPDATE_CLIENTS)
|
if (!isValid) return@once
|
||||||
|
val newState = blockState.setValue(CableBlock.MAPPING_CONNECTION_PROP[link.direction]!!, true)
|
||||||
|
|
||||||
|
if (newState !== blockState && SERVER_IS_LIVE)
|
||||||
|
level.setBlock(blockPos, newState, Block.UPDATE_CLIENTS)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onUnNeighbour(link: Link) {
|
override fun onUnNeighbour(link: Link) {
|
||||||
if (link is DirectionLink) {
|
if (link is DirectionLink) {
|
||||||
val newState = blockState.setValue(CableBlock.MAPPING_CONNECTION_PROP[link.direction]!!, false)
|
if (!SERVER_IS_LIVE) return
|
||||||
|
val level = level
|
||||||
|
|
||||||
if (newState !== blockState && SERVER_IS_LIVE)
|
level?.once {
|
||||||
level?.setBlock(blockPos, newState, Block.UPDATE_CLIENTS)
|
if (!isValid) return@once
|
||||||
|
val newState = blockState.setValue(CableBlock.MAPPING_CONNECTION_PROP[link.direction]!!, false)
|
||||||
|
|
||||||
|
if (newState !== blockState && SERVER_IS_LIVE)
|
||||||
|
level.setBlock(blockPos, newState, Block.UPDATE_CLIENTS)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -56,19 +69,29 @@ class StorageCableBlockEntity(p_155229_: BlockPos, p_155230_: BlockState) : Matt
|
|||||||
|
|
||||||
override fun onNeighbour(link: Link) {
|
override fun onNeighbour(link: Link) {
|
||||||
if (link is DirectionLink) {
|
if (link is DirectionLink) {
|
||||||
val newState = blockState.setValue(CableBlock.MAPPING_CONNECTION_PROP[link.direction]!!, true)
|
if (!SERVER_IS_LIVE) return
|
||||||
|
val level = level
|
||||||
|
|
||||||
if (newState !== blockState && SERVER_IS_LIVE)
|
level?.once {
|
||||||
level!!.setBlock(blockPos, newState, Block.UPDATE_CLIENTS)
|
val newState = blockState.setValue(CableBlock.MAPPING_CONNECTION_PROP[link.direction]!!, true)
|
||||||
|
|
||||||
|
if (newState !== blockState && SERVER_IS_LIVE)
|
||||||
|
level.setBlock(blockPos, newState, Block.UPDATE_CLIENTS)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onUnNeighbour(link: Link) {
|
override fun onUnNeighbour(link: Link) {
|
||||||
if (link is DirectionLink) {
|
if (link is DirectionLink) {
|
||||||
val newState = blockState.setValue(CableBlock.MAPPING_CONNECTION_PROP[link.direction]!!, false)
|
if (!SERVER_IS_LIVE) return
|
||||||
|
val level = level
|
||||||
|
|
||||||
if (newState !== blockState && SERVER_IS_LIVE)
|
level?.once {
|
||||||
level!!.setBlock(blockPos, newState, Block.UPDATE_CLIENTS)
|
val newState = blockState.setValue(CableBlock.MAPPING_CONNECTION_PROP[link.direction]!!, false)
|
||||||
|
|
||||||
|
if (newState !== blockState && SERVER_IS_LIVE)
|
||||||
|
level.setBlock(blockPos, newState, Block.UPDATE_CLIENTS)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -19,6 +19,7 @@ import ru.dbotthepony.mc.otm.core.math.BlockRotation
|
|||||||
import ru.dbotthepony.mc.otm.core.math.Decimal
|
import ru.dbotthepony.mc.otm.core.math.Decimal
|
||||||
import ru.dbotthepony.mc.otm.core.math.RelativeSide
|
import ru.dbotthepony.mc.otm.core.math.RelativeSide
|
||||||
import ru.dbotthepony.mc.otm.graph.GraphNode
|
import ru.dbotthepony.mc.otm.graph.GraphNode
|
||||||
|
import ru.dbotthepony.mc.otm.once
|
||||||
import ru.dbotthepony.mc.otm.onceServer
|
import ru.dbotthepony.mc.otm.onceServer
|
||||||
import java.util.Collections
|
import java.util.Collections
|
||||||
import java.util.EnumMap
|
import java.util.EnumMap
|
||||||
@ -110,10 +111,16 @@ abstract class EnergyCableBlockEntity(type: BlockEntityType<*>, blockPos: BlockP
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun updateBlockState(side: Direction, status: Boolean) {
|
private fun updateBlockState(side: Direction, status: Boolean) {
|
||||||
val newState = blockState.setValue(CableBlock.MAPPING_CONNECTION_PROP[side]!!, status)
|
if (!SERVER_IS_LIVE) return
|
||||||
|
val level = level
|
||||||
|
|
||||||
if (newState !== blockState && SERVER_IS_LIVE)
|
level?.once {
|
||||||
level?.setBlock(blockPos, newState, Block.UPDATE_CLIENTS)
|
if (!node.isValid) return@once
|
||||||
|
val newState = blockState.setValue(CableBlock.MAPPING_CONNECTION_PROP[side]!!, status)
|
||||||
|
|
||||||
|
if (newState !== blockState && SERVER_IS_LIVE)
|
||||||
|
level.setBlock(blockPos, newState, Block.UPDATE_CLIENTS)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// whenever this changes, graph#invalidatePathCache() MUST be called
|
// whenever this changes, graph#invalidatePathCache() MUST be called
|
||||||
|
@ -127,8 +127,8 @@ open class GraphNode<N : GraphNode<N, G>, G : GraphNodeList<N, G>>(val graphFact
|
|||||||
protected open fun onNeighbour(link: Link) {}
|
protected open fun onNeighbour(link: Link) {}
|
||||||
protected open fun onUnNeighbour(link: Link) {}
|
protected open fun onUnNeighbour(link: Link) {}
|
||||||
|
|
||||||
protected open fun invalidate() {}
|
protected open fun onInvalidated() {}
|
||||||
protected open fun revive() {}
|
protected open fun onRevived() {}
|
||||||
|
|
||||||
var isValid: Boolean = true
|
var isValid: Boolean = true
|
||||||
set(value) {
|
set(value) {
|
||||||
@ -144,9 +144,9 @@ open class GraphNode<N : GraphNode<N, G>, G : GraphNodeList<N, G>>(val graphFact
|
|||||||
|
|
||||||
graph.removeNode(this as N)
|
graph.removeNode(this as N)
|
||||||
rebuildGraphs(neighbours.map { it.second })
|
rebuildGraphs(neighbours.map { it.second })
|
||||||
invalidate()
|
onInvalidated()
|
||||||
} else {
|
} else {
|
||||||
revive()
|
onRevived()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6,12 +6,6 @@ import ru.dbotthepony.mc.otm.capability.MatteryCapability
|
|||||||
import ru.dbotthepony.mc.otm.capability.energy.IMatteryEnergyStorage
|
import ru.dbotthepony.mc.otm.capability.energy.IMatteryEnergyStorage
|
||||||
import ru.dbotthepony.mc.otm.graph.GraphNode
|
import ru.dbotthepony.mc.otm.graph.GraphNode
|
||||||
import ru.dbotthepony.mc.otm.storage.IStorage
|
import ru.dbotthepony.mc.otm.storage.IStorage
|
||||||
import ru.dbotthepony.mc.otm.storage.IVirtualStorageComponent
|
|
||||||
import ru.dbotthepony.mc.otm.storage.StorageStack
|
|
||||||
import ru.dbotthepony.mc.otm.storage.VirtualComponent
|
|
||||||
import ru.dbotthepony.mc.otm.storage.powered.PoweredVirtualComponent
|
|
||||||
import java.util.*
|
|
||||||
import java.util.function.Supplier
|
|
||||||
|
|
||||||
open class StorageNode(private val energyDemander: IMatteryEnergyStorage? = null) : GraphNode<StorageNode, StorageGraph>(::StorageGraph) {
|
open class StorageNode(private val energyDemander: IMatteryEnergyStorage? = null) : GraphNode<StorageNode, StorageGraph>(::StorageGraph) {
|
||||||
protected val components = ObjectArraySet<IStorage<*>>()
|
protected val components = ObjectArraySet<IStorage<*>>()
|
||||||
@ -19,9 +13,9 @@ open class StorageNode(private val energyDemander: IMatteryEnergyStorage? = null
|
|||||||
/**
|
/**
|
||||||
* Setting this to true will render non functional default [attachComponents],
|
* Setting this to true will render non functional default [attachComponents],
|
||||||
* make [addStorageComponent] and [removeStorageComponent] not add/remove components
|
* make [addStorageComponent] and [removeStorageComponent] not add/remove components
|
||||||
* to attached graph, and [revive] not re-attach components.
|
* to attached graph, and [onRevived] not re-attach components.
|
||||||
*
|
*
|
||||||
* [invalidate] and [removeComponents] still detach all components
|
* [onInvalidated] and [removeComponents] still detach all components
|
||||||
*/
|
*/
|
||||||
protected var manualAttaching = false
|
protected var manualAttaching = false
|
||||||
private var demandingEnergy = false
|
private var demandingEnergy = false
|
||||||
@ -103,13 +97,13 @@ open class StorageNode(private val energyDemander: IMatteryEnergyStorage? = null
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun invalidate() {
|
override fun onInvalidated() {
|
||||||
for (component in components) {
|
for (component in components) {
|
||||||
graph.remove(component)
|
graph.remove(component)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun revive() {
|
override fun onRevived() {
|
||||||
if (!manualAttaching) {
|
if (!manualAttaching) {
|
||||||
for (component in components) {
|
for (component in components) {
|
||||||
graph.add(component)
|
graph.add(component)
|
||||||
|
Loading…
Reference in New Issue
Block a user