/* * Decompiled with CFR 0.152. * * Could not load the following classes: * com.mojang.serialization.MapCodec * org.jspecify.annotations.Nullable */ package net.minecraft.world.level.block; import com.mojang.serialization.MapCodec; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.server.level.ServerLevel; import net.minecraft.sounds.SoundEvents; import net.minecraft.sounds.SoundSource; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.state.BlockBehaviour; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.StateDefinition; import net.minecraft.world.level.block.state.properties.BlockStateProperties; import net.minecraft.world.level.block.state.properties.BooleanProperty; import net.minecraft.world.level.redstone.Orientation; import org.jspecify.annotations.Nullable; public class CopperBulbBlock extends Block { public static final MapCodec CODEC = CopperBulbBlock.simpleCodec(CopperBulbBlock::new); public static final BooleanProperty POWERED = BlockStateProperties.POWERED; public static final BooleanProperty LIT = BlockStateProperties.LIT; protected MapCodec codec() { return CODEC; } public CopperBulbBlock(BlockBehaviour.Properties properties) { super(properties); this.registerDefaultState((BlockState)((BlockState)this.defaultBlockState().setValue(LIT, false)).setValue(POWERED, false)); } @Override protected void onPlace(BlockState state, Level level, BlockPos pos, BlockState oldState, boolean movedByPiston) { if (oldState.getBlock() != state.getBlock() && level instanceof ServerLevel) { ServerLevel serverLevel = (ServerLevel)level; this.checkAndFlip(state, serverLevel, pos); } } @Override protected void neighborChanged(BlockState state, Level level, BlockPos pos, Block block, @Nullable Orientation orientation, boolean movedByPiston) { if (level instanceof ServerLevel) { ServerLevel serverLevel = (ServerLevel)level; this.checkAndFlip(state, serverLevel, pos); } } public void checkAndFlip(BlockState state, ServerLevel level, BlockPos pos) { boolean signal = level.hasNeighborSignal(pos); if (signal == state.getValue(POWERED)) { return; } BlockState newState = state; if (!state.getValue(POWERED).booleanValue()) { level.playSound(null, pos, (newState = (BlockState)newState.cycle(LIT)).getValue(LIT) != false ? SoundEvents.COPPER_BULB_TURN_ON : SoundEvents.COPPER_BULB_TURN_OFF, SoundSource.BLOCKS); } level.setBlock(pos, (BlockState)newState.setValue(POWERED, signal), 3); } @Override protected void createBlockStateDefinition(StateDefinition.Builder builder) { builder.add(LIT, POWERED); } @Override protected boolean hasAnalogOutputSignal(BlockState state) { return true; } @Override protected int getAnalogOutputSignal(BlockState state, Level level, BlockPos pos, Direction direction) { return level.getBlockState(pos).getValue(LIT) != false ? 15 : 0; } }