Skip to content

Commit 9fc40d2

Browse files
committed
Slot, potion and external value.
1 parent 427b7d4 commit 9fc40d2

File tree

18 files changed

+906
-71
lines changed

18 files changed

+906
-71
lines changed

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

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,13 @@
11
package io.izzel.mesmerize.api;
22

33
import io.izzel.mesmerize.api.data.MarkerValue;
4-
import io.izzel.mesmerize.api.data.MultiValue;
54
import io.izzel.mesmerize.api.data.NumberValue;
65
import io.izzel.mesmerize.api.data.RangeNumberValue;
76
import io.izzel.mesmerize.api.data.StatsNumber;
8-
import io.izzel.mesmerize.api.data.StatsSetValue;
7+
import io.izzel.mesmerize.api.data.complex.StatsSetValue;
98
import io.izzel.mesmerize.api.data.UUIDValue;
10-
import io.izzel.mesmerize.api.data.complex.PermissionValue;
11-
import io.izzel.mesmerize.api.service.ElementFactory;
9+
import io.izzel.mesmerize.api.data.stats.PermissionStats;
10+
import io.izzel.mesmerize.api.data.stats.SlotStats;
1211
import io.izzel.mesmerize.api.visitor.StatsValue;
1312
import org.bukkit.NamespacedKey;
1413

@@ -49,14 +48,11 @@ public final class DefaultStats {
4948
public static final Stats<StatsNumber<Double>> ATTACK_RANGE = singleRelativeStats("attack_range", true);
5049
public static final Stats<StatsNumber<Double>> DODGE = singleRelativeStats("dodge", false);
5150
public static final Stats<StatsNumber<Double>> ACCURACY = singleRelativeStats("accuracy", false);
52-
public static final Stats<Map<String, StatsValue<?>>> PERMISSION = PermissionValue.STATS;
51+
public static final Stats<Map<String, StatsValue<?>>> PERMISSION = PermissionStats.STATS;
5352
public static final Stats<StatsNumber<Double>> TRACING = singleRelativeStats("tracing", true);
5453
public static final Stats<StatsNumber<Double>> ACCELERATE = singleRelativeStats("accelerate", true);
55-
public static final Stats<List<StatsSetValue>> STATS_SET =
56-
Stats.builder().key(key("stats_set"))
57-
.supplying(MultiValue.builder().supplying(StatsSetValue::new).allowSingleNonListValue().buildSupplier())
58-
.merging(MultiValue.concatMerger())
59-
.displaying((value, pane) -> value.get().forEach(it -> ElementFactory.instance().displayHolder(it.get(), pane))).build();
54+
public static final Stats<List<StatsSetValue>> STATS_SET = StatsSetValue.STATS;
55+
public static final Stats<Map<String, StatsValue<?>>> SLOT = SlotStats.STATS;
6056

6157
@SuppressWarnings("deprecation")
6258
private static NamespacedKey key(String id) {
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package io.izzel.mesmerize.api.data.complex;
2+
3+
import com.google.common.base.Preconditions;
4+
import io.izzel.mesmerize.api.util.Coerce;
5+
import io.izzel.mesmerize.api.visitor.ValueVisitor;
6+
import io.izzel.mesmerize.api.visitor.VisitMode;
7+
import io.izzel.mesmerize.api.visitor.impl.AbstractValue;
8+
import org.bukkit.potion.PotionEffect;
9+
import org.bukkit.potion.PotionEffectType;
10+
11+
public class PotionValue extends AbstractValue<PotionEffect> {
12+
13+
private String expr;
14+
private PotionEffect potionEffect;
15+
16+
@Override
17+
public PotionEffect get() {
18+
return potionEffect;
19+
}
20+
21+
@Override
22+
public void accept(ValueVisitor visitor, VisitMode mode) {
23+
visitor.visitString(expr);
24+
visitor.visitEnd();
25+
}
26+
27+
@Override
28+
public void visitString(String s) {
29+
this.expr = s;
30+
}
31+
32+
@Override
33+
public void visitEnd() {
34+
Preconditions.checkNotNull(expr, "expr");
35+
String[] split = expr.split(",");
36+
Preconditions.checkArgument(split.length >= 3, "PotionEffect: type,duration,amplifier[,ambient,particles,icon]");
37+
PotionEffectType effectType = PotionEffectType.getByName(split[0]);
38+
Preconditions.checkNotNull(effectType, "Unknown effect type " + split[0]);
39+
int duration = Coerce.toInteger(split[1]);
40+
int amplifier = Coerce.toInteger(split[2]);
41+
boolean ambient = split.length <= 3 || Coerce.toBoolean(split[3]);
42+
boolean particle = split.length <= 4 || Coerce.toBoolean(split[4]);
43+
boolean icon = split.length <= 5 || Coerce.toBoolean(split[5]);
44+
this.potionEffect = new PotionEffect(effectType, duration, amplifier, ambient, particle, icon);
45+
}
46+
}

src/api/java/io/izzel/mesmerize/api/data/StatsSetValue.java renamed to src/api/java/io/izzel/mesmerize/api/data/complex/StatsSetValue.java

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
1-
package io.izzel.mesmerize.api.data;
1+
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.visitor.MapVisitor;
58
import io.izzel.mesmerize.api.visitor.StatsHolder;
69
import io.izzel.mesmerize.api.visitor.ValueVisitor;
@@ -10,7 +13,9 @@
1013
import io.izzel.mesmerize.api.visitor.util.MapAsStatsVisitor;
1114
import io.izzel.mesmerize.api.visitor.util.StatsAsMapVisitor;
1215
import io.izzel.mesmerize.api.visitor.util.StatsSet;
16+
import org.bukkit.NamespacedKey;
1317

18+
import java.util.List;
1419
import java.util.function.BiFunction;
1520

1621
public class StatsSetValue extends AbstractValue<StatsHolder> {
@@ -86,4 +91,11 @@ public static BiFunction<StatsSetValue, StatsSetValue, StatsSetValue> defaultMer
8691
return new StatsSetValue(set);
8792
};
8893
}
94+
95+
@SuppressWarnings("deprecation")
96+
public static final Stats<List<StatsSetValue>> STATS =
97+
Stats.builder().key(new NamespacedKey("mesmerize", "stats_set"))
98+
.supplying(MultiValue.builder().supplying(StatsSetValue::new).allowSingleNonListValue().buildSupplier())
99+
.merging(MultiValue.concatMerger())
100+
.displaying((value, pane) -> value.get().forEach(it -> ElementFactory.instance().displayHolder(it.get(), pane))).build();
89101
}

src/api/java/io/izzel/mesmerize/api/data/complex/PermissionValue.java renamed to src/api/java/io/izzel/mesmerize/api/data/stats/PermissionStats.java

Lines changed: 8 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
package io.izzel.mesmerize.api.data.complex;
1+
package io.izzel.mesmerize.api.data.stats;
22

33
import com.google.common.collect.Lists;
44
import io.izzel.mesmerize.api.Stats;
55
import io.izzel.mesmerize.api.cause.ContextKeys;
66
import io.izzel.mesmerize.api.data.MapValue;
77
import io.izzel.mesmerize.api.data.MultiValue;
8-
import io.izzel.mesmerize.api.data.StatsSetValue;
8+
import io.izzel.mesmerize.api.data.complex.StatsSetValue;
99
import io.izzel.mesmerize.api.data.StringValue;
1010
import io.izzel.mesmerize.api.display.DisplayPane;
1111
import io.izzel.mesmerize.api.display.Element;
@@ -21,16 +21,12 @@
2121
import java.util.Map;
2222
import java.util.function.Supplier;
2323

24-
public class PermissionValue extends MapValue {
24+
public class PermissionStats extends MapValue {
2525

26-
public PermissionValue(Map<String, Supplier<StatsValue<?>>> dataTypes) {
26+
public PermissionStats(Map<String, Supplier<StatsValue<?>>> dataTypes) {
2727
super(dataTypes);
2828
}
2929

30-
public PermissionValue(Map<String, Supplier<StatsValue<?>>> dataTypes, Map<String, StatsValue<?>> values) {
31-
super(dataTypes, values);
32-
}
33-
3430
public List<String> getPermissionNodes() {
3531
MultiValue<String, StringValue> value = this.get("node");
3632
return Lists.transform(value.get(), StringValue::get);
@@ -73,20 +69,14 @@ public void accept(ValueVisitor visitor, VisitMode mode) {
7369
.supplying(StringValue::new)
7470
.buildSupplier()
7571
).put("stats", StatsSetValue::new)
76-
.buildSupplier(PermissionValue::new)
77-
)
78-
.merging(
79-
MapValue.deepMerger()
80-
.put("node", MultiValue.concatMerger())
81-
.put("stats", StatsSetValue.defaultMerger())
82-
.build(PermissionValue::new)
72+
.buildSupplier(PermissionStats::new)
8373
)
84-
.displaying((permissionValue, pane) -> {
74+
.displaying((permissionStats, pane) -> {
8575
DisplayPane subPane = pane.createSubPane();
8676
ElementFactory factory = ElementFactory.instance();
87-
Element nodeElement = factory.createLocaleElement("permission_name." + permissionValue.getPermissionNodes().get(0));
77+
Element nodeElement = factory.createLocaleElement("permission_name." + permissionStats.getPermissionNodes().get(0));
8878
subPane.addHeader(factory.createLocaleElement("stats.permission", nodeElement));
89-
factory.displayHolder(permissionValue.getStats(), subPane);
79+
factory.displayHolder(permissionStats.getStats(), subPane);
9080
pane.addElement(subPane);
9181
})
9282
.build();
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
package io.izzel.mesmerize.api.data.stats;
2+
3+
import com.google.common.collect.Lists;
4+
import io.izzel.mesmerize.api.Stats;
5+
import io.izzel.mesmerize.api.data.MapValue;
6+
import io.izzel.mesmerize.api.data.MultiValue;
7+
import io.izzel.mesmerize.api.data.complex.StatsSetValue;
8+
import io.izzel.mesmerize.api.data.StringValue;
9+
import io.izzel.mesmerize.api.display.DisplayPane;
10+
import io.izzel.mesmerize.api.display.Element;
11+
import io.izzel.mesmerize.api.service.ElementFactory;
12+
import io.izzel.mesmerize.api.visitor.StatsHolder;
13+
import io.izzel.mesmerize.api.visitor.StatsValue;
14+
import org.bukkit.NamespacedKey;
15+
16+
import java.util.List;
17+
import java.util.Map;
18+
import java.util.function.Supplier;
19+
20+
public class SlotStats extends MapValue {
21+
22+
public SlotStats(Map<String, Supplier<StatsValue<?>>> dataTypes) {
23+
super(dataTypes);
24+
}
25+
26+
public List<String> getSlots() {
27+
MultiValue<String, StringValue> value = this.get("node");
28+
return Lists.transform(value.get(), StringValue::get);
29+
}
30+
31+
public StatsHolder getStats() {
32+
StatsSetValue statsSetValue = this.get("stats");
33+
return statsSetValue.get();
34+
}
35+
36+
@SuppressWarnings("deprecation")
37+
public static final Stats<Map<String, StatsValue<?>>> STATS =
38+
Stats.builder()
39+
.key(new NamespacedKey("mesmerize", "slot"))
40+
.supplying(MapValue.builder()
41+
.put("slot", MultiValue.builder()
42+
.allowSingleNonListValue()
43+
.supplying(StringValue::new)
44+
.buildSupplier())
45+
.put("stats", StatsSetValue::new)
46+
.buildSupplier(SlotStats::new)
47+
)
48+
.displaying((slotStats, pane) -> {
49+
DisplayPane subPane = pane.createSubPane();
50+
ElementFactory factory = ElementFactory.instance();
51+
Element nodeElement = factory.createLocaleElement("slot_name." + slotStats.getSlots().get(0));
52+
subPane.addHeader(factory.createLocaleElement("stats.slot", nodeElement));
53+
factory.displayHolder(slotStats.getStats(), subPane);
54+
pane.addElement(subPane);
55+
})
56+
.build();
57+
}

0 commit comments

Comments
 (0)