Skip to content

Commit

Permalink
cable renderer that connects to stuff, lightbulb textures (#208)
Browse files Browse the repository at this point in the history
* Added the cable model, made cable to not be a full block, voltmeter now displays power and amperage, and made files for damage systems.

* Successfully broke wire render!

* Lots of stuff, a kind-of working cable renderer but needs help

* Lots of stuff, a kind-of working cable renderer but needs help

* about 75% of Jared's issues fixed

* weird bug and a lot of new stuff

* Removed a lot of unnescessary logging and removed more whitespace.

* fixed that f@#!? texture that didn't wanna load?

* Cables semi-done finally!

* Cables!!!

* removed unneeded importe

* Cables!!!

* proper breaking particles
  • Loading branch information
BomberPlayz committed Sep 9, 2022
1 parent bde88a6 commit 89047d7
Show file tree
Hide file tree
Showing 29 changed files with 808 additions and 118 deletions.
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package org.eln2.mc.common.blocks.cell

import com.google.common.collect.ImmutableMap
import net.minecraft.core.BlockPos
import net.minecraft.network.chat.Component
import net.minecraft.network.chat.TranslatableComponent
Expand All @@ -20,6 +21,7 @@ import org.eln2.mc.common.blocks.CellTileEntity
import org.eln2.mc.common.cell.CellRegistry
import org.eln2.mc.common.containers.VoltageSourceCellContainer


class VoltageSourceCellBlock : CellBlockBase() {
override fun getCellProvider(): ResourceLocation {
return CellRegistry.VOLTAGE_SOURCE_CELL.id
Expand Down
131 changes: 131 additions & 0 deletions src/main/java/org/eln2/mc/common/blocks/cell/WireCellBlock.kt
Original file line number Diff line number Diff line change
@@ -1,11 +1,142 @@
package org.eln2.mc.common.blocks.cell

import net.minecraft.core.BlockPos
import net.minecraft.core.Direction
import net.minecraft.resources.ResourceLocation
import net.minecraft.world.level.BlockGetter
import net.minecraft.world.level.Level
import net.minecraft.world.level.LevelReader
import net.minecraft.world.level.block.Block
import net.minecraft.world.level.block.HorizontalDirectionalBlock
import net.minecraft.world.level.block.state.BlockState
import net.minecraft.world.level.block.state.StateDefinition
import net.minecraft.world.level.block.state.properties.DirectionProperty
import net.minecraft.world.level.block.state.properties.BooleanProperty;
import net.minecraft.world.phys.shapes.CollisionContext
import net.minecraft.world.phys.shapes.VoxelShape
import org.eln2.mc.common.blocks.CellBlockBase
import org.eln2.mc.common.blocks.CellTileEntity
import org.eln2.mc.common.cell.CellRegistry

class WireCellBlock : CellBlockBase() {

lateinit var connect_east: BooleanProperty
lateinit var connect_west: BooleanProperty
lateinit var connect_north: BooleanProperty
lateinit var connect_south: BooleanProperty


init {
registerDefaultState(stateDefinition.any().setValue(connect_east, false).setValue(connect_north, false).setValue(connect_south, false).setValue(connect_west, false))
}


override fun getCellProvider(): ResourceLocation {
return CellRegistry.WIRE_CELL.id
}

override fun getCollisionShape(pState: BlockState, pLevel: BlockGetter, pPos: BlockPos, pContext: CollisionContext): VoxelShape {
return Block.box(0.0, 0.0, 0.0, 16.0, 1.0, 16.0)
}

override fun getShape(pState: BlockState, pLevel: BlockGetter, pPos: BlockPos, pContext: CollisionContext): VoxelShape {
return Block.box(0.0, 0.0, 0.0, 16.0, 2.0, 16.0)
}

override fun onPlace(pState: BlockState, pLevel: Level, pPos: BlockPos, pOldState: BlockState, pIsMoving: Boolean) {
super.onPlace(pState, pLevel, pPos, pOldState, pIsMoving)

// get blocks around and call nechang
for (x in -1..1) {
for (z in -1..1) {
if (x == 0 && z == 0) continue
neChang(pLevel, pPos, BlockPos(pPos.x + x, pPos.y, pPos.z + z))
}
}
}

override fun createBlockStateDefinition(pBuilder: StateDefinition.Builder<Block, BlockState>) {
super.createBlockStateDefinition(pBuilder)

connect_east = BooleanProperty.create("connect_east")
connect_north = BooleanProperty.create("connect_north")
connect_south = BooleanProperty.create("connect_south")
connect_west = BooleanProperty.create("connect_west")

pBuilder.add(connect_east, connect_north, connect_south, connect_west)
}



fun neChang(level: Level, pos: BlockPos, neighbor: BlockPos) {
val blockEntity = level.getBlockEntity(neighbor ?: error("Neighbor position was null"))
if(blockEntity != null) {

// check if the blockentity is from this mod
if(blockEntity is CellTileEntity) {
// get the direction of the neighbor from us
val direction = Direction.fromNormal(neighbor.subtract(pos))

if(direction?.equals(Direction.EAST) == true) {
level.setBlockAndUpdate(pos, level.getBlockState(pos).setValue(connect_east, true))
}
if(direction?.equals(Direction.NORTH) == true) {
level.setBlockAndUpdate(pos, level.getBlockState(pos).setValue(connect_north, true))
}
if(direction?.equals(Direction.SOUTH) == true) {
level.setBlockAndUpdate(pos, level.getBlockState(pos).setValue(connect_south, true))
}
if(direction?.equals(Direction.WEST) == true) {
level.setBlockAndUpdate(pos, level.getBlockState(pos).setValue(connect_west, true))
}
} else {
// not a cell tile entity
val direction = Direction.fromNormal(neighbor.subtract(pos))

if(direction?.equals(Direction.EAST) == true) {
level.setBlockAndUpdate(pos, level.getBlockState(pos).setValue(connect_east, false))
}
if(direction?.equals(Direction.NORTH) == true) {
level.setBlockAndUpdate(pos, level.getBlockState(pos).setValue(connect_north, false))
}
if(direction?.equals(Direction.SOUTH) == true) {
level.setBlockAndUpdate(pos, level.getBlockState(pos).setValue(connect_south, false))
}
if(direction?.equals(Direction.WEST) == true) {
level.setBlockAndUpdate(pos, level.getBlockState(pos).setValue(connect_west, false))
}
}
} else {
// not a cell tile entity

val direction = Direction.fromNormal(neighbor.subtract(pos))

if(direction?.equals(Direction.EAST) == true) {
level.setBlockAndUpdate(pos, level.getBlockState(pos).setValue(connect_east, false))
}
if(direction?.equals(Direction.NORTH) == true) {
level.setBlockAndUpdate(pos, level.getBlockState(pos).setValue(connect_north, false))
}
if(direction?.equals(Direction.SOUTH) == true) {
level.setBlockAndUpdate(pos, level.getBlockState(pos).setValue(connect_south, false))
}
if(direction?.equals(Direction.WEST) == true) {
level.setBlockAndUpdate(pos, level.getBlockState(pos).setValue(connect_west, false))
}
}
}
override fun onNeighborChange(blockState: BlockState?, world: LevelReader?, pos: BlockPos?, neighbor: BlockPos?) {

var level = world as Level

if (world != null && pos != null) {
if (!(world?.isClientSide?: error("World was null"))) {
if (neighbor != null && neighbor != pos) {
neChang(level, pos, neighbor)
}
}
}

super.onNeighborChange(blockState, world, pos, neighbor)
}
}
15 changes: 14 additions & 1 deletion src/main/java/org/eln2/mc/common/items/VoltmeterItem.kt
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,22 @@ class VoltmeterItem(tab: CreativeModeTab?): Item(Item.Properties().also {if(tab
val clicked = context.level.getBlockEntity(context.clickedPos)
if (clicked is CellTileEntity) {
val voltage = clicked.getHudMap()["voltage"]
val power = clicked.getHudMap()["power"]
val current = clicked.getHudMap()["current"]

var text = ""

if (voltage != null) {
context.player?.sendMessage(TextComponent(voltage), Util.NIL_UUID)
text += "Voltage: "+voltage+" "
}
if (power != null) {
text += "Power: "+power+" "
}
if (current != null) {
text += "Current: "+current+" "
}

context.player?.sendMessage(TextComponent(text), Util.NIL_UUID)
return InteractionResult.SUCCESS
}
return InteractionResult.PASS
Expand Down
Loading

0 comments on commit 89047d7

Please sign in to comment.