FIXED THE EAST BUG! WE ARE SO BACK!!
This commit is contained in:
@@ -9,8 +9,11 @@ import net.minecraft.core.Direction
|
|||||||
import net.minecraft.core.HolderLookup
|
import net.minecraft.core.HolderLookup
|
||||||
import net.minecraft.nbt.CompoundTag
|
import net.minecraft.nbt.CompoundTag
|
||||||
import net.minecraft.network.FriendlyByteBuf
|
import net.minecraft.network.FriendlyByteBuf
|
||||||
|
import net.minecraft.network.chat.Component
|
||||||
import net.minecraft.server.level.ServerLevel
|
import net.minecraft.server.level.ServerLevel
|
||||||
import net.minecraft.server.level.ServerPlayer
|
import net.minecraft.server.level.ServerPlayer
|
||||||
|
import net.minecraft.world.InteractionResult
|
||||||
|
import net.minecraft.world.entity.player.Player
|
||||||
import net.minecraft.world.level.Level
|
import net.minecraft.world.level.Level
|
||||||
import net.minecraft.world.level.block.Block
|
import net.minecraft.world.level.block.Block
|
||||||
import net.minecraft.world.level.block.EntityBlock
|
import net.minecraft.world.level.block.EntityBlock
|
||||||
@@ -18,6 +21,7 @@ import net.minecraft.world.level.block.entity.BlockEntity
|
|||||||
import net.minecraft.world.level.block.entity.BlockEntityTicker
|
import net.minecraft.world.level.block.entity.BlockEntityTicker
|
||||||
import net.minecraft.world.level.block.entity.BlockEntityType
|
import net.minecraft.world.level.block.entity.BlockEntityType
|
||||||
import net.minecraft.world.level.block.state.BlockState
|
import net.minecraft.world.level.block.state.BlockState
|
||||||
|
import net.minecraft.world.phys.BlockHitResult
|
||||||
import org.neoflock.neocomputers.network.DeviceNode
|
import org.neoflock.neocomputers.network.DeviceNode
|
||||||
import org.neoflock.neocomputers.network.Networking
|
import org.neoflock.neocomputers.network.Networking
|
||||||
import org.neoflock.neocomputers.network.NodeSynchronizer
|
import org.neoflock.neocomputers.network.NodeSynchronizer
|
||||||
@@ -73,7 +77,7 @@ abstract class DeviceBlockEntity(type: BlockEntityType<*>, pos: BlockPos, state:
|
|||||||
|
|
||||||
open fun handleConnectionsFor(direction: Direction) {
|
open fun handleConnectionsFor(direction: Direction) {
|
||||||
// refuse connections on no node to reduce CPU load
|
// refuse connections on no node to reduce CPU load
|
||||||
val node = getNodeFromSide(direction.opposite) ?: return
|
val node = getNodeFromSide(direction) ?: return
|
||||||
val old = connetionsInDir[direction.ordinal]
|
val old = connetionsInDir[direction.ordinal]
|
||||||
val now = getCurrentlyConnectedNodeIn(direction)
|
val now = getCurrentlyConnectedNodeIn(direction)
|
||||||
|
|
||||||
@@ -81,12 +85,16 @@ abstract class DeviceBlockEntity(type: BlockEntityType<*>, pos: BlockPos, state:
|
|||||||
if(old != null) node.disconnectFrom(old)
|
if(old != null) node.disconnectFrom(old)
|
||||||
if(now != null) node.connectTo(now)
|
if(now != null) node.connectTo(now)
|
||||||
}
|
}
|
||||||
|
// bullshit hack
|
||||||
|
if(now != null) {
|
||||||
|
node.connectTo(now)
|
||||||
|
}
|
||||||
connetionsInDir[direction.ordinal] = now
|
connetionsInDir[direction.ordinal] = now
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: optimize this sometime before our test computers melt
|
// TODO: optimize this sometime before our test computers melt
|
||||||
open fun tickDevice(level: Level) {
|
open fun tickDevice(level: Level) {
|
||||||
// Handles device connections and sync here
|
// Handles device connections
|
||||||
|
|
||||||
// we do it like this because stinky MC will call stuff before world is fully setup
|
// we do it like this because stinky MC will call stuff before world is fully setup
|
||||||
// and then not notify us of neighbour changes
|
// and then not notify us of neighbour changes
|
||||||
@@ -164,6 +172,7 @@ abstract class DeviceBlockEntity(type: BlockEntityType<*>, pos: BlockPos, state:
|
|||||||
for (node in getDeviceNodes()) {
|
for (node in getDeviceNodes()) {
|
||||||
node.markChanged()
|
node.markChanged()
|
||||||
}
|
}
|
||||||
|
connectionsAreDirty = true
|
||||||
receivedServerState = false
|
receivedServerState = false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -195,6 +204,26 @@ abstract class DeviceBlock(properties: Properties = Properties.of()): BaseBlock(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun useWithoutItem(
|
||||||
|
state: BlockState,
|
||||||
|
level: Level,
|
||||||
|
pos: BlockPos,
|
||||||
|
player: Player,
|
||||||
|
hitResult: BlockHitResult
|
||||||
|
): InteractionResult? {
|
||||||
|
val ent = level.getBlockEntity(pos)
|
||||||
|
if(ent is DeviceBlockEntity && player is ServerPlayer) {
|
||||||
|
val dir = hitResult.direction
|
||||||
|
val node = ent.getNodeFromSide(dir)
|
||||||
|
if(node == null) {
|
||||||
|
player.sendSystemMessage(Component.literal("no node for dir $dir"))
|
||||||
|
} else {
|
||||||
|
player.sendSystemMessage(Component.literal("dir: $dir, address: ${node.address}, connections: ${node.connections.joinToString(", ")}"))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return super.useWithoutItem(state, level, pos, player, hitResult)
|
||||||
|
}
|
||||||
|
|
||||||
override fun neighborChanged(
|
override fun neighborChanged(
|
||||||
state: BlockState,
|
state: BlockState,
|
||||||
level: Level,
|
level: Level,
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import net.minecraft.world.level.block.state.BlockState
|
|||||||
import org.neoflock.neocomputers.block.CableBlock
|
import org.neoflock.neocomputers.block.CableBlock
|
||||||
import org.neoflock.neocomputers.block.CableBlock.Companion.COLOR
|
import org.neoflock.neocomputers.block.CableBlock.Companion.COLOR
|
||||||
import org.neoflock.neocomputers.block.CableBlock.Companion.getPropByDirection
|
import org.neoflock.neocomputers.block.CableBlock.Companion.getPropByDirection
|
||||||
|
import org.neoflock.neocomputers.block.DeviceBlockEntity
|
||||||
import org.neoflock.neocomputers.block.SingleDeviceBlockEntity
|
import org.neoflock.neocomputers.block.SingleDeviceBlockEntity
|
||||||
import org.neoflock.neocomputers.network.DeviceNode
|
import org.neoflock.neocomputers.network.DeviceNode
|
||||||
|
|
||||||
@@ -38,7 +39,7 @@ class CableEntity(pos: BlockPos, state: BlockState) : SingleDeviceBlockEntity(Bl
|
|||||||
for (dir in Direction.entries) {
|
for (dir in Direction.entries) {
|
||||||
val ent = level!!.getBlockEntity(blockPos.relative(dir))
|
val ent = level!!.getBlockEntity(blockPos.relative(dir))
|
||||||
level!!.setBlockAndUpdate(blockPos, blockState.setValue(getPropByDirection(dir), CableBlock.shouldConnect(blockPos, blockPos.relative(dir), level!!)))
|
level!!.setBlockAndUpdate(blockPos, blockState.setValue(getPropByDirection(dir), CableBlock.shouldConnect(blockPos, blockPos.relative(dir), level!!)))
|
||||||
if(ent is CableEntity) {
|
if(ent is DeviceBlockEntity) {
|
||||||
ent.connectionsAreDirty = true
|
ent.connectionsAreDirty = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user