package net.minecraft.server; import java.util.Random; import org.bukkit.event.block.BlockRedstoneEvent; // CraftBukkit public class BlockCommand extends BlockTileEntity { public static final BlockStateDirection a = BlockDirectional.FACING; public static final BlockStateBoolean b = BlockStateBoolean.of("conditional"); public BlockCommand(MaterialMapColor materialmapcolor) { super(Material.ORE, materialmapcolor); this.y(this.blockStateList.getBlockData().set(BlockCommand.a, EnumDirection.NORTH).set(BlockCommand.b, Boolean.valueOf(false))); } public TileEntity a(World world, int i) { TileEntityCommand tileentitycommand = new TileEntityCommand(); tileentitycommand.b(this == Blocks.dd); return tileentitycommand; } public void a(IBlockData iblockdata, World world, BlockPosition blockposition, Block block, BlockPosition blockposition1) { if (!world.isClientSide) { TileEntity tileentity = world.getTileEntity(blockposition); if (tileentity instanceof TileEntityCommand) { TileEntityCommand tileentitycommand = (TileEntityCommand) tileentity; boolean flag = world.isBlockIndirectlyPowered(blockposition); boolean flag1 = tileentitycommand.f(); boolean flag2 = tileentitycommand.h(); // CraftBukkit start org.bukkit.block.Block bukkitBlock = world.getWorld().getBlockAt(blockposition.getX(), blockposition.getY(), blockposition.getZ()); int old = flag1 ? 15 : 0; int current = flag ? 15 : 0; BlockRedstoneEvent eventRedstone = new BlockRedstoneEvent(bukkitBlock, old, current); world.getServer().getPluginManager().callEvent(eventRedstone); // CraftBukkit end if (eventRedstone.getNewCurrent() > 0 && !(eventRedstone.getOldCurrent() > 0)) { // CraftBukkit tileentitycommand.a(true); if (tileentitycommand.k() != TileEntityCommand.Type.SEQUENCE && !flag2) { boolean flag3 = !tileentitycommand.l() || this.e(world, blockposition, iblockdata); tileentitycommand.c(flag3); world.a(blockposition, (Block) this, this.a(world)); if (flag3) { this.c(world, blockposition); } } } else if (!(eventRedstone.getNewCurrent() > 0) && eventRedstone.getOldCurrent() > 0) { // CraftBukkit tileentitycommand.a(false); } } } } public void b(World world, BlockPosition blockposition, IBlockData iblockdata, Random random) { if (!world.isClientSide) { TileEntity tileentity = world.getTileEntity(blockposition); if (tileentity instanceof TileEntityCommand) { TileEntityCommand tileentitycommand = (TileEntityCommand) tileentity; CommandBlockListenerAbstract commandblocklistenerabstract = tileentitycommand.getCommandBlock(); boolean flag = !UtilColor.b(commandblocklistenerabstract.getCommand()); TileEntityCommand.Type tileentitycommand_type = tileentitycommand.k(); boolean flag1 = !tileentitycommand.l() || this.e(world, blockposition, iblockdata); boolean flag2 = tileentitycommand.i(); boolean flag3 = false; if (tileentitycommand_type != TileEntityCommand.Type.SEQUENCE && flag2 && flag) { commandblocklistenerabstract.a(world); flag3 = true; } if (tileentitycommand.f() || tileentitycommand.h()) { if (tileentitycommand_type == TileEntityCommand.Type.SEQUENCE && flag1 && flag) { commandblocklistenerabstract.a(world); flag3 = true; } if (tileentitycommand_type == TileEntityCommand.Type.AUTO) { world.a(blockposition, (Block) this, this.a(world)); if (flag1) { this.c(world, blockposition); } } } if (!flag3) { commandblocklistenerabstract.a(0); } tileentitycommand.c(flag1); world.updateAdjacentComparators(blockposition, this); } } } public boolean e(World world, BlockPosition blockposition, IBlockData iblockdata) { EnumDirection enumdirection = (EnumDirection) iblockdata.get(BlockCommand.a); TileEntity tileentity = world.getTileEntity(blockposition.shift(enumdirection.opposite())); return tileentity instanceof TileEntityCommand && ((TileEntityCommand) tileentity).getCommandBlock().k() > 0; } public int a(World world) { return 1; } public boolean interact(World world, BlockPosition blockposition, IBlockData iblockdata, EntityHuman entityhuman, EnumHand enumhand, EnumDirection enumdirection, float f, float f1, float f2) { TileEntity tileentity = world.getTileEntity(blockposition); if (tileentity instanceof TileEntityCommand && entityhuman.dk()) { entityhuman.a((TileEntityCommand) tileentity); return true; } else { return false; } } public boolean isComplexRedstone(IBlockData iblockdata) { return true; } public int c(IBlockData iblockdata, World world, BlockPosition blockposition) { TileEntity tileentity = world.getTileEntity(blockposition); return tileentity instanceof TileEntityCommand ? ((TileEntityCommand) tileentity).getCommandBlock().k() : 0; } public void postPlace(World world, BlockPosition blockposition, IBlockData iblockdata, EntityLiving entityliving, ItemStack itemstack) { TileEntity tileentity = world.getTileEntity(blockposition); if (tileentity instanceof TileEntityCommand) { TileEntityCommand tileentitycommand = (TileEntityCommand) tileentity; CommandBlockListenerAbstract commandblocklistenerabstract = tileentitycommand.getCommandBlock(); if (itemstack.hasName()) { commandblocklistenerabstract.setName(itemstack.getName()); } if (!world.isClientSide) { NBTTagCompound nbttagcompound = itemstack.getTag(); if (nbttagcompound == null || !nbttagcompound.hasKeyOfType("BlockEntityTag", 10)) { commandblocklistenerabstract.a(world.getGameRules().getBoolean("sendCommandFeedback")); tileentitycommand.b(this == Blocks.dd); } if (tileentitycommand.k() == TileEntityCommand.Type.SEQUENCE) { boolean flag = world.isBlockIndirectlyPowered(blockposition); tileentitycommand.a(flag); } } } } public int a(Random random) { return 0; } public EnumRenderType a(IBlockData iblockdata) { return EnumRenderType.MODEL; } public IBlockData fromLegacyData(int i) { return this.getBlockData().set(BlockCommand.a, EnumDirection.fromType1(i & 7)).set(BlockCommand.b, Boolean.valueOf((i & 8) != 0)); } public int toLegacyData(IBlockData iblockdata) { return ((EnumDirection) iblockdata.get(BlockCommand.a)).a() | (((Boolean) iblockdata.get(BlockCommand.b)).booleanValue() ? 8 : 0); } public IBlockData a(IBlockData iblockdata, EnumBlockRotation enumblockrotation) { return iblockdata.set(BlockCommand.a, enumblockrotation.a((EnumDirection) iblockdata.get(BlockCommand.a))); } public IBlockData a(IBlockData iblockdata, EnumBlockMirror enumblockmirror) { return iblockdata.a(enumblockmirror.a((EnumDirection) iblockdata.get(BlockCommand.a))); } protected BlockStateList getStateList() { return new BlockStateList(this, new IBlockState[] { BlockCommand.a, BlockCommand.b}); } public IBlockData getPlacedState(World world, BlockPosition blockposition, EnumDirection enumdirection, float f, float f1, float f2, int i, EntityLiving entityliving) { return this.getBlockData().set(BlockCommand.a, EnumDirection.a(blockposition, entityliving)).set(BlockCommand.b, Boolean.valueOf(false)); } public void c(World world, BlockPosition blockposition) { IBlockData iblockdata = world.getType(blockposition); if (iblockdata.getBlock() == Blocks.COMMAND_BLOCK || iblockdata.getBlock() == Blocks.dc) { BlockPosition.MutableBlockPosition blockposition_mutableblockposition = new BlockPosition.MutableBlockPosition(blockposition); blockposition_mutableblockposition.c((EnumDirection) iblockdata.get(BlockCommand.a)); for (TileEntity tileentity = world.getTileEntity(blockposition_mutableblockposition); tileentity instanceof TileEntityCommand; tileentity = world.getTileEntity(blockposition_mutableblockposition)) { TileEntityCommand tileentitycommand = (TileEntityCommand) tileentity; if (tileentitycommand.k() != TileEntityCommand.Type.SEQUENCE) { break; } IBlockData iblockdata1 = world.getType(blockposition_mutableblockposition); Block block = iblockdata1.getBlock(); if (block != Blocks.dd || world.b((BlockPosition) blockposition_mutableblockposition, block)) { break; } world.a(new BlockPosition(blockposition_mutableblockposition), block, this.a(world)); blockposition_mutableblockposition.c((EnumDirection) iblockdata1.get(BlockCommand.a)); } } } }