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:
FaceDeer 2017-02-25 19:55:21 -07:00
commit 71e0b3a61e
16 changed files with 361 additions and 0 deletions

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

@ -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

@ -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

@ -0,0 +1,16 @@
=-=-=-=-=-=-=-=-=-=
Crafting Bench
by: Philipbenr And DanDuncombe
=-=-=-=-=-=-=-=-=-=
Licence: MIT
see: LICENSE
=-=-=-=-=-=-=-=-=-=
An auto-crafting bench
=-=-=-=-=-=-=-=-=-=

3
depends.txt Normal file

@ -0,0 +1,3 @@
default
intllib?
hopper?

1
description.txt Normal file

@ -0,0 +1 @@
An auto-crafting bench

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

@ -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

@ -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

@ -0,0 +1 @@
name = crafting_bench

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
--------------------------------------------

Binary file not shown.

After

Width:  |  Height:  |  Size: 383 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 369 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 391 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 342 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 336 B