Skip to content

Commit 69702c9

Browse files
authored
Add Timespan add/subtract/diff methods (#7883)
* add/subtract methods * return a new timespan instead * method reference * split the code
1 parent 3e4106b commit 69702c9

File tree

2 files changed

+34
-4
lines changed

2 files changed

+34
-4
lines changed

src/main/java/ch/njol/skript/classes/data/DefaultOperations.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
import ch.njol.skript.util.Timespan;
55
import ch.njol.skript.util.Timespan.TimePeriod;
66
import ch.njol.skript.util.Utils;
7-
import ch.njol.util.Math2;
87
import org.bukkit.util.Vector;
98
import org.skriptlang.skript.lang.arithmetic.Arithmetics;
109
import org.skriptlang.skript.lang.arithmetic.Operator;
@@ -91,9 +90,9 @@ public class DefaultOperations {
9190
});
9291

9392
// Timespan - Timespan
94-
Arithmetics.registerOperation(Operator.ADDITION, Timespan.class, (left, right) -> new Timespan(Math2.addClamped(left.getAs(TimePeriod.MILLISECOND), right.getAs(TimePeriod.MILLISECOND))));
95-
Arithmetics.registerOperation(Operator.SUBTRACTION, Timespan.class, (left, right) -> new Timespan(Math.max(0, left.getAs(TimePeriod.MILLISECOND) - right.getAs(TimePeriod.MILLISECOND))));
96-
Arithmetics.registerDifference(Timespan.class, (left, right) -> new Timespan(Math.abs(left.getAs(TimePeriod.MILLISECOND) - right.getAs(TimePeriod.MILLISECOND))));
93+
Arithmetics.registerOperation(Operator.ADDITION, Timespan.class, Timespan::add);
94+
Arithmetics.registerOperation(Operator.SUBTRACTION, Timespan.class, Timespan::subtract);
95+
Arithmetics.registerDifference(Timespan.class, Timespan::difference);
9796
Arithmetics.registerDefaultValue(Timespan.class, Timespan::new);
9897

9998
// Timespan - Number

src/main/java/ch/njol/skript/util/Timespan.java

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import ch.njol.skript.localization.GeneralWords;
66
import ch.njol.skript.localization.Language;
77
import ch.njol.skript.localization.Noun;
8+
import ch.njol.util.Math2;
89
import ch.njol.util.NonNullPair;
910
import ch.njol.util.coll.CollectionUtils;
1011
import ch.njol.yggdrasil.YggdrasilSerializable;
@@ -254,6 +255,36 @@ public Duration getDuration() {
254255
return Duration.ofMillis(millis);
255256
}
256257

258+
/**
259+
* Safely adds the specified timespan to this timespan, handling potential overflow.
260+
* @param timespan The timespan to add to this timespan
261+
* @return a new Timespan object
262+
*/
263+
public Timespan add(Timespan timespan) {
264+
long millis = Math2.addClamped(this.millis, timespan.getAs(TimePeriod.MILLISECOND));
265+
return new Timespan(millis);
266+
}
267+
268+
/**
269+
* Safely subtracts the specified timespan from this timespan, handling potential underflow.
270+
* @param timespan The timespan to subtract from this timespan
271+
* @return a new Timespan object
272+
*/
273+
public Timespan subtract(Timespan timespan) {
274+
long millis = Math.max(0, this.millis - timespan.getAs(TimePeriod.MILLISECOND));
275+
return new Timespan(millis);
276+
}
277+
278+
/**
279+
* Calculates the difference between the specified timespan and this timespan.
280+
* @param timespan The timespan to get the difference of
281+
* @return a new Timespan object
282+
*/
283+
public Timespan difference(Timespan timespan) {
284+
long millis = Math.abs(this.millis - timespan.getAs(TimePeriod.MILLISECOND));
285+
return new Timespan(millis);
286+
}
287+
257288
@Override
258289
public long get(TemporalUnit unit) {
259290
if (unit instanceof TimePeriod period)

0 commit comments

Comments
 (0)