diff --git a/src/main/java/tenor/AquireCraftingItems.java b/src/main/java/tenor/AquireCraftingItems.java index 735b7170a..f461dfc01 100644 --- a/src/main/java/tenor/AquireCraftingItems.java +++ b/src/main/java/tenor/AquireCraftingItems.java @@ -17,8 +17,6 @@ package tenor; -import java.util.List; - public class AquireCraftingItems extends QuantizedTaskNode implements IClaimProvider { final CraftingTask parent; @@ -51,11 +49,11 @@ public class AquireCraftingItems extends QuantizedTaskNode implements IClaimProv return x -> { // cost to get x copies of these items double sum = 0; - for (QuantizedToQuantizedTaskRelationship resource : (List) (Object) childTasks()) { + for (IQuantizedParentTaskRelationship resource : childTasks()) { int amountPerCraft = parent.inputSizeFor((AquireItemTask) resource.childTask()); int totalAmountNeeded = x * amountPerCraft; - int amountForUs = resource.quantityCompleted(); + int amountForUs = ((IQuantizedChildTaskRelationship) resource).quantityCompleted(); totalAmountNeeded -= amountForUs; if (totalAmountNeeded <= 0) { @@ -75,8 +73,8 @@ public class AquireCraftingItems extends QuantizedTaskNode implements IClaimProv } // our only parent is the crafting task int minCompletion = Integer.MAX_VALUE; - for (IQuantizedChildTaskRelationship resource : (List) (Object) childTasks()) { - int amountForUs = resource.quantityCompleted(); + for (IQuantizedParentTaskRelationship resource : childTasks()) { + int amountForUs = ((IQuantizedChildTaskRelationship) resource).quantityCompleted(); int amountPerCraft = parent.inputSizeFor((AquireItemTask) resource.childTask()); diff --git a/src/main/java/tenor/AquireItemTask.java b/src/main/java/tenor/AquireItemTask.java index 47e659862..6d7c07457 100644 --- a/src/main/java/tenor/AquireItemTask.java +++ b/src/main/java/tenor/AquireItemTask.java @@ -21,7 +21,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -public class AquireItemTask extends QuantizedTaskNode implements IClaimProvider, IQuantizedDependentCostCalculator { +public class AquireItemTask extends QuantizedTaskNode implements IClaimProvider, IQuantizedDependentCostCalculator { HashMap allocation; // allocation of what tasks have claim over what items in our inventory i guess diff --git a/src/main/java/tenor/IChildTaskRelationship.java b/src/main/java/tenor/IChildTaskRelationship.java new file mode 100644 index 000000000..4b1e50522 --- /dev/null +++ b/src/main/java/tenor/IChildTaskRelationship.java @@ -0,0 +1,21 @@ +/* + * 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; + +public interface IChildTaskRelationship { +} diff --git a/src/main/java/tenor/IParentTaskRelationship.java b/src/main/java/tenor/IParentTaskRelationship.java new file mode 100644 index 000000000..e3cfc7ce1 --- /dev/null +++ b/src/main/java/tenor/IParentTaskRelationship.java @@ -0,0 +1,21 @@ +/* + * 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; + +public interface IParentTaskRelationship { +} diff --git a/src/main/java/tenor/IQuantizedChildTaskRelationship.java b/src/main/java/tenor/IQuantizedChildTaskRelationship.java index 33775827b..ec46f80b8 100644 --- a/src/main/java/tenor/IQuantizedChildTaskRelationship.java +++ b/src/main/java/tenor/IQuantizedChildTaskRelationship.java @@ -17,7 +17,7 @@ package tenor; -public interface IQuantizedChildTaskRelationship extends ITaskRelationshipBase { +public interface IQuantizedChildTaskRelationship extends ITaskRelationshipBase, IChildTaskRelationship { double allocatedPriority(int quantity); diff --git a/src/main/java/tenor/IQuantizedDependentCostCalculator.java b/src/main/java/tenor/IQuantizedDependentCostCalculator.java index 6e0fccf97..9f4d8d4e5 100644 --- a/src/main/java/tenor/IQuantizedDependentCostCalculator.java +++ b/src/main/java/tenor/IQuantizedDependentCostCalculator.java @@ -17,23 +17,23 @@ package tenor; -public interface IQuantizedDependentCostCalculator extends ITaskNodeBase { +public interface IQuantizedDependentCostCalculator extends IQuantizedTaskNode { default IQuantityRelationship cost() { switch (type()) { case SERIAL: case PARALLEL_ALL: return q -> { double sum = 0; - for (ITaskRelationshipBase relationship : childTasks()) { - sum += ((IQuantizedParentTaskRelationship) relationship).cost().value(q); + for (IQuantizedParentTaskRelationship relationship : childTasks()) { + sum += relationship.cost().value(q); } return sum; }; case ANY_ONE_OF: // TODO this could be smarter about allocating return q -> { double min = -1; - for (ITaskRelationshipBase relationship : childTasks()) { - double cost = ((IQuantizedParentTaskRelationship) relationship).cost().value(q); + for (IQuantizedParentTaskRelationship relationship : childTasks()) { + double cost = 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 cd60024cd..3689429e7 100644 --- a/src/main/java/tenor/IQuantizedParentTaskRelationship.java +++ b/src/main/java/tenor/IQuantizedParentTaskRelationship.java @@ -17,7 +17,7 @@ package tenor; -public interface IQuantizedParentTaskRelationship extends ITaskRelationshipBase { +public interface IQuantizedParentTaskRelationship extends ITaskRelationshipBase, IParentTaskRelationship { IQuantityRelationship cost(); } diff --git a/src/main/java/tenor/IQuantizedTaskNode.java b/src/main/java/tenor/IQuantizedTaskNode.java index 79e099c58..080e684a5 100644 --- a/src/main/java/tenor/IQuantizedTaskNode.java +++ b/src/main/java/tenor/IQuantizedTaskNode.java @@ -21,6 +21,6 @@ package tenor; * @author Brady * @since 10/30/2018 */ -public interface IQuantizedTaskNode extends ITaskNodeBase, IQuantizedTask { +public interface IQuantizedTaskNode extends ITaskNodeBase, IQuantizedTask { } diff --git a/src/main/java/tenor/ISingularChildTaskRelationship.java b/src/main/java/tenor/ISingularChildTaskRelationship.java index 78b94dec0..d6dfaa69f 100644 --- a/src/main/java/tenor/ISingularChildTaskRelationship.java +++ b/src/main/java/tenor/ISingularChildTaskRelationship.java @@ -17,7 +17,7 @@ package tenor; -public interface ISingularChildTaskRelationship extends ITaskRelationshipBase { +public interface ISingularChildTaskRelationship extends ITaskRelationshipBase, IChildTaskRelationship { double allocatedPriority(); } diff --git a/src/main/java/tenor/ISingularParentTaskRelationship.java b/src/main/java/tenor/ISingularParentTaskRelationship.java index c3f7c92fe..74101869a 100644 --- a/src/main/java/tenor/ISingularParentTaskRelationship.java +++ b/src/main/java/tenor/ISingularParentTaskRelationship.java @@ -17,7 +17,7 @@ package tenor; -public interface ISingularParentTaskRelationship extends ITaskRelationshipBase { +public interface ISingularParentTaskRelationship extends ITaskRelationshipBase, IParentTaskRelationship { double cost(); } diff --git a/src/main/java/tenor/ISingularTaskNode.java b/src/main/java/tenor/ISingularTaskNode.java index eb2f41de5..74b4ffb28 100644 --- a/src/main/java/tenor/ISingularTaskNode.java +++ b/src/main/java/tenor/ISingularTaskNode.java @@ -21,6 +21,6 @@ package tenor; * @author Brady * @since 10/30/2018 */ -public interface ISingularTaskNode extends ITaskNodeBase, ISingularTask { +public interface ISingularTaskNode extends ITaskNodeBase, ISingularTask { double priorityAllocatedToChild(ISingularParentTaskRelationship relationship); } diff --git a/src/main/java/tenor/ITask.java b/src/main/java/tenor/ITask.java index eee9d1c85..231770b3e 100644 --- a/src/main/java/tenor/ITask.java +++ b/src/main/java/tenor/ITask.java @@ -19,7 +19,7 @@ package tenor; import java.util.List; -public interface ITask { +public interface ITask { List parentTasks(); diff --git a/src/main/java/tenor/ITaskNodeBase.java b/src/main/java/tenor/ITaskNodeBase.java index 143e76f96..1268962e2 100644 --- a/src/main/java/tenor/ITaskNodeBase.java +++ b/src/main/java/tenor/ITaskNodeBase.java @@ -19,11 +19,11 @@ package tenor; import java.util.List; -public interface ITaskNodeBase extends ITask { +public interface ITaskNodeBase extends ITask { - List childTasks(); + List childTasks(); DependencyType type(); - void addChild(ITaskRelationshipBase relationship); + void addChild(S relationship); } diff --git a/src/main/java/tenor/QuantizedTaskNode.java b/src/main/java/tenor/QuantizedTaskNode.java index a0c659416..0c8768de0 100644 --- a/src/main/java/tenor/QuantizedTaskNode.java +++ b/src/main/java/tenor/QuantizedTaskNode.java @@ -17,7 +17,7 @@ package tenor; -public abstract class QuantizedTaskNode extends TaskNode implements IQuantizedTask { +public abstract class QuantizedTaskNode extends TaskNode implements IQuantizedTask { public QuantizedTaskNode(DependencyType type) { super(type); @@ -37,7 +37,7 @@ public abstract class QuantizedTaskNode extends TaskNode implements ISingularTaskNode { +public abstract class SingularTaskNode extends TaskNode implements ISingularTaskNode { public SingularTaskNode(DependencyType type) { super(type); diff --git a/src/main/java/tenor/Task.java b/src/main/java/tenor/Task.java index 372ce8890..854257de3 100644 --- a/src/main/java/tenor/Task.java +++ b/src/main/java/tenor/Task.java @@ -19,7 +19,7 @@ package tenor; import java.util.List; -public abstract class Task implements ITask { +public abstract class Task implements ITask { List parentRelationships; @@ -33,7 +33,7 @@ public abstract class Task implements ITask if (relationship.childTask() != this) { throw new IllegalArgumentException(); } - relationship.parentTask().addChild(relationship); + relationship.parentTask().addChild((IParentTaskRelationship) relationship); parentRelationships.add(relationship); } } diff --git a/src/main/java/tenor/TaskLeaf.java b/src/main/java/tenor/TaskLeaf.java index 7575124f3..c79c5a932 100644 --- a/src/main/java/tenor/TaskLeaf.java +++ b/src/main/java/tenor/TaskLeaf.java @@ -17,5 +17,5 @@ package tenor; -public abstract class TaskLeaf extends Task { +public abstract class TaskLeaf extends Task { } diff --git a/src/main/java/tenor/TaskNode.java b/src/main/java/tenor/TaskNode.java index aabe5d0fc..5e4467d61 100644 --- a/src/main/java/tenor/TaskNode.java +++ b/src/main/java/tenor/TaskNode.java @@ -19,24 +19,27 @@ package tenor; import java.util.List; -public abstract class TaskNode extends Task implements ITaskNodeBase { +public abstract class TaskNode extends Task implements ITaskNodeBase { - List childRelationships; + List childRelationships; public final DependencyType type; public TaskNode(DependencyType type) { this.type = type; } - public List childTasks() { + @Override + public List childTasks() { return childRelationships; } + @Override public DependencyType type() { return type; } - public void addChild(ITaskRelationshipBase relationship) { + @Override + public void addChild(S relationship) { if (relationship.parentTask() != this) { throw new IllegalArgumentException(); }