001/* 002 * This file is part of Baritone. 003 * 004 * Baritone is free software: you can redistribute it and/or modify 005 * it under the terms of the GNU Lesser General Public License as published by 006 * the Free Software Foundation, either version 3 of the License, or 007 * (at your option) any later version. 008 * 009 * Baritone is distributed in the hope that it will be useful, 010 * but WITHOUT ANY WARRANTY; without even the implied warranty of 011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 012 * GNU Lesser General Public License for more details. 013 * 014 * You should have received a copy of the GNU Lesser General Public License 015 * along with Baritone. If not, see <https://www.gnu.org/licenses/>. 016 */ 017 018package baritone.api.pathing.goals; 019 020import baritone.api.pathing.movement.ActionCosts; 021import baritone.api.utils.SettingsUtil; 022 023/** 024 * Useful for mining (getting to diamond / iron level) 025 * 026 * @author leijurv 027 */ 028public class GoalYLevel implements Goal, ActionCosts { 029 030 /** 031 * The target Y level 032 */ 033 public final int level; 034 035 public GoalYLevel(int level) { 036 this.level = level; 037 } 038 039 @Override 040 public boolean isInGoal(int x, int y, int z) { 041 return y == level; 042 } 043 044 @Override 045 public double heuristic(int x, int y, int z) { 046 return calculate(level, y); 047 } 048 049 public static double calculate(int goalY, int currentY) { 050 if (currentY > goalY) { 051 // need to descend 052 return FALL_N_BLOCKS_COST[2] / 2 * (currentY - goalY); 053 } 054 if (currentY < goalY) { 055 // need to ascend 056 return (goalY - currentY) * JUMP_ONE_BLOCK_COST; 057 } 058 return 0; 059 } 060 061 @Override 062 public String toString() { 063 return String.format( 064 "GoalYLevel{y=%s}", 065 SettingsUtil.maybeCensor(level) 066 ); 067 } 068}