@Override
public boolean onBlockDestroyed(ItemStack stack, World worldIn, IBlockState state, BlockPos pos, EntityLivingBase entityLiving)
{
boolean ret = super.onBlockDestroyed(stack, worldIn, state, pos, entityLiving);
if (!(entityLiving instanceof EntityPlayer) || worldIn.isRemote)
{
return ret;
}
if(!stack.hasTagCompound() || stack.hasTagCompound() && !stack.getTagCompound().getBoolean("drill_mode"))
return ret;
EntityPlayer player = (EntityPlayer) entityLiving;
EnumFacing facing = entityLiving.getHorizontalFacing();
if (entityLiving.rotationPitch < -45.0F)
{
facing = EnumFacing.UP;
}...
Nix13Chanel написал(а):Как сделать что бы кирка копала 3 на 3
Magitrop написал(а):Nix13Chanel написал(а):Как сделать что бы кирка копала 3 на 3
В таумкрафте же вроде была типа такой кирки? Можно там исходники посмотреть попробовать
@Override
public boolean onBlockDestroyed(@Nonnull ItemStack stack, @Nonnull World world, IBlockState state, @Nonnull BlockPos pos, @Nonnull EntityLivingBase entity) {
if(state.getBlockHardness(world, pos) != 0F)
ToolCommons.damageItem(stack, 1, entity, getManaPerDmg());
return true;
}
@Nonnull
@Override
public EnumActionResult onItemUse(ItemStack stack, EntityPlayer player, World world, BlockPos pos, EnumHand hand, EnumFacing side, float sx, float sy, float sz) {
for(int i = 0; i < player.inventory.getSizeInventory(); i++) {
ItemStack stackAt = player.inventory.getStackInSlot(i);
if(stackAt != null && TORCH_PATTERN.matcher(stackAt.getItem().getUnlocalizedName()).find()) {
EnumActionResult did = stackAt.getItem().onItemUse(stackAt, player, world, pos, hand, side, sx, sy, sz);
if(stackAt.stackSize == 0)
player.inventory.setInventorySlotContents(i, null);
ItemsRemainingRenderHandler.set(player, new ItemStack(Blocks.TORCH), TORCH_PATTERN);
return did;
}
}
return EnumActionResult.PASS;
}
public int getManaPerDmg() {
return MANA_PER_DAMAGE;
}
@Override
public void breakOtherBlock(EntityPlayer player, ItemStack stack, BlockPos pos, BlockPos originPos, EnumFacing side) {
if(!isEnabled(stack))
return;
World world = player.worldObj;
Material mat = world.getBlockState(pos).getMaterial();
if(!ToolCommons.isRightMaterial(mat, MATERIALS))
return;
if(world.isAirBlock(pos))
return;
int fortune = EnchantmentHelper.getEnchantmentLevel(Enchantments.FORTUNE, player.getHeldItemMainhand());
boolean silk = EnchantmentHelper.getEnchantmentLevel(Enchantments.SILK_TOUCH, player.getHeldItemMainhand()) > 0;
boolean thor = ItemThorRing.getThorRing(player) != null;
boolean doX = thor || side.getFrontOffsetX() == 0;
boolean doY = thor || side.getFrontOffsetY() == 0;
boolean doZ = thor || side.getFrontOffsetZ() == 0;
int origLevel = getLevel(stack);
int level = origLevel + (thor ? 1 : 0);
if(ItemTemperanceStone.hasTemperanceActive(player) && level > 2)
level = 2;
int range = level - 1;
int rangeY = Math.max(1, range);
if(range == 0 && level != 1)
return;
BlockPos beginDiff = new BlockPos(doX ? -range : 0, doY ? -1 : 0, doZ ? -range : 0);
BlockPos endDiff = new BlockPos(doX ? range : 0, doY ? rangeY * 2 - 1 : 0, doZ ? range : 0);
ToolCommons.removeBlocksInIteration(player, stack, world, pos, beginDiff, endDiff, null, MATERIALS, silk, fortune, isTipped(stack));
if(origLevel == 5)
player.addStat(ModAchievements.rankSSPick, 1);
}
public boolean destroyBlock(BlockPos pos, boolean dropBlock)
{
IBlockState iblockstate = this.getBlockState(pos);//here
Block block = iblockstate.getBlock();//here
if (block.isAir(iblockstate, this, pos))
{
return false;
}
else
{
this.playEvent(2001, pos, Block.getStateId(iblockstate));
if (dropBlock)
{
block.dropBlockAsItem(this, pos, iblockstate, 0);
}
return this.setBlockState(pos, Blocks.AIR.getDefaultState(), 3);
}
}
Nix13Chanel написал(а):т.е. мне нужен весь код?
@Override
public boolean onBlockDestroyed(ItemStack stack, World worldIn, IBlockState state, BlockPos pos, EntityLivingBase entityLiving)
{
boolean ret = super.onBlockDestroyed(stack, worldIn, state, pos, entityLiving);
if (!(entityLiving instanceof EntityPlayer) || worldIn.isRemote)
{
return ret;
}
if(!stack.hasTagCompound() || stack.hasTagCompound() && !stack.getTagCompound().getBoolean("drill_mode"))
return ret;
EntityPlayer player = (EntityPlayer) entityLiving;
EnumFacing facing = entityLiving.getHorizontalFacing();
if (entityLiving.rotationPitch < -45.0F)
{
facing = EnumFacing.UP;
}
else if (entityLiving.rotationPitch > 45.0F)
{
facing = EnumFacing.DOWN;
}
boolean yAxis = facing.getAxis() == EnumFacing.Axis.Y;
boolean xAxis = facing.getAxis() == EnumFacing.Axis.X;
for (int i = -breakRadius; i <= breakRadius; ++i)
{
for (int j = -breakRadius; j <= breakRadius && !stack.isEmpty(); ++j)
{
if (i == 0 && j == 0)
{
continue;
}
BlockPos pos1;
if (yAxis)
{
pos1 = pos.add(i, 0, j);
}
else if (xAxis)
{
pos1 = pos.add(0, i, j);
}
else
{
pos1 = pos.add(i, j, 0);
}
//:Replicate logic of PlayerInteractionManager.tryHarvestBlock(pos1)
IBlockState state1 = worldIn.getBlockState(pos1);
float f = state1.getBlockHardness(worldIn, pos1);
if (f >= 0F)
{
BlockEvent.BreakEvent event = new BlockEvent.BreakEvent(worldIn, pos1, state1, player);
MinecraftForge.EVENT_BUS.post(event);
if (!event.isCanceled())
{
Block block = state1.getBlock();
if ((block instanceof BlockCommandBlock || block instanceof BlockStructure) && !player.canUseCommandBlock())
{
worldIn.notifyBlockUpdate(pos1, state1, state1, 3);
continue;
}
TileEntity tileentity = worldIn.getTileEntity(pos1);
if (tileentity != null)
{
Packet<?> pkt = tileentity.getUpdatePacket();
if (pkt != null)
{
((EntityPlayerMP)player).connection.sendPacket(pkt);
}
}
boolean canHarvest = block.canHarvestBlock(worldIn, pos1, player);
boolean destroyed = block.removedByPlayer(state1, worldIn, pos1, player, canHarvest);
if (destroyed)
{
block.onBlockDestroyedByPlayer(worldIn, pos1, state1);
}
if (canHarvest && destroyed)
{
block.harvestBlock(worldIn, player, pos1, state1, tileentity, stack);
//stack.damageItem(1, player);
}
}
}
}
}
return ret;
}