SteamPowered/src/main/java/com/teammoeg/steampowered/create/flywheel/engine/EngineTileEntity.java
Timo Ley 116a0461d8 feat!: include Furnace Engine
BREAKING CHANGE: uses normal create instead of fork
2023-12-04 16:08:50 +01:00

93 lines
2.8 KiB
Java

package com.teammoeg.steampowered.create.flywheel.engine;
import java.util.List;
import com.simibubi.create.foundation.blockEntity.SmartBlockEntity;
import com.simibubi.create.foundation.blockEntity.behaviour.BlockEntityBehaviour;
import com.teammoeg.steampowered.create.flywheel.legacy.FlywheelBlock;
import com.teammoeg.steampowered.create.flywheel.legacy.FlywheelBlockEntity;
import com.teammoeg.steampowered.registrate.SPBlocks;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.phys.AABB;
public class EngineTileEntity extends SmartBlockEntity {
public float appliedCapacity;
public float appliedSpeed;
protected FlywheelBlockEntity poweredWheel;
public EngineTileEntity(BlockEntityType<?> type, BlockPos pos, BlockState state) {
super(type, pos, state);
}
@Override
public void addBehaviours(List<BlockEntityBehaviour> behaviours) {
}
@Override
protected AABB createRenderBoundingBox() {
return super.createRenderBoundingBox().inflate(1.5f);
}
@Override
public void lazyTick() {
super.lazyTick();
if (level.isClientSide)
return;
if (poweredWheel != null && poweredWheel.isRemoved())
poweredWheel = null;
if (poweredWheel == null)
attachWheel();
}
public void attachWheel() {
Direction engineFacing = getBlockState().getValue(EngineBlock.FACING);
BlockPos wheelPos = worldPosition.relative(engineFacing, 2);
BlockState wheelState = level.getBlockState(wheelPos);
if (!SPBlocks.FLYWHEEL.has(wheelState))
return;
Direction wheelFacing = wheelState.getValue(FlywheelBlock.HORIZONTAL_FACING);
if (wheelFacing.getAxis() != engineFacing.getClockWise().getAxis())
return;
if (FlywheelBlock.isConnected(wheelState)
&& FlywheelBlock.getConnection(wheelState) != engineFacing.getOpposite())
return;
BlockEntity te = level.getBlockEntity(wheelPos);
if (te.isRemoved())
return;
if (te instanceof FlywheelBlockEntity) {
if (!FlywheelBlock.isConnected(wheelState))
FlywheelBlock.setConnection(level, te.getBlockPos(), te.getBlockState(), engineFacing.getOpposite());
poweredWheel = (FlywheelBlockEntity) te;
refreshWheelSpeed();
}
}
public void detachWheel() {
if (poweredWheel == null || poweredWheel.isRemoved())
return;
poweredWheel.setRotation(0, 0);
FlywheelBlock.setConnection(level, poweredWheel.getBlockPos(), poweredWheel.getBlockState(), null);
poweredWheel = null;
}
@Override
public void remove() {
detachWheel();
super.remove();
}
protected void refreshWheelSpeed() {
if (poweredWheel == null)
return;
poweredWheel.setRotation(appliedSpeed, appliedCapacity);
}
}