Skip to content

Releases: 2008Choco/Alchema

Per-recipe permissions, item NBT support, customizable recipes, and bug fixes

16 May 00:05
1de4842
Compare
Choose a tag to compare

IMPORTANT: This update adds new custom Metrics charts. While I encourage you to keep these charts enabled (as it helps me understand where I need to focus my efforts when it comes to new features - seeing how people use the plugin), I understand that some feel uncomfortable sending statistics, even if they are anonymous. If you are one of these people, please pay attention to the Metrics-related changes/additions.

Changelog

  • Recipes now support item NBT formats equivalent to the /give command (1.18.2+). See below for changes
  • Recipe results now support a "type" much like ingredients do, though alchema:item is the only natively supported result type
    • This allows third-party plugins to register their own result types which may be used in recipe files
    • All default recipe files have had "type": "alchema:item" added to their "result" object for the sake of consistency
  • Added permissions to craft each individual recipe
    • Recipe permission are automatically generated and follow the format alchema.craft.<namespace>.<recipe_id>. Examples:
      • The default gravel.json permission would be alchema.craft.alchema.gravel
      • The default ores/coal_ore.json permission would be alchema.craft.alchema.ores.coal_ore (note that forward slashes are replaced with dots)
    • Every permission is a child of alchema.craft and are therefore all granted by default. To prevent a player from crafting a recipe, you must negate the recipe's permission (i.e. set it to false). Refer to your permission plugin's documentation
    • If a player attempts to craft a recipe to which they do not have permission, the cauldron will drop all ingredients for the player to pick up and they will be informed that they do not have permission to craft that recipe
  • Added new configuration options to customize the recipe of empty vials
    • VialOfEssence.Recipe.Enabled: Whether or not the recipe is enabled. If set to false, the recipe will not be registered
    • VialOfEssence.Recipe.Yield: The amount of vials given in the recipe
    • VialOfEssence.Recipe.Shape: A list of strings determining the shape of the recipe (MUST have 3 entries, EACH a length of 3 characters)
    • VialOfEssence.Recipe.Ingredients: A section mapping the characters defined in the shape to one or more materials
  • Added 5 new bStats Metrics charts. This data is sent anonymously.
    • loaded_cauldrons: A pie chart showing how many cauldrons are loaded on the server
    • cauldron_recipes: A pie chart showing how many cauldron recipes are loaded on the server
    • cauldron_crafts: A line chart showing how many crafts have been successfully completed in a cauldron
    • cauldron_recipe_ingredient_types: A pie chart showing how many of each recipe ingredient type is used
    • cauldron_recipe_result_types: A pie chart showing how many of each recipe result type is used
    • These statistics can always be viewed at https://bstats.org/plugin/bukkit/Alchema and are 100% anonymous. See below for more control over what is anonymized
  • Added 2 new options in the config.yml:
    • Metrics.Enabled: Replaces Metrics boolean, defaults to true (be sure to update this if you had it set to false before)
    • Metrics.AnonymousCustomRecipeTypes: Marks and anonymizes any non-native recipe result or ingredient types (e.g. anything that isn't Alchema or MMOItems) as "Third-Party Ingredient Type" (or "Result Type") when being sent to bStats. Defaults to false
      • Set this to true if you have a custom plugin that registers custom Alchema recipe ingredients and you do not want this plugin to be publicly displayed. Otherwise, the name of the plugin will be on a bStats chart
  • Ender Dragons and Giants now have corresponding entity essence
  • Optimized how and when cauldrons check for heat sources and bubble. Performance should be improved by about 50%
  • Improved item serialization for cauldrons between restarts and reloads
  • The entity names shown in the player's action bar when collecting essence from an entity now use translatable components rather than a best-attempt name based on its registry key
  • (For developers) Alchemical cauldrons now have 2 metadata values associated with them:
    • alchema:alchemical_cauldron: Whether or not the block is an alchemical cauldron. Value is always true
    • alchema:alchemical_cauldron_bubbling: Whether or not the alchemical cauldron is boiling. Value is lazy, but never caches. Can be either true or false
  • Fixed Metrics: false not actually disabling metrics, even if set to false. (Please update your config according to the changes mentioned above)
  • Fixed killed entities dropping essence (either via loot or directly into a cauldron) even if they recently had their essence collected with a vial
  • Fixed /givevial throwing an exception if no entities were selected
  • Fixed /givevial throwing an exception if provided an invalid entity selector
  • Fixed some items losing data if they were still in a cauldron when the server shut down
  • Removed the example_item.json file as it is no longer relevant
  • Removed the "shameless self-promotion" of AlchemicalArrows when running /alchema integrations
  • Removed the Metrics boolean option in the config.yml. It has now been moved to Metrics.Enabled

Item NBT In Recipe Files

Recipe files have gotten a huge upgrade. Prior to this version, custom data for ingredients and results (such as names, lore, enchantments, etc.) all had to be done with a relatively undocumented JSON format. This format was incomplete and often lacked support for NBT of newer items. Now, for any ingredient or result with type: "alchema:item", the "item" field now accepts a /give-compliant item argument (i.e. the same sort of argument you would supply to a Minecraft /give command to get an item).

  • More familiar for most server owners (assuming they've written a /give command before)
  • Allows for custom NBT values which better supports third-party plugins
  • Will always be up-to-date and support modern NBT values that Minecraft adds in the future

An example recipe file may now look like this:

{
    "result": {
        "type": "alchema:item",
        "item": "netherite_sword{display:{Name:\"{\\\"text\\\":\\\"Hello World\\\"}\"},Enchantments:[{id:\"minecraft:sharpness\",lvl:10}]}"
    },
    "ingredients": [
        {
            "type": "alchema:entity_essence",
            "entity": "minecraft:blaze",
            "amount": 250
        },
        {
            "type": "alchema:item",
            "item": "minecraft:netherite_ingot{CustomModelData:1}"
        },
        {
            "type": "alchema:material",
            "item": "minecraft:stick"
        }
    ]
}

As you can see, the ingredient requires two netherite ingots with CustomModelData 1, and the result will be a netherite sword with the name "Hello World" and Sharpness X. You must be very careful with the quotation marks, however. They should be escaped correctly or items will fail to load (notice how the "Name" in the result has to triple escape (\\\)).

NOTE: This only works on modern version of Minecraft 1.18.2. While Alchema still supports 1.17.x+, the API to support this functionality was only added in April of 2022. If you are still unable to use this functionality on 1.18.2, update your server and you should be able to use it.

API Changes

  • Added CauldronRecipeResult, an interface similar to CauldronIngredient that may be implemented by third party plugins to create custom result types
    • Only one native implementation of this interface, RecipeResultItemStack
    • Custom result types may be registered via CauldronRecipeRegistry#registerResultType()
  • Added CauldronRecipe#getCraftingPermission()
  • CauldronDropItemsEvent may now be forced to ignore its cancellation state. A new reason was added, NO_PERMISSION, which uses this state. AlchemicalCauldron#dropItems() has a new overload that accepts a boolean whether or not to ignore the cancellation state of this event
  • DefaultEntityEffects is now package-private. It is not meant for public use
  • Fixed items removed from CauldronIngredientsDropEvent#getItems() not actually being removed properly, or if the event was cancelled
  • Added AlchemicalCauldron#isValid() to check whether or not a cauldron is still a valid alchemical cauldron
  • Deprecation policies have been clarified on more methods, as well as mutability of collections, among other useful Jetbrains annotations

Deprecations

  • All current deprecations are expected to be removed by the next major release, 1.4.0. Please move to the provided alternatives as soon as possible.
  • ItemUtil has been marked as internal and should not be expected to maintain compatibility beyond this release. It has no API contract and should be avoided at all costs
  • CauldronRecipe#getResult() has been deprecated and replaced with CauldronRecipe#getRecipeResult()
  • CauldronItemCraftEvent#getResult() and #setResult(ItemStack) have been deprecated and replaced with getRecipeResult() and setRecipeResult(CauldronRecipeResult)

Minor Bug Fixes

16 Apr 00:37
875546e
Compare
Choose a tag to compare

Changelog

  • Changed versioning scheme to be suffixed with -SNAPSHOT
  • Fixed ingredients dropping illegal stack sizes (e.g. putting 32 ender pearls in a cauldron and removing water from the cauldron would drop a stack of 32 ender pearls instead of 2 stacks of 16 ender pearls)
  • Fixed death by boiling cauldron messages sending empty messages if any configured messages are empty or whitespace
  • Fixed boiling cauldrons not persisting across reloads and server reboots

1.17/1.18 Support, Java 16, MMOItems Integration

12 Dec 23:43
Compare
Choose a tag to compare

Changelog

  • Support for Minecraft 1.17.x and 1.18.x
  • Dropped support for Minecraft 1.16.x
  • Minimum required Java version is now Java 16 (required by Minecraft 1.17 anyways, you should have this installed already)
  • Added integration with MMOItems
    • Recipe types may now be mmoitems:mmoitem which requires an item_type, id, and an optional amount.
  • Added an optional -f argument to /saverecipe to forcibly save the recipe file. If set, it will overwrite a recipe file if one exists at the given path
  • Added a new configuration option, EnforcePlayerDroppedItems. When set to true, only items dropped by players are allowed
  • Added a new permission node, alchema.craft. Default to all players. When revoked, players cannot craft items in cauldrons.
  • Added 3 new recipes for Minecraft 1.17/1.18:
    • entities/glow_ink_sac: 50 Glow Squid essence, 1 ink sac = 1 glow ink sac
    • food/glow_berries: 4 sweet berries, 1 glowstone dust = 4 glow berries
    • ores/copper_ore: 2 copper ingots, 1 stone = 1 copper ore
  • "name" and "description" are now supported fields in all recipe files, but remain unused currently

API Changelog

  • Added CauldronIngredient#getComplexity(). Allows recipe types to calculate their own complexity values
  • Added CauldronIngredient#describe(). Describes an ingredient as a string
  • Added CauldronRecipeRegistry#getCauldronRecipe(NamespacedKey)
  • CauldronRecipe has been converted from a class to an interface. This is a breaking change. Plugins are expected to use CauldronRecipe.builder() to create recipes
  • Depreacted CauldronRecipe.Builder#setComment() and setExperience(). Replaced with comment() and experience()

Performance & API Refinements

26 Feb 12:46
Compare
Choose a tag to compare

Changelog

  • More complex recipes will now take priority over less complex recipes in the cauldron
    • Recipe complexity depends on item quantity (though this may change in the future. This is a test)
    • For example, if you have two recipes, one that takes 2 emeralds and 1 stone, another that takes 1 emerald and 1 stone, if 5 emeralds and 3 stone are thrown into the cauldron, the first recipe will trigger twice and the second will trigger once
      • This behaviour was previously dependent on registration order. Complexity ensures that the most complex recipe is crafted first
  • Added /alchema saverecipe which allows server owners to save one (or more) default recipe(s) that otherwise would not be automatically generated
    • This command makes the process simpler when new default recipes are added to Alchema and no longer requires an admin to copy/paste new recipe files from GitHub.
    • Tab completion will ensure that all available recipes are displayed and easy to save
    • Trailing wildcards are supported, meaning /alchema saverecipe concrete/* will save all recipes under the default concrete directory.
    • Permission: alchema.command.saverecipe. Default op
  • A new example_item.json will be generated in the root Alchema folder demonstrating all available options for items in Alchema's recipes files
  • Improvements to the efficiency of recipe searching. May be slightly more performant
  • Improvements to the efficiency of hash-based lookups for recipe and recipe ingredient objects

API Changelog

  • Many utility classes were removed in favour of ChocoCommons, a new library containing otherwise identical classes, just under a new package, wtf.choco.commons.*
  • GSON is no longer publicly accessible in Alchema. It was never meant for public use
  • Added 2 new methods to do with recipe complexity in the CauldronRecipeRegistry
    • CauldronRecipeRegistry#getApplicableRecipe(List<CauldronIngredient>, boolean) : CauldronRecipe
    • CauldronRecipeRegistry#getApplicableRecipes(List<CauldronIngredient>) : List<CauldronRecipe>
  • Added CauldronRecipe#getComplexity() : int
  • CauldronRecipeRegistry#registerIngredientType() will no longer accept registrations onEnable() and instead throw an exception. These calls should be made onLoad()

Recipe experience, entity death experience and QOL

20 Feb 15:05
Compare
Choose a tag to compare

Changelog

  • Recipe files now accept experience in the root of the JSON, an integer property determining the amount of experience to grant the user when crafting that recipe
    • Similar to how furnace recipes give experience. Though this value is optional and defaults to 0
    • Many default recipes were updated to include experience
      • Blaze rod: 3 experience points
      • Fermented spider eye: 2 experience points
      • Ghast tear: 5 experience points
      • Coal ore: 1 experience point
      • Diamond ore: 2 experience points
      • Emerald ore: 3 experience points
      • Lapis lazuli ore: 1 experience point
      • Redstone ore: 1 experience point
      • Emerald: 4 experience points
      • Heart of the sea: 8 experience points
  • Adjusted the amounts of ingots/gems required for a few of the ore recipes:
    • Diamond ore: 2 diamonds -> 3 diamonds
    • Emerald ore: 2 emeralds -> 3 emeralds
    • Lapis lazuli ore: 2 lapis lazuli -> 6 lapis lazuli
    • Redstone ore: 2 redstone -> 6 redstone
  • Entities that die in a cauldron will now insert the respective entity essence into the cauldron
    • Added Cauldron.Entities.Damage to determine whether or not entities take damage
    • Added Cauldron.Entities.MinEssenceOnDeath, the minimum amount of essence to generate
    • Added Cauldron.Entities.MaxEssenceOnDeath, the maximum amount of essence to generate
    • Removed Cauldron.DamageEntities. This is superseded by the aforementioned options
  • Stained glass panes may now be used to craft empty vials
  • Added Cauldron.ItemSearchInterval, a tick value to delay the time between which the cauldron checks for nearby items to consider ingredients
    • If you are noticing large lag spikes, you may benefit from increasing this value to 2 or higher
    • Beyond 5, Alchema's realism may start to decrease and become less accurate
  • Better support for third party plugins
    • Plugins that modify entity drops will now be able to manipulate entity essence drops
    • World protection plugins preventing entity interaction will now prevent entity essence collection
  • Update bStats to 2.2.1
  • Fixed cauldrons continuing to tick after being exploded or removed with block-changing plugins (such as WorldEdit)

API Changelog

  • CauldronRecipe#setComment(Optional) as well as CauldronRecipe's constructors are now deprecated
    • In version 1.2.0 of Alchema, CauldronRecipe will become an interface
  • Added CauldronRecipe.builder(), a static method to construct instances of CauldronRecipe. This should be used in place of the constructors
  • Added new events:
    • EntityDeathByCauldronEvent called when an entity dies as a result of cauldron damage
    • CauldronBubbleEvent called when a cauldron starts to bubble
    • CauldronEvent, a general-purpose abstract base event for all cauldron-related events. Not listenable. Akin to BlockEvent
  • Added CauldronIngredientAddEvent#getPlayerUUID() for convenience

Entity Essence, New Recipes & Better Recipe Loading

04 Feb 23:45
Compare
Choose a tag to compare

This plugin is still alive and as strong as ever. I have a load of features planned for this plugin, just you wait!

Changelog

  • Added entity essence, a new mechanic and crafting ingredient for cauldron recipes. See below
  • Added numerous new configuration options to customize all about entity essence
  • Added /givevialofessence (alias: /giveessence)
    • Permission: alchema.command.givevialofessence, default op
    • Gives empty vials or vials of entity essence to the command executor or the specified player
  • Added new default recipes:
    • 1x Emerald: 500 villager essence + 1 diamond
    • 1x Blaze Rod: 50 blaze essence + 1 stick
    • 1x Ghast Tear: 250 ghast essence + 1 iron nugget
    • 2x Gunpowder: 50 creeper essence + 1 redstone
    • 1x Ink Sac: 25 squid essence + 1 black dye
    • 3x Leather: 250 cow essence + 4 rotten flesh
    • 2x Turtle Egg: 100 turtle essence + 1 egg
    • 1x Heart of the Sea: 250 dolphin essence + 4 nautilus shells
    • 4x Honeycomb: 1 honey bottle + 1 sugar
    • 8x Gravel: 8 cobblestone + 1 flint
    • 8x Sand: 8 gravel + 1 flint
    • All of the above recipes may be found in the default recipe directory if you wish to use them
  • Recipes will now fail more gracefully and not prevent other recipes from loading. Any errors with loading will be presented with a readable reasoning
  • Added /alchema reload verbose, an optional argument which shows errors in chat if one or more recipe failed to load
    • Permission: alchema.command.reload.verbose, default op. Child of alchema.command.reload
  • Custom model data may now be loaded for items in recipe files (ex: "custom_model_data": 10)
  • Fixed CustomModelData being discarded when dropping an item into and retrieving from an alchemical cauldron
  • Fixed inaccurate version check suffixes when running /alchema version. It will now show if on a dev version or if an update check failed

API Changelog

Javadocs for Alchema are hosted at https://choco.wtf/javadocs/alchema

  • Added CauldronIngredientEntityEssence, an ingredient implementation for entity essence
  • Added EssenceConsumptionCallback, a functional interface called when a player consumes a vial of entity essence
  • Added EntityEssenceData containing information about entity essence data such as type, colour, consumption callbacks, etc.
  • Added EntityEssenceEffectRegistry to register different types of entity essence
    • All living vanilla entities have registered entity essence, though you may register and override the data registered by Alchema by default
  • Added Alchema#getEntityEssenceEffectRegistry() to get an instance of the effect registry
  • CauldronIngredientsDropEvent#getItems() now returns a List<Item> instead of a List<ItemStack>
  • Added a few new events to accommodate the new entity essence mechanics
    • EntityDropEssenceEvent: Called when a living entity is killed and drops a vial of entity essence
    • PlayerConsumeEntityEssenceEvent: Called when a player consumes a vial of entity essence
    • PlayerEssenceCollectEvent: Called when a player collects essence from an entity with a vial of essence or an empty vial
  • Added AlchemicalCauldron#dropIngredients(CauldronIngredientsDropEvent.Reason, Player)
  • Added default method CauldronIngredient#drop(AlchemicalCauldron, World, Location), returning a List<Item>, a list of item entities dropped in the world
    • By default, this drops and returns the result of asItemStack()
    • This is called by the CauldronIngredientEntityEssence to drop more than one vial of essence if it exceeds the maximum amount of essence in a vial
  • Added new constants to the AlchemaConstants including metadata keys, nbt keys, new configuration options and permission nodes

Notes For Contributors

This project now has unit testing to ensure the presence of nullability annotations on all methods and parameters, as well as better checkstyle enforcement through Maven. If you plan on contributing to this project (which I highly encourage, contributions are welcome), PLEASE be sure to abide by the checkstyle execution as well as ensuring that all tests pass. This will now be checked when a new PR is opened.

Entity Essence

Entity essence is a new mechanic introduced to integrate the witchcraft and brewery aspects that Alchema aims to provide. Entity essence is a new type of cauldron ingredient that may be used in crafting recipes such as blaze rods with blaze essence and sticks, or emeralds with villager essence and diamonds. Being able to convert one material into another with the essence of entity allows for much more flexible recipe design and makes the world of Minecraft feel more immersive with the world of Alchema.

Collecting entity essence

Players may craft empty vials with 3 glass panes in a bucket or glass bottle formation. These vials may then be used by right clicking on an entity to collect a random amount of essence. Entities can only have essence collected every 5 minutes (by default) unless the player is in creative mode. Players may also collect essence from entities using a vial of essence of the same type (i.e. clicking on a cow with a vial of cow essence) up to 1,000 (by default) essence per vial. These vials of essence can be dropped right into a cauldron and used for recipes involving entity essence.

Entities also all have a chance of dropping vials of entity essence. Although this is much more rare (by default, 0.75% chance), more essence may be yielded. The chance of dropping essence increases if the entity is killed with a weapon enchanted with Looting. Though this essence is no different than collecting it from an entity directly.

Additionally, all entity essence may be consumed by the player much like a potion. While not all entity essences have effects, some do! Some give you potion effects while others, like enderman essence, will teleport you around akin to a chorus fruit. Explore some of the essence types.

Below are the new default configuration options for entity essence, as well as an explanation of what each option does

VialOfEssence:
  # The maximum amount of entity essence that can be stored in a vial
  MaximumEssence: 1000
  FromEntities:
    OnDeath:
      # The chance (0.0 - 100.0) that an entity will drop a vial of essence on death
      BaseDropChance: 0.75
      # The minimum amount of essence the entity can drop
      Min: 50
      # The maximum amount of essence the entity can drop
      Max: 250
      # A list of entities that will not drop essence on death. Example:
      # Blacklist:
      # - "minecraft:zombie"
      # - "minecraft:creeper"
      Blacklist: []
    OnInteract:
      # Whether or not essence may be collected by players when right clicking an entity with an empty vial
      Enabled: true
      # The time, in seconds, between which a player can collect essence from the same entity
      TimeoutSeconds: 300
      # The minimum amount of essence that can be collected from an entity by a player
      Min: 10
      # The maximum amount of essence that can be collected from an entity by a player
      Max: 25
      # A list of entities from which essence cannot be collected
      Blacklist: []
  Consumption:
    # A list of messages to send to the player when consuming entity essence with no effect
    # One message will be selected at random
    TastelessThoughts:
    - "That was rather tasteless... I shouldn't do that again."
    - "What a waste of essence... I shouldn't drink this stuff."
    - "Interestingly tasteless, disappointingly wasteful."
    - "Surely there was a better use for that essence than drinking it."
  Item:
    Empty:
      # The name to use for empty vials
      Name: "&fEmpty Vial"
      # The lore to use for empty vials
      Lore:
      - "&7&oCollects entity essence."
      # The custom model data to use for empty vials
      CustomModelData: 1
    Filled:
      # The name to use for vials of entity essence
      # %entity% will be replaced with the name of the entity type
      Name: "&fVial of Essence &7(%entity%)"
      # The lore to use for vials of entity essence
      # %entity% will be replaced with the name of the entity type
      # %quantity% will be replaced with the quantity of essence in the vial
      # %max_quantity% will be replaced with the maximum quantity of essence allowed in a vial (configurable, see above)
      Lore:
      - "&7Quantity: &f%quantity%/%max_quantity%"
      - ""
      - "&7&oCauldron crafting ingredient."
      # The custom model data to use for vials of entity essence
      CustomModelData: 2

Don't want to use entity essence on your server? Too "modded" or unrealistic for your liking? No problem! Alchema is extremely configurable and allows you to either delete or change any of the recipes involving entity essence. Additionally, you may set the chance for dropping entity essence to 0.0 and deny the collection of essence from entities so the only means of obtaining it is by command.

Update Checker Fix & Concrete Recipes

05 Jan 01:03
Compare
Choose a tag to compare

Changelog

  • Added 16 new default recipes for concrete, one for each colour. Thank you to WanderingPoet on Discord for the recipe ideas 😄
    • 8 coloured concrete powder + 1 gravel = 8 concrete of the same colour
  • Recipe JSON files now support a "comment" field, to which WanderingPoet has been added in the aforementioned recipes
  • Fixed the update checker displaying a message despite there not actually being an update

API Changelog

  • Added CauldronRecipe#setComment(Optional<String>) and getComment() : Optional<String>

Improved Performance

03 Jan 19:24
Compare
Choose a tag to compare

Changelog

  • Attempted fix at improving server performance of cauldrons
  • Added explicit alchema.command.* permission to grant access to all commands. Defaults to op
  • The update checker is now more aggressive about notifying users about updates. A message is sent on join if an update is available
    • Users with the permission alchema.updatenotify will be sent this message. Defaults to op
    • This feature is a test to see if it incentivizes more frequent updates as they go otherwise unnoticed unless monitoring /alchema version or the console

API Changes:

  • Added AlchemicalCauldron#isLoaded()

Bug Fix & Minor Adjustments

01 Jan 18:40
Compare
Choose a tag to compare

Overview

Once again, thank you for the positive support on recent releases of Alchema over the last week. I hope you all had wonderful holidays and welcome to 2021! This release addresses a couple rare issues as well as adjusts how recipes are read and structured in Alchema's recipe file system.

Changelog

  • Recipes may now be categorized under subdirectories
    • The default recipes of Alchema have been restructured to reflect this change. ores/ and food/ directories have been created and had recipes moved by default
    • Directories, much like recipes, must be lowercased and separated by underscores, not spaces
    • The resulting recipe key will take on its relative path. For example, alchema:diamond_ore is now alchema:ores/diamond_ore as it is located in the ores directory
  • Added a configuration option to change the pool of death messages when dying in a cauldron
    • If this option is set to an empty list ([]), no death message will be sent
  • If a new update is available, it will be displayed next to the version (in /alchema version) rather than on its own line
  • Fixed rare IllegalArgumentException: amount must be > 0 due to Spigot's item merging

API Changes

  • Added numerous new methods to AlchemicalCauldron
    • AlchemicalCauldron#hasValidHeatSource() : boolean
    • AlchemicalCauldron#getX() : int, #getY() : int and #getZ() : int
    • AlchemicalCauldron#getHeatSourceX() : int, #getHeatSourceY() : int, #getHeatSourceZ() : int and #getHeatSourceLocation() : Location
    • Deprecated AlchemicalCauldron#getFireBlock(). Prefer instead getHeatSourceBlock()

Bug Fixes, Campfires & Integrations

27 Dec 16:18
Compare
Choose a tag to compare

Overview

Thank you for the positive feedback on the initial release of Alchema! This release addresses a few common issues in the initial release and adds a couple new features to better tie Alchema into its integrations and the Minecraft world.

Changelog

  • Lit campfires (regular & soul), soul fire and lava may now be used as a heat source for cauldrons (#2)
  • Alchema may now be found on SpigotMC!
    • The update checker has been enabled as of this version
    • The resource page link has been added to /alchema version
  • Added /alchema integrations which lists all plugins integrating with Alchema to add recipes
    • Permission: alchema.command.integrations. Default to true
  • Full item data is now parsed from the result rather than just types and amounts (i.e. you can include enchantments, names, lore, etc.)
  • The time taken to reload recipes is now shown on startup and when executing /alchema reload
  • Fixed more than one cauldron not being able to bubble while in the world
  • Fixed tab completion for /alchema displaying arguments to which the player did not have access

API Changes

  • CauldronRecipe#addIngredient(CauldronIngredient) was removed. CauldronRecipe is immutable
  • Alchema#loadCauldronRecipes() has been moved to CauldronRecipeRegistry#loadCauldronRecipes(Alchema, File)
  • RecipeLoadResult was moved from wtf.choco.alchema.Alchema$ to wtf.choco.alchema.crafting
  • Added RecipeLoadResult#getTimeToComplete() : long