From 6c6d7e72879e1c731bb8b1deef2adfa8b263b5a4 Mon Sep 17 00:00:00 2001 From: angel Date: Thu, 8 Jan 2026 21:30:19 -0600 Subject: [PATCH] workflow --- .github/workflows/build.yml | 40 ++++++ .../MoreSpearEnchantments.java | 15 --- .../enchantment/ModEnchantmentEffects.java | 45 ------- .../effect/CripplingEnchantmentEffect.java | 53 -------- .../effect/LightningEnchantmentEffect.java | 42 ------ .../effect/PoisonEnchantmentEffect.java | 46 ------- .../effect/WitheringEnchantmentEffect.java | 46 ------- .../MoreSpearEnchantmentsDataGenerator.java | 16 --- .../fabric/MoreSpearEnchantmentsFabric.java | 13 -- .../MoreSpearEnchantmentsFabricClient.java | 10 -- .../fabric/datagen/ModItemTagProvider.java | 29 ----- .../enchantment/ModEnchantmentEffects.java | 39 ------ .../enchantment/ModEnchantmentGenerator.java | 120 ------------------ .../effect/CripplingEnchantmentEffect.java | 52 -------- .../effect/LightningEnchantmentEffect.java | 43 ------- .../effect/PoisonEnchantmentEffect.java | 45 ------- .../effect/WitheringEnchantmentEffect.java | 46 ------- .../fabric/mixin/ExampleMixin.java | 15 --- .../MoreSpearEnchantmentsNeoForge.java | 0 .../more_spear_enchantments/util/ModTags.java | 25 ---- arch/fabric.mod.json | 46 ------- arch/icon.png | 0 arch/neoforge.mods.toml | 38 ------ .../more_spear_enchantments/Config.java | 50 +------- .../MoreSpearEnchantments.java | 118 ++--------------- .../enchantment/ModEnchantmentEffects.java | 26 ++++ .../effect/CripplingEnchantmentEffect.java | 52 ++++++++ .../effect/LightningEnchantmentEffect.java | 43 +++++++ .../effect/PoisonEnchantmentEffect.java | 45 +++++++ .../effect/WitheringEnchantmentEffect.java | 46 +++++++ .../enchantment/crippling.json | 0 .../enchantment/poisoning.json | 0 .../enchantment/thundering.json | 0 .../enchantment/withering.json | 0 .../tags/item/spears.json | 0 35 files changed, 266 insertions(+), 938 deletions(-) create mode 100644 .github/workflows/build.yml delete mode 100644 arch/dev/sillyangel/more_spear_enchantments/MoreSpearEnchantments.java delete mode 100644 arch/dev/sillyangel/more_spear_enchantments/enchantment/ModEnchantmentEffects.java delete mode 100644 arch/dev/sillyangel/more_spear_enchantments/enchantment/effect/CripplingEnchantmentEffect.java delete mode 100644 arch/dev/sillyangel/more_spear_enchantments/enchantment/effect/LightningEnchantmentEffect.java delete mode 100644 arch/dev/sillyangel/more_spear_enchantments/enchantment/effect/PoisonEnchantmentEffect.java delete mode 100644 arch/dev/sillyangel/more_spear_enchantments/enchantment/effect/WitheringEnchantmentEffect.java delete mode 100644 arch/dev/sillyangel/more_spear_enchantments/fabric/MoreSpearEnchantmentsDataGenerator.java delete mode 100644 arch/dev/sillyangel/more_spear_enchantments/fabric/MoreSpearEnchantmentsFabric.java delete mode 100644 arch/dev/sillyangel/more_spear_enchantments/fabric/client/MoreSpearEnchantmentsFabricClient.java delete mode 100644 arch/dev/sillyangel/more_spear_enchantments/fabric/datagen/ModItemTagProvider.java delete mode 100644 arch/dev/sillyangel/more_spear_enchantments/fabric/enchantment/ModEnchantmentEffects.java delete mode 100644 arch/dev/sillyangel/more_spear_enchantments/fabric/enchantment/ModEnchantmentGenerator.java delete mode 100644 arch/dev/sillyangel/more_spear_enchantments/fabric/enchantment/effect/CripplingEnchantmentEffect.java delete mode 100644 arch/dev/sillyangel/more_spear_enchantments/fabric/enchantment/effect/LightningEnchantmentEffect.java delete mode 100644 arch/dev/sillyangel/more_spear_enchantments/fabric/enchantment/effect/PoisonEnchantmentEffect.java delete mode 100644 arch/dev/sillyangel/more_spear_enchantments/fabric/enchantment/effect/WitheringEnchantmentEffect.java delete mode 100644 arch/dev/sillyangel/more_spear_enchantments/fabric/mixin/ExampleMixin.java delete mode 100644 arch/dev/sillyangel/more_spear_enchantments/neoforge/MoreSpearEnchantmentsNeoForge.java delete mode 100644 arch/dev/sillyangel/more_spear_enchantments/util/ModTags.java delete mode 100644 arch/fabric.mod.json delete mode 100644 arch/icon.png delete mode 100644 arch/neoforge.mods.toml create mode 100644 src/main/java/dev/sillyangel/more_spear_enchantments/enchantment/ModEnchantmentEffects.java create mode 100644 src/main/java/dev/sillyangel/more_spear_enchantments/enchantment/effect/CripplingEnchantmentEffect.java create mode 100644 src/main/java/dev/sillyangel/more_spear_enchantments/enchantment/effect/LightningEnchantmentEffect.java create mode 100644 src/main/java/dev/sillyangel/more_spear_enchantments/enchantment/effect/PoisonEnchantmentEffect.java create mode 100644 src/main/java/dev/sillyangel/more_spear_enchantments/enchantment/effect/WitheringEnchantmentEffect.java rename src/main/resources/{assets => data}/more_spear_enchantments/enchantment/crippling.json (100%) rename src/main/resources/{assets => data}/more_spear_enchantments/enchantment/poisoning.json (100%) rename src/main/resources/{assets => data}/more_spear_enchantments/enchantment/thundering.json (100%) rename src/main/resources/{assets => data}/more_spear_enchantments/enchantment/withering.json (100%) rename src/main/resources/{assets => data}/more_spear_enchantments/tags/item/spears.json (100%) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..d7d7524 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,40 @@ +name: Build Mod + +on: + push: + branches: [ "master", "main", "develop" ] + pull_request: + branches: [ "master", "main" ] + workflow_dispatch: + +jobs: + build: + runs-on: ubuntu-24.04 + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Set up JDK 21 + uses: actions/setup-java@v4 + with: + java-version: '21' + distribution: 'temurin' + cache: gradle + + - name: Grant execute permission for gradlew + run: chmod +x gradlew + + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v3 + + - name: Build with Gradle + run: ./gradlew build --no-daemon + + - name: Upload build artifacts + uses: actions/upload-artifact@v4 + with: + name: more_spear_enchantments-${{ github.sha }} + path: build/libs/*.jar + retention-days: 30 + diff --git a/arch/dev/sillyangel/more_spear_enchantments/MoreSpearEnchantments.java b/arch/dev/sillyangel/more_spear_enchantments/MoreSpearEnchantments.java deleted file mode 100644 index 13ea333..0000000 --- a/arch/dev/sillyangel/more_spear_enchantments/MoreSpearEnchantments.java +++ /dev/null @@ -1,15 +0,0 @@ -package dev.sillyangel.more_spear_enchantments; - -import dev.sillyangel.more_spear_enchantments.enchantment.ModEnchantmentEffects; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public final class MoreSpearEnchantments { - public static final String MOD_ID = "more_spear_enchantments"; - public static final Logger LOGGER = LoggerFactory.getLogger(MOD_ID); - - public static void init() { - LOGGER.info("Initializing More Spear Enchantments"); - ModEnchantmentEffects.registerModEnchantmentEffects(); - } -} diff --git a/arch/dev/sillyangel/more_spear_enchantments/enchantment/ModEnchantmentEffects.java b/arch/dev/sillyangel/more_spear_enchantments/enchantment/ModEnchantmentEffects.java deleted file mode 100644 index 4a8f562..0000000 --- a/arch/dev/sillyangel/more_spear_enchantments/enchantment/ModEnchantmentEffects.java +++ /dev/null @@ -1,45 +0,0 @@ -package dev.sillyangel.more_spear_enchantments.enchantment; - -import com.mojang.serialization.MapCodec; -import dev.architectury.registry.registries.DeferredRegister; -import dev.architectury.registry.registries.RegistrySupplier; -import dev.sillyangel.more_spear_enchantments.MoreSpearEnchantments; -import dev.sillyangel.more_spear_enchantments.enchantment.effect.*; -import net.minecraft.enchantment.Enchantment; -import net.minecraft.enchantment.effect.EnchantmentEntityEffect; -import net.minecraft.registry.RegistryKey; -import net.minecraft.registry.RegistryKeys; -import net.minecraft.util.Identifier; - -public class ModEnchantmentEffects { - // Deferred register for enchantment effect types - public static final DeferredRegister> ENCHANTMENT_ENTITY_EFFECTS = - DeferredRegister.create(MoreSpearEnchantments.MOD_ID, RegistryKeys.ENCHANTMENT_ENTITY_EFFECT_TYPE); - - // Enchantment registry keys - public static final RegistryKey THUNDERING = of("thundering"); - public static final RegistryKey WITHERING = of("withering"); - public static final RegistryKey POISONING = of("poisoning"); - public static final RegistryKey CRIPPLING = of("crippling"); - - // Register enchantment effect types - public static final RegistrySupplier> LIGHTNING_EFFECT = - ENCHANTMENT_ENTITY_EFFECTS.register("lightning", () -> LightningEnchantmentEffect.CODEC); - public static final RegistrySupplier> POISON_EFFECT = - ENCHANTMENT_ENTITY_EFFECTS.register("poison", () -> PoisonEnchantmentEffect.CODEC); - public static final RegistrySupplier> WITHERING_EFFECT = - ENCHANTMENT_ENTITY_EFFECTS.register("withering", () -> WitheringEnchantmentEffect.CODEC); - public static final RegistrySupplier> CRIPPLING_EFFECT = - ENCHANTMENT_ENTITY_EFFECTS.register("crippling", () -> CripplingEnchantmentEffect.CODEC); - - private static RegistryKey of(String path) { - Identifier id = Identifier.of(MoreSpearEnchantments.MOD_ID, path); - return RegistryKey.of(RegistryKeys.ENCHANTMENT, id); - } - - public static void registerModEnchantmentEffects() { - MoreSpearEnchantments.LOGGER.info("Registering EnchantmentEffects for " + MoreSpearEnchantments.MOD_ID); - ENCHANTMENT_ENTITY_EFFECTS.register(); - } -} - diff --git a/arch/dev/sillyangel/more_spear_enchantments/enchantment/effect/CripplingEnchantmentEffect.java b/arch/dev/sillyangel/more_spear_enchantments/enchantment/effect/CripplingEnchantmentEffect.java deleted file mode 100644 index 44d33ee..0000000 --- a/arch/dev/sillyangel/more_spear_enchantments/enchantment/effect/CripplingEnchantmentEffect.java +++ /dev/null @@ -1,53 +0,0 @@ -package dev.sillyangel.more_spear_enchantments.enchantment.effect; - -import com.mojang.serialization.MapCodec; -import com.mojang.serialization.codecs.RecordCodecBuilder; -import net.minecraft.server.world.ServerWorld; -import net.minecraft.entity.Entity; -import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.effect.StatusEffectInstance; -import net.minecraft.entity.effect.StatusEffects; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.enchantment.EnchantmentEffectContext; -import net.minecraft.enchantment.EnchantmentLevelBasedValue; -import net.minecraft.enchantment.effect.EnchantmentEntityEffect; -import net.minecraft.util.math.Vec3d; - -public record CripplingEnchantmentEffect(EnchantmentLevelBasedValue duration) implements EnchantmentEntityEffect { - public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(instance -> - instance.group( - EnchantmentLevelBasedValue.CODEC.fieldOf("duration").forGetter(CripplingEnchantmentEffect::duration) - ).apply(instance, CripplingEnchantmentEffect::new) - ); - - @Override - public void apply(ServerWorld world, int level, EnchantmentEffectContext context, Entity target, Vec3d pos) { - if (target instanceof LivingEntity victim) { - if (context.owner() != null && context.owner() instanceof PlayerEntity player) { - int Duration = (int) (this.duration.getValue(level) * 50); // Convert to ticks - int slownessAmplifier = level - 1; // Level 1 = Slowness 0, Level 2 = Slowness I, Level 3 = Slowness II - int weaknessAmplifier = level - 1; // Level 1 = Weakness 0, Level 2 = Weakness I, Level 3 = Weakness II - victim.addStatusEffect(new StatusEffectInstance( - StatusEffects.SLOWNESS, - Duration, - slownessAmplifier, - false, - true - )); - victim.addStatusEffect(new StatusEffectInstance( - StatusEffects.WEAKNESS, - Duration, - weaknessAmplifier, - false, - true - )); - } - } - } - - @Override - public MapCodec getCodec() { - return CODEC; - } -} - diff --git a/arch/dev/sillyangel/more_spear_enchantments/enchantment/effect/LightningEnchantmentEffect.java b/arch/dev/sillyangel/more_spear_enchantments/enchantment/effect/LightningEnchantmentEffect.java deleted file mode 100644 index 4e3a186..0000000 --- a/arch/dev/sillyangel/more_spear_enchantments/enchantment/effect/LightningEnchantmentEffect.java +++ /dev/null @@ -1,42 +0,0 @@ -package dev.sillyangel.more_spear_enchantments.enchantment.effect; - -import com.mojang.serialization.MapCodec; -import com.mojang.serialization.codecs.RecordCodecBuilder; -import net.minecraft.util.math.BlockPos; -import net.minecraft.server.world.ServerWorld; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityType; -import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.SpawnReason; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.enchantment.EnchantmentEffectContext; -import net.minecraft.enchantment.EnchantmentLevelBasedValue; -import net.minecraft.enchantment.effect.EnchantmentEntityEffect; -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 victim) { - if (context.owner() != null && context.owner() instanceof PlayerEntity player) { - float numStrikes = this.amount.getValue(level); - - for (float i = 0; i < numStrikes; i++) { - BlockPos position = victim.getBlockPos(); - EntityType.LIGHTNING_BOLT.spawn(world, position, SpawnReason.TRIGGERED); - } - } - } - } - - @Override - public MapCodec getCodec() { - return CODEC; - } -} diff --git a/arch/dev/sillyangel/more_spear_enchantments/enchantment/effect/PoisonEnchantmentEffect.java b/arch/dev/sillyangel/more_spear_enchantments/enchantment/effect/PoisonEnchantmentEffect.java deleted file mode 100644 index 69fc2a3..0000000 --- a/arch/dev/sillyangel/more_spear_enchantments/enchantment/effect/PoisonEnchantmentEffect.java +++ /dev/null @@ -1,46 +0,0 @@ -package dev.sillyangel.more_spear_enchantments.enchantment.effect; - -import com.mojang.serialization.MapCodec; -import com.mojang.serialization.codecs.RecordCodecBuilder; -import net.minecraft.server.world.ServerWorld; -import net.minecraft.entity.Entity; -import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.effect.StatusEffectInstance; -import net.minecraft.entity.effect.StatusEffects; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.enchantment.EnchantmentEffectContext; -import net.minecraft.enchantment.EnchantmentLevelBasedValue; -import net.minecraft.enchantment.effect.EnchantmentEntityEffect; -import net.minecraft.util.math.Vec3d; - -public record PoisonEnchantmentEffect(EnchantmentLevelBasedValue duration) implements EnchantmentEntityEffect { - public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(instance -> - instance.group( - EnchantmentLevelBasedValue.CODEC.fieldOf("duration").forGetter(PoisonEnchantmentEffect::duration) - ).apply(instance, PoisonEnchantmentEffect::new) - ); - - @Override - public void apply(ServerWorld world, int level, EnchantmentEffectContext context, Entity target, Vec3d pos) { - if (target instanceof LivingEntity victim) { - if (context.owner() != null && context.owner() instanceof PlayerEntity player) { - int poisonDuration = (int) (this.duration.getValue(level) * 40); // Convert to ticks - int poisonAmplifier = level - 2; // Level 1 = Poison 0, Level 2 = Poison I, Level 3 = Poison II - - victim.addStatusEffect(new StatusEffectInstance( - StatusEffects.POISON, - poisonDuration, - poisonAmplifier, - false, - true - )); - } - } - } - - @Override - public MapCodec getCodec() { - return CODEC; - } -} - diff --git a/arch/dev/sillyangel/more_spear_enchantments/enchantment/effect/WitheringEnchantmentEffect.java b/arch/dev/sillyangel/more_spear_enchantments/enchantment/effect/WitheringEnchantmentEffect.java deleted file mode 100644 index 7a581f1..0000000 --- a/arch/dev/sillyangel/more_spear_enchantments/enchantment/effect/WitheringEnchantmentEffect.java +++ /dev/null @@ -1,46 +0,0 @@ -package dev.sillyangel.more_spear_enchantments.enchantment.effect; - -import com.mojang.serialization.MapCodec; -import com.mojang.serialization.codecs.RecordCodecBuilder; -import net.minecraft.server.world.ServerWorld; -import net.minecraft.entity.Entity; -import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.effect.StatusEffectInstance; -import net.minecraft.entity.effect.StatusEffects; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.enchantment.EnchantmentEffectContext; -import net.minecraft.enchantment.EnchantmentLevelBasedValue; -import net.minecraft.enchantment.effect.EnchantmentEntityEffect; -import net.minecraft.util.math.Vec3d; - -public record WitheringEnchantmentEffect(EnchantmentLevelBasedValue duration) implements EnchantmentEntityEffect { - public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(instance -> - instance.group( - EnchantmentLevelBasedValue.CODEC.fieldOf("duration").forGetter(WitheringEnchantmentEffect::duration) - ).apply(instance, WitheringEnchantmentEffect::new) - ); - - @Override - public void apply(ServerWorld world, int level, EnchantmentEffectContext context, Entity target, Vec3d pos) { - if (target instanceof LivingEntity victim) { - if (context.owner() != null && context.owner() instanceof PlayerEntity player) { - int witherDuration = (int) (this.duration.getValue(level) * 40); // Convert to ticks - int witherAmplifier = level - 2; // Level 1 = Wither 0, Level 2 = Wither I, Level 3 = Wither II - - victim.addStatusEffect(new StatusEffectInstance( - StatusEffects.WITHER, - witherDuration, - witherAmplifier, - false, - true - )); - } - } - } - - @Override - public MapCodec getCodec() { - return CODEC; - } -} - diff --git a/arch/dev/sillyangel/more_spear_enchantments/fabric/MoreSpearEnchantmentsDataGenerator.java b/arch/dev/sillyangel/more_spear_enchantments/fabric/MoreSpearEnchantmentsDataGenerator.java deleted file mode 100644 index e5669fb..0000000 --- a/arch/dev/sillyangel/more_spear_enchantments/fabric/MoreSpearEnchantmentsDataGenerator.java +++ /dev/null @@ -1,16 +0,0 @@ -package dev.sillyangel.more_spear_enchantments.fabric; - -import dev.sillyangel.more_spear_enchantments.fabric.datagen.ModItemTagProvider; -import dev.sillyangel.more_spear_enchantments.fabric.enchantment.ModEnchantmentGenerator; -import net.fabricmc.fabric.api.datagen.v1.DataGeneratorEntrypoint; -import net.fabricmc.fabric.api.datagen.v1.FabricDataGenerator; - -public class MoreSpearEnchantmentsDataGenerator implements DataGeneratorEntrypoint { - @Override - public void onInitializeDataGenerator(FabricDataGenerator fabricDataGenerator) { - FabricDataGenerator.Pack pack = fabricDataGenerator.createPack(); - - pack.addProvider(ModItemTagProvider::new); - pack.addProvider(ModEnchantmentGenerator::new); - } -} diff --git a/arch/dev/sillyangel/more_spear_enchantments/fabric/MoreSpearEnchantmentsFabric.java b/arch/dev/sillyangel/more_spear_enchantments/fabric/MoreSpearEnchantmentsFabric.java deleted file mode 100644 index 3b65e64..0000000 --- a/arch/dev/sillyangel/more_spear_enchantments/fabric/MoreSpearEnchantmentsFabric.java +++ /dev/null @@ -1,13 +0,0 @@ -package dev.sillyangel.more_spear_enchantments.fabric; - -import dev.sillyangel.more_spear_enchantments.MoreSpearEnchantments; -import net.fabricmc.api.ModInitializer; - -public class MoreSpearEnchantmentsFabric implements ModInitializer { - @Override - public void onInitialize() { - // Run our common setup - MoreSpearEnchantments.init(); - } -} - diff --git a/arch/dev/sillyangel/more_spear_enchantments/fabric/client/MoreSpearEnchantmentsFabricClient.java b/arch/dev/sillyangel/more_spear_enchantments/fabric/client/MoreSpearEnchantmentsFabricClient.java deleted file mode 100644 index 834ea71..0000000 --- a/arch/dev/sillyangel/more_spear_enchantments/fabric/client/MoreSpearEnchantmentsFabricClient.java +++ /dev/null @@ -1,10 +0,0 @@ -package dev.sillyangel.more_spear_enchantments.fabric.client; - -import net.fabricmc.api.ClientModInitializer; - -public final class MoreSpearEnchantmentsFabricClient implements ClientModInitializer { - @Override - public void onInitializeClient() { - // This entrypoint is suitable for setting up client-specific logic, such as rendering. - } -} diff --git a/arch/dev/sillyangel/more_spear_enchantments/fabric/datagen/ModItemTagProvider.java b/arch/dev/sillyangel/more_spear_enchantments/fabric/datagen/ModItemTagProvider.java deleted file mode 100644 index eb23e5e..0000000 --- a/arch/dev/sillyangel/more_spear_enchantments/fabric/datagen/ModItemTagProvider.java +++ /dev/null @@ -1,29 +0,0 @@ -package dev.sillyangel.more_spear_enchantments.fabric.datagen; - -import dev.sillyangel.more_spear_enchantments.util.ModTags; -import dev.sillyangel.more_spear_enchantments.MoreSpearEnchantments; -import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput; -import net.fabricmc.fabric.api.datagen.v1.provider.FabricTagProvider; -import net.minecraft.item.Items; -import net.minecraft.registry.RegistryWrapper; -import net.minecraft.registry.tag.ItemTags; - -import java.util.concurrent.CompletableFuture; - -public class ModItemTagProvider extends FabricTagProvider.ItemTagProvider { - public ModItemTagProvider(FabricDataOutput output, CompletableFuture completableFuture) { - super(output, completableFuture); - } - - @Override - protected void configure(RegistryWrapper.WrapperLookup wrapperLookup) { - valueLookupBuilder(ModTags.Items.SPEARS) - .add(Items.WOODEN_SPEAR) - .add(Items.STONE_SPEAR) - .add(Items.COPPER_SPEAR) - .add(Items.IRON_SPEAR) - .add(Items.GOLDEN_SPEAR) - .add(Items.DIAMOND_SPEAR) - .add(Items.NETHERITE_SPEAR); - } -} \ No newline at end of file diff --git a/arch/dev/sillyangel/more_spear_enchantments/fabric/enchantment/ModEnchantmentEffects.java b/arch/dev/sillyangel/more_spear_enchantments/fabric/enchantment/ModEnchantmentEffects.java deleted file mode 100644 index 13093ca..0000000 --- a/arch/dev/sillyangel/more_spear_enchantments/fabric/enchantment/ModEnchantmentEffects.java +++ /dev/null @@ -1,39 +0,0 @@ -package dev.sillyangel.more_spear_enchantments.fabric.enchantment; - -import com.mojang.serialization.MapCodec; -import dev.sillyangel.more_spear_enchantments.MoreSpearEnchantments; -import dev.sillyangel.more_spear_enchantments.enchantment.effect.*; -import net.minecraft.registry.Registries; -import net.minecraft.registry.Registry; -import net.minecraft.registry.RegistryKey; -import net.minecraft.registry.RegistryKeys; -import net.minecraft.util.Identifier; -import net.minecraft.enchantment.Enchantment; -import net.minecraft.enchantment.effect.EnchantmentEntityEffect; - -public class ModEnchantmentEffects { - public static final RegistryKey THUNDERING = of("thundering"); - public static final RegistryKey WITHERING = of("withering"); - public static final RegistryKey POISONING = of("poisoning"); - public static final RegistryKey CRIPPLING = of("crippling"); - - - private static RegistryKey of(String path) { - Identifier id = Identifier.of(MoreSpearEnchantments.MOD_ID, path); - return RegistryKey.of(RegistryKeys.ENCHANTMENT, id); - } - - private static MapCodec register(String id, MapCodec codec) { - return Registry.register(Registries.ENCHANTMENT_ENTITY_EFFECT_TYPE, Identifier.of(MoreSpearEnchantments.MOD_ID, id), codec); - } - - public static void registerModEnchantmentEffects() { - MoreSpearEnchantments.LOGGER.info("Registering EnchantmentEffects for " + MoreSpearEnchantments.MOD_ID); - - register("lightning", LightningEnchantmentEffect.CODEC); - register("poison", PoisonEnchantmentEffect.CODEC); - register("withering", WitheringEnchantmentEffect.CODEC); - register("crippling", CripplingEnchantmentEffect.CODEC); - } -} - diff --git a/arch/dev/sillyangel/more_spear_enchantments/fabric/enchantment/ModEnchantmentGenerator.java b/arch/dev/sillyangel/more_spear_enchantments/fabric/enchantment/ModEnchantmentGenerator.java deleted file mode 100644 index c65016d..0000000 --- a/arch/dev/sillyangel/more_spear_enchantments/fabric/enchantment/ModEnchantmentGenerator.java +++ /dev/null @@ -1,120 +0,0 @@ -package dev.sillyangel.more_spear_enchantments.fabric.enchantment; - -import dev.sillyangel.more_spear_enchantments.util.ModTags; -import dev.sillyangel.more_spear_enchantments.enchantment.effect.*; -import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput; -import net.fabricmc.fabric.api.datagen.v1.provider.FabricDynamicRegistryProvider; -import net.fabricmc.fabric.api.resource.conditions.v1.ResourceCondition; -import net.minecraft.registry.RegistryWrapper; -import net.minecraft.registry.RegistryKeys; -import net.minecraft.registry.RegistryKey; -import net.minecraft.enchantment.Enchantment; -import net.minecraft.enchantment.effect.EnchantmentEffectTarget; -import net.minecraft.enchantment.EnchantmentLevelBasedValue; -import net.minecraft.component.type.AttributeModifierSlot; -import net.minecraft.component.EnchantmentEffectComponentTypes; - -import java.util.concurrent.CompletableFuture; - -public class ModEnchantmentGenerator extends FabricDynamicRegistryProvider { - public ModEnchantmentGenerator(FabricDataOutput output, CompletableFuture registriesFuture) { - super(output, registriesFuture); - System.out.println("REGISTERING ENCHANTS"); - } - - @Override - protected void configure(RegistryWrapper.WrapperLookup registries, Entries entries) { - // Our new enchantment, "Thundering." - register(entries, ModEnchantmentEffects.THUNDERING, Enchantment.builder( - Enchantment.definition( - registries.getOrThrow(RegistryKeys.ITEM).getOrThrow(ModTags.Items.SPEARS), - // this is the "weight" or probability of our enchantment showing up in the table - 10, - // the maximum level of the enchantment - 3, - // base cost for level 1 of the enchantment, and min levels required for something higher - Enchantment.leveledCost(1, 10), - // same fields as above but for max cost - Enchantment.leveledCost(1, 15), - // anvil cost - 5, - // valid slots - AttributeModifierSlot.HAND - ) - ) - .addEffect( - // enchantment occurs POST_ATTACK - EnchantmentEffectComponentTypes.POST_ATTACK, - EnchantmentEffectTarget.ATTACKER, - EnchantmentEffectTarget.VICTIM, - new LightningEnchantmentEffect(EnchantmentLevelBasedValue.linear(0.4f, 0.2f)) // scale the enchantment linearly. - ) - ); - register(entries, ModEnchantmentEffects.POISONING, Enchantment.builder( - Enchantment.definition( - registries.getOrThrow(RegistryKeys.ITEM).getOrThrow(ModTags.Items.SPEARS), - 10, - 3, - Enchantment.leveledCost(1, 10), - Enchantment.leveledCost(1, 15), - 5, - AttributeModifierSlot.HAND - ) - ) - .addEffect( - EnchantmentEffectComponentTypes.POST_ATTACK, - EnchantmentEffectTarget.ATTACKER, - EnchantmentEffectTarget.VICTIM, - new PoisonEnchantmentEffect(EnchantmentLevelBasedValue.linear(3.0f, 1.0f)) // 3s base, +1s per level - ) - ); - // Our new enchantment, "Withering." - register(entries, ModEnchantmentEffects.WITHERING, Enchantment.builder( - Enchantment.definition( - registries.getOrThrow(RegistryKeys.ITEM).getOrThrow(ModTags.Items.SPEARS), - 10, - 3, - Enchantment.leveledCost(1, 10), - Enchantment.leveledCost(1, 15), - 5, - AttributeModifierSlot.HAND - ) - ) - .addEffect( - EnchantmentEffectComponentTypes.POST_ATTACK, - EnchantmentEffectTarget.ATTACKER, - EnchantmentEffectTarget.VICTIM, - new WitheringEnchantmentEffect(EnchantmentLevelBasedValue.linear(2.0f, 1.0f)) // 2s base, +1s per level - ) - ); - // Our new enchantment, "Crippling." - register(entries, ModEnchantmentEffects.CRIPPLING, Enchantment.builder( - Enchantment.definition( - registries.getOrThrow(RegistryKeys.ITEM).getOrThrow(ModTags.Items.SPEARS), - 10, - 3, - Enchantment.leveledCost(1, 10), - Enchantment.leveledCost(1, 15), - 5, - AttributeModifierSlot.HAND - ) - ) - .addEffect( - EnchantmentEffectComponentTypes.POST_ATTACK, - EnchantmentEffectTarget.ATTACKER, - EnchantmentEffectTarget.VICTIM, - new CripplingEnchantmentEffect(EnchantmentLevelBasedValue.linear(2.0f, 1.0f)) // 2s base, +1s per leve - ) - ); - } - - private void register(Entries entries, RegistryKey key, Enchantment.Builder builder, ResourceCondition... resourceConditions) { - entries.add(key, builder.build(key.getValue()), resourceConditions); - } - - @Override - public String getName() { - return "ModEnchantmentGenerator"; - } -} - diff --git a/arch/dev/sillyangel/more_spear_enchantments/fabric/enchantment/effect/CripplingEnchantmentEffect.java b/arch/dev/sillyangel/more_spear_enchantments/fabric/enchantment/effect/CripplingEnchantmentEffect.java deleted file mode 100644 index 5d6083e..0000000 --- a/arch/dev/sillyangel/more_spear_enchantments/fabric/enchantment/effect/CripplingEnchantmentEffect.java +++ /dev/null @@ -1,52 +0,0 @@ -package dev.sillyangel.more_spear_enchantments.fabric.enchantment.effect; - -import com.mojang.serialization.MapCodec; -import com.mojang.serialization.codecs.RecordCodecBuilder; -import net.minecraft.server.world.ServerWorld; -import net.minecraft.entity.Entity; -import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.effect.StatusEffectInstance; -import net.minecraft.entity.effect.StatusEffects; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.enchantment.EnchantmentEffectContext; -import net.minecraft.enchantment.EnchantmentLevelBasedValue; -import net.minecraft.enchantment.effect.EnchantmentEntityEffect; -import net.minecraft.util.math.Vec3d; - -public record CripplingEnchantmentEffect(EnchantmentLevelBasedValue duration) implements EnchantmentEntityEffect { - public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(instance -> - instance.group( - EnchantmentLevelBasedValue.CODEC.fieldOf("duration").forGetter(CripplingEnchantmentEffect::duration) - ).apply(instance, CripplingEnchantmentEffect::new) - ); - - @Override - public void apply(ServerWorld world, int level, EnchantmentEffectContext context, Entity target, Vec3d pos) { - if (target instanceof LivingEntity victim) { - if (context.owner() != null && context.owner() instanceof PlayerEntity player) { - int Duration = (int) (this.duration.getValue(level) * 50); // Convert to ticks - int slownessAmplifier = level - 1; // Level 1 = Slowness 0, Level 2 = Slowness I, Level 3 = Slowness II - int weaknessAmplifier = level - 1; // Level 1 = Weakness 0, Level 2 = Weakness I, Level 3 = Weakness II - victim.addStatusEffect(new StatusEffectInstance( - StatusEffects.SLOWNESS, - Duration, - slownessAmplifier, - false, - true - )); - victim.addStatusEffect(new StatusEffectInstance( - StatusEffects.WEAKNESS, - Duration, - weaknessAmplifier, - false, - true - )); - } - } - } - - @Override - public MapCodec getCodec() { - return CODEC; - } -} diff --git a/arch/dev/sillyangel/more_spear_enchantments/fabric/enchantment/effect/LightningEnchantmentEffect.java b/arch/dev/sillyangel/more_spear_enchantments/fabric/enchantment/effect/LightningEnchantmentEffect.java deleted file mode 100644 index 6078bac..0000000 --- a/arch/dev/sillyangel/more_spear_enchantments/fabric/enchantment/effect/LightningEnchantmentEffect.java +++ /dev/null @@ -1,43 +0,0 @@ -package dev.sillyangel.more_spear_enchantments.fabric.enchantment.effect; - -import com.mojang.serialization.MapCodec; -import com.mojang.serialization.codecs.RecordCodecBuilder; -import net.minecraft.util.math.BlockPos; -import net.minecraft.server.world.ServerWorld; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityType; -import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.SpawnReason; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.enchantment.EnchantmentEffectContext; -import net.minecraft.enchantment.EnchantmentLevelBasedValue; -import net.minecraft.enchantment.effect.EnchantmentEntityEffect; -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 victim) { - if (context.owner() != null && context.owner() instanceof PlayerEntity player) { - float numStrikes = this.amount.getValue(level); - - for (float i = 0; i < numStrikes; i++) { - BlockPos position = victim.getBlockPos(); - EntityType.LIGHTNING_BOLT.spawn(world, position, SpawnReason.TRIGGERED); - } - } - } - } - - @Override - public MapCodec getCodec() { - return CODEC; - } -} - diff --git a/arch/dev/sillyangel/more_spear_enchantments/fabric/enchantment/effect/PoisonEnchantmentEffect.java b/arch/dev/sillyangel/more_spear_enchantments/fabric/enchantment/effect/PoisonEnchantmentEffect.java deleted file mode 100644 index f3fb822..0000000 --- a/arch/dev/sillyangel/more_spear_enchantments/fabric/enchantment/effect/PoisonEnchantmentEffect.java +++ /dev/null @@ -1,45 +0,0 @@ -package dev.sillyangel.more_spear_enchantments.fabric.enchantment.effect; - -import com.mojang.serialization.MapCodec; -import com.mojang.serialization.codecs.RecordCodecBuilder; -import net.minecraft.server.world.ServerWorld; -import net.minecraft.entity.Entity; -import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.effect.StatusEffectInstance; -import net.minecraft.entity.effect.StatusEffects; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.enchantment.EnchantmentEffectContext; -import net.minecraft.enchantment.EnchantmentLevelBasedValue; -import net.minecraft.enchantment.effect.EnchantmentEntityEffect; -import net.minecraft.util.math.Vec3d; - -public record PoisonEnchantmentEffect(EnchantmentLevelBasedValue duration) implements EnchantmentEntityEffect { - public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(instance -> - instance.group( - EnchantmentLevelBasedValue.CODEC.fieldOf("duration").forGetter(PoisonEnchantmentEffect::duration) - ).apply(instance, PoisonEnchantmentEffect::new) - ); - - @Override - public void apply(ServerWorld world, int level, EnchantmentEffectContext context, Entity target, Vec3d pos) { - if (target instanceof LivingEntity victim) { - if (context.owner() != null && context.owner() instanceof PlayerEntity player) { - int poisonDuration = (int) (this.duration.getValue(level) * 40); // Convert to ticks - int poisonAmplifier = level - 2; // Level 1 = Poison 0, Level 2 = Poison I, Level 3 = Poison II - - victim.addStatusEffect(new StatusEffectInstance( - StatusEffects.POISON, - poisonDuration, - poisonAmplifier, - false, - true - )); - } - } - } - - @Override - public MapCodec getCodec() { - return CODEC; - } -} diff --git a/arch/dev/sillyangel/more_spear_enchantments/fabric/enchantment/effect/WitheringEnchantmentEffect.java b/arch/dev/sillyangel/more_spear_enchantments/fabric/enchantment/effect/WitheringEnchantmentEffect.java deleted file mode 100644 index 4fa1d23..0000000 --- a/arch/dev/sillyangel/more_spear_enchantments/fabric/enchantment/effect/WitheringEnchantmentEffect.java +++ /dev/null @@ -1,46 +0,0 @@ -package dev.sillyangel.more_spear_enchantments.fabric.enchantment.effect; - -import com.mojang.serialization.MapCodec; -import com.mojang.serialization.codecs.RecordCodecBuilder; -import net.minecraft.server.world.ServerWorld; -import net.minecraft.entity.Entity; -import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.effect.StatusEffectInstance; -import net.minecraft.entity.effect.StatusEffects; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.enchantment.EnchantmentEffectContext; -import net.minecraft.enchantment.EnchantmentLevelBasedValue; -import net.minecraft.enchantment.effect.EnchantmentEntityEffect; -import net.minecraft.util.math.Vec3d; - -public record WitheringEnchantmentEffect(EnchantmentLevelBasedValue duration) implements EnchantmentEntityEffect { - public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(instance -> - instance.group( - EnchantmentLevelBasedValue.CODEC.fieldOf("duration").forGetter(WitheringEnchantmentEffect::duration) - ).apply(instance, WitheringEnchantmentEffect::new) - ); - - @Override - public void apply(ServerWorld world, int level, EnchantmentEffectContext context, Entity target, Vec3d pos) { - if (target instanceof LivingEntity victim) { - if (context.owner() != null && context.owner() instanceof PlayerEntity player) { - int witherDuration = (int) (this.duration.getValue(level) * 40); // Convert to ticks - int witherAmplifier = level - 2; // Level 1 = Wither 0, Level 2 = Wither I, Level 3 = Wither II - - victim.addStatusEffect(new StatusEffectInstance( - StatusEffects.WITHER, - witherDuration, - witherAmplifier, - false, - true - )); - } - } - } - - @Override - public MapCodec getCodec() { - return CODEC; - } -} - diff --git a/arch/dev/sillyangel/more_spear_enchantments/fabric/mixin/ExampleMixin.java b/arch/dev/sillyangel/more_spear_enchantments/fabric/mixin/ExampleMixin.java deleted file mode 100644 index bbe2c54..0000000 --- a/arch/dev/sillyangel/more_spear_enchantments/fabric/mixin/ExampleMixin.java +++ /dev/null @@ -1,15 +0,0 @@ -package dev.sillyangel.more_spear_enchantments.fabric.mixin; - -import net.minecraft.server.MinecraftServer; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@Mixin(MinecraftServer.class) -public class ExampleMixin { - @Inject(at = @At("HEAD"), method = "loadWorld") - private void init(CallbackInfo info) { - // This code is injected into the start of MinecraftServer.loadWorld()V - } -} \ No newline at end of file diff --git a/arch/dev/sillyangel/more_spear_enchantments/neoforge/MoreSpearEnchantmentsNeoForge.java b/arch/dev/sillyangel/more_spear_enchantments/neoforge/MoreSpearEnchantmentsNeoForge.java deleted file mode 100644 index e69de29..0000000 diff --git a/arch/dev/sillyangel/more_spear_enchantments/util/ModTags.java b/arch/dev/sillyangel/more_spear_enchantments/util/ModTags.java deleted file mode 100644 index 5c8f405..0000000 --- a/arch/dev/sillyangel/more_spear_enchantments/util/ModTags.java +++ /dev/null @@ -1,25 +0,0 @@ -package dev.sillyangel.more_spear_enchantments.util; - -import dev.sillyangel.more_spear_enchantments.MoreSpearEnchantments; -import net.minecraft.block.Block; -import net.minecraft.item.Item; -import net.minecraft.registry.RegistryKeys; -import net.minecraft.registry.tag.TagKey; -import net.minecraft.util.Identifier; - -public class ModTags { - public static class Blocks { - - private static TagKey createTag(String name) { - return TagKey.of(RegistryKeys.BLOCK, Identifier.of(MoreSpearEnchantments.MOD_ID, name)); - } - } - - public static class Items { - public static final TagKey SPEARS = createTag("spears"); - - private static TagKey createTag(String name) { - return TagKey.of(RegistryKeys.ITEM, Identifier.of(MoreSpearEnchantments.MOD_ID, name)); - } - } -} \ No newline at end of file diff --git a/arch/fabric.mod.json b/arch/fabric.mod.json deleted file mode 100644 index 42a06b2..0000000 --- a/arch/fabric.mod.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "schemaVersion": 1, - "id": "more_spear_enchantments", - "version": "${version}", - "name": "More Spear Enchantments", - "description": "m", - "authors": [ - "sillyangel" - ], - "contact": { - "homepage": "https://sillyangel.dev/", - "sources": "https://git.sillyangel.dev/angel/more-spear-enchants" - }, - "license": "MIT", - "icon": "assets/more_spear_enchantments/icon.png", - "environment": "*", - "entrypoints": { - "main": [ - "dev.sillyangel.more_spear_enchantments.fabric.MoreSpearEnchantmentsFabric" - ], - "client": [ - "dev.sillyangel.more_spear_enchantments.fabric.client.MoreSpearEnchantmentsFabricClient" - ], - "fabric-datagen": [ - "dev.sillyangel.more_spear_enchantments.fabric.MoreSpearEnchantmentsDataGenerator" - ] - }, - "mixins": [ - "more_spear_enchantments.mixins.json" - ], - "depends": { - "fabricloader": ">=0.18.3", - "minecraft": "~1.21.11", - "java": ">=21", - "architectury": ">=19.0.1", - "fabric-api": "*" - }, - "custom": { - "modmenu": { - "links": { - "modmenu.discord": "https://discord.gg/gAfcZURgvJ" - }, - "update_checker": true - } - } -} diff --git a/arch/icon.png b/arch/icon.png deleted file mode 100644 index e69de29..0000000 diff --git a/arch/neoforge.mods.toml b/arch/neoforge.mods.toml deleted file mode 100644 index 9788bc5..0000000 --- a/arch/neoforge.mods.toml +++ /dev/null @@ -1,38 +0,0 @@ -modLoader = "javafml" -loaderVersion = "[10,)" -issueTrackerURL = "https://git.sillyangel.dev/angel/more-spear-enchants/issues" -license = "MIT" - -[[mods]] -modId = "more_spear_enchantments" -version = "${version}" -displayName = "More Spear Enchantments" -authors = "sillyangel" -description = ''' -more enchantments for the newly added spear from the Mounts of Mayhem update. -''' -logoFile = "icon.png" - -[[dependencies.more_spear_enchantments]] -modId = "neoforge" -type = "required" -versionRange = "[21.11,)" -ordering = "NONE" -side = "BOTH" - -[[dependencies.more_spear_enchantments]] -modId = "minecraft" -type = "required" -versionRange = "[1.21.11,)" -ordering = "NONE" -side = "BOTH" - -[[dependencies.more_spear_enchantments]] -modId = "architectury" -type = "required" -versionRange = "[19.0.1,)" -ordering = "AFTER" -side = "BOTH" - -[[mixins]] -config = "more_spear_enchantments.mixins.json" diff --git a/src/main/java/dev/sillyangel/more_spear_enchantments/Config.java b/src/main/java/dev/sillyangel/more_spear_enchantments/Config.java index 4f9260e..9a503e9 100644 --- a/src/main/java/dev/sillyangel/more_spear_enchantments/Config.java +++ b/src/main/java/dev/sillyangel/more_spear_enchantments/Config.java @@ -1,60 +1,12 @@ package dev.sillyangel.more_spear_enchantments; -import net.minecraft.resources.Identifier; -import net.minecraft.world.item.Item; -import net.minecraftforge.common.ForgeConfigSpec; import net.minecraftforge.eventbus.api.listener.SubscribeEvent; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.event.config.ModConfigEvent; -import net.minecraftforge.registries.ForgeRegistries; -import java.util.List; -import java.util.Set; -import java.util.stream.Collectors; - -// An example config class. This is not required, but it's a good idea to have one to keep your config organized. -// Demonstrates how to use Forge's config APIs -@Mod.EventBusSubscriber(modid = MoreSpearEnchantments.MODID, bus = Mod.EventBusSubscriber.Bus.MOD) +@Mod.EventBusSubscriber(modid = MoreSpearEnchantments.MOD_ID, bus = Mod.EventBusSubscriber.Bus.MOD) public class Config { - private static final ForgeConfigSpec.Builder BUILDER = new ForgeConfigSpec.Builder(); - - private static final ForgeConfigSpec.BooleanValue LOG_DIRT_BLOCK = BUILDER - .comment("Whether to log the dirt block on common setup") - .define("logDirtBlock", true); - - private static final ForgeConfigSpec.IntValue MAGIC_NUMBER = BUILDER - .comment("A magic number") - .defineInRange("magicNumber", 42, 0, Integer.MAX_VALUE); - - public static final ForgeConfigSpec.ConfigValue MAGIC_NUMBER_INTRODUCTION = BUILDER - .comment("What you want the introduction message to be for the magic number") - .define("magicNumberIntroduction", "The magic number is... "); - - // a list of strings that are treated as resource locations for items - private static final ForgeConfigSpec.ConfigValue> ITEM_STRINGS = BUILDER - .comment("A list of items to log on common setup.") - .defineListAllowEmpty("items", List.of("minecraft:iron_ingot"), Config::validateItemName); - - static final ForgeConfigSpec SPEC = BUILDER.build(); - - public static boolean logDirtBlock; - public static int magicNumber; - public static String magicNumberIntroduction; - public static Set items; - - private static boolean validateItemName(final Object obj) { - return obj instanceof final String itemName && ForgeRegistries.ITEMS.containsKey(Identifier.tryParse(itemName)); - } - @SubscribeEvent static void onLoad(final ModConfigEvent event) { - logDirtBlock = LOG_DIRT_BLOCK.get(); - magicNumber = MAGIC_NUMBER.get(); - magicNumberIntroduction = MAGIC_NUMBER_INTRODUCTION.get(); - - // convert the list of strings into a set of items - items = ITEM_STRINGS.get().stream() - .map(itemName -> ForgeRegistries.ITEMS.getValue(Identifier.tryParse(itemName))) - .collect(Collectors.toSet()); } } diff --git a/src/main/java/dev/sillyangel/more_spear_enchantments/MoreSpearEnchantments.java b/src/main/java/dev/sillyangel/more_spear_enchantments/MoreSpearEnchantments.java index 9e33afa..09ce0b0 100644 --- a/src/main/java/dev/sillyangel/more_spear_enchantments/MoreSpearEnchantments.java +++ b/src/main/java/dev/sillyangel/more_spear_enchantments/MoreSpearEnchantments.java @@ -1,123 +1,31 @@ package dev.sillyangel.more_spear_enchantments; import com.mojang.logging.LogUtils; -import net.minecraft.client.Minecraft; -import net.minecraft.core.registries.Registries; -import net.minecraft.world.food.FoodProperties; -import net.minecraft.world.item.BlockItem; -import net.minecraft.world.item.CreativeModeTab; -import net.minecraft.world.item.CreativeModeTabs; -import net.minecraft.world.item.Item; -import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.level.block.state.BlockBehaviour; -import net.minecraft.world.level.material.MapColor; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.event.BuildCreativeModeTabContentsEvent; -import net.minecraftforge.eventbus.api.listener.SubscribeEvent; +import dev.sillyangel.more_spear_enchantments.enchantment.ModEnchantmentEffects; import net.minecraftforge.fml.common.Mod; -import net.minecraftforge.fml.config.ModConfig; -import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; -import net.minecraftforge.registries.DeferredRegister; -import net.minecraftforge.registries.ForgeRegistries; -import net.minecraftforge.registries.RegistryObject; import org.slf4j.Logger; -// The value here should match an entry in the META-INF/mods.toml file -@Mod(MoreSpearEnchantments.MODID) +@Mod(MoreSpearEnchantments.MOD_ID) public final class MoreSpearEnchantments { - // Define mod id in a common place for everything to reference - public static final String MODID = "examplemod"; - // Directly reference a slf4j logger - private static final Logger LOGGER = LogUtils.getLogger(); - // Create a Deferred Register to hold Blocks which will all be registered under the "examplemod" namespace - public static final DeferredRegister BLOCKS = DeferredRegister.create(ForgeRegistries.BLOCKS, MODID); - // Create a Deferred Register to hold Items which will all be registered under the "examplemod" namespace - public static final DeferredRegister ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, MODID); - // Create a Deferred Register to hold CreativeModeTabs which will all be registered under the "examplemod" namespace - public static final DeferredRegister CREATIVE_MODE_TABS = DeferredRegister.create(Registries.CREATIVE_MODE_TAB, MODID); - - // Creates a new Block with the id "examplemod:example_block", combining the namespace and path - public static final RegistryObject EXAMPLE_BLOCK = BLOCKS.register("example_block", - () -> new Block(BlockBehaviour.Properties.of() - .setId(BLOCKS.key("example_block")) - .mapColor(MapColor.STONE) - ) - ); - // Creates a new BlockItem with the id "examplemod:example_block", combining the namespace and path - public static final RegistryObject EXAMPLE_BLOCK_ITEM = ITEMS.register("example_block", - () -> new BlockItem(EXAMPLE_BLOCK.get(), new Item.Properties().setId(ITEMS.key("example_block"))) - ); - - // Creates a new food item with the id "examplemod:example_id", nutrition 1 and saturation 2 - public static final RegistryObject EXAMPLE_ITEM = ITEMS.register("example_item", - () -> new Item(new Item.Properties() - .setId(ITEMS.key("example_item")) - .food(new FoodProperties.Builder() - .alwaysEdible() - .nutrition(1) - .saturationModifier(2f) - .build() - ) - ) - ); - - // Creates a creative tab with the id "examplemod:example_tab" for the example item, that is placed after the combat tab - public static final RegistryObject EXAMPLE_TAB = CREATIVE_MODE_TABS.register("example_tab", () -> CreativeModeTab.builder() - .withTabsBefore(CreativeModeTabs.COMBAT) - .icon(() -> EXAMPLE_ITEM.get().getDefaultInstance()) - .displayItems((parameters, output) -> { - output.accept(EXAMPLE_ITEM.get()); // Add the example item to the tab. For your own tabs, this method is preferred over the event - }).build()); + public static final String MOD_ID = "more_spear_enchantments"; + public static final Logger LOGGER = LogUtils.getLogger(); public MoreSpearEnchantments(FMLJavaModLoadingContext context) { var modBusGroup = context.getModBusGroup(); - - // Register the commonSetup method for modloading FMLCommonSetupEvent.getBus(modBusGroup).addListener(this::commonSetup); - - // Register the Deferred Register to the mod event bus so blocks get registered - BLOCKS.register(modBusGroup); - // Register the Deferred Register to the mod event bus so items get registered - ITEMS.register(modBusGroup); - // Register the Deferred Register to the mod event bus so tabs get registered - CREATIVE_MODE_TABS.register(modBusGroup); - - // Register the item to a creative tab - BuildCreativeModeTabContentsEvent.BUS.addListener(MoreSpearEnchantments::addCreative); - - // Register our mod's ForgeConfigSpec so that Forge can create and load the config file for us - context.registerConfig(ModConfig.Type.COMMON, Config.SPEC); + ModEnchantmentEffects.ENCHANTMENT_ENTITY_EFFECTS.register(modBusGroup); + LOGGER.info("Registered {} enchantment effect types", ModEnchantmentEffects.ENCHANTMENT_ENTITY_EFFECTS.getEntries().size()); } private void commonSetup(final FMLCommonSetupEvent event) { - // Some common setup code - LOGGER.info("HELLO FROM COMMON SETUP"); - - if (Config.logDirtBlock) - LOGGER.info("DIRT BLOCK >> {}", ForgeRegistries.BLOCKS.getKey(Blocks.DIRT)); - - LOGGER.info(Config.magicNumberIntroduction + Config.magicNumber); - - Config.items.forEach((item) -> LOGGER.info("ITEM >> {}", item.toString())); - } - - // Add the example block item to the building blocks tab - private static void addCreative(BuildCreativeModeTabContentsEvent event) { - if (event.getTabKey() == CreativeModeTabs.BUILDING_BLOCKS) - event.accept(EXAMPLE_BLOCK_ITEM); - } - - // You can use EventBusSubscriber to automatically register all static methods in the class annotated with @SubscribeEvent - @Mod.EventBusSubscriber(modid = MODID, value = Dist.CLIENT) - public static class ClientModEvents { - @SubscribeEvent - public static void onClientSetup(FMLClientSetupEvent event) { - // Some client setup code - LOGGER.info("HELLO FROM CLIENT SETUP"); - LOGGER.info("MINECRAFT NAME >> {}", Minecraft.getInstance().getUser().getName()); - } + LOGGER.info("Initializing More Spear Enchantments"); + LOGGER.info("Enchantment effects registered:"); + LOGGER.info(" - Lightning (Thundering enchantment)"); + LOGGER.info(" - Poison (Poisoning enchantment)"); + LOGGER.info(" - Withering (Withering enchantment)"); + LOGGER.info(" - Crippling (Crippling enchantment)"); + LOGGER.info("Check enchanting table or use '/enchant' command to apply them to tridents!"); } } diff --git a/src/main/java/dev/sillyangel/more_spear_enchantments/enchantment/ModEnchantmentEffects.java b/src/main/java/dev/sillyangel/more_spear_enchantments/enchantment/ModEnchantmentEffects.java new file mode 100644 index 0000000..f56323a --- /dev/null +++ b/src/main/java/dev/sillyangel/more_spear_enchantments/enchantment/ModEnchantmentEffects.java @@ -0,0 +1,26 @@ +package dev.sillyangel.more_spear_enchantments.enchantment; + +import com.mojang.serialization.MapCodec; +import dev.sillyangel.more_spear_enchantments.MoreSpearEnchantments; +import dev.sillyangel.more_spear_enchantments.enchantment.effect.*; +import net.minecraft.core.registries.Registries; +import net.minecraft.world.item.enchantment.effects.EnchantmentEntityEffect; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.RegistryObject; + +public class ModEnchantmentEffects { + // Deferred register for enchantment effect types + public static final DeferredRegister> ENCHANTMENT_ENTITY_EFFECTS = + DeferredRegister.create(Registries.ENCHANTMENT_ENTITY_EFFECT_TYPE, MoreSpearEnchantments.MOD_ID); + + // Register enchantment effect types + public static final RegistryObject> LIGHTNING_EFFECT = + ENCHANTMENT_ENTITY_EFFECTS.register("lightning", () -> LightningEnchantmentEffect.CODEC); + public static final RegistryObject> POISON_EFFECT = + ENCHANTMENT_ENTITY_EFFECTS.register("poison", () -> PoisonEnchantmentEffect.CODEC); + public static final RegistryObject> WITHERING_EFFECT = + ENCHANTMENT_ENTITY_EFFECTS.register("withering", () -> WitheringEnchantmentEffect.CODEC); + public static final RegistryObject> CRIPPLING_EFFECT = + ENCHANTMENT_ENTITY_EFFECTS.register("crippling", () -> CripplingEnchantmentEffect.CODEC); +} + diff --git a/src/main/java/dev/sillyangel/more_spear_enchantments/enchantment/effect/CripplingEnchantmentEffect.java b/src/main/java/dev/sillyangel/more_spear_enchantments/enchantment/effect/CripplingEnchantmentEffect.java new file mode 100644 index 0000000..fbeb469 --- /dev/null +++ b/src/main/java/dev/sillyangel/more_spear_enchantments/enchantment/effect/CripplingEnchantmentEffect.java @@ -0,0 +1,52 @@ +package dev.sillyangel.more_spear_enchantments.enchantment.effect; + +import com.mojang.serialization.MapCodec; +import com.mojang.serialization.codecs.RecordCodecBuilder; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.effect.MobEffects; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; +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; + +public record CripplingEnchantmentEffect(LevelBasedValue duration) implements EnchantmentEntityEffect { + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(instance -> + instance.group( + LevelBasedValue.CODEC.fieldOf("duration").forGetter(CripplingEnchantmentEffect::duration) + ).apply(instance, CripplingEnchantmentEffect::new) + ); + + @Override + public void apply(ServerLevel world, int level, EnchantedItemInUse context, Entity target, Vec3 pos) { + if (target instanceof LivingEntity victim) { + if (context.owner() != null && context.owner() instanceof Player player) { + int Duration = (int) (this.duration.calculate(level) * 50); // Convert to ticks + int slownessAmplifier = level - 1; // Level 1 = Slowness 0, Level 2 = Slowness I, Level 3 = Slowness II + int weaknessAmplifier = level - 1; // Level 1 = Weakness 0, Level 2 = Weakness I, Level 3 = Weakness II + victim.addEffect(new MobEffectInstance( + MobEffects.SLOWNESS, + Duration, + slownessAmplifier, + false, + true + )); + victim.addEffect(new MobEffectInstance( + MobEffects.WEAKNESS, + Duration, + weaknessAmplifier, + false, + true + )); + } + } + } + + @Override + public MapCodec codec() { + return CODEC; + } +} diff --git a/src/main/java/dev/sillyangel/more_spear_enchantments/enchantment/effect/LightningEnchantmentEffect.java b/src/main/java/dev/sillyangel/more_spear_enchantments/enchantment/effect/LightningEnchantmentEffect.java new file mode 100644 index 0000000..012ff98 --- /dev/null +++ b/src/main/java/dev/sillyangel/more_spear_enchantments/enchantment/effect/LightningEnchantmentEffect.java @@ -0,0 +1,43 @@ +package dev.sillyangel.more_spear_enchantments.enchantment.effect; + +import com.mojang.serialization.MapCodec; +import com.mojang.serialization.codecs.RecordCodecBuilder; +import net.minecraft.core.BlockPos; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.EntitySpawnReason; +import net.minecraft.world.entity.player.Player; +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; + +public record LightningEnchantmentEffect(LevelBasedValue amount) implements EnchantmentEntityEffect { + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(instance -> + instance.group( + LevelBasedValue.CODEC.fieldOf("amount").forGetter(LightningEnchantmentEffect::amount) + ).apply(instance, LightningEnchantmentEffect::new) + ); + + @Override + public void apply(ServerLevel world, int level, EnchantedItemInUse context, Entity target, Vec3 pos) { + if (target instanceof LivingEntity victim) { + if (context.owner() != null && context.owner() instanceof Player player) { + float numStrikes = this.amount.calculate(level); + + for (float i = 0; i < numStrikes; i++) { + BlockPos position = victim.blockPosition(); + EntityType.LIGHTNING_BOLT.spawn(world, position, EntitySpawnReason.TRIGGERED); + } + } + } + } + + @Override + public MapCodec codec() { + return CODEC; + } +} + diff --git a/src/main/java/dev/sillyangel/more_spear_enchantments/enchantment/effect/PoisonEnchantmentEffect.java b/src/main/java/dev/sillyangel/more_spear_enchantments/enchantment/effect/PoisonEnchantmentEffect.java new file mode 100644 index 0000000..c5b8c48 --- /dev/null +++ b/src/main/java/dev/sillyangel/more_spear_enchantments/enchantment/effect/PoisonEnchantmentEffect.java @@ -0,0 +1,45 @@ +package dev.sillyangel.more_spear_enchantments.enchantment.effect; + +import com.mojang.serialization.MapCodec; +import com.mojang.serialization.codecs.RecordCodecBuilder; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.effect.MobEffects; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; +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; + +public record PoisonEnchantmentEffect(LevelBasedValue duration) implements EnchantmentEntityEffect { + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(instance -> + instance.group( + LevelBasedValue.CODEC.fieldOf("duration").forGetter(PoisonEnchantmentEffect::duration) + ).apply(instance, PoisonEnchantmentEffect::new) + ); + + @Override + public void apply(ServerLevel world, int level, EnchantedItemInUse context, Entity target, Vec3 pos) { + if (target instanceof LivingEntity victim) { + if (context.owner() != null && context.owner() instanceof Player player) { + int poisonDuration = (int) (this.duration.calculate(level) * 40); // Convert to ticks + int poisonAmplifier = level - 2; // Level 1 = Poison 0, Level 2 = Poison I, Level 3 = Poison II + + victim.addEffect(new MobEffectInstance( + MobEffects.POISON, + poisonDuration, + poisonAmplifier, + false, + true + )); + } + } + } + + @Override + public MapCodec codec() { + return CODEC; + } +} diff --git a/src/main/java/dev/sillyangel/more_spear_enchantments/enchantment/effect/WitheringEnchantmentEffect.java b/src/main/java/dev/sillyangel/more_spear_enchantments/enchantment/effect/WitheringEnchantmentEffect.java new file mode 100644 index 0000000..09151ea --- /dev/null +++ b/src/main/java/dev/sillyangel/more_spear_enchantments/enchantment/effect/WitheringEnchantmentEffect.java @@ -0,0 +1,46 @@ +package dev.sillyangel.more_spear_enchantments.enchantment.effect; + +import com.mojang.serialization.MapCodec; +import com.mojang.serialization.codecs.RecordCodecBuilder; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.effect.MobEffects; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; +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; + +public record WitheringEnchantmentEffect(LevelBasedValue duration) implements EnchantmentEntityEffect { + public static final MapCodec CODEC = RecordCodecBuilder.mapCodec(instance -> + instance.group( + LevelBasedValue.CODEC.fieldOf("duration").forGetter(WitheringEnchantmentEffect::duration) + ).apply(instance, WitheringEnchantmentEffect::new) + ); + + @Override + public void apply(ServerLevel world, int level, EnchantedItemInUse context, Entity target, Vec3 pos) { + if (target instanceof LivingEntity victim) { + if (context.owner() != null && context.owner() instanceof Player player) { + int witherDuration = (int) (this.duration.calculate(level) * 40); // Convert to ticks + int witherAmplifier = level - 2; // Level 1 = Wither 0, Level 2 = Wither I, Level 3 = Wither II + + victim.addEffect(new MobEffectInstance( + MobEffects.WITHER, + witherDuration, + witherAmplifier, + false, + true + )); + } + } + } + + @Override + public MapCodec codec() { + return CODEC; + } +} + diff --git a/src/main/resources/assets/more_spear_enchantments/enchantment/crippling.json b/src/main/resources/data/more_spear_enchantments/enchantment/crippling.json similarity index 100% rename from src/main/resources/assets/more_spear_enchantments/enchantment/crippling.json rename to src/main/resources/data/more_spear_enchantments/enchantment/crippling.json diff --git a/src/main/resources/assets/more_spear_enchantments/enchantment/poisoning.json b/src/main/resources/data/more_spear_enchantments/enchantment/poisoning.json similarity index 100% rename from src/main/resources/assets/more_spear_enchantments/enchantment/poisoning.json rename to src/main/resources/data/more_spear_enchantments/enchantment/poisoning.json diff --git a/src/main/resources/assets/more_spear_enchantments/enchantment/thundering.json b/src/main/resources/data/more_spear_enchantments/enchantment/thundering.json similarity index 100% rename from src/main/resources/assets/more_spear_enchantments/enchantment/thundering.json rename to src/main/resources/data/more_spear_enchantments/enchantment/thundering.json diff --git a/src/main/resources/assets/more_spear_enchantments/enchantment/withering.json b/src/main/resources/data/more_spear_enchantments/enchantment/withering.json similarity index 100% rename from src/main/resources/assets/more_spear_enchantments/enchantment/withering.json rename to src/main/resources/data/more_spear_enchantments/enchantment/withering.json diff --git a/src/main/resources/assets/more_spear_enchantments/tags/item/spears.json b/src/main/resources/data/more_spear_enchantments/tags/item/spears.json similarity index 100% rename from src/main/resources/assets/more_spear_enchantments/tags/item/spears.json rename to src/main/resources/data/more_spear_enchantments/tags/item/spears.json