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)
This commit is contained in:
Vanessa Ezekowitz 2017-03-18 06:53:09 -04:00
parent 907e8bf6a6
commit b9d0674640
110 changed files with 253 additions and 2919 deletions

View File

@ -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

View File

@ -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,
})

View File

@ -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.

View File

@ -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

View File

@ -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

View File

@ -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'},
}
})

View File

@ -1,10 +0,0 @@
default
stairs
doors
farming
unifieddyes
building_blocks?
asphalt?
streets?
moreblocks?
xpanes?

View File

@ -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.

View File

@ -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

View File

@ -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")

View File

@ -1 +0,0 @@
name = castle

View File

@ -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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 157 B

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

View File

@ -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

View File

@ -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"},
}
})

Binary file not shown.

Before

Width:  |  Height:  |  Size: 205 KiB

View File

@ -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"},
}
})

View File

@ -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/
------------------

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -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
})

View File

@ -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
--------------------------------------------

Binary file not shown.

Before

Width:  |  Height:  |  Size: 358 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 360 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 169 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 316 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 696 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 682 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 691 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 344 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 395 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 146 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 516 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 280 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 295 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 878 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 543 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 70 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 618 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 522 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 537 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 374 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 522 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 186 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 253 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 411 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 112 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 185 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 109 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 184 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 700 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 342 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 286 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 262 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 278 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 563 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 620 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 520 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 701 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 536 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 94 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 91 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 101 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 261 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 151 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 214 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 660 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 756 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 465 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 323 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 383 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 369 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 391 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 342 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 336 B

View File

@ -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},
},
},
})

View File

@ -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
})

View File

@ -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}
})

View File

@ -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

View File

@ -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
})

View File

@ -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

View File

@ -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,
})

View File

@ -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

View File

@ -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
})

Some files were not shown because too many files have changed in this diff Show More