Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
  • Loading branch information
ReclipseTheOne committed Dec 23, 2024
2 parents aba1254 + b2f967a commit 3a8d799
Show file tree
Hide file tree
Showing 6 changed files with 208 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package com.portingdeadmods.nautec.content.blockentities;

import com.portingdeadmods.nautec.registries.NTBlockEntityTypes;
import net.minecraft.core.BlockPos;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.state.BlockState;
import net.neoforged.neoforge.energy.IEnergyStorage;

public class CreativeEnergySourceBlockEntity extends BlockEntity implements IEnergyStorage {
private static final int MAX_ENERGY = Integer.MAX_VALUE;

public CreativeEnergySourceBlockEntity(BlockPos pos, BlockState blockState) {
super(NTBlockEntityTypes.CREATIVE_ENERGY_SOURCE.get(), pos, blockState);
}

@Override
public int receiveEnergy(int toReceive, boolean simulate) {
return 0;
}

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

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

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

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

@Override
public boolean canReceive() {
return false;
}
}
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,41 @@
package com.portingdeadmods.nautec.content.blocks;

import net.minecraft.core.BlockPos;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.util.RandomSource;
import net.minecraft.world.level.Level;
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 CreativeEnergySourceBlock extends Block implements EntityBlock {
public CreativeEnergySourceBlock(Properties properties) {
super(properties);
}

@Override
public @Nullable BlockEntity newBlockEntity(BlockPos pos, BlockState state) {
return null;
}

@Override
protected void onPlace(BlockState state, Level level, BlockPos pos, BlockState oldState, boolean movedByPiston) {
super.onPlace(state, level, pos, oldState, movedByPiston);
level.scheduleTick(pos, this, 1);
}

@Override
protected void tick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) {
super.tick(state, level, pos, random);
level.scheduleTick(pos,this,1);
}

@Override
protected boolean triggerEvent(BlockState state, Level level, BlockPos pos, int id, int param) {
super.triggerEvent(state, level, pos, id, param);
BlockEntity be = level.getBlockEntity(pos);
return be != null && be.triggerEvent(id, param);
}
}
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 @@ -71,6 +71,12 @@ public final class NTBlockEntityTypes {
public static final Supplier<BlockEntityType<CreativePowerSourceBlockEntity>> CREATIVE_POWER_SOURCE = BLOCK_ENTITIES.register("creative_power_source",
() -> BlockEntityType.Builder.of(CreativePowerSourceBlockEntity::new,
NTBlocks.CREATIVE_POWER_SOURCE.get()).build(null));
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 @@ -112,6 +112,10 @@ public final class NTBlocks {

public static final DeferredBlock<CreativePowerSourceBlock> CREATIVE_POWER_SOURCE = registerBlockAndItem("creative_power_source", CreativePowerSourceBlock::new,
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 3a8d799

Please sign in to comment.