/*
 * Copyright (C) 2017 - 2019 | Wurst-Imperium | All rights reserved.
 *
 * This source code is subject to the terms of the GNU General Public
 * License, version 3. If a copy of the GPL was not distributed with this
 * file, You can obtain one at: https://www.gnu.org/licenses/gpl-3.0.txt
 */
package net.wurstclient.forge.hacks;

import net.minecraft.client.entity.EntityPlayerSP;
import net.minecraft.client.settings.GameSettings;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.wurstclient.fmlevents.WUpdateEvent;
import net.wurstclient.forge.Category;
import net.wurstclient.forge.Hack;
import net.wurstclient.forge.settings.EnumSetting;

public final class AutoSwimHack extends Hack
{
	private final EnumSetting<Mode> mode =
		new EnumSetting<>("Mode", Mode.values(), Mode.DOLPHIN);
	
	public AutoSwimHack()
	{
		super("AutoSwim", "Makes you swim automatically.");
		setCategory(Category.MOVEMENT);
		addSetting(mode);
	}
	
	@Override
	protected void onEnable()
	{
		MinecraftForge.EVENT_BUS.register(this);
	}
	
	@Override
	protected void onDisable()
	{
		MinecraftForge.EVENT_BUS.unregister(this);
	}
	
	@SubscribeEvent
	public void onUpdate(WUpdateEvent event)
	{
		EntityPlayerSP player = event.getPlayer();
		
		if(player.isInWater() && !player.isSneaking()
			&& !GameSettings.isKeyDown(mc.gameSettings.keyBindJump))
			player.motionY += mode.getSelected().upwardsMotion;
	}
	
	private enum Mode
	{
		DOLPHIN("Dolphin", 0.04),
		FISH("Fish", 0.02);
		
		private final String name;
		private final double upwardsMotion;
		
		private Mode(String name, double upwardsMotion)
		{
			this.name = name;
			this.upwardsMotion = upwardsMotion;
		}
		
		@Override
		public String toString()
		{
			return name;
		}
	}
}