This repository has been archived on 2023-11-26. You can view files and clone it, but cannot push or open issues or pull requests.
SorceryCraft/API.md
TheBrokenRail acf08c7fa6
All checks were successful
SorceryCraft/pipeline/head This commit looks good
1.2.4
Optimize Packets
Allow Command Blocks to use ```/spell``` Command
Namespace Statistics
2020-03-24 09:38:29 -04:00

3.7 KiB

API

Getting Started

  1. Add Dependency to Gradle
    repositories {
        maven { url 'https://jitpack.io' }
    }
    dependencies {
        modImplementation 'com.thebrokenrail:sorcerycraft:VERSION'
        // VERSION = "<Mod Version>+<MC Version>", for example "1.2.4+20w12a"
    }
    
  2. Add Dependency to fabric.mod.json
    {
        "depends": {
            "sorcerycraft": "1.2.x"
        }
    }
    
  3. Create a class extending com.thebrokenrail.sorcerycraft.spell.api.Spell
    public class ExampleSpell extends Spell {
       public ExampleSpell(Identifier id, int level) {
           super(id, level);
       }
    
       @Override
       public void execute(Entity target, Entity source, Entity attacker) {
           // OPTIONAL
           // Called when ExampleSpell hits an entity
           // Override this if you want the spell to affect entities
       }
    
       @Override
       public void execute(World world, BlockHitResult hitResult) {
           // OPTIONAL
           // Called when ExampleSpell hits a block
           // Override this if you want the spell to affect blocks
       }
    
       @Override
       public int getXPCost() {
           // REQUIRED
           // Return the amount of levels required to make ExampleSpell in a Casting Table
           switch (getLevel()) {
               case 0: {
                   return 4;
               }
               case 1: {
                   return 8;
               }
           }
           return -1;
       }
    
       @Override
       public ItemStack getItemCost() {
           // REQUIRED
           // Return the item(s) required to make ExampleSpell in a Casting Table
           // Return ItemStack.EMPTY if an item is not required
           switch (getLevel()) {
               case 0: {
                   return new ItemStack(Items.SUGAR_CANE);
               }
               case 1: {
                   return new ItemStack(Items.BOOK);
               }
           }
           return ItemStack.EMPTY;
       }
    
       @Override
       public int getMaxLevel() {
           // REQUIRED
           // Return ExampleSpell's maximum level
           return 2;
       }
    
       @Override
       public Text getTranslation() {
           // OPTIONAL
           // Return a custom display name for ExampleSpell
           // Override this only if you want a custom display name
           return new LiteralText("Example " + (getLevel() + 1));
       }
    }
    
  4. Register the spell in your ModInitializer
    public class ExampleMod implements ModInitializer {
        public static final Identifier EXAMPLE_SPELL = SpellRegistry.register(new Identifier("modid", "example_spell"), ExampleSpell.class);
    }
    
  5. Add Spell Translation (skip this if you have overridden ```Spell.getTranslation()``)
    {
        "spell.modid.example_spell": "Example"
    }
    

Useful Methods

  • (non-static) Spell.getLevel()
  • (non-static) Spell.getID()
  • (static) SpellRegistry.register()

API Stability

APIs are only guaranteed to be stable in the com.thebrokenrail.sorcerycraft.api package, it is unrecommended to rely on any SorceryCraft classes outside of this package.

Spell Levels

Spell levels are 0-indexed, if you have a level 1 Example Spell, Spell.getLevel() wil return 0, and if it is level 2 Spell.getLevel() wil return 1, Spell.getMaxSpell() should be the maximum-acceptable value of Spell.getLevel() + 1, so if Example Spell has levels 1-2, Spell.getMaxLevel() should return 2.

JavaDoc

View JavaDoc