/*
 * This file is part of TechReborn, licensed under the MIT License (MIT).
 *
 * Copyright (c) 2018 TechReborn
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in all
 * copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 * SOFTWARE.
 */

package techreborn.entities;

import net.minecraft.entity.EntityType;
import net.minecraft.entity.LivingEntity;
import net.minecraft.entity.MovementType;
import net.minecraft.entity.TntEntity;
import net.minecraft.particle.ParticleTypes;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Vec3d;
import net.minecraft.world.World;
import reborncore.common.explosion.RebornExplosion;
import reborncore.common.registration.RebornRegister;
import reborncore.common.registration.config.ConfigRegistry;
import techreborn.TechReborn;

/**
 * Created by Mark on 13/03/2016.
 */
@RebornRegister(TechReborn.MOD_ID)
public class EntityNukePrimed extends TntEntity {

	@ConfigRegistry(config = "misc", category = "nuke", key = "fusetime", comment = "Nuke fuse time (ticks)")
	public static int fuseTime = 400;

	@ConfigRegistry(config = "misc", category = "nuke", key = "radius", comment = "Nuke explision radius")
	public static int radius = 40;

	@ConfigRegistry(config = "misc", category = "nuke", key = "enabled", comment = "Should the nuke explode, set to false to prevent block damage")
	public static boolean enabled = true;

	public EntityNukePrimed(EntityType<EntityNukePrimed> entityType,  World world) {
		super(entityType, world);
		setFuse(EntityNukePrimed.fuseTime);
	}

	public EntityNukePrimed(World world, double x, double y, double z, LivingEntity tntPlacedBy) {
		super(world, x, y, z, tntPlacedBy);
		setFuse(EntityNukePrimed.fuseTime);
	}

	@Override
	public void tick() {
		this.prevX = this.x;
		this.prevY = this.y;
		this.prevZ = this.z;

		Vec3d velocity = getVelocity();
		double motionX = velocity.x;
		double motionY = velocity.y;
		double motionZ = velocity.z;

		if (!this.hasNoGravity()) {
			motionY -= 0.03999999910593033D;
		}

		this.move(MovementType.SELF, new Vec3d(motionX, motionZ, motionY));
		motionX *= 0.9800000190734863D;
		motionY *= 0.9800000190734863D;
		motionZ *= 0.9800000190734863D;

		if (this.onGround) {
			motionX *= 0.699999988079071D;
			motionZ *= 0.699999988079071D;
			motionY *= -0.5D;
		}

		setVelocity(new Vec3d(motionX, motionZ, motionY));

		setFuse(getFuseTimer() - 1);

		if (getFuseTimer() <= 0) {
			this.remove();
			if (!this.world.isClient) {
				explodeNuke();
			}
		} else {
			this.checkWaterState();
			this.world.addParticle(ParticleTypes.SMOKE, this.x, this.y + 0.5D, this.z, 0.0D, 0.0D, 0.0D);
		}
	}

	public void explodeNuke() {
		if (!enabled) {
			return;
		}
		RebornExplosion nukeExplosion = new RebornExplosion(new BlockPos(x, y, z), world, radius);
		nukeExplosion.setLivingBase(getCausingEntity());
		nukeExplosion.explode();
	}
}

@@ -2924,329 +2924,273 @@
 %0A%09%09%09
-motionY -= 0.03999999910593033D;%0A%09%09%7D%0A%0A%09%09this.move(MovementType.SELF, new Vec3d(motionX, motionZ, motionY));%0A%09%09motionX *= 0.9800000190734863D;%0A%09%09motionY *= 0.9800000190734863D;%0A%09%09motionZ *= 0.9800000190734863D;%0A%0A%09%09if (this.onGround) %7B%0A%09%09%09motionX *= 0.699999988079071D;%0A%09%09%09motionZ *= 0.699999988079071D;%0A%09%09%09motionY *= -0.5D
+this.setVelocity(this.getVelocity().add(0.0D, -0.04D, 0.0D));%0A%09%09%7D%0A%0A%09%09this.move(MovementType.SELF, this.getVelocity());%0A%09%09this.setVelocity(this.getVelocity().multiply(0.98D));%0A%09%09if (this.onGround) %7B%0A%09%09%09this.setVelocity(this.getVelocity().multiply(0.7D, -0.5D, 0.7D))
 ;%0A%09%09

Fix nuke