diff --git a/src/main/generated/.cache/6f5192c797375035190f7e885b8d5d4aa840c2f5 b/src/main/generated/.cache/6f5192c797375035190f7e885b8d5d4aa840c2f5 new file mode 100644 index 0000000..b3182f4 --- /dev/null +++ b/src/main/generated/.cache/6f5192c797375035190f7e885b8d5d4aa840c2f5 @@ -0,0 +1,2 @@ +// 1.21.1 2024-09-29T04:05:48.3198307 Custom Enchants/Enchantment Generator +4e507987cd1905de26693915dff86bcadec7e9a0 data\customenchants\enchantment\thundering.json diff --git a/src/main/generated/data/customenchants/enchantment/thundering.json b/src/main/generated/data/customenchants/enchantment/thundering.json new file mode 100644 index 0000000..b6aced2 --- /dev/null +++ b/src/main/generated/data/customenchants/enchantment/thundering.json @@ -0,0 +1,36 @@ +{ + "anvil_cost": 7, + "description": { + "translate": "enchantment.customenchants.thundering" + }, + "effects": { + "minecraft:post_attack": [ + { + "affected": "victim", + "effect": { + "type": "customenchants:lightning", + "amount": { + "type": "minecraft:linear", + "base": 0.5, + "per_level_above_first": 0.15 + } + }, + "enchanted": "attacker" + } + ] + }, + "max_cost": { + "base": 1, + "per_level_above_first": 15 + }, + "max_level": 5, + "min_cost": { + "base": 1, + "per_level_above_first": 10 + }, + "slots": [ + "hand" + ], + "supported_items": "#minecraft:enchantable/sword", + "weight": 15 +} \ No newline at end of file diff --git a/src/main/java/com/itzilly/enchantments/effects/LightningEnchantmentEffect.java b/src/main/java/com/itzilly/enchantments/effects/LightningEnchantmentEffect.java new file mode 100644 index 0000000..6abf3b3 --- /dev/null +++ b/src/main/java/com/itzilly/enchantments/effects/LightningEnchantmentEffect.java @@ -0,0 +1,38 @@ +package com.itzilly.enchantments.effects; + +import com.mojang.serialization.MapCodec; +import com.mojang.serialization.codecs.RecordCodecBuilder; +import net.minecraft.enchantment.EnchantmentEffectContext; +import net.minecraft.enchantment.EnchantmentLevelBasedValue; +import net.minecraft.enchantment.effect.EnchantmentEntityEffect; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityType; +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.SpawnReason; +import net.minecraft.server.world.ServerWorld; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Vec3d; + +public record LightningEnchantmentEffect(EnchantmentLevelBasedValue amount) implements EnchantmentEntityEffect { + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec( + instance -> instance.group( + EnchantmentLevelBasedValue.CODEC.fieldOf("amount").forGetter(LightningEnchantmentEffect::amount) + ).apply(instance, LightningEnchantmentEffect::new)); + + @Override + public void apply(ServerWorld world, int level, EnchantmentEffectContext context, Entity target, Vec3d pos) { + if(target instanceof LivingEntity living) { + float numberOfStrikes = this.amount.getValue(level); + + BlockPos targetPosition = living.getBlockPos(); + for (int i = 0; i < numberOfStrikes; i++) { + EntityType.LIGHTNING_BOLT.spawn(world, targetPosition, SpawnReason.TRIGGERED); + } + } + } + + @Override + public MapCodec getCodec() { + return CODEC; + } +} \ No newline at end of file