Skip to content

Commit 98f1938

Browse files
committed
Added vitium spell effect
1 parent 0a27ce4 commit 98f1938

File tree

3 files changed

+87
-2
lines changed

3 files changed

+87
-2
lines changed

src/main/java/dev/overgrown/thaumaturge/Thaumaturge.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import dev.overgrown.thaumaturge.spell.impl.ignis.IgnisEffect;
77
import dev.overgrown.thaumaturge.spell.impl.motus.MotusEffect;
88
import dev.overgrown.thaumaturge.spell.impl.victus.VictusEffect;
9+
import dev.overgrown.thaumaturge.spell.impl.vitium.VitiumEffect;
910
import dev.overgrown.thaumaturge.spell.modifier.ModifierRegistry;
1011
import dev.overgrown.thaumaturge.spell.modifier.PowerModifierEffect;
1112
import dev.overgrown.thaumaturge.spell.modifier.ScatterModifierEffect;
@@ -46,10 +47,11 @@ private void registerAspectEffects() {
4647
AspectRegistry.register(AspectsLib.identifier("ignis"), new IgnisEffect());
4748
AspectRegistry.register(AspectsLib.identifier("motus"), new MotusEffect());
4849
AspectRegistry.register(AspectsLib.identifier("victus"), new VictusEffect());
50+
AspectRegistry.register(AspectsLib.identifier("vitium"), new VitiumEffect());
4951
}
5052

5153
private void registerModifierEffects() {
5254
ModifierRegistry.register(identifier("power"), new PowerModifierEffect());
5355
ModifierRegistry.register(identifier("scatter"), new ScatterModifierEffect());
5456
}
55-
}
57+
}
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
package dev.overgrown.thaumaturge.spell.impl.vitium;
2+
3+
import dev.overgrown.thaumaturge.spell.pattern.AspectEffect;
4+
import dev.overgrown.thaumaturge.spell.modifier.ModifierEffect;
5+
import dev.overgrown.thaumaturge.spell.modifier.PowerModifierEffect;
6+
import dev.overgrown.thaumaturge.spell.tier.*;
7+
import net.minecraft.entity.LivingEntity;
8+
import net.minecraft.entity.damage.DamageSource;
9+
import net.minecraft.entity.damage.DamageTypes;
10+
import net.minecraft.server.network.ServerPlayerEntity;
11+
import net.minecraft.util.math.Box;
12+
import net.minecraft.util.math.Vec3d;
13+
14+
import java.util.List;
15+
16+
public class VitiumEffect implements AspectEffect {
17+
18+
private static final float BASE_DAMAGE = 3.0f;
19+
private static final float AOE_RADIUS = 3.0f;
20+
private static final float CASTER_DAMAGE_CHANCE = 0.1f; // 10% chance
21+
22+
@Override
23+
public void applySelf(SelfSpellDelivery delivery) {
24+
ServerPlayerEntity caster = delivery.getCaster();
25+
float damageAmount = calculateDamage(delivery.getModifiers());
26+
applyMagicDamage(caster, caster, damageAmount);
27+
}
28+
29+
@Override
30+
public void applyTargeted(TargetedSpellDelivery delivery) {
31+
if (delivery.isEntityTarget() && delivery.getTargetEntity() instanceof LivingEntity target) {
32+
float damageAmount = calculateDamage(delivery.getModifiers());
33+
applyMagicDamage(target, delivery.getCaster(), damageAmount);
34+
}
35+
}
36+
37+
@Override
38+
public void applyAoe(AoeSpellDelivery delivery) {
39+
ServerPlayerEntity caster = delivery.getCaster();
40+
Vec3d center = Vec3d.ofCenter(delivery.getCenter());
41+
float damageAmount = calculateDamage(delivery.getModifiers());
42+
43+
// Get entities in sphere around caster
44+
Box box = new Box(
45+
center.getX() - AOE_RADIUS, center.getY() - AOE_RADIUS, center.getZ() - AOE_RADIUS,
46+
center.getX() + AOE_RADIUS, center.getY() + AOE_RADIUS, center.getZ() + AOE_RADIUS
47+
);
48+
49+
List<LivingEntity> entities = delivery.getWorld().getEntitiesByClass(
50+
LivingEntity.class, box,
51+
entity -> entity != caster && entity.isAlive()
52+
);
53+
54+
// Damage all entities in AOE
55+
for (LivingEntity entity : entities) {
56+
applyMagicDamage(entity, caster, damageAmount);
57+
}
58+
59+
// 10% chance to damage caster
60+
if (delivery.getWorld().random.nextFloat() < CASTER_DAMAGE_CHANCE) {
61+
applyMagicDamage(caster, caster, damageAmount);
62+
}
63+
}
64+
65+
private float calculateDamage(List<ModifierEffect> modifiers) {
66+
float damage = BASE_DAMAGE;
67+
for (ModifierEffect mod : modifiers) {
68+
if (mod instanceof PowerModifierEffect powerMod) {
69+
damage *= powerMod.getMultiplier();
70+
}
71+
}
72+
return damage;
73+
}
74+
75+
private void applyMagicDamage(LivingEntity target, ServerPlayerEntity source, float amount) {
76+
DamageSource damageSource = source.getWorld().getDamageSources().create(DamageTypes.MAGIC, source);
77+
target.damage(damageSource, amount);
78+
}
79+
}

src/main/resources/assets/thaumaturge/lang/en_us.json

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,5 +14,9 @@
1414
"item.thaumaturge.aspect_lens": "Aspect Lens",
1515
"item.thaumaturge.aspect_lens.tooltip": "Reveals the hidden aspects of items",
1616
"item.thaumaturge.aetheric_goggles": "Aetheric Goggles",
17-
"item.thaumaturge.aetheric_goggles.tooltip": "Reveals aspects of the world when worn"
17+
"item.thaumaturge.aetheric_goggles.tooltip": "Reveals aspects of the world when worn",
18+
19+
"item.thaumaturge.lesser_focus": "Lesser Focus",
20+
"item.thaumaturge.advanced_focus": "Advanced Focus",
21+
"item.thaumaturge.greater_focus": "Greater Focus"
1822
}

0 commit comments

Comments
 (0)