Skip to content

Commit 705ed5c

Browse files
Merge pull request #1067 from JasperLorelai/main
Particle Data
2 parents 1996743 + e773b4e commit 705ed5c

File tree

3 files changed

+81
-11
lines changed

3 files changed

+81
-11
lines changed

core/src/main/java/com/nisovin/magicspells/spelleffects/effecttypes/ParticlesEffect.java

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,13 @@ public class ParticlesEffect extends SpellEffect {
3232

3333
protected ConfigData<Particle> particle;
3434

35+
protected ConfigData<Color> rgbColor;
3536
protected ConfigData<Color> argbColor;
37+
3638
protected ConfigData<Material> material;
3739
protected ConfigData<BlockData> blockData;
3840
protected ConfigData<DustOptions> dustOptions;
41+
protected ConfigData<Particle.Spell> spellOptions;
3942
protected ConfigData<DustTransition> dustTransition;
4043

4144
protected ConfigData<Vector> vibrationOffset;
@@ -59,6 +62,7 @@ public class ParticlesEffect extends SpellEffect {
5962
protected ConfigData<Float> xSpread;
6063
protected ConfigData<Float> ySpread;
6164
protected ConfigData<Float> zSpread;
65+
protected ConfigData<Float> dragonBreathPower;
6266
protected ConfigData<Float> sculkChargeRotation;
6367

6468
protected ConfigData<Boolean> force;
@@ -68,11 +72,14 @@ public class ParticlesEffect extends SpellEffect {
6872
public void loadFromConfig(ConfigurationSection config) {
6973
particle = ConfigDataUtil.getParticle(config, "particle-name", Particle.POOF);
7074

71-
argbColor = ConfigDataUtil.getARGBColor(config, "argb-color", null);
75+
rgbColor = ConfigDataUtil.getColor(config, "color", null);
76+
argbColor = ConfigDataUtil.getARGBColor(config, "argb-color", null).orDefault(rgbColor);
77+
7278
material = ConfigDataUtil.getMaterial(config, "material", null);
7379
blockData = ConfigDataUtil.getBlockData(config, "material", null);
7480
dustOptions = ConfigDataUtil.getDustOptions(config, "color", "size", new DustOptions(Color.RED, 1));
7581
dustTransition = ConfigDataUtil.getDustTransition(config, "color", "to-color", "size", new DustTransition(Color.RED, Color.BLACK, 1));
82+
spellOptions = ConfigDataUtil.getSpellOptions(config, "spell.color", "spell.power", null);
7683

7784
vibrationOffset = ConfigDataUtil.getVector(config, "vibration-offset", new Vector());
7885
vibrationOrigin = ConfigDataUtil.getEnum(config, "vibration-origin", ParticlePosition.class, ParticlePosition.POSITION);
@@ -91,12 +98,14 @@ public void loadFromConfig(ConfigurationSection config) {
9198
arrivalTime = ConfigDataUtil.getInteger(config, "arrival-time", -1);
9299
shriekDelay = ConfigDataUtil.getInteger(config, "shriek-delay", 0);
93100

101+
dragonBreathPower = ConfigDataUtil.getFloat(config, "dragon-breath-power", 1);
102+
sculkChargeRotation = ConfigDataUtil.getFloat(config, "sculk-charge-rotation", 0);
103+
94104
speed = ConfigDataUtil.getFloat(config, "speed", 0.2f);
95105

96106
ConfigData<Float> horizSpread = ConfigDataUtil.getFloat(config, "horiz-spread", 0.2f);
97107
xSpread = ConfigDataUtil.getFloat(config, "x-spread", horizSpread);
98108
zSpread = ConfigDataUtil.getFloat(config, "z-spread", horizSpread);
99-
sculkChargeRotation = ConfigDataUtil.getFloat(config, "sculk-charge-rotation", 0);
100109

101110
ConfigData<Float> vertSpread = ConfigDataUtil.getFloat(config, "vert-spread", 0.2f);
102111
ySpread = ConfigDataUtil.getFloat(config, "y-spread", vertSpread);
@@ -149,6 +158,12 @@ public Runnable playEffectLocation(Location location, SpellData data) {
149158
protected Object getParticleData(@NotNull Particle particle, @Nullable Entity entity, @NotNull Location location, @NotNull SpellData data) {
150159
Class<?> type = particle.getDataType();
151160

161+
if (type == Color.class) {
162+
return particle == Particle.ENTITY_EFFECT ?
163+
argbColor.get(data) :
164+
rgbColor.get(data);
165+
}
166+
152167
if (type == ItemStack.class) {
153168
Material material = this.material.get(data);
154169
return material == null ? null : new ItemStack(material);
@@ -209,12 +224,15 @@ protected Object getParticleData(@NotNull Particle particle, @Nullable Entity en
209224

210225
if (type == BlockData.class) return blockData.get(data);
211226
if (type == DustOptions.class) return dustOptions.get(data);
227+
if (type == Particle.Spell.class) return spellOptions.get(data);
212228
if (type == DustTransition.class) return dustTransition.get(data);
213-
if (type == Float.class) return sculkChargeRotation.get(data);
214-
if (type == Integer.class) return shriekDelay.get(data);
215-
if (type == Color.class) return argbColor.get(data);
216229

217-
return null;
230+
return switch (particle) {
231+
case SHRIEK -> shriekDelay.get(data);
232+
case DRAGON_BREATH -> dragonBreathPower.get(data);
233+
case SCULK_CHARGE -> sculkChargeRotation.get(data);
234+
default -> null;
235+
};
218236
}
219237

220238
protected Location getSpawnLocation(@NotNull Particle particle, @NotNull Location position, @NotNull SpellData data) {

core/src/main/java/com/nisovin/magicspells/spells/targeted/ParticleCloudSpell.java

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,22 +32,28 @@ public class ParticleCloudSpell extends TargetedSpell implements TargetedLocatio
3232

3333
private final ConfigData<Component> customName;
3434

35-
private final ConfigData<Color> color;
35+
private final ConfigData<Color> rgbColor;
36+
private final ConfigData<Color> argbColor;
37+
3638
private final ConfigData<ItemStack> item;
3739
private final ConfigData<BlockData> blockData;
3840
private final ConfigData<DustOptions> dustOptions;
41+
private final ConfigData<Particle.Spell> spellOptions;
3942
private final ConfigData<DustTransition> dustTransition;
4043

4144
private final ConfigData<Particle> particle;
4245

4346
private final ConfigData<Integer> waitTime;
47+
private final ConfigData<Integer> shriekDelay;
4448
private final ConfigData<Integer> ticksDuration;
4549
private final ConfigData<Integer> durationOnUse;
4650
private final ConfigData<Integer> reapplicationDelay;
4751

4852
private final ConfigData<Float> radius;
4953
private final ConfigData<Float> radiusOnUse;
5054
private final ConfigData<Float> radiusPerTick;
55+
private final ConfigData<Float> dragonBreathPower;
56+
private final ConfigData<Float> sculkChargeRotation;
5157

5258
private final ConfigData<Boolean> useGravity;
5359
private final ConfigData<Boolean> canTargetEntities;
@@ -74,6 +80,7 @@ public ParticleCloudSpell(MagicConfig config, String spellName) {
7480
internalKey + "dust-transition.size",
7581
new DustTransition(Color.RED, Color.BLACK, 1)
7682
);
83+
spellOptions = ConfigDataUtil.getSpellOptions(config.getMainConfig(), internalKey + "spell.color", internalKey + "spell.power", null);
7784

7885
ConfigData<Material> material = getConfigDataMaterial("material", null);
7986
if (material.isConstant()) {
@@ -88,9 +95,14 @@ public ParticleCloudSpell(MagicConfig config, String spellName) {
8895
};
8996
}
9097

98+
shriekDelay = getConfigDataInt("shriek-delay", 0);
99+
100+
dragonBreathPower = getConfigDataFloat("dragon-breath-power", 1);
101+
sculkChargeRotation = getConfigDataFloat("sculk-charge-rotation", 0);
102+
91103
ConfigData<Integer> colorInt = getConfigDataInt("color", 0xFF0000);
92-
color = ConfigDataUtil.getARGBColor(config.getMainConfig(), internalKey + "argb-color", null)
93-
.orDefault(data -> Color.fromRGB(colorInt.get(data)));
104+
rgbColor = getConfigDataColor("color", null).orDefault(data -> Color.fromRGB(colorInt.get(data)));
105+
argbColor = ConfigDataUtil.getARGBColor(config.getMainConfig(), internalKey + "argb-color", null).orDefault(rgbColor);
94106

95107
waitTime = getConfigDataInt("wait-time-ticks", 10);
96108
ticksDuration = getConfigDataInt("duration-ticks", 3 * TimeUtil.TICKS_PER_SECOND);
@@ -184,13 +196,24 @@ private CastResult spawnCloud(SpellData data) {
184196
private Object getParticleData(@NotNull Particle particle, @NotNull SpellData data) {
185197
Class<?> type = particle.getDataType();
186198

187-
if (type == Color.class) return color.get(data);
188199
if (type == ItemStack.class) return item.get(data);
189200
if (type == BlockData.class) return blockData.get(data);
190201
if (type == DustOptions.class) return dustOptions.get(data);
202+
if (type == Particle.Spell.class) return spellOptions.get(data);
191203
if (type == DustTransition.class) return dustTransition.get(data);
192204

193-
return null;
205+
if (type == Color.class) {
206+
return particle == Particle.ENTITY_EFFECT ?
207+
argbColor.get(data) :
208+
rgbColor.get(data);
209+
}
210+
211+
return switch (particle) {
212+
case SHRIEK -> shriekDelay.get(data);
213+
case DRAGON_BREATH -> dragonBreathPower.get(data);
214+
case SCULK_CHARGE -> sculkChargeRotation.get(data);
215+
default -> null;
216+
};
194217
}
195218

196219
}

core/src/main/java/com/nisovin/magicspells/util/config/ConfigDataUtil.java

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1151,6 +1151,35 @@ public boolean isConstant() {
11511151
return data -> def;
11521152
}
11531153

1154+
@NotNull
1155+
public static ConfigData<Particle.Spell> getSpellOptions(@NotNull ConfigurationSection config,
1156+
@NotNull String colorPath,
1157+
@NotNull String powerPath,
1158+
@Nullable Particle.Spell def) {
1159+
ConfigData<Color> color = getColor(config, colorPath, def == null ? null : def.getColor());
1160+
ConfigData<Float> power = def == null ? getFloat(config, powerPath) : getFloat(config, powerPath, def.getPower());
1161+
1162+
if (color.isConstant() && power.isConstant()) {
1163+
Color c = color.get();
1164+
if (c == null) return data -> def;
1165+
1166+
Float p = power.get();
1167+
if (p == null) return data -> def;
1168+
1169+
return data -> new Particle.Spell(c, p);
1170+
}
1171+
1172+
return (VariableConfigData<Particle.Spell>) data -> {
1173+
Color c = color.get(data);
1174+
if (c == null) return def;
1175+
1176+
Float p = power.get(data);
1177+
if (p == null) return def;
1178+
1179+
return new Particle.Spell(c, p);
1180+
};
1181+
}
1182+
11541183
@NotNull
11551184
public static ConfigData<DustOptions> getDustOptions(@NotNull ConfigurationSection config,
11561185
@NotNull String colorPath,

0 commit comments

Comments
 (0)