当前位置: 首页>>代码示例>>Java>>正文


Java ForgeHooks.onBlockBreakEvent方法代码示例

本文整理汇总了Java中net.minecraftforge.common.ForgeHooks.onBlockBreakEvent方法的典型用法代码示例。如果您正苦于以下问题:Java ForgeHooks.onBlockBreakEvent方法的具体用法?Java ForgeHooks.onBlockBreakEvent怎么用?Java ForgeHooks.onBlockBreakEvent使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在net.minecraftforge.common.ForgeHooks的用法示例。


在下文中一共展示了ForgeHooks.onBlockBreakEvent方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Java代码示例。

示例1: blockDestroy

import net.minecraftforge.common.ForgeHooks; //导入方法依赖的package包/类
/**
 * ブロックを破壊します
 *
 * @param world       world
 * @param x           x座標
 * @param y           y座標
 * @param z           z座標
 * @param player      プレイヤー
 * @param centerBlock 中心のブロック
 * @param cX          中心のブロックのx座標
 * @param cY          中心のブロックのy座標
 * @param cZ          中心のブロックのz座標
 * @param toolStack   破壊に使用したツールのItemStack
 */
private void blockDestroy(World world, int x, int y, int z, EntityPlayerMP player, Block centerBlock, int cX, int cY, int cZ, ItemStack toolStack) {
	if (!world.isAirBlock(x, y, z)) {
		Block block = world.getBlock(x, y, z);
		int meta = world.getBlockMetadata(x, y, z);
		if (canDestroyBlock(toolStack, block, meta) && (centerBlock.getBlockHardness(world, cX, cY, cZ) - block.getBlockHardness(world, x, y, z)) <= 3F) {
			BreakEvent event = ForgeHooks.onBlockBreakEvent(world, player.theItemInWorldManager.getGameType(), player, x, y, z);
			if (!event.isCanceled()) {
				block.onBlockHarvested(world, x, y, z, meta, player);
				if (block.removedByPlayer(world, player, x, y, z, false)) {
					block.onBlockDestroyedByPlayer(world, x, y, z, meta);
					block.harvestBlock(world, player, x, y, z, meta);
				}
				if (!world.isRemote) {
					player.playerNetServerHandler.sendPacket(new S23PacketBlockChange(x, y, z, world));
				}
				
			}
		}
	}
}
 
开发者ID:Team-Antimatter-Mod,项目名称:AntiMatterMod,代码行数:35,代码来源:MiningHammer.java

示例2: breakBlockAsPlayer

import net.minecraftforge.common.ForgeHooks; //导入方法依赖的package包/类
/**
 * Breaks the block as a player, and thus drops the item(s) from it
 */
public static void breakBlockAsPlayer(World world, BlockPos pos, EntityPlayerMP playerMP, ItemStack toolStack)
{
    PlayerInteractionManager manager = playerMP.interactionManager;
    int exp = ForgeHooks.onBlockBreakEvent(world, manager.getGameType(), playerMP, pos);

    if (exp != -1)
    {
        IBlockState stateExisting = world.getBlockState(pos);
        Block blockExisting = stateExisting.getBlock();

        blockExisting.onBlockHarvested(world, pos, stateExisting, playerMP);
        boolean harvest = blockExisting.removedByPlayer(stateExisting, world, pos, playerMP, true);

        if (harvest)
        {
            blockExisting.onBlockDestroyedByPlayer(world, pos, stateExisting);
            blockExisting.harvestBlock(world, playerMP, pos, stateExisting, world.getTileEntity(pos), toolStack);
        }
    }
}
 
开发者ID:maruohon,项目名称:enderutilities,代码行数:24,代码来源:BlockUtils.java

示例3: harvest

import net.minecraftforge.common.ForgeHooks; //导入方法依赖的package包/类
private boolean harvest(EntityPlayerMP player, int x, int y, int z) {
	BlockEvent.BreakEvent event = ForgeHooks.onBlockBreakEvent(worldObj, player.theItemInWorldManager.getGameType(), player, x, y, z);
	if (event.isCanceled()) {
		return false;
	} else {
		Block block = worldObj.getBlock(x, y, z);
        int meta = worldObj.getBlockMetadata(x, y, z);
        if (block.getBlockHardness(worldObj, x, y, z) < 0) return false;
        worldObj.playAuxSFX(2001, x, y, z, Block.getIdFromBlock(block) + (worldObj.getBlockMetadata(x, y, z) << 12));
        block.onBlockHarvested(worldObj, x, y, z, meta, player);
        boolean success = block.removedByPlayer(worldObj, player, x, y, z, true);

        if (success) {
            block.onBlockDestroyedByPlayer(worldObj, x, y, z, meta);
            block.harvestBlock(worldObj,player, x, y, z, meta);
            block.dropXpOnBlockBreak(worldObj, x, y, z, event.getExpToDrop() != 0 ? event.getExpToDrop() : block.getExpDrop(worldObj, meta, 0));
        }
        return success;
	}
}
 
开发者ID:unascribed,项目名称:Farrago,代码行数:21,代码来源:EntityRifleProjectile.java

示例4: doMining

import net.minecraftforge.common.ForgeHooks; //导入方法依赖的package包/类
void doMining(World world, EntityPlayerMP player, int x, int y, int z)	// Calling this 27 times, to blast mine a 3x3x3 area
{
	Block toBeBroken = world.getBlock(x, y, z);
	int meta = world.getBlockMetadata(x, y, z);

	if (toBeBroken.getBlockHardness(world, x, y, z) == -1) { return; }	// Unbreakable

	if (toBeBroken.getHarvestLevel(meta) > 1) { return; }
	if (toBeBroken.getMaterial() == Material.water) { return; }
	if (toBeBroken.getMaterial() == Material.lava) { return; }
	if (toBeBroken.getMaterial() == Material.air) { return; }
	if (toBeBroken.getMaterial() == Material.portal) { return; }

	// Need to do checks here against invalid blocks
	if (toBeBroken == Blocks.water) { return; }
	if (toBeBroken == Blocks.flowing_water) { return; }
	if (toBeBroken == Blocks.lava) { return; }
	if (toBeBroken == Blocks.flowing_lava) { return; }
	if (toBeBroken == Blocks.obsidian) { return; }
	if (toBeBroken == Blocks.mob_spawner) { return; }

	// Crashing blocks: Redstone Lamp, Extended Piston
	// They're likely trying to drop things that cannot be dropped (active states of themselves)

	//WorldSettings.GameType gametype = WorldSettings.GameType.getByName("survival");
	WorldSettings.GameType gametype = world.getWorldInfo().getGameType();
	BlockEvent.BreakEvent event = ForgeHooks.onBlockBreakEvent(world, gametype, player, x, y, z);

	if (event.isCanceled()) { return; }	// Not allowed to do this

	//toBeBroken.dropBlockAsItem(world, x, x, z, meta, 0);	// The last one is Fortune

	boolean removalSuccess = world.setBlockToAir(x, y, z);
	if (removalSuccess) { toBeBroken.onBlockDestroyedByPlayer(world, x, y, z, meta); }

	Item preBlockItem = toBeBroken.getItemDropped(meta, player.getRNG(), 0);

	if (preBlockItem == null) { return; }	// Item doesn't exist

	ItemStack blockItem = new ItemStack(preBlockItem);

	blockItem.setItemDamage(meta);

	EntityItem entityItem = new EntityItem(world, x, y + 0.5d, z, blockItem);
	entityItem.delayBeforeCanPickup = 10;

	world.spawnEntityInWorld(entityItem);
}
 
开发者ID:Domochevsky,项目名称:minecraft-quiverbow,代码行数:49,代码来源:PowderKnuckle_Mod.java

示例5: breakBlockForMaterial

import net.minecraftforge.common.ForgeHooks; //导入方法依赖的package包/类
private void breakBlockForMaterial(Material material, World world, int x, int y, int z, EntityPlayer player) {
	Block block = world.getBlock(x, y, z);
	int meta = world.getBlockMetadata(x, y, z);
	if (material == block.getMaterial() && block.getBlockHardness(world, x, y, z) >= 0) {
		if (player instanceof EntityPlayerMP) {
			BlockEvent.BreakEvent event = ForgeHooks.onBlockBreakEvent(world, ((EntityPlayerMP) player).theItemInWorldManager.getGameType(), (EntityPlayerMP) player, x, y, z);
			if (event.isCanceled())
				return;
			if (!world.isRemote) {
				ArrayList<ItemStack> drops = block.getDrops(world, x, y, z, meta, 0);
				world.setBlockToAir(x, y, z);
				block.onBlockDestroyedByPlayer(world, x, y, z, meta);
				Random rand = new Random();
				for (ItemStack i : drops) {
					float f = 0.7F;
					double d = (double) (rand.nextFloat()*f)+(double) (1.0F-f)*0.5D;
					double d1 = (double) (rand.nextFloat()*f)+(double) (1.0F-f)*0.5D;
					double d2 = (double) (rand.nextFloat()*f)+(double) (1.0F-f)*0.5D;
					EntityItem entityitem = new EntityItem(world, (double) x+d, (double) y+d1, (double) z+d2, i);
					entityitem.delayBeforeCanPickup = 5;
					world.spawnEntityInWorld(entityitem);
				}
			} else { //FIXME
				block.addDestroyEffects(world, x, y, z, meta, Minecraft.getMinecraft().effectRenderer);
				world.playSoundEffect((double) x+0.5D, (double) y+0.5D, (double) z+0.5D, block.stepSound.getBreakSound(), 1.0F, world.rand.nextFloat() * 0.1F + 0.9F);
				block.onBlockDestroyedByPlayer(world, x,y,z, meta);
			}
		}
	}
}
 
开发者ID:austinv11,项目名称:DartCraft2,代码行数:31,代码来源:ItemForceMitts.java

示例6: harvestBlock

import net.minecraftforge.common.ForgeHooks; //导入方法依赖的package包/类
public static void harvestBlock(World world, int x, int y, int z, EntityPlayer entityPlayer){
    Block block = world.getBlock(x, y, z);
    int meta = world.getBlockMetadata(x, y, z);

    if (!(entityPlayer instanceof EntityPlayerMP))
        return;
    EntityPlayerMP player = (EntityPlayerMP) entityPlayer;

    if(!ForgeEventFactory.doPlayerHarvestCheck(player, block, isToolEffective(player.getCurrentEquippedItem(), world, x, y, z)))
        if(!player.capabilities.isCreativeMode)
            return;

    BlockEvent.BreakEvent event = ForgeHooks.onBlockBreakEvent(world, player.theItemInWorldManager.getGameType(), player, x, y, z);
    if(event.isCanceled())
        return;

    if(!world.isRemote){ //Server-side: Simulating ItemInWorldManager
        block.onBlockHarvested(world, x, y, z, meta, player);

        if(block.removedByPlayer(world, player, x, y, z, true)) {
            block.onBlockDestroyedByPlayer(world, x, y, z, meta);
            if(!player.capabilities.isCreativeMode && world.getGameRules().getGameRuleBooleanValue("doTileDrops")) {
                block.harvestBlock(world, player, x, y, z, meta);
                block.dropXpOnBlockBreak(world, x, y, z, event.getExpToDrop());
            }
            world.playAuxSFX(2001, x, y, z, Block.getIdFromBlock(block) + meta << 12);
        }
    }else { //Client-side: Simulating PlayerControllerMP
        if(block.removedByPlayer(world, player, x, y ,z, true))
            block.onBlockDestroyedByPlayer(world, x, y, z, meta);
    }
}
 
开发者ID:goldenapple3,项目名称:RFDrills,代码行数:33,代码来源:ToolHelper.java

示例7: onBlockStartBreak

import net.minecraftforge.common.ForgeHooks; //导入方法依赖的package包/类
@Override
public boolean onBlockStartBreak(ItemStack itemstack, BlockPos pos, EntityPlayer player) {
	World world = player.getEntityWorld();

	if (!world.isRemote && player instanceof EntityPlayerMP) {

		RayTraceResult rt = this.rayTrace(world, player, false);
		if (rt.typeOfHit == RayTraceResult.Type.BLOCK) {
			EnumFacing side = rt.sideHit;

			List<BlockPos> extraBlocks = getExtraBlocks(world, rt, player);

			for (BlockPos pos2 : extraBlocks) {

				IBlockState state = world.getBlockState(pos2);

				if (!world.isBlockLoaded(pos2) || !player.canPlayerEdit(pos2, side, itemstack) || !(state.getBlock().canHarvestBlock(world, pos2, player))) {
					continue;
				}

				if (player.capabilities.isCreativeMode) {
					state.getBlock().onBlockHarvested(world, pos2, state, player);
					if (state.getBlock().removedByPlayer(state, world, pos2, player, false)) {
						state.getBlock().onBlockDestroyedByPlayer(world, pos2, state);
					}
				} else {
					int xp = ForgeHooks.onBlockBreakEvent(world, ((EntityPlayerMP) player).interactionManager.getGameType(), (EntityPlayerMP) player, pos2);

					state.getBlock().onBlockHarvested(world, pos2, state, player);
					this.onBlockDestroyed(itemstack, world, state, pos2, player);
					if (state.getBlock().removedByPlayer(state, world, pos2, player, true)) {
						state.getBlock().onBlockDestroyedByPlayer(world, pos2, state);
						state.getBlock().harvestBlock(world, player, pos2, state, world.getTileEntity(pos2), itemstack);
						state.getBlock().dropXpOnBlockBreak(world, pos2, xp);
					}
				}

				world.playEvent(2001, pos, Block.getStateId(state));
				((EntityPlayerMP) player).connection.sendPacket(new SPacketBlockChange(world, pos));

			}

		}

	}

	return false;
}
 
开发者ID:the-realest-stu,项目名称:Adventurers-Toolbox,代码行数:49,代码来源:ItemATHammer.java

示例8: onImpact

import net.minecraftforge.common.ForgeHooks; //导入方法依赖的package包/类
@Override
public void onImpact(MovingObjectPosition target)
{
	if (target.entityHit != null) 		// We hit a living thing!
   	{		
		// Damage
		target.entityHit.attackEntityFrom(DamageSource.causeThrownDamage(this, this.shootingEntity), (float)this.damage);
       }
	else	// Hit the terrain
   	{
   		Block block = this.worldObj.getBlock(target.blockX, target.blockY, target.blockZ);            
           int meta = this.worldObj.getBlockMetadata(target.blockX, target.blockY, target.blockZ);
           
           boolean breakThis = true;
           
           // Checking here against invalid blocks
       	if (block == Blocks.bedrock) { breakThis = false; }
       	else if (block == Blocks.water) { breakThis = false; }
       	else if (block == Blocks.flowing_water) { breakThis = false; }
       	else if (block == Blocks.lava) { breakThis = false; }
       	else if (block == Blocks.flowing_lava) { breakThis = false; }
       	else if (block == Blocks.obsidian) { breakThis = false; }
       	else if (block == Blocks.mob_spawner) { breakThis = false; }
       	
       	else if (block.getMaterial() == Material.water) { breakThis = false; }
       	else if (block.getMaterial() == Material.lava) { breakThis = false; }
       	else if (block.getMaterial() == Material.air) { breakThis = false; }
       	else if (block.getMaterial() == Material.portal) { breakThis = false; }
       	
       	else if (block.getHarvestLevel(meta) > 0) { breakThis = false; }
       	else if (block.getBlockHardness(this.worldObj, target.blockX, target.blockY, target.blockZ) > 3) { breakThis = false; }
       	
       	if (this.shootingEntity instanceof EntityPlayerMP)
       	{
       		WorldSettings.GameType gametype = this.worldObj.getWorldInfo().getGameType();
           	BlockEvent.BreakEvent event = ForgeHooks.onBlockBreakEvent(this.worldObj, gametype, (EntityPlayerMP) this.shootingEntity, target.blockX, target.blockY, target.blockZ);
              
           	if (event.isCanceled()) { breakThis = false; }	// Not allowed to do this
       	}
           
           if (breakThis)	// Nothing preventing us from breaking this block!
           {            	
           	this.worldObj.setBlockToAir(target.blockX, target.blockY, target.blockZ);
           	block.dropBlockAsItem(this.worldObj, target.blockX, target.blockY, target.blockZ, meta, 0);
           }
   	}
	
	// SFX
	for (int i = 0; i < 4; ++i) { this.worldObj.spawnParticle("smoke", this.posX, this.posY, this.posZ, 0.0D, 0.0D, 0.0D); }
	this.worldObj.playSoundAtEntity(this, Block.soundTypeGravel.getBreakSound(), 1.0F, 1.0F);
	
	this.setDead();	// Hit something, so begone.
}
 
开发者ID:Domochevsky,项目名称:minecraft-quiverbow,代码行数:54,代码来源:FlintDust.java

示例9: breakExtraBlock

import net.minecraftforge.common.ForgeHooks; //导入方法依赖的package包/类
public static void breakExtraBlock(ItemStack stack, World world, EntityPlayer player, BlockPos pos, BlockPos refPos) {
	if(world.isAirBlock(pos)) {
		return;
	}
	IBlockState state = world.getBlockState(pos);
	Block block = state.getBlock();

	if(!ToolUtil.isToolEffective(stack, state)) {
		return;
	}

	IBlockState refState = world.getBlockState(refPos);
	float refStrength = ForgeHooks.blockStrength(refState, player, world, refPos);
	float strength = ForgeHooks.blockStrength(state, player, world, pos);

	if(!ForgeHooks.canHarvestBlock(block, player, world, pos) || refStrength / strength > 10f) {
		return;
	}

	if(player.capabilities.isCreativeMode) {
		block.onBlockHarvested(world, pos, state, player);
		if(block.removedByPlayer(state, world, pos, player, false)) {
			block.onBlockDestroyedByPlayer(world, pos, state);
		}

		if(!world.isRemote) {
			CrystalModNetwork.sendMCPacket(player, new SPacketBlockChange(world, pos));
		}
		return;
	}

	stack.onBlockDestroyed(world, state, pos, player);

	if(!world.isRemote) {
		int xp = ForgeHooks.onBlockBreakEvent(world, ((EntityPlayerMP) player).interactionManager.getGameType(), (EntityPlayerMP) player, pos);
		if(xp == -1) {
			return;
		}


		TileEntity tileEntity = world.getTileEntity(pos);
		if(block.removedByPlayer(state, world, pos, player, true))
		{
			block.onBlockDestroyedByPlayer(world, pos, state);
			block.harvestBlock(world, player, pos, state, tileEntity, stack);
			block.dropXpOnBlockBreak(world, pos, xp);
		}

		CrystalModNetwork.sendMCPacket(player, new SPacketBlockChange(world, pos));
	}
	else {
		Minecraft.getMinecraft();
		world.playBroadcastSound(2001, pos, Block.getStateId(state));
		if(block.removedByPlayer(state, world, pos, player, true)) {
			block.onBlockDestroyedByPlayer(world, pos, state);
		}
		stack.onBlockDestroyed(world, state, pos, player);

		if(ItemStackTools.getStackSize(stack) == 0 && stack == player.getHeldItemMainhand()) {
			ForgeEventFactory.onPlayerDestroyItem(player, stack, EnumHand.MAIN_HAND);
			player.setHeldItem(EnumHand.MAIN_HAND, ItemStackTools.getEmptyStack());
		}

		Minecraft.getMinecraft().getConnection().sendPacket(new CPacketPlayerDigging(CPacketPlayerDigging.Action.STOP_DESTROY_BLOCK, pos, Minecraft
				.getMinecraft().objectMouseOver.sideHit));
	}
}
 
开发者ID:Alec-WAM,项目名称:CrystalMod,代码行数:68,代码来源:BlockUtil.java

示例10: hasBreakPermission

import net.minecraftforge.common.ForgeHooks; //导入方法依赖的package包/类
public static boolean hasBreakPermission(@Nonnull World world, @Nonnull BlockPos pos, @Nonnull EntityPlayerMP player) {
	return hasEditPermission(pos, player) && !(ForgeHooks.onBlockBreakEvent(world, player.interactionManager.getGameType(), player, pos) == -1);
}
 
开发者ID:TeamWizardry,项目名称:Wizardry,代码行数:4,代码来源:BlockUtils.java

示例11: onBlockStartBreak

import net.minecraftforge.common.ForgeHooks; //导入方法依赖的package包/类
/**
 * <<<< made with some help from Tinkers Construct and Spark's Hammers
 * https://github.com/thebrightspark/SparksHammers/blob/b84bd178fe2bbe47b13a89ef9435b20f09e429a4/src/main/java/com/brightspark/sparkshammers/util/CommonUtils.java and
 * https://github.com/SlimeKnights/TinkersConstruct
 */
@Override
public boolean onBlockStartBreak(ItemStack stack, BlockPos posHit, EntityPlayer player) {
  RayTraceResult ray = rayTrace(player.getEntityWorld(), player, false);
  if (ray == null) {
    return super.onBlockStartBreak(stack, posHit, player);
  }
  EnumFacing sideHit = ray.sideHit;
  World world = player.getEntityWorld();
  //use the shape builder to get region
  List<BlockPos> shape;
  if (sideHit == EnumFacing.UP || sideHit == EnumFacing.DOWN) {
    shape = UtilShape.squareHorizontalHollow(posHit, RADIUS);
  }
  else if (sideHit == EnumFacing.EAST || sideHit == EnumFacing.WEST) {
    shape = UtilShape.squareVerticalZ(posHit, RADIUS);
  }
  else {//has to be NORTHSOUTH
    shape = UtilShape.squareVerticalX(posHit, RADIUS);
  }
  for (BlockPos posCurrent : shape) {
    //first we validate
    if (posHit.equals(posCurrent)) {
      continue;
    }
    if (super.onBlockStartBreak(stack, new BlockPos(posCurrent), player)) {
      continue;
    }
    IBlockState bsCurrent = world.getBlockState(posCurrent);
    if (world.isAirBlock(posCurrent)) {
      continue;
    }
    if (!mats.contains(bsCurrent.getMaterial())) {
      continue;
    }
    Block blockCurrent = bsCurrent.getBlock();
    if (!ForgeHooks.canHarvestBlock(blockCurrent, player, world, posCurrent)
        || bsCurrent.getBlock().canEntityDestroy(bsCurrent, world, posCurrent, player) == false
        || bsCurrent.getBlock().getBlockHardness(bsCurrent, world, posCurrent) < 0) {
      continue;
    }
    //then we destroy
    stack.onBlockDestroyed(world, bsCurrent, posCurrent, player);
    if (world.isRemote) {//C
      world.playEvent(2001, posCurrent, Block.getStateId(bsCurrent));
      if (blockCurrent.removedByPlayer(bsCurrent, world, posCurrent, player, true)) {
        blockCurrent.onBlockDestroyedByPlayer(world, posCurrent, bsCurrent);
      }
      stack.onBlockDestroyed(world, bsCurrent, posCurrent, player);//update tool damage
      if (stack.getCount() == 0 && stack == player.getHeldItemMainhand()) {
        ForgeEventFactory.onPlayerDestroyItem(player, stack, EnumHand.MAIN_HAND);
        player.setHeldItem(EnumHand.MAIN_HAND, null);
      }
      Minecraft.getMinecraft().getConnection().sendPacket(new CPacketPlayerDigging(CPacketPlayerDigging.Action.STOP_DESTROY_BLOCK, posCurrent, Minecraft.getMinecraft().objectMouseOver.sideHit));
    }
    else if (player instanceof EntityPlayerMP) {//Server side, so this works
      EntityPlayerMP mp = (EntityPlayerMP) player;
      int xpGivenOnDrop = ForgeHooks.onBlockBreakEvent(world, ((EntityPlayerMP) player).interactionManager.getGameType(), (EntityPlayerMP) player, posCurrent);
      if (xpGivenOnDrop >= 0) {
        if (blockCurrent.removedByPlayer(bsCurrent, world, posCurrent, player, true)) {
          TileEntity tile = world.getTileEntity(posCurrent);
          blockCurrent.onBlockDestroyedByPlayer(world, posCurrent, bsCurrent);
          blockCurrent.harvestBlock(world, player, posCurrent, bsCurrent, tile, stack);
          blockCurrent.dropXpOnBlockBreak(world, posCurrent, xpGivenOnDrop);
        }
        mp.connection.sendPacket(new SPacketBlockChange(world, posCurrent));
      }
    }
  }
  return super.onBlockStartBreak(stack, posHit, player);
}
 
开发者ID:PrinceOfAmber,项目名称:Cyclic,代码行数:76,代码来源:ItemMattock.java

示例12: aoeBlockBreak

import net.minecraftforge.common.ForgeHooks; //导入方法依赖的package包/类
private void aoeBlockBreak(ItemStack stack, World world, BlockPos pos, EntityPlayer player)
{
    if(world.isAirBlock(pos))
        return;

    if(!(player instanceof EntityPlayerMP))
        return;
    EntityPlayerMP playerMP = (EntityPlayerMP) player;

    IBlockState state = world.getBlockState(pos);
    if(!isEffective(state) || !ForgeHooks.canHarvestBlock(state.getBlock(), player, world, pos))
        return;

    int event = ForgeHooks.onBlockBreakEvent(world, playerMP.interactionManager.getGameType(), playerMP, pos);
    if(event == -1)
        return;

    stack.onBlockDestroyed(world, state, pos, player);
    if(!world.isRemote)
    {
        state.getBlock().onBlockHarvested(world, pos, state, player);
        if(state.getBlock().removedByPlayer(state, world, pos, player, true))
        {
            state.getBlock().onBlockDestroyedByPlayer(world, pos, state);
            state.getBlock().harvestBlock(world, player, pos, state, world.getTileEntity(pos), stack);
            state.getBlock().dropXpOnBlockBreak(world, pos, event);
        }
        playerMP.connection.sendPacket(new SPacketBlockChange(world, pos));
    }
    else //CLIENT
    {
        if(state.getBlock().removedByPlayer(state, world, pos, player, true))
            state.getBlock().onBlockDestroyedByPlayer(world, pos, state);
        ItemStack itemstack = player.getActiveItemStack();
        if(itemstack != null)
        {
            itemstack.onBlockDestroyed(world, state, pos, player);
        }
        ClockworkPhase2.proxy.sendBlockDestroyPacket(pos);
    }
}
 
开发者ID:Lumaceon,项目名称:ClockworkPhase2,代码行数:42,代码来源:ItemClockworkTool.java

示例13: aoeBlockBreak

import net.minecraftforge.common.ForgeHooks; //导入方法依赖的package包/类
private void aoeBlockBreak(ItemStack stack, World world, BlockPos pos, EntityPlayer player)
{
    if(world.isAirBlock(pos))
        return;

    if(!(player instanceof EntityPlayerMP))
        return;
    EntityPlayerMP playerMP = (EntityPlayerMP) player;

    IBlockState state = world.getBlockState(pos);
    if(!isEffective(stack, state) || !ForgeHooks.canHarvestBlock(state.getBlock(), player, world, pos))
        return;

    int event = ForgeHooks.onBlockBreakEvent(world, playerMP.interactionManager.getGameType(), playerMP, pos);
    if(event == -1)
        return;

    stack.onBlockDestroyed(world, state, pos, player);
    if(!world.isRemote)
    {
        state.getBlock().onBlockHarvested(world, pos, state, player);
        if(state.getBlock().removedByPlayer(state, world, pos, player, true))
        {
            state.getBlock().onBlockDestroyedByPlayer(world, pos, state);
            state.getBlock().harvestBlock(world, player, pos, state, world.getTileEntity(pos), stack);
            state.getBlock().dropXpOnBlockBreak(world, pos, event);
        }
        playerMP.connection.sendPacket(new SPacketBlockChange(world, pos));
    }
    else //CLIENT
    {
        if(state.getBlock().removedByPlayer(state, world, pos, player, true))
            state.getBlock().onBlockDestroyedByPlayer(world, pos, state);
        ItemStack itemstack = player.getActiveItemStack();
        if(!itemstack.isEmpty())
        {
            itemstack.onBlockDestroyed(world, state, pos, player);
        }
        ClockworkPhase2.proxy.sendBlockDestroyPacket(pos);
    }
}
 
开发者ID:Lumaceon,项目名称:ClockworkPhase2,代码行数:42,代码来源:ItemTemporalExcavator.java

示例14: harvestBlock

import net.minecraftforge.common.ForgeHooks; //导入方法依赖的package包/类
protected boolean harvestBlock(World world, int x, int y, int z, EntityPlayer player) {
	if (world.isAirBlock(x, y, z)) {
		return false;
	}
	EntityPlayerMP playerMP = null;
	if (player instanceof EntityPlayerMP) {
		playerMP = (EntityPlayerMP) player;
	}
	Block block = world.getBlock(x, y, z);
	int meta = world.getBlockMetadata(x, y, z);
	if (!(toolClasses.contains(block.getHarvestTool(meta)) || canHarvestBlock(block, player.getCurrentEquippedItem()))) {
		return false;
	}
	if (!ForgeHooks.canHarvestBlock(block, player, meta)) {
		return false;
	}
	BreakEvent event = null;
	if (playerMP != null) {
		event = ForgeHooks.onBlockBreakEvent(world, playerMP.theItemInWorldManager.getGameType(), playerMP, x, y, z);
		if (event.isCanceled()) {
			return false;
		}
	}
	if (player.capabilities.isCreativeMode) {
		if (!world.isRemote) {
			block.onBlockHarvested(world, x, y, z, meta, player);
		} else {
			world.playAuxSFX(2001, x, y, z, Block.getIdFromBlock(block) | (meta << 12));
		}
		if (block.removedByPlayer(world, player, x, y, z, false)) {
			block.onBlockDestroyedByPlayer(world, x, y, z, meta);
		}
		if (!world.isRemote) {
			playerMP.playerNetServerHandler.sendPacket(new S23PacketBlockChange(x, y, z, world));
		} else {
			Minecraft.getMinecraft().getNetHandler()
					.addToSendQueue(new C07PacketPlayerDigging(2, x, y, z, Minecraft.getMinecraft().objectMouseOver.sideHit));
		}
		return true;
	}
	world.playAuxSFXAtEntity(player, 2001, x, y, z, Block.getIdFromBlock(block) | (meta << 12));
	if (!world.isRemote) {
		block.onBlockHarvested(world, x, y, z, meta, player);
		if (block.removedByPlayer(world, player, x, y, z, true)) {
			block.onBlockDestroyedByPlayer(world, x, y, z, meta);
			block.harvestBlock(world, player, x, y, z, meta);
			if (event != null) {
				block.dropXpOnBlockBreak(world, x, y, z, event.getExpToDrop());
			}
		}
		playerMP.playerNetServerHandler.sendPacket(new S23PacketBlockChange(x, y, z, world));
	} else {
		if (block.removedByPlayer(world, player, x, y, z, true)) {
			block.onBlockDestroyedByPlayer(world, x, y, z, meta);
		}
		Minecraft.getMinecraft().getNetHandler().addToSendQueue(new C07PacketPlayerDigging(2, x, y, z, Minecraft.getMinecraft().objectMouseOver.sideHit));
	}
	return true;
}
 
开发者ID:MHuanterAxe,项目名称:MHuanterMod,代码行数:60,代码来源:ItemToolMM.java

示例15: tryHarvestBlock

import net.minecraftforge.common.ForgeHooks; //导入方法依赖的package包/类
public boolean tryHarvestBlock(int p_73084_1_, int p_73084_2_, int p_73084_3_)
{
    BlockEvent.BreakEvent event = ForgeHooks.onBlockBreakEvent(theWorld, gameType, thisPlayerMP, p_73084_1_, p_73084_2_, p_73084_3_);
    if (event.isCanceled())
    {
        return false;
    }
    else
    {
        ItemStack stack = thisPlayerMP.getCurrentEquippedItem();
        if (stack != null && stack.getItem().onBlockStartBreak(stack, p_73084_1_, p_73084_2_, p_73084_3_, thisPlayerMP))
        {
            return false;
        }
        Block block = this.theWorld.getBlock(p_73084_1_, p_73084_2_, p_73084_3_);

        if (block == Blocks.air)
        {
            return false;    // CraftBukkit - A plugin set block to air without cancelling
        }

        int l = this.theWorld.getBlockMetadata(p_73084_1_, p_73084_2_, p_73084_3_);
        this.theWorld.playAuxSFXAtEntity(this.thisPlayerMP, 2001, p_73084_1_, p_73084_2_, p_73084_3_, Block.getIdFromBlock(block) + (this.theWorld.getBlockMetadata(p_73084_1_, p_73084_2_, p_73084_3_) << 12));
        boolean flag = false;

        if (this.isCreative())
        {
            flag = this.removeBlock(p_73084_1_, p_73084_2_, p_73084_3_);
            this.thisPlayerMP.playerNetServerHandler.sendPacket(new S23PacketBlockChange(p_73084_1_, p_73084_2_, p_73084_3_, this.theWorld));
        }
        else
        {
            ItemStack itemstack = this.thisPlayerMP.getCurrentEquippedItem();
            boolean flag1 = block.canHarvestBlock(thisPlayerMP, l);

            if (itemstack != null)
            {
                itemstack.func_150999_a(this.theWorld, block, p_73084_1_, p_73084_2_, p_73084_3_, this.thisPlayerMP);

                if (itemstack.stackSize == 0)
                {
                    this.thisPlayerMP.destroyCurrentEquippedItem();
                }
            }

            flag = this.removeBlock(p_73084_1_, p_73084_2_, p_73084_3_, flag1);
            if (flag && flag1)
            {
                block.harvestBlock(this.theWorld, this.thisPlayerMP, p_73084_1_, p_73084_2_, p_73084_3_, l);
            }
        }

        // Drop experience
        if (!this.isCreative() && flag && event != null)
        {
            block.dropXpOnBlockBreak(this.theWorld, p_73084_1_, p_73084_2_, p_73084_3_, event.getExpToDrop());
        }
        return flag;
    }
}
 
开发者ID:xtrafrancyz,项目名称:Cauldron,代码行数:61,代码来源:ItemInWorldManager.java


注:本文中的net.minecraftforge.common.ForgeHooks.onBlockBreakEvent方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。