package joshie.harvest.tools;
import joshie.harvest.api.core.ITiered.ToolTier;
import joshie.harvest.core.HFTrackers;
import joshie.harvest.core.base.item.ItemTool;
import joshie.harvest.core.util.annotations.HFEvents;
import joshie.harvest.crops.CropHelper;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.MobEffects;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.potion.PotionEffect;
import net.minecraftforge.event.entity.living.LivingEntityUseItemEvent;
import net.minecraftforge.event.entity.player.AttackEntityEvent;
import net.minecraftforge.event.entity.player.PlayerInteractEvent;
import net.minecraftforge.event.world.BlockEvent.HarvestDropsEvent;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.common.gameevent.PlayerEvent.ItemPickupEvent;
import net.minecraftforge.fml.common.gameevent.TickEvent.Phase;
import net.minecraftforge.fml.common.gameevent.TickEvent.PlayerTickEvent;
import java.util.HashSet;
import java.util.Set;
import static joshie.harvest.tools.HFTools.EXHAUSTION;
import static joshie.harvest.tools.HFTools.FATIGUE;
@HFEvents
@SuppressWarnings("unused")
public class ToolEvents {
@HFEvents
@SuppressWarnings("unused")
public static class AttackFainting {
public static boolean register() { return HFTools.ATTACK_FAINTING; }
@SubscribeEvent
public void onAttackEntity(AttackEntityEvent event){
ToolHelper.consumeHunger(event.getEntityPlayer(), 0F);
}
}
@HFEvents
@SuppressWarnings("unused")
public static class BreakFainting {
public static boolean register() { return HFTools.BLOCK_FAINTING; }
@SubscribeEvent
public void onHarvestBlock(HarvestDropsEvent event){
ToolHelper.consumeHunger(event.getHarvester(), 0F);
}
}
@HFEvents
@SuppressWarnings("unused")
public static class CursedTools {
@SubscribeEvent
public void openContainer(PlayerTickEvent event) {
if (!event.player.capabilities.isCreativeMode && event.player.worldObj.getTotalWorldTime() % 200 == 0) {
int level = 0;
Set<Item> added = new HashSet<>();
for (ItemStack stack : event.player.inventory.mainInventory) {
if (stack != null && !added.contains(stack.getItem()) && stack.getItem() instanceof ItemTool) {
if (((ItemTool) stack.getItem()).getTier(stack) == ToolTier.CURSED) {
added.add(stack.getItem());
level++;
if (level >= 3) {
break;
}
}
}
}
if (level > 0) {
event.player.addPotionEffect(new PotionEffect(HFTools.CURSED, 200, Math.min(3, level) - 1, true, false));
}
}
}
}
@SubscribeEvent
public void onClick(PlayerInteractEvent.LeftClickBlock event) {
EntityPlayer player = event.getEntityPlayer();
if (player.motionY <= -0.1F) {
if (player.getHeldItemMainhand() != null && player.getHeldItemMainhand().getItem() == HFTools.HAMMER) {
if (CropHelper.getWateringHandler(event.getWorld(), event.getPos(), event.getWorld().getBlockState(event.getPos())) != null) {
HFTools.HAMMER.smashBlock(event.getWorld(), player, event.getPos(), player.getHeldItemMainhand(), true);
}
}
}
}
@SubscribeEvent
public void onPlayerTick(PlayerTickEvent event) {
if (event.phase == Phase.END || event.player.worldObj.getTotalWorldTime() %20 == 0) {
if (event.player.isPotionActive(EXHAUSTION)) {
if (event.player.worldObj.rand.nextInt(256) == 0) {
event.player.addPotionEffect(new PotionEffect(MobEffects.BLINDNESS, 300, 0, true, false));
}
}
}
}
@SubscribeEvent
public void onEaten(LivingEntityUseItemEvent.Finish event) {
if (event.getEntityLiving() instanceof EntityPlayer) {
EntityPlayer player = (EntityPlayer) event.getEntityLiving();
int level = player.getFoodStats().getFoodLevel();
if (level > 2 && player.isPotionActive(EXHAUSTION)) player.removePotionEffect(EXHAUSTION);
if (level > 6 && player.isPotionActive(FATIGUE)) player.removePotionEffect(FATIGUE);
}
}
@SubscribeEvent
public void onItemPickup(ItemPickupEvent event) {
ItemStack stack = event.pickedUp.getEntityItem();
if (stack.getItem() instanceof ItemTool) {
HFTrackers.getPlayerTrackerFromPlayer(event.player).getTracking().addAsObtained(stack);
}
}
}