combustible generator but no screen
This commit is contained in:
@@ -60,5 +60,6 @@ object BlockEntities {
|
||||
|
||||
fun registerPowerBlocks() {
|
||||
PowerManager.registerPowerBlockEntity(CAPACITOR_ENTITY.get())
|
||||
PowerManager.registerPowerBlockEntity(COMBUSTGEN_ENTITY.get())
|
||||
}
|
||||
}
|
||||
@@ -1,20 +1,72 @@
|
||||
package org.neoflock.neocomputers.entity
|
||||
|
||||
import net.minecraft.core.BlockPos
|
||||
import net.minecraft.world.level.block.entity.BlockEntity
|
||||
import net.minecraft.world.level.block.entity.BlockEntityType
|
||||
import net.minecraft.core.NonNullList
|
||||
import net.minecraft.world.entity.player.Player
|
||||
import net.minecraft.world.item.ItemStack
|
||||
import net.minecraft.world.level.block.state.BlockState
|
||||
import org.neoflock.neocomputers.block.NodeBlockEntity
|
||||
import org.neoflock.neocomputers.network.Networking
|
||||
import org.neoflock.neocomputers.network.PowerRole
|
||||
import org.neoflock.neocomputers.utils.GenericContainer
|
||||
import org.neoflock.neocomputers.utils.ContainerUtils
|
||||
import kotlin.math.min
|
||||
|
||||
class CombustionGeneratorBlockEntity(blockPos: BlockPos, blockState: BlockState) : BlockEntity(BlockEntities.COMBUSTGEN_ENTITY.get(), blockPos, blockState) {
|
||||
class CombustionGeneratorBlockEntity(blockPos: BlockPos, blockState: BlockState) : NodeBlockEntity(BlockEntities.COMBUSTGEN_ENTITY.get(), blockPos, blockState), GenericContainer {
|
||||
val energyPerTick: Long = 50
|
||||
|
||||
fun giveSolarPower() {
|
||||
if(level?.isDay == true) {
|
||||
val below = level?.getBlockEntity(blockPos.below())
|
||||
if(below is NodeBlockEntity) {
|
||||
below.node.giveEnergy(energyPerTick)
|
||||
}
|
||||
var energy: Long = 0
|
||||
val maxEnergy: Long = 50000
|
||||
var burningTimeRemaining: Int = 0
|
||||
|
||||
override val node = object : Networking.Node() {
|
||||
override fun getPowerRole() = PowerRole.GENERATOR
|
||||
override fun getEnergy() = energy
|
||||
override fun getEnergyCapacity() = maxEnergy
|
||||
override fun withdrawEnergy(amount: Long): Long {
|
||||
val taken = min(amount, energy)
|
||||
energy -= taken
|
||||
return taken
|
||||
}
|
||||
|
||||
override fun giveEnergy(amount: Long): Long {
|
||||
val given = min(amount, maxEnergy - energy)
|
||||
energy += given
|
||||
return given
|
||||
}
|
||||
}
|
||||
|
||||
val stacks: NonNullList<ItemStack> = NonNullList<ItemStack>.withSize(1, ItemStack.EMPTY)
|
||||
|
||||
override fun canPlaceItem(i: Int, itemStack: ItemStack): Boolean {
|
||||
return ContainerUtils.isBurningFuel(itemStack)
|
||||
}
|
||||
|
||||
override fun getItems(): NonNullList<ItemStack> = stacks
|
||||
|
||||
override fun stillValid(player: Player): Boolean {
|
||||
return !this.isRemoved
|
||||
}
|
||||
|
||||
fun burnFuelForEnergy() {
|
||||
// TODO: give us a block state tag for active
|
||||
|
||||
// keep combusting and shi
|
||||
if(burningTimeRemaining > 0) {
|
||||
burningTimeRemaining--
|
||||
node.giveEnergy(energyPerTick)
|
||||
setChanged()
|
||||
return
|
||||
}
|
||||
|
||||
// no point
|
||||
if(node.getEnergy() >= node.getEnergyCapacity()) return;
|
||||
|
||||
// :fire:
|
||||
val fuel = stacks[0]
|
||||
if(fuel.isEmpty) return
|
||||
|
||||
burningTimeRemaining = ContainerUtils.getBurningTime(fuel) ?: 0
|
||||
fuel.count--
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user