Add cable disconnection using the Screwdriver
This commit is contained in:
parent
f9fd00f611
commit
e246736486
|
@ -23,6 +23,7 @@ import net.minecraft.world.World
|
||||||
import net.shadowfacts.phycon.PhysicalConnectivity
|
import net.shadowfacts.phycon.PhysicalConnectivity
|
||||||
import net.shadowfacts.phycon.api.NetworkCable
|
import net.shadowfacts.phycon.api.NetworkCable
|
||||||
import net.shadowfacts.phycon.api.NetworkComponent
|
import net.shadowfacts.phycon.api.NetworkComponent
|
||||||
|
import net.shadowfacts.phycon.init.PhyItems
|
||||||
import net.shadowfacts.phycon.util.CableConnection
|
import net.shadowfacts.phycon.util.CableConnection
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
|
@ -111,6 +112,38 @@ class CableBlock: Block(Settings.of(CABLE_MATERIAL)), NetworkCable {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun activate(state: BlockState, world: World, pos: BlockPos, player: PlayerEntity, hand: Hand, hitResult: BlockHitResult): Boolean {
|
||||||
|
if (player.getStackInHand(hand).item == PhyItems.SCREWDRIVER) {
|
||||||
|
val hitPos = Vec3d(hitResult.pos.x - pos.x, hitResult.pos.y - pos.y, hitResult.pos.z - pos.z)
|
||||||
|
val hitConnection = SIDE_SHAPES.entries.firstOrNull { (_, shape) ->
|
||||||
|
val box = shape.boundingBox
|
||||||
|
hitPos.x >= box.minX && hitPos.x <= box.maxX && hitPos.y >= box.minY && hitPos.y <= box.maxY && hitPos.z >= box.minZ && hitPos.z <= box.maxZ
|
||||||
|
}
|
||||||
|
if (hitConnection != null) {
|
||||||
|
val side = hitConnection.key
|
||||||
|
val prop = CONNECTIONS[side]
|
||||||
|
val newState = when (state[prop]) {
|
||||||
|
CableConnection.DISABLED -> {
|
||||||
|
// if the block this cable is connecting to on the side that will be re-enabled is a cable that
|
||||||
|
// is disabled on the side that connects it to us, we also re-enable that cable to make sure both
|
||||||
|
// "halves" of the connection are in the same state
|
||||||
|
val connectedToPos = pos.offset(side)
|
||||||
|
val connectedTo = world.getBlockState(connectedToPos)
|
||||||
|
if (connectedTo.block == this && connectedTo[CONNECTIONS[side.opposite]] == CableConnection.DISABLED) {
|
||||||
|
world.setBlockState(connectedToPos, connectedTo.with(CONNECTIONS[side.opposite], CableConnection.ON))
|
||||||
|
}
|
||||||
|
|
||||||
|
state.with(prop, if (connectedTo.block is NetworkComponent) CableConnection.ON else CableConnection.OFF)
|
||||||
|
}
|
||||||
|
else -> state.with(prop, CableConnection.DISABLED)
|
||||||
|
}
|
||||||
|
world.setBlockState(pos, newState)
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
@Environment(EnvType.CLIENT)
|
@Environment(EnvType.CLIENT)
|
||||||
override fun getRenderLayer(): BlockRenderLayer {
|
override fun getRenderLayer(): BlockRenderLayer {
|
||||||
return BlockRenderLayer.TRANSLUCENT
|
return BlockRenderLayer.TRANSLUCENT
|
||||||
|
|
Loading…
Reference in New Issue