package im.expensive.functions.impl.movement;
import com.google.common.eventbus.Subscribe;
import im.expensive.events.WorldEvent;
import im.expensive.functions.api.Category;
import im.expensive.functions.api.Function;
import im.expensive.functions.api.FunctionRegister;
import net.minecraft.client.Minecraft;
import net.minecraft.tileentity.ShulkerBoxTileEntity;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.ChunkPos;
import net.minecraft.world.chunk.Chunk;
@FunctionRegister(
        name = "HighJump",
        type = Category.Movement
)
public class HighJump extends Function {
    private final Minecraft mc = Minecraft.getInstance();
    @Subscribe
    public void onWorldEvent(WorldEvent event) {
        if (mc.world == null || mc.player == null) return;
        ChunkPos playerChunkPos = new ChunkPos(mc.player.getPosition());
        for (int x = -1; x <= 1; x++) {
            for (int z = -1; z <= 1; z++) {
                Chunk chunk = mc.world.getChunk(playerChunkPos.x + x, playerChunkPos.z + z);
                for (TileEntity tile : chunk.getTileEntityMap().values()) {
                    if (tile instanceof ShulkerBoxTileEntity) {
                        BlockPos tilePos = tile.getPos();
                        double distance = Math.sqrt(Math.pow(mc.player.getPosX() - (tilePos.getX() + 0.5), 2) +
                                Math.pow(mc.player.getPosZ() - (tilePos.getZ() + 0.5), 2));
                        double yDiff = Math.abs(mc.player.getPosY() - (tilePos.getY() + 0.5));
                        if (distance <= 1 && yDiff <= (mc.player.motion.y > 1 ? 30 : 2) && mc.player.fallDistance == 0) {
                            ShulkerBoxTileEntity shulker = (ShulkerBoxTileEntity) tile;
                            if (shulker.getProgress(1.0f) > 0.0f && shulker.getProgress(1.0f) != 1.0) {
                                mc.player.setMotion(mc.player.getMotion().x, 1.0, mc.player.getMotion().z);
                            }
                        }
                    }
                }
            }
        }
    }
}