mirror of
https://github.com/minetest-mods/crafting_bench.git
synced 2024-11-28 06:13:42 +01:00
Initial commit
This was split out of the venerable Castle mod, https://github.com/minetest-mods/castle, which has been maintained by a long line of distinguished modders.
This commit is contained in:
commit
71e0b3a61e
17
.gitattributes
vendored
Normal file
17
.gitattributes
vendored
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
# Auto detect text files and perform LF normalization
|
||||||
|
* text=auto
|
||||||
|
|
||||||
|
# Custom for Visual Studio
|
||||||
|
*.cs diff=csharp
|
||||||
|
|
||||||
|
# Standard to msysgit
|
||||||
|
*.doc diff=astextplain
|
||||||
|
*.DOC diff=astextplain
|
||||||
|
*.docx diff=astextplain
|
||||||
|
*.DOCX diff=astextplain
|
||||||
|
*.dot diff=astextplain
|
||||||
|
*.DOT diff=astextplain
|
||||||
|
*.pdf diff=astextplain
|
||||||
|
*.PDF diff=astextplain
|
||||||
|
*.rtf diff=astextplain
|
||||||
|
*.RTF diff=astextplain
|
47
.gitignore
vendored
Normal file
47
.gitignore
vendored
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
# Windows image file caches
|
||||||
|
Thumbs.db
|
||||||
|
ehthumbs.db
|
||||||
|
|
||||||
|
# Folder config file
|
||||||
|
Desktop.ini
|
||||||
|
|
||||||
|
# Recycle Bin used on file shares
|
||||||
|
$RECYCLE.BIN/
|
||||||
|
|
||||||
|
# Windows Installer files
|
||||||
|
*.cab
|
||||||
|
*.msi
|
||||||
|
*.msm
|
||||||
|
*.msp
|
||||||
|
|
||||||
|
# Windows shortcuts
|
||||||
|
*.lnk
|
||||||
|
|
||||||
|
# =========================
|
||||||
|
# Operating System Files
|
||||||
|
# =========================
|
||||||
|
|
||||||
|
# OSX
|
||||||
|
# =========================
|
||||||
|
|
||||||
|
.DS_Store
|
||||||
|
.AppleDouble
|
||||||
|
.LSOverride
|
||||||
|
|
||||||
|
# Thumbnails
|
||||||
|
._*
|
||||||
|
|
||||||
|
# Files that might appear in the root of a volume
|
||||||
|
.DocumentRevisions-V100
|
||||||
|
.fseventsd
|
||||||
|
.Spotlight-V100
|
||||||
|
.TemporaryItems
|
||||||
|
.Trashes
|
||||||
|
.VolumeIcon.icns
|
||||||
|
|
||||||
|
# Directories potentially created on remote AFP share
|
||||||
|
.AppleDB
|
||||||
|
.AppleDesktop
|
||||||
|
Network Trash Folder
|
||||||
|
Temporary Items
|
||||||
|
.apdisk
|
21
LICENSE
Normal file
21
LICENSE
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright (c) 2016 Minetest Mods Team
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
16
README.txt
Normal file
16
README.txt
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
=-=-=-=-=-=-=-=-=-=
|
||||||
|
|
||||||
|
Crafting Bench
|
||||||
|
by: Philipbenr And DanDuncombe
|
||||||
|
|
||||||
|
=-=-=-=-=-=-=-=-=-=
|
||||||
|
|
||||||
|
Licence: MIT
|
||||||
|
|
||||||
|
see: LICENSE
|
||||||
|
|
||||||
|
=-=-=-=-=-=-=-=-=-=
|
||||||
|
|
||||||
|
An auto-crafting bench
|
||||||
|
|
||||||
|
=-=-=-=-=-=-=-=-=-=
|
3
depends.txt
Normal file
3
depends.txt
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
default
|
||||||
|
intllib?
|
||||||
|
hopper?
|
1
description.txt
Normal file
1
description.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
An auto-crafting bench
|
157
init.lua
Normal file
157
init.lua
Normal file
@ -0,0 +1,157 @@
|
|||||||
|
-- internationalization boilerplate
|
||||||
|
local MP = minetest.get_modpath(minetest.get_current_modname())
|
||||||
|
local S, NS = dofile(MP.."/intllib.lua")
|
||||||
|
|
||||||
|
minetest.register_alias("castle:workbench", "crafting_bench:workbench")
|
||||||
|
|
||||||
|
minetest.register_node("crafting_bench:workbench",{
|
||||||
|
description = S("Workbench"),
|
||||||
|
tiles = {
|
||||||
|
"crafting_bench_workbench_top.png",
|
||||||
|
"crafting_bench_workbench_bottom.png",
|
||||||
|
"crafting_bench_workbench_side.png",
|
||||||
|
"crafting_bench_workbench_side.png",
|
||||||
|
"crafting_bench_workbench_back.png",
|
||||||
|
"crafting_bench_workbench_front.png"
|
||||||
|
},
|
||||||
|
paramtype2 = "facedir",
|
||||||
|
paramtype = "light",
|
||||||
|
groups = {choppy=2,oddly_breakable_by_hand=2,flammable=2},
|
||||||
|
sounds = default.node_sound_wood_defaults(),
|
||||||
|
drawtype = "normal",
|
||||||
|
on_construct = function ( pos )
|
||||||
|
local meta = minetest.get_meta( pos )
|
||||||
|
meta:set_string( 'formspec',
|
||||||
|
'size[10,10;]' ..
|
||||||
|
default.gui_bg ..
|
||||||
|
default.gui_bg_img ..
|
||||||
|
default.gui_slots ..
|
||||||
|
'label[1,0;'..S('Source Material')..']' ..
|
||||||
|
'list[context;src;1,1;2,4;]' ..
|
||||||
|
'label[4,0;'..S('Recipe to Use')..']' ..
|
||||||
|
'list[context;rec;4,1;3,3;]' ..
|
||||||
|
'label[7.5,0;'..S('Craft Output')..']' ..
|
||||||
|
'list[context;dst;8,1;1,4;]' ..
|
||||||
|
'list[current_player;main;1,6;8,4;]' )
|
||||||
|
meta:set_string( 'infotext', S('Workbench'))
|
||||||
|
local inv = meta:get_inventory()
|
||||||
|
inv:set_size( 'src', 2 * 4 )
|
||||||
|
inv:set_size( 'rec', 3 * 3 )
|
||||||
|
inv:set_size( 'dst', 1 * 4 )
|
||||||
|
end,
|
||||||
|
can_dig = function(pos,player)
|
||||||
|
local meta = minetest.get_meta(pos);
|
||||||
|
local inv = meta:get_inventory()
|
||||||
|
return inv:is_empty("main")
|
||||||
|
end,
|
||||||
|
on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
|
||||||
|
minetest.log("action", S("@1 moves stuff in workbench at @2", player:get_player_name(), minetest.pos_to_string(pos)))
|
||||||
|
end,
|
||||||
|
on_metadata_inventory_put = function(pos, listname, index, stack, player)
|
||||||
|
minetest.log("action", S("@1 moves stuff to workbench at @2", player:get_player_name(), minetest.pos_to_string(pos)))
|
||||||
|
end,
|
||||||
|
on_metadata_inventory_take = function(pos, listname, index, stack, player)
|
||||||
|
minetest.log("action", S("@1 takes stuff from workbench at @2", player:get_player_name(), minetest.pos_to_string(pos)))
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
local get_recipe = function ( inv )
|
||||||
|
local result, needed, input
|
||||||
|
needed = inv:get_list( 'rec' )
|
||||||
|
|
||||||
|
result, input = minetest.get_craft_result( {
|
||||||
|
method = 'normal',
|
||||||
|
width = 3,
|
||||||
|
items = needed
|
||||||
|
})
|
||||||
|
|
||||||
|
local totalneed = {}
|
||||||
|
|
||||||
|
if result.item:is_empty() then
|
||||||
|
result = nil
|
||||||
|
else
|
||||||
|
result = result.item
|
||||||
|
for _, item in ipairs( needed ) do
|
||||||
|
if item ~= nil and not item:is_empty() and not inv:contains_item( 'src', item ) then
|
||||||
|
result = nil
|
||||||
|
break
|
||||||
|
end
|
||||||
|
if item ~= nil and not item:is_empty() then
|
||||||
|
if totalneed[item:get_name()] == nil then
|
||||||
|
totalneed[item:get_name()] = 1
|
||||||
|
else
|
||||||
|
totalneed[item:get_name()] = totalneed[item:get_name()] + 1
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
for name, number in pairs( totalneed ) do
|
||||||
|
local totallist = inv:get_list( 'src' )
|
||||||
|
for i, srcitem in pairs( totallist ) do
|
||||||
|
if srcitem:get_name() == name then
|
||||||
|
local taken = srcitem:take_item( number )
|
||||||
|
number = number - taken:get_count()
|
||||||
|
totallist[i] = srcitem
|
||||||
|
end
|
||||||
|
if number <= 0 then
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if number > 0 then
|
||||||
|
result = nil
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return needed, input, result
|
||||||
|
end
|
||||||
|
|
||||||
|
minetest.register_abm( {
|
||||||
|
nodenames = { 'crafting_bench:workbench' },
|
||||||
|
interval = 5,
|
||||||
|
chance = 1,
|
||||||
|
action = function ( pos, node )
|
||||||
|
local meta = minetest.get_meta( pos )
|
||||||
|
local inv = meta:get_inventory()
|
||||||
|
local result, newinput, needed
|
||||||
|
if not inv:is_empty( 'src' ) then
|
||||||
|
-- Check for a valid recipe and sufficient resources to craft it
|
||||||
|
needed, newinput, result = get_recipe( inv )
|
||||||
|
if result ~= nil and inv:room_for_item( 'dst', result ) then
|
||||||
|
inv:add_item( 'dst', result )
|
||||||
|
for i, item in pairs( needed ) do
|
||||||
|
if item ~= nil and item ~= '' then
|
||||||
|
inv:remove_item( 'src', ItemStack( item ) )
|
||||||
|
end
|
||||||
|
if newinput[i] ~= nil and not newinput[i]:is_empty() then
|
||||||
|
inv:add_item( 'src', newinput[i] )
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
} )
|
||||||
|
|
||||||
|
local function has_locked_chest_privilege(meta, player)
|
||||||
|
if player:get_player_name() ~= meta:get_string("owner") then
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
minetest.register_craft({
|
||||||
|
output = "crafting_bench:workbench",
|
||||||
|
recipe = {
|
||||||
|
{"default:steel_ingot","default:steel_ingot","default:steel_ingot"},
|
||||||
|
{"default:wood", "default:wood","default:steel_ingot"},
|
||||||
|
{"default:tree", "default:tree","default:steel_ingot"},
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
-- Hopper compatibility
|
||||||
|
if minetest.get_modpath("hopper") and hopper ~= nil and hopper.add_container ~= nil then
|
||||||
|
hopper:add_container({
|
||||||
|
{"top", "crafting_bench:workbench", "dst"},
|
||||||
|
{"side", "crafting_bench:workbench", "src"},
|
||||||
|
{"bottom", "crafting_bench:workbench", "src"},
|
||||||
|
})
|
||||||
|
end
|
45
intllib.lua
Normal file
45
intllib.lua
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
|
||||||
|
-- Fallback functions for when `intllib` is not installed.
|
||||||
|
-- Code released under Unlicense <http://unlicense.org>.
|
||||||
|
|
||||||
|
-- Get the latest version of this file at:
|
||||||
|
-- https://raw.githubusercontent.com/minetest-mods/intllib/master/lib/intllib.lua
|
||||||
|
|
||||||
|
local function format(str, ...)
|
||||||
|
local args = { ... }
|
||||||
|
local function repl(escape, open, num, close)
|
||||||
|
if escape == "" then
|
||||||
|
local replacement = tostring(args[tonumber(num)])
|
||||||
|
if open == "" then
|
||||||
|
replacement = replacement..close
|
||||||
|
end
|
||||||
|
return replacement
|
||||||
|
else
|
||||||
|
return "@"..open..num..close
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return (str:gsub("(@?)@(%(?)(%d+)(%)?)", repl))
|
||||||
|
end
|
||||||
|
|
||||||
|
local gettext, ngettext
|
||||||
|
if minetest.get_modpath("intllib") then
|
||||||
|
if intllib.make_gettext_pair then
|
||||||
|
-- New method using gettext.
|
||||||
|
gettext, ngettext = intllib.make_gettext_pair()
|
||||||
|
else
|
||||||
|
-- Old method using text files.
|
||||||
|
gettext = intllib.Getter()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Fill in missing functions.
|
||||||
|
|
||||||
|
gettext = gettext or function(msgid, ...)
|
||||||
|
return format(msgid, ...)
|
||||||
|
end
|
||||||
|
|
||||||
|
ngettext = ngettext or function(msgid, msgid_plural, n, ...)
|
||||||
|
return format(n==1 and msgid or msgid_plural, ...)
|
||||||
|
end
|
||||||
|
|
||||||
|
return gettext, ngettext
|
33
locale/template.pot
Normal file
33
locale/template.pot
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
# SOME DESCRIPTIVE TITLE.
|
||||||
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
|
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||||
|
#
|
||||||
|
#, fuzzy
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2017-02-25 19:50-0700\n"
|
||||||
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=CHARSET\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
|
||||||
|
#: init.lua:8
|
||||||
|
msgid "Workbench"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: init.lua:48
|
||||||
|
msgid "@1 moves stuff in workbench at @2"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: init.lua:51
|
||||||
|
msgid "@1 moves stuff to workbench at @2"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: init.lua:54
|
||||||
|
msgid "@1 takes stuff from workbench at @2"
|
||||||
|
msgstr ""
|
1
mod.conf
Normal file
1
mod.conf
Normal file
@ -0,0 +1 @@
|
|||||||
|
name = crafting_bench
|
20
textures/LICENSE.txt
Normal file
20
textures/LICENSE.txt
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
--------------------------------------------
|
||||||
|
|
||||||
|
License Textures: Philipner - CC-BY-SA 3.0
|
||||||
|
|
||||||
|
-crafting_bench_workbench_back.png
|
||||||
|
-crafting_bench_workbench_front.png
|
||||||
|
-crafting_bench_workbench_side.png
|
||||||
|
-crafting_bench_workbench_top.png
|
||||||
|
|
||||||
|
|
||||||
|
--------------------------------------------
|
||||||
|
|
||||||
|
16 px textures based on crafting_bench mod
|
||||||
|
original textures by Philipner
|
||||||
|
|
||||||
|
License Textures: Napiophelios - CC-BY-SA 3.0
|
||||||
|
|
||||||
|
-crafting_bench_workbench_bottom.png
|
||||||
|
|
||||||
|
--------------------------------------------
|
BIN
textures/crafting_bench_workbench_back.png
Normal file
BIN
textures/crafting_bench_workbench_back.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 383 B |
BIN
textures/crafting_bench_workbench_bottom.png
Normal file
BIN
textures/crafting_bench_workbench_bottom.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 369 B |
BIN
textures/crafting_bench_workbench_front.png
Normal file
BIN
textures/crafting_bench_workbench_front.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 391 B |
BIN
textures/crafting_bench_workbench_side.png
Normal file
BIN
textures/crafting_bench_workbench_side.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 342 B |
BIN
textures/crafting_bench_workbench_top.png
Normal file
BIN
textures/crafting_bench_workbench_top.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 336 B |
Loading…
Reference in New Issue
Block a user