diff --git a/src/main/java/tenor/AquireCraftingItems.java b/src/main/java/tenor/AquireCraftingItems.java index 56b310468..e5f752463 100644 --- a/src/main/java/tenor/AquireCraftingItems.java +++ b/src/main/java/tenor/AquireCraftingItems.java @@ -20,6 +20,7 @@ package tenor; import java.util.List; public class AquireCraftingItems extends QuantizedTaskNode implements ClaimProvider { + CraftingTask output; public AquireCraftingItems() { @@ -34,17 +35,17 @@ public class AquireCraftingItems extends QuantizedTaskNode implements ClaimProvi // they could provide us with quantity int actualQuantity = (int) Math.ceil(quantity * 1.0D / amount); // so we could do the crafting recipe this many times - // how good would that be? + // how good would that be?allocatedPriority return priority().value(actualQuantity); } @Override - public QuantityRelationship priority() { - return parents().get(0)::allocatedPriority; // gamer style + public IQuantityRelationship priority() { + return ((List) (Object) parentTasks()).get(0)::allocatedPriority; // gamer style } @Override - public QuantityRelationship cost() { + public IQuantityRelationship cost() { return null; } @@ -52,10 +53,10 @@ public class AquireCraftingItems extends QuantizedTaskNode implements ClaimProvi public int quantityCompletedForParent(IQuantizedChildTaskRelationship relationship) { // our only parent is the crafting task int minCompletion = Integer.MAX_VALUE; - for (IQuantizedChildTaskRelationship resource : (List) (Object) children()) { + for (IQuantizedChildTaskRelationship resource : (List) (Object) childTasks()) { int amountForUs = resource.quantityCompleted(); - int amountPerCraft = output.inputSizeFor((AquireItemTask) resource.child()); + int amountPerCraft = output.inputSizeFor((AquireItemTask) resource.childTask()); int actualQuantity = (int) Math.ceil(amountForUs * 1.0D / amountPerCraft); diff --git a/src/main/java/tenor/AquireItemTask.java b/src/main/java/tenor/AquireItemTask.java index 2b3b8ef98..02e3d8141 100644 --- a/src/main/java/tenor/AquireItemTask.java +++ b/src/main/java/tenor/AquireItemTask.java @@ -18,9 +18,10 @@ package tenor; import java.util.HashMap; +import java.util.List; import java.util.Map; -public class AquireItemTask extends QuantizedTaskNode implements ClaimProvider, QuantizedDependentCostCalculator { +public class AquireItemTask extends QuantizedTaskNode implements ClaimProvider, IQuantizedDependentCostCalculator { HashMap allocation; // allocation of what tasks have claim over what items in our inventory i guess @@ -34,11 +35,13 @@ public class AquireItemTask extends QuantizedTaskNode implements ClaimProvider, } public void reallocate() { + List parents = (List) (Object) parentTasks(); + allocation.clear(); int amountToAllocate = getCurrentQuantityInInventory(); - int[] newAmounts = ScarceParentPriorityAllocator.priorityAllocation(amountToAllocate, parents()); - for (int i = 0; i < parents().size(); i++) { - allocation.put(parents().get(i), newAmounts[i]); + int[] newAmounts = ScarceParentPriorityAllocator.priorityAllocation(amountToAllocate, parents); + for (int i = 0; i < parents.size(); i++) { + allocation.put(parents.get(i), newAmounts[i]); } } @@ -47,7 +50,7 @@ public class AquireItemTask extends QuantizedTaskNode implements ClaimProvider, } @Override - public QuantityRelationship priority() { + public IQuantityRelationship priority() { return x -> { double sum = 0; for (Map.Entry entry : allocation.entrySet()) { @@ -62,8 +65,8 @@ public class AquireItemTask extends QuantizedTaskNode implements ClaimProvider, } @Override - public QuantityRelationship cost() { - return QuantizedDependentCostCalculator.super.cost(); // oppa + public IQuantityRelationship cost() { + return IQuantizedDependentCostCalculator.super.cost(); // oppa } @Override diff --git a/src/main/java/tenor/ClaimProvider.java b/src/main/java/tenor/ClaimProvider.java index 24172adf1..701c30c7d 100644 --- a/src/main/java/tenor/ClaimProvider.java +++ b/src/main/java/tenor/ClaimProvider.java @@ -18,5 +18,6 @@ package tenor; public interface ClaimProvider { + int quantityCompletedForParent(IQuantizedChildTaskRelationship relationship); } diff --git a/src/main/java/tenor/CraftingTask.java b/src/main/java/tenor/CraftingTask.java index 4c8138aca..42c101d4d 100644 --- a/src/main/java/tenor/CraftingTask.java +++ b/src/main/java/tenor/CraftingTask.java @@ -22,29 +22,29 @@ import net.minecraft.util.Tuple; import java.util.List; public class CraftingTask extends QuantizedTaskNode { + int outputQuantity; List> recipe; AquireCraftingItems inputs; - public CraftingTask() { super(DependencyType.SERIAL); } @Override - public QuantityRelationship cost() { + public IQuantityRelationship cost() { return x -> { int actualQuantity = (int) Math.ceil(x * 1.0D / outputQuantity); return inputs.cost().value(actualQuantity); }; } - public QuantityRelationship priority() { - if (parents().size() != 1) { + public IQuantityRelationship priority() { + if (parentTasks().size() != 1) { throw new IllegalStateException(); } // TODO this is a short circuit - return ((QuantizedTask) (parents().get(0).parentTask())).priority(); + return ((IQuantizedTask) (parentTasks().get(0).parentTask())).priority(); } @Override diff --git a/src/main/java/tenor/QuantityRelationship.java b/src/main/java/tenor/IQuantityRelationship.java similarity index 94% rename from src/main/java/tenor/QuantityRelationship.java rename to src/main/java/tenor/IQuantityRelationship.java index 48cef8df2..b812da165 100644 --- a/src/main/java/tenor/QuantityRelationship.java +++ b/src/main/java/tenor/IQuantityRelationship.java @@ -17,6 +17,7 @@ package tenor; -public interface QuantityRelationship { +public interface IQuantityRelationship { + double value(int quantity); } diff --git a/src/main/java/tenor/IQuantizedChildTaskRelationship.java b/src/main/java/tenor/IQuantizedChildTaskRelationship.java index d64c9694d..5cf06a550 100644 --- a/src/main/java/tenor/IQuantizedChildTaskRelationship.java +++ b/src/main/java/tenor/IQuantizedChildTaskRelationship.java @@ -17,10 +17,7 @@ package tenor; -public interface IQuantizedChildTaskRelationship extends ITaskRelationshipBase { - default QuantizedTask child() { - return (QuantizedTask) childTask(); - } +public interface IQuantizedChildTaskRelationship extends ITaskRelationshipBase { double allocatedPriority(int quantity); @@ -29,6 +26,7 @@ public interface IQuantizedChildTaskRelationship extends ITaskRelationshipBase { } default int quantityCompleted() { - return ((ClaimProvider) child()).quantityCompletedForParent(this); + // TODO: Resolve this cast, should QuantizedTask implement ClaimProvider? + return ((ClaimProvider) childTask()).quantityCompletedForParent(this); } } diff --git a/src/main/java/tenor/QuantizedDependentCostCalculator.java b/src/main/java/tenor/IQuantizedDependentCostCalculator.java similarity index 85% rename from src/main/java/tenor/QuantizedDependentCostCalculator.java rename to src/main/java/tenor/IQuantizedDependentCostCalculator.java index ed6b21a2e..01690956c 100644 --- a/src/main/java/tenor/QuantizedDependentCostCalculator.java +++ b/src/main/java/tenor/IQuantizedDependentCostCalculator.java @@ -17,14 +17,14 @@ package tenor; -public interface QuantizedDependentCostCalculator extends ITaskNodeBase { - default QuantityRelationship cost() { +public interface IQuantizedDependentCostCalculator extends ITaskNodeBase { + default IQuantityRelationship cost() { switch (type()) { case SERIAL: case PARALLEL_ALL: return q -> { double sum = 0; - for (TaskRelationship relationship : childTasks()) { + for (ITaskRelationshipBase relationship : childTasks()) { sum += ((IQuantizedParentTaskRelationship) relationship).cost().value(q); } return sum; @@ -32,7 +32,7 @@ public interface QuantizedDependentCostCalculator extends ITaskNodeBase { case ANY_ONE_OF: // TODO this could be smarter about allocating return q -> { double min = -1; - for (TaskRelationship relationship : childTasks()) { + for (ITaskRelationshipBase relationship : childTasks()) { double cost = ((IQuantizedParentTaskRelationship) relationship).cost().value(q); if (min == -1 || cost < min) { min = cost; diff --git a/src/main/java/tenor/IQuantizedParentTaskRelationship.java b/src/main/java/tenor/IQuantizedParentTaskRelationship.java index 9c112905a..cd60024cd 100644 --- a/src/main/java/tenor/IQuantizedParentTaskRelationship.java +++ b/src/main/java/tenor/IQuantizedParentTaskRelationship.java @@ -17,10 +17,7 @@ package tenor; -public interface IQuantizedParentTaskRelationship extends ITaskRelationshipBase { - default QuantizedTaskNode parent() { - return (QuantizedTaskNode) parentTask(); - } +public interface IQuantizedParentTaskRelationship extends ITaskRelationshipBase { - QuantityRelationship cost(); + IQuantityRelationship cost(); } diff --git a/src/main/java/tenor/QuantizedTask.java b/src/main/java/tenor/IQuantizedTask.java similarity index 77% rename from src/main/java/tenor/QuantizedTask.java rename to src/main/java/tenor/IQuantizedTask.java index 7a5742444..709718177 100644 --- a/src/main/java/tenor/QuantizedTask.java +++ b/src/main/java/tenor/IQuantizedTask.java @@ -17,13 +17,7 @@ package tenor; -import java.util.List; - -public interface QuantizedTask extends ITask { - - default List parents() { - return (List) (Object) parentTasks(); - } +public interface IQuantizedTask extends ITask { /*default QuantityRelationship priority() { return q -> { @@ -34,7 +28,8 @@ public interface QuantizedTask extends ITask { return sum; }; }*/ - QuantityRelationship priority(); - QuantityRelationship cost(); + IQuantityRelationship priority(); + + IQuantityRelationship cost(); } diff --git a/src/main/java/tenor/IQuantizedTaskNode.java b/src/main/java/tenor/IQuantizedTaskNode.java new file mode 100644 index 000000000..d5ab095cd --- /dev/null +++ b/src/main/java/tenor/IQuantizedTaskNode.java @@ -0,0 +1,26 @@ +/* + * This file is part of Baritone. + * + * Baritone is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Baritone is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package tenor; + +/** + * @author Brady + * @since 10/30/2018 + */ +public interface IQuantizedTaskNode extends ITaskNodeBase, IQuantizedTask { + +} diff --git a/src/main/java/tenor/ISingularChildTaskRelationship.java b/src/main/java/tenor/ISingularChildTaskRelationship.java index b2eb727c6..78b94dec0 100644 --- a/src/main/java/tenor/ISingularChildTaskRelationship.java +++ b/src/main/java/tenor/ISingularChildTaskRelationship.java @@ -17,10 +17,7 @@ package tenor; -public interface ISingularChildTaskRelationship extends ITaskRelationshipBase { - default SingularTask child() { - return (SingularTask) childTask(); - } +public interface ISingularChildTaskRelationship extends ITaskRelationshipBase { double allocatedPriority(); } diff --git a/src/main/java/tenor/ISingularParentTaskRelationship.java b/src/main/java/tenor/ISingularParentTaskRelationship.java index 0dc263a5a..c3f7c92fe 100644 --- a/src/main/java/tenor/ISingularParentTaskRelationship.java +++ b/src/main/java/tenor/ISingularParentTaskRelationship.java @@ -17,10 +17,7 @@ package tenor; -public interface ISingularParentTaskRelationship extends ITaskRelationshipBase { - default SingularTask parent() { - return (SingularTask) parentTask(); - } +public interface ISingularParentTaskRelationship extends ITaskRelationshipBase { double cost(); } diff --git a/src/main/java/tenor/SingularTask.java b/src/main/java/tenor/ISingularTask.java similarity index 79% rename from src/main/java/tenor/SingularTask.java rename to src/main/java/tenor/ISingularTask.java index 266832b9b..d27b13ba7 100644 --- a/src/main/java/tenor/SingularTask.java +++ b/src/main/java/tenor/ISingularTask.java @@ -17,12 +17,7 @@ package tenor; -import java.util.List; - -public interface SingularTask extends ITask { - default List parents() { - return (List) (Object) parentTasks(); - } +public interface ISingularTask extends ITask { double priorityAllocatedToChild(ISingularParentTaskRelationship relationship); diff --git a/src/main/java/tenor/ISingularTaskNode.java b/src/main/java/tenor/ISingularTaskNode.java new file mode 100644 index 000000000..073dd1355 --- /dev/null +++ b/src/main/java/tenor/ISingularTaskNode.java @@ -0,0 +1,26 @@ +/* + * This file is part of Baritone. + * + * Baritone is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Baritone is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Baritone. If not, see . + */ + +package tenor; + +/** + * @author Brady + * @since 10/30/2018 + */ +public interface ISingularTaskNode extends ITaskNodeBase, ISingularTask { + +} diff --git a/src/main/java/tenor/ITask.java b/src/main/java/tenor/ITask.java index 1da466672..7dda14117 100644 --- a/src/main/java/tenor/ITask.java +++ b/src/main/java/tenor/ITask.java @@ -20,5 +20,6 @@ package tenor; import java.util.List; public interface ITask { - List parentTasks(); + + List parentTasks(); } diff --git a/src/main/java/tenor/ITaskNodeBase.java b/src/main/java/tenor/ITaskNodeBase.java index 6075d24b3..f2ec91798 100644 --- a/src/main/java/tenor/ITaskNodeBase.java +++ b/src/main/java/tenor/ITaskNodeBase.java @@ -20,7 +20,8 @@ package tenor; import java.util.List; public interface ITaskNodeBase extends ITask { - List childTasks(); + + List childTasks(); DependencyType type(); } diff --git a/src/main/java/tenor/ITaskRelationshipBase.java b/src/main/java/tenor/ITaskRelationshipBase.java index f9176e555..b5ed1daba 100644 --- a/src/main/java/tenor/ITaskRelationshipBase.java +++ b/src/main/java/tenor/ITaskRelationshipBase.java @@ -17,8 +17,9 @@ package tenor; -public interface ITaskRelationshipBase { - TaskNode parentTask(); +public interface ITaskRelationshipBase

{ - Task childTask(); + P parentTask(); + + C childTask(); } diff --git a/src/main/java/tenor/MineTask.java b/src/main/java/tenor/MineTask.java index 69d92f04a..e33af6cfa 100644 --- a/src/main/java/tenor/MineTask.java +++ b/src/main/java/tenor/MineTask.java @@ -17,14 +17,14 @@ package tenor; -public class MineTask extends TaskLeaf implements QuantizedTask { +public class MineTask extends TaskLeaf implements IQuantizedTask { @Override - public QuantityRelationship priority() { + public IQuantityRelationship priority() { return null; } @Override - public QuantityRelationship cost() { + public IQuantityRelationship cost() { return null; } } diff --git a/src/main/java/tenor/QuantizedTaskNode.java b/src/main/java/tenor/QuantizedTaskNode.java index 4db322528..abed1c4fb 100644 --- a/src/main/java/tenor/QuantizedTaskNode.java +++ b/src/main/java/tenor/QuantizedTaskNode.java @@ -17,16 +17,11 @@ package tenor; -import java.util.List; +public abstract class QuantizedTaskNode extends TaskNode implements IQuantizedTask { -public abstract class QuantizedTaskNode extends TaskNode implements QuantizedTask { public QuantizedTaskNode(DependencyType type) { super(type); } - public List children() { - return (List) (Object) childTasks(); - } - public abstract double priorityAllocatedTo(IQuantizedParentTaskRelationship child, int quantity); } diff --git a/src/main/java/tenor/QuantizedToQuantizedTaskRelationship.java b/src/main/java/tenor/QuantizedToQuantizedTaskRelationship.java index cf8d23db0..79101a0b9 100644 --- a/src/main/java/tenor/QuantizedToQuantizedTaskRelationship.java +++ b/src/main/java/tenor/QuantizedToQuantizedTaskRelationship.java @@ -17,14 +17,17 @@ package tenor; -public class QuantizedToQuantizedTaskRelationship extends TaskRelationship implements IQuantizedChildTaskRelationship, IQuantizedParentTaskRelationship { +public class QuantizedToQuantizedTaskRelationship + extends TaskRelationship + implements IQuantizedChildTaskRelationship, IQuantizedParentTaskRelationship { + @Override public double allocatedPriority(int quantity) { - return parent().priorityAllocatedTo(this, quantity); + return parentTask().priorityAllocatedTo(this, quantity); } @Override - public QuantityRelationship cost() { - return child().cost(); + public IQuantityRelationship cost() { + return childTask().cost(); } } diff --git a/src/main/java/tenor/QuantizedToSingularTaskRelationship.java b/src/main/java/tenor/QuantizedToSingularTaskRelationship.java index 042a21f7b..6b3d787dd 100644 --- a/src/main/java/tenor/QuantizedToSingularTaskRelationship.java +++ b/src/main/java/tenor/QuantizedToSingularTaskRelationship.java @@ -17,11 +17,13 @@ package tenor; -public class QuantizedToSingularTaskRelationship extends TaskRelationship implements ISingularChildTaskRelationship, IQuantizedParentTaskRelationship { +public class QuantizedToSingularTaskRelationship + extends TaskRelationship + implements ISingularChildTaskRelationship, IQuantizedParentTaskRelationship { @Override - public QuantityRelationship cost() { - return x -> child().cost(); + public IQuantityRelationship cost() { + return x -> childTask().cost(); } @Override diff --git a/src/main/java/tenor/SingularTaskNode.java b/src/main/java/tenor/SingularTaskNode.java index 90a39fda4..f8bee6a27 100644 --- a/src/main/java/tenor/SingularTaskNode.java +++ b/src/main/java/tenor/SingularTaskNode.java @@ -17,5 +17,9 @@ package tenor; -public class SingularTaskNode { +public abstract class SingularTaskNode extends TaskNode implements ISingularTaskNode { + + public SingularTaskNode(DependencyType type) { + super(type); + } } diff --git a/src/main/java/tenor/SingularToQuantizedTaskRelationship.java b/src/main/java/tenor/SingularToQuantizedTaskRelationship.java index 87759f6be..6257f08a5 100644 --- a/src/main/java/tenor/SingularToQuantizedTaskRelationship.java +++ b/src/main/java/tenor/SingularToQuantizedTaskRelationship.java @@ -17,16 +17,19 @@ package tenor; -public class SingularToQuantizedTaskRelationship extends TaskRelationship implements IQuantizedChildTaskRelationship, ISingularParentTaskRelationship { +public class SingularToQuantizedTaskRelationship + extends TaskRelationship + implements IQuantizedChildTaskRelationship, ISingularParentTaskRelationship { + int quantityRequired; @Override public double allocatedPriority(int quantity) { - return quantity >= quantityRequired ? parent().priorityAllocatedToChild(this) : 0; + return quantity >= quantityRequired ? parentTask().priorityAllocatedToChild(this) : 0; } @Override public double cost() { - return child().cost().value(quantityRequired); + return childTask().cost().value(quantityRequired); } } diff --git a/src/main/java/tenor/SingularToSingularTaskRelationship.java b/src/main/java/tenor/SingularToSingularTaskRelationship.java index 6552f9232..1345bbf73 100644 --- a/src/main/java/tenor/SingularToSingularTaskRelationship.java +++ b/src/main/java/tenor/SingularToSingularTaskRelationship.java @@ -17,14 +17,17 @@ package tenor; -public class SingularToSingularTaskRelationship extends TaskRelationship implements ISingularChildTaskRelationship, ISingularParentTaskRelationship { +public class SingularToSingularTaskRelationship + extends TaskRelationship + implements ISingularChildTaskRelationship, ISingularParentTaskRelationship { + @Override public double allocatedPriority() { - return parent().priorityAllocatedToChild(this); + return parentTask().priorityAllocatedToChild(this); } @Override public double cost() { - return child().cost(); + return childTask().cost(); } } diff --git a/src/main/java/tenor/Task.java b/src/main/java/tenor/Task.java index 0f3d0fd8a..f93ebd6bb 100644 --- a/src/main/java/tenor/Task.java +++ b/src/main/java/tenor/Task.java @@ -20,9 +20,10 @@ package tenor; import java.util.List; public abstract class Task implements ITask { - List parentRelationships; - public List parentTasks() { + List parentRelationships; + + public List parentTasks() { return parentRelationships; } } diff --git a/src/main/java/tenor/TaskNode.java b/src/main/java/tenor/TaskNode.java index 0db25a234..ec0150a57 100644 --- a/src/main/java/tenor/TaskNode.java +++ b/src/main/java/tenor/TaskNode.java @@ -20,14 +20,15 @@ package tenor; import java.util.List; public abstract class TaskNode extends Task implements ITaskNodeBase { - List childRelationships; + + List childRelationships; DependencyType type; public TaskNode(DependencyType type) { this.type = type; } - public List childTasks() { + public List childTasks() { return childRelationships; } diff --git a/src/main/java/tenor/TaskRelationship.java b/src/main/java/tenor/TaskRelationship.java index c834d3bfd..525cac453 100644 --- a/src/main/java/tenor/TaskRelationship.java +++ b/src/main/java/tenor/TaskRelationship.java @@ -17,18 +17,19 @@ package tenor; -public class TaskRelationship implements ITaskRelationshipBase { - TaskNode parent; - Task child; +public class TaskRelationship

implements ITaskRelationshipBase { + + P parent; + C child; DependencyType type; @Override - public TaskNode parentTask() { + public P parentTask() { return parent; } @Override - public Task childTask() { + public C childTask() { return child; } }