Add demo thunder enchantment

This commit is contained in:
illyum 2024-09-29 04:26:26 -06:00
parent 6348679de7
commit 4e1b7d8ade
11 changed files with 157 additions and 62 deletions

View File

@ -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()
}

View File

@ -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
fabric_version=0.105.0+1.21.1

View File

@ -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!");
}
}

View File

@ -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
}
}

View File

@ -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();
}
}

View File

@ -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);
}
}

View File

@ -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<RegistryWrapper.WrapperLookup> registryLookup) {
super(dataOutput, registryLookup);
}
@Override
public void generateTranslations(RegistryWrapper.WrapperLookup registryLookup, TranslationBuilder translationBuilder) {
translationBuilder.addEnchantment(EnchantmentInit.THUNDERING_KEY, "Thundering");
}
}

View File

@ -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<RegistryWrapper.WrapperLookup> registriesFuture) {
super(output, registriesFuture);
}
@Override
protected void configure(RegistryWrapper.WrapperLookup registries, Entries entries) {
RegistryWrapper<Item> 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<Enchantment> key, Enchantment.Builder builder, ResourceCondition... resourceConditions) {
entries.add(key, builder.build(key.getValue()), resourceConditions);
}
@Override
public String getName() {
return "Enchantment Generator";
}
}

View File

@ -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<Enchantment> THUNDERING_KEY = RegistryKey.of(RegistryKeys.ENCHANTMENT, CustomEnchants.id("thundering"));
public static final MapCodec<LightningEnchantmentEffect> LIGHTNING_EFFECT = register("lightning", LightningEnchantmentEffect.CODEC);
private static <T extends EnchantmentEntityEffect> MapCodec<T> register(String name, MapCodec<T> codec) {
return Registry.register(Registries.ENCHANTMENT_ENTITY_EFFECT_TYPE, CustomEnchants.id(name), codec);
}
public static void load() {}
}

View File

Before

Width:  |  Height:  |  Size: 453 B

After

Width:  |  Height:  |  Size: 453 B

View File

@ -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",