Skip to content

Commit 9d26a88

Browse files
committed
External store api.
1 parent 6bf3fbd commit 9d26a88

File tree

7 files changed

+25
-32
lines changed

7 files changed

+25
-32
lines changed

src/api/java/io/izzel/mesmerize/api/visitor/ValueVisitor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ public interface ValueVisitor {
2727

2828
void visitEnd();
2929

30-
boolean hasExternalValue();
30+
StatsValue<?> getExternalValue();
3131

3232
default EventContext context() {
3333
return CauseManager.instance().currentContext();

src/api/java/io/izzel/mesmerize/api/visitor/impl/AbstractValue.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,8 +78,8 @@ public void visitEnd() {
7878
}
7979

8080
@Override
81-
public boolean hasExternalValue() {
82-
return false;
81+
public StatsValue<?> getExternalValue() {
82+
throw new UnsupportedOperationException("external");
8383
}
8484

8585
public static <V extends AbstractValue<?>> BiFunction<V, V, V> keepMutableValue(BiFunction<V, V, V> merger) {

src/api/java/io/izzel/mesmerize/api/visitor/impl/AbstractValueVisitor.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import io.izzel.mesmerize.api.visitor.ListVisitor;
44
import io.izzel.mesmerize.api.visitor.MapVisitor;
5+
import io.izzel.mesmerize.api.visitor.StatsValue;
56
import io.izzel.mesmerize.api.visitor.StatsVisitor;
67
import io.izzel.mesmerize.api.visitor.ValueVisitor;
78

@@ -117,10 +118,10 @@ public void visitEnd() {
117118
}
118119

119120
@Override
120-
public boolean hasExternalValue() {
121+
public StatsValue<?> getExternalValue() {
121122
if (visitor != null) {
122-
return visitor.hasExternalValue();
123+
return visitor.getExternalValue();
123124
}
124-
return false;
125+
return null;
125126
}
126127
}

src/main/java/io/izzel/mesmerize/impl/config/YamlValueReader.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
package io.izzel.mesmerize.impl.config;
22

3+
import io.izzel.mesmerize.api.visitor.StatsValue;
34
import io.izzel.mesmerize.api.visitor.ValueVisitor;
45
import io.izzel.mesmerize.api.visitor.VisitMode;
56
import io.izzel.mesmerize.api.visitor.impl.AbstractValue;
6-
import io.izzel.mesmerize.impl.util.visitor.external.ExternalTrackingVisitor;
77
import org.bukkit.configuration.ConfigurationSection;
88

99
import java.util.Collection;
@@ -24,8 +24,9 @@ public YamlValueReader(Object o) {
2424
@SuppressWarnings("unchecked")
2525
@Override
2626
public void accept(ValueVisitor visitor, VisitMode mode) {
27-
if (visitor instanceof ExternalTrackingVisitor && visitor.hasExternalValue()) {
28-
((ExternalTrackingVisitor) visitor).getExternal().accept(visitor, mode);
27+
StatsValue<?> externalValue = visitor.getExternalValue();
28+
if (externalValue != null) {
29+
externalValue.accept(visitor, mode);
2930
return;
3031
}
3132
if (o instanceof Boolean) {

src/main/java/io/izzel/mesmerize/impl/util/visitor/PersistentValueReader.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
package io.izzel.mesmerize.impl.util.visitor;
22

33
import io.izzel.mesmerize.api.visitor.ListVisitor;
4+
import io.izzel.mesmerize.api.visitor.StatsValue;
45
import io.izzel.mesmerize.api.visitor.ValueVisitor;
56
import io.izzel.mesmerize.api.visitor.VisitMode;
67
import io.izzel.mesmerize.api.visitor.impl.AbstractValue;
78
import io.izzel.mesmerize.impl.util.Util;
8-
import io.izzel.mesmerize.impl.util.visitor.external.ExternalTrackingVisitor;
99
import org.bukkit.NamespacedKey;
1010
import org.bukkit.persistence.PersistentDataContainer;
1111
import org.bukkit.persistence.PersistentDataType;
@@ -23,8 +23,9 @@ public PersistentValueReader(PersistentDataContainer container, NamespacedKey ke
2323
@SuppressWarnings("ConstantConditions")
2424
@Override
2525
public void accept(ValueVisitor visitor, VisitMode mode) {
26-
if (visitor instanceof ExternalTrackingVisitor && visitor.hasExternalValue()) {
27-
((ExternalTrackingVisitor) visitor).getExternal().accept(visitor, mode);
26+
StatsValue<?> externalValue = visitor.getExternalValue();
27+
if (externalValue != null) {
28+
externalValue.accept(visitor, mode);
2829
return;
2930
}
3031
int i = Util.typeOfKey(this.container, this.key);

src/main/java/io/izzel/mesmerize/impl/util/visitor/external/ExternalReader.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package io.izzel.mesmerize.impl.util.visitor.external;
22

3+
import io.izzel.mesmerize.api.visitor.StatsValue;
34
import io.izzel.mesmerize.api.visitor.ValueVisitor;
45
import io.izzel.mesmerize.api.visitor.VisitMode;
56
import io.izzel.mesmerize.api.visitor.impl.AbstractValue;
@@ -29,14 +30,20 @@ public ExternalReader child(NamespacedKey key) {
2930
if (container == null || key == null) {
3031
return this;
3132
} else {
32-
return new ExternalReader(container.get(key, PersistentDataType.TAG_CONTAINER));
33+
PersistentDataContainer container = this.container.get(key, PersistentDataType.TAG_CONTAINER);
34+
return container == null ? null : new ExternalReader(container);
3335
}
3436
}
3537

3638
@Override
3739
public void accept(ValueVisitor visitor, VisitMode mode) {
3840
if (container != null) {
39-
new PersistentValueReader(container, VALUE).accept(new AbstractValueVisitor(visitor), mode);
41+
new PersistentValueReader(container, VALUE).accept(new AbstractValueVisitor(visitor) {
42+
@Override
43+
public StatsValue<?> getExternalValue() {
44+
return null;
45+
}
46+
}, mode);
4047
} else {
4148
visitor.visitEnd();
4249
}

src/main/java/io/izzel/mesmerize/impl/util/visitor/external/ExternalTrackingVisitor.java

Lines changed: 1 addition & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,6 @@
1515

1616
public interface ExternalTrackingVisitor {
1717

18-
ExternalReader getExternal();
19-
2018
class ValueTracker extends AbstractValueVisitor implements ExternalTrackingVisitor {
2119

2220
private final ExternalReader reader;
@@ -27,7 +25,7 @@ public ValueTracker(ValueVisitor visitor, ExternalReader reader) {
2725
}
2826

2927
@Override
30-
public ExternalReader getExternal() {
28+
public ExternalReader getExternalValue() {
3129
return reader;
3230
}
3331

@@ -60,11 +58,6 @@ public MapTracker(MapVisitor visitor, ExternalReader reader) {
6058
public ValueVisitor visit(String key) {
6159
return new ValueTracker(super.visit(key), reader.child(Util.fromString(key)));
6260
}
63-
64-
@Override
65-
public ExternalReader getExternal() {
66-
return reader;
67-
}
6861
}
6962

7063
class ListTracker extends AbstractListVisitor implements ExternalTrackingVisitor {
@@ -80,11 +73,6 @@ public ListTracker(ListVisitor visitor, ExternalReader reader) {
8073
public ValueVisitor visit(int index) {
8174
return new ValueTracker(super.visit(index), reader.child(NamespacedKey.minecraft(String.valueOf(index))));
8275
}
83-
84-
@Override
85-
public ExternalReader getExternal() {
86-
return reader;
87-
}
8876
}
8977

9078
class StatsTracker extends AbstractStatsVisitor implements ExternalTrackingVisitor {
@@ -100,10 +88,5 @@ public StatsTracker(StatsVisitor visitor, ExternalReader reader) {
10088
public <T> ValueVisitor visitStats(@NotNull Stats<T> stats) {
10189
return new ValueTracker(super.visitStats(stats), reader.child(stats.getKey()));
10290
}
103-
104-
@Override
105-
public ExternalReader getExternal() {
106-
return reader;
107-
}
10891
}
10992
}

0 commit comments

Comments
 (0)