update blox, bobblocks, coloredwood, technic, homedecor, ilights, stainedglass, unifiedbricks, unified dyes
also contains updates to castle modpack's tapestries that hasn't hit the official castle modpack yet. removed redundant castle mod (should have been deleted when DB switched to the modpack one)
@ -117,6 +117,7 @@ for _, nodeclass in ipairs(NodeClass) do
|
||||
groups = {cracky=3, ud_param2_colorable = 1},
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
on_construct = unifieddyes.on_construct,
|
||||
after_place_node = unifieddyes.recolor_on_place,
|
||||
after_dig_node = unifieddyes.after_dig_node
|
||||
})
|
||||
|
||||
@ -136,6 +137,7 @@ for _, nodeclass in ipairs(NodeClass) do
|
||||
groups = {cracky=3, ud_param2_colorable = 1},
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
on_construct = unifieddyes.on_construct,
|
||||
after_place_node = unifieddyes.recolor_on_place,
|
||||
after_dig_node = unifieddyes.after_dig_node
|
||||
})
|
||||
|
||||
@ -155,6 +157,7 @@ for _, nodeclass in ipairs(NodeClass) do
|
||||
groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2,flammable=3, ud_param2_colorable = 1},
|
||||
sounds = default.node_sound_wood_defaults(),
|
||||
on_construct = unifieddyes.on_construct,
|
||||
after_place_node = unifieddyes.recolor_on_place,
|
||||
after_dig_node = unifieddyes.after_dig_node
|
||||
})
|
||||
|
||||
@ -176,6 +179,7 @@ minetest.register_node("blox:wood_tinted", {
|
||||
groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2,flammable=3, ud_param2_colorable = 1},
|
||||
sounds = default.node_sound_wood_defaults(),
|
||||
on_construct = unifieddyes.on_construct,
|
||||
after_place_node = unifieddyes.recolor_on_place,
|
||||
after_dig_node = unifieddyes.after_dig_node
|
||||
})
|
||||
|
||||
@ -190,6 +194,7 @@ minetest.register_node("blox:stone_square", {
|
||||
groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2,flammable=3, ud_param2_colorable = 1},
|
||||
sounds = default.node_sound_wood_defaults(),
|
||||
on_construct = unifieddyes.on_construct,
|
||||
after_place_node = unifieddyes.recolor_on_place,
|
||||
after_dig_node = unifieddyes.after_dig_node
|
||||
})
|
||||
|
||||
@ -204,6 +209,7 @@ minetest.register_node("blox:cobble_tinted", {
|
||||
groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2,flammable=3, not_in_creative_inventory = 1, ud_param2_colorable = 1},
|
||||
sounds = default.node_sound_wood_defaults(),
|
||||
on_construct = unifieddyes.on_construct,
|
||||
after_place_node = unifieddyes.recolor_on_place,
|
||||
after_dig_node = unifieddyes.after_dig_node,
|
||||
drop = "default:cobble"
|
||||
})
|
||||
@ -219,6 +225,7 @@ minetest.register_node("blox:stone_tinted", {
|
||||
groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2,flammable=3, not_in_creative_inventory = 1, ud_param2_colorable = 1},
|
||||
sounds = default.node_sound_wood_defaults(),
|
||||
on_construct = unifieddyes.on_construct,
|
||||
after_place_node = unifieddyes.recolor_on_place,
|
||||
after_dig_node = unifieddyes.after_dig_node,
|
||||
drop = "default:cobble"
|
||||
})
|
||||
@ -233,12 +240,14 @@ table.insert(blox.old_89_color_nodes, "blox:stone_tinted")
|
||||
minetest.override_item("default:stone", {
|
||||
palette = "unifieddyes_palette_extended.png",
|
||||
ud_replacement_node = "blox:stone_tinted",
|
||||
after_place_node = unifieddyes.recolor_on_place,
|
||||
groups = {cracky = 3, stone = 1, ud_param2_colorable = 1},
|
||||
})
|
||||
|
||||
minetest.override_item("default:cobble", {
|
||||
palette = "unifieddyes_palette_extended.png",
|
||||
ud_replacement_node = "blox:cobble_tinted",
|
||||
after_place_node = unifieddyes.recolor_on_place,
|
||||
groups = {cracky = 3, stone = 2, ud_param2_colorable = 1},
|
||||
})
|
||||
|
||||
@ -248,8 +257,10 @@ if moreblocks then
|
||||
minetest.override_item("moreblocks:stone_tile", {
|
||||
palette = "unifieddyes_palette_extended.png",
|
||||
ud_replacement_node = "blox:stone_square",
|
||||
after_place_node = unifieddyes.recolor_on_place,
|
||||
groups = {cracky = 3, ud_param2_colorable = 1},
|
||||
})
|
||||
|
||||
minetest.override_item("blox:stone_square", {
|
||||
drop = "moreblocks:stone_tile",
|
||||
groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2,flammable=3, not_in_creative_inventory = 1, ud_param2_colorable = 1},
|
||||
@ -258,6 +269,7 @@ if moreblocks then
|
||||
minetest.override_item("moreblocks:circle_stone_bricks", {
|
||||
palette = "unifieddyes_palette_extended.png",
|
||||
ud_replacement_node = "blox:stone_loop",
|
||||
after_place_node = unifieddyes.recolor_on_place,
|
||||
groups = {cracky = 3, ud_param2_colorable = 1},
|
||||
})
|
||||
minetest.override_item("blox:stone_loop", {
|
||||
@ -268,6 +280,7 @@ if moreblocks then
|
||||
minetest.override_item("moreblocks:iron_checker", {
|
||||
palette = "unifieddyes_palette_extended.png",
|
||||
ud_replacement_node = "blox:stone_checker",
|
||||
after_place_node = unifieddyes.recolor_on_place,
|
||||
groups = {cracky = 3, ud_param2_colorable = 1},
|
||||
})
|
||||
minetest.override_item("blox:stone_checker", {
|
||||
@ -278,6 +291,7 @@ if moreblocks then
|
||||
minetest.override_item("moreblocks:wood_tile", {
|
||||
palette = "unifieddyes_palette_extended.png",
|
||||
ud_replacement_node = "blox:wood_quarter",
|
||||
after_place_node = unifieddyes.recolor_on_place,
|
||||
groups = {wood = 1, snappy = 1, choppy = 2, oddly_breakable_by_hand = 2, flammable = 3, ud_param2_colorable = 1},
|
||||
})
|
||||
minetest.override_item("blox:wood_quarter", {
|
||||
@ -288,6 +302,7 @@ if moreblocks then
|
||||
minetest.override_item("moreblocks:wood_tile_flipped", {
|
||||
palette = "unifieddyes_palette_extended.png",
|
||||
ud_replacement_node = "blox:wood_quarter",
|
||||
after_place_node = unifieddyes.recolor_on_place,
|
||||
groups = {wood = 1, snappy = 1, choppy = 2, oddly_breakable_by_hand = 2, flammable = 3, ud_param2_colorable = 1},
|
||||
})
|
||||
else
|
||||
|
@ -53,6 +53,7 @@ minetest.register_node("bobblocks:block", {
|
||||
},
|
||||
on_rightclick = bobblocks.update_bobblock,
|
||||
on_construct = unifieddyes.on_construct,
|
||||
after_place_node = unifieddyes.recolor_on_place,
|
||||
after_dig_node = unifieddyes.after_dig_node
|
||||
})
|
||||
|
||||
@ -74,6 +75,7 @@ minetest.register_node("bobblocks:block_off", {
|
||||
},
|
||||
on_rightclick = bobblocks.update_bobblock,
|
||||
on_construct = unifieddyes.on_construct,
|
||||
after_place_node = unifieddyes.recolor_on_place,
|
||||
after_dig_node = unifieddyes.after_dig_node
|
||||
})
|
||||
|
||||
@ -99,6 +101,7 @@ minetest.register_node("bobblocks:pole", {
|
||||
},
|
||||
on_rightclick = bobblocks.update_bobblock,
|
||||
on_construct = unifieddyes.on_construct,
|
||||
after_place_node = unifieddyes.recolor_on_place,
|
||||
after_dig_node = unifieddyes.after_dig_node
|
||||
})
|
||||
|
||||
@ -124,10 +127,11 @@ minetest.register_node("bobblocks:pole_off", {
|
||||
},
|
||||
on_rightclick = bobblocks.update_bobblock,
|
||||
on_construct = unifieddyes.on_construct,
|
||||
after_place_node = unifieddyes.recolor_on_place,
|
||||
after_dig_node = unifieddyes.after_dig_node
|
||||
})
|
||||
|
||||
-- old static nodes grandfathered-in because they have a different texture or usage than the colored ones.
|
||||
-- old nodes grandfathered-in because they have a different texture or usage than the colored ones.
|
||||
|
||||
minetest.register_node("bobblocks:btm", {
|
||||
description = "Bobs TransMorgifier v5",
|
||||
@ -160,6 +164,7 @@ minetest.register_node("bobblocks:wavyblock", {
|
||||
},
|
||||
on_rightclick = bobblocks.update_bobblock,
|
||||
on_construct = unifieddyes.on_construct,
|
||||
after_place_node = unifieddyes.recolor_on_place,
|
||||
after_dig_node = unifieddyes.after_dig_node
|
||||
})
|
||||
|
||||
@ -182,6 +187,7 @@ minetest.register_node("bobblocks:wavyblock_off", {
|
||||
},
|
||||
on_rightclick = bobblocks.update_bobblock,
|
||||
on_construct = unifieddyes.on_construct,
|
||||
after_place_node = unifieddyes.recolor_on_place,
|
||||
after_dig_node = unifieddyes.after_dig_node
|
||||
})
|
||||
|
||||
@ -199,6 +205,7 @@ minetest.register_node("bobblocks:wavypole", {
|
||||
sounds = default.node_sound_glass_defaults(),
|
||||
groups = {snappy=2,cracky=3,oddly_breakable_by_hand=3, ud_param2_colorable = 1},
|
||||
on_construct = unifieddyes.on_construct,
|
||||
after_place_node = unifieddyes.recolor_on_place,
|
||||
after_dig_node = unifieddyes.after_dig_node,
|
||||
--light_source = LIGHT_MAX-0,
|
||||
})
|
||||
|
@ -1,21 +0,0 @@
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2016 Minetest Mods Team
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
@ -1,58 +0,0 @@
|
||||
=-=-=-=-=-=-=-=-=-=
|
||||
|
||||
Castles Mod
|
||||
by: Philipbenr And DanDuncombe
|
||||
|
||||
=-=-=-=-=-=-=-=-=-=
|
||||
|
||||
Licence: MIT, LGPLv2.1 (Crossbow)
|
||||
|
||||
see: LICENSE
|
||||
|
||||
=-=-=-=-=-=-=-=-=-=
|
||||
|
||||
This is a mod all about creating castles and castle dungeons. Many of the nodes are used for the outer-walls or dungeons.
|
||||
|
||||
=-=-=-=-=-=-=-=-=-=
|
||||
|
||||
Contains as of now:
|
||||
|
||||
--Walls, Corner-walls,
|
||||
--Castlestone Stairs, Slabs, and Pillars
|
||||
--Jailbars
|
||||
--Hides
|
||||
--Arrows and Arrowslits
|
||||
--Rubble
|
||||
--Doors
|
||||
--Weapons
|
||||
--Chandeliers
|
||||
--Tapestries
|
||||
--and more!
|
||||
|
||||
=-=-=-=-=-=-=-=-=-=
|
||||
|
||||
Big release coming soon. ;) Stay tuned.
|
||||
|
||||
Planned features (anything with question mark means that I am either unsure or don't know how to accomplish it ;)
|
||||
|
||||
--More/Better weapons
|
||||
--More decorations
|
||||
--More nodes
|
||||
--Redone columns
|
||||
--More doors
|
||||
--Gatehouse mod
|
||||
--Armor
|
||||
--More magical items (mana, orbs, potions...)
|
||||
--Crowns/capes/player decor
|
||||
--Flags
|
||||
--Brewery/Liquor (liquor effects is another thing altogether)
|
||||
--Tannery?
|
||||
--Dye Vats?
|
||||
--Books? (that is an interesting one... I'll write a post on it later)
|
||||
--Guards?
|
||||
--Player status (King, queen, etc.)?
|
||||
--Foods?
|
||||
--Horses/Livestock?
|
||||
--Ruins?
|
||||
|
||||
--Modpack Configurator
|
@ -1,133 +0,0 @@
|
||||
minetest.register_alias("castle:arrowslit", "castle:arrowslit_stonewall")
|
||||
minetest.register_alias("castle:arrowslit_hole", "castle:arrowslit_stonewall_hole")
|
||||
minetest.register_alias("castle:arrowslit", "castle:arrowslit_stonewall_cross")
|
||||
|
||||
local arrowslit = {}
|
||||
|
||||
arrowslit.types = {
|
||||
{"stonewall", "Stonewall", "castle_stonewall", "castle:stonewall"},
|
||||
{"cobble", "Cobble", "default_cobble", "default:cobble"},
|
||||
{"stonebrick", "Stonebrick", "default_stone_brick", "default:stonebrick"},
|
||||
{"sandstonebrick", "Sandstone Brick", "default_sandstone_brick", "default:sandstonebrick"},
|
||||
{"desertstonebrick", "Desert Stone Brick", "default_desert_stone_brick", "default:desert_stonebrick"},
|
||||
{"stone", "Stone", "default_stone", "default:stone"},
|
||||
{"sandstone", "Sandstone", "default_sandstone", "default:sandstone"},
|
||||
{"desertstone", "Desert Stone", "default_desert_stone", "default:desert_stone"},
|
||||
}
|
||||
|
||||
for _, row in ipairs(arrowslit.types) do
|
||||
local name = row[1]
|
||||
local desc = row[2]
|
||||
local tile = row[3]
|
||||
local craft_material = row[4]
|
||||
-- Node Definition
|
||||
minetest.register_node("castle:arrowslit_"..name, {
|
||||
drawtype = "nodebox",
|
||||
description = desc.." Arrowslit",
|
||||
tiles = {tile..".png"},
|
||||
groups = {cracky=3},
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.500000,-0.375000,-0.500000,-0.062500,0.375000,-0.312500},
|
||||
{0.062500,-0.375000,-0.500000,0.500000,0.375000,-0.312500},
|
||||
{-0.500000,0.375000,-0.500000,0.500000,0.500000,-0.312500},
|
||||
{-0.500000,-0.500000,-0.500000,0.500000,-0.375000,-0.312500},
|
||||
},
|
||||
},
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.500000,-0.500000,-0.500000,0.500000,0.500000,-0.312500},
|
||||
},
|
||||
},
|
||||
})
|
||||
minetest.register_node("castle:arrowslit_"..name.."_cross", {
|
||||
drawtype = "nodebox",
|
||||
description = desc.." Arrowslit with Cross",
|
||||
tiles = {tile..".png"},
|
||||
groups = {cracky=3},
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.500000,-0.125000,-0.500000,-0.062500,0.375000,-0.312500},
|
||||
{0.062500,-0.125000,-0.500000,0.500000,0.375000,-0.312500},
|
||||
{-0.500000,0.375000,-0.500000,0.500000,0.500000,-0.312500},
|
||||
{-0.500000,-0.500000,-0.500000,0.500000,-0.375000,-0.312500},
|
||||
{0.062500,-0.375000,-0.500000,0.500000,-0.250000,-0.312500},
|
||||
{-0.500000,-0.375000,-0.500000,-0.062500,-0.250000,-0.312500},
|
||||
{-0.500000,-0.250000,-0.500000,-0.187500,-0.125000,-0.312500},
|
||||
{0.187500,-0.250000,-0.500000,0.500000,-0.125000,-0.312500},
|
||||
},
|
||||
},
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.500000,-0.500000,-0.500000,0.500000,0.500000,-0.312500},
|
||||
},
|
||||
},
|
||||
})
|
||||
minetest.register_node("castle:arrowslit_"..name.."_hole", {
|
||||
drawtype = "nodebox",
|
||||
description = desc.." Arrowslit with Hole",
|
||||
tiles = {tile..".png"},
|
||||
groups = {cracky=3},
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.500000,-0.375000,-0.500000,-0.125000,0.375000,-0.312500},
|
||||
{0.125000,-0.375000,-0.500000,0.500000,0.375000,-0.312500},
|
||||
{-0.500000,-0.500000,-0.500000,0.500000,-0.375000,-0.312500},
|
||||
{0.062500,-0.125000,-0.500000,0.125000,0.375000,-0.312500},
|
||||
{-0.125000,-0.125000,-0.500000,-0.062500,0.375000,-0.312500},
|
||||
{-0.500000,0.375000,-0.500000,0.500000,0.500000,-0.312500},
|
||||
},
|
||||
},
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.500000,-0.500000,-0.500000,0.500000,0.500000,-0.312500},
|
||||
},
|
||||
},
|
||||
})
|
||||
if craft_material then
|
||||
--Choose craft material
|
||||
minetest.register_craft({
|
||||
output = "castle:arrowslit_"..name.." 6",
|
||||
recipe = {
|
||||
{craft_material,"", craft_material},
|
||||
{craft_material,"", craft_material},
|
||||
{craft_material,"", craft_material} },
|
||||
})
|
||||
end
|
||||
if craft_material then
|
||||
minetest.register_craft({
|
||||
output = "castle:arrowslit_"..name.."_cross",
|
||||
recipe = {
|
||||
{"castle:arrowslit_"..name} },
|
||||
})
|
||||
end
|
||||
if craft_material then
|
||||
minetest.register_craft({
|
||||
output = "castle:arrowslit_"..name.."_hole",
|
||||
recipe = {
|
||||
{"castle:arrowslit_"..name.."_cross"} },
|
||||
})
|
||||
end
|
||||
if craft_material then
|
||||
minetest.register_craft({
|
||||
output = "castle:arrowslit_"..name,
|
||||
recipe = {
|
||||
{"castle:arrowslit_"..name.."_hole"} },
|
||||
})
|
||||
end
|
||||
end
|
@ -1,443 +0,0 @@
|
||||
--[[
|
||||
Minetest Mod - Simple Shooter [shooter] 0.5.3
|
||||
=======================================
|
||||
|
||||
License Source Code: 2013 Stuart Jones - LGPL v2.1
|
||||
|
||||
License Textures: Stuart Jones - WTFPL
|
||||
|
||||
Licence Models: Stuart Jones - CC-BY-SA 3.0
|
||||
|
||||
License Sounds: freesound.org
|
||||
|
||||
--]]
|
||||
local crossbow={}
|
||||
|
||||
minetest.register_alias("crossbow", "castle:crossbow")
|
||||
minetest.register_alias("bolt", "castle:crossbow_bolt")
|
||||
|
||||
CROSSBOW_USES = 300
|
||||
CROSSBOW_BOLT_TOOL_CAPS = {damage_groups={fleshy=4}}
|
||||
CROSSBOW_BOLT_LIFETIME = 60-- 1 minute
|
||||
CROSSBOW_ENABLE_PARTICLE_FX = false
|
||||
CROSSBOW_ENABLE_PROTECTION = true
|
||||
CROSSBOW_EXPLOSION_TEXTURE = "castle_crossbow_hit.png"
|
||||
CROSSBOW_ALLOW_NODES = true
|
||||
CROSSBOW_ALLOW_ENTITIES = true
|
||||
CROSSBOW_ALLOW_PLAYERS = true
|
||||
CROSSBOW_PLAYER_OFFSET = {x=0, y=1, z=0}
|
||||
CROSSBOW_ENTITY_OFFSET = {x=0, y=0, z=0}
|
||||
CROSSBOW_ENTITIES = {
|
||||
"mobs:chicken",
|
||||
"mobs:cow",
|
||||
"mobs:dirt_monster",
|
||||
"mobs:dungeon_master",
|
||||
"mobs:goat",
|
||||
"mobs:mese_monster",
|
||||
"mobs:npc",
|
||||
"mobs:oerkki",
|
||||
"mobs:pig",
|
||||
"mobs:pumba",
|
||||
"mobs:rat",
|
||||
"mobs:rhino",
|
||||
"mobs:sand_monster",
|
||||
"mobs:sheep",
|
||||
"mobs:spider",
|
||||
"mobs:stone_monster",
|
||||
"mobs:tree_monster",
|
||||
}
|
||||
|
||||
if minetest.is_singleplayer() == true then
|
||||
CROSSBOW_ALLOW_ENTITIES = true
|
||||
CROSSBOW_ALLOW_PLAYERS = true
|
||||
end
|
||||
|
||||
local allowed_entities = {}
|
||||
for _,v in ipairs(CROSSBOW_ENTITIES) do
|
||||
allowed_entities[v] = 1
|
||||
end
|
||||
|
||||
local function get_dot_product(v1, v2)
|
||||
return v1.x * v2.x + v1.y * v2.y + v1.z * v2.z
|
||||
end
|
||||
|
||||
local function get_particle_pos(p, v, d)
|
||||
return vector.add(p, vector.multiply(v, {x=d, y=d, z=d}))
|
||||
end
|
||||
|
||||
function crossbow:spawn_particles(pos, texture)
|
||||
if CROSSBOW_ENABLE_PARTICLE_FX == true then
|
||||
if type(texture) ~= "string" then
|
||||
texture = CROSSBOW_EXPLOSION_TEXTURE
|
||||
end
|
||||
local spread = {x=0.1, y=0.1, z=0.1}
|
||||
minetest.add_particlespawner(15, 0.3,
|
||||
vector.subtract(pos, spread), vector.add(pos, spread),
|
||||
{x=-1, y=1, z=-1}, {x=1, y=2, z=1},
|
||||
{x=-2, y=-2, z=-2}, {x=2, y=-2, z=2},
|
||||
0.1, 0.75, 1, 2, false, texture
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
function crossbow:punch_node(pos, def)
|
||||
local node = minetest.get_node(pos)
|
||||
if not node then
|
||||
return
|
||||
end
|
||||
local item = minetest.registered_items[node.name]
|
||||
if not item then
|
||||
return
|
||||
end
|
||||
if CROSSBOW_ENABLE_PROTECTION then
|
||||
if minetest.is_protected(pos, def.name) then
|
||||
return
|
||||
end
|
||||
end
|
||||
if item.groups then
|
||||
for k, v in pairs(def.groups) do
|
||||
local level = item.groups[k] or 0
|
||||
if level >= v then
|
||||
minetest.remove_node(pos)
|
||||
if item.tiles then
|
||||
if item.tiles[1] then
|
||||
crossbow:spawn_particles(pos, item.tiles[1])
|
||||
end
|
||||
end
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function crossbow:is_valid_object(object)
|
||||
if object then
|
||||
if object:is_player() == true then
|
||||
return CROSSBOW_ALLOW_PLAYERS
|
||||
end
|
||||
if CROSSBOW_ALLOW_ENTITIES == true then
|
||||
local luaentity = object:get_luaentity()
|
||||
if luaentity then
|
||||
if luaentity.name then
|
||||
if allowed_entities[luaentity.name] then
|
||||
return true
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function crossbow:get_intersect_pos(ray, plane, collisionbox)
|
||||
local v = vector.subtract(ray.pos, plane.pos)
|
||||
local r1 = get_dot_product(v, plane.normal)
|
||||
local r2 = get_dot_product(ray.dir, plane.normal)
|
||||
if r2 ~= 0 then
|
||||
local t = -(r1 / r2)
|
||||
local td = vector.multiply(ray.dir, {x=t, y=t, z=t})
|
||||
local pt = vector.add(ray.pos, td)
|
||||
local pd = vector.subtract(pt, plane.pos)
|
||||
if math.abs(pd.x) < collisionbox[4] and
|
||||
math.abs(pd.y) < collisionbox[5] and
|
||||
math.abs(pd.z) < collisionbox[6] then
|
||||
return pt
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function crossbow:process_round(round)
|
||||
local target = {object=nil, distance=10000}
|
||||
local p1 = round.pos
|
||||
local v1 = round.ray
|
||||
for _,ref in ipairs(castle.objects) do
|
||||
local p2 = vector.add(ref.pos, ref.offset)
|
||||
if p1 and p2 and ref.name ~= round.name then
|
||||
local d = vector.distance(p1, p2)
|
||||
if d < round.def.step and d < target.distance then
|
||||
local ray = {pos=p1, dir=v1}
|
||||
local plane = {pos=p2, normal={x=-1, y=0, z=-1}}
|
||||
local pos = crossbow:get_intersect_pos(ray, plane, ref.collisionbox)
|
||||
if pos then
|
||||
target.object = ref.object
|
||||
target.pos = pos
|
||||
target.distance = d
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
if target.object and target.pos then
|
||||
local success, pos = minetest.line_of_sight(p1, target.pos, 1)
|
||||
if success then
|
||||
local user = minetest.get_player_by_name(round.name)
|
||||
if user then
|
||||
target.object:punch(user, nil, round.def.tool_caps, v1)
|
||||
crossbow:spawn_particles(target.pos, CROSSBOW_EXPLOSION_TEXTURE)
|
||||
end
|
||||
return 1
|
||||
elseif pos and CROSSBOW_ALLOW_NODES == true then
|
||||
crossbow:punch_node(pos, round.def)
|
||||
return 1
|
||||
end
|
||||
elseif CROSSBOW_ALLOW_NODES == true then
|
||||
local d = round.def.step
|
||||
local p2 = vector.add(p1, vector.multiply(v1, {x=d, y=d, z=d}))
|
||||
local success, pos = minetest.line_of_sight(p1, p2, 1)
|
||||
if pos then
|
||||
crossbow:punch_node(pos, round.def)
|
||||
return 1
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local function get_animation_frame(dir)
|
||||
local angle = math.atan(dir.y)
|
||||
local frame = 90 - math.floor(angle * 360 / math.pi)
|
||||
if frame < 1 then
|
||||
frame = 1
|
||||
elseif frame > 180 then
|
||||
frame = 180
|
||||
end
|
||||
return frame
|
||||
end
|
||||
|
||||
local function get_target_pos(p1, p2, dir, offset)
|
||||
local d = vector.distance(p1, p2) - offset
|
||||
local td = vector.multiply(dir, {x=d, y=d, z=d})
|
||||
return vector.add(p1, td)
|
||||
end
|
||||
|
||||
local function punch_object(puncher, object)
|
||||
if puncher and crossbow:is_valid_object(object) then
|
||||
if puncher ~= object then
|
||||
local dir = puncher:get_look_dir()
|
||||
local p1 = puncher:getpos()
|
||||
local p2 = object:getpos()
|
||||
local tpos = get_target_pos(p1, p2, dir, 0)
|
||||
crossbow:spawn_particles(tpos, CROSSBOW_EXPLOSION_TEXTURE)
|
||||
object:punch(puncher, nil, CROSSBOW_BOLT_TOOL_CAPS, dir)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local function stop_crossbow_bolt(object, pos, stuck)
|
||||
local acceleration = {x=0, y=-10, z=0}
|
||||
if stuck == true then
|
||||
pos = pos or object:getpos()
|
||||
acceleration = {x=0, y=0, z=0}
|
||||
object:moveto(pos)
|
||||
end
|
||||
object:set_properties({
|
||||
physical = true,
|
||||
collisionbox = {-1/8,-1/8,-1/8, 1/8,1/8,1/8},
|
||||
})
|
||||
object:setvelocity({x=0, y=0, z=0})
|
||||
object:setacceleration(acceleration)
|
||||
end
|
||||
|
||||
minetest.register_craftitem("castle:crossbow_bolt", {
|
||||
description = "Bolt",
|
||||
stack_max = 20,
|
||||
inventory_image = "castle_crossbow_bolt_inv.png",
|
||||
})
|
||||
|
||||
minetest.register_entity("castle:crossbow_bolt_entity", {
|
||||
physical = false,
|
||||
visual = "mesh",
|
||||
mesh = "castle_crossbow_bolt.b3d",
|
||||
visual_size = {x=1.0, y=1.0},
|
||||
textures = {
|
||||
"castle_crossbow_bolt_uv.png"
|
||||
},
|
||||
timer = 0,
|
||||
lifetime = CROSSBOW_BOLT_LIFETIME,
|
||||
player = nil,
|
||||
state = "init",
|
||||
node_pos = nil,
|
||||
collisionbox = {0,0,0, 0,0,0},
|
||||
on_activate = function(self, staticdata)
|
||||
self.object:set_armor_groups({immortal=1})
|
||||
if staticdata == "expired" then
|
||||
self.object:remove()
|
||||
end
|
||||
end,
|
||||
on_punch = function(self, puncher)
|
||||
if puncher then
|
||||
if puncher:is_player() then
|
||||
local stack = "castle:crossbow_bolt"
|
||||
local inv = puncher:get_inventory()
|
||||
if inv:room_for_item("main", stack) then
|
||||
inv:add_item("main", stack)
|
||||
self.object:remove()
|
||||
end
|
||||
end
|
||||
end
|
||||
end,
|
||||
on_step = function(self, dtime)
|
||||
if self.state == "init" then
|
||||
return
|
||||
end
|
||||
self.timer = self.timer + dtime
|
||||
self.lifetime = self.lifetime - dtime
|
||||
if self.lifetime < 0 then
|
||||
self.object:remove()
|
||||
return
|
||||
elseif self.state == "dropped" then
|
||||
return
|
||||
elseif self.state == "stuck" then
|
||||
if self.timer > 1 then
|
||||
if self.node_pos then
|
||||
local node = minetest.get_node(self.node_pos)
|
||||
if node.name then
|
||||
local item = minetest.registered_items[node.name]
|
||||
if item then
|
||||
if not item.walkable then
|
||||
self.state = "dropped"
|
||||
stop_crossbow_bolt(self.object)
|
||||
return
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
self.timer = 0
|
||||
end
|
||||
return
|
||||
end
|
||||
if self.timer > 0.2 then
|
||||
local pos = self.object:getpos()
|
||||
local dir = vector.normalize(self.object:getvelocity())
|
||||
local frame = get_animation_frame(dir)
|
||||
self.object:set_animation({x=frame, y=frame}, 0)
|
||||
local objects = minetest.get_objects_inside_radius(pos, 5)
|
||||
for _,obj in ipairs(objects) do
|
||||
if crossbow:is_valid_object(obj) then
|
||||
local collisionbox = {-0.25,-1.0,-0.25, 0.25,0.8,0.25}
|
||||
local offset = CROSSBOW_PLAYER_OFFSET
|
||||
if not obj:is_player() then
|
||||
offset = CROSSBOW_ENTITY_OFFSET
|
||||
local ent = obj:get_luaentity()
|
||||
if ent then
|
||||
local def = minetest.registered_entities[ent.name]
|
||||
collisionbox = def.collisionbox or collisionbox
|
||||
end
|
||||
end
|
||||
local opos = vector.add(obj:getpos(), offset)
|
||||
local ray = {pos=pos, dir=dir}
|
||||
local plane = {pos=opos, normal={x=-1, y=0, z=-1}}
|
||||
local ipos = crossbow:get_intersect_pos(ray, plane, collisionbox)
|
||||
if ipos then
|
||||
punch_object(self.player, obj)
|
||||
end
|
||||
end
|
||||
end
|
||||
local p = vector.add(pos, vector.multiply(dir, {x=5, y=5, z=5}))
|
||||
local _, npos = minetest.line_of_sight(pos, p, 1)
|
||||
if npos then
|
||||
local node = minetest.get_node(npos)
|
||||
local tpos = get_target_pos(pos, npos, dir, 0.66)
|
||||
self.node_pos = npos
|
||||
self.state = "stuck"
|
||||
stop_crossbow_bolt(self.object, tpos, true)
|
||||
minetest.sound_play("castle_crossbow_bolt", {gain = 0.08, max_hear_distance = 2})
|
||||
end
|
||||
self.timer = 0
|
||||
end
|
||||
end,
|
||||
get_staticdata = function(self)
|
||||
return "expired"
|
||||
end,
|
||||
})
|
||||
|
||||
minetest.register_tool("castle:crossbow_loaded", {
|
||||
description = "Crossbow",
|
||||
inventory_image = "castle_crossbow_loaded.png",
|
||||
groups = {not_in_creative_inventory=1},
|
||||
on_use = function(itemstack, user, pointed_thing)
|
||||
minetest.sound_play("castle_crossbow_click", {object=user})
|
||||
if not minetest.setting_getbool("creative_mode") then
|
||||
itemstack:add_wear(65535/CROSSBOW_USES)
|
||||
end
|
||||
itemstack = "castle:crossbow 1 "..itemstack:get_wear()
|
||||
local pos = user:getpos()
|
||||
local dir = user:get_look_dir()
|
||||
local yaw = user:get_look_yaw()
|
||||
if pos and dir and yaw then
|
||||
pos.y = pos.y + 1.5
|
||||
local obj = minetest.add_entity(pos, "castle:crossbow_bolt_entity")
|
||||
local ent = nil
|
||||
if obj then
|
||||
ent = obj:get_luaentity()
|
||||
end
|
||||
if ent then
|
||||
obj:set_properties({
|
||||
textures = {"castle_crossbow_bolt_uv.png"}
|
||||
})
|
||||
minetest.sound_play("castle_crossbow_shoot", {object=obj})
|
||||
local frame = get_animation_frame(dir)
|
||||
obj:setyaw(yaw + math.pi)
|
||||
obj:set_animation({x=frame, y=frame}, 0)
|
||||
obj:setvelocity({x=dir.x * 14, y=dir.y * 14, z=dir.z * 14})
|
||||
if pointed_thing.type ~= "nothing" then
|
||||
local ppos = minetest.get_pointed_thing_position(pointed_thing, false)
|
||||
local _, npos = minetest.line_of_sight(pos, ppos, 1)
|
||||
if npos then
|
||||
ppos = npos
|
||||
pointed_thing.type = "node"
|
||||
end
|
||||
if pointed_thing.type == "object" then
|
||||
punch_object(user, pointed_thing.ref)
|
||||
elseif pointed_thing.type == "node" then
|
||||
local node = minetest.get_node(ppos)
|
||||
local tpos = get_target_pos(pos, ppos, dir, 0.66)
|
||||
minetest.after(0.2, function(object, pos, npos)
|
||||
ent.node_pos = npos
|
||||
ent.state = "stuck"
|
||||
stop_crossbow_bolt(object, pos, true)
|
||||
minetest.sound_play("castle_crossbow_bolt", {gain = 0.08, max_hear_distance = 2})
|
||||
end, obj, tpos, ppos)
|
||||
return itemstack
|
||||
end
|
||||
end
|
||||
obj:setacceleration({x=dir.x * -3, y=-5, z=dir.z * -3})
|
||||
ent.player = ent.player or user
|
||||
ent.state = "flight"
|
||||
end
|
||||
end
|
||||
return itemstack
|
||||
end,
|
||||
})
|
||||
|
||||
minetest.register_tool("castle:crossbow", {
|
||||
description = "Crossbow",
|
||||
inventory_image = "castle_crossbow_inv.png",
|
||||
on_use = function(itemstack, user, pointed_thing)
|
||||
local inv = user:get_inventory()
|
||||
if inv:contains_item("main", "castle:crossbow_bolt") then
|
||||
minetest.sound_play("castle_crossbow_reload", {object=user})
|
||||
if not minetest.setting_getbool("creative_mode") then
|
||||
inv:remove_item("main", "castle:crossbow_bolt 1")
|
||||
end
|
||||
return "castle:crossbow_loaded 1 "..itemstack:get_wear()
|
||||
end
|
||||
minetest.sound_play("castle_crossbow_click", {object=user})
|
||||
end,
|
||||
})
|
||||
|
||||
-----------
|
||||
--Crafting
|
||||
-----------
|
||||
|
||||
minetest.register_craft({
|
||||
output = 'castle:crossbow',
|
||||
recipe = {
|
||||
{'default:steel_ingot', 'default:stick', 'default:steel_ingot'},
|
||||
{'farming:string', 'farming:string', 'farming:string'},
|
||||
{'', 'default:stick', ''},
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "castle:crossbow_bolt 6",
|
||||
recipe = {
|
||||
{'default:stick', 'default:stick', 'default:steel_ingot'},
|
||||
}
|
||||
})
|
@ -1,10 +0,0 @@
|
||||
default
|
||||
stairs
|
||||
doors
|
||||
farming
|
||||
unifieddyes
|
||||
building_blocks?
|
||||
asphalt?
|
||||
streets?
|
||||
moreblocks?
|
||||
xpanes?
|
@ -1 +0,0 @@
|
||||
This is a mod all about creating castles and castle dungeons. Many of the nodes are used for the outer-walls or dungeons.
|
395
castle/init.lua
@ -1,395 +0,0 @@
|
||||
castle = {}
|
||||
|
||||
dofile(minetest.get_modpath("castle").."/pillars.lua")
|
||||
dofile(minetest.get_modpath("castle").."/arrowslit.lua")
|
||||
dofile(minetest.get_modpath("castle").."/tapestry.lua")
|
||||
dofile(minetest.get_modpath("castle").."/jailbars.lua")
|
||||
dofile(minetest.get_modpath("castle").."/town_item.lua")
|
||||
dofile(minetest.get_modpath("castle").."/shields_decor.lua")
|
||||
dofile(minetest.get_modpath("castle").."/murder_hole.lua")
|
||||
dofile(minetest.get_modpath("castle").."/orbs.lua")
|
||||
dofile(minetest.get_modpath("castle").."/rope.lua")
|
||||
dofile(minetest.get_modpath("castle").."/crossbow.lua")
|
||||
|
||||
-- nodes
|
||||
|
||||
minetest.register_node("castle:stonewall", {
|
||||
description = "Castle Wall",
|
||||
drawtype = "normal",
|
||||
tiles = {"castle_stonewall.png"},
|
||||
paramtype = "light",
|
||||
drop = "castle:stonewall",
|
||||
groups = {cracky=3},
|
||||
sunlight_propagates = false,
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
})
|
||||
|
||||
minetest.register_node("castle:rubble", {
|
||||
description = "Castle Rubble",
|
||||
drawtype = "normal",
|
||||
tiles = {"castle_rubble.png"},
|
||||
paramtype = "light",
|
||||
groups = {crumbly=3,falling_node=1},
|
||||
sounds = default.node_sound_gravel_defaults(),
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "castle:stonewall",
|
||||
recipe = {
|
||||
{"default:cobble"},
|
||||
{"default:desert_stone"},
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "castle:rubble",
|
||||
recipe = {
|
||||
{"castle:stonewall"},
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "castle:rubble 2",
|
||||
recipe = {
|
||||
{"default:gravel"},
|
||||
{"default:desert_stone"},
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_node("castle:stonewall_corner", {
|
||||
drawtype = "normal",
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
description = "Castle Corner",
|
||||
tiles = {"castle_corner_stonewall_tb.png^[transformR90",
|
||||
"castle_corner_stonewall_tb.png^[transformR180",
|
||||
"castle_corner_stonewall1.png",
|
||||
"castle_stonewall.png",
|
||||
"castle_stonewall.png",
|
||||
"castle_corner_stonewall2.png"},
|
||||
groups = {cracky=3},
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "castle:stonewall_corner",
|
||||
recipe = {
|
||||
{"", "castle:stonewall"},
|
||||
{"castle:stonewall", "default:sandstone"},
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_node("castle:roofslate", {
|
||||
drawtype = "raillike",
|
||||
description = "Roof Slates",
|
||||
inventory_image = "castle_slate.png",
|
||||
paramtype = "light",
|
||||
walkable = false,
|
||||
tiles = {'castle_slate.png'},
|
||||
climbable = true,
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {-1/2, -1/2, -1/2, 1/2, -1/2+1/16, 1/2},
|
||||
},
|
||||
groups = {cracky=3,attached_node=1},
|
||||
sounds = default.node_sound_glass_defaults(),
|
||||
})
|
||||
|
||||
minetest.register_node("castle:hides", {
|
||||
drawtype = "signlike",
|
||||
description = "Hides",
|
||||
inventory_image = "castle_hide.png",
|
||||
paramtype = "light",
|
||||
walkable = false,
|
||||
tiles = {'castle_hide.png'},
|
||||
climbable = true,
|
||||
paramtype2 = "wallmounted",
|
||||
legacy_wallmounted = true,
|
||||
groups = {dig_immediate=2},
|
||||
selection_box = {
|
||||
type = "wallmounted",
|
||||
},
|
||||
})
|
||||
|
||||
minetest.register_craft( {
|
||||
type = "shapeless",
|
||||
output = "castle:hides 6",
|
||||
recipe = { "wool:white" , "bucket:bucket_water" },
|
||||
replacements = {
|
||||
{ 'bucket:bucket_water', 'bucket:bucket_empty' }
|
||||
}
|
||||
})
|
||||
|
||||
local mod_building_blocks = minetest.get_modpath("building_blocks")
|
||||
local mod_streets = minetest.get_modpath("streets") or minetest.get_modpath("asphalt")
|
||||
|
||||
if mod_building_blocks then
|
||||
minetest.register_craft({
|
||||
output = "castle:roofslate 4",
|
||||
recipe = {
|
||||
{ "building_blocks:Tar" , "default:gravel" },
|
||||
{ "default:gravel", "building_blocks:Tar" }
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft( {
|
||||
output = "castle:roofslate 4",
|
||||
recipe = {
|
||||
{ "default:gravel", "building_blocks:Tar" },
|
||||
{ "building_blocks:Tar" , "default:gravel" }
|
||||
}
|
||||
})
|
||||
end
|
||||
|
||||
if mod_streets then
|
||||
minetest.register_craft( {
|
||||
output = "castle:roofslate 4",
|
||||
recipe = {
|
||||
{ "streets:asphalt" , "default:gravel" },
|
||||
{ "default:gravel", "streets:asphalt" }
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft( {
|
||||
output = "castle:roofslate 4",
|
||||
recipe = {
|
||||
{ "default:gravel", "streets:asphalt" },
|
||||
{ "streets:asphalt" , "default:gravel" }
|
||||
}
|
||||
})
|
||||
end
|
||||
|
||||
if not (mod_building_blocks or mod_streets) then
|
||||
minetest.register_craft({
|
||||
type = "cooking",
|
||||
output = "castle:roofslate",
|
||||
recipe = "default:gravel",
|
||||
})
|
||||
|
||||
end
|
||||
|
||||
doors.register("castle:oak_door", {
|
||||
tiles = {{ name = "castle_door_oak.png", backface_culling = true }},
|
||||
description = "Oak Door",
|
||||
inventory_image = "castle_oak_door_inv.png",
|
||||
protected = true,
|
||||
groups = { choppy = 2, door = 1 },
|
||||
sounds = default.node_sound_wood_defaults(),
|
||||
recipe = {
|
||||
{"default:tree", "default:tree"},
|
||||
{"default:tree", "default:tree"},
|
||||
{"default:tree", "default:tree"},
|
||||
}
|
||||
})
|
||||
|
||||
doors.register("castle:jail_door", {
|
||||
tiles = {{ name = "castle_door_jail.png", backface_culling = true }},
|
||||
description = "Jail Door",
|
||||
inventory_image = "castle_jail_door_inv.png",
|
||||
protected = true,
|
||||
groups = { cracky = 2, door = 1},
|
||||
sound_open = "doors_steel_door_open",
|
||||
sound_close = "doors_steel_door_close",
|
||||
recipe = {
|
||||
{"castle:jailbars", "castle:jailbars"},
|
||||
{"castle:jailbars", "castle:jailbars"},
|
||||
{"castle:jailbars", "castle:jailbars"},
|
||||
}
|
||||
})
|
||||
|
||||
function default.get_ironbound_chest_formspec(pos)
|
||||
local spos = pos.x .. "," .. pos.y .. "," ..pos.z
|
||||
local formspec =
|
||||
"size[8,9]"..
|
||||
default.gui_bg ..
|
||||
default.gui_bg_img ..
|
||||
default.gui_slots ..
|
||||
"list[nodemeta:".. spos .. ";main;0,0;8,4;]"..
|
||||
"list[current_player;main;0,5;8,4;]"
|
||||
return formspec
|
||||
end
|
||||
|
||||
local function has_ironbound_chest_privilege(meta, player)
|
||||
local name = ""
|
||||
if player then
|
||||
if minetest.check_player_privs(player, "protection_bypass") then
|
||||
return true
|
||||
end
|
||||
name = player:get_player_name()
|
||||
end
|
||||
if name ~= meta:get_string("owner") then
|
||||
return false
|
||||
end
|
||||
return true
|
||||
end
|
||||
|
||||
minetest.register_node("castle:ironbound_chest",{
|
||||
drawtype = "nodebox",
|
||||
description = "Ironbound Chest",
|
||||
tiles = {"castle_ironbound_chest_top.png",
|
||||
"castle_ironbound_chest_top.png",
|
||||
"castle_ironbound_chest_side.png",
|
||||
"castle_ironbound_chest_side.png",
|
||||
"castle_ironbound_chest_back.png",
|
||||
"castle_ironbound_chest_front.png"},
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
groups = {cracky=2},
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.500000,-0.500000,-0.312500,0.500000,-0.062500,0.312500},
|
||||
{-0.500000,-0.062500,-0.250000,0.500000,0.000000,0.250000},
|
||||
{-0.500000,0.000000,-0.187500,0.500000,0.062500,0.187500},
|
||||
{-0.500000,0.062500,-0.062500,0.500000,0.125000,0.062500},
|
||||
},
|
||||
},
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.5,-0.500000,-0.400000,0.5,0.200000,0.4},
|
||||
|
||||
},
|
||||
},
|
||||
sounds = default.node_sound_wood_defaults(),
|
||||
after_place_node = function(pos, placer)
|
||||
local meta = minetest.get_meta(pos)
|
||||
meta:set_string("owner", placer:get_player_name() or "")
|
||||
meta:set_string("infotext", "Ironbound Chest (owned by "..
|
||||
meta:get_string("owner")..")")
|
||||
end,
|
||||
on_construct = function(pos)
|
||||
local meta = minetest.get_meta(pos)
|
||||
meta:set_string("infotext", "Ironbound Chest")
|
||||
meta:set_string("owner", "")
|
||||
local inv = meta:get_inventory()
|
||||
inv:set_size("main", 8*4)
|
||||
end,
|
||||
can_dig = function(pos,player)
|
||||
local meta = minetest.get_meta(pos);
|
||||
local inv = meta:get_inventory()
|
||||
return inv:is_empty("main") and has_ironbound_chest_privilege(meta, player)
|
||||
end,
|
||||
allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
|
||||
local meta = minetest.get_meta(pos)
|
||||
if not has_ironbound_chest_privilege(meta, player) then
|
||||
minetest.log("action", player:get_player_name()..
|
||||
" tried to access a locked chest belonging to "..
|
||||
meta:get_string("owner").." at "..
|
||||
minetest.pos_to_string(pos))
|
||||
return 0
|
||||
end
|
||||
return count
|
||||
end,
|
||||
allow_metadata_inventory_put = function(pos, listname, index, stack, player)
|
||||
local meta = minetest.get_meta(pos)
|
||||
if not has_ironbound_chest_privilege(meta, player) then
|
||||
minetest.log("action", player:get_player_name()..
|
||||
" tried to access a locked chest belonging to "..
|
||||
meta:get_string("owner").." at "..
|
||||
minetest.pos_to_string(pos))
|
||||
return 0
|
||||
end
|
||||
return stack:get_count()
|
||||
end,
|
||||
allow_metadata_inventory_take = function(pos, listname, index, stack, player)
|
||||
local meta = minetest.get_meta(pos)
|
||||
if not has_ironbound_chest_privilege(meta, player) then
|
||||
minetest.log("action", player:get_player_name()..
|
||||
" tried to access a locked chest belonging to "..
|
||||
meta:get_string("owner").." at "..
|
||||
minetest.pos_to_string(pos))
|
||||
return 0
|
||||
end
|
||||
return stack:get_count()
|
||||
end,
|
||||
on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
|
||||
minetest.log("action", player:get_player_name()..
|
||||
" moves stuff in locked chest at "..minetest.pos_to_string(pos))
|
||||
end,
|
||||
on_metadata_inventory_put = function(pos, listname, index, stack, player)
|
||||
minetest.log("action", player:get_player_name()..
|
||||
" moves stuff to locked chest at "..minetest.pos_to_string(pos))
|
||||
end,
|
||||
on_metadata_inventory_take = function(pos, listname, index, stack, player)
|
||||
minetest.log("action", player:get_player_name()..
|
||||
" takes stuff from locked chest at "..minetest.pos_to_string(pos))
|
||||
end,
|
||||
on_rightclick = function(pos, node, clicker)
|
||||
local meta = minetest.get_meta(pos)
|
||||
if has_ironbound_chest_privilege(meta, clicker) then
|
||||
minetest.show_formspec(
|
||||
clicker:get_player_name(),
|
||||
"castle:ironbound_chest",
|
||||
default.get_ironbound_chest_formspec(pos)
|
||||
)
|
||||
end
|
||||
end,
|
||||
on_blast = function() end,
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "castle:ironbound_chest",
|
||||
recipe = {
|
||||
{"default:wood", "default:steel_ingot","default:wood"},
|
||||
{"default:wood", "default:steel_ingot","default:wood"}
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_tool("castle:battleaxe", {
|
||||
description = "Battleaxe",
|
||||
inventory_image = "castle_battleaxe.png",
|
||||
tool_capabilities = {
|
||||
full_punch_interval = 2.0,
|
||||
max_drop_level=1,
|
||||
groupcaps={
|
||||
choppy={times={[1]=2.10, [2]=0.90, [3]=0.50}, uses=20, maxlevel=3},
|
||||
snappy={times={[1]=1.90, [2]=0.90, [3]=0.30}, uses=20, maxlevel=3},
|
||||
},
|
||||
damage_groups = {fleshy=7},
|
||||
},
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "castle:battleaxe",
|
||||
recipe = {
|
||||
{"default:steel_ingot", "default:steel_ingot","default:steel_ingot"},
|
||||
{"default:steel_ingot", "default:stick","default:steel_ingot"},
|
||||
{"", "default:stick",""}
|
||||
}
|
||||
})
|
||||
|
||||
if minetest.get_modpath("moreblocks") then
|
||||
stairsplus:register_all("castle", "stonewall", "castle:stonewall", {
|
||||
description = "Stone Wall",
|
||||
tiles = {"castle_stonewall.png"},
|
||||
groups = {cracky=3, not_in_creative_inventory=1},
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
sunlight_propagates = true,
|
||||
})
|
||||
|
||||
stairsplus:register_all("castle", "rubble", "castle:rubble", {
|
||||
description = "Rubble",
|
||||
tiles = {"castle_rubble.png"},
|
||||
groups = {cracky=3, not_in_creative_inventory=1},
|
||||
sounds = default.node_sound_gravel_defaults(),
|
||||
sunlight_propagates = true,
|
||||
})
|
||||
|
||||
else
|
||||
stairs.register_stair_and_slab("stonewall", "castle:stonewall",
|
||||
{cracky=3},
|
||||
{"castle_stonewall.png"},
|
||||
"Castle Stonewall Stair",
|
||||
"Castle Stonewall Slab",
|
||||
default.node_sound_stone_defaults()
|
||||
)
|
||||
|
||||
stairs.register_stair_and_slab("rubble", "castle:rubble",
|
||||
{cracky=3},
|
||||
{"castle_rubble.png"},
|
||||
"Castle Rubble Stair",
|
||||
"Castle Rubble Slab",
|
||||
default.node_sound_stone_defaults()
|
||||
)
|
||||
end
|
@ -1,22 +0,0 @@
|
||||
if minetest.get_modpath("xpanes") then
|
||||
xpanes.register_pane("jailbars", {
|
||||
description = "Jail Bars",
|
||||
tiles = {"castle_jailbars.png"},
|
||||
drawtype = "airlike",
|
||||
paramtype = "light",
|
||||
textures = {"castle_jailbars.png", "castle_jailbars.png", "xpanes_space.png"},
|
||||
inventory_image = "castle_jailbars.png",
|
||||
wield_image = "castle_jailbars.png",
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
groups = {cracky=1, pane=1},
|
||||
recipe = {
|
||||
{"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"},
|
||||
{"default:steel_ingot", "", "default:steel_ingot"},
|
||||
{"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"}},
|
||||
})
|
||||
end
|
||||
|
||||
for i = 1, 15 do
|
||||
minetest.register_alias("castle:jailbars_"..i, "xpanes:jailbars_"..i)
|
||||
end
|
||||
minetest.register_alias("castle:jailbars", "xpanes:jailbars")
|
@ -1 +0,0 @@
|
||||
name = castle
|
@ -1,10 +0,0 @@
|
||||
License Textures: Stuart Jones - WTFPL
|
||||
|
||||
-castle_crossbow_bolt_inv.png
|
||||
-castle_crossbow_bolt_uv.png
|
||||
-castle_crossbow_hit.png
|
||||
|
||||
Licence Models: Stuart Jones - CC-BY-SA 3.0
|
||||
|
||||
-castle_crossbow_bolt.b3d
|
||||
-castle_crossbow_bolt.blend
|
Before Width: | Height: | Size: 157 B |
@ -1,212 +0,0 @@
|
||||
# Blender v2.72 (sub 0) OBJ File: 'castle_tapestry.blend'
|
||||
# www.blender.org
|
||||
o Cube
|
||||
v -0.500000 0.500000 -0.125000
|
||||
v -0.437500 0.500000 -0.125000
|
||||
v -0.500000 0.500000 1.500000
|
||||
v -0.437500 0.500000 1.500000
|
||||
v -0.437500 -0.500000 1.500000
|
||||
v -0.500000 -0.500000 1.500000
|
||||
v -0.437500 0.125000 -0.250000
|
||||
v -0.500000 0.125000 -0.250000
|
||||
v -0.500000 0.125000 -0.375000
|
||||
v -0.437500 0.125000 -0.375000
|
||||
v -0.437500 0.187500 -0.375000
|
||||
v -0.500000 0.187500 -0.375000
|
||||
v -0.500000 0.312500 -0.500000
|
||||
v -0.437500 0.312500 -0.500000
|
||||
v -0.437500 0.312500 -0.375000
|
||||
v -0.500000 0.312500 -0.375000
|
||||
v -0.500000 0.375000 -0.375000
|
||||
v -0.437500 0.375000 -0.375000
|
||||
v -0.437500 0.375000 -0.250000
|
||||
v -0.500000 0.375000 -0.250000
|
||||
v -0.437500 -0.187500 -0.500000
|
||||
v -0.500000 -0.312500 -0.500000
|
||||
v -0.437500 -0.312500 -0.500000
|
||||
v -0.500000 0.187500 -0.500000
|
||||
v -0.437500 0.187500 -0.500000
|
||||
v -0.500000 0.437500 -0.250000
|
||||
v -0.437500 0.437500 -0.250000
|
||||
v -0.437500 0.437500 -0.125000
|
||||
v -0.500000 0.437500 -0.125000
|
||||
v -0.437500 0.062500 -0.250000
|
||||
v -0.500000 0.062500 -0.250000
|
||||
v -0.437500 0.062500 -0.125000
|
||||
v -0.500000 0.062500 -0.125000
|
||||
v -0.437500 -0.062500 -0.125000
|
||||
v -0.500000 -0.062500 -0.125000
|
||||
v -0.437500 -0.062500 -0.250000
|
||||
v -0.500000 -0.062500 -0.250000
|
||||
v -0.437500 -0.125000 -0.250000
|
||||
v -0.500000 -0.125000 -0.250000
|
||||
v -0.437500 -0.125000 -0.375000
|
||||
v -0.500000 -0.125000 -0.375000
|
||||
v -0.437500 -0.187500 -0.375000
|
||||
v -0.500000 -0.187500 -0.375000
|
||||
v -0.500000 -0.187500 -0.500000
|
||||
v -0.500000 -0.312500 -0.375000
|
||||
v -0.437500 -0.312500 -0.375000
|
||||
v -0.500000 -0.375000 -0.375000
|
||||
v -0.437500 -0.375000 -0.375000
|
||||
v -0.500000 -0.375000 -0.250000
|
||||
v -0.437500 -0.375000 -0.250000
|
||||
v -0.500000 -0.437500 -0.250000
|
||||
v -0.437500 -0.437500 -0.250000
|
||||
v -0.500000 -0.437500 -0.125000
|
||||
v -0.437500 -0.437500 -0.125000
|
||||
v -0.500000 -0.500000 -0.125000
|
||||
v -0.437500 -0.500000 -0.125000
|
||||
v -0.500000 0.500000 0.500000
|
||||
v -0.437500 0.500000 0.500000
|
||||
v -0.500000 -0.500000 0.500000
|
||||
v -0.437500 -0.500000 0.500000
|
||||
v -0.500000 0.343750 -0.375000
|
||||
vt 0.062500 0.000000
|
||||
vt 0.062500 1.000000
|
||||
vt 0.000000 1.000000
|
||||
vt 0.000003 0.000000
|
||||
vt 0.937500 0.250000
|
||||
vt 1.000000 0.250000
|
||||
vt 1.000000 0.375000
|
||||
vt 0.937500 0.375000
|
||||
vt 0.625000 0.937500
|
||||
vt 0.625000 0.999999
|
||||
vt 0.562500 0.999999
|
||||
vt 0.562500 0.937500
|
||||
vt 0.937500 0.125000
|
||||
vt 1.000000 0.125000
|
||||
vt 0.687500 0.937500
|
||||
vt 0.687500 0.999999
|
||||
vt 0.937500 0.000000
|
||||
vt 1.000000 0.000000
|
||||
vt 0.062500 0.125000
|
||||
vt 0.000000 0.125000
|
||||
vt 0.875000 0.937500
|
||||
vt 0.875000 1.000000
|
||||
vt 0.812500 1.000000
|
||||
vt 0.812500 0.937500
|
||||
vt 0.843750 0.937500
|
||||
vt 0.062500 0.250000
|
||||
vt 0.000000 0.250000
|
||||
vt 0.937500 0.937500
|
||||
vt 0.937500 1.000000
|
||||
vt 0.062500 0.375000
|
||||
vt 0.000000 0.375000
|
||||
vt 1.000000 0.937500
|
||||
vt 1.000000 1.000000
|
||||
vt 0.437500 0.937500
|
||||
vt 0.437500 0.999999
|
||||
vt 0.375000 0.999999
|
||||
vt 0.375000 0.937500
|
||||
vt 0.312500 0.999999
|
||||
vt 0.312500 0.937500
|
||||
vt 0.187500 0.937500
|
||||
vt 0.187500 0.999999
|
||||
vt 0.125000 0.999999
|
||||
vt 0.125000 0.937500
|
||||
vt 0.062500 0.937500
|
||||
vt 0.000000 0.937500
|
||||
vt 0.625000 0.000000
|
||||
vt 0.625000 0.062500
|
||||
vt 0.625000 0.437500
|
||||
vt 0.625000 0.562500
|
||||
vt 0.375000 0.437500
|
||||
vt 0.375000 0.062500
|
||||
vt 0.375000 0.000000
|
||||
vt 0.375000 0.562500
|
||||
vt 0.250000 0.437500
|
||||
vt 0.250000 0.375000
|
||||
vt 0.250000 0.125000
|
||||
vt 0.250000 0.062500
|
||||
vt 0.250000 0.937500
|
||||
vt 0.250000 0.875000
|
||||
vt 0.250000 0.625000
|
||||
vt 0.250000 0.562500
|
||||
vt 0.750000 0.562500
|
||||
vt 0.750000 0.625000
|
||||
vt 0.750000 0.875000
|
||||
vt 0.750000 0.937500
|
||||
vt 0.750000 0.062500
|
||||
vt 0.750000 0.125000
|
||||
vt 0.750000 0.375000
|
||||
vt 0.750000 0.437500
|
||||
vt 0.875000 0.625000
|
||||
vt 0.875000 0.687500
|
||||
vt 0.875000 0.812500
|
||||
vt 0.875000 0.875000
|
||||
vt 0.875000 0.125000
|
||||
vt 0.875000 0.156250
|
||||
vt 0.875000 0.187500
|
||||
vt 0.875000 0.312500
|
||||
vt 0.875000 0.375000
|
||||
vt 1.000000 0.687500
|
||||
vt 1.000000 0.812500
|
||||
vt 1.000000 0.187500
|
||||
vt 1.000000 0.312500
|
||||
vt 0.125000 0.187500
|
||||
vt 0.125000 0.312500
|
||||
vt 0.000000 0.312500
|
||||
vt 0.000000 0.187500
|
||||
vt 0.125000 0.687500
|
||||
vt 0.125000 0.812500
|
||||
vt 0.000000 0.812500
|
||||
vt 0.000000 0.687500
|
||||
vt 0.125000 0.875000
|
||||
vt 0.125000 0.625000
|
||||
vt 0.125000 0.375000
|
||||
vt 0.125000 0.125000
|
||||
vn 0.000000 1.000000 -0.000000
|
||||
vn -0.000000 -1.000000 0.000000
|
||||
vn 0.000000 0.000000 -1.000000
|
||||
vn -1.000000 0.000000 0.000000
|
||||
vn 1.000000 -0.000000 -0.000000
|
||||
vn 0.000000 0.000000 1.000000
|
||||
g Cube_Cube_Material
|
||||
s off
|
||||
f 57/1/1 3/2/1 4/3/1 58/4/1
|
||||
f 31/5/2 30/6/2 32/7/2 33/8/2
|
||||
f 8/9/3 7/10/3 30/11/3 31/12/3
|
||||
f 9/13/2 10/14/2 7/6/2 8/5/2
|
||||
f 12/15/3 11/16/3 10/10/3 9/9/3
|
||||
f 24/17/2 25/18/2 11/14/2 12/13/2
|
||||
f 16/19/1 15/20/1 14/4/1 13/1/1
|
||||
f 17/21/3 18/22/3 15/23/3 16/24/3 61/25/3
|
||||
f 20/26/1 19/27/1 18/20/1 17/19/1
|
||||
f 26/28/3 27/29/3 19/22/3 20/21/3
|
||||
f 29/30/1 28/31/1 27/27/1 26/26/1
|
||||
f 1/32/3 2/33/3 28/29/3 29/28/3
|
||||
f 37/34/3 36/35/3 38/36/3 39/37/3
|
||||
f 39/26/1 38/27/1 40/20/1 41/19/1
|
||||
f 41/37/3 40/36/3 42/38/3 43/39/3
|
||||
f 22/17/2 23/18/2 46/14/2 45/13/2
|
||||
f 45/40/3 46/41/3 48/42/3 47/43/3
|
||||
f 47/13/2 48/14/2 50/6/2 49/5/2
|
||||
f 49/43/3 50/42/3 52/2/3 51/44/3
|
||||
f 51/5/2 52/6/2 54/7/2 53/8/2
|
||||
f 53/44/3 54/2/3 56/3/3 55/45/3
|
||||
f 43/19/1 42/20/1 21/4/1 44/1/1
|
||||
f 14/23/3 25/16/3 24/15/3 13/24/3
|
||||
f 60/18/2 5/33/2 6/29/2 59/17/2
|
||||
f 21/38/3 23/41/3 22/40/3 44/39/3
|
||||
f 57/18/4 59/33/4 6/3/4 3/4/4
|
||||
f 60/3/5 58/4/5 4/18/5 5/33/5
|
||||
f 1/30/1 57/2/1 58/3/1 2/31/1
|
||||
f 56/7/2 60/33/2 59/29/2 55/8/2
|
||||
f 1/46/4 29/47/4 33/48/4 35/49/4 53/9/4 55/10/4 59/3/4 57/4/4
|
||||
f 32/50/5 28/51/5 2/52/5 58/18/5 60/33/5 56/36/5 54/37/5 34/53/5
|
||||
f 34/31/1 36/27/1 37/26/1 35/30/1
|
||||
f 30/54/5 7/55/5 19/56/5 27/57/5 28/51/5 32/50/5
|
||||
f 34/53/5 54/37/5 52/58/5 50/59/5 38/60/5 36/61/5
|
||||
f 53/9/4 35/49/4 37/62/4 39/63/4 49/64/4 51/65/4
|
||||
f 29/47/4 26/66/4 20/67/4 8/68/4 31/69/4 33/48/4
|
||||
f 33/12/3 32/11/3 34/35/3 35/34/3
|
||||
f 49/64/4 39/63/4 41/70/4 43/71/4 45/72/4 47/73/4
|
||||
f 8/68/4 20/67/4 17/74/4 61/75/4 16/76/4 12/77/4 9/78/4
|
||||
f 45/72/4 43/71/4 44/79/4 22/80/4
|
||||
f 12/77/4 16/76/4 13/81/4 24/82/4
|
||||
f 15/83/5 11/84/5 25/85/5 14/86/5
|
||||
f 42/87/5 46/88/5 23/89/5 21/90/5
|
||||
f 38/60/5 50/59/5 48/91/5 46/88/5 42/87/5 40/92/5
|
||||
f 7/55/5 10/93/5 11/84/5 15/83/5 18/94/5 19/56/5
|
||||
f 3/33/6 6/3/6 5/45/6 4/32/6
|
@ -1,220 +0,0 @@
|
||||
# Blender v2.72 (sub 0) OBJ File: 'castle_tapestry_long.blend'
|
||||
# www.blender.org
|
||||
o Cube
|
||||
v -0.500000 0.500000 -0.125000
|
||||
v -0.437500 0.500000 -0.125000
|
||||
v -0.500000 0.500001 1.500000
|
||||
v -0.437499 0.500000 1.500000
|
||||
v -0.437500 -0.500000 1.500000
|
||||
v -0.500000 -0.500000 1.500000
|
||||
v -0.437500 0.125000 -0.250000
|
||||
v -0.500000 0.125000 -0.250000
|
||||
v -0.500000 0.125000 -0.375000
|
||||
v -0.437500 0.125000 -0.375000
|
||||
v -0.437500 0.187500 -0.375000
|
||||
v -0.500000 0.187500 -0.375000
|
||||
v -0.500000 0.312500 -0.500000
|
||||
v -0.437500 0.312500 -0.500000
|
||||
v -0.437500 0.312500 -0.375000
|
||||
v -0.500000 0.312500 -0.375000
|
||||
v -0.500000 0.375000 -0.375000
|
||||
v -0.437500 0.375000 -0.375000
|
||||
v -0.437500 0.375000 -0.250000
|
||||
v -0.500000 0.375000 -0.250000
|
||||
v -0.437500 -0.187500 -0.500000
|
||||
v -0.500000 -0.312500 -0.500000
|
||||
v -0.437500 -0.312500 -0.500000
|
||||
v -0.500000 0.187500 -0.500000
|
||||
v -0.437500 0.187500 -0.500000
|
||||
v -0.500000 0.437500 -0.250000
|
||||
v -0.437500 0.437500 -0.250000
|
||||
v -0.437500 0.437500 -0.125000
|
||||
v -0.500000 0.437500 -0.125000
|
||||
v -0.437500 0.062500 -0.250000
|
||||
v -0.500000 0.062500 -0.250000
|
||||
v -0.437500 0.062500 -0.125000
|
||||
v -0.500000 0.062500 -0.125000
|
||||
v -0.437500 -0.062500 -0.125000
|
||||
v -0.500000 -0.062500 -0.125000
|
||||
v -0.437500 -0.062500 -0.250000
|
||||
v -0.500000 -0.062500 -0.250000
|
||||
v -0.437500 -0.125000 -0.250000
|
||||
v -0.500000 -0.125000 -0.250000
|
||||
v -0.437500 -0.125000 -0.375000
|
||||
v -0.500000 -0.125000 -0.375000
|
||||
v -0.437500 -0.187500 -0.375000
|
||||
v -0.500000 -0.187500 -0.375000
|
||||
v -0.500000 -0.187500 -0.500000
|
||||
v -0.500000 -0.312500 -0.375000
|
||||
v -0.437500 -0.312500 -0.375000
|
||||
v -0.500000 -0.375000 -0.375000
|
||||
v -0.437500 -0.375000 -0.375000
|
||||
v -0.500000 -0.375000 -0.250000
|
||||
v -0.437500 -0.375000 -0.250000
|
||||
v -0.500000 -0.437500 -0.250000
|
||||
v -0.437500 -0.437500 -0.250000
|
||||
v -0.500000 -0.437500 -0.125000
|
||||
v -0.437500 -0.437500 -0.125000
|
||||
v -0.500000 -0.500000 -0.125000
|
||||
v -0.437500 -0.500000 -0.125000
|
||||
v -0.500000 0.500000 0.500000
|
||||
v -0.437500 0.500000 0.500000
|
||||
v -0.500000 -0.500000 0.500000
|
||||
v -0.437500 -0.500000 0.500000
|
||||
v -0.500000 0.500001 2.500000
|
||||
v -0.437499 0.500000 2.500000
|
||||
v -0.437500 -0.500000 2.500000
|
||||
v -0.500000 -0.500000 2.500000
|
||||
v -0.500000 0.343750 -0.375000
|
||||
vt 0.062500 0.000000
|
||||
vt 0.062500 1.000000
|
||||
vt 0.000000 1.000000
|
||||
vt 0.000003 0.000000
|
||||
vt 0.937500 0.250000
|
||||
vt 1.000000 0.250000
|
||||
vt 1.000000 0.375000
|
||||
vt 0.937500 0.375000
|
||||
vt 0.625000 0.937500
|
||||
vt 0.625000 0.999999
|
||||
vt 0.562500 0.999999
|
||||
vt 0.562500 0.937500
|
||||
vt 0.937500 0.125000
|
||||
vt 1.000000 0.125000
|
||||
vt 0.687500 0.937500
|
||||
vt 0.687500 0.999999
|
||||
vt 0.937500 0.000000
|
||||
vt 1.000000 0.000000
|
||||
vt 0.062500 0.125000
|
||||
vt 0.000000 0.125000
|
||||
vt 0.875000 0.937500
|
||||
vt 0.875000 1.000000
|
||||
vt 0.812500 1.000000
|
||||
vt 0.812500 0.937500
|
||||
vt 0.843750 0.937500
|
||||
vt 0.062500 0.250000
|
||||
vt 0.000000 0.250000
|
||||
vt 0.937500 0.937500
|
||||
vt 0.937500 1.000000
|
||||
vt 0.062500 0.375000
|
||||
vt 0.000000 0.375000
|
||||
vt 1.000000 0.937500
|
||||
vt 1.000000 1.000000
|
||||
vt 0.437500 0.937500
|
||||
vt 0.437500 0.999999
|
||||
vt 0.375000 0.999999
|
||||
vt 0.375000 0.937500
|
||||
vt 0.312500 0.999999
|
||||
vt 0.312500 0.937500
|
||||
vt 0.187500 0.937500
|
||||
vt 0.187500 0.999999
|
||||
vt 0.125000 0.999999
|
||||
vt 0.125000 0.937500
|
||||
vt 0.062500 0.937500
|
||||
vt 0.000000 0.937500
|
||||
vt 0.625000 0.000000
|
||||
vt 0.625000 0.062500
|
||||
vt 0.625000 0.437500
|
||||
vt 0.625000 0.562500
|
||||
vt 0.375000 0.437500
|
||||
vt 0.375000 0.062500
|
||||
vt 0.375000 0.000000
|
||||
vt 0.375000 0.562500
|
||||
vt 0.250000 0.437500
|
||||
vt 0.250000 0.375000
|
||||
vt 0.250000 0.125000
|
||||
vt 0.250000 0.062500
|
||||
vt 0.250000 0.937500
|
||||
vt 0.250000 0.875000
|
||||
vt 0.250000 0.625000
|
||||
vt 0.250000 0.562500
|
||||
vt 0.750000 0.562500
|
||||
vt 0.750000 0.625000
|
||||
vt 0.750000 0.875000
|
||||
vt 0.750000 0.937500
|
||||
vt 0.750000 0.062500
|
||||
vt 0.750000 0.125000
|
||||
vt 0.750000 0.375000
|
||||
vt 0.750000 0.437500
|
||||
vt 0.875000 0.625000
|
||||
vt 0.875000 0.687500
|
||||
vt 0.875000 0.812500
|
||||
vt 0.875000 0.875000
|
||||
vt 0.875000 0.125000
|
||||
vt 0.875000 0.156250
|
||||
vt 0.875000 0.187500
|
||||
vt 0.875000 0.312500
|
||||
vt 0.875000 0.375000
|
||||
vt 1.000000 0.687500
|
||||
vt 1.000000 0.812500
|
||||
vt 1.000000 0.187500
|
||||
vt 1.000000 0.312500
|
||||
vt 0.125000 0.187500
|
||||
vt 0.125000 0.312500
|
||||
vt 0.000000 0.312500
|
||||
vt 0.000000 0.187500
|
||||
vt 0.125000 0.687500
|
||||
vt 0.125000 0.812500
|
||||
vt 0.000000 0.812500
|
||||
vt 0.000000 0.687500
|
||||
vt 0.125000 0.875000
|
||||
vt 0.125000 0.625000
|
||||
vt 0.125000 0.375000
|
||||
vt 0.125000 0.125000
|
||||
vn 0.000000 1.000000 0.000000
|
||||
vn -0.000000 -1.000000 0.000000
|
||||
vn 0.000000 0.000000 -1.000000
|
||||
vn -1.000000 0.000000 0.000000
|
||||
vn 1.000000 -0.000000 -0.000000
|
||||
vn 0.000000 0.000000 1.000000
|
||||
g Cube_Cube_Material
|
||||
s off
|
||||
f 57/1/1 3/2/1 4/3/1 58/4/1
|
||||
f 31/5/2 30/6/2 32/7/2 33/8/2
|
||||
f 8/9/3 7/10/3 30/11/3 31/12/3
|
||||
f 9/13/2 10/14/2 7/6/2 8/5/2
|
||||
f 12/15/3 11/16/3 10/10/3 9/9/3
|
||||
f 24/17/2 25/18/2 11/14/2 12/13/2
|
||||
f 16/19/1 15/20/1 14/4/1 13/1/1
|
||||
f 17/21/3 18/22/3 15/23/3 16/24/3 65/25/3
|
||||
f 20/26/1 19/27/1 18/20/1 17/19/1
|
||||
f 26/28/3 27/29/3 19/22/3 20/21/3
|
||||
f 29/30/1 28/31/1 27/27/1 26/26/1
|
||||
f 1/32/3 2/33/3 28/29/3 29/28/3
|
||||
f 37/34/3 36/35/3 38/36/3 39/37/3
|
||||
f 39/26/1 38/27/1 40/20/1 41/19/1
|
||||
f 41/37/3 40/36/3 42/38/3 43/39/3
|
||||
f 22/17/2 23/18/2 46/14/2 45/13/2
|
||||
f 45/40/3 46/41/3 48/42/3 47/43/3
|
||||
f 47/13/2 48/14/2 50/6/2 49/5/2
|
||||
f 49/43/3 50/42/3 52/2/3 51/44/3
|
||||
f 51/5/2 52/6/2 54/7/2 53/8/2
|
||||
f 53/44/3 54/2/3 56/3/3 55/45/3
|
||||
f 43/19/1 42/20/1 21/4/1 44/1/1
|
||||
f 14/23/3 25/16/3 24/15/3 13/24/3
|
||||
f 60/18/2 5/33/2 6/29/2 59/17/2
|
||||
f 21/38/3 23/41/3 22/40/3 44/39/3
|
||||
f 57/18/4 59/33/4 6/3/4 3/4/4
|
||||
f 60/3/5 58/4/5 4/18/5 5/33/5
|
||||
f 1/30/1 57/2/1 58/3/1 2/31/1
|
||||
f 56/7/2 60/33/2 59/29/2 55/8/2
|
||||
f 1/46/4 29/47/4 33/48/4 35/49/4 53/9/4 55/10/4 59/3/4 57/4/4
|
||||
f 32/50/5 28/51/5 2/52/5 58/18/5 60/33/5 56/36/5 54/37/5 34/53/5
|
||||
f 34/31/1 36/27/1 37/26/1 35/30/1
|
||||
f 30/54/5 7/55/5 19/56/5 27/57/5 28/51/5 32/50/5
|
||||
f 34/53/5 54/37/5 52/58/5 50/59/5 38/60/5 36/61/5
|
||||
f 53/9/4 35/49/4 37/62/4 39/63/4 49/64/4 51/65/4
|
||||
f 29/47/4 26/66/4 20/67/4 8/68/4 31/69/4 33/48/4
|
||||
f 33/12/3 32/11/3 34/35/3 35/34/3
|
||||
f 3/1/1 61/2/1 62/3/1 4/4/1
|
||||
f 5/18/2 63/33/2 64/29/2 6/17/2
|
||||
f 3/18/4 6/33/4 64/3/4 61/4/4
|
||||
f 5/3/5 4/4/5 62/18/5 63/33/5
|
||||
f 49/64/4 39/63/4 41/70/4 43/71/4 45/72/4 47/73/4
|
||||
f 8/68/4 20/67/4 17/74/4 65/75/4 16/76/4 12/77/4 9/78/4
|
||||
f 45/72/4 43/71/4 44/79/4 22/80/4
|
||||
f 12/77/4 16/76/4 13/81/4 24/82/4
|
||||
f 15/83/5 11/84/5 25/85/5 14/86/5
|
||||
f 42/87/5 46/88/5 23/89/5 21/90/5
|
||||
f 38/60/5 50/59/5 48/91/5 46/88/5 42/87/5 40/92/5
|
||||
f 7/55/5 10/93/5 11/84/5 15/83/5 18/94/5 19/56/5
|
||||
f 61/33/6 64/3/6 63/45/6 62/32/6
|
@ -1,228 +0,0 @@
|
||||
# Blender v2.72 (sub 0) OBJ File: 'castle_tapestry_very_long.blend'
|
||||
# www.blender.org
|
||||
o Cube
|
||||
v -0.500000 0.500000 -0.125000
|
||||
v -0.437500 0.500000 -0.125000
|
||||
v -0.500000 0.500001 1.500000
|
||||
v -0.437499 0.500000 1.500000
|
||||
v -0.437500 -0.500000 1.500000
|
||||
v -0.500000 -0.500000 1.500000
|
||||
v -0.437500 0.125000 -0.250000
|
||||
v -0.500000 0.125000 -0.250000
|
||||
v -0.500000 0.125000 -0.375000
|
||||
v -0.437500 0.125000 -0.375000
|
||||
v -0.437500 0.187500 -0.375000
|
||||
v -0.500000 0.187500 -0.375000
|
||||
v -0.500000 0.312500 -0.500000
|
||||
v -0.437500 0.312500 -0.500000
|
||||
v -0.437500 0.312500 -0.375000
|
||||
v -0.500000 0.312500 -0.375000
|
||||
v -0.500000 0.375000 -0.375000
|
||||
v -0.437500 0.375000 -0.375000
|
||||
v -0.437500 0.375000 -0.250000
|
||||
v -0.500000 0.375000 -0.250000
|
||||
v -0.437500 -0.187500 -0.500000
|
||||
v -0.500000 -0.312500 -0.500000
|
||||
v -0.437500 -0.312500 -0.500000
|
||||
v -0.500000 0.187500 -0.500000
|
||||
v -0.437500 0.187500 -0.500000
|
||||
v -0.500000 0.437500 -0.250000
|
||||
v -0.437500 0.437500 -0.250000
|
||||
v -0.437500 0.437500 -0.125000
|
||||
v -0.500000 0.437500 -0.125000
|
||||
v -0.437500 0.062500 -0.250000
|
||||
v -0.500000 0.062500 -0.250000
|
||||
v -0.437500 0.062500 -0.125000
|
||||
v -0.500000 0.062500 -0.125000
|
||||
v -0.437500 -0.062500 -0.125000
|
||||
v -0.500000 -0.062500 -0.125000
|
||||
v -0.437500 -0.062500 -0.250000
|
||||
v -0.500000 -0.062500 -0.250000
|
||||
v -0.437500 -0.125000 -0.250000
|
||||
v -0.500000 -0.125000 -0.250000
|
||||
v -0.437500 -0.125000 -0.375000
|
||||
v -0.500000 -0.125000 -0.375000
|
||||
v -0.437500 -0.187500 -0.375000
|
||||
v -0.500000 -0.187500 -0.375000
|
||||
v -0.500000 -0.187500 -0.500000
|
||||
v -0.500000 -0.312500 -0.375000
|
||||
v -0.437500 -0.312500 -0.375000
|
||||
v -0.500000 -0.375000 -0.375000
|
||||
v -0.437500 -0.375000 -0.375000
|
||||
v -0.500000 -0.375000 -0.250000
|
||||
v -0.437500 -0.375000 -0.250000
|
||||
v -0.500000 -0.437500 -0.250000
|
||||
v -0.437500 -0.437500 -0.250000
|
||||
v -0.500000 -0.437500 -0.125000
|
||||
v -0.437500 -0.437500 -0.125000
|
||||
v -0.500000 -0.500000 -0.125000
|
||||
v -0.437500 -0.500000 -0.125000
|
||||
v -0.500000 0.500000 0.500000
|
||||
v -0.437500 0.500000 0.500000
|
||||
v -0.500000 -0.500000 0.500000
|
||||
v -0.437500 -0.500000 0.500000
|
||||
v -0.500000 0.500001 2.500000
|
||||
v -0.437499 0.500000 2.500000
|
||||
v -0.437500 -0.500000 2.500000
|
||||
v -0.500000 -0.500000 2.500000
|
||||
v -0.500000 0.500001 3.500000
|
||||
v -0.437499 0.500000 3.500000
|
||||
v -0.437500 -0.500000 3.500000
|
||||
v -0.500000 -0.500000 3.500000
|
||||
v -0.500000 0.343750 -0.375000
|
||||
vt 0.062500 0.000000
|
||||
vt 0.062500 1.000000
|
||||
vt 0.000000 1.000000
|
||||
vt 0.000003 0.000000
|
||||
vt 0.937500 0.250000
|
||||
vt 1.000000 0.250000
|
||||
vt 1.000000 0.375000
|
||||
vt 0.937500 0.375000
|
||||
vt 0.625000 0.937500
|
||||
vt 0.625000 0.999999
|
||||
vt 0.562500 0.999999
|
||||
vt 0.562500 0.937500
|
||||
vt 0.937500 0.125000
|
||||
vt 1.000000 0.125000
|
||||
vt 0.687500 0.937500
|
||||
vt 0.687500 0.999999
|
||||
vt 0.937500 0.000000
|
||||
vt 1.000000 0.000000
|
||||
vt 0.062500 0.125000
|
||||
vt 0.000000 0.125000
|
||||
vt 0.875000 0.937500
|
||||
vt 0.875000 1.000000
|
||||
vt 0.812500 1.000000
|
||||
vt 0.812500 0.937500
|
||||
vt 0.843750 0.937500
|
||||
vt 0.062500 0.250000
|
||||
vt 0.000000 0.250000
|
||||
vt 0.937500 0.937500
|
||||
vt 0.937500 1.000000
|
||||
vt 0.062500 0.375000
|
||||
vt 0.000000 0.375000
|
||||
vt 1.000000 0.937500
|
||||
vt 1.000000 1.000000
|
||||
vt 0.437500 0.937500
|
||||
vt 0.437500 0.999999
|
||||
vt 0.375000 0.999999
|
||||
vt 0.375000 0.937500
|
||||
vt 0.312500 0.999999
|
||||
vt 0.312500 0.937500
|
||||
vt 0.187500 0.937500
|
||||
vt 0.187500 0.999999
|
||||
vt 0.125000 0.999999
|
||||
vt 0.125000 0.937500
|
||||
vt 0.062500 0.937500
|
||||
vt 0.000000 0.937500
|
||||
vt 0.625000 0.000000
|
||||
vt 0.625000 0.062500
|
||||
vt 0.625000 0.437500
|
||||
vt 0.625000 0.562500
|
||||
vt 0.375000 0.437500
|
||||
vt 0.375000 0.062500
|
||||
vt 0.375000 0.000000
|
||||
vt 0.375000 0.562500
|
||||
vt 0.250000 0.437500
|
||||
vt 0.250000 0.375000
|
||||
vt 0.250000 0.125000
|
||||
vt 0.250000 0.062500
|
||||
vt 0.250000 0.937500
|
||||
vt 0.250000 0.875000
|
||||
vt 0.250000 0.625000
|
||||
vt 0.250000 0.562500
|
||||
vt 0.750000 0.562500
|
||||
vt 0.750000 0.625000
|
||||
vt 0.750000 0.875000
|
||||
vt 0.750000 0.937500
|
||||
vt 0.750000 0.062500
|
||||
vt 0.750000 0.125000
|
||||
vt 0.750000 0.375000
|
||||
vt 0.750000 0.437500
|
||||
vt 0.875000 0.625000
|
||||
vt 0.875000 0.687500
|
||||
vt 0.875000 0.812500
|
||||
vt 0.875000 0.875000
|
||||
vt 0.875000 0.125000
|
||||
vt 0.875000 0.156250
|
||||
vt 0.875000 0.187500
|
||||
vt 0.875000 0.312500
|
||||
vt 0.875000 0.375000
|
||||
vt 1.000000 0.687500
|
||||
vt 1.000000 0.812500
|
||||
vt 1.000000 0.187500
|
||||
vt 1.000000 0.312500
|
||||
vt 0.125000 0.187500
|
||||
vt 0.125000 0.312500
|
||||
vt 0.000000 0.312500
|
||||
vt 0.000000 0.187500
|
||||
vt 0.125000 0.687500
|
||||
vt 0.125000 0.812500
|
||||
vt 0.000000 0.812500
|
||||
vt 0.000000 0.687500
|
||||
vt 0.125000 0.875000
|
||||
vt 0.125000 0.625000
|
||||
vt 0.125000 0.375000
|
||||
vt 0.125000 0.125000
|
||||
vn 0.000000 1.000000 0.000000
|
||||
vn -0.000000 -1.000000 0.000000
|
||||
vn 0.000000 0.000000 -1.000000
|
||||
vn -1.000000 0.000000 0.000000
|
||||
vn 1.000000 -0.000000 -0.000000
|
||||
vn 0.000000 0.000000 1.000000
|
||||
g Cube_Cube_Material
|
||||
s off
|
||||
f 57/1/1 3/2/1 4/3/1 58/4/1
|
||||
f 31/5/2 30/6/2 32/7/2 33/8/2
|
||||
f 8/9/3 7/10/3 30/11/3 31/12/3
|
||||
f 9/13/2 10/14/2 7/6/2 8/5/2
|
||||
f 12/15/3 11/16/3 10/10/3 9/9/3
|
||||
f 24/17/2 25/18/2 11/14/2 12/13/2
|
||||
f 16/19/1 15/20/1 14/4/1 13/1/1
|
||||
f 17/21/3 18/22/3 15/23/3 16/24/3 69/25/3
|
||||
f 20/26/1 19/27/1 18/20/1 17/19/1
|
||||
f 26/28/3 27/29/3 19/22/3 20/21/3
|
||||
f 29/30/1 28/31/1 27/27/1 26/26/1
|
||||
f 1/32/3 2/33/3 28/29/3 29/28/3
|
||||
f 37/34/3 36/35/3 38/36/3 39/37/3
|
||||
f 39/26/1 38/27/1 40/20/1 41/19/1
|
||||
f 41/37/3 40/36/3 42/38/3 43/39/3
|
||||
f 22/17/2 23/18/2 46/14/2 45/13/2
|
||||
f 45/40/3 46/41/3 48/42/3 47/43/3
|
||||
f 47/13/2 48/14/2 50/6/2 49/5/2
|
||||
f 49/43/3 50/42/3 52/2/3 51/44/3
|
||||
f 51/5/2 52/6/2 54/7/2 53/8/2
|
||||
f 53/44/3 54/2/3 56/3/3 55/45/3
|
||||
f 43/19/1 42/20/1 21/4/1 44/1/1
|
||||
f 14/23/3 25/16/3 24/15/3 13/24/3
|
||||
f 60/18/2 5/33/2 6/29/2 59/17/2
|
||||
f 21/38/3 23/41/3 22/40/3 44/39/3
|
||||
f 57/18/4 59/33/4 6/3/4 3/4/4
|
||||
f 60/3/5 58/4/5 4/18/5 5/33/5
|
||||
f 1/30/1 57/2/1 58/3/1 2/31/1
|
||||
f 56/7/2 60/33/2 59/29/2 55/8/2
|
||||
f 1/46/4 29/47/4 33/48/4 35/49/4 53/9/4 55/10/4 59/3/4 57/4/4
|
||||
f 32/50/5 28/51/5 2/52/5 58/18/5 60/33/5 56/36/5 54/37/5 34/53/5
|
||||
f 34/31/1 36/27/1 37/26/1 35/30/1
|
||||
f 30/54/5 7/55/5 19/56/5 27/57/5 28/51/5 32/50/5
|
||||
f 34/53/5 54/37/5 52/58/5 50/59/5 38/60/5 36/61/5
|
||||
f 53/9/4 35/49/4 37/62/4 39/63/4 49/64/4 51/65/4
|
||||
f 29/47/4 26/66/4 20/67/4 8/68/4 31/69/4 33/48/4
|
||||
f 33/12/3 32/11/3 34/35/3 35/34/3
|
||||
f 3/1/1 61/2/1 62/3/1 4/4/1
|
||||
f 65/33/6 68/3/6 67/45/6 66/32/6
|
||||
f 5/18/2 63/33/2 64/29/2 6/17/2
|
||||
f 3/18/4 6/33/4 64/3/4 61/4/4
|
||||
f 5/3/5 4/4/5 62/18/5 63/33/5
|
||||
f 61/1/1 65/2/1 66/3/1 62/4/1
|
||||
f 63/18/2 67/33/2 68/29/2 64/17/2
|
||||
f 61/18/4 64/33/4 68/3/4 65/4/4
|
||||
f 63/3/5 62/4/5 66/18/5 67/33/5
|
||||
f 49/64/4 39/63/4 41/70/4 43/71/4 45/72/4 47/73/4
|
||||
f 8/68/4 20/67/4 17/74/4 69/75/4 16/76/4 12/77/4 9/78/4
|
||||
f 45/72/4 43/71/4 44/79/4 22/80/4
|
||||
f 12/77/4 16/76/4 13/81/4 24/82/4
|
||||
f 15/83/5 11/84/5 25/85/5 14/86/5
|
||||
f 42/87/5 46/88/5 23/89/5 21/90/5
|
||||
f 38/60/5 50/59/5 48/91/5 46/88/5 42/87/5 40/92/5
|
||||
f 7/55/5 10/93/5 11/84/5 15/83/5 18/94/5 19/56/5
|
@ -1,50 +0,0 @@
|
||||
local hole = {}
|
||||
|
||||
hole.types = {
|
||||
{"stonewall", "Stonewall", "castle_stonewall", "castle:stonewall"},
|
||||
{"cobble", "Cobble", "default_cobble", "default:cobble"},
|
||||
{"stonebrick", "Stonebrick", "default_stone_brick", "default:stonebrick"},
|
||||
{"sandstonebrick", "Sandstone Brick", "default_sandstone_brick", "default:sandstonebrick"},
|
||||
{"desertstonebrick", "Desert Stone Brick", "default_desert_stone_brick", "default:desert_stonebrick"},
|
||||
{"stone", "Stone", "default_stone", "default:stone"},
|
||||
{"sandstone", "Sandstone", "default_sandstone", "default:sandstone"},
|
||||
{"desertstone", "Desert Stone", "default_desert_stone", "default:desert_stone"},
|
||||
}
|
||||
|
||||
for _, row in ipairs(hole.types) do
|
||||
local name = row[1]
|
||||
local desc = row[2]
|
||||
local tile = row[3]
|
||||
local craft_material = row[4]
|
||||
-- Node Definition
|
||||
minetest.register_node("castle:hole_"..name, {
|
||||
drawtype = "nodebox",
|
||||
description = desc.." Murder Hole",
|
||||
tiles = {tile..".png"},
|
||||
groups = {cracky=3},
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-8/16,-8/16,-8/16,-4/16,8/16,8/16},
|
||||
{4/16,-8/16,-8/16,8/16,8/16,8/16},
|
||||
{-4/16,-8/16,-8/16,4/16,8/16,-4/16},
|
||||
{-4/16,-8/16,8/16,4/16,8/16,4/16},
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
if craft_material then
|
||||
--Choose craft material
|
||||
minetest.register_craft({
|
||||
output = "castle:hole_"..name.." 4",
|
||||
recipe = {
|
||||
{"",craft_material, "" },
|
||||
{craft_material,"", craft_material},
|
||||
{"",craft_material, ""} },
|
||||
})
|
||||
end
|
||||
end
|
||||
|
@ -1,108 +0,0 @@
|
||||
minetest.register_alias("castle:pillars_bottom", "castle:pillars_stonewall_bottom")
|
||||
minetest.register_alias("castle:pillars_top", "castle:pillars_stonewall_top")
|
||||
minetest.register_alias("castle:pillars_middle", "castle:pillars_stonewall_middle")
|
||||
|
||||
local pillar = {}
|
||||
|
||||
pillar.types = {
|
||||
{"stonewall", "Stonewall", "castle_stonewall", "castle:stonewall"},
|
||||
{"cobble", "Cobble", "default_cobble", "default:cobble"},
|
||||
{"stonebrick", "Stonebrick", "default_stone_brick", "default:stonebrick"},
|
||||
{"sandstonebrick", "Sandstone Brick", "default_sandstone_brick", "default:sandstonebrick"},
|
||||
{"desertstonebrick", "Desert Stone Brick", "default_desert_stone_brick", "default:desert_stonebrick"},
|
||||
{"stone", "Stone", "default_stone", "default:stone"},
|
||||
{"sandstone", "Sandstone", "default_sandstone", "default:sandstone"},
|
||||
{"desertstone", "Desert Stone", "default_desert_stone", "default:desert_stone"},
|
||||
}
|
||||
|
||||
for _, row in ipairs(pillar.types) do
|
||||
local name = row[1]
|
||||
local desc = row[2]
|
||||
local tile = row[3]
|
||||
local craft_material = row[4]
|
||||
-- Node Definition
|
||||
minetest.register_node("castle:pillars_"..name.."_bottom", {
|
||||
drawtype = "nodebox",
|
||||
description = desc.." Pillar Base",
|
||||
tiles = {tile..".png"},
|
||||
groups = {cracky=3,attached_node=1},
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.500000,-0.500000,-0.500000,0.500000,-0.375000,0.500000},
|
||||
{-0.375000,-0.375000,-0.375000,0.375000,-0.125000,0.375000},
|
||||
{-0.250000,-0.125000,-0.250000,0.250000,0.500000,0.250000},
|
||||
},
|
||||
},
|
||||
})
|
||||
minetest.register_node("castle:pillars_"..name.."_top", {
|
||||
drawtype = "nodebox",
|
||||
description = desc.." Pillar Top",
|
||||
tiles = {tile..".png"},
|
||||
groups = {cracky=3,attached_node=1},
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.500000,0.312500,-0.500000,0.500000,0.500000,0.500000},
|
||||
{-0.375000,0.062500,-0.375000,0.375000,0.312500,0.375000},
|
||||
{-0.250000,-0.500000,-0.250000,0.250000,0.062500,0.250000},
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
minetest.register_node("castle:pillars_"..name.."_middle", {
|
||||
drawtype = "nodebox",
|
||||
description = desc.." Pillar Middle",
|
||||
tiles = {tile..".png"},
|
||||
groups = {cracky=3,attached_node=1},
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.250000,-0.500000,-0.250000,0.250000,0.500000,0.250000},
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
if craft_material then
|
||||
--Choose craft material
|
||||
minetest.register_craft({
|
||||
output = "castle:pillars_"..name.."_bottom 4",
|
||||
recipe = {
|
||||
{"",craft_material,""},
|
||||
{"",craft_material,""},
|
||||
{craft_material,craft_material,craft_material} },
|
||||
})
|
||||
end
|
||||
|
||||
if craft_material then
|
||||
--Choose craft material
|
||||
minetest.register_craft({
|
||||
output = "castle:pillars_"..name.."_top 4",
|
||||
recipe = {
|
||||
{craft_material,craft_material,craft_material},
|
||||
{"",craft_material,""},
|
||||
{"",craft_material,""} },
|
||||
})
|
||||
end
|
||||
|
||||
if craft_material then
|
||||
--Choose craft material
|
||||
minetest.register_craft({
|
||||
output = "castle:pillars_"..name.."_middle 4",
|
||||
recipe = {
|
||||
{craft_material,craft_material},
|
||||
{craft_material,craft_material},
|
||||
{craft_material,craft_material} },
|
||||
})
|
||||
end
|
||||
end
|
||||
|
124
castle/rope.lua
@ -1,124 +0,0 @@
|
||||
minetest.register_node("castle:ropes",{
|
||||
description = "Rope",
|
||||
drawtype = "nodebox",
|
||||
sunlight_propagates = true,
|
||||
tiles = {"castle_ropes.png"},
|
||||
groups = {choppy=3,snappy=3,oddly_breakable_by_hand=3,flammable=1},
|
||||
sounds = default.node_sound_defaults(),
|
||||
paramtype = "light",
|
||||
climbable = true,
|
||||
walkable = false,
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-1/16, -8/16, -1/16, 1/16, 8/16, 1/16},
|
||||
},
|
||||
},
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-1/16, -8/16, -1/16, 1/16, 8/16, 1/16},
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "castle:ropes",
|
||||
recipe = {
|
||||
{"farming:string"},
|
||||
{"farming:string"},
|
||||
{"farming:string"},
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_node("castle:box_rope", {
|
||||
description = "Rope from Ropebox",
|
||||
drawtype = "nodebox",
|
||||
paramtype = "light",
|
||||
sunlight_propagates = true,
|
||||
tiles = {"castle_ropes.png"},
|
||||
groups = {not_in_creative_inventory=1},
|
||||
climbable = true,
|
||||
walkable = false,
|
||||
diggable = false,
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-1/16, -8/16, -1/16, 1/16, 8/16, 1/16},
|
||||
},
|
||||
},
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-1/16, -8/16, -1/16, 1/16, 8/16, 1/16},
|
||||
},
|
||||
},
|
||||
after_destruct = function(pos,oldnode)
|
||||
local node = minetest.get_node({x=pos.x,y=pos.y-1,z=pos.z})
|
||||
if node.name == "castle:box_rope" then
|
||||
minetest.remove_node({x=pos.x,y=pos.y-1,z=pos.z})
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
minetest.register_node("castle:ropebox", {
|
||||
description = "Ropebox",
|
||||
drawtype = "nodebox",
|
||||
sunlight_propagates = true,
|
||||
tiles = {"castle_ropebox_top.png",
|
||||
"castle_ropebox_top.png",
|
||||
"castle_ropebox_side_1.png",
|
||||
"castle_ropebox_side_1.png",
|
||||
"castle_ropebox_side_2.png",
|
||||
"castle_ropebox_side_2.png"},
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
groups = {choppy=3},
|
||||
sounds = default.node_sound_defaults(),
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-2/16, -2/16, -4/16, 2/16, 2/16, 4/16},
|
||||
{-2/16, -4/16, -2/16, 2/16, 4/16, 2/16},
|
||||
{-2/16, -3/16, -3/16, 2/16, 3/16, 3/16},
|
||||
{-3/16, -2/16, -2/16, -2/16, 8/16, 2/16},
|
||||
{2/16, -2/16, -2/16, 3/16, 8/16, 2/16},
|
||||
{-1/16, -8/16, -1/16, 1/16, -4/16, 1/16},
|
||||
},
|
||||
},
|
||||
after_destruct = function(pos,oldnode)
|
||||
local node = minetest.get_node({x=pos.x,y=pos.y-1,z=pos.z})
|
||||
if node.name == "castle:box_rope" then
|
||||
minetest.remove_node({x=pos.x,y=pos.y-1,z=pos.z})
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
minetest.register_abm({
|
||||
nodenames = {"castle:ropebox"},
|
||||
interval = 1,
|
||||
chance = 1,
|
||||
action = function(pos, node)
|
||||
if minetest.get_node({x=pos.x,y=pos.y-1,z=pos.z}).name ~= 'air' then return end
|
||||
minetest.add_node({x=pos.x,y=pos.y-1,z=pos.z}, {name="castle:box_rope"})
|
||||
end
|
||||
})
|
||||
|
||||
minetest.register_abm({
|
||||
nodenames = {"castle:box_rope"},
|
||||
interval = 1,
|
||||
chance = 1,
|
||||
action = function(pos, node)
|
||||
if minetest.get_node({x=pos.x,y=pos.y-1,z=pos.z}).name ~= 'air' then return end
|
||||
minetest.add_node({x=pos.x,y=pos.y-1,z=pos.z}, {name="castle:box_rope"})
|
||||
end
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "castle:ropebox",
|
||||
recipe = {
|
||||
{"default:wood"},
|
||||
{"castle:ropes"},
|
||||
}
|
||||
})
|
||||
|
Before Width: | Height: | Size: 205 KiB |
@ -1,103 +0,0 @@
|
||||
minetest.register_node("castle:shield",{
|
||||
description = "Mounted Shield",
|
||||
tiles = {"castle_shield_side.png", "castle_shield_side.png", "castle_shield_side.png", "castle_shield_side.png", "castle_shield_back.png", "castle_shield_front.png"},
|
||||
drawtype="nodebox",
|
||||
paramtype2 = "facedir",
|
||||
paramtype = "light",
|
||||
groups={cracky=3},
|
||||
sounds = default.node_sound_defaults(),
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.500000,-0.125000,0.375000,0.500000,0.500000,0.500000}, --NodeBox 1
|
||||
{-0.437500,-0.312500,0.375000,0.425000,0.500000,0.500000}, --NodeBox 2
|
||||
{-0.312500,-0.437500,0.375000,0.312500,0.500000,0.500000}, --NodeBox 3
|
||||
{-0.187500,-0.500000,0.375000,0.187500,0.500000,0.500000}, --NodeBox 4
|
||||
},
|
||||
},
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.500000,-0.500000,0.375000,0.500000,0.500000,0.500000}, --NodeBox 1
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
|
||||
minetest.register_craft({
|
||||
output = "castle:shield",
|
||||
recipe = {
|
||||
{"default:steel_ingot","default:steel_ingot","default:steel_ingot"},
|
||||
{"default:steel_ingot", "default:steel_ingot","default:steel_ingot"},
|
||||
{"dye:red", "default:steel_ingot","dye:blue"},
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_node("castle:shield_2",{
|
||||
description = "Mounted Shield",
|
||||
tiles = {"castle_shield_side_2.png", "castle_shield_side_2.png", "castle_shield_side_2.png", "castle_shield_side_2.png", "castle_shield_back.png", "castle_shield_front_2.png"},
|
||||
drawtype="nodebox",
|
||||
paramtype2 = "facedir",
|
||||
paramtype = "light",
|
||||
groups={cracky=3},
|
||||
sounds = default.node_sound_defaults(),
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.500000,-0.125000,0.375000,0.500000,0.500000,0.500000}, --NodeBox 1
|
||||
{-0.437500,-0.312500,0.375000,0.425000,0.500000,0.500000}, --NodeBox 2
|
||||
{-0.312500,-0.437500,0.375000,0.312500,0.500000,0.500000}, --NodeBox 3
|
||||
{-0.187500,-0.500000,0.375000,0.187500,0.500000,0.500000}, --NodeBox 4
|
||||
},
|
||||
},
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.500000,-0.500000,0.375000,0.500000,0.500000,0.500000}, --NodeBox 1
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "castle:shield_2",
|
||||
recipe = {
|
||||
{"default:steel_ingot","default:steel_ingot","default:steel_ingot"},
|
||||
{"default:steel_ingot", "default:steel_ingot","default:steel_ingot"},
|
||||
{"dye:cyan", "default:steel_ingot","dye:yellow"},
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_node("castle:shield_3",{
|
||||
description = "Mounted Shield",
|
||||
tiles = {"castle_shield_side_3.png", "castle_shield_side_3.png", "castle_shield_side_3.png", "castle_shield_side_3.png", "castle_shield_back.png", "castle_shield_front_3.png"},
|
||||
drawtype="nodebox",
|
||||
paramtype2 = "facedir",
|
||||
paramtype = "light",
|
||||
groups={cracky=3},
|
||||
sounds = default.node_sound_defaults(),
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.500000,-0.125000,0.375000,0.500000,0.500000,0.500000}, --NodeBox 1
|
||||
{-0.437500,-0.312500,0.375000,0.425000,0.500000,0.500000}, --NodeBox 2
|
||||
{-0.312500,-0.437500,0.375000,0.312500,0.500000,0.500000}, --NodeBox 3
|
||||
{-0.187500,-0.500000,0.375000,0.187500,0.500000,0.500000}, --NodeBox 4
|
||||
},
|
||||
},
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.500000,-0.500000,0.375000,0.500000,0.500000,0.500000}, --NodeBox 1
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "castle:shield_3",
|
||||
recipe = {
|
||||
{"default:steel_ingot","default:steel_ingot","default:steel_ingot"},
|
||||
{"default:steel_ingot", "default:steel_ingot","default:steel_ingot"},
|
||||
{"dye:grey", "default:steel_ingot","dye:green"},
|
||||
}
|
||||
})
|
||||
|
@ -1,52 +0,0 @@
|
||||
License Sounds
|
||||
------------------
|
||||
|
||||
(From Simple Shooter mod by Stuart Jones)
|
||||
-castle_crossbow_click.ogg
|
||||
-castle_crossbow_shoot.ogg
|
||||
-castle_crossbow_reload.ogg
|
||||
|
||||
Author : freesound.org
|
||||
License : Attribution 3.0 Unported (CC BY 3.0)
|
||||
CC0 1.0 Universal (CC0 1.0)
|
||||
|
||||
------------------
|
||||
|
||||
(From Minetest Game:default mod)
|
||||
-default_wood_footstep.1.ogg
|
||||
(renamed to : castle_crossbow_bolt.ogg)
|
||||
Author : Mito551
|
||||
License : (CC BY-SA)
|
||||
|
||||
------------------
|
||||
|
||||
Author: Brandon Morris
|
||||
file: castle_orbs.ogg
|
||||
original file : completetask_0.mp3
|
||||
http://opengameart.org/content/completion-sound
|
||||
License: CC-BY 3.0
|
||||
http://creativecommons.org/licenses/by/3.0/
|
||||
|
||||
------------------
|
||||
|
||||
(From Ambience mod)
|
||||
|
||||
Author: Mike Koenig
|
||||
file: castle_owl.ogg
|
||||
original file : horned_owl.ogg
|
||||
http://soundbible.com/1851-Horned-Owl.html
|
||||
License: Attribution 3.0
|
||||
http://creativecommons.org/licenses/by/3.0/
|
||||
|
||||
------------------
|
||||
|
||||
(From Ambience mod)
|
||||
|
||||
Author: PsychoBird
|
||||
file: castle_birds.ogg
|
||||
original file : Best Cardinal Bird.ogg
|
||||
http://soundbible.com/1515-Best-Cardinal-Bird.html
|
||||
License: Attribution 3.0
|
||||
http://creativecommons.org/licenses/by/3.0/
|
||||
|
||||
------------------
|
@ -1,196 +0,0 @@
|
||||
local tapestry = {}
|
||||
|
||||
minetest.register_node("castle:tapestry_top", {
|
||||
drawtype = "nodebox",
|
||||
description = "Tapestry Top",
|
||||
tiles = {"default_wood.png"},
|
||||
sunlight_propagates = true,
|
||||
groups = {flammable=3,oddly_breakable_by_hand=3},
|
||||
sounds = default.node_sound_defaults(),
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.6,-0.5,0.375,0.6,-0.375,0.5},
|
||||
},
|
||||
},
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.6,-0.5,0.375,0.6,-0.375,0.5},
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "shapeless",
|
||||
output = 'castle:tapestry_top',
|
||||
recipe = {'default:stick'},
|
||||
})
|
||||
|
||||
tapestry.colours = {
|
||||
"white",
|
||||
"grey",
|
||||
"black",
|
||||
"red",
|
||||
"yellow",
|
||||
"green",
|
||||
"cyan",
|
||||
"blue",
|
||||
"magenta",
|
||||
"orange",
|
||||
"violet",
|
||||
"dark_grey",
|
||||
"dark_green",
|
||||
"pink",
|
||||
"brown",
|
||||
}
|
||||
|
||||
-- Regular-length tapestry
|
||||
|
||||
minetest.register_node("castle:tapestry", {
|
||||
drawtype = "mesh",
|
||||
mesh = "castle_tapestry.obj",
|
||||
description = "Tapestry",
|
||||
tiles = {"castle_tapestry.png"},
|
||||
inventory_image = "castle_tapestry_inv.png",
|
||||
groups = {oddly_breakable_by_hand=3,flammable=3, ud_param2_colorable = 1},
|
||||
sounds = default.node_sound_defaults(),
|
||||
paramtype = "light",
|
||||
paramtype2 = "colorwallmounted",
|
||||
palette = "unifieddyes_palette_colorwallmounted.png",
|
||||
selection_box = {
|
||||
type = "wallmounted",
|
||||
wall_side = {-0.5,-0.5,0.4375,0.5,1.5,0.5},
|
||||
},
|
||||
after_place_node = unifieddyes.fix_rotation_nsew,
|
||||
after_dig_node = unifieddyes.after_dig_node,
|
||||
on_rotate = unifieddyes.fix_after_screwdriver_nsew
|
||||
})
|
||||
|
||||
-- Crafting from wool and a stick
|
||||
|
||||
minetest.register_craft({
|
||||
type = "shapeless",
|
||||
output = 'castle:tapestry',
|
||||
recipe = {'wool:white', 'default:stick'},
|
||||
})
|
||||
|
||||
-- Long tapestry
|
||||
|
||||
minetest.register_node("castle:tapestry_long", {
|
||||
drawtype = "mesh",
|
||||
mesh = "castle_tapestry_long.obj",
|
||||
description = "Tapestry (Long)",
|
||||
tiles = {"castle_tapestry.png"},
|
||||
inventory_image = "castle_tapestry_long_inv.png",
|
||||
groups = {oddly_breakable_by_hand=3,flammable=3, ud_param2_colorable = 1},
|
||||
sounds = default.node_sound_defaults(),
|
||||
paramtype = "light",
|
||||
paramtype2 = "colorwallmounted",
|
||||
palette = "unifieddyes_palette_colorwallmounted.png",
|
||||
selection_box = {
|
||||
type = "wallmounted",
|
||||
wall_side = {-0.5,-0.5,0.4375,0.5,2.5,0.5},
|
||||
},
|
||||
after_place_node = unifieddyes.fix_rotation_nsew,
|
||||
after_dig_node = unifieddyes.after_dig_node,
|
||||
on_rotate = unifieddyes.fix_after_screwdriver_nsew
|
||||
})
|
||||
|
||||
-- Crafting from normal tapestry and wool
|
||||
|
||||
minetest.register_craft({
|
||||
type = "shapeless",
|
||||
output = 'castle:tapestry_long',
|
||||
recipe = {'wool:white', 'castle:tapestry'},
|
||||
})
|
||||
|
||||
-- Very long tapestry
|
||||
|
||||
minetest.register_node("castle:tapestry_very_long", {
|
||||
drawtype = "mesh",
|
||||
mesh = "castle_tapestry_very_long.obj",
|
||||
description = "Tapestry (Very Long)",
|
||||
tiles = {"castle_tapestry.png"},
|
||||
inventory_image = "castle_tapestry_very_long_inv.png",
|
||||
groups = {oddly_breakable_by_hand=3,flammable=3, ud_param2_colorable = 1},
|
||||
sounds = default.node_sound_defaults(),
|
||||
paramtype = "light",
|
||||
paramtype2 = "colorwallmounted",
|
||||
palette = "unifieddyes_palette_colorwallmounted.png",
|
||||
selection_box = {
|
||||
type = "wallmounted",
|
||||
wall_side = {-0.5,-0.5,0.4375,0.5,3.5,0.5},
|
||||
},
|
||||
after_place_node = unifieddyes.fix_rotation_nsew,
|
||||
after_dig_node = unifieddyes.after_dig_node,
|
||||
on_rotate = unifieddyes.fix_after_screwdriver_nsew
|
||||
})
|
||||
|
||||
-- Crafting from long tapestry and wool
|
||||
|
||||
minetest.register_craft({
|
||||
type = "shapeless",
|
||||
output = 'castle:tapestry_very_long',
|
||||
recipe = {'wool:white', 'castle:tapestry_long'},
|
||||
})
|
||||
|
||||
-- Convert static tapestries to param2 color
|
||||
|
||||
castle.old_static_tapestries = {}
|
||||
|
||||
for _, color in ipairs(tapestry.colours) do
|
||||
table.insert(castle.old_static_tapestries, "castle:tapestry_"..color)
|
||||
table.insert(castle.old_static_tapestries, "castle:long_tapestry_"..color)
|
||||
table.insert(castle.old_static_tapestries, "castle:very_long_tapestry_"..color)
|
||||
end
|
||||
|
||||
minetest.register_lbm({
|
||||
name = "castle:convert_tapestries",
|
||||
label = "Convert tapestries to use param2 color",
|
||||
run_at_every_load = false,
|
||||
nodenames = castle.old_static_tapestries,
|
||||
action = function(pos, node)
|
||||
local oldname = node.name
|
||||
local color = string.sub(oldname, string.find(oldname, "_", -12) + 1)
|
||||
|
||||
if color == "red" then
|
||||
color = "medium_red"
|
||||
elseif color == "cyan" then
|
||||
color = "medium_cyan"
|
||||
elseif color == "blue" then
|
||||
color = "medium_blue"
|
||||
elseif color == "magenta" then
|
||||
color = "medium_magenta"
|
||||
end
|
||||
|
||||
local paletteidx, _ = unifieddyes.getpaletteidx("unifieddyes:"..color, "wallmounted")
|
||||
|
||||
local old_fdir = math.floor(node.param2 % 32)
|
||||
local new_fdir = 3
|
||||
|
||||
if old_fdir == 0 then
|
||||
new_fdir = 3
|
||||
elseif old_fdir == 1 then
|
||||
new_fdir = 4
|
||||
elseif old_fdir == 2 then
|
||||
new_fdir = 2
|
||||
elseif old_fdir == 3 then
|
||||
new_fdir = 5
|
||||
end
|
||||
|
||||
local param2 = paletteidx + new_fdir
|
||||
local newname = "castle:tapestry"
|
||||
if string.find(oldname, ":long") then
|
||||
newname = "castle:tapestry_long"
|
||||
elseif string.find(oldname, ":very_long") then
|
||||
newname = "castle:tapestry_very_long"
|
||||
end
|
||||
|
||||
minetest.set_node(pos, { name = newname, param2 = param2 })
|
||||
local meta = minetest.get_meta(pos)
|
||||
meta:set_string("dye", "unifieddyes:"..color)
|
||||
end
|
||||
})
|
@ -1,84 +0,0 @@
|
||||
--------------------------------------------
|
||||
|
||||
License Textures: Stuart Jones - WTFPL
|
||||
-castle_crossbow_bolt_inv.png
|
||||
-castle_crossbow_bolt_uv.png
|
||||
-castle_crossbow_hit.png
|
||||
|
||||
Licence Models: Stuart Jones - CC-BY-SA 3.0
|
||||
-castle_crossbow_bolt.b3d
|
||||
-castle_crossbow_bolt.blend
|
||||
|
||||
|
||||
--------------------------------------------
|
||||
|
||||
License Textures: Kilbith - WTFPL
|
||||
|
||||
-castle_tapestry_overlay.png
|
||||
|
||||
|
||||
--------------------------------------------
|
||||
|
||||
License Textures: Philipner - CC-BY-SA 3.0
|
||||
|
||||
-castle_chandelier.png
|
||||
-castle_chandelier_chain.png
|
||||
-castle_chandelier_wield.png
|
||||
-castle_corner_stonewall_tb.png
|
||||
-castle_corner_stonewall1.png
|
||||
-castle_corner_stonewall2.png
|
||||
-castle_orb_day.png
|
||||
-castle_orb_night.png
|
||||
-castle_workbench_back.png
|
||||
-castle_workbench_front.png
|
||||
-castle_workbench_side.png
|
||||
-castle_workbench_top.png
|
||||
|
||||
|
||||
--------------------------------------------
|
||||
|
||||
16 px textures based on Castle mod
|
||||
original textures by Philipner
|
||||
|
||||
License Textures: Napiophelios - CC-BY-SA 3.0
|
||||
|
||||
-castle_battleaxe.png
|
||||
-castle_crossbow_bolt_inv.png
|
||||
-castle_crossbow_hit.png
|
||||
-castle_crossbow_loaded.png
|
||||
-castle_door_jail.png
|
||||
-castle_door_oak.png
|
||||
-castle_dungeon_stone.png
|
||||
-castle_grey.png
|
||||
-castle_hide.png
|
||||
-castle_ironbound_chest_back.png
|
||||
-castle_ironbound_chest_front.png
|
||||
-castle_ironbound_chest_side.png
|
||||
-castle_ironbound_chest_top.png
|
||||
-castle_jail_door_inv.png
|
||||
-castle_jailbars.png
|
||||
-castle_oak_door_inv.png
|
||||
-castle_orb_day_weild.png
|
||||
-castle_orb_night_weild.png
|
||||
-castle_pavement_brick.png
|
||||
-castle_ropebox_side_1.png
|
||||
-castle_ropebox_side_2.png
|
||||
-castle_ropebox_top.png
|
||||
-castle_ropes.png
|
||||
-castle_rubble.png
|
||||
-castle_shield_back.png
|
||||
-castle_shield_front.png
|
||||
-castle_shield_front_2.png
|
||||
-castle_shield_front_3.png
|
||||
-castle_shield_side.png
|
||||
-castle_shield_side_2.png
|
||||
-castle_shield_side_3.png
|
||||
-castle_slate.png
|
||||
-castle_space.png
|
||||
-castle_steel.png
|
||||
-castle_stonewall.png
|
||||
-castle_straw_bale.png
|
||||
-castle_street_light.png
|
||||
-castle_workbench_bottom.png
|
||||
|
||||
--------------------------------------------
|
Before Width: | Height: | Size: 358 B |
Before Width: | Height: | Size: 360 B |
Before Width: | Height: | Size: 169 B |
Before Width: | Height: | Size: 316 B |
Before Width: | Height: | Size: 696 B |
Before Width: | Height: | Size: 682 B |
Before Width: | Height: | Size: 691 B |
Before Width: | Height: | Size: 344 B |
Before Width: | Height: | Size: 395 B |
Before Width: | Height: | Size: 146 B |
Before Width: | Height: | Size: 516 B |
Before Width: | Height: | Size: 280 B |
Before Width: | Height: | Size: 295 B |
Before Width: | Height: | Size: 878 B |
Before Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 543 B |
Before Width: | Height: | Size: 70 B |
Before Width: | Height: | Size: 618 B |
Before Width: | Height: | Size: 522 B |
Before Width: | Height: | Size: 537 B |
Before Width: | Height: | Size: 374 B |
Before Width: | Height: | Size: 522 B |
Before Width: | Height: | Size: 186 B |
Before Width: | Height: | Size: 253 B |
Before Width: | Height: | Size: 411 B |
Before Width: | Height: | Size: 112 B |
Before Width: | Height: | Size: 185 B |
Before Width: | Height: | Size: 109 B |
Before Width: | Height: | Size: 184 B |
Before Width: | Height: | Size: 700 B |
Before Width: | Height: | Size: 342 B |
Before Width: | Height: | Size: 286 B |
Before Width: | Height: | Size: 262 B |
Before Width: | Height: | Size: 278 B |
Before Width: | Height: | Size: 563 B |
Before Width: | Height: | Size: 620 B |
Before Width: | Height: | Size: 520 B |
Before Width: | Height: | Size: 701 B |
Before Width: | Height: | Size: 536 B |
Before Width: | Height: | Size: 94 B |
Before Width: | Height: | Size: 91 B |
Before Width: | Height: | Size: 101 B |
Before Width: | Height: | Size: 261 B |
Before Width: | Height: | Size: 151 B |
Before Width: | Height: | Size: 214 B |
Before Width: | Height: | Size: 660 B |
Before Width: | Height: | Size: 756 B |
Before Width: | Height: | Size: 465 B |
Before Width: | Height: | Size: 323 B |
Before Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 1.8 KiB |
Before Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 383 B |
Before Width: | Height: | Size: 369 B |
Before Width: | Height: | Size: 391 B |
Before Width: | Height: | Size: 342 B |
Before Width: | Height: | Size: 336 B |
@ -1,386 +0,0 @@
|
||||
|
||||
minetest.register_alias("darkage:box", "castle:crate")
|
||||
minetest.register_alias("cottages:straw", "farming:straw")
|
||||
minetest.register_alias("castle:straw", "farming:straw")
|
||||
minetest.register_alias("darkage:straw", "farming:straw")
|
||||
minetest.register_alias("cottages:straw_bale", "castle:bound_straw")
|
||||
minetest.register_alias("darkage:straw_bale", "castle:bound_straw")
|
||||
minetest.register_alias("darkage:lamp", "castle:street_light")
|
||||
minetest.register_alias("castle:pavement", "castle:pavement_brick")
|
||||
|
||||
minetest.register_node("castle:anvil",{
|
||||
drawtype = "nodebox",
|
||||
description = "Anvil",
|
||||
tiles = {"castle_steel.png"},
|
||||
groups = {cracky=2,falling_node=1},
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.500000,-0.500000,-0.500000,0.500000,-0.250000,0.500000},
|
||||
{-0.187500,-0.500000,-0.375000,0.187500,0.312500,0.375000},
|
||||
{-0.375000,-0.500000,-0.437500,0.375000,-0.125000,0.437500},
|
||||
{-0.500000,0.312500,-0.500000,0.500000,0.500000,0.500000},
|
||||
{-0.375000,0.187500,-0.437500,0.375000,0.425000,0.437500},
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "castle:anvil",
|
||||
recipe = {
|
||||
{"default:steel_ingot","default:steel_ingot","default:steel_ingot"},
|
||||
{"","default:steel_ingot", ""},
|
||||
{"default:steel_ingot", "default:steel_ingot","default:steel_ingot"},
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_node("castle:workbench",{
|
||||
description = "Workbench",
|
||||
tiles = {"castle_workbench_top.png", "castle_workbench_bottom.png", "castle_workbench_side.png", "castle_workbench_side.png", "castle_workbench_back.png", "castle_workbench_front.png"},
|
||||
paramtype2 = "facedir",
|
||||
paramtype = "light",
|
||||
groups = {choppy=2,oddly_breakable_by_hand=2,flammable=2},
|
||||
sounds = default.node_sound_wood_defaults(),
|
||||
drawtype = "normal",
|
||||
on_construct = function ( pos )
|
||||
local meta = minetest.get_meta( pos )
|
||||
meta:set_string( 'formspec',
|
||||
'size[10,10;]' ..
|
||||
default.gui_bg ..
|
||||
default.gui_bg_img ..
|
||||
default.gui_slots ..
|
||||
'label[1,0;Source Material]' ..
|
||||
'list[context;src;1,1;2,4;]' ..
|
||||
'label[4,0;Recipe to Use]' ..
|
||||
'list[context;rec;4,1;3,3;]' ..
|
||||
'label[7.5,0;Craft Output]' ..
|
||||
'list[context;dst;8,1;1,4;]' ..
|
||||
'list[current_player;main;1,6;8,4;]' )
|
||||
meta:set_string( 'infotext', 'Workbench' )
|
||||
local inv = meta:get_inventory()
|
||||
inv:set_size( 'src', 2 * 4 )
|
||||
inv:set_size( 'rec', 3 * 3 )
|
||||
inv:set_size( 'dst', 1 * 4 )
|
||||
end,
|
||||
can_dig = function(pos,player)
|
||||
local meta = minetest.get_meta(pos);
|
||||
local inv = meta:get_inventory()
|
||||
return inv:is_empty("main")
|
||||
end,
|
||||
on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
|
||||
minetest.log("action", player:get_player_name()..
|
||||
" moves stuff in workbench at "..minetest.pos_to_string(pos))
|
||||
end,
|
||||
on_metadata_inventory_put = function(pos, listname, index, stack, player)
|
||||
minetest.log("action", player:get_player_name()..
|
||||
" moves stuff to workbench at "..minetest.pos_to_string(pos))
|
||||
end,
|
||||
on_metadata_inventory_take = function(pos, listname, index, stack, player)
|
||||
minetest.log("action", player:get_player_name()..
|
||||
" takes stuff from workbench at "..minetest.pos_to_string(pos))
|
||||
end,
|
||||
})
|
||||
local get_recipe = function ( inv )
|
||||
local result, needed, input
|
||||
needed = inv:get_list( 'rec' )
|
||||
|
||||
result, input = minetest.get_craft_result( {
|
||||
method = 'normal',
|
||||
width = 3,
|
||||
items = needed
|
||||
})
|
||||
|
||||
local totalneed = {}
|
||||
|
||||
if result.item:is_empty() then
|
||||
result = nil
|
||||
else
|
||||
result = result.item
|
||||
for _, item in ipairs( needed ) do
|
||||
if item ~= nil and not item:is_empty() and not inv:contains_item( 'src', item ) then
|
||||
result = nil
|
||||
break
|
||||
end
|
||||
if item ~= nil and not item:is_empty() then
|
||||
if totalneed[item:get_name()] == nil then
|
||||
totalneed[item:get_name()] = 1
|
||||
else
|
||||
totalneed[item:get_name()] = totalneed[item:get_name()] + 1
|
||||
end
|
||||
end
|
||||
end
|
||||
for name, number in pairs( totalneed ) do
|
||||
local totallist = inv:get_list( 'src' )
|
||||
for i, srcitem in pairs( totallist ) do
|
||||
if srcitem:get_name() == name then
|
||||
local taken = srcitem:take_item( number )
|
||||
number = number - taken:get_count()
|
||||
totallist[i] = srcitem
|
||||
end
|
||||
if number <= 0 then
|
||||
break
|
||||
end
|
||||
end
|
||||
if number > 0 then
|
||||
result = nil
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return needed, input, result
|
||||
end
|
||||
|
||||
minetest.register_abm( {
|
||||
nodenames = { 'castle:workbench' },
|
||||
interval = 5,
|
||||
chance = 1,
|
||||
action = function ( pos, node )
|
||||
local meta = minetest.get_meta( pos )
|
||||
local inv = meta:get_inventory()
|
||||
local result, newinput, needed
|
||||
if not inv:is_empty( 'src' ) then
|
||||
-- Check for a valid recipe and sufficient resources to craft it
|
||||
needed, newinput, result = get_recipe( inv )
|
||||
if result ~= nil and inv:room_for_item( 'dst', result ) then
|
||||
inv:add_item( 'dst', result )
|
||||
for i, item in pairs( needed ) do
|
||||
if item ~= nil and item ~= '' then
|
||||
inv:remove_item( 'src', ItemStack( item ) )
|
||||
end
|
||||
if newinput[i] ~= nil and not newinput[i]:is_empty() then
|
||||
inv:add_item( 'src', newinput[i] )
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
} )
|
||||
|
||||
local function has_locked_chest_privilege(meta, player)
|
||||
if player:get_player_name() ~= meta:get_string("owner") then
|
||||
return false
|
||||
end
|
||||
return true
|
||||
end
|
||||
|
||||
minetest.register_craft({
|
||||
output = "castle:workbench",
|
||||
recipe = {
|
||||
{"default:steel_ingot","default:steel_ingot","default:steel_ingot"},
|
||||
{"default:wood", "default:wood","default:steel_ingot"},
|
||||
{"default:tree", "default:tree","default:steel_ingot"},
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_node("castle:dungeon_stone", {
|
||||
description = "Dungeon Stone",
|
||||
drawtype = "normal",
|
||||
tiles = {"castle_dungeon_stone.png"},
|
||||
groups = {cracky=2},
|
||||
paramtype = "light",
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "castle:dungeon_stone",
|
||||
recipe = {
|
||||
{"default:stonebrick", "default:obsidian"},
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "castle:dungeon_stone",
|
||||
recipe = {
|
||||
{"default:stonebrick"},
|
||||
{"default:obsidian"},
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_node("castle:crate", {
|
||||
description = "Crate",
|
||||
drawtype = "normal",
|
||||
tiles = {"castle_crate_top.png","castle_crate_top.png","castle_crate.png","castle_crate.png","castle_crate.png","castle_crate.png"},
|
||||
groups = {choppy=3},
|
||||
sounds = default.node_sound_wood_defaults(),
|
||||
paramtype = "light",
|
||||
on_construct = function(pos)
|
||||
local meta = minetest.get_meta(pos)
|
||||
meta:set_string("formspec",
|
||||
"size[8,9]"..
|
||||
default.gui_bg ..
|
||||
default.gui_bg_img ..
|
||||
default.gui_slots ..
|
||||
"list[current_name;main;0,0;8,5;]"..
|
||||
"list[current_player;main;0,5;8,4;]")
|
||||
meta:set_string("infotext", "Crate")
|
||||
local inv = meta:get_inventory()
|
||||
inv:set_size("main", 8*4)
|
||||
end,
|
||||
can_dig = function(pos,player)
|
||||
local meta = minetest.get_meta(pos);
|
||||
local inv = meta:get_inventory()
|
||||
return inv:is_empty("main")
|
||||
end,
|
||||
on_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player)
|
||||
minetest.log("action", player:get_player_name()..
|
||||
" moves stuff in crate at "..minetest.pos_to_string(pos))
|
||||
end,
|
||||
on_metadata_inventory_put = function(pos, listname, index, stack, player)
|
||||
minetest.log("action", player:get_player_name()..
|
||||
" moves stuff to crate at "..minetest.pos_to_string(pos))
|
||||
end,
|
||||
on_metadata_inventory_take = function(pos, listname, index, stack, player)
|
||||
minetest.log("action", player:get_player_name()..
|
||||
" takes stuff from crate at "..minetest.pos_to_string(pos))
|
||||
end,
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "castle:crate",
|
||||
recipe = {
|
||||
{"default:wood", "default:wood", "default:wood"},
|
||||
{"default:wood", "default:steel_ingot", "default:wood"},
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_node("castle:bound_straw", {
|
||||
description = "Bound Straw",
|
||||
drawtype = "normal",
|
||||
tiles = {"castle_straw_bale.png"},
|
||||
groups = {choppy=4, flammable=1, oddly_breakable_by_hand=3},
|
||||
sounds = default.node_sound_leaves_defaults(),
|
||||
paramtype = "light",
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "castle:bound_straw",
|
||||
recipe = {
|
||||
{"castle:straw", "castle:ropes"},
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_node("castle:pavement_brick", {
|
||||
description = "Paving Stone",
|
||||
drawtype = "normal",
|
||||
tiles = {"castle_pavement_brick.png"},
|
||||
groups = {cracky=2},
|
||||
paramtype = "light",
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "castle:pavement_brick 4",
|
||||
recipe = {
|
||||
{"default:stone", "default:cobble"},
|
||||
{"default:cobble", "default:stone"},
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_node("castle:light",{
|
||||
drawtype = "glasslike",
|
||||
description = "Light Block",
|
||||
sunlight_propagates = true,
|
||||
light_source = 14,
|
||||
tiles = {"castle_street_light.png"},
|
||||
groups = {cracky=2},
|
||||
sounds = default.node_sound_glass_defaults(),
|
||||
paramtype = "light",
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "castle:light",
|
||||
recipe = {
|
||||
{"default:stick", "default:glass", "default:stick"},
|
||||
{"default:glass", "default:torch", "default:glass"},
|
||||
{"default:stick", "default:glass", "default:stick"},
|
||||
}
|
||||
})
|
||||
|
||||
if minetest.get_modpath("moreblocks") then
|
||||
stairsplus:register_all("castle", "dungeon_stone", "castle:dungeon_stone", {
|
||||
description = "Dungeon Stone",
|
||||
tiles = {"castle_dungeon_stone.png"},
|
||||
groups = {cracky=2, not_in_creative_inventory=1},
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
sunlight_propagates = true,
|
||||
})
|
||||
|
||||
stairsplus:register_all("castle", "pavement_brick", "castle:pavement_brick", {
|
||||
description = "Pavement Brick",
|
||||
tiles = {"castle_pavement_brick.png"},
|
||||
groups = {cracky=2, not_in_creative_inventory=1},
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
sunlight_propagates = true,
|
||||
})
|
||||
|
||||
else
|
||||
stairs.register_stair_and_slab("dungeon_stone", "castle:dungeon_stone",
|
||||
{cracky=2},
|
||||
{"castle_dungeon_stone.png"},
|
||||
"Dungeon Stone Stair",
|
||||
"Dungeon Stone Slab",
|
||||
default.node_sound_stone_defaults()
|
||||
)
|
||||
|
||||
stairs.register_stair_and_slab("pavement_brick", "castle:pavement_brick",
|
||||
{cracky=2},
|
||||
{"castle_pavement_brick.png"},
|
||||
"Castle Pavement Stair",
|
||||
"Castle Pavement Slab",
|
||||
default.node_sound_stone_defaults()
|
||||
)
|
||||
end
|
||||
|
||||
minetest.register_node( "castle:chandelier", {
|
||||
drawtype = "plantlike",
|
||||
description = "Chandelier",
|
||||
paramtype = "light",
|
||||
wield_image = "castle_chandelier_wield.png",
|
||||
inventory_image = "castle_chandelier_wield.png",
|
||||
groups = {cracky=2},
|
||||
sounds = default.node_sound_glass_defaults(),
|
||||
sunlight_propagates = true,
|
||||
light_source = 14,
|
||||
tiles = {
|
||||
{
|
||||
name = "castle_chandelier.png",
|
||||
animation = {
|
||||
type = "vertical_frames",
|
||||
aspect_w = 16,
|
||||
aspect_h = 16,
|
||||
length = 1.0
|
||||
},
|
||||
},
|
||||
},
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{0.35,-0.375,0.35,-0.35,0.5,-0.35},
|
||||
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
minetest.register_node( "castle:chandelier_chain", {
|
||||
drawtype = "plantlike",
|
||||
description = "Chandelier Chain",
|
||||
paramtype = "light",
|
||||
wield_image = "castle_chandelier_chain.png",
|
||||
inventory_image = "castle_chandelier_chain.png",
|
||||
groups = {cracky=2},
|
||||
sounds = default.node_sound_glass_defaults(),
|
||||
sunlight_propagates = true,
|
||||
tiles = {"castle_chandelier_chain.png"},
|
||||
selection_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{0.1,-0.5,0.1,-0.1,0.5,-0.1},
|
||||
|
||||
},
|
||||
},
|
||||
})
|
||||
|
@ -73,7 +73,10 @@ minetest.register_node("castle_tapestries:tapestry", {
|
||||
type = "wallmounted",
|
||||
wall_side = {-0.5,-0.5,0.4375,0.5,1.5,0.5},
|
||||
},
|
||||
after_place_node = unifieddyes.fix_rotation_nsew,
|
||||
after_place_node = function(pos, placer, itemstack, pointed_thing)
|
||||
unifieddyes.fix_rotation_nsew(pos, placer, itemstack, pointed_thing)
|
||||
unifieddyes.recolor_on_place(pos, placer, itemstack, pointed_thing)
|
||||
end,
|
||||
after_dig_node = unifieddyes.after_dig_node,
|
||||
on_rotate = unifieddyes.fix_after_screwdriver_nsew
|
||||
})
|
||||
@ -103,7 +106,10 @@ minetest.register_node("castle_tapestries:tapestry_long", {
|
||||
type = "wallmounted",
|
||||
wall_side = {-0.5,-0.5,0.4375,0.5,2.5,0.5},
|
||||
},
|
||||
after_place_node = unifieddyes.fix_rotation_nsew,
|
||||
after_place_node = function(pos, placer, itemstack, pointed_thing)
|
||||
unifieddyes.fix_rotation_nsew(pos, placer, itemstack, pointed_thing)
|
||||
unifieddyes.recolor_on_place(pos, placer, itemstack, pointed_thing)
|
||||
end,
|
||||
after_dig_node = unifieddyes.after_dig_node,
|
||||
on_rotate = unifieddyes.fix_after_screwdriver_nsew
|
||||
})
|
||||
@ -133,7 +139,10 @@ minetest.register_node("castle_tapestries:tapestry_very_long", {
|
||||
type = "wallmounted",
|
||||
wall_side = {-0.5,-0.5,0.4375,0.5,3.5,0.5},
|
||||
},
|
||||
after_place_node = unifieddyes.fix_rotation_nsew,
|
||||
after_place_node = function(pos, placer, itemstack, pointed_thing)
|
||||
unifieddyes.fix_rotation_nsew(pos, placer, itemstack, pointed_thing)
|
||||
unifieddyes.recolor_on_place(pos, placer, itemstack, pointed_thing)
|
||||
end,
|
||||
after_dig_node = unifieddyes.after_dig_node,
|
||||
on_rotate = unifieddyes.fix_after_screwdriver_nsew
|
||||
})
|
||||
|
@ -158,6 +158,7 @@ minetest.register_node("coloredwood:wood_block", {
|
||||
sunlight_propagates = false,
|
||||
groups = {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=2, not_in_creative_inventory=1, ud_param2_colorable = 1},
|
||||
sounds = default.node_sound_wood_defaults(),
|
||||
after_place_node = unifieddyes.recolor_on_place,
|
||||
after_dig_node = unifieddyes.after_dig_node,
|
||||
drop = "default:wood"
|
||||
})
|
||||
@ -180,6 +181,11 @@ for _, color in ipairs(coloredwood.hues_plus_greys) do
|
||||
paramtype = "light",
|
||||
paramtype2 = "colorfacedir",
|
||||
palette = "unifieddyes_palette_"..color.."s.png",
|
||||
after_place_node = function(pos, placer, itemstack, pointed_thing)
|
||||
print("after_place_node on "..minetest.get_node(pos).name)
|
||||
minetest.rotate_node(itemstack, placer, pointed_thing)
|
||||
unifieddyes.recolor_on_place(pos, placer, itemstack, pointed_thing)
|
||||
end,
|
||||
groups = {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=2, not_in_creative_inventory=1, ud_param2_colorable = 1},
|
||||
after_dig_node = unifieddyes.after_dig_node
|
||||
}
|
||||
@ -203,13 +209,19 @@ end
|
||||
minetest.override_item(i.name, {
|
||||
ud_replacement_node = "coloredwood:"..s1.."_wood_grey"..s2,
|
||||
paramtype2 = "colorfacedir",
|
||||
after_place_node = function(pos, placer, itemstack, pointed_thing)
|
||||
print("overridden after_place_node on "..i.name)
|
||||
minetest.rotate_node(itemstack, placer, pointed_thing)
|
||||
unifieddyes.recolor_on_place(pos, placer, itemstack, pointed_thing)
|
||||
end,
|
||||
on_place = minetest.item_place,
|
||||
groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2, wood = 1, not_in_creative_inventory=1, ud_param2_colorable = 1},
|
||||
})
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- fix drops for colored versions of stairsplus nodes
|
||||
-- fix drops and other stuff for colored versions of stairsplus nodes
|
||||
|
||||
for _, i in pairs(minetest.registered_nodes) do
|
||||
if string.find(i.name, "coloredwood:stair_")
|
||||
@ -222,6 +234,12 @@ end
|
||||
mname = string.gsub(i.name, "coloredwood:", "moreblocks:")
|
||||
local s1, s2 = is_stairsplus(mname, true)
|
||||
minetest.override_item(i.name, {
|
||||
after_place_node = function(pos, placer, itemstack, pointed_thing)
|
||||
print("overridden after_place_node on "..i.name)
|
||||
minetest.rotate_node(itemstack, placer, pointed_thing)
|
||||
unifieddyes.recolor_on_place(pos, placer, itemstack, pointed_thing)
|
||||
end,
|
||||
on_place = minetest.item_place,
|
||||
drop = "moreblocks:"..s1.."_wood"..s2
|
||||
})
|
||||
end
|
||||
@ -231,6 +249,7 @@ end
|
||||
minetest.override_item("default:wood", {
|
||||
palette = "unifieddyes_palette_extended.png",
|
||||
ud_replacement_node = "coloredwood:wood_block",
|
||||
after_place_node = unifieddyes.recolor_on_place,
|
||||
groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2, wood = 1, ud_param2_colorable = 1},
|
||||
})
|
||||
|
||||
@ -241,6 +260,7 @@ default.register_fence("coloredwood:fence", {
|
||||
palette = "unifieddyes_palette_extended.png",
|
||||
groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2, ud_param2_colorable = 1},
|
||||
sounds = default.node_sound_wood_defaults(),
|
||||
after_place_node = unifieddyes.recolor_on_place,
|
||||
after_dig_node = unifieddyes.after_dig_node,
|
||||
drop = "default:fence_wood",
|
||||
material = "default:wood"
|
||||
@ -249,6 +269,7 @@ default.register_fence("coloredwood:fence", {
|
||||
minetest.override_item("default:fence_wood", {
|
||||
palette = "unifieddyes_palette_extended.png",
|
||||
ud_replacement_node = "coloredwood:fence",
|
||||
after_place_node = unifieddyes.recolor_on_place,
|
||||
groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2, ud_param2_colorable = 1}
|
||||
})
|
||||
|
||||
|
@ -149,13 +149,17 @@ local iclipfence_def = {
|
||||
if minetest.get_modpath("unifieddyes") then
|
||||
iclip_def.paramtype2 = "colorwallmounted"
|
||||
iclip_def.palette = "unifieddyes_palette_colorwallmounted.png"
|
||||
iclip_def.after_place_node = unifieddyes.fix_rotation
|
||||
iclip_def.after_place_node = function(pos, placer, itemstack, pointed_thing)
|
||||
unifieddyes.fix_rotation(pos, placer, itemstack, pointed_thing)
|
||||
unifieddyes.recolor_on_place(pos, placer, itemstack, pointed_thing)
|
||||
end
|
||||
iclip_def.after_dig_node = unifieddyes.after_dig_node
|
||||
iclip_def.groups = {choppy=1, snappy=1, oddly_breakable_by_hand=1, ud_param2_colorable = 1}
|
||||
|
||||
iclipfence_def.paramtype2 = "color"
|
||||
iclipfence_def.palette = "unifieddyes_palette_extended.png"
|
||||
iclipfence_def.on_construct = unifieddyes.on_construct
|
||||
iclipfence_def.after_place_node = unifieddyes.recolor_on_place
|
||||
iclipfence_def.after_dig_node = unifieddyes.after_dig_node
|
||||
iclipfence_def.groups = {fence=1, choppy=1, snappy=1, oddly_breakable_by_hand=1, ud_param2_colorable = 1}
|
||||
iclipfence_def.place_param2 = 171 -- medium amber, low saturation, closest color to default:wood
|
||||
|
@ -16,6 +16,7 @@ minetest.register_node("homedecor:bathroom_tiles_dark", {
|
||||
groups = {cracky=3, ud_param2_colorable = 1},
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
on_construct = unifieddyes.on_construct,
|
||||
after_place_node = unifieddyes.recolor_on_place,
|
||||
after_dig_node = unifieddyes.after_dig_node
|
||||
})
|
||||
|
||||
@ -34,6 +35,7 @@ minetest.register_node("homedecor:bathroom_tiles_medium", {
|
||||
groups = {cracky=3, ud_param2_colorable = 1},
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
on_construct = unifieddyes.on_construct,
|
||||
after_place_node = unifieddyes.recolor_on_place,
|
||||
after_dig_node = unifieddyes.after_dig_node
|
||||
})
|
||||
|
||||
@ -52,6 +54,7 @@ minetest.register_node("homedecor:bathroom_tiles_light", {
|
||||
groups = {cracky=3, ud_param2_colorable = 1},
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
on_construct = unifieddyes.on_construct,
|
||||
after_place_node = unifieddyes.recolor_on_place,
|
||||
after_dig_node = unifieddyes.after_dig_node
|
||||
})
|
||||
|
||||
|
@ -52,11 +52,13 @@ homedecor.register("bed_regular", {
|
||||
on_rotate = screwdriver.disallow,
|
||||
after_place_node = function(pos, placer, itemstack, pointed_thing)
|
||||
unifieddyes.fix_rotation_nsew(pos, placer, itemstack, pointed_thing)
|
||||
unifieddyes.recolor_on_place(pos, placer, itemstack, pointed_thing)
|
||||
if not placer:get_player_control().sneak then
|
||||
return homedecor.bed_expansion(pos, placer, itemstack, pointed_thing)
|
||||
end
|
||||
end,
|
||||
after_dig_node = function(pos)
|
||||
after_dig_node = function(pos, oldnode, oldmetadata, digger)
|
||||
unifieddyes.after_dig_node(pos, oldnode, oldmetadata, digger)
|
||||
homedecor.unextend_bed(pos)
|
||||
end,
|
||||
on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
|
||||
@ -91,7 +93,9 @@ homedecor.register("bed_extended", {
|
||||
sounds = default.node_sound_wood_defaults(),
|
||||
expand = { forward = "air" },
|
||||
on_rotate = screwdriver.disallow,
|
||||
after_dig_node = function(pos)
|
||||
after_place_node = unifieddyes.recolor_on_place,
|
||||
after_dig_node = function(pos, oldnode, oldmetadata, digger)
|
||||
unifieddyes.after_dig_node(pos, oldnode, oldmetadata, digger)
|
||||
homedecor.unextend_bed(pos)
|
||||
end,
|
||||
-- on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
|
||||
@ -123,10 +127,14 @@ homedecor.register("bed_kingsize", {
|
||||
node_box = kbed_cbox,
|
||||
sounds = default.node_sound_wood_defaults(),
|
||||
on_rotate = screwdriver.disallow,
|
||||
after_place_node = unifieddyes.fix_rotation_nsew,
|
||||
after_place_node = function(pos, placer, itemstack, pointed_thing)
|
||||
unifieddyes.fix_rotation_nsew(pos, placer, itemstack, pointed_thing)
|
||||
unifieddyes.recolor_on_place(pos, placer, itemstack, pointed_thing)
|
||||
end,
|
||||
after_dig_node = function(pos, oldnode, oldmetadata, digger)
|
||||
unifieddyes.after_dig_node(pos, oldnode, oldmetadata, digger)
|
||||
local inv = digger:get_inventory()
|
||||
if digger:get_player_control().sneak and inv:room_for_item("main", "bed_regular 1") then
|
||||
if digger:get_player_control().sneak and inv:room_for_item("main", "homedecor:bed_regular 2") then
|
||||
inv:remove_item("main", "homedecor:bed_kingsize 1")
|
||||
inv:add_item("main", "homedecor:bed_regular 2")
|
||||
end
|
||||
|
@ -81,7 +81,10 @@ homedecor.register("kitchen_chair_padded", {
|
||||
collision_box = kc_cbox,
|
||||
groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2, ud_param2_colorable = 1},
|
||||
sounds = default.node_sound_wood_defaults(),
|
||||
after_place_node = unifieddyes.fix_rotation_nsew,
|
||||
after_place_node = function(pos, placer, itemstack, pointed_thing)
|
||||
unifieddyes.fix_rotation_nsew(pos, placer, itemstack, pointed_thing)
|
||||
unifieddyes.recolor_on_place(pos, placer, itemstack, pointed_thing)
|
||||
end,
|
||||
after_dig_node = unifieddyes.after_dig_node,
|
||||
on_rotate = unifieddyes.fix_after_screwdriver_nsew,
|
||||
on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
|
||||
@ -105,7 +108,10 @@ homedecor.register("armchair", {
|
||||
groups = {snappy=3, ud_param2_colorable = 1},
|
||||
sounds = default.node_sound_wood_defaults(),
|
||||
node_box = ac_cbox,
|
||||
after_place_node = unifieddyes.fix_rotation_nsew,
|
||||
after_place_node = function(pos, placer, itemstack, pointed_thing)
|
||||
unifieddyes.fix_rotation_nsew(pos, placer, itemstack, pointed_thing)
|
||||
unifieddyes.recolor_on_place(pos, placer, itemstack, pointed_thing)
|
||||
end,
|
||||
after_dig_node = unifieddyes.after_dig_node,
|
||||
on_rotate = unifieddyes.fix_after_screwdriver_nsew,
|
||||
})
|
||||
|
@ -53,18 +53,8 @@ homedecor.wall_fdir_to_fwd = {
|
||||
{ -1, 0 },
|
||||
}
|
||||
|
||||
local placeholder_node = "homedecor:expansion_placeholder"
|
||||
minetest.register_node(placeholder_node, {
|
||||
description = S("Expansion placeholder (you hacker you!)"),
|
||||
groups = { not_in_creative_inventory=1 },
|
||||
drawtype = "airlike",
|
||||
paramtype = "light",
|
||||
walkable = false,
|
||||
selection_box = { type = "fixed", fixed = { 0, 0, 0, 0, 0, 0 } },
|
||||
is_ground_content = false,
|
||||
sunlight_propagates = true,
|
||||
buildable_to = false,
|
||||
})
|
||||
local placeholder_node = "air"
|
||||
minetest.register_alias("homedecor:expansion_placeholder", "air")
|
||||
|
||||
--- select which node was pointed at based on it being known, not ignored, buildable_to
|
||||
-- returns nil if no node could be selected
|
||||
@ -94,7 +84,7 @@ local function is_buildable_to(placer_name, ...)
|
||||
end
|
||||
|
||||
-- place one or two nodes if and only if both can be placed
|
||||
local function stack(itemstack, placer, fdir, pos, def, pos2, node1, node2)
|
||||
local function stack(itemstack, placer, fdir, pos, def, pos2, node1, node2, pointed_thing)
|
||||
local placer_name = placer:get_player_name() or ""
|
||||
if is_buildable_to(placer_name, pos, pos2) then
|
||||
local lfdir = fdir or minetest.dir_to_facedir(placer:get_look_dir())
|
||||
@ -111,7 +101,7 @@ local function stack(itemstack, placer, fdir, pos, def, pos2, node1, node2)
|
||||
-- call after_place_node of the placed node if available
|
||||
local ctrl_node_def = minetest.registered_nodes[node1]
|
||||
if ctrl_node_def and ctrl_node_def.after_place_node then
|
||||
ctrl_node_def.after_place_node(pos, placer)
|
||||
ctrl_node_def.after_place_node(pos, placer, itemstack, pointed_thing)
|
||||
end
|
||||
|
||||
if not homedecor.expect_infinite_stacks then
|
||||
@ -140,7 +130,7 @@ function homedecor.stack_vertically(itemstack, placer, pointed_thing, node1, nod
|
||||
|
||||
local top_pos = { x=pos.x, y=pos.y+1, z=pos.z }
|
||||
|
||||
return stack(itemstack, placer, nil, pos, def, top_pos, node1, node2)
|
||||
return stack(itemstack, placer, nil, pos, def, top_pos, node1, node2, pointed_thing)
|
||||
end
|
||||
|
||||
-- Stack one door node above another
|
||||
@ -162,7 +152,7 @@ function homedecor.stack_wing(itemstack, placer, pointed_thing, node1, node2, no
|
||||
end
|
||||
|
||||
local top_pos = { x=pos.x, y=pos.y+1, z=pos.z }
|
||||
return stack(itemstack, placer, fdir, pos, def, top_pos, node1, node2)
|
||||
return stack(itemstack, placer, fdir, pos, def, top_pos, node1, node2, pointed_thing)
|
||||
end
|
||||
|
||||
function homedecor.stack_sideways(itemstack, placer, pointed_thing, node1, node2, dir)
|
||||
@ -177,13 +167,14 @@ function homedecor.stack_sideways(itemstack, placer, pointed_thing, node1, node2
|
||||
|
||||
local pos2 = { x = pos.x + fdir_transform[fdir+1][1], y=pos.y, z = pos.z + fdir_transform[fdir+1][2] }
|
||||
|
||||
return stack(itemstack, placer, fdir, pos, def, pos2, node1, node2)
|
||||
return stack(itemstack, placer, fdir, pos, def, pos2, node1, node2, pointed_thing)
|
||||
end
|
||||
|
||||
function homedecor.bed_expansion(pos, placer, itemstack, pointed_thing, trybunks)
|
||||
|
||||
local thisnode = minetest.get_node(pos)
|
||||
local fdir = thisnode.param2
|
||||
local param2 = thisnode.param2
|
||||
local fdir = param2 % 8
|
||||
|
||||
local fxd = homedecor.wall_fdir_to_fwd[fdir+1][1]
|
||||
local fzd = homedecor.wall_fdir_to_fwd[fdir+1][2]
|
||||
@ -219,14 +210,23 @@ function homedecor.bed_expansion(pos, placer, itemstack, pointed_thing, trybunks
|
||||
local rightpos = {x=pos.x+rxd, y=pos.y, z=pos.z+rzd}
|
||||
local rightnode = minetest.get_node(rightpos)
|
||||
|
||||
local inv = placer:get_inventory()
|
||||
local lastdye = unifieddyes.last_used_dye[placer_name]
|
||||
|
||||
if leftnode.name == "homedecor:bed_regular" then
|
||||
local newname = string.gsub(thisnode.name, "_regular", "_kingsize")
|
||||
local meta = minetest.get_meta(leftpos)
|
||||
minetest.set_node(pos, {name = "air"})
|
||||
minetest.set_node(leftpos, { name = newname, param2 = fdir})
|
||||
minetest.set_node(leftpos, { name = newname, param2 = param2})
|
||||
meta:set_string("dye", lastdye)
|
||||
inv:add_item("main", lastdye)
|
||||
elseif rightnode.name == "homedecor:bed_regular" then
|
||||
local newname = string.gsub(thisnode.name, "_regular", "_kingsize")
|
||||
local meta = minetest.get_meta(rightpos)
|
||||
minetest.set_node(rightpos, {name = "air"})
|
||||
minetest.set_node(pos, { name = newname, param2 = fdir})
|
||||
minetest.set_node(pos, { name = newname, param2 = param2})
|
||||
meta:set_string("dye", lastdye)
|
||||
inv:add_item("main", lastdye)
|
||||
end
|
||||
|
||||
local toppos = {x=pos.x, y=pos.y+1.0, z=pos.z}
|
||||
@ -234,18 +234,26 @@ function homedecor.bed_expansion(pos, placer, itemstack, pointed_thing, trybunks
|
||||
|
||||
if trybunks and is_buildable_to(placer_name, toppos, topposfwd) then
|
||||
local newname = string.gsub(thisnode.name, "_regular", "_extended")
|
||||
minetest.set_node(toppos, { name = thisnode.name, param2 = fdir})
|
||||
minetest.set_node(pos, { name = newname, param2 = fdir})
|
||||
local newparam2 = param2 % 8
|
||||
if inv:contains_item("main", lastdye) then
|
||||
minetest.set_node(toppos, { name = thisnode.name, param2 = param2})
|
||||
inv:remove_item("main", lastdye.." 1")
|
||||
else
|
||||
minetest.set_node(toppos, { name = thisnode.name, param2 = newparam2})
|
||||
minetest.chat_send_player(placer_name, "Ran out of "..lastdye..", using neutral color.")
|
||||
unifieddyes.last_used_dye[placer_name] = nil
|
||||
end
|
||||
minetest.swap_node(pos, { name = newname, param2 = param2})
|
||||
itemstack:take_item()
|
||||
end
|
||||
end
|
||||
|
||||
function homedecor.unextend_bed(pos)
|
||||
local bottomnode = minetest.get_node({x=pos.x, y=pos.y-1.0, z=pos.z})
|
||||
local fdir = bottomnode.param2
|
||||
local param2 = bottomnode.param2
|
||||
if bottomnode.name == "homedecor:bed_extended" then
|
||||
local newname = string.gsub(bottomnode.name, "_extended", "_regular")
|
||||
minetest.set_node({x=pos.x, y=pos.y-1.0, z=pos.z}, { name = newname, param2 = fdir})
|
||||
minetest.swap_node({x=pos.x, y=pos.y-1.0, z=pos.z}, { name = newname, param2 = param2})
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -35,7 +35,10 @@ minetest.register_node("homedecor:glowlight_half", {
|
||||
groups = { snappy = 3, ud_param2_colorable = 1 },
|
||||
light_source = default.LIGHT_MAX,
|
||||
sounds = default.node_sound_glass_defaults(),
|
||||
after_place_node = unifieddyes.fix_rotation,
|
||||
after_place_node = function(pos, placer, itemstack, pointed_thing)
|
||||
unifieddyes.fix_rotation(pos, placer, itemstack, pointed_thing)
|
||||
unifieddyes.recolor_on_place(pos, placer, itemstack, pointed_thing)
|
||||
end,
|
||||
after_dig_node = unifieddyes.after_dig_node
|
||||
})
|
||||
|
||||
@ -63,7 +66,10 @@ minetest.register_node("homedecor:glowlight_quarter", {
|
||||
groups = { snappy = 3, ud_param2_colorable = 1 },
|
||||
light_source = default.LIGHT_MAX-1,
|
||||
sounds = default.node_sound_glass_defaults(),
|
||||
after_place_node = unifieddyes.fix_rotation,
|
||||
after_place_node = function(pos, placer, itemstack, pointed_thing)
|
||||
unifieddyes.fix_rotation(pos, placer, itemstack, pointed_thing)
|
||||
unifieddyes.recolor_on_place(pos, placer, itemstack, pointed_thing)
|
||||
end,
|
||||
after_dig_node = unifieddyes.after_dig_node
|
||||
})
|
||||
|
||||
@ -91,7 +97,10 @@ minetest.register_node("homedecor:glowlight_small_cube", {
|
||||
groups = { snappy = 3, ud_param2_colorable = 1 },
|
||||
light_source = default.LIGHT_MAX-1,
|
||||
sounds = default.node_sound_glass_defaults(),
|
||||
after_place_node = unifieddyes.fix_rotation,
|
||||
after_place_node = function(pos, placer, itemstack, pointed_thing)
|
||||
unifieddyes.fix_rotation(pos, placer, itemstack, pointed_thing)
|
||||
unifieddyes.recolor_on_place(pos, placer, itemstack, pointed_thing)
|
||||
end,
|
||||
after_dig_node = unifieddyes.after_dig_node
|
||||
})
|
||||
|
||||
@ -429,6 +438,7 @@ local function reg_lamp(suffix, nxt, light, brightness)
|
||||
minetest.set_node(pos, node)
|
||||
end,
|
||||
on_construct = unifieddyes.on_construct,
|
||||
after_place_node = unifieddyes.recolor_on_place,
|
||||
after_dig_node = unifieddyes.after_dig_node
|
||||
})
|
||||
|
||||
@ -459,8 +469,9 @@ local function reg_lamp(suffix, nxt, light, brightness)
|
||||
minetest.set_node(pos, node)
|
||||
end,
|
||||
on_construct = unifieddyes.on_construct,
|
||||
after_place_node = unifieddyes.recolor_on_place,
|
||||
after_dig_node = unifieddyes.after_dig_node,
|
||||
expand = { top="placeholder" },
|
||||
expand = { top="air" },
|
||||
})
|
||||
|
||||
-- for old maps that had the original 3dforniture mod
|
||||
@ -497,7 +508,10 @@ homedecor.register("desk_lamp", {
|
||||
node_box = dlamp_cbox,
|
||||
walkable = false,
|
||||
groups = {snappy=3, ud_param2_colorable = 1},
|
||||
after_place_node = unifieddyes.fix_rotation_nsew,
|
||||
after_place_node = function(pos, placer, itemstack, pointed_thing)
|
||||
unifieddyes.fix_rotation_nsew(pos, placer, itemstack, pointed_thing)
|
||||
unifieddyes.recolor_on_place(pos, placer, itemstack, pointed_thing)
|
||||
end,
|
||||
after_dig_node = unifieddyes.after_dig_node,
|
||||
on_rotate = unifieddyes.fix_after_screwdriver_nsew
|
||||
})
|
||||
|