mirror of
https://github.com/minetest-mods/crafting_bench.git
synced 2024-11-30 23:03:44 +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