Search in sources :

Example 1 with CrackingRecipe

use of com.eerussianguy.firmalife.recipe.CrackingRecipe in project firmalife by eerussianguy.

the class CTCracking method addRecipe.

@ZenMethod
public static void addRecipe(String recipe_name, IIngredient input, IItemStack output, float chance) {
    CrackingRecipe recipe = new CrackingRecipe(CTHelper.getInternalIngredient(input), InputHelper.toStack(output), chance).setRegistryName(recipe_name);
    CraftTweakerAPI.apply(new IAction() {

        @Override
        public void apply() {
            RegistriesFL.CRACKING.register(recipe);
        }

        @Override
        public String describe() {
            return "Adding Cracking recipe " + recipe.getRegistryName().toString();
        }
    });
}
Also used : CrackingRecipe(com.eerussianguy.firmalife.recipe.CrackingRecipe) IAction(crafttweaker.IAction) ZenMethod(stanhebben.zenscript.annotations.ZenMethod)

Example 2 with CrackingRecipe

use of com.eerussianguy.firmalife.recipe.CrackingRecipe 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)

Example 3 with CrackingRecipe

use of com.eerussianguy.firmalife.recipe.CrackingRecipe in project firmalife by eerussianguy.

the class CTCracking method removeRecipe.

@ZenMethod
public static void removeRecipe(IItemStack output) {
    if (output == null)
        throw new IllegalArgumentException("Output not allowed to be empty");
    ArrayList<CrackingRecipe> removeList = new ArrayList<>();
    RegistriesFL.CRACKING.getValuesCollection().stream().filter(x -> x.getOutputItem(ItemStack.EMPTY).isItemEqual(InputHelper.toStack(output))).forEach(removeList::add);
    for (CrackingRecipe recipe : removeList) {
        CraftTweakerAPI.apply(new IAction() {

            @Override
            public void apply() {
                IForgeRegistryModifiable<CrackingRecipe> CRACKING = (IForgeRegistryModifiable<CrackingRecipe>) RegistriesFL.CRACKING;
                CRACKING.remove(recipe.getRegistryName());
            }

            @Override
            public String describe() {
                return "Removing Cracking recipe for output " + output.getDisplayName();
            }
        });
    }
}
Also used : CTHelper(net.dries007.tfc.compat.crafttweaker.CTHelper) IAction(crafttweaker.IAction) ZenClass(stanhebben.zenscript.annotations.ZenClass) ArrayList(java.util.ArrayList) ItemStack(net.minecraft.item.ItemStack) CraftTweakerAPI(crafttweaker.CraftTweakerAPI) IIngredient(crafttweaker.api.item.IIngredient) IItemStack(crafttweaker.api.item.IItemStack) ResourceLocation(net.minecraft.util.ResourceLocation) ZenMethod(stanhebben.zenscript.annotations.ZenMethod) IForgeRegistryModifiable(net.minecraftforge.registries.IForgeRegistryModifiable) InputHelper(com.blamejared.mtlib.helpers.InputHelper) CrackingRecipe(com.eerussianguy.firmalife.recipe.CrackingRecipe) RegistriesFL(com.eerussianguy.firmalife.init.RegistriesFL) ZenRegister(crafttweaker.annotations.ZenRegister) CrackingRecipe(com.eerussianguy.firmalife.recipe.CrackingRecipe) IForgeRegistryModifiable(net.minecraftforge.registries.IForgeRegistryModifiable) IAction(crafttweaker.IAction) ArrayList(java.util.ArrayList) ZenMethod(stanhebben.zenscript.annotations.ZenMethod)

Aggregations

CrackingRecipe (com.eerussianguy.firmalife.recipe.CrackingRecipe)3 IAction (crafttweaker.IAction)2 ItemStack (net.minecraft.item.ItemStack)2 ZenMethod (stanhebben.zenscript.annotations.ZenMethod)2 InputHelper (com.blamejared.mtlib.helpers.InputHelper)1 RegistriesFL (com.eerussianguy.firmalife.init.RegistriesFL)1 IPlayerDataFL (com.eerussianguy.firmalife.player.IPlayerDataFL)1 NutRecipe (com.eerussianguy.firmalife.recipe.NutRecipe)1 CraftTweakerAPI (crafttweaker.CraftTweakerAPI)1 ZenRegister (crafttweaker.annotations.ZenRegister)1 IIngredient (crafttweaker.api.item.IIngredient)1 IItemStack (crafttweaker.api.item.IItemStack)1 ArrayList (java.util.ArrayList)1 List (java.util.List)1 Nonnull (javax.annotation.Nonnull)1 IFood (net.dries007.tfc.api.capability.food.IFood)1 CTHelper (net.dries007.tfc.compat.crafttweaker.CTHelper)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