Compare commits

...

82 Commits

Author SHA1 Message Date
fc781daca0 get rid of old 89->256 color LBMs 2018-09-12 23:03:41 -04:00
5b631142aa take colored banisted "pseudo nodes" out of creative inv 2018-09-12 22:43:05 -04:00
eb6089a03e make wooden banister colorable via Unified Dyes 2018-09-12 20:34:11 -04:00
41455647a2 lrfurn i18n fix 2018-09-11 06:19:31 -04:00
55fea4f6ca make doors and gates respond to vertical mesecon two nodes below
using pressure plate rules
2018-08-28 23:26:08 -04:00
a8729575ab switch to colored itemstacks
with full crafting recipes
(requires Unified Dyes commit 2a816534 or later)

known issues:

standing lamp bypasses vertical stack check
bed expansion changes the color of the first-placed bed
to match the second when creating a king bed.
2018-08-22 05:09:55 -04:00
9e69a6db73 more set_int fixes 2018-06-11 14:06:37 -04:00
54ce73b616 fix the fix ;) 2018-06-07 10:57:19 -04:00
8a5bc0e038 fix #2 2018-06-07 10:22:52 -04:00
d6ff137657 Add moreblocks:slab_wood for table_lamp (#418) 2018-05-20 00:49:02 -04:00
a4ca53cc05 fix players in bed count for multiplayer (#404) 2018-05-14 13:28:36 -04:00
017326dbed replace print with verbose logging (#409)
* remove debug log
2018-05-14 00:00:29 -04:00
31bf6b8c40 add translation for log message 2018-05-13 23:59:22 -04:00
b526ec1714 add disabled coin crafting logging 2018-05-13 23:59:22 -04:00
7e98534179 add prefix to settings key 2018-05-13 23:59:22 -04:00
8132cfc6f8 add setting disable_coin_crafting to make coins not available for crafting 2018-05-13 23:59:22 -04:00
Foz
39984c356b Resolve itemframe entity duplication Fixes #405.
The ABM that replaces deleted entities in itemframes and pedestals can sometimes add multiple copies of each entity due to a race condition in which the ABM runs either before the server loads the entities or after they have been removed due to the map block being unloaded.  Due to limitations in determining when all entities have been loaded, this race condition cannot be fully avoided.  This commit converts the ABM, which ran every fifteen seconds, into and LBM that runs on every load and adds a check to the entities when they are loaded such that only the first loaded entity will be kept and any additional copies delete themselves during the loading process.
2018-05-13 09:34:18 -04:00
eb2b3d7980 add optional support for skinsdb in wardrobe
- All skins are registered in skinsdb, including skins format
- But the skins are not in inventory skins list, still available trough wardrobe only
- If selected, the skins metadata and preview is shown in inventory
- Use skinsdb method to set the skin
- Note: skinsdb manages the 3d_armor if both mods found
2018-05-13 09:31:27 -04:00
08bbd0f592 Computer Remove local 2018-05-11 09:20:44 -04:00
3597c2c1aa Proper handle stairs groups
fix #410
2018-05-11 09:09:25 -04:00
5db791deb4 refactor code 2018-05-11 09:02:45 -04:00
8ccbe6abc4 add skin_updates table (somehow got lost) 2018-05-11 09:02:45 -04:00
cafba3bc53 load skin when player has joined the game 2018-05-11 09:02:45 -04:00
ac10702849 prepare code to be reused later 2018-05-11 09:02:45 -04:00
fe2acaaa1e replace player_set_textures with new API (fallback to old API) 2018-05-11 09:02:45 -04:00
bfda7c49fd fix ceiling lamp recipes (#403)
There is no homedecor:glowlight_small, homedecor:glowlight_small_cube only
2018-02-13 13:31:01 -05:00
4d9c4c2410 Update init.lua (#400)
tweak sizes of chain selection boxes and adjust light levels of chandeliers.
2017-12-21 01:45:30 -05:00
1471a0cba9 depend on mt_game 'creative' mod
as some of its functions are used to check if players have creative mode
2017-12-15 20:10:42 -05:00
eabd237252 Luacheck: make this a bit more useful by adding common symbols. 2017-12-06 21:16:40 -08:00
9d4ac9bd9a Fix books: enforce book ownership, strict access checking.
Fixes #399
2017-12-06 21:15:58 -08:00
5efa9af1b7 Building_blocks Alias (#398)
Alias for old node Tar cut by moreblocks.
2017-11-20 12:26:57 -05:00
7d40724d39 Update Malay translation (#396)
* Update Malay translation
2017-11-13 22:22:45 -05:00
5e6307ea3a Change sounds for the "Itemframe" and "Pedestal (#395) 2017-09-29 23:39:15 -04:00
8882ab8e19 Building blocks add glass for stairplus (#394)
* Building Blocks Add all glass for stairsplus

-Smoothglass
-WoodGlass

(plus some style fixes)
2017-09-29 11:58:55 -04:00
3021248538 Building Blocks add sound (#393)
- Grate
- Firefplace
- Roofing
2017-09-29 01:05:53 -04:00
4eaf265e65 allow sleeping in beds!
fixed by using some code from mt_game, with changes
2017-09-29 01:03:05 -04:00
228e25e123 get rid of inventorycube() calls
they're obsolete and annoying in combo with current inventory hover animations
2017-09-28 06:22:53 -04:00
ddcb08fe62 Building Blocks node_stairs layout
- Glasslike
- RailLike
- Nodebox
- Node
And fix one tabulation with fakegrass.
2017-09-27 18:47:58 +02:00
972d30dd38 Building Blocks layout all file 2017-09-27 17:05:20 +02:00
cc9276841e Building Blocks Delete return to the line 2017-09-27 16:26:44 +02:00
f2f49a3aac Building Blocks Create file recipes 2017-09-27 16:02:54 +02:00
b92c9e065b Building Blocks Create file others 2017-09-27 15:58:04 +02:00
ea77ac32ea Building Blocks Create file node_stairs 2017-09-27 15:44:33 +02:00
14697ef71b Building Blocks create file alias 2017-09-27 15:29:20 +02:00
9921efeeef Building Blocks Revert capital lettre
45-48 and 352-353 : Marble and Tar not use capital lettre for stairs.
Alias and node name revert.
2017-09-27 14:14:40 +02:00
87e3c9f9ce Building Blocks add alias for moreblocks 2017-09-26 17:19:51 +02:00
095e34ad7f Building Blocks Add Alias for bbstairs 2017-09-26 16:48:20 +02:00
6c9da755f3 Building Blocks moreblocks and stairs
Simplify integration moreblocks
Replace bb stairs by Stairs
2017-09-26 15:43:47 +02:00
c786e3ae05 Building Blocks simplify name for stairs 2017-09-26 15:17:16 +02:00
48be7ddef1 brain-o in banister placement. fixes #388
there was no reason to explicitly check whether to place a horizontal
next to another horizontal after all the other checks were done.
2017-09-25 23:53:18 -04:00
2c5be0735a Russian locale (#386)
* Russian locale

* Russian locale. Plurals fix
2017-08-21 16:57:43 -04:00
36e5e319e3 add description for "Ice Fire" (#385) 2017-08-20 11:52:45 -04:00
57b988c185 clarify desc for "large" shrubbery 2017-08-13 14:33:45 -04:00
d6f660b72a clarify desc for "striped" deck chair 2017-08-13 14:33:45 -04:00
7b4db2fc5a clarify desc for "open" curtains 2017-08-13 14:33:45 -04:00
b45ace825d Update German translation (#378) 2017-08-13 14:27:43 -04:00
9d2704c0c2 rework a bit to work better with minetest_game 0.4.16
eliminates flint and steel (aliased to mt_game fire:flint_and_steel)
eliminates fake_fire:fake_fire (aliased to mt_game fire:permanent_flame)

mt_game already provides a "fake" fire in the form of a "permanent flame", strike a coal block with flint/steel to get it.

modifies default ice block so that it can be "ignited" (ice fire on top) with mt_game flint/steel

Fire mod must be enabled. However, fire damage is NOT required.
2017-08-12 18:21:50 -04:00
d7a4054dda fix take-coin handling for soda machine 2017-08-12 18:00:09 -04:00
f03e71397a get rid of last vestages of "infinite stacks" special handling
just checks for creative mode/priv directly instead, as needed.
2017-08-12 17:52:29 -04:00
6349c53824 update recipes for stained glass 2017-08-12 17:07:51 -04:00
c60607aa0d use a nodebox for building_blocks BWtile 2017-08-12 16:52:31 -04:00
78ec2119f6 give unique (if generic) descriptions to picture frames 2017-08-12 16:43:42 -04:00
c247318dd8 Update french, german, portuguese (and pt_BR) translations (#380)
* add some translatable strings

* updated translations
add option --sort-by-file to updatepo.sh

* Updated de, pt, pt_BR translations
from pull requests #378 (Wuzzy) & #379 (afmachado)

pt.po and pt_BR.po are the same but pt.po is usable by any portuguese speaking people, not only brazilian ones

* improved french translation
2017-08-12 16:30:46 -04:00
9693d9dd46 Disable sleeping in beds (again) 2017-06-25 03:12:23 -04:00
23d1365939 fix wrongly-colored plasma ball base 2017-06-25 03:12:18 -04:00
f391bc59b0 use texture overlays on lava lamps
(water is now blue like it used to be)
2017-06-25 03:12:13 -04:00
790557f6ce Make the white glowlight overlays more subtle
(they're too bright against the darker colors e.g. green)
2017-06-25 03:12:08 -04:00
c9c4214bff use static hardware coloring for books,
use soft overlays for cover trim,
2017-06-25 03:12:03 -04:00
914aee41fe fix book models
(get rid of redundant overlay polys)
2017-06-25 03:11:58 -04:00
ec83040d10 use soft overlays for bathroom tiles instead of the two-layer mesh node 2017-06-25 03:11:52 -04:00
9bb4222aa5 use soft overlays to re-create the subtle white glow that glowlights used to have
before param2 coloring went in.
2017-06-25 03:11:46 -04:00
67ddc87d2c Re-enable sleeping in beds 2017-06-25 03:11:41 -04:00
970636571e missed an alias for open books 2017-06-25 03:11:37 -04:00
4ee5b6b87f revert a599b041d4 (param2 colorization of books)
The intention of this is to fix books in peoples' inventories that are
now inaccessible.  They can be placed, viewed, edited like normal now.

Side effect: all books that were already in-world and that have already
been converted to the param2 colorization before will be grey now, and
most will end up turned some wierd direction, but that can be fixed with
the screwdriver.

If you need to re-color one of the now-grey books, you'll need to craft
one of the desired color, place it, and copy and paste your text from
the grey book.

Newly-placed colored books will behave normally.
2017-06-25 03:11:31 -04:00
1f2676b8f6 use mesh node for cubical plasma lamp 2017-06-25 03:11:25 -04:00
ad4790f74c verify inbox owner when taking items 2017-06-25 03:11:19 -04:00
7925897748 Replace deprecated methods:
- 'setting_get' with 'settings:get'
- 'setting_getbool' with 'settings:get_bool'
2017-06-25 03:11:12 -04:00
459c02548e don't crash if placing bed on top of bed when not in auto-color mode. 2017-06-25 03:11:05 -04:00
1eb1e87f08 use unified dyes auto-colorization feature
also fixed some bugs in bed handling
also got rid of the old, obsolete "placeholder" node, aliased it to air.
2017-06-25 03:10:59 -04:00
27eae09d93 use unified dyes on_construct handler
to set 256-color palette meta key on place
for those nodes that use it
2017-06-25 03:10:53 -04:00
761b18c17e don't reference lrfurn chair colors in homedecor chair LBM
use a local copy instead
2017-06-25 02:29:53 -04:00
763bcb2e95 Make Wrought Iron Fence 2 recipe more generous
And remove double craft definition
2017-03-11 19:39:16 +01:00
71 changed files with 13583 additions and 9804 deletions

View File

@ -4,7 +4,9 @@ allow_defined_top = true
read_globals = {
"DIR_DELIM",
"minetest", "core",
"unpack",
"dump",
table = { fields = { "copy", "getn" } },
"vector", "nodeupdate",
"VoxelManip", "VoxelArea",
"PseudoRandom", "ItemStack",
@ -17,6 +19,7 @@ read_globals = {
"mesecon",
"unifieddyes",
"creative",
"homedecor_i18n",
}
globals = {

57
building_blocks/alias.lua Normal file
View File

@ -0,0 +1,57 @@
local S = homedecor_i18n.gettext
if minetest.get_modpath("moreblocks") or minetest.get_modpath("stairs") then
minetest.register_alias("building_blocks:slab_tar", "stairs:slab_Tar")
minetest.register_alias("building_blocks:stair_tar", "stairs:stair_Tar")
minetest.register_alias("building_blocks:slab_marble", "stairs:slab_Marble")
minetest.register_alias("building_blocks:stair_marble", "stairs:stair_Marble")
end
if minetest.get_modpath("moreblocks") then
stairsplus:register_alias_all("building_blocks", "tar", "building_blocks", "Tar")
stairsplus:register_alias_all("building_blocks", "marble", "building_blocks", "Marble")
for _, i in ipairs(stairsplus.shapes_list) do
local class = i[1]
local cut = i[2]
minetest.unregister_item("moreblocks:"..class.."tar"..cut)
minetest.register_alias("moreblocks:"..class.."tar"..cut, "building_blocks:"..class.."tar"..cut)
end
minetest.unregister_item("moreblocks:tar")
minetest.register_alias("moreblocks:tar", "building_blocks:Tar")
stairsplus:register_alias_all("moreblocks", "tar", "building_blocks", "Tar")
end
minetest.register_alias("adobe", "building_blocks:Adobe")
minetest.register_alias("fakegrass", "building_blocks:fakegrass")
minetest.register_alias("hardwood", "building_blocks:hardwood")
minetest.register_alias("tar_knife", "building_blocks:knife")
minetest.register_alias("marble", "building_blocks:Marble")
minetest.register_alias("building_blocks_roofing", "building_blocks:Roofing")
minetest.register_alias("sticks", "building_blocks:sticks")
minetest.register_alias("building_blocks:faggot", "building_blocks:sticks")
minetest.register_alias("tar", "building_blocks:Tar")
if not minetest.get_modpath("technic") then
minetest.register_node( ":technic:granite", {
description = S("Granite"),
tiles = { "technic_granite.png" },
is_ground_content = true,
groups = {cracky=1},
sounds = default.node_sound_stone_defaults(),
})
minetest.register_craft({
output = "technic:granite 9",
recipe = {
{ "group:tar_block", "group:marble", "group:tar_block" },
{ "group:marble", "group:tar_block", "group:marble" },
{ "group:tar_block", "group:marble", "group:tar_block" }
},
})
if minetest.get_modpath("moreblocks") then
stairsplus:register_all("technic", "granite", "technic:granite", {
description=S("Granite"),
groups={cracky=1, not_in_creative_inventory=1},
tiles={"technic_granite.png"},
})
end
end

View File

@ -1,3 +1,4 @@
default
homedecor_i18n
moreblocks?
stairs?

View File

@ -1,633 +1,7 @@
local S = homedecor_i18n.gettext
local modpath = minetest.get_modpath("building_blocks")
minetest.register_node("building_blocks:Adobe", {
tiles = {"building_blocks_Adobe.png"},
description = S("Adobe"),
is_ground_content = true,
groups = {crumbly=3},
sounds = default.node_sound_stone_defaults(),
})
minetest.register_node("building_blocks:Roofing", {
tiles = {"building_blocks_Roofing.png"},
is_ground_content = true,
description = S("Roof block"),
groups = {snappy=3},
})
minetest.register_craft({
output = 'building_blocks:terrycloth_towel 2',
recipe = {
{"farming:string", "farming:string", "farming:string"},
}
})
minetest.register_craft({
output = 'building_blocks:Tarmac_spread 4',
recipe = {
{"group:tar_block", "group:tar_block"},
}
})
minetest.register_craft({
output = 'building_blocks:gravel_spread 4',
recipe = {
{"default:gravel", "default:gravel", "default:gravel"},
}
})
minetest.register_craft({
output = 'building_blocks:brobble_spread 4',
recipe = {
{"default:brick", "default:cobble", "default:brick"},
}
})
minetest.register_craft({
output = 'building_blocks:Fireplace 1',
recipe = {
{"default:steel_ingot", "building_blocks:sticks", "default:steel_ingot"},
}
})
minetest.register_craft({
output = 'building_blocks:Adobe 3',
recipe = {
{"default:sand"},
{"default:clay"},
{"group:stick"},
}
})
minetest.register_craft({
output = 'building_blocks:Roofing 10',
recipe = {
{"building_blocks:Adobe", "building_blocks:Adobe"},
{"building_blocks:Adobe", "building_blocks:Adobe"},
}
})
minetest.register_craft({
output = 'building_blocks:BWtile 10',
recipe = {
{"group:marble", "group:tar_block"},
{"group:tar_block", "group:marble"},
}
})
minetest.register_craft({
output = 'building_blocks:grate 1',
recipe = {
{"default:steel_ingot", "default:steel_ingot"},
{"default:glass", "default:glass"},
}
})
minetest.register_craft({
output = 'building_blocks:woodglass 1',
recipe = {
{"default:wood"},
{"default:glass"},
}
})
minetest.register_craft({
output = 'building_blocks:hardwood 2',
recipe = {
{"default:wood", "default:junglewood"},
{"default:junglewood", "default:wood"},
}
})
minetest.register_craft({
output = 'building_blocks:hardwood 2',
recipe = {
{"default:junglewood", "default:wood"},
{"default:wood", "default:junglewood"},
}
})
if minetest.get_modpath("moreblocks") then
minetest.register_craft({
output = 'building_blocks:sticks 2',
recipe = {
{'group:stick', '' , 'group:stick'},
{'group:stick', 'group:stick', 'group:stick'},
{'group:stick', 'group:stick', 'group:stick'},
}
})
else
minetest.register_craft({
output = 'building_blocks:sticks',
recipe = {
{'group:stick', 'group:stick'},
{'group:stick', 'group:stick'},
}
})
end
minetest.register_craft({
output = 'default:stick 4',
recipe = {
{'building_blocks:sticks'},
}
})
minetest.register_craft({
output = 'building_blocks:fakegrass 2',
recipe = {
{'default:leaves'},
{"default:dirt"},
}
})
minetest.register_craft({
output = 'building_blocks:tar_base 4',
recipe = {
{"default:coal_lump", "default:gravel"},
{"default:gravel", "default:coal_lump"}
}
})
minetest.register_craft({
output = 'building_blocks:tar_base 4',
recipe = {
{"default:gravel", "default:coal_lump"},
{"default:coal_lump", "default:gravel"}
}
})
minetest.register_craft({
type = "cooking",
output = "building_blocks:smoothglass",
recipe = "default:glass"
})
minetest.register_node("building_blocks:smoothglass", {
drawtype = "glasslike",
description = S("Streak Free Glass"),
tiles = {"building_blocks_sglass.png"},
inventory_image = minetest.inventorycube("building_blocks_sglass.png"),
paramtype = "light",
sunlight_propagates = true,
is_ground_content = true,
groups = {snappy=3,cracky=3,oddly_breakable_by_hand=3},
sounds = default.node_sound_glass_defaults(),
})
minetest.register_node("building_blocks:grate", {
drawtype = "glasslike",
description = S("Grate"),
tiles = {"building_blocks_grate.png"},
inventory_image = minetest.inventorycube("building_blocks_grate.png"),
paramtype = "light",
sunlight_propagates = true,
is_ground_content = true,
groups = {cracky=1},
})
minetest.register_node("building_blocks:Fireplace", {
description = S("Fireplace"),
tiles = {
"building_blocks_cast_iron.png",
"building_blocks_cast_iron.png",
"building_blocks_cast_iron.png",
"building_blocks_cast_iron_fireplace.png"
},
paramtype = "light",
paramtype2 = "facedir",
light_source = default.LIGHT_MAX,
sunlight_propagates = true,
is_ground_content = true,
groups = {cracky=2},
})
minetest.register_node("building_blocks:woodglass", {
drawtype = "glasslike",
description = S("Wood Framed Glass"),
tiles = {"building_blocks_wglass.png"},
inventory_image = minetest.inventorycube("building_blocks_wglass.png"),
paramtype = "light",
sunlight_propagates = true,
is_ground_content = true,
groups = {snappy=3,cracky=3,oddly_breakable_by_hand=3},
sounds = default.node_sound_glass_defaults(),
})
minetest.register_node("building_blocks:terrycloth_towel", {
drawtype = "raillike",
description = S("Terrycloth towel"),
tiles = {"building_blocks_towel.png"},
inventory_image = "building_blocks_towel_inv.png",
paramtype = "light",
walkable = false,
selection_box = {
type = "fixed",
-- but how to specify the dimensions for curved and sideways rails?
fixed = {-1/2, -1/2, -1/2, 1/2, -1/2+1/16, 1/2},
},
sunlight_propagates = true,
is_ground_content = true,
groups = {crumbly=3},
})
minetest.register_node("building_blocks:Tarmac_spread", {
drawtype = "raillike",
description = S("Tarmac Spread"),
tiles = {"building_blocks_tar.png"},
inventory_image = "building_blocks_tar_spread_inv.png",
paramtype = "light",
walkable = false,
selection_box = {
type = "fixed",
-- but how to specify the dimensions for curved and sideways rails?
fixed = {-1/2, -1/2, -1/2, 1/2, -1/2+1/16, 1/2},
},
sunlight_propagates = true,
is_ground_content = true,
groups = {cracky=3},
sounds = default.node_sound_dirt_defaults(),
})
minetest.register_node("building_blocks:BWtile", {
drawtype = "raillike",
description = S("Chess board tiling"),
tiles = {"building_blocks_BWtile.png"},
inventory_image = "building_blocks_bwtile_inv.png",
paramtype = "light",
walkable = false,
selection_box = {
type = "fixed",
-- but how to specify the dimensions for curved and sideways rails?
fixed = {-1/2, -1/2, -1/2, 1/2, -1/2+1/16, 1/2},
},
sunlight_propagates = true,
is_ground_content = true,
groups = {crumbly=3},
})
minetest.register_node("building_blocks:brobble_spread", {
drawtype = "raillike",
-- Translators: "Brobble" is a portmanteau of "Brick" and "Cobble".
-- Translate however you see fit.
description = S("Brobble Spread"),
tiles = {"building_blocks_brobble.png"},
inventory_image = "building_blocks_brobble_spread_inv.png",
paramtype = "light",
walkable = false,
selection_box = {
type = "fixed",
-- but how to specify the dimensions for curved and sideways rails?
fixed = {-1/2, -1/2, -1/2, 1/2, -1/2+1/16, 1/2},
},
sunlight_propagates = true,
is_ground_content = true,
groups = {crumbly=3},
})
minetest.register_node("building_blocks:gravel_spread", {
drawtype = "raillike",
description = S("Gravel Spread"),
tiles = {"default_gravel.png"},
inventory_image = "building_blocks_gravel_spread_inv.png",
paramtype = "light",
walkable = false,
selection_box = {
type = "fixed",
-- but how to specify the dimensions for curved and sideways rails?
fixed = {-1/2, -1/2, -1/2, 1/2, -1/2+1/16, 1/2},
},
sunlight_propagates = true,
is_ground_content = true,
groups = {crumbly=2},
sounds = default.node_sound_dirt_defaults({
footstep = {name="default_gravel_footstep", gain=0.5},
dug = {name="default_gravel_footstep", gain=1.0},
}),
})
minetest.register_node("building_blocks:hardwood", {
tiles = {"building_blocks_hardwood.png"},
is_ground_content = true,
description = S("Hardwood"),
groups = {choppy=1,flammable=1},
sounds = default.node_sound_wood_defaults(),
})
if minetest.get_modpath("moreblocks") then
stairsplus:register_all(
"building_blocks",
"marble",
"building_blocks:Marble",
{
description = "Marble",
tiles = {"building_blocks_marble.png"},
groups = {cracky=3},
sounds = default.node_sound_stone_defaults(),
}
)
stairsplus:register_all(
"building_blocks",
"hardwood",
"building_blocks:hardwood",
{
description = "Hardwood",
tiles = {"building_blocks_hardwood.png"},
groups = {choppy=1,flammable=1},
sounds = default.node_sound_wood_defaults(),
}
)
stairsplus:register_all(
"building_blocks",
"fakegrass",
"building_blocks:fakegrass",
{
description = "Grass",
tiles = {"default_grass.png"},
groups = {crumbly=3},
sounds = default.node_sound_dirt_defaults({
footstep = {name="default_grass_footstep", gain=0.4},
}),
}
)
for _, i in ipairs(stairsplus.shapes_list) do
local class = i[1]
local cut = i[2]
minetest.unregister_item("moreblocks:"..class.."tar"..cut)
minetest.register_alias("moreblocks:"..class.."tar"..cut, "building_blocks:"..class.."tar"..cut)
end
minetest.unregister_item("moreblocks:tar")
minetest.register_alias("moreblocks:tar", "building_blocks:Tar")
stairsplus:register_all(
"building_blocks",
"tar",
"building_blocks:Tar",
{
description = "Tar",
tiles = {"building_blocks_tar.png"},
groups = {crumbly=1},
sounds = default.node_sound_stone_defaults(),
}
)
stairsplus:register_all(
"building_blocks",
"grate",
"building_blocks:grate",
{
description = "Grate",
tiles = {"building_blocks_grate.png"},
groups = {cracky=1},
sounds = default.node_sound_stone_defaults(),
}
)
stairsplus:register_all(
"building_blocks",
"Adobe",
"building_blocks:Adobe",
{
description = "Adobe",
tiles = {"building_blocks_Adobe.png"},
groups = {crumbly=3},
sounds = default.node_sound_stone_defaults(),
}
)
stairsplus:register_all(
"building_blocks",
"Roofing",
"building_blocks:Roofing",
{
description = "Roofing",
tiles = {"building_blocks_Roofing.png"},
groups = {snappy=3},
sounds = default.node_sound_stone_defaults(),
}
)
else
bb_stairs = {}
-- Node will be called stairs:stair_<subname>
function bb_stairs.register_stair(subname, recipeitem, groups, images, description)
minetest.register_node("building_blocks:stair_" .. subname, {
description = description,
drawtype = "nodebox",
tiles = images,
paramtype = "light",
paramtype2 = "facedir",
is_ground_content = true,
groups = groups,
node_box = {
type = "fixed",
fixed = {
{-0.5, -0.5, -0.5, 0.5, 0, 0.5},
{-0.5, 0, 0, 0.5, 0.5, 0.5},
},
},
})
minetest.register_craft({
output = 'building_blocks:stair_' .. subname .. ' 4',
recipe = {
{recipeitem, "", ""},
{recipeitem, recipeitem, ""},
{recipeitem, recipeitem, recipeitem},
},
})
-- Flipped recipe for the silly minecrafters
minetest.register_craft({
output = 'building_blocks:stair_' .. subname .. ' 4',
recipe = {
{"", "", recipeitem},
{"", recipeitem, recipeitem},
{recipeitem, recipeitem, recipeitem},
},
})
end
-- Node will be called stairs:slab_<subname>
function bb_stairs.register_slab(subname, recipeitem, groups, images, description)
minetest.register_node("building_blocks:slab_" .. subname, {
description = description,
drawtype = "nodebox",
tiles = images,
paramtype = "light",
is_ground_content = true,
groups = groups,
node_box = {
type = "fixed",
fixed = {-0.5, -0.5, -0.5, 0.5, 0, 0.5},
},
selection_box = {
type = "fixed",
fixed = {-0.5, -0.5, -0.5, 0.5, 0, 0.5},
},
})
minetest.register_craft({
output = 'building_blocks:slab_' .. subname .. ' 3',
recipe = {
{recipeitem, recipeitem, recipeitem},
},
})
end
-- Nodes will be called stairs:{stair,slab}_<subname>
function bb_stairs.register_stair_and_slab(subname, recipeitem, groups, images, desc_stair, desc_slab)
bb_stairs.register_stair(subname, recipeitem, groups, images, desc_stair)
bb_stairs.register_slab(subname, recipeitem, groups, images, desc_slab)
end
bb_stairs.register_stair_and_slab("marble","building_blocks:Marble",
{cracky=3},
{"building_blocks_marble.png"},
S("Marble stair"),
S("Marble slab")
)
bb_stairs.register_stair_and_slab("hardwood","building_blocks:hardwood",
{choppy=1,flammable=1},
{"building_blocks_hardwood.png"},
S("Hardwood stair"),
S("Hardwood slab")
)
bb_stairs.register_stair_and_slab("fakegrass","building_blocks:fakegrass",
{crumbly=3},
{"default_grass.png"},
S("Grass stair"),
S("Grass slab")
)
bb_stairs.register_stair_and_slab("tar","building_blocks:Tar",
{crumbly=1},
{"building_blocks_tar.png"},
S("Tar stair"),
S("Tar slab")
)
bb_stairs.register_stair_and_slab("grate","building_blocks:grate",
{cracky=1},
{"building_blocks_grate.png"},
S("Grate Stair"),
S("Grate Slab")
)
bb_stairs.register_stair_and_slab("Adobe", "building_blocks:Adobe",
{crumbly=3},
{"building_blocks_Adobe.png"},
S("Adobe stair"),
S("Adobe slab")
)
bb_stairs.register_stair_and_slab("Roofing", "building_blocks:Roofing",
{snappy=3},
{"building_blocks_Roofing.png"},
S("Roofing stair"),
S("Roofing slab")
)
end
minetest.register_craft({
type = "fuel",
recipe = "building_blocks:hardwood",
burntime = 28,
})
minetest.register_node("building_blocks:fakegrass", {
tiles = {"default_grass.png", "default_dirt.png", "default_dirt.png^default_grass_side.png"},
description = S("Fake Grass"),
is_ground_content = true,
groups = {crumbly=3},
sounds = default.node_sound_dirt_defaults({
footstep = {name="default_grass_footstep", gain=0.4},
}),
})
minetest.register_craftitem("building_blocks:sticks", {
description = S("Small bundle of sticks"),
image = "building_blocks_sticks.png",
on_place_on_ground = minetest.craftitem_place_item,
})
minetest.register_craftitem("building_blocks:tar_base", {
description = S("Tar base"),
image = "building_blocks_tar_base.png",
})
--Tar
minetest.register_craft({
output = 'building_blocks:knife 1',
recipe = {
{"group:tar_block"},
{"group:stick"},
}
})
minetest.register_alias("tar", "building_blocks:Tar")
minetest.register_alias("fakegrass", "building_blocks:fakegrass")
minetest.register_alias("tar_knife", "building_blocks:knife")
minetest.register_alias("adobe", "building_blocks:Adobe")
minetest.register_alias("building_blocks_roofing", "building_blocks:Roofing")
minetest.register_alias("hardwood", "building_blocks:hardwood")
minetest.register_alias("sticks", "building_blocks:sticks")
minetest.register_alias("building_blocks:faggot", "building_blocks:sticks")
minetest.register_alias("marble", "building_blocks:Marble")
minetest.register_node("building_blocks:Tar", {
description = S("Tar"),
tiles = {"building_blocks_tar.png"},
is_ground_content = true,
groups = {crumbly=1, tar_block = 1},
sounds = default.node_sound_stone_defaults(),
})
minetest.register_node("building_blocks:Marble", {
description = S("Marble"),
tiles = {"building_blocks_marble.png"},
is_ground_content = true,
groups = {cracky=3, marble = 1},
sounds = default.node_sound_stone_defaults(),
})
minetest.register_craft({
type = "fuel",
recipe = "building_blocks:sticks",
burntime = 5,
})
minetest.register_craft({
type = "fuel",
recipe = "building_blocks:Tar",
burntime = 40,
})
minetest.register_craft({
type = "cooking",
output = "building_blocks:Tar",
recipe = "building_blocks:tar_base",
})
minetest.register_tool("building_blocks:knife", {
description = S("Tar Knife"),
inventory_image = "building_blocks_knife.png",
tool_capabilities = {
max_drop_level=0,
groupcaps={
choppy={times={[2]=7.50, [3]=2.80}, uses=100, maxlevel=1},
fleshy={times={[2]=5.50, [3]=2.80}, uses=100, maxlevel=1}
}
},
})
minetest.register_craft({
output = "building_blocks:Marble 9",
recipe = {
{"default:clay", "group:tar_block", "default:clay"},
{"group:tar_block","default:clay", "group:tar_block"},
{"default:clay", "group:tar_block","default:clay"},
}
})
if not minetest.get_modpath("technic") then
minetest.register_node( ":technic:granite", {
description = S("Granite"),
tiles = { "technic_granite.png" },
is_ground_content = true,
groups = {cracky=1},
sounds = default.node_sound_stone_defaults(),
})
minetest.register_craft({
output = "technic:granite 9",
recipe = {
{ "group:tar_block", "group:marble", "group:tar_block" },
{ "group:marble", "group:tar_block", "group:marble" },
{ "group:tar_block", "group:marble", "group:tar_block" }
},
})
if minetest.get_modpath("moreblocks") then
stairsplus:register_all("technic", "granite", "technic:granite", {
description=S("Granite"),
groups={cracky=1, not_in_creative_inventory=1},
tiles={"technic_granite.png"},
})
end
end
dofile(modpath.."/alias.lua")
dofile(modpath.."/node_stairs.lua")
dofile(modpath.."/others.lua")
dofile(modpath.."/recipes.lua")

View File

@ -0,0 +1,226 @@
local S = homedecor_i18n.gettext
local stairs_groups_names = {"cracky","choppy","flammable","crumbly","snappy"}
local function building_blocks_stairs(nodename, def)
minetest.register_node(nodename, def)
if minetest.get_modpath("moreblocks") or minetest.get_modpath("stairs") then
local mod, name = nodename:match("(.*):(.*)")
minetest.register_alias(mod .. ":slab_" .. name, "stairs:slab_" .. name)
minetest.register_alias(mod .. ":stair_" .. name, "stairs:stair_" .. name)
local stairs_groups = {}
for _, groupname in ipairs(stairs_groups_names) do
stairs_groups[groupname] = def.groups[groupname]
end
if minetest.get_modpath("moreblocks") then
stairsplus:register_all(
mod,
name,
nodename,
{
description = def.description,
tiles = def.tiles,
groups = stairs_groups,
sounds = def.sounds,
}
)
else
stairs.register_stair_and_slab(name,nodename,
stairs_groups,
def.tiles,
("%s Stair"):format(def.description),
("%s Slab"):format(def.description),
def.sounds
)
end
end
end
building_blocks_stairs("building_blocks:grate", {
drawtype = "glasslike",
description = S("Grate"),
tiles = {"building_blocks_grate.png"},
paramtype = "light",
sunlight_propagates = true,
is_ground_content = true,
groups = {cracky=1},
sounds = default.node_sound_metal_defaults(),
})
building_blocks_stairs("building_blocks:smoothglass", {
drawtype = "glasslike",
description = S("Streak Free Glass"),
tiles = {"building_blocks_sglass.png"},
paramtype = "light",
sunlight_propagates = true,
is_ground_content = true,
groups = {snappy=3,cracky=3,oddly_breakable_by_hand=3},
sounds = default.node_sound_glass_defaults(),
})
building_blocks_stairs("building_blocks:woodglass", {
drawtype = "glasslike",
description = S("Wood Framed Glass"),
tiles = {"building_blocks_wglass.png"},
paramtype = "light",
sunlight_propagates = true,
is_ground_content = true,
groups = {snappy=3,cracky=3,oddly_breakable_by_hand=3},
sounds = default.node_sound_glass_defaults(),
})
building_blocks_stairs("building_blocks:Adobe", {
tiles = {"building_blocks_Adobe.png"},
description = S("Adobe"),
is_ground_content = true,
groups = {crumbly=3},
sounds = default.node_sound_stone_defaults(),
})
building_blocks_stairs("building_blocks:fakegrass", {
tiles = {"default_grass.png", "default_dirt.png", "default_dirt.png^default_grass_side.png"},
description = S("Fake Grass"),
is_ground_content = true,
groups = {crumbly=3},
sounds = default.node_sound_dirt_defaults({
footstep = {name="default_grass_footstep", gain=0.4},
}),
})
building_blocks_stairs("building_blocks:hardwood", {
tiles = {"building_blocks_hardwood.png"},
is_ground_content = true,
description = S("Hardwood"),
groups = {choppy=1,flammable=1},
sounds = default.node_sound_wood_defaults(),
})
building_blocks_stairs("building_blocks:Roofing", {
tiles = {"building_blocks_Roofing.png"},
is_ground_content = true,
description = S("Roof block"),
groups = {snappy=3},
sounds = default.node_sound_stone_defaults(),
})
building_blocks_stairs("building_blocks:Tar", {
description = S("Tar"),
tiles = {"building_blocks_tar.png"},
is_ground_content = true,
groups = {crumbly=1, tar_block = 1},
sounds = default.node_sound_stone_defaults(),
})
building_blocks_stairs("building_blocks:Marble", {
description = S("Marble"),
tiles = {"building_blocks_marble.png"},
is_ground_content = true,
groups = {cracky=3, marble = 1},
sounds = default.node_sound_stone_defaults(),
})
minetest.register_node("building_blocks:brobble_spread", {
drawtype = "raillike",
-- Translators: "Brobble" is a portmanteau of "Brick" and "Cobble".
-- Translate however you see fit.
description = S("Brobble Spread"),
tiles = {"building_blocks_brobble.png"},
inventory_image = "building_blocks_brobble_spread_inv.png",
paramtype = "light",
walkable = false,
selection_box = {
type = "fixed",
-- but how to specify the dimensions for curved and sideways rails?
fixed = {-1/2, -1/2, -1/2, 1/2, -1/2+1/16, 1/2},
},
sunlight_propagates = true,
is_ground_content = true,
groups = {crumbly=3},
})
minetest.register_node("building_blocks:gravel_spread", {
drawtype = "raillike",
description = S("Gravel Spread"),
tiles = {"default_gravel.png"},
inventory_image = "building_blocks_gravel_spread_inv.png",
paramtype = "light",
walkable = false,
selection_box = {
type = "fixed",
-- but how to specify the dimensions for curved and sideways rails?
fixed = {-1/2, -1/2, -1/2, 1/2, -1/2+1/16, 1/2},
},
sunlight_propagates = true,
is_ground_content = true,
groups = {crumbly=2},
sounds = default.node_sound_dirt_defaults({
footstep = {name="default_gravel_footstep", gain=0.5},
dug = {name="default_gravel_footstep", gain=1.0},
}),
})
minetest.register_node("building_blocks:Tarmac_spread", {
drawtype = "raillike",
description = S("Tarmac Spread"),
tiles = {"building_blocks_tar.png"},
inventory_image = "building_blocks_tar_spread_inv.png",
paramtype = "light",
walkable = false,
selection_box = {
type = "fixed",
-- but how to specify the dimensions for curved and sideways rails?
fixed = {-1/2, -1/2, -1/2, 1/2, -1/2+1/16, 1/2},
},
sunlight_propagates = true,
is_ground_content = true,
groups = {cracky=3},
sounds = default.node_sound_dirt_defaults(),
})
minetest.register_node("building_blocks:terrycloth_towel", {
drawtype = "raillike",
description = S("Terrycloth towel"),
tiles = {"building_blocks_towel.png"},
inventory_image = "building_blocks_towel_inv.png",
paramtype = "light",
walkable = false,
selection_box = {
type = "fixed",
-- but how to specify the dimensions for curved and sideways rails?
fixed = {-1/2, -1/2, -1/2, 1/2, -1/2+1/16, 1/2},
},
sunlight_propagates = true,
is_ground_content = true,
groups = {crumbly=3},
})
minetest.register_node("building_blocks:BWtile", {
drawtype = "nodebox",
description = S("Chess board tiling"),
tiles = {
"building_blocks_BWtile.png",
"building_blocks_BWtile.png^[transformR90",
"building_blocks_BWtile.png^[transformR90",
"building_blocks_BWtile.png^[transformR90",
"building_blocks_BWtile.png",
"building_blocks_BWtile.png"
},
inventory_image = "building_blocks_bwtile_inv.png",
paramtype = "light",
walkable = false,
node_box = {
type = "fixed",
fixed = {-1/2, -1/2, -1/2, 1/2, -1/2+1/16, 1/2},
},
sunlight_propagates = true,
is_ground_content = true,
groups = {crumbly=3},
})
minetest.register_node("building_blocks:Fireplace", {
description = S("Fireplace"),
tiles = {
"building_blocks_cast_iron.png",
"building_blocks_cast_iron.png",
"building_blocks_cast_iron.png",
"building_blocks_cast_iron_fireplace.png"
},
paramtype = "light",
paramtype2 = "facedir",
light_source = default.LIGHT_MAX,
sunlight_propagates = true,
is_ground_content = true,
groups = {cracky=2},
sounds = default.node_sound_stone_defaults(),
})

View File

@ -0,0 +1,23 @@
local S = homedecor_i18n.gettext
minetest.register_craftitem("building_blocks:sticks", {
description = S("Small bundle of sticks"),
image = "building_blocks_sticks.png",
on_place_on_ground = minetest.craftitem_place_item,
})
minetest.register_craftitem("building_blocks:tar_base", {
description = S("Tar base"),
image = "building_blocks_tar_base.png",
})
minetest.register_tool("building_blocks:knife", {
description = S("Tar Knife"),
inventory_image = "building_blocks_knife.png",
tool_capabilities = {
max_drop_level=0,
groupcaps={
choppy={times={[2]=7.50, [3]=2.80}, uses=100, maxlevel=1},
fleshy={times={[2]=5.50, [3]=2.80}, uses=100, maxlevel=1}
}
},
})

170
building_blocks/recipes.lua Normal file
View File

@ -0,0 +1,170 @@
local S = homedecor_i18n.gettext
if minetest.get_modpath("moreblocks") then
minetest.register_craft({
output = 'building_blocks:sticks 2',
recipe = {
{'group:stick', '' , 'group:stick'},
{'group:stick', 'group:stick', 'group:stick'},
{'group:stick', 'group:stick', 'group:stick'},
}
})
else
minetest.register_craft({
output = 'building_blocks:sticks',
recipe = {
{'group:stick', 'group:stick'},
{'group:stick', 'group:stick'},
}
})
end
minetest.register_craft({
output = 'building_blocks:Adobe 3',
recipe = {
{"default:sand"},
{"default:clay"},
{"group:stick"},
}
})
minetest.register_craft({
output = 'building_blocks:brobble_spread 4',
recipe = {
{"default:brick", "default:cobble", "default:brick"},
}
})
minetest.register_craft({
output = 'building_blocks:BWtile 10',
recipe = {
{"group:marble", "group:tar_block"},
{"group:tar_block", "group:marble"},
}
})
minetest.register_craft({
output = 'building_blocks:fakegrass 2',
recipe = {
{'default:leaves'},
{"default:dirt"},
}
})
minetest.register_craft({
output = 'building_blocks:Fireplace 1',
recipe = {
{"default:steel_ingot", "building_blocks:sticks", "default:steel_ingot"},
}
})
minetest.register_craft({
output = 'building_blocks:grate 1',
recipe = {
{"default:steel_ingot", "default:steel_ingot"},
{"default:glass", "default:glass"},
}
})
minetest.register_craft({
output = 'building_blocks:gravel_spread 4',
recipe = {
{"default:gravel", "default:gravel", "default:gravel"},
}
})
minetest.register_craft({
output = 'building_blocks:hardwood 2',
recipe = {
{"default:wood", "default:junglewood"},
{"default:junglewood", "default:wood"},
}
})
minetest.register_craft({
output = 'building_blocks:hardwood 2',
recipe = {
{"default:junglewood", "default:wood"},
{"default:wood", "default:junglewood"},
}
})
minetest.register_craft({
output = 'building_blocks:knife 1',
recipe = {
{"group:tar_block"},
{"group:stick"},
}
})
minetest.register_craft({
output = "building_blocks:Marble 9",
recipe = {
{"default:clay", "group:tar_block", "default:clay"},
{"group:tar_block","default:clay", "group:tar_block"},
{"default:clay", "group:tar_block","default:clay"},
}
})
minetest.register_craft({
output = 'building_blocks:Roofing 10',
recipe = {
{"building_blocks:Adobe", "building_blocks:Adobe"},
{"building_blocks:Adobe", "building_blocks:Adobe"},
}
})
minetest.register_craft({
output = 'default:stick 4',
recipe = {
{'building_blocks:sticks'},
}
})
minetest.register_craft({
output = 'building_blocks:tar_base 4',
recipe = {
{"default:coal_lump", "default:gravel"},
{"default:gravel", "default:coal_lump"}
}
})
minetest.register_craft({
output = 'building_blocks:tar_base 4',
recipe = {
{"default:gravel", "default:coal_lump"},
{"default:coal_lump", "default:gravel"}
}
})
minetest.register_craft({
output = 'building_blocks:Tarmac_spread 4',
recipe = {
{"group:tar_block", "group:tar_block"},
}
})
minetest.register_craft({
output = 'building_blocks:terrycloth_towel 2',
recipe = {
{"farming:string", "farming:string", "farming:string"},
}
})
minetest.register_craft({
output = 'building_blocks:woodglass 1',
recipe = {
{"default:wood"},
{"default:glass"},
}
})
minetest.register_craft({
type = "cooking",
output = "building_blocks:smoothglass",
recipe = "default:glass"
})
minetest.register_craft({
type = "cooking",
output = "building_blocks:Tar",
recipe = "building_blocks:tar_base",
})
minetest.register_craft({
type = "fuel",
recipe = "building_blocks:hardwood",
burntime = 28,
})
minetest.register_craft({
type = "fuel",
recipe = "building_blocks:sticks",
burntime = 5,
})
minetest.register_craft({
type = "fuel",
recipe = "building_blocks:Tar",
burntime = 40,
})

View File

@ -3,14 +3,14 @@ local S = homedecor_i18n.gettext
local chains_sbox = {
type = "fixed",
fixed = { -0.1, -0.625, -0.1, 0.1, 0.5, 0.1 }
fixed = { -0.1, -0.5, -0.1, 0.1, 0.5, 0.1 }
}
local topchains_sbox = {
type = "fixed",
fixed = {
{ -0.25, 0.35, -0.25, 0.25, 0.5, 0.25 },
{ -0.1, -0.625, -0.1, 0.1, 0.4, 0.1 }
{ -0.1, -0.5, -0.1, 0.1, 0.4, 0.1 }
}
}
@ -73,7 +73,7 @@ minetest.register_node("chains:chain_top_brass", {
minetest.register_node("chains:chandelier", {
description = S("Chandelier (wrought iron)"),
paramtype = "light",
light_source = default.LIGHT_MAX-2,
light_source = 12,
walkable = false,
climbable = true,
sunlight_propagates = true,
@ -99,7 +99,7 @@ minetest.register_node("chains:chandelier", {
minetest.register_node("chains:chandelier_brass", {
description = S("Chandelier (brass)"),
paramtype = "light",
light_source = default.LIGHT_MAX-2,
light_source = 12,
walkable = false,
climbable = true,
sunlight_propagates = true,

View File

@ -1,6 +0,0 @@
# Language: Español
# Author: Diego Martínez <lkaezadl3@gmail.com>
Plastic sheet = Placa de Plastico
Unprocessed Plastic base = Base de Plastico No Procesada

View File

@ -33,10 +33,10 @@ local colors = { "computer_cyan.png", "computer_magenta.png", "computer_red.png"
local background = "image[0,0;3.55,6.66;computer_black.png]"
local buttons = "button[3,4.5;0.6,0.6;left;<]"
.."button[3.6,4.5;0.6,0.6;rotateleft;L]"
.."button[3.6,4.5;0.6,0.6;rotateleft;"..minetest.formspec_escape(S("L")).."]"
.."button[4.2,4.5;0.6,0.6;down;v]"
.."button[4.2,5.3;0.6,0.6;drop;V]"
.."button[4.8,4.5;0.6,0.6;rotateright;R]"
.."button[4.8,4.5;0.6,0.6;rotateright;"..minetest.formspec_escape(S("R")).."]"
.."button[5.4,4.5;0.6,0.6;right;>]"
.."button[3.5,3;2,2;new;"..minetest.formspec_escape(S("New Game")).."]"
@ -231,7 +231,7 @@ local function step(pos, fields)
local scr = { formsize, background,
t.boardstring, t.previewstring,
draw_shape(t.cur, t.x, t.y, t.rot, boardx, boardy),
"label[3.8,0.1;Next...]label[3.8,2.7;Score: ",
"label[3.8,0.1;"..S("Next...").."]label[3.8,2.7;"..S("Score: "),
t.score, close, buttons }

View File

@ -16,8 +16,8 @@ local function start_smoke(pos, node, clicker, chimney)
end, s_handle)
end
minetest.delete_particlespawner(id)
this_spawner_meta:set_int("smoky", nil)
this_spawner_meta:set_int("sound", nil)
this_spawner_meta:set_int("smoky", 0)
this_spawner_meta:set_int("sound", 0)
return
end
@ -34,7 +34,7 @@ local function start_smoke(pos, node, clicker, chimney)
})
if chimney == 1 then
this_spawner_meta:set_int("smoky", id)
this_spawner_meta:set_int("sound", nil)
this_spawner_meta:set_int("sound", 0)
else
s_handle = minetest.sound_play("fire_small", {
pos = pos,
@ -62,47 +62,40 @@ local function stop_smoke(pos)
end, s_handle)
end
this_spawner_meta:set_int("smoky", nil)
this_spawner_meta:set_int("sound", nil)
this_spawner_meta:set_int("smoky", 0)
this_spawner_meta:set_int("sound", 0)
end
-- FLAME TYPES
local flame_types = {
{ "fake", S("Fake fire") },
{ "ice", S("Ice fire") },
}
minetest.register_node("fake_fire:ice_fire", {
inventory_image = "ice_fire_inv.png",
description = S("Ice fire"),
drawtype = "plantlike",
paramtype = "light",
paramtype2 = "facedir",
groups = {dig_immediate=3, not_in_creative_inventory=1},
sunlight_propagates = true,
buildable_to = true,
walkable = false,
light_source = 14,
waving = 1,
tiles = {
{name="ice_fire_animated.png", animation={type="vertical_frames",
aspect_w=16, aspect_h=16, length=1.5}},
},
on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
start_smoke(pos, node, clicker)
return itemstack
end,
on_destruct = function (pos)
stop_smoke(pos)
minetest.sound_play("fire_extinguish", {
pos = pos, max_hear_distance = 5
})
end,
drop = ""
})
for _, f in ipairs(flame_types) do
local name, desc = unpack(f)
minetest.register_node("fake_fire:"..name.."_fire", {
inventory_image = name.."_fire_inv.png",
description = desc,
drawtype = "plantlike",
paramtype = "light",
paramtype2 = "facedir",
groups = {dig_immediate=3, not_in_creative_inventory=1},
sunlight_propagates = true,
buildable_to = true,
walkable = false,
light_source = 14,
waving = 1,
tiles = {
{name=name.."_fire_animated.png", animation={type="vertical_frames",
aspect_w=16, aspect_h=16, length=1.5}},
},
on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
start_smoke(pos, node, clicker)
return itemstack
end,
on_destruct = function (pos)
stop_smoke(pos)
minetest.sound_play("fire_extinguish", {
pos = pos, max_hear_distance = 5
})
end,
drop = ""
})
end
minetest.register_alias("fake_fire:fake_fire", "fire:permanent_flame")
minetest.register_node("fake_fire:fancy_fire", {
inventory_image = "fancy_fire_inv.png",
@ -190,43 +183,18 @@ for _, mat in ipairs(materials) do
})
end
-- FLINT and STEEL
minetest.register_tool("fake_fire:flint_and_steel", {
description = S("Flint and steel"),
inventory_image = "flint_and_steel.png",
liquids_pointable = false,
stack_max = 1,
tool_capabilities = {
full_punch_interval = 1.0,
max_drop_level=0,
groupcaps={flamable = {uses=65, maxlevel=1}}
},
on_use = function(itemstack, user, pointed_thing)
if pointed_thing.type == "node" and minetest.get_node(pointed_thing.above).name == "air" then
if not minetest.is_protected(pointed_thing.above, user:get_player_name()) then
if string.find(minetest.get_node(pointed_thing.under).name, "ice") then
minetest.set_node(pointed_thing.above, {name="fake_fire:ice_fire"})
else
minetest.set_node(pointed_thing.above, {name="fake_fire:fake_fire"})
end
else
minetest.chat_send_player(user:get_player_name(), S("This area is protected!"))
end
else
return
end
minetest.register_alias("fake_fire:flint_and_steel", "fire:flint_and_steel")
itemstack:add_wear(65535/65)
return itemstack
minetest.override_item("default:ice", {
on_ignite = function(pos, igniter)
local flame_pos = {x = pos.x, y = pos.y + 1, z = pos.z}
if minetest.get_node(flame_pos).name == "air" then
minetest.set_node(flame_pos, {name = "fake_fire:ice_fire"})
end
end
})
-- CRAFTS
minetest.register_craft({
type = "shapeless",
output = 'fake_fire:flint_and_steel',
recipe = {"default:obsidian_shard", "default:steel_ingot"}
})
minetest.register_craft({
type = "shapeless",

View File

@ -4,52 +4,49 @@ local S = homedecor_i18n.gettext
minetest.register_node("homedecor:bathroom_tiles_dark", {
description = S("Bathroom/kitchen tiles (dark)"),
tiles = {
{ name = "homedecor_bathroom_tiles_bg.png", color = 0xff606060 },
"homedecor_bathroom_tiles_fg.png"
"homedecor_bathroom_tiles_bg.png"
},
overlay_tiles = {
{ name = "homedecor_bathroom_tiles_fg.png", color = 0xff606060 },
},
drawtype = "mesh",
mesh = "homedecor_block_with_overlay.obj",
paramtype = "light",
paramtype2 = "color",
palette = "unifieddyes_palette_extended.png",
place_param2 = 240,
groups = {cracky=3, ud_param2_colorable = 1},
sounds = default.node_sound_stone_defaults(),
after_dig_node = unifieddyes.after_dig_node
on_construct = unifieddyes.on_construct,
})
minetest.register_node("homedecor:bathroom_tiles_medium", {
description = S("Bathroom/kitchen tiles (medium)"),
tiles = {
{ name = "homedecor_bathroom_tiles_bg.png", color = 0xffc0c0c0 },
"homedecor_bathroom_tiles_fg.png"
"homedecor_bathroom_tiles_bg.png"
},
overlay_tiles = {
{ name = "homedecor_bathroom_tiles_fg.png", color = 0xffc0c0c0 },
},
drawtype = "mesh",
mesh = "homedecor_block_with_overlay.obj",
paramtype = "light",
paramtype2 = "color",
palette = "unifieddyes_palette_extended.png",
place_param2 = 240,
groups = {cracky=3, ud_param2_colorable = 1},
sounds = default.node_sound_stone_defaults(),
after_dig_node = unifieddyes.after_dig_node
on_construct = unifieddyes.on_construct,
})
minetest.register_node("homedecor:bathroom_tiles_light", {
description = S("Bathroom/kitchen tiles (light)"),
tiles = {
{ name = "homedecor_bathroom_tiles_bg.png", color = 0xffffffff },
"homedecor_bathroom_tiles_fg.png"
"homedecor_bathroom_tiles_bg.png"
},
overlay_tiles = {
{ name = "homedecor_bathroom_tiles_fg.png", color = 0xffffffff },
},
drawtype = "mesh",
mesh = "homedecor_block_with_overlay.obj",
paramtype = "light",
paramtype2 = "color",
palette = "unifieddyes_palette_extended.png",
place_param2 = 240,
groups = {cracky=3, ud_param2_colorable = 1},
sounds = default.node_sound_stone_defaults(),
after_dig_node = unifieddyes.after_dig_node
on_construct = unifieddyes.on_construct,
})
local tr_cbox = {
@ -167,21 +164,3 @@ minetest.register_lbm({
meta:set_string("palette", "ext")
end
})
minetest.register_lbm({
name = "homedecor:recolor_bathroom_tiles",
label = "Convert bathroom tiles to use UD extended palette",
run_at_every_load = false,
nodenames = {
"homedecor:bathroom_tiles_light",
"homedecor:bathroom_tiles_medium",
"homedecor:bathroom_tiles_dark",
},
action = function(pos, node)
local meta = minetest.get_meta(pos)
if meta:get_string("palette") ~= "ext" then
minetest.swap_node(pos, { name = node.name, param2 = unifieddyes.convert_classic_palette[node.param2] })
meta:set_string("palette", "ext")
end
end
})

View File

@ -56,7 +56,7 @@ homedecor.register("bed_regular", {
return homedecor.bed_expansion(pos, placer, itemstack, pointed_thing)
end
end,
after_dig_node = function(pos)
after_dig_node = function(pos, oldnode, oldmetadata, digger)
homedecor.unextend_bed(pos)
end,
on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
@ -65,9 +65,7 @@ homedecor.register("bed_regular", {
homedecor.bed_expansion(pos, clicker, itemstack, pointed_thing, true)
return itemstack
else
-- if minetest.get_modpath("beds") then
-- beds.on_rightclick(pos, clicker)
-- end
homedecor.beds_on_rightclick(pos, node, clicker)
return itemstack
end
end
@ -91,16 +89,13 @@ homedecor.register("bed_extended", {
sounds = default.node_sound_wood_defaults(),
expand = { forward = "air" },
on_rotate = screwdriver.disallow,
after_dig_node = function(pos)
after_dig_node = function(pos, oldnode, oldmetadata, digger)
homedecor.unextend_bed(pos)
end,
-- on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
-- local itemname = itemstack:get_name()
-- if minetest.get_modpath("beds") then
-- beds.on_rightclick(pos, clicker)
-- end
-- return itemstack
-- end,
on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
homedecor.beds_on_rightclick(pos, node, clicker)
return itemstack
end,
drop = "homedecor:bed_regular"
})
@ -123,21 +118,20 @@ 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)
end,
after_dig_node = function(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
end,
-- on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
-- local itemname = itemstack:get_name()
-- if minetest.get_modpath("beds") then
-- beds.on_rightclick(pos, clicker)
-- end
-- return itemstack
-- end
on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
homedecor.beds_on_rightclick(pos, node, clicker)
return itemstack
end,
})
for _, w in pairs({ N_("mahogany"), N_("oak") }) do

View File

@ -1,164 +1,175 @@
local S = homedecor_i18n.gettext
local function N_(x) return x end
local bookcolors = {
{ N_("red"), 0xffd26466 },
{ N_("green"), 0xff62aa66 },
{ N_("blue"), 0xff8686d7 },
{ N_("violet"), 0xff9c65a7 },
{ N_("grey"), 0xff757579 },
{ N_("brown"), 0xff896958 }
}
local BOOK_FORMNAME = "homedecor:book_form"
local player_current_book = { }
local function book_dig(pos, node, digger)
if minetest.is_protected(pos, digger:get_player_name()) then return end
local meta = minetest.get_meta(pos)
local data = minetest.serialize({
title = meta:get_string("title") or "",
text = meta:get_string("text") or "",
owner = meta:get_string("owner") or "",
_recover = meta:get_string("_recover") or "",
})
local stack = ItemStack({
name = "homedecor:book",
metadata = data,
})
stack = digger:get_inventory():add_item("main", stack)
if not stack:is_empty() then
minetest.item_drop(stack, digger, pos)
for _, c in ipairs(bookcolors) do
local color, hue = unpack(c)
local function book_dig(pos, node, digger)
if minetest.is_protected(pos, digger:get_player_name()) then return end
local meta = minetest.get_meta(pos)
local data = minetest.serialize({
title = meta:get_string("title") or "",
text = meta:get_string("text") or "",
owner = meta:get_string("owner") or "",
_recover = meta:get_string("_recover") or "",
})
local stack = ItemStack({
name = "homedecor:book_"..color,
metadata = data,
})
stack = digger:get_inventory():add_item("main", stack)
if not stack:is_empty() then
minetest.item_drop(stack, digger, pos)
end
minetest.remove_node(pos)
end
minetest.remove_node(pos)
homedecor.register("book_"..color, {
description = S("Writable Book (@1)", S(color)),
mesh = "homedecor_book.obj",
tiles = {
{ name = "homedecor_book_cover.png", color = hue },
{ name = "homedecor_book_edges.png", color = "white" }
},
overlay_tiles = {
{ name = "homedecor_book_cover_trim.png", color = "white" },
""
},
groups = { snappy=3, oddly_breakable_by_hand=3, book=1 },
walkable = false,
stack_max = 1,
on_punch = function(pos, node, puncher, pointed_thing)
local fdir = node.param2
minetest.swap_node(pos, { name = "homedecor:book_open_"..color, param2 = fdir })
end,
on_place = function(itemstack, placer, pointed_thing)
local plname = placer:get_player_name()
local pos = pointed_thing.under
local node = minetest.get_node_or_nil(pos)
local def = node and minetest.registered_nodes[node.name]
if not def or not def.buildable_to then
pos = pointed_thing.above
node = minetest.get_node_or_nil(pos)
def = node and minetest.registered_nodes[node.name]
if not def or not def.buildable_to then return itemstack end
end
if minetest.is_protected(pos, plname) then return itemstack end
local fdir = minetest.dir_to_facedir(placer:get_look_dir())
minetest.set_node(pos, {
name = "homedecor:book_"..color,
param2 = fdir,
})
local text = itemstack:get_metadata() or ""
local meta = minetest.get_meta(pos)
local data = minetest.deserialize(text) or {}
if type(data) ~= "table" then
data = {}
-- Store raw metadata in case some data is lost by the
-- transition to the new meta format, so it is not lost
-- and can be recovered if needed.
meta:set_string("_recover", text)
end
meta:set_string("title", data.title or "")
meta:set_string("text", data.text or "")
meta:set_string("owner", data.owner or "")
if data.title and data.title ~= "" then
meta:set_string("infotext", data.title)
end
if not creative.is_enabled_for(plname) then
itemstack:take_item()
end
return itemstack
end,
on_dig = book_dig,
selection_box = {
type = "fixed",
fixed = {-0.2, -0.5, -0.25, 0.2, -0.35, 0.25}
}
})
homedecor.register("book_open_"..color, {
mesh = "homedecor_book_open.obj",
tiles = {
{ name = "homedecor_book_cover.png", color = hue },
{ name = "homedecor_book_edges.png", color = "white" },
{ name = "homedecor_book_pages.png", color = "white" }
},
groups = { snappy=3, oddly_breakable_by_hand=3, not_in_creative_inventory=1 },
drop = "homedecor:book_"..color,
walkable = false,
on_dig = book_dig,
on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
local meta = minetest.get_meta(pos)
local player_name = clicker:get_player_name()
local title = meta:get_string("title") or ""
local text = meta:get_string("text") or ""
local owner = meta:get_string("owner") or ""
local formspec
if owner == "" or owner == player_name then
formspec = "size[8,8]"..default.gui_bg..default.gui_bg_img..
"field[0.5,1;7.5,0;title;Book title :;"..
minetest.formspec_escape(title).."]"..
"textarea[0.5,1.5;7.5,7;text;Book content :;"..
minetest.formspec_escape(text).."]"..
"button_exit[2.5,7.5;3,1;save;Save]"
else
formspec = "size[8,8]"..default.gui_bg..
"button_exit[7,0.25;1,0.5;close;X]"..
default.gui_bg_img..
"label[0.5,0.5;by "..owner.."]"..
"label[0.5,0;"..minetest.formspec_escape(title).."]"..
"textarea[0.5,1.5;7.5,7;;"..minetest.formspec_escape(text)..";]"
end
player_current_book[player_name] = pos
minetest.show_formspec(player_name, BOOK_FORMNAME, formspec)
return itemstack
end,
on_punch = function(pos, node, puncher, pointed_thing)
local fdir = node.param2
minetest.swap_node(pos, { name = "homedecor:book_"..color, param2 = fdir })
minetest.sound_play("homedecor_book_close", {
pos=pos,
max_hear_distance = 3,
gain = 2,
})
end,
selection_box = {
type = "fixed",
fixed = {-0.35, -0.5, -0.25, 0.35, -0.4, 0.25}
}
})
end
local inv_img = "homedecor_book_inv.png^homedecor_book_trim_inv.png"
homedecor.register("book", {
description = S("Writable Book"),
mesh = "homedecor_book.obj",
tiles = {
"homedecor_book_cover.png",
{ name = "homedecor_book_edges.png", color = 0xffffffff },
{ name = "homedecor_book_cover_trim.png", color = 0xffffffff }
},
inventory_image = inv_img,
wield_image = inv_img,
groups = { snappy=3, oddly_breakable_by_hand=3, book=1, ud_param2_colorable = 1 },
walkable = false,
paramtype2 = "colorwallmounted",
palette = "unifieddyes_palette_colorwallmounted.png",
after_dig_node = unifieddyes.after_dig_node,
stack_max = 1,
on_punch = function(pos, node, puncher, pointed_thing)
local fdir = node.param2
minetest.swap_node(pos, { name = "homedecor:book_open", param2 = fdir })
end,
on_place = function(itemstack, placer, pointed_thing)
local plname = placer:get_player_name()
local pos = pointed_thing.under
local node = minetest.get_node_or_nil(pos)
local def = node and minetest.registered_nodes[node.name]
if not def or not def.buildable_to then
pos = pointed_thing.above
node = minetest.get_node_or_nil(pos)
def = node and minetest.registered_nodes[node.name]
if not def or not def.buildable_to then return itemstack end
end
if minetest.is_protected(pos, plname) then return itemstack end
local fdir = minetest.dir_to_facedir(placer:get_look_dir())
minetest.set_node(pos, {
name = "homedecor:book",
param2 = fdir,
})
local text = itemstack:get_metadata() or ""
local meta = minetest.get_meta(pos)
local data = minetest.deserialize(text) or {}
if type(data) ~= "table" then
data = {}
-- Store raw metadata in case some data is lost by the
-- transition to the new meta format, so it is not lost
-- and can be recovered if needed.
meta:set_string("_recover", text)
end
meta:set_string("title", data.title or "")
meta:set_string("text", data.text or "")
meta:set_string("owner", data.owner or "")
if data.title and data.title ~= "" then
meta:set_string("infotext", data.title)
end
if not homedecor.expect_infinite_stacks then
itemstack:take_item()
end
unifieddyes.fix_rotation_nsew(pos, placer, itemstack, pointed_thing)
return itemstack
end,
on_rotate = unifieddyes.fix_after_screwdriver_nsew,
on_dig = book_dig,
selection_box = {
type = "fixed",
fixed = {-0.2, -0.5, -0.25, 0.2, -0.35, 0.25}
}
})
homedecor.register("book_open", {
mesh = "homedecor_book_open.obj",
tiles = {
"homedecor_book_cover.png",
{ name = "homedecor_book_edges.png", color = 0xffffffff },
{ name = "homedecor_book_pages.png", color = 0xffffffff }
},
groups = { snappy=3, oddly_breakable_by_hand=3, not_in_creative_inventory=1, ud_param2_colorable = 1 },
drop = "homedecor:book",
walkable = false,
paramtype2 = "colorwallmounted",
palette = "unifieddyes_palette_colorwallmounted.png",
after_place_node = unifieddyes.fix_rotation_nsew,
after_dig_node = unifieddyes.after_dig_node,
on_rotate = unifieddyes.fix_after_screwdriver_nsew,
on_dig = book_dig,
on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
local meta = minetest.get_meta(pos)
local player_name = clicker:get_player_name()
local title = meta:get_string("title") or ""
local text = meta:get_string("text") or ""
local owner = meta:get_string("owner") or ""
local formspec
if owner == "" or owner == player_name then
formspec = "size[8,8]"..default.gui_bg..default.gui_bg_img..
"field[0.5,1;7.5,0;title;Book title :;"..
minetest.formspec_escape(title).."]"..
"textarea[0.5,1.5;7.5,7;text;Book content :;"..
minetest.formspec_escape(text).."]"..
"button_exit[2.5,7.5;3,1;save;Save]"
else
formspec = "size[8,8]"..default.gui_bg..
"button_exit[7,0.25;1,0.5;close;X]"..
default.gui_bg_img..
"label[0.5,0.5;by "..owner.."]"..
"label[0.5,0;"..minetest.formspec_escape(title).."]"..
"textarea[0.5,1.5;7.5,7;;"..minetest.formspec_escape(text)..";]"
end
player_current_book[player_name] = pos
minetest.show_formspec(player_name, BOOK_FORMNAME, formspec)
return itemstack
end,
on_punch = function(pos, node, puncher, pointed_thing)
local fdir = node.param2
minetest.swap_node(pos, { name = "homedecor:book", param2 = fdir })
minetest.sound_play("homedecor_book_close", {
pos=pos,
max_hear_distance = 3,
gain = 2,
})
end,
selection_box = {
type = "fixed",
fixed = {-0.35, -0.5, -0.25, 0.35, -0.4, 0.25}
}
})
minetest.register_on_player_receive_fields(function(player, form_name, fields)
if form_name ~= BOOK_FORMNAME or not fields.save then
return
if form_name ~= BOOK_FORMNAME then
return false
end
local player_name = player:get_player_name()
local pos = player_current_book[player_name]
if not pos then return end
if not pos then
return true
end
local meta = minetest.get_meta(pos)
local owner = meta:get_string("owner")
if owner ~= "" and player_name ~= owner or not fields.save then
player_current_book[player_name] = nil
return true
end
meta:set_string("title", fields.title or "")
meta:set_string("text", fields.text or "")
meta:set_string("owner", player_name)
@ -167,69 +178,10 @@ minetest.register_on_player_receive_fields(function(player, form_name, fields)
end
minetest.log("action", S("@1 has written in a book (title: \"@2\"): \"@3\" at location @4",
player:get_player_name(), fields.title, fields.text, minetest.pos_to_string(player:getpos())))
player_current_book[player_name] = nil
return true
end)
-- convert old static nodes to param2
local bookcolors = {
"red",
"green",
"blue",
"violet",
"grey",
"brown"
}
homedecor.old_static_books = {}
for _, color in ipairs(bookcolors) do
table.insert(homedecor.old_static_books, "homedecor:book_"..color)
table.insert(homedecor.old_static_books, "homedecor:book_open_"..color)
end
minetest.register_lbm({
name = "homedecor:convert_books",
label = "Convert homedecor books to use param2 color",
run_at_every_load = false,
nodenames = homedecor.old_static_books,
action = function(pos, node)
local name = node.name
local color = string.sub(name, string.find(name, "_", -7)+1)
local newname = "homedecor:book"
if string.find(name, "open") then
newname = "homedecor:book_open"
end
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
if color == "grey" then
color = "dark_grey"
elseif color == "violet" then
color = "dark_magenta"
elseif color == "brown" then
color = "dark_orange"
elseif color == "blue" then
color = "light_blue"
else
color = "medium_"..color
end
local paletteidx = unifieddyes.getpaletteidx("unifieddyes:"..color, "wallmounted")
local param2 = paletteidx + new_fdir
minetest.swap_node(pos, { name = newname, param2 = param2 })
local meta = minetest.get_meta(pos)
meta:set_string("dye", "unifieddyes:"..color)
end
})
minetest.register_alias("homedecor:book", "homedecor:book_grey")
minetest.register_alias("homedecor:book_open", "homedecor:book_open_grey")

View File

@ -25,7 +25,6 @@ minetest.register_entity("homedecor:mesh_desk_fan", {
})
local add_mesh_desk_fan_entity = function(pos)
print("in add_mesh_desk_fan_entity()")
local param2 = minetest.get_node(pos).param2
local entity = minetest.add_entity(pos, "homedecor:mesh_desk_fan")
if param2 == 0 then

View File

@ -546,6 +546,17 @@ minetest.register_craft( {
},
})
unifieddyes.register_color_craft({
output = "homedecor:shutter_colored",
palette = "wallmounted",
type = "shapeless",
neutral_node = "homedecor:shutter",
recipe = {
"NEUTRAL_NODE",
"MAIN_DYE"
}
})
minetest.register_craft({
type = "fuel",
recipe = "homedecor:shutter_oak",
@ -867,6 +878,28 @@ minetest.register_craft( {
},
})
unifieddyes.register_color_craft({
output = "homedecor:curtain_closed",
palette = "wallmounted",
type = "shapeless",
neutral_node = "homedecor:curtain_closed",
recipe = {
"NEUTRAL_NODE",
"MAIN_DYE"
}
})
unifieddyes.register_color_craft({
output = "homedecor:curtain_open",
palette = "wallmounted",
type = "shapeless",
neutral_node = "homedecor:curtain_open",
recipe = {
"NEUTRAL_NODE",
"MAIN_DYE"
}
})
local mats = {
{ "brass", "homedecor:pole_brass" },
{ "wrought_iron", "homedecor:pole_wrought_iron" },
@ -1195,7 +1228,6 @@ minetest.register_craft( {
minetest.register_craft({
output = "homedecor:glowlight_half 6",
recipe = {
{ "dye:white", "dye:white", "dye:white" },
{ "default:glass", "homedecor:power_crystal", "default:glass", },
}
})
@ -1203,11 +1235,38 @@ minetest.register_craft({
minetest.register_craft({
output = "homedecor:glowlight_half 6",
recipe = {
{ "dye:white", "dye:white", "dye:white" },
{"moreblocks:super_glow_glass", "moreblocks:glow_glass", "moreblocks:super_glow_glass", },
}
})
minetest.register_craft({
output = "homedecor:glowlight_half",
recipe = {
{"homedecor:glowlight_small_cube","homedecor:glowlight_small_cube"},
{"homedecor:glowlight_small_cube","homedecor:glowlight_small_cube"}
}
})
minetest.register_craft({
output = "homedecor:glowlight_half",
type = "shapeless",
recipe = {
"homedecor:glowlight_quarter",
"homedecor:glowlight_quarter"
}
})
unifieddyes.register_color_craft({
output = "homedecor:glowlight_half",
palette = "wallmounted",
type = "shapeless",
neutral_node = "homedecor:glowlight_half",
recipe = {
"NEUTRAL_NODE",
"MAIN_DYE"
}
})
minetest.register_craft({
output = "homedecor:glowlight_quarter 6",
recipe = {
@ -1215,6 +1274,17 @@ minetest.register_craft({
}
})
unifieddyes.register_color_craft({
output = "homedecor:glowlight_quarter",
palette = "wallmounted",
type = "shapeless",
neutral_node = "homedecor:glowlight_quarter",
recipe = {
"NEUTRAL_NODE",
"MAIN_DYE"
}
})
minetest.register_craft({
output = "homedecor:glowlight_small_cube 8",
recipe = {
@ -1239,20 +1309,14 @@ minetest.register_craft({
}
})
minetest.register_craft({
output = "homedecor:glowlight_half",
recipe = {
{"homedecor:glowlight_small_cube","homedecor:glowlight_small_cube"},
{"homedecor:glowlight_small_cube","homedecor:glowlight_small_cube"}
}
})
minetest.register_craft({
output = "homedecor:glowlight_half",
type = "shapeless",
recipe = {
"homedecor:glowlight_quarter",
"homedecor:glowlight_quarter"
unifieddyes.register_color_craft({
output = "homedecor:glowlight_small_cube",
palette = "wallmounted",
type = "shapeless",
neutral_node = "homedecor:glowlight_small_cube",
recipe = {
"NEUTRAL_NODE",
"MAIN_DYE"
}
})
@ -1298,15 +1362,7 @@ minetest.register_craft( {
-- other types of fences
minetest.register_craft( {
output = "homedecor:fence_wrought_iron_2 2",
recipe = {
{ "homedecor:pole_wrought_iron", "default:iron_lump" },
{ "homedecor:pole_wrought_iron", "default:iron_lump" },
},
})
minetest.register_craft( {
output = "homedecor:fence_wrought_iron_2 2",
output = "homedecor:fence_wrought_iron_2 4",
recipe = {
{ "homedecor:pole_wrought_iron", "default:iron_lump" },
{ "homedecor:pole_wrought_iron", "default:iron_lump" },
@ -2235,6 +2291,17 @@ minetest.register_craft( {
},
})
unifieddyes.register_color_craft({
output = "homedecor:bathroom_tiles_light",
palette = "extended",
type = "shapeless",
neutral_node = "homedecor:bathroom_tiles_light",
recipe = {
"NEUTRAL_NODE",
"MAIN_DYE"
}
})
minetest.register_craft( {
output = "homedecor:bathroom_tiles_medium 4",
recipe = {
@ -2243,6 +2310,17 @@ minetest.register_craft( {
},
})
unifieddyes.register_color_craft({
output = "homedecor:bathroom_tiles_medium",
palette = "extended",
type = "shapeless",
neutral_node = "homedecor:bathroom_tiles_medium",
recipe = {
"NEUTRAL_NODE",
"MAIN_DYE"
}
})
minetest.register_craft( {
output = "homedecor:bathroom_tiles_dark 4",
recipe = {
@ -2251,6 +2329,17 @@ minetest.register_craft( {
},
})
unifieddyes.register_color_craft({
output = "homedecor:bathroom_tiles_dark",
palette = "extended",
type = "shapeless",
neutral_node = "homedecor:bathroom_tiles_dark",
recipe = {
"NEUTRAL_NODE",
"MAIN_DYE"
}
})
-- misc electrical
minetest.register_craft( {
@ -2484,6 +2573,17 @@ minetest.register_craft( {
},
})
unifieddyes.register_color_craft({
output = "homedecor:bed_regular",
palette = "wallmounted",
type = "shapeless",
neutral_node = "homedecor:bed_regular",
recipe = {
"NEUTRAL_NODE",
"MAIN_DYE"
}
})
minetest.register_craft( {
output = "homedecor:bed_kingsize",
recipe = {
@ -2491,6 +2591,29 @@ minetest.register_craft( {
},
})
unifieddyes.register_color_craft({
output = "homedecor:bed_kingsize",
palette = "wallmounted",
type = "shapeless",
neutral_node = "homedecor:bed_kingsize",
recipe = {
"NEUTRAL_NODE",
"MAIN_DYE"
}
})
unifieddyes.register_color_craft({
output = "homedecor:bed_kingsize",
palette = "wallmounted",
type = "shapeless",
neutral_node = "homedecor:bed_regular",
recipe = {
"NEUTRAL_NODE",
"NEUTRAL_NODE",
"MAIN_DYE"
}
})
minetest.register_craft( {
output = "homedecor:bottle_green",
recipe = {
@ -2851,6 +2974,17 @@ minetest.register_craft({
},
})
unifieddyes.register_color_craft({
output = "homedecor:desk_lamp",
palette = "wallmounted",
type = "shapeless",
neutral_node = "homedecor:desk_lamp",
recipe = {
"NEUTRAL_NODE",
"MAIN_DYE"
}
})
minetest.register_craft({
output = "homedecor:hanging_lantern 2",
recipe = {
@ -2928,7 +3062,7 @@ minetest.register_craft({
recipe = {
{ "", "technic:brass_ingot", ""},
{ "", "homedecor:chainlink_brass", ""},
{ "default:glass", "homedecor:glowlight_small", "default:glass"}
{ "default:glass", "homedecor:glowlight_small_cube", "default:glass"}
},
})
@ -2936,7 +3070,7 @@ minetest.register_craft({
output = "homedecor:ceiling_lamp",
recipe = {
{ "", "chains:chain_top_brass", ""},
{ "default:glass", "homedecor:glowlight_small", "default:glass"}
{ "default:glass", "homedecor:glowlight_small_cube", "default:glass"}
},
})
@ -2958,23 +3092,29 @@ minetest.register_craft({
},
})
minetest.register_craft({
type = "shapeless",
output = "homedecor:coin 5",
recipe = {"moreblocks:micro_goldblock_1", "default:sword_stone"}
})
if minetest.settings:get_bool("homedecor.disable_coin_crafting") == false then
minetest.register_craft({
type = "shapeless",
output = "homedecor:coin 5",
recipe = {"moreblocks:micro_goldblock_1", "default:sword_stone"}
})
minetest.register_craft({
type = "shapeless",
output = "homedecor:coin 15",
recipe = {"default:gold_ingot", "default:sword_steel"}
})
minetest.register_craft({
type = "shapeless",
output = "homedecor:coin 15",
recipe = {"default:gold_ingot", "default:sword_steel"}
})
minetest.register_craft({
type = "shapeless",
output = "homedecor:coin 50",
recipe = {"default:goldblock", "default:sword_mese"}
})
minetest.register_craft({
type = "shapeless",
output = "homedecor:coin 50",
recipe = {"default:goldblock", "default:sword_mese"}
})
else
if minetest.settings:get("log_mods") then
minetest.log("[HomeDecor] " .. S("coin crafting is disabled!"))
end
end
minetest.register_craft({
output = "homedecor:lattice_wood 8",
@ -3022,10 +3162,28 @@ minetest.register_craft({
})
minetest.register_craft({
output = "homedecor:stained_glass",
output = "homedecor:stained_glass 3",
recipe = {
{"", "dye:blue", ""},
{"dye:red", "xpanes:pane", "dye:green"},
{"dye:red", "xpanes:pane_flat", "dye:green"},
{"", "dye:yellow", ""},
},
})
minetest.register_craft({
output = "homedecor:stained_glass 2",
recipe = {
{"", "dye:blue", ""},
{"dye:red", "cottages:glass_pane_side", "dye:green"},
{"", "dye:yellow", ""},
},
})
minetest.register_craft({
output = "homedecor:stained_glass 2",
recipe = {
{"", "dye:blue", ""},
{"dye:red", "cottages:glass_pane", "dye:green"},
{"", "dye:yellow", ""},
},
})
@ -3115,6 +3273,19 @@ for i in ipairs(homedecor.banister_materials) do
})
end
unifieddyes.register_color_craft({
output = "",
palette = "split",
neutral_node = "homedecor:banister_wood_horizontal",
type = "shapeless",
output_prefix = "homedecor:banister_wood_horizontal_",
output_suffix = "",
recipe = {
"NEUTRAL_NODE",
"MAIN_DYE",
}
})
if (minetest.get_modpath("technic") and minetest.get_modpath("dye") and minetest.get_modpath("bees")) then
technic.register_separating_recipe({ input = {"bees:wax 1"}, output = {"homedecor:oil_extract 2","dye:yellow 1"} })
end

View File

@ -1,6 +1,7 @@
default
unifieddyes
homedecor_i18n
creative
building_blocks?
signs_lib?
moreblocks?
@ -11,3 +12,5 @@ bucket?
beds?
flowers?
3d_armor?
skinsdb?
mesecons?

View File

@ -4,6 +4,8 @@ local S = homedecor_i18n.gettext
local function N_(x) return x end
local m_rules = mesecon and mesecon.rules and mesecon.rules.pplate
-- doors
local function isSolid(pos, adjust)
@ -264,6 +266,7 @@ for i, side in ipairs(sides) do
drop = "homedecor:door_"..doorname.."_left",
mesecons = {
effector = {
rules = m_rules,
action_on = function(pos,node)
local isClosed = getClosed(pos)
if isClosed then
@ -405,6 +408,7 @@ for i, g in ipairs(gate_list) do
end,
mesecons = {
effector = {
rules = m_rules,
action_on = function(pos,node) homedecor.flip_gate(pos,node,nil,gate, "closed") end
}
}
@ -433,6 +437,7 @@ for i, g in ipairs(gate_list) do
return itemstack
end
def.mesecons.effector = {
rules = m_rules,
action_off = function(pos,node) homedecor.flip_gate(pos,node,nil,gate, "open") end
}

View File

@ -118,7 +118,7 @@ minetest.register_alias("homedecor:deckchair_head", "air")
homedecor.register("deckchair_striped_blue", {
mesh = "homedecor_deckchair.obj",
tiles = {"homedecor_deckchair_striped_blue.png"},
description = S("Deck Chair"),
description = S("Deck Chair (blue striped)"),
groups = { snappy = 3 },
expand = { forward="placeholder" },
sounds = default.node_sound_wood_defaults(),
@ -251,6 +251,7 @@ homedecor.register("swing", {
place_on = "bottom"
},
on_place = function(itemstack, placer, pointed_thing)
local placer_name = placer:get_player_name() or ""
local isceiling, pos = homedecor.find_ceiling(itemstack, placer, pointed_thing)
if isceiling then
local height = 0
@ -263,7 +264,7 @@ homedecor.register("swing", {
if not testreg or not testreg.buildable_to then
if i < 1 then
minetest.chat_send_player(placer:get_player_name(), "No room under there to hang a swing.")
minetest.chat_send_player(placer_name, "No room under there to hang a swing.")
return itemstack
else
break
@ -279,11 +280,11 @@ homedecor.register("swing", {
minetest.set_node({ x=pos.x, y=pos.y-height, z=pos.z }, { name = "homedecor:swing", param2 = fdir })
if not homedecor.expect_infinite_stacks then
if not creative.is_enabled_for(placer_name) then
itemstack:take_item()
end
else
minetest.chat_send_player(placer:get_player_name(), "You have to point at the bottom side of an overhanging object to place a swing.")
minetest.chat_send_player(placer_name, "You have to point at the bottom side of an overhanging object to place a swing.")
end
return itemstack
end,
@ -367,7 +368,7 @@ local shrub_cbox = { -0.5, -0.5, -0.5, 0.5, 0.5, 0.5 }
for _, color in ipairs(homedecor.shrub_colors) do
minetest.register_node("homedecor:shrubbery_large_"..color, {
description = S("Shrubbery (@1)", S(color)),
description = S("Shrubbery (large, @1)", S(color)),
drawtype = "mesh",
mesh = "homedecor_cube.obj",
tiles = {"homedecor_shrubbery_"..color..".png"},

View File

@ -81,8 +81,9 @@ 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_dig_node = unifieddyes.after_dig_node,
after_place_node = function(pos, placer, itemstack, pointed_thing)
unifieddyes.fix_rotation_nsew(pos, placer, itemstack, pointed_thing)
end,
on_rotate = unifieddyes.fix_after_screwdriver_nsew,
on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
pos.y = pos.y+0 -- where do I put my ass ?
@ -105,8 +106,9 @@ 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_dig_node = unifieddyes.after_dig_node,
after_place_node = function(pos, placer, itemstack, pointed_thing)
unifieddyes.fix_rotation_nsew(pos, placer, itemstack, pointed_thing)
end,
on_rotate = unifieddyes.fix_after_screwdriver_nsew,
})
@ -162,7 +164,25 @@ minetest.register_alias('armchair', 'homedecor:armchair')
homedecor.old_static_chairs = {}
for _, color in ipairs(lrfurn.colors) do
local chair_colors = {
"black",
"brown",
"blue",
"cyan",
"dark_grey",
"dark_green",
"green",
"grey",
"magenta",
"orange",
"pink",
"red",
"violet",
"white",
"yellow",
}
for _, color in ipairs(chair_colors) do
table.insert(homedecor.old_static_chairs, "homedecor:chair_"..color)
table.insert(homedecor.old_static_chairs, "homedecor:armchair_"..color)
end
@ -211,8 +231,6 @@ minetest.register_lbm({
local param2 = paletteidx + new_fdir
local newname = "homedecor:armchair"
print(name, dump(a), dump(b), dump(color).."("..dump(paletteidx)..")", dump(param2))
if node.name == "homedecor:chair" then
newname = "homedecor:kitchen_chair_wood"
elseif string.find(node.name, "homedecor:chair_") then

View File

@ -70,6 +70,17 @@ minetest.register_craft({
},
})
unifieddyes.register_color_craft({
output = "homedecor:armchair",
palette = "wallmounted",
type = "shapeless",
neutral_node = "homedecor:armchair",
recipe = {
"NEUTRAL_NODE",
"MAIN_DYE"
}
})
minetest.register_craft({
type = "shapeless",
output = "homedecor:kitchen_chair_padded",
@ -79,6 +90,17 @@ minetest.register_craft({
},
})
unifieddyes.register_color_craft({
output = "homedecor:kitchen_chair_padded",
palette = "wallmounted",
type = "shapeless",
neutral_node = "homedecor:kitchen_chair_padded",
recipe = {
"NEUTRAL_NODE",
"MAIN_DYE"
}
})
minetest.register_craft({
type = "fuel",
recipe = "homedecor:kitchen_chair_wood",
@ -106,6 +128,17 @@ minetest.register_craft({
},
})
unifieddyes.register_color_craft({
output = "homedecor:standing_lamp_off",
palette = "extended",
type = "shapeless",
neutral_node = "homedecor:standing_lamp_off",
recipe = {
"NEUTRAL_NODE",
"MAIN_DYE"
}
})
minetest.register_craft({
type = "fuel",
recipe = "homedecor:table_lamp_off",
@ -131,14 +164,34 @@ minetest.register_craft({
})
minetest.register_craft({
output = "homedecor:standing_lamp_off",
output = "homedecor:table_lamp_off",
recipe = {
{ "homedecor:table_lamp_off"},
{ "group:stick"},
{ "group:stick"},
{ "wool:white", "default:torch", "wool:white"},
{ "", "group:stick", ""},
{ "", "moreblocks:slab_wood", "" },
},
})
minetest.register_craft({
output = "homedecor:table_lamp_off",
recipe = {
{ "cottages:wool", "default:torch", "cottages:wool"},
{ "", "group:stick", ""},
{ "", "moreblocks:slab_wood", "" },
},
})
unifieddyes.register_color_craft({
output = "homedecor:table_lamp_off",
palette = "extended",
type = "shapeless",
neutral_node = "homedecor:table_lamp_off",
recipe = {
"NEUTRAL_NODE",
"MAIN_DYE"
}
})
minetest.register_craft({
output = "homedecor:toilet",
recipe = {

View File

@ -213,20 +213,24 @@ homedecor.register("soda_machine", {
sounds = default.node_sound_wood_defaults(),
on_rotate = screwdriver.rotate_simple,
on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
local playername = clicker:get_player_name()
local wielditem = clicker:get_wielded_item()
local wieldname = wielditem:get_name()
local fdir_to_fwd = { {0, -1}, {-1, 0}, {0, 1}, {1, 0} }
local fdir = node.param2
local pos_drop = { x=pos.x+fdir_to_fwd[fdir+1][1], y=pos.y, z=pos.z+fdir_to_fwd[fdir+1][2] }
if wieldname == "homedecor:coin" then
wielditem:take_item()
clicker:set_wielded_item(wielditem)
minetest.spawn_item(pos_drop, "homedecor:soda_can")
minetest.sound_play("insert_coin", {
pos=pos, max_hear_distance = 5
})
if not creative.is_enabled_for(playername) then
wielditem:take_item()
clicker:set_wielded_item(wielditem)
return wielditem
end
else
minetest.chat_send_player(clicker:get_player_name(), S("Please insert a coin in the machine."))
minetest.chat_send_player(playername, S("Please insert a coin in the machine."))
end
end
})

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,10 +101,10 @@ 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
if not creative.is_enabled_for(placer_name) then
itemstack:take_item()
end
end
@ -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,22 @@ 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()
if leftnode.name == "homedecor:bed_regular" then
local newname = string.gsub(thisnode.name, "_regular", "_kingsize")
local meta = minetest.get_meta(pos)
local leftmeta = minetest.get_meta(leftpos)
minetest.set_node(pos, {name = "air"})
minetest.set_node(leftpos, { name = newname, param2 = fdir})
minetest.swap_node(leftpos, { name = newname, param2 = param2})
elseif rightnode.name == "homedecor:bed_regular" then
local newname = string.gsub(thisnode.name, "_regular", "_kingsize")
local meta = minetest.get_meta(pos)
local rightmeta = minetest.get_meta(rightpos)
minetest.set_node(rightpos, {name = "air"})
minetest.set_node(pos, { name = newname, param2 = fdir})
minetest.swap_node(pos, { name = newname, param2 = param2})
end
local toppos = {x=pos.x, y=pos.y+1.0, z=pos.z}
@ -234,18 +233,19 @@ 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
minetest.swap_node(toppos, { name = thisnode.name, param2 = param2})
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
@ -257,6 +257,8 @@ function homedecor.place_banister(itemstack, placer, pointed_thing)
if not pos then return itemstack end
local fdir = minetest.dir_to_facedir(placer:get_look_dir())
local meta = itemstack:get_meta()
local pindex = meta:get_int("palette_index")
local abovepos = { x=pos.x, y=pos.y+1, z=pos.z }
local abovenode = minetest.get_node(abovepos)
@ -360,14 +362,6 @@ function homedecor.place_banister(itemstack, placer, pointed_thing)
fdir = right_fwd_node.param2
pos = fwd_pos
new_place_name = string.gsub(right_fwd_node.name, "_diagonal_.-$", "_horizontal")
-- try to follow a horizontal with another of the same
elseif left_node and string.find(left_node.name, "homedecor:banister_.*_horizontal") then
fdir = left_node.param2
new_place_name = left_node.name
elseif right_node and string.find(right_node.name, "homedecor:banister_.*_horizontal") then
fdir = right_node.param2
new_place_name = right_node.name
end
-- manually invert left-right orientation
@ -379,7 +373,7 @@ function homedecor.place_banister(itemstack, placer, pointed_thing)
end
end
minetest.set_node(pos, {name = new_place_name, param2 = fdir})
minetest.set_node(pos, {name = new_place_name, param2 = fdir+pindex})
itemstack:take_item()
return itemstack
end

View File

@ -19,4 +19,6 @@ dofile(handlerpath.."registration.lua")
-- some nodes have particle spawners
dofile(handlerpath.."water_particles.lua")
dofile(handlerpath.."mt_game_beds_functions.lua")
dofile(handlerpath.."sit.lua")

View File

@ -0,0 +1,175 @@
-- This file is a partial copy of functions.lua from minetest_game's beds mod
-- with changes needed for homedecor's beds.
local pi = math.pi
local is_sp = minetest.is_singleplayer()
local enable_respawn = minetest.settings:get_bool("enable_bed_respawn")
if enable_respawn == nil then
enable_respawn = true
end
-- Helper functions
local function get_look_yaw(pos)
local n = minetest.get_node(pos)
local fdir = n.param2 % 4
if fdir == 0 then
return pi / 2, fdir
elseif fdir == 1 then
return -pi / 2, fdir
elseif fdir == 3 then
return pi, fdir
else
return 0, fdir
end
end
local function is_night_skip_enabled()
local enable_night_skip = minetest.settings:get_bool("enable_bed_night_skip")
if enable_night_skip == nil then
enable_night_skip = true
end
return enable_night_skip
end
local function check_in_beds(players)
local in_bed = beds.player
if not players then
players = minetest.get_connected_players()
end
for n, player in ipairs(players) do
local name = player:get_player_name()
if not in_bed[name] then
return false
end
end
return #players > 0
end
local function get_player_in_bed()
local player_in_bed = 0
for k,v in pairs(beds.player) do
player_in_bed = player_in_bed + 1
end
return player_in_bed
end
local function lay_down(player, pos, bed_pos, state, skip)
local name = player:get_player_name()
local hud_flags = player:hud_get_flags()
if not player or not name then
return
end
-- stand up
if state ~= nil and not state then
local p = beds.pos[name] or nil
if beds.player[name] ~= nil then
beds.player[name] = nil
end
-- skip here to prevent sending player specific changes (used for leaving players)
if skip then
return
end
if p then
player:setpos(p)
end
-- physics, eye_offset, etc
player:set_eye_offset({x = 0, y = 0, z = 0}, {x = 0, y = 0, z = 0})
player:set_look_horizontal(math.random(1, 180) / 100)
default.player_attached[name] = false
player:set_physics_override(1, 1, 1)
hud_flags.wielditem = true
default.player_set_animation(player, "stand" , 30)
-- lay down
else
beds.player[name] = 1
beds.pos[name] = pos
-- physics, eye_offset, etc
player:set_eye_offset({x = 0, y = -13, z = 0}, {x = 0, y = 0, z = 0})
local yaw, fdir = get_look_yaw(bed_pos)
player:set_look_horizontal(yaw)
local offsets = {
[0] = {0.5, 0},
[1] = {-0.5, 0},
[2] = {0, -0.5},
[3] = {0, 0.5}
}
local p = {x = bed_pos.x + offsets[fdir][1], y = bed_pos.y, z = bed_pos.z + offsets[fdir][2]}
player:set_physics_override(0, 0, 0)
player:setpos(p)
default.player_attached[name] = true
hud_flags.wielditem = false
default.player_set_animation(player, "lay" , 0)
end
player:hud_set_flags(hud_flags)
end
local function update_formspecs(finished)
local ges = #minetest.get_connected_players()
local player_in_bed = get_player_in_bed()
local form_n
local is_majority = (ges / 2) < player_in_bed
if finished then
form_n = beds.formspec .. "label[2.7,11; Good morning.]"
else
form_n = beds.formspec .. "label[2.2,11;" .. tostring(player_in_bed) ..
" of " .. tostring(ges) .. " players are in bed]"
if is_majority and is_night_skip_enabled() then
form_n = form_n .. "button_exit[2,8;4,0.75;force;Force night skip]"
end
end
for name,_ in pairs(beds.player) do
minetest.show_formspec(name, "beds_form", form_n)
end
end
-- Public functions
function homedecor.beds_on_rightclick(pos, node, player)
local name = player:get_player_name()
local ppos = player:getpos()
local tod = minetest.get_timeofday()
if tod > 0.2 and tod < 0.805 then
if beds.player[name] then
lay_down(player, nil, nil, false)
end
minetest.chat_send_player(name, "You can only sleep at night.")
return
end
-- move to bed
if not beds.player[name] then
lay_down(player, ppos, pos)
beds.set_spawns() -- save respawn positions when entering bed
else
lay_down(player, nil, nil, false)
end
if not is_sp then
update_formspecs(false)
end
-- skip the night and let all players stand up
if check_in_beds() then
minetest.after(2, function()
if not is_sp then
update_formspecs(is_night_skip_enabled())
end
if is_night_skip_enabled() then
beds.skip_night()
beds.kick_players()
end
end)
end
end

View File

@ -30,8 +30,8 @@ function homedecor.start_particle_spawner(pos, node, particledef, soundname)
end, s_handle)
end
minetest.delete_particlespawner(id)
this_spawner_meta:set_int("active", nil)
this_spawner_meta:set_int("sound", nil)
this_spawner_meta:set_int("active", 0)
this_spawner_meta:set_int("sound", 0)
return
end
@ -109,6 +109,6 @@ function homedecor.stop_particle_spawner(pos)
end, s_handle)
end
this_spawner_meta:set_int("active", nil)
this_spawner_meta:set_int("sound", nil)
this_spawner_meta:set_int("active", 0)
this_spawner_meta:set_int("sound", 0)
end

View File

@ -11,12 +11,8 @@ local modpath = minetest.get_modpath("homedecor")
local S = homedecor_i18n.gettext
homedecor = {
modpath = modpath,
-- infinite stacks
expect_infinite_stacks = minetest.setting_getbool("creative_mode") and not minetest.get_modpath("unified_inventory")
}
homedecor = {}
homedecor.modpath = modpath
-- Determine if the item being pointed at is the underside of a node (e.g a ceiling)
function homedecor.find_ceiling(itemstack, placer, pointed_thing)
@ -123,4 +119,6 @@ dofile(modpath.."/wardrobe.lua")
dofile(modpath.."/crafts.lua")
print("[HomeDecor] " .. S("Loaded!"))
if minetest.settings:get_bool("log_mod") then
minetest.log("action", "[HomeDecor] " .. S("Loaded!"))
end

View File

@ -21,6 +21,15 @@ minetest.register_node("homedecor:glowlight_half", {
"homedecor_glowlight_thick_sides.png",
"homedecor_glowlight_thick_sides.png"
},
overlay_tiles = {
{ name = "homedecor_glowlight_top_overlay.png", color = "white"},
"",
{ name = "homedecor_glowlight_thick_sides_overlay.png", color = "white"},
{ name = "homedecor_glowlight_thick_sides_overlay.png", color = "white"},
{ name = "homedecor_glowlight_thick_sides_overlay.png", color = "white"},
{ name = "homedecor_glowlight_thick_sides_overlay.png", color = "white"},
},
use_texture_alpha = true,
drawtype = "nodebox",
paramtype = "light",
paramtype2 = "colorwallmounted",
@ -35,8 +44,9 @@ 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_dig_node = unifieddyes.after_dig_node
after_place_node = function(pos, placer, itemstack, pointed_thing)
unifieddyes.fix_rotation(pos, placer, itemstack, pointed_thing)
end,
})
minetest.register_node("homedecor:glowlight_quarter", {
@ -49,6 +59,15 @@ minetest.register_node("homedecor:glowlight_quarter", {
"homedecor_glowlight_thin_sides.png",
"homedecor_glowlight_thin_sides.png"
},
overlay_tiles = {
{ name = "homedecor_glowlight_top_overlay.png", color = "white"},
"",
{ name = "homedecor_glowlight_thin_sides_overlay.png", color = "white"},
{ name = "homedecor_glowlight_thin_sides_overlay.png", color = "white"},
{ name = "homedecor_glowlight_thin_sides_overlay.png", color = "white"},
{ name = "homedecor_glowlight_thin_sides_overlay.png", color = "white"},
},
use_texture_alpha = true,
drawtype = "nodebox",
paramtype = "light",
paramtype2 = "colorwallmounted",
@ -63,8 +82,9 @@ 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_dig_node = unifieddyes.after_dig_node
after_place_node = function(pos, placer, itemstack, pointed_thing)
unifieddyes.fix_rotation(pos, placer, itemstack, pointed_thing)
end,
})
minetest.register_node("homedecor:glowlight_small_cube", {
@ -77,6 +97,15 @@ minetest.register_node("homedecor:glowlight_small_cube", {
"homedecor_glowlight_cube_sides.png",
"homedecor_glowlight_cube_sides.png"
},
overlay_tiles = {
{ name = "homedecor_glowlight_cube_tb_overlay.png", color = "white"},
{ name = "homedecor_glowlight_cube_tb_overlay.png", color = "white"},
{ name = "homedecor_glowlight_cube_sides_overlay.png", color = "white"},
{ name = "homedecor_glowlight_cube_sides_overlay.png", color = "white"},
{ name = "homedecor_glowlight_cube_sides_overlay.png", color = "white"},
{ name = "homedecor_glowlight_cube_sides_overlay.png", color = "white"},
},
use_texture_alpha = true,
paramtype = "light",
paramtype2 = "colorwallmounted",
drawtype = "nodebox",
@ -91,15 +120,17 @@ 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_dig_node = unifieddyes.after_dig_node
after_place_node = function(pos, placer, itemstack, pointed_thing)
unifieddyes.fix_rotation(pos, placer, itemstack, pointed_thing)
end,
})
homedecor.register("plasma_lamp", {
description = S("Plasma Lamp"),
drawtype = "glasslike_framed",
tiles = {"default_gold_block.png","homedecor_glass_face_clean.png"},
special_tiles = {
drawtype = "mesh",
mesh = "plasma_lamp.obj",
tiles = {
"default_gold_block.png",
{
name="homedecor_plasma_storm.png",
animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=2.0},
@ -110,16 +141,13 @@ homedecor.register("plasma_lamp", {
sunlight_propagates = true,
groups = {cracky=3,oddly_breakable_by_hand=3},
sounds = default.node_sound_glass_defaults(),
after_place_node = function(pos, placer, itemstack, pointed_thing)
minetest.swap_node(pos, {name = "homedecor:plasma_lamp", param2 = 255})
end
})
homedecor.register("plasma_ball", {
description = S("Plasma Ball"),
mesh = "homedecor_plasma_ball.obj",
tiles = {
"homedecor_generic_plastic.png",
{ name = "homedecor_generic_plastic.png", color = homedecor.color_black },
{
name = "homedecor_plasma_ball_streamers.png",
animation={type="vertical_frames", aspect_w=16, aspect_h=16, length=2.0},
@ -415,7 +443,6 @@ local function reg_lamp(suffix, nxt, light, brightness)
paramtype = "light",
paramtype2 = "color",
palette = "unifieddyes_palette_extended.png",
place_param2 = 240,
walkable = false,
light_source = light,
selection_box = tlamp_cbox,
@ -423,12 +450,17 @@ local function reg_lamp(suffix, nxt, light, brightness)
groups = {cracky=2,oddly_breakable_by_hand=1, ud_param2_colorable = 1,
not_in_creative_inventory=((light ~= nil) and 1) or nil,
},
drop = "homedecor:table_lamp_off",
on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
node.name = "homedecor:table_lamp_"..repl[suffix]
minetest.set_node(pos, node)
end,
after_dig_node = unifieddyes.after_dig_node
on_construct = unifieddyes.on_construct,
drop = {
items = {
{items = {"homedecor:table_lamp_off"}, inherit_color = true },
}
}
})
homedecor.register("standing_lamp_"..suffix, {
@ -444,7 +476,6 @@ local function reg_lamp(suffix, nxt, light, brightness)
paramtype = "light",
paramtype2 = "color",
palette = "unifieddyes_palette_extended.png",
place_param2 = 240,
walkable = false,
light_source = light,
groups = {cracky=2,oddly_breakable_by_hand=1, ud_param2_colorable = 1,
@ -457,8 +488,13 @@ local function reg_lamp(suffix, nxt, light, brightness)
node.name = "homedecor:standing_lamp_"..repl[suffix]
minetest.set_node(pos, node)
end,
after_dig_node = unifieddyes.after_dig_node,
expand = { top="placeholder" },
on_construct = unifieddyes.on_construct,
--expand = { top="air" },
drop = {
items = {
{items = {"homedecor:standing_lamp_off"}, inherit_color = true },
}
}
})
-- for old maps that had the original 3dforniture mod
@ -495,8 +531,9 @@ 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_dig_node = unifieddyes.after_dig_node,
after_place_node = function(pos, placer, itemstack, pointed_thing)
unifieddyes.fix_rotation_nsew(pos, placer, itemstack, pointed_thing)
end,
on_rotate = unifieddyes.fix_after_screwdriver_nsew
})
@ -698,28 +735,3 @@ minetest.register_lbm({
meta:set_string("dye", "unifieddyes:"..color)
end
})
minetest.register_lbm({
name = "homedecor:recolor_lighting",
label = "Convert some kinds of lights to use UD extended palette",
run_at_every_load = false,
nodenames = {
"homedecor:table_lamp_off",
"homedecor:table_lamp_low",
"homedecor:table_lamp_med",
"homedecor:table_lamp_hi",
"homedecor:table_lamp_max",
"homedecor:standing_lamp_off",
"homedecor:standing_lamp_low",
"homedecor:standing_lamp_med",
"homedecor:standing_lamp_hi",
"homedecor:standing_lamp_max",
},
action = function(pos, node)
local meta = minetest.get_meta(pos)
if meta:get_string("palette") ~= "ext" then
minetest.swap_node(pos, { name = node.name, param2 = unifieddyes.convert_classic_palette[node.param2] })
meta:set_string("palette", "ext")
end
end
})

View File

@ -396,7 +396,7 @@ local n = { 1, 2 }
for _, i in ipairs(n) do
homedecor.register("picture_frame"..i, {
description = S("Picture Frame"),
description = S("Picture Frame "..i),
mesh = "homedecor_picture_frame.obj",
tiles = {
"homedecor_picture_frame_image"..i..".png",
@ -483,23 +483,19 @@ for _, side in ipairs({"diagonal_left", "diagonal_right", "horizontal"}) do
local name, matdesc, tile1, tile2 = unpack(mat)
local nodename = "banister_"..name.."_"..side
local groups = { snappy = 3, not_in_creative_inventory = 1 }
local cbox = {
type = "fixed",
fixed = { -9/16, -3/16, 5/16, 9/16, 24/16, 8/16 }
}
if side == "horizontal" then
groups = { snappy = 3 }
cbox = {
type = "fixed",
fixed = { -8/16, -8/16, 5/16, 8/16, 8/16, 8/16 }
}
else
minetest.register_alias(string.gsub("homedecor:"..nodename, "diagonal_", ""), "homedecor:"..nodename)
end
homedecor.register(nodename, {
local def = {
description = S("Banister for Stairs (@1, @2)", matdesc, sidedesc),
mesh = "homedecor_banister_"..side..".obj",
tiles = {
@ -507,12 +503,36 @@ for _, side in ipairs({"diagonal_left", "diagonal_right", "horizontal"}) do
tile2,
},
inventory_image = "homedecor_banister_"..name.."_inv.png",
groups = groups,
selection_box = cbox,
collision_box = cbox,
groups = { snappy = 3},
on_place = homedecor.place_banister,
drop = "homedecor:banister_"..name.."_horizontal",
})
}
if side ~= "horizontal" then
def.groups.not_in_creative_inventory = 1
end
if name == "wood" then
def.airbrush_replacement_node = "homedecor:banister_wood_"..side.."_grey"
def.groups.ud_param2_colorable = 1
def.paramtype2 = "colorfacedir"
end
homedecor.register(nodename, def)
if name == "wood" then
local nn = "homedecor:"..nodename
local def2 = table.copy(minetest.registered_items[nn])
def2.tiles = {
homedecor.white_wood,
homedecor.white_wood
}
def2.inventory_image = "homedecor_banister_wood_colored_inv.png"
def2.groups.not_in_creative_inventory = 1
unifieddyes.generate_split_palette_nodes(nn, def2, "homedecor:banister_"..name.."_horizontal")
end
end
end

View File

@ -1,44 +0,0 @@
# Blender v2.72 (sub 0) OBJ File: 'unifiedbricks_brick_block.blend'
# www.blender.org
o Cube
v 0.496092 0.496092 0.496092
v 0.496092 0.496092 -0.496092
v -0.496092 0.496092 -0.496092
v -0.496092 0.496092 0.496092
v 0.496092 -0.496092 0.496092
v 0.496092 -0.496092 -0.496092
v -0.496092 -0.496092 -0.496092
v -0.496092 -0.496092 0.496092
v 0.499750 0.499750 0.499750
v 0.499750 0.499750 -0.499750
v -0.499750 0.499750 -0.499750
v -0.499750 0.499750 0.499750
v 0.499750 -0.499750 0.499750
v 0.499750 -0.499750 -0.499750
v -0.499750 -0.499750 -0.499750
v -0.499750 -0.499750 0.499750
vt 1.000000 0.000000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt 0.000000 0.000000
vn 0.000000 -1.000000 0.000000
vn -1.000000 0.000000 0.000000
vn 0.000000 1.000000 0.000000
vn 1.000000 0.000000 0.000000
vn 0.000000 0.000000 -1.000000
vn 0.000000 0.000000 1.000000
g Cube_Cube_base
s off
f 8/1/1 7/2/1 6/3/1 5/4/1
f 4/2/2 3/3/2 7/4/2 8/1/2
f 1/3/3 2/4/3 3/1/3 4/2/3
f 2/2/4 1/3/4 5/4/4 6/1/4
f 3/2/5 2/3/5 6/4/5 7/1/5
f 1/2/6 4/3/6 8/4/6 5/1/6
g Cube_Cube_overlay
f 16/1/1 15/2/1 14/3/1 13/4/1
f 12/2/2 11/3/2 15/4/2 16/1/2
f 9/3/3 10/4/3 11/1/3 12/2/3
f 10/2/4 9/3/4 13/4/4 14/1/4
f 11/2/5 10/3/5 14/4/5 15/1/5
f 9/2/6 12/3/6 16/4/6 13/1/6

View File

@ -1,243 +1,206 @@
# Blender v2.72 (sub 0) OBJ File: 'book.blend'
# Blender v2.78 (sub 0) OBJ File: 'book.blend'
# www.blender.org
o Cube.002_Cube.001
v -0.216625 -0.161995 -0.448008
v -0.216625 -0.149566 -0.485966
v -0.216625 -0.113157 -0.485966
v -0.216625 -0.142021 -0.448008
v -0.208120 -0.115781 -0.485966
v -0.208120 -0.142021 -0.448008
v 0.220555 -0.113157 -0.485966
v 0.220555 0.159347 -0.485966
v 0.212050 -0.115781 -0.485966
v -0.208120 -0.161995 -0.448008
v -0.208120 0.148926 -0.485966
v -0.208120 0.155653 -0.448008
v 0.212051 0.155653 -0.448008
v 0.212051 0.148926 -0.485966
v -0.208120 -0.152482 -0.485966
v 0.212050 -0.152482 -0.485966
v 0.220555 -0.161995 -0.448008
v 0.212050 -0.161995 -0.448008
v 0.212050 -0.145193 -0.500002
v -0.208120 -0.145193 -0.500002
v -0.208120 -0.115781 -0.500002
v 0.212050 -0.115781 -0.500002
v 0.212050 -0.115781 -0.396013
v -0.208120 -0.115781 -0.396013
v -0.208120 -0.145193 -0.396013
v 0.212050 -0.145193 -0.396013
v 0.212050 -0.152482 -0.410049
v -0.208120 -0.152482 -0.410049
v 0.212051 0.148926 -0.410049
v -0.208120 0.148926 -0.410049
v 0.212050 -0.115781 -0.410049
v 0.220555 0.159347 -0.410049
v 0.220555 -0.113157 -0.410049
v -0.208120 -0.115781 -0.410049
v -0.216625 -0.113157 -0.410049
v -0.216625 -0.149566 -0.410049
v -0.216625 -0.115781 -0.396013
v -0.216625 -0.141549 -0.396013
v 0.220555 -0.149566 -0.410049
v 0.220555 -0.141549 -0.396013
v 0.220555 0.159346 -0.396013
v -0.216624 0.159347 -0.396013
v 0.220555 -0.115781 -0.396013
v -0.216624 0.159347 -0.410049
v -0.216625 -0.115781 -0.500002
v -0.216625 -0.141549 -0.500002
v 0.212050 -0.142021 -0.448008
v 0.220555 -0.149566 -0.485966
v 0.220555 -0.141549 -0.500002
v 0.220555 0.159346 -0.500002
v -0.216624 0.159347 -0.500002
v 0.220555 -0.142021 -0.448008
v 0.220555 -0.115781 -0.500002
v -0.216624 0.159347 -0.485966
v -0.216625 -0.162729 -0.448008
v -0.216625 -0.150269 -0.486432
v -0.208120 -0.162729 -0.448008
v -0.208120 -0.153192 -0.486432
v 0.212050 -0.153192 -0.486432
v 0.220555 -0.162729 -0.448008
v 0.212050 -0.162729 -0.448008
v 0.212050 -0.145885 -0.500640
v -0.208120 -0.145885 -0.500640
v -0.208120 -0.116399 -0.500640
v 0.212050 -0.116399 -0.500640
v 0.212050 -0.116399 -0.395375
v -0.208120 -0.116399 -0.395375
v -0.208120 -0.145885 -0.395375
v 0.212050 -0.145885 -0.395375
v 0.212050 -0.153192 -0.409583
v -0.208120 -0.153192 -0.409583
v -0.216625 -0.150269 -0.409583
v -0.216625 -0.116399 -0.395375
v -0.216625 -0.142232 -0.395375
v 0.220555 -0.150269 -0.409583
v 0.220555 -0.142232 -0.395375
v 0.220555 0.159416 -0.395375
v -0.216624 0.159417 -0.395375
v 0.220555 -0.116399 -0.395375
v -0.216625 -0.116399 -0.500640
v -0.216625 -0.142232 -0.500640
v 0.220555 -0.150269 -0.486432
v 0.220555 -0.142232 -0.500640
v 0.220555 0.159416 -0.500640
v -0.216624 0.159417 -0.500640
v 0.220555 -0.116399 -0.500640
vt 0.921987 0.383861
vt 0.921987 0.340448
vt 0.931829 0.340448
vt 0.931829 0.383861
vt 0.931829 0.427274
vt 0.921987 0.427274
vt 0.768089 0.490273
vt 0.722954 0.490273
vt 0.722954 0.009727
vt 0.768089 0.009727
vt 0.768089 0.500000
vt 0.722404 0.500000
vt 0.809636 0.490273
vt 0.809086 0.500000
vt 0.352434 0.000000
vt 0.670829 0.000000
vt 0.670829 0.009727
vt 0.670829 0.490273
vt 0.670829 0.500000
vt 0.352433 0.499999
vt 0.809636 0.009727
vt 0.809086 0.000000
vt 0.823601 0.000000
vt 0.824288 0.009727
vt 0.012060 0.509727
vt 0.000000 0.500001
vt 0.315359 0.500000
vt 0.318396 0.509727
vt 0.700649 0.000000
vt 0.704866 0.009727
vt 0.731001 0.867517
vt 0.731001 0.844673
vt 0.774928 0.811661
vt 0.774928 0.853302
vt 0.687072 0.853302
vt 0.687072 0.811661
vt 0.774928 0.500000
vt 0.791171 0.500000
vt 0.791171 0.814662
vt 0.791171 0.844133
vt 0.851343 0.522844
vt 0.851343 0.500000
vt 0.895271 0.514215
vt 0.895271 0.555856
vt 0.912144 0.383862
vt 0.912144 0.340448
vt 0.334639 0.500000
vt 0.334639 0.999999
vt 0.318396 0.999999
vt 0.318396 0.500000
vt 0.895271 0.867517
vt 0.911514 0.523384
vt 0.911514 0.552855
vt 0.911514 0.867516
vt 0.824288 0.490273
vt 0.823601 0.500000
vt 0.807415 0.555856
vt 0.807415 0.514215
vt 0.768089 0.000000
vt 0.722404 0.000000
vt 0.912144 0.427274
vt 0.318396 0.990273
vt 0.315359 1.000000
vt 0.000000 1.000000
vt 0.012060 0.990274
vt 0.704866 0.490273
vt 0.318396 0.490273
vt 0.318396 0.009727
vt 0.352433 0.009727
vt 0.352433 0.490273
vt 0.705553 0.490273
vt 0.705553 0.009727
vt 0.670829 0.509727
vt 0.364493 0.509726
vt 0.667792 0.500000
vt 0.318396 0.000000
vt 0.348216 0.000000
vt 0.704866 0.500000
vt 0.807415 0.867517
vt 0.791172 0.867516
vt 0.791171 0.552855
vt 0.791171 0.523384
vt 0.336190 0.500000
vt 0.352433 0.999999
vt 0.336190 0.999999
vt 0.670829 0.844133
vt 0.670829 0.814662
vt 0.687072 0.500000
vt 0.348216 0.500000
vt 0.364493 0.990273
vt 0.670829 0.990273
vt 0.667792 1.000000
vt 0.704866 0.000000
vt 0.000000 0.000001
vt 0.668539 0.639838
vt 0.640677 0.639838
vt 0.640677 0.630641
vt 0.672479 0.630641
vt 0.439305 1.000000
vt 0.439305 0.319104
vt 0.527160 0.379125
vt 0.527160 0.984613
vt 0.087857 1.000000
vt 0.087857 0.319104
vt 0.175712 0.334491
vt 0.175712 0.939979
vt 0.351448 0.984613
vt 0.351448 0.379125
vt 0.000000 0.939979
vt 0.000000 0.334491
vt 0.351448 0.000000
vt 0.351448 0.961094
vt 0.263593 0.961094
vt 0.263593 0.000000
vt 0.175736 0.000000
vt 0.175736 0.961094
vn -0.123900 0.803100 -0.582900
vn -0.123900 0.803000 0.582900
vn 0.000000 -0.970000 0.243100
vn 0.162500 -0.947900 0.274000
vn 0.162500 -0.947900 -0.274000
vn 0.000000 0.000000 -1.000000
vn -0.320700 -0.831600 -0.453400
vn 0.000000 -0.000000 1.000000
vn -1.000000 0.000000 0.000000
vn 1.000000 0.000000 0.000000
vn 0.123900 0.803100 -0.582900
vn 0.000000 1.000000 -0.000000
vn 0.320700 -0.831600 -0.453400
vn -0.162500 -0.947900 -0.274000
vn 0.000000 -0.970000 -0.243100
vn -0.162500 -0.947900 0.274000
vn 0.123900 0.803000 0.582900
vn 0.000000 -0.887500 -0.460900
vn 0.000000 -0.887500 0.460900
vn 0.320700 -0.831600 0.453400
vn -0.320700 -0.831600 0.453400
vn 0.000000 0.984700 -0.174500
vn -0.000000 0.984700 0.174500
vn 0.000000 -0.970600 0.240900
vn 0.163000 -0.948500 0.271500
vn 0.163000 -0.948500 -0.271500
vn -0.322100 -0.833000 -0.449800
vn 0.322100 -0.833000 -0.449800
vn -0.163000 -0.948500 -0.271500
vn 0.000000 -0.970600 -0.240900
vn -0.163000 -0.948500 0.271500
vn 0.000000 -0.889300 -0.457400
vn 0.000000 -0.889300 0.457400
vn 0.322100 -0.833000 0.449800
vn -0.322100 -0.833000 0.449800
v 0.161995 -0.448008 0.216625
v 0.149566 -0.485966 0.216625
v 0.113157 -0.485966 0.216625
v 0.142021 -0.448008 0.216625
v 0.115781 -0.485966 0.208120
v 0.142021 -0.448008 0.208120
v 0.113157 -0.485966 -0.220555
v -0.159347 -0.485966 -0.220555
v 0.115781 -0.485966 -0.212050
v 0.161995 -0.448008 0.208120
v -0.148926 -0.485966 0.208120
v -0.155653 -0.448008 0.208120
v -0.155653 -0.448008 -0.212051
v -0.148926 -0.485966 -0.212051
v 0.152482 -0.485966 0.208120
v 0.152482 -0.485966 -0.212050
v 0.161995 -0.448008 -0.220555
v 0.161995 -0.448008 -0.212050
v 0.145193 -0.500002 -0.212050
v 0.145193 -0.500002 0.208120
v 0.115781 -0.500002 0.208120
v 0.115781 -0.500002 -0.212050
v 0.115781 -0.396013 -0.212050
v 0.115781 -0.396013 0.208120
v 0.145193 -0.396013 0.208120
v 0.145193 -0.396013 -0.212050
v 0.152482 -0.410049 -0.212050
v 0.152482 -0.410049 0.208120
v -0.148926 -0.410049 -0.212051
v -0.148926 -0.410049 0.208120
v 0.115781 -0.410049 -0.212050
v -0.159347 -0.410049 -0.220555
v 0.113157 -0.410049 -0.220555
v 0.115781 -0.410049 0.208120
v 0.113157 -0.410049 0.216625
v 0.149566 -0.410049 0.216625
v 0.115781 -0.396013 0.216625
v 0.141549 -0.396013 0.216625
v 0.149566 -0.410049 -0.220555
v 0.141549 -0.396013 -0.220555
v -0.159346 -0.396013 -0.220555
v -0.159347 -0.396013 0.216624
v 0.115781 -0.396013 -0.220555
v -0.159347 -0.410049 0.216624
v 0.115781 -0.500002 0.216625
v 0.141549 -0.500002 0.216625
v 0.142021 -0.448008 -0.212050
v 0.149566 -0.485966 -0.220555
v 0.141549 -0.500002 -0.220555
v -0.159346 -0.500002 -0.220555
v -0.159347 -0.500002 0.216624
v 0.142021 -0.448008 -0.220555
v 0.115781 -0.500002 -0.220555
v -0.159347 -0.485966 0.216624
vt 0.9220 0.3839
vt 0.9220 0.3404
vt 0.9318 0.3404
vt 0.9318 0.3839
vt 0.9318 0.4273
vt 0.9220 0.4273
vt 0.7681 0.4903
vt 0.7230 0.4903
vt 0.7230 0.0097
vt 0.7681 0.0097
vt 0.7681 0.5000
vt 0.7224 0.5000
vt 0.8096 0.4903
vt 0.8091 0.5000
vt 0.3524 0.0000
vt 0.6708 0.0000
vt 0.6708 0.0097
vt 0.6708 0.4903
vt 0.6708 0.5000
vt 0.3524 0.5000
vt 0.8096 0.0097
vt 0.8091 0.0000
vt 0.8236 0.0000
vt 0.8243 0.0097
vt 0.0121 0.5097
vt 0.0000 0.5000
vt 0.3154 0.5000
vt 0.3184 0.5097
vt 0.7006 0.0000
vt 0.7049 0.0097
vt 0.7310 0.8675
vt 0.7310 0.8447
vt 0.7749 0.8117
vt 0.7749 0.8533
vt 0.6871 0.8533
vt 0.6871 0.8117
vt 0.7749 0.5000
vt 0.7912 0.5000
vt 0.7912 0.8147
vt 0.7912 0.8441
vt 0.8513 0.5228
vt 0.8513 0.5000
vt 0.8953 0.5142
vt 0.8953 0.5559
vt 0.9220 0.3404
vt 0.9220 0.3839
vt 0.9121 0.3839
vt 0.9121 0.3404
vt 0.3346 0.5000
vt 0.3346 1.0000
vt 0.3184 1.0000
vt 0.3184 0.5000
vt 0.8953 0.8675
vt 0.9115 0.5234
vt 0.9115 0.5529
vt 0.9115 0.8675
vt 0.8243 0.4903
vt 0.8236 0.5000
vt 0.8074 0.5559
vt 0.8074 0.5142
vt 0.7681 0.0000
vt 0.7224 0.0000
vt 0.9220 0.4273
vt 0.9121 0.4273
vt 0.3184 0.9903
vt 0.3154 1.0000
vt 0.0000 1.0000
vt 0.0121 0.9903
vt 0.7049 0.4903
vt 0.3184 0.4903
vt 0.3184 0.0097
vt 0.3524 0.0097
vt 0.3524 0.4903
vt 0.7056 0.4903
vt 0.7056 0.0097
vt 0.6708 0.5097
vt 0.3645 0.5097
vt 0.3524 0.5000
vt 0.6678 0.5000
vt 0.3184 0.0000
vt 0.3482 0.0000
vt 0.7049 0.5000
vt 0.8074 0.8675
vt 0.7912 0.8675
vt 0.7912 0.5529
vt 0.7912 0.5234
vt 0.3362 0.5000
vt 0.3524 1.0000
vt 0.3362 1.0000
vt 0.6708 0.8441
vt 0.6708 0.8147
vt 0.6708 0.5000
vt 0.6871 0.5000
vt 0.3482 0.5000
vt 0.3184 0.5000
vt 0.3645 0.9903
vt 0.6708 0.9903
vt 0.6678 1.0000
vt 0.7049 0.0000
vt 0.0000 0.5000
vt 0.0000 0.0000
vt 0.6685 0.6398
vt 0.6407 0.6398
vt 0.6407 0.6306
vt 0.6725 0.6306
vt 0.4393 1.0000
vt 0.4393 0.3191
vt 0.5272 0.3791
vt 0.5272 0.9846
vt 0.0879 1.0000
vt 0.0879 0.3191
vt 0.1757 0.3345
vt 0.1757 0.9400
vt 0.3514 0.9846
vt 0.3514 0.3791
vt 0.0000 0.9400
vt 0.0000 0.3345
vt 0.3514 0.0000
vt 0.3514 0.9611
vt 0.2636 0.9611
vt 0.2636 0.0000
vt 0.1757 0.0000
vt 0.1757 0.9611
vn -0.8031 -0.5829 0.1239
vn -0.8030 0.5829 0.1239
vn 0.9700 0.2431 -0.0000
vn 0.9479 0.2740 -0.1625
vn 0.9479 -0.2740 -0.1625
vn -0.0000 -1.0000 -0.0000
vn 0.8316 -0.4534 0.3207
vn 0.0000 1.0000 -0.0000
vn 0.0000 0.0000 1.0000
vn 0.0000 0.0000 -1.0000
vn -0.8031 -0.5829 -0.1239
vn -1.0000 -0.0000 -0.0000
vn 0.8316 -0.4534 -0.3207
vn 0.9479 -0.2740 0.1625
vn 0.9700 -0.2431 -0.0000
vn 0.9479 0.2740 0.1625
vn -0.8030 0.5829 -0.1239
vn 0.8875 -0.4609 -0.0000
vn 0.8875 0.4609 -0.0000
vn 0.8316 0.4534 -0.3207
vn 0.8316 0.4534 0.3207
vn -0.9847 -0.1745 0.0000
vn -0.9847 0.1745 0.0000
g Cube.002_Cube.001_Cube.002_Cube.001_cover
s off
f 47/1/1 31/2/1 33/3/1 52/4/1
@ -253,58 +216,37 @@ f 1/31/9 4/32/9 3/33/9 2/34/9
f 1/31/9 36/35/9 35/36/9 4/32/9
f 2/34/9 3/33/9 54/37/9 51/38/9 45/39/9 46/40/9
f 52/41/10 17/42/10 48/43/10 7/44/10
f 34/2/11 6/1/11 4/45/11 35/46/11
f 50/47/12 51/48/12 54/49/12 8/50/12
f 8/51/10 7/44/10 48/43/10 49/52/10 53/53/10 50/54/10
f 19/55/13 49/56/13 48/14/13 16/13/13
f 52/41/10 33/57/10 39/58/10 17/42/10
f 10/10/14 1/59/14 2/22/14 15/21/14
f 34/45/11 6/46/11 4/47/11 35/48/11
f 50/49/12 51/50/12 54/51/12 8/52/12
f 8/53/10 7/44/10 48/43/10 49/54/10 53/55/10 50/56/10
f 19/57/13 49/58/13 48/14/13 16/13/13
f 52/41/10 33/59/10 39/60/10 17/42/10
f 10/10/14 1/61/14 2/22/14 15/21/14
f 18/7/15 10/10/15 15/21/15 16/13/15
f 10/10/16 28/9/16 36/60/16 1/59/16
f 5/6/17 3/61/17 4/45/17 6/1/17
f 9/62/8 7/63/8 8/64/8 14/65/8
f 16/13/18 15/21/18 20/24/18 19/55/18
f 22/17/6 19/30/6 20/66/6 21/18/6
f 23/67/8 24/68/8 25/69/8 26/70/8
f 27/8/19 26/71/19 25/72/19 28/9/19
f 31/73/6 29/74/6 32/20/6 33/75/6
f 25/69/8 24/68/8 37/76/8 38/77/8
f 26/71/20 27/8/20 39/12/20 40/78/20
f 32/79/10 41/80/10 43/81/10 40/82/10 39/58/10 33/57/10
f 41/83/12 32/20/12 44/84/12 42/85/12
f 36/35/9 38/86/9 37/87/9 42/19/9 44/88/9 35/36/9
f 23/67/8 26/70/8 40/89/8 43/50/8
f 30/90/6 34/91/6 35/92/6 44/84/6
f 28/9/21 25/72/21 38/93/21 36/60/21
f 29/74/6 30/90/6 44/84/6 32/20/6
f 41/26/8 42/94/8 37/76/8 24/68/8 23/67/8 43/50/8
f 54/26/8 11/25/8 14/65/8 8/64/8
f 46/95/6 45/96/6 21/97/6 20/98/6
f 10/10/16 28/9/16 36/62/16 1/61/16
f 5/63/17 3/64/17 4/47/17 6/46/17
f 9/65/8 7/66/8 8/67/8 14/68/8
f 16/13/18 15/21/18 20/24/18 19/57/18
f 22/17/6 19/30/6 20/69/6 21/18/6
f 23/70/8 24/71/8 25/72/8 26/73/8
f 27/8/19 26/74/19 25/75/19 28/9/19
f 31/76/6 29/77/6 32/78/6 33/79/6
f 25/72/8 24/71/8 37/80/8 38/81/8
f 26/74/20 27/8/20 39/12/20 40/82/20
f 32/83/10 41/84/10 43/85/10 40/86/10 39/60/10 33/59/10
f 41/87/12 32/78/12 44/88/12 42/89/12
f 36/35/9 38/90/9 37/91/9 42/92/9 44/93/9 35/36/9
f 23/70/8 26/73/8 40/94/8 43/95/8
f 30/96/6 34/97/6 35/98/6 44/88/6
f 28/9/21 25/75/21 38/99/21 36/62/21
f 29/77/6 30/96/6 44/88/6 32/78/6
f 41/100/8 42/101/8 37/80/8 24/71/8 23/70/8 43/95/8
f 54/26/8 11/25/8 14/68/8 8/67/8
f 46/102/6 45/103/6 21/104/6 20/105/6
g Cube.002_Cube.001_Cube.002_Cube.001_edges
f 13/99/10 47/100/10 9/101/10 14/102/10
f 6/103/9 12/104/9 11/105/9 5/106/9
f 13/99/10 29/107/10 31/108/10 47/100/10
f 6/103/9 34/109/9 30/110/9 12/104/9
f 14/111/22 11/112/22 12/113/22 13/114/22
f 29/115/23 13/114/23 12/113/23 30/116/23
g Cube.002_Cube.001_Cube.002_Cube.001_trim
f 61/7/24 70/8/24 71/9/24 57/10/24
f 70/8/25 61/7/25 60/11/25 75/12/25
f 59/13/26 82/14/26 60/11/26 61/7/26
f 84/15/6 86/16/6 65/17/6 64/18/6 80/19/6 85/20/6
f 58/21/27 56/22/27 81/23/27 63/24/27
f 65/17/6 86/16/6 83/29/6 62/30/6
f 62/55/28 83/56/28 82/14/28 59/13/28
f 57/10/29 55/59/29 56/22/29 58/21/29
f 61/7/30 57/10/30 58/21/30 59/13/30
f 57/10/31 71/9/31 72/60/31 55/59/31
f 59/13/32 58/21/32 63/24/32 62/55/32
f 65/17/6 62/30/6 63/66/6 64/18/6
f 66/67/8 67/68/8 68/69/8 69/70/8
f 70/8/33 69/71/33 68/72/33 71/9/33
f 68/69/8 67/68/8 73/76/8 74/77/8
f 69/71/34 70/8/34 75/12/34 76/78/34
f 66/67/8 69/70/8 76/89/8 79/50/8
f 71/9/35 68/72/35 74/93/35 72/60/35
f 77/26/8 78/94/8 73/76/8 67/68/8 66/67/8 79/50/8
f 81/95/6 80/96/6 64/97/6 63/98/6
f 13/106/10 47/107/10 9/108/10 14/109/10
f 6/110/9 12/111/9 11/112/9 5/113/9
f 13/106/10 29/114/10 31/115/10 47/107/10
f 6/110/9 34/116/9 30/117/9 12/111/9
f 14/118/22 11/119/22 12/120/22 13/121/22
f 29/122/23 13/121/23 12/120/23 30/123/23

View File

@ -1,327 +1,335 @@
# Blender v2.72 (sub 0) OBJ File: 'book-open.blend'
# Blender v2.78 (sub 0) OBJ File: 'book-open.blend'
# www.blender.org
o Cube.002_Cube.001
v -0.216625 0.012428 -0.485966
v 0.220555 -0.000000 -0.486750
v 0.220555 0.321341 -0.485966
v -0.208120 -0.000001 -0.462863
v -0.208120 0.310920 -0.485966
v -0.208120 0.306022 -0.464409
v 0.212051 0.306022 -0.464409
v 0.212051 0.310921 -0.485966
v 0.212050 -0.000000 -0.462862
v 0.212050 0.016802 -0.500002
v -0.208120 0.016801 -0.500002
v -0.208120 0.046213 -0.500002
v 0.212050 0.046214 -0.500002
v -0.216625 0.046213 -0.500002
v -0.216625 0.020445 -0.500002
v 0.220555 0.012429 -0.485966
v 0.220555 0.020446 -0.500002
v 0.220555 0.321340 -0.500002
v -0.216624 0.321341 -0.500002
v 0.220555 0.046214 -0.500002
v -0.216624 0.321341 -0.485966
v -0.208120 0.238235 -0.450057
v -0.216625 -0.000001 -0.486750
v 0.212051 0.238236 -0.450057
v -0.208120 -0.306023 -0.464409
v 0.212051 -0.306023 -0.464409
v -0.208120 -0.238237 -0.450057
v 0.212051 -0.238237 -0.450057
v 0.212050 -0.046214 -0.500003
v -0.208120 -0.046215 -0.500003
v -0.208120 -0.016803 -0.500003
v 0.212050 -0.016803 -0.500003
v -0.216625 -0.000001 -0.481442
v 0.220555 -0.000000 -0.481442
v 0.212051 -0.310922 -0.485967
v -0.208120 -0.310922 -0.485967
v 0.220555 -0.321342 -0.485967
v -0.216625 -0.012430 -0.485967
v -0.216625 -0.046215 -0.500003
v -0.216625 -0.020447 -0.500003
v 0.220555 -0.012429 -0.485967
v 0.220555 -0.020446 -0.500003
v 0.220555 -0.321341 -0.500003
v -0.216624 -0.321343 -0.500003
v 0.220555 -0.046214 -0.500003
v -0.216624 -0.321343 -0.485967
v -0.208120 -0.000001 -0.486750
v 0.212050 -0.000000 -0.486750
v 0.212051 -0.086920 -0.442244
v -0.208120 -0.086920 -0.442244
v 0.212051 0.086847 -0.442244
v -0.208120 0.086847 -0.442244
v 0.212050 0.043405 -0.447755
v -0.208120 0.043405 -0.447755
v 0.212050 -0.043478 -0.447755
v -0.208120 -0.043478 -0.447755
v -0.216625 -0.010224 -0.490836
v -0.216625 0.006214 -0.482857
v 0.220555 0.006214 -0.482857
v -0.208120 0.008400 -0.490836
v 0.212050 0.008401 -0.490836
v 0.220555 0.010223 -0.490836
v -0.216625 0.010222 -0.490836
v 0.220555 -0.010223 -0.490836
v 0.212050 -0.008401 -0.490836
v -0.208120 -0.008402 -0.490836
v 0.220555 -0.006215 -0.482858
v -0.216625 -0.006215 -0.482858
v 0.212050 0.012429 -0.485966
v 0.212050 -0.000000 -0.481442
v 0.212050 -0.012429 -0.485967
v 0.212050 0.006214 -0.482857
v 0.212050 -0.006215 -0.482858
v -0.208120 0.012428 -0.485966
v -0.208120 -0.000001 -0.481442
v -0.208120 -0.012430 -0.485967
v -0.208120 0.006214 -0.482857
v -0.208120 -0.006215 -0.482858
vt 0.965735 0.839196
vt 0.711783 0.839196
vt 0.711783 0.832541
vt 0.711783 0.503765
vt 0.711783 0.497110
vt 0.965736 0.497110
vt 0.395683 0.494736
vt 0.395683 0.261171
vt 0.403533 0.261171
vt 0.403532 0.502890
vt 0.687998 0.839196
vt 0.684635 0.832541
vt 0.987044 0.738829
vt 0.987044 0.497110
vt 1.000000 0.497110
vt 0.999999 0.712393
vt 0.999999 0.732556
vt 0.992051 0.000000
vt 0.992051 0.342086
vt 0.979145 0.342086
vt 0.979145 0.000000
vt 0.969912 1.000000
vt 0.969911 0.758280
vt 0.982867 0.764553
vt 0.982867 0.784716
vt 0.982868 0.999999
vt 0.403533 0.241720
vt 0.395683 0.241720
vt 0.395683 0.008154
vt 0.403532 0.000000
vt 0.684634 0.503765
vt 0.007850 0.008154
vt 0.000000 0.000000
vt 0.657486 0.832541
vt 0.657486 0.503765
vt 0.657486 0.497110
vt 0.681271 0.497110
vt 0.969911 0.497110
vt 0.982867 0.497110
vt 0.982868 0.712393
vt 0.982868 0.732556
vt 0.969912 0.738829
vt 0.966239 0.000000
vt 0.966239 0.342086
vt 0.987044 0.758280
vt 1.000000 0.764553
vt 1.000000 0.784716
vt 0.999999 1.000000
vt 0.987043 1.000000
vt 0.681271 0.839196
vt 0.657486 0.839196
vt 0.000000 0.261171
vt 0.007850 0.261171
vt 0.007850 0.494736
vt 0.000000 0.502891
vt 0.403534 0.839196
vt 0.403533 0.497110
vt 0.687998 0.497110
vt 0.974407 0.740555
vt 0.970635 0.748555
vt 0.967042 0.743692
vt 0.965736 0.748555
vt 0.967042 0.753417
vt 0.974406 0.756554
vt 0.991539 0.740555
vt 0.987768 0.748555
vt 0.984174 0.743692
vt 0.982868 0.748555
vt 0.984174 0.753417
vt 0.991539 0.756554
vt 0.044849 0.844977
vt 0.035593 0.844977
vt 0.035446 0.838322
vt 0.044554 0.838322
vt 0.956803 0.342087
vt 0.956803 0.335432
vt 0.964557 0.335432
vt 0.947366 0.342087
vt 0.949048 0.335432
vt 0.045143 0.838322
vt 0.054251 0.838322
vt 0.054104 0.844977
vt 0.044554 0.509546
vt 0.035446 0.509546
vt 0.035593 0.502890
vt 0.044849 0.502891
vt 0.964557 0.006655
vt 0.956803 0.006655
vt 0.956803 0.000000
vt 0.949048 0.006655
vt 0.947366 0.000000
vt 0.054104 0.502891
vt 0.054251 0.509546
vt 0.045143 0.509546
vt 0.000000 0.256308
vt 0.000000 0.251445
vt 0.007850 0.251445
vt 0.007850 0.256308
vt 0.000000 0.246582
vt 0.000000 0.241720
vt 0.007850 0.241720
vt 0.007850 0.246582
vt 0.403533 0.251445
vt 0.403533 0.256308
vt 0.395683 0.256308
vt 0.395683 0.251445
vt 0.403533 0.246582
vt 0.395683 0.246582
vt 0.779948 0.000000
vt 0.779948 1.000000
vt 0.724984 1.000000
vt 0.724983 0.000000
vt 0.717416 1.000000
vt 0.662450 1.000000
vt 0.662449 0.000000
vt 0.717416 0.000000
vt 0.184400 1.000000
vt 0.126957 0.970419
vt 0.221962 0.896695
vt 0.485666 0.793134
vt 0.471964 0.896524
vt 0.376957 0.970419
vt 0.216239 0.433002
vt 0.126957 0.260013
vt 0.059402 0.000000
vt 0.001957 0.029581
vt 0.009688 0.014790
vt 0.235664 0.793305
vt 0.013207 0.000000
vt 0.091241 0.566998
vt 0.055557 0.728328
vt 0.001957 0.739987
vt 0.110666 0.206866
vt 0.134686 0.985210
vt 0.096964 0.103476
vt 0.180555 0.271672
vt 0.138205 1.000000
vt 0.341239 0.566998
vt 0.305555 0.728328
vt 0.251957 0.739987
vt 0.251957 0.029581
vt 0.360664 0.206695
vt 0.388207 1.000000
vt 0.384688 0.985210
vt 0.434402 1.000000
vt 0.346962 0.103305
vt 0.466241 0.433002
vt 0.376957 0.260013
vt 0.309400 0.000000
vt 0.259687 0.014790
vt 0.263205 0.000000
vt 0.430558 0.271672
vt 0.636817 0.156314
vt 0.875000 0.156314
vt 0.875000 0.984312
vt 0.636817 0.984312
vt 0.000000 0.156314
vt 0.125000 0.156314
vt 0.125000 0.984312
vt 0.000000 0.984313
vt 1.000000 0.156314
vt 1.000000 0.984313
vt 0.363296 0.156314
vt 0.431676 0.156314
vt 0.431676 0.984311
vt 0.363296 0.984312
vt 0.500000 0.156314
vt 0.568437 0.156314
vt 0.568437 0.984311
vt 0.500000 0.984311
vn 0.577300 0.577300 -0.577300
vn 0.707100 0.000000 -0.707100
vn 0.000000 0.000000 -1.000000
vn -0.707100 0.000000 -0.707100
vn -0.577300 0.577300 -0.577300
vn -0.246900 -0.280700 0.927500
vn -0.658800 -0.172900 0.732100
vn -0.762700 -0.148700 0.629400
vn -0.577300 -0.577300 0.577300
vn 0.668800 -0.216600 -0.711100
vn 0.071700 -0.428700 -0.900500
vn -0.762700 0.148700 0.629400
vn -0.577300 0.577300 0.577300
vn -0.668800 -0.216600 -0.711100
vn 0.577300 0.577300 0.577300
vn 0.762700 0.148700 0.629400
vn -0.658800 0.172900 0.732100
vn -0.246900 0.280700 0.927500
vn -0.071700 -0.428700 -0.900500
vn 0.246900 0.280700 0.927500
vn -0.071700 0.428800 -0.900500
vn 0.071700 0.428800 -0.900500
vn -0.668800 0.216600 -0.711100
vn 0.577300 -0.577300 0.577300
vn 0.577300 -0.577300 -0.577300
vn 0.668800 0.216600 -0.711100
vn 0.762700 -0.148700 0.629400
vn -0.577300 -0.577300 -0.577300
vn 0.658800 -0.172900 0.732100
vn 0.246900 -0.280700 0.927500
vn 0.794100 0.350300 -0.496700
vn 0.814600 0.000000 -0.580000
vn 0.681100 -0.246900 0.689300
vn 0.660400 0.000000 0.750900
vn 0.681100 0.246800 0.689300
vn 0.794100 -0.350300 -0.496700
vn -0.794100 -0.350300 -0.496700
vn -0.814600 0.000000 -0.580000
vn -0.681100 0.246800 0.689300
vn -0.660400 0.000000 0.750900
vn -0.681100 -0.246900 0.689300
vn -0.794100 0.350300 -0.496700
vn -0.062900 0.569600 -0.819500
vn -0.023700 0.000000 -0.999700
vn -0.062900 -0.569600 -0.819500
vn 0.062900 0.569600 -0.819500
vn 0.023700 0.000000 -0.999700
vn 0.062900 -0.569600 -0.819500
vn 0.760600 0.000000 0.649100
vn 0.735000 -0.228600 0.638300
vn 0.658800 0.172900 0.732100
vn 0.735000 0.228600 0.638300
vn -0.735000 -0.228600 0.638300
vn -0.760600 0.000000 0.649100
vn -0.735000 0.228600 0.638300
vn -0.603500 0.559600 0.567900
vn 0.603500 0.559600 0.567900
vn 0.603500 -0.559600 0.567900
vn -0.603500 -0.559600 0.567900
vn 0.789000 -0.000200 0.614300
vn 0.684400 -0.166600 0.709800
vn -0.687600 0.027100 0.725500
vn -0.684400 0.166400 0.709800
vn 0.689800 0.093900 0.717800
vn 0.687600 -0.027100 0.725500
vn 0.689800 -0.093900 0.717800
vn 0.687600 0.027100 0.725500
vn 0.684400 0.166400 0.709800
vn -0.689800 0.093900 0.717800
vn -0.687600 -0.027100 0.725500
vn -0.789000 -0.000200 0.614300
vn -0.684400 -0.166600 0.709800
vn -0.689800 -0.093900 0.717800
v -0.012428 -0.485966 0.216625
v 0.000000 -0.486750 -0.220555
v -0.321341 -0.485966 -0.220555
v 0.000001 -0.462863 0.208120
v -0.310920 -0.485966 0.208120
v -0.306022 -0.464409 0.208120
v -0.306022 -0.464409 -0.212051
v -0.310921 -0.485966 -0.212051
v 0.000000 -0.462862 -0.212050
v -0.016802 -0.500002 -0.212050
v -0.016801 -0.500002 0.208120
v -0.046213 -0.500002 0.208120
v -0.046214 -0.500002 -0.212050
v -0.046213 -0.500002 0.216625
v -0.020445 -0.500002 0.216625
v -0.012429 -0.485966 -0.220555
v -0.020446 -0.500002 -0.220555
v -0.321340 -0.500002 -0.220555
v -0.321341 -0.500002 0.216624
v -0.046214 -0.500002 -0.220555
v -0.321341 -0.485966 0.216624
v -0.238235 -0.450057 0.208120
v 0.000001 -0.486750 0.216625
v -0.238236 -0.450057 -0.212051
v 0.306023 -0.464409 0.208120
v 0.306023 -0.464409 -0.212051
v 0.238237 -0.450057 0.208120
v 0.238236 -0.450057 -0.212051
v 0.046214 -0.500003 -0.212050
v 0.046215 -0.500003 0.208120
v 0.016803 -0.500003 0.208120
v 0.016802 -0.500003 -0.212050
v 0.000001 -0.481442 0.216625
v 0.000000 -0.481442 -0.220555
v 0.310922 -0.485967 -0.212051
v 0.310922 -0.485967 0.208120
v 0.321342 -0.485967 -0.220555
v 0.012430 -0.485967 0.216625
v 0.046215 -0.500003 0.216625
v 0.020447 -0.500003 0.216625
v 0.012429 -0.485967 -0.220555
v 0.020446 -0.500003 -0.220555
v 0.321341 -0.500003 -0.220555
v 0.321343 -0.500003 0.216624
v 0.046214 -0.500003 -0.220555
v 0.321343 -0.485967 0.216624
v 0.000001 -0.486750 0.208120
v 0.000000 -0.486750 -0.212050
v 0.086920 -0.442244 -0.212051
v 0.086920 -0.442244 0.208120
v -0.086847 -0.442244 -0.212050
v -0.086847 -0.442244 0.208120
v -0.043405 -0.447755 -0.212050
v -0.043405 -0.447755 0.208120
v 0.043478 -0.447755 -0.212050
v 0.043478 -0.447755 0.208120
v 0.010224 -0.490836 0.216625
v -0.006214 -0.482857 0.216625
v -0.006214 -0.482857 -0.220555
v -0.008400 -0.490836 0.208120
v -0.008401 -0.490836 -0.212050
v -0.010223 -0.490836 -0.220555
v -0.010222 -0.490836 0.216625
v 0.010223 -0.490836 -0.220555
v 0.008401 -0.490836 -0.212050
v 0.008402 -0.490836 0.208120
v 0.006215 -0.482858 -0.220555
v 0.006215 -0.482858 0.216625
v -0.012429 -0.485966 -0.212050
v 0.000000 -0.481442 -0.212050
v 0.012429 -0.485967 -0.212050
v -0.006214 -0.482857 -0.212050
v 0.006215 -0.482858 -0.212050
v -0.012428 -0.485966 0.208120
v 0.000001 -0.481442 0.208120
v 0.012430 -0.485967 0.208120
v -0.006214 -0.482857 0.208120
v 0.006215 -0.482858 0.208120
vt 0.9657 0.8392
vt 0.7118 0.8392
vt 0.7118 0.8325
vt 0.7118 0.5038
vt 0.7118 0.4971
vt 0.9657 0.4971
vt 0.3957 0.4947
vt 0.3957 0.2612
vt 0.4035 0.2612
vt 0.4035 0.5029
vt 0.6880 0.8392
vt 0.6846 0.8325
vt 0.9870 0.7388
vt 0.9870 0.4971
vt 1.0000 0.4971
vt 1.0000 0.7124
vt 1.0000 0.7326
vt 0.9921 0.0000
vt 0.9921 0.3421
vt 0.9791 0.3421
vt 0.9791 0.0000
vt 0.9699 1.0000
vt 0.9699 0.7583
vt 0.9829 0.7646
vt 0.9829 0.7847
vt 0.9829 1.0000
vt 0.4035 0.2417
vt 0.3957 0.2417
vt 0.3957 0.0082
vt 0.4035 0.0000
vt 0.6846 0.5038
vt 0.0078 0.0082
vt 0.0000 0.0000
vt 0.6575 0.8325
vt 0.6575 0.5038
vt 0.6846 0.5038
vt 0.6846 0.8325
vt 0.6575 0.4971
vt 0.6813 0.4971
vt 0.9699 0.4971
vt 0.9829 0.4971
vt 0.9829 0.7124
vt 0.9829 0.7326
vt 0.9699 0.7388
vt 0.9662 0.0000
vt 0.9791 0.0000
vt 0.9791 0.3421
vt 0.9662 0.3421
vt 0.9870 0.7583
vt 1.0000 0.7646
vt 1.0000 0.7847
vt 1.0000 1.0000
vt 0.9870 1.0000
vt 0.6813 0.8392
vt 0.6575 0.8392
vt 0.0000 0.2612
vt 0.0079 0.2612
vt 0.0078 0.4947
vt 0.0000 0.5029
vt 0.4035 0.8392
vt 0.4035 0.4971
vt 0.6880 0.4971
vt 0.9744 0.7406
vt 0.9706 0.7486
vt 0.9670 0.7437
vt 0.9657 0.7486
vt 0.9670 0.7534
vt 0.9744 0.7566
vt 0.9915 0.7406
vt 0.9878 0.7486
vt 0.9842 0.7437
vt 0.9829 0.7486
vt 0.9842 0.7534
vt 0.9915 0.7566
vt 0.0448 0.8450
vt 0.0356 0.8450
vt 0.0354 0.8383
vt 0.0446 0.8383
vt 0.9662 0.3421
vt 0.9568 0.3421
vt 0.9568 0.3354
vt 0.9646 0.3354
vt 0.9474 0.3421
vt 0.9490 0.3354
vt 0.0448 0.8450
vt 0.0451 0.8383
vt 0.0543 0.8383
vt 0.0541 0.8450
vt 0.0446 0.5095
vt 0.0354 0.5095
vt 0.0356 0.5029
vt 0.0448 0.5029
vt 0.9662 0.0000
vt 0.9646 0.0067
vt 0.9568 0.0067
vt 0.9568 0.0000
vt 0.9490 0.0067
vt 0.9474 0.0000
vt 0.0448 0.5029
vt 0.0541 0.5029
vt 0.0543 0.5095
vt 0.0451 0.5095
vt 0.0000 0.2563
vt 0.0000 0.2514
vt 0.0079 0.2514
vt 0.0079 0.2563
vt 0.0000 0.2466
vt 0.0000 0.2417
vt 0.0079 0.2417
vt 0.0079 0.2466
vt 0.4035 0.2514
vt 0.4035 0.2563
vt 0.3957 0.2563
vt 0.3957 0.2514
vt 0.4035 0.2466
vt 0.3957 0.2466
vt 0.7799 0.0000
vt 0.7799 1.0000
vt 0.7250 1.0000
vt 0.7250 0.0000
vt 0.7174 1.0000
vt 0.6624 1.0000
vt 0.6624 0.0000
vt 0.7174 0.0000
vt 0.1844 1.0000
vt 0.1270 0.9704
vt 0.2220 0.8967
vt 0.4857 0.7931
vt 0.4720 0.8965
vt 0.3770 0.9704
vt 0.2162 0.4330
vt 0.1270 0.2600
vt 0.0594 0.0000
vt 0.0020 0.0296
vt 0.0097 0.0148
vt 0.2357 0.7933
vt 0.0132 0.0000
vt 0.0912 0.5670
vt 0.0556 0.7283
vt 0.0020 0.7400
vt 0.1107 0.2069
vt 0.1347 0.9852
vt 0.0970 0.1035
vt 0.1806 0.2717
vt 0.1382 1.0000
vt 0.3412 0.5670
vt 0.3056 0.7283
vt 0.2520 0.7400
vt 0.2520 0.0296
vt 0.3607 0.2067
vt 0.3882 1.0000
vt 0.3847 0.9852
vt 0.4344 1.0000
vt 0.3470 0.1033
vt 0.4662 0.4330
vt 0.3770 0.2600
vt 0.3094 0.0000
vt 0.2597 0.0148
vt 0.2632 0.0000
vt 0.4306 0.2717
vt 0.6368 0.1563
vt 0.8750 0.1563
vt 0.8750 0.9843
vt 0.6368 0.9843
vt 0.0000 0.1563
vt 0.1250 0.1563
vt 0.1250 0.9843
vt 0.0000 0.9843
vt 1.0000 0.1563
vt 1.0000 0.9843
vt 0.3633 0.1563
vt 0.4317 0.1563
vt 0.4317 0.9843
vt 0.3633 0.9843
vt 0.5000 0.1563
vt 0.5684 0.1563
vt 0.5684 0.9843
vt 0.5000 0.9843
vn -0.5773 -0.5773 -0.5773
vn 0.0000 -0.7071 -0.7071
vn 0.0000 -1.0000 0.0000
vn 0.0000 -0.7071 0.7071
vn -0.5773 -0.5773 0.5773
vn 0.2807 0.9275 0.2469
vn 0.1729 0.7321 0.6588
vn 0.1487 0.6294 0.7627
vn 0.5773 0.5773 0.5773
vn 0.2166 -0.7111 -0.6688
vn 0.4287 -0.9005 -0.0717
vn -0.1487 0.6294 0.7627
vn -0.5773 0.5773 0.5773
vn 0.2166 -0.7111 0.6688
vn -0.5773 0.5773 -0.5773
vn -0.1487 0.6294 -0.7627
vn -0.1729 0.7321 0.6588
vn -0.2807 0.9275 0.2469
vn 0.4287 -0.9005 0.0717
vn -0.2807 0.9275 -0.2469
vn -0.4288 -0.9005 0.0717
vn -0.4288 -0.9005 -0.0717
vn -0.2166 -0.7111 0.6688
vn 0.5773 0.5773 -0.5773
vn 0.5773 -0.5773 -0.5773
vn -0.2166 -0.7111 -0.6688
vn 0.1487 0.6294 -0.7627
vn 0.5773 -0.5773 0.5773
vn 0.1729 0.7321 -0.6588
vn 0.2807 0.9275 -0.2469
vn -0.3503 -0.4967 -0.7941
vn 0.0000 -0.5800 -0.8146
vn 0.2469 0.6893 -0.6811
vn 0.0000 0.7509 -0.6604
vn -0.2468 0.6893 -0.6811
vn 0.3503 -0.4967 -0.7941
vn 0.3503 -0.4967 0.7941
vn 0.0000 -0.5800 0.8146
vn -0.2468 0.6893 0.6811
vn 0.0000 0.7509 0.6604
vn 0.2469 0.6893 0.6811
vn -0.3503 -0.4967 0.7941
vn -0.5696 -0.8195 0.0629
vn 0.0000 -0.9997 0.0237
vn 0.5696 -0.8195 0.0629
vn -0.5696 -0.8195 -0.0629
vn 0.0000 -0.9997 -0.0237
vn 0.5696 -0.8195 -0.0629
vn 0.0000 0.6491 -0.7606
vn 0.2286 0.6383 -0.7350
vn -0.1729 0.7321 -0.6588
vn -0.2286 0.6383 -0.7350
vn 0.2286 0.6383 0.7350
vn 0.0000 0.6491 0.7606
vn -0.2286 0.6383 0.7350
vn -0.5596 0.5679 0.6035
vn -0.5596 0.5679 -0.6035
vn 0.5596 0.5679 -0.6035
vn 0.5596 0.5679 0.6035
vn 0.0002 0.6143 -0.7890
vn 0.1666 0.7098 -0.6844
vn -0.0271 0.7255 0.6876
vn -0.1664 0.7098 0.6844
vn -0.0939 0.7178 -0.6898
vn 0.0271 0.7255 -0.6876
vn 0.0939 0.7178 -0.6898
vn -0.0271 0.7255 -0.6876
vn -0.1664 0.7098 -0.6844
vn -0.0939 0.7178 0.6898
vn 0.0271 0.7255 0.6876
vn 0.0002 0.6143 0.7890
vn 0.1666 0.7098 0.6844
vn 0.0939 0.7178 0.6898
g Cube.002_Cube.001_Cube.002_Cube.001_cover
s 1
f 18/1/1 20/2/2 13/3/3 12/4/3 14/5/4 19/6/5
@ -333,86 +341,86 @@ f 3/22/15 16/23/16 17/24/10 20/25/2 18/26/1
f 1/27/12 74/28/17 5/29/18 21/30/13
f 13/3/3 10/12/11 11/31/19 12/4/3
f 21/30/13 5/29/18 8/32/20 3/33/15
f 29/34/3 30/35/3 31/31/21 32/12/22
f 31/31/21 30/35/3 39/36/4 40/37/23
f 37/38/24 43/39/25 45/40/2 42/41/26 41/42/27
f 43/43/25 37/21/24 46/20/9 44/44/28
f 38/45/8 40/46/23 39/47/4 44/48/28 46/49/9
f 29/34/3 32/12/22 42/50/26 45/51/2
f 41/52/27 71/53/29 35/54/30 37/55/24
f 35/54/30 36/7/6 46/10/9 37/55/24
f 43/56/25 44/57/28 39/36/4 30/35/3 29/34/3 45/51/2
f 15/58/14 14/5/4 12/4/3 11/31/19
f 42/41/26 64/59/31 41/42/27
f 41/42/27 64/59/31 2/60/32 67/61/33
f 67/61/33 2/60/32 34/62/34
f 34/62/34 2/60/32 59/63/35
f 2/60/32 62/64/36 16/23/16 59/63/35
f 16/23/16 62/64/36 17/24/10
f 15/17/14 63/65/37 1/13/12
f 23/66/38 58/67/39 1/13/12 63/65/37
f 58/67/39 23/66/38 33/68/40
f 68/69/41 33/68/40 23/66/38
f 38/45/8 68/69/41 23/66/38 57/70/42
f 57/70/42 40/46/23 38/45/8
f 40/71/23 57/72/42 66/73/43 31/74/21
f 57/44/42 23/75/38 47/76/44 66/77/43
f 47/76/44 23/75/38 63/78/37 60/79/45
f 15/71/14 11/80/19 60/81/45 63/82/37
f 32/83/22 65/84/46 64/85/31 42/86/26
f 64/43/31 65/87/46 48/88/47 2/89/32
f 48/88/47 61/90/48 62/91/36 2/89/32
f 17/86/10 62/92/36 61/93/48 10/94/11
f 67/95/33 34/96/34 70/97/49 73/98/50
f 59/99/35 16/100/16 69/101/51 72/102/52
f 41/52/27 67/95/33 73/98/50 71/53/29
f 34/96/34 59/99/35 72/102/52 70/97/49
f 33/103/40 68/104/41 78/105/53 75/106/54
f 1/27/12 58/107/39 77/108/55 74/28/17
f 68/104/41 38/9/8 76/8/7 78/105/53
f 58/107/39 33/103/40 75/106/54 77/108/55
f 8/32/20 69/101/51 16/100/16 3/33/15
f 10/94/11 61/93/48 60/81/45 11/80/19
f 47/76/44 60/79/45 61/90/48 48/88/47
f 65/87/46 66/77/43 47/76/44 48/88/47
f 31/74/21 66/73/43 65/84/46 32/83/22
f 29/34/3 30/35/3 31/36/21 32/37/22
f 31/36/21 30/35/3 39/38/4 40/39/23
f 37/40/24 43/41/25 45/42/2 42/43/26 41/44/27
f 43/45/25 37/46/24 46/47/9 44/48/28
f 38/49/8 40/50/23 39/51/4 44/52/28 46/53/9
f 29/34/3 32/37/22 42/54/26 45/55/2
f 41/56/27 71/57/29 35/58/30 37/59/24
f 35/58/30 36/7/6 46/10/9 37/59/24
f 43/60/25 44/61/28 39/38/4 30/35/3 29/34/3 45/55/2
f 15/62/14 14/5/4 12/4/3 11/31/19
f 42/43/26 64/63/31 41/44/27
f 41/44/27 64/63/31 2/64/32 67/65/33
f 67/65/33 2/64/32 34/66/34
f 34/66/34 2/64/32 59/67/35
f 2/64/32 62/68/36 16/23/16 59/67/35
f 16/23/16 62/68/36 17/24/10
f 15/17/14 63/69/37 1/13/12
f 23/70/38 58/71/39 1/13/12 63/69/37
f 58/71/39 23/70/38 33/72/40
f 68/73/41 33/72/40 23/70/38
f 38/49/8 68/73/41 23/70/38 57/74/42
f 57/74/42 40/50/23 38/49/8
f 40/75/23 57/76/42 66/77/43 31/78/21
f 57/79/42 23/80/38 47/81/44 66/82/43
f 47/81/44 23/80/38 63/83/37 60/84/45
f 15/85/14 11/86/19 60/87/45 63/88/37
f 32/89/22 65/90/46 64/91/31 42/92/26
f 64/93/31 65/94/46 48/95/47 2/96/32
f 48/95/47 61/97/48 62/98/36 2/96/32
f 17/99/10 62/100/36 61/101/48 10/102/11
f 67/103/33 34/104/34 70/105/49 73/106/50
f 59/107/35 16/108/16 69/109/51 72/110/52
f 41/56/27 67/103/33 73/106/50 71/57/29
f 34/104/34 59/107/35 72/110/52 70/105/49
f 33/111/40 68/112/41 78/113/53 75/114/54
f 1/27/12 58/115/39 77/116/55 74/28/17
f 68/112/41 38/9/8 76/8/7 78/113/53
f 58/115/39 33/111/40 75/114/54 77/116/55
f 8/32/20 69/109/51 16/108/16 3/33/15
f 10/102/11 61/101/48 60/87/45 11/86/19
f 47/81/44 60/84/45 61/97/48 48/95/47
f 65/94/46 66/82/43 47/81/44 48/95/47
f 31/78/21 66/77/43 65/90/46 32/89/22
g Cube.002_Cube.001_Cube.002_Cube.001_edges
f 8/109/20 5/110/18 6/111/56 7/112/57
f 35/113/30 26/114/58 25/115/59 36/116/6
f 9/117/60 69/118/51 53/119/61
f 50/120/62 56/121/63 76/122/7
f 24/123/64 69/118/51 8/124/20
f 9/125/60 71/126/29 73/127/50
f 51/128/65 53/119/61 69/118/51
f 9/125/60 73/127/50 70/129/49
f 28/130/66 26/131/58 35/132/30
f 71/126/29 49/133/67 28/130/66
f 72/134/52 69/118/51 9/117/60
f 71/126/29 55/135/68 49/133/67
f 28/130/66 35/132/30 71/126/29
f 24/123/64 8/124/20 7/136/57
f 69/118/51 24/123/64 51/128/65
f 9/125/60 55/135/68 71/126/29
f 70/137/49 72/134/52 9/117/60
f 22/138/69 6/139/56 5/140/18
f 74/141/17 52/142/70 22/138/69
f 75/143/54 78/144/53 4/145/71
f 74/141/17 54/146/72 52/142/70
f 22/138/69 5/140/18 74/141/17
f 27/147/73 76/122/7 36/148/6
f 4/149/71 74/141/17 77/150/55
f 27/147/73 50/120/62 76/122/7
f 4/149/71 77/150/55 75/151/54
f 4/145/71 78/144/53 76/122/7
f 4/149/71 54/146/72 74/141/17
f 27/147/73 36/148/6 25/152/59
f 56/121/63 4/145/71 76/122/7
f 8/117/20 5/118/18 6/119/56 7/120/57
f 35/121/30 26/122/58 25/123/59 36/124/6
f 9/125/60 69/126/51 53/127/61
f 50/128/62 56/129/63 76/130/7
f 24/131/64 69/126/51 8/132/20
f 9/133/60 71/134/29 73/135/50
f 51/136/65 53/127/61 69/126/51
f 9/133/60 73/135/50 70/137/49
f 28/138/66 26/139/58 35/140/30
f 71/134/29 49/141/67 28/138/66
f 72/142/52 69/126/51 9/125/60
f 71/134/29 55/143/68 49/141/67
f 28/138/66 35/140/30 71/134/29
f 24/131/64 8/132/20 7/144/57
f 69/126/51 24/131/64 51/136/65
f 9/133/60 55/143/68 71/134/29
f 70/145/49 72/142/52 9/125/60
f 22/146/69 6/147/56 5/148/18
f 74/149/17 52/150/70 22/146/69
f 75/151/54 78/152/53 4/153/71
f 74/149/17 54/154/72 52/150/70
f 22/146/69 5/148/18 74/149/17
f 27/155/73 76/130/7 36/156/6
f 4/157/71 74/149/17 77/158/55
f 27/155/73 50/128/62 76/130/7
f 4/157/71 77/158/55 75/159/54
f 4/153/71 78/152/53 76/130/7
f 4/157/71 54/154/72 74/149/17
f 27/155/73 36/156/6 25/160/59
f 56/129/63 4/153/71 76/130/7
g Cube.002_Cube.001_Cube.002_Cube.001_pages
f 50/153/62 27/154/73 28/155/66 49/156/67
f 6/157/56 22/158/69 24/159/64 7/160/57
f 27/154/73 25/161/59 26/162/58 28/155/66
f 52/163/70 54/164/72 53/165/61 51/166/65
f 22/158/69 52/163/70 51/166/65 24/159/64
f 4/167/71 56/168/63 55/169/68 9/170/60
f 54/164/72 4/167/71 9/170/60 53/165/61
f 56/168/63 50/153/62 49/156/67 55/169/68
f 50/161/62 27/162/73 28/163/66 49/164/67
f 6/165/56 22/166/69 24/167/64 7/168/57
f 27/162/73 25/169/59 26/170/58 28/163/66
f 52/171/70 54/172/72 53/173/61 51/174/65
f 22/166/69 52/171/70 51/174/65 24/167/64
f 4/175/71 56/176/63 55/177/68 9/178/60
f 54/172/72 4/175/71 9/178/60 53/173/61
f 56/176/63 50/161/62 49/164/67 55/177/68

View File

@ -0,0 +1,202 @@
# Blender v2.78 (sub 0) OBJ File: ''
# www.blender.org
o Cube_Cube.001
v 0.500000 -0.500000 -0.500000
v 0.500000 0.500000 -0.500000
v 0.500000 -0.500000 0.500000
v 0.500000 0.500000 0.500000
v -0.500000 -0.500000 -0.500000
v -0.500000 0.500000 -0.500000
v -0.500000 -0.500000 0.500000
v -0.500000 0.500000 0.500000
v 0.437500 -0.437500 -0.437500
v 0.437500 0.437500 -0.437500
v 0.437500 -0.437500 0.437500
v 0.437500 0.437500 0.437500
v -0.437500 -0.437500 -0.437500
v -0.437500 0.437500 -0.437500
v -0.437500 -0.437500 0.437500
v -0.437500 0.437500 0.437500
v -0.500000 -0.437500 -0.437500
v -0.500000 0.437500 -0.437500
v -0.500000 -0.437500 0.437500
v -0.500000 0.437500 0.437500
v 0.500000 -0.437500 -0.437500
v 0.500000 0.437500 -0.437500
v 0.500000 -0.437500 0.437500
v 0.500000 0.437500 0.437500
v 0.437500 -0.437500 -0.500000
v 0.437500 0.437500 -0.500000
v -0.437500 -0.437500 -0.500000
v -0.437500 0.437500 -0.500000
v 0.437500 -0.437500 0.500000
v 0.437500 0.437500 0.500000
v -0.437500 -0.437500 0.500000
v -0.437500 0.437500 0.500000
v 0.437500 0.500000 -0.437500
v 0.437500 0.500000 0.437500
v -0.437500 0.500000 -0.437500
v -0.437500 0.500000 0.437500
v 0.437500 -0.500000 -0.437500
v 0.437500 -0.500000 0.437500
v -0.437500 -0.500000 -0.437500
v -0.437500 -0.500000 0.437500
vt 0.0625 0.0000
vt 0.9375 0.0000
vt 0.9375 0.0625
vt 0.0625 0.0625
vt -0.0000 0.9375
vt -0.0000 0.0625
vt 0.0625 0.9375
vt -0.0000 0.0625
vt -0.0000 0.9375
vt -0.0000 0.9375
vt -0.0000 0.0625
vt 0.0625 0.0625
vt 0.0625 0.9375
vt -0.0000 0.9375
vt 0.0625 0.9375
vt 0.0625 0.0625
vt -0.0000 0.0625
vt 0.9375 0.0000
vt 0.0625 0.0000
vt 0.9375 0.0625
vt 0.0625 0.9375
vt 0.0625 0.0625
vt -0.0000 0.0625
vt -0.0000 0.9375
vt 1.0000 0.9375
vt 1.0000 0.0625
vt 0.9375 0.9375
vt 1.0000 0.9375
vt 0.9375 0.9375
vt 1.0000 0.9375
vt 0.9375 0.9375
vt 0.9375 0.0625
vt 1.0000 0.0625
vt 1.0000 0.0625
vt 1.0000 0.9375
vt 1.0000 0.0625
vt 0.9375 1.0000
vt 0.0625 1.0000
vt 0.9375 0.9375
vt 0.9375 0.0625
vt 1.0000 0.0625
vt 1.0000 0.9375
vt 0.0625 1.0000
vt 0.9375 1.0000
vt 0.0625 0.0000
vt 0.9375 0.0000
vt 0.0625 0.0000
vt 0.9375 0.0000
vt 0.0625 0.0000
vt 0.9375 0.0000
vt 0.0625 1.0000
vt 0.9375 1.0000
vt 0.0625 1.0000
vt 0.9375 1.0000
vt 0.0625 1.0000
vt 0.9375 1.0000
vt -0.0000 0.0000
vt 1.0000 0.0000
vt 0.9375 0.0625
vt 0.0625 0.0625
vt -0.0000 1.0000
vt 0.0625 0.9375
vt 1.0000 1.0000
vt 0.9375 0.9375
vt -0.0000 1.0000
vt 0.0625 0.9375
vt 0.9375 0.9375
vt 1.0000 0.0000
vt 0.9375 0.0625
vt 0.0625 0.0625
vt -0.0000 0.0000
vt 1.0000 1.0000
vt 1.0000 0.0000
vt 0.9375 0.0625
vt 0.9375 0.9375
vt -0.0000 0.0000
vt 0.0625 0.0625
vt -0.0000 1.0000
vt 0.0625 0.9375
vt -0.0000 0.0000
vt 0.0625 0.9375
vt 0.0625 0.0625
vt 0.9375 0.9375
vt 0.9375 0.0625
vt 1.0000 0.0000
vt 0.9375 0.0625
vt 0.9375 0.9375
vt 1.0000 1.0000
vt 0.0625 0.9375
vt -0.0000 1.0000
vt 0.0625 0.0625
vt 0.0625 0.0625
vt 0.0625 0.9375
vt 0.9375 0.9375
vt 1.0000 1.0000
vt 0.9375 0.0625
vn 0.0000 1.0000 0.0000
vn -1.0000 0.0000 0.0000
vn 0.0000 0.0000 1.0000
vn 0.0000 0.0000 -1.0000
vn 0.0000 -1.0000 0.0000
vn 1.0000 0.0000 0.0000
g Cube_Cube.001_frame
s off
f 25/1/1 27/2/1 13/3/1 9/4/1
f 26/5/2 25/6/2 9/4/2 10/7/2
f 21/8/3 22/9/3 10/7/3 9/4/3
f 24/10/4 23/11/4 11/12/4 12/13/4
f 23/14/1 21/8/1 9/4/1 11/15/1
f 12/13/5 10/16/5 22/17/5 24/10/5
f 28/18/5 26/19/5 10/16/5 14/20/5
f 14/21/6 13/22/6 27/23/6 28/24/6
f 18/25/3 17/26/3 13/3/3 14/27/3
f 17/26/1 19/28/1 15/29/1 13/3/1
f 20/30/4 16/31/4 15/32/4 19/33/4
f 20/30/5 18/34/5 14/20/5 16/31/5
f 16/31/6 32/35/6 31/36/6 15/32/6
f 31/37/1 29/38/1 11/15/1 15/29/1
f 12/39/2 11/40/2 29/41/2 30/42/2
f 30/43/5 32/44/5 16/31/5 12/13/5
f 15/32/4 11/12/4 38/45/4 40/46/4
f 13/22/6 15/32/6 40/46/6 39/47/6
f 9/4/3 13/3/3 39/48/3 37/49/3
f 11/40/2 9/4/2 37/49/2 38/50/2
f 16/31/6 14/21/6 35/51/6 36/52/6
f 12/13/4 16/31/4 36/52/4 34/53/4
f 10/7/2 12/39/2 34/54/2 33/55/2
f 14/27/3 10/7/3 33/55/3 35/56/3
f 2/57/1 6/58/1 35/59/1 33/60/1
f 4/61/1 2/57/1 33/60/1 34/62/1
f 8/63/1 4/61/1 34/62/1 36/64/1
f 6/58/1 8/63/1 36/64/1 35/59/1
f 6/65/2 18/66/2 20/67/2 8/63/2
f 7/68/2 8/63/2 20/67/2 19/69/2
f 7/68/2 19/69/2 17/70/2 5/71/2
f 5/71/2 17/70/2 18/66/2 6/65/2
f 7/72/5 5/73/5 39/74/5 40/75/5
f 5/73/5 1/76/5 37/77/5 39/74/5
f 1/76/5 3/78/5 38/79/5 37/77/5
f 3/78/5 7/72/5 40/75/5 38/79/5
f 3/80/3 4/61/3 30/81/3 29/82/3
f 8/63/3 32/83/3 30/81/3 4/61/3
f 7/68/3 31/84/3 32/83/3 8/63/3
f 3/80/3 29/82/3 31/84/3 7/68/3
f 3/85/6 23/86/6 24/87/6 4/88/6
f 4/88/6 24/87/6 22/89/6 2/90/6
f 2/90/6 22/89/6 21/91/6 1/76/6
f 1/76/6 21/91/6 23/86/6 3/85/6
f 2/90/4 1/76/4 25/92/4 26/93/4
f 2/90/4 26/93/4 28/94/4 6/95/4
f 5/73/4 6/95/4 28/94/4 27/96/4
f 5/73/4 27/96/4 25/92/4 1/76/4
g Cube_Cube.001_glass
f 9/4/6 10/7/6 12/39/6 11/40/6
f 11/12/3 12/13/3 16/31/3 15/32/3
f 15/32/2 16/31/2 14/21/2 13/22/2
f 13/3/4 14/27/4 10/7/4 9/4/4
f 11/15/5 15/29/5 13/3/5 9/4/5
f 16/31/1 12/13/1 10/16/1 14/20/1

View File

@ -32,14 +32,16 @@ homedecor.register("shutter", {
description = S("Wooden Shutter"),
inventory_image = inv,
wield_image = inv,
paramtype2 = "wallmounted",
paramtype2 = "colorwallmounted",
palette = "unifieddyes_palette_colorwallmounted.png",
ud_replacement_node = "homedecor:shutter_colored",
groups = { snappy = 3, ud_param2_colorable = 1 },
sounds = default.node_sound_wood_defaults(),
selection_box = shutter_cbox,
node_box = shutter_cbox,
after_place_node = unifieddyes.fix_rotation,
after_dig_node = unifieddyes.after_dig_node
after_place_node = function(pos, placer, itemstack, pointed_thing)
unifieddyes.fix_rotation(pos, placer, itemstack, pointed_thing)
end,
})
homedecor.register("shutter_colored", {
@ -54,9 +56,9 @@ homedecor.register("shutter_colored", {
sounds = default.node_sound_wood_defaults(),
selection_box = shutter_cbox,
node_box = shutter_cbox,
after_place_node = unifieddyes.fix_rotation,
after_dig_node = unifieddyes.after_dig_node,
drop = "homedecor:shutter"
after_place_node = function(pos, placer, itemstack, pointed_thing)
unifieddyes.fix_rotation(pos, placer, itemstack, pointed_thing)
end,
})
minetest.register_alias("homedecor:shutter_purple", "homedecor:shutter_violet")

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 202 B

After

Width:  |  Height:  |  Size: 219 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 259 B

After

Width:  |  Height:  |  Size: 248 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 137 B

After

Width:  |  Height:  |  Size: 93 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 139 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 203 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 142 B

After

Width:  |  Height:  |  Size: 94 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 204 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 173 B

After

Width:  |  Height:  |  Size: 95 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 307 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 137 B

After

Width:  |  Height:  |  Size: 96 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 187 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 165 B

After

Width:  |  Height:  |  Size: 93 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 423 B

View File

@ -6,6 +6,75 @@ local wd_cbox = {
fixed = { -0.5, -0.5, -0.5, 0.5, 1.5, 0.5 }
}
-- cache set_textures function (fallback to old version)
-- default.player_set_textures is deprecated and will be removed in future
local set_player_textures =
minetest.get_modpath("player_api") and player_api.set_textures
or default.player_set_textures
local armor_mod_path = minetest.get_modpath("3d_armor")
local skinslist = {"male1", "male2", "male3", "male4", "male5"}
local default_skin = "character.png"
local skinsdb_mod_path = minetest.get_modpath("skinsdb")
if skinsdb_mod_path then
for _, shrt in ipairs(skinslist) do
for _, prefix in ipairs({"", "fe"}) do
local skin_name = prefix..shrt
local skin_obj = skins.new("homedecor_clothes_"..skin_name..".png") -- Texture PNG file as key to be compatible in set_player_skin
skin_obj:set_preview("homedecor_clothes_"..skin_name.."_preview.png")
skin_obj:set_texture("homedecor_clothes_"..skin_name..".png")
skin_obj:set_meta("name", "Wardrobe "..skin_name)
skin_obj:set_meta("author", 'Calinou and Jordach')
skin_obj:set_meta("license", 'WTFPL')
local file = io.open(homedecor.modpath.."/textures/homedecor_clothes_"..skin_name..".png", "r")
skin_obj:set_meta("format", skins.get_skin_format(file))
file:close()
skin_obj:set_meta("in_inventory_list", false)
end
end
end
function homedecor.get_player_skin(player)
local skin = player:get_attribute("homedecor:player_skin")
if not skin or skin == "" then
return default_skin, true
end
return skin, false
end
function homedecor.set_player_skin(player, skin, save)
skin = skin or default_skin
if skinsdb_mod_path then
skins.set_player_skin(player, skin)
elseif armor_mod_path then -- if 3D_armor's installed, let it set the skin
armor.textures[player:get_player_name()].skin = skin
armor:update_player_visuals(player)
else
set_player_textures(player, { skin })
end
if save then
if skin == default_skin then
skin = "default"
player:set_attribute("homedecor:player_skin", "")
else
player:set_attribute("homedecor:player_skin", skin)
end
if save == "player" then -- if player action
minetest.log("verbose",
S("player @1 sets skin to @2", player:get_player_name(), skin) ..
(armor_mod_path and ' [3d_armor]' or '')
)
end
end
end
function homedecor.unset_player_skin(player)
homedecor.set_player_skin(player, nil, true)
end
homedecor.register("wardrobe", {
mesh = "homedecor_bedroom_wardrobe.obj",
tiles = {
@ -27,16 +96,16 @@ homedecor.register("wardrobe", {
},
on_construct = function(pos)
local meta = minetest.get_meta(pos)
local skins = {"male1", "male2", "male3", "male4", "male5"}
-- textures made by the Minetest community (mostly Calinou and Jordach)
local clothes_strings = ""
for i = 1,5 do
clothes_strings = clothes_strings..
"image_button_exit["..(i-1)..".5,0;1.1,2;homedecor_clothes_"..skins[i].."_preview.png;"..skins[i]..";]"..
"image_button_exit["..(i-1)..".5,2;1.1,2;homedecor_clothes_fe"..skins[i].."_preview.png;fe"..skins[i]..";]"
"image_button_exit["..(i-1)..".5,0;1.1,2;homedecor_clothes_"..skinslist[i].."_preview.png;"..skinslist[i]..";]"..
"image_button_exit["..(i-1)..".5,2;1.1,2;homedecor_clothes_fe"..skinslist[i].."_preview.png;fe"..skinslist[i]..";]"
end
meta:set_string("formspec", "size[5.5,8.5]"..default.gui_bg..default.gui_bg_img..default.gui_slots..
"vertlabel[0,0.5;"..minetest.formspec_escape(S("Clothes")).."]"..
"button_exit[0,3.29;0.6,0.6;default;x]"..
clothes_strings..
"vertlabel[0,5.2;"..minetest.formspec_escape(S("Storage")).."]"..
"list[current_name;main;0.5,4.5;5,2;]"..
@ -44,26 +113,17 @@ homedecor.register("wardrobe", {
"listring[]")
end,
on_receive_fields = function(pos, formname, fields, sender)
local skins = {"male1", "male2", "male3", "male4", "male5"}
local playerName = sender:get_player_name()
local armor_mod = minetest.get_modpath("3d_armor")
if fields.default then
homedecor.set_player_skin(sender, nil, "player")
return
end
for i = 1,5 do
if fields[skins[i]] then
if armor_mod then -- if 3D_armor's installed, let it set the skin
armor.textures[playerName].skin = "homedecor_clothes_"..skins[i]..".png"
armor:update_player_visuals(sender)
break
end
default.player_set_textures(sender, { "homedecor_clothes_"..skins[i]..".png" })
if fields[skinslist[i]] then
homedecor.set_player_skin(sender, "homedecor_clothes_"..skinslist[i]..".png", "player")
break
elseif fields["fe"..skins[i]] then
if armor_mod then
armor.textures[playerName].skin = "homedecor_clothes_fe"..skins[i]..".png"
armor:update_player_visuals(sender)
break
end
default.player_set_textures(sender, { skin = "homedecor_clothes_fe"..skins[i]..".png" })
elseif fields["fe"..skinslist[i]] then
homedecor.set_player_skin(sender, "homedecor_clothes_fe"..skinslist[i]..".png", "player")
break
end
end
@ -72,3 +132,14 @@ homedecor.register("wardrobe", {
minetest.register_alias("homedecor:wardrobe_bottom", "homedecor:wardrobe")
minetest.register_alias("homedecor:wardrobe_top", "air")
minetest.register_on_joinplayer(function(player)
local skin = player:get_attribute("homedecor:player_skin")
if skin and skin ~= "" then
-- setting player skin on connect has no effect, so delay skin change
minetest.after(1, function(player, skin)
homedecor.set_player_skin(player, skin)
end, player, skin)
end
end)

View File

@ -112,8 +112,9 @@ minetest.register_node("homedecor:curtain_closed", {
paramtype2 = "colorwallmounted",
palette = "unifieddyes_palette_colorwallmounted.png",
selection_box = { type = "wallmounted" },
after_dig_node = unifieddyes.after_dig_node,
after_place_node = unifieddyes.fix_rotation,
after_place_node = function(pos, placer, itemstack, pointed_thing)
unifieddyes.fix_rotation(pos, placer, itemstack, pointed_thing)
end,
on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
local topnode = minetest.get_node({x=pos.x, y=pos.y+1.0, z=pos.z})
if string.find(topnode.name, "homedecor:curtainrod") then
@ -126,7 +127,7 @@ minetest.register_node("homedecor:curtain_closed", {
})
minetest.register_node("homedecor:curtain_open", {
description = S("Curtains"),
description = S("Curtains (open)"),
tiles = { "homedecor_curtain_open.png" },
inventory_image = "homedecor_curtain_open.png",
drawtype = 'signlike',
@ -138,8 +139,9 @@ minetest.register_node("homedecor:curtain_open", {
paramtype2 = "colorwallmounted",
palette = "unifieddyes_palette_colorwallmounted.png",
selection_box = { type = "wallmounted" },
after_dig_node = unifieddyes.after_dig_node,
after_place_node = unifieddyes.fix_rotation,
after_place_node = function(pos, placer, itemstack, pointed_thing)
unifieddyes.fix_rotation(pos, placer, itemstack, pointed_thing)
end,
on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
local topnode = minetest.get_node({x=pos.x, y=pos.y+1.0, z=pos.z})
if string.find(topnode.name, "homedecor:curtainrod") then

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

1595
homedecor_i18n/locale/ru.po Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -7,6 +7,8 @@ cd "$(dirname "${BASH_SOURCE[0]}")/..";
# Extract translatable strings.
xgettext --from-code=UTF-8 \
--language=Lua \
--sort-by-file \
--keyword=S \
--keyword=NS:1,2 \
--keyword=N_ \

View File

@ -92,6 +92,19 @@ minetest.register_node("inbox:empty", {
end
end
end,
allow_metadata_inventory_take = function(pos, listname, index, stack, player)
local meta = minetest.get_meta(pos)
local owner = meta:get_string("owner")
if player:get_player_name() == owner or
minetest.check_player_privs(player, "protection_bypass") and
clicker:get_player_control().aux1 then
return stack:get_count()
end
return 0
end,
allow_metadata_inventory_move = function(pos)
return 0
end,
})
function inbox.get_inbox_formspec(pos)

View File

@ -32,6 +32,25 @@ minetest.register_entity("itemframes:item",{
if self.nodename == "itemframes:pedestal" then
self.object:set_properties({automatic_rotate = 1})
end
if self.texture ~= nil and self.nodename ~= nil then
local entity_pos = vector.round(self.object:get_pos())
local objs = minetest.get_objects_inside_radius(entity_pos, 0.5)
for _, obj in ipairs(objs) do
if obj ~= self.object and
obj:get_luaentity() and
obj:get_luaentity().name == "itemframes:item" and
obj:get_luaentity().nodename == self.nodename and
obj:get_properties() and
obj:get_properties().textures and
obj:get_properties().textures[1] == self.texture then
minetest.log("action","[itemframes] Removing extra " ..
self.texture .. " found in " .. self.nodename .. " at " ..
minetest.pos_to_string(entity_pos))
self.object:remove()
break
end
end
end
end,
get_staticdata = function(self)
if self.nodename ~= nil and self.texture ~= nil then
@ -119,7 +138,7 @@ minetest.register_node("itemframes:frame",{
sunlight_propagates = true,
groups = {choppy = 2, dig_immediate = 2},
legacy_wallmounted = true,
sounds = default.node_sound_defaults(),
sounds = default.node_sound_wood_defaults(),
on_rotate = screwdriver.disallow,
after_place_node = function(pos, placer, itemstack)
local meta = minetest.get_meta(pos)
@ -182,7 +201,7 @@ minetest.register_node("itemframes:pedestal",{
tiles = {"itemframes_pedestal.png"},
paramtype = "light",
groups = {cracky = 3},
sounds = default.node_sound_defaults(),
sounds = default.node_sound_stone_defaults(),
on_rotate = screwdriver.disallow,
after_place_node = function(pos, placer, itemstack)
local meta = minetest.get_meta(pos)
@ -228,24 +247,31 @@ minetest.register_node("itemframes:pedestal",{
-- automatically restore entities lost from frames/pedestals
-- due to /clearobjects or similar
minetest.register_abm({
minetest.register_lbm({
label = "Maintain itemframe and pedestal entities",
name = "itemframes:maintain_entities",
nodenames = {"itemframes:frame", "itemframes:pedestal"},
interval = 15,
chance = 1,
action = function(pos, node, active_object_count, active_object_count_wider)
local num
if node.name == "itemframes:frame" then
num = #minetest.get_objects_inside_radius(pos, 0.5)
elseif node.name == "itemframes:pedestal" then
pos.y = pos.y + 1
num = #minetest.get_objects_inside_radius(pos, 0.5)
pos.y = pos.y - 1
end
if num > 0 then return end
update_item(pos, node)
run_at_every_load = true,
action = function(pos, node)
minetest.after(0,
function(pos, node)
local meta = minetest.get_meta(pos)
local itemstring = meta:get_string("item")
if itemstring ~= "" then
local entity_pos = pos
if node.name == "itemframes:pedestal" then
entity_pos = {x=pos.x,y=pos.y+1,z=pos.z}
end
local objs = minetest.get_objects_inside_radius(entity_pos, 0.5)
if #objs == 0 then
minetest.log("action","[itemframes] Replacing missing " ..
itemstring .. " in " .. node.name .. " at " ..
minetest.pos_to_string(pos))
update_item(pos, node)
end
end
end,
pos, node)
end
})
@ -273,4 +299,4 @@ minetest.register_craft({
if minetest.get_modpath("mesecons_mvps") then
mesecon.register_mvps_stopper("itemframes:frame")
mesecon.register_mvps_stopper("itemframes:pedestal")
end
end

View File

@ -8,7 +8,11 @@ minetest.register_node("lavalamp:lavalamp", {
drawtype = "mesh",
mesh = "lavalamp.obj",
tiles = {
{ name = "lavalamp_metal.png", color = 0xffffffff},
{ name = "lavalamp_metal.png", color = "white" },
{ name = "lavalamp_lamp_liquid.png", color = "white" },
},
overlay_tiles = {
"",
{
name="lavalamp_lamp_anim.png",
animation={
@ -19,11 +23,11 @@ minetest.register_node("lavalamp:lavalamp", {
},
},
},
use_texture_alpha = true,
inventory_image = "lavalamp_lamp_inv.png",
paramtype = "light",
paramtype2 = "color",
palette = "unifieddyes_palette_extended.png",
place_param2 = 240,
sunlight_propagates = true,
walkable = false,
light_source = 14,
@ -33,7 +37,7 @@ minetest.register_node("lavalamp:lavalamp", {
},
groups = {snappy=2,cracky=3,oddly_breakable_by_hand=3, ud_param2_colorable = 1},
sounds = default.node_sound_glass_defaults(),
after_dig_node = unifieddyes.after_dig_node,
on_construct = unifieddyes.on_construct,
on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
node.name = "lavalamp:lavalamp_off"
minetest.swap_node(pos, node)
@ -52,7 +56,6 @@ minetest.register_node("lavalamp:lavalamp_off", {
paramtype = "light",
paramtype2 = "color",
palette = "unifieddyes_palette_extended.png",
place_param2 = 240,
sunlight_propagates = true,
walkable = false,
selection_box = {
@ -62,12 +65,17 @@ minetest.register_node("lavalamp:lavalamp_off", {
groups = {snappy=2,cracky=3,oddly_breakable_by_hand=3, not_in_creative_inventory=1},
sounds = default.node_sound_glass_defaults(),
drop = "lavalamp:lavalamp",
after_dig_node = unifieddyes.after_dig_node,
on_construct = unifieddyes.on_construct,
on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
node.name = "lavalamp:lavalamp"
minetest.swap_node(pos, node)
return itemstack
end,
drop = {
items = {
{items = {"lavalamp:lavalamp"}, inherit_color = true },
}
}
})
minetest.register_craft({
@ -79,6 +87,17 @@ minetest.register_craft({
}
})
unifieddyes.register_color_craft({
output = "lavalamp:lavalamp",
palette = "extended",
type = "shapeless",
neutral_node = "lavalamp:lavalamp",
recipe = {
"NEUTRAL_NODE",
"MAIN_DYE"
}
})
-- convert to param2 coloring
local colors = {
@ -127,20 +146,3 @@ minetest.register_lbm({
end
})
minetest.register_lbm({
name = "lavalamp:recolor",
label = "Convert 89-color lamps to use UD extended palette",
run_at_every_load = false,
nodenames = {
"lavalamp:lavalamp",
"lavalamp:lavalamp_off"
},
action = function(pos, node)
local meta = minetest.get_meta(pos)
if meta:get_string("palette") ~= "ext" then
minetest.swap_node(pos, { name = node.name, param2 = unifieddyes.convert_classic_palette[node.param2] })
meta:set_string("palette", "ext")
end
end
})

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.7 KiB

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 412 B

View File

@ -23,8 +23,9 @@ minetest.register_node("lrfurn:armchair", {
groups = {snappy=3, ud_param2_colorable = 1},
sounds = default.node_sound_wood_defaults(),
node_box = armchair_cbox,
after_place_node = unifieddyes.fix_rotation_nsew,
after_dig_node = unifieddyes.after_dig_node,
after_place_node = function(pos, placer, itemstack, pointed_thing)
unifieddyes.fix_rotation_nsew(pos, placer, itemstack, pointed_thing)
end,
on_rotate = unifieddyes.fix_after_screwdriver_nsew,
on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
if not clicker:is_player() then
@ -55,13 +56,23 @@ minetest.register_craft({
}
})
unifieddyes.register_color_craft({
output = "lrfurn:armchair",
palette = "wallmounted",
type = "shapeless",
neutral_node = "lrfurn:armchair",
recipe = {
"NEUTRAL_NODE",
"MAIN_DYE"
}
})
-- convert old static nodes to param2 color
lrfurn.old_static_armchairs = {}
for _, color in ipairs(lrfurn.colors) do
table.insert(lrfurn.old_static_armchairs, "lrfurn:armchair_"..color)
print("lrfurn:armchair_"..color)
end
minetest.register_lbm({
@ -105,6 +116,6 @@ minetest.register_lbm({
end
})
if minetest.setting_get("log_mods") then
if minetest.settings:get("log_mods") then
minetest.log("action", "[lrfurn/armchairs] "..S("Loaded!"))
end

View File

@ -65,6 +65,6 @@ minetest.register_craft({
}
})
if minetest.setting_get("log_mods") then
if minetest.settings:get("log_mods") then
minetest.log("action", "[lrfurn/coffeetable] "..S("Loaded!"))
end

View File

@ -48,6 +48,6 @@ minetest.register_craft({
}
})
if minetest.setting_get("log_mods") then
if minetest.settings:get("log_mods") then
minetest.log("action", "[lrfurn/endtable] "..S("Loaded!"))
end

View File

@ -1,3 +1,4 @@
local S = homedecor_i18n.gettext
lrfurn = {}
screwdriver = screwdriver or {}
@ -38,9 +39,9 @@ function lrfurn.check_right(pos, fdir, long, placer)
return false
elseif minetest.is_protected(pos2, placer:get_player_name()) then
if not long then
minetest.chat_send_player(placer:get_player_name(), "Someone else owns the spot where other end goes!")
minetest.chat_send_player(placer:get_player_name(), S("Someone else owns the spot where other end goes!"))
else
minetest.chat_send_player(placer:get_player_name(), "Someone else owns the spot where the middle or far end goes!")
minetest.chat_send_player(placer:get_player_name(), S("Someone else owns the spot where the middle or far end goes!"))
end
return false
end
@ -50,7 +51,7 @@ function lrfurn.check_right(pos, fdir, long, placer)
if node3 and node3.name ~= "air" then
return false
elseif minetest.is_protected(pos3, placer:get_player_name()) then
minetest.chat_send_player(placer:get_player_name(), "Someone else owns the spot where the other end goes!")
minetest.chat_send_player(placer:get_player_name(), S("Someone else owns the spot where the other end goes!"))
return false
end
end
@ -60,10 +61,11 @@ end
function lrfurn.fix_sofa_rotation_nsew(pos, placer, itemstack, pointed_thing)
local node = minetest.get_node(pos)
local colorbits = node.param2 - (node.param2 % 8)
local yaw = placer:get_look_yaw()
local dir = minetest.yaw_to_dir(yaw-1.5)
local fdir = minetest.dir_to_wallmounted(dir)
minetest.swap_node(pos, { name = node.name, param2 = fdir })
minetest.swap_node(pos, { name = node.name, param2 = fdir+colorbits })
end
dofile(minetest.get_modpath("lrfurn").."/longsofas.lua")

View File

@ -41,7 +41,6 @@ minetest.register_node("lrfurn:longsofa", {
end
return itemstack
end,
after_dig_node = unifieddyes.after_dig_node,
on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
if not clicker:is_player() then
return itemstack
@ -71,6 +70,17 @@ minetest.register_craft({
}
})
unifieddyes.register_color_craft({
output = "lrfurn:longsofa",
palette = "wallmounted",
type = "shapeless",
neutral_node = "lrfurn:longsofa",
recipe = {
"NEUTRAL_NODE",
"MAIN_DYE"
}
})
-- convert old static nodes to param2 colorization
lrfurn.old_static_longsofas = {}
@ -121,6 +131,6 @@ minetest.register_lbm({
end
})
if minetest.setting_get("log_mods") then
if minetest.settings:get("log_mods") then
minetest.log("action", "[lrfurn/longsofas] "..S("Loaded!"))
end

View File

@ -41,7 +41,6 @@ minetest.register_node("lrfurn:sofa", {
end
return itemstack
end,
after_dig_node = unifieddyes.after_dig_node,
on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
if not clicker:is_player() then
return itemstack
@ -71,6 +70,17 @@ minetest.register_craft({
}
})
unifieddyes.register_color_craft({
output = "lrfurn:sofa",
palette = "wallmounted",
type = "shapeless",
neutral_node = "lrfurn:sofa",
recipe = {
"NEUTRAL_NODE",
"MAIN_DYE"
}
})
-- convert old static nodes to param2 color
lrfurn.old_static_sofas = {}
@ -121,6 +131,6 @@ minetest.register_lbm({
end
})
if minetest.setting_get("log_mods") then
if minetest.settings:get("log_mods") then
minetest.log("action", "[lrfurn/sofas] "..S("Loaded!"))
end