From dffdb168ac05098c0cc3a845422af97e9bc6dd11 Mon Sep 17 00:00:00 2001 From: patience Date: Sun, 22 Feb 2026 00:16:10 +0000 Subject: [PATCH] Added Smack effect --- .../mc_rebalance/ModEnchantments.java | 2 + .../enchantment/effect/SmackEffect.java | 37 +++++++++++++++++++ 2 files changed, 39 insertions(+) create mode 100644 src/main/java/xyz/nearmisses/patience/mc_rebalance/enchantment/effect/SmackEffect.java diff --git a/src/main/java/xyz/nearmisses/patience/mc_rebalance/ModEnchantments.java b/src/main/java/xyz/nearmisses/patience/mc_rebalance/ModEnchantments.java index c38c522..c37d9bd 100644 --- a/src/main/java/xyz/nearmisses/patience/mc_rebalance/ModEnchantments.java +++ b/src/main/java/xyz/nearmisses/patience/mc_rebalance/ModEnchantments.java @@ -8,6 +8,7 @@ import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.enchantment.Enchantment; import net.minecraft.world.item.enchantment.effects.EnchantmentEntityEffect; +import xyz.nearmisses.patience.mc_rebalance.enchantment.effect.SmackEffect; import xyz.nearmisses.patience.mc_rebalance.enchantment.effect.WindupEffect; // Copied off the Fabric wiki. I don't think I like this code. @@ -15,6 +16,7 @@ public class ModEnchantments { public static final ResourceKey Windup = of("windup"); public static MapCodec Effect_Windup = register("windup_effect", WindupEffect.CODEC); + public static MapCodec Effect_Smack = register("smack_effect", SmackEffect.CODEC); private static ResourceKey of(String path) { ResourceLocation id = ResourceLocation.fromNamespaceAndPath(MCRebalance.MOD_ID, path); diff --git a/src/main/java/xyz/nearmisses/patience/mc_rebalance/enchantment/effect/SmackEffect.java b/src/main/java/xyz/nearmisses/patience/mc_rebalance/enchantment/effect/SmackEffect.java new file mode 100644 index 0000000..887126d --- /dev/null +++ b/src/main/java/xyz/nearmisses/patience/mc_rebalance/enchantment/effect/SmackEffect.java @@ -0,0 +1,37 @@ +package xyz.nearmisses.patience.mc_rebalance.enchantment.effect; + +import com.mojang.serialization.MapCodec; +import com.mojang.serialization.codecs.RecordCodecBuilder; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.Items; +import net.minecraft.world.item.enchantment.EnchantedItemInUse; +import net.minecraft.world.item.enchantment.LevelBasedValue; +import net.minecraft.world.item.enchantment.effects.EnchantmentEntityEffect; +import net.minecraft.world.phys.Vec3; +import org.jetbrains.annotations.NotNull; + +public record SmackEffect(LevelBasedValue amount) implements EnchantmentEntityEffect { + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(instance -> + instance.group( + LevelBasedValue.CODEC.fieldOf("amount").forGetter(SmackEffect::amount) + ).apply(instance, SmackEffect::new) + ); + + @Override + public void apply(ServerLevel world, int level, EnchantedItemInUse context, Entity target, Vec3 pos) { + /*boolean playerAndCharged; + if(context.owner()!=null && context.owner() instanceof Player player && player){ + playerAndCharged=true; + }*/ + if (context.owner() != null && target instanceof Player player && player.getInventory().getArmor(1).is(Items.ELYTRA)) { + player.getCooldowns().addCooldown(Items.ELYTRA, (int)(20 * this.amount.calculate(level)) ); // Tick conversion + } + } + + @Override + public @NotNull MapCodec codec() { + return CODEC; + } +}