mirror of
https://github.com/XevianLight/Aphelion.git
synced 2026-05-11 01:50:56 +01:00
100 lines
4.0 KiB
Java
100 lines
4.0 KiB
Java
package net.xevianlight.aphelion.block.custom;
|
|
|
|
import net.minecraft.core.BlockPos;
|
|
import net.minecraft.sounds.SoundEvent;
|
|
import net.minecraft.sounds.SoundSource;
|
|
import net.minecraft.world.InteractionHand;
|
|
import net.minecraft.world.ItemInteractionResult;
|
|
import net.minecraft.world.entity.player.Player;
|
|
import net.minecraft.world.item.ItemStack;
|
|
import net.minecraft.world.level.Level;
|
|
import net.minecraft.world.level.block.entity.BlockEntity;
|
|
import net.minecraft.world.level.block.state.BlockState;
|
|
import net.minecraft.world.phys.BlockHitResult;
|
|
import net.neoforged.neoforge.capabilities.Capabilities;
|
|
import net.neoforged.neoforge.common.SoundActions;
|
|
import net.neoforged.neoforge.fluids.FluidStack;
|
|
import net.neoforged.neoforge.fluids.FluidType;
|
|
import net.neoforged.neoforge.fluids.FluidUtil;
|
|
import net.neoforged.neoforge.fluids.capability.IFluidHandler;
|
|
import net.xevianlight.aphelion.Aphelion;
|
|
import net.xevianlight.aphelion.block.custom.base.StationEngineBlock;
|
|
import net.xevianlight.aphelion.block.entity.custom.StationRocketEngineBlockEntity;
|
|
import org.jetbrains.annotations.NotNull;
|
|
import org.jetbrains.annotations.Nullable;
|
|
|
|
public class StationRocketEngineBlock extends StationEngineBlock {
|
|
public StationRocketEngineBlock(Properties properties) {
|
|
super(properties);
|
|
}
|
|
|
|
@Override
|
|
public @Nullable BlockEntity newBlockEntity(@NotNull BlockPos blockPos, @NotNull BlockState blockState) {
|
|
return new StationRocketEngineBlockEntity(blockPos, blockState);
|
|
}
|
|
|
|
@Override
|
|
public @NotNull ItemInteractionResult useItemOn(
|
|
ItemStack stack,
|
|
BlockState state,
|
|
Level level,
|
|
BlockPos pos,
|
|
Player player,
|
|
InteractionHand hand,
|
|
BlockHitResult hit) {
|
|
|
|
// Only intercept on client if holding a fluid container, otherwise let block placement through
|
|
if (level.isClientSide) {
|
|
return FluidUtil.getFluidHandler(stack).isPresent()
|
|
? ItemInteractionResult.SUCCESS
|
|
: ItemInteractionResult.PASS_TO_DEFAULT_BLOCK_INTERACTION;
|
|
}
|
|
|
|
BlockEntity be = level.getBlockEntity(pos);
|
|
if (!(be instanceof StationRocketEngineBlockEntity engineBE)) {
|
|
return ItemInteractionResult.PASS_TO_DEFAULT_BLOCK_INTERACTION;
|
|
}
|
|
|
|
IFluidHandler tankHandler = level.getCapability(
|
|
Capabilities.FluidHandler.BLOCK, pos, state, be, null
|
|
);
|
|
|
|
if (tankHandler == null) {
|
|
return ItemInteractionResult.PASS_TO_DEFAULT_BLOCK_INTERACTION;
|
|
}
|
|
|
|
FluidStack fluidBeforeInteraction = FluidUtil.getFluidContained(player.getItemInHand(hand))
|
|
.orElse(FluidStack.EMPTY);
|
|
|
|
boolean success = FluidUtil.interactWithFluidHandler(player, hand, tankHandler);
|
|
|
|
if (success) {
|
|
FluidStack tankFluid = tankHandler.getFluidInTank(0);
|
|
FluidStack relevantFluid = fluidBeforeInteraction.isEmpty() ? tankFluid : fluidBeforeInteraction;
|
|
|
|
Aphelion.LOGGER.info("fluidBeforeInteraction: {}", fluidBeforeInteraction);
|
|
Aphelion.LOGGER.info("tankFluid: {}", tankFluid);
|
|
Aphelion.LOGGER.info("relevantFluid: {}", relevantFluid);
|
|
|
|
if (!relevantFluid.isEmpty()) {
|
|
FluidType fluidType = relevantFluid.getFluid().getFluidType();
|
|
SoundEvent sound = fluidBeforeInteraction.isEmpty()
|
|
? fluidType.getSound(SoundActions.BUCKET_FILL)
|
|
: fluidType.getSound(SoundActions.BUCKET_EMPTY);
|
|
|
|
Aphelion.LOGGER.info("fluidType: {}", fluidType);
|
|
Aphelion.LOGGER.info("sound: {}", sound);
|
|
|
|
if (sound != null) {
|
|
Aphelion.LOGGER.info("Playing sound!");
|
|
level.playSound(null, pos, sound, SoundSource.BLOCKS, 1.0F, 1.0F);
|
|
}
|
|
}
|
|
|
|
return ItemInteractionResult.CONSUME;
|
|
}
|
|
|
|
return ItemInteractionResult.PASS_TO_DEFAULT_BLOCK_INTERACTION;
|
|
}
|
|
}
|