package com.infinityraider.agricraft.items;
import com.infinityraider.agricraft.farming.growthrequirement.GrowthRequirementHandler;
import com.infinityraider.agricraft.init.AgriBlocks;
import com.infinityraider.agricraft.items.tabs.AgriTabs;
import com.infinityraider.agricraft.reference.AgriCraftConfig;
import com.infinityraider.agricraft.tiles.TileEntityCrop;
import com.infinityraider.infinitylib.item.IItemWithModel;
import com.infinityraider.infinitylib.item.ItemBase;
import net.minecraft.block.SoundType;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumActionResult;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.EnumHand;
import net.minecraft.util.SoundCategory;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import net.minecraftforge.oredict.ShapedOreRecipe;
import com.infinityraider.infinitylib.utility.IRecipeRegister;
import com.infinityraider.infinitylib.utility.WorldHelper;
import net.minecraftforge.fml.common.registry.GameRegistry;
public class ItemCrop extends ItemBase implements IItemWithModel, IRecipeRegister {
public ItemCrop() {
super("crop_sticks");
this.setCreativeTab(AgriTabs.TAB_AGRICRAFT);
}
//I'm overriding this just to be sure
@Override
public boolean canItemEditBlocks() {
return true;
}
// This is called when you right click with this item in hand.
@Override
public EnumActionResult onItemUseFirst(ItemStack stack, EntityPlayer player, World world, BlockPos pos, EnumFacing side, float hitX, float hitY, float hitZ, EnumHand hand) {
// Skip if remote, or clicked wrong face of block.
if (world.isRemote || side != EnumFacing.UP) {
return EnumActionResult.PASS;
}
// Fetch information.
final BlockPos cropPos = pos.up();
// Test if placement is valid.
if (!world.isAirBlock(cropPos) || !GrowthRequirementHandler.isSoilValid(world, pos)) {
return EnumActionResult.FAIL;
}
// Set the block to a crop.
world.setBlockState(pos.up(), AgriBlocks.getInstance().CROP.getDefaultState());
// Remove the crop used from the stack.
stack.stackSize = player.capabilities.isCreativeMode ? stack.stackSize : stack.stackSize - 1;
// Handle sneak placing of crosscrops.
if (player.isSneaking() && stack.stackSize > 0) {
WorldHelper
.getTile(world, pos.add(0, 1, 0), TileEntityCrop.class)
.ifPresent(c -> {
c.setCrossCrop(true);
stack.stackSize = player.capabilities.isCreativeMode ? stack.stackSize : stack.stackSize - 1;
});
}
// Play placement sound.
SoundType type = Blocks.LEAVES.getSoundType();
world.playSound(null, (double) ((float) cropPos.getX() + 0.5F), (double) ((float) cropPos.getY() + 0.5F), (double) ((float) cropPos.getZ() + 0.5F), type.getPlaceSound(), SoundCategory.PLAYERS, (type.getVolume() + 1.0F) / 4.0F, type.getPitch() * 0.8F);
// Action was a success.
return EnumActionResult.SUCCESS;
}
@Override
public void registerRecipes() {
GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(this, AgriCraftConfig.cropsPerCraft), "ss", "ss", 's', "stickWood"));
}
}