package net.minecraft.init; import com.mojang.authlib.GameProfile; import java.io.PrintStream; import java.util.Random; import java.util.UUID; import net.minecraft.block.Block; import net.minecraft.block.BlockCommandBlock; import net.minecraft.block.BlockDispenser; import net.minecraft.block.BlockFire; import net.minecraft.block.BlockLiquid; import net.minecraft.block.BlockPumpkin; import net.minecraft.block.BlockSkull; import net.minecraft.block.BlockTNT; import net.minecraft.block.material.Material; import net.minecraft.block.state.IBlockState; import net.minecraft.dispenser.BehaviorDefaultDispenseItem; import net.minecraft.dispenser.BehaviorProjectileDispense; import net.minecraft.dispenser.IBehaviorDispenseItem; import net.minecraft.dispenser.IBlockSource; import net.minecraft.dispenser.IPosition; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLiving; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.IProjectile; import net.minecraft.entity.item.EntityBoat; import net.minecraft.entity.item.EntityExpBottle; import net.minecraft.entity.item.EntityFireworkRocket; import net.minecraft.entity.item.EntityTNTPrimed; import net.minecraft.entity.projectile.EntityArrow; import net.minecraft.entity.projectile.EntityEgg; import net.minecraft.entity.projectile.EntityPotion; import net.minecraft.entity.projectile.EntitySmallFireball; import net.minecraft.entity.projectile.EntitySnowball; import net.minecraft.item.EnumDyeColor; import net.minecraft.item.Item; import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemBucket; import net.minecraft.item.ItemDye; import net.minecraft.item.ItemMonsterPlacer; import net.minecraft.item.ItemPotion; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTUtil; import net.minecraft.stats.StatList; import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntityDispenser; import net.minecraft.tileentity.TileEntitySkull; import net.minecraft.util.BlockPos; import net.minecraft.util.EnumFacing; import net.minecraft.util.LoggingPrintStream; import net.minecraft.world.World; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; public class Bootstrap { private static final PrintStream SYSOUT = System.out; /** Whether the blocks, items, etc have already been registered */ private static boolean alreadyRegistered = false; private static final Logger LOGGER = LogManager.getLogger(); private static final String __OBFID = "CL_00001397"; /** * Is Bootstrap registration already done? */ public static boolean isRegistered() { return alreadyRegistered; } static void registerDispenserBehaviors() { BlockDispenser.dispenseBehaviorRegistry.putObject(Items.arrow, new BehaviorProjectileDispense() { private static final String __OBFID = "CL_00001398"; protected IProjectile getProjectileEntity(World worldIn, IPosition position) { EntityArrow var3 = new EntityArrow(worldIn, position.getX(), position.getY(), position.getZ()); var3.canBePickedUp = 1; return var3; } }); BlockDispenser.dispenseBehaviorRegistry.putObject(Items.egg, new BehaviorProjectileDispense() { private static final String __OBFID = "CL_00001404"; protected IProjectile getProjectileEntity(World worldIn, IPosition position) { return new EntityEgg(worldIn, position.getX(), position.getY(), position.getZ()); } }); BlockDispenser.dispenseBehaviorRegistry.putObject(Items.snowball, new BehaviorProjectileDispense() { private static final String __OBFID = "CL_00001405"; protected IProjectile getProjectileEntity(World worldIn, IPosition position) { return new EntitySnowball(worldIn, position.getX(), position.getY(), position.getZ()); } }); BlockDispenser.dispenseBehaviorRegistry.putObject(Items.experience_bottle, new BehaviorProjectileDispense() { private static final String __OBFID = "CL_00001406"; protected IProjectile getProjectileEntity(World worldIn, IPosition position) { return new EntityExpBottle(worldIn, position.getX(), position.getY(), position.getZ()); } protected float func_82498_a() { return super.func_82498_a() * 0.5F; } protected float func_82500_b() { return super.func_82500_b() * 1.25F; } }); BlockDispenser.dispenseBehaviorRegistry.putObject(Items.potionitem, new IBehaviorDispenseItem() { private final BehaviorDefaultDispenseItem field_150843_b = new BehaviorDefaultDispenseItem(); private static final String __OBFID = "CL_00001407"; public ItemStack dispense(IBlockSource source, final ItemStack stack) { return ItemPotion.isSplash(stack.getMetadata()) ? (new BehaviorProjectileDispense() { private static final String __OBFID = "CL_00001408"; protected IProjectile getProjectileEntity(World worldIn, IPosition position) { return new EntityPotion(worldIn, position.getX(), position.getY(), position.getZ(), stack.copy()); } protected float func_82498_a() { return super.func_82498_a() * 0.5F; } protected float func_82500_b() { return super.func_82500_b() * 1.25F; } }).dispense(source, stack): this.field_150843_b.dispense(source, stack); } }); BlockDispenser.dispenseBehaviorRegistry.putObject(Items.spawn_egg, new BehaviorDefaultDispenseItem() { private static final String __OBFID = "CL_00001410"; public ItemStack dispenseStack(IBlockSource source, ItemStack stack) { EnumFacing var3 = BlockDispenser.getFacing(source.getBlockMetadata()); double var4 = source.getX() + (double)var3.getFrontOffsetX(); double var6 = (double)((float)source.getBlockPos().getY() + 0.2F); double var8 = source.getZ() + (double)var3.getFrontOffsetZ(); Entity var10 = ItemMonsterPlacer.spawnCreature(source.getWorld(), stack.getMetadata(), var4, var6, var8); if (var10 instanceof EntityLivingBase && stack.hasDisplayName()) { ((EntityLiving)var10).setCustomNameTag(stack.getDisplayName()); } stack.splitStack(1); return stack; } }); BlockDispenser.dispenseBehaviorRegistry.putObject(Items.fireworks, new BehaviorDefaultDispenseItem() { private static final String __OBFID = "CL_00001411"; public ItemStack dispenseStack(IBlockSource source, ItemStack stack) { EnumFacing var3 = BlockDispenser.getFacing(source.getBlockMetadata()); double var4 = source.getX() + (double)var3.getFrontOffsetX(); double var6 = (double)((float)source.getBlockPos().getY() + 0.2F); double var8 = source.getZ() + (double)var3.getFrontOffsetZ(); EntityFireworkRocket var10 = new EntityFireworkRocket(source.getWorld(), var4, var6, var8, stack); source.getWorld().spawnEntityInWorld(var10); stack.splitStack(1); return stack; } protected void playDispenseSound(IBlockSource source) { source.getWorld().playAuxSFX(1002, source.getBlockPos(), 0); } }); BlockDispenser.dispenseBehaviorRegistry.putObject(Items.fire_charge, new BehaviorDefaultDispenseItem() { private static final String __OBFID = "CL_00001412"; public ItemStack dispenseStack(IBlockSource source, ItemStack stack) { EnumFacing var3 = BlockDispenser.getFacing(source.getBlockMetadata()); IPosition var4 = BlockDispenser.getDispensePosition(source); double var5 = var4.getX() + (double)((float)var3.getFrontOffsetX() * 0.3F); double var7 = var4.getY() + (double)((float)var3.getFrontOffsetX() * 0.3F); double var9 = var4.getZ() + (double)((float)var3.getFrontOffsetZ() * 0.3F); World var11 = source.getWorld(); Random var12 = var11.rand; double var13 = var12.nextGaussian() * 0.05D + (double)var3.getFrontOffsetX(); double var15 = var12.nextGaussian() * 0.05D + (double)var3.getFrontOffsetY(); double var17 = var12.nextGaussian() * 0.05D + (double)var3.getFrontOffsetZ(); var11.spawnEntityInWorld(new EntitySmallFireball(var11, var5, var7, var9, var13, var15, var17)); stack.splitStack(1); return stack; } protected void playDispenseSound(IBlockSource source) { source.getWorld().playAuxSFX(1009, source.getBlockPos(), 0); } }); BlockDispenser.dispenseBehaviorRegistry.putObject(Items.boat, new BehaviorDefaultDispenseItem() { private final BehaviorDefaultDispenseItem field_150842_b = new BehaviorDefaultDispenseItem(); private static final String __OBFID = "CL_00001413"; public ItemStack dispenseStack(IBlockSource source, ItemStack stack) { EnumFacing var3 = BlockDispenser.getFacing(source.getBlockMetadata()); World var4 = source.getWorld(); double var5 = source.getX() + (double)((float)var3.getFrontOffsetX() * 1.125F); double var7 = source.getY() + (double)((float)var3.getFrontOffsetY() * 1.125F); double var9 = source.getZ() + (double)((float)var3.getFrontOffsetZ() * 1.125F); BlockPos var11 = source.getBlockPos().offset(var3); Material var12 = var4.getBlockState(var11).getBlock().getMaterial(); double var13; if (Material.water.equals(var12)) { var13 = 1.0D; } else { if (!Material.air.equals(var12) || !Material.water.equals(var4.getBlockState(var11.offsetDown()).getBlock().getMaterial())) { return this.field_150842_b.dispense(source, stack); } var13 = 0.0D; } EntityBoat var15 = new EntityBoat(var4, var5, var7 + var13, var9); var4.spawnEntityInWorld(var15); stack.splitStack(1); return stack; } protected void playDispenseSound(IBlockSource source) { source.getWorld().playAuxSFX(1000, source.getBlockPos(), 0); } }); BehaviorDefaultDispenseItem var0 = new BehaviorDefaultDispenseItem() { private final BehaviorDefaultDispenseItem field_150841_b = new BehaviorDefaultDispenseItem(); private static final String __OBFID = "CL_00001399"; public ItemStack dispenseStack(IBlockSource source, ItemStack stack) { ItemBucket var3 = (ItemBucket)stack.getItem(); BlockPos var4 = source.getBlockPos().offset(BlockDispenser.getFacing(source.getBlockMetadata())); if (var3.func_180616_a(source.getWorld(), var4)) { stack.setItem(Items.bucket); stack.stackSize = 1; return stack; } else { return this.field_150841_b.dispense(source, stack); } } }; BlockDispenser.dispenseBehaviorRegistry.putObject(Items.lava_bucket, var0); BlockDispenser.dispenseBehaviorRegistry.putObject(Items.water_bucket, var0); BlockDispenser.dispenseBehaviorRegistry.putObject(Items.bucket, new BehaviorDefaultDispenseItem() { private final BehaviorDefaultDispenseItem field_150840_b = new BehaviorDefaultDispenseItem(); private static final String __OBFID = "CL_00001400"; public ItemStack dispenseStack(IBlockSource source, ItemStack stack) { World var3 = source.getWorld(); BlockPos var4 = source.getBlockPos().offset(BlockDispenser.getFacing(source.getBlockMetadata())); IBlockState var5 = var3.getBlockState(var4); Block var6 = var5.getBlock(); Material var7 = var6.getMaterial(); Item var8; if (Material.water.equals(var7) && var6 instanceof BlockLiquid && ((Integer)var5.getValue(BlockLiquid.LEVEL)).intValue() == 0) { var8 = Items.water_bucket; } else { if (!Material.lava.equals(var7) || !(var6 instanceof BlockLiquid) || ((Integer)var5.getValue(BlockLiquid.LEVEL)).intValue() != 0) { return super.dispenseStack(source, stack); } var8 = Items.lava_bucket; } var3.setBlockToAir(var4); if (--stack.stackSize == 0) { stack.setItem(var8); stack.stackSize = 1; } else if (((TileEntityDispenser)source.getBlockTileEntity()).func_146019_a(new ItemStack(var8)) < 0) { this.field_150840_b.dispense(source, new ItemStack(var8)); } return stack; } }); BlockDispenser.dispenseBehaviorRegistry.putObject(Items.flint_and_steel, new BehaviorDefaultDispenseItem() { private boolean field_150839_b = true; private static final String __OBFID = "CL_00001401"; protected ItemStack dispenseStack(IBlockSource source, ItemStack stack) { World var3 = source.getWorld(); BlockPos var4 = source.getBlockPos().offset(BlockDispenser.getFacing(source.getBlockMetadata())); if (var3.isAirBlock(var4)) { var3.setBlockState(var4, Blocks.fire.getDefaultState()); if (stack.attemptDamageItem(1, var3.rand)) { stack.stackSize = 0; } } else if (var3.getBlockState(var4).getBlock() == Blocks.tnt) { Blocks.tnt.onBlockDestroyedByPlayer(var3, var4, Blocks.tnt.getDefaultState().withProperty(BlockTNT.field_176246_a, Boolean.valueOf(true))); var3.setBlockToAir(var4); } else { this.field_150839_b = false; } return stack; } protected void playDispenseSound(IBlockSource source) { if (this.field_150839_b) { source.getWorld().playAuxSFX(1000, source.getBlockPos(), 0); } else { source.getWorld().playAuxSFX(1001, source.getBlockPos(), 0); } } }); BlockDispenser.dispenseBehaviorRegistry.putObject(Items.dye, new BehaviorDefaultDispenseItem() { private boolean field_150838_b = true; private static final String __OBFID = "CL_00001402"; protected ItemStack dispenseStack(IBlockSource source, ItemStack stack) { if (EnumDyeColor.WHITE == EnumDyeColor.func_176766_a(stack.getMetadata())) { World var3 = source.getWorld(); BlockPos var4 = source.getBlockPos().offset(BlockDispenser.getFacing(source.getBlockMetadata())); if (ItemDye.func_179234_a(stack, var3, var4)) { if (!var3.isRemote) { var3.playAuxSFX(2005, var4, 0); } } else { this.field_150838_b = false; } return stack; } else { return super.dispenseStack(source, stack); } } protected void playDispenseSound(IBlockSource source) { if (this.field_150838_b) { source.getWorld().playAuxSFX(1000, source.getBlockPos(), 0); } else { source.getWorld().playAuxSFX(1001, source.getBlockPos(), 0); } } }); BlockDispenser.dispenseBehaviorRegistry.putObject(Item.getItemFromBlock(Blocks.tnt), new BehaviorDefaultDispenseItem() { private static final String __OBFID = "CL_00001403"; protected ItemStack dispenseStack(IBlockSource source, ItemStack stack) { World var3 = source.getWorld(); BlockPos var4 = source.getBlockPos().offset(BlockDispenser.getFacing(source.getBlockMetadata())); EntityTNTPrimed var5 = new EntityTNTPrimed(var3, (double)var4.getX() + 0.5D, (double)var4.getY(), (double)var4.getZ() + 0.5D, (EntityLivingBase)null); var3.spawnEntityInWorld(var5); var3.playSoundAtEntity(var5, "game.tnt.primed", 1.0F, 1.0F); --stack.stackSize; return stack; } }); BlockDispenser.dispenseBehaviorRegistry.putObject(Items.skull, new BehaviorDefaultDispenseItem() { private boolean field_179240_b = true; private static final String __OBFID = "CL_00002278"; protected ItemStack dispenseStack(IBlockSource source, ItemStack stack) { World var3 = source.getWorld(); EnumFacing var4 = BlockDispenser.getFacing(source.getBlockMetadata()); BlockPos var5 = source.getBlockPos().offset(var4); BlockSkull var6 = Blocks.skull; if (var3.isAirBlock(var5) && var6.func_176415_b(var3, var5, stack)) { if (!var3.isRemote) { var3.setBlockState(var5, var6.getDefaultState().withProperty(BlockSkull.field_176418_a, EnumFacing.UP), 3); TileEntity var7 = var3.getTileEntity(var5); if (var7 instanceof TileEntitySkull) { if (stack.getMetadata() == 3) { GameProfile var8 = null; if (stack.hasTagCompound()) { NBTTagCompound var9 = stack.getTagCompound(); if (var9.hasKey("SkullOwner", 10)) { var8 = NBTUtil.readGameProfileFromNBT(var9.getCompoundTag("SkullOwner")); } else if (var9.hasKey("SkullOwner", 8)) { var8 = new GameProfile((UUID)null, var9.getString("SkullOwner")); } } ((TileEntitySkull)var7).setPlayerProfile(var8); } else { ((TileEntitySkull)var7).setType(stack.getMetadata()); } ((TileEntitySkull)var7).setSkullRotation(var4.getOpposite().getHorizontalIndex() * 4); Blocks.skull.func_180679_a(var3, var5, (TileEntitySkull)var7); } --stack.stackSize; } } else { this.field_179240_b = false; } return stack; } protected void playDispenseSound(IBlockSource source) { if (this.field_179240_b) { source.getWorld().playAuxSFX(1000, source.getBlockPos(), 0); } else { source.getWorld().playAuxSFX(1001, source.getBlockPos(), 0); } } }); BlockDispenser.dispenseBehaviorRegistry.putObject(Item.getItemFromBlock(Blocks.pumpkin), new BehaviorDefaultDispenseItem() { private boolean field_179241_b = true; private static final String __OBFID = "CL_00002277"; protected ItemStack dispenseStack(IBlockSource source, ItemStack stack) { World var3 = source.getWorld(); BlockPos var4 = source.getBlockPos().offset(BlockDispenser.getFacing(source.getBlockMetadata())); BlockPumpkin var5 = (BlockPumpkin)Blocks.pumpkin; if (var3.isAirBlock(var4) && var5.func_176390_d(var3, var4)) { if (!var3.isRemote) { var3.setBlockState(var4, var5.getDefaultState(), 3); } --stack.stackSize; } else { this.field_179241_b = false; } return stack; } protected void playDispenseSound(IBlockSource source) { if (this.field_179241_b) { source.getWorld().playAuxSFX(1000, source.getBlockPos(), 0); } else { source.getWorld().playAuxSFX(1001, source.getBlockPos(), 0); } } }); BlockDispenser.dispenseBehaviorRegistry.putObject(Item.getItemFromBlock(Blocks.command_block), new BehaviorDefaultDispenseItem() { private static final String __OBFID = "CL_00002276"; protected ItemStack dispenseStack(IBlockSource source, ItemStack stack) { World var3 = source.getWorld(); BlockPos var4 = source.getBlockPos().offset(BlockDispenser.getFacing(source.getBlockMetadata())); if (var3.isAirBlock(var4)) { if (!var3.isRemote) { IBlockState var5 = Blocks.command_block.getDefaultState().withProperty(BlockCommandBlock.TRIGGERED_PROP, Boolean.valueOf(false)); var3.setBlockState(var4, var5, 3); ItemBlock.setTileEntityNBT(var3, var4, stack); var3.notifyNeighborsOfStateChange(source.getBlockPos(), source.getBlock()); } --stack.stackSize; } return stack; } protected void playDispenseSound(IBlockSource source) {} protected void spawnDispenseParticles(IBlockSource source, EnumFacing facingIn) {} }); } /** * Registers blocks, items, stats, etc. */ public static void register() { if (!alreadyRegistered) { alreadyRegistered = true; if (LOGGER.isDebugEnabled()) { redirectOutputToLog(); } Block.registerBlocks(); BlockFire.func_149843_e(); Item.registerItems(); StatList.func_151178_a(); registerDispenserBehaviors(); } } /** * redirect standard streams to logger */ private static void redirectOutputToLog() { System.setErr(new LoggingPrintStream("STDERR", System.err)); System.setOut(new LoggingPrintStream("STDOUT", SYSOUT)); } }