From a475cdc5e665659790fd67cb7b2113a59b47200a Mon Sep 17 00:00:00 2001 From: Flowsqy <47575244+Flowsqy@users.noreply.github.com> Date: Tue, 15 Feb 2022 20:55:08 +0100 Subject: [PATCH] Add basic calculation operations --- .../hologram/calculation/Calculation.java | 130 ++++++++++++++++++ .../config/hologram/condition/Condition.java | 2 +- 2 files changed, 131 insertions(+), 1 deletion(-) create mode 100644 plugin/src/main/java/de/epiceric/shopchest/config/hologram/calculation/Calculation.java diff --git a/plugin/src/main/java/de/epiceric/shopchest/config/hologram/calculation/Calculation.java b/plugin/src/main/java/de/epiceric/shopchest/config/hologram/calculation/Calculation.java new file mode 100644 index 0000000..5125d59 --- /dev/null +++ b/plugin/src/main/java/de/epiceric/shopchest/config/hologram/calculation/Calculation.java @@ -0,0 +1,130 @@ +package de.epiceric.shopchest.config.hologram.calculation; + +import de.epiceric.shopchest.config.hologram.HologramFormat; + +import java.util.Map; +import java.util.function.Function; + +/** + * Represents a hologram calculation + */ +public interface Calculation { + + double calculate(Map provider); + + abstract class AbstractCalculation implements Calculation { + + protected final Function, Double> firstArgProvider; + protected final Function, Double> secondArgProvider; + + public AbstractCalculation( + Function, Double> firstArgProvider, + Function, Double> secondArgProvider + ) { + this.firstArgProvider = firstArgProvider; + this.secondArgProvider = secondArgProvider; + } + + } + + class Addition extends AbstractCalculation { + + public Addition( + Function, Double> firstArgProvider, + Function, Double> secondArgProvider + ) { + super(firstArgProvider, secondArgProvider); + } + + @Override + public double calculate(Map requirementValues) { + return this.firstArgProvider.apply(requirementValues) + secondArgProvider.apply(requirementValues); + } + + @Override + public String toString() { + return "(" + firstArgProvider.toString() + " + " + secondArgProvider.toString() + ")"; + } + } + + class Subtraction extends AbstractCalculation { + + public Subtraction( + Function, Double> firstArgProvider, + Function, Double> secondArgProvider + ) { + super(firstArgProvider, secondArgProvider); + } + + @Override + public double calculate(Map requirementValues) { + return this.firstArgProvider.apply(requirementValues) - secondArgProvider.apply(requirementValues); + } + + @Override + public String toString() { + return "(" + firstArgProvider.toString() + " - " + secondArgProvider.toString() + ")"; + } + } + + class Multiplication extends AbstractCalculation { + + public Multiplication( + Function, Double> firstArgProvider, + Function, Double> secondArgProvider + ) { + super(firstArgProvider, secondArgProvider); + } + + @Override + public double calculate(Map requirementValues) { + return this.firstArgProvider.apply(requirementValues) * secondArgProvider.apply(requirementValues); + } + + @Override + public String toString() { + return "(" + firstArgProvider.toString() + " * " + secondArgProvider.toString() + ")"; + } + } + + class Division extends AbstractCalculation { + + public Division( + Function, Double> firstArgProvider, + Function, Double> secondArgProvider + ) { + super(firstArgProvider, secondArgProvider); + } + + @Override + public double calculate(Map requirementValues) { + return this.firstArgProvider.apply(requirementValues) / secondArgProvider.apply(requirementValues); + } + + @Override + public String toString() { + return "(" + firstArgProvider.toString() + " / " + secondArgProvider.toString() + ")"; + } + } + + class Modulo extends AbstractCalculation { + + public Modulo( + Function, Double> firstArgProvider, + Function, Double> secondArgProvider + ) { + super(firstArgProvider, secondArgProvider); + } + + @Override + public double calculate(Map requirementValues) { + return this.firstArgProvider.apply(requirementValues) % secondArgProvider.apply(requirementValues); + } + + @Override + public String toString() { + return "(" + firstArgProvider.toString() + " % " + secondArgProvider.toString() + ")"; + } + } + +} diff --git a/plugin/src/main/java/de/epiceric/shopchest/config/hologram/condition/Condition.java b/plugin/src/main/java/de/epiceric/shopchest/config/hologram/condition/Condition.java index 2d994e4..c43dae0 100644 --- a/plugin/src/main/java/de/epiceric/shopchest/config/hologram/condition/Condition.java +++ b/plugin/src/main/java/de/epiceric/shopchest/config/hologram/condition/Condition.java @@ -6,7 +6,7 @@ import java.util.Map; import java.util.function.Predicate; /** - * Represent an hologram requirement condition + * Represents a hologram requirement condition */ public interface Condition extends Predicate> {