mirror of
				https://github.com/D00Med/scifi_nodes.git
				synced 2025-11-04 07:45:30 +01:00 
			
		
		
		
	Compare commits
	
		
			23 Commits
		
	
	
		
			truchet-ti
			...
			f79e84b92d
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| f79e84b92d | |||
| cc5f1bea5a | |||
| e7864a4a86 | |||
| c649c290ab | |||
| 4f2d2a304f | |||
| 8816db8ecf | |||
| 5b903a6e78 | |||
| eb231d7ca7 | |||
| 2fd4de11c0 | |||
| b88b7349a5 | |||
| c30ae4b3bd | |||
| 6cf45fcd43 | |||
| 1ded358e04 | |||
| ecfaa4714a | |||
| c341cb8a20 | |||
| d66e04f9b1 | |||
| d3d6a7bf79 | |||
| e34fdde795 | |||
| 1993068ed1 | |||
| 436f51ab0d | |||
| 749d59a530 | |||
| bd58dbc48b | |||
| 4eaba4f6e1 | 
							
								
								
									
										17
									
								
								.github/workflows/luacheck.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										17
									
								
								.github/workflows/luacheck.yml
									
									
									
									
										vendored
									
									
								
							@@ -1,10 +1,17 @@
 | 
			
		||||
name: luacheck
 | 
			
		||||
 | 
			
		||||
on: [push, pull_request]
 | 
			
		||||
 | 
			
		||||
jobs:
 | 
			
		||||
  luacheck:
 | 
			
		||||
  build:
 | 
			
		||||
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
 | 
			
		||||
    steps:
 | 
			
		||||
      - name: Checkout
 | 
			
		||||
        uses: actions/checkout@main
 | 
			
		||||
      - name: Luacheck
 | 
			
		||||
        uses: lunarmodules/luacheck@master
 | 
			
		||||
    - uses: actions/checkout@v1
 | 
			
		||||
    - name: apt
 | 
			
		||||
      run: sudo apt-get install -y luarocks
 | 
			
		||||
    - name: luacheck install
 | 
			
		||||
      run: luarocks install --local luacheck
 | 
			
		||||
    - name: luacheck run
 | 
			
		||||
      run: $HOME/.luarocks/bin/luacheck ./
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										13
									
								
								.luacheckrc
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								.luacheckrc
									
									
									
									
									
								
							@@ -1,14 +1,20 @@
 | 
			
		||||
std = "min+minetest"
 | 
			
		||||
 | 
			
		||||
unused_args = false
 | 
			
		||||
max_line_length = 180
 | 
			
		||||
 | 
			
		||||
globals = {
 | 
			
		||||
	"scifi_nodes"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
read_globals = {
 | 
			
		||||
	-- Stdlib
 | 
			
		||||
	string = {fields = {"split"}},
 | 
			
		||||
	table = {fields = {"copy", "getn"}},
 | 
			
		||||
 | 
			
		||||
	-- Minetest
 | 
			
		||||
	"vector", "ItemStack",
 | 
			
		||||
	"dump",
 | 
			
		||||
 | 
			
		||||
	-- optional deps
 | 
			
		||||
	"advtrains",
 | 
			
		||||
	"default",
 | 
			
		||||
	"stairsplus",
 | 
			
		||||
	"xpanes",
 | 
			
		||||
@@ -17,7 +23,6 @@ read_globals = {
 | 
			
		||||
	"mesecon",
 | 
			
		||||
	"unifieddyes",
 | 
			
		||||
	"letters",
 | 
			
		||||
	"signs_api",
 | 
			
		||||
	"stealthnode",
 | 
			
		||||
	"slats",
 | 
			
		||||
	"mtt"
 | 
			
		||||
 
 | 
			
		||||
@@ -49,9 +49,6 @@ CC BY 3.0
 | 
			
		||||
 | 
			
		||||
CC0
 | 
			
		||||
* scifi_nodes_digicode.ogg https://freesound.org/people/benjaminharveydesign/sounds/315921/
 | 
			
		||||
* scifi_nodes_ambience_fan.ogg https://freesound.org/people/itinerantmonk108/sounds/554430/
 | 
			
		||||
* scifi_nodes_ambience_vent.ogg https://freesound.org/people/kentspublicdomain/sounds/324665/
 | 
			
		||||
* scifi_nodes_ambience_engine.ogg https://freesound.org/people/firestorm185/sounds/423221/
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Contributors:
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										259
									
								
								access_card.lua
									
									
									
									
									
								
							
							
						
						
									
										259
									
								
								access_card.lua
									
									
									
									
									
								
							@@ -1,259 +0,0 @@
 | 
			
		||||
local FORMSPEC_NAME = "scifi_nodes:access_card_configure"
 | 
			
		||||
 | 
			
		||||
local function create_id()
 | 
			
		||||
    local template = "xxxxxx"
 | 
			
		||||
    return string.gsub(template, '[x]', function ()
 | 
			
		||||
            return string.format('%x', math.random(0, 0xf))
 | 
			
		||||
    end)
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
local function get_door_access_table(meta)
 | 
			
		||||
    local str = meta:get_string("access")
 | 
			
		||||
    if str == "" then
 | 
			
		||||
        -- no config
 | 
			
		||||
        return {}
 | 
			
		||||
    else
 | 
			
		||||
        return minetest.deserialize(str) or {}
 | 
			
		||||
    end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
local function set_door_access_table(meta, at)
 | 
			
		||||
    if next(at) then
 | 
			
		||||
        meta:set_string("access", minetest.serialize(at))
 | 
			
		||||
    else
 | 
			
		||||
        meta:set_string("access", "")
 | 
			
		||||
    end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
function scifi_nodes.door_check_access_card(node_pos, itemstack, player)
 | 
			
		||||
    local node_meta = minetest.get_meta(node_pos)
 | 
			
		||||
    local access_table = get_door_access_table(node_meta)
 | 
			
		||||
    if not next(access_table) then
 | 
			
		||||
        -- access not restricted
 | 
			
		||||
        return true
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    if not minetest.is_player(player) then
 | 
			
		||||
        -- not a player, restrict access
 | 
			
		||||
        return false
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    local playername = player:get_player_name()
 | 
			
		||||
 | 
			
		||||
    if itemstack:get_name() ~= "scifi_nodes:access_card" then
 | 
			
		||||
        minetest.chat_send_player(playername, minetest.colorize("#ff0000", "Access denied: no access card detected!"))
 | 
			
		||||
        minetest.sound_play("scifi_nodes_scanner_refused", { pos = node_pos, max_hear_distance = 10 })
 | 
			
		||||
        return false
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    local item_meta = itemstack:get_meta()
 | 
			
		||||
    local id = item_meta:get_string("id")
 | 
			
		||||
    if id == "" then
 | 
			
		||||
        minetest.chat_send_player(playername, minetest.colorize("#ff0000", "Access denied: unconfigured access card"))
 | 
			
		||||
        minetest.sound_play("scifi_nodes_scanner_refused", { pos = node_pos, max_hear_distance = 10 })
 | 
			
		||||
        return false
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    if not access_table[id] then
 | 
			
		||||
        minetest.chat_send_player(playername, minetest.colorize("#ff0000", "Access denied: invalid access card"))
 | 
			
		||||
        minetest.sound_play("scifi_nodes_scanner_refused", { pos = node_pos, max_hear_distance = 10 })
 | 
			
		||||
        return false
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    minetest.sound_play("scifi_nodes_scanner_granted", { pos = node_pos, max_hear_distance = 10 })
 | 
			
		||||
    return true
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
-- using a card against a door toggles the access to it
 | 
			
		||||
local function on_use(itemstack, player, pointed_thing)
 | 
			
		||||
    local playername = player:get_player_name()
 | 
			
		||||
    local pos = pointed_thing.under
 | 
			
		||||
 | 
			
		||||
    if not pos then
 | 
			
		||||
        -- nothing selected
 | 
			
		||||
        return
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    if minetest.is_protected(pos, playername) then
 | 
			
		||||
        -- protected
 | 
			
		||||
        return
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    local node = minetest.get_node(pos)
 | 
			
		||||
    local node_def = minetest.registered_nodes[node.name]
 | 
			
		||||
    if not node_def.groups or not node_def.groups.scifi_nodes_door then
 | 
			
		||||
        -- incompatible node
 | 
			
		||||
        return
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    local item_meta = itemstack:get_meta()
 | 
			
		||||
    local card_id = item_meta:get_string("id")
 | 
			
		||||
    if card_id == "" then
 | 
			
		||||
        minetest.chat_send_player(playername, "Access card is unconfigured")
 | 
			
		||||
        return
 | 
			
		||||
    end
 | 
			
		||||
    local card_name = item_meta:get_string("name")
 | 
			
		||||
 | 
			
		||||
    local node_meta = minetest.get_meta(pos)
 | 
			
		||||
    local access_table = get_door_access_table(node_meta)
 | 
			
		||||
 | 
			
		||||
    if access_table[card_id] then
 | 
			
		||||
        -- remove access
 | 
			
		||||
        access_table[card_id] = nil
 | 
			
		||||
        minetest.chat_send_player(playername, "Revoked access to card-id '" .. card_id .. "'")
 | 
			
		||||
        minetest.sound_play("scifi_nodes_scanner_refused", { pos = pos, max_hear_distance = 10 })
 | 
			
		||||
    else
 | 
			
		||||
        -- grant access
 | 
			
		||||
        access_table[card_id] = card_name
 | 
			
		||||
        minetest.chat_send_player(playername, "Granted access to card-id '" .. card_id .. "'")
 | 
			
		||||
        minetest.sound_play("scifi_nodes_scanner_granted", { pos = pos, max_hear_distance = 10 })
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    local msg = ""
 | 
			
		||||
    if next(access_table) then
 | 
			
		||||
        msg = msg .. "Current registered cards: "
 | 
			
		||||
        for id, name in pairs(access_table) do
 | 
			
		||||
            msg = msg .. "Name: '" .. name .. "' ID: '" .. id .. "' / "
 | 
			
		||||
        end
 | 
			
		||||
    else
 | 
			
		||||
        -- access table is empty
 | 
			
		||||
        msg = "No access-card left in access-table, door is free to use"
 | 
			
		||||
    end
 | 
			
		||||
    minetest.chat_send_player(playername, msg)
 | 
			
		||||
 | 
			
		||||
    -- set new access table
 | 
			
		||||
    set_door_access_table(node_meta, access_table)
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
local function configure_access_card(meta, name)
 | 
			
		||||
    local id = meta:get_string("id")
 | 
			
		||||
    if id == "" then
 | 
			
		||||
        -- set new id
 | 
			
		||||
        id = create_id()
 | 
			
		||||
        meta:set_string("id", id)
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    meta:set_string("name", name)
 | 
			
		||||
    meta:set_string("description", "Access card '" .. name .. "' (id: '" .. id .. "')")
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
-- right-click with a card for rename/configuration
 | 
			
		||||
local function on_secondary_use(itemstack, player, pointed_thing)
 | 
			
		||||
    local meta = itemstack:get_meta()
 | 
			
		||||
    if meta:get_string("id") == "" then
 | 
			
		||||
        -- initial configuration
 | 
			
		||||
        configure_access_card(meta, "")
 | 
			
		||||
    end
 | 
			
		||||
    local name = meta:get_string("name")
 | 
			
		||||
 | 
			
		||||
    minetest.show_formspec(player:get_player_name(), FORMSPEC_NAME, [[
 | 
			
		||||
        size[10,1.4]
 | 
			
		||||
        real_coordinates[true]
 | 
			
		||||
        field[0.1,0.4;7,0.8;name;Name;]] .. minetest.formspec_escape(name) .. [[]
 | 
			
		||||
        button_exit[7.3,0.4;2.5,0.8;save;Save]
 | 
			
		||||
    ]])
 | 
			
		||||
 | 
			
		||||
    return itemstack
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
minetest.register_on_player_receive_fields(function(player, formname, fields)
 | 
			
		||||
    if formname ~= FORMSPEC_NAME then
 | 
			
		||||
        -- wrong formspec
 | 
			
		||||
        return false
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    if not fields.save and not fields.key_enter_field then
 | 
			
		||||
        -- quit
 | 
			
		||||
        return true
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    local itemstack = player:get_wielded_item()
 | 
			
		||||
    if itemstack:get_name() ~= "scifi_nodes:access_card" then
 | 
			
		||||
        -- invalid item
 | 
			
		||||
        return true
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    local meta = itemstack:get_meta()
 | 
			
		||||
    configure_access_card(meta, fields.name or "")
 | 
			
		||||
    player:set_wielded_item(itemstack)
 | 
			
		||||
end)
 | 
			
		||||
 | 
			
		||||
minetest.register_craftitem("scifi_nodes:access_card", {
 | 
			
		||||
    description = "Access card (unconfigured)",
 | 
			
		||||
    inventory_image = "scifi_nodes_access_card.png",
 | 
			
		||||
    palette = "unifieddyes_palette_extended.png",
 | 
			
		||||
    stack_max = 1,
 | 
			
		||||
    paramtype2 = "color",
 | 
			
		||||
    on_use = on_use,
 | 
			
		||||
    on_secondary_use = on_secondary_use,
 | 
			
		||||
    groups = {
 | 
			
		||||
        ud_param2_colorable = 1
 | 
			
		||||
    }
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
-- initial recipe
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
    output = "scifi_nodes:access_card",
 | 
			
		||||
    recipe = {
 | 
			
		||||
        {"scifi_nodes:white2", "", ""},
 | 
			
		||||
        {"scifi_nodes:white_pad", "", ""},
 | 
			
		||||
        {"scifi_nodes:white2", "", ""}
 | 
			
		||||
    }
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
-- copy recipe
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
    output = "scifi_nodes:access_card",
 | 
			
		||||
    recipe = {
 | 
			
		||||
        {"scifi_nodes:access_card", "scifi_nodes:white_pad", ""},
 | 
			
		||||
        {"", "", ""},
 | 
			
		||||
        {"", "", ""}
 | 
			
		||||
    }
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_on_craft(function(itemstack, player, old_craft_grid, craft_inv)
 | 
			
		||||
    if itemstack:get_name() ~= "scifi_nodes:access_card" then
 | 
			
		||||
        return
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    local original
 | 
			
		||||
    local index
 | 
			
		||||
    for i = 1, #old_craft_grid do
 | 
			
		||||
        if old_craft_grid[i]:get_name() == "scifi_nodes:access_card" then
 | 
			
		||||
            original = old_craft_grid[i]
 | 
			
		||||
            index = i
 | 
			
		||||
            break
 | 
			
		||||
        end
 | 
			
		||||
    end
 | 
			
		||||
    if not original then
 | 
			
		||||
        return
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    -- copy metadata
 | 
			
		||||
    local src_meta = original:get_meta()
 | 
			
		||||
    local dst_meta = itemstack:get_meta()
 | 
			
		||||
    local copy_fields = {"id", "name", "description"}
 | 
			
		||||
    for _, fieldname in ipairs(copy_fields) do
 | 
			
		||||
        dst_meta:set_string(fieldname, src_meta:get_string(fieldname))
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    if old_craft_grid[2]:get_name() == "scifi_nodes:white_pad" then
 | 
			
		||||
        -- keep original item if the copy-recipe is used
 | 
			
		||||
        craft_inv:set_stack("craft", index, original)
 | 
			
		||||
    end
 | 
			
		||||
end)
 | 
			
		||||
 | 
			
		||||
if minetest.get_modpath("unifieddyes") then
 | 
			
		||||
    -- add colored crafts
 | 
			
		||||
    unifieddyes.register_color_craft({
 | 
			
		||||
        output = "scifi_nodes:access_card",
 | 
			
		||||
        palette = "extended",
 | 
			
		||||
        neutral_node = "scifi_nodes:access_card",
 | 
			
		||||
        recipe = {
 | 
			
		||||
            "NEUTRAL_NODE",
 | 
			
		||||
            "MAIN_DYE"
 | 
			
		||||
        },
 | 
			
		||||
        type = "shapeless"
 | 
			
		||||
    })
 | 
			
		||||
 | 
			
		||||
end
 | 
			
		||||
							
								
								
									
										73
									
								
								ambience.lua
									
									
									
									
									
								
							
							
						
						
									
										73
									
								
								ambience.lua
									
									
									
									
									
								
							@@ -1,73 +0,0 @@
 | 
			
		||||
 | 
			
		||||
-- currently playing sounds per mapblock
 | 
			
		||||
-- mapblock_pos[number]
 | 
			
		||||
local currently_playing = {}
 | 
			
		||||
 | 
			
		||||
-- clear the currently playing tracker every few seconds
 | 
			
		||||
local function clear_currently_playing()
 | 
			
		||||
    currently_playing = {}
 | 
			
		||||
    minetest.after(5, clear_currently_playing)
 | 
			
		||||
end
 | 
			
		||||
minetest.after(5, clear_currently_playing)
 | 
			
		||||
 | 
			
		||||
-- mapblock resolution
 | 
			
		||||
local function get_key(pos)
 | 
			
		||||
    return minetest.pos_to_string(vector.round(vector.divide(pos, 16)))
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
local function add_currently_playing(pos, value)
 | 
			
		||||
    local key = get_key(pos)
 | 
			
		||||
    local count = currently_playing[key]
 | 
			
		||||
    if not count then
 | 
			
		||||
        -- new entry
 | 
			
		||||
        count = value
 | 
			
		||||
    else
 | 
			
		||||
        -- update entry
 | 
			
		||||
        count = count + value
 | 
			
		||||
    end
 | 
			
		||||
    currently_playing[key] = count
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
-- limit plaing sounds per mapblock
 | 
			
		||||
local function can_play(pos)
 | 
			
		||||
    local count = currently_playing[get_key(pos)]
 | 
			
		||||
    return not count or count < 25
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
-- register ambience sounds with node-timer
 | 
			
		||||
function scifi_nodes.register_ambience(nodename, soundname, opts)
 | 
			
		||||
    assert(opts)
 | 
			
		||||
    opts.interval = opts.interval or 60
 | 
			
		||||
 | 
			
		||||
    local function play(pos)
 | 
			
		||||
        minetest.sound_play(soundname ,{
 | 
			
		||||
            max_hear_distance = opts.max_hear_distance or 16,
 | 
			
		||||
            pos = pos,
 | 
			
		||||
            gain = opts.gain or 0.7
 | 
			
		||||
        })
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    minetest.override_item(nodename, {
 | 
			
		||||
        on_timer = function(pos)
 | 
			
		||||
            local timer = minetest.get_node_timer(pos)
 | 
			
		||||
 | 
			
		||||
            if not can_play(pos) then
 | 
			
		||||
                -- too many sounds playing, recheck again soon
 | 
			
		||||
                timer:start(1)
 | 
			
		||||
                return
 | 
			
		||||
            end
 | 
			
		||||
 | 
			
		||||
            -- increment usage count
 | 
			
		||||
            add_currently_playing(pos, 1)
 | 
			
		||||
            play(pos)
 | 
			
		||||
 | 
			
		||||
            -- restart timer
 | 
			
		||||
            timer:start(opts.interval)
 | 
			
		||||
        end,
 | 
			
		||||
        on_construct = function(pos)
 | 
			
		||||
            play(pos)
 | 
			
		||||
            local timer = minetest.get_node_timer(pos)
 | 
			
		||||
            timer:start(opts.interval)
 | 
			
		||||
        end
 | 
			
		||||
    })
 | 
			
		||||
end
 | 
			
		||||
							
								
								
									
										11
									
								
								chest.lua
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								chest.lua
									
									
									
									
									
								
							@@ -1,21 +1,20 @@
 | 
			
		||||
local has_default = minetest.get_modpath("default")
 | 
			
		||||
 | 
			
		||||
--chest code from default(Copyright (C) 2012 celeron55, Perttu Ahola <celeron55@gmail.com>)
 | 
			
		||||
local chest_formspec =
 | 
			
		||||
	"size[8,9]" ..
 | 
			
		||||
	(has_default and default.gui_bg or "") ..
 | 
			
		||||
	(has_default and default.gui_bg_img or "") ..
 | 
			
		||||
	(has_default and default.gui_slots or "") ..
 | 
			
		||||
	default.gui_bg ..
 | 
			
		||||
	default.gui_bg_img ..
 | 
			
		||||
	default.gui_slots ..
 | 
			
		||||
	"list[current_name;main;0,0.3;8,4;]" ..
 | 
			
		||||
	"list[current_player;main;0,4.85;8,1;]" ..
 | 
			
		||||
	"list[current_player;main;0,6.08;8,3;8]" ..
 | 
			
		||||
	"listring[current_name;main]" ..
 | 
			
		||||
	"listring[current_player;main]" ..
 | 
			
		||||
	(has_default and default.get_hotbar_bg(0,4.85) or "")
 | 
			
		||||
	default.get_hotbar_bg(0,4.85)
 | 
			
		||||
 | 
			
		||||
-- Helper functions
 | 
			
		||||
local function drop_chest_stuff()
 | 
			
		||||
	return function(pos, _, oldmetadata)
 | 
			
		||||
	return function(pos, oldnode, oldmetadata, digger)
 | 
			
		||||
		local meta = minetest.get_meta(pos)
 | 
			
		||||
		meta:from_table(oldmetadata)
 | 
			
		||||
		local inv = meta:get_inventory()
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										24
									
								
								common.lua
									
									
									
									
									
								
							
							
						
						
									
										24
									
								
								common.lua
									
									
									
									
									
								
							@@ -1,5 +1,7 @@
 | 
			
		||||
 | 
			
		||||
function scifi_nodes.get_switch_rules(param2)
 | 
			
		||||
 | 
			
		||||
scifi_nodes.get_switch_rules = function(param2)
 | 
			
		||||
 | 
			
		||||
	-- param2 = 2
 | 
			
		||||
	local rules = {
 | 
			
		||||
		{x=1, y=-1, z=-1},
 | 
			
		||||
@@ -18,23 +20,3 @@ function scifi_nodes.get_switch_rules(param2)
 | 
			
		||||
	end
 | 
			
		||||
	return rules
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
scifi_nodes.slope_box = {
 | 
			
		||||
	type = "fixed",
 | 
			
		||||
	fixed = {
 | 
			
		||||
		{-0.5,  -0.5,  -0.5, 0.5, -0.25, 0.5},
 | 
			
		||||
		{-0.5, -0.25, -0.25, 0.5,     0, 0.5},
 | 
			
		||||
		{-0.5,     0,     0, 0.5,  0.25, 0.5},
 | 
			
		||||
		{-0.5,  0.25,  0.25, 0.5,   0.5, 0.5}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
scifi_nodes.slope_box_simple = {
 | 
			
		||||
	type = "fixed",
 | 
			
		||||
	fixed = {
 | 
			
		||||
		{-0.5,  -0.5,  -0.5, 0.5, -0.25, -0.25},
 | 
			
		||||
		{-0.5, -0.25, -0.25, 0.5,     0, 0},
 | 
			
		||||
		{-0.5,     0,     0, 0.5,  0.25, 0.25},
 | 
			
		||||
		{-0.5,  0.25,  0.25, 0.5,   0.5, 0.5}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -11,7 +11,7 @@ local digicode_context = {}
 | 
			
		||||
 | 
			
		||||
-- after_place_node, use by digicode and palm_scanner
 | 
			
		||||
-- placer is a player object
 | 
			
		||||
local function set_owner(pos, placer)
 | 
			
		||||
local function set_owner(pos, placer, itemstack, pointed_thing)
 | 
			
		||||
	local meta = minetest.get_meta(pos)
 | 
			
		||||
	meta:set_string("owner", placer:get_player_name())
 | 
			
		||||
	meta:set_string("code", secret_code)
 | 
			
		||||
@@ -48,7 +48,7 @@ local function update_code(pos, code)
 | 
			
		||||
	meta:set_string("code", code)
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
local function show_digicode_formspec(pos, _, player)
 | 
			
		||||
local function show_digicode_formspec(pos, node, player, itemstack, pointed_thing)
 | 
			
		||||
	local meta = minetest.get_meta(pos)
 | 
			
		||||
	local owner = meta:get_string("owner")
 | 
			
		||||
	local current_code = meta:get_string("code")
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										28
									
								
								doors.lua
									
									
									
									
									
								
							
							
						
						
									
										28
									
								
								doors.lua
									
									
									
									
									
								
							@@ -120,7 +120,7 @@ for _, current_door in ipairs(doors) do
 | 
			
		||||
		return itemstack;
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
	local function afterdestruct(pos)
 | 
			
		||||
	local function afterdestruct(pos, oldnode)
 | 
			
		||||
		minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z},{name="air"})
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
@@ -148,18 +148,14 @@ for _, current_door in ipairs(doors) do
 | 
			
		||||
 | 
			
		||||
			local adjacent = minetest.get_node({x=x, y=y, z=z})
 | 
			
		||||
			if adjacent.name == target_opposite then
 | 
			
		||||
				minetest.swap_node({x=x, y=y, z=z}, {name=target, param2 = adjacent.param2})
 | 
			
		||||
				minetest.swap_node({x=x, y=y+1, z=z}, {name=target_top, param2 = adjacent.param2})
 | 
			
		||||
				minetest.set_node({x=x, y=y, z=z}, {name=target, param2 = adjacent.param2})
 | 
			
		||||
				minetest.set_node({x=x, y=y+1, z=z}, {name=target_top, param2 = adjacent.param2})
 | 
			
		||||
			end
 | 
			
		||||
		end
 | 
			
		||||
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
	local function open_door(pos, node, player, itemstack)
 | 
			
		||||
		if not scifi_nodes.door_check_access_card(pos, itemstack, player) then
 | 
			
		||||
			return
 | 
			
		||||
		end
 | 
			
		||||
 | 
			
		||||
	local function open_door(pos, node)
 | 
			
		||||
		-- play sound
 | 
			
		||||
		minetest.sound_play(sound,{
 | 
			
		||||
			max_hear_distance = 16,
 | 
			
		||||
@@ -169,20 +165,20 @@ for _, current_door in ipairs(doors) do
 | 
			
		||||
 | 
			
		||||
		local timer = minetest.get_node_timer(pos)
 | 
			
		||||
 | 
			
		||||
		minetest.swap_node(pos, {name=opened, param2=node.param2})
 | 
			
		||||
		minetest.swap_node({x=pos.x,y=pos.y+1,z=pos.z}, {name=opened_top, param2=node.param2})
 | 
			
		||||
		minetest.set_node(pos, {name=opened, param2=node.param2})
 | 
			
		||||
		minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z}, {name=opened_top, param2=node.param2})
 | 
			
		||||
 | 
			
		||||
		change_adjacent(opened, pos, node)
 | 
			
		||||
 | 
			
		||||
		timer:start(3)
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
	local function afterplace(pos)
 | 
			
		||||
	local function afterplace(pos, placer, itemstack, pointed_thing)
 | 
			
		||||
		local node = minetest.get_node(pos)
 | 
			
		||||
		minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z},{name=opened_top,param2=node.param2})
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
	local function ontimer(pos)
 | 
			
		||||
	local function ontimer(pos, elapsed)
 | 
			
		||||
		-- play sound
 | 
			
		||||
		minetest.sound_play(sound,{
 | 
			
		||||
			max_hear_distance = 16,
 | 
			
		||||
@@ -192,8 +188,8 @@ for _, current_door in ipairs(doors) do
 | 
			
		||||
 | 
			
		||||
		local node = minetest.get_node(pos)
 | 
			
		||||
 | 
			
		||||
		minetest.swap_node(pos, {name=closed, param2=node.param2})
 | 
			
		||||
		minetest.swap_node({x=pos.x,y=pos.y+1,z=pos.z}, {name=closed_top, param2=node.param2})
 | 
			
		||||
		minetest.set_node(pos, {name=closed, param2=node.param2})
 | 
			
		||||
		minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z}, {name=closed_top, param2=node.param2})
 | 
			
		||||
 | 
			
		||||
		change_adjacent(closed, pos, node)
 | 
			
		||||
	end
 | 
			
		||||
@@ -222,7 +218,7 @@ for _, current_door in ipairs(doors) do
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	local function nodig()
 | 
			
		||||
	local function nodig(pos, digger)
 | 
			
		||||
		return false
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
@@ -246,7 +242,7 @@ for _, current_door in ipairs(doors) do
 | 
			
		||||
		paramtype2 = "facedir",
 | 
			
		||||
		groups = {
 | 
			
		||||
			cracky = 3,
 | 
			
		||||
			dig_generic = 3,
 | 
			
		||||
			oddly_breakable_by_hand = 1,
 | 
			
		||||
			scifi_nodes_door = 1,
 | 
			
		||||
			door = 1
 | 
			
		||||
		},
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										10
									
								
								init.lua
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								init.lua
									
									
									
									
									
								
							@@ -14,17 +14,15 @@ end
 | 
			
		||||
dofile(MP.."/common.lua")
 | 
			
		||||
 | 
			
		||||
if minetest.get_modpath("default") then
 | 
			
		||||
	-- only load builder if the default mod is available
 | 
			
		||||
	-- only load builder and chest if the default mod is available
 | 
			
		||||
	-- the formspecs depend on it
 | 
			
		||||
	dofile(MP.."/builder.lua")
 | 
			
		||||
	dofile(MP.."/chest.lua")
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
dofile(MP.."/ambience.lua")
 | 
			
		||||
dofile(MP.."/chest.lua")
 | 
			
		||||
dofile(MP.."/plants.lua")
 | 
			
		||||
dofile(MP.."/models.lua")
 | 
			
		||||
dofile(MP.."/nodes.lua")
 | 
			
		||||
dofile(MP.."/access_card.lua")
 | 
			
		||||
dofile(MP.."/doors.lua")
 | 
			
		||||
dofile(MP.."/switch.lua")
 | 
			
		||||
dofile(MP.."/protected_switch.lua")
 | 
			
		||||
@@ -32,10 +30,8 @@ dofile(MP.."/nodeboxes.lua")
 | 
			
		||||
dofile(MP.."/palm_scanner.lua")
 | 
			
		||||
dofile(MP.."/digicode.lua")
 | 
			
		||||
dofile(MP.."/octagon_panes.lua")
 | 
			
		||||
dofile(MP.."/octagon_glass.lua")
 | 
			
		||||
dofile(MP.."/forcefield.lua")
 | 
			
		||||
dofile(MP.."/crafts.lua")
 | 
			
		||||
dofile(MP.."/tiles.lua")
 | 
			
		||||
 | 
			
		||||
if minetest.get_modpath("letters") then
 | 
			
		||||
	-- register letter nodes
 | 
			
		||||
@@ -50,3 +46,5 @@ end
 | 
			
		||||
if minetest.get_modpath("mtt") and mtt.enabled then
 | 
			
		||||
	dofile(MP .. "/mtt.lua")
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
minetest.log("action", "[scifi_nodes] loaded.")
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										4
									
								
								mod.conf
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								mod.conf
									
									
									
									
									
								
							@@ -1,7 +1,6 @@
 | 
			
		||||
name = scifi_nodes
 | 
			
		||||
description = Minetest mod that adds scifi themed blocks, doors, materials, plants and other assets.
 | 
			
		||||
optional_depends = """
 | 
			
		||||
advtrains,
 | 
			
		||||
default,
 | 
			
		||||
xpanes,
 | 
			
		||||
mesecons,
 | 
			
		||||
@@ -16,6 +15,5 @@ unifieddyes,
 | 
			
		||||
letters,
 | 
			
		||||
mesecons_stealthnode,
 | 
			
		||||
mtt,
 | 
			
		||||
slats,
 | 
			
		||||
signs_api
 | 
			
		||||
slats
 | 
			
		||||
"""
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										24
									
								
								models.lua
									
									
									
									
									
								
							
							
						
						
									
										24
									
								
								models.lua
									
									
									
									
									
								
							@@ -16,8 +16,24 @@ function scifi_nodes.register_slope(name, desc, texture, light, soundtype)
 | 
			
		||||
		drawtype = "mesh",
 | 
			
		||||
		mesh = "scifi_nodes_slope.obj",
 | 
			
		||||
		tiles = texture,
 | 
			
		||||
		selection_box = scifi_nodes.slope_box,
 | 
			
		||||
		collision_box = scifi_nodes.slope_box,
 | 
			
		||||
		selection_box = {
 | 
			
		||||
			type = "fixed",
 | 
			
		||||
			fixed = {
 | 
			
		||||
				{-0.5,  -0.5,  -0.5, 0.5, -0.25, 0.5},
 | 
			
		||||
				{-0.5, -0.25, -0.25, 0.5,     0, 0.5},
 | 
			
		||||
				{-0.5,     0,     0, 0.5,  0.25, 0.5},
 | 
			
		||||
				{-0.5,  0.25,  0.25, 0.5,   0.5, 0.5}
 | 
			
		||||
			}
 | 
			
		||||
		},
 | 
			
		||||
		collision_box = {
 | 
			
		||||
			type = "fixed",
 | 
			
		||||
			fixed = {
 | 
			
		||||
				{-0.5,  -0.5,  -0.5, 0.5, -0.25, 0.5},
 | 
			
		||||
				{-0.5, -0.25, -0.25, 0.5,     0, 0.5},
 | 
			
		||||
				{-0.5,     0,     0, 0.5,  0.25, 0.5},
 | 
			
		||||
				{-0.5,  0.25,  0.25, 0.5,   0.5, 0.5}
 | 
			
		||||
			}
 | 
			
		||||
		},
 | 
			
		||||
		paramtype = "light",
 | 
			
		||||
		paramtype2 = "facedir",
 | 
			
		||||
		use_texture_alpha = "clip",
 | 
			
		||||
@@ -31,8 +47,8 @@ end
 | 
			
		||||
 | 
			
		||||
-- register some blocks in stairsplus if available (part of moreblocks)
 | 
			
		||||
scifi_nodes.register_slope("white2", "Plastic", {"scifi_nodes_white2.png",}, 0, "stone")
 | 
			
		||||
scifi_nodes.register_slope("super_white", "Super Plastic", {"scifi_nodes_white2.png",}, 11, "stone")
 | 
			
		||||
scifi_nodes.register_slope("ultra_white", "Super Plastic", {"scifi_nodes_white2.png",},minetest.LIGHT_MAX, "stone")
 | 
			
		||||
scifi_nodes.register_slope("super_white", "Super Plastic", {"scifi_nodes_super_white.png",}, 11, "stone")
 | 
			
		||||
scifi_nodes.register_slope("ultra_white", "Super Plastic", {"scifi_nodes_ultra_white.png",}, minetest.LIGHT_MAX, "stone")
 | 
			
		||||
scifi_nodes.register_slope("black", "Black", {"scifi_nodes_black.png",}, 0)
 | 
			
		||||
scifi_nodes.register_slope("white", "White", {"scifi_nodes_white.png",}, 0)
 | 
			
		||||
scifi_nodes.register_slope("grey", "Grey", {"scifi_nodes_grey.png",}, 0)
 | 
			
		||||
 
 | 
			
		||||
@@ -1,12 +0,0 @@
 | 
			
		||||
g top
 | 
			
		||||
v 0.500000 0.500000 0.500000
 | 
			
		||||
v -0.500000 0.500000 0.500000
 | 
			
		||||
v -0.500000 -0.500000 -0.500000
 | 
			
		||||
v 0.500000 -0.500000 -0.500000
 | 
			
		||||
vt 1.0000 1.0000
 | 
			
		||||
vt 0.0000 1.0000
 | 
			
		||||
vt 0.0000 0.0000
 | 
			
		||||
vt 1.0000 0.0000
 | 
			
		||||
vn 0.0000 0.7071 -0.7071
 | 
			
		||||
s off
 | 
			
		||||
f 2/1/1 1/2/1 4/3/1 3/4/1
 | 
			
		||||
							
								
								
									
										66
									
								
								nodes.json
									
									
									
									
									
								
							
							
						
						
									
										66
									
								
								nodes.json
									
									
									
									
									
								
							@@ -8,31 +8,20 @@
 | 
			
		||||
    "white2": {
 | 
			
		||||
        "description": "plastic",
 | 
			
		||||
        "colorable": true,
 | 
			
		||||
        "sounds": "stone",
 | 
			
		||||
        "signs_banner": true,
 | 
			
		||||
        "signs_banner_color": "#000"
 | 
			
		||||
        "sounds": "stone"
 | 
			
		||||
    },
 | 
			
		||||
    "super_white": {
 | 
			
		||||
        "description": "Super Plastic",
 | 
			
		||||
        "colorable": true,
 | 
			
		||||
        "light": 11,
 | 
			
		||||
        "sounds": "stone",
 | 
			
		||||
        "texture_name": "white2"
 | 
			
		||||
        "sounds": "stone"
 | 
			
		||||
    },
 | 
			
		||||
    "ultra_white": {
 | 
			
		||||
        "description": "Ultra Plastic",
 | 
			
		||||
        "colorable": true,
 | 
			
		||||
        "light": 14,
 | 
			
		||||
        "sounds": "stone",
 | 
			
		||||
        "texture_name": "white2"
 | 
			
		||||
        "sounds": "stone"
 | 
			
		||||
    },
 | 
			
		||||
    "engine": {
 | 
			
		||||
        "description": "Engine",
 | 
			
		||||
        "ambience": {
 | 
			
		||||
            "scifi_nodes_ambience_engine": {
 | 
			
		||||
                "interval": 16.1
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        "description": "Engine"
 | 
			
		||||
    },
 | 
			
		||||
    "wall": {
 | 
			
		||||
        "description": "metal wall"
 | 
			
		||||
@@ -65,17 +54,11 @@
 | 
			
		||||
        "description": "transparent vent",
 | 
			
		||||
        "texture_name": "vent2",
 | 
			
		||||
        "texture_modifier": "^[makealpha:33,33,33",
 | 
			
		||||
        "drawtype": "glasslike",
 | 
			
		||||
        "ambience": {
 | 
			
		||||
            "scifi_nodes_ambience_vent": {
 | 
			
		||||
                "interval": 4.2
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        "drawtype": "glasslike"
 | 
			
		||||
    },
 | 
			
		||||
    "stripes": {
 | 
			
		||||
        "description": "hazard stripes",
 | 
			
		||||
        "slat": true,
 | 
			
		||||
        "advtrains_platform": true
 | 
			
		||||
        "slat": true
 | 
			
		||||
    },
 | 
			
		||||
    "rust": {
 | 
			
		||||
        "description": "rusty metal"
 | 
			
		||||
@@ -84,8 +67,7 @@
 | 
			
		||||
        "description": "metal mesh"
 | 
			
		||||
    },
 | 
			
		||||
    "black": {
 | 
			
		||||
        "description": "black wall",
 | 
			
		||||
        "signs_banner": true
 | 
			
		||||
        "description": "black wall"
 | 
			
		||||
    },
 | 
			
		||||
    "blackoct": {
 | 
			
		||||
        "description": "black octagon"
 | 
			
		||||
@@ -97,8 +79,7 @@
 | 
			
		||||
        "description": "black tile"
 | 
			
		||||
    },
 | 
			
		||||
    "blacktile2": {
 | 
			
		||||
        "description": "black tile 2",
 | 
			
		||||
        "paramtype2": "none"
 | 
			
		||||
        "description": "black tile 2"
 | 
			
		||||
    },
 | 
			
		||||
    "blackvent": {
 | 
			
		||||
        "description": "black vent"
 | 
			
		||||
@@ -107,8 +88,7 @@
 | 
			
		||||
        "description": "blue bars"
 | 
			
		||||
    },
 | 
			
		||||
    "bluemetal": {
 | 
			
		||||
        "description": "blue metal",
 | 
			
		||||
        "signs_banner": true
 | 
			
		||||
        "description": "blue metal"
 | 
			
		||||
    },
 | 
			
		||||
    "bluetile": {
 | 
			
		||||
        "description": "blue tile",
 | 
			
		||||
@@ -124,8 +104,7 @@
 | 
			
		||||
        "description": "transparent metal floormesh",
 | 
			
		||||
        "texture_name": "mesh",
 | 
			
		||||
        "texture_modifier": "^[contrast:10:-50^[makealpha:0,0,0",
 | 
			
		||||
        "drawtype": "glasslike",
 | 
			
		||||
        "sunlight_propagates": true
 | 
			
		||||
        "drawtype": "glasslike"
 | 
			
		||||
    },
 | 
			
		||||
    "pipe": {
 | 
			
		||||
        "description": "wall pipe"
 | 
			
		||||
@@ -155,8 +134,7 @@
 | 
			
		||||
        "description": "red metal block"
 | 
			
		||||
    },
 | 
			
		||||
    "grey_square": {
 | 
			
		||||
        "description": "grey metal block",
 | 
			
		||||
        "paramtype2": "none"
 | 
			
		||||
        "description": "grey metal block"
 | 
			
		||||
    },
 | 
			
		||||
    "blue_square": {
 | 
			
		||||
        "description": "blue metal block"
 | 
			
		||||
@@ -169,8 +147,7 @@
 | 
			
		||||
        "colorable": true
 | 
			
		||||
    },
 | 
			
		||||
    "greenmetal": {
 | 
			
		||||
        "description": "green metal wall",
 | 
			
		||||
        "signs_banner": true
 | 
			
		||||
        "description": "green metal wall"
 | 
			
		||||
    },
 | 
			
		||||
    "greenmetal2": {
 | 
			
		||||
        "description": "green metal wall2"
 | 
			
		||||
@@ -194,8 +171,7 @@
 | 
			
		||||
        "description": "green pipes"
 | 
			
		||||
    },
 | 
			
		||||
    "grey": {
 | 
			
		||||
        "description": "grey wall",
 | 
			
		||||
        "signs_banner": true
 | 
			
		||||
        "description": "grey wall"
 | 
			
		||||
    },
 | 
			
		||||
    "greybolts": {
 | 
			
		||||
        "description": "grey wall bolts"
 | 
			
		||||
@@ -249,8 +225,7 @@
 | 
			
		||||
    },
 | 
			
		||||
    "blackdmg": {
 | 
			
		||||
        "description": "Damaged black wall",
 | 
			
		||||
        "slat": true,
 | 
			
		||||
        "paramtype2": "none"
 | 
			
		||||
        "slat": true
 | 
			
		||||
    },
 | 
			
		||||
    "blackdmgstripe": {
 | 
			
		||||
        "description": "Damaged black wall(stripes)"
 | 
			
		||||
@@ -277,12 +252,7 @@
 | 
			
		||||
        "light": 5
 | 
			
		||||
    },
 | 
			
		||||
    "fan": {
 | 
			
		||||
        "description": "Fan",
 | 
			
		||||
        "ambience": {
 | 
			
		||||
            "scifi_nodes_ambience_fan": {
 | 
			
		||||
                "interval": 7
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        "description": "Fan"
 | 
			
		||||
    },
 | 
			
		||||
    "ppllght": {
 | 
			
		||||
        "description": "Purple wall light",
 | 
			
		||||
@@ -305,8 +275,7 @@
 | 
			
		||||
        "slat": true
 | 
			
		||||
    },
 | 
			
		||||
    "purple": {
 | 
			
		||||
        "description": "Purple node",
 | 
			
		||||
        "signs_banner": true
 | 
			
		||||
        "description": "Purple node"
 | 
			
		||||
    },
 | 
			
		||||
    "rock": {
 | 
			
		||||
        "description": "Moonstone",
 | 
			
		||||
@@ -322,7 +291,6 @@
 | 
			
		||||
        "description": "Black vent"
 | 
			
		||||
    },
 | 
			
		||||
    "blackplate": {
 | 
			
		||||
        "description": "Black plate",
 | 
			
		||||
        "paramtype2": "none"
 | 
			
		||||
        "description": "Black plate"
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										125
									
								
								nodes.lua
									
									
									
									
									
								
							
							
						
						
									
										125
									
								
								nodes.lua
									
									
									
									
									
								
							@@ -1,8 +1,6 @@
 | 
			
		||||
local has_unifieddyes_mod = minetest.get_modpath("unifieddyes")
 | 
			
		||||
local has_moreblocks_mod = minetest.get_modpath("moreblocks")
 | 
			
		||||
local has_slats_mod = minetest.get_modpath("slats")
 | 
			
		||||
local has_advtrains_mod = minetest.get_modpath("advtrains")
 | 
			
		||||
local has_signs_api_mod = minetest.get_modpath("signs_api")
 | 
			
		||||
 | 
			
		||||
--nodes
 | 
			
		||||
 | 
			
		||||
@@ -369,6 +367,95 @@ minetest.register_node("scifi_nodes:grnpipe2", {
 | 
			
		||||
	on_place = minetest.rotate_node
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_node("scifi_nodes:octrng", {
 | 
			
		||||
	description = "Orange Octagon Glass",
 | 
			
		||||
	sunlight_propagates = true,
 | 
			
		||||
	drawtype = "glasslike",
 | 
			
		||||
	tiles = {
 | 
			
		||||
		"scifi_nodes_octrng.png",
 | 
			
		||||
	},
 | 
			
		||||
	paramtype = "light",
 | 
			
		||||
	paramtype2 = "facedir",
 | 
			
		||||
	use_texture_alpha = "blend",
 | 
			
		||||
	light_source = 10,
 | 
			
		||||
	groups = {cracky=2, dig_generic = 3},
 | 
			
		||||
	is_ground_content = false,
 | 
			
		||||
	sounds = scifi_nodes.node_sound_glass_defaults(),
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_node("scifi_nodes:octgrn", {
 | 
			
		||||
	description = "Green Octagon Glass",
 | 
			
		||||
	sunlight_propagates = true,
 | 
			
		||||
	drawtype = "glasslike",
 | 
			
		||||
	tiles = {
 | 
			
		||||
		"scifi_nodes_octgrn.png",
 | 
			
		||||
	},
 | 
			
		||||
	paramtype = "light",
 | 
			
		||||
	paramtype2 = "facedir",
 | 
			
		||||
	use_texture_alpha = "blend",
 | 
			
		||||
	light_source = 10,
 | 
			
		||||
	groups = {cracky=2, dig_generic = 3},
 | 
			
		||||
	is_ground_content = false,
 | 
			
		||||
	sounds = scifi_nodes.node_sound_glass_defaults(),
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_node("scifi_nodes:octbl", {
 | 
			
		||||
	description = "Blue Octagon Glass",
 | 
			
		||||
	sunlight_propagates = true,
 | 
			
		||||
	drawtype = "glasslike",
 | 
			
		||||
	tiles = {
 | 
			
		||||
		"scifi_nodes_octbl.png",
 | 
			
		||||
	},
 | 
			
		||||
	paramtype = "light",
 | 
			
		||||
	paramtype2 = "facedir",
 | 
			
		||||
	use_texture_alpha = "blend",
 | 
			
		||||
	light_source = 10,
 | 
			
		||||
	groups = {cracky=2, dig_generic = 3},
 | 
			
		||||
	is_ground_content = false,
 | 
			
		||||
	sounds = scifi_nodes.node_sound_glass_defaults(),
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_node("scifi_nodes:octppl", {
 | 
			
		||||
	description = "Purple Octagon Glass",
 | 
			
		||||
	sunlight_propagates = true,
 | 
			
		||||
	drawtype = "glasslike",
 | 
			
		||||
	tiles = {
 | 
			
		||||
		"scifi_nodes_octppl.png",
 | 
			
		||||
	},
 | 
			
		||||
	paramtype = "light",
 | 
			
		||||
	paramtype2 = "facedir",
 | 
			
		||||
	use_texture_alpha = "blend",
 | 
			
		||||
	light_source = 10,
 | 
			
		||||
	groups = {cracky=2, dig_generic = 3},
 | 
			
		||||
	is_ground_content = false,
 | 
			
		||||
	sounds = scifi_nodes.node_sound_glass_defaults(),
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
if has_unifieddyes_mod then
 | 
			
		||||
	minetest.register_node("scifi_nodes:octwht", {
 | 
			
		||||
		description = "Octagon Glass",
 | 
			
		||||
		sunlight_propagates = true,
 | 
			
		||||
		drawtype = "glasslike",
 | 
			
		||||
		tiles = {
 | 
			
		||||
			"scifi_nodes_octwht.png",
 | 
			
		||||
		},
 | 
			
		||||
		palette = "unifieddyes_palette_extended.png",
 | 
			
		||||
		paramtype = "light",
 | 
			
		||||
		paramtype2 = "color",
 | 
			
		||||
		use_texture_alpha = "blend",
 | 
			
		||||
		light_source = 10,
 | 
			
		||||
		groups = {
 | 
			
		||||
			cracky = 2,
 | 
			
		||||
			dig_generic = 3,
 | 
			
		||||
			ud_param2_colorable = 1
 | 
			
		||||
		},
 | 
			
		||||
		is_ground_content = false,
 | 
			
		||||
		sounds = scifi_nodes.node_sound_glass_defaults(),
 | 
			
		||||
		on_construct = unifieddyes.on_construct,
 | 
			
		||||
		on_dig = unifieddyes.on_dig
 | 
			
		||||
	})
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
minetest.register_node("scifi_nodes:tower", {
 | 
			
		||||
	description = "Wind tower",
 | 
			
		||||
	sunlight_propagates = false,
 | 
			
		||||
@@ -520,7 +607,6 @@ for name, def in pairs(nodes) do
 | 
			
		||||
	local node_def = {
 | 
			
		||||
		description = def.description,
 | 
			
		||||
		drawtype = def.drawtype or "normal",
 | 
			
		||||
		sunlight_propagates = def.sunlight_propagates,
 | 
			
		||||
		tiles = tiles,
 | 
			
		||||
		groups = {cracky=1, dig_generic = 3},
 | 
			
		||||
		is_ground_content = false,
 | 
			
		||||
@@ -538,8 +624,7 @@ for name, def in pairs(nodes) do
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
	-- register node
 | 
			
		||||
	local nodename = "scifi_nodes:" .. name
 | 
			
		||||
	minetest.register_node(nodename , node_def)
 | 
			
		||||
	minetest.register_node("scifi_nodes:"..name, node_def)
 | 
			
		||||
 | 
			
		||||
	-- unified dyes registration
 | 
			
		||||
	if def.colorable and has_unifieddyes_mod then
 | 
			
		||||
@@ -576,36 +661,6 @@ for name, def in pairs(nodes) do
 | 
			
		||||
		})
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
	if def.ambience then
 | 
			
		||||
		for soundname, opts in pairs(def.ambience) do
 | 
			
		||||
			scifi_nodes.register_ambience(nodename, soundname, opts)
 | 
			
		||||
		end
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
	-- advtrains platform registration
 | 
			
		||||
	if has_advtrains_mod and def.advtrains_platform then
 | 
			
		||||
		advtrains.register_platform("scifi_nodes", "scifi_nodes:" .. name)
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
	if has_signs_api_mod and def.signs_banner then
 | 
			
		||||
		signs_api.register_sign("scifi_nodes", name .. "_banner", {
 | 
			
		||||
			depth = 1/16,
 | 
			
		||||
			width = 5,
 | 
			
		||||
			height = 1,
 | 
			
		||||
			entity_fields = {
 | 
			
		||||
				maxlines = 1,
 | 
			
		||||
				color = def.signs_banner_color or "#fff",
 | 
			
		||||
			},
 | 
			
		||||
			node_fields = {
 | 
			
		||||
				visual_scale = 1,
 | 
			
		||||
				description = name .. " banner",
 | 
			
		||||
				tiles = tiles,
 | 
			
		||||
				inventory_image = "scifi_nodes_" .. name .. ".png",
 | 
			
		||||
				use_texture_alpha = "clip",
 | 
			
		||||
			},
 | 
			
		||||
		})
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
	if has_slats_mod and def.slat then
 | 
			
		||||
		slats.register_slat(
 | 
			
		||||
			name,
 | 
			
		||||
 
 | 
			
		||||
@@ -1,53 +0,0 @@
 | 
			
		||||
local has_unifieddyes_mod = minetest.get_modpath("unifieddyes")
 | 
			
		||||
 | 
			
		||||
local function register_glass(key, name)
 | 
			
		||||
    local tiles = {"scifi_nodes_" .. key .. ".png"}
 | 
			
		||||
 | 
			
		||||
    minetest.register_node("scifi_nodes:" .. key, {
 | 
			
		||||
        description = name .. " Octagon Glass",
 | 
			
		||||
        sunlight_propagates = true,
 | 
			
		||||
        drawtype = "glasslike",
 | 
			
		||||
        tiles = tiles,
 | 
			
		||||
        paramtype = "light",
 | 
			
		||||
        paramtype2 = "facedir",
 | 
			
		||||
        use_texture_alpha = "blend",
 | 
			
		||||
        light_source = 10,
 | 
			
		||||
        groups = {
 | 
			
		||||
            cracky = 2,
 | 
			
		||||
            dig_generic = 3
 | 
			
		||||
        },
 | 
			
		||||
        is_ground_content = false,
 | 
			
		||||
        sounds = scifi_nodes.node_sound_glass_defaults(),
 | 
			
		||||
    })
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
register_glass("octppl", "Purple")
 | 
			
		||||
register_glass("octbl", "Blue")
 | 
			
		||||
register_glass("octgrn", "Green")
 | 
			
		||||
register_glass("octrng", "Orange")
 | 
			
		||||
register_glass("octwht", "White")
 | 
			
		||||
 | 
			
		||||
if has_unifieddyes_mod then
 | 
			
		||||
	minetest.register_node("scifi_nodes:octwht", {
 | 
			
		||||
		description = "Octagon Glass",
 | 
			
		||||
		sunlight_propagates = true,
 | 
			
		||||
		drawtype = "glasslike",
 | 
			
		||||
		tiles = {
 | 
			
		||||
			"scifi_nodes_octwht.png",
 | 
			
		||||
		},
 | 
			
		||||
		palette = "unifieddyes_palette_extended.png",
 | 
			
		||||
		paramtype = "light",
 | 
			
		||||
		paramtype2 = "color",
 | 
			
		||||
		use_texture_alpha = "blend",
 | 
			
		||||
		light_source = 10,
 | 
			
		||||
		groups = {
 | 
			
		||||
			cracky = 2,
 | 
			
		||||
			dig_generic = 3,
 | 
			
		||||
			ud_param2_colorable = 1
 | 
			
		||||
		},
 | 
			
		||||
		is_ground_content = false,
 | 
			
		||||
		sounds = scifi_nodes.node_sound_glass_defaults(),
 | 
			
		||||
		on_construct = unifieddyes.on_construct,
 | 
			
		||||
		on_dig = unifieddyes.on_dig
 | 
			
		||||
	})
 | 
			
		||||
end
 | 
			
		||||
@@ -1,15 +1,13 @@
 | 
			
		||||
 | 
			
		||||
local function register(basename, color, texture)
 | 
			
		||||
local function register(basename, description, texture)
 | 
			
		||||
  local nodename_single = "scifi_nodes:" .. basename .. "_pane"
 | 
			
		||||
  local nodename_double = "scifi_nodes:" .. basename .. "_pane_double"
 | 
			
		||||
  local nodename_offset = "scifi_nodes:" .. basename .. "_pane_offset"
 | 
			
		||||
  local nodename_slope = "scifi_nodes:" .. basename .. "_slope"
 | 
			
		||||
  local recipe_ingredient = "scifi_nodes:" .. basename
 | 
			
		||||
  local base_decription = color ..  " octagon glass"
 | 
			
		||||
 | 
			
		||||
  -- single height
 | 
			
		||||
  minetest.register_node(nodename_single, {
 | 
			
		||||
    description = base_decription .. " pane",
 | 
			
		||||
    description = description,
 | 
			
		||||
    drawtype = "nodebox",
 | 
			
		||||
    tiles = {
 | 
			
		||||
      texture
 | 
			
		||||
@@ -27,17 +25,14 @@ local function register(basename, color, texture)
 | 
			
		||||
      type = "fixed",
 | 
			
		||||
      fixed = {{-0.5, -0.5, -0.25, 0.5, 0.5, 0.25}},
 | 
			
		||||
    },
 | 
			
		||||
    groups = {
 | 
			
		||||
      cracky = 3,
 | 
			
		||||
      oddly_breakable_by_hand = 3
 | 
			
		||||
    },
 | 
			
		||||
    groups = {cracky = 3, oddly_breakable_by_hand = 3},
 | 
			
		||||
    use_texture_alpha = "blend",
 | 
			
		||||
    sounds = scifi_nodes.node_sound_glass_defaults()
 | 
			
		||||
  })
 | 
			
		||||
 | 
			
		||||
  -- double height
 | 
			
		||||
  minetest.register_node(nodename_double, {
 | 
			
		||||
    description = base_decription .. " pane (double)",
 | 
			
		||||
    description = description,
 | 
			
		||||
    drawtype = "nodebox",
 | 
			
		||||
    tiles = {
 | 
			
		||||
      texture
 | 
			
		||||
@@ -55,17 +50,14 @@ local function register(basename, color, texture)
 | 
			
		||||
      type = "fixed",
 | 
			
		||||
      fixed = {{-0.5, -0.5, -0.25, 0.5, 1.5, 0.25}},
 | 
			
		||||
    },
 | 
			
		||||
    groups = {
 | 
			
		||||
      cracky = 3,
 | 
			
		||||
      oddly_breakable_by_hand = 3
 | 
			
		||||
    },
 | 
			
		||||
    groups = {cracky = 3, oddly_breakable_by_hand = 3},
 | 
			
		||||
    use_texture_alpha = "blend",
 | 
			
		||||
    sounds = scifi_nodes.node_sound_glass_defaults()
 | 
			
		||||
  })
 | 
			
		||||
 | 
			
		||||
  -- single height with offset
 | 
			
		||||
  minetest.register_node(nodename_offset, {
 | 
			
		||||
    description = base_decription .. " pane (offset)",
 | 
			
		||||
    description = description,
 | 
			
		||||
    drawtype = "nodebox",
 | 
			
		||||
    tiles = {
 | 
			
		||||
      texture
 | 
			
		||||
@@ -83,37 +75,11 @@ local function register(basename, color, texture)
 | 
			
		||||
      type = "fixed",
 | 
			
		||||
      fixed = {{-0.5, -0.5, 0.75, 0.5, 0.5, 1.25}},
 | 
			
		||||
    },
 | 
			
		||||
    groups = {
 | 
			
		||||
      cracky = 3,
 | 
			
		||||
      oddly_breakable_by_hand = 3,
 | 
			
		||||
      not_blocking_trains = 1
 | 
			
		||||
    },
 | 
			
		||||
    groups = {cracky = 3, oddly_breakable_by_hand = 3},
 | 
			
		||||
    use_texture_alpha = "blend",
 | 
			
		||||
    sounds = scifi_nodes.node_sound_glass_defaults()
 | 
			
		||||
  })
 | 
			
		||||
 | 
			
		||||
  -- slope pane
 | 
			
		||||
  minetest.register_node(nodename_slope, {
 | 
			
		||||
    description = base_decription .. " pane (slope)",
 | 
			
		||||
		sunlight_propagates = true,
 | 
			
		||||
		drawtype = "mesh",
 | 
			
		||||
		mesh = "scifi_nodes_slope_simple.obj",
 | 
			
		||||
		tiles = {
 | 
			
		||||
      texture
 | 
			
		||||
    },
 | 
			
		||||
    paramtype = "light",
 | 
			
		||||
		paramtype2 = "facedir",
 | 
			
		||||
		use_texture_alpha = "blend",
 | 
			
		||||
		light_source = 10,
 | 
			
		||||
		groups = {
 | 
			
		||||
			cracky = 2,
 | 
			
		||||
			dig_generic = 3
 | 
			
		||||
		},
 | 
			
		||||
		selection_box = scifi_nodes.slope_box_simple,
 | 
			
		||||
		collision_box = scifi_nodes.slope_box_simple,
 | 
			
		||||
		is_ground_content = false,
 | 
			
		||||
		sounds = scifi_nodes.node_sound_glass_defaults()
 | 
			
		||||
	})
 | 
			
		||||
  -- register recipes
 | 
			
		||||
 | 
			
		||||
  minetest.register_craft({
 | 
			
		||||
@@ -123,15 +89,6 @@ local function register(basename, color, texture)
 | 
			
		||||
    },
 | 
			
		||||
  })
 | 
			
		||||
 | 
			
		||||
  minetest.register_craft({
 | 
			
		||||
    output = nodename_slope .. " 16",
 | 
			
		||||
    recipe = {
 | 
			
		||||
      {"", "", recipe_ingredient},
 | 
			
		||||
      {"", recipe_ingredient, ""},
 | 
			
		||||
      {recipe_ingredient, "", ""}
 | 
			
		||||
    },
 | 
			
		||||
  })
 | 
			
		||||
 | 
			
		||||
  minetest.register_craft({
 | 
			
		||||
    output = nodename_double .. " 16",
 | 
			
		||||
    recipe = {
 | 
			
		||||
@@ -147,9 +104,8 @@ local function register(basename, color, texture)
 | 
			
		||||
  })
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
register("octrng", "Orange", "scifi_nodes_octrng.png")
 | 
			
		||||
register("octgrn", "Green", "scifi_nodes_octgrn.png")
 | 
			
		||||
register("octbl", "Blue", "scifi_nodes_octbl.png")
 | 
			
		||||
register("octppl", "Purple", "scifi_nodes_octppl.png")
 | 
			
		||||
register("octwht", "White", "scifi_nodes_octwht.png")
 | 
			
		||||
register("octrng", "Orange Octagon Glass pane", "scifi_nodes_octrng.png")
 | 
			
		||||
register("octgrn", "Green Octagon Glass pane", "scifi_nodes_octgrn.png")
 | 
			
		||||
register("octbl", "Blue Octagon Glass pane", "scifi_nodes_octbl.png")
 | 
			
		||||
register("octppl", "Purple Octagon Glass pane", "scifi_nodes_octppl.png")
 | 
			
		||||
register("glass", "Dark Glass pane", "scifi_nodes_glass.png")
 | 
			
		||||
 
 | 
			
		||||
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 Before Width: | Height: | Size: 4.8 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								textures/scifi_nodes_super_white.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								textures/scifi_nodes_super_white.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 83 B  | 
										
											Binary file not shown.
										
									
								
							| 
		 Before Width: | Height: | Size: 4.8 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								textures/scifi_nodes_ultra_white.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								textures/scifi_nodes_ultra_white.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 83 B  | 
							
								
								
									
										13
									
								
								tiles.lua
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								tiles.lua
									
									
									
									
									
								
							@@ -1,13 +0,0 @@
 | 
			
		||||
for _, color in ipairs({"purple", "greenmetal", "bluemetal", "grey"}) do
 | 
			
		||||
    minetest.register_node("scifi_nodes:" .. color .. "_tile", {
 | 
			
		||||
        description = color .. " tile",
 | 
			
		||||
        groups = {
 | 
			
		||||
            cracky = 1
 | 
			
		||||
        },
 | 
			
		||||
        is_ground_content = false,
 | 
			
		||||
        sounds = scifi_nodes.node_sound_metal_defaults(),
 | 
			
		||||
        paramtype2 = "facedir",
 | 
			
		||||
        use_texture_alpha = "blend",
 | 
			
		||||
        tiles = {"scifi_nodes_" .. color .. ".png^scifi_nodes_truchet_tile.png"}
 | 
			
		||||
    })
 | 
			
		||||
end
 | 
			
		||||
		Reference in New Issue
	
	Block a user