Skip to content

Commit 33dd887

Browse files
authored
Merge pull request #784 from TonytheMacaroni/main
Add list format for vectors and quaternions
2 parents 9584851 + 8766834 commit 33dd887

2 files changed

Lines changed: 240 additions & 82 deletions

File tree

core/src/main/java/com/nisovin/magicspells/util/EntityData.java

Lines changed: 142 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import org.jetbrains.annotations.Nullable;
55
import org.jetbrains.annotations.ApiStatus;
66

7+
import java.util.List;
78
import java.util.Collection;
89
import java.util.function.Consumer;
910
import java.util.function.BiConsumer;
@@ -29,6 +30,7 @@
2930
import org.bukkit.configuration.ConfigurationSection;
3031

3132
import com.nisovin.magicspells.util.config.ConfigData;
33+
import com.nisovin.magicspells.util.config.FunctionData;
3234
import com.nisovin.magicspells.util.magicitems.MagicItem;
3335
import com.nisovin.magicspells.util.config.ConfigDataUtil;
3436
import com.nisovin.magicspells.util.magicitems.MagicItems;
@@ -480,50 +482,81 @@ public ConfigData<Vector3f> getVector(ConfigurationSection config, String path)
480482
}
481483
}
482484

485+
ConfigData<Float> x;
486+
ConfigData<Float> y;
487+
ConfigData<Float> z;
488+
483489
if (config.isConfigurationSection(path)) {
484490
ConfigurationSection section = config.getConfigurationSection(path);
485491
if (section == null) return data -> null;
486492

487-
ConfigData<Float> x = ConfigDataUtil.getFloat(section, "x");
488-
ConfigData<Float> y = ConfigDataUtil.getFloat(section, "y");
489-
ConfigData<Float> z = ConfigDataUtil.getFloat(section, "z");
493+
x = ConfigDataUtil.getFloat(section, "x");
494+
y = ConfigDataUtil.getFloat(section, "y");
495+
z = ConfigDataUtil.getFloat(section, "z");
496+
} else if (config.isList(path)) {
497+
List<?> value = config.getList(path);
498+
if (value == null || value.size() != 3) return data -> null;
499+
500+
Object xObj = value.get(0);
501+
Object yObj = value.get(1);
502+
Object zObj = value.get(2);
503+
504+
if (xObj instanceof Number number) {
505+
float val = number.floatValue();
506+
x = data -> val;
507+
} else if (xObj instanceof String string) {
508+
x = FunctionData.build(string, Double::floatValue);
509+
} else x = null;
510+
511+
if (yObj instanceof Number number) {
512+
float val = number.floatValue();
513+
y = data -> val;
514+
} else if (yObj instanceof String string) {
515+
y = FunctionData.build(string, Double::floatValue);
516+
} else y = null;
517+
518+
if (zObj instanceof Number number) {
519+
float val = number.floatValue();
520+
z = data -> val;
521+
} else if (zObj instanceof String string) {
522+
z = FunctionData.build(string, Double::floatValue);
523+
} else z = null;
524+
525+
if (x == null || y == null || z == null) return data -> null;
526+
} else {
527+
return data -> null;
528+
}
490529

491-
if (checkNull(x) && checkNull(y) && checkNull(z)) {
492-
if (x.isConstant() && y.isConstant() && z.isConstant()) {
493-
float vx = x.get();
494-
float vy = y.get();
495-
float vz = z.get();
530+
if (!checkNull(x) || !checkNull(y) || !checkNull(z)) return data -> null;
496531

497-
Vector3f vector = new Vector3f(vx, vy, vz);
498-
return data -> vector;
499-
}
532+
if (x.isConstant() && y.isConstant() && z.isConstant()) {
533+
Vector3f vector = new Vector3f(x.get(), y.get(), z.get());
534+
return data -> vector;
535+
}
500536

501-
return new ConfigData<>() {
537+
return new ConfigData<>() {
502538

503-
@Override
504-
public Vector3f get(@NotNull SpellData data) {
505-
Float vx = x.get(data);
506-
if (vx == null) return null;
539+
@Override
540+
public Vector3f get(@NotNull SpellData data) {
541+
Float vx = x.get(data);
542+
if (vx == null) return null;
507543

508-
Float vy = y.get(data);
509-
if (vy == null) return null;
544+
Float vy = y.get(data);
545+
if (vy == null) return null;
510546

511-
Float vz = z.get(data);
512-
if (vz == null) return null;
547+
Float vz = z.get(data);
548+
if (vz == null) return null;
513549

514-
return new Vector3f(vx, vy, vz);
515-
}
516-
517-
@Override
518-
public boolean isConstant() {
519-
return false;
520-
}
550+
return new Vector3f(vx, vy, vz);
551+
}
521552

522-
};
553+
@Override
554+
public boolean isConstant() {
555+
return false;
523556
}
524-
}
525557

526-
return data -> null;
558+
};
559+
527560
}
528561

529562
private ConfigData<Quaternionf> getQuaternion(ConfigurationSection config, String path) {
@@ -576,49 +609,94 @@ public boolean isConstant() {
576609
};
577610
}
578611

579-
ConfigData<Float> x = ConfigDataUtil.getFloat(config, path + ".x");
580-
ConfigData<Float> y = ConfigDataUtil.getFloat(config, path + ".y");
581-
ConfigData<Float> z = ConfigDataUtil.getFloat(config, path + ".z");
582-
ConfigData<Float> w = ConfigDataUtil.getFloat(config, path + ".w");
583-
if (checkNull(x) && checkNull(y) && checkNull(z) && checkNull(w)) {
584-
if (x.isConstant() && y.isConstant() && z.isConstant() && w.isConstant()) {
585-
float qx = x.get();
586-
float qy = y.get();
587-
float qz = z.get();
588-
float qw = w.get();
589-
590-
Quaternionf rot = new Quaternionf(qx, qy, qz, qw);
591-
return data -> rot;
592-
}
612+
ConfigData<Float> x;
613+
ConfigData<Float> y;
614+
ConfigData<Float> z;
615+
ConfigData<Float> w;
593616

594-
return new ConfigData<>() {
617+
if (config.isConfigurationSection(path)) {
618+
ConfigurationSection section = config.getConfigurationSection(path);
619+
if (section == null) return data -> null;
595620

596-
@Override
597-
public Quaternionf get(@NotNull SpellData data) {
598-
Float qx = x.get(data);
599-
if (qx == null) return null;
621+
x = ConfigDataUtil.getFloat(section, "x");
622+
y = ConfigDataUtil.getFloat(section, "y");
623+
z = ConfigDataUtil.getFloat(section, "z");
624+
w = ConfigDataUtil.getFloat(section, "w");
625+
} else if (config.isList(path)) {
626+
List<?> value = config.getList(path);
627+
if (value == null || value.size() != 4) return data -> null;
628+
629+
Object xObj = value.get(0);
630+
Object yObj = value.get(1);
631+
Object zObj = value.get(2);
632+
Object wObj = value.get(3);
633+
634+
if (xObj instanceof Number number) {
635+
float val = number.floatValue();
636+
x = data -> val;
637+
} else if (xObj instanceof String string) {
638+
x = FunctionData.build(string, Double::floatValue);
639+
} else x = null;
640+
641+
if (yObj instanceof Number number) {
642+
float val = number.floatValue();
643+
y = data -> val;
644+
} else if (yObj instanceof String string) {
645+
y = FunctionData.build(string, Double::floatValue);
646+
} else y = null;
647+
648+
if (zObj instanceof Number number) {
649+
float val = number.floatValue();
650+
z = data -> val;
651+
} else if (zObj instanceof String string) {
652+
z = FunctionData.build(string, Double::floatValue);
653+
} else z = null;
654+
655+
if (wObj instanceof Number number) {
656+
float val = number.floatValue();
657+
w = data -> val;
658+
} else if (zObj instanceof String string) {
659+
w = FunctionData.build(string, Double::floatValue);
660+
} else w = null;
661+
662+
if (x == null || y == null || z == null || w == null) return data -> null;
663+
} else {
664+
return data -> null;
665+
}
600666

601-
Float qy = y.get(data);
602-
if (qy == null) return null;
667+
if (!checkNull(x) || !checkNull(y) || !checkNull(z) || !checkNull(w)) return data -> null;
603668

604-
Float qz = z.get(data);
605-
if (qz == null) return null;
669+
if (x.isConstant() && y.isConstant() && z.isConstant() && w.isConstant()) {
670+
Quaternionf rot = new Quaternionf(x.get(), y.get(), z.get(), w.get());
671+
return data -> rot;
672+
}
606673

607-
Float qw = w.get(data);
608-
if (qw == null) return null;
674+
return new ConfigData<>() {
609675

610-
return new Quaternionf(qx, qy, qz, qw);
611-
}
676+
@Override
677+
public Quaternionf get(@NotNull SpellData data) {
678+
Float qx = x.get(data);
679+
if (qx == null) return null;
612680

613-
@Override
614-
public boolean isConstant() {
615-
return false;
616-
}
681+
Float qy = y.get(data);
682+
if (qy == null) return null;
617683

618-
};
619-
}
684+
Float qz = z.get(data);
685+
if (qz == null) return null;
686+
687+
Float qw = w.get(data);
688+
if (qw == null) return null;
689+
690+
return new Quaternionf(qx, qy, qz, qw);
691+
}
692+
693+
@Override
694+
public boolean isConstant() {
695+
return false;
696+
}
697+
698+
};
620699

621-
return data -> null;
622700
}
623701

624702
private boolean checkNull(ConfigData<?> data) {

0 commit comments

Comments
 (0)