package com.mcmoddev.communitymod.bijump;

import com.mcmoddev.communitymod.CommunityGlobals;
import com.mcmoddev.communitymod.ISubMod;
import com.mcmoddev.communitymod.SubMod;
import net.minecraft.client.Minecraft;
import net.minecraft.client.entity.EntityPlayerSP;
import net.minecraft.client.settings.KeyBinding;
import net.minecraft.enchantment.EnchantmentHelper;
import net.minecraft.init.Blocks;
import net.minecraft.util.math.BlockPos;
import net.minecraftforge.fml.client.registry.ClientRegistry;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.common.gameevent.InputEvent;
import net.minecraftforge.fml.relauncher.Side;
import org.lwjgl.input.Keyboard;

import java.util.HashSet;
import java.util.Set;
import java.util.Timer;
import java.util.TimerTask;

@Mod.EventBusSubscriber(modid = CommunityGlobals.MOD_ID, value = Side.CLIENT)
@SubMod(name = "BiJumpClient", attribution = "SkyHawkB", clientSideOnly = true)
public class BoingHandler implements ISubMod {
    /*
		I'm Also Making a whole submod for this because i couldn't be bothered making proxies
		#yolo #wcgw #blamelemons
	 */

    public static KeyBinding jump;
    private static Set<EntityPlayerSP> jumpybois = new HashSet<>();

    public void onInit(FMLInitializationEvent e) {
        jump = new KeyBinding("key.bijump", Keyboard.KEY_SPACE, "key.categories.bijump");
        ClientRegistry.registerKeyBinding(jump);
    }

    @SubscribeEvent
    public static void onJump(InputEvent.KeyInputEvent event) {
        if(jump.isPressed()) {
            EntityPlayerSP player = Minecraft.getMinecraft().player;
            BlockPos pos = new BlockPos(player.posX, player.posY, player.posZ);
            int level = EnchantmentHelper.getMaxEnchantmentLevel(BiJump.BOINGBOING, player);

            if(player.world.getBlockState(pos).getBlock().equals(Blocks.AIR) &&
                    player.world.getBlockState(pos.add(0, -2, 0)).getBlock().equals(Blocks.AIR) &&
                    !jumpybois.contains(player) &&  level > 0) {
                player.sprintingTicksLeft += 40;
                player.addVelocity(0, 1.2 * Math.sqrt(level), 0);
                jumpybois.add(player);
                new Timer().schedule(new TimerTask(){ @Override public void run(){ jumpybois.remove(player);}}, 7000);
            }
        }
    }
}