Add ts_doors
|
@ -52,6 +52,10 @@ origin https://github.com/Sokomine/mg_villages (fetch)
|
|||
* master 69ac3f2 [origin/master] pass pr on to grow_trees for mg mapgen
|
||||
Mod: buildings/mg_villages
|
||||
|
||||
origin git@github.com:minetest-mods/ts_doors.git (fetch)
|
||||
* master 2e8dd2d [origin/master] Add basic_materials to optional dependencies.
|
||||
Mod: buildings/ts_doors
|
||||
|
||||
origin https://github.com/minetest-mods/dynamic_liquid (fetch)
|
||||
* master 84a0e13 [origin/master] update translation template
|
||||
Mod: environment/dynamic_liquid
|
||||
|
@ -92,6 +96,10 @@ origin https://github.com/appgurueu/modlib (fetch)
|
|||
* master 77977a5 [origin/master] Use ... instead of arg
|
||||
Mod: lib_api/modlib
|
||||
|
||||
origin git@github.com:minetest-mods/ts_workshop.git (fetch)
|
||||
* master fa836aa [origin/master] Switch from minetest.after to node timers
|
||||
Mod: lib_api/ts_workshop
|
||||
|
||||
origin https://github.com/hkzorman/advanced_npc (fetch)
|
||||
* master a43233f [origin/master] Merge pull request #53 from hkzorman/clean_api
|
||||
Mod: mobs/advanced_npc
|
||||
|
|
|
@ -0,0 +1,36 @@
|
|||
License for Textures
|
||||
--------------------
|
||||
|
||||
CC0 Public Domain
|
||||
|
||||
See https://creativecommons.org/publicdomain/zero/1.0/ for details.
|
||||
|
||||
|
||||
|
||||
|
||||
License for Code
|
||||
----------------
|
||||
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2016 Thomas S.
|
||||
Copyright (C) 2016 webdesigner97 (for workshop code)
|
||||
Copyright (C) 2016 cheapie (for workshop code)
|
||||
|
||||
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.
|
|
@ -0,0 +1,11 @@
|
|||
ts_doors
|
||||
========
|
||||
|
||||
This mod adds more doors.
|
||||
It was made by Thomas-S.
|
||||
For license see LICENSE file.
|
||||
|
||||
Special thanks to Wuzzy2, who helped to improve this mod by suggesting many good ideas.
|
||||
Special thanks to webdesigner97 and cheapie, who contributed some code for the door workshop.
|
||||
|
||||
**NOTE:** This mod depends on the [ts_workshop](https://github.com/minetest-mods/ts_workshop) mod.
|
|
@ -0,0 +1,8 @@
|
|||
default
|
||||
ts_workshop
|
||||
doors
|
||||
moretrees?
|
||||
moreores?
|
||||
technic?
|
||||
ethereal?
|
||||
basic_materials?
|
|
@ -0,0 +1 @@
|
|||
Adds doors for all kinds of wood.
|
|
@ -0,0 +1,641 @@
|
|||
ts_doors = {}
|
||||
|
||||
ts_doors.registered_doors = {}
|
||||
|
||||
ts_doors.sounds = {}
|
||||
|
||||
-- Used for localization
|
||||
local S = minetest.get_translator("ts_doors")
|
||||
|
||||
-- Use this to generate the translation template file.
|
||||
--[[
|
||||
local oldS = S
|
||||
local function S(x)
|
||||
print(x .. "=")
|
||||
return oldS(x)
|
||||
end
|
||||
]]
|
||||
|
||||
if default.node_sound_metal_defaults then
|
||||
ts_doors.sounds.metal = {
|
||||
sounds = default.node_sound_metal_defaults(),
|
||||
sound_open = "doors_steel_door_open",
|
||||
sound_close = "doors_steel_door_close",
|
||||
}
|
||||
else
|
||||
ts_doors.sounds.metal = {
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
sound_open = "doors_steel_door_open",
|
||||
sound_close = "doors_steel_door_close",
|
||||
}
|
||||
end
|
||||
|
||||
ts_doors.sounds.wood = {
|
||||
sounds = default.node_sound_wood_defaults(),
|
||||
sound_open = "doors_door_open",
|
||||
sound_close = "doors_door_close"
|
||||
}
|
||||
|
||||
ts_doors.sounds.glass = {
|
||||
sounds = default.node_sound_glass_defaults(),
|
||||
sound_open = "doors_glass_door_open",
|
||||
sound_close = "doors_glass_door_close",
|
||||
}
|
||||
|
||||
local function get_door_name(meta, item)
|
||||
local door_type_string = meta:get_int("trapdoor") == 1 and "trapdoor_" or "door_"
|
||||
local locked_string = meta:get_int("locked") == 1 and "locked_" or ""
|
||||
local solid_string = meta:get_int("solid") == 1 and "full_" or ""
|
||||
return "ts_doors:" .. door_type_string .. solid_string .. locked_string .. item:gsub(":", "_")
|
||||
end
|
||||
|
||||
local function register_door_alias(name, convert_to)
|
||||
minetest.register_alias(name, convert_to)
|
||||
minetest.register_alias(name .. "_a", convert_to .. "_a")
|
||||
minetest.register_alias(name .. "_b", convert_to .. "_b")
|
||||
minetest.register_alias(name .. "_c", convert_to .. "_c")
|
||||
minetest.register_alias(name .. "_d", convert_to .. "_d")
|
||||
end
|
||||
local function register_trapdoor_alias(name, convert_to)
|
||||
minetest.register_alias(name, convert_to)
|
||||
minetest.register_alias(name .. "_open", convert_to .. "_open")
|
||||
end
|
||||
|
||||
function ts_doors.register_alias(name, convert_to)
|
||||
name = name:gsub(":", "_")
|
||||
convert_to = convert_to:gsub(":", "_")
|
||||
for _,style in pairs({"", "full_", "locked_", "full_locked_"}) do
|
||||
register_door_alias("ts_doors:door_" .. style .. name, "ts_doors:door_" .. style .. convert_to)
|
||||
register_trapdoor_alias("ts_doors:trapdoor_" .. style .. name, "ts_doors:trapdoor_" .. style .. convert_to)
|
||||
end
|
||||
end
|
||||
|
||||
function ts_doors.register_door(item, description, texture, sounds, recipe)
|
||||
if not minetest.registered_nodes[item] then
|
||||
minetest.log("[ts_doors] bug found: "..item.." is not a registered node. Cannot create doors")
|
||||
return
|
||||
end
|
||||
if not sounds then
|
||||
sounds = {}
|
||||
end
|
||||
recipe = recipe or item
|
||||
ts_doors.registered_doors[item:gsub(":", "_")] = recipe
|
||||
register_door_alias("doors:ts_door_" .. item:gsub(":", "_"), "ts_doors:door_" .. item:gsub(":", "_"))
|
||||
register_door_alias("doors:ts_door_full_" .. item:gsub(":", "_"), "ts_doors:door_full_" .. item:gsub(":", "_"))
|
||||
register_door_alias("doors:ts_door_locked_" .. item:gsub(":", "_"), "ts_doors:door_locked_" .. item:gsub(":", "_"))
|
||||
register_door_alias("doors:ts_door_full_locked_" .. item:gsub(":", "_"), "ts_doors:door_full_locked_" .. item:gsub(":", "_"))
|
||||
|
||||
|
||||
local groups = minetest.registered_nodes[item].groups
|
||||
local door_groups = {door=1}
|
||||
for k, v in pairs(groups) do
|
||||
if k ~= "wood" then
|
||||
door_groups[k] = v
|
||||
end
|
||||
end
|
||||
|
||||
doors.register("ts_doors:door_" .. item:gsub(":", "_"), {
|
||||
tiles = { { name = "[combine:32x38:0,0=" .. texture .. ":0,16=" .. texture .. ":0,32=" .. texture .. ":16,0=" .. texture .. ":16,16=" .. texture .. ":16,32=" .. texture .. "^[transformR90^[colorize:#fff:30^ts_doors_base.png^[noalpha^[makealpha:0,255,0", backface_culling = true } },
|
||||
description = S(description .. " Windowed Door"),
|
||||
inventory_image = "[combine:32x32:0,8=" .. texture .. ":16,8=" .. texture .. "^[transformR90^[colorize:#fff:30^ts_doors_base_inv.png^[noalpha^[makealpha:0,255,0",
|
||||
groups = table.copy(door_groups),
|
||||
sounds = sounds.sounds or nil,
|
||||
sound_open = sounds.sound_open or nil,
|
||||
sound_close = sounds.sound_close or nil,
|
||||
})
|
||||
|
||||
doors.register("ts_doors:door_full_" .. item:gsub(":", "_"), {
|
||||
tiles = { { name = "[combine:32x38:0,0=" .. texture .. ":0,16=" .. texture .. ":0,32=" .. texture .. ":16,0=" .. texture .. ":16,16=" .. texture .. ":16,32=" .. texture .. "^[transformR90^[colorize:#fff:30^ts_doors_base_full.png^[noalpha", backface_culling = true } },
|
||||
description = S("Solid " .. description .. " Door"),
|
||||
inventory_image = "[combine:32x32:0,8=" .. texture .. ":16,8=" .. texture .. "^[transformR90^[colorize:#fff:30^ts_doors_base_full_inv.png^[noalpha^[makealpha:0,255,0",
|
||||
groups = table.copy(door_groups),
|
||||
sounds = sounds.sounds or nil,
|
||||
sound_open = sounds.sound_open or nil,
|
||||
sound_close = sounds.sound_close or nil,
|
||||
})
|
||||
|
||||
doors.register_trapdoor("ts_doors:trapdoor_" .. item:gsub(":", "_"), {
|
||||
description = S("Windowed " .. description .. " Trapdoor"),
|
||||
inventory_image = texture .. "^[transformR90^[colorize:#fff:30^ts_doors_base_trapdoor.png^[noalpha^[makealpha:0,255,0",
|
||||
wield_image = texture .. "^[transformR90^[colorize:#fff:30^ts_doors_base_trapdoor.png^[noalpha^[makealpha:0,255,0",
|
||||
tile_front = texture .. "^[transformR90^[colorize:#fff:30^ts_doors_base_trapdoor.png^[noalpha^[makealpha:0,255,0",
|
||||
tile_side = texture .. "^[colorize:#fff:30",
|
||||
groups = table.copy(door_groups),
|
||||
sounds = sounds.sounds or nil,
|
||||
sound_open = sounds.sound_open or nil,
|
||||
sound_close = sounds.sound_close or nil,
|
||||
})
|
||||
|
||||
doors.register_trapdoor("ts_doors:trapdoor_full_" .. item:gsub(":", "_"), {
|
||||
description = S("Solid " .. description .. " Trapdoor"),
|
||||
inventory_image = texture .. "^[transformR90^[colorize:#fff:30^ts_doors_base_trapdoor_full.png^[noalpha",
|
||||
wield_image = texture .. "^[transformR90^[colorize:#fff:30^ts_doors_base_trapdoor_full.png^[noalpha",
|
||||
tile_front = texture .. "^[transformR90^[colorize:#fff:30^ts_doors_base_trapdoor_full.png^[noalpha",
|
||||
tile_side = texture .. "^[colorize:#fff:30",
|
||||
groups = table.copy(door_groups),
|
||||
sounds = sounds.sounds or nil,
|
||||
sound_open = sounds.sound_open or nil,
|
||||
sound_close = sounds.sound_close or nil,
|
||||
})
|
||||
|
||||
door_groups.level = 2
|
||||
|
||||
doors.register("ts_doors:door_locked_" .. item:gsub(":", "_"), {
|
||||
tiles = { { name = "[combine:32x38:0,0=" .. texture .. ":0,16=" .. texture .. ":0,32=" .. texture .. ":16,0=" .. texture .. ":16,16=" .. texture .. ":16,32=" .. texture .. "^[transformR90^[colorize:#fff:30^ts_doors_base_locked.png^[noalpha^[makealpha:0,255,0", backface_culling = true } },
|
||||
description = S("Windowed Locked " .. description .. " Door"),
|
||||
inventory_image = "[combine:32x32:0,8=" .. texture .. ":16,8=" .. texture .. "^[transformR90^[colorize:#fff:30^ts_doors_base_locked_inv.png^[noalpha^[makealpha:0,255,0",
|
||||
protected = true,
|
||||
groups = table.copy(door_groups),
|
||||
sound_open = "doors_steel_door_open",
|
||||
sound_close = "doors_steel_door_close",
|
||||
sounds = sounds.sounds or nil,
|
||||
sound_open = sounds.sound_open or nil,
|
||||
sound_close = sounds.sound_close or nil,
|
||||
})
|
||||
|
||||
doors.register("ts_doors:door_full_locked_" .. item:gsub(":", "_"), {
|
||||
tiles = { { name = "[combine:32x38:0,0=" .. texture .. ":0,16=" .. texture .. ":0,32=" .. texture .. ":16,0=" .. texture .. ":16,16=" .. texture .. ":16,32=" .. texture .. "^[transformR90^[colorize:#fff:30^ts_doors_base_full_locked.png^[noalpha", backface_culling = true } },
|
||||
description = S("Solid Locked " .. description .. " Door"),
|
||||
inventory_image = "[combine:32x32:0,8=" .. texture .. ":16,8=" .. texture .. "^[transformR90^[colorize:#fff:30^ts_doors_base_full_locked_inv.png^[noalpha^[makealpha:0,255,0",
|
||||
protected = true,
|
||||
groups = table.copy(door_groups),
|
||||
sound_open = "doors_steel_door_open",
|
||||
sound_close = "doors_steel_door_close",
|
||||
sounds = sounds.sounds or nil,
|
||||
sound_open = sounds.sound_open or nil,
|
||||
sound_close = sounds.sound_close or nil,
|
||||
})
|
||||
|
||||
doors.register_trapdoor("ts_doors:trapdoor_locked_" .. item:gsub(":", "_"), {
|
||||
description = S("Windowed Locked " .. description .. " Trapdoor"),
|
||||
inventory_image = texture .. "^[transformR90^[colorize:#fff:30^ts_doors_base_trapdoor_locked.png^[noalpha^[makealpha:0,255,0",
|
||||
wield_image = texture .. "^[transformR90^[colorize:#fff:30^ts_doors_base_trapdoor_locked.png^[noalpha^[makealpha:0,255,0",
|
||||
tile_front = texture .. "^[transformR90^[colorize:#fff:30^ts_doors_base_trapdoor_locked.png^[noalpha^[makealpha:0,255,0",
|
||||
tile_side = texture .. "^[colorize:#fff:30",
|
||||
protected = true,
|
||||
groups = table.copy(door_groups),
|
||||
sounds = sounds.sounds or nil,
|
||||
sound_open = sounds.sound_open or nil,
|
||||
sound_close = sounds.sound_close or nil,
|
||||
})
|
||||
|
||||
doors.register_trapdoor("ts_doors:trapdoor_full_locked_" .. item:gsub(":", "_"), {
|
||||
description = S("Solid Locked " .. description .. " Trapdoor"),
|
||||
inventory_image = texture .. "^[transformR90^[colorize:#fff:30^ts_doors_base_trapdoor_full_locked.png^[noalpha",
|
||||
wield_image = texture .. "^[transformR90^[colorize:#fff:30^ts_doors_base_trapdoor_full_locked.png^[noalpha",
|
||||
tile_front = texture .. "^[transformR90^[colorize:#fff:30^ts_doors_base_trapdoor_full_locked.png^[noalpha",
|
||||
tile_side = texture .. "^[colorize:#fff:30",
|
||||
protected = true,
|
||||
groups = table.copy(door_groups),
|
||||
sounds = sounds.sounds or nil,
|
||||
sound_open = sounds.sound_open or nil,
|
||||
sound_close = sounds.sound_close or nil,
|
||||
})
|
||||
end
|
||||
|
||||
ts_doors.register_door("default:aspen_wood", "Aspen", "default_aspen_wood.png", ts_doors.sounds.wood)
|
||||
ts_doors.register_door("default:pine_wood", "Pine", "default_pine_wood.png", ts_doors.sounds.wood)
|
||||
ts_doors.register_door("default:acacia_wood", "Acacia", "default_acacia_wood.png", ts_doors.sounds.wood)
|
||||
ts_doors.register_door("default:wood", "Wooden", "default_wood.png", ts_doors.sounds.wood)
|
||||
ts_doors.register_door("default:junglewood", "Jungle Wood", "default_junglewood.png", ts_doors.sounds.wood)
|
||||
|
||||
if minetest.get_modpath("moretrees") then
|
||||
ts_doors.register_door("moretrees:apple_tree_planks", "Apple Tree", "moretrees_apple_tree_wood.png", ts_doors.sounds.wood)
|
||||
ts_doors.register_door("moretrees:beech_planks", "Beech", "moretrees_beech_wood.png", ts_doors.sounds.wood)
|
||||
ts_doors.register_door("moretrees:birch_planks", "Birch", "moretrees_birch_wood.png", ts_doors.sounds.wood)
|
||||
ts_doors.register_door("moretrees:fir_planks", "Fir", "moretrees_fir_wood.png", ts_doors.sounds.wood)
|
||||
ts_doors.register_door("moretrees:oak_planks", "Oak", "moretrees_oak_wood.png", ts_doors.sounds.wood)
|
||||
ts_doors.register_door("moretrees:palm_planks", "Palm", "moretrees_palm_wood.png", ts_doors.sounds.wood)
|
||||
ts_doors.register_door("moretrees:rubber_tree_planks", "Rubber Tree", "moretrees_rubber_tree_wood.png", ts_doors.sounds.wood)
|
||||
ts_doors.register_door("moretrees:sequoia_planks", "Sequoia", "moretrees_sequoia_wood.png", ts_doors.sounds.wood)
|
||||
ts_doors.register_door("moretrees:spruce_planks", "Spruce", "moretrees_spruce_wood.png", ts_doors.sounds.wood)
|
||||
ts_doors.register_door("moretrees:willow_planks", "Willow", "moretrees_willow_wood.png", ts_doors.sounds.wood)
|
||||
end
|
||||
|
||||
if minetest.get_modpath("ethereal") then
|
||||
ts_doors.register_door("ethereal:banana_wood", "Banana", "banana_wood.png", ts_doors.sounds.wood)
|
||||
ts_doors.register_door("ethereal:birch_wood", "Birch", "moretrees_birch_wood.png", ts_doors.sounds.wood)
|
||||
ts_doors.register_door("ethereal:frost_wood", "Frost", "frost_wood.png", ts_doors.sounds.wood)
|
||||
ts_doors.register_door("ethereal:mushroom_trunk", "Mushroom", "mushroom_trunk.png", ts_doors.sounds.wood)
|
||||
ts_doors.register_door("ethereal:palm_wood", "Palm", "moretrees_palm_wood.png", ts_doors.sounds.wood)
|
||||
ts_doors.register_door("ethereal:redwood_wood", "Redwood", "redwood_wood.png", ts_doors.sounds.wood)
|
||||
ts_doors.register_door("ethereal:sakura_wood", "Sakura", "ethereal_sakura_wood.png", ts_doors.sounds.wood)
|
||||
ts_doors.register_door("ethereal:scorched_tree", "Scorched", "scorched_tree.png", ts_doors.sounds.wood)
|
||||
ts_doors.register_door("ethereal:willow_wood", "Willow", "willow_wood.png", ts_doors.sounds.wood)
|
||||
ts_doors.register_door("ethereal:yellow_wood", "Healing Tree", "yellow_wood.png", ts_doors.sounds.wood)
|
||||
ts_doors.register_door("ethereal:crystal_block", "Crystal", "crystal_block.png", ts_doors.sounds.metal, "ethereal:crystal_ingot")
|
||||
end
|
||||
|
||||
|
||||
ts_doors.register_door("default:bronzeblock", "Bronze", "default_bronze_block.png", ts_doors.sounds.metal, "default:bronze_ingot")
|
||||
ts_doors.register_door("default:copperblock", "Copper", "default_copper_block.png", ts_doors.sounds.metal, "default:copper_ingot")
|
||||
ts_doors.register_door("default:diamondblock", "Diamond", "default_diamond_block.png", ts_doors.sounds.metal, "default:diamond")
|
||||
ts_doors.register_door("default:goldblock", "Gold", "default_gold_block.png", ts_doors.sounds.metal, "default:gold_ingot")
|
||||
ts_doors.register_door("default:steelblock", "Steel", minetest.registered_nodes["default:steelblock"].tiles[1], ts_doors.sounds.metal, "default:steel_ingot")
|
||||
|
||||
if minetest.get_modpath("moreores") then
|
||||
ts_doors.register_door("moreores:mithril_block", "Mithril", "moreores_mithril_block.png", ts_doors.sounds.metal, "moreores:mithril_ingot")
|
||||
ts_doors.register_door("moreores:silver_block", "Silver", "moreores_silver_block.png", ts_doors.sounds.metal, "moreores:silver_ingot")
|
||||
ts_doors.register_door("moreores:tin_block", "Tin", "moreores_tin_block.png", ts_doors.sounds.metal, "moreores:tin_ingot")
|
||||
end
|
||||
|
||||
if minetest.get_modpath("technic") then
|
||||
ts_doors.register_door("technic:carbon_steel_block", "Carbon Steel", "technic_carbon_steel_block.png", ts_doors.sounds.metal, "technic:carbon_steel_ingot")
|
||||
ts_doors.register_door("technic:cast_iron_block", "Cast Iron", "technic_cast_iron_block.png", ts_doors.sounds.metal, "technic:cast_iron_ingot")
|
||||
ts_doors.register_door("technic:chromium_block", "Chromium", "technic_chromium_block.png", ts_doors.sounds.metal, "technic:chromium_ingot")
|
||||
ts_doors.register_door("technic:lead_block", "Lead", "technic_lead_block.png", ts_doors.sounds.metal, "technic:lead_ingot")
|
||||
ts_doors.register_door("technic:stainless_steel_block", "Stainless Steel", "technic_stainless_steel_block.png", ts_doors.sounds.metal, "technic:stainless_steel_ingot")
|
||||
ts_doors.register_door("technic:zinc_block", "Zinc", "technic_zinc_block.png", ts_doors.sounds.metal, "technic:zinc_ingot")
|
||||
ts_doors.register_door("technic:blast_resistant_concrete", "Blast Resistant Concrete", "technic_blast_resistant_concrete_block.png", ts_doors.sounds.metal)
|
||||
end
|
||||
|
||||
if minetest.get_modpath("basic_materials") then
|
||||
ts_doors.register_door("basic_materials:brass_block", "Brass", "basic_materials_brass_block.png", ts_doors.sounds.metal, "basic_materials:brass_ingot")
|
||||
ts_doors.register_door("basic_materials:concrete_block", "Concrete", "basic_materials_concrete_block.png", ts_doors.sounds.metal)
|
||||
ts_doors.register_alias("technic:brass_block", "basic_materials:brass_block")
|
||||
ts_doors.register_alias("technic:concrete", "basic_materials:concrete_block")
|
||||
end
|
||||
|
||||
minetest.override_item("doors:door_steel", {
|
||||
description = S("Windowed Locked Plain Steel Door"),
|
||||
})
|
||||
|
||||
minetest.override_item("doors:door_wood", {
|
||||
description = S("Windowed Mixed Wood Door"),
|
||||
})
|
||||
|
||||
minetest.override_item("doors:trapdoor", {
|
||||
description = S("Windowed Mixed Wood Trapdoor"),
|
||||
})
|
||||
|
||||
minetest.override_item("doors:trapdoor_steel", {
|
||||
description = S("Windowed Locked Plain Steel Trapdoor"),
|
||||
})
|
||||
|
||||
|
||||
|
||||
|
||||
ts_doors.workshop = {}
|
||||
|
||||
function ts_doors.workshop.update_formspec(pos)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local page = meta:get_int("page")
|
||||
local maxpage = meta:get_int("maxpage")
|
||||
local selection = meta:get_string("selection")
|
||||
|
||||
local trapdoor = meta:get_int("trapdoor") == 1
|
||||
local locked = meta:get_int("locked") == 1
|
||||
local solid = meta:get_int("solid") == 1
|
||||
|
||||
if page < 1 then
|
||||
page = maxpage
|
||||
elseif page > maxpage then
|
||||
page = 1
|
||||
end
|
||||
meta:set_int("page", page)
|
||||
|
||||
local fs = "size[9,9;]"
|
||||
fs = fs .. default.gui_bg .. default.gui_bg_img .. default.gui_slots
|
||||
if minetest.colorize then
|
||||
if not locked then
|
||||
fs = fs .. "button[0,0;2,1;unlocked;" .. minetest.colorize("#ffff00", "Unlocked") .. "]"
|
||||
fs = fs .. "button[0,0.75;2,1;locked;Locked]"
|
||||
else
|
||||
fs = fs .. "button[0,0;2,1;unlocked;Unlocked]"
|
||||
fs = fs .. "button[0,0.75;2,1;locked;" .. minetest.colorize("#ffff00", "Locked") .. "]"
|
||||
end
|
||||
|
||||
if not solid then
|
||||
fs = fs .. "button[2,0;2,1;windowed;" .. minetest.colorize("#ffff00", "Windowed") .. "]"
|
||||
fs = fs .. "button[2,0.75;2,1;solid;Solid]"
|
||||
else
|
||||
fs = fs .. "button[2,0;2,1;windowed;Windowed]"
|
||||
fs = fs .. "button[2,0.75;2,1;solid;" .. minetest.colorize("#ffff00", "Solid") .. "]"
|
||||
end
|
||||
|
||||
if not trapdoor then
|
||||
fs = fs .. "button[4,0;2,1;doors;" .. minetest.colorize("#ffff00", "Doors") .. "]"
|
||||
fs = fs .. "button[4,0.75;2,1;trapdoors;Trapdoors]"
|
||||
else
|
||||
fs = fs .. "button[4,0;2,1;doors;Doors]"
|
||||
fs = fs .. "button[4,0.75;2,1;trapdoors;" .. minetest.colorize("#ffff00", "Trapdoors") .. "]"
|
||||
end
|
||||
else
|
||||
fs = fs .. "button[0,0;2,1;unlocked;Unlocked]"
|
||||
fs = fs .. "button[0,0.75;2,1;locked;Locked]"
|
||||
fs = fs .. "button[2,0;2,1;windowed;Windowed]"
|
||||
fs = fs .. "button[2,0.75;2,1;solid;Solid]"
|
||||
fs = fs .. "button[4,0;2,1;doors;Doors]"
|
||||
fs = fs .. "button[4,0.75;2,1;trapdoors;Trapdoors]"
|
||||
end
|
||||
|
||||
fs = fs .. "label[0,1.6;Material]"
|
||||
fs = fs .. "label[0,1.9;needed]"
|
||||
fs = fs .. "list[context;material_needed;0,2.3;1,1]"
|
||||
fs = fs .. "label[0,3.25;Input]"
|
||||
fs = fs .. "list[context;material;0,3.75;1,1]"
|
||||
fs = fs .. "label[1,1.6;Steel]"
|
||||
fs = fs .. "label[1,1.9;needed]"
|
||||
fs = fs .. "list[context;steel_needed;1,2.3;1,1]"
|
||||
fs = fs .. "label[1,3.25;Input]"
|
||||
fs = fs .. "list[context;steel;1,3.75;1,1]"
|
||||
local x = 2
|
||||
local y = 1.75
|
||||
local count = 0
|
||||
for item, recipe in pairs(ts_doors.registered_doors) do
|
||||
count = count + 1
|
||||
if (count >= (page - 1) * 12 + 1 and count <= page * 12) then
|
||||
local door = get_door_name(meta, item)
|
||||
fs = fs .. "item_image_button[" .. x .. "," .. y .. ";1,1;" .. door .. ";" .. door .. ";]"
|
||||
x = x + 1
|
||||
if x > 5 then
|
||||
x = 2
|
||||
y = y + 1
|
||||
end
|
||||
end
|
||||
end
|
||||
fs = fs .. "button[6, 1;1,1;noselection;X]"
|
||||
fs = fs .. "tooltip[noselection;Remove Current Selection]"
|
||||
if maxpage > 1 then
|
||||
fs = fs .. "button[6,2.25;1,1;prevpage;<-]"
|
||||
fs = fs .. "button[6,3.25;1,1;nextpage;->]"
|
||||
fs = fs .. "label[6,4;" .. string.format("Page %s of %s", page, maxpage) .. "]"
|
||||
end
|
||||
fs = fs .. "label[7.5,0.2;Current]"
|
||||
fs = fs .. "label[7.5,0.5;Door]"
|
||||
fs = fs .. "item_image[7.5,1;1,1;" .. selection .. "]"
|
||||
fs = fs .. "image[7.5,2;1,1;gui_furnace_arrow_bg.png^[lowpart:" .. meta:get_int("progress") * 10 .. ":gui_furnace_arrow_fg.png^[transformR180]"
|
||||
fs = fs .. "list[context;output;7.5,3;1,1]"
|
||||
fs = fs .. "list[current_player;main;0.5,5;8,4]"
|
||||
fs = fs .. "listring[current_player;main]"
|
||||
fs = fs .. "listring[context;material]"
|
||||
fs = fs .. "listring[current_player;main]"
|
||||
fs = fs .. "listring[context;steel]"
|
||||
fs = fs .. "listring[current_player;main]"
|
||||
fs = fs .. "listring[context;output]"
|
||||
meta:set_string("formspec", fs)
|
||||
end
|
||||
|
||||
local function update_inventory(pos)
|
||||
local meta = minetest.get_meta(pos)
|
||||
|
||||
local itemcount = 0
|
||||
for k, v in pairs(ts_doors.registered_doors) do
|
||||
itemcount = itemcount + 1
|
||||
end
|
||||
|
||||
meta:set_int("maxpage", math.ceil(itemcount / 16))
|
||||
local inv = meta:get_inventory()
|
||||
inv:set_size("material_needed", 0)
|
||||
inv:set_size("material_needed", 1)
|
||||
inv:set_size("steel_needed", 0)
|
||||
inv:set_size("steel_needed", 1)
|
||||
inv:set_size("material", 1)
|
||||
inv:set_size("steel", 1)
|
||||
inv:set_size("output", 1)
|
||||
|
||||
local trapdoor = meta:get_int("trapdoor") == 1
|
||||
local locked = meta:get_int("locked") == 1
|
||||
local solid = meta:get_int("solid") == 1
|
||||
|
||||
local selection = meta:get_string("selection")
|
||||
if selection and selection ~= "" then
|
||||
local door = selection:sub(10)
|
||||
if door:sub(0, 4) == "trap" then
|
||||
trapdoor = true
|
||||
door = door:sub(10)
|
||||
else
|
||||
trapdoor = false
|
||||
door = door:sub(6)
|
||||
end
|
||||
if door:sub(0, 4) == "full" then
|
||||
solid = true
|
||||
door = door:sub(6)
|
||||
else
|
||||
solid = false
|
||||
end
|
||||
if door:sub(0, 7) == "locked_" then
|
||||
locked = true
|
||||
door = door:sub(8)
|
||||
else
|
||||
locked = false
|
||||
end
|
||||
local material_needed = 1
|
||||
if trapdoor then
|
||||
material_needed = 4
|
||||
else
|
||||
material_needed = 6
|
||||
end
|
||||
if solid then
|
||||
material_needed = material_needed + 1
|
||||
end
|
||||
local steel_needed = 0
|
||||
if locked then
|
||||
steel_needed = 1
|
||||
end
|
||||
inv:add_item("material_needed", { name = ts_doors.registered_doors[door], count = material_needed })
|
||||
inv:add_item("steel_needed", { name = "default:steel_ingot", count = steel_needed })
|
||||
end
|
||||
end
|
||||
|
||||
local function on_receive_fields(pos, formname, fields, sender)
|
||||
local meta = minetest.get_meta(pos)
|
||||
if fields.unlocked then
|
||||
meta:set_int("locked", 0)
|
||||
elseif fields.locked then
|
||||
meta:set_int("locked", 1)
|
||||
elseif fields.windowed then
|
||||
meta:set_int("solid", 0)
|
||||
elseif fields.solid then
|
||||
meta:set_int("solid", 1)
|
||||
elseif fields.doors then
|
||||
meta:set_int("trapdoor", 0)
|
||||
elseif fields.trapdoors then
|
||||
meta:set_int("trapdoor", 1)
|
||||
elseif fields.prevpage then
|
||||
meta:set_int("page", meta:get_int("page") - 1)
|
||||
elseif fields.nextpage then
|
||||
meta:set_int("page", meta:get_int("page") + 1)
|
||||
elseif fields.noselection then
|
||||
meta:set_string("selection", "")
|
||||
else
|
||||
for item, recipe in pairs(ts_doors.registered_doors) do
|
||||
if fields[get_door_name(meta, item)] then
|
||||
meta:set_string("selection", get_door_name(meta, item))
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local function on_construct(pos)
|
||||
local meta = minetest.get_meta(pos)
|
||||
meta:set_int("trapdoor", 0)
|
||||
meta:set_int("locked", 0)
|
||||
meta:set_int("solid", 0)
|
||||
meta:set_int("progress", 0)
|
||||
meta:set_string("working_on", "")
|
||||
meta:set_int("page", 1)
|
||||
meta:set_int("maxpage", 1)
|
||||
meta:set_string("selection", "")
|
||||
end
|
||||
|
||||
local function allow_metadata_inventory_move(pos, from_list, from_index, to_list, to_index, count, player)
|
||||
return 0
|
||||
end
|
||||
|
||||
local function allow_metadata_inventory_put(pos, listname, index, stack, player)
|
||||
if listname == "material" then
|
||||
local meta = minetest.get_meta(pos)
|
||||
local selection = meta:get_string("selection")
|
||||
if selection and selection ~= "" then
|
||||
local door = selection:sub(10)
|
||||
if door:sub(0, 4) == "trap" then
|
||||
door = door:sub(10)
|
||||
else
|
||||
door = door:sub(6)
|
||||
end
|
||||
if door:sub(0, 4) == "full" then
|
||||
door = door:sub(6)
|
||||
end
|
||||
if door:sub(0, 7) == "locked_" then
|
||||
door = door:sub(8)
|
||||
end
|
||||
if stack:get_name() == ts_doors.registered_doors[door] then
|
||||
return stack:get_count()
|
||||
else
|
||||
return 0
|
||||
end
|
||||
else
|
||||
return 0
|
||||
end
|
||||
elseif listname == "steel" and (stack:get_name() == "default:steel_ingot") then
|
||||
return stack:get_count()
|
||||
else
|
||||
return 0
|
||||
end
|
||||
end
|
||||
|
||||
local function allow_metadata_inventory_take(pos, listname, index, stack, player)
|
||||
if listname == "material" or listname == "steel" or listname == "output" then
|
||||
return stack:get_count()
|
||||
else
|
||||
return 0
|
||||
end
|
||||
end
|
||||
|
||||
local function on_metadata_inventory_move(pos, from_list, from_index, to_list, to_index, count, player)
|
||||
end
|
||||
|
||||
local function on_metadata_inventory_put(pos, listname, index, stack, player)
|
||||
end
|
||||
|
||||
local function on_metadata_inventory_take(pos, listname, index, stack, player)
|
||||
end
|
||||
|
||||
local function can_dig(pos, player)
|
||||
local inv = minetest.get_meta(pos):get_inventory()
|
||||
if inv:is_empty("material") and inv:is_empty("steel") and inv:is_empty("output") then
|
||||
return true
|
||||
else
|
||||
return false
|
||||
end
|
||||
end
|
||||
|
||||
ts_workshop.register_workshop("ts_doors", "workshop", {
|
||||
description = S("Door Workshop"),
|
||||
tiles = {
|
||||
"default_wood.png",
|
||||
"default_wood.png",
|
||||
"default_wood.png^doors_item_wood.png",
|
||||
"default_wood.png^doors_item_wood.png",
|
||||
"default_wood.png",
|
||||
"default_wood.png"
|
||||
},
|
||||
drawtype = "nodebox",
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
groups = { choppy = 2, oddly_breakable_by_hand = 2 },
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{ -0.5, -0.5, -0.5, 0.5, -0.3125, 0.5 }, -- NodeBox1
|
||||
{ -0.5, -0.5, -0.5, -0.375, 0.5, 0.5 }, -- NodeBox2
|
||||
{ 0.375, -0.5, -0.5, 0.5, 0.5, 0.5 }, -- NodeBox3
|
||||
{ -0.5, -0.5, 0.375, 0.5, 0.5, 0.5 }, -- NodeBox4
|
||||
{ -0.5, 0.3125, -0.4375, 0.5, 0.4375, -0.3125 }, -- NodeBox5
|
||||
}
|
||||
},
|
||||
selection_box = {
|
||||
type = "regular"
|
||||
},
|
||||
on_receive_fields = on_receive_fields,
|
||||
on_construct = on_construct,
|
||||
allow_metadata_inventory_take = allow_metadata_inventory_take,
|
||||
allow_metadata_inventory_move = allow_metadata_inventory_move,
|
||||
allow_metadata_inventory_put = allow_metadata_inventory_put,
|
||||
on_metadata_inventory_move = on_metadata_inventory_move,
|
||||
on_metadata_inventory_put = on_metadata_inventory_put,
|
||||
on_metadata_inventory_take = on_metadata_inventory_take,
|
||||
can_dig = can_dig,
|
||||
sounds = default.node_sound_wood_defaults(),
|
||||
enough_supply = function(pos, selection)
|
||||
local meta = minetest.get_meta(pos)
|
||||
if meta:get_string("working_on") ~= "" then
|
||||
return
|
||||
end
|
||||
local inv = meta:get_inventory()
|
||||
local selection = meta:get_string("selection")
|
||||
local material = inv:get_stack("material", 1):get_name()
|
||||
local material_needed_name = inv:get_stack("material_needed", 1):get_name()
|
||||
local material_needed = inv:get_stack("material_needed", 1):get_count()
|
||||
local material_ok = inv:get_stack("material", 1):get_count() >= material_needed
|
||||
local steel = inv:get_stack("steel", 1):get_name()
|
||||
local steel_needed = inv:get_stack("steel_needed", 1):get_count()
|
||||
local steel_ok = inv:get_stack("steel", 1):get_count() >= steel_needed
|
||||
|
||||
if not (material_ok and steel_ok
|
||||
and (steel and steel == "default:steel_ingot" or steel_needed == 0)
|
||||
and selection and selection ~= ""
|
||||
and material == material_needed_name)
|
||||
then
|
||||
return false
|
||||
else
|
||||
return true
|
||||
end
|
||||
end,
|
||||
remove_supply = function(pos, selection)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local inv = meta:get_inventory()
|
||||
local material = inv:get_stack("material", 1):get_name()
|
||||
local material_needed = inv:get_stack("material_needed", 1):get_count()
|
||||
local steel_needed = inv:get_stack("steel_needed", 1):get_count()
|
||||
|
||||
inv:remove_item("material", { name = material, count = material_needed })
|
||||
inv:remove_item("steel", { name = "default:steel_ingot", count = steel_needed })
|
||||
end,
|
||||
update_inventory = update_inventory,
|
||||
update_formspec = ts_doors.workshop.update_formspec,
|
||||
})
|
||||
|
||||
minetest.register_lbm({
|
||||
name = "ts_doors:update_door_workshop",
|
||||
nodenames = { "ts_doors:door_workshop" },
|
||||
action = function(pos, node)
|
||||
update_inventory(pos)
|
||||
end,
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "ts_doors:workshop",
|
||||
recipe = {
|
||||
{ "default:wood", "default:wood", "default:wood" },
|
||||
{ "default:wood", "doors:door_wood", "default:wood" },
|
||||
{ "default:wood", "default:wood", "default:wood" },
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "fuel",
|
||||
recipe = "ts_doors:workshop",
|
||||
burntime = 30,
|
||||
})
|
|
@ -0,0 +1,349 @@
|
|||
Aspen Windowed Door=
|
||||
Solid Aspen Door=
|
||||
Windowed Aspen Trapdoor=
|
||||
Solid Aspen Trapdoor=
|
||||
Windowed Locked Aspen Door=
|
||||
Solid Locked Aspen Door=
|
||||
Windowed Locked Aspen Trapdoor=
|
||||
Solid Locked Aspen Trapdoor=
|
||||
Pine Windowed Door=
|
||||
Solid Pine Door=
|
||||
Windowed Pine Trapdoor=
|
||||
Solid Pine Trapdoor=
|
||||
Windowed Locked Pine Door=
|
||||
Solid Locked Pine Door=
|
||||
Windowed Locked Pine Trapdoor=
|
||||
Solid Locked Pine Trapdoor=
|
||||
Acacia Windowed Door=
|
||||
Solid Acacia Door=
|
||||
Windowed Acacia Trapdoor=
|
||||
Solid Acacia Trapdoor=
|
||||
Windowed Locked Acacia Door=
|
||||
Solid Locked Acacia Door=
|
||||
Windowed Locked Acacia Trapdoor=
|
||||
Solid Locked Acacia Trapdoor=
|
||||
Wooden Windowed Door=
|
||||
Solid Wooden Door=
|
||||
Windowed Wooden Trapdoor=
|
||||
Solid Wooden Trapdoor=
|
||||
Windowed Locked Wooden Door=
|
||||
Solid Locked Wooden Door=
|
||||
Windowed Locked Wooden Trapdoor=
|
||||
Solid Locked Wooden Trapdoor=
|
||||
Jungle Wood Windowed Door=
|
||||
Solid Jungle Wood Door=
|
||||
Windowed Jungle Wood Trapdoor=
|
||||
Solid Jungle Wood Trapdoor=
|
||||
Windowed Locked Jungle Wood Door=
|
||||
Solid Locked Jungle Wood Door=
|
||||
Windowed Locked Jungle Wood Trapdoor=
|
||||
Solid Locked Jungle Wood Trapdoor=
|
||||
Apple Tree Windowed Door=
|
||||
Solid Apple Tree Door=
|
||||
Windowed Apple Tree Trapdoor=
|
||||
Solid Apple Tree Trapdoor=
|
||||
Windowed Locked Apple Tree Door=
|
||||
Solid Locked Apple Tree Door=
|
||||
Windowed Locked Apple Tree Trapdoor=
|
||||
Solid Locked Apple Tree Trapdoor=
|
||||
Beech Windowed Door=
|
||||
Solid Beech Door=
|
||||
Windowed Beech Trapdoor=
|
||||
Solid Beech Trapdoor=
|
||||
Windowed Locked Beech Door=
|
||||
Solid Locked Beech Door=
|
||||
Windowed Locked Beech Trapdoor=
|
||||
Solid Locked Beech Trapdoor=
|
||||
Birch Windowed Door=
|
||||
Solid Birch Door=
|
||||
Windowed Birch Trapdoor=
|
||||
Solid Birch Trapdoor=
|
||||
Windowed Locked Birch Door=
|
||||
Solid Locked Birch Door=
|
||||
Windowed Locked Birch Trapdoor=
|
||||
Solid Locked Birch Trapdoor=
|
||||
Fir Windowed Door=
|
||||
Solid Fir Door=
|
||||
Windowed Fir Trapdoor=
|
||||
Solid Fir Trapdoor=
|
||||
Windowed Locked Fir Door=
|
||||
Solid Locked Fir Door=
|
||||
Windowed Locked Fir Trapdoor=
|
||||
Solid Locked Fir Trapdoor=
|
||||
Oak Windowed Door=
|
||||
Solid Oak Door=
|
||||
Windowed Oak Trapdoor=
|
||||
Solid Oak Trapdoor=
|
||||
Windowed Locked Oak Door=
|
||||
Solid Locked Oak Door=
|
||||
Windowed Locked Oak Trapdoor=
|
||||
Solid Locked Oak Trapdoor=
|
||||
Palm Windowed Door=
|
||||
Solid Palm Door=
|
||||
Windowed Palm Trapdoor=
|
||||
Solid Palm Trapdoor=
|
||||
Windowed Locked Palm Door=
|
||||
Solid Locked Palm Door=
|
||||
Windowed Locked Palm Trapdoor=
|
||||
Solid Locked Palm Trapdoor=
|
||||
Rubber Tree Windowed Door=
|
||||
Solid Rubber Tree Door=
|
||||
Windowed Rubber Tree Trapdoor=
|
||||
Solid Rubber Tree Trapdoor=
|
||||
Windowed Locked Rubber Tree Door=
|
||||
Solid Locked Rubber Tree Door=
|
||||
Windowed Locked Rubber Tree Trapdoor=
|
||||
Solid Locked Rubber Tree Trapdoor=
|
||||
Sequoia Windowed Door=
|
||||
Solid Sequoia Door=
|
||||
Windowed Sequoia Trapdoor=
|
||||
Solid Sequoia Trapdoor=
|
||||
Windowed Locked Sequoia Door=
|
||||
Solid Locked Sequoia Door=
|
||||
Windowed Locked Sequoia Trapdoor=
|
||||
Solid Locked Sequoia Trapdoor=
|
||||
Spruce Windowed Door=
|
||||
Solid Spruce Door=
|
||||
Windowed Spruce Trapdoor=
|
||||
Solid Spruce Trapdoor=
|
||||
Windowed Locked Spruce Door=
|
||||
Solid Locked Spruce Door=
|
||||
Windowed Locked Spruce Trapdoor=
|
||||
Solid Locked Spruce Trapdoor=
|
||||
Willow Windowed Door=
|
||||
Solid Willow Door=
|
||||
Windowed Willow Trapdoor=
|
||||
Solid Willow Trapdoor=
|
||||
Windowed Locked Willow Door=
|
||||
Solid Locked Willow Door=
|
||||
Windowed Locked Willow Trapdoor=
|
||||
Solid Locked Willow Trapdoor=
|
||||
Banana Windowed Door=
|
||||
Solid Banana Door=
|
||||
Windowed Banana Trapdoor=
|
||||
Solid Banana Trapdoor=
|
||||
Windowed Locked Banana Door=
|
||||
Solid Locked Banana Door=
|
||||
Windowed Locked Banana Trapdoor=
|
||||
Solid Locked Banana Trapdoor=
|
||||
Birch Windowed Door=
|
||||
Solid Birch Door=
|
||||
Windowed Birch Trapdoor=
|
||||
Solid Birch Trapdoor=
|
||||
Windowed Locked Birch Door=
|
||||
Solid Locked Birch Door=
|
||||
Windowed Locked Birch Trapdoor=
|
||||
Solid Locked Birch Trapdoor=
|
||||
Frost Windowed Door=
|
||||
Solid Frost Door=
|
||||
Windowed Frost Trapdoor=
|
||||
Solid Frost Trapdoor=
|
||||
Windowed Locked Frost Door=
|
||||
Solid Locked Frost Door=
|
||||
Windowed Locked Frost Trapdoor=
|
||||
Solid Locked Frost Trapdoor=
|
||||
Mushroom Windowed Door=
|
||||
Solid Mushroom Door=
|
||||
Windowed Mushroom Trapdoor=
|
||||
Solid Mushroom Trapdoor=
|
||||
Windowed Locked Mushroom Door=
|
||||
Solid Locked Mushroom Door=
|
||||
Windowed Locked Mushroom Trapdoor=
|
||||
Solid Locked Mushroom Trapdoor=
|
||||
Palm Windowed Door=
|
||||
Solid Palm Door=
|
||||
Windowed Palm Trapdoor=
|
||||
Solid Palm Trapdoor=
|
||||
Windowed Locked Palm Door=
|
||||
Solid Locked Palm Door=
|
||||
Windowed Locked Palm Trapdoor=
|
||||
Solid Locked Palm Trapdoor=
|
||||
Redwood Windowed Door=
|
||||
Solid Redwood Door=
|
||||
Windowed Redwood Trapdoor=
|
||||
Solid Redwood Trapdoor=
|
||||
Windowed Locked Redwood Door=
|
||||
Solid Locked Redwood Door=
|
||||
Windowed Locked Redwood Trapdoor=
|
||||
Solid Locked Redwood Trapdoor=
|
||||
Sakura Windowed Door=
|
||||
Solid Sakura Door=
|
||||
Windowed Sakura Trapdoor=
|
||||
Solid Sakura Trapdoor=
|
||||
Windowed Locked Sakura Door=
|
||||
Solid Locked Sakura Door=
|
||||
Windowed Locked Sakura Trapdoor=
|
||||
Solid Locked Sakura Trapdoor=
|
||||
Scorched Windowed Door=
|
||||
Solid Scorched Door=
|
||||
Windowed Scorched Trapdoor=
|
||||
Solid Scorched Trapdoor=
|
||||
Windowed Locked Scorched Door=
|
||||
Solid Locked Scorched Door=
|
||||
Windowed Locked Scorched Trapdoor=
|
||||
Solid Locked Scorched Trapdoor=
|
||||
Willow Windowed Door=
|
||||
Solid Willow Door=
|
||||
Windowed Willow Trapdoor=
|
||||
Solid Willow Trapdoor=
|
||||
Windowed Locked Willow Door=
|
||||
Solid Locked Willow Door=
|
||||
Windowed Locked Willow Trapdoor=
|
||||
Solid Locked Willow Trapdoor=
|
||||
Healing Tree Windowed Door=
|
||||
Solid Healing Tree Door=
|
||||
Windowed Healing Tree Trapdoor=
|
||||
Solid Healing Tree Trapdoor=
|
||||
Windowed Locked Healing Tree Door=
|
||||
Solid Locked Healing Tree Door=
|
||||
Windowed Locked Healing Tree Trapdoor=
|
||||
Solid Locked Healing Tree Trapdoor=
|
||||
Crystal Windowed Door=
|
||||
Solid Crystal Door=
|
||||
Windowed Crystal Trapdoor=
|
||||
Solid Crystal Trapdoor=
|
||||
Windowed Locked Crystal Door=
|
||||
Solid Locked Crystal Door=
|
||||
Windowed Locked Crystal Trapdoor=
|
||||
Solid Locked Crystal Trapdoor=
|
||||
Bronze Windowed Door=
|
||||
Solid Bronze Door=
|
||||
Windowed Bronze Trapdoor=
|
||||
Solid Bronze Trapdoor=
|
||||
Windowed Locked Bronze Door=
|
||||
Solid Locked Bronze Door=
|
||||
Windowed Locked Bronze Trapdoor=
|
||||
Solid Locked Bronze Trapdoor=
|
||||
Copper Windowed Door=
|
||||
Solid Copper Door=
|
||||
Windowed Copper Trapdoor=
|
||||
Solid Copper Trapdoor=
|
||||
Windowed Locked Copper Door=
|
||||
Solid Locked Copper Door=
|
||||
Windowed Locked Copper Trapdoor=
|
||||
Solid Locked Copper Trapdoor=
|
||||
Diamond Windowed Door=
|
||||
Solid Diamond Door=
|
||||
Windowed Diamond Trapdoor=
|
||||
Solid Diamond Trapdoor=
|
||||
Windowed Locked Diamond Door=
|
||||
Solid Locked Diamond Door=
|
||||
Windowed Locked Diamond Trapdoor=
|
||||
Solid Locked Diamond Trapdoor=
|
||||
Gold Windowed Door=
|
||||
Solid Gold Door=
|
||||
Windowed Gold Trapdoor=
|
||||
Solid Gold Trapdoor=
|
||||
Windowed Locked Gold Door=
|
||||
Solid Locked Gold Door=
|
||||
Windowed Locked Gold Trapdoor=
|
||||
Solid Locked Gold Trapdoor=
|
||||
Steel Windowed Door=
|
||||
Solid Steel Door=
|
||||
Windowed Steel Trapdoor=
|
||||
Solid Steel Trapdoor=
|
||||
Windowed Locked Steel Door=
|
||||
Solid Locked Steel Door=
|
||||
Windowed Locked Steel Trapdoor=
|
||||
Solid Locked Steel Trapdoor=
|
||||
Mithril Windowed Door=
|
||||
Solid Mithril Door=
|
||||
Windowed Mithril Trapdoor=
|
||||
Solid Mithril Trapdoor=
|
||||
Windowed Locked Mithril Door=
|
||||
Solid Locked Mithril Door=
|
||||
Windowed Locked Mithril Trapdoor=
|
||||
Solid Locked Mithril Trapdoor=
|
||||
Silver Windowed Door=
|
||||
Solid Silver Door=
|
||||
Windowed Silver Trapdoor=
|
||||
Solid Silver Trapdoor=
|
||||
Windowed Locked Silver Door=
|
||||
Solid Locked Silver Door=
|
||||
Windowed Locked Silver Trapdoor=
|
||||
Solid Locked Silver Trapdoor=
|
||||
Tin Windowed Door=
|
||||
Solid Tin Door=
|
||||
Windowed Tin Trapdoor=
|
||||
Solid Tin Trapdoor=
|
||||
Windowed Locked Tin Door=
|
||||
Solid Locked Tin Door=
|
||||
Windowed Locked Tin Trapdoor=
|
||||
Solid Locked Tin Trapdoor=
|
||||
Carbon Steel Windowed Door=
|
||||
Solid Carbon Steel Door=
|
||||
Windowed Carbon Steel Trapdoor=
|
||||
Solid Carbon Steel Trapdoor=
|
||||
Windowed Locked Carbon Steel Door=
|
||||
Solid Locked Carbon Steel Door=
|
||||
Windowed Locked Carbon Steel Trapdoor=
|
||||
Solid Locked Carbon Steel Trapdoor=
|
||||
Cast Iron Windowed Door=
|
||||
Solid Cast Iron Door=
|
||||
Windowed Cast Iron Trapdoor=
|
||||
Solid Cast Iron Trapdoor=
|
||||
Windowed Locked Cast Iron Door=
|
||||
Solid Locked Cast Iron Door=
|
||||
Windowed Locked Cast Iron Trapdoor=
|
||||
Solid Locked Cast Iron Trapdoor=
|
||||
Chromium Windowed Door=
|
||||
Solid Chromium Door=
|
||||
Windowed Chromium Trapdoor=
|
||||
Solid Chromium Trapdoor=
|
||||
Windowed Locked Chromium Door=
|
||||
Solid Locked Chromium Door=
|
||||
Windowed Locked Chromium Trapdoor=
|
||||
Solid Locked Chromium Trapdoor=
|
||||
Lead Windowed Door=
|
||||
Solid Lead Door=
|
||||
Windowed Lead Trapdoor=
|
||||
Solid Lead Trapdoor=
|
||||
Windowed Locked Lead Door=
|
||||
Solid Locked Lead Door=
|
||||
Windowed Locked Lead Trapdoor=
|
||||
Solid Locked Lead Trapdoor=
|
||||
Stainless Steel Windowed Door=
|
||||
Solid Stainless Steel Door=
|
||||
Windowed Stainless Steel Trapdoor=
|
||||
Solid Stainless Steel Trapdoor=
|
||||
Windowed Locked Stainless Steel Door=
|
||||
Solid Locked Stainless Steel Door=
|
||||
Windowed Locked Stainless Steel Trapdoor=
|
||||
Solid Locked Stainless Steel Trapdoor=
|
||||
Zinc Windowed Door=
|
||||
Solid Zinc Door=
|
||||
Windowed Zinc Trapdoor=
|
||||
Solid Zinc Trapdoor=
|
||||
Windowed Locked Zinc Door=
|
||||
Solid Locked Zinc Door=
|
||||
Windowed Locked Zinc Trapdoor=
|
||||
Solid Locked Zinc Trapdoor=
|
||||
Blast Resistant Concrete Windowed Door=
|
||||
Solid Blast Resistant Concrete Door=
|
||||
Windowed Blast Resistant Concrete Trapdoor=
|
||||
Solid Blast Resistant Concrete Trapdoor=
|
||||
Windowed Locked Blast Resistant Concrete Door=
|
||||
Solid Locked Blast Resistant Concrete Door=
|
||||
Windowed Locked Blast Resistant Concrete Trapdoor=
|
||||
Solid Locked Blast Resistant Concrete Trapdoor=
|
||||
Brass Windowed Door=
|
||||
Solid Brass Door=
|
||||
Windowed Brass Trapdoor=
|
||||
Solid Brass Trapdoor=
|
||||
Windowed Locked Brass Door=
|
||||
Solid Locked Brass Door=
|
||||
Windowed Locked Brass Trapdoor=
|
||||
Solid Locked Brass Trapdoor=
|
||||
Concrete Windowed Door=
|
||||
Solid Concrete Door=
|
||||
Windowed Concrete Trapdoor=
|
||||
Solid Concrete Trapdoor=
|
||||
Windowed Locked Concrete Door=
|
||||
Solid Locked Concrete Door=
|
||||
Windowed Locked Concrete Trapdoor=
|
||||
Solid Locked Concrete Trapdoor=
|
||||
Windowed Locked Plain Steel Door=
|
||||
Windowed Mixed Wood Door=
|
||||
Windowed Mixed Wood Trapdoor=
|
||||
Windowed Locked Plain Steel Trapdoor=
|
||||
Door Workshop=
|
|
@ -0,0 +1,4 @@
|
|||
name = ts_doors
|
||||
depends = default, ts_workshop, doors
|
||||
optional_depends = moretrees, moreores, technic, ethereal, basic_materials
|
||||
description = Adds doors for all kinds of wood.
|
After Width: | Height: | Size: 103 KiB |
After Width: | Height: | Size: 771 B |
After Width: | Height: | Size: 654 B |
After Width: | Height: | Size: 493 B |
After Width: | Height: | Size: 687 B |
After Width: | Height: | Size: 468 B |
After Width: | Height: | Size: 566 B |
After Width: | Height: | Size: 793 B |
After Width: | Height: | Size: 545 B |
After Width: | Height: | Size: 289 B |
After Width: | Height: | Size: 266 B |
After Width: | Height: | Size: 285 B |
After Width: | Height: | Size: 306 B |
|
@ -6,5 +6,5 @@ display_modpack - for signs
|
|||
mobkit - for petz and other mod mods
|
||||
mobs_redo - for some mob mods
|
||||
modlib - for character_anim
|
||||
|
||||
ts_workshop - workshop api for ts doors
|
||||
|
||||
|
|
|
@ -0,0 +1,21 @@
|
|||
MIT License
|
||||
|
||||
Copyright (c) 2017 Thomas S.
|
||||
|
||||
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.
|
|
@ -0,0 +1,32 @@
|
|||
# ts_workshop
|
||||
|
||||
This mod made by Thomas-S adds an API for workshops.
|
||||
|
||||
For license information see the file `LICENSE`.
|
||||
|
||||
```lua
|
||||
workshop.register_workshop("example", "workshop", {
|
||||
enough_supply = function(pos, selection)
|
||||
end,
|
||||
remove_supply = function(pos, selection)
|
||||
end,
|
||||
update_formspec = function(pos)
|
||||
end,
|
||||
update_inventory = function(pos)
|
||||
end,
|
||||
on_receive_fields = function(pos)
|
||||
end,
|
||||
on_construct = function(pos)
|
||||
end,
|
||||
allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
|
||||
end,
|
||||
allow_metadata_inventory_put = function(pos, listname, index, stack, player)
|
||||
end,
|
||||
allow_metadata_inventory_take = function(pos, listname, index, stack, player)
|
||||
end,
|
||||
can_dig = function(pos, player)
|
||||
end,
|
||||
|
||||
-- everything else is simply passed to minetest.register_node()
|
||||
})
|
||||
```
|
|
@ -0,0 +1 @@
|
|||
API for workshops
|
|
@ -0,0 +1,190 @@
|
|||
ts_workshop = {}
|
||||
|
||||
function ts_workshop.register_workshop(mod, name, def)
|
||||
if not ts_workshop[mod] then
|
||||
ts_workshop[mod] = {}
|
||||
end
|
||||
if not ts_workshop[mod][name] then
|
||||
ts_workshop[mod][name] = {}
|
||||
end
|
||||
|
||||
ts_workshop[mod][name].enough_supply = def.enough_supply
|
||||
ts_workshop[mod][name].remove_supply_raw = def.remove_supply
|
||||
ts_workshop[mod][name].update_formspec_raw = def.update_formspec
|
||||
ts_workshop[mod][name].update_inventory_raw = def.update_inventory
|
||||
|
||||
ts_workshop[mod][name].remove_supply = function(pos, selection)
|
||||
ts_workshop[mod][name].remove_supply_raw(pos, selection)
|
||||
ts_workshop[mod][name].update_inventory(pos)
|
||||
end
|
||||
|
||||
ts_workshop[mod][name].start = function(pos)
|
||||
local node = minetest.get_node(pos)
|
||||
if not (mod and name) then
|
||||
mod, name = minetest.get_node(pos).name:match("([^:]+):([^:]+)")
|
||||
end
|
||||
if node.name ~= mod .. ":" .. name or not ts_workshop[mod][name] then
|
||||
return
|
||||
end
|
||||
|
||||
local meta = minetest.get_meta(pos)
|
||||
if meta:get_string("working_on") ~= "" then
|
||||
return
|
||||
end
|
||||
|
||||
local selection = meta:get_string("selection")
|
||||
if selection and selection ~= "" then
|
||||
if not ts_workshop[mod][name].enough_supply(pos, selection) then
|
||||
return
|
||||
end
|
||||
else
|
||||
return
|
||||
end
|
||||
|
||||
local inv = meta:get_inventory()
|
||||
if not inv:room_for_item("output", { name = selection, count = 1 }) then
|
||||
return
|
||||
end
|
||||
|
||||
meta:set_string("working_on", selection)
|
||||
meta:set_int("progress", 0)
|
||||
|
||||
ts_workshop[mod][name].remove_supply(pos, selection)
|
||||
|
||||
ts_workshop[mod][name].step(pos)
|
||||
end
|
||||
|
||||
ts_workshop[mod][name].step = function(pos)
|
||||
local node = minetest.get_node(pos)
|
||||
if not (mod and name) then
|
||||
mod, name = minetest.get_node(pos).name:match("([^:]+):([^:]+)")
|
||||
end
|
||||
if node.name ~= mod .. ":" .. name or not ts_workshop[mod][name] then
|
||||
return
|
||||
end
|
||||
|
||||
local meta = minetest.get_meta(pos)
|
||||
local working_on = meta:get_string("working_on")
|
||||
if working_on == "" then
|
||||
return
|
||||
end
|
||||
|
||||
|
||||
local progress = meta:get_int("progress")
|
||||
progress = progress + 1
|
||||
|
||||
local duration = 10
|
||||
if minetest.registered_items[working_on] and
|
||||
minetest.registered_items[working_on].workshop_duration then
|
||||
duration = minetest.registered_items[working_on].workshop_duration
|
||||
end
|
||||
|
||||
if progress < duration then
|
||||
meta:set_int("progress", progress)
|
||||
local timer = minetest.get_node_timer(pos)
|
||||
timer:start(0.2)
|
||||
else
|
||||
meta:set_int("progress", 0)
|
||||
progress = 0
|
||||
local inv = meta:get_inventory()
|
||||
inv:add_item("output", working_on)
|
||||
meta:set_string("working_on", "")
|
||||
ts_workshop[mod][name].start(pos)
|
||||
end
|
||||
|
||||
ts_workshop[mod][name].update_formspec(pos)
|
||||
end
|
||||
|
||||
ts_workshop[mod][name].update_formspec = function(pos)
|
||||
if not (mod and name) then
|
||||
mod, name = minetest.get_node(pos).name:match("([^:]+):([^:]+)")
|
||||
end
|
||||
local node = minetest.get_node(pos)
|
||||
if node.name ~= mod .. ":" .. name or not ts_workshop[mod][name] then
|
||||
return
|
||||
end
|
||||
ts_workshop[mod][name].update_formspec_raw(pos)
|
||||
end
|
||||
|
||||
ts_workshop[mod][name].update_inventory = function(pos)
|
||||
if not (mod and name) then
|
||||
mod, name = minetest.get_node(pos).name:match("([^:]+):([^:]+)")
|
||||
end
|
||||
local node = minetest.get_node(pos)
|
||||
if node.name ~= mod .. ":" .. name or not ts_workshop[mod][name] then
|
||||
return
|
||||
end
|
||||
ts_workshop[mod][name].update_inventory_raw(pos)
|
||||
ts_workshop[mod][name].update_formspec(pos)
|
||||
ts_workshop[mod][name].start(pos)
|
||||
end
|
||||
|
||||
ts_workshop[mod][name].on_receive_fields = function(pos, formname, fields, sender)
|
||||
def.on_receive_fields(pos, formname, fields, sender)
|
||||
ts_workshop[mod][name].update_inventory(pos)
|
||||
end
|
||||
|
||||
ts_workshop[mod][name].on_construct = function(pos)
|
||||
def.on_construct(pos)
|
||||
if not (mod and name) then
|
||||
mod, name = minetest.get_node(pos).name:match("([^:]+):([^:]+)")
|
||||
end
|
||||
ts_workshop[mod][name].update_inventory(pos)
|
||||
end
|
||||
|
||||
ts_workshop[mod][name].allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
|
||||
return def.allow_metadata_inventory_move(pos, from_list, from_index, to_list, to_index, count, player)
|
||||
end
|
||||
|
||||
ts_workshop[mod][name].allow_metadata_inventory_put = function(pos, listname, index, stack, player)
|
||||
return def.allow_metadata_inventory_put(pos, listname, index, stack, player)
|
||||
end
|
||||
|
||||
ts_workshop[mod][name].allow_metadata_inventory_take = function(pos, listname, index, stack, player)
|
||||
return def.allow_metadata_inventory_take(pos, listname, index, stack, player)
|
||||
end
|
||||
|
||||
ts_workshop[mod][name].on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
|
||||
if not (mod and name) then
|
||||
mod, name = minetest.get_node(pos).name:match("([^:]+):([^:]+)")
|
||||
end
|
||||
ts_workshop[mod][name].update_inventory(pos)
|
||||
end
|
||||
|
||||
ts_workshop[mod][name].on_metadata_inventory_put = function(pos, listname, index, stack, player)
|
||||
if not (mod and name) then
|
||||
mod, name = minetest.get_node(pos).name:match("([^:]+):([^:]+)")
|
||||
end
|
||||
ts_workshop[mod][name].update_inventory(pos)
|
||||
end
|
||||
|
||||
ts_workshop[mod][name].on_metadata_inventory_take = function(pos, listname, index, stack, player)
|
||||
if not (mod and name) then
|
||||
mod, name = minetest.get_node(pos).name:match("([^:]+):([^:]+)")
|
||||
end
|
||||
ts_workshop[mod][name].update_inventory(pos)
|
||||
end
|
||||
|
||||
ts_workshop[mod][name].can_dig = function(pos, player)
|
||||
return def.can_dig(pos, player)
|
||||
end
|
||||
|
||||
local ndef = table.copy(def)
|
||||
ndef.on_receive_fields = ts_workshop[mod][name].on_receive_fields
|
||||
ndef.on_construct = ts_workshop[mod][name].on_construct
|
||||
ndef.allow_metadata_inventory_move = ts_workshop[mod][name].allow_metadata_inventory_move
|
||||
ndef.allow_metadata_inventory_put = ts_workshop[mod][name].allow_metadata_inventory_put
|
||||
ndef.allow_metadata_inventory_take = ts_workshop[mod][name].allow_metadata_inventory_take
|
||||
ndef.on_metadata_inventory_move = ts_workshop[mod][name].on_metadata_inventory_move
|
||||
ndef.on_metadata_inventory_put = ts_workshop[mod][name].on_metadata_inventory_put
|
||||
ndef.on_metadata_inventory_take = ts_workshop[mod][name].on_metadata_inventory_take
|
||||
ndef.can_dig = ts_workshop[mod][name].can_dig
|
||||
ndef.on_timer = function(pos, elapsed)
|
||||
if not (mod and name) then
|
||||
mod, name = minetest.get_node(pos).name:match("([^:]+):([^:]+)")
|
||||
end
|
||||
ts_workshop[mod][name].step(pos)
|
||||
end
|
||||
|
||||
minetest.register_node(mod .. ":" .. name, ndef)
|
||||
end
|
|
@ -0,0 +1 @@
|
|||
name = ts_workshop
|