Switch: Implement switching capacity
This commit is contained in:
parent
98134825a6
commit
654baa81a1
|
@ -31,7 +31,7 @@ abstract class DeviceBlockEntity(type: BlockEntityType<*>): BlockEntity(type), P
|
|||
|
||||
protected abstract fun handlePacket(packet: Packet)
|
||||
|
||||
protected fun acceptsPacket(packet: Packet): Boolean {
|
||||
protected open fun acceptsPacket(packet: Packet): Boolean {
|
||||
return when (packet.destination.type) {
|
||||
MACAddress.Type.BROADCAST -> true
|
||||
MACAddress.Type.UNICAST -> macAddress == packet.destination
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
package net.shadowfacts.phycon.network.block.netswitch
|
||||
|
||||
import net.minecraft.entity.ItemEntity
|
||||
import net.minecraft.util.Tickable
|
||||
import net.minecraft.util.math.Direction
|
||||
import net.shadowfacts.phycon.api.PacketSink
|
||||
import net.shadowfacts.phycon.api.packet.Packet
|
||||
|
@ -7,20 +9,35 @@ import net.shadowfacts.phycon.api.util.MACAddress
|
|||
import net.shadowfacts.phycon.init.PhyBlockEntities
|
||||
import net.shadowfacts.phycon.network.DeviceBlockEntity
|
||||
import net.shadowfacts.phycon.network.NetworkUtil
|
||||
import net.shadowfacts.phycon.network.packet.ItemStackPacket
|
||||
import java.lang.RuntimeException
|
||||
|
||||
/**
|
||||
* @author shadowfacts
|
||||
*/
|
||||
class SwitchBlockEntity: DeviceBlockEntity(PhyBlockEntities.SWITCH) {
|
||||
class SwitchBlockEntity: DeviceBlockEntity(PhyBlockEntities.SWITCH), Tickable {
|
||||
|
||||
private val macTable = mutableMapOf<MACAddress, Direction>()
|
||||
|
||||
override fun handlePacket(packet: Packet) {
|
||||
throw RuntimeException("Unreachable")
|
||||
companion object {
|
||||
var SWITCHING_CAPACITY = 256
|
||||
}
|
||||
|
||||
override fun handle(packet: Packet) {
|
||||
private val macTable = mutableMapOf<MACAddress, Direction>()
|
||||
private var packetsHandledThisTick = 0
|
||||
|
||||
override fun acceptsPacket(packet: Packet) = true
|
||||
|
||||
override fun handlePacket(packet: Packet) {
|
||||
if (packetsHandledThisTick >= SWITCHING_CAPACITY) {
|
||||
if (packet is ItemStackPacket) {
|
||||
// todo: calculate entity spawn point by finding non-obstructed location
|
||||
val entity = ItemEntity(world!!, pos.x.toDouble(), pos.y + 1.0, pos.z.toDouble(), packet.stack)
|
||||
world!!.spawnEntity(entity)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
packetsHandledThisTick++
|
||||
|
||||
if (packet.destination == MACAddress.BROADCAST) {
|
||||
val allDestinations = NetworkUtil.findDestinations(world!!, pos).filter { it.macAddress != packet.source }
|
||||
sendToAll(packet, allDestinations)
|
||||
|
@ -58,4 +75,8 @@ class SwitchBlockEntity: DeviceBlockEntity(PhyBlockEntities.SWITCH) {
|
|||
}
|
||||
}
|
||||
|
||||
override fun tick() {
|
||||
packetsHandledThisTick = 0
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue