Files
2019-02-24 22:29:41 +08:00

87 lines
4.2 KiB
Diff

--- ../src-base/minecraft/net/minecraft/item/ItemShears.java
+++ ../src-work/minecraft/net/minecraft/item/ItemShears.java
@@ -26,6 +26,7 @@
}
Block block = state.getBlock();
+ if (block instanceof net.minecraftforge.common.IShearable) return true;
return state.getMaterial() != Material.LEAVES && block != Blocks.WEB && block != Blocks.TALLGRASS && block != Blocks.VINE && block != Blocks.TRIPWIRE && block != Blocks.WOOL ? super.onBlockDestroyed(stack, worldIn, state, pos, entityLiving) : true;
}
@@ -35,6 +36,75 @@
return block == Blocks.WEB || block == Blocks.REDSTONE_WIRE || block == Blocks.TRIPWIRE;
}
+
+ @Override
+ public boolean itemInteractionForEntity(ItemStack itemstack, net.minecraft.entity.player.EntityPlayer player, EntityLivingBase entity, net.minecraft.util.EnumHand hand)
+ {
+ if (entity.world.isRemote)
+ {
+ return false;
+ }
+ if (entity instanceof net.minecraftforge.common.IShearable)
+ {
+ net.minecraftforge.common.IShearable target = (net.minecraftforge.common.IShearable)entity;
+ BlockPos pos = new BlockPos(entity.posX, entity.posY, entity.posZ);
+ if (target.isShearable(itemstack, entity.world, pos))
+ {
+ java.util.List<ItemStack> drops = target.onSheared(itemstack, entity.world, pos,
+ net.minecraft.enchantment.EnchantmentHelper.getEnchantmentLevel(net.minecraft.init.Enchantments.FORTUNE, itemstack));
+
+ java.util.Random rand = new java.util.Random();
+ for(ItemStack stack : drops)
+ {
+ net.minecraft.entity.item.EntityItem ent = entity.entityDropItem(stack, 1.0F);
+ ent.motionY += rand.nextFloat() * 0.05F;
+ ent.motionX += (rand.nextFloat() - rand.nextFloat()) * 0.1F;
+ ent.motionZ += (rand.nextFloat() - rand.nextFloat()) * 0.1F;
+ }
+ itemstack.damageItem(1, entity);
+ }
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ public boolean onBlockStartBreak(ItemStack itemstack, BlockPos pos, net.minecraft.entity.player.EntityPlayer player)
+ {
+ if (player.world.isRemote || player.capabilities.isCreativeMode)
+ {
+ return false;
+ }
+ Block block = player.world.getBlockState(pos).getBlock();
+ if (block instanceof net.minecraftforge.common.IShearable)
+ {
+ net.minecraftforge.common.IShearable target = (net.minecraftforge.common.IShearable)block;
+ if (target.isShearable(itemstack, player.world, pos))
+ {
+ java.util.List<ItemStack> drops = target.onSheared(itemstack, player.world, pos,
+ net.minecraft.enchantment.EnchantmentHelper.getEnchantmentLevel(net.minecraft.init.Enchantments.FORTUNE, itemstack));
+ java.util.Random rand = new java.util.Random();
+
+ for (ItemStack stack : 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;
+ net.minecraft.entity.item.EntityItem entityitem = new net.minecraft.entity.item.EntityItem(player.world, (double)pos.getX() + d, (double)pos.getY() + d1, (double)pos.getZ() + d2, stack);
+ entityitem.setDefaultPickupDelay();
+ player.world.spawnEntity(entityitem);
+ }
+
+ itemstack.damageItem(1, player);
+ player.addStat(net.minecraft.stats.StatList.getBlockStats(block));
+ player.world.setBlockState(pos, Blocks.AIR.getDefaultState(), 11); //TODO: Move to IShearable implementors in 1.12+
+ return true;
+ }
+ }
+ return false;
+ }
+
public float getDestroySpeed(ItemStack stack, IBlockState state)
{
Block block = state.getBlock();