mirror of
				https://github.com/minetest-mods/craftguide.git
				synced 2025-11-04 06:55:30 +01:00 
			
		
		
		
	Do not require to specify width in custom recipes
This commit is contained in:
		
							
								
								
									
										12
									
								
								API.md
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								API.md
									
									
									
									
									
								
							@@ -19,12 +19,22 @@ craftguide.register_craft_type("digging", {
 | 
			
		||||
```Lua
 | 
			
		||||
craftguide.register_craft({
 | 
			
		||||
	type   = "digging",
 | 
			
		||||
	width  = 1,
 | 
			
		||||
	result = "default:cobble 2",
 | 
			
		||||
	items  = {"default:stone"},
 | 
			
		||||
})
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
```Lua
 | 
			
		||||
craftguide.register_craft({
 | 
			
		||||
	result = "default:cobble 16",
 | 
			
		||||
	items  = {
 | 
			
		||||
		"default:stone, default:stone, default:stone",
 | 
			
		||||
		"default:stone,              , default:stone",
 | 
			
		||||
		"default:stone, default:stone, default:stone",
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Recipes can also be registered in a Minecraft-like way:
 | 
			
		||||
 | 
			
		||||
```Lua
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										47
									
								
								init.lua
									
									
									
									
									
								
							
							
						
						
									
										47
									
								
								init.lua
									
									
									
									
									
								
							@@ -121,10 +121,6 @@ local function is_str(x)
 | 
			
		||||
	return type(x) == "string"
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
local function is_num(x)
 | 
			
		||||
	return type(x) == "number"
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
local function is_table(x)
 | 
			
		||||
	return type(x) == "table"
 | 
			
		||||
end
 | 
			
		||||
@@ -160,6 +156,10 @@ local function clean_name(item)
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
function craftguide.register_craft(def)
 | 
			
		||||
	def.custom = true
 | 
			
		||||
	def.width = 0
 | 
			
		||||
	local c = 1
 | 
			
		||||
 | 
			
		||||
	if not is_table(def) or not next(def) then
 | 
			
		||||
		return log("error", "craftguide.register_craft(): craft definition missing")
 | 
			
		||||
	end
 | 
			
		||||
@@ -172,14 +172,6 @@ function craftguide.register_craft(def)
 | 
			
		||||
		return log("error", "craftguide.register_craft(): output missing")
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
	if not is_table(def.items) then
 | 
			
		||||
		def.items = {}
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
	if not is_num(def.width) then
 | 
			
		||||
		def.width = 0
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
	if def.grid then
 | 
			
		||||
		if not is_table(def.grid) then
 | 
			
		||||
			def.grid = {}
 | 
			
		||||
@@ -198,11 +190,38 @@ function craftguide.register_craft(def)
 | 
			
		||||
			end
 | 
			
		||||
		end
 | 
			
		||||
 | 
			
		||||
		local c = 1
 | 
			
		||||
		for symbol in gmatch(concat(def.grid), ".") do
 | 
			
		||||
			def.items[c] = def.key[symbol]
 | 
			
		||||
			c = c + 1
 | 
			
		||||
		end
 | 
			
		||||
	else
 | 
			
		||||
		if not is_table(def.items) then
 | 
			
		||||
			def.items = {}
 | 
			
		||||
		end
 | 
			
		||||
 | 
			
		||||
		local len = #def.items
 | 
			
		||||
 | 
			
		||||
		for i = 1, len do
 | 
			
		||||
			def.items[i] = def.items[i]:gsub(",,", ", ,")
 | 
			
		||||
 | 
			
		||||
			local row = split(def.items[i], ",")
 | 
			
		||||
			local l = #row
 | 
			
		||||
 | 
			
		||||
			if l > def.width then
 | 
			
		||||
				def.width = l
 | 
			
		||||
			end
 | 
			
		||||
		end
 | 
			
		||||
 | 
			
		||||
		for i = 1, len do
 | 
			
		||||
			while #split(def.items[i], ",") < def.width do
 | 
			
		||||
				def.items[i] = def.items[i] .. ", "
 | 
			
		||||
			end
 | 
			
		||||
		end
 | 
			
		||||
 | 
			
		||||
		for name in gmatch(concat(def.items, ","), "[%s%w_:]+") do
 | 
			
		||||
			def.items[c] = clean_name(name)
 | 
			
		||||
			c = c + 1
 | 
			
		||||
		end
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
	local output = match(def.output, "%S*")
 | 
			
		||||
@@ -547,7 +566,7 @@ local function get_recipe_fs(data, fs)
 | 
			
		||||
 | 
			
		||||
	if recipe.type == "cooking" then
 | 
			
		||||
		cooktime, width = width, 1
 | 
			
		||||
	elseif width == 0 then
 | 
			
		||||
	elseif width == 0 and not recipe.custom then
 | 
			
		||||
		shapeless = true
 | 
			
		||||
		local n = #recipe.items
 | 
			
		||||
		width = (n < 5 and n > 1) and 2 or min(3, max(1, n))
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user