From 4e1b7d8ade469480f953945c2db73f4a3cd65ec2 Mon Sep 17 00:00:00 2001 From: illyum Date: Sun, 29 Sep 2024 04:26:26 -0600 Subject: [PATCH] Add demo thunder enchantment --- build.gradle | 6 +- gradle.properties | 8 +-- src/main/java/com/example/ExampleMod.java | 24 -------- .../java/com/example/mixin/ExampleMixin.java | 15 ----- src/main/java/com/itzilly/CustomEnchants.java | 24 ++++++++ src/main/java/com/itzilly/DataGenerator.java | 13 +++++ .../java/com/itzilly/LanguageProvider.java | 19 ++++++ .../enchantments/EnchantmentGenerator.java | 54 ++++++++++++++++++ .../com/itzilly/init/EnchantmentInit.java | 25 ++++++++ .../assets/{modid => customenchants}/icon.png | Bin src/main/resources/fabric.mod.json | 31 +++++----- 11 files changed, 157 insertions(+), 62 deletions(-) delete mode 100644 src/main/java/com/example/ExampleMod.java delete mode 100644 src/main/java/com/example/mixin/ExampleMixin.java create mode 100644 src/main/java/com/itzilly/CustomEnchants.java create mode 100644 src/main/java/com/itzilly/DataGenerator.java create mode 100644 src/main/java/com/itzilly/LanguageProvider.java create mode 100644 src/main/java/com/itzilly/enchantments/EnchantmentGenerator.java create mode 100644 src/main/java/com/itzilly/init/EnchantmentInit.java rename src/main/resources/assets/{modid => customenchants}/icon.png (100%) diff --git a/build.gradle b/build.gradle index 1886463..3a4a4b2 100644 --- a/build.gradle +++ b/build.gradle @@ -22,7 +22,7 @@ loom { splitEnvironmentSourceSets() mods { - "modid" { + "customenchants" { sourceSet sourceSets.main sourceSet sourceSets.client } @@ -85,4 +85,8 @@ publishing { // The repositories here will be used for publishing your artifact, not for // retrieving dependencies. } +} + +fabricApi { + configureDataGeneration() } \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 19598a1..f91949a 100644 --- a/gradle.properties +++ b/gradle.properties @@ -6,12 +6,12 @@ org.gradle.parallel=true # check these on https://fabricmc.net/develop minecraft_version=1.21.1 yarn_mappings=1.21.1+build.3 -loader_version=0.16.2 +loader_version=0.16.5 # Mod Properties mod_version=1.0.0 -maven_group=com.example -archives_base_name=modid +maven_group=com.itzilly +archives_base_name=customenchants # Dependencies -fabric_version=0.102.1+1.21.1 \ No newline at end of file +fabric_version=0.105.0+1.21.1 \ No newline at end of file diff --git a/src/main/java/com/example/ExampleMod.java b/src/main/java/com/example/ExampleMod.java deleted file mode 100644 index 215cfbb..0000000 --- a/src/main/java/com/example/ExampleMod.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.example; - -import net.fabricmc.api.ModInitializer; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class ExampleMod implements ModInitializer { - public static final String MOD_ID = "modid"; - - // This logger is used to write text to the console and the log file. - // It is considered best practice to use your mod id as the logger's name. - // That way, it's clear which mod wrote info, warnings, and errors. - public static final Logger LOGGER = LoggerFactory.getLogger(MOD_ID); - - @Override - public void onInitialize() { - // This code runs as soon as Minecraft is in a mod-load-ready state. - // However, some things (like resources) may still be uninitialized. - // Proceed with mild caution. - - LOGGER.info("Hello Fabric world!"); - } -} \ No newline at end of file diff --git a/src/main/java/com/example/mixin/ExampleMixin.java b/src/main/java/com/example/mixin/ExampleMixin.java deleted file mode 100644 index 3c4212c..0000000 --- a/src/main/java/com/example/mixin/ExampleMixin.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.example.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/src/main/java/com/itzilly/CustomEnchants.java b/src/main/java/com/itzilly/CustomEnchants.java new file mode 100644 index 0000000..ea49a87 --- /dev/null +++ b/src/main/java/com/itzilly/CustomEnchants.java @@ -0,0 +1,24 @@ +package com.itzilly; + +import com.itzilly.init.EnchantmentInit; +import net.fabricmc.api.ModInitializer; + +import net.minecraft.util.Identifier; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class CustomEnchants implements ModInitializer { + public static final String MOD_ID = "customenchants"; + + public static final Logger LOGGER = LoggerFactory.getLogger(MOD_ID); + + public static Identifier id(String path) { + return Identifier.of(MOD_ID, path); + } + + @Override + public void onInitialize() { + LOGGER.info("Starting Custom Enchants - Realm"); + EnchantmentInit.load(); + } +} \ No newline at end of file diff --git a/src/main/java/com/itzilly/DataGenerator.java b/src/main/java/com/itzilly/DataGenerator.java new file mode 100644 index 0000000..5567660 --- /dev/null +++ b/src/main/java/com/itzilly/DataGenerator.java @@ -0,0 +1,13 @@ +package com.itzilly; + +import com.itzilly.enchantments.EnchantmentGenerator; +import net.fabricmc.fabric.api.datagen.v1.DataGeneratorEntrypoint; +import net.fabricmc.fabric.api.datagen.v1.FabricDataGenerator; + +public class DataGenerator implements DataGeneratorEntrypoint { + @Override + public void onInitializeDataGenerator(FabricDataGenerator fabricDataGenerator) { + FabricDataGenerator.Pack pack = fabricDataGenerator.createPack(); + pack.addProvider(EnchantmentGenerator::new); + } +} diff --git a/src/main/java/com/itzilly/LanguageProvider.java b/src/main/java/com/itzilly/LanguageProvider.java new file mode 100644 index 0000000..9cae8e3 --- /dev/null +++ b/src/main/java/com/itzilly/LanguageProvider.java @@ -0,0 +1,19 @@ +package com.itzilly; + +import com.itzilly.init.EnchantmentInit; +import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput; +import net.fabricmc.fabric.api.datagen.v1.provider.FabricLanguageProvider; +import net.minecraft.registry.RegistryWrapper; + +import java.util.concurrent.CompletableFuture; + +public class LanguageProvider extends FabricLanguageProvider { + protected LanguageProvider(FabricDataOutput dataOutput, CompletableFuture registryLookup) { + super(dataOutput, registryLookup); + } + + @Override + public void generateTranslations(RegistryWrapper.WrapperLookup registryLookup, TranslationBuilder translationBuilder) { + translationBuilder.addEnchantment(EnchantmentInit.THUNDERING_KEY, "Thundering"); + } +} diff --git a/src/main/java/com/itzilly/enchantments/EnchantmentGenerator.java b/src/main/java/com/itzilly/enchantments/EnchantmentGenerator.java new file mode 100644 index 0000000..224a6ec --- /dev/null +++ b/src/main/java/com/itzilly/enchantments/EnchantmentGenerator.java @@ -0,0 +1,54 @@ +package com.itzilly.enchantments; + +import com.itzilly.enchantments.effects.LightningEnchantmentEffect; +import com.itzilly.init.EnchantmentInit; +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.component.EnchantmentEffectComponentTypes; +import net.minecraft.component.type.AttributeModifierSlot; +import net.minecraft.enchantment.Enchantment; +import net.minecraft.enchantment.EnchantmentLevelBasedValue; +import net.minecraft.enchantment.effect.EnchantmentEffectTarget; +import net.minecraft.item.Item; +import net.minecraft.registry.RegistryKey; +import net.minecraft.registry.RegistryKeys; +import net.minecraft.registry.RegistryWrapper; +import net.minecraft.registry.tag.ItemTags; + +import java.util.concurrent.CompletableFuture; + +public class EnchantmentGenerator extends FabricDynamicRegistryProvider { + public EnchantmentGenerator(FabricDataOutput output, CompletableFuture registriesFuture) { + super(output, registriesFuture); + } + + @Override + protected void configure(RegistryWrapper.WrapperLookup registries, Entries entries) { + RegistryWrapper itemLookup = registries.getWrapperOrThrow(RegistryKeys.ITEM); + + register(entries, EnchantmentInit.THUNDERING_KEY, Enchantment.builder( + Enchantment.definition( + itemLookup.getOrThrow(ItemTags.SWORD_ENCHANTABLE), + 15, // probability of showing up in the enchantment table + 5, // max level + Enchantment.leveledCost(1, 10), // cost per level (base) + Enchantment.leveledCost(1, 15), // cost per level (max) + 7, // anvil applying cost + AttributeModifierSlot.HAND + )) + .addEffect(EnchantmentEffectComponentTypes.POST_ATTACK, + EnchantmentEffectTarget.ATTACKER, + EnchantmentEffectTarget.VICTIM, + new LightningEnchantmentEffect(EnchantmentLevelBasedValue.linear(0.5f, 0.15f)))); + } + + private static void register(Entries entries, RegistryKey key, Enchantment.Builder builder, ResourceCondition... resourceConditions) { + entries.add(key, builder.build(key.getValue()), resourceConditions); + } + + @Override + public String getName() { + return "Enchantment Generator"; + } +} diff --git a/src/main/java/com/itzilly/init/EnchantmentInit.java b/src/main/java/com/itzilly/init/EnchantmentInit.java new file mode 100644 index 0000000..bffa202 --- /dev/null +++ b/src/main/java/com/itzilly/init/EnchantmentInit.java @@ -0,0 +1,25 @@ +package com.itzilly.init; + +import com.itzilly.CustomEnchants; + +import com.itzilly.enchantments.effects.LightningEnchantmentEffect; +import com.mojang.serialization.MapCodec; +import net.minecraft.enchantment.Enchantment; +import net.minecraft.enchantment.effect.EnchantmentEntityEffect; +import net.minecraft.registry.Registries; +import net.minecraft.registry.Registry; +import net.minecraft.registry.RegistryKey; +import net.minecraft.registry.RegistryKeys; + + +public class EnchantmentInit { + public static final RegistryKey THUNDERING_KEY = RegistryKey.of(RegistryKeys.ENCHANTMENT, CustomEnchants.id("thundering")); + + public static final MapCodec LIGHTNING_EFFECT = register("lightning", LightningEnchantmentEffect.CODEC); + + private static MapCodec register(String name, MapCodec codec) { + return Registry.register(Registries.ENCHANTMENT_ENTITY_EFFECT_TYPE, CustomEnchants.id(name), codec); + } + + public static void load() {} +} \ No newline at end of file diff --git a/src/main/resources/assets/modid/icon.png b/src/main/resources/assets/customenchants/icon.png similarity index 100% rename from src/main/resources/assets/modid/icon.png rename to src/main/resources/assets/customenchants/icon.png diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 10e7269..19a7713 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -1,34 +1,29 @@ { "schemaVersion": 1, - "id": "modid", + "id": "customenchants", "version": "${version}", - "name": "Example mod", - "description": "This is an example description! Tell everyone what your mod is about!", + "name": "Custom Enchants", + "description": "Simple server-side fabric mod to add custom enchantments", "authors": [ - "Me!" + "itzilly", + "iillyum" ], "contact": { - "homepage": "https://fabricmc.net/", - "sources": "https://github.com/FabricMC/fabric-example-mod" + "homepage": "http://itzilly.com/", + "sources": "http://itzilly.com/CustomEnchants-Realm" }, "license": "CC0-1.0", - "icon": "assets/modid/icon.png", + "icon": "assets/customenchants/icon.png", "environment": "*", "entrypoints": { + "fabric-datagen": [ + "com.itzilly.DataGenerator" + ], "main": [ - "com.example.ExampleMod" - ], - "client": [ - "com.example.ExampleModClient" + "com.itzilly.CustomEnchants" ] }, - "mixins": [ - "modid.mixins.json", - { - "config": "modid.client.mixins.json", - "environment": "client" - } - ], + "mixins": [], "depends": { "fabricloader": ">=0.16.2", "minecraft": "~1.21.1",