ModsJava
FancyCrafting
Java mod listed for Minecraft 1.14–1.20. Downloads from the MC Java Mods app on Android.
⬇ Download on SpigotPlease submit bugs, questions, issues and suggestions on Discord
A easy to use API for developers to take advantage of custom shaped/shapeless recipes with nbt/textures/meta/enchantments….
If you're a server owner:
FancyCrafting may be required in a plugin which has directed you to this page, download the plugin and put it in your 'plugins' directory and boom, you're good to go!
Installation:
Custom Recipes:
Custom Grids:
Vanilla Crafting Table (3x3 & 2x2):
Random Recipes (Results):
Recipe Blacklisting:
Auto Crafter:
Commands:
Sub commands of "/fc":
Important:
Requires ILibrary(https://www.spigotmc.org/resources/ilibrary.89796/)
Requires NBTNexus(https://www.spigotmc.org/resources/nbtnexus.111041/)
A easy to use API for developers to take advantage of custom shaped/shapeless recipes with nbt/textures/meta/enchantments….
If you're a server owner:
FancyCrafting may be required in a plugin which has directed you to this page, download the plugin and put it in your 'plugins' directory and boom, you're good to go!
Spoiler: If you're a developer
FancyCrafting is simple and easy to use, first download and import the plugin into your project or use maven:
You will want to import it as a dependency into your plugin.yml just so no errors occur.
Code (Text):
<dependency>
<groupId>de.ancash</groupId>
<artifactId>fancycrafting</artifactId>
<version>4.5.3</version>
</dependency>
<groupId>de.ancash</groupId>
<artifactId>fancycrafting</artifactId>
<version>4.5.3</version>
</dependency>
Spoiler: Shaped Recipe
You'll want to import:
import de.ancash.fancycrafting.recipe.IShapedRecipe ;
import de.ancash.fancycrafting.base.AbstractFancyCrafting ;
ItemStack [ ] ingredientsArray = new ItemStack [ ] {
new ItemStack (Material. COAL_BLOCK ), new ItemStack (Material. COAL_BLOCK ),
new ItemStack (Material. COAL_BLOCK ), new ItemStack (Material. COAL_BLOCK ),
} ;
//dimension of this array is 2 x 2
//up to 8 x 6 possible (8 x 6 = 48 ingredients)
ItemStack result = new ItemStack (Material. DIAMOND_BLOCK ) ;
IShapedRecipe shapedRecipe = new IShapedRecipe (ingredientsArray, 2, 2, result, "Shaped Tutorial", UUID. randomUUID ( ) ) ;
AbstractFancyCrafting. registerRecipe (shapedRecipe ) ;
Code (Java):
import de.ancash.fancycrafting.recipe.IShapedRecipe ;
import de.ancash.fancycrafting.base.AbstractFancyCrafting ;
Code (Java):
ItemStack [ ] ingredientsArray = new ItemStack [ ] {
new ItemStack (Material. COAL_BLOCK ), new ItemStack (Material. COAL_BLOCK ),
new ItemStack (Material. COAL_BLOCK ), new ItemStack (Material. COAL_BLOCK ),
} ;
//dimension of this array is 2 x 2
//up to 8 x 6 possible (8 x 6 = 48 ingredients)
ItemStack result = new ItemStack (Material. DIAMOND_BLOCK ) ;
IShapedRecipe shapedRecipe = new IShapedRecipe (ingredientsArray, 2, 2, result, "Shaped Tutorial", UUID. randomUUID ( ) ) ;
AbstractFancyCrafting. registerRecipe (shapedRecipe ) ;
Spoiler: Shapeless Recipe
You'll want to import:
import de.ancash.fancycrafting.recipe.IShapelessRecipe ;
import de.ancash.fancycrafting.base.AbstractFancyCrafting ;
ItemStack [ ] ingredientsArray = new ItemStack [ ] {
new ItemStack (Material. COAL_BLOCK ), new ItemStack (Material. COAL_BLOCK ),
new ItemStack (Material. COAL_BLOCK ), new ItemStack (Material. COAL_BLOCK ),
} ;
//dimension of this array does not matter
//however max length is 48 & null values will be ignored
//Any other collection can be used as well
ItemStack result = new ItemStack (Material. DIAMOND_BLOCK ) ;
IShapelessRecipe shapelessRecipe = new IShapelessRecipe ( Arrays. asList (ingredientsArray ), result, "Shapeless Tutorial", UUID. randomUUID ( ) ) ;
AbstractFancyCrafting. registerRecipe (shapelessRecipe ) ;
Code (Java):
import de.ancash.fancycrafting.recipe.IShapelessRecipe ;
import de.ancash.fancycrafting.base.AbstractFancyCrafting ;
Code (Java):
ItemStack [ ] ingredientsArray = new ItemStack [ ] {
new ItemStack (Material. COAL_BLOCK ), new ItemStack (Material. COAL_BLOCK ),
new ItemStack (Material. COAL_BLOCK ), new ItemStack (Material. COAL_BLOCK ),
} ;
//dimension of this array does not matter
//however max length is 48 & null values will be ignored
//Any other collection can be used as well
ItemStack result = new ItemStack (Material. DIAMOND_BLOCK ) ;
IShapelessRecipe shapelessRecipe = new IShapelessRecipe ( Arrays. asList (ingredientsArray ), result, "Shapeless Tutorial", UUID. randomUUID ( ) ) ;
AbstractFancyCrafting. registerRecipe (shapelessRecipe ) ;
Spoiler: Random Shaped Recipe
You'll want to import:
import de.ancash.fancycrafting.recipe.IRandomShapedRecipe ;
import de.ancash.fancycrafting.base.AbstractFancyCrafting ;
Map <ItemStack, Integer > probMap = new HashMap <> ( ) ;
probMap. put ( new ItemStack (Material. DIAMOND_BLOCK ), 1 ) ;
probMap. put ( new ItemStack (Material. COAL_BLOCK ), 1 ) ;
//the probability of one item from the map appearing is
//it's value divided by the sum of all values
ItemStack [ ] ingredientsArray = new ItemStack [ ] {
new ItemStack (Material. COAL_BLOCK ), new ItemStack (Material. COAL_BLOCK ),
new ItemStack (Material. COAL_BLOCK ), new ItemStack (Material. COAL_BLOCK ),
} ;
ItemStack result = new ItemStack (Material. CHEST ) ;
ItemMeta meta = result. getItemMeta ( ) ;
meta. setDisplayName ( "Random Result" ) ;
meta. setLore ( Arrays. asList ( "§7Diamond Block: §a50%", "§7Coal Block: §a50%" ) ) ;
result. setItemMeta (meta ) ;
IRandomShapedRecipe randomShapedRecipe = new IRandomShapedRecipe (ingredientsArray, 2, 2, result, "Random Shaped Recipe", UUID. randomUUID ( ), probMap ) ;
AbstractFancyCrafting. registerRecipe (randomShapedRecipe ) ;
Code (Java):
import de.ancash.fancycrafting.recipe.IRandomShapedRecipe ;
import de.ancash.fancycrafting.base.AbstractFancyCrafting ;
Code (Java):
Map <ItemStack, Integer > probMap = new HashMap <> ( ) ;
probMap. put ( new ItemStack (Material. DIAMOND_BLOCK ), 1 ) ;
probMap. put ( new ItemStack (Material. COAL_BLOCK ), 1 ) ;
//the probability of one item from the map appearing is
//it's value divided by the sum of all values
ItemStack [ ] ingredientsArray = new ItemStack [ ] {
new ItemStack (Material. COAL_BLOCK ), new ItemStack (Material. COAL_BLOCK ),
new ItemStack (Material. COAL_BLOCK ), new ItemStack (Material. COAL_BLOCK ),
} ;
ItemStack result = new ItemStack (Material. CHEST ) ;
ItemMeta meta = result. getItemMeta ( ) ;
meta. setDisplayName ( "Random Result" ) ;
meta. setLore ( Arrays. asList ( "§7Diamond Block: §a50%", "§7Coal Block: §a50%" ) ) ;
result. setItemMeta (meta ) ;
IRandomShapedRecipe randomShapedRecipe = new IRandomShapedRecipe (ingredientsArray, 2, 2, result, "Random Shaped Recipe", UUID. randomUUID ( ), probMap ) ;
AbstractFancyCrafting. registerRecipe (randomShapedRecipe ) ;
Spoiler: Random Shaped Recipe
You'll want to import:
import de.ancash.fancycrafting.recipe.IRandomShapelessRecipe ;
import de.ancash.fancycrafting.base.AbstractFancyCrafting ;
Map <ItemStack, Integer > probMap = new HashMap <> ( ) ;
probMap. put ( new ItemStack (Material. DIAMOND_BLOCK ), 1 ) ;
probMap. put ( new ItemStack (Material. COAL_BLOCK ), 1 ) ;
//the probability of one item from the map appearing is
//it's value divided by the sum of all values
ItemStack [ ] ingredientsArray = new ItemStack [ ] {
new ItemStack (Material. COAL_BLOCK ), new ItemStack (Material. COAL_BLOCK ),
new ItemStack (Material. COAL_BLOCK ), new ItemStack (Material. COAL_BLOCK ),
} ;
ItemStack result = new ItemStack (Material. CHEST ) ;
ItemMeta meta = result. getItemMeta ( ) ;
meta. setDisplayName ( "Random Result" ) ;
meta. setLore ( Arrays. asList ( "§7Diamond Block: §a50%", "§7Coal Block: §a50%" ) ) ;
result. setItemMeta (meta ) ;
IRandomShapelessRecipe randomShapelessRecipe = new IRandomShapelessRecipe ( Arrays. asList (ingredientsArray ), result, "Random Shaped Recipe", UUID. randomUUID ( ), probMap ) ;
AbstractFancyCrafting. registerRecipe (randomShapelessRecipe ) ;
Code (Java):
import de.ancash.fancycrafting.recipe.IRandomShapelessRecipe ;
import de.ancash.fancycrafting.base.AbstractFancyCrafting ;
Code (Java):
Map <ItemStack, Integer > probMap = new HashMap <> ( ) ;
probMap. put ( new ItemStack (Material. DIAMOND_BLOCK ), 1 ) ;
probMap. put ( new ItemStack (Material. COAL_BLOCK ), 1 ) ;
//the probability of one item from the map appearing is
//it's value divided by the sum of all values
ItemStack [ ] ingredientsArray = new ItemStack [ ] {
new ItemStack (Material. COAL_BLOCK ), new ItemStack (Material. COAL_BLOCK ),
new ItemStack (Material. COAL_BLOCK ), new ItemStack (Material. COAL_BLOCK ),
} ;
ItemStack result = new ItemStack (Material. CHEST ) ;
ItemMeta meta = result. getItemMeta ( ) ;
meta. setDisplayName ( "Random Result" ) ;
meta. setLore ( Arrays. asList ( "§7Diamond Block: §a50%", "§7Coal Block: §a50%" ) ) ;
result. setItemMeta (meta ) ;
IRandomShapelessRecipe randomShapelessRecipe = new IRandomShapelessRecipe ( Arrays. asList (ingredientsArray ), result, "Random Shaped Recipe", UUID. randomUUID ( ), probMap ) ;
AbstractFancyCrafting. registerRecipe (randomShapelessRecipe ) ;
Installation:
Custom Recipes:
Custom Grids:
Vanilla Crafting Table (3x3 & 2x2):
Random Recipes (Results):
Recipe Blacklisting:
Auto Crafter:
Commands:
Sub commands of "/fc":
Spoiler: open
No arguments: Opens default grid. Permission: "fancycrafting.open"
"<1-8> <1-6>": Opens different grids, first width then heigth. Permission: "fancycrafting.open.<1-8>x<1-6>"
"<player>": Opens default grid for a player. Permission: "fancycrafting.open.other"
"<player> <1-8> <1-6>": Opens different grids for a player, first width then height. Permission: "fancycrafting.open.other.<1-8>x<1-6>"
"<1-8> <1-6>": Opens different grids, first width then heigth. Permission: "fancycrafting.open.<1-8>x<1-6>"
"<player>": Opens default grid for a player. Permission: "fancycrafting.open.other"
"<player> <1-8> <1-6>": Opens different grids for a player, first width then height. Permission: "fancycrafting.open.other.<1-8>x<1-6>"
Spoiler: reload
No arguments: Reload vanilla & custom recipes and config files. Permission: "fancycrafting.admin.reload"
Spoiler: create
No arguments: Opens a GUI to create a new custom recipe. Permission: "fancycrafting.admin.create"
Spoiler: edit
"<recipe-name>":
Spoiler: edit
Edit one or multiple custom recipes with the same name where "<recipe-name>" is the name of the recipe with " " replaced with "-". If there are two or more custom recipes with the same name, you can click through them by clicking the arrow buttons. Permission: "fancycrafting.admin.edit"
Spoiler: view
No arguments:
Spoiler: view
View all custom recipes. Permission: "fancycrafting.admin.view"
"<recipe-name>": View all custom recipes with the same name where "<recipe-name>" is the name of the recipe with " " replaced with "-". Most vanilla recipes can be viewed as well. Permission: "fancycrafting.view.<recipe-name>"
"<recipe-name>": View all custom recipes with the same name where "<recipe-name>" is the name of the recipe with " " replaced with "-". Most vanilla recipes can be viewed as well. Permission: "fancycrafting.view.<recipe-name>"
Spoiler: Crafting & permissions
All Players do not have these permissions by default, even if they are op.
All permission have to be set explicitly.
Crafting Custom Recipes with perms-for-custom-recipes Set to true requires the player to have the permission: "fancycrafting.craft.<recipe-name>" (replace " " with "-")
Crafting vanilla Recipes with perms-for-vanilla-recipes Set to true requires permission: "fancycrafting.craft.<recipe-name>" (replace " " with "-") where recipe-name is the Name of the result
All permission have to be set explicitly.
Crafting Custom Recipes with perms-for-custom-recipes Set to true requires the player to have the permission: "fancycrafting.craft.<recipe-name>" (replace " " with "-")
Crafting vanilla Recipes with perms-for-vanilla-recipes Set to true requires permission: "fancycrafting.craft.<recipe-name>" (replace " " with "-") where recipe-name is the Name of the result
Spoiler: Creating Recipe
"fancycrafting.admin.create"
Spoiler: Editing Recipe
"fancycrafting.admin.edit"
Spoiler: View All Recipes
"fancycrafting.admin.view"
Spoiler: Quick Crafting
"fancycrafting.qc"
Spoiler: Open Default GUI
"fancycrafting.open"
Spoiler: Reload
"fancycrafting.admin.reload"
Spoiler: Deluxe Menus implementation
To open the crafting GUI from inside a Deluxe Menus GUI you have to add the following commands:
Code (YAML):
- '
[close
]'
- ' [player ] fc open <delay=2>'
- ' [player ] fc open <delay=2>'
Important:
Requires ILibrary(https://www.spigotmc.org/resources/ilibrary.89796/)
Requires NBTNexus(https://www.spigotmc.org/resources/nbtnexus.111041/)
Quick facts
- Edition: Minecraft Java
- File type: .jar
- Minecraft versions listed: 1.14, 1.15, 1.16
- How to install: Install the matching mod loader (Forge, Fabric or NeoForge) for your Minecraft version. → Download the .jar. → Put it in the .minecraft/mods folder and launch that loader profile.
- Where to get it: Opens on Spigot — not every file is mirrored on our own servers.
Install steps are the general flow for this file type — How to install Minecraft Java mods & modpacks walks through it step by step.
FancyCrafting is a free Minecraft Java mod. Compatible with Minecraft 1.14, 1.15, 1.16, 1.17 and newer. Downloaded 14,433 times (via Spigot). Download it and open it directly in the game.