Skip to content

Commit

Permalink
Energy Converter
Browse files Browse the repository at this point in the history
  • Loading branch information
ktpatient committed Dec 22, 2024
1 parent f0e7e07 commit b2f967a
Show file tree
Hide file tree
Showing 4 changed files with 117 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
package com.portingdeadmods.nautec.content.blockentities;

import com.portingdeadmods.nautec.api.blockentities.LaserBlockEntity;
import com.portingdeadmods.nautec.capabilities.IOActions;
import com.portingdeadmods.nautec.registries.NTBlockEntityTypes;
import it.unimi.dsi.fastutil.Pair;
import it.unimi.dsi.fastutil.objects.ObjectSet;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.world.level.block.state.BlockState;
import net.neoforged.neoforge.capabilities.BlockCapability;
import net.neoforged.neoforge.energy.IEnergyStorage;
import org.jetbrains.annotations.Nullable;

import java.util.Map;

public class EnergyConverterBlockEntity extends LaserBlockEntity implements IEnergyStorage {
private static final int FE_CONVERSION_RATE = 100;
private int feStored = 0;
private static final int MAX_FE = 100000;

public EnergyConverterBlockEntity(BlockPos blockPos, BlockState blockState) {
super(NTBlockEntityTypes.ENERGY_CONVERTER.get(), blockPos, blockState);
}

@Override
public ObjectSet<Direction> getLaserInputs() {
return ObjectSet.of();
}

@Override
public ObjectSet<Direction> getLaserOutputs() {
return ObjectSet.of(Direction.values());
}

@Override
public <T> Map<Direction, Pair<IOActions, int[]>> getSidedInteractions(BlockCapability<T, @Nullable Direction> capability) {
return Map.of();
}

@Override
public void commonTick() {
if (!level.isClientSide) {
Direction[] directions = Direction.values();
for (Direction direction : directions) {
BlockPos pos = worldPosition.relative(direction);
if (level.getBlockEntity(pos) instanceof LaserBlockEntity laserBlockEntity) {
if (laserBlockEntity.getLaserInputs().contains(direction.getOpposite())) {
int energyToConvert = Math.min(FE_CONVERSION_RATE, feStored);
if (energyToConvert > 0) {
transmitPower(energyToConvert);
feStored -= energyToConvert;
}
}
}
}
}
}
@Override
public int receiveEnergy(int maxReceive, boolean simulate) {
int energyReceived = Math.min(MAX_FE - feStored, maxReceive);
if (!simulate) {
feStored += energyReceived;
}
return energyReceived;
}

@Override
public int extractEnergy(int maxExtract, boolean simulate) {
return 0;
}

@Override
public int getEnergyStored() {
return feStored;
}

@Override
public int getMaxEnergyStored() {
return MAX_FE;
}

@Override
public boolean canExtract() {
return false;
}

@Override
public boolean canReceive() {
return true;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.portingdeadmods.nautec.content.blocks;

import com.portingdeadmods.nautec.content.blockentities.EnergyConverterBlockEntity;
import net.minecraft.core.BlockPos;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.EntityBlock;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.state.BlockState;
import org.jetbrains.annotations.Nullable;

public class EnergyConverterBlock extends Block implements EntityBlock {
public EnergyConverterBlock(Properties properties) {
super(properties);
}

@Override
public @Nullable BlockEntity newBlockEntity(BlockPos pos, BlockState state) {
return new EnergyConverterBlockEntity(pos,state);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,9 @@ public final class NTBlockEntityTypes {
public static final Supplier<BlockEntityType<CreativeEnergySourceBlockEntity>> CREATIVE_ENERGY_SOURCE = BLOCK_ENTITIES.register("creative_energy_source",
() -> BlockEntityType.Builder.of(CreativeEnergySourceBlockEntity::new,
NTBlocks.CREATIVE_ENERGY_SOURCE.get()).build(null));
public static final Supplier<BlockEntityType<EnergyConverterBlockEntity>> ENERGY_CONVERTER = BLOCK_ENTITIES.register("energy_converter",
() -> BlockEntityType.Builder.of(EnergyConverterBlockEntity::new,
NTBlocks.ENERGY_CONVERTER.get()).build(null));
public static final Supplier<BlockEntityType<ChargerBlockEntity>> CHARGER = BLOCK_ENTITIES.register("charger",
() -> BlockEntityType.Builder.of(ChargerBlockEntity::new,
NTBlocks.CHARGER.get()).build(null));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,8 @@ public final class NTBlocks {
BlockBehaviour.Properties.ofFullCopy(Blocks.IRON_BLOCK), false, true);
public static final DeferredBlock<CreativeEnergySourceBlock> CREATIVE_ENERGY_SOURCE = registerBlockAndItem("creative_energy_source", CreativeEnergySourceBlock::new,
BlockBehaviour.Properties.ofFullCopy(Blocks.IRON_BLOCK), false, true);
public static final DeferredBlock<EnergyConverterBlock> ENERGY_CONVERTER = registerBlockAndItem("energy_converter", EnergyConverterBlock::new,
BlockBehaviour.Properties.ofFullCopy(Blocks.IRON_BLOCK), false, true);

private static <T extends Block> DeferredBlock<T> registerBlockAndItem(String name, Function<BlockBehaviour.Properties, T> blockConstructor, BlockBehaviour.Properties properties) {
return registerBlockAndItem(name, blockConstructor, properties, true, true);
Expand Down

0 comments on commit b2f967a

Please sign in to comment.