FIXED THE EAST BUG! WE ARE SO BACK!!

This commit is contained in:
2026-04-30 07:18:26 +03:00
parent d8e79d8719
commit 21516ee923
2 changed files with 33 additions and 3 deletions

View File

@@ -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,

View File

@@ -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
} }
} }