Skip to content

Commit e138353

Browse files
committed
Add enchantment effects that trigger melee weapon callbacks.
1 parent 954fb91 commit e138353

File tree

4 files changed

+88
-6
lines changed

4 files changed

+88
-6
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package com.provismet.CombatPlusCore.enchantment.effect.doubleEntity;
2+
3+
import com.mojang.serialization.MapCodec;
4+
import com.provismet.CombatPlusCore.enchantment.effect.CPCEnchantmentEntityEffect;
5+
import com.provismet.CombatPlusCore.interfaces.MeleeWeapon;
6+
import net.minecraft.enchantment.EnchantmentEffectContext;
7+
import net.minecraft.entity.Entity;
8+
import net.minecraft.entity.LivingEntity;
9+
import net.minecraft.server.world.ServerWorld;
10+
11+
public record WeaponPostCharged () implements CPCEnchantmentEntityEffect {
12+
public static final MapCodec<WeaponPostCharged> CODEC = MapCodec.unit(WeaponPostCharged::new);
13+
14+
@Override
15+
public void apply (ServerWorld world, int level, EnchantmentEffectContext context, Entity attacker, Entity target) {
16+
if (attacker instanceof LivingEntity livingAttacker && target instanceof LivingEntity livingTarget) {
17+
if (context.stack().getItem() instanceof MeleeWeapon meleeWeapon)
18+
meleeWeapon.postChargedHit(context.stack(), livingAttacker, livingTarget);
19+
else if (attacker.getWeaponStack().getItem() instanceof MeleeWeapon meleeWeapon)
20+
meleeWeapon.postChargedHit(attacker.getWeaponStack(), livingAttacker, livingTarget);
21+
}
22+
}
23+
24+
@Override
25+
public MapCodec<? extends CPCEnchantmentEntityEffect> getCodec () {
26+
return CODEC;
27+
}
28+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package com.provismet.CombatPlusCore.enchantment.effect.doubleEntity;
2+
3+
import com.mojang.serialization.MapCodec;
4+
import com.provismet.CombatPlusCore.enchantment.effect.CPCEnchantmentEntityEffect;
5+
import com.provismet.CombatPlusCore.interfaces.MeleeWeapon;
6+
import net.minecraft.enchantment.EnchantmentEffectContext;
7+
import net.minecraft.entity.Entity;
8+
import net.minecraft.entity.LivingEntity;
9+
import net.minecraft.server.world.ServerWorld;
10+
11+
public record WeaponPostCritical () implements CPCEnchantmentEntityEffect {
12+
public static final MapCodec<WeaponPostCritical> CODEC = MapCodec.unit(WeaponPostCritical::new);
13+
14+
@Override
15+
public void apply (ServerWorld world, int level, EnchantmentEffectContext context, Entity attacker, Entity target) {
16+
if (attacker instanceof LivingEntity livingAttacker && target instanceof LivingEntity livingTarget) {
17+
if (context.stack().getItem() instanceof MeleeWeapon meleeWeapon)
18+
meleeWeapon.postCriticalHit(context.stack(), livingAttacker, livingTarget);
19+
else if (attacker.getWeaponStack().getItem() instanceof MeleeWeapon meleeWeapon)
20+
meleeWeapon.postCriticalHit(attacker.getWeaponStack(), livingAttacker, livingTarget);
21+
}
22+
}
23+
24+
@Override
25+
public MapCodec<? extends CPCEnchantmentEntityEffect> getCodec () {
26+
return CODEC;
27+
}
28+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package com.provismet.CombatPlusCore.enchantment.effect.doubleEntity;
2+
3+
import com.mojang.serialization.MapCodec;
4+
import com.provismet.CombatPlusCore.enchantment.effect.CPCEnchantmentEntityEffect;
5+
import com.provismet.CombatPlusCore.interfaces.MeleeWeapon;
6+
import net.minecraft.enchantment.EnchantmentEffectContext;
7+
import net.minecraft.entity.Entity;
8+
import net.minecraft.entity.LivingEntity;
9+
import net.minecraft.server.world.ServerWorld;
10+
11+
public record WeaponPostKill () implements CPCEnchantmentEntityEffect {
12+
public static final MapCodec<WeaponPostKill> CODEC = MapCodec.unit(WeaponPostKill::new);
13+
14+
@Override
15+
public void apply (ServerWorld world, int level, EnchantmentEffectContext context, Entity attacker, Entity target) {
16+
if (attacker instanceof LivingEntity livingAttacker && target instanceof LivingEntity livingTarget) {
17+
if (context.stack().getItem() instanceof MeleeWeapon meleeWeapon)
18+
meleeWeapon.postKill(context.stack(), livingAttacker, livingTarget);
19+
else if (attacker.getWeaponStack().getItem() instanceof MeleeWeapon meleeWeapon)
20+
meleeWeapon.postKill(attacker.getWeaponStack(), livingAttacker, livingTarget);
21+
}
22+
}
23+
24+
@Override
25+
public MapCodec<? extends CPCEnchantmentEntityEffect> getCodec () {
26+
return CODEC;
27+
}
28+
}

src/main/java/com/provismet/CombatPlusCore/registries/CPCEnchantmentDoubleEntityEffects.java

+4-6
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,7 @@
33
import com.mojang.serialization.MapCodec;
44
import com.provismet.CombatPlusCore.CPCMain;
55
import com.provismet.CombatPlusCore.enchantment.effect.CPCEnchantmentEntityEffect;
6-
import com.provismet.CombatPlusCore.enchantment.effect.doubleEntity.ApplyToBothEntityEnchantmentEffect;
7-
import com.provismet.CombatPlusCore.enchantment.effect.doubleEntity.ApplyKnockbackEnchantmentEffect;
8-
import com.provismet.CombatPlusCore.enchantment.effect.doubleEntity.ApplyToTargetEntityEnchantmentEffect;
9-
import com.provismet.CombatPlusCore.enchantment.effect.doubleEntity.ApplyToUserEntityEnchantmentEffect;
10-
import com.provismet.CombatPlusCore.enchantment.effect.doubleEntity.CodeExecutionDoubleEntityEnchantmentEffect;
11-
import com.provismet.CombatPlusCore.enchantment.effect.doubleEntity.InvertedEntityEnchantmentEffect;
6+
import com.provismet.CombatPlusCore.enchantment.effect.doubleEntity.*;
127
import com.provismet.CombatPlusCore.utility.CPCRegistries;
138
import net.minecraft.registry.Registry;
149

@@ -20,6 +15,9 @@ public static void register () {
2015
register("apply_to_both", ApplyToBothEntityEnchantmentEffect.CODEC);
2116
register("invert", InvertedEntityEnchantmentEffect.CODEC);
2217
register("apply_knockback", ApplyKnockbackEnchantmentEffect.CODEC);
18+
register("weapon_post_charged_attack", WeaponPostCharged.CODEC);
19+
register("weapon_post_critical_attack", WeaponPostCritical.CODEC);
20+
register("weapon_post_kill", WeaponPostKill.CODEC);
2321
}
2422

2523
private static <T extends CPCEnchantmentEntityEffect> void register (String name, MapCodec<T> codec) {

0 commit comments

Comments
 (0)