Fixed silk touch crash.

This commit is contained in:
bconlon 2020-06-02 20:39:44 -07:00
parent 5d05ee5117
commit f08ff511c8

View file

@ -3,11 +3,17 @@ package com.legacy.aether.items.util;
import net.minecraft.block.Block;
import net.minecraft.enchantment.Enchantment;
import net.minecraft.enchantment.EnchantmentHelper;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.stats.StatList;
import com.legacy.aether.items.tools.ItemSkyrootTool;
import net.minecraft.world.World;
import net.minecraftforge.event.ForgeEventFactory;
import java.util.ArrayList;
public class DoubleDropHelper {
@ -24,7 +30,16 @@ public class DoubleDropHelper {
}
if (block.canSilkHarvest(player.worldObj, player, x, y, z, meta) && EnchantmentHelper.getEnchantmentLevel(Enchantment.silkTouch.effectId, stack) > 0) {
block.harvestBlock(player.worldObj, player, x, y, z, meta);
ArrayList<ItemStack> items = new ArrayList<ItemStack>();
ItemStack itemstack = createStackedBlock(meta, block);
items.add(itemstack);
ForgeEventFactory.fireBlockHarvesting(items, player.worldObj, block, x, y, z, meta, 0, 1.0f, true, player);
for (ItemStack is : items)
{
dropBlockAsItem(player.worldObj, x, y, z, is);
}
return;
}
@ -46,4 +61,30 @@ public class DoubleDropHelper {
}
}
protected static ItemStack createStackedBlock(int p_149644_1_, Block block)
{
int j = 0;
Item item = Item.getItemFromBlock(block);
if (item != null && item.getHasSubtypes())
{
j = p_149644_1_;
}
return new ItemStack(item, 1, j);
}
protected static void dropBlockAsItem(World p_149642_1_, int p_149642_2_, int p_149642_3_, int p_149642_4_, ItemStack p_149642_5_)
{
if (!p_149642_1_.isRemote && p_149642_1_.getGameRules().getGameRuleBooleanValue("doTileDrops") && !p_149642_1_.restoringBlockSnapshots) // do not drop items while restoring blockstates, prevents item dupe
{
float f = 0.7F;
double d0 = (double)(p_149642_1_.rand.nextFloat() * f) + (double)(1.0F - f) * 0.5D;
double d1 = (double)(p_149642_1_.rand.nextFloat() * f) + (double)(1.0F - f) * 0.5D;
double d2 = (double)(p_149642_1_.rand.nextFloat() * f) + (double)(1.0F - f) * 0.5D;
EntityItem entityitem = new EntityItem(p_149642_1_, (double)p_149642_2_ + d0, (double)p_149642_3_ + d1, (double)p_149642_4_ + d2, p_149642_5_);
entityitem.delayBeforeCanPickup = 10;
p_149642_1_.spawnEntityInWorld(entityitem);
}
}
}