Skip to content

Commit fe2d369

Browse files
committed
Implement wearing_potion
1 parent d16f116 commit fe2d369

File tree

12 files changed

+87
-81
lines changed

12 files changed

+87
-81
lines changed

src/api/java/io/izzel/mesmerize/api/DefaultStats.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import io.izzel.mesmerize.api.data.NumberValue;
55
import io.izzel.mesmerize.api.data.RangeNumberValue;
66
import io.izzel.mesmerize.api.data.StatsNumber;
7+
import io.izzel.mesmerize.api.data.complex.PotionValue;
78
import io.izzel.mesmerize.api.data.complex.StatsSetValue;
89
import io.izzel.mesmerize.api.data.UUIDValue;
910
import io.izzel.mesmerize.api.data.stats.PermissionStats;
@@ -54,6 +55,7 @@ public final class DefaultStats {
5455
public static final Stats<List<StatsSetValue>> STATS_SET = StatsSetValue.STATS;
5556
public static final Stats<Map<String, StatsValue<?>>> SLOT = SlotStats.STATS;
5657
public static final Stats<List<StatsSetValue>> HIDDEN_SET = StatsSetValue.HIDDEN;
58+
public static final Stats<List<PotionValue>> WEARING_POTION = PotionValue.stats("wearing_potion");
5759

5860
@SuppressWarnings("deprecation")
5961
private static NamespacedKey key(String id) {

src/api/java/io/izzel/mesmerize/api/data/complex/PotionValue.java

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,20 @@
11
package io.izzel.mesmerize.api.data.complex;
22

33
import com.google.common.base.Preconditions;
4+
import io.izzel.mesmerize.api.Stats;
5+
import io.izzel.mesmerize.api.data.MultiValue;
6+
import io.izzel.mesmerize.api.service.ElementFactory;
47
import io.izzel.mesmerize.api.util.Coerce;
58
import io.izzel.mesmerize.api.visitor.ValueVisitor;
69
import io.izzel.mesmerize.api.visitor.VisitMode;
710
import io.izzel.mesmerize.api.visitor.impl.AbstractValue;
11+
import org.bukkit.NamespacedKey;
812
import org.bukkit.potion.PotionEffect;
913
import org.bukkit.potion.PotionEffectType;
1014

15+
import java.time.Duration;
16+
import java.util.List;
17+
1118
public class PotionValue extends AbstractValue<PotionEffect> {
1219

1320
private String expr;
@@ -43,4 +50,24 @@ public void visitEnd() {
4350
boolean icon = split.length <= 5 || Coerce.toBoolean(split[5]);
4451
this.potionEffect = new PotionEffect(effectType, duration, amplifier, ambient, particle, icon);
4552
}
53+
54+
public static Stats<List<PotionValue>> stats(String key) {
55+
return Stats.builder().key(new NamespacedKey("mesmerize", key))
56+
.supplying(
57+
MultiValue.builder()
58+
.supplying(PotionValue::new)
59+
.allowSingleNonListValue()
60+
.buildSupplier()
61+
)
62+
.merging(MultiValue.concatMerger())
63+
.displaying((value, pane) -> {
64+
ElementFactory factory = ElementFactory.instance();
65+
for (PotionValue potionValue : value.get()) {
66+
pane.addElement(factory.createLocaleElement("stats." + key, potionValue.get().getAmplifier(),
67+
factory.createPotionElement(potionValue.get().getType()),
68+
factory.createDurationElement(Duration.ofMillis(potionValue.get().getDuration() * 50))));
69+
}
70+
})
71+
.build();
72+
}
4673
}

src/api/java/io/izzel/mesmerize/api/service/ElementFactory.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import io.izzel.mesmerize.api.display.Element;
66
import io.izzel.mesmerize.api.visitor.StatsHolder;
77
import org.bukkit.inventory.ItemStack;
8+
import org.bukkit.potion.PotionEffectType;
89
import org.jetbrains.annotations.NotNull;
910

1011
import java.time.Duration;
@@ -32,6 +33,8 @@ public interface ElementFactory {
3233

3334
Element createDateElement(Instant instant);
3435

36+
Element createPotionElement(PotionEffectType potionEffectType);
37+
3538
static ElementFactory instance() {
3639
return StatsService.instance().getElementFactory();
3740
}

src/api/java/io/izzel/mesmerize/api/util/Quat.java

Lines changed: 0 additions & 60 deletions
This file was deleted.

src/main/java/io/izzel/mesmerize/impl/Mesmerize.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import io.izzel.mesmerize.impl.event.AttributeListener;
88
import io.izzel.mesmerize.impl.event.CombatListener;
99
import io.izzel.mesmerize.impl.event.EntityStatsCacheListener;
10+
import io.izzel.mesmerize.impl.event.PotionApplyTask;
1011
import io.izzel.mesmerize.impl.event.ProjectileListener;
1112
import io.izzel.mesmerize.impl.service.SimpleStatsService;
1213
import io.izzel.mesmerize.impl.util.Updater;
@@ -70,6 +71,7 @@ public void onActivated() {
7071
LOGGER.info(TLocale.asString("load.paper.absent"));
7172
this.getServer().getPluginManager().registerEvents(new EntityStatsCacheListener.Spigot(), this);
7273
}
74+
new PotionApplyTask().runTaskTimer(this, 0, ConfigSpec.spec().general().potionApplyInterval());
7375
Updater.start();
7476
LOGGER.info(TLocale.asString("general.load", (System.currentTimeMillis() - begin) / 1000D));
7577
}

src/main/java/io/izzel/mesmerize/impl/config/spec/GeneralSpec.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ public class GeneralSpec {
1010
private double defaultAttackSpeed = 4.0D;
1111
private double defaultMoveSpeed = 0.1D;
1212
private double defaultFlySpeed = 0.2D;
13+
private long potionApplyInterval = 60L;
1314

1415
public boolean debug() {
1516
return debug;
@@ -74,4 +75,12 @@ public double defaultFlySpeed() {
7475
public void setDefaultFlySpeed(double defaultFlySpeed) {
7576
this.defaultFlySpeed = defaultFlySpeed;
7677
}
78+
79+
public long potionApplyInterval() {
80+
return potionApplyInterval;
81+
}
82+
83+
public void setPotionApplyInterval(long potionApplyInterval) {
84+
this.potionApplyInterval = potionApplyInterval;
85+
}
7786
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package io.izzel.mesmerize.impl.event;
2+
3+
import io.izzel.mesmerize.api.DefaultStats;
4+
import io.izzel.mesmerize.api.data.complex.PotionValue;
5+
import io.izzel.mesmerize.api.visitor.util.StatsSet;
6+
import io.izzel.mesmerize.impl.config.spec.ConfigSpec;
7+
import org.bukkit.Bukkit;
8+
import org.bukkit.entity.Player;
9+
import org.bukkit.potion.PotionEffect;
10+
import org.bukkit.scheduler.BukkitRunnable;
11+
12+
import java.util.List;
13+
import java.util.Optional;
14+
15+
public class PotionApplyTask extends BukkitRunnable {
16+
17+
@Override
18+
public void run() {
19+
for (Player player : Bukkit.getOnlinePlayers()) {
20+
StatsSet set = StatsSet.of(player);
21+
Optional<List<PotionValue>> optional = DefaultStats.WEARING_POTION.tryApply(set, null);
22+
if (optional.isPresent()) {
23+
for (PotionValue potionValue : optional.get()) {
24+
PotionEffect potionEffect = player.getPotionEffect(potionValue.get().getType());
25+
if (potionEffect != null && potionEffect.getDuration() > ConfigSpec.spec().general().potionApplyInterval()) {
26+
continue;
27+
}
28+
potionValue.get().apply(player);
29+
}
30+
}
31+
}
32+
}
33+
}

src/main/java/io/izzel/mesmerize/impl/event/TracingTargetTask.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package io.izzel.mesmerize.impl.event;
22

3-
import io.izzel.mesmerize.api.util.Quat;
3+
import io.izzel.taboolib.util.Quat;
44
import org.bukkit.entity.LivingEntity;
55
import org.bukkit.entity.Projectile;
66
import org.bukkit.scheduler.BukkitRunnable;

src/main/java/io/izzel/mesmerize/impl/service/SimpleElementFactory.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,11 @@
1111
import io.izzel.mesmerize.impl.config.spec.ConfigSpec;
1212
import io.izzel.mesmerize.impl.element.DisplayVisitor;
1313
import io.izzel.mesmerize.impl.element.SimplePane;
14+
import io.izzel.taboolib.module.i18n.I18n;
1415
import io.izzel.taboolib.module.locale.TLocale;
1516
import org.bukkit.inventory.ItemStack;
1617
import org.bukkit.inventory.meta.ItemMeta;
18+
import org.bukkit.potion.PotionEffectType;
1719
import org.jetbrains.annotations.NotNull;
1820

1921
import java.text.DecimalFormat;
@@ -90,4 +92,9 @@ public Element createDateElement(Instant instant) {
9092
// todo
9193
return Element.of(instant.toString());
9294
}
95+
96+
@Override
97+
public Element createPotionElement(PotionEffectType potionEffectType) {
98+
return Element.of(I18n.get().getName(potionEffectType));
99+
}
93100
}

src/main/java/io/izzel/mesmerize/impl/util/TLocaleElement.java

Lines changed: 0 additions & 20 deletions
This file was deleted.

0 commit comments

Comments
 (0)