Skip to content

Entity Essence, New Recipes & Better Recipe Loading

Compare
Choose a tag to compare
@2008Choco 2008Choco released this 04 Feb 23:45
· 113 commits to main since this release

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.