Search in sources :

Example 1 with IPlayerDataFL

use of com.eerussianguy.firmalife.player.IPlayerDataFL in project firmalife by eerussianguy.

the class ItemMetalMallet method onItemUse.

@Override
@Nonnull
@SuppressWarnings("deprecation")
public EnumActionResult onItemUse(EntityPlayer player, World worldIn, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) {
    if (!worldIn.isRemote && hand == EnumHand.MAIN_HAND) {
        Block block = worldIn.getBlockState(pos).getBlock();
        if (block instanceof BlockPlacedItemFlat) {
            TEPlacedItemFlat tile = (TEPlacedItemFlat) worldIn.getTileEntity(pos);
            if (tile == null)
                return EnumActionResult.FAIL;
            CrackingRecipe entry = CrackingRecipe.get(tile.getStack());
            if (entry == null)
                return EnumActionResult.FAIL;
            if (Constants.RNG.nextInt(100) < entry.getChance()) {
                InventoryHelper.spawnItemStack(worldIn, pos.getX(), pos.getY(), pos.getZ(), entry.getOutputItem(tile.getStack()));
                worldIn.playSound(null, pos, SoundEvents.BLOCK_WOOD_PLACE, SoundCategory.BLOCKS, 2.0F, 1.0F);
            } else
                worldIn.playSound(null, pos, SoundEvents.BLOCK_WOOD_FALL, SoundCategory.BLOCKS, 2.0F, 1.0F);
            tile.setStack(ItemStack.EMPTY);
            worldIn.setBlockToAir(pos);
            player.getHeldItem(hand).damageItem(1, player);
            return EnumActionResult.SUCCESS;
        } else if (block == BlocksFL.MELON_FRUIT) {
            List<ItemStack> drops = block.getDrops(worldIn, pos, worldIn.getBlockState(pos), 0);
            ItemStack stack = drops.get(0);
            if (stack.getItem() == Item.getItemFromBlock(block)) {
                IFood cap = stack.getCapability(CapabilityFood.CAPABILITY, null);
                if (cap != null) {
                    if (!cap.isRotten()) {
                        for (int i = 0; i < 2 + RNG.nextInt(4); i++) Helpers.spawnItemStack(worldIn, pos, new ItemStack(ItemsFL.getFood(FoodFL.MELON)));
                    }
                }
            }
            worldIn.destroyBlock(pos, false);
            worldIn.playSound(null, pos, SoundEvents.BLOCK_GRASS_BREAK, SoundCategory.BLOCKS, 1.0f, 1.0f);
            return EnumActionResult.SUCCESS;
        }
        BlockPos offsetPos;
        BlockPos logPos = pos;
        IBlockState logState = worldIn.getBlockState(pos);
        Block logBlock = logState.getBlock();
        // grabbing the registry to verify you're clicking a nut tree
        NutRecipe entry = NutRecipe.get(logBlock);
        if (entry == null)
            return EnumActionResult.FAIL;
        int leafCount = 0;
        for (int i = 1; i < 14; i++) {
            logPos = pos.up(i);
            logState = worldIn.getBlockState(logPos);
            if (// we already verified that logBlock is correct
            logState.getBlock() != logBlock)
                break;
            for (// this is a crappy leaf counting algorithm
            EnumFacing d : // this is a crappy leaf counting algorithm
            EnumFacing.HORIZONTALS) {
                IBlockState leafState;
                for (int j = 1; j < 5; j++) {
                    offsetPos = logPos.offset(d, j);
                    leafState = worldIn.getBlockState(offsetPos);
                    if (// offset the thing if the trunk seems to curve
                    j == 1 && leafState.getBlock() == logBlock)
                        pos = pos.offset(d, j);
                    if (worldIn.isAirBlock(offsetPos))
                        continue;
                    if (leafState.getBlock() == entry.getLeaves())
                        leafCount++;
                }
            }
        }
        if (leafCount > 0) {
            Month month = CalendarTFC.CALENDAR_TIME.getMonthOfYear();
            if (!(month == Month.OCTOBER || month == Month.NOVEMBER)) {
                player.sendStatusMessage(new TextComponentTranslation("tooltip.firmalife.not_fall"), true);
                return EnumActionResult.PASS;
            }
            IPlayerDataFL playerData = player.getCapability(CapPlayerDataFL.CAPABILITY, null);
            if (playerData != null) {
                boolean timePassed = (int) CalendarTFC.CALENDAR_TIME.getTicks() - playerData.getNuttedTime() > ConfigFL.General.BALANCE.nutTime;
                boolean distanced = playerData.getNutDistance(pos) > ConfigFL.General.BALANCE.nutDistance;
                if (distanced && timePassed) {
                    playerData.setNuttedTime();
                    playerData.setNutPosition(pos);
                    leafCount = (int) Math.ceil(leafCount * 0.66);
                    while (// batches drops a few times
                    leafCount > 0) {
                        int dropCount = Math.min(Constants.RNG.nextInt(4) + 1, leafCount);
                        BlockPos dropPos = logPos.offset(EnumFacing.random(Constants.RNG), Constants.RNG.nextInt(3) + 1);
                        // should be querying nut
                        Helpers.spawnItemStack(worldIn, dropPos, new ItemStack(entry.getNut().getItem(), Constants.RNG.nextInt(dropCount)));
                        TFCParticles.LEAF1.sendToAllNear(worldIn, dropPos.getX() + RNG.nextFloat() / 10, dropPos.getY() - RNG.nextFloat() / 10, dropPos.getZ() + RNG.nextFloat() / 10, (RNG.nextFloat() - 0.5) / 10, -0.15D + RNG.nextFloat() / 10, (RNG.nextFloat() - 0.5) / 10, 90);
                        leafCount -= dropCount;
                    }
                    worldIn.playSound(null, pos, SoundEvents.BLOCK_WOOD_PLACE, SoundCategory.BLOCKS, 3.0F, 1.0F);
                    player.getHeldItem(hand).damageItem(1, player);
                    player.addPotionEffect(new PotionEffect(MobEffects.HUNGER, 200, 1));
                } else {
                    if (!timePassed) {
                        player.sendStatusMessage(new TextComponentTranslation("tooltip.firmalife.refractory"), true);
                    } else {
                        player.sendStatusMessage(new TextComponentTranslation("tooltip.firmalife.distance"), true);
                    }
                    player.addPotionEffect(new PotionEffect(MobEffects.MINING_FATIGUE, 200, 1));
                    player.addPotionEffect(new PotionEffect(PotionEffectsTFC.THIRST, 200, 0));
                }
                return EnumActionResult.SUCCESS;
            }
        }
    }
    return EnumActionResult.FAIL;
}
Also used : CrackingRecipe(com.eerussianguy.firmalife.recipe.CrackingRecipe) IFood(net.dries007.tfc.api.capability.food.IFood) IPlayerDataFL(com.eerussianguy.firmalife.player.IPlayerDataFL) TextComponentTranslation(net.minecraft.util.text.TextComponentTranslation) IBlockState(net.minecraft.block.state.IBlockState) PotionEffect(net.minecraft.potion.PotionEffect) Month(net.dries007.tfc.util.calendar.Month) TEPlacedItemFlat(net.dries007.tfc.objects.te.TEPlacedItemFlat) Block(net.minecraft.block.Block) ItemBlock(net.minecraft.item.ItemBlock) List(java.util.List) BlockPos(net.minecraft.util.math.BlockPos) NutRecipe(com.eerussianguy.firmalife.recipe.NutRecipe) BlockPlacedItemFlat(net.dries007.tfc.objects.blocks.BlockPlacedItemFlat) ItemStack(net.minecraft.item.ItemStack) Nonnull(javax.annotation.Nonnull)

Aggregations

IPlayerDataFL (com.eerussianguy.firmalife.player.IPlayerDataFL)1 CrackingRecipe (com.eerussianguy.firmalife.recipe.CrackingRecipe)1 NutRecipe (com.eerussianguy.firmalife.recipe.NutRecipe)1 List (java.util.List)1 Nonnull (javax.annotation.Nonnull)1 IFood (net.dries007.tfc.api.capability.food.IFood)1 BlockPlacedItemFlat (net.dries007.tfc.objects.blocks.BlockPlacedItemFlat)1 TEPlacedItemFlat (net.dries007.tfc.objects.te.TEPlacedItemFlat)1 Month (net.dries007.tfc.util.calendar.Month)1 Block (net.minecraft.block.Block)1 IBlockState (net.minecraft.block.state.IBlockState)1 ItemBlock (net.minecraft.item.ItemBlock)1 ItemStack (net.minecraft.item.ItemStack)1 PotionEffect (net.minecraft.potion.PotionEffect)1 BlockPos (net.minecraft.util.math.BlockPos)1 TextComponentTranslation (net.minecraft.util.text.TextComponentTranslation)1