Cuberite Forum
How do I add crafting and furnace recipes? - Printable Version

+- Cuberite Forum (https://forum.cuberite.org)
+-- Forum: Plugins (https://forum.cuberite.org/forum-1.html)
+--- Forum: Plugin Discussion (https://forum.cuberite.org/forum-8.html)
+--- Thread: How do I add crafting and furnace recipes? (/thread-2417.html)



How do I add crafting and furnace recipes? - Assossa - 03-30-2016

Hey,
I'm checking out Cuberite for a custom server I want to start. I'm a Java plugin developer for Spigot, so this is quite a change. I'm looking for a way to add and remove furnace and crafting recipes. I couldn't find it in the docs and the information on the forums is very fragmented and confusing.

Thanks for your help!


RE: How do I add crafting and furnace recipes? - sphinxc0re - 03-30-2016

Hello and welcome to the Forum Smile

Cuberite has every furnace-, crafting- and brewing-recipe inside it's own text file. There is a crafting.txt, a furnace.txt as well as a brewing.txt in the 'Server' directory of the git repo. I think @NiLSPACE can tell you more about the documentation.


RE: How do I add crafting and furnace recipes? - LogicParrot - 03-30-2016

We should probably have a section in the book for explaining the recipe file format.


RE: How do I add crafting and furnace recipes? - NiLSPACE - 03-30-2016

We do have documentation about the crafting.txt file. It's at the top of the file itself: https://github.com/cuberite/cuberite/blob/master/Server/crafting.txt#L1-L34 If you want to use this method then you might like to take a look at my CraftMaker plugin. It's a plugin that allows people to create their own recipes by simply drawing them in a 3x3 grid.

If you want to remove a recipe as a plugin you'll have to use the OnPreCrafting hook. If you want to modify a recipe you'll have you have to use the OnPostCrafting hook. In case you want to add new recipes you'll have to use OnCraftingNoRecipe


RE: How do I add crafting and furnace recipes? - Assossa - 04-02-2016

Code:
PLUGIN = nil

--VARIABLES
recipes = {}

--PLUGIN
function Initialize(Plugin)
    Plugin:SetName("SmpMc")
    Plugin:SetVersion(1)

    -- Hooks
    -- cPluginManager.AddHook(cPluginManager.<hook>, <function>)
    cPluginManager.AddHook(cPluginManager.HOOK_CRAFTING_NO_RECIPE, OnCraftingNoRecipe)
    cPluginManager:AddHook(cPluginManager.HOOK_POST_CRAFTING, OnPostCrafting);

    PLUGIN = Plugin

    -- Command Bindings
    -- cPluginManager.BindCommand("/<command>", "<permission>", <function>, "<desc>")

    --Recipes
    table.insert(recipes, {{265, 264, 265, 265, -1, 265, 265, 265, 265}, makeItem(61, "§rEnhanced Furnace")})

    LOG("Initialised " .. Plugin:GetName() .. " v." .. Plugin:GetVersion())
    return true
end

function OnDisable()
    LOG(PLUGIN:GetName() .. " is shutting down...")
end

--HOOKS
function OnCraftingNoRecipe(Player, Grid, Recipe)
    r = getRecipe(Grid)
    if r == nil then return end
    Recipe:SetResult(r)
    return true
end

function OnPostCrafting(Player, Grid, Recipe)
    if getRecipe(Grid) ~= nil then Recipe:ConsumeIngredients(Grid) end
end

--UTIL
function getRecipe(Grid)
    items = {}
    table.insert(items, Grid:GetItem(0, 0).m_ItemType)
    table.insert(items, Grid:GetItem(1, 0).m_ItemType)
    table.insert(items, Grid:GetItem(2, 0).m_ItemType)
    table.insert(items, Grid:GetItem(0, 1).m_ItemType)
    table.insert(items, Grid:GetItem(1, 1).m_ItemType)
    table.insert(items, Grid:GetItem(2, 1).m_ItemType)
    table.insert(items, Grid:GetItem(0, 2).m_ItemType)
    table.insert(items, Grid:GetItem(1, 2).m_ItemType)
    table.insert(items, Grid:GetItem(2, 2).m_ItemType)

    for k,v in pairs(recipes) do
        if arrayEquals(items, v[1]) then
            return v[2]
        end
    end

    return nil
end

function makeItem(Type, Name)
    i = cItem(Type)
    i.m_CustomName = Name
    return i
end

function arrayEquals(ArrayOne, ArrayTwo)
    if #ArrayOne ~= #ArrayTwo then return false end
    for k,v in pairs(ArrayOne) do
        if ArrayTwo[k] ~= v then return false end
    end
    return true
end
This is what I have figured out so far for adding a new recipe. It works fine, except when I craft the item the ingredients aren't deleted. How do I fix this?


RE: How do I add crafting and furnace recipes? - Seadragon91 - 04-02-2016

This is a known bug: https://github.com/cuberite/cuberite/issues/2503. I think that there is a missing packet update
I also tried it to fix a few times...