combustible generator but no screen

This commit is contained in:
2026-04-13 23:07:02 +02:00
parent 407e0b44ac
commit 8d146fbd17
8 changed files with 220 additions and 24 deletions

View File

@@ -60,5 +60,6 @@ object BlockEntities {
fun registerPowerBlocks() {
PowerManager.registerPowerBlockEntity(CAPACITOR_ENTITY.get())
PowerManager.registerPowerBlockEntity(COMBUSTGEN_ENTITY.get())
}
}

View File

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