305 lines
11 KiB
Java
305 lines
11 KiB
Java
/*
|
|
* To change this license header, choose License Headers in Project Properties.
|
|
* To change this template file, choose Tools | Templates
|
|
* and open the template in the editor.
|
|
*/
|
|
package baritone.strategy;
|
|
|
|
import baritone.movement.Combat;
|
|
import baritone.util.BlockPuncher;
|
|
import baritone.mining.MickeyMine;
|
|
import baritone.inventory.CraftingTask;
|
|
import baritone.util.Manager;
|
|
import baritone.util.ManagerTick;
|
|
import baritone.util.Out;
|
|
import baritone.inventory.SmeltingTask;
|
|
import net.minecraft.client.Minecraft;
|
|
import net.minecraft.item.Item;
|
|
import net.minecraft.item.ItemArmor;
|
|
import net.minecraft.item.ItemStack;
|
|
import net.minecraft.item.ItemTool;
|
|
|
|
/**
|
|
* goals:
|
|
*
|
|
* get dirt
|
|
*
|
|
* get wood
|
|
*
|
|
* make a crafting table
|
|
*
|
|
* make a wooden pickaxe
|
|
*
|
|
* get stone
|
|
*
|
|
* make a stone pickaxe
|
|
*
|
|
* get more stone
|
|
*
|
|
* make stone tools and a furnace
|
|
*
|
|
* go mining at level 36
|
|
*
|
|
* craft torches
|
|
*
|
|
* smelt iron
|
|
*
|
|
* make iron pick and iron armor and an iron sword
|
|
*
|
|
* change mining level to 6
|
|
*
|
|
* craft a diamond pickaxe
|
|
*
|
|
* @author leijurv
|
|
*/
|
|
public class EarlyGameStrategy extends ManagerTick {
|
|
static boolean gotWood_PHRASING = false;
|
|
static int WOOD_AMT = 16;//triggers stopping
|
|
static int MIN_WOOD_AMT = 1;//triggers getting more
|
|
static final int DIRT_AMT = 32;
|
|
static boolean gotDirt = false;
|
|
static boolean cobble = false;
|
|
@Override
|
|
protected boolean onTick0() {
|
|
if (!gotDirt) {
|
|
int dirt = countDirt();
|
|
if (dirt >= DIRT_AMT) {
|
|
Out.gui("Done getting dirt", Out.Mode.Debug);
|
|
gotDirt = true;
|
|
return false;
|
|
}
|
|
if (!BlockPuncher.tick("dirt", "grass")) {
|
|
Out.gui("No dirt or grass nearby =(", Out.Mode.Debug);
|
|
}
|
|
return false;
|
|
}
|
|
int wood = countWood_PHRASING();
|
|
if (wood >= WOOD_AMT) {
|
|
if (!gotWood_PHRASING) {
|
|
Out.gui("Done getting wood", Out.Mode.Debug);
|
|
}
|
|
gotWood_PHRASING = true;
|
|
}
|
|
if (wood < MIN_WOOD_AMT) {
|
|
if (gotWood_PHRASING) {
|
|
Out.gui("Getting more wood", Out.Mode.Debug);
|
|
}
|
|
gotWood_PHRASING = false;
|
|
}
|
|
if (!gotWood_PHRASING) {
|
|
if (!BlockPuncher.tick("log", "log2")) {
|
|
Out.gui("No wood nearby =(", Out.Mode.Debug);
|
|
}
|
|
return false;
|
|
}
|
|
boolean hasWooden = false;
|
|
boolean readyForMining = true;
|
|
boolean hasStone = craftTool(Item.getByNameOrId("minecraft:stone_pickaxe"), 1);
|
|
if (hasStone) {
|
|
dontCraft(Item.getByNameOrId("minecraft:wooden_pickaxe"));
|
|
} else {
|
|
hasWooden = craftTool(Item.getByNameOrId("minecraft:wooden_pickaxe"), 1);
|
|
}
|
|
readyForMining &= hasStone;
|
|
if (hasWooden || hasStone) {
|
|
if (!cobble) {
|
|
if (countCobble() > 16) {
|
|
cobble = true;
|
|
} else if (!BlockPuncher.tick("stone")) {
|
|
Out.gui("No stone nearby =(", Out.Mode.Debug);
|
|
}
|
|
}
|
|
}
|
|
if (!cobble) {
|
|
readyForMining = false;
|
|
}
|
|
if (cobble && gotDirt && countCobble() + countDirt() < 10) {//if we have already gotten cobble and dirt, but our amounts have run low, get more
|
|
if (!BlockPuncher.tick("dirt", "grass", "stone")) {
|
|
Out.gui("No dirt, grass, or stone", Out.Mode.Debug);
|
|
}
|
|
readyForMining = false;
|
|
}
|
|
if (countCobble() > 5) {
|
|
boolean axe = craftTool(Item.getByNameOrId("minecraft:stone_axe"), 1);
|
|
if (axe) {
|
|
WOOD_AMT = 64;
|
|
MIN_WOOD_AMT = 16;
|
|
} else {
|
|
readyForMining = false;
|
|
}
|
|
if (!craftTool(Item.getByNameOrId("minecraft:stone_shovel"), 1)) {
|
|
readyForMining = false;
|
|
}
|
|
if (!craftTool(Item.getByNameOrId("minecraft:stone_sword"), 1)) {
|
|
readyForMining = false;
|
|
}
|
|
}
|
|
if (countCobble() > 8) {
|
|
if (!craftTool(Item.getByNameOrId("minecraft:furnace"), 1)) {
|
|
readyForMining = false;
|
|
}
|
|
}
|
|
int miningLevel = MickeyMine.Y_IRON;
|
|
if (readyForMining) {
|
|
int amtIron = 0;
|
|
boolean ironPick = craftTool(Item.getByNameOrId("minecraft:iron_pickaxe"), 1);
|
|
if (ironPick) {
|
|
boolean ironSword = craftTool(Item.getByNameOrId("minecraft:iron_sword"), 1);
|
|
if (ironSword) {
|
|
boolean ironHelmet = craftTool(Item.getByNameOrId("minecraft:iron_helmet"), 1);
|
|
boolean ironChestplate = craftTool(Item.getByNameOrId("minecraft:iron_chestplate"), 1);
|
|
boolean ironLeggings = craftTool(Item.getByNameOrId("minecraft:iron_leggings"), 1);
|
|
boolean ironBoots = craftTool(Item.getByNameOrId("minecraft:iron_boots"), 1);
|
|
if (ironHelmet && ironChestplate && ironLeggings && ironBoots) {
|
|
miningLevel = MickeyMine.Y_DIAMOND;
|
|
} else {
|
|
amtIron = (!ironHelmet ? 5 : 0) + (!ironChestplate ? 8 : 0) + (!ironLeggings ? 7 : 0) + (!ironBoots ? 4 : 0);
|
|
}
|
|
} else {
|
|
amtIron = 2;
|
|
}
|
|
} else {
|
|
amtIron = 3;
|
|
}
|
|
int currIron = countItem("minecraft:iron_ingot");
|
|
boolean hasOre = countItem("iron_ore") >= amtIron - currIron;
|
|
if (hasOre && currIron < amtIron) {
|
|
int tasksForIron = SmeltingTask.tasksFor(Item.getByNameOrId("iron_ingot"));
|
|
int newTask = amtIron - currIron - tasksForIron;
|
|
if (newTask > 0) {
|
|
new SmeltingTask(new ItemStack(Item.getByNameOrId("iron_ingot"), Math.min(countItem("iron_ore"), 64))).begin();
|
|
}
|
|
readyForMining = false;
|
|
}
|
|
}
|
|
int numDiamonds = countItem("diamond");
|
|
if (readyForMining && numDiamonds >= 1) {
|
|
if (craftTool(Item.getByNameOrId("diamond_pickaxe"), 1)) {
|
|
if (craftTool(Item.getByNameOrId("diamond_sword"), 1)) {
|
|
if (craftTool(Item.getByNameOrId("diamond_chestplate"), 1)) {
|
|
if (craftTool(Item.getByNameOrId("diamond_leggings"), 1)) {
|
|
if (craftTool(Item.getByNameOrId("diamond_helmet"), 1)) {
|
|
if (craftTool(Item.getByNameOrId("diamond_boots"), 1)) {
|
|
if (craftTool(Item.getByNameOrId("diamond_axe"), 1)) {
|
|
if (craftTool(Item.getByNameOrId("diamond_shovel"), 1)) {
|
|
Out.gui("My job here is done.", Out.Mode.Minimal);
|
|
cancel();
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
Manager instance = Manager.getManager(MickeyMine.class);
|
|
if (readyForMining) {
|
|
MickeyMine.yLevel = miningLevel;
|
|
if (!instance.enabled()) {
|
|
instance.toggle();
|
|
}
|
|
} else if (instance.enabled()) {
|
|
instance.toggle();
|
|
}
|
|
return false;
|
|
}
|
|
public static boolean craftTool(Item tool, int amt) {
|
|
if (tool instanceof ItemTool) {
|
|
for (ItemStack stack : Minecraft.getMinecraft().player.inventory.mainInventory) {
|
|
if (stack == null) {
|
|
continue;
|
|
}
|
|
if (stack.getItem() instanceof ItemTool && stack.getItem().getClass() == tool.getClass()) {
|
|
ItemTool t = (ItemTool) (stack.getItem());
|
|
if (t.getToolMaterial().getEfficiencyOnProperMaterial() >= ((ItemTool) tool).getToolMaterial().getEfficiencyOnProperMaterial()) {
|
|
//Out.gui("Saying has " + new ItemStack(tool, 0) + " because has " + stack);
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
return CraftingTask.ensureCraftingDesired(tool, amt);
|
|
}
|
|
if (tool instanceof ItemArmor) {
|
|
ItemArmor armor = (ItemArmor) tool;
|
|
for (ItemStack stack : Minecraft.getMinecraft().player.inventory.mainInventory) {
|
|
if (stack == null) {
|
|
continue;
|
|
}
|
|
if (stack.getItem() instanceof ItemArmor) {
|
|
ItemArmor a = (ItemArmor) (stack.getItem());
|
|
if (a.armorType == armor.armorType) {
|
|
if (a.damageReduceAmount >= armor.damageReduceAmount) {
|
|
//Out.gui("Saying has " + new ItemStack(tool, 0) + " because has " + stack);
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
for (ItemStack stack : Minecraft.getMinecraft().player.inventory.armorInventory) {
|
|
if (stack == null) {
|
|
continue;
|
|
}
|
|
ItemArmor a = (ItemArmor) (stack.getItem());
|
|
if (a.armorType == armor.armorType) {
|
|
if (a.damageReduceAmount >= armor.damageReduceAmount) {
|
|
//Out.gui("Saying has " + new ItemStack(tool, 0) + " because has " + stack);
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return CraftingTask.ensureCraftingDesired(tool, amt);
|
|
}
|
|
public static void dontCraft(Item item) {
|
|
CraftingTask task = CraftingTask.findOrCreateCraftingTask(new ItemStack(item, 0));
|
|
if (task.currentlyCrafting().stackSize > 0) {
|
|
task.decreaseNeededAmount(1);
|
|
}
|
|
}
|
|
public static int countItem(String s) {
|
|
Item item = Item.getByNameOrId(s);
|
|
int count = 0;
|
|
for (ItemStack stack : Minecraft.getMinecraft().player.inventory.mainInventory) {
|
|
if (stack == null) {
|
|
continue;
|
|
}
|
|
if (item.equals(stack.getItem())) {
|
|
count += stack.stackSize;
|
|
}
|
|
}
|
|
return count;
|
|
}
|
|
public static int countWood_PHRASING() {
|
|
return countItem("log") + countItem("log2");
|
|
}
|
|
public static int countDirt() {
|
|
return countItem("dirt");
|
|
}
|
|
public static int countCobble() {
|
|
return countItem("cobblestone");
|
|
}
|
|
@Override
|
|
protected void onCancel() {
|
|
gotWood_PHRASING = false;
|
|
WOOD_AMT = 16;
|
|
MIN_WOOD_AMT = 1;
|
|
gotDirt = false;
|
|
cobble = false;
|
|
Combat.mobKilling = false;
|
|
SmeltingTask.coalOnly = false;
|
|
Manager.getManager(MickeyMine.class).cancel();
|
|
}
|
|
@Override
|
|
protected void onStart() {
|
|
gotWood_PHRASING = false;
|
|
WOOD_AMT = 16;
|
|
MIN_WOOD_AMT = 1;
|
|
gotDirt = false;
|
|
cobble = false;
|
|
Combat.mobKilling = true;
|
|
SmeltingTask.coalOnly = true;
|
|
}
|
|
}
|