Mod
FallingAlchemy
No reviews yet
Provide an alchemy system based on physical interaction of falling blocks, supporting highly customizable recipe configurations.
Forge is a popular mod loader for versions 1.1+ of Minecraft.
Community voices
Reviews
Click once to include, again to exclude, again to clear
No reviews yet. Be the first to review this project!
Get it on
Available Platforms
About
Project Details
For authors
Embed Badge
If you're the author of this project, you can embed a live badge anywhere that supports HTML or Markdown. It updates automatically whenever ratings change.
Use HTML for any page that supports it, or Markdown for README files and Markdown-based descriptions.
Identifiers
Platform IDs
Resources
External Links
About
Description
Falling Alchemy
Provides an alchemy system based on falling block physical interactions, supporting highly customizable recipe configurations. Core Extension: Deeply integrated with CraftTweaker, supporting probability control, complex condition logic, event listening, and sound effect control.
Demo: https://www.bilibili.com/video/BV1aKJVzsEzo
Features
✅ Core Mechanisms
- Custom falling blocks (Sand/Gravel/Anvil, etc.)
- Detect and replace specified items within range
- Support for multiple output generation and quantity proportion control
⚙️ Advanced Configuration
- Recipe Success Rate (
0.0~1.0) - Block Retention Chance (
0.0~1.0) - Single Processing
- Input protection under falling anvils
- Block displacement detection and extra output calculation
- Detection radius adjustment
- Custom Failure/Success sound effects
- NBT Fuzzy Matching (
fuzzyNBT) - Recipe Execution Priority (
priority)
🌦️ Condition System
- Biome restriction
- Time range (MC Time
0~24000) - Weather state (Clear/Rain/Thunder)
- Height restriction
- Moon phase restriction
Configuration Guide
Quick Start
import mods.fallingalchemy.FallingAlchemy;
import mods.fallingalchemy.ConsumedItem;
// 1. Create ConsumedItem object
val coalReq = FallingAlchemy.createConsumedItem(
<minecraft:coal_ore>.withTag({Unbreakable: 1 as byte}), // Match item
3, // Required count (optional, default 1)
true, // Match NBT (optional, default false)
true // Fuzzy NBT match (optional, default false)
);
// 2. Create Builder
val builder = FallingAlchemy.addConversion(
<minecraft:anvil>, // Trigger block
[coalReq], // Inputs
[<minecraft:diamond>] // Outputs
);
// 3. Chain configuration parameters
builder.setRadius(2.0) // Set radius
.setSingle(true) // Enable single processing (only one recipe per fall event)
.setRescueItems(true) // Enable item protection (prevents remaining coal from being destroyed by the anvil)
.setSuccessChance(0.8) // 80% success rate
.addHeightCondition(0, 60) // Height restriction
.register(); // Register recipe
Method Explanation
FallingAlchemy.addConversion(IItemStack fallingBlock, ConsumedItem[] inputs, IItemStack[] outputs)
Returns a ConversionBuilder object.
Builder Methods
| Method Name | Parameters | Description |
|---|---|---|
setRadius |
double |
Detection radius (Default 2.0) |
setSingle |
boolean |
If true, the recipe executes only once per fall event, preventing consumption of all materials in range. |
setRescueItems |
boolean |
If true, if the input stack size exceeds the requirement, the mod will "rescue" remaining items that would otherwise be destroyed by the falling anvil. |
setPriority |
int |
Priority. Higher values are checked first. |
setSuccessChance |
double |
Success rate (0.0 - 1.0). |
setKeepBlockChance |
double |
Probability that the falling block (e.g., Anvil) does not disappear after alchemy. |
setDisplacement |
double, boolean |
Sets minimum fall distance. The second parameter controls whether extra output is added based on additional distance. |
setSuccessSound |
string, float, float |
Set Success Sound ID, Volume, Pitch. |
setFailureSound |
string, float, float |
Set Failure Sound ID, Volume, Pitch. |
register |
string(Optional) |
Register the recipe. Can pass a string as the recipe ID. |
ConsumedItem Parameters:
IIngredient ingredient: The input itemint requiredCount: Required quantity (Optional, default is 1)bool matchNBT: Whether to strictly match NBT (Optional, default is false)bool fuzzyNBT: When matchNBT=true, only validates if existing tags match (does not check for extra tags) (Optional, default is false)
Script Example
import mods.fallingalchemy.FallingAlchemy;
import mods.fallingalchemy.ConsumedItem;
import mods.fallingalchemy.event.FallingConversionPreEvent;
import mods.fallingalchemy.event.FallingConversionPostEvent;
// Scenario: Anvil falls on "Enchanted Golden Apple" and "Stick named Magic" -> Generates "Nether Star"
val builder = FallingAlchemy.addConversion(
<minecraft:anvil>, // Trigger block
[
// NBT Strict Match Example: Must be Enchanted Golden Apple (Metadata 1)
FallingAlchemy.createConsumedItem(<minecraft:golden_apple:1>, 1),
// NBT + Fuzzy Match Example:
// Requires a stick named "Magic"
// Params: Item, Count(1), MatchNBT(true), FuzzyMatch(true - allows extra tags)
FallingAlchemy.createConsumedItem(<minecraft:stick>.withTag({display: {Name: "Magic"}}), 1, true, true)
],
[<minecraft:nether_star>] // Output
);
// Chain detailed configuration
builder.setRadius(2.5) // Detection radius 2.5 blocks
.setSuccessChance(0.8) // 80% success rate
.setKeepBlockChance(0.0) // Anvil always disappears (0% keep)
.setPriority(100) // High priority, checked before other recipes
.setSingle(true) // Process only one recipe per fall to prevent consuming entire stacks
.setRescueItems(true) // Rescue remaining materials from anvil damage
.setSuccessSound("minecraft:ui.toast.challenge_complete", 1.0, 1.0)
.setFailureSound("minecraft:entity.item.break", 1.0, 0.8)
.addHeightCondition(0, 60) // Can only happen underground (Y < 60)
.addMoonPhaseCondition(0) // Must be Full Moon
.register("apple"); // Register with ID
// Pre Event: Triggered when recipe matches successfully but before items are generated (Can cancel, modify outputs)
events.onFallingConversionPre(function(event as FallingConversionPreEvent) {
if (event.id == "apple") {
// Example: Double rewards if it is raining
if (event.world.raining) {
event.addOutput(<minecraft:nether_star>); // Add an extra Nether Star
}
// Example: Cancel if player is unlucky
if (event.world.random.nextInt(100) < 5) {
event.cancel(); // Cancel execution, items are not consumed
}
}
}
});
// Post Event: Triggered after the recipe has fully executed
events.onFallingConversionPost(function(event as FallingConversionPostEvent) {
// Log the location where alchemy occurred
print(event.position.x ~ "," ~ event.position.y ~ "," ~ event.position.z);
});
Condition System
Condition Types
| Method | Parameter Example | Description |
|---|---|---|
addBiomeCondition |
"minecraft:jungle" |
Limit Biome |
addTimeCondition |
0, 12000 |
Time Range (MC Time) |
addWeatherCondition |
true, false |
Is Raining/Thundering |
addHeightCondition |
60, 128 |
Y-Axis Height Range |
addMoonPhaseCondition |
3 |
Specific Moon Phase (0-7) |
Special Notes:
- Weather condition auto-correction: When
requireThundering=trueis set, it will automatically enable the requirement for rain. - Height condition supports single value mode:
addHeightCondition(100)means trigger at exactly Y=100.
Event System
The mod provides Pre (Before execution) and Post (After execution) events, allowing dynamic control via ZenScript.
Import event classes at the start of your script:
import mods.fallingalchemy.event.FallingConversionPreEvent;
import mods.fallingalchemy.event.FallingConversionPostEvent;
- Pre Event (FallingConversionPreEvent)
Trigger: Recipe matched successfully, just before consumption and output generation. Usage: Cancel recipe, modify outputs, add extra logic.
| Property (Getter) | Type | Description |
|---|---|---|
| event.id | string |
Recipe ID (if set during register), else empty string. |
| event.fallingBlock | IItemStack |
The falling block triggering this alchemy. |
| event.inputs | ConsumedItem[] |
List of required input items. |
| event.world | IWorld |
The world where the event occurs. |
| event.position | IBlockPos |
The position where the event occurs. |
| event.outputs | List<IItemStack> |
List of outputs to be generated. |
| Method (Setter) | Description |
|---|---|
| event.cancel() | Cancel this alchemy. Items won't be consumed or generated. |
| event.addOutput(item) | Add a new ItemStack to the output list. |
| event.setOutputs(items) | item[], overrides the current output list. |
- Post Event (FallingConversionPostEvent)
Trigger: After recipe execution is complete and items are generated. Usage: Logging, statistics, spawning extra effects.
| Property (Getter) | Type | Description |
|---|---|---|
| event.id | string |
Recipe ID. |
| event.fallingBlock | IItemStack |
The triggering falling block. |
| event.inputs | ConsumedItem[] |
List of input items used. |
| event.world | IWorld |
The world where the event occurs. |
| event.position | IBlockPos |
The position where the event occurs. |
| event.outputs | List<IItemStack> |
List of final generated outputs. |
// Pre Event Listener
events.onFallingConversionPre(function(event as FallingConversionPreEvent) {
// Method 1: Check by ID (Recommended)
// Requires using .register("my_recipe_id") during registration
if (event.id == "my_recipe_id") {
if (event.world.raining) {
event.addOutput(<minecraft:slime_ball>); // Extra output when raining
}
return;
}
// Method 2: Check by Falling Block
if (event.fallingBlock.definition.id == "minecraft:anvil") {
// 5% Chance to fail
if (event.world.random.nextInt(100) < 5) {
event.cancel();
print("Alchemy unexpectedly failed!");
}
}
});
// Post Event Listener
events.onFallingConversionPost(function(event as FallingConversionPostEvent) {
print("Alchemy Success! ID: " + event.id + " Pos: " + event.position.x + "," + event.position.y);
});
Sound System
Sound Configuration
// Specify directly in the builder
builder.setSuccessSound("Sound ID", Volume, Pitch);
Sound Parameter Specs:
- Volume Range:
0.1~2.0(Default 1.0) - Pitch Range:
0.5~2.0(Default 1.0) - Resource Format: Use standard Minecraft sound IDs, e.g.,
"minecraft:entity.lightning.thunder"
FAQ
❓ Recipe not triggering
- Confirm the falling block is registered.
- Check if detection radius covers item positions.
- Verify if set conditions are met.
❓ Sound not playing
- Confirm Sound ID is correct (Use F3+H to view item/sound IDs).
- Check if Volume/Pitch parameters are within legal range.
❓ Multiple input matching issues
- Check NBT matching mode of consumed items.
- Ensure total count of all consumed items meets the requirement.
❓ Priority not working
- Check if priority parameter is set (Default 0).
- High priority recipes should have larger values (e.g., 10 > 5).
Todo
- √ Sound effects for alchemy success/failure
- √ Y-Axis limit conditions
- √ Recipe events
- √ Cross-dimension condition support (Temporarily implementable via Biome conditions)
- - Support for "Alchemy" based on the block the falling block lands on (Can be implemented via events)
License: MIT
Feedback: Submit Issue
Screenshots
Gallery
Versions
Files
Relations
Project Relations
More like this
Similar Mods
Suggestions use data such as tags, dependencies, dependents, descriptions, titles, and more to rank how much they overlap with this mod.
On ModDex
Community snapshot
By the numbers
Statistics
Want to reach Minecraft players?
We're looking for a server hosting partner to feature here and other parts of the site. Interested? Send us a message!
Get in touchGet it on
Available Platforms
On ModDex
Community snapshot
By the numbers
Statistics
Resources