Skip to content

Commit 723039d

Browse files
committed
requested changes
1 parent b61164b commit 723039d

1 file changed

Lines changed: 13 additions & 10 deletions

File tree

src/main/java/ch/njol/skript/expressions/ExprCustomModelData.java

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,18 +8,20 @@
88
import ch.njol.skript.lang.Expression;
99
import ch.njol.skript.lang.ExpressionType;
1010
import ch.njol.skript.lang.SkriptParser.ParseResult;
11+
import ch.njol.skript.registrations.Classes;
1112
import ch.njol.skript.util.Color;
1213
import ch.njol.skript.util.ColorRGB;
13-
import ch.njol.skript.util.Utils;
1414
import ch.njol.util.Kleenean;
1515
import org.bukkit.event.Event;
1616
import org.bukkit.inventory.meta.ItemMeta;
1717
import org.bukkit.inventory.meta.components.CustomModelDataComponent;
1818
import org.jetbrains.annotations.Nullable;
1919

20+
import java.lang.reflect.Array;
2021
import java.util.ArrayList;
2122
import java.util.Arrays;
2223
import java.util.List;
24+
import java.util.function.IntFunction;
2325

2426
@Name("Custom Model Data")
2527
@Description({
@@ -65,20 +67,20 @@ private enum CMDType {
6567
COLORS(Color.class),
6668
ALL(Float.class, Boolean.class, String.class, Color.class);
6769

68-
private final Class<?> supertype;
6970
private final Class<?>[] types;
7071

7172
CMDType(Class<?>... returns) {
7273
this.types = returns;
73-
this.supertype = Utils.getSuperType(returns);
7474
}
7575
}
7676

7777
private CMDType dataType;
78+
private Class<?> returnType;
7879

7980
@Override
8081
public boolean init(Expression<?>[] expressions, int matchedPattern, Kleenean isDelayed, ParseResult parseResult) {
8182
dataType = CMDType.values()[parseResult.mark];
83+
returnType = Classes.getSuperClassInfo(dataType.types).getC();
8284
//noinspection unchecked
8385
setExpr((Expression<? extends ItemType>) expressions[0]);
8486
return true;
@@ -97,11 +99,12 @@ protected Object[] get(Event event, ItemType[] source) {
9799
}
98100

99101
CustomModelDataComponent component = meta.getCustomModelDataComponent();
102+
IntFunction<Object[]> arrayConstructor = n -> (Object[]) Array.newInstance(getReturnType(), n);
100103
return switch (dataType) {
101104
case SINGLE_INT -> throw new IllegalStateException("Unreachable state for SINGLE_INT!");
102-
case FLOATS -> component.getFloats().toArray(Float[]::new);
103-
case FLAGS -> component.getFlags().toArray(Boolean[]::new);
104-
case STRINGS -> component.getStrings().toArray(String[]::new);
105+
case FLOATS -> component.getFloats().toArray(arrayConstructor);
106+
case FLAGS -> component.getFlags().toArray(arrayConstructor);
107+
case STRINGS -> component.getStrings().toArray(arrayConstructor);
105108
case COLORS ->
106109
component.getColors().stream().map(ColorRGB::fromBukkitColor).toList().toArray(ColorRGB[]::new);
107110
case ALL -> {
@@ -110,17 +113,17 @@ protected Object[] get(Event event, ItemType[] source) {
110113
data.addAll(component.getFlags());
111114
data.addAll(component.getStrings());
112115
data.addAll(component.getColors().stream().map(ColorRGB::fromBukkitColor).toList());
113-
yield data.toArray(Object[]::new);
116+
yield data.toArray(arrayConstructor);
114117
}
115118
};
116119
}
117-
throw new IllegalStateException("Unreachable state! Either source was an empty array or something horrible happened.");
120+
return (Object[]) Array.newInstance(getReturnType(), 0);
118121
}
119122

120123
@Override
121124
public Class<?> @Nullable [] acceptChange(ChangeMode mode) {
122125
return switch (mode) {
123-
case ADD, REMOVE, REMOVE_ALL, SET, DELETE, RESET -> {
126+
case ADD, REMOVE, SET, DELETE, RESET -> {
124127
// convert to array types to allow plural changes.
125128
Class<?>[] arrayClasses = new Class[dataType.types.length];
126129
for (int i = 0; i < dataType.types.length; i++) {
@@ -296,7 +299,7 @@ public boolean isSingle() {
296299

297300
@Override
298301
public Class<?> getReturnType() {
299-
return dataType.supertype;
302+
return returnType;
300303
}
301304

302305
@Override

0 commit comments

Comments
 (0)