package com.dairymoose.modernlife.tileentities;

import com.dairymoose.modernlife.blocks.RadiatorBlock;
import com.dairymoose.modernlife.core.CustomBlocks;
import com.mojang.datafixers.types.Type;
import net.minecraft.core.BlockPos;
import net.minecraft.core.particles.ParticleTypes;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.Blocks;
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.level.block.state.properties.BlockStateProperties;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

/* loaded from: outputsrg.jar:com/dairymoose/modernlife/tileentities/RadiatorBlockEntity.class */
public class RadiatorBlockEntity extends BlockEntity {
    public static final BlockEntityType<RadiatorBlockEntity> RADIATOR = BlockEntityType.Builder.of(RadiatorBlockEntity::new, new Block[]{(Block) CustomBlocks.BLOCK_RADIATOR.get()}).build((Type) null);
    private static final Logger LOGGER = LogManager.getLogger();
    private double multLow;
    private double multMed;
    private double multHigh;
    final int LOW_DIAMETER = 9;
    final int MED_DIAMETER = 13;
    final int HIGH_DIAMETER = 19;

    public RadiatorBlockEntity(BlockPos pos, BlockState state) {
        super(RADIATOR, pos, state);
        this.multLow = 1.0d;
        this.multMed = 1.6d;
        this.multHigh = 2.56d;
        this.LOW_DIAMETER = 9;
        this.MED_DIAMETER = 13;
        this.HIGH_DIAMETER = 19;
    }

    private void meltTargetedSpot(ServerLevel world, BlockPos targetPos, double meltMult) {
        double meltChance = 1.0d / targetPos.distSqr(getBlockPos());
        if (Math.random() >= meltChance * 1.0d * meltMult) {
            return;
        }
        BlockState targetBlockState = world.getBlockState(targetPos);
        if (targetBlockState.is(Blocks.ICE) || targetBlockState.is(Blocks.PACKED_ICE) || targetBlockState.is(Blocks.BLUE_ICE) || targetBlockState.is(Blocks.FROSTED_ICE)) {
            world.setBlockAndUpdate(targetPos, Blocks.WATER.defaultBlockState());
            world.neighborChanged(targetPos, Blocks.WATER, targetPos);
        } else if (targetBlockState.is(Blocks.SNOW) || targetBlockState.is(Blocks.SNOW_BLOCK)) {
            targetBlockState.getOptionalValue(BlockStateProperties.SNOWY);
            world.sendParticles(ParticleTypes.LARGE_SMOKE, targetPos.getX() + 0.5d, targetPos.getY() + 0.5d, targetPos.getZ() + 0.5d, 0, 0.0d, 0.0d, 0.0d, 0.0d);
            world.m_46961_(targetPos, false);
        }
    }

    public void meltSnow(int meltDiameter, double meltMult, int n) {
        for (int i = 0; i < n; i++) {
            int xOffset = ((int) (meltDiameter * Math.random())) - (meltDiameter / 2);
            int zOffset = ((int) (meltDiameter * Math.random())) - (meltDiameter / 2);
            Level level = getLevel();
            if (level instanceof ServerLevel) {
                ServerLevel world = (ServerLevel) level;
                BlockPos targetPos = new BlockPos(getBlockPos().getX() + xOffset, getBlockPos().getY(), getBlockPos().getZ() + zOffset);
                meltTargetedSpot(world, targetPos, meltMult);
                meltTargetedSpot(world, targetPos.below(), meltMult);
                meltTargetedSpot(world, targetPos.below().below(), meltMult);
                meltTargetedSpot(world, targetPos.above(), meltMult);
                meltTargetedSpot(world, targetPos.above().above(), meltMult);
            }
        }
    }

    public static void tick(Level level, BlockPos pos, BlockState state, RadiatorBlockEntity entity) {
        entity.tick();
    }

    public void tick() {
        RadiatorBlock.HeatType heat = (RadiatorBlock.HeatType) getBlockState().getValue(RadiatorBlock.HEAT);
        switch (heat) {
            case HeatType.off:
            default:
                return;
            case HeatType.low:
                meltSnow(9, this.multLow, 1);
                return;
            case HeatType.medium:
                meltSnow(13, this.multMed, 2);
                return;
            case HeatType.high:
                meltSnow(19, this.multHigh, 5);
                return;
        }
    }
}
