package net.minecraft.server; import java.util.Random; public class BlockIceFrost extends BlockIce { public static final BlockStateInteger a = BlockStateInteger.of("age", 0, 3); public BlockIceFrost() { this.y(this.blockStateList.getBlockData().set(BlockIceFrost.a, Integer.valueOf(0))); } public int toLegacyData(IBlockData iblockdata) { return ((Integer) iblockdata.get(BlockIceFrost.a)).intValue(); } public IBlockData fromLegacyData(int i) { return this.getBlockData().set(BlockIceFrost.a, Integer.valueOf(MathHelper.clamp(i, 0, 3))); } public void b(World world, BlockPosition blockposition, IBlockData iblockdata, Random random) { if (!world.paperConfig.frostedIceEnabled) return; // Paper - add ability to disable frosted ice if ((random.nextInt(3) == 0 || this.c(world, blockposition) < 4) && world.getLightLevel(blockposition) > 11 - ((Integer) iblockdata.get(BlockIceFrost.a)).intValue() - iblockdata.c()) { this.a(world, blockposition, iblockdata, random, true); } else { // Paper start - use configurable min/max delay //world.a(blockposition, (Block) this, MathHelper.nextInt(random, 20, 40)); world.a(blockposition, this, MathHelper.nextInt(random, world.paperConfig.frostedIceDelayMin, world.paperConfig.frostedIceDelayMax)); // Paper end } } public void a(IBlockData iblockdata, World world, BlockPosition blockposition, Block block, BlockPosition blockposition1) { if (block == this) { int i = this.c(world, blockposition); if (i < 2) { this.b(world, blockposition); } } } private int c(World world, BlockPosition blockposition) { int i = 0; EnumDirection[] aenumdirection = EnumDirection.values(); int j = aenumdirection.length; for (int k = 0; k < j; ++k) { EnumDirection enumdirection = aenumdirection[k]; if (world.getType(blockposition.shift(enumdirection)).getBlock() == this) { ++i; if (i >= 4) { return i; } } } return i; } protected void a(World world, BlockPosition blockposition, IBlockData iblockdata, Random random, boolean flag) { int i = ((Integer) iblockdata.get(BlockIceFrost.a)).intValue(); if (i < 3) { world.setTypeAndData(blockposition, iblockdata.set(BlockIceFrost.a, Integer.valueOf(i + 1)), 2); world.a(blockposition, (Block) this, MathHelper.nextInt(random, 20, 40)); } else { this.b(world, blockposition); if (flag) { EnumDirection[] aenumdirection = EnumDirection.values(); int j = aenumdirection.length; for (int k = 0; k < j; ++k) { EnumDirection enumdirection = aenumdirection[k]; BlockPosition blockposition1 = blockposition.shift(enumdirection); IBlockData iblockdata1 = world.getType(blockposition1); if (iblockdata1.getBlock() == this) { this.a(world, blockposition1, iblockdata1, random, false); } } } } } protected BlockStateList getStateList() { return new BlockStateList(this, new IBlockState[] { BlockIceFrost.a}); } public ItemStack a(World world, BlockPosition blockposition, IBlockData iblockdata) { return ItemStack.a; } }