diff options
author | Vanessa Ezekowitz <vanessaezekowitz@gmail.com> | 2016-04-01 21:00:20 -0400 |
---|---|---|
committer | Vanessa Ezekowitz <vanessaezekowitz@gmail.com> | 2016-04-01 21:10:04 -0400 |
commit | 888b0ebfec8c2eff9015163549a7e47443cb8665 (patch) | |
tree | 915080159bfaa6ba6e226087c7ce0e8d5464b518 /wrench | |
parent | da66780a569712c23ae4f2996cfb4608a9f9d69d (diff) | |
download | dreambuilder_modpack-888b0ebfec8c2eff9015163549a7e47443cb8665.tar dreambuilder_modpack-888b0ebfec8c2eff9015163549a7e47443cb8665.tar.gz dreambuilder_modpack-888b0ebfec8c2eff9015163549a7e47443cb8665.tar.bz2 dreambuilder_modpack-888b0ebfec8c2eff9015163549a7e47443cb8665.tar.xz dreambuilder_modpack-888b0ebfec8c2eff9015163549a7e47443cb8665.zip |
"explode" all modpacks into their individual components
(you can't have a modpack buried inside a modpack)
Diffstat (limited to 'wrench')
-rw-r--r-- | wrench/depends.txt | 6 | ||||
-rw-r--r-- | wrench/init.lua | 162 | ||||
-rw-r--r-- | wrench/locale/de.txt | 7 | ||||
-rw-r--r-- | wrench/locale/template.txt | 5 | ||||
-rw-r--r-- | wrench/locale/tr.txt | 5 | ||||
-rw-r--r-- | wrench/support.lua | 73 | ||||
-rw-r--r-- | wrench/technic.lua | 343 | ||||
-rw-r--r-- | wrench/textures/technic_wrench.png | bin | 0 -> 249 bytes |
8 files changed, 601 insertions, 0 deletions
diff --git a/wrench/depends.txt b/wrench/depends.txt new file mode 100644 index 0000000..a681af3 --- /dev/null +++ b/wrench/depends.txt @@ -0,0 +1,6 @@ +default +technic? +technic_chests? +technic_worldgen? +intllib? + diff --git a/wrench/init.lua b/wrench/init.lua new file mode 100644 index 0000000..76605c4 --- /dev/null +++ b/wrench/init.lua @@ -0,0 +1,162 @@ +--[[ +Wrench mod + +Adds a wrench that allows the player to pickup nodes that contain an inventory +with items or metadata that needs perserving. +The wrench has the same tool capability as the normal hand. +To pickup a node simply right click on it. If the node contains a formspec, +you will need to shift+right click instead. +Because it enables arbitrary nesting of chests, and so allows the player +to carry an unlimited amount of material at once, this wrench is not +available to survival-mode players. +--]] + +local LATEST_SERIALIZATION_VERSION = 1 + +wrench = {} + +local modpath = minetest.get_modpath(minetest.get_current_modname()) +dofile(modpath.."/support.lua") +dofile(modpath.."/technic.lua") + +-- Boilerplate to support localized strings if intllib mod is installed. +local S = rawget(_G, "intllib") and intllib.Getter() or function(s) return s end + +local function get_meta_type(name, metaname) + local def = wrench.registered_nodes[name] + if not def or not def.metas or not def.metas[metaname] then + return nil + end + return def.metas[metaname] +end + +local function get_pickup_name(name) + return "wrench:picked_up_"..(name:gsub(":", "_")) +end + +local function restore(pos, placer, itemstack) + local name = itemstack:get_name() + local node = minetest.get_node(pos) + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + local data = minetest.deserialize(itemstack:get_metadata()) + minetest.set_node(pos, {name = data.name, param2 = node.param2}) + local lists = data.lists + for name, value in pairs(data.metas) do + local meta_type = get_meta_type(data.name, name) + if meta_type == wrench.META_TYPE_INT then + meta:set_int(name, value) + elseif meta_type == wrench.META_TYPE_FLOAT then + meta:set_float(name, value) + elseif meta_type == wrench.META_TYPE_STRING then + meta:set_string(name, value) + end + end + for listname, list in pairs(lists) do + inv:set_list(listname, list) + end + itemstack:take_item() + return itemstack +end + +for name, info in pairs(wrench.registered_nodes) do + local olddef = minetest.registered_nodes[name] + if olddef then + local newdef = {} + for key, value in pairs(olddef) do + newdef[key] = value + end + newdef.stack_max = 1 + newdef.description = S("%s with items"):format(newdef.description) + newdef.groups = {} + newdef.groups.not_in_creative_inventory = 1 + newdef.on_construct = nil + newdef.on_destruct = nil + newdef.after_place_node = restore + minetest.register_node(":"..get_pickup_name(name), newdef) + end +end + +minetest.register_tool("wrench:wrench", { + description = S("Wrench"), + inventory_image = "technic_wrench.png", + tool_capabilities = { + full_punch_interval = 0.9, + max_drop_level = 0, + groupcaps = { + crumbly = {times={[2]=3.00, [3]=0.70}, uses=0, maxlevel=1}, + snappy = {times={[3]=0.40}, uses=0, maxlevel=1}, + oddly_breakable_by_hand = {times={[1]=7.00,[2]=4.00,[3]=1.40}, + uses=0, maxlevel=3} + }, + damage_groups = {fleshy=1}, + }, + on_place = function(itemstack, placer, pointed_thing) + local pos = pointed_thing.under + if not placer or not pos then + return + end + if minetest.is_protected(pos, placer:get_player_name()) then + minetest.record_protection_violation(pos, placer:get_player_name()) + return + end + local name = minetest.get_node(pos).name + local def = wrench.registered_nodes[name] + if not def then + return + end + + local stack = ItemStack(get_pickup_name(name)) + local player_inv = placer:get_inventory() + if not player_inv:room_for_item("main", stack) then + return + end + local meta = minetest.get_meta(pos) + if def.owned then + local owner = meta:get_string("owner") + if owner and owner ~= placer:get_player_name() then + minetest.log("action", placer:get_player_name().. + " tried to pick up a owned node belonging to ".. + owner.." at ".. + minetest.pos_to_string(pos)) + return + end + end + + local metadata = {} + metadata.name = name + metadata.version = LATEST_SERIALIZATION_VERSION + + local inv = meta:get_inventory() + local lists = {} + for _, listname in pairs(def.lists or {}) do + if not inv:is_empty(listname) then + empty = false + end + local list = inv:get_list(listname) + for i, stack in pairs(list) do + list[i] = stack:to_string() + end + lists[listname] = list + end + metadata.lists = lists + + local metas = {} + for name, meta_type in pairs(def.metas or {}) do + if meta_type == wrench.META_TYPE_INT then + metas[name] = meta:get_int(name) + elseif meta_type == wrench.META_TYPE_FLOAT then + metas[name] = meta:get_float(name) + elseif meta_type == wrench.META_TYPE_STRING then + metas[name] = meta:get_string(name) + end + end + metadata.metas = metas + + stack:set_metadata(minetest.serialize(metadata)) + minetest.remove_node(pos) + itemstack:add_wear(65535 / 20) + player_inv:add_item("main", stack) + return itemstack + end, +}) diff --git a/wrench/locale/de.txt b/wrench/locale/de.txt new file mode 100644 index 0000000..b285cd3 --- /dev/null +++ b/wrench/locale/de.txt @@ -0,0 +1,7 @@ +# German Translation for technic_wrench +# Deutsche Übersetzung von technic_wrench +# by Xanthin + +Wrench = Schraubenschluessel +%s with items = %s mit Gegenstaenden + diff --git a/wrench/locale/template.txt b/wrench/locale/template.txt new file mode 100644 index 0000000..eff2da2 --- /dev/null +++ b/wrench/locale/template.txt @@ -0,0 +1,5 @@ +# technic_wrench translation template + +Wrench = +%s with items = + diff --git a/wrench/locale/tr.txt b/wrench/locale/tr.txt new file mode 100644 index 0000000..2050bce --- /dev/null +++ b/wrench/locale/tr.txt @@ -0,0 +1,5 @@ +# Turkish translation by mahmutelmas06 +# mahmutelmas06@hotmail.com + +Wrench = İngiliz anahtarı +%s with items = Araçlarla birlikte %s diff --git a/wrench/support.lua b/wrench/support.lua new file mode 100644 index 0000000..1d21811 --- /dev/null +++ b/wrench/support.lua @@ -0,0 +1,73 @@ +--[[ +supported_nodes +This table stores all nodes that are compatible with the wrench mod. +Syntax: + [<node name>] = { + lists = {"<inventory list name>"}, + metas = {["<meta name>"] = STRING, + ["<meta name>"] = INT, + ["<meta name>"] = FLOAT}, + owned = true, + store_meta_always = true, + } + owned - nodes that are protected by owner requirements (Ex. locked chests) + store_meta_always - when nodes are broken this ensures metadata and + inventory is always stored (Ex. active state for machines) +--]] + +wrench.META_TYPE_INT = 0 +wrench.META_TYPE_FLOAT = 1 +wrench.META_TYPE_STRING = 2 + +local INT, STRING, FLOAT = + wrench.META_TYPE_INT, + wrench.META_TYPE_STRING, + wrench.META_TYPE_FLOAT + +wrench.registered_nodes = { + ["default:chest"] = { + lists = {"main"}, + }, + ["default:chest_locked"] = { + lists = {"main"}, + metas = {owner = STRING, + infotext = STRING}, + owned = true, + }, + ["default:furnace"] = { + lists = {"fuel", "src", "dst"}, + metas = {infotext = STRING, + fuel_totaltime = FLOAT, + fuel_time = FLOAT, + src_totaltime = FLOAT, + src_time = FLOAT}, + }, + ["default:furnace_active"] = { + lists = {"fuel", "src", "dst"}, + metas = {infotext = STRING, + fuel_totaltime = FLOAT, + fuel_time = FLOAT, + src_totaltime = FLOAT, + src_time = FLOAT}, + store_meta_always = true, + }, + ["default:sign_wall"] = { + metas = {infotext = STRING, + text = STRING}, + }, +} + +function wrench:original_name(name) + for key, value in pairs(self.registered_nodes) do + if name == value.name then + return key + end + end +end + +function wrench:register_node(name, def) + if minetest.registered_nodes[name] then + self.registered_nodes[name] = def + end +end + diff --git a/wrench/technic.lua b/wrench/technic.lua new file mode 100644 index 0000000..c404180 --- /dev/null +++ b/wrench/technic.lua @@ -0,0 +1,343 @@ + +local INT, STRING, FLOAT = + wrench.META_TYPE_INT, + wrench.META_TYPE_STRING, + wrench.META_TYPE_FLOAT + +wrench:register_node("technic:iron_chest", { + lists = {"main"}, +}) +wrench:register_node("technic:iron_locked_chest", { + lists = {"main"}, + metas = {infotext = STRING, + owner = STRING}, + owned = true, +}) +wrench:register_node("technic:copper_chest", { + lists = {"main"}, +}) +wrench:register_node("technic:copper_locked_chest", { + lists = {"main"}, + metas = {infotext = STRING, + owner = STRING}, + owned = true, +}) +wrench:register_node("technic:silver_chest", { + lists = {"main"}, + metas = {infotext = STRING, + formspec = STRING}, +}) +wrench:register_node("technic:silver_locked_chest", { + lists = {"main"}, + metas = {infotext = STRING, + owner = STRING, + formspec = STRING}, + owned = true, +}) +wrench:register_node("technic:gold_chest", { + lists = {"main"}, + metas = {infotext = STRING, + formspec = STRING}, +}) +wrench:register_node("technic:gold_locked_chest", { + lists = {"main"}, + metas = {infotext = STRING, + owner = STRING, + formspec = STRING}, + owned = true, +}) +wrench:register_node("technic:mithril_chest", { + lists = {"main"}, + metas = {infotext = STRING, + formspec = STRING}, +}) +wrench:register_node("technic:mithril_locked_chest", { + lists = {"main"}, + metas = {infotext = STRING, + owner = STRING, + formspec = STRING}, + owned = true, +}) +wrench:register_node("technic:lv_electric_furnace", { + lists = {"src", "dst"}, + metas = {infotext = STRING, + formspec = STRING, + LV_EU_demand = INT, + LV_EU_input = INT, + src_time = INT}, +}) +wrench:register_node("technic:lv_electric_furnace_active", { + lists = {"src", "dst"}, + metas = {infotext = STRING, + formspec = STRING, + LV_EU_demand = INT, + LV_EU_input = INT, + src_time = INT}, +}) +wrench:register_node("technic:mv_electric_furnace", { + lists = {"src", "dst", "upgrade1", "upgrade2"}, + metas = {infotext = STRING, + formspec = STRING, + MV_EU_demand = INT, + MV_EU_input = INT, + tube_time = INT, + src_time = INT}, +}) +wrench:register_node("technic:mv_electric_furnace_active", { + lists = {"src", "dst", "upgrade1", "upgrade2"}, + metas = {infotext = STRING, + formspec = STRING, + MV_EU_demand = INT, + MV_EU_input = INT, + tube_time = INT, + src_time = INT}, +}) +wrench:register_node("technic:coal_alloy_furnace", { + lists = {"fuel", "src", "dst"}, + metas = {infotext = STRING, + fuel_totaltime = FLOAT, + fuel_time = FLOAT, + src_totaltime = FLOAT, + src_time = FLOAT}, +}) +wrench:register_node("technic:coal_alloy_furnace_active", { + lists = {"fuel", "src", "dst"}, + metas = {infotext = STRING, + fuel_totaltime = FLOAT, + fuel_time = FLOAT, + src_totaltime = FLOAT, + src_time = FLOAT}, +}) +wrench:register_node("technic:alloy_furnace", { + lists = {"src", "dst"}, + metas = {infotext = STRING, + formspec = STRING, + LV_EU_demand = INT, + LV_EU_input = INT, + tube_time = INT, + src_time = INT}, +}) +wrench:register_node("technic:alloy_furnace_active", { + lists = {"src", "dst"}, + metas = {infotext = STRING, + formspec = STRING, + LV_EU_demand = INT, + LV_EU_input = INT, + tube_time = INT, + src_time = INT}, +}) +wrench:register_node("technic:mv_alloy_furnace", { + lists = {"src", "dst", "upgrade1", "upgrade2"}, + metas = {infotext = STRING, + formspec = STRING, + MV_EU_demand = INT, + MV_EU_input = INT, + tube_time = INT, + src_time = INT}, +}) +wrench:register_node("technic:mv_alloy_furnace_active", { + lists = {"src", "dst", "upgrade1", "upgrade2"}, + metas = {infotext = STRING, + formspec = STRING, + MV_EU_demand = INT, + MV_EU_input = INT, + tube_time = INT, + src_time = INT}, +}) +wrench:register_node("technic:tool_workshop", { + lists = {"src", "upgrade1", "upgrade2"}, + metas = {infotext = STRING, + formspec = STRING, + MV_EU_demand = INT, + MV_EU_input = INT, + tube_time = INT}, +}) +wrench:register_node("technic:grinder", { + lists = {"src", "dst"}, + metas = {infotext = STRING, + formspec = STRING, + LV_EU_demand = INT, + LV_EU_input = INT, + src_time = INT}, +}) +wrench:register_node("technic:grinder_active", { + lists = {"src", "dst"}, + metas = {infotext = STRING, + formspec = STRING, + LV_EU_demand = INT, + LV_EU_input = INT, + src_time = INT}, +}) +wrench:register_node("technic:mv_grinder", { + lists = {"src", "dst", "upgrade1", "upgrade2"}, + metas = {infotext = STRING, + formspec = STRING, + MV_EU_demand = INT, + MV_EU_input = INT, + tube_time = INT, + src_time = INT}, +}) +wrench:register_node("technic:mv_grinder_active", { + lists = {"src", "dst", "upgrade1", "upgrade2"}, + metas = {infotext = STRING, + formspec = STRING, + MV_EU_demand = INT, + MV_EU_input = INT, + tube_time = INT, + src_time = INT}, +}) +wrench:register_node("technic:extractor", { + lists = {"src", "dst"}, + metas = {infotext = STRING, + formspec = STRING, + LV_EU_demand = INT, + LV_EU_input = INT, + src_time = INT}, +}) +wrench:register_node("technic:extractor_active", { + lists = {"src", "dst"}, + metas = {infotext = STRING, + formspec = STRING, + LV_EU_demand = INT, + LV_EU_input = INT, + src_time = INT}, +}) +wrench:register_node("technic:mv_extractor", { + lists = {"src", "dst", "upgrade1", "upgrade2"}, + metas = {infotext = STRING, + formspec = STRING, + MV_EU_demand = INT, + MV_EU_input = INT, + tube_time = INT, + src_time = INT}, +}) +wrench:register_node("technic:mv_extractor_active", { + lists = {"src", "dst", "upgrade1", "upgrade2"}, + metas = {infotext = STRING, + formspec = STRING, + MV_EU_demand = INT, + MV_EU_input = INT, + tube_time = INT, + src_time = INT}, +}) +wrench:register_node("technic:compressor", { + lists = {"src", "dst"}, + metas = {infotext = STRING, + formspec = STRING, + LV_EU_demand = INT, + LV_EU_input = INT, + src_time = INT}, +}) +wrench:register_node("technic:compressor_active", { + lists = {"src", "dst"}, + metas = {infotext = STRING, + formspec = STRING, + LV_EU_demand = INT, + LV_EU_input = INT, + src_time = INT}, +}) +wrench:register_node("technic:mv_compressor", { + lists = {"src", "dst", "upgrade1", "upgrade2"}, + metas = {infotext = STRING, + formspec = STRING, + MV_EU_demand = INT, + MV_EU_input = INT, + tube_time = INT, + src_time = INT}, +}) +wrench:register_node("technic:mv_compressor_active", { + lists = {"src", "dst", "upgrade1", "upgrade2"}, + metas = {infotext = STRING, + formspec = STRING, + MV_EU_demand = INT, + MV_EU_input = INT, + tube_time = INT, + src_time = INT}, +}) +wrench:register_node("technic:cnc", { + lists = {"src", "dst"}, + metas = {infotext = STRING, + formspec = STRING, + LV_EU_demand = INT, + LV_EU_input = INT, + src_time = INT, + cnc_product = STRING}, +}) +wrench:register_node("technic:cnc_active", { + lists = {"src", "dst"}, + metas = {infotext = STRING, + formspec = STRING, + LV_EU_demand = INT, + LV_EU_input = INT, + src_time = INT, + cnc_product = STRING}, +}) +wrench:register_node("technic:mv_centrifuge", { + lists = {"src", "dst", "upgrade1", "upgrade2"}, + metas = {infotext = STRING, + formspec = STRING, + MV_EU_demand = INT, + MV_EU_input = INT, + tube_time = INT, + src_time = INT}, +}) +wrench:register_node("technic:mv_centrifuge_active", { + lists = {"src", "dst", "upgrade1", "upgrade2"}, + metas = {infotext = STRING, + formspec = STRING, + MV_EU_demand = INT, + MV_EU_input = INT, + tube_time = INT, + src_time = INT}, +}) + + +local chest_mark_colors = { + '_black', + '_blue', + '_brown', + '_cyan', + '_dark_green', + '_dark_grey', + '_green', + '_grey', + '_magenta', + '_orange', + '_pink', + '_red', + '_violet', + '_white', + '_yellow', + '', +} + +for i = 1, 15 do + wrench:register_node("technic:gold_chest"..chest_mark_colors[i], { + lists = {"main"}, + metas = {infotext = STRING,formspec = STRING}, + }) + wrench:register_node("technic:gold_locked_chest"..chest_mark_colors[i], { + lists = {"main"}, + metas = {infotext = STRING,owner = STRING,formspec = STRING}, + owned = true, + }) +end + +if minetest.get_modpath("technic") then + for tier, _ in pairs(technic.machines) do + local ltier = tier:lower() + for i = 0, 8 do + wrench:register_node("technic:"..ltier.."_battery_box"..i, { + lists = {"src", "dst"}, + metas = {infotext = STRING, + formspec = STRING, + [tier.."_EU_demand"] = INT, + [tier.."_EU_supply"] = INT, + [tier.."_EU_input"] = INT, + internal_EU_charge = INT, + last_side_shown = INT}, + }) + end + end +end + diff --git a/wrench/textures/technic_wrench.png b/wrench/textures/technic_wrench.png Binary files differnew file mode 100644 index 0000000..471b47e --- /dev/null +++ b/wrench/textures/technic_wrench.png |