Compare commits
	
		
			124 Commits
		
	
	
		
			stable-201
			...
			2019-05-25
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					7ab149275b | ||
| 
						 | 
					c6ef999591 | ||
| 
						 | 
					a9cfef8fba | ||
| 
						 | 
					9d64af85ca | ||
| 
						 | 
					712ca909ca | ||
| 
						 | 
					32fc5dc49b | ||
| 
						 | 
					854e96d4c0 | ||
| 
						 | 
					6e61cc4ad8 | ||
| 
						 | 
					2ee1cd6887 | ||
| 
						 | 
					0cd8bd7780 | ||
| 
						 | 
					8b78caf7c6 | ||
| 
						 | 
					18d74e2f09 | ||
| 
						 | 
					b94139c9df | ||
| 
						 | 
					bb808a944c | ||
| 
						 | 
					b08c0905c0 | ||
| 
						 | 
					95590f23c5 | ||
| 
						 | 
					554ec8028d | ||
| 
						 | 
					0ab1040760 | ||
| 
						 | 
					52375443ed | ||
| 
						 | 
					ac71c0f189 | ||
| 
						 | 
					37c6b99ac1 | ||
| 
						 | 
					bcf9238e47 | ||
| 
						 | 
					e291a45d99 | ||
| 
						 | 
					12bdbd6684 | ||
| 
						 | 
					13a35d12a0 | ||
| 
						 | 
					c5393f1462 | ||
| 
						 | 
					93351aecda | ||
| 
						 | 
					bf79c7d430 | ||
| 
						 | 
					f7ff5ae3f4 | ||
| 
						 | 
					c64dabfa28 | ||
| 
						 | 
					d4e85cbab2 | ||
| 
						 | 
					3791311422 | ||
| 
						 | 
					ec0e332918 | ||
| 
						 | 
					6dec410d29 | ||
| 
						 | 
					0c58327df7 | ||
| 
						 | 
					fba875f474 | ||
| 
						 | 
					f983710899 | ||
| 
						 | 
					6a3c009276 | ||
| 
						 | 
					69e87419ea | ||
| 
						 | 
					25fef974e3 | ||
| 
						 | 
					4980844320 | ||
| 
						 | 
					fc781daca0 | ||
| 
						 | 
					5b631142aa | ||
| 
						 | 
					eb6089a03e | ||
| 
						 | 
					41455647a2 | ||
| 
						 | 
					55fea4f6ca | ||
| 
						 | 
					a8729575ab | ||
| 
						 | 
					04cb59401b | ||
| 
						 | 
					9e69a6db73 | ||
| 
						 | 
					54ce73b616 | ||
| 
						 | 
					8a5bc0e038 | ||
| 
						 | 
					d6ff137657 | ||
| 
						 | 
					a4ca53cc05 | ||
| 
						 | 
					017326dbed | ||
| 
						 | 
					31bf6b8c40 | ||
| 
						 | 
					b526ec1714 | ||
| 
						 | 
					7e98534179 | ||
| 
						 | 
					8132cfc6f8 | ||
| 
						 | 
					39984c356b | ||
| 
						 | 
					eb2b3d7980 | ||
| 
						 | 
					08bbd0f592 | ||
| 
						 | 
					3597c2c1aa | ||
| 
						 | 
					5db791deb4 | ||
| 
						 | 
					8ccbe6abc4 | ||
| 
						 | 
					cafba3bc53 | ||
| 
						 | 
					ac10702849 | ||
| 
						 | 
					fe2acaaa1e | ||
| 
						 | 
					bfda7c49fd | ||
| 
						 | 
					4d9c4c2410 | ||
| 
						 | 
					1471a0cba9 | ||
| 
						 | 
					eabd237252 | ||
| 
						 | 
					9d4ac9bd9a | ||
| 
						 | 
					5efa9af1b7 | ||
| 
						 | 
					7d40724d39 | ||
| 
						 | 
					5e6307ea3a | ||
| 
						 | 
					8882ab8e19 | ||
| 
						 | 
					3021248538 | ||
| 
						 | 
					4eaf265e65 | ||
| 
						 | 
					228e25e123 | ||
| 
						 | 
					ddcb08fe62 | ||
| 
						 | 
					972d30dd38 | ||
| 
						 | 
					cc9276841e | ||
| 
						 | 
					f2f49a3aac | ||
| 
						 | 
					b92c9e065b | ||
| 
						 | 
					ea77ac32ea | ||
| 
						 | 
					14697ef71b | ||
| 
						 | 
					9921efeeef | ||
| 
						 | 
					87e3c9f9ce | ||
| 
						 | 
					095e34ad7f | ||
| 
						 | 
					6c9da755f3 | ||
| 
						 | 
					c786e3ae05 | ||
| 
						 | 
					48be7ddef1 | ||
| 
						 | 
					2c5be0735a | ||
| 
						 | 
					36e5e319e3 | ||
| 
						 | 
					57b988c185 | ||
| 
						 | 
					d6f660b72a | ||
| 
						 | 
					7b4db2fc5a | ||
| 
						 | 
					b45ace825d | ||
| 
						 | 
					9d2704c0c2 | ||
| 
						 | 
					d7a4054dda | ||
| 
						 | 
					f03e71397a | ||
| 
						 | 
					6349c53824 | ||
| 
						 | 
					c60607aa0d | ||
| 
						 | 
					78ec2119f6 | ||
| 
						 | 
					c247318dd8 | ||
| 
						 | 
					9693d9dd46 | ||
| 
						 | 
					23d1365939 | ||
| 
						 | 
					f391bc59b0 | ||
| 
						 | 
					790557f6ce | ||
| 
						 | 
					c9c4214bff | ||
| 
						 | 
					914aee41fe | ||
| 
						 | 
					ec83040d10 | ||
| 
						 | 
					9bb4222aa5 | ||
| 
						 | 
					67ddc87d2c | ||
| 
						 | 
					970636571e | ||
| 
						 | 
					4ee5b6b87f | ||
| 
						 | 
					1f2676b8f6 | ||
| 
						 | 
					ad4790f74c | ||
| 
						 | 
					7925897748 | ||
| 
						 | 
					459c02548e | ||
| 
						 | 
					1eb1e87f08 | ||
| 
						 | 
					27eae09d93 | ||
| 
						 | 
					761b18c17e | ||
| 
						 | 
					763bcb2e95 | 
@@ -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 = {
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										450
									
								
								LICENSE
									
									
									
									
									
								
							
							
						
						@@ -1,17 +1,15 @@
 | 
			
		||||
For the Lua code:  LGPL 3.0 or higher
 | 
			
		||||
For all models, all textures, and all sounds:  CC-by-SA 3.0 or higher
 | 
			
		||||
For everything else: WTFPL
 | 
			
		||||
License for code: LGPL 3.0
 | 
			
		||||
License for media and all other assets:  CC-by-SA 4.0
 | 
			
		||||
 | 
			
		||||
Exceptions to the above:
 | 
			
		||||
These licenses apply to all modules and components in this modpack,
 | 
			
		||||
unless otherwise stated.
 | 
			
		||||
 | 
			
		||||
Fancy mesh fire model and texture by NathanS (CC-0).
 | 
			
		||||
 | 
			
		||||
===============================================================================
 | 
			
		||||
###############################################################################
 | 
			
		||||
 | 
			
		||||
                   GNU LESSER GENERAL PUBLIC LICENSE
 | 
			
		||||
                       Version 3, 29 June 2007
 | 
			
		||||
 | 
			
		||||
 Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
 | 
			
		||||
 Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
 | 
			
		||||
 Everyone is permitted to copy and distribute verbatim copies
 | 
			
		||||
 of this license document, but changing it is not allowed.
 | 
			
		||||
 | 
			
		||||
@@ -174,26 +172,432 @@ apply, that proxy's public statement of acceptance of any version is
 | 
			
		||||
permanent authorization for you to choose that version for the
 | 
			
		||||
Library.
 | 
			
		||||
 | 
			
		||||
===============================================================================
 | 
			
		||||
###############################################################################
 | 
			
		||||
 | 
			
		||||
This work is licensed under the Creative Commons Attribution-ShareAlike 
 | 
			
		||||
4.0 International License. To view a copy of this license, visit 
 | 
			
		||||
http://creativecommons.org/licenses/by-sa/4.0/ or send a letter to 
 | 
			
		||||
Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.
 | 
			
		||||
Attribution-ShareAlike 4.0 International
 | 
			
		||||
 | 
			
		||||
===============================================================================
 | 
			
		||||
=======================================================================
 | 
			
		||||
 | 
			
		||||
            DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
 | 
			
		||||
                    Version 2, December 2004
 | 
			
		||||
Creative Commons Corporation ("Creative Commons") is not a law firm and
 | 
			
		||||
does not provide legal services or legal advice. Distribution of
 | 
			
		||||
Creative Commons public licenses does not create a lawyer-client or
 | 
			
		||||
other relationship. Creative Commons makes its licenses and related
 | 
			
		||||
information available on an "as-is" basis. Creative Commons gives no
 | 
			
		||||
warranties regarding its licenses, any material licensed under their
 | 
			
		||||
terms and conditions, or any related information. Creative Commons
 | 
			
		||||
disclaims all liability for damages resulting from their use to the
 | 
			
		||||
fullest extent possible.
 | 
			
		||||
 | 
			
		||||
 Copyright (C) 2004 Sam Hocevar <sam@hocevar.net>
 | 
			
		||||
Using Creative Commons Public Licenses
 | 
			
		||||
 | 
			
		||||
 Everyone is permitted to copy and distribute verbatim or modified
 | 
			
		||||
 copies of this license document, and changing it is allowed as long
 | 
			
		||||
 as the name is changed.
 | 
			
		||||
Creative Commons public licenses provide a standard set of terms and
 | 
			
		||||
conditions that creators and other rights holders may use to share
 | 
			
		||||
original works of authorship and other material subject to copyright
 | 
			
		||||
and certain other rights specified in the public license below. The
 | 
			
		||||
following considerations are for informational purposes only, are not
 | 
			
		||||
exhaustive, and do not form part of our licenses.
 | 
			
		||||
 | 
			
		||||
            DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
 | 
			
		||||
   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
 | 
			
		||||
     Considerations for licensors: Our public licenses are
 | 
			
		||||
     intended for use by those authorized to give the public
 | 
			
		||||
     permission to use material in ways otherwise restricted by
 | 
			
		||||
     copyright and certain other rights. Our licenses are
 | 
			
		||||
     irrevocable. Licensors should read and understand the terms
 | 
			
		||||
     and conditions of the license they choose before applying it.
 | 
			
		||||
     Licensors should also secure all rights necessary before
 | 
			
		||||
     applying our licenses so that the public can reuse the
 | 
			
		||||
     material as expected. Licensors should clearly mark any
 | 
			
		||||
     material not subject to the license. This includes other CC-
 | 
			
		||||
     licensed material, or material used under an exception or
 | 
			
		||||
     limitation to copyright. More considerations for licensors:
 | 
			
		||||
	wiki.creativecommons.org/Considerations_for_licensors
 | 
			
		||||
 | 
			
		||||
  0. You just DO WHAT THE FUCK YOU WANT TO.
 | 
			
		||||
     Considerations for the public: By using one of our public
 | 
			
		||||
     licenses, a licensor grants the public permission to use the
 | 
			
		||||
     licensed material under specified terms and conditions. If
 | 
			
		||||
     the licensor's permission is not necessary for any reason--for
 | 
			
		||||
     example, because of any applicable exception or limitation to
 | 
			
		||||
     copyright--then that use is not regulated by the license. Our
 | 
			
		||||
     licenses grant only permissions under copyright and certain
 | 
			
		||||
     other rights that a licensor has authority to grant. Use of
 | 
			
		||||
     the licensed material may still be restricted for other
 | 
			
		||||
     reasons, including because others have copyright or other
 | 
			
		||||
     rights in the material. A licensor may make special requests,
 | 
			
		||||
     such as asking that all changes be marked or described.
 | 
			
		||||
     Although not required by our licenses, you are encouraged to
 | 
			
		||||
     respect those requests where reasonable. More considerations
 | 
			
		||||
     for the public: 
 | 
			
		||||
	wiki.creativecommons.org/Considerations_for_licensees
 | 
			
		||||
 | 
			
		||||
=======================================================================
 | 
			
		||||
 | 
			
		||||
Creative Commons Attribution-ShareAlike 4.0 International Public
 | 
			
		||||
License
 | 
			
		||||
 | 
			
		||||
By exercising the Licensed Rights (defined below), You accept and agree
 | 
			
		||||
to be bound by the terms and conditions of this Creative Commons
 | 
			
		||||
Attribution-ShareAlike 4.0 International Public License ("Public
 | 
			
		||||
License"). To the extent this Public License may be interpreted as a
 | 
			
		||||
contract, You are granted the Licensed Rights in consideration of Your
 | 
			
		||||
acceptance of these terms and conditions, and the Licensor grants You
 | 
			
		||||
such rights in consideration of benefits the Licensor receives from
 | 
			
		||||
making the Licensed Material available under these terms and
 | 
			
		||||
conditions.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Section 1 -- Definitions.
 | 
			
		||||
 | 
			
		||||
  a. Adapted Material means material subject to Copyright and Similar
 | 
			
		||||
     Rights that is derived from or based upon the Licensed Material
 | 
			
		||||
     and in which the Licensed Material is translated, altered,
 | 
			
		||||
     arranged, transformed, or otherwise modified in a manner requiring
 | 
			
		||||
     permission under the Copyright and Similar Rights held by the
 | 
			
		||||
     Licensor. For purposes of this Public License, where the Licensed
 | 
			
		||||
     Material is a musical work, performance, or sound recording,
 | 
			
		||||
     Adapted Material is always produced where the Licensed Material is
 | 
			
		||||
     synched in timed relation with a moving image.
 | 
			
		||||
 | 
			
		||||
  b. Adapter's License means the license You apply to Your Copyright
 | 
			
		||||
     and Similar Rights in Your contributions to Adapted Material in
 | 
			
		||||
     accordance with the terms and conditions of this Public License.
 | 
			
		||||
 | 
			
		||||
  c. BY-SA Compatible License means a license listed at
 | 
			
		||||
     creativecommons.org/compatiblelicenses, approved by Creative
 | 
			
		||||
     Commons as essentially the equivalent of this Public License.
 | 
			
		||||
 | 
			
		||||
  d. Copyright and Similar Rights means copyright and/or similar rights
 | 
			
		||||
     closely related to copyright including, without limitation,
 | 
			
		||||
     performance, broadcast, sound recording, and Sui Generis Database
 | 
			
		||||
     Rights, without regard to how the rights are labeled or
 | 
			
		||||
     categorized. For purposes of this Public License, the rights
 | 
			
		||||
     specified in Section 2(b)(1)-(2) are not Copyright and Similar
 | 
			
		||||
     Rights.
 | 
			
		||||
 | 
			
		||||
  e. Effective Technological Measures means those measures that, in the
 | 
			
		||||
     absence of proper authority, may not be circumvented under laws
 | 
			
		||||
     fulfilling obligations under Article 11 of the WIPO Copyright
 | 
			
		||||
     Treaty adopted on December 20, 1996, and/or similar international
 | 
			
		||||
     agreements.
 | 
			
		||||
 | 
			
		||||
  f. Exceptions and Limitations means fair use, fair dealing, and/or
 | 
			
		||||
     any other exception or limitation to Copyright and Similar Rights
 | 
			
		||||
     that applies to Your use of the Licensed Material.
 | 
			
		||||
 | 
			
		||||
  g. License Elements means the license attributes listed in the name
 | 
			
		||||
     of a Creative Commons Public License. The License Elements of this
 | 
			
		||||
     Public License are Attribution and ShareAlike.
 | 
			
		||||
 | 
			
		||||
  h. Licensed Material means the artistic or literary work, database,
 | 
			
		||||
     or other material to which the Licensor applied this Public
 | 
			
		||||
     License.
 | 
			
		||||
 | 
			
		||||
  i. Licensed Rights means the rights granted to You subject to the
 | 
			
		||||
     terms and conditions of this Public License, which are limited to
 | 
			
		||||
     all Copyright and Similar Rights that apply to Your use of the
 | 
			
		||||
     Licensed Material and that the Licensor has authority to license.
 | 
			
		||||
 | 
			
		||||
  j. Licensor means the individual(s) or entity(ies) granting rights
 | 
			
		||||
     under this Public License.
 | 
			
		||||
 | 
			
		||||
  k. Share means to provide material to the public by any means or
 | 
			
		||||
     process that requires permission under the Licensed Rights, such
 | 
			
		||||
     as reproduction, public display, public performance, distribution,
 | 
			
		||||
     dissemination, communication, or importation, and to make material
 | 
			
		||||
     available to the public including in ways that members of the
 | 
			
		||||
     public may access the material from a place and at a time
 | 
			
		||||
     individually chosen by them.
 | 
			
		||||
 | 
			
		||||
  l. Sui Generis Database Rights means rights other than copyright
 | 
			
		||||
     resulting from Directive 96/9/EC of the European Parliament and of
 | 
			
		||||
     the Council of 11 March 1996 on the legal protection of databases,
 | 
			
		||||
     as amended and/or succeeded, as well as other essentially
 | 
			
		||||
     equivalent rights anywhere in the world.
 | 
			
		||||
 | 
			
		||||
  m. You means the individual or entity exercising the Licensed Rights
 | 
			
		||||
     under this Public License. Your has a corresponding meaning.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Section 2 -- Scope.
 | 
			
		||||
 | 
			
		||||
  a. License grant.
 | 
			
		||||
 | 
			
		||||
       1. Subject to the terms and conditions of this Public License,
 | 
			
		||||
          the Licensor hereby grants You a worldwide, royalty-free,
 | 
			
		||||
          non-sublicensable, non-exclusive, irrevocable license to
 | 
			
		||||
          exercise the Licensed Rights in the Licensed Material to:
 | 
			
		||||
 | 
			
		||||
            a. reproduce and Share the Licensed Material, in whole or
 | 
			
		||||
               in part; and
 | 
			
		||||
 | 
			
		||||
            b. produce, reproduce, and Share Adapted Material.
 | 
			
		||||
 | 
			
		||||
       2. Exceptions and Limitations. For the avoidance of doubt, where
 | 
			
		||||
          Exceptions and Limitations apply to Your use, this Public
 | 
			
		||||
          License does not apply, and You do not need to comply with
 | 
			
		||||
          its terms and conditions.
 | 
			
		||||
 | 
			
		||||
       3. Term. The term of this Public License is specified in Section
 | 
			
		||||
          6(a).
 | 
			
		||||
 | 
			
		||||
       4. Media and formats; technical modifications allowed. The
 | 
			
		||||
          Licensor authorizes You to exercise the Licensed Rights in
 | 
			
		||||
          all media and formats whether now known or hereafter created,
 | 
			
		||||
          and to make technical modifications necessary to do so. The
 | 
			
		||||
          Licensor waives and/or agrees not to assert any right or
 | 
			
		||||
          authority to forbid You from making technical modifications
 | 
			
		||||
          necessary to exercise the Licensed Rights, including
 | 
			
		||||
          technical modifications necessary to circumvent Effective
 | 
			
		||||
          Technological Measures. For purposes of this Public License,
 | 
			
		||||
          simply making modifications authorized by this Section 2(a)
 | 
			
		||||
          (4) never produces Adapted Material.
 | 
			
		||||
 | 
			
		||||
       5. Downstream recipients.
 | 
			
		||||
 | 
			
		||||
            a. Offer from the Licensor -- Licensed Material. Every
 | 
			
		||||
               recipient of the Licensed Material automatically
 | 
			
		||||
               receives an offer from the Licensor to exercise the
 | 
			
		||||
               Licensed Rights under the terms and conditions of this
 | 
			
		||||
               Public License.
 | 
			
		||||
 | 
			
		||||
            b. Additional offer from the Licensor -- Adapted Material.
 | 
			
		||||
               Every recipient of Adapted Material from You
 | 
			
		||||
               automatically receives an offer from the Licensor to
 | 
			
		||||
               exercise the Licensed Rights in the Adapted Material
 | 
			
		||||
               under the conditions of the Adapter's License You apply.
 | 
			
		||||
 | 
			
		||||
            c. No downstream restrictions. You may not offer or impose
 | 
			
		||||
               any additional or different terms or conditions on, or
 | 
			
		||||
               apply any Effective Technological Measures to, the
 | 
			
		||||
               Licensed Material if doing so restricts exercise of the
 | 
			
		||||
               Licensed Rights by any recipient of the Licensed
 | 
			
		||||
               Material.
 | 
			
		||||
 | 
			
		||||
       6. No endorsement. Nothing in this Public License constitutes or
 | 
			
		||||
          may be construed as permission to assert or imply that You
 | 
			
		||||
          are, or that Your use of the Licensed Material is, connected
 | 
			
		||||
          with, or sponsored, endorsed, or granted official status by,
 | 
			
		||||
          the Licensor or others designated to receive attribution as
 | 
			
		||||
          provided in Section 3(a)(1)(A)(i).
 | 
			
		||||
 | 
			
		||||
  b. Other rights.
 | 
			
		||||
 | 
			
		||||
       1. Moral rights, such as the right of integrity, are not
 | 
			
		||||
          licensed under this Public License, nor are publicity,
 | 
			
		||||
          privacy, and/or other similar personality rights; however, to
 | 
			
		||||
          the extent possible, the Licensor waives and/or agrees not to
 | 
			
		||||
          assert any such rights held by the Licensor to the limited
 | 
			
		||||
          extent necessary to allow You to exercise the Licensed
 | 
			
		||||
          Rights, but not otherwise.
 | 
			
		||||
 | 
			
		||||
       2. Patent and trademark rights are not licensed under this
 | 
			
		||||
          Public License.
 | 
			
		||||
 | 
			
		||||
       3. To the extent possible, the Licensor waives any right to
 | 
			
		||||
          collect royalties from You for the exercise of the Licensed
 | 
			
		||||
          Rights, whether directly or through a collecting society
 | 
			
		||||
          under any voluntary or waivable statutory or compulsory
 | 
			
		||||
          licensing scheme. In all other cases the Licensor expressly
 | 
			
		||||
          reserves any right to collect such royalties.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Section 3 -- License Conditions.
 | 
			
		||||
 | 
			
		||||
Your exercise of the Licensed Rights is expressly made subject to the
 | 
			
		||||
following conditions.
 | 
			
		||||
 | 
			
		||||
  a. Attribution.
 | 
			
		||||
 | 
			
		||||
       1. If You Share the Licensed Material (including in modified
 | 
			
		||||
          form), You must:
 | 
			
		||||
 | 
			
		||||
            a. retain the following if it is supplied by the Licensor
 | 
			
		||||
               with the Licensed Material:
 | 
			
		||||
 | 
			
		||||
                 i. identification of the creator(s) of the Licensed
 | 
			
		||||
                    Material and any others designated to receive
 | 
			
		||||
                    attribution, in any reasonable manner requested by
 | 
			
		||||
                    the Licensor (including by pseudonym if
 | 
			
		||||
                    designated);
 | 
			
		||||
 | 
			
		||||
                ii. a copyright notice;
 | 
			
		||||
 | 
			
		||||
               iii. a notice that refers to this Public License;
 | 
			
		||||
 | 
			
		||||
                iv. a notice that refers to the disclaimer of
 | 
			
		||||
                    warranties;
 | 
			
		||||
 | 
			
		||||
                 v. a URI or hyperlink to the Licensed Material to the
 | 
			
		||||
                    extent reasonably practicable;
 | 
			
		||||
 | 
			
		||||
            b. indicate if You modified the Licensed Material and
 | 
			
		||||
               retain an indication of any previous modifications; and
 | 
			
		||||
 | 
			
		||||
            c. indicate the Licensed Material is licensed under this
 | 
			
		||||
               Public License, and include the text of, or the URI or
 | 
			
		||||
               hyperlink to, this Public License.
 | 
			
		||||
 | 
			
		||||
       2. You may satisfy the conditions in Section 3(a)(1) in any
 | 
			
		||||
          reasonable manner based on the medium, means, and context in
 | 
			
		||||
          which You Share the Licensed Material. For example, it may be
 | 
			
		||||
          reasonable to satisfy the conditions by providing a URI or
 | 
			
		||||
          hyperlink to a resource that includes the required
 | 
			
		||||
          information.
 | 
			
		||||
 | 
			
		||||
       3. If requested by the Licensor, You must remove any of the
 | 
			
		||||
          information required by Section 3(a)(1)(A) to the extent
 | 
			
		||||
          reasonably practicable.
 | 
			
		||||
 | 
			
		||||
  b. ShareAlike.
 | 
			
		||||
 | 
			
		||||
     In addition to the conditions in Section 3(a), if You Share
 | 
			
		||||
     Adapted Material You produce, the following conditions also apply.
 | 
			
		||||
 | 
			
		||||
       1. The Adapter's License You apply must be a Creative Commons
 | 
			
		||||
          license with the same License Elements, this version or
 | 
			
		||||
          later, or a BY-SA Compatible License.
 | 
			
		||||
 | 
			
		||||
       2. You must include the text of, or the URI or hyperlink to, the
 | 
			
		||||
          Adapter's License You apply. You may satisfy this condition
 | 
			
		||||
          in any reasonable manner based on the medium, means, and
 | 
			
		||||
          context in which You Share Adapted Material.
 | 
			
		||||
 | 
			
		||||
       3. You may not offer or impose any additional or different terms
 | 
			
		||||
          or conditions on, or apply any Effective Technological
 | 
			
		||||
          Measures to, Adapted Material that restrict exercise of the
 | 
			
		||||
          rights granted under the Adapter's License You apply.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Section 4 -- Sui Generis Database Rights.
 | 
			
		||||
 | 
			
		||||
Where the Licensed Rights include Sui Generis Database Rights that
 | 
			
		||||
apply to Your use of the Licensed Material:
 | 
			
		||||
 | 
			
		||||
  a. for the avoidance of doubt, Section 2(a)(1) grants You the right
 | 
			
		||||
     to extract, reuse, reproduce, and Share all or a substantial
 | 
			
		||||
     portion of the contents of the database;
 | 
			
		||||
 | 
			
		||||
  b. if You include all or a substantial portion of the database
 | 
			
		||||
     contents in a database in which You have Sui Generis Database
 | 
			
		||||
     Rights, then the database in which You have Sui Generis Database
 | 
			
		||||
     Rights (but not its individual contents) is Adapted Material,
 | 
			
		||||
 | 
			
		||||
     including for purposes of Section 3(b); and
 | 
			
		||||
  c. You must comply with the conditions in Section 3(a) if You Share
 | 
			
		||||
     all or a substantial portion of the contents of the database.
 | 
			
		||||
 | 
			
		||||
For the avoidance of doubt, this Section 4 supplements and does not
 | 
			
		||||
replace Your obligations under this Public License where the Licensed
 | 
			
		||||
Rights include other Copyright and Similar Rights.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Section 5 -- Disclaimer of Warranties and Limitation of Liability.
 | 
			
		||||
 | 
			
		||||
  a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE
 | 
			
		||||
     EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS
 | 
			
		||||
     AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF
 | 
			
		||||
     ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS,
 | 
			
		||||
     IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION,
 | 
			
		||||
     WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR
 | 
			
		||||
     PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS,
 | 
			
		||||
     ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT
 | 
			
		||||
     KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT
 | 
			
		||||
     ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU.
 | 
			
		||||
 | 
			
		||||
  b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE
 | 
			
		||||
     TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION,
 | 
			
		||||
     NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT,
 | 
			
		||||
     INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES,
 | 
			
		||||
     COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR
 | 
			
		||||
     USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN
 | 
			
		||||
     ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR
 | 
			
		||||
     DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR
 | 
			
		||||
     IN PART, THIS LIMITATION MAY NOT APPLY TO YOU.
 | 
			
		||||
 | 
			
		||||
  c. The disclaimer of warranties and limitation of liability provided
 | 
			
		||||
     above shall be interpreted in a manner that, to the extent
 | 
			
		||||
     possible, most closely approximates an absolute disclaimer and
 | 
			
		||||
     waiver of all liability.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Section 6 -- Term and Termination.
 | 
			
		||||
 | 
			
		||||
  a. This Public License applies for the term of the Copyright and
 | 
			
		||||
     Similar Rights licensed here. However, if You fail to comply with
 | 
			
		||||
     this Public License, then Your rights under this Public License
 | 
			
		||||
     terminate automatically.
 | 
			
		||||
 | 
			
		||||
  b. Where Your right to use the Licensed Material has terminated under
 | 
			
		||||
     Section 6(a), it reinstates:
 | 
			
		||||
 | 
			
		||||
       1. automatically as of the date the violation is cured, provided
 | 
			
		||||
          it is cured within 30 days of Your discovery of the
 | 
			
		||||
          violation; or
 | 
			
		||||
 | 
			
		||||
       2. upon express reinstatement by the Licensor.
 | 
			
		||||
 | 
			
		||||
     For the avoidance of doubt, this Section 6(b) does not affect any
 | 
			
		||||
     right the Licensor may have to seek remedies for Your violations
 | 
			
		||||
     of this Public License.
 | 
			
		||||
 | 
			
		||||
  c. For the avoidance of doubt, the Licensor may also offer the
 | 
			
		||||
     Licensed Material under separate terms or conditions or stop
 | 
			
		||||
     distributing the Licensed Material at any time; however, doing so
 | 
			
		||||
     will not terminate this Public License.
 | 
			
		||||
 | 
			
		||||
  d. Sections 1, 5, 6, 7, and 8 survive termination of this Public
 | 
			
		||||
     License.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Section 7 -- Other Terms and Conditions.
 | 
			
		||||
 | 
			
		||||
  a. The Licensor shall not be bound by any additional or different
 | 
			
		||||
     terms or conditions communicated by You unless expressly agreed.
 | 
			
		||||
 | 
			
		||||
  b. Any arrangements, understandings, or agreements regarding the
 | 
			
		||||
     Licensed Material not stated herein are separate from and
 | 
			
		||||
     independent of the terms and conditions of this Public License.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Section 8 -- Interpretation.
 | 
			
		||||
 | 
			
		||||
  a. For the avoidance of doubt, this Public License does not, and
 | 
			
		||||
     shall not be interpreted to, reduce, limit, restrict, or impose
 | 
			
		||||
     conditions on any use of the Licensed Material that could lawfully
 | 
			
		||||
     be made without permission under this Public License.
 | 
			
		||||
 | 
			
		||||
  b. To the extent possible, if any provision of this Public License is
 | 
			
		||||
     deemed unenforceable, it shall be automatically reformed to the
 | 
			
		||||
     minimum extent necessary to make it enforceable. If the provision
 | 
			
		||||
     cannot be reformed, it shall be severed from this Public License
 | 
			
		||||
     without affecting the enforceability of the remaining terms and
 | 
			
		||||
     conditions.
 | 
			
		||||
 | 
			
		||||
  c. No term or condition of this Public License will be waived and no
 | 
			
		||||
     failure to comply consented to unless expressly agreed to by the
 | 
			
		||||
     Licensor.
 | 
			
		||||
 | 
			
		||||
  d. Nothing in this Public License constitutes or may be interpreted
 | 
			
		||||
     as a limitation upon, or waiver of, any privileges and immunities
 | 
			
		||||
     that apply to the Licensor or You, including from the legal
 | 
			
		||||
     processes of any jurisdiction or authority.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
=======================================================================
 | 
			
		||||
 | 
			
		||||
Creative Commons is not a party to its public
 | 
			
		||||
licenses. Notwithstanding, Creative Commons may elect to apply one of
 | 
			
		||||
its public licenses to material it publishes and in those instances
 | 
			
		||||
will be considered the “Licensor.” The text of the Creative Commons
 | 
			
		||||
public licenses is dedicated to the public domain under the CC0 Public
 | 
			
		||||
Domain Dedication. Except for the limited purpose of indicating that
 | 
			
		||||
material is shared under a Creative Commons public license or as
 | 
			
		||||
otherwise permitted by the Creative Commons policies published at
 | 
			
		||||
creativecommons.org/policies, Creative Commons does not authorize the
 | 
			
		||||
use of the trademark "Creative Commons" or any other trademark or logo
 | 
			
		||||
of Creative Commons without its prior written consent including,
 | 
			
		||||
without limitation, in connection with any unauthorized modifications
 | 
			
		||||
to any of its public licenses or any other arrangements,
 | 
			
		||||
understandings, or agreements concerning use of licensed material. For
 | 
			
		||||
the avoidance of doubt, this paragraph does not form part of the
 | 
			
		||||
public licenses.
 | 
			
		||||
 | 
			
		||||
Creative Commons may be contacted at creativecommons.org.
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										61
									
								
								building_blocks/alias.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,61 @@
 | 
			
		||||
local S = homedecor.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")
 | 
			
		||||
 | 
			
		||||
	if minetest.get_modpath("gloopblocks") then
 | 
			
		||||
		minetest.register_alias("building_blocks:gravel_spread", "gloopblocks:slab_gravel_1")
 | 
			
		||||
	end
 | 
			
		||||
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
 | 
			
		||||
@@ -1,3 +1,5 @@
 | 
			
		||||
default
 | 
			
		||||
homedecor_i18n
 | 
			
		||||
homedecor_common
 | 
			
		||||
moreblocks?
 | 
			
		||||
gloopblocks?
 | 
			
		||||
stairs?
 | 
			
		||||
 
 | 
			
		||||
@@ -1,633 +1,7 @@
 | 
			
		||||
local S = homedecor.gettext
 | 
			
		||||
local modpath = minetest.get_modpath("building_blocks")
 | 
			
		||||
 | 
			
		||||
local S = homedecor_i18n.gettext
 | 
			
		||||
 | 
			
		||||
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")
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										230
									
								
								building_blocks/node_stairs.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,230 @@
 | 
			
		||||
local S = homedecor.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},
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
if not minetest.get_modpath("moreblocks") or not minetest.get_modpath("gloopblocks") then
 | 
			
		||||
	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},
 | 
			
		||||
		}),
 | 
			
		||||
	})
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
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(),
 | 
			
		||||
})
 | 
			
		||||
							
								
								
									
										23
									
								
								building_blocks/others.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,23 @@
 | 
			
		||||
local S = homedecor.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}
 | 
			
		||||
		}
 | 
			
		||||
	},
 | 
			
		||||
})
 | 
			
		||||
							
								
								
									
										174
									
								
								building_blocks/recipes.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,174 @@
 | 
			
		||||
local S = homedecor.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"},
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
if not minetest.get_modpath("moreblocks") or not minetest.get_modpath("gloopblocks") then
 | 
			
		||||
	minetest.register_craft({
 | 
			
		||||
		output = 'building_blocks:gravel_spread 4',
 | 
			
		||||
		recipe = {
 | 
			
		||||
			{"default:gravel", "default:gravel", "default:gravel"},
 | 
			
		||||
		}
 | 
			
		||||
	})
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
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,
 | 
			
		||||
})
 | 
			
		||||
| 
		 Before Width: | Height: | Size: 499 B After Width: | Height: | Size: 450 B  | 
@@ -1,2 +0,0 @@
 | 
			
		||||
default
 | 
			
		||||
homedecor
 | 
			
		||||
							
								
								
									
										179
									
								
								chains/init.lua
									
									
									
									
									
								
							
							
						
						@@ -1,179 +0,0 @@
 | 
			
		||||
 | 
			
		||||
local S = homedecor_i18n.gettext
 | 
			
		||||
 | 
			
		||||
local chains_sbox = {
 | 
			
		||||
	type = "fixed",
 | 
			
		||||
	fixed = { -0.1, -0.625, -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 }
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
minetest.register_node("chains:chain", {
 | 
			
		||||
	description = S("Hanging chain (wrought iron)"),
 | 
			
		||||
	drawtype = "mesh",
 | 
			
		||||
	mesh = "chains.obj",
 | 
			
		||||
	tiles = {"chains_wrought_iron.png"},
 | 
			
		||||
	walkable = false,
 | 
			
		||||
	climbable = true,
 | 
			
		||||
	sunlight_propagates = true,
 | 
			
		||||
	paramtype = "light",
 | 
			
		||||
	inventory_image = "chain_wrought_iron_inv.png",
 | 
			
		||||
	groups = {cracky=3},
 | 
			
		||||
	selection_box = chains_sbox,
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_node("chains:chain_brass", {
 | 
			
		||||
	description = S("Hanging chain (brass)"),
 | 
			
		||||
	drawtype = "mesh",
 | 
			
		||||
	mesh = "chains.obj",
 | 
			
		||||
	tiles = {"chains_brass.png"},
 | 
			
		||||
	walkable = false,
 | 
			
		||||
	climbable = true,
 | 
			
		||||
	sunlight_propagates = true,
 | 
			
		||||
	paramtype = "light",
 | 
			
		||||
	inventory_image = "chain_brass_inv.png",
 | 
			
		||||
	groups = {cracky=3},
 | 
			
		||||
	selection_box = chains_sbox,
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_node("chains:chain_top", {
 | 
			
		||||
	description = S("Hanging chain (ceiling mount, wrought iron)"),
 | 
			
		||||
	drawtype = "mesh",
 | 
			
		||||
	mesh = "top_chains.obj",
 | 
			
		||||
	tiles = {"chains_wrought_iron.png"},
 | 
			
		||||
	walkable = false,
 | 
			
		||||
	climbable = true,
 | 
			
		||||
	sunlight_propagates = true,
 | 
			
		||||
	paramtype = "light",
 | 
			
		||||
	inventory_image = "top_chain_wrought_iron_inv.png",
 | 
			
		||||
	groups = {cracky=3},
 | 
			
		||||
	selection_box = topchains_sbox,
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_node("chains:chain_top_brass", {
 | 
			
		||||
	description = S("Hanging chain (ceiling mount, brass)"),
 | 
			
		||||
	drawtype = "mesh",
 | 
			
		||||
	mesh = "top_chains.obj",
 | 
			
		||||
	tiles = {"chains_brass.png"},
 | 
			
		||||
	walkable = false,
 | 
			
		||||
	climbable = true,
 | 
			
		||||
	sunlight_propagates = true,
 | 
			
		||||
	paramtype = "light",
 | 
			
		||||
	inventory_image = "top_chain_brass_inv.png",
 | 
			
		||||
	groups = {cracky=3},
 | 
			
		||||
	selection_box = topchains_sbox,
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_node("chains:chandelier", {
 | 
			
		||||
	description = S("Chandelier (wrought iron)"),
 | 
			
		||||
	paramtype = "light",
 | 
			
		||||
	light_source = default.LIGHT_MAX-2,
 | 
			
		||||
	walkable = false,
 | 
			
		||||
	climbable = true,
 | 
			
		||||
	sunlight_propagates = true,
 | 
			
		||||
	tiles = {
 | 
			
		||||
		"chains_wrought_iron.png",
 | 
			
		||||
		"chains_candle.png",
 | 
			
		||||
		{
 | 
			
		||||
			name="chains_candle_flame.png",
 | 
			
		||||
			animation={
 | 
			
		||||
				type="vertical_frames",
 | 
			
		||||
				aspect_w=16,
 | 
			
		||||
				aspect_h=16,
 | 
			
		||||
				length=3.0
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	},
 | 
			
		||||
	drawtype = "mesh",
 | 
			
		||||
	mesh = "chains_chandelier.obj",
 | 
			
		||||
	groups = {cracky=3},
 | 
			
		||||
	sounds =  default.node_sound_stone_defaults(),
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_node("chains:chandelier_brass", {
 | 
			
		||||
	description = S("Chandelier (brass)"),
 | 
			
		||||
	paramtype = "light",
 | 
			
		||||
	light_source = default.LIGHT_MAX-2,
 | 
			
		||||
	walkable = false,
 | 
			
		||||
	climbable = true,
 | 
			
		||||
	sunlight_propagates = true,
 | 
			
		||||
	tiles = {
 | 
			
		||||
		"chains_brass.png",
 | 
			
		||||
		"chains_candle.png",
 | 
			
		||||
		{
 | 
			
		||||
			name="chains_candle_flame.png",
 | 
			
		||||
			animation={
 | 
			
		||||
				type="vertical_frames",
 | 
			
		||||
				aspect_w=16,
 | 
			
		||||
				aspect_h=16,
 | 
			
		||||
				length=3.0
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	},
 | 
			
		||||
	drawtype = "mesh",
 | 
			
		||||
	mesh = "chains_chandelier.obj",
 | 
			
		||||
	groups = {cracky=3},
 | 
			
		||||
	sounds =  default.node_sound_stone_defaults(),
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
-- crafts
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	output = 'chains:chain 2',
 | 
			
		||||
	recipe = {
 | 
			
		||||
		{'glooptest:chainlink'},
 | 
			
		||||
		{'glooptest:chainlink'},
 | 
			
		||||
		{'glooptest:chainlink'},
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	output = 'chains:chain_top',
 | 
			
		||||
	recipe = {
 | 
			
		||||
		{'default:steel_ingot'},
 | 
			
		||||
		{'glooptest:chainlink'},
 | 
			
		||||
	},
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	output = 'chains:chandelier',
 | 
			
		||||
	recipe = {
 | 
			
		||||
		{'', 'glooptest:chainlink', ''},
 | 
			
		||||
		{'default:torch', 'glooptest:chainlink', 'default:torch'},
 | 
			
		||||
		{'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'},
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
-- brass versions
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	output = 'chains:chain_brass 2',
 | 
			
		||||
	recipe = {
 | 
			
		||||
		{'homedecor:chainlink_brass'},
 | 
			
		||||
		{'homedecor:chainlink_brass'},
 | 
			
		||||
		{'homedecor:chainlink_brass'},
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	output = 'chains:chain_top_brass',
 | 
			
		||||
	recipe = {
 | 
			
		||||
		{'technic:brass_ingot'},
 | 
			
		||||
		{'homedecor:chainlink_brass'},
 | 
			
		||||
	},
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	output = 'chains:chandelier_brass',
 | 
			
		||||
	recipe = {
 | 
			
		||||
		{'', 'homedecor:chainlink_brass', ''},
 | 
			
		||||
		{'default:torch', 'homedecor:chainlink_brass', 'default:torch'},
 | 
			
		||||
		{'technic:brass_ingot', 'technic:brass_ingot', 'technic:brass_ingot'},
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
@@ -1,881 +0,0 @@
 | 
			
		||||
# Blender v2.73 (sub 0) OBJ File: 'chains.blend'
 | 
			
		||||
# www.blender.org
 | 
			
		||||
o Torus.016_Torus
 | 
			
		||||
v 0.000000 -0.429978 0.000002
 | 
			
		||||
v 0.000000 -0.401109 0.055211
 | 
			
		||||
v -0.014044 -0.391975 0.048870
 | 
			
		||||
v -0.014044 -0.423304 0.000002
 | 
			
		||||
v -0.009826 -0.379748 0.040970
 | 
			
		||||
v -0.009826 -0.406012 0.000002
 | 
			
		||||
v 0.009826 -0.379748 0.040970
 | 
			
		||||
v 0.009826 -0.406012 0.000002
 | 
			
		||||
v 0.014044 -0.391975 0.048870
 | 
			
		||||
v 0.014044 -0.423304 0.000002
 | 
			
		||||
v 0.000000 -0.316336 0.080195
 | 
			
		||||
v -0.014044 -0.316336 0.069112
 | 
			
		||||
v -0.009826 -0.316336 0.057941
 | 
			
		||||
v 0.009826 -0.316336 0.057941
 | 
			
		||||
v 0.014044 -0.316336 0.069112
 | 
			
		||||
v 0.000000 -0.231564 0.055211
 | 
			
		||||
v -0.014044 -0.240700 0.048870
 | 
			
		||||
v -0.009826 -0.252925 0.040970
 | 
			
		||||
v 0.009826 -0.252925 0.040970
 | 
			
		||||
v 0.014044 -0.240700 0.048870
 | 
			
		||||
v 0.000000 -0.202695 0.000002
 | 
			
		||||
v -0.014044 -0.209368 0.000002
 | 
			
		||||
v -0.009826 -0.226661 0.000002
 | 
			
		||||
v 0.009826 -0.226661 0.000002
 | 
			
		||||
v 0.014044 -0.209368 0.000002
 | 
			
		||||
v 0.000000 -0.231564 -0.055206
 | 
			
		||||
v -0.014044 -0.240700 -0.048868
 | 
			
		||||
v -0.009826 -0.252925 -0.040967
 | 
			
		||||
v 0.009826 -0.252925 -0.040967
 | 
			
		||||
v 0.014044 -0.240700 -0.048865
 | 
			
		||||
v 0.000000 -0.316336 -0.080190
 | 
			
		||||
v -0.014044 -0.316336 -0.069108
 | 
			
		||||
v -0.009826 -0.316336 -0.057936
 | 
			
		||||
v 0.009826 -0.316336 -0.057936
 | 
			
		||||
v 0.014044 -0.316336 -0.069108
 | 
			
		||||
v 0.000000 -0.400361 -0.055206
 | 
			
		||||
v -0.014044 -0.391975 -0.048868
 | 
			
		||||
v -0.009826 -0.379748 -0.040967
 | 
			
		||||
v 0.009826 -0.379748 -0.040967
 | 
			
		||||
v 0.014044 -0.391975 -0.048868
 | 
			
		||||
v 0.000000 -0.262249 0.000002
 | 
			
		||||
v -0.061672 -0.233381 0.000002
 | 
			
		||||
v -0.054590 -0.224245 -0.012569
 | 
			
		||||
v 0.000000 -0.255577 -0.012569
 | 
			
		||||
v -0.045765 -0.212018 -0.008794
 | 
			
		||||
v 0.000000 -0.238285 -0.008794
 | 
			
		||||
v -0.045765 -0.212018 0.008798
 | 
			
		||||
v 0.000000 -0.238285 0.008798
 | 
			
		||||
v -0.054590 -0.224245 0.012574
 | 
			
		||||
v 0.000000 -0.255577 0.012574
 | 
			
		||||
v -0.089582 -0.148609 0.000002
 | 
			
		||||
v -0.077200 -0.148609 -0.012569
 | 
			
		||||
v -0.064722 -0.148609 -0.008794
 | 
			
		||||
v -0.064722 -0.148609 0.008799
 | 
			
		||||
v -0.077200 -0.148609 0.012574
 | 
			
		||||
v -0.061672 -0.063837 0.000002
 | 
			
		||||
v -0.054590 -0.072971 -0.012569
 | 
			
		||||
v -0.045765 -0.085198 -0.008794
 | 
			
		||||
v -0.045765 -0.085198 0.008799
 | 
			
		||||
v -0.054590 -0.072971 0.012574
 | 
			
		||||
v 0.000000 -0.034967 0.000002
 | 
			
		||||
v 0.000000 -0.041641 -0.012569
 | 
			
		||||
v 0.000000 -0.058933 -0.008794
 | 
			
		||||
v 0.000000 -0.058933 0.008799
 | 
			
		||||
v 0.000000 -0.041641 0.012574
 | 
			
		||||
v 0.061672 -0.063837 0.000002
 | 
			
		||||
v 0.054590 -0.072971 -0.012569
 | 
			
		||||
v 0.045765 -0.085198 -0.008794
 | 
			
		||||
v 0.045765 -0.085198 0.008799
 | 
			
		||||
v 0.054590 -0.072971 0.012574
 | 
			
		||||
v 0.089582 -0.148609 0.000002
 | 
			
		||||
v 0.077200 -0.148609 -0.012569
 | 
			
		||||
v 0.064722 -0.148609 -0.008794
 | 
			
		||||
v 0.064722 -0.148609 0.008799
 | 
			
		||||
v 0.077200 -0.148609 0.012574
 | 
			
		||||
v 0.061672 -0.232631 0.000002
 | 
			
		||||
v 0.054590 -0.224245 -0.012569
 | 
			
		||||
v 0.045765 -0.212018 -0.008794
 | 
			
		||||
v 0.045765 -0.212018 0.008798
 | 
			
		||||
v 0.054590 -0.224245 0.012574
 | 
			
		||||
v 0.000000 0.073316 0.000002
 | 
			
		||||
v 0.061672 0.102183 0.000002
 | 
			
		||||
v 0.054590 0.111319 0.012574
 | 
			
		||||
v 0.000000 0.079988 0.012574
 | 
			
		||||
v 0.045765 0.123546 0.008799
 | 
			
		||||
v 0.000000 0.097280 0.008799
 | 
			
		||||
v 0.045765 0.123546 -0.008794
 | 
			
		||||
v 0.000000 0.097280 -0.008794
 | 
			
		||||
v 0.054590 0.111319 -0.012569
 | 
			
		||||
v 0.000000 0.079988 -0.012569
 | 
			
		||||
v 0.089582 0.186956 0.000002
 | 
			
		||||
v 0.077200 0.186956 0.012574
 | 
			
		||||
v 0.064722 0.186956 0.008799
 | 
			
		||||
v 0.064722 0.186956 -0.008794
 | 
			
		||||
v 0.077200 0.186956 -0.012569
 | 
			
		||||
v 0.061672 0.271728 0.000002
 | 
			
		||||
v 0.054590 0.262594 0.012574
 | 
			
		||||
v 0.045765 0.250367 0.008799
 | 
			
		||||
v 0.045765 0.250367 -0.008794
 | 
			
		||||
v 0.054590 0.262594 -0.012569
 | 
			
		||||
v 0.000000 0.300597 0.000002
 | 
			
		||||
v 0.000000 0.293923 0.012574
 | 
			
		||||
v 0.000000 0.276631 0.008799
 | 
			
		||||
v 0.000000 0.276631 -0.008794
 | 
			
		||||
v 0.000000 0.293923 -0.012569
 | 
			
		||||
v -0.061672 0.271728 0.000002
 | 
			
		||||
v -0.054590 0.262594 0.012574
 | 
			
		||||
v -0.045765 0.250367 0.008799
 | 
			
		||||
v -0.045765 0.250367 -0.008794
 | 
			
		||||
v -0.054590 0.262594 -0.012569
 | 
			
		||||
v -0.089582 0.186956 0.000002
 | 
			
		||||
v -0.077200 0.186956 0.012574
 | 
			
		||||
v -0.064722 0.186956 0.008799
 | 
			
		||||
v -0.064722 0.186956 -0.008794
 | 
			
		||||
v -0.077200 0.186956 -0.012569
 | 
			
		||||
v -0.061672 0.102931 0.000002
 | 
			
		||||
v -0.054590 0.111319 0.012574
 | 
			
		||||
v -0.045765 0.123546 0.008799
 | 
			
		||||
v -0.045765 0.123546 -0.008794
 | 
			
		||||
v -0.054590 0.111319 -0.012569
 | 
			
		||||
v 0.000000 -0.095037 0.000002
 | 
			
		||||
v 0.000000 -0.066168 -0.055206
 | 
			
		||||
v 0.014044 -0.057034 -0.048868
 | 
			
		||||
v 0.014044 -0.088363 0.000002
 | 
			
		||||
v 0.009826 -0.044807 -0.040967
 | 
			
		||||
v 0.009826 -0.071071 0.000002
 | 
			
		||||
v -0.009826 -0.044807 -0.040967
 | 
			
		||||
v -0.009826 -0.071071 0.000002
 | 
			
		||||
v -0.014044 -0.057034 -0.048868
 | 
			
		||||
v -0.014044 -0.088363 0.000002
 | 
			
		||||
v 0.000000 0.018605 -0.080190
 | 
			
		||||
v 0.014044 0.018605 -0.069108
 | 
			
		||||
v 0.009826 0.018605 -0.057936
 | 
			
		||||
v -0.009826 0.018605 -0.057936
 | 
			
		||||
v -0.014044 0.018605 -0.069108
 | 
			
		||||
v 0.000000 0.103377 -0.055206
 | 
			
		||||
v 0.014044 0.094243 -0.048868
 | 
			
		||||
v 0.009826 0.082016 -0.040967
 | 
			
		||||
v -0.009826 0.082016 -0.040967
 | 
			
		||||
v -0.014044 0.094243 -0.048868
 | 
			
		||||
v 0.000000 0.132246 0.000002
 | 
			
		||||
v 0.014044 0.125572 0.000002
 | 
			
		||||
v 0.009826 0.108280 0.000002
 | 
			
		||||
v -0.009826 0.108280 0.000002
 | 
			
		||||
v -0.014044 0.125572 0.000002
 | 
			
		||||
v 0.000000 0.103377 0.055211
 | 
			
		||||
v 0.014044 0.094243 0.048870
 | 
			
		||||
v 0.009826 0.082016 0.040970
 | 
			
		||||
v -0.009826 0.082016 0.040970
 | 
			
		||||
v -0.014044 0.094243 0.048870
 | 
			
		||||
v 0.000000 0.018605 0.080195
 | 
			
		||||
v 0.014044 0.018605 0.069112
 | 
			
		||||
v 0.009826 0.018605 0.057941
 | 
			
		||||
v -0.009826 0.018605 0.057941
 | 
			
		||||
v -0.014044 0.018605 0.069112
 | 
			
		||||
v 0.000000 -0.065420 0.055211
 | 
			
		||||
v 0.014044 -0.057032 0.048870
 | 
			
		||||
v 0.009826 -0.044807 0.040970
 | 
			
		||||
v -0.009826 -0.044807 0.040970
 | 
			
		||||
v -0.014044 -0.057032 0.048870
 | 
			
		||||
v 0.000000 -0.598329 0.000002
 | 
			
		||||
v 0.061672 -0.569460 0.000002
 | 
			
		||||
v 0.054590 -0.560326 0.012574
 | 
			
		||||
v 0.000000 -0.591655 0.012574
 | 
			
		||||
v 0.045765 -0.548099 0.008798
 | 
			
		||||
v 0.000000 -0.574363 0.008798
 | 
			
		||||
v 0.045765 -0.548099 -0.008794
 | 
			
		||||
v 0.000000 -0.574363 -0.008794
 | 
			
		||||
v 0.054590 -0.560326 -0.012569
 | 
			
		||||
v 0.000000 -0.591655 -0.012569
 | 
			
		||||
v 0.089582 -0.484687 0.000002
 | 
			
		||||
v 0.077200 -0.484687 0.012574
 | 
			
		||||
v 0.064722 -0.484687 0.008798
 | 
			
		||||
v 0.064722 -0.484687 -0.008794
 | 
			
		||||
v 0.077200 -0.484687 -0.012569
 | 
			
		||||
v 0.061672 -0.399915 0.000002
 | 
			
		||||
v 0.054590 -0.409051 0.012574
 | 
			
		||||
v 0.045765 -0.421278 0.008798
 | 
			
		||||
v 0.045765 -0.421278 -0.008794
 | 
			
		||||
v 0.054590 -0.409051 -0.012569
 | 
			
		||||
v 0.000000 -0.371048 0.000002
 | 
			
		||||
v 0.000000 -0.377719 0.012574
 | 
			
		||||
v 0.000000 -0.395012 0.008798
 | 
			
		||||
v 0.000000 -0.395012 -0.008794
 | 
			
		||||
v 0.000000 -0.377719 -0.012569
 | 
			
		||||
v -0.061672 -0.399915 0.000002
 | 
			
		||||
v -0.054590 -0.409051 0.012574
 | 
			
		||||
v -0.045765 -0.421278 0.008798
 | 
			
		||||
v -0.045765 -0.421278 -0.008794
 | 
			
		||||
v -0.054590 -0.409051 -0.012569
 | 
			
		||||
v -0.089582 -0.484687 0.000002
 | 
			
		||||
v -0.077200 -0.484687 0.012574
 | 
			
		||||
v -0.064722 -0.484687 0.008798
 | 
			
		||||
v -0.064722 -0.484687 -0.008794
 | 
			
		||||
v -0.077200 -0.484687 -0.012569
 | 
			
		||||
v -0.061672 -0.568712 0.000002
 | 
			
		||||
v -0.054590 -0.560326 0.012574
 | 
			
		||||
v -0.045765 -0.548099 0.008798
 | 
			
		||||
v -0.045765 -0.548099 -0.008794
 | 
			
		||||
v -0.054590 -0.560326 -0.012569
 | 
			
		||||
v 0.000000 0.241043 0.000002
 | 
			
		||||
v 0.000000 0.269910 0.055211
 | 
			
		||||
v -0.014044 0.279047 0.048870
 | 
			
		||||
v -0.014044 0.247717 0.000002
 | 
			
		||||
v -0.009826 0.291274 0.040970
 | 
			
		||||
v -0.009826 0.265007 0.000002
 | 
			
		||||
v 0.009826 0.291274 0.040970
 | 
			
		||||
v 0.009826 0.265007 0.000002
 | 
			
		||||
v 0.014044 0.279047 0.048870
 | 
			
		||||
v 0.014044 0.247717 0.000002
 | 
			
		||||
v 0.000000 0.354683 0.080195
 | 
			
		||||
v -0.014044 0.354683 0.069112
 | 
			
		||||
v -0.009826 0.354683 0.057941
 | 
			
		||||
v 0.009826 0.354683 0.057941
 | 
			
		||||
v 0.014044 0.354683 0.069112
 | 
			
		||||
v 0.000000 0.439455 0.055211
 | 
			
		||||
v -0.014044 0.430321 0.048870
 | 
			
		||||
v -0.009826 0.418094 0.040970
 | 
			
		||||
v 0.009826 0.418094 0.040970
 | 
			
		||||
v 0.014044 0.430321 0.048870
 | 
			
		||||
v 0.000000 0.468325 0.000002
 | 
			
		||||
v -0.014044 0.461651 0.000002
 | 
			
		||||
v -0.009826 0.444361 0.000002
 | 
			
		||||
v 0.009826 0.444361 0.000002
 | 
			
		||||
v 0.014044 0.461651 0.000002
 | 
			
		||||
v 0.000000 0.439455 -0.055206
 | 
			
		||||
v -0.014044 0.430321 -0.048868
 | 
			
		||||
v -0.009826 0.418094 -0.040967
 | 
			
		||||
v 0.009826 0.418094 -0.040967
 | 
			
		||||
v 0.014044 0.430321 -0.048868
 | 
			
		||||
v 0.000000 0.354683 -0.080190
 | 
			
		||||
v -0.014044 0.354683 -0.069108
 | 
			
		||||
v -0.009826 0.354683 -0.057936
 | 
			
		||||
v 0.009826 0.354683 -0.057936
 | 
			
		||||
v 0.014044 0.354683 -0.069108
 | 
			
		||||
v 0.000000 0.270661 -0.055206
 | 
			
		||||
v -0.014044 0.279047 -0.048868
 | 
			
		||||
v -0.009826 0.291274 -0.040967
 | 
			
		||||
v 0.009826 0.291274 -0.040967
 | 
			
		||||
v 0.014044 0.279047 -0.048868
 | 
			
		||||
vt 0.187500 0.125000
 | 
			
		||||
vt 0.250000 0.125000
 | 
			
		||||
vt 0.250000 0.187500
 | 
			
		||||
vt 0.187500 0.187500
 | 
			
		||||
vt 0.250000 0.250000
 | 
			
		||||
vt 0.187500 0.250000
 | 
			
		||||
vt 0.250000 0.312500
 | 
			
		||||
vt 0.187500 0.312500
 | 
			
		||||
vt 0.250000 0.375000
 | 
			
		||||
vt 0.187500 0.375000
 | 
			
		||||
vt 0.187500 0.062500
 | 
			
		||||
vt 0.250000 0.062500
 | 
			
		||||
vt 0.312500 0.125000
 | 
			
		||||
vt 0.312500 0.187500
 | 
			
		||||
vt 0.312500 0.250000
 | 
			
		||||
vt 0.312500 0.312500
 | 
			
		||||
vt 0.312500 0.375000
 | 
			
		||||
vt 0.312500 0.062500
 | 
			
		||||
vt 0.375000 0.125000
 | 
			
		||||
vt 0.375000 0.187500
 | 
			
		||||
vt 0.375000 0.250000
 | 
			
		||||
vt 0.375000 0.312500
 | 
			
		||||
vt 0.375000 0.375000
 | 
			
		||||
vt 0.375000 0.062500
 | 
			
		||||
vt 0.437500 0.125000
 | 
			
		||||
vt 0.437500 0.187500
 | 
			
		||||
vt 0.437500 0.250000
 | 
			
		||||
vt 0.437500 0.312500
 | 
			
		||||
vt 0.437500 0.375000
 | 
			
		||||
vt 0.437500 0.062500
 | 
			
		||||
vt 0.500000 0.125000
 | 
			
		||||
vt 0.500000 0.187500
 | 
			
		||||
vt 0.500000 0.250000
 | 
			
		||||
vt 0.500000 0.312500
 | 
			
		||||
vt 0.500000 0.375000
 | 
			
		||||
vt 0.500000 0.062500
 | 
			
		||||
vt -0.000000 0.125000
 | 
			
		||||
vt 0.062500 0.125000
 | 
			
		||||
vt 0.062500 0.187500
 | 
			
		||||
vt -0.000000 0.187500
 | 
			
		||||
vt 0.062500 0.250000
 | 
			
		||||
vt -0.000000 0.250000
 | 
			
		||||
vt 0.062500 0.312500
 | 
			
		||||
vt -0.000000 0.312500
 | 
			
		||||
vt 0.062500 0.375000
 | 
			
		||||
vt -0.000000 0.375000
 | 
			
		||||
vt -0.000000 0.062500
 | 
			
		||||
vt 0.062500 0.062500
 | 
			
		||||
vt 0.125000 0.125000
 | 
			
		||||
vt 0.125000 0.187500
 | 
			
		||||
vt 0.125000 0.250000
 | 
			
		||||
vt 0.125000 0.312500
 | 
			
		||||
vt 0.125000 0.375000
 | 
			
		||||
vt 0.125000 0.062500
 | 
			
		||||
vt 0.750000 0.625000
 | 
			
		||||
vt 0.812500 0.625000
 | 
			
		||||
vt 0.812500 0.687500
 | 
			
		||||
vt 0.750000 0.687500
 | 
			
		||||
vt 0.750000 0.375000
 | 
			
		||||
vt 0.812500 0.375000
 | 
			
		||||
vt 0.812500 0.437500
 | 
			
		||||
vt 0.750000 0.437500
 | 
			
		||||
vt 0.812500 0.500000
 | 
			
		||||
vt 0.750000 0.500000
 | 
			
		||||
vt 0.812500 0.562500
 | 
			
		||||
vt 0.750000 0.562500
 | 
			
		||||
vt 0.875000 0.625000
 | 
			
		||||
vt 0.875000 0.687500
 | 
			
		||||
vt 0.875000 0.375000
 | 
			
		||||
vt 0.875000 0.437500
 | 
			
		||||
vt 0.875000 0.500000
 | 
			
		||||
vt 0.875000 0.562500
 | 
			
		||||
vt 0.937500 0.625000
 | 
			
		||||
vt 0.937500 0.687500
 | 
			
		||||
vt 0.937500 0.375000
 | 
			
		||||
vt 0.937500 0.437500
 | 
			
		||||
vt 0.937500 0.500000
 | 
			
		||||
vt 0.937500 0.562500
 | 
			
		||||
vt 1.000000 0.625000
 | 
			
		||||
vt 1.000000 0.687500
 | 
			
		||||
vt 1.000000 0.375000
 | 
			
		||||
vt 1.000000 0.437500
 | 
			
		||||
vt 1.000000 0.500000
 | 
			
		||||
vt 1.000000 0.562500
 | 
			
		||||
vt 0.500000 0.625000
 | 
			
		||||
vt 0.562500 0.625000
 | 
			
		||||
vt 0.562500 0.687500
 | 
			
		||||
vt 0.500000 0.687500
 | 
			
		||||
vt 0.562500 0.375000
 | 
			
		||||
vt 0.562500 0.437500
 | 
			
		||||
vt 0.500000 0.437500
 | 
			
		||||
vt 0.562500 0.500000
 | 
			
		||||
vt 0.500000 0.500000
 | 
			
		||||
vt 0.562500 0.562500
 | 
			
		||||
vt 0.500000 0.562500
 | 
			
		||||
vt 0.625000 0.625000
 | 
			
		||||
vt 0.625000 0.687500
 | 
			
		||||
vt 0.625000 0.375000
 | 
			
		||||
vt 0.625000 0.437500
 | 
			
		||||
vt 0.625000 0.500000
 | 
			
		||||
vt 0.625000 0.562500
 | 
			
		||||
vt 0.687500 0.625000
 | 
			
		||||
vt 0.687500 0.687500
 | 
			
		||||
vt 0.687500 0.375000
 | 
			
		||||
vt 0.687500 0.437500
 | 
			
		||||
vt 0.687500 0.500000
 | 
			
		||||
vt 0.687500 0.562500
 | 
			
		||||
vt 0.250000 0.625000
 | 
			
		||||
vt 0.312500 0.625000
 | 
			
		||||
vt 0.312500 0.687500
 | 
			
		||||
vt 0.250000 0.687500
 | 
			
		||||
vt 0.312500 0.437500
 | 
			
		||||
vt 0.250000 0.437500
 | 
			
		||||
vt 0.312500 0.500000
 | 
			
		||||
vt 0.250000 0.500000
 | 
			
		||||
vt 0.312500 0.562500
 | 
			
		||||
vt 0.250000 0.562500
 | 
			
		||||
vt 0.375000 0.625000
 | 
			
		||||
vt 0.375000 0.687500
 | 
			
		||||
vt 0.375000 0.437500
 | 
			
		||||
vt 0.375000 0.500000
 | 
			
		||||
vt 0.375000 0.562500
 | 
			
		||||
vt 0.437500 0.625000
 | 
			
		||||
vt 0.437500 0.687500
 | 
			
		||||
vt 0.437500 0.437500
 | 
			
		||||
vt 0.437500 0.500000
 | 
			
		||||
vt 0.437500 0.562500
 | 
			
		||||
vt -0.000000 0.625000
 | 
			
		||||
vt 0.062500 0.625000
 | 
			
		||||
vt 0.062500 0.687500
 | 
			
		||||
vt -0.000000 0.687500
 | 
			
		||||
vt 0.062500 0.437500
 | 
			
		||||
vt -0.000000 0.437500
 | 
			
		||||
vt 0.062500 0.500000
 | 
			
		||||
vt -0.000000 0.500000
 | 
			
		||||
vt 0.062500 0.562500
 | 
			
		||||
vt -0.000000 0.562500
 | 
			
		||||
vt 0.125000 0.625000
 | 
			
		||||
vt 0.125000 0.687500
 | 
			
		||||
vt 0.125000 0.437500
 | 
			
		||||
vt 0.125000 0.500000
 | 
			
		||||
vt 0.125000 0.562500
 | 
			
		||||
vt 0.187500 0.625000
 | 
			
		||||
vt 0.187500 0.687500
 | 
			
		||||
vt 0.187500 0.437500
 | 
			
		||||
vt 0.187500 0.500000
 | 
			
		||||
vt 0.187500 0.562500
 | 
			
		||||
vt 0.687500 0.750000
 | 
			
		||||
vt 0.750000 0.750000
 | 
			
		||||
vt 0.750000 0.812500
 | 
			
		||||
vt 0.687500 0.812500
 | 
			
		||||
vt 0.750000 0.875000
 | 
			
		||||
vt 0.687500 0.875000
 | 
			
		||||
vt 0.750000 0.937500
 | 
			
		||||
vt 0.687500 0.937500
 | 
			
		||||
vt 0.750000 1.000000
 | 
			
		||||
vt 0.687500 1.000000
 | 
			
		||||
vt 0.812500 0.750000
 | 
			
		||||
vt 0.812500 0.812500
 | 
			
		||||
vt 0.812500 0.875000
 | 
			
		||||
vt 0.812500 0.937500
 | 
			
		||||
vt 0.812500 1.000000
 | 
			
		||||
vt 0.875000 0.750000
 | 
			
		||||
vt 0.875000 0.812500
 | 
			
		||||
vt 0.875000 0.875000
 | 
			
		||||
vt 0.875000 0.937500
 | 
			
		||||
vt 0.875000 1.000000
 | 
			
		||||
vt 0.937500 0.750000
 | 
			
		||||
vt 0.937500 0.812500
 | 
			
		||||
vt 0.937500 0.875000
 | 
			
		||||
vt 0.937500 0.937500
 | 
			
		||||
vt 0.937500 1.000000
 | 
			
		||||
vt 1.000000 0.750000
 | 
			
		||||
vt 1.000000 0.812500
 | 
			
		||||
vt 1.000000 0.875000
 | 
			
		||||
vt 1.000000 0.937500
 | 
			
		||||
vt 1.000000 1.000000
 | 
			
		||||
vt 0.500000 0.750000
 | 
			
		||||
vt 0.562500 0.750000
 | 
			
		||||
vt 0.562500 0.812500
 | 
			
		||||
vt 0.500000 0.812500
 | 
			
		||||
vt 0.562500 0.875000
 | 
			
		||||
vt 0.500000 0.875000
 | 
			
		||||
vt 0.562500 0.937500
 | 
			
		||||
vt 0.500000 0.937500
 | 
			
		||||
vt 0.562500 1.000000
 | 
			
		||||
vt 0.500000 1.000000
 | 
			
		||||
vt 0.625000 0.750000
 | 
			
		||||
vt 0.625000 0.812500
 | 
			
		||||
vt 0.625000 0.875000
 | 
			
		||||
vt 0.625000 0.937500
 | 
			
		||||
vt 0.625000 1.000000
 | 
			
		||||
vt 0.750000 0.312500
 | 
			
		||||
vt 0.812500 0.312500
 | 
			
		||||
vt 0.750000 0.062500
 | 
			
		||||
vt 0.812500 0.062500
 | 
			
		||||
vt 0.812500 0.125000
 | 
			
		||||
vt 0.750000 0.125000
 | 
			
		||||
vt 0.812500 0.187500
 | 
			
		||||
vt 0.750000 0.187500
 | 
			
		||||
vt 0.812500 0.250000
 | 
			
		||||
vt 0.750000 0.250000
 | 
			
		||||
vt 0.875000 0.312500
 | 
			
		||||
vt 0.875000 0.062500
 | 
			
		||||
vt 0.875000 0.125000
 | 
			
		||||
vt 0.875000 0.187500
 | 
			
		||||
vt 0.875000 0.250000
 | 
			
		||||
vt 0.937500 0.312500
 | 
			
		||||
vt 0.937500 0.062500
 | 
			
		||||
vt 0.937500 0.125000
 | 
			
		||||
vt 0.937500 0.187500
 | 
			
		||||
vt 0.937500 0.250000
 | 
			
		||||
vt 1.000000 0.312500
 | 
			
		||||
vt 1.000000 0.062500
 | 
			
		||||
vt 1.000000 0.125000
 | 
			
		||||
vt 1.000000 0.187500
 | 
			
		||||
vt 1.000000 0.250000
 | 
			
		||||
vt 0.562500 0.312500
 | 
			
		||||
vt 0.562500 0.062500
 | 
			
		||||
vt 0.562500 0.125000
 | 
			
		||||
vt 0.562500 0.187500
 | 
			
		||||
vt 0.562500 0.250000
 | 
			
		||||
vt 0.625000 0.312500
 | 
			
		||||
vt 0.625000 0.062500
 | 
			
		||||
vt 0.625000 0.125000
 | 
			
		||||
vt 0.625000 0.187500
 | 
			
		||||
vt 0.625000 0.250000
 | 
			
		||||
vt 0.687500 0.312500
 | 
			
		||||
vt 0.687500 0.062500
 | 
			
		||||
vt 0.687500 0.125000
 | 
			
		||||
vt 0.687500 0.187500
 | 
			
		||||
vt 0.687500 0.250000
 | 
			
		||||
vt 0.250000 0.937500
 | 
			
		||||
vt 0.312500 0.937500
 | 
			
		||||
vt 0.312500 1.000000
 | 
			
		||||
vt 0.250000 1.000000
 | 
			
		||||
vt 0.312500 0.750000
 | 
			
		||||
vt 0.250000 0.750000
 | 
			
		||||
vt 0.312500 0.812500
 | 
			
		||||
vt 0.250000 0.812500
 | 
			
		||||
vt 0.312500 0.875000
 | 
			
		||||
vt 0.250000 0.875000
 | 
			
		||||
vt 0.375000 0.937500
 | 
			
		||||
vt 0.375000 1.000000
 | 
			
		||||
vt 0.375000 0.750000
 | 
			
		||||
vt 0.375000 0.812500
 | 
			
		||||
vt 0.375000 0.875000
 | 
			
		||||
vt 0.437500 0.937500
 | 
			
		||||
vt 0.437500 1.000000
 | 
			
		||||
vt 0.437500 0.750000
 | 
			
		||||
vt 0.437500 0.812500
 | 
			
		||||
vt 0.437500 0.875000
 | 
			
		||||
vt 0.000000 0.937500
 | 
			
		||||
vt 0.062500 0.937500
 | 
			
		||||
vt 0.062500 1.000000
 | 
			
		||||
vt 0.000000 1.000000
 | 
			
		||||
vt 0.062500 0.750000
 | 
			
		||||
vt 0.000000 0.750000
 | 
			
		||||
vt 0.062500 0.812500
 | 
			
		||||
vt 0.000000 0.812500
 | 
			
		||||
vt 0.062500 0.875000
 | 
			
		||||
vt 0.000000 0.875000
 | 
			
		||||
vt 0.125000 0.937500
 | 
			
		||||
vt 0.125000 1.000000
 | 
			
		||||
vt 0.125000 0.750000
 | 
			
		||||
vt 0.125000 0.812500
 | 
			
		||||
vt 0.125000 0.875000
 | 
			
		||||
vt 0.187500 0.937500
 | 
			
		||||
vt 0.187500 1.000000
 | 
			
		||||
vt 0.187500 0.750000
 | 
			
		||||
vt 0.187500 0.812500
 | 
			
		||||
vt 0.187500 0.875000
 | 
			
		||||
vn 0.000000 -1.000000 -0.004800
 | 
			
		||||
vn 0.000000 -0.657400 0.753500
 | 
			
		||||
vn -0.898300 -0.248500 0.362300
 | 
			
		||||
vn -0.863600 -0.504100 -0.003400
 | 
			
		||||
vn -0.661500 0.421500 -0.620200
 | 
			
		||||
vn -0.746000 0.665900 0.000000
 | 
			
		||||
vn 0.661500 0.421500 -0.620200
 | 
			
		||||
vn 0.746000 0.665900 0.000000
 | 
			
		||||
vn 0.898300 -0.248500 0.362300
 | 
			
		||||
vn 0.863600 -0.504100 -0.003400
 | 
			
		||||
vn 0.000000 0.000000 1.000000
 | 
			
		||||
vn -0.925200 0.000000 0.379500
 | 
			
		||||
vn -0.617100 0.000000 -0.786900
 | 
			
		||||
vn 0.617100 0.000000 -0.786900
 | 
			
		||||
vn 0.925200 0.000000 0.379500
 | 
			
		||||
vn 0.000000 0.657400 0.753500
 | 
			
		||||
vn -0.898300 0.248400 0.362300
 | 
			
		||||
vn -0.661500 -0.421500 -0.620200
 | 
			
		||||
vn 0.661500 -0.421500 -0.620200
 | 
			
		||||
vn 0.898300 0.248400 0.362300
 | 
			
		||||
vn 0.000000 1.000000 0.000000
 | 
			
		||||
vn -0.866100 0.499800 0.000000
 | 
			
		||||
vn -0.746000 -0.665900 0.000000
 | 
			
		||||
vn 0.746000 -0.665900 0.000000
 | 
			
		||||
vn 0.866100 0.499800 0.000000
 | 
			
		||||
vn 0.000000 0.657400 -0.753500
 | 
			
		||||
vn -0.898300 0.248400 -0.362400
 | 
			
		||||
vn -0.661600 -0.421500 0.620200
 | 
			
		||||
vn 0.661500 -0.421500 0.620200
 | 
			
		||||
vn 0.898300 0.248400 -0.362300
 | 
			
		||||
vn 0.000000 -0.000900 -1.000000
 | 
			
		||||
vn -0.924600 -0.000600 -0.380700
 | 
			
		||||
vn -0.617100 0.000000 0.786900
 | 
			
		||||
vn 0.617100 0.000000 0.786900
 | 
			
		||||
vn 0.924700 -0.000600 -0.380700
 | 
			
		||||
vn 0.000000 -0.650300 -0.759600
 | 
			
		||||
vn -0.895600 -0.254600 -0.364800
 | 
			
		||||
vn -0.661600 0.421500 0.620200
 | 
			
		||||
vn 0.661600 0.421500 0.620200
 | 
			
		||||
vn 0.895600 -0.254600 -0.364800
 | 
			
		||||
vn 0.004900 -1.000000 0.000000
 | 
			
		||||
vn -0.729700 -0.683800 0.000000
 | 
			
		||||
vn -0.324500 -0.256300 -0.910500
 | 
			
		||||
vn 0.003300 -0.475500 -0.879700
 | 
			
		||||
vn 0.578700 0.436200 -0.689100
 | 
			
		||||
vn 0.000000 0.666600 -0.745400
 | 
			
		||||
vn 0.578700 0.436200 0.689100
 | 
			
		||||
vn 0.000000 0.666600 0.745400
 | 
			
		||||
vn -0.324500 -0.256300 0.910500
 | 
			
		||||
vn 0.003300 -0.475500 0.879700
 | 
			
		||||
vn -1.000000 0.000000 0.000000
 | 
			
		||||
vn -0.359600 0.000000 -0.933100
 | 
			
		||||
vn 0.756400 0.000000 -0.654100
 | 
			
		||||
vn 0.756400 0.000000 0.654100
 | 
			
		||||
vn -0.359600 0.000000 0.933100
 | 
			
		||||
vn -0.729700 0.683700 0.000000
 | 
			
		||||
vn -0.324500 0.256300 -0.910500
 | 
			
		||||
vn 0.578700 -0.436200 -0.689100
 | 
			
		||||
vn 0.578700 -0.436200 0.689100
 | 
			
		||||
vn -0.324500 0.256300 0.910500
 | 
			
		||||
vn 0.000000 0.470900 -0.882200
 | 
			
		||||
vn 0.000000 -0.666600 -0.745400
 | 
			
		||||
vn 0.000000 -0.666600 0.745400
 | 
			
		||||
vn 0.000000 0.470900 0.882200
 | 
			
		||||
vn 0.729700 0.683700 0.000000
 | 
			
		||||
vn 0.324500 0.256300 -0.910500
 | 
			
		||||
vn -0.578700 -0.436200 -0.689100
 | 
			
		||||
vn -0.578700 -0.436200 0.689100
 | 
			
		||||
vn 0.324500 0.256300 0.910500
 | 
			
		||||
vn 1.000000 -0.001100 0.000000
 | 
			
		||||
vn 0.361000 -0.000700 -0.932600
 | 
			
		||||
vn -0.756400 0.000000 -0.654100
 | 
			
		||||
vn -0.756400 0.000000 0.654100
 | 
			
		||||
vn 0.361000 -0.000700 0.932600
 | 
			
		||||
vn 0.736100 -0.676800 0.000000
 | 
			
		||||
vn 0.327100 -0.263100 -0.907600
 | 
			
		||||
vn -0.578700 0.436200 -0.689100
 | 
			
		||||
vn -0.578700 0.436200 0.689100
 | 
			
		||||
vn 0.327100 -0.263100 0.907600
 | 
			
		||||
vn -0.004900 -1.000000 0.000000
 | 
			
		||||
vn 0.729700 -0.683800 0.000000
 | 
			
		||||
vn 0.324500 -0.256300 0.910500
 | 
			
		||||
vn -0.003300 -0.475400 0.879700
 | 
			
		||||
vn 0.324500 -0.256300 -0.910500
 | 
			
		||||
vn -0.003300 -0.475400 -0.879700
 | 
			
		||||
vn 1.000000 0.000000 0.000000
 | 
			
		||||
vn 0.359600 0.000000 0.933100
 | 
			
		||||
vn 0.359600 0.000000 -0.933100
 | 
			
		||||
vn -1.000000 -0.001100 0.000000
 | 
			
		||||
vn -0.361000 -0.000700 0.932600
 | 
			
		||||
vn -0.361000 -0.000700 -0.932600
 | 
			
		||||
vn -0.736100 -0.676800 0.000000
 | 
			
		||||
vn -0.327100 -0.263100 0.907600
 | 
			
		||||
vn -0.327100 -0.263100 -0.907600
 | 
			
		||||
vn 0.000000 -1.000000 0.004800
 | 
			
		||||
vn 0.000000 -0.657400 -0.753500
 | 
			
		||||
vn 0.898300 -0.248500 -0.362400
 | 
			
		||||
vn 0.863600 -0.504100 0.003400
 | 
			
		||||
vn -0.898300 -0.248500 -0.362400
 | 
			
		||||
vn -0.863600 -0.504100 0.003400
 | 
			
		||||
vn 0.000000 0.000000 -1.000000
 | 
			
		||||
vn 0.925200 0.000000 -0.379500
 | 
			
		||||
vn -0.925200 0.000000 -0.379500
 | 
			
		||||
vn 0.898300 0.248500 -0.362400
 | 
			
		||||
vn 0.661600 -0.421500 0.620200
 | 
			
		||||
vn -0.898300 0.248500 -0.362400
 | 
			
		||||
vn 0.898300 0.248500 0.362300
 | 
			
		||||
vn -0.898300 0.248500 0.362300
 | 
			
		||||
vn 0.000000 -0.000900 1.000000
 | 
			
		||||
vn 0.924700 -0.000600 0.380700
 | 
			
		||||
vn -0.924700 -0.000600 0.380700
 | 
			
		||||
vn 0.000000 -0.650300 0.759600
 | 
			
		||||
vn 0.895600 -0.254600 0.364700
 | 
			
		||||
vn -0.895600 -0.254600 0.364700
 | 
			
		||||
vn 0.729700 -0.683700 0.000000
 | 
			
		||||
vn 0.729700 0.683800 0.000000
 | 
			
		||||
vn -0.729700 0.683800 0.000000
 | 
			
		||||
vn -0.898300 -0.248400 0.362300
 | 
			
		||||
vn -0.863600 -0.504100 -0.003500
 | 
			
		||||
vn 0.898300 -0.248400 0.362300
 | 
			
		||||
vn 0.863600 -0.504100 -0.003500
 | 
			
		||||
vn -0.661500 -0.421500 0.620200
 | 
			
		||||
vn 0.924600 -0.000600 -0.380700
 | 
			
		||||
vn -0.661500 0.421500 0.620200
 | 
			
		||||
vn 0.661500 0.421500 0.620200
 | 
			
		||||
s 1
 | 
			
		||||
f 1/1/1 2/2/2 3/3/3 4/4/4
 | 
			
		||||
f 4/4/4 3/3/3 5/5/5 6/6/6
 | 
			
		||||
f 6/6/6 5/5/5 7/7/7 8/8/8
 | 
			
		||||
f 8/8/8 7/7/7 9/9/9 10/10/10
 | 
			
		||||
f 1/1/1 10/11/10 9/12/9 2/2/2
 | 
			
		||||
f 2/2/2 11/13/11 12/14/12 3/3/3
 | 
			
		||||
f 3/3/3 12/14/12 13/15/13 5/5/5
 | 
			
		||||
f 5/5/5 13/15/13 14/16/14 7/7/7
 | 
			
		||||
f 7/7/7 14/16/14 15/17/15 9/9/9
 | 
			
		||||
f 9/12/9 15/18/15 11/13/11 2/2/2
 | 
			
		||||
f 11/13/11 16/19/16 17/20/17 12/14/12
 | 
			
		||||
f 12/14/12 17/20/17 18/21/18 13/15/13
 | 
			
		||||
f 13/15/13 18/21/18 19/22/19 14/16/14
 | 
			
		||||
f 14/16/14 19/22/19 20/23/20 15/17/15
 | 
			
		||||
f 15/18/15 20/24/20 16/19/16 11/13/11
 | 
			
		||||
f 16/19/16 21/25/21 22/26/22 17/20/17
 | 
			
		||||
f 17/20/17 22/26/22 23/27/23 18/21/18
 | 
			
		||||
f 18/21/18 23/27/23 24/28/24 19/22/19
 | 
			
		||||
f 19/22/19 24/28/24 25/29/25 20/23/20
 | 
			
		||||
f 20/24/20 25/30/25 21/25/21 16/19/16
 | 
			
		||||
f 21/25/21 26/31/26 27/32/27 22/26/22
 | 
			
		||||
f 22/26/22 27/32/27 28/33/28 23/27/23
 | 
			
		||||
f 23/27/23 28/33/28 29/34/29 24/28/24
 | 
			
		||||
f 24/28/24 29/34/29 30/35/30 25/29/25
 | 
			
		||||
f 25/30/25 30/36/30 26/31/26 21/25/21
 | 
			
		||||
f 26/37/26 31/38/31 32/39/32 27/40/27
 | 
			
		||||
f 27/40/27 32/39/32 33/41/33 28/42/28
 | 
			
		||||
f 28/42/28 33/41/33 34/43/34 29/44/29
 | 
			
		||||
f 29/44/29 34/43/34 35/45/35 30/46/30
 | 
			
		||||
f 30/47/30 35/48/35 31/38/31 26/37/26
 | 
			
		||||
f 31/38/31 36/49/36 37/50/37 32/39/32
 | 
			
		||||
f 32/39/32 37/50/37 38/51/38 33/41/33
 | 
			
		||||
f 33/41/33 38/51/38 39/52/39 34/43/34
 | 
			
		||||
f 34/43/34 39/52/39 40/53/40 35/45/35
 | 
			
		||||
f 35/48/35 40/54/40 36/49/36 31/38/31
 | 
			
		||||
f 36/49/36 1/1/1 4/4/4 37/50/37
 | 
			
		||||
f 37/50/37 4/4/4 6/6/6 38/51/38
 | 
			
		||||
f 38/51/38 6/6/6 8/8/8 39/52/39
 | 
			
		||||
f 39/52/39 8/8/8 10/10/10 40/53/40
 | 
			
		||||
f 1/1/1 36/49/36 40/54/40 10/11/10
 | 
			
		||||
f 41/55/41 42/56/42 43/57/43 44/58/44
 | 
			
		||||
f 44/59/44 43/60/43 45/61/45 46/62/46
 | 
			
		||||
f 46/62/46 45/61/45 47/63/47 48/64/48
 | 
			
		||||
f 48/64/48 47/63/47 49/65/49 50/66/50
 | 
			
		||||
f 41/55/41 50/66/50 49/65/49 42/56/42
 | 
			
		||||
f 42/56/42 51/67/51 52/68/52 43/57/43
 | 
			
		||||
f 43/60/43 52/69/52 53/70/53 45/61/45
 | 
			
		||||
f 45/61/45 53/70/53 54/71/54 47/63/47
 | 
			
		||||
f 47/63/47 54/71/54 55/72/55 49/65/49
 | 
			
		||||
f 49/65/49 55/72/55 51/67/51 42/56/42
 | 
			
		||||
f 51/67/51 56/73/56 57/74/57 52/68/52
 | 
			
		||||
f 52/69/52 57/75/57 58/76/58 53/70/53
 | 
			
		||||
f 53/70/53 58/76/58 59/77/59 54/71/54
 | 
			
		||||
f 54/71/54 59/77/59 60/78/60 55/72/55
 | 
			
		||||
f 55/72/55 60/78/60 56/73/56 51/67/51
 | 
			
		||||
f 56/73/56 61/79/21 62/80/61 57/74/57
 | 
			
		||||
f 57/75/57 62/81/61 63/82/62 58/76/58
 | 
			
		||||
f 58/76/58 63/82/62 64/83/63 59/77/59
 | 
			
		||||
f 59/77/59 64/83/63 65/84/64 60/78/60
 | 
			
		||||
f 60/78/60 65/84/64 61/79/21 56/73/56
 | 
			
		||||
f 61/85/21 66/86/65 67/87/66 62/88/61
 | 
			
		||||
f 62/35/61 67/89/66 68/90/67 63/91/62
 | 
			
		||||
f 63/91/62 68/90/67 69/92/68 64/93/63
 | 
			
		||||
f 64/93/63 69/92/68 70/94/69 65/95/64
 | 
			
		||||
f 65/95/64 70/94/69 66/86/65 61/85/21
 | 
			
		||||
f 66/86/65 71/96/70 72/97/71 67/87/66
 | 
			
		||||
f 67/89/66 72/98/71 73/99/72 68/90/67
 | 
			
		||||
f 68/90/67 73/99/72 74/100/73 69/92/68
 | 
			
		||||
f 69/92/68 74/100/73 75/101/74 70/94/69
 | 
			
		||||
f 70/94/69 75/101/74 71/96/70 66/86/65
 | 
			
		||||
f 71/96/70 76/102/75 77/103/76 72/97/71
 | 
			
		||||
f 72/98/71 77/104/76 78/105/77 73/99/72
 | 
			
		||||
f 73/99/72 78/105/77 79/106/78 74/100/73
 | 
			
		||||
f 74/100/73 79/106/78 80/107/79 75/101/74
 | 
			
		||||
f 75/101/74 80/107/79 76/102/75 71/96/70
 | 
			
		||||
f 76/102/75 41/55/41 44/58/44 77/103/76
 | 
			
		||||
f 77/104/76 44/59/44 46/62/46 78/105/77
 | 
			
		||||
f 78/105/77 46/62/46 48/64/48 79/106/78
 | 
			
		||||
f 79/106/78 48/64/48 50/66/50 80/107/79
 | 
			
		||||
f 41/55/41 76/102/75 80/107/79 50/66/50
 | 
			
		||||
f 81/108/80 82/109/81 83/110/82 84/111/83
 | 
			
		||||
f 84/9/83 83/17/82 85/112/78 86/113/48
 | 
			
		||||
f 86/113/48 85/112/78 87/114/77 88/115/46
 | 
			
		||||
f 88/115/46 87/114/77 89/116/84 90/117/85
 | 
			
		||||
f 81/108/80 90/117/85 89/116/84 82/109/81
 | 
			
		||||
f 82/109/81 91/118/86 92/119/87 83/110/82
 | 
			
		||||
f 83/17/82 92/23/87 93/120/73 85/112/78
 | 
			
		||||
f 85/112/78 93/120/73 94/121/72 87/114/77
 | 
			
		||||
f 87/114/77 94/121/72 95/122/88 89/116/84
 | 
			
		||||
f 89/116/84 95/122/88 91/118/86 82/109/81
 | 
			
		||||
f 91/118/86 96/123/65 97/124/69 92/119/87
 | 
			
		||||
f 92/23/87 97/29/69 98/125/68 93/120/73
 | 
			
		||||
f 93/120/73 98/125/68 99/126/67 94/121/72
 | 
			
		||||
f 94/121/72 99/126/67 100/127/66 95/122/88
 | 
			
		||||
f 95/122/88 100/127/66 96/123/65 91/118/86
 | 
			
		||||
f 96/123/65 101/85/21 102/88/64 97/124/69
 | 
			
		||||
f 97/29/69 102/35/64 103/91/63 98/125/68
 | 
			
		||||
f 98/125/68 103/91/63 104/93/62 99/126/67
 | 
			
		||||
f 99/126/67 104/93/62 105/95/61 100/127/66
 | 
			
		||||
f 100/127/66 105/95/61 101/85/21 96/123/65
 | 
			
		||||
f 101/128/21 106/129/56 107/130/60 102/131/64
 | 
			
		||||
f 102/46/64 107/45/60 108/132/59 103/133/63
 | 
			
		||||
f 103/133/63 108/132/59 109/134/58 104/135/62
 | 
			
		||||
f 104/135/62 109/134/58 110/136/57 105/137/61
 | 
			
		||||
f 105/137/61 110/136/57 106/129/56 101/128/21
 | 
			
		||||
f 106/129/56 111/138/89 112/139/90 107/130/60
 | 
			
		||||
f 107/45/60 112/53/90 113/140/54 108/132/59
 | 
			
		||||
f 108/132/59 113/140/54 114/141/53 109/134/58
 | 
			
		||||
f 109/134/58 114/141/53 115/142/91 110/136/57
 | 
			
		||||
f 110/136/57 115/142/91 111/138/89 106/129/56
 | 
			
		||||
f 111/138/89 116/143/92 117/144/93 112/139/90
 | 
			
		||||
f 112/53/90 117/10/93 118/145/47 113/140/54
 | 
			
		||||
f 113/140/54 118/145/47 119/146/45 114/141/53
 | 
			
		||||
f 114/141/53 119/146/45 120/147/94 115/142/91
 | 
			
		||||
f 115/142/91 120/147/94 116/143/92 111/138/89
 | 
			
		||||
f 116/143/92 81/108/80 84/111/83 117/144/93
 | 
			
		||||
f 117/10/93 84/9/83 86/113/48 118/145/47
 | 
			
		||||
f 118/145/47 86/113/48 88/115/46 119/146/45
 | 
			
		||||
f 119/146/45 88/115/46 90/117/85 120/147/94
 | 
			
		||||
f 81/108/80 116/143/92 120/147/94 90/117/85
 | 
			
		||||
f 121/148/95 122/149/96 123/150/97 124/151/98
 | 
			
		||||
f 124/151/98 123/150/97 125/152/39 126/153/8
 | 
			
		||||
f 126/153/8 125/152/39 127/154/38 128/155/6
 | 
			
		||||
f 128/155/6 127/154/38 129/156/99 130/157/100
 | 
			
		||||
f 121/148/95 130/103/100 129/58/99 122/149/96
 | 
			
		||||
f 122/149/96 131/158/101 132/159/102 123/150/97
 | 
			
		||||
f 123/150/97 132/159/102 133/160/34 125/152/39
 | 
			
		||||
f 125/152/39 133/160/34 134/161/33 127/154/38
 | 
			
		||||
f 127/154/38 134/161/33 135/162/103 129/156/99
 | 
			
		||||
f 129/58/99 135/57/103 131/158/101 122/149/96
 | 
			
		||||
f 131/158/101 136/163/26 137/164/104 132/159/102
 | 
			
		||||
f 132/159/102 137/164/104 138/165/105 133/160/34
 | 
			
		||||
f 133/160/34 138/165/105 139/166/28 134/161/33
 | 
			
		||||
f 134/161/33 139/166/28 140/167/106 135/162/103
 | 
			
		||||
f 135/57/103 140/68/106 136/163/26 131/158/101
 | 
			
		||||
f 136/163/26 141/168/21 142/169/25 137/164/104
 | 
			
		||||
f 137/164/104 142/169/25 143/170/24 138/165/105
 | 
			
		||||
f 138/165/105 143/170/24 144/171/23 139/166/28
 | 
			
		||||
f 139/166/28 144/171/23 145/172/22 140/167/106
 | 
			
		||||
f 140/68/106 145/74/22 141/168/21 136/163/26
 | 
			
		||||
f 141/168/21 146/173/16 147/174/107 142/169/25
 | 
			
		||||
f 142/169/25 147/174/107 148/175/19 143/170/24
 | 
			
		||||
f 143/170/24 148/175/19 149/176/18 144/171/23
 | 
			
		||||
f 144/171/23 149/176/18 150/177/108 145/172/22
 | 
			
		||||
f 145/74/22 150/80/108 146/173/16 141/168/21
 | 
			
		||||
f 146/178/16 151/179/109 152/180/110 147/181/107
 | 
			
		||||
f 147/181/107 152/180/110 153/182/14 148/183/19
 | 
			
		||||
f 148/183/19 153/182/14 154/184/13 149/185/18
 | 
			
		||||
f 149/185/18 154/184/13 155/186/111 150/187/108
 | 
			
		||||
f 150/88/108 155/87/111 151/179/109 146/178/16
 | 
			
		||||
f 151/179/109 156/188/112 157/189/113 152/180/110
 | 
			
		||||
f 152/180/110 157/189/113 158/190/7 153/182/14
 | 
			
		||||
f 153/182/14 158/190/7 159/191/5 154/184/13
 | 
			
		||||
f 154/184/13 159/191/5 160/192/114 155/186/111
 | 
			
		||||
f 155/87/111 160/97/114 156/188/112 151/179/109
 | 
			
		||||
f 156/188/112 121/148/95 124/151/98 157/189/113
 | 
			
		||||
f 157/189/113 124/151/98 126/153/8 158/190/7
 | 
			
		||||
f 158/190/7 126/153/8 128/155/6 159/191/5
 | 
			
		||||
f 159/191/5 128/155/6 130/157/100 160/192/114
 | 
			
		||||
f 121/148/95 156/188/112 160/97/114 130/103/100
 | 
			
		||||
f 161/193/80 162/194/115 163/60/82 164/59/83
 | 
			
		||||
f 164/195/83 163/196/82 165/197/78 166/198/48
 | 
			
		||||
f 166/198/48 165/197/78 167/199/77 168/200/46
 | 
			
		||||
f 168/200/46 167/199/77 169/201/84 170/202/85
 | 
			
		||||
f 161/193/80 170/202/85 169/201/84 162/194/115
 | 
			
		||||
f 162/194/115 171/203/86 172/69/87 163/60/82
 | 
			
		||||
f 163/196/82 172/204/87 173/205/73 165/197/78
 | 
			
		||||
f 165/197/78 173/205/73 174/206/72 167/199/77
 | 
			
		||||
f 167/199/77 174/206/72 175/207/88 169/201/84
 | 
			
		||||
f 169/201/84 175/207/88 171/203/86 162/194/115
 | 
			
		||||
f 171/203/86 176/208/116 177/75/69 172/69/87
 | 
			
		||||
f 172/204/87 177/209/69 178/210/68 173/205/73
 | 
			
		||||
f 173/205/73 178/210/68 179/211/67 174/206/72
 | 
			
		||||
f 174/206/72 179/211/67 180/212/66 175/207/88
 | 
			
		||||
f 175/207/88 180/212/66 176/208/116 171/203/86
 | 
			
		||||
f 176/208/116 181/213/21 182/81/64 177/75/69
 | 
			
		||||
f 177/209/69 182/214/64 183/215/63 178/210/68
 | 
			
		||||
f 178/210/68 183/215/63 184/216/62 179/211/67
 | 
			
		||||
f 179/211/67 184/216/62 185/217/61 180/212/66
 | 
			
		||||
f 180/212/66 185/217/61 181/213/21 176/208/116
 | 
			
		||||
f 181/34/21 186/218/117 187/89/60 182/35/64
 | 
			
		||||
f 182/36/64 187/219/60 188/220/59 183/31/63
 | 
			
		||||
f 183/31/63 188/220/59 189/221/58 184/32/62
 | 
			
		||||
f 184/32/62 189/221/58 190/222/57 185/33/61
 | 
			
		||||
f 185/33/61 190/222/57 186/218/117 181/34/21
 | 
			
		||||
f 186/218/117 191/223/89 192/98/90 187/89/60
 | 
			
		||||
f 187/219/60 192/224/90 193/225/54 188/220/59
 | 
			
		||||
f 188/220/59 193/225/54 194/226/53 189/221/58
 | 
			
		||||
f 189/221/58 194/226/53 195/227/91 190/222/57
 | 
			
		||||
f 190/222/57 195/227/91 191/223/89 186/218/117
 | 
			
		||||
f 191/223/89 196/228/92 197/104/93 192/98/90
 | 
			
		||||
f 192/224/90 197/229/93 198/230/47 193/225/54
 | 
			
		||||
f 193/225/54 198/230/47 199/231/45 194/226/53
 | 
			
		||||
f 194/226/53 199/231/45 200/232/94 195/227/91
 | 
			
		||||
f 195/227/91 200/232/94 196/228/92 191/223/89
 | 
			
		||||
f 196/228/92 161/193/80 164/59/83 197/104/93
 | 
			
		||||
f 197/229/93 164/195/83 166/198/48 198/230/47
 | 
			
		||||
f 198/230/47 166/198/48 168/200/46 199/231/45
 | 
			
		||||
f 199/231/45 168/200/46 170/202/85 200/232/94
 | 
			
		||||
f 161/193/80 196/228/92 200/232/94 170/202/85
 | 
			
		||||
f 201/233/1 202/234/2 203/235/118 204/236/119
 | 
			
		||||
f 204/111/119 203/110/118 205/237/5 206/238/6
 | 
			
		||||
f 206/238/6 205/237/5 207/239/7 208/240/8
 | 
			
		||||
f 208/240/8 207/239/7 209/241/120 210/242/121
 | 
			
		||||
f 201/233/1 210/242/121 209/241/120 202/234/2
 | 
			
		||||
f 202/234/2 211/243/11 212/244/12 203/235/118
 | 
			
		||||
f 203/110/118 212/119/12 213/245/13 205/237/5
 | 
			
		||||
f 205/237/5 213/245/13 214/246/14 207/239/7
 | 
			
		||||
f 207/239/7 214/246/14 215/247/15 209/241/120
 | 
			
		||||
f 209/241/120 215/247/15 211/243/11 202/234/2
 | 
			
		||||
f 211/243/11 216/248/16 217/249/108 212/244/12
 | 
			
		||||
f 212/119/12 217/124/108 218/250/18 213/245/13
 | 
			
		||||
f 213/245/13 218/250/18 219/251/19 214/246/14
 | 
			
		||||
f 214/246/14 219/251/19 220/252/107 215/247/15
 | 
			
		||||
f 215/247/15 220/252/107 216/248/16 211/243/11
 | 
			
		||||
f 216/248/16 221/185/21 222/187/22 217/249/108
 | 
			
		||||
f 217/124/108 222/88/22 223/178/23 218/250/18
 | 
			
		||||
f 218/250/18 223/178/23 224/181/24 219/251/19
 | 
			
		||||
f 219/251/19 224/181/24 225/183/25 220/252/107
 | 
			
		||||
f 220/252/107 225/183/25 221/185/21 216/248/16
 | 
			
		||||
f 221/253/21 226/254/26 227/255/106 222/256/22
 | 
			
		||||
f 222/131/22 227/130/106 228/257/122 223/258/23
 | 
			
		||||
f 223/258/23 228/257/122 229/259/29 224/260/24
 | 
			
		||||
f 224/260/24 229/259/29 230/261/104 225/262/25
 | 
			
		||||
f 225/262/25 230/261/104 226/254/26 221/253/21
 | 
			
		||||
f 226/254/26 231/263/31 232/264/32 227/255/106
 | 
			
		||||
f 227/130/106 232/139/32 233/265/33 228/257/122
 | 
			
		||||
f 228/257/122 233/265/33 234/266/34 229/259/29
 | 
			
		||||
f 229/259/29 234/266/34 235/267/123 230/261/104
 | 
			
		||||
f 230/261/104 235/267/123 231/263/31 226/254/26
 | 
			
		||||
f 231/263/31 236/268/36 237/269/37 232/264/32
 | 
			
		||||
f 232/139/32 237/144/37 238/270/124 233/265/33
 | 
			
		||||
f 233/265/33 238/270/124 239/271/125 234/266/34
 | 
			
		||||
f 234/266/34 239/271/125 240/272/40 235/267/123
 | 
			
		||||
f 235/267/123 240/272/40 236/268/36 231/263/31
 | 
			
		||||
f 236/268/36 201/233/1 204/236/119 237/269/37
 | 
			
		||||
f 237/144/37 204/111/119 206/238/6 238/270/124
 | 
			
		||||
f 238/270/124 206/238/6 208/240/8 239/271/125
 | 
			
		||||
f 239/271/125 208/240/8 210/242/121 240/272/40
 | 
			
		||||
f 201/233/1 236/268/36 240/272/40 210/242/121
 | 
			
		||||
| 
		 Before Width: | Height: | Size: 1.8 KiB  | 
| 
		 Before Width: | Height: | Size: 1.7 KiB  | 
| 
		 Before Width: | Height: | Size: 344 B  | 
| 
		 Before Width: | Height: | Size: 1.5 KiB  | 
| 
		 Before Width: | Height: | Size: 386 B  | 
@@ -33,10 +33,6 @@ computer:admiral128
 | 
			
		||||
 | 
			
		||||
There's also a `computer:computer' alias to `computer:babytower'.
 | 
			
		||||
 | 
			
		||||
License:
 | 
			
		||||
Sourcecode: WTFPL (see below)
 | 
			
		||||
Graphics: WTFPL (see below)
 | 
			
		||||
 | 
			
		||||
Thanks to all the people in the forums and the #minetest IRC channel for
 | 
			
		||||
 their support and suggestions; in no particular order:
 | 
			
		||||
  OldCoder, Josh, tonyka, VanessaE, davidpace, Jordach, and all the other
 | 
			
		||||
@@ -45,17 +41,3 @@ Thanks to all the people in the forums and the #minetest IRC channel for
 | 
			
		||||
 | 
			
		||||
See also:
 | 
			
		||||
http://minetest.net/
 | 
			
		||||
 | 
			
		||||
         DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
 | 
			
		||||
                    Version 2, December 2004
 | 
			
		||||
 | 
			
		||||
 Copyright (C) 2012 Diego Martínez <lkaezadl3@gmail.com>
 | 
			
		||||
 | 
			
		||||
 Everyone is permitted to copy and distribute verbatim or modified
 | 
			
		||||
 copies of this license document, and changing it is allowed as long
 | 
			
		||||
 as the name is changed.
 | 
			
		||||
 | 
			
		||||
            DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
 | 
			
		||||
   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
 | 
			
		||||
 | 
			
		||||
  0. You just DO WHAT THE FUCK YOU WANT TO. 
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
 | 
			
		||||
local S = homedecor_i18n.gettext
 | 
			
		||||
local S = homedecor.gettext
 | 
			
		||||
 | 
			
		||||
-- Amiga 500 lookalike
 | 
			
		||||
computer.register("computer:shefriendSOO", {
 | 
			
		||||
 
 | 
			
		||||
@@ -1,2 +1,2 @@
 | 
			
		||||
default
 | 
			
		||||
homedecor_i18n
 | 
			
		||||
homedecor_common
 | 
			
		||||
 
 | 
			
		||||
@@ -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
 | 
			
		||||
@@ -1,14 +1,12 @@
 | 
			
		||||
 | 
			
		||||
-- Copyright (C) 2012-2013 Diego Martínez <kaeza@users.sf.net>
 | 
			
		||||
-- License is WTFPL (see README.txt).
 | 
			
		||||
 | 
			
		||||
-- This file defines some items in order to not have to depend on other mods.
 | 
			
		||||
 | 
			
		||||
local S = homedecor_i18n.gettext
 | 
			
		||||
local S = homedecor.gettext
 | 
			
		||||
 | 
			
		||||
if (not minetest.get_modpath("homedecor")) then
 | 
			
		||||
 | 
			
		||||
	minetest.register_craftitem(":homedecor:plastic_sheeting", {
 | 
			
		||||
	minetest.register_craftitem(":basic_materials:plastic_sheet", {
 | 
			
		||||
		description = S("Plastic sheet"),
 | 
			
		||||
		inventory_image = "homedecor_plastic_sheeting.png",
 | 
			
		||||
	})
 | 
			
		||||
@@ -51,7 +49,7 @@ if (not minetest.get_modpath("homedecor")) then
 | 
			
		||||
 | 
			
		||||
	minetest.register_craft({
 | 
			
		||||
		type = "cooking",
 | 
			
		||||
		output = "homedecor:plastic_sheeting",
 | 
			
		||||
		output = "basic_materials:plastic_sheet",
 | 
			
		||||
		recipe = "homedecor:plastic_base",
 | 
			
		||||
	})
 | 
			
		||||
 | 
			
		||||
@@ -63,7 +61,7 @@ if (not minetest.get_modpath("homedecor")) then
 | 
			
		||||
 | 
			
		||||
	minetest.register_craft({
 | 
			
		||||
		type = 'fuel',
 | 
			
		||||
		recipe = 'homedecor:plastic_sheeting',
 | 
			
		||||
		recipe = 'basic_materials:plastic_sheet',
 | 
			
		||||
		burntime = 30,
 | 
			
		||||
	})
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,54 +1,52 @@
 | 
			
		||||
 | 
			
		||||
-- Copyright (C) 2012-2013 Diego Martínez <kaeza@users.sf.net>
 | 
			
		||||
-- License is WTFPL (see README.txt).
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	output = "computer:shefriendSOO",
 | 
			
		||||
	recipe = {
 | 
			
		||||
		{ "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" },
 | 
			
		||||
		{ "homedecor:plastic_sheeting", "default:glass", "homedecor:plastic_sheeting" },
 | 
			
		||||
		{ "homedecor:plastic_sheeting", "group:wood", "homedecor:plastic_sheeting" }
 | 
			
		||||
		{ "basic_materials:plastic_sheet", "basic_materials:plastic_sheet", "basic_materials:plastic_sheet" },
 | 
			
		||||
		{ "basic_materials:plastic_sheet", "default:glass", "basic_materials:plastic_sheet" },
 | 
			
		||||
		{ "basic_materials:plastic_sheet", "group:wood", "basic_materials:plastic_sheet" }
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	output = "computer:slaystation",
 | 
			
		||||
	recipe = {
 | 
			
		||||
		{ "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" },
 | 
			
		||||
		{ "homedecor:plastic_sheeting", "group:wood", "homedecor:plastic_sheeting" }
 | 
			
		||||
		{ "basic_materials:plastic_sheet", "basic_materials:plastic_sheet", "basic_materials:plastic_sheet" },
 | 
			
		||||
		{ "basic_materials:plastic_sheet", "group:wood", "basic_materials:plastic_sheet" }
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	output = "computer:vanio",
 | 
			
		||||
	recipe = {
 | 
			
		||||
		{ "homedecor:plastic_sheeting", "", "" },
 | 
			
		||||
		{ "basic_materials:plastic_sheet", "", "" },
 | 
			
		||||
		{ "default:glass", "", "" },
 | 
			
		||||
		{ "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" }
 | 
			
		||||
		{ "basic_materials:plastic_sheet", "basic_materials:plastic_sheet", "basic_materials:plastic_sheet" }
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	output = "computer:specter",
 | 
			
		||||
	recipe = {
 | 
			
		||||
		{ "", "", "homedecor:plastic_sheeting" },
 | 
			
		||||
		{ "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" },
 | 
			
		||||
		{ "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" }
 | 
			
		||||
		{ "", "", "basic_materials:plastic_sheet" },
 | 
			
		||||
		{ "basic_materials:plastic_sheet", "basic_materials:plastic_sheet", "basic_materials:plastic_sheet" },
 | 
			
		||||
		{ "basic_materials:plastic_sheet", "basic_materials:plastic_sheet", "basic_materials:plastic_sheet" }
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	output = "computer:slaystation2",
 | 
			
		||||
	recipe = {
 | 
			
		||||
		{ "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" },
 | 
			
		||||
		{ "homedecor:plastic_sheeting", "default:steel_ingot", "homedecor:plastic_sheeting" }
 | 
			
		||||
		{ "basic_materials:plastic_sheet", "basic_materials:plastic_sheet", "basic_materials:plastic_sheet" },
 | 
			
		||||
		{ "basic_materials:plastic_sheet", "default:steel_ingot", "basic_materials:plastic_sheet" }
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	output = "computer:admiral64",
 | 
			
		||||
	recipe = {
 | 
			
		||||
		{ "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" },
 | 
			
		||||
		{ "basic_materials:plastic_sheet", "basic_materials:plastic_sheet", "basic_materials:plastic_sheet" },
 | 
			
		||||
		{ "group:wood", "group:wood", "group:wood" }
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
@@ -56,7 +54,7 @@ minetest.register_craft({
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	output = "computer:admiral128",
 | 
			
		||||
	recipe = {
 | 
			
		||||
		{ "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" },
 | 
			
		||||
		{ "basic_materials:plastic_sheet", "basic_materials:plastic_sheet", "basic_materials:plastic_sheet" },
 | 
			
		||||
		{ "default:steel_ingot", "default:steel_ingot", "default:steel_ingot" }
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
@@ -64,16 +62,16 @@ minetest.register_craft({
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	output = "computer:wee",
 | 
			
		||||
	recipe = {
 | 
			
		||||
		{ "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" },
 | 
			
		||||
		{ "homedecor:plastic_sheeting", "default:copper_ingot", "homedecor:plastic_sheeting" }
 | 
			
		||||
		{ "basic_materials:plastic_sheet", "basic_materials:plastic_sheet", "basic_materials:plastic_sheet" },
 | 
			
		||||
		{ "basic_materials:plastic_sheet", "default:copper_ingot", "basic_materials:plastic_sheet" }
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	output = "computer:piepad",
 | 
			
		||||
	recipe = {
 | 
			
		||||
		{ "homedecor:plastic_sheeting", "homedecor:plastic_sheeting", "homedecor:plastic_sheeting" },
 | 
			
		||||
		{ "homedecor:plastic_sheeting", "default:glass", "homedecor:plastic_sheeting" }
 | 
			
		||||
		{ "basic_materials:plastic_sheet", "basic_materials:plastic_sheet", "basic_materials:plastic_sheet" },
 | 
			
		||||
		{ "basic_materials:plastic_sheet", "default:glass", "basic_materials:plastic_sheet" }
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
@@ -82,9 +80,9 @@ minetest.register_craft({
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	output = "computer:monitor",
 | 
			
		||||
	recipe = {
 | 
			
		||||
		{ "homedecor:plastic_sheeting", "default:glass","" },
 | 
			
		||||
		{ "homedecor:plastic_sheeting", "default:glass","" },
 | 
			
		||||
		{ "homedecor:plastic_sheeting", "default:mese_crystal_fragment", "homedecor:plastic_sheeting" }
 | 
			
		||||
		{ "basic_materials:plastic_sheet", "default:glass","" },
 | 
			
		||||
		{ "basic_materials:plastic_sheet", "default:glass","" },
 | 
			
		||||
		{ "basic_materials:plastic_sheet", "default:mese_crystal_fragment", "basic_materials:plastic_sheet" }
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
@@ -92,35 +90,35 @@ minetest.register_craft({
 | 
			
		||||
	output = "computer:router",
 | 
			
		||||
	recipe = {
 | 
			
		||||
		{ "default:steel_ingot","","" },
 | 
			
		||||
		{ "default:steel_ingot" ,"homedecor:plastic_sheeting", "homedecor:plastic_sheeting" },
 | 
			
		||||
		{ "default:mese_crystal_fragment","homedecor:plastic_sheeting", "homedecor:plastic_sheeting"  }
 | 
			
		||||
		{ "default:steel_ingot" ,"basic_materials:plastic_sheet", "basic_materials:plastic_sheet" },
 | 
			
		||||
		{ "default:mese_crystal_fragment","basic_materials:plastic_sheet", "basic_materials:plastic_sheet"  }
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	output = "computer:tower",
 | 
			
		||||
	recipe = {
 | 
			
		||||
		{ "homedecor:plastic_sheeting", "default:steel_ingot", "homedecor:plastic_sheeting" },
 | 
			
		||||
		{ "homedecor:plastic_sheeting", "default:mese_crystal", "homedecor:plastic_sheeting" },
 | 
			
		||||
		{ "homedecor:plastic_sheeting", "default:steel_ingot", "homedecor:plastic_sheeting" }
 | 
			
		||||
		{ "basic_materials:plastic_sheet", "default:steel_ingot", "basic_materials:plastic_sheet" },
 | 
			
		||||
		{ "basic_materials:plastic_sheet", "default:mese_crystal", "basic_materials:plastic_sheet" },
 | 
			
		||||
		{ "basic_materials:plastic_sheet", "default:steel_ingot", "basic_materials:plastic_sheet" }
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	output = "computer:printer",
 | 
			
		||||
	recipe = {
 | 
			
		||||
		{ "homedecor:plastic_sheeting", "default:steel_ingot","" },
 | 
			
		||||
		{ "homedecor:plastic_sheeting", "default:mese_crystal", "homedecor:plastic_sheeting" },
 | 
			
		||||
		{ "homedecor:plastic_sheeting", "default:coal_lump", "homedecor:plastic_sheeting" }
 | 
			
		||||
		{ "basic_materials:plastic_sheet", "default:steel_ingot","" },
 | 
			
		||||
		{ "basic_materials:plastic_sheet", "default:mese_crystal", "basic_materials:plastic_sheet" },
 | 
			
		||||
		{ "basic_materials:plastic_sheet", "default:coal_lump", "basic_materials:plastic_sheet" }
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	output = "computer:printer",
 | 
			
		||||
	recipe = {
 | 
			
		||||
		{ "homedecor:plastic_sheeting", "default:steel_ingot","" },
 | 
			
		||||
		{ "homedecor:plastic_sheeting", "default:mese_crystal", "homedecor:plastic_sheeting" },
 | 
			
		||||
		{ "homedecor:plastic_sheeting", "dye:black", "homedecor:plastic_sheeting", }
 | 
			
		||||
		{ "basic_materials:plastic_sheet", "default:steel_ingot","" },
 | 
			
		||||
		{ "basic_materials:plastic_sheet", "default:mese_crystal", "basic_materials:plastic_sheet" },
 | 
			
		||||
		{ "basic_materials:plastic_sheet", "dye:black", "basic_materials:plastic_sheet", }
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
@@ -136,8 +134,8 @@ minetest.register_craft({
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	output = "computer:tetris_arcade",
 | 
			
		||||
	recipe = {
 | 
			
		||||
		{ "homedecor:plastic_sheeting", "homedecor:power_crystal", "homedecor:plastic_sheeting", },
 | 
			
		||||
		{ "basic_materials:plastic_sheet", "basic_materials:energy_crystal", "basic_materials:plastic_sheet", },
 | 
			
		||||
		{ "dye:black", "default:glass", "dye:black" },
 | 
			
		||||
		{ "homedecor:plastic_sheeting", "homedecor:power_crystal", "homedecor:plastic_sheeting" }
 | 
			
		||||
		{ "basic_materials:plastic_sheet", "basic_materials:energy_crystal", "basic_materials:plastic_sheet" }
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
 | 
			
		||||
local S = homedecor_i18n.gettext
 | 
			
		||||
local S = homedecor.gettext
 | 
			
		||||
 | 
			
		||||
local shapes = {
 | 
			
		||||
   {  { x = {0, 1, 0, 1}, y = {0, 0, 1, 1} } },
 | 
			
		||||
@@ -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 }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										20
									
								
								copyright.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,20 @@
 | 
			
		||||
Most code and textures by Vanessa Ezekowitz.
 | 
			
		||||
 | 
			
		||||
Some code copied and modified from the game's default mods (especially 
 | 
			
		||||
doors) and ironzorg's flowers mod.
 | 
			
		||||
 | 
			
		||||
Whatever is stated here applies to all homedecor modpack components, as
 | 
			
		||||
appropriate.
 | 
			
		||||
 | 
			
		||||
Licenses: 
 | 
			
		||||
* Door open/close sound by Slanesh on freesound.org
 | 
			
		||||
	http://freesound.org/people/Slanesh/sounds/31768/
 | 
			
		||||
* Gate open/close by j1987 on freesound.org
 | 
			
		||||
	http://freesound.org/people/j1987/sounds/106116/
 | 
			
		||||
* Doorbell sound by guitarguy1985 on freesound.org
 | 
			
		||||
	http://freesound.org/people/guitarguy1985/sounds/69384/
 | 
			
		||||
* Book soundn by mckinneysound's on http://www.freesfx.co.uk/
 | 
			
		||||
	http://www.freesfx.co.uk/sfx/book?p=3
 | 
			
		||||
* Phone ringing sound by andyt's on http://www.freesfx.co.uk/
 | 
			
		||||
	http://www.freesfx.co.uk/sfx/phone?p=5
 | 
			
		||||
 | 
			
		||||
@@ -1,2 +1,2 @@
 | 
			
		||||
default
 | 
			
		||||
homedecor
 | 
			
		||||
default
 | 
			
		||||
homedecor_common
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
 | 
			
		||||
local S = homedecor_i18n.gettext
 | 
			
		||||
local S = homedecor.gettext
 | 
			
		||||
 | 
			
		||||
screwdriver = screwdriver or {}
 | 
			
		||||
 | 
			
		||||
@@ -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",
 | 
			
		||||
 
 | 
			
		||||
@@ -1,187 +0,0 @@
 | 
			
		||||
 | 
			
		||||
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"
 | 
			
		||||
	},
 | 
			
		||||
	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
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
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"
 | 
			
		||||
	},
 | 
			
		||||
	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
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
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"
 | 
			
		||||
	},
 | 
			
		||||
	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
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
local tr_cbox = {
 | 
			
		||||
	type = "fixed",
 | 
			
		||||
	fixed = { -0.375, -0.3125, 0.25, 0.375, 0.375, 0.5 }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
homedecor.register("towel_rod", {
 | 
			
		||||
	description = S("Towel rod with towel"),
 | 
			
		||||
	mesh = "homedecor_towel_rod.obj",
 | 
			
		||||
	tiles = {
 | 
			
		||||
		"homedecor_generic_terrycloth.png",
 | 
			
		||||
		"default_wood.png",
 | 
			
		||||
	},
 | 
			
		||||
	inventory_image = "homedecor_towel_rod_inv.png",
 | 
			
		||||
	selection_box = tr_cbox,
 | 
			
		||||
	walkable = false,
 | 
			
		||||
	groups = {snappy=2,choppy=2,oddly_breakable_by_hand=3,flammable=3},
 | 
			
		||||
	sounds = default.node_sound_defaults(),
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
homedecor.register("medicine_cabinet", {
 | 
			
		||||
	description = S("Medicine cabinet"),
 | 
			
		||||
	mesh = "homedecor_medicine_cabinet.obj",
 | 
			
		||||
	tiles = {
 | 
			
		||||
		'default_wood.png',
 | 
			
		||||
		'homedecor_medicine_cabinet_mirror.png'
 | 
			
		||||
	},
 | 
			
		||||
	inventory_image = "homedecor_medicine_cabinet_inv.png",
 | 
			
		||||
	selection_box = {
 | 
			
		||||
		type = "fixed",
 | 
			
		||||
		fixed = {-0.3125, -0.1875, 0.3125, 0.3125, 0.5, 0.5}
 | 
			
		||||
	},
 | 
			
		||||
	walkable = false,
 | 
			
		||||
	groups = { snappy = 3 },
 | 
			
		||||
	sounds = default.node_sound_wood_defaults(),
 | 
			
		||||
	on_punch = function(pos, node, puncher, pointed_thing)
 | 
			
		||||
		node.name = "homedecor:medicine_cabinet_open"
 | 
			
		||||
		minetest.swap_node(pos, node)
 | 
			
		||||
	end,
 | 
			
		||||
	infotext=S("Medicine cabinet"),
 | 
			
		||||
	inventory = {
 | 
			
		||||
		size=6,
 | 
			
		||||
	},
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
homedecor.register("medicine_cabinet_open", {
 | 
			
		||||
	mesh = "homedecor_medicine_cabinet_open.obj",
 | 
			
		||||
	tiles = {
 | 
			
		||||
		'default_wood.png',
 | 
			
		||||
		'homedecor_medicine_cabinet_mirror.png',
 | 
			
		||||
		'homedecor_medicine_cabinet_inside.png'
 | 
			
		||||
	},
 | 
			
		||||
	selection_box = {
 | 
			
		||||
		type = "fixed",
 | 
			
		||||
		fixed = {-0.3125, -0.1875, -0.25, 0.3125, 0.5, 0.5}
 | 
			
		||||
	},
 | 
			
		||||
	walkable = false,
 | 
			
		||||
	groups = { snappy = 3, not_in_creative_inventory=1 },
 | 
			
		||||
	drop = "homedecor:medicine_cabinet",
 | 
			
		||||
	on_punch = function(pos, node, puncher, pointed_thing)
 | 
			
		||||
		node.name = "homedecor:medicine_cabinet"
 | 
			
		||||
		minetest.swap_node(pos, node)
 | 
			
		||||
	end,
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
-- convert old static nodes
 | 
			
		||||
 | 
			
		||||
homedecor.old_static_bathroom_tiles = {
 | 
			
		||||
	"homedecor:tiles_1",
 | 
			
		||||
	"homedecor:tiles_2",
 | 
			
		||||
	"homedecor:tiles_3",
 | 
			
		||||
	"homedecor:tiles_4",
 | 
			
		||||
	"homedecor:tiles_red",
 | 
			
		||||
	"homedecor:tiles_tan",
 | 
			
		||||
	"homedecor:tiles_yellow",
 | 
			
		||||
	"homedecor:tiles_green",
 | 
			
		||||
	"homedecor:tiles_blue"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
local old_to_color = {
 | 
			
		||||
	"light_grey",
 | 
			
		||||
	"grey",
 | 
			
		||||
	"black",
 | 
			
		||||
	"black"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
minetest.register_lbm({
 | 
			
		||||
	name = "homedecor:convert_bathroom_tiles",
 | 
			
		||||
	label = "Convert bathroom tiles to use param2 color",
 | 
			
		||||
	run_at_every_load = false,
 | 
			
		||||
	nodenames = homedecor.old_static_bathroom_tiles,
 | 
			
		||||
	action = function(pos, node)
 | 
			
		||||
		local name = node.name
 | 
			
		||||
		local newname = "homedecor:bathroom_tiles_light"
 | 
			
		||||
		local a = string.find(name, "_")
 | 
			
		||||
		local color = string.sub(name, a + 1)
 | 
			
		||||
 | 
			
		||||
		if color == "tan" then
 | 
			
		||||
			color = "yellow_s50"
 | 
			
		||||
		elseif color == "1" or color == "2" or color == "3" or color == "4" then
 | 
			
		||||
			if color == "4" then
 | 
			
		||||
				newname = "homedecor:bathroom_tiles_medium"
 | 
			
		||||
			end
 | 
			
		||||
			color = old_to_color[tonumber(color)]
 | 
			
		||||
		elseif color ~= "yellow" then
 | 
			
		||||
			color = color.."_s50"
 | 
			
		||||
		end
 | 
			
		||||
 | 
			
		||||
		local paletteidx = unifieddyes.getpaletteidx("unifieddyes:"..color, "extended")
 | 
			
		||||
 | 
			
		||||
		minetest.set_node(pos, { name = newname, param2 = paletteidx })
 | 
			
		||||
		local meta = minetest.get_meta(pos)
 | 
			
		||||
		meta:set_string("dye", "unifieddyes:"..color)
 | 
			
		||||
		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
 | 
			
		||||
})
 | 
			
		||||
@@ -1,326 +0,0 @@
 | 
			
		||||
 | 
			
		||||
local S = homedecor_i18n.gettext
 | 
			
		||||
 | 
			
		||||
local toilet_sbox = {
 | 
			
		||||
	type = "fixed",
 | 
			
		||||
	fixed = { -6/16, -8/16, -8/16, 6/16, 9/16, 8/16 },
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
local toilet_cbox = {
 | 
			
		||||
	type = "fixed",
 | 
			
		||||
	fixed = {
 | 
			
		||||
		{-6/16, -8/16, -8/16, 6/16, 1/16, 8/16 },
 | 
			
		||||
		{-6/16, -8/16, 4/16, 6/16, 9/16, 8/16 }
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
homedecor.register("toilet", {
 | 
			
		||||
	description = S("Toilet"),
 | 
			
		||||
	mesh = "homedecor_toilet_closed.obj",
 | 
			
		||||
	tiles = {
 | 
			
		||||
		"homedecor_marble.png",
 | 
			
		||||
		"homedecor_marble.png",
 | 
			
		||||
		"homedecor_marble.png",
 | 
			
		||||
		{ name = "homedecor_generic_metal.png", color = homedecor.color_med_grey }
 | 
			
		||||
	},
 | 
			
		||||
	selection_box = toilet_sbox,
 | 
			
		||||
	node_box = toilet_cbox,
 | 
			
		||||
	groups = {cracky=3},
 | 
			
		||||
	sounds = default.node_sound_stone_defaults(),
 | 
			
		||||
	on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
 | 
			
		||||
		node.name = "homedecor:toilet_open"
 | 
			
		||||
		minetest.set_node(pos, node)
 | 
			
		||||
	end
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
homedecor.register("toilet_open", {
 | 
			
		||||
	mesh = "homedecor_toilet_open.obj",
 | 
			
		||||
	tiles = {
 | 
			
		||||
		"homedecor_marble.png",
 | 
			
		||||
		"homedecor_marble.png",
 | 
			
		||||
		"homedecor_marble.png",
 | 
			
		||||
		"default_water.png",
 | 
			
		||||
		{ name = "homedecor_generic_metal.png", color = homedecor.color_med_grey }
 | 
			
		||||
	},
 | 
			
		||||
	selection_box = toilet_sbox,
 | 
			
		||||
	collision_box = toilet_cbox,
 | 
			
		||||
	drop = "homedecor:toilet",
 | 
			
		||||
	groups = {cracky=3},
 | 
			
		||||
	sounds = default.node_sound_stone_defaults(),
 | 
			
		||||
	on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
 | 
			
		||||
		node.name = "homedecor:toilet"
 | 
			
		||||
		minetest.set_node(pos, node)
 | 
			
		||||
		minetest.sound_play("homedecor_toilet_flush", {
 | 
			
		||||
			pos=pos,
 | 
			
		||||
			max_hear_distance = 5,
 | 
			
		||||
			gain = 1,
 | 
			
		||||
		})
 | 
			
		||||
	end
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
-- toilet paper :-)
 | 
			
		||||
 | 
			
		||||
local tp_cbox = {
 | 
			
		||||
	type = "fixed",
 | 
			
		||||
	fixed = { -0.25, 0.125, 0.0625, 0.1875, 0.4375, 0.5 }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
homedecor.register("toilet_paper", {
 | 
			
		||||
	description = S("Toilet paper"),
 | 
			
		||||
	mesh = "homedecor_toilet_paper.obj",
 | 
			
		||||
	tiles = {
 | 
			
		||||
		"homedecor_generic_quilted_paper.png",
 | 
			
		||||
		"default_wood.png"
 | 
			
		||||
	},
 | 
			
		||||
	inventory_image = "homedecor_toilet_paper_inv.png",
 | 
			
		||||
	selection_box = tp_cbox,
 | 
			
		||||
	walkable = false,
 | 
			
		||||
	groups = {snappy=3,oddly_breakable_by_hand=3},
 | 
			
		||||
	sounds = default.node_sound_defaults(),
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
--Sink
 | 
			
		||||
 | 
			
		||||
local sink_cbox = {
 | 
			
		||||
	type = "fixed",
 | 
			
		||||
	fixed = { -5/16, -8/16, 1/16, 5/16, 8/16, 8/16 }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
homedecor.register("sink", {
 | 
			
		||||
	description = S("Bathroom Sink"),
 | 
			
		||||
	mesh = "homedecor_bathroom_sink.obj",
 | 
			
		||||
	tiles = {
 | 
			
		||||
		"homedecor_marble.png",
 | 
			
		||||
		"homedecor_marble.png",
 | 
			
		||||
		"default_water.png"
 | 
			
		||||
	},
 | 
			
		||||
	inventory_image="homedecor_bathroom_sink_inv.png",
 | 
			
		||||
	selection_box = sink_cbox,
 | 
			
		||||
	groups = {cracky=3},
 | 
			
		||||
	sounds = default.node_sound_stone_defaults(),
 | 
			
		||||
	node_box = {
 | 
			
		||||
		type = "fixed",
 | 
			
		||||
		fixed = {
 | 
			
		||||
			{ -5/16,  5/16, 1/16, -4/16, 8/16, 8/16 },
 | 
			
		||||
			{  5/16,  5/16, 1/16,  4/16, 8/16, 8/16 },
 | 
			
		||||
			{ -5/16,  5/16, 1/16,  5/16, 8/16, 2/16 },
 | 
			
		||||
			{ -5/16,  5/16, 6/16,  5/16, 8/16, 8/16 },
 | 
			
		||||
			{ -4/16, -8/16, 1/16,  4/16, 5/16, 6/16 }
 | 
			
		||||
		}
 | 
			
		||||
	},
 | 
			
		||||
	on_destruct = function(pos)
 | 
			
		||||
		homedecor.stop_particle_spawner({x=pos.x, y=pos.y+1, z=pos.z})
 | 
			
		||||
	end
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
--Taps
 | 
			
		||||
 | 
			
		||||
local function taps_on_rightclick(pos, node, clicker, itemstack, pointed_thing)
 | 
			
		||||
	local below = minetest.get_node_or_nil({x=pos.x, y=pos.y-1, z=pos.z})
 | 
			
		||||
	if below and
 | 
			
		||||
	  below.name == "homedecor:shower_tray" or
 | 
			
		||||
	  below.name == "homedecor:sink" or
 | 
			
		||||
	  below.name == "homedecor:kitchen_cabinet_with_sink" or
 | 
			
		||||
	  below.name == "homedecor:kitchen_cabinet_with_sink_locked" then
 | 
			
		||||
		local particledef = {
 | 
			
		||||
			outlet      = { x = 0, y = -0.44, z = 0.28 },
 | 
			
		||||
			velocity_x  = { min = -0.1, max = 0.1 },
 | 
			
		||||
			velocity_y  = -0.3,
 | 
			
		||||
			velocity_z  = { min = -0.1, max = 0 },
 | 
			
		||||
			spread      = 0
 | 
			
		||||
		}
 | 
			
		||||
		homedecor.start_particle_spawner(pos, node, particledef, "homedecor_faucet")
 | 
			
		||||
	end
 | 
			
		||||
	return itemstack
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
homedecor.register("taps", {
 | 
			
		||||
	description = S("Bathroom taps/faucet"),
 | 
			
		||||
	mesh = "homedecor_bathroom_faucet.obj",
 | 
			
		||||
	tiles = {
 | 
			
		||||
		{ name = "homedecor_generic_metal.png", color = homedecor.color_med_grey },
 | 
			
		||||
		"homedecor_generic_metal_bright.png",
 | 
			
		||||
		"homedecor_generic_metal.png",
 | 
			
		||||
		"homedecor_generic_metal_bright.png"
 | 
			
		||||
	},
 | 
			
		||||
	inventory_image = "3dforniture_taps_inv.png",
 | 
			
		||||
	wield_image = "3dforniture_taps_inv.png",
 | 
			
		||||
	selection_box = {
 | 
			
		||||
		type = "fixed",
 | 
			
		||||
		fixed = { -4/16, -7/16, 4/16, 4/16, -4/16, 8/16 },
 | 
			
		||||
	},
 | 
			
		||||
	walkable = false,
 | 
			
		||||
	groups = {cracky=3},
 | 
			
		||||
	sounds = default.node_sound_stone_defaults(),
 | 
			
		||||
	on_rightclick = taps_on_rightclick,
 | 
			
		||||
	on_destruct = homedecor.stop_particle_spawner,
 | 
			
		||||
	on_rotate = screwdriver.disallow
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
homedecor.register("taps_brass", {
 | 
			
		||||
	description = S("Bathroom taps/faucet (brass)"),
 | 
			
		||||
	mesh = "homedecor_bathroom_faucet.obj",
 | 
			
		||||
	tiles = {
 | 
			
		||||
		"homedecor_generic_metal_brass.png",
 | 
			
		||||
		"homedecor_generic_metal_brass.png",
 | 
			
		||||
		"homedecor_generic_metal.png",
 | 
			
		||||
		"homedecor_generic_metal_brass.png"
 | 
			
		||||
	},
 | 
			
		||||
	inventory_image = "3dforniture_taps_brass_inv.png",
 | 
			
		||||
	wield_image = "3dforniture_taps_brass_inv.png",
 | 
			
		||||
	selection_box = {
 | 
			
		||||
		type = "fixed",
 | 
			
		||||
		fixed = { -4/16, -7/16, 4/16, 4/16, -4/16, 8/16 },
 | 
			
		||||
	},
 | 
			
		||||
	walkable = false,
 | 
			
		||||
	groups = {cracky=3},
 | 
			
		||||
	sounds = default.node_sound_stone_defaults(),
 | 
			
		||||
	on_rightclick = taps_on_rightclick,
 | 
			
		||||
	on_destruct = homedecor.stop_particle_spawner,
 | 
			
		||||
	on_rotate = screwdriver.disallow
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
--Shower Tray
 | 
			
		||||
 | 
			
		||||
homedecor.register("shower_tray", {
 | 
			
		||||
	description = S("Shower Tray"),
 | 
			
		||||
	tiles = {
 | 
			
		||||
		"forniture_marble_base_ducha_top.png",
 | 
			
		||||
		"homedecor_marble.png"
 | 
			
		||||
	},
 | 
			
		||||
	node_box = {
 | 
			
		||||
		type = "fixed",
 | 
			
		||||
		fixed = {
 | 
			
		||||
			{ -0.5, -0.5, -0.5, 0.5, -0.45, 0.5 },
 | 
			
		||||
			{ -0.5, -0.45, -0.5, 0.5, -0.4, -0.45 },
 | 
			
		||||
			{ -0.5, -0.45, 0.45, 0.5, -0.4, 0.5 },
 | 
			
		||||
			{ -0.5, -0.45, -0.45, -0.45, -0.4, 0.45 },
 | 
			
		||||
			{  0.45, -0.45, -0.45, 0.5, -0.4, 0.45 }
 | 
			
		||||
		},
 | 
			
		||||
	},
 | 
			
		||||
	selection_box = homedecor.nodebox.slab_y(0.1),
 | 
			
		||||
	groups = {cracky=2},
 | 
			
		||||
	sounds = default.node_sound_stone_defaults(),
 | 
			
		||||
	on_destruct = function(pos)
 | 
			
		||||
		homedecor.stop_particle_spawner({x=pos.x, y=pos.y+2, z=pos.z}) -- the showerhead
 | 
			
		||||
		homedecor.stop_particle_spawner({x=pos.x, y=pos.y+1, z=pos.z}) -- the taps, if any
 | 
			
		||||
	end
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
--Shower Head
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
local sh_cbox = {
 | 
			
		||||
	type = "fixed",
 | 
			
		||||
	fixed = { -0.2, -0.4, -0.05, 0.2, 0.1, 0.5 }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
homedecor.register("shower_head", {
 | 
			
		||||
	drawtype = "mesh",
 | 
			
		||||
	mesh = "homedecor_shower_head.obj",
 | 
			
		||||
	tiles = {
 | 
			
		||||
		"homedecor_generic_metal.png",
 | 
			
		||||
		"homedecor_shower_head.png"
 | 
			
		||||
	},
 | 
			
		||||
	inventory_image = "homedecor_shower_head_inv.png",
 | 
			
		||||
	description = S("Shower Head"),
 | 
			
		||||
	groups = {snappy=3},
 | 
			
		||||
	selection_box = sh_cbox,
 | 
			
		||||
	walkable = false,
 | 
			
		||||
	on_rotate = screwdriver.disallow,
 | 
			
		||||
	on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
 | 
			
		||||
		local below = minetest.get_node_or_nil({x=pos.x, y=pos.y-2.0, z=pos.z})
 | 
			
		||||
		if below and below.name == "homedecor:shower_tray" then
 | 
			
		||||
			local particledef = {
 | 
			
		||||
				outlet      = { x = 0, y = -0.42, z = 0.1 },
 | 
			
		||||
				velocity_x  = { min = -0.15, max = 0.15 },
 | 
			
		||||
				velocity_y  = -2,
 | 
			
		||||
				velocity_z  = { min = -0.3,  max = 0.1 },
 | 
			
		||||
				spread      = 0.12
 | 
			
		||||
			}
 | 
			
		||||
			homedecor.start_particle_spawner(pos, node, particledef, "homedecor_shower")
 | 
			
		||||
		end
 | 
			
		||||
		return itemstack
 | 
			
		||||
	end,
 | 
			
		||||
	on_destruct = function(pos)
 | 
			
		||||
		homedecor.stop_particle_spawner(pos)
 | 
			
		||||
	end
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
homedecor.register("bathtub_clawfoot_brass_taps", {
 | 
			
		||||
	drawtype = "mesh",
 | 
			
		||||
	mesh = "homedecor_bathtub_clawfoot.obj",
 | 
			
		||||
	tiles = {
 | 
			
		||||
		{ name = "homedecor_generic_metal.png", color = homedecor.color_med_grey },
 | 
			
		||||
		"homedecor_generic_metal_bright.png",
 | 
			
		||||
		"homedecor_generic_metal_bright.png",
 | 
			
		||||
		"homedecor_generic_metal_brass.png",
 | 
			
		||||
		"homedecor_marble.png",
 | 
			
		||||
		"homedecor_bathtub_clawfoot_bottom_inside.png",
 | 
			
		||||
	},
 | 
			
		||||
	description = S("Bathtub, clawfoot, with brass taps"),
 | 
			
		||||
	groups = {cracky=3},
 | 
			
		||||
	selection_box = {
 | 
			
		||||
		type = "fixed",
 | 
			
		||||
		fixed = { -0.5, -0.5, -0.5, 1.5, 0.3125, 0.5 },
 | 
			
		||||
	},
 | 
			
		||||
	sounds = default.node_sound_stone_defaults(),
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
homedecor.register("bathtub_clawfoot_chrome_taps", {
 | 
			
		||||
	drawtype = "mesh",
 | 
			
		||||
	mesh = "homedecor_bathtub_clawfoot.obj",
 | 
			
		||||
	tiles = {
 | 
			
		||||
		{ name = "homedecor_generic_metal.png", color = homedecor.color_med_grey },
 | 
			
		||||
		"homedecor_generic_metal_bright.png",
 | 
			
		||||
		"homedecor_generic_metal_bright.png",
 | 
			
		||||
		"homedecor_generic_metal_bright.png",
 | 
			
		||||
		"homedecor_marble.png",
 | 
			
		||||
		"homedecor_bathtub_clawfoot_bottom_inside.png",
 | 
			
		||||
	},
 | 
			
		||||
	description = S("Bathtub, clawfoot, with chrome taps"),
 | 
			
		||||
	groups = {cracky=3},
 | 
			
		||||
	selection_box = {
 | 
			
		||||
		type = "fixed",
 | 
			
		||||
		fixed = { -0.5, -0.5, -0.5, 1.5, 0.3125, 0.5 },
 | 
			
		||||
	},
 | 
			
		||||
	sounds = default.node_sound_stone_defaults(),
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
local bs_cbox = {
 | 
			
		||||
	type = "fixed",
 | 
			
		||||
	fixed = { -8/16, -8/16, 1/16, 8/16, 8/16, 8/16 }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
homedecor.register("bathroom_set", {
 | 
			
		||||
	drawtype = "mesh",
 | 
			
		||||
	mesh = "homedecor_bathroom_set.obj",
 | 
			
		||||
	tiles = {
 | 
			
		||||
		"homedecor_bathroom_set_mirror.png",
 | 
			
		||||
		"homedecor_bathroom_set_tray.png",
 | 
			
		||||
		"homedecor_bathroom_set_toothbrush.png",
 | 
			
		||||
		"homedecor_bathroom_set_cup.png",
 | 
			
		||||
		"homedecor_bathroom_set_toothpaste.png",
 | 
			
		||||
	},
 | 
			
		||||
	inventory_image = "homedecor_bathroom_set_inv.png",
 | 
			
		||||
	description = S("Bathroom sundries set"),
 | 
			
		||||
	groups = {snappy=3},
 | 
			
		||||
	selection_box = bs_cbox,
 | 
			
		||||
	walkable = false,
 | 
			
		||||
	sounds = default.node_sound_glass_defaults(),
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_alias("3dforniture:toilet", "homedecor:toilet")
 | 
			
		||||
minetest.register_alias("3dforniture:toilet_open", "homedecor:toilet_open")
 | 
			
		||||
minetest.register_alias("3dforniture:sink", "homedecor:sink")
 | 
			
		||||
minetest.register_alias("3dforniture:taps", "homedecor:taps")
 | 
			
		||||
minetest.register_alias("3dforniture:shower_tray", "homedecor:shower_tray")
 | 
			
		||||
minetest.register_alias("3dforniture:shower_head", "homedecor:shower_head")
 | 
			
		||||
minetest.register_alias("3dforniture:table_lamp", "homedecor:table_lamp_off")
 | 
			
		||||
 | 
			
		||||
minetest.register_alias("toilet", "homedecor:toilet")
 | 
			
		||||
minetest.register_alias("sink", "homedecor:sink")
 | 
			
		||||
minetest.register_alias("taps", "homedecor:taps")
 | 
			
		||||
minetest.register_alias("shower_tray", "homedecor:shower_tray")
 | 
			
		||||
minetest.register_alias("shower_head", "homedecor:shower_head")
 | 
			
		||||
minetest.register_alias("table_lamp", "homedecor:table_lamp_off")
 | 
			
		||||
@@ -1,235 +0,0 @@
 | 
			
		||||
 | 
			
		||||
local S = homedecor_i18n.gettext
 | 
			
		||||
 | 
			
		||||
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)
 | 
			
		||||
	end
 | 
			
		||||
	minetest.remove_node(pos)
 | 
			
		||||
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
 | 
			
		||||
	end
 | 
			
		||||
	local player_name = player:get_player_name()
 | 
			
		||||
	local pos = player_current_book[player_name]
 | 
			
		||||
	if not pos then return end
 | 
			
		||||
	local meta = minetest.get_meta(pos)
 | 
			
		||||
	meta:set_string("title", fields.title or "")
 | 
			
		||||
	meta:set_string("text", fields.text or "")
 | 
			
		||||
	meta:set_string("owner", player_name)
 | 
			
		||||
	if (fields.title or "") ~= "" then
 | 
			
		||||
		meta:set_string("infotext", fields.title)
 | 
			
		||||
	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())))
 | 
			
		||||
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
 | 
			
		||||
})
 | 
			
		||||
@@ -1,18 +0,0 @@
 | 
			
		||||
Most code and all textures by Vanessa Ezekowitz.
 | 
			
		||||
 | 
			
		||||
Some code copied and modified from the game's default mods (especially 
 | 
			
		||||
doors) and ironzorg's flowers mod.
 | 
			
		||||
 | 
			
		||||
Licenses: 
 | 
			
		||||
* For the lua code, LGPL. 
 | 
			
		||||
* For the door open/close sound, CC-By-SA 3.0 by Slanesh on freesound.org
 | 
			
		||||
	http://freesound.org/people/Slanesh/sounds/31768/
 | 
			
		||||
* For the gate open/close sound, CC0, by j1987 on freesound.org
 | 
			
		||||
	http://freesound.org/people/j1987/sounds/106116/
 | 
			
		||||
* For the doorbell sound, CC0 by guitarguy1985 on freesound.org
 | 
			
		||||
	http://freesound.org/people/guitarguy1985/sounds/69384/
 | 
			
		||||
* For the book sound, Public Domain by mckinneysound's on http://www.freesfx.co.uk/
 | 
			
		||||
	http://www.freesfx.co.uk/sfx/book?p=3
 | 
			
		||||
* For the phone ring, Public Domain by andyt's on http://www.freesfx.co.uk/
 | 
			
		||||
	http://www.freesfx.co.uk/sfx/phone?p=5
 | 
			
		||||
* For all images and everything else, WTFPL.
 | 
			
		||||
							
								
								
									
										3120
									
								
								homedecor/crafts.lua
									
									
									
									
									
								
							
							
						
						@@ -1,13 +0,0 @@
 | 
			
		||||
default
 | 
			
		||||
unifieddyes
 | 
			
		||||
homedecor_i18n
 | 
			
		||||
building_blocks?
 | 
			
		||||
signs_lib?
 | 
			
		||||
moreblocks?
 | 
			
		||||
technic?
 | 
			
		||||
dye?
 | 
			
		||||
bees?
 | 
			
		||||
bucket?
 | 
			
		||||
beds?
 | 
			
		||||
flowers?
 | 
			
		||||
3d_armor?
 | 
			
		||||
@@ -1,659 +0,0 @@
 | 
			
		||||
-- Node definitions for Homedecor doors
 | 
			
		||||
 | 
			
		||||
local S = homedecor_i18n.gettext
 | 
			
		||||
 | 
			
		||||
local function N_(x) return x end
 | 
			
		||||
 | 
			
		||||
-- doors
 | 
			
		||||
 | 
			
		||||
local function isSolid(pos, adjust)
 | 
			
		||||
    local adj = {x = adjust[1], y = adjust[2], z = adjust[3]}
 | 
			
		||||
    local node = minetest.get_node(vector.add(pos,adj))
 | 
			
		||||
    if node then
 | 
			
		||||
        local idef = minetest.registered_nodes[minetest.get_node(vector.add(pos,adj)).name]
 | 
			
		||||
        if idef then
 | 
			
		||||
            return idef.walkable
 | 
			
		||||
        end
 | 
			
		||||
    end
 | 
			
		||||
    return false
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
local function countSolids(pos,node,level)
 | 
			
		||||
    local solids = 0
 | 
			
		||||
    for x = -1, 1 do
 | 
			
		||||
        for z = -1, 1 do
 | 
			
		||||
            local y = (node.param2 == 5) and -level or level
 | 
			
		||||
            -- special cases when x == z == 0
 | 
			
		||||
            if x == 0 and z == 0 then
 | 
			
		||||
                if level == 1 then
 | 
			
		||||
                    -- when looking past the trap door, cannot be solid in center
 | 
			
		||||
                    if isSolid(pos,{x,y,z}) then
 | 
			
		||||
                        return false
 | 
			
		||||
                    end
 | 
			
		||||
                    -- no else. it doesn't matter if x == y == z is solid, that's us.
 | 
			
		||||
                end
 | 
			
		||||
            elseif isSolid(pos,{x,y,z}) then
 | 
			
		||||
                solids = solids + 1
 | 
			
		||||
            end
 | 
			
		||||
        end
 | 
			
		||||
    end
 | 
			
		||||
    return solids
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
local function calculateClosed(pos)
 | 
			
		||||
    local node = minetest.get_node(pos)
 | 
			
		||||
    -- the door is considered closed if it is closing off something.
 | 
			
		||||
 | 
			
		||||
    local direction = node.param2 % 6
 | 
			
		||||
    local isTrap = direction == 0 or direction == 5
 | 
			
		||||
    if isTrap then
 | 
			
		||||
        -- the trap door is considered closed when all nodes on its sides are solid
 | 
			
		||||
        -- or all nodes in the 3x3 above/below it are solid except the center
 | 
			
		||||
        for level = 0, 1 do
 | 
			
		||||
            local solids = countSolids(pos,node,level)
 | 
			
		||||
            if solids == 8 then
 | 
			
		||||
                return true
 | 
			
		||||
            end
 | 
			
		||||
        end
 | 
			
		||||
        return false
 | 
			
		||||
    else
 | 
			
		||||
        -- the door is considered closed when the nodes on its sides are solid
 | 
			
		||||
        -- or the 3 nodes in its facing direction are solid nonsolid solid
 | 
			
		||||
        -- if the door has two levels (i.e. not a gate) then this must
 | 
			
		||||
        -- be true for the top node as well.
 | 
			
		||||
 | 
			
		||||
        -- sorry I dunno the math to figure whether to x or z
 | 
			
		||||
        if direction == 1 or direction == 2 then
 | 
			
		||||
            if isSolid(pos,{0,0,-1}) and isSolid(pos,{0,0,1}) then
 | 
			
		||||
                if string.find(node.name,'_bottom_') then
 | 
			
		||||
                    return calculateClosed({x=pos.x,y=pos.y+1,z=pos.z})
 | 
			
		||||
                else
 | 
			
		||||
                    return true
 | 
			
		||||
                end
 | 
			
		||||
            end
 | 
			
		||||
            local x = (direction == 1) and 1 or -1
 | 
			
		||||
            if isSolid(pos,{x,0,-1}) and not isSolid(pos,{x,0,0}) and isSolid(pos,{x,0,1}) then
 | 
			
		||||
                if string.find(node.name,'_bottom_') then
 | 
			
		||||
                    return calculateClosed({x=pos.x,y=pos.y+1,z=pos.z})
 | 
			
		||||
                else
 | 
			
		||||
                    return true
 | 
			
		||||
                end
 | 
			
		||||
            end
 | 
			
		||||
            return false
 | 
			
		||||
        else
 | 
			
		||||
            -- direction == 3 or 4
 | 
			
		||||
            if isSolid(pos,{-1,0,0}) and isSolid(pos,{1,0,0}) then
 | 
			
		||||
                if string.find(node.name,'_bottom_') then
 | 
			
		||||
                    return calculateClosed({x=pos.x,y=pos.y+1,z=pos.z})
 | 
			
		||||
                else
 | 
			
		||||
                    return true
 | 
			
		||||
                end
 | 
			
		||||
            end
 | 
			
		||||
            local z = (direction == 3) and 1 or -1
 | 
			
		||||
            if isSolid(pos,{-1,0,z}) and not isSolid(pos,{0,0,z}) and isSolid(pos,{1,0,z}) then
 | 
			
		||||
                if string.find(node.name,'_bottom_') then
 | 
			
		||||
                    return calculateClosed({x=pos.x,y=pos.y+1,z=pos.z})
 | 
			
		||||
                else
 | 
			
		||||
                    return true
 | 
			
		||||
                end
 | 
			
		||||
            end
 | 
			
		||||
            return false
 | 
			
		||||
        end
 | 
			
		||||
    end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
-- isClosed flag, is 0 or 1 0 = open, 1 = closed
 | 
			
		||||
local function getClosed(pos)
 | 
			
		||||
    local isClosed = minetest.get_meta(pos):get_string('closed')
 | 
			
		||||
    if isClosed=='' then
 | 
			
		||||
	return calculateClosed(pos)
 | 
			
		||||
    else
 | 
			
		||||
        isClosed = tonumber(isClosed)
 | 
			
		||||
        -- may be closed or open (1 or 0)
 | 
			
		||||
        return isClosed == 1
 | 
			
		||||
    end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
local function addDoorNode(pos,def,isClosed)
 | 
			
		||||
    minetest.set_node(pos, def)
 | 
			
		||||
    minetest.get_meta(pos):set_int('closed', isClosed and 1 or 0)
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
local door_model_list = {
 | 
			
		||||
	{	name = "closet_mahogany",
 | 
			
		||||
		description = N_("Mahogany Closet Door (@1 opening)"),
 | 
			
		||||
		mesh = "homedecor_door_closet.obj"
 | 
			
		||||
	},
 | 
			
		||||
 | 
			
		||||
	{	name = "closet_oak",
 | 
			
		||||
		description = N_("Oak Closet Door (@1 opening)"),
 | 
			
		||||
		mesh = "homedecor_door_closet.obj"
 | 
			
		||||
	},
 | 
			
		||||
 | 
			
		||||
	{	name = "exterior_fancy",
 | 
			
		||||
		description = N_("Fancy Wood/Glass Door (@1 opening)"),
 | 
			
		||||
		mesh = "homedecor_door_fancy.obj",
 | 
			
		||||
		tiles = {
 | 
			
		||||
			"homedecor_door_exterior_fancy.png",
 | 
			
		||||
			"homedecor_door_exterior_fancy_insert.png"
 | 
			
		||||
		},
 | 
			
		||||
		usealpha = true
 | 
			
		||||
	},
 | 
			
		||||
 | 
			
		||||
	{	name = "glass",
 | 
			
		||||
		description = N_("Glass Office Door (@1 opening)"),
 | 
			
		||||
		mesh = "homedecor_door_plain.obj"
 | 
			
		||||
	},
 | 
			
		||||
 | 
			
		||||
	{	name = "wood_glass_oak",
 | 
			
		||||
		description = N_("Glass and Wood, Oak-colored (@1 opening)"),
 | 
			
		||||
		mesh = "homedecor_door_wood_glass.obj",
 | 
			
		||||
		tiles = {
 | 
			
		||||
			"homedecor_door_wood_glass_oak.png",
 | 
			
		||||
			"homedecor_door_wood_glass_insert.png",
 | 
			
		||||
		}
 | 
			
		||||
	},
 | 
			
		||||
 | 
			
		||||
	{	name = "wood_glass_mahogany",
 | 
			
		||||
		description = N_("Glass and Wood, Mahogany-colored (@1 opening)"),
 | 
			
		||||
		mesh = "homedecor_door_wood_glass.obj",
 | 
			
		||||
		tiles = {
 | 
			
		||||
			"homedecor_door_wood_glass_mahogany.png",
 | 
			
		||||
			"homedecor_door_wood_glass_insert.png",
 | 
			
		||||
		}
 | 
			
		||||
	},
 | 
			
		||||
 | 
			
		||||
	{	name = "wood_glass_white",
 | 
			
		||||
		description = N_("Glass and Wood, White (@1 opening)"),
 | 
			
		||||
		mesh = "homedecor_door_wood_glass.obj",
 | 
			
		||||
		tiles = {
 | 
			
		||||
			"homedecor_door_wood_glass_white.png",
 | 
			
		||||
			"homedecor_door_wood_glass_insert.png",
 | 
			
		||||
		}
 | 
			
		||||
	},
 | 
			
		||||
 | 
			
		||||
	{	name = "wood_plain",
 | 
			
		||||
		description = N_("Plain Wooden Door (@1 opening)"),
 | 
			
		||||
		mesh = "homedecor_door_plain.obj"
 | 
			
		||||
	},
 | 
			
		||||
 | 
			
		||||
	{	name = "bedroom",
 | 
			
		||||
		description = N_("White Bedroom Door (@1 opening)"),
 | 
			
		||||
		mesh = "homedecor_door_plain.obj"
 | 
			
		||||
	},
 | 
			
		||||
 | 
			
		||||
	{	name = "wrought_iron",
 | 
			
		||||
		description = N_("Wrought Iron Gate/Door (@1 opening)"),
 | 
			
		||||
		mesh = "homedecor_door_wrought_iron.obj"
 | 
			
		||||
	},
 | 
			
		||||
 | 
			
		||||
	{	name = "woodglass",
 | 
			
		||||
		description = N_("Wooden door with glass insert (@1 opening)"),
 | 
			
		||||
		mesh = "homedecor_door_woodglass_typea.obj",
 | 
			
		||||
		tiles = {
 | 
			
		||||
			"homedecor_door_woodglass_typea.png",
 | 
			
		||||
			"homedecor_door_woodglass_typea_insert.png",
 | 
			
		||||
		},
 | 
			
		||||
		usealpha = true
 | 
			
		||||
	},
 | 
			
		||||
 | 
			
		||||
	{	name = "woodglass2",
 | 
			
		||||
		description = N_("Wooden door with glass insert, type 2 (@1 opening)"),
 | 
			
		||||
		mesh = "homedecor_door_plain.obj",
 | 
			
		||||
		usealpha = true
 | 
			
		||||
	},
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
local def_selbox = {
 | 
			
		||||
	type = "fixed",
 | 
			
		||||
	fixed = { -0.5, -0.5, 0.375, 0.5, 1.5, 0.5 }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
local sides = { N_("left"), N_("right") }
 | 
			
		||||
 | 
			
		||||
for i, side in ipairs(sides) do
 | 
			
		||||
 | 
			
		||||
	for _, door_model in ipairs(door_model_list) do
 | 
			
		||||
 | 
			
		||||
		local doorname = door_model.name
 | 
			
		||||
 | 
			
		||||
		local selbox = door_model.selectbox or def_selbox
 | 
			
		||||
		local colbox = door_model.collisionbox or door_model.selectbox or def_selbox
 | 
			
		||||
		local mesh = door_model.mesh
 | 
			
		||||
		local groups = {snappy = 3}
 | 
			
		||||
 | 
			
		||||
		if side == "right" then
 | 
			
		||||
			mesh = string.gsub(door_model.mesh, ".obj", "_right.obj")
 | 
			
		||||
			groups = {snappy = 3, not_in_creative_inventory = 1}
 | 
			
		||||
		end
 | 
			
		||||
 | 
			
		||||
		minetest.register_node("homedecor:door_"..doorname.."_"..side, {
 | 
			
		||||
			description = S(door_model.description, S(side)),
 | 
			
		||||
			drawtype = "mesh",
 | 
			
		||||
			mesh = mesh,
 | 
			
		||||
			tiles = door_model.tiles or { "homedecor_door_"..doorname..".png" },
 | 
			
		||||
			inventory_image = "homedecor_door_"..doorname.."_inv.png",
 | 
			
		||||
			wield_image = "homedecor_door_"..doorname.."_inv.png",
 | 
			
		||||
			paramtype = "light",
 | 
			
		||||
			paramtype2 = "facedir",
 | 
			
		||||
			groups = groups,
 | 
			
		||||
			sounds = default.node_sound_wood_defaults(),
 | 
			
		||||
			use_texture_alpha = door_model.usealpha,
 | 
			
		||||
			selection_box = selbox,
 | 
			
		||||
			collision_box = colbox,
 | 
			
		||||
			on_rotate = screwdriver.rotate_simple,
 | 
			
		||||
			on_place = function(itemstack, placer, pointed_thing)
 | 
			
		||||
				return homedecor.stack_wing(itemstack, placer, pointed_thing,
 | 
			
		||||
					"homedecor:door_"..doorname.."_left", "air",
 | 
			
		||||
					"homedecor:door_"..doorname.."_right", "air")
 | 
			
		||||
			end,
 | 
			
		||||
			on_construct = function(pos)
 | 
			
		||||
				minetest.get_meta(pos):set_int("closed", 1)
 | 
			
		||||
			end,
 | 
			
		||||
			on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
 | 
			
		||||
				homedecor.flip_door(pos, node, clicker, doorname, side)
 | 
			
		||||
				return itemstack
 | 
			
		||||
			end,
 | 
			
		||||
		    -- both left and right doors may be used for open or closed doors
 | 
			
		||||
		    -- so they have to have both action_on and action_off and just
 | 
			
		||||
		    -- check when that action is invoked if to continue
 | 
			
		||||
 | 
			
		||||
		    on_punch = function(pos, node, puncher)
 | 
			
		||||
		        minetest.get_meta(pos):set_string('closed',nil)
 | 
			
		||||
		    end,
 | 
			
		||||
			drop = "homedecor:door_"..doorname.."_left",
 | 
			
		||||
		    mesecons = {
 | 
			
		||||
		        effector = {
 | 
			
		||||
		            action_on = function(pos,node)
 | 
			
		||||
		                local isClosed = getClosed(pos)
 | 
			
		||||
		                if isClosed then
 | 
			
		||||
		                    homedecor.flip_door(pos,node,nil,doorname,side,isClosed)
 | 
			
		||||
		                end
 | 
			
		||||
		            end,
 | 
			
		||||
		            action_off = function(pos,node)
 | 
			
		||||
		                local isClosed = getClosed(pos)
 | 
			
		||||
		                if not isClosed then
 | 
			
		||||
		                    homedecor.flip_door(pos,node,nil,doorname,side,isClosed)
 | 
			
		||||
		                end
 | 
			
		||||
		            end
 | 
			
		||||
		        }
 | 
			
		||||
		    }
 | 
			
		||||
		})
 | 
			
		||||
 | 
			
		||||
		minetest.register_alias("homedecor:door_"..doorname.."_top_"..side, "air")
 | 
			
		||||
		minetest.register_alias("homedecor:door_"..doorname.."_bottom_"..side, "homedecor:door_"..doorname.."_"..side)
 | 
			
		||||
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
	minetest.register_alias("homedecor:door_wood_glass_top_"..side, "air")
 | 
			
		||||
	minetest.register_alias("homedecor:door_wood_glass_bottom_"..side, "homedecor:door_wood_glass_oak_"..side)
 | 
			
		||||
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
-- Gates
 | 
			
		||||
 | 
			
		||||
local gate_list = {
 | 
			
		||||
	{ "picket",          S("Unpainted Picket Fence Gate") },
 | 
			
		||||
	{ "picket_white",    S("White Picket Fence Gate")     },
 | 
			
		||||
	{ "barbed_wire",     S("Barbed Wire Fence Gate")      },
 | 
			
		||||
	{ "chainlink",       S("Chainlink Fence Gate")        },
 | 
			
		||||
	{ "half_door",       S("\"Half\" Door")               },
 | 
			
		||||
	{ "half_door_white", S("\"Half\" Door (white)")       }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
local gate_models_closed = {
 | 
			
		||||
	{{ -0.5, -0.5, 0.498, 0.5, 0.5, 0.498 }},
 | 
			
		||||
 | 
			
		||||
	{{ -0.5, -0.5, 0.498, 0.5, 0.5, 0.498 }},
 | 
			
		||||
 | 
			
		||||
	{{ -8/16, -8/16, 6/16, -6/16,  8/16,  8/16 },	-- left post
 | 
			
		||||
	 {  6/16, -8/16, 6/16,  8/16,  8/16,  8/16 },	-- right post
 | 
			
		||||
	 { -8/16,  7/16, 13/32, 8/16,  8/16, 15/32 },	-- top piece
 | 
			
		||||
	 { -8/16, -8/16, 13/32, 8/16, -7/16, 15/32 },	-- bottom piece
 | 
			
		||||
	 { -6/16, -8/16,  7/16, 6/16,  8/16,  7/16 }},	-- the wire
 | 
			
		||||
 | 
			
		||||
	{{ -8/16, -8/16,  6/16, -7/16,  8/16,  8/16 },	-- left post
 | 
			
		||||
	 {  6/16, -8/16,  6/16,  8/16,  8/16,  8/16 },	-- right post
 | 
			
		||||
	 { -8/16,  7/16, 13/32,  8/16,  8/16, 15/32 },	-- top piece
 | 
			
		||||
	 { -8/16, -8/16, 13/32,  8/16, -7/16, 15/32 },	-- bottom piece
 | 
			
		||||
	 { -8/16, -8/16,  7/16,  8/16,  8/16,  7/16 },	-- the chainlink itself
 | 
			
		||||
	 { -8/16, -3/16,  6/16, -6/16,  3/16,  8/16 }},	-- the lump representing the lock
 | 
			
		||||
 | 
			
		||||
	{{ -8/16, -8/16, 6/16, 8/16, 8/16, 8/16 }}, -- the whole door :P
 | 
			
		||||
 | 
			
		||||
	{{ -8/16, -8/16, 6/16, 8/16, 8/16, 8/16 }}, -- the whole door :P
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
local gate_models_open = {
 | 
			
		||||
	{{ 0.498, -0.5, -0.5, 0.498, 0.5, 0.5 }},
 | 
			
		||||
 | 
			
		||||
	{{ 0.498, -0.5, -0.5, 0.498, 0.5, 0.5 }},
 | 
			
		||||
 | 
			
		||||
	{{  6/16, -8/16, -8/16,  8/16,  8/16, -6/16 },	-- left post
 | 
			
		||||
	 {  6/16, -8/16,  6/16,  8/16,  8/16,  8/16 },	-- right post
 | 
			
		||||
	 { 13/32,  7/16, -8/16, 15/32,  8/16,  8/16 },	-- top piece
 | 
			
		||||
	 { 13/32, -8/16, -8/16, 15/32, -7/16,  8/16 },	-- bottom piece
 | 
			
		||||
	 {  7/16, -8/16, -6/16,  7/16,  8/16,  6/16 }},	-- the wire
 | 
			
		||||
 | 
			
		||||
	{{  6/16, -8/16, -8/16,  8/16,  8/16, -7/16 },	-- left post
 | 
			
		||||
	 {  6/16, -8/16,  6/16,  8/16,  8/16,  8/16 },	-- right post
 | 
			
		||||
	 { 13/32,  7/16, -8/16, 15/32,  8/16,  8/16 },	-- top piece
 | 
			
		||||
	 { 13/32, -8/16, -8/16, 15/32, -7/16,  8/16 },	-- bottom piece
 | 
			
		||||
	 {  7/16, -8/16, -8/16,  7/16,  8/16,  8/16 },	-- the chainlink itself
 | 
			
		||||
	 {  6/16, -3/16, -8/16,  8/16,  3/16, -6/16 }},	-- the lump representing the lock
 | 
			
		||||
 | 
			
		||||
	{{ 6/16, -8/16, -8/16, 8/16, 8/16, 8/16 }}, -- the whole door :P
 | 
			
		||||
 | 
			
		||||
	{{ 6/16, -8/16, -8/16, 8/16, 8/16, 8/16 }}, -- the whole door :P
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
for i, g in ipairs(gate_list) do
 | 
			
		||||
 | 
			
		||||
	local gate, gatedesc = unpack(g)
 | 
			
		||||
 | 
			
		||||
	local tiles = {
 | 
			
		||||
		"homedecor_gate_"..gate.."_tb.png",
 | 
			
		||||
		"homedecor_gate_"..gate.."_tb.png",
 | 
			
		||||
		"homedecor_gate_"..gate.."_lr.png",
 | 
			
		||||
		"homedecor_gate_"..gate.."_lr.png",
 | 
			
		||||
		"homedecor_gate_"..gate.."_fb.png^[transformFX",
 | 
			
		||||
		"homedecor_gate_"..gate.."_fb.png"
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if gate == "barbed_wire" then
 | 
			
		||||
		tiles = {
 | 
			
		||||
			"homedecor_gate_barbed_wire_edges.png",
 | 
			
		||||
			"homedecor_gate_barbed_wire_edges.png",
 | 
			
		||||
			"homedecor_gate_barbed_wire_edges.png",
 | 
			
		||||
			"homedecor_gate_barbed_wire_edges.png",
 | 
			
		||||
			"homedecor_gate_barbed_wire_fb.png^[transformFX",
 | 
			
		||||
			"homedecor_gate_barbed_wire_fb.png"
 | 
			
		||||
		}
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
	if gate == "picket" or gate == "picket_white" then
 | 
			
		||||
		tiles = {
 | 
			
		||||
			"homedecor_blanktile.png",
 | 
			
		||||
			"homedecor_blanktile.png",
 | 
			
		||||
			"homedecor_blanktile.png",
 | 
			
		||||
			"homedecor_blanktile.png",
 | 
			
		||||
			"homedecor_gate_"..gate.."_back.png",
 | 
			
		||||
			"homedecor_gate_"..gate.."_front.png"
 | 
			
		||||
		}
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
    local def = {
 | 
			
		||||
		drawtype = "nodebox",
 | 
			
		||||
		description = gatedesc,
 | 
			
		||||
		tiles = tiles,
 | 
			
		||||
		paramtype = "light",
 | 
			
		||||
		groups = {snappy=3},
 | 
			
		||||
		sounds = default.node_sound_wood_defaults(),
 | 
			
		||||
		paramtype2 = "facedir",
 | 
			
		||||
		selection_box = {
 | 
			
		||||
			type = "fixed",
 | 
			
		||||
			fixed = { -0.5, -0.5, 0.4, 0.5, 0.5, 0.5 }
 | 
			
		||||
		},
 | 
			
		||||
		node_box = {
 | 
			
		||||
			type = "fixed",
 | 
			
		||||
			fixed = gate_models_closed[i]
 | 
			
		||||
		},
 | 
			
		||||
		on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
 | 
			
		||||
			homedecor.flip_gate(pos, node, clicker, gate, "closed")
 | 
			
		||||
			return itemstack
 | 
			
		||||
		end,
 | 
			
		||||
        mesecons = {
 | 
			
		||||
            effector = {
 | 
			
		||||
                action_on = function(pos,node) homedecor.flip_gate(pos,node,nil,gate, "closed") end
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
    -- gates when placed default to closed, closed.
 | 
			
		||||
 | 
			
		||||
	minetest.register_node("homedecor:gate_"..gate.."_closed", def)
 | 
			
		||||
 | 
			
		||||
    -- this is either a terrible idea or a great one
 | 
			
		||||
    def = table.copy(def)
 | 
			
		||||
    def.groups.not_in_creative_inventory = 1
 | 
			
		||||
    def.selection_box.fixed = { 0.4, -0.5, -0.5, 0.5, 0.5, 0.5 }
 | 
			
		||||
    def.node_box.fixed = gate_models_open[i]
 | 
			
		||||
	def.tiles = {
 | 
			
		||||
		tiles[1].."^[transformR90",
 | 
			
		||||
		tiles[2].."^[transformR270",
 | 
			
		||||
		tiles[6],
 | 
			
		||||
		tiles[5],
 | 
			
		||||
		tiles[4],
 | 
			
		||||
		tiles[3]
 | 
			
		||||
	}
 | 
			
		||||
    def.drop = "homedecor:gate_"..gate.."_closed"
 | 
			
		||||
	def.on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
 | 
			
		||||
        homedecor.flip_gate(pos, node, clicker, gate, "open")
 | 
			
		||||
        return itemstack
 | 
			
		||||
	end
 | 
			
		||||
    def.mesecons.effector = {
 | 
			
		||||
        action_off = function(pos,node) homedecor.flip_gate(pos,node,nil,gate, "open") end
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
	minetest.register_node("homedecor:gate_"..gate.."_open", def)
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
minetest.register_alias("homedecor:fence_barbed_wire_gate_open",    "homedecor:gate_barbed_wire_open")
 | 
			
		||||
minetest.register_alias("homedecor:fence_barbed_wire_gate_closed",  "homedecor:gate_barbed_wire_closed")
 | 
			
		||||
minetest.register_alias("homedecor:fence_chainlink_gate_open",      "homedecor:gate_chainlink_open")
 | 
			
		||||
minetest.register_alias("homedecor:fence_chainlink_gate_closed",    "homedecor:gate_chainlink_closed")
 | 
			
		||||
minetest.register_alias("homedecor:fence_picket_gate_open",         "homedecor:gate_picket_open")
 | 
			
		||||
minetest.register_alias("homedecor:fence_picket_gate_closed",       "homedecor:gate_picket_closed")
 | 
			
		||||
minetest.register_alias("homedecor:fence_picket_gate_white_open",   "homedecor:gate_picket_white_open")
 | 
			
		||||
minetest.register_alias("homedecor:fence_picket_gate_white_closed", "homedecor:gate_picket_white_closed")
 | 
			
		||||
 | 
			
		||||
-- to open a door, you switch left for right and subtract from param2, or vice versa right for left
 | 
			
		||||
-- that is to say open "right" doors become left door nodes, and open left doors right door nodes.
 | 
			
		||||
-- also adjusting param2 so the node is at 90 degrees.
 | 
			
		||||
 | 
			
		||||
function homedecor.flip_door(pos, node, player, name, side, isClosed)
 | 
			
		||||
    if isClosed == nil then
 | 
			
		||||
        isClosed = getClosed(pos)
 | 
			
		||||
    end
 | 
			
		||||
    -- this is where we swap the isClosed status!
 | 
			
		||||
    -- i.e. if isClosed, we're adding an open door
 | 
			
		||||
    -- and if not isClosed, a closed door
 | 
			
		||||
    isClosed = not isClosed
 | 
			
		||||
 | 
			
		||||
	local rside
 | 
			
		||||
	local nfdir
 | 
			
		||||
	local ofdir = node.param2 or 0
 | 
			
		||||
	if side == "left" then
 | 
			
		||||
		rside = "right"
 | 
			
		||||
		nfdir=ofdir - 1
 | 
			
		||||
		if nfdir < 0 then nfdir = 3 end
 | 
			
		||||
	else
 | 
			
		||||
		rside = "left"
 | 
			
		||||
		nfdir=ofdir + 1
 | 
			
		||||
		if nfdir > 3 then nfdir = 0 end
 | 
			
		||||
	end
 | 
			
		||||
	local sound = isClosed and 'close' or 'open'
 | 
			
		||||
	minetest.sound_play("homedecor_door_"..sound, {
 | 
			
		||||
		pos=pos,
 | 
			
		||||
        max_hear_distance = 5,
 | 
			
		||||
		gain = 2,
 | 
			
		||||
	})
 | 
			
		||||
    -- XXX: does the top half have to remember open/closed too?
 | 
			
		||||
	minetest.set_node({x=pos.x, y=pos.y+1, z=pos.z}, { name =  "homedecor:door_"..name.."_top_"..rside, param2=nfdir})
 | 
			
		||||
 | 
			
		||||
    addDoorNode(pos,{ name = "homedecor:door_"..name.."_bottom_"..rside, param2=nfdir },isClosed)
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
function homedecor.flip_gate(pos, node, player, gate, oc)
 | 
			
		||||
    local isClosed = getClosed(pos);
 | 
			
		||||
    minetest.sound_play("homedecor_gate_open_close", {
 | 
			
		||||
		pos=pos,
 | 
			
		||||
		max_hear_distance = 5,
 | 
			
		||||
		gain = 2,
 | 
			
		||||
	})
 | 
			
		||||
 | 
			
		||||
	local fdir = node.param2 or 0
 | 
			
		||||
 | 
			
		||||
    -- since right facing gates use "open" nodes for closed, we need an
 | 
			
		||||
    -- isClosed flag to tell if it's "really" closed.
 | 
			
		||||
 | 
			
		||||
	local gateresult
 | 
			
		||||
	if oc == "closed" then
 | 
			
		||||
		gateresult = "homedecor:gate_"..gate.."_open"
 | 
			
		||||
	else
 | 
			
		||||
		gateresult = "homedecor:gate_"..gate.."_closed"
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
    local def = {name=gateresult, param2=fdir}
 | 
			
		||||
 | 
			
		||||
    addDoorNode(pos, def, isClosed)
 | 
			
		||||
 | 
			
		||||
    -- the following opens and closes gates below and above in sync with this one
 | 
			
		||||
    -- (without three gate open/close sounds)
 | 
			
		||||
 | 
			
		||||
    local above = {x=pos.x, y=pos.y+1, z=pos.z}
 | 
			
		||||
    local below = {x=pos.x, y=pos.y-1, z=pos.z}
 | 
			
		||||
    local nodeabove = minetest.get_node(above)
 | 
			
		||||
    local nodebelow = minetest.get_node(below)
 | 
			
		||||
 | 
			
		||||
	if string.find(nodeabove.name, "homedecor:gate_"..gate) then
 | 
			
		||||
        addDoorNode(above, def, isClosed)
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
	if string.find(nodebelow.name, "homedecor:gate_"..gate) then
 | 
			
		||||
        addDoorNode(below, def, isClosed)
 | 
			
		||||
	end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
-- Japanese-style wood/paper wall pieces and door
 | 
			
		||||
 | 
			
		||||
local jp_cbox = {
 | 
			
		||||
	type = "fixed",
 | 
			
		||||
	fixed = {-0.5, -0.5, 0, 0.5, 0.5, 0.0625},
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
minetest.register_node("homedecor:japanese_wall_top", {
 | 
			
		||||
	description = S("Japanese wall (top)"),
 | 
			
		||||
	drawtype = "mesh",
 | 
			
		||||
	mesh = "homedecor_wall_japanese_top.obj",
 | 
			
		||||
	tiles = {
 | 
			
		||||
		homedecor.lux_wood,
 | 
			
		||||
		"homedecor_japanese_paper.png"
 | 
			
		||||
	},
 | 
			
		||||
	paramtype = "light",
 | 
			
		||||
	paramtype2 = "facedir",
 | 
			
		||||
	groups = {snappy=3},
 | 
			
		||||
	selection_box = jp_cbox,
 | 
			
		||||
	collision_box = jp_cbox,
 | 
			
		||||
	sounds = default.node_sound_wood_defaults(),
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_node("homedecor:japanese_wall_middle", {
 | 
			
		||||
	description = S("Japanese wall"),
 | 
			
		||||
	drawtype = "mesh",
 | 
			
		||||
	mesh = "homedecor_wall_japanese_middle.obj",
 | 
			
		||||
	tiles = {
 | 
			
		||||
		homedecor.lux_wood,
 | 
			
		||||
		"homedecor_japanese_paper.png"
 | 
			
		||||
	},
 | 
			
		||||
	paramtype = "light",
 | 
			
		||||
	paramtype2 = "facedir",
 | 
			
		||||
	groups = {snappy=3},
 | 
			
		||||
	selection_box = jp_cbox,
 | 
			
		||||
	collision_box = jp_cbox,
 | 
			
		||||
	sounds = default.node_sound_wood_defaults(),
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_node("homedecor:japanese_wall_bottom", {
 | 
			
		||||
	description = S("Japanese wall (bottom)"),
 | 
			
		||||
	drawtype = "mesh",
 | 
			
		||||
	mesh = "homedecor_wall_japanese_bottom.obj",
 | 
			
		||||
	tiles = {
 | 
			
		||||
		homedecor.lux_wood,
 | 
			
		||||
		"homedecor_japanese_paper.png"
 | 
			
		||||
	},
 | 
			
		||||
	paramtype = "light",
 | 
			
		||||
	paramtype2 = "facedir",
 | 
			
		||||
	groups = {snappy=3},
 | 
			
		||||
	selection_box = jp_cbox,
 | 
			
		||||
	collision_box = jp_cbox,
 | 
			
		||||
	sounds = default.node_sound_wood_defaults(),
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_node("homedecor:tatami_mat", {
 | 
			
		||||
	tiles = {
 | 
			
		||||
		"homedecor_tatami.png",
 | 
			
		||||
		"homedecor_tatami.png",
 | 
			
		||||
		"homedecor_tatami.png",
 | 
			
		||||
		"homedecor_tatami.png",
 | 
			
		||||
		"homedecor_tatami.png",
 | 
			
		||||
		"homedecor_tatami.png"
 | 
			
		||||
	},
 | 
			
		||||
	description = S("Japanese tatami"),
 | 
			
		||||
	drawtype = "nodebox",
 | 
			
		||||
	paramtype = "light",
 | 
			
		||||
	groups = {snappy=3},
 | 
			
		||||
	node_box = {
 | 
			
		||||
		type = "fixed",
 | 
			
		||||
		fixed = {
 | 
			
		||||
			{-0.5, -0.5, -0.5, 0.5, -0.4375, 0.5},
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
homedecor.register("door_japanese_closed", {
 | 
			
		||||
	description = S("Japanese-style door"),
 | 
			
		||||
	inventory_image = "homedecor_door_japanese_inv.png",
 | 
			
		||||
	tiles = {
 | 
			
		||||
		homedecor.lux_wood,
 | 
			
		||||
		"homedecor_japanese_paper.png"
 | 
			
		||||
	},
 | 
			
		||||
	mesh = "homedecor_door_japanese_closed.obj",
 | 
			
		||||
	groups = { snappy = 3 },
 | 
			
		||||
	sounds = default.node_sound_wood_defaults(),
 | 
			
		||||
	selection_box = {
 | 
			
		||||
		type = "fixed",
 | 
			
		||||
		fixed = {-0.5, -0.5, 0, 0.5, 1.5, 0.0625},
 | 
			
		||||
	},
 | 
			
		||||
	collision_box = {
 | 
			
		||||
		type = "fixed",
 | 
			
		||||
		fixed = {-0.5, -0.5, -0.0625, 0.5, 1.5, 0},
 | 
			
		||||
	},
 | 
			
		||||
	expand = { top = "placeholder" },
 | 
			
		||||
	on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
 | 
			
		||||
		minetest.set_node(pos, {name = "homedecor:door_japanese_open", param2 = node.param2})
 | 
			
		||||
		return itemstack
 | 
			
		||||
	end
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
homedecor.register("door_japanese_open", {
 | 
			
		||||
	tiles = {
 | 
			
		||||
		homedecor.lux_wood,
 | 
			
		||||
		"homedecor_japanese_paper.png"
 | 
			
		||||
	},
 | 
			
		||||
	mesh = "homedecor_door_japanese_open.obj",
 | 
			
		||||
	groups = { snappy = 3, not_in_creative_inventory = 1 },
 | 
			
		||||
	sounds = default.node_sound_wood_defaults(),
 | 
			
		||||
	on_rotate = screwdriver.disallow,
 | 
			
		||||
	selection_box = {
 | 
			
		||||
		type = "fixed",
 | 
			
		||||
		fixed = {-1.5, -0.5, -0.0625, 0.5, 1.5, 0},
 | 
			
		||||
	},
 | 
			
		||||
	collision_box = {
 | 
			
		||||
		type = "fixed",
 | 
			
		||||
		fixed = {-1.5, -0.5, -0.0625, -0.5, 1.5, 0},
 | 
			
		||||
	},
 | 
			
		||||
	expand = { top = "placeholder" },
 | 
			
		||||
	on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
 | 
			
		||||
		minetest.set_node(pos, {name = "homedecor:door_japanese_closed", param2 = node.param2})
 | 
			
		||||
		return itemstack
 | 
			
		||||
	end,
 | 
			
		||||
	drop = "homedecor:door_japanese_closed",
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_alias("homedecor:jpn_door_top", "air")
 | 
			
		||||
minetest.register_alias("homedecor:jpn_door_bottom", "homedecor:door_japanese_closed")
 | 
			
		||||
 | 
			
		||||
minetest.register_alias("homedecor:jpn_door_top_open", "air")
 | 
			
		||||
minetest.register_alias("homedecor:jpn_door_bottom_open", "homedecor:door_japanese_open")
 | 
			
		||||
@@ -1,157 +0,0 @@
 | 
			
		||||
-- Various home electronics
 | 
			
		||||
 | 
			
		||||
local S = homedecor_i18n.gettext
 | 
			
		||||
 | 
			
		||||
homedecor.register("speaker", {
 | 
			
		||||
	description = S("Large Stereo Speaker"),
 | 
			
		||||
	mesh="homedecor_speaker_large.obj",
 | 
			
		||||
	tiles = {
 | 
			
		||||
		"homedecor_speaker_sides.png",
 | 
			
		||||
		"homedecor_speaker_front.png"
 | 
			
		||||
	},
 | 
			
		||||
	groups = { snappy = 3 },
 | 
			
		||||
	sounds = default.node_sound_wood_defaults(),
 | 
			
		||||
	on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
 | 
			
		||||
		minetest.set_node(pos, {name = "homedecor:speaker_open", param2 = node.param2})
 | 
			
		||||
	end
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
homedecor.register("speaker_open", {
 | 
			
		||||
	description = S("Large Stereo Speaker, open front"),
 | 
			
		||||
	mesh="homedecor_speaker_large_open.obj",
 | 
			
		||||
	tiles = {
 | 
			
		||||
		"homedecor_speaker_sides.png",
 | 
			
		||||
		"homedecor_speaker_driver.png",
 | 
			
		||||
		"homedecor_speaker_open_front.png",
 | 
			
		||||
		{ name = "homedecor_generic_metal.png", color = homedecor.color_black }
 | 
			
		||||
	},
 | 
			
		||||
	groups = { snappy = 3, not_in_creative_inventory=1 },
 | 
			
		||||
	sounds = default.node_sound_wood_defaults(),
 | 
			
		||||
	on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
 | 
			
		||||
		minetest.set_node(pos, {name = "homedecor:speaker", param2 = node.param2})
 | 
			
		||||
	end
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
local spk_cbox = {
 | 
			
		||||
	type = "fixed",
 | 
			
		||||
	fixed = { -3/16, -8/16, 1/16, 3/16, -2/16, 7/16 }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
homedecor.register("speaker_small", {
 | 
			
		||||
	description = S("Small Surround Speaker"),
 | 
			
		||||
	mesh="homedecor_speaker_small.obj",
 | 
			
		||||
	tiles = {
 | 
			
		||||
		"homedecor_speaker_sides.png",
 | 
			
		||||
		"homedecor_speaker_front.png"
 | 
			
		||||
	},
 | 
			
		||||
	selection_box = spk_cbox,
 | 
			
		||||
	walkable = false,
 | 
			
		||||
	groups = { snappy = 3 },
 | 
			
		||||
	sounds = default.node_sound_wood_defaults(),
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
homedecor.register("stereo", {
 | 
			
		||||
	description = S("Stereo Receiver"),
 | 
			
		||||
	tiles = { 'homedecor_stereo_top.png',
 | 
			
		||||
			'homedecor_stereo_bottom.png',
 | 
			
		||||
			'homedecor_stereo_left.png^[transformFX',
 | 
			
		||||
			'homedecor_stereo_left.png',
 | 
			
		||||
			'homedecor_stereo_back.png',
 | 
			
		||||
			'homedecor_stereo_front.png'},
 | 
			
		||||
	groups = { snappy = 3 },
 | 
			
		||||
	sounds = default.node_sound_wood_defaults(),
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
homedecor.register("projection_screen", {
 | 
			
		||||
	description = S("Projection Screen Material"),
 | 
			
		||||
	drawtype = 'signlike',
 | 
			
		||||
	tiles = { 'homedecor_projection_screen.png' },
 | 
			
		||||
	wield_image = 'homedecor_projection_screen_inv.png',
 | 
			
		||||
	inventory_image = 'homedecor_projection_screen_inv.png',
 | 
			
		||||
	walkable = false,
 | 
			
		||||
	groups = { snappy = 3 },
 | 
			
		||||
	sounds = default.node_sound_leaves_defaults(),
 | 
			
		||||
	paramtype2 = 'wallmounted',
 | 
			
		||||
	selection_box = {
 | 
			
		||||
		type = "wallmounted",
 | 
			
		||||
		--wall_side = = <default>
 | 
			
		||||
	},
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
homedecor.register("television", {
 | 
			
		||||
	description = S("Small CRT Television"),
 | 
			
		||||
	tiles = { 'homedecor_television_top.png',
 | 
			
		||||
		  'homedecor_television_bottom.png',
 | 
			
		||||
		  'homedecor_television_left.png^[transformFX',
 | 
			
		||||
		  'homedecor_television_left.png',
 | 
			
		||||
		  'homedecor_television_back.png',
 | 
			
		||||
		   { name="homedecor_television_front_animated.png",
 | 
			
		||||
			  animation={
 | 
			
		||||
				type="vertical_frames",
 | 
			
		||||
				aspect_w=16,
 | 
			
		||||
				aspect_h=16,
 | 
			
		||||
				length=80.0
 | 
			
		||||
			  }
 | 
			
		||||
		   }
 | 
			
		||||
	},
 | 
			
		||||
	light_source = default.LIGHT_MAX - 1,
 | 
			
		||||
	groups = { snappy = 3 },
 | 
			
		||||
	sounds = default.node_sound_wood_defaults(),
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
homedecor.register("dvd_vcr", {
 | 
			
		||||
	description = S("DVD and VCR"),
 | 
			
		||||
	tiles = {
 | 
			
		||||
		"homedecor_dvdvcr_top.png",
 | 
			
		||||
		"homedecor_dvdvcr_bottom.png",
 | 
			
		||||
		"homedecor_dvdvcr_sides.png",
 | 
			
		||||
		"homedecor_dvdvcr_sides.png^[transformFX",
 | 
			
		||||
		"homedecor_dvdvcr_back.png",
 | 
			
		||||
		"homedecor_dvdvcr_front.png",
 | 
			
		||||
	},
 | 
			
		||||
	inventory_image = "homedecor_dvdvcr_inv.png",
 | 
			
		||||
	node_box = {
 | 
			
		||||
		type = "fixed",
 | 
			
		||||
		fixed = {
 | 
			
		||||
			{-0.3125, -0.5, -0.25, 0.3125, -0.375, 0.1875},
 | 
			
		||||
			{-0.25, -0.5, -0.25, 0.25, -0.1875, 0.125},
 | 
			
		||||
		}
 | 
			
		||||
	},
 | 
			
		||||
	groups = { snappy = 3 },
 | 
			
		||||
	sounds = default.node_sound_wood_defaults(),
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
local tel_cbox = {
 | 
			
		||||
	type = "fixed",
 | 
			
		||||
	fixed = { -0.25, -0.5, -0.1875, 0.25, -0.21, 0.15 }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
homedecor.register("telephone", {
 | 
			
		||||
	mesh = "homedecor_telephone.obj",
 | 
			
		||||
	tiles = {
 | 
			
		||||
		"homedecor_telephone_dial.png",
 | 
			
		||||
		"homedecor_telephone_base.png",
 | 
			
		||||
		"homedecor_telephone_handset.png",
 | 
			
		||||
		"homedecor_telephone_cord.png",
 | 
			
		||||
	},
 | 
			
		||||
	inventory_image = "homedecor_telephone_inv.png",
 | 
			
		||||
	description = S("Telephone"),
 | 
			
		||||
	groups = {snappy=3},
 | 
			
		||||
	selection_box = tel_cbox,
 | 
			
		||||
	walkable = false,
 | 
			
		||||
	sounds = default.node_sound_wood_defaults(),
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_abm({
 | 
			
		||||
	nodenames = "homedecor:telephone",
 | 
			
		||||
	label = "sfx",
 | 
			
		||||
	interval = 30,
 | 
			
		||||
	chance = 15,
 | 
			
		||||
	action = function(pos, node)
 | 
			
		||||
		minetest.sound_play("homedecor_telephone_ringing", {
 | 
			
		||||
			pos = pos,
 | 
			
		||||
			gain = 1.0,
 | 
			
		||||
			max_hear_distance = 5
 | 
			
		||||
		})
 | 
			
		||||
	end
 | 
			
		||||
})
 | 
			
		||||
@@ -1,228 +0,0 @@
 | 
			
		||||
 | 
			
		||||
local S = homedecor_i18n.gettext
 | 
			
		||||
 | 
			
		||||
local table_colors = {
 | 
			
		||||
	{ "",           S("Table"),           homedecor.plain_wood },
 | 
			
		||||
	{ "_mahogany",  S("Mahogany Table"),  homedecor.mahogany_wood },
 | 
			
		||||
	{ "_white",     S("White Table"),     homedecor.white_wood }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
for _, t in ipairs(table_colors) do
 | 
			
		||||
	local suffix, desc, texture = unpack(t)
 | 
			
		||||
 | 
			
		||||
	homedecor.register("table"..suffix, {
 | 
			
		||||
		description = desc,
 | 
			
		||||
		tiles = { texture },
 | 
			
		||||
		node_box = {
 | 
			
		||||
			type = "fixed",
 | 
			
		||||
			fixed = {
 | 
			
		||||
				{ -0.4, -0.5, -0.4, -0.3,  0.4, -0.3 },
 | 
			
		||||
				{  0.3, -0.5, -0.4,  0.4,  0.4, -0.3 },
 | 
			
		||||
				{ -0.4, -0.5,  0.3, -0.3,  0.4,  0.4 },
 | 
			
		||||
				{  0.3, -0.5,  0.3,  0.4,  0.4,  0.4 },
 | 
			
		||||
				{ -0.5,  0.4, -0.5,  0.5,  0.5,  0.5 },
 | 
			
		||||
				{ -0.4, -0.2, -0.3, -0.3, -0.1,  0.3 },
 | 
			
		||||
				{  0.3, -0.2, -0.4,  0.4, -0.1,  0.3 },
 | 
			
		||||
				{ -0.3, -0.2, -0.4,  0.4, -0.1, -0.3 },
 | 
			
		||||
				{ -0.3, -0.2,  0.3,  0.3, -0.1,  0.4 },
 | 
			
		||||
			},
 | 
			
		||||
		},
 | 
			
		||||
		groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
 | 
			
		||||
		sounds = default.node_sound_wood_defaults(),
 | 
			
		||||
	})
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
local kc_cbox = {
 | 
			
		||||
	type = "fixed",
 | 
			
		||||
	fixed = { -0.3125, -0.5, -0.3125, 0.3125, 0.5, 0.3125 },
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
local ac_cbox = {
 | 
			
		||||
	type = "fixed",
 | 
			
		||||
	fixed = {
 | 
			
		||||
		{-0.5, -0.5, -0.5, 0.5, 0, 0.5 },
 | 
			
		||||
		{-0.5, -0.5, 0.4, 0.5, 0.5, 0.5 }
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
homedecor.register("kitchen_chair_wood", {
 | 
			
		||||
	description = S("Kitchen chair"),
 | 
			
		||||
	mesh = "homedecor_kitchen_chair.obj",
 | 
			
		||||
	tiles = {
 | 
			
		||||
		homedecor.plain_wood,
 | 
			
		||||
		homedecor.plain_wood
 | 
			
		||||
	},
 | 
			
		||||
	inventory_image = "homedecor_chair_wood_inv.png",
 | 
			
		||||
	paramtype2 = "wallmounted",
 | 
			
		||||
	selection_box = kc_cbox,
 | 
			
		||||
	collision_box = kc_cbox,
 | 
			
		||||
	groups = {snappy=2,choppy=2,oddly_breakable_by_hand=2},
 | 
			
		||||
	sounds = default.node_sound_wood_defaults(),
 | 
			
		||||
	after_place_node = unifieddyes.fix_rotation_nsew,
 | 
			
		||||
	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 ?
 | 
			
		||||
		homedecor.sit(pos, node, clicker)
 | 
			
		||||
		return itemstack
 | 
			
		||||
	end
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
homedecor.register("kitchen_chair_padded", {
 | 
			
		||||
	description = S("Kitchen chair"),
 | 
			
		||||
	mesh = "homedecor_kitchen_chair.obj",
 | 
			
		||||
	tiles = {
 | 
			
		||||
		homedecor.plain_wood,
 | 
			
		||||
		"wool_white.png",
 | 
			
		||||
	},
 | 
			
		||||
	inventory_image = "homedecor_chair_padded_inv.png",
 | 
			
		||||
	paramtype2 = "colorwallmounted",
 | 
			
		||||
	palette = "unifieddyes_palette_colorwallmounted.png",
 | 
			
		||||
	selection_box = kc_cbox,
 | 
			
		||||
	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,
 | 
			
		||||
	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 ?
 | 
			
		||||
		homedecor.sit(pos, node, clicker)
 | 
			
		||||
		return itemstack
 | 
			
		||||
	end
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
homedecor.register("armchair", {
 | 
			
		||||
	description = S("Armchair"),
 | 
			
		||||
	mesh = "forniture_armchair.obj",
 | 
			
		||||
	tiles = {
 | 
			
		||||
		"wool_white.png",
 | 
			
		||||
		{ name = "wool_dark_grey.png", color = 0xffffffff },
 | 
			
		||||
		{ name = "default_wood.png", color = 0xffffffff }
 | 
			
		||||
	},
 | 
			
		||||
	inventory_image = "homedecor_armchair_inv.png",
 | 
			
		||||
	paramtype2 = "colorwallmounted",
 | 
			
		||||
	palette = "unifieddyes_palette_colorwallmounted.png",
 | 
			
		||||
	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,
 | 
			
		||||
	on_rotate = unifieddyes.fix_after_screwdriver_nsew,
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
local ob_cbox = {
 | 
			
		||||
	type = "fixed",
 | 
			
		||||
	fixed = { -0.5, -0.5, 0, 0.5, 0.5, 0.5 }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
minetest.register_node(":homedecor:openframe_bookshelf", {
 | 
			
		||||
	description = S("Bookshelf (open-frame)"),
 | 
			
		||||
	drawtype = "mesh",
 | 
			
		||||
	mesh = "homedecor_openframe_bookshelf.obj",
 | 
			
		||||
	tiles = {
 | 
			
		||||
		"homedecor_openframe_bookshelf_books.png",
 | 
			
		||||
		"default_wood.png"
 | 
			
		||||
	},
 | 
			
		||||
	groups = {choppy=3,oddly_breakable_by_hand=2,flammable=3},
 | 
			
		||||
	sounds = default.node_sound_wood_defaults(),
 | 
			
		||||
	paramtype = "light",
 | 
			
		||||
	paramtype2 = "facedir",
 | 
			
		||||
	selection_box = ob_cbox,
 | 
			
		||||
	collision_box = ob_cbox,
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
homedecor.register("wall_shelf", {
 | 
			
		||||
	description = S("Wall Shelf"),
 | 
			
		||||
	tiles = {
 | 
			
		||||
		"homedecor_wood_table_large_edges.png",
 | 
			
		||||
	},
 | 
			
		||||
	groups = { snappy = 3 },
 | 
			
		||||
	sounds = default.node_sound_wood_defaults(),
 | 
			
		||||
	node_box = {
 | 
			
		||||
		type = "fixed",
 | 
			
		||||
		fixed = {
 | 
			
		||||
			{-0.5, 0.4, 0.47, 0.5, 0.47, 0.5},
 | 
			
		||||
			{-0.5, 0.47, -0.1875, 0.5, 0.5, 0.5}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
-- Aliases for 3dforniture mod.
 | 
			
		||||
 | 
			
		||||
minetest.register_alias("3dforniture:table", "homedecor:table")
 | 
			
		||||
minetest.register_alias("3dforniture:chair", "homedecor:chair")
 | 
			
		||||
minetest.register_alias("3dforniture:armchair", "homedecor:armchair_black")
 | 
			
		||||
minetest.register_alias("homedecor:armchair", "homedecor:armchair_black")
 | 
			
		||||
 | 
			
		||||
minetest.register_alias('table', 'homedecor:table')
 | 
			
		||||
minetest.register_alias('chair', 'homedecor:chair')
 | 
			
		||||
minetest.register_alias('armchair', 'homedecor:armchair')
 | 
			
		||||
 | 
			
		||||
-- conversion to param2 colorization
 | 
			
		||||
 | 
			
		||||
homedecor.old_static_chairs = {}
 | 
			
		||||
 | 
			
		||||
for _, color in ipairs(lrfurn.colors) do
 | 
			
		||||
	table.insert(homedecor.old_static_chairs, "homedecor:chair_"..color)
 | 
			
		||||
	table.insert(homedecor.old_static_chairs, "homedecor:armchair_"..color)
 | 
			
		||||
end
 | 
			
		||||
table.insert(homedecor.old_static_chairs, "homedecor:chair")
 | 
			
		||||
 | 
			
		||||
minetest.register_lbm({
 | 
			
		||||
	name = "homedecor:convert_chairs",
 | 
			
		||||
	label = "Convert homedecor chairs to use param2 color",
 | 
			
		||||
	run_at_every_load = false,
 | 
			
		||||
	nodenames = homedecor.old_static_chairs,
 | 
			
		||||
	action = function(pos, node)
 | 
			
		||||
		local name = node.name
 | 
			
		||||
		local paletteidx = 0
 | 
			
		||||
		local color
 | 
			
		||||
		local a,b = string.find(name, "_")
 | 
			
		||||
 | 
			
		||||
		if a then
 | 
			
		||||
			color = string.sub(name, a+1)
 | 
			
		||||
 | 
			
		||||
			if color == "blue" then
 | 
			
		||||
				color = "medium_blue"
 | 
			
		||||
			elseif color == "violet" then
 | 
			
		||||
				color = "medium_violet"
 | 
			
		||||
			elseif color == "red" then
 | 
			
		||||
				color = "medium_red"
 | 
			
		||||
			elseif color == "black" then
 | 
			
		||||
				color = "dark_grey"
 | 
			
		||||
			end
 | 
			
		||||
 | 
			
		||||
			paletteidx = unifieddyes.getpaletteidx("unifieddyes:"..color, "wallmounted")
 | 
			
		||||
		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
 | 
			
		||||
 | 
			
		||||
		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
 | 
			
		||||
			newname = "homedecor:kitchen_chair_padded"
 | 
			
		||||
		end
 | 
			
		||||
 | 
			
		||||
		minetest.set_node(pos, { name = newname, param2 = param2 })
 | 
			
		||||
		local meta = minetest.get_meta(pos)
 | 
			
		||||
		if color then
 | 
			
		||||
			meta:set_string("dye", "unifieddyes:"..color)
 | 
			
		||||
		end
 | 
			
		||||
	end
 | 
			
		||||
})
 | 
			
		||||
@@ -1,226 +0,0 @@
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	output = "homedecor:table",
 | 
			
		||||
	recipe = {
 | 
			
		||||
		{ "group:wood","group:wood", "group:wood" },
 | 
			
		||||
		{ "group:stick", "", "group:stick" },
 | 
			
		||||
	},
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	type = "shapeless",
 | 
			
		||||
	output = "homedecor:table_mahogany",
 | 
			
		||||
	recipe = {
 | 
			
		||||
		"homedecor:table",
 | 
			
		||||
		"dye:brown",
 | 
			
		||||
	},
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	type = "shapeless",
 | 
			
		||||
	output = "homedecor:table_mahogany",
 | 
			
		||||
	recipe = {
 | 
			
		||||
		"homedecor:table",
 | 
			
		||||
		"unifieddyes:dark_orange",
 | 
			
		||||
	},
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	type = "shapeless",
 | 
			
		||||
	output = "homedecor:table_white",
 | 
			
		||||
	recipe = {
 | 
			
		||||
		"homedecor:table",
 | 
			
		||||
		"dye:white",
 | 
			
		||||
	},
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	type = "fuel",
 | 
			
		||||
	recipe = "homedecor:table",
 | 
			
		||||
	burntime = 30,
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	type = "fuel",
 | 
			
		||||
	recipe = "homedecor:table_mahogany",
 | 
			
		||||
	burntime = 30,
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	type = "fuel",
 | 
			
		||||
	recipe = "homedecor:table_white",
 | 
			
		||||
	burntime = 30,
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	output = "homedecor:kitchen_chair_wood 2",
 | 
			
		||||
	recipe = {
 | 
			
		||||
		{ "group:stick",""},
 | 
			
		||||
		{ "group:wood","group:wood" },
 | 
			
		||||
		{ "group:stick","group:stick" },
 | 
			
		||||
	},
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	output = "homedecor:armchair 2",
 | 
			
		||||
	recipe = {
 | 
			
		||||
	{ "wool:white",""},
 | 
			
		||||
	{ "group:wood","group:wood" },
 | 
			
		||||
	{ "wool:white","wool:white" },
 | 
			
		||||
	},
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	type = "shapeless",
 | 
			
		||||
	output = "homedecor:kitchen_chair_padded",
 | 
			
		||||
	recipe = {
 | 
			
		||||
		"homedecor:kitchen_chair_wood",
 | 
			
		||||
		"wool:white",
 | 
			
		||||
	},
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	type = "fuel",
 | 
			
		||||
	recipe = "homedecor:kitchen_chair_wood",
 | 
			
		||||
	burntime = 15,
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	type = "fuel",
 | 
			
		||||
	recipe = "homedecor:kitchen_chair_padded",
 | 
			
		||||
	burntime = 15,
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	type = "fuel",
 | 
			
		||||
	recipe = "homedecor:armchair",
 | 
			
		||||
	burntime = 30,
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	output = "homedecor:standing_lamp_off",
 | 
			
		||||
	recipe = {
 | 
			
		||||
		{"homedecor:table_lamp_off"},
 | 
			
		||||
		{"group:stick"},
 | 
			
		||||
		{"group:stick"},
 | 
			
		||||
	},
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	type = "fuel",
 | 
			
		||||
	recipe = "homedecor:table_lamp_off",
 | 
			
		||||
	burntime = 10,
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	output = "homedecor:table_lamp_off",
 | 
			
		||||
	recipe = {
 | 
			
		||||
		{ "wool:white", "default:torch", "wool:white"},
 | 
			
		||||
		{ "", "group:stick", ""},
 | 
			
		||||
		{ "", "stairs:slab_wood", "" },
 | 
			
		||||
	},
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	output = "homedecor:table_lamp_off",
 | 
			
		||||
	recipe = {
 | 
			
		||||
		{ "cottages:wool", "default:torch", "cottages:wool"},
 | 
			
		||||
		{ "", "group:stick", ""},
 | 
			
		||||
		{ "", "stairs:slab_wood", "" },
 | 
			
		||||
	},
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	output = "homedecor:standing_lamp_off",
 | 
			
		||||
	recipe = {
 | 
			
		||||
		{ "homedecor:table_lamp_off"},
 | 
			
		||||
		{ "group:stick"},
 | 
			
		||||
		{ "group:stick"},
 | 
			
		||||
	},
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	output = "homedecor:toilet",
 | 
			
		||||
	recipe = {
 | 
			
		||||
		{ "","","bucket:bucket_water"},
 | 
			
		||||
		{ "group:marble","group:marble", "group:marble" },
 | 
			
		||||
		{ "", "bucket:bucket_empty", "" },
 | 
			
		||||
	},
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	output = "homedecor:sink",
 | 
			
		||||
	recipe = {
 | 
			
		||||
		{ "group:marble","bucket:bucket_empty", "group:marble" },
 | 
			
		||||
	},
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	output = "homedecor:taps",
 | 
			
		||||
	recipe = {
 | 
			
		||||
		{ "default:steel_ingot","bucket:bucket_water", "default:steel_ingot" },
 | 
			
		||||
	},
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	output = "homedecor:taps_brass",
 | 
			
		||||
	recipe = {
 | 
			
		||||
		{ "technic:brass_ingot","bucket:bucket_water", "technic:brass_ingot" },
 | 
			
		||||
	},
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	output = "homedecor:shower_tray",
 | 
			
		||||
	recipe = {
 | 
			
		||||
		{ "group:marble","bucket:bucket_water", "group:marble" },
 | 
			
		||||
	},
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	output = "homedecor:shower_head",
 | 
			
		||||
	recipe = {
 | 
			
		||||
		{"default:steel_ingot", "bucket:bucket_water"},
 | 
			
		||||
	},
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	output = "homedecor:bathtub_clawfoot_brass_taps",
 | 
			
		||||
	recipe = {
 | 
			
		||||
		{ "homedecor:taps_brass", "", "" },
 | 
			
		||||
		{ "group:marble", "", "group:marble" },
 | 
			
		||||
		{"default:steel_ingot", "group:marble", "default:steel_ingot"},
 | 
			
		||||
	},
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	output = "homedecor:bathtub_clawfoot_chrome_taps",
 | 
			
		||||
	recipe = {
 | 
			
		||||
		{ "homedecor:taps", "", "" },
 | 
			
		||||
		{ "group:marble", "", "group:marble" },
 | 
			
		||||
		{"default:steel_ingot", "group:marble", "default:steel_ingot"},
 | 
			
		||||
	},
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	output = "homedecor:bars 6",
 | 
			
		||||
	recipe = {
 | 
			
		||||
		{ "default:steel_ingot","default:steel_ingot","default:steel_ingot" },
 | 
			
		||||
		{ "homedecor:pole_wrought_iron","homedecor:pole_wrought_iron","homedecor:pole_wrought_iron" },
 | 
			
		||||
	},
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	output = "homedecor:L_binding_bars 3",
 | 
			
		||||
	recipe = {
 | 
			
		||||
		{ "homedecor:bars","" },
 | 
			
		||||
		{ "homedecor:bars","homedecor:bars" },
 | 
			
		||||
	},
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	output = "homedecor:torch_wall 10",
 | 
			
		||||
	recipe = {
 | 
			
		||||
		{ "default:coal_lump" },
 | 
			
		||||
		{ "default:steel_ingot" },
 | 
			
		||||
	},
 | 
			
		||||
})
 | 
			
		||||
@@ -1,22 +0,0 @@
 | 
			
		||||
local handlerpath = homedecor.modpath .. "/handlers/"
 | 
			
		||||
 | 
			
		||||
-- nodebox arithmetics and helpers
 | 
			
		||||
-- (please keep non-generic nodeboxes with their node definition)
 | 
			
		||||
dofile(handlerpath.."nodeboxes.lua")
 | 
			
		||||
 | 
			
		||||
-- expand and unexpand decor
 | 
			
		||||
dofile(handlerpath.."expansion.lua")
 | 
			
		||||
 | 
			
		||||
-- register nodes that cook stuff
 | 
			
		||||
dofile(handlerpath.."furnaces.lua")
 | 
			
		||||
 | 
			
		||||
-- inventory related functionality, like initialization, ownership and spawning locked versions
 | 
			
		||||
dofile(handlerpath.."inventory.lua")
 | 
			
		||||
 | 
			
		||||
-- glue it all together into a registration function
 | 
			
		||||
dofile(handlerpath.."registration.lua")
 | 
			
		||||
 | 
			
		||||
-- some nodes have particle spawners
 | 
			
		||||
dofile(handlerpath.."water_particles.lua")
 | 
			
		||||
 | 
			
		||||
dofile(handlerpath.."sit.lua")
 | 
			
		||||
@@ -1,126 +0,0 @@
 | 
			
		||||
-- Home Decor mod by VanessaE
 | 
			
		||||
--
 | 
			
		||||
-- Mostly my own code, with bits and pieces lifted from Minetest's default
 | 
			
		||||
-- lua files and from ironzorg's flowers mod.  Many thanks to GloopMaster
 | 
			
		||||
-- for helping me figure out the inventories used in the nightstands/dressers.
 | 
			
		||||
--
 | 
			
		||||
-- The code for ovens, nightstands, refrigerators are basically modified
 | 
			
		||||
-- copies of the code for chests and furnaces.
 | 
			
		||||
 | 
			
		||||
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")
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
-- 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)
 | 
			
		||||
	-- most of this is copied from the rotate-and-place function in builtin
 | 
			
		||||
	local unode = core.get_node_or_nil(pointed_thing.under)
 | 
			
		||||
	if not unode then
 | 
			
		||||
		return
 | 
			
		||||
	end
 | 
			
		||||
	local undef = core.registered_nodes[unode.name]
 | 
			
		||||
	if undef and undef.on_rightclick then
 | 
			
		||||
		undef.on_rightclick(pointed_thing.under, unode, placer,
 | 
			
		||||
				itemstack, pointed_thing)
 | 
			
		||||
		return
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
	local above = pointed_thing.above
 | 
			
		||||
	local under = pointed_thing.under
 | 
			
		||||
	local iswall = (above.y == under.y)
 | 
			
		||||
	local isceiling = not iswall and (above.y < under.y)
 | 
			
		||||
	local anode = core.get_node_or_nil(above)
 | 
			
		||||
	if not anode then
 | 
			
		||||
		return
 | 
			
		||||
	end
 | 
			
		||||
	local pos = pointed_thing.above
 | 
			
		||||
	local node = anode
 | 
			
		||||
 | 
			
		||||
	if undef and undef.buildable_to then
 | 
			
		||||
		pos = pointed_thing.under
 | 
			
		||||
		node = unode
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
	if core.is_protected(pos, placer:get_player_name()) then
 | 
			
		||||
		core.record_protection_violation(pos,
 | 
			
		||||
				placer:get_player_name())
 | 
			
		||||
		return
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
	local ndef = core.registered_nodes[node.name]
 | 
			
		||||
	if not ndef or not ndef.buildable_to then
 | 
			
		||||
		return
 | 
			
		||||
	end
 | 
			
		||||
	return isceiling, pos
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
screwdriver = screwdriver or {}
 | 
			
		||||
 | 
			
		||||
homedecor.plain_wood    = { name = "homedecor_generic_wood_plain.png",  color = 0xffa76820 }
 | 
			
		||||
homedecor.mahogany_wood = { name = "homedecor_generic_wood_plain.png",  color = 0xff7d2506 }
 | 
			
		||||
homedecor.white_wood    = "homedecor_generic_wood_plain.png"
 | 
			
		||||
homedecor.dark_wood     = { name = "homedecor_generic_wood_plain.png",  color = 0xff39240f }
 | 
			
		||||
homedecor.lux_wood      = { name = "homedecor_generic_wood_luxury.png", color = 0xff643f23 }
 | 
			
		||||
 | 
			
		||||
homedecor.color_black     = 0xff303030
 | 
			
		||||
homedecor.color_dark_grey = 0xff606060
 | 
			
		||||
homedecor.color_med_grey  = 0xffa0a0a0
 | 
			
		||||
 | 
			
		||||
-- load different handler subsystems
 | 
			
		||||
dofile(modpath.."/handlers/init.lua")
 | 
			
		||||
 | 
			
		||||
-- load various other components
 | 
			
		||||
dofile(modpath.."/misc-nodes.lua")					-- the catch-all for all misc nodes
 | 
			
		||||
dofile(modpath.."/tables.lua")
 | 
			
		||||
dofile(modpath.."/electronics.lua")
 | 
			
		||||
dofile(modpath.."/shutters.lua")
 | 
			
		||||
 | 
			
		||||
dofile(modpath.."/roofing.lua")
 | 
			
		||||
 | 
			
		||||
dofile(modpath.."/foyer.lua")
 | 
			
		||||
 | 
			
		||||
dofile(modpath.."/doors_and_gates.lua")
 | 
			
		||||
 | 
			
		||||
dofile(modpath.."/fences.lua")
 | 
			
		||||
 | 
			
		||||
dofile(modpath.."/lighting.lua")
 | 
			
		||||
 | 
			
		||||
dofile(modpath.."/kitchen_appliances.lua")
 | 
			
		||||
dofile(modpath.."/kitchen_furniture.lua")
 | 
			
		||||
dofile(modpath.."/gastronomy.lua")
 | 
			
		||||
 | 
			
		||||
dofile(modpath.."/bathroom_furniture.lua")
 | 
			
		||||
dofile(modpath.."/bathroom_sanitation.lua")
 | 
			
		||||
 | 
			
		||||
dofile(modpath.."/bedroom.lua")
 | 
			
		||||
 | 
			
		||||
dofile(modpath.."/laundry.lua")
 | 
			
		||||
 | 
			
		||||
dofile(modpath.."/office.lua")
 | 
			
		||||
 | 
			
		||||
dofile(modpath.."/clocks.lua")
 | 
			
		||||
dofile(modpath.."/electrics.lua")
 | 
			
		||||
 | 
			
		||||
dofile(modpath.."/window_treatments.lua")
 | 
			
		||||
 | 
			
		||||
dofile(modpath.."/furniture.lua")
 | 
			
		||||
dofile(modpath.."/furniture_medieval.lua")
 | 
			
		||||
dofile(modpath.."/furniture_recipes.lua")
 | 
			
		||||
dofile(modpath.."/climate-control.lua")
 | 
			
		||||
 | 
			
		||||
dofile(modpath.."/cobweb.lua")
 | 
			
		||||
dofile(modpath.."/books.lua")
 | 
			
		||||
dofile(modpath.."/exterior.lua")
 | 
			
		||||
dofile(modpath.."/trash_cans.lua")
 | 
			
		||||
dofile(modpath.."/wardrobe.lua")
 | 
			
		||||
 | 
			
		||||
dofile(modpath.."/crafts.lua")
 | 
			
		||||
 | 
			
		||||
print("[HomeDecor] " .. S("Loaded!"))
 | 
			
		||||
@@ -1,256 +0,0 @@
 | 
			
		||||
-- This file supplies refrigerators
 | 
			
		||||
 | 
			
		||||
local S = homedecor_i18n.gettext
 | 
			
		||||
 | 
			
		||||
local function N_(x) return x end
 | 
			
		||||
 | 
			
		||||
-- steel-textured fridge
 | 
			
		||||
homedecor.register("refrigerator_steel", {
 | 
			
		||||
	mesh = "homedecor_refrigerator.obj",
 | 
			
		||||
	tiles = { "homedecor_refrigerator_steel.png" },
 | 
			
		||||
	inventory_image = "homedecor_refrigerator_steel_inv.png",
 | 
			
		||||
	description = S("Refrigerator (stainless steel)"),
 | 
			
		||||
	groups = {snappy=3},
 | 
			
		||||
	sounds = default.node_sound_stone_defaults(),
 | 
			
		||||
	selection_box = homedecor.nodebox.slab_y(2),
 | 
			
		||||
	collision_box = homedecor.nodebox.slab_y(2),
 | 
			
		||||
	expand = { top="placeholder" },
 | 
			
		||||
	infotext=S("Refrigerator"),
 | 
			
		||||
	inventory = {
 | 
			
		||||
		size=50,
 | 
			
		||||
		lockable=true,
 | 
			
		||||
	},
 | 
			
		||||
	on_rotate = screwdriver.rotate_simple
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
-- white, enameled fridge
 | 
			
		||||
homedecor.register("refrigerator_white", {
 | 
			
		||||
	mesh = "homedecor_refrigerator.obj",
 | 
			
		||||
	tiles = { "homedecor_refrigerator_white.png" },
 | 
			
		||||
	inventory_image = "homedecor_refrigerator_white_inv.png",
 | 
			
		||||
	description = S("Refrigerator"),
 | 
			
		||||
	groups = {snappy=3},
 | 
			
		||||
	selection_box = homedecor.nodebox.slab_y(2),
 | 
			
		||||
	collision_box = homedecor.nodebox.slab_y(2),
 | 
			
		||||
	sounds = default.node_sound_stone_defaults(),
 | 
			
		||||
	expand = { top="placeholder" },
 | 
			
		||||
	infotext=S("Refrigerator"),
 | 
			
		||||
	inventory = {
 | 
			
		||||
		size=50,
 | 
			
		||||
		lockable=true,
 | 
			
		||||
	},
 | 
			
		||||
	on_rotate = screwdriver.rotate_simple
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_alias("homedecor:refrigerator_white_bottom", "homedecor:refrigerator_white")
 | 
			
		||||
minetest.register_alias("homedecor:refrigerator_white_top", "air")
 | 
			
		||||
 | 
			
		||||
minetest.register_alias("homedecor:refrigerator_steel_bottom", "homedecor:refrigerator_steel")
 | 
			
		||||
minetest.register_alias("homedecor:refrigerator_steel_top", "air")
 | 
			
		||||
 | 
			
		||||
minetest.register_alias("homedecor:refrigerator_white_bottom_locked", "homedecor:refrigerator_white_locked")
 | 
			
		||||
minetest.register_alias("homedecor:refrigerator_white_top_locked", "air")
 | 
			
		||||
minetest.register_alias("homedecor:refrigerator_locked", "homedecor:refrigerator_white_locked")
 | 
			
		||||
 | 
			
		||||
minetest.register_alias("homedecor:refrigerator_steel_bottom_locked", "homedecor:refrigerator_steel_locked")
 | 
			
		||||
minetest.register_alias("homedecor:refrigerator_steel_top_locked", "air")
 | 
			
		||||
 | 
			
		||||
-- kitchen "furnaces"
 | 
			
		||||
homedecor.register_furnace("oven", {
 | 
			
		||||
	description = S("Oven"),
 | 
			
		||||
	tile_format = "homedecor_oven_%s%s.png",
 | 
			
		||||
	output_slots = 4,
 | 
			
		||||
	output_width = 2,
 | 
			
		||||
	cook_speed = 1.25,
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
homedecor.register_furnace("oven_steel", {
 | 
			
		||||
	description = S("Oven (stainless steel)"),
 | 
			
		||||
	tile_format = "homedecor_oven_steel_%s%s.png",
 | 
			
		||||
	output_slots = 4,
 | 
			
		||||
	output_width = 2,
 | 
			
		||||
	cook_speed = 1.25,
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
homedecor.register_furnace("microwave_oven", {
 | 
			
		||||
	description = S("Microwave Oven"),
 | 
			
		||||
	tiles = {
 | 
			
		||||
		"homedecor_microwave_top.png", "homedecor_microwave_top.png^[transformR180",
 | 
			
		||||
		"homedecor_microwave_top.png^[transformR270", "homedecor_microwave_top.png^[transformR90",
 | 
			
		||||
		"homedecor_microwave_top.png^[transformR180", "homedecor_microwave_front.png"
 | 
			
		||||
	},
 | 
			
		||||
	tiles_active = {
 | 
			
		||||
		"homedecor_microwave_top.png", "homedecor_microwave_top.png^[transformR180",
 | 
			
		||||
		"homedecor_microwave_top.png^[transformR270", "homedecor_microwave_top.png^[transformR90",
 | 
			
		||||
		"homedecor_microwave_top.png^[transformR180", "homedecor_microwave_front_active.png"
 | 
			
		||||
	},
 | 
			
		||||
	output_slots = 2,
 | 
			
		||||
	output_width = 2,
 | 
			
		||||
	cook_speed = 1.5,
 | 
			
		||||
	extra_nodedef_fields = {
 | 
			
		||||
		node_box = {
 | 
			
		||||
			type = "fixed",
 | 
			
		||||
			fixed = { -0.5, -0.5, -0.125, 0.5, 0.125, 0.5 },
 | 
			
		||||
		},
 | 
			
		||||
	},
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
-- coffee!
 | 
			
		||||
-- coffee!
 | 
			
		||||
-- coffee!
 | 
			
		||||
 | 
			
		||||
local cm_cbox = {
 | 
			
		||||
	type = "fixed",
 | 
			
		||||
	fixed = {
 | 
			
		||||
		{     0, -8/16,     0,  7/16,  3/16,  8/16 },
 | 
			
		||||
		{ -4/16, -8/16, -6/16, -1/16, -5/16, -3/16 }
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
homedecor.register("coffee_maker", {
 | 
			
		||||
	mesh = "homedecor_coffeemaker.obj",
 | 
			
		||||
	tiles = {
 | 
			
		||||
		"homedecor_coffeemaker_decanter.png",
 | 
			
		||||
		"homedecor_coffeemaker_cup.png",
 | 
			
		||||
		"homedecor_coffeemaker_case.png",
 | 
			
		||||
	},
 | 
			
		||||
	description = S("Coffee Maker"),
 | 
			
		||||
	inventory_image = "homedecor_coffeemaker_inv.png",
 | 
			
		||||
	walkable = false,
 | 
			
		||||
	groups = {snappy=3},
 | 
			
		||||
	selection_box = cm_cbox,
 | 
			
		||||
	node_box = cm_cbox,
 | 
			
		||||
	on_rotate = screwdriver.disallow
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
local fdir_to_steampos = {
 | 
			
		||||
	x = { 0.15,   0.275, -0.15,  -0.275 },
 | 
			
		||||
	z = { 0.275, -0.15,  -0.275,  0.15  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
minetest.register_abm({
 | 
			
		||||
	nodenames = "homedecor:coffee_maker",
 | 
			
		||||
	label = "sfx",
 | 
			
		||||
	interval = 2,
 | 
			
		||||
	chance = 1,
 | 
			
		||||
	action = function(pos, node)
 | 
			
		||||
		local fdir = node.param2
 | 
			
		||||
		if fdir and fdir < 4 then
 | 
			
		||||
 | 
			
		||||
			local steamx = fdir_to_steampos.x[fdir + 1]
 | 
			
		||||
			local steamz = fdir_to_steampos.z[fdir + 1]
 | 
			
		||||
 | 
			
		||||
			minetest.add_particlespawner({
 | 
			
		||||
				amount = 1,
 | 
			
		||||
				time = 1,
 | 
			
		||||
				minpos = {x=pos.x - steamx, y=pos.y - 0.35, z=pos.z - steamz},
 | 
			
		||||
				maxpos = {x=pos.x - steamx, y=pos.y - 0.35, z=pos.z - steamz},
 | 
			
		||||
				minvel = {x=-0.003, y=0.01, z=-0.003},
 | 
			
		||||
				maxvel = {x=0.003, y=0.01, z=-0.003},
 | 
			
		||||
				minacc = {x=0.0,y=-0.0,z=-0.0},
 | 
			
		||||
				maxacc = {x=0.0,y=0.003,z=-0.0},
 | 
			
		||||
				minexptime = 2,
 | 
			
		||||
				maxexptime = 5,
 | 
			
		||||
				minsize = 1,
 | 
			
		||||
				maxsize = 1.2,
 | 
			
		||||
				collisiondetection = false,
 | 
			
		||||
				texture = "homedecor_steam.png",
 | 
			
		||||
			})
 | 
			
		||||
		end
 | 
			
		||||
	end
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
homedecor.register("toaster", {
 | 
			
		||||
	description = S("Toaster"),
 | 
			
		||||
	tiles = { "homedecor_toaster_sides.png" },
 | 
			
		||||
	inventory_image = "homedecor_toaster_inv.png",
 | 
			
		||||
	walkable = false,
 | 
			
		||||
	groups = { snappy=3 },
 | 
			
		||||
	node_box = {
 | 
			
		||||
		type = "fixed",
 | 
			
		||||
		fixed = {
 | 
			
		||||
			{-0.0625, -0.5, -0.125, 0.125, -0.3125, 0.125}, -- NodeBox1
 | 
			
		||||
		},
 | 
			
		||||
	},
 | 
			
		||||
	on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
 | 
			
		||||
		local fdir = node.param2
 | 
			
		||||
		minetest.set_node(pos, { name = "homedecor:toaster_loaf", param2 = fdir })
 | 
			
		||||
		minetest.sound_play("toaster", {
 | 
			
		||||
			pos = pos,
 | 
			
		||||
			gain = 1.0,
 | 
			
		||||
			max_hear_distance = 5
 | 
			
		||||
		})
 | 
			
		||||
		return itemstack
 | 
			
		||||
	end
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
homedecor.register("toaster_loaf", {
 | 
			
		||||
	tiles = {
 | 
			
		||||
		"homedecor_toaster_toploaf.png",
 | 
			
		||||
		"homedecor_toaster_sides.png",
 | 
			
		||||
		"homedecor_toaster_sides.png",
 | 
			
		||||
		"homedecor_toaster_sides.png",
 | 
			
		||||
		"homedecor_toaster_sides.png",
 | 
			
		||||
		"homedecor_toaster_sides.png"
 | 
			
		||||
	},
 | 
			
		||||
	walkable = false,
 | 
			
		||||
	groups = { snappy=3, not_in_creative_inventory=1 },
 | 
			
		||||
	node_box = {
 | 
			
		||||
		type = "fixed",
 | 
			
		||||
		fixed = {
 | 
			
		||||
			{-0.0625, -0.5, -0.125, 0.125, -0.3125, 0.125}, -- NodeBox1
 | 
			
		||||
			{-0.03125, -0.3125, -0.0935, 0, -0.25, 0.0935}, -- NodeBox2
 | 
			
		||||
			{0.0625, -0.3125, -0.0935, 0.0935, -0.25, 0.0935}, -- NodeBox3
 | 
			
		||||
		},
 | 
			
		||||
	},
 | 
			
		||||
	on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
 | 
			
		||||
		local fdir = node.param2
 | 
			
		||||
		minetest.set_node(pos, { name = "homedecor:toaster", param2 = fdir })
 | 
			
		||||
		return itemstack
 | 
			
		||||
	end,
 | 
			
		||||
	drop = "homedecor:toaster"
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
homedecor.register("dishwasher", {
 | 
			
		||||
	description = S("Dishwasher"),
 | 
			
		||||
	drawtype = "nodebox",
 | 
			
		||||
	tiles = {
 | 
			
		||||
		"homedecor_dishwasher_top.png",
 | 
			
		||||
		"homedecor_dishwasher_bottom.png",
 | 
			
		||||
		"homedecor_dishwasher_sides.png",
 | 
			
		||||
		"homedecor_dishwasher_sides.png^[transformFX",
 | 
			
		||||
		"homedecor_dishwasher_back.png",
 | 
			
		||||
		"homedecor_dishwasher_front.png"
 | 
			
		||||
	},
 | 
			
		||||
	node_box = {
 | 
			
		||||
		type = "fixed",
 | 
			
		||||
		fixed = {
 | 
			
		||||
			{-0.5, -0.5, -0.5, 0.5, -0.4375, 0.5},
 | 
			
		||||
			{-0.5, -0.5, -0.5, 0.5, 0.5, -0.4375},
 | 
			
		||||
			{-0.5, -0.5, -0.5, 0.5, 0.1875, 0.1875},
 | 
			
		||||
			{-0.4375, -0.5, -0.5, 0.4375, 0.4375, 0.4375},
 | 
			
		||||
		}
 | 
			
		||||
	},
 | 
			
		||||
	selection_box = { type = "regular" },
 | 
			
		||||
	sounds = default.node_sound_stone_defaults(),
 | 
			
		||||
	groups = { snappy = 3 },
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
local materials = { N_("granite"), N_("marble"), N_("steel"), N_("wood") }
 | 
			
		||||
 | 
			
		||||
for _, m in ipairs(materials) do
 | 
			
		||||
homedecor.register("dishwasher_"..m, {
 | 
			
		||||
	description = S("Dishwasher (@1)", S(m)),
 | 
			
		||||
	tiles = {
 | 
			
		||||
		"homedecor_kitchen_cabinet_top_"..m..".png",
 | 
			
		||||
		"homedecor_dishwasher_bottom.png",
 | 
			
		||||
		"homedecor_dishwasher_sides.png",
 | 
			
		||||
		"homedecor_dishwasher_sides.png^[transformFX",
 | 
			
		||||
		"homedecor_dishwasher_back.png",
 | 
			
		||||
		"homedecor_dishwasher_front.png"
 | 
			
		||||
	},
 | 
			
		||||
	groups = { snappy = 3 },
 | 
			
		||||
	sounds = default.node_sound_stone_defaults(),
 | 
			
		||||
})
 | 
			
		||||
end
 | 
			
		||||
@@ -1,157 +0,0 @@
 | 
			
		||||
-- This file supplies Kitchen cabinets and kitchen sink
 | 
			
		||||
 | 
			
		||||
local S = homedecor_i18n.gettext
 | 
			
		||||
 | 
			
		||||
local cabinet_sides = "(default_wood.png^[transformR90)^homedecor_kitchen_cabinet_bevel.png"
 | 
			
		||||
local cabinet_bottom = "(default_wood.png^[colorize:#000000:100)^(homedecor_kitchen_cabinet_bevel.png^[colorize:#46321580)"
 | 
			
		||||
 | 
			
		||||
local function N_(x) return x end
 | 
			
		||||
 | 
			
		||||
local counter_materials = { "", N_("granite"), N_("marble"), N_("steel") }
 | 
			
		||||
 | 
			
		||||
for _, mat in ipairs(counter_materials) do
 | 
			
		||||
 | 
			
		||||
	local desc = S("Kitchen Cabinet")
 | 
			
		||||
	local material = ""
 | 
			
		||||
 | 
			
		||||
	if mat ~= "" then
 | 
			
		||||
		desc = S("Kitchen Cabinet (@1 top)", S(mat))
 | 
			
		||||
		material = "_"..mat
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
	homedecor.register("kitchen_cabinet"..material, {
 | 
			
		||||
		description = desc,
 | 
			
		||||
		tiles = { 'homedecor_kitchen_cabinet_top'..material..'.png',
 | 
			
		||||
				cabinet_bottom,
 | 
			
		||||
				cabinet_sides,
 | 
			
		||||
				cabinet_sides,
 | 
			
		||||
				cabinet_sides,
 | 
			
		||||
				'homedecor_kitchen_cabinet_front.png'},
 | 
			
		||||
		groups = { snappy = 3 },
 | 
			
		||||
		sounds = default.node_sound_wood_defaults(),
 | 
			
		||||
		infotext=S("Kitchen Cabinet"),
 | 
			
		||||
		inventory = {
 | 
			
		||||
			size=24,
 | 
			
		||||
			lockable=true,
 | 
			
		||||
		},
 | 
			
		||||
	})
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
local kitchen_cabinet_half_box = homedecor.nodebox.slab_y(0.5, 0.5)
 | 
			
		||||
homedecor.register("kitchen_cabinet_half", {
 | 
			
		||||
	description = S('Half-height Kitchen Cabinet (on ceiling)'),
 | 
			
		||||
	tiles = {
 | 
			
		||||
		cabinet_sides,
 | 
			
		||||
		cabinet_bottom,
 | 
			
		||||
		cabinet_sides,
 | 
			
		||||
		cabinet_sides,
 | 
			
		||||
		cabinet_sides,
 | 
			
		||||
		'homedecor_kitchen_cabinet_front_half.png'
 | 
			
		||||
	},
 | 
			
		||||
	selection_box = kitchen_cabinet_half_box,
 | 
			
		||||
	node_box = kitchen_cabinet_half_box,
 | 
			
		||||
	groups = { snappy = 3 },
 | 
			
		||||
	sounds = default.node_sound_wood_defaults(),
 | 
			
		||||
	infotext=S("Kitchen Cabinet"),
 | 
			
		||||
	inventory = {
 | 
			
		||||
		size=12,
 | 
			
		||||
		lockable=true,
 | 
			
		||||
	},
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
homedecor.register("kitchen_cabinet_with_sink", {
 | 
			
		||||
	description = S("Kitchen Cabinet with sink"),
 | 
			
		||||
	mesh = "homedecor_kitchen_sink.obj",
 | 
			
		||||
	tiles = {
 | 
			
		||||
		"homedecor_kitchen_sink_top.png",
 | 
			
		||||
		"homedecor_kitchen_cabinet_front.png",
 | 
			
		||||
		cabinet_sides,
 | 
			
		||||
		cabinet_bottom
 | 
			
		||||
	},
 | 
			
		||||
	groups = { snappy = 3 },
 | 
			
		||||
	sounds = default.node_sound_wood_defaults(),
 | 
			
		||||
	infotext=S("Under-sink cabinet"),
 | 
			
		||||
	inventory = {
 | 
			
		||||
		size=16,
 | 
			
		||||
		lockable=true,
 | 
			
		||||
	},
 | 
			
		||||
	node_box = {
 | 
			
		||||
		type = "fixed",
 | 
			
		||||
		fixed = {
 | 
			
		||||
			{ -8/16, -8/16, -8/16,  8/16, 6/16,  8/16 },
 | 
			
		||||
			{ -8/16,  6/16, -8/16, -6/16, 8/16,  8/16 },
 | 
			
		||||
			{  6/16,  6/16, -8/16,  8/16, 8/16,  8/16 },
 | 
			
		||||
			{ -8/16,  6/16, -8/16,  8/16, 8/16, -6/16 },
 | 
			
		||||
			{ -8/16,  6/16,  6/16,  8/16, 8/16,  8/16 },
 | 
			
		||||
		}
 | 
			
		||||
	},
 | 
			
		||||
	on_destruct = function(pos)
 | 
			
		||||
		homedecor.stop_particle_spawner({x=pos.x, y=pos.y+1, z=pos.z})
 | 
			
		||||
	end
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
local cp_cbox = {
 | 
			
		||||
	type = "fixed",
 | 
			
		||||
	fixed = { -0.375, -0.5, -0.5, 0.375, -0.3125, 0.3125 }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
homedecor.register("copper_pans", {
 | 
			
		||||
	description = S("Copper pans"),
 | 
			
		||||
	mesh = "homedecor_copper_pans.obj",
 | 
			
		||||
	tiles = { "homedecor_polished_copper.png" },
 | 
			
		||||
	inventory_image = "homedecor_copper_pans_inv.png",
 | 
			
		||||
	groups = { snappy=3 },
 | 
			
		||||
	selection_box = cp_cbox,
 | 
			
		||||
	walkable = false,
 | 
			
		||||
	on_place = minetest.rotate_node
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
local kf_cbox = {
 | 
			
		||||
	type = "fixed",
 | 
			
		||||
	fixed = { -2/16, -8/16, 1/16, 2/16, -1/16, 8/16 }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
homedecor.register("kitchen_faucet", {
 | 
			
		||||
	mesh = "homedecor_kitchen_faucet.obj",
 | 
			
		||||
	tiles = { "homedecor_generic_metal_bright.png" },
 | 
			
		||||
	inventory_image = "homedecor_kitchen_faucet_inv.png",
 | 
			
		||||
	description = S("Kitchen Faucet"),
 | 
			
		||||
	groups = {snappy=3},
 | 
			
		||||
	selection_box = kf_cbox,
 | 
			
		||||
	walkable = false,
 | 
			
		||||
	on_rotate = screwdriver.disallow,
 | 
			
		||||
	on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
 | 
			
		||||
		local below = minetest.get_node_or_nil({x=pos.x, y=pos.y-1, z=pos.z})
 | 
			
		||||
		if below and
 | 
			
		||||
		  below.name == "homedecor:sink" or
 | 
			
		||||
		  below.name == "homedecor:kitchen_cabinet_with_sink" or
 | 
			
		||||
		  below.name == "homedecor:kitchen_cabinet_with_sink_locked" then
 | 
			
		||||
			local particledef = {
 | 
			
		||||
				outlet      = { x = 0, y = -0.19, z = 0.13 },
 | 
			
		||||
				velocity_x  = { min = -0.05, max = 0.05 },
 | 
			
		||||
				velocity_y  = -0.3,
 | 
			
		||||
				velocity_z  = { min = -0.1,  max = 0 },
 | 
			
		||||
				spread      = 0
 | 
			
		||||
			}
 | 
			
		||||
			homedecor.start_particle_spawner(pos, node, particledef, "homedecor_faucet")
 | 
			
		||||
		end
 | 
			
		||||
		return itemstack
 | 
			
		||||
	end,
 | 
			
		||||
	on_destruct = homedecor.stop_particle_spawner
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
homedecor.register("paper_towel", {
 | 
			
		||||
	mesh = "homedecor_paper_towel.obj",
 | 
			
		||||
	tiles = {
 | 
			
		||||
		"homedecor_generic_quilted_paper.png",
 | 
			
		||||
		"default_wood.png"
 | 
			
		||||
	},
 | 
			
		||||
	inventory_image = "homedecor_paper_towel_inv.png",
 | 
			
		||||
	description = S("Paper towels"),
 | 
			
		||||
	groups = { snappy=3 },
 | 
			
		||||
	walkable = false,
 | 
			
		||||
	selection_box = {
 | 
			
		||||
		type = "fixed",
 | 
			
		||||
		fixed = { -0.4375, 0.125, 0.0625, 0.4375, 0.4375, 0.5 }
 | 
			
		||||
	},
 | 
			
		||||
})
 | 
			
		||||
@@ -1,61 +0,0 @@
 | 
			
		||||
-- laundry devices
 | 
			
		||||
 | 
			
		||||
homedecor.register("washing_machine", {
 | 
			
		||||
	description = "Washing Machine",
 | 
			
		||||
	tiles = {
 | 
			
		||||
		"homedecor_washing_machine_top.png",
 | 
			
		||||
		"homedecor_washing_machine_bottom.png",
 | 
			
		||||
		"homedecor_washing_machine_sides.png",
 | 
			
		||||
		"homedecor_washing_machine_sides.png^[transformFX",
 | 
			
		||||
		"homedecor_washing_machine_back.png",
 | 
			
		||||
		"homedecor_washing_machine_front.png"
 | 
			
		||||
	},
 | 
			
		||||
	node_box = {
 | 
			
		||||
		type = "fixed",
 | 
			
		||||
		fixed = {
 | 
			
		||||
			{-0.5, -0.5, -0.5, 0.5, 0.375, 0.375},
 | 
			
		||||
			{-0.5, -0.5, 0.3125, 0.5, 0.5, 0.5},
 | 
			
		||||
		}
 | 
			
		||||
	},
 | 
			
		||||
	selection_box = { type = "regular" },
 | 
			
		||||
	groups = { snappy = 3 },
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
homedecor.register("dryer", {
 | 
			
		||||
	description = "Tumble dryer",
 | 
			
		||||
	tiles = {
 | 
			
		||||
		"homedecor_dryer_top.png",
 | 
			
		||||
		"homedecor_dryer_bottom.png",
 | 
			
		||||
		"homedecor_dryer_sides.png",
 | 
			
		||||
		"homedecor_dryer_sides.png^[transformFX",
 | 
			
		||||
		"homedecor_dryer_back.png",
 | 
			
		||||
		"homedecor_dryer_front.png"
 | 
			
		||||
	},
 | 
			
		||||
	node_box = {
 | 
			
		||||
		type = "fixed",
 | 
			
		||||
		fixed = {
 | 
			
		||||
			{-0.5, -0.5, -0.5, 0.5, 0.375, 0.375},
 | 
			
		||||
			{-0.5, -0.5, 0.3125, 0.5, 0.5, 0.5},
 | 
			
		||||
		}
 | 
			
		||||
	},
 | 
			
		||||
	selection_box = { type = "regular" },
 | 
			
		||||
	groups = { snappy = 3 },
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
local ib_cbox = {
 | 
			
		||||
	type = "fixed",
 | 
			
		||||
	fixed = { -6/16, -8/16, -4/16, 17/16, 4/16, 4/16 }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
homedecor.register("ironing_board", {
 | 
			
		||||
	description = "Ironing board",
 | 
			
		||||
	mesh = "homedecor_ironing_board.obj",
 | 
			
		||||
	tiles = {
 | 
			
		||||
		"wool_grey.png",
 | 
			
		||||
		{ name = "homedecor_generic_metal.png", color = homedecor.color_med_grey },
 | 
			
		||||
	},
 | 
			
		||||
	expand = {right = "placeholder"},
 | 
			
		||||
	groups = { snappy = 3 },
 | 
			
		||||
	selection_box = ib_cbox,
 | 
			
		||||
	collision_box = ib_cbox
 | 
			
		||||
})
 | 
			
		||||
@@ -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
 | 
			
		||||
@@ -1,310 +0,0 @@
 | 
			
		||||
# Blender v2.72 (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
 | 
			
		||||
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
 | 
			
		||||
f 47/1/2 52/4/2 7/5/2 9/6/2
 | 
			
		||||
f 18/7/3 27/8/3 28/9/3 10/10/3
 | 
			
		||||
f 27/8/4 18/7/4 17/11/4 39/12/4
 | 
			
		||||
f 16/13/5 48/14/5 17/11/5 18/7/5
 | 
			
		||||
f 50/15/6 53/16/6 22/17/6 21/18/6 45/19/6 51/20/6
 | 
			
		||||
f 15/21/7 2/22/7 46/23/7 20/24/7
 | 
			
		||||
f 11/25/8 54/26/8 3/27/8 5/28/8
 | 
			
		||||
f 22/17/6 53/16/6 49/29/6 19/30/6
 | 
			
		||||
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 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
 | 
			
		||||
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
 | 
			
		||||
@@ -1,418 +0,0 @@
 | 
			
		||||
# Blender v2.72 (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
 | 
			
		||||
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
 | 
			
		||||
f 36/7/6 76/8/7 38/9/8 46/10/9
 | 
			
		||||
f 13/3/3 20/2/2 17/11/10 10/12/11
 | 
			
		||||
f 1/13/12 21/14/13 19/15/5 14/16/4 15/17/14
 | 
			
		||||
f 18/18/1 19/19/5 21/20/13 3/21/15
 | 
			
		||||
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
 | 
			
		||||
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
 | 
			
		||||
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
 | 
			
		||||
@@ -1,99 +0,0 @@
 | 
			
		||||
-- Various kinds of window shutters
 | 
			
		||||
 | 
			
		||||
local S = homedecor_i18n.gettext
 | 
			
		||||
 | 
			
		||||
local shutters = {
 | 
			
		||||
	"mahogany",
 | 
			
		||||
	"red",
 | 
			
		||||
	"yellow",
 | 
			
		||||
	"forest_green",
 | 
			
		||||
	"light_blue",
 | 
			
		||||
	"violet",
 | 
			
		||||
	"black",
 | 
			
		||||
	"dark_grey",
 | 
			
		||||
	"grey",
 | 
			
		||||
	"white",
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
local shutter_cbox = {
 | 
			
		||||
	type = "wallmounted",
 | 
			
		||||
	wall_top =		{ -0.5,  0.4375, -0.5,  0.5,     0.5,    0.5 },
 | 
			
		||||
	wall_bottom =	{ -0.5, -0.5,    -0.5,  0.5,    -0.4375, 0.5 },
 | 
			
		||||
	wall_side =		{ -0.5, -0.5,    -0.5, -0.4375,  0.5,    0.5 }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
local inv = "homedecor_window_shutter_inv.png^[colorize:#a87034:150"
 | 
			
		||||
 | 
			
		||||
homedecor.register("shutter", {
 | 
			
		||||
	mesh = "homedecor_window_shutter.obj",
 | 
			
		||||
	tiles = {
 | 
			
		||||
		{ name = "homedecor_window_shutter.png", color = 0xffa87034 }
 | 
			
		||||
	},
 | 
			
		||||
	description = S("Wooden Shutter"),
 | 
			
		||||
	inventory_image = inv,
 | 
			
		||||
	wield_image = inv,
 | 
			
		||||
	paramtype2 = "wallmounted",
 | 
			
		||||
	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
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
homedecor.register("shutter_colored", {
 | 
			
		||||
	mesh = "homedecor_window_shutter.obj",
 | 
			
		||||
	tiles = { "homedecor_window_shutter.png" },
 | 
			
		||||
	description = S("Wooden Shutter"),
 | 
			
		||||
	inventory_image = "homedecor_window_shutter_inv.png",
 | 
			
		||||
	wield_image = "homedecor_window_shutter_inv.png",
 | 
			
		||||
	paramtype2 = "colorwallmounted",
 | 
			
		||||
	palette = "unifieddyes_palette_colorwallmounted.png",
 | 
			
		||||
	groups = { snappy = 3 , not_in_creative_inventory = 1, 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,
 | 
			
		||||
	drop = "homedecor:shutter"
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_alias("homedecor:shutter_purple", "homedecor:shutter_violet")
 | 
			
		||||
minetest.register_alias("homedecor:shutter_oak", "homedecor:shutter")
 | 
			
		||||
 | 
			
		||||
-- convert to param2 coloring
 | 
			
		||||
 | 
			
		||||
homedecor.old_shutter_nodes = {}
 | 
			
		||||
 | 
			
		||||
for _, color in ipairs(shutters) do
 | 
			
		||||
	table.insert(homedecor.old_shutter_nodes, "homedecor:shutter_"..color)
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
minetest.register_lbm({
 | 
			
		||||
	name = "homedecor:convert_shutters",
 | 
			
		||||
	label = "Convert shutter static nodes to use param2 color",
 | 
			
		||||
	run_at_every_load = false,
 | 
			
		||||
	nodenames = homedecor.old_shutter_nodes,
 | 
			
		||||
	action = function(pos, node)
 | 
			
		||||
		local name = node.name
 | 
			
		||||
		local color = string.sub(name, string.find(name, "_") + 1)
 | 
			
		||||
 | 
			
		||||
		if color == "mahogany" then
 | 
			
		||||
			color = "dark_red"
 | 
			
		||||
		elseif color == "forest_green" then
 | 
			
		||||
			color = "dark_green"
 | 
			
		||||
		elseif color == "light_blue" then
 | 
			
		||||
			color = "medium_cyan"
 | 
			
		||||
		elseif color == "red" then
 | 
			
		||||
			color = "medium_red"
 | 
			
		||||
		end
 | 
			
		||||
 | 
			
		||||
		local paletteidx = unifieddyes.getpaletteidx("unifieddyes:"..color, "wallmounted")
 | 
			
		||||
		local param2 = paletteidx + node.param2
 | 
			
		||||
 | 
			
		||||
		minetest.set_node(pos, { name = "homedecor:shutter_colored", param2 = param2 })
 | 
			
		||||
		local meta = minetest.get_meta(pos)
 | 
			
		||||
		meta:set_string("dye", "unifieddyes:"..color)
 | 
			
		||||
	end
 | 
			
		||||
})
 | 
			
		||||
| 
		 Before Width: | Height: | Size: 202 B  | 
| 
		 Before Width: | Height: | Size: 259 B  | 
| 
		 Before Width: | Height: | Size: 309 B  | 
| 
		 Before Width: | Height: | Size: 178 B  | 
| 
		 Before Width: | Height: | Size: 175 B  | 
| 
		 Before Width: | Height: | Size: 1.2 KiB  | 
| 
		 Before Width: | Height: | Size: 591 B  | 
| 
		 Before Width: | Height: | Size: 1.2 KiB  | 
| 
		 Before Width: | Height: | Size: 880 B  | 
| 
		 Before Width: | Height: | Size: 331 B  | 
| 
		 Before Width: | Height: | Size: 326 B  | 
| 
		 Before Width: | Height: | Size: 354 B  | 
| 
		 Before Width: | Height: | Size: 1.7 KiB  | 
| 
		 Before Width: | Height: | Size: 3.5 KiB  | 
| 
		 Before Width: | Height: | Size: 3.6 KiB  | 
| 
		 Before Width: | Height: | Size: 1.7 KiB  | 
| 
		 Before Width: | Height: | Size: 563 B  | 
| 
		 Before Width: | Height: | Size: 305 B  | 
| 
		 Before Width: | Height: | Size: 4.4 KiB  | 
| 
		 Before Width: | Height: | Size: 4.7 KiB  | 
| 
		 Before Width: | Height: | Size: 1.4 KiB  | 
| 
		 Before Width: | Height: | Size: 5.5 KiB  | 
| 
		 Before Width: | Height: | Size: 2.2 KiB  | 
| 
		 Before Width: | Height: | Size: 1.6 KiB  | 
| 
		 Before Width: | Height: | Size: 229 B  | 
| 
		 Before Width: | Height: | Size: 12 KiB  | 
| 
		 Before Width: | Height: | Size: 137 B  | 
| 
		 Before Width: | Height: | Size: 139 B  | 
| 
		 Before Width: | Height: | Size: 142 B  | 
| 
		 Before Width: | Height: | Size: 173 B  | 
| 
		 Before Width: | Height: | Size: 137 B  | 
| 
		 Before Width: | Height: | Size: 165 B  | 
| 
		 Before Width: | Height: | Size: 369 B  | 
| 
		 Before Width: | Height: | Size: 293 B  | 
| 
		 Before Width: | Height: | Size: 233 B  | 
| 
		 Before Width: | Height: | Size: 247 B  | 
| 
		 Before Width: | Height: | Size: 1.9 KiB  | 
| 
		 Before Width: | Height: | Size: 345 B  | 
| 
		 Before Width: | Height: | Size: 293 B  | 
| 
		 Before Width: | Height: | Size: 123 B  | 
| 
		 Before Width: | Height: | Size: 817 B  | 
| 
		 Before Width: | Height: | Size: 769 B  | 
| 
		 Before Width: | Height: | Size: 326 B  | 
| 
		 Before Width: | Height: | Size: 321 B  | 
| 
		 Before Width: | Height: | Size: 775 B  | 
@@ -1,74 +0,0 @@
 | 
			
		||||
 | 
			
		||||
local S = homedecor_i18n.gettext
 | 
			
		||||
 | 
			
		||||
local wd_cbox = {
 | 
			
		||||
	type = "fixed",
 | 
			
		||||
	fixed = { -0.5, -0.5, -0.5, 0.5, 1.5, 0.5 }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
homedecor.register("wardrobe", {
 | 
			
		||||
	mesh = "homedecor_bedroom_wardrobe.obj",
 | 
			
		||||
	tiles = {
 | 
			
		||||
		homedecor.plain_wood,
 | 
			
		||||
		"homedecor_wardrobe_drawers.png",
 | 
			
		||||
		"homedecor_wardrobe_doors.png"
 | 
			
		||||
	},
 | 
			
		||||
	inventory_image = "homedecor_wardrobe_inv.png",
 | 
			
		||||
	description = S("Wardrobe"),
 | 
			
		||||
	groups = {snappy=3},
 | 
			
		||||
	selection_box = wd_cbox,
 | 
			
		||||
	collision_box = wd_cbox,
 | 
			
		||||
	sounds = default.node_sound_wood_defaults(),
 | 
			
		||||
	expand = { top="placeholder" },
 | 
			
		||||
	on_rotate = screwdriver.rotate_simple,
 | 
			
		||||
	infotext = S("Wardrobe"),
 | 
			
		||||
	inventory = {
 | 
			
		||||
		size = 10
 | 
			
		||||
	},
 | 
			
		||||
	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]..";]"
 | 
			
		||||
		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")).."]"..
 | 
			
		||||
			clothes_strings..
 | 
			
		||||
			"vertlabel[0,5.2;"..minetest.formspec_escape(S("Storage")).."]"..
 | 
			
		||||
			"list[current_name;main;0.5,4.5;5,2;]"..
 | 
			
		||||
			"list[current_player;main;0.5,6.8;5,2;]" ..
 | 
			
		||||
			"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")
 | 
			
		||||
 | 
			
		||||
		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" })
 | 
			
		||||
				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" })
 | 
			
		||||
				break
 | 
			
		||||
			end
 | 
			
		||||
		end
 | 
			
		||||
	end
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_alias("homedecor:wardrobe_bottom", "homedecor:wardrobe")
 | 
			
		||||
minetest.register_alias("homedecor:wardrobe_top", "air")
 | 
			
		||||
@@ -1,258 +0,0 @@
 | 
			
		||||
 | 
			
		||||
local S = homedecor_i18n.gettext
 | 
			
		||||
 | 
			
		||||
homedecor.register("window_quartered", {
 | 
			
		||||
	description = S("Window (quartered)"),
 | 
			
		||||
	tiles = {
 | 
			
		||||
		"homedecor_window_sides.png",
 | 
			
		||||
		"homedecor_window_sides.png",
 | 
			
		||||
		"homedecor_window_sides.png",
 | 
			
		||||
		"homedecor_window_sides.png",
 | 
			
		||||
		"homedecor_window_quartered.png",
 | 
			
		||||
		"homedecor_window_quartered.png"
 | 
			
		||||
	},
 | 
			
		||||
	use_texture_alpha = true,
 | 
			
		||||
	groups = {snappy=3},
 | 
			
		||||
	sounds = default.node_sound_glass_defaults(),
 | 
			
		||||
	node_box = {
 | 
			
		||||
		type = "fixed",
 | 
			
		||||
		fixed = {
 | 
			
		||||
			{-0.5, -0.5, 0.025, 0.5, 0.5, 0}, -- NodeBox1
 | 
			
		||||
			{-0.5, 0.4375, -0.0625, 0.5, 0.5, 0.0625}, -- NodeBox2
 | 
			
		||||
			{-0.5, -0.5, -0.0625, 0.5, -0.4375, 0.0625}, -- NodeBox3
 | 
			
		||||
			{-0.5, -0.0625, -0.025, 0.5, 0.0625, 0.025}, -- NodeBox4
 | 
			
		||||
			{0.4375, -0.5, -0.0625, 0.5, 0.5, 0.0625}, -- NodeBox5
 | 
			
		||||
			{-0.5, -0.5, -0.0625, -0.4375, 0.5, 0.0625}, -- NodeBox6
 | 
			
		||||
			{-0.0625, -0.5, -0.025, 0.0625, 0.5, 0.025}, -- NodeBox7
 | 
			
		||||
		}
 | 
			
		||||
	},
 | 
			
		||||
	selection_box = {
 | 
			
		||||
		type = "fixed",
 | 
			
		||||
		fixed = {-0.5, -0.5, -0.0625, 0.5, 0.5, 0.0625}
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
homedecor.register("window_plain", {
 | 
			
		||||
	description = S("Window (plain)"),
 | 
			
		||||
	tiles = {
 | 
			
		||||
		"homedecor_window_sides.png",
 | 
			
		||||
		"homedecor_window_sides.png",
 | 
			
		||||
		"homedecor_window_sides.png",
 | 
			
		||||
		"homedecor_window_sides.png",
 | 
			
		||||
		"homedecor_window_frame.png",
 | 
			
		||||
		"homedecor_window_frame.png"
 | 
			
		||||
	},
 | 
			
		||||
	use_texture_alpha = true,
 | 
			
		||||
	groups = {snappy=3},
 | 
			
		||||
	sounds = default.node_sound_glass_defaults(),
 | 
			
		||||
	node_box = {
 | 
			
		||||
		type = "fixed",
 | 
			
		||||
		fixed = {
 | 
			
		||||
			{-0.5, -0.5, 0.025, 0.5, 0.5, 0}, -- NodeBox1
 | 
			
		||||
			{-0.5, 0.4375, -0.0625, 0.5, 0.5, 0.0625}, -- NodeBox2
 | 
			
		||||
			{-0.5, -0.5, -0.0625, 0.5, -0.4375, 0.0625}, -- NodeBox3
 | 
			
		||||
			{0.4375, -0.5, -0.0625, 0.5, 0.5, 0.0625}, -- NodeBox4
 | 
			
		||||
			{-0.5, -0.5, -0.0625, -0.4375, 0.5, 0.0625}, -- NodeBox5
 | 
			
		||||
		}
 | 
			
		||||
	},
 | 
			
		||||
	selection_box = {
 | 
			
		||||
		type = "fixed",
 | 
			
		||||
		fixed = {-0.5, -0.5, -0.0625, 0.5, 0.5, 0.0625}
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
local wb1_cbox = {
 | 
			
		||||
	type = "fixed",
 | 
			
		||||
	fixed = { -8/16, -8/16, 5/16, 8/16, 8/16, 8/16 },
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
homedecor.register("blinds_thick", {
 | 
			
		||||
	description = S("Window Blinds (thick)"),
 | 
			
		||||
	mesh = "homedecor_windowblind_thick.obj",
 | 
			
		||||
	inventory_image = "homedecor_windowblind_thick_inv.png",
 | 
			
		||||
	tiles = {
 | 
			
		||||
		"homedecor_windowblind_strings.png",
 | 
			
		||||
		"homedecor_windowblinds.png"
 | 
			
		||||
	},
 | 
			
		||||
	walkable = false,
 | 
			
		||||
	groups = {snappy=3},
 | 
			
		||||
	sounds = default.node_sound_wood_defaults(),
 | 
			
		||||
	selection_box = wb1_cbox
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
local wb2_cbox = {
 | 
			
		||||
	type = "fixed",
 | 
			
		||||
	fixed = { -8/16, -8/16, 6/16, 8/16, 8/16, 8/16 },
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
homedecor.register("blinds_thin", {
 | 
			
		||||
	description = S("Window Blinds (thin)"),
 | 
			
		||||
	mesh = "homedecor_windowblind_thin.obj",
 | 
			
		||||
	inventory_image = "homedecor_windowblind_thin_inv.png",
 | 
			
		||||
	tiles = {
 | 
			
		||||
		"homedecor_windowblind_strings.png",
 | 
			
		||||
		"homedecor_windowblinds.png"
 | 
			
		||||
	},
 | 
			
		||||
	walkable = false,
 | 
			
		||||
	groups = {snappy=3},
 | 
			
		||||
	sounds = default.node_sound_wood_defaults(),
 | 
			
		||||
	selection_box = wb2_cbox
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_node("homedecor:curtain_closed", {
 | 
			
		||||
	description = S("Curtains"),
 | 
			
		||||
	tiles = { "homedecor_curtain.png" },
 | 
			
		||||
	inventory_image = "homedecor_curtain.png",
 | 
			
		||||
	drawtype = 'signlike',
 | 
			
		||||
	use_texture_alpha = true,
 | 
			
		||||
	walkable = false,
 | 
			
		||||
	groups = { snappy = 3, ud_param2_colorable = 1 },
 | 
			
		||||
	sounds = default.node_sound_leaves_defaults(),
 | 
			
		||||
	paramtype = "light",
 | 
			
		||||
	paramtype2 = "colorwallmounted",
 | 
			
		||||
	palette = "unifieddyes_palette_colorwallmounted.png",
 | 
			
		||||
	selection_box = { type = "wallmounted" },
 | 
			
		||||
	after_dig_node = unifieddyes.after_dig_node,
 | 
			
		||||
	after_place_node = unifieddyes.fix_rotation,
 | 
			
		||||
	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
 | 
			
		||||
			-- Open the curtains
 | 
			
		||||
			local fdir = node.param2
 | 
			
		||||
			minetest.set_node(pos, { name = "homedecor:curtain_open", param2 = fdir })
 | 
			
		||||
		end
 | 
			
		||||
		return itemstack
 | 
			
		||||
	end
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_node("homedecor:curtain_open", {
 | 
			
		||||
	description = S("Curtains"),
 | 
			
		||||
	tiles = { "homedecor_curtain_open.png" },
 | 
			
		||||
	inventory_image = "homedecor_curtain_open.png",
 | 
			
		||||
	drawtype = 'signlike',
 | 
			
		||||
	use_texture_alpha = true,
 | 
			
		||||
	walkable = false,
 | 
			
		||||
	groups = { snappy = 3, ud_param2_colorable = 1 },
 | 
			
		||||
	sounds = default.node_sound_leaves_defaults(),
 | 
			
		||||
	paramtype = "light",
 | 
			
		||||
	paramtype2 = "colorwallmounted",
 | 
			
		||||
	palette = "unifieddyes_palette_colorwallmounted.png",
 | 
			
		||||
	selection_box = { type = "wallmounted" },
 | 
			
		||||
	after_dig_node = unifieddyes.after_dig_node,
 | 
			
		||||
	after_place_node = unifieddyes.fix_rotation,
 | 
			
		||||
	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
 | 
			
		||||
			-- Close the curtains
 | 
			
		||||
			local fdir = node.param2
 | 
			
		||||
			minetest.set_node(pos, { name = "homedecor:curtain_closed", param2 = fdir })
 | 
			
		||||
		end
 | 
			
		||||
		return itemstack
 | 
			
		||||
	end
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
local mats = {
 | 
			
		||||
	{ "brass", S("brass"), "homedecor_generic_metal_brass.png" },
 | 
			
		||||
	{ "wrought_iron", S("wrought iron"), "homedecor_generic_metal_wrought_iron.png" },
 | 
			
		||||
	{ "wood", S("wood"), "default_wood.png" }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
for _, m in ipairs(mats) do
 | 
			
		||||
	local material, mat_name, texture = unpack(m)
 | 
			
		||||
	homedecor.register("curtainrod_"..material, {
 | 
			
		||||
		tiles = { texture },
 | 
			
		||||
		inventory_image  = "homedecor_curtainrod_"..material.."_inv.png",
 | 
			
		||||
		description = S("Curtain Rod (@1)", mat_name),
 | 
			
		||||
		groups = { snappy = 3 },
 | 
			
		||||
		node_box = {
 | 
			
		||||
			type = "fixed",
 | 
			
		||||
			fixed = {
 | 
			
		||||
				{-0.5, -0.5, 0.375, 0.5, -0.4375, 0.4375},
 | 
			
		||||
				{-0.4375, -0.5, 0.4375, -0.375, -0.4375, 0.5},
 | 
			
		||||
				{0.375, -0.5, 0.4375, 0.4375, -0.4375, 0.5}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	})
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
homedecor.register("window_flowerbox", {
 | 
			
		||||
	description = S("Window flowerbox"),
 | 
			
		||||
	tiles = {
 | 
			
		||||
		"homedecor_flowerbox_top.png",
 | 
			
		||||
		"homedecor_flowerbox_bottom.png",
 | 
			
		||||
		"homedecor_flowerbox_sides.png"
 | 
			
		||||
	},
 | 
			
		||||
	inventory_image = "homedecor_flowerbox_inv.png",
 | 
			
		||||
	sounds = default.node_sound_stone_defaults(),
 | 
			
		||||
	groups = { snappy = 3 },
 | 
			
		||||
	node_box = {
 | 
			
		||||
		type = "fixed",
 | 
			
		||||
		fixed = {
 | 
			
		||||
			{-0.375, 0.25, -0.125, 0.375, 0.5, 0.375}, -- NodeBox1
 | 
			
		||||
			{-0.3125, 0.4375, 0.375, -0.25, 0.4875, 0.5}, -- NodeBox2
 | 
			
		||||
			{0.25, 0.4375, 0.375, 0.3125, 0.4875, 0.5}, -- NodeBox3
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
homedecor.register("stained_glass", {
 | 
			
		||||
	description = S("Stained Glass"),
 | 
			
		||||
	tiles = {"homedecor_stained_glass.png"},
 | 
			
		||||
	inventory_image = "homedecor_stained_glass.png",
 | 
			
		||||
	groups = {snappy=3},
 | 
			
		||||
	use_texture_alpha = true,
 | 
			
		||||
	light_source = 3,
 | 
			
		||||
	sounds = default.node_sound_glass_defaults(),
 | 
			
		||||
	node_box = {
 | 
			
		||||
		type = "fixed",
 | 
			
		||||
		fixed = { {-0.5, -0.5, 0.46875, 0.5, 0.5, 0.5} }
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
-- Convert old curtain nodes to param2-colorization
 | 
			
		||||
 | 
			
		||||
local curtaincolors = {
 | 
			
		||||
	"red",
 | 
			
		||||
	"green",
 | 
			
		||||
	"blue",
 | 
			
		||||
	"white",
 | 
			
		||||
	"pink",
 | 
			
		||||
	"violet",
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
homedecor.old_static_curtain_nodes = {}
 | 
			
		||||
 | 
			
		||||
for _, color in ipairs(curtaincolors) do
 | 
			
		||||
	table.insert(homedecor.old_static_curtain_nodes, "homedecor:curtain_"..color)
 | 
			
		||||
	table.insert(homedecor.old_static_curtain_nodes, "homedecor:curtain_open_"..color)
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
minetest.register_lbm({
 | 
			
		||||
	name = "homedecor:convert_curtains",
 | 
			
		||||
	label = "Convert static curtain nodes to use param2 color",
 | 
			
		||||
	run_at_every_load = false,
 | 
			
		||||
	nodenames = homedecor.old_static_curtain_nodes,
 | 
			
		||||
	action = function(pos, node)
 | 
			
		||||
		local name = node.name
 | 
			
		||||
		local color = string.sub(name, 19)
 | 
			
		||||
		local openclose = "closed"
 | 
			
		||||
 | 
			
		||||
		if string.find(color, "open") then
 | 
			
		||||
			color = string.sub(color, 6)
 | 
			
		||||
			openclose = "open"
 | 
			
		||||
		end
 | 
			
		||||
 | 
			
		||||
		local metadye = "medium_"..color
 | 
			
		||||
		if color == "white" then
 | 
			
		||||
			metadye = "white"
 | 
			
		||||
		end
 | 
			
		||||
 | 
			
		||||
		local newnode = "homedecor:curtain_"..openclose
 | 
			
		||||
		local paletteidx, _ = unifieddyes.getpaletteidx("unifieddyes:"..metadye, "wallmounted")
 | 
			
		||||
		local newparam2 = paletteidx + (node.param2 % 8)
 | 
			
		||||
 | 
			
		||||
		minetest.set_node(pos, { name = newnode, param2 = newparam2 })
 | 
			
		||||
		local meta = minetest.get_meta(pos)
 | 
			
		||||
		meta:set_string("dye", "unifieddyes:"..metadye)
 | 
			
		||||
	end
 | 
			
		||||
})
 | 
			
		||||
@@ -1,12 +0,0 @@
 | 
			
		||||
Most code and all textures by Vanessa Ezekowitz.
 | 
			
		||||
 | 
			
		||||
Some code copied and modified from the game's default mods (especially 
 | 
			
		||||
doors) and ironzorg's flowers mod.
 | 
			
		||||
 | 
			
		||||
Licenses: 
 | 
			
		||||
* For the lua code, LGPL. 
 | 
			
		||||
* For the door open/close sound, CC-By-SA 3.0 by Slanesh on freesound.org
 | 
			
		||||
	http://freesound.org/people/Slanesh/sounds/31768/
 | 
			
		||||
* For the gate open/close sound, CC0, by j1987 on freesound.org
 | 
			
		||||
	http://freesound.org/people/j1987/sounds/106116/
 | 
			
		||||
* For all images and everything else, WTFPL.
 | 
			
		||||
@@ -1,3 +1,4 @@
 | 
			
		||||
homedecor_common
 | 
			
		||||
default
 | 
			
		||||
moreblocks?
 | 
			
		||||
vessels?
 | 
			
		||||
moreblocks?
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										7
									
								
								homedecor_bathroom/depends.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,7 @@
 | 
			
		||||
homedecor_common
 | 
			
		||||
default
 | 
			
		||||
basic_materials
 | 
			
		||||
unifieddyes
 | 
			
		||||
building_blocks
 | 
			
		||||
bucket?
 | 
			
		||||
homedecor_fences?
 | 
			
		||||
							
								
								
									
										679
									
								
								homedecor_bathroom/init.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,679 @@
 | 
			
		||||
 | 
			
		||||
local S = homedecor.gettext
 | 
			
		||||
 | 
			
		||||
minetest.register_node(":homedecor:bathroom_tiles_dark", {
 | 
			
		||||
	description = S("Bathroom/kitchen tiles (dark)"),
 | 
			
		||||
	tiles = {
 | 
			
		||||
		"homedecor_bathroom_tiles_bg.png"
 | 
			
		||||
	},
 | 
			
		||||
	overlay_tiles = {
 | 
			
		||||
		{ name = "homedecor_bathroom_tiles_fg.png", color = 0xff606060 },
 | 
			
		||||
	},
 | 
			
		||||
	paramtype = "light",
 | 
			
		||||
	paramtype2 = "color",
 | 
			
		||||
	palette = "unifieddyes_palette_extended.png",
 | 
			
		||||
	groups = {cracky=3, ud_param2_colorable = 1},
 | 
			
		||||
	sounds = default.node_sound_stone_defaults(),
 | 
			
		||||
	on_construct = unifieddyes.on_construct,
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_node(":homedecor:bathroom_tiles_medium", {
 | 
			
		||||
	description = S("Bathroom/kitchen tiles (medium)"),
 | 
			
		||||
	tiles = {
 | 
			
		||||
		"homedecor_bathroom_tiles_bg.png"
 | 
			
		||||
	},
 | 
			
		||||
	overlay_tiles = {
 | 
			
		||||
		{ name = "homedecor_bathroom_tiles_fg.png", color = 0xffc0c0c0 },
 | 
			
		||||
	},
 | 
			
		||||
	paramtype = "light",
 | 
			
		||||
	paramtype2 = "color",
 | 
			
		||||
	palette = "unifieddyes_palette_extended.png",
 | 
			
		||||
	groups = {cracky=3, ud_param2_colorable = 1},
 | 
			
		||||
	sounds = default.node_sound_stone_defaults(),
 | 
			
		||||
	on_construct = unifieddyes.on_construct,
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_node(":homedecor:bathroom_tiles_light", {
 | 
			
		||||
	description = S("Bathroom/kitchen tiles (light)"),
 | 
			
		||||
	tiles = {
 | 
			
		||||
		"homedecor_bathroom_tiles_bg.png"
 | 
			
		||||
	},
 | 
			
		||||
	overlay_tiles = {
 | 
			
		||||
			{ name = "homedecor_bathroom_tiles_fg.png", color = 0xffffffff },
 | 
			
		||||
	},
 | 
			
		||||
	paramtype = "light",
 | 
			
		||||
	paramtype2 = "color",
 | 
			
		||||
	palette = "unifieddyes_palette_extended.png",
 | 
			
		||||
	groups = {cracky=3, ud_param2_colorable = 1},
 | 
			
		||||
	sounds = default.node_sound_stone_defaults(),
 | 
			
		||||
	on_construct = unifieddyes.on_construct,
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
local tr_cbox = {
 | 
			
		||||
	type = "fixed",
 | 
			
		||||
	fixed = { -0.375, -0.3125, 0.25, 0.375, 0.375, 0.5 }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
homedecor.register("towel_rod", {
 | 
			
		||||
	description = S("Towel rod with towel"),
 | 
			
		||||
	mesh = "homedecor_towel_rod.obj",
 | 
			
		||||
	tiles = {
 | 
			
		||||
		"homedecor_generic_terrycloth.png",
 | 
			
		||||
		"default_wood.png",
 | 
			
		||||
	},
 | 
			
		||||
	inventory_image = "homedecor_towel_rod_inv.png",
 | 
			
		||||
	selection_box = tr_cbox,
 | 
			
		||||
	walkable = false,
 | 
			
		||||
	groups = {snappy=2,choppy=2,oddly_breakable_by_hand=3,flammable=3},
 | 
			
		||||
	sounds = default.node_sound_defaults(),
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
homedecor.register("medicine_cabinet", {
 | 
			
		||||
	description = S("Medicine cabinet"),
 | 
			
		||||
	mesh = "homedecor_medicine_cabinet.obj",
 | 
			
		||||
	tiles = {
 | 
			
		||||
		'default_wood.png',
 | 
			
		||||
		'homedecor_medicine_cabinet_mirror.png'
 | 
			
		||||
	},
 | 
			
		||||
	inventory_image = "homedecor_medicine_cabinet_inv.png",
 | 
			
		||||
	selection_box = {
 | 
			
		||||
		type = "fixed",
 | 
			
		||||
		fixed = {-0.3125, -0.1875, 0.3125, 0.3125, 0.5, 0.5}
 | 
			
		||||
	},
 | 
			
		||||
	walkable = false,
 | 
			
		||||
	groups = { snappy = 3 },
 | 
			
		||||
	sounds = default.node_sound_wood_defaults(),
 | 
			
		||||
	on_punch = function(pos, node, puncher, pointed_thing)
 | 
			
		||||
		node.name = "homedecor:medicine_cabinet_open"
 | 
			
		||||
		minetest.swap_node(pos, node)
 | 
			
		||||
	end,
 | 
			
		||||
	infotext=S("Medicine cabinet"),
 | 
			
		||||
	inventory = {
 | 
			
		||||
		size=6,
 | 
			
		||||
	},
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
homedecor.register("medicine_cabinet_open", {
 | 
			
		||||
	mesh = "homedecor_medicine_cabinet_open.obj",
 | 
			
		||||
	tiles = {
 | 
			
		||||
		'default_wood.png',
 | 
			
		||||
		'homedecor_medicine_cabinet_mirror.png',
 | 
			
		||||
		'homedecor_medicine_cabinet_inside.png'
 | 
			
		||||
	},
 | 
			
		||||
	selection_box = {
 | 
			
		||||
		type = "fixed",
 | 
			
		||||
		fixed = {-0.3125, -0.1875, -0.25, 0.3125, 0.5, 0.5}
 | 
			
		||||
	},
 | 
			
		||||
	walkable = false,
 | 
			
		||||
	groups = { snappy = 3, not_in_creative_inventory=1 },
 | 
			
		||||
	drop = "homedecor:medicine_cabinet",
 | 
			
		||||
	on_punch = function(pos, node, puncher, pointed_thing)
 | 
			
		||||
		node.name = "homedecor:medicine_cabinet"
 | 
			
		||||
		minetest.swap_node(pos, node)
 | 
			
		||||
	end,
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
-- "Sanitation" related
 | 
			
		||||
 | 
			
		||||
local toilet_sbox = {
 | 
			
		||||
	type = "fixed",
 | 
			
		||||
	fixed = { -6/16, -8/16, -8/16, 6/16, 9/16, 8/16 },
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
local toilet_cbox = {
 | 
			
		||||
	type = "fixed",
 | 
			
		||||
	fixed = {
 | 
			
		||||
		{-6/16, -8/16, -8/16, 6/16, 1/16, 8/16 },
 | 
			
		||||
		{-6/16, -8/16, 4/16, 6/16, 9/16, 8/16 }
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
homedecor.register("toilet", {
 | 
			
		||||
	description = S("Toilet"),
 | 
			
		||||
	mesh = "homedecor_toilet_closed.obj",
 | 
			
		||||
	tiles = {
 | 
			
		||||
		"building_blocks_marble.png",
 | 
			
		||||
		"building_blocks_marble.png",
 | 
			
		||||
		"building_blocks_marble.png",
 | 
			
		||||
		{ name = "homedecor_generic_metal.png", color = homedecor.color_med_grey }
 | 
			
		||||
	},
 | 
			
		||||
	selection_box = toilet_sbox,
 | 
			
		||||
	node_box = toilet_cbox,
 | 
			
		||||
	groups = {cracky=3},
 | 
			
		||||
	sounds = default.node_sound_stone_defaults(),
 | 
			
		||||
	on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
 | 
			
		||||
		node.name = "homedecor:toilet_open"
 | 
			
		||||
		minetest.set_node(pos, node)
 | 
			
		||||
	end
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
homedecor.register("toilet_open", {
 | 
			
		||||
	mesh = "homedecor_toilet_open.obj",
 | 
			
		||||
	tiles = {
 | 
			
		||||
		"building_blocks_marble.png",
 | 
			
		||||
		"building_blocks_marble.png",
 | 
			
		||||
		"building_blocks_marble.png",
 | 
			
		||||
		"default_water.png",
 | 
			
		||||
		{ name = "homedecor_generic_metal.png", color = homedecor.color_med_grey }
 | 
			
		||||
	},
 | 
			
		||||
	selection_box = toilet_sbox,
 | 
			
		||||
	collision_box = toilet_cbox,
 | 
			
		||||
	drop = "homedecor:toilet",
 | 
			
		||||
	groups = {cracky=3},
 | 
			
		||||
	sounds = default.node_sound_stone_defaults(),
 | 
			
		||||
	on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
 | 
			
		||||
		node.name = "homedecor:toilet"
 | 
			
		||||
		minetest.set_node(pos, node)
 | 
			
		||||
		minetest.sound_play("homedecor_toilet_flush", {
 | 
			
		||||
			pos=pos,
 | 
			
		||||
			max_hear_distance = 5,
 | 
			
		||||
			gain = 1,
 | 
			
		||||
		})
 | 
			
		||||
	end
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
-- toilet paper :-)
 | 
			
		||||
 | 
			
		||||
local tp_cbox = {
 | 
			
		||||
	type = "fixed",
 | 
			
		||||
	fixed = { -0.25, 0.125, 0.0625, 0.1875, 0.4375, 0.5 }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
homedecor.register("toilet_paper", {
 | 
			
		||||
	description = S("Toilet paper"),
 | 
			
		||||
	mesh = "homedecor_toilet_paper.obj",
 | 
			
		||||
	tiles = {
 | 
			
		||||
		"homedecor_generic_quilted_paper.png",
 | 
			
		||||
		"default_wood.png"
 | 
			
		||||
	},
 | 
			
		||||
	inventory_image = "homedecor_toilet_paper_inv.png",
 | 
			
		||||
	selection_box = tp_cbox,
 | 
			
		||||
	walkable = false,
 | 
			
		||||
	groups = {snappy=3,oddly_breakable_by_hand=3},
 | 
			
		||||
	sounds = default.node_sound_defaults(),
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
--Sink
 | 
			
		||||
 | 
			
		||||
local sink_sbox = {
 | 
			
		||||
	type = "fixed",
 | 
			
		||||
	fixed = { -5/16, -8/16, 1/16, 5/16, 8/16, 8/16 }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
local sink_cbox = {
 | 
			
		||||
	type = "fixed",
 | 
			
		||||
	fixed = {
 | 
			
		||||
		{ -5/16,  5/16, 1/16, -4/16, 8/16, 8/16 },
 | 
			
		||||
		{  5/16,  5/16, 1/16,  4/16, 8/16, 8/16 },
 | 
			
		||||
		{ -5/16,  5/16, 1/16,  5/16, 8/16, 2/16 },
 | 
			
		||||
		{ -5/16,  5/16, 6/16,  5/16, 8/16, 8/16 },
 | 
			
		||||
		{ -4/16, -8/16, 1/16,  4/16, 5/16, 6/16 }
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
homedecor.register("sink", {
 | 
			
		||||
	description = S("Bathroom Sink"),
 | 
			
		||||
	mesh = "homedecor_bathroom_sink.obj",
 | 
			
		||||
	tiles = {
 | 
			
		||||
		"building_blocks_marble.png",
 | 
			
		||||
		"building_blocks_marble.png",
 | 
			
		||||
		"default_water.png"
 | 
			
		||||
	},
 | 
			
		||||
	inventory_image="homedecor_bathroom_sink_inv.png",
 | 
			
		||||
	selection_box = sink_sbox,
 | 
			
		||||
	collision_box = sink_cbox,
 | 
			
		||||
	groups = {cracky=3},
 | 
			
		||||
	sounds = default.node_sound_stone_defaults(),
 | 
			
		||||
	on_destruct = function(pos)
 | 
			
		||||
		homedecor.stop_particle_spawner({x=pos.x, y=pos.y+1, z=pos.z})
 | 
			
		||||
	end
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
--Taps
 | 
			
		||||
 | 
			
		||||
local function taps_on_rightclick(pos, node, clicker, itemstack, pointed_thing)
 | 
			
		||||
	local below = minetest.get_node_or_nil({x=pos.x, y=pos.y-1, z=pos.z})
 | 
			
		||||
	if below and
 | 
			
		||||
	  below.name == "homedecor:shower_tray" or
 | 
			
		||||
	  below.name == "homedecor:sink" or
 | 
			
		||||
	  below.name == "homedecor:kitchen_cabinet_with_sink" or
 | 
			
		||||
	  below.name == "homedecor:kitchen_cabinet_with_sink_locked" then
 | 
			
		||||
		local particledef = {
 | 
			
		||||
			outlet      = { x = 0, y = -0.44, z = 0.28 },
 | 
			
		||||
			velocity_x  = { min = -0.1, max = 0.1 },
 | 
			
		||||
			velocity_y  = -0.3,
 | 
			
		||||
			velocity_z  = { min = -0.1, max = 0 },
 | 
			
		||||
			spread      = 0,
 | 
			
		||||
			die_on_collision = true,
 | 
			
		||||
		}
 | 
			
		||||
		homedecor.start_particle_spawner(pos, node, particledef, "homedecor_faucet")
 | 
			
		||||
	end
 | 
			
		||||
	return itemstack
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
homedecor.register("taps", {
 | 
			
		||||
	description = S("Bathroom taps/faucet"),
 | 
			
		||||
	mesh = "homedecor_bathroom_faucet.obj",
 | 
			
		||||
	tiles = {
 | 
			
		||||
		{ name = "homedecor_generic_metal.png", color = homedecor.color_med_grey },
 | 
			
		||||
		"homedecor_generic_metal_bright.png",
 | 
			
		||||
		"homedecor_generic_metal.png",
 | 
			
		||||
		"homedecor_generic_metal_bright.png"
 | 
			
		||||
	},
 | 
			
		||||
	inventory_image = "3dforniture_taps_inv.png",
 | 
			
		||||
	wield_image = "3dforniture_taps_inv.png",
 | 
			
		||||
	selection_box = {
 | 
			
		||||
		type = "fixed",
 | 
			
		||||
		fixed = { -4/16, -7/16, 4/16, 4/16, -4/16, 8/16 },
 | 
			
		||||
	},
 | 
			
		||||
	walkable = false,
 | 
			
		||||
	groups = {cracky=3},
 | 
			
		||||
	sounds = default.node_sound_stone_defaults(),
 | 
			
		||||
	on_rightclick = taps_on_rightclick,
 | 
			
		||||
	on_destruct = homedecor.stop_particle_spawner,
 | 
			
		||||
	on_rotate = screwdriver.disallow
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
homedecor.register("taps_brass", {
 | 
			
		||||
	description = S("Bathroom taps/faucet (brass)"),
 | 
			
		||||
	mesh = "homedecor_bathroom_faucet.obj",
 | 
			
		||||
	tiles = {
 | 
			
		||||
		"homedecor_generic_metal_brass.png",
 | 
			
		||||
		"homedecor_generic_metal_brass.png",
 | 
			
		||||
		"homedecor_generic_metal.png",
 | 
			
		||||
		"homedecor_generic_metal_brass.png"
 | 
			
		||||
	},
 | 
			
		||||
	inventory_image = "3dforniture_taps_brass_inv.png",
 | 
			
		||||
	wield_image = "3dforniture_taps_brass_inv.png",
 | 
			
		||||
	selection_box = {
 | 
			
		||||
		type = "fixed",
 | 
			
		||||
		fixed = { -4/16, -7/16, 4/16, 4/16, -4/16, 8/16 },
 | 
			
		||||
	},
 | 
			
		||||
	walkable = false,
 | 
			
		||||
	groups = {cracky=3},
 | 
			
		||||
	sounds = default.node_sound_stone_defaults(),
 | 
			
		||||
	on_rightclick = taps_on_rightclick,
 | 
			
		||||
	on_destruct = homedecor.stop_particle_spawner,
 | 
			
		||||
	on_rotate = screwdriver.disallow
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
--Shower Tray
 | 
			
		||||
 | 
			
		||||
homedecor.register("shower_tray", {
 | 
			
		||||
	description = S("Shower Tray"),
 | 
			
		||||
	tiles = {
 | 
			
		||||
		"forniture_marble_base_ducha_top.png",
 | 
			
		||||
		"building_blocks_marble.png"
 | 
			
		||||
	},
 | 
			
		||||
	node_box = {
 | 
			
		||||
		type = "fixed",
 | 
			
		||||
		fixed = {
 | 
			
		||||
			{ -0.5, -0.5, -0.5, 0.5, -0.45, 0.5 },
 | 
			
		||||
			{ -0.5, -0.45, -0.5, 0.5, -0.4, -0.45 },
 | 
			
		||||
			{ -0.5, -0.45, 0.45, 0.5, -0.4, 0.5 },
 | 
			
		||||
			{ -0.5, -0.45, -0.45, -0.45, -0.4, 0.45 },
 | 
			
		||||
			{  0.45, -0.45, -0.45, 0.5, -0.4, 0.45 }
 | 
			
		||||
		},
 | 
			
		||||
	},
 | 
			
		||||
	selection_box = homedecor.nodebox.slab_y(0.1),
 | 
			
		||||
	groups = {cracky=2},
 | 
			
		||||
	sounds = default.node_sound_stone_defaults(),
 | 
			
		||||
	on_destruct = function(pos)
 | 
			
		||||
		homedecor.stop_particle_spawner({x=pos.x, y=pos.y+2, z=pos.z}) -- the showerhead
 | 
			
		||||
		homedecor.stop_particle_spawner({x=pos.x, y=pos.y+1, z=pos.z}) -- the taps, if any
 | 
			
		||||
	end
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
--Shower Head
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
local sh_cbox = {
 | 
			
		||||
	type = "fixed",
 | 
			
		||||
	fixed = { -0.2, -0.4, -0.05, 0.2, 0.1, 0.5 }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
homedecor.register("shower_head", {
 | 
			
		||||
	drawtype = "mesh",
 | 
			
		||||
	mesh = "homedecor_shower_head.obj",
 | 
			
		||||
	tiles = {
 | 
			
		||||
		"homedecor_generic_metal.png",
 | 
			
		||||
		"homedecor_shower_head.png"
 | 
			
		||||
	},
 | 
			
		||||
	inventory_image = "homedecor_shower_head_inv.png",
 | 
			
		||||
	description = S("Shower Head"),
 | 
			
		||||
	groups = {snappy=3},
 | 
			
		||||
	selection_box = sh_cbox,
 | 
			
		||||
	walkable = false,
 | 
			
		||||
	on_rotate = screwdriver.disallow,
 | 
			
		||||
	on_rightclick = function(pos, node, clicker, itemstack, pointed_thing)
 | 
			
		||||
		local below = minetest.get_node_or_nil({x=pos.x, y=pos.y-2.0, z=pos.z})
 | 
			
		||||
		if below and (
 | 
			
		||||
			below.name == "homedecor:shower_tray" or
 | 
			
		||||
			below.name == "homedecor:bathtub_clawfoot_brass_taps" or
 | 
			
		||||
			below.name == "homedecor:bathtub_clawfoot_chrome_taps" ) then
 | 
			
		||||
			local particledef = {
 | 
			
		||||
				outlet      = { x = 0, y = -0.42, z = 0.1 },
 | 
			
		||||
				velocity_x  = { min = -0.15, max = 0.15 },
 | 
			
		||||
				velocity_y  = -2,
 | 
			
		||||
				velocity_z  = { min = -0.3,  max = 0.1 },
 | 
			
		||||
				spread      = 0.12
 | 
			
		||||
			}
 | 
			
		||||
			homedecor.start_particle_spawner(pos, node, particledef, "homedecor_shower")
 | 
			
		||||
		end
 | 
			
		||||
		return itemstack
 | 
			
		||||
	end,
 | 
			
		||||
	on_destruct = function(pos)
 | 
			
		||||
		homedecor.stop_particle_spawner(pos)
 | 
			
		||||
	end
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
local tub_sbox = {
 | 
			
		||||
	type = "fixed",
 | 
			
		||||
	fixed = { -0.5, -0.5, -0.5, 1.5, 0.3125, 0.5 },
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
local tub_cbox = {
 | 
			
		||||
	type = "fixed",
 | 
			
		||||
	fixed = {
 | 
			
		||||
		{-0.4375, -0.0625, -0.5, 1.4375, 0.5, -0.4375}, -- NodeBox1
 | 
			
		||||
		{-0.4375, -0.0625, 0.4375, 1.4375, 0.5, 0.5}, -- NodeBox2
 | 
			
		||||
		{-0.5, 0.1875, -0.4375, -0.4375, 0.5, 0.4375}, -- NodeBox3
 | 
			
		||||
		{1.4375, -0.0625, -0.4375, 1.5, 0.5, 0.4375}, -- NodeBox4
 | 
			
		||||
		{-0.3125, -0.3125, -0.4375, -0.125, -0.0625, 0.4375}, -- NodeBox5
 | 
			
		||||
		{1.375, -0.3125, -0.4375, 1.4375, -0.0625, 0.4375}, -- NodeBox6
 | 
			
		||||
		{-0.125, -0.3125, 0.375, 1.375, -0.0625, 0.4375}, -- NodeBox7
 | 
			
		||||
		{-0.125, -0.3125, -0.4375, 1.375, -0.0625, -0.375}, -- NodeBox8
 | 
			
		||||
		{-0.125, -0.5, -0.375, 1.375, -0.3125, 0.375}, -- NodeBox9
 | 
			
		||||
		{-0.4375, -0.0625, -0.4375, -0.3125, 0.1875, 0.4375}, -- NodeBox10
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
homedecor.register("bathtub_clawfoot_brass_taps", {
 | 
			
		||||
	drawtype = "mesh",
 | 
			
		||||
	mesh = "homedecor_bathtub_clawfoot.obj",
 | 
			
		||||
	tiles = {
 | 
			
		||||
		{ name = "homedecor_generic_metal.png", color = homedecor.color_med_grey },
 | 
			
		||||
		"homedecor_generic_metal_bright.png",
 | 
			
		||||
		"homedecor_generic_metal_bright.png",
 | 
			
		||||
		"homedecor_generic_metal_brass.png",
 | 
			
		||||
		"building_blocks_marble.png",
 | 
			
		||||
		"homedecor_bathtub_clawfoot_bottom_inside.png",
 | 
			
		||||
	},
 | 
			
		||||
	description = S("Bathtub, clawfoot, with brass taps"),
 | 
			
		||||
	groups = {cracky=3},
 | 
			
		||||
	selection_box = tub_sbox,
 | 
			
		||||
	node_box = tub_cbox,
 | 
			
		||||
	sounds = default.node_sound_stone_defaults(),
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
homedecor.register("bathtub_clawfoot_chrome_taps", {
 | 
			
		||||
	drawtype = "mesh",
 | 
			
		||||
	mesh = "homedecor_bathtub_clawfoot.obj",
 | 
			
		||||
	tiles = {
 | 
			
		||||
		{ name = "homedecor_generic_metal.png", color = homedecor.color_med_grey },
 | 
			
		||||
		"homedecor_generic_metal_bright.png",
 | 
			
		||||
		"homedecor_generic_metal_bright.png",
 | 
			
		||||
		"homedecor_generic_metal_bright.png",
 | 
			
		||||
		"building_blocks_marble.png",
 | 
			
		||||
		"homedecor_bathtub_clawfoot_bottom_inside.png",
 | 
			
		||||
	},
 | 
			
		||||
	description = S("Bathtub, clawfoot, with chrome taps"),
 | 
			
		||||
	groups = {cracky=3},
 | 
			
		||||
	selection_box = tub_sbox,
 | 
			
		||||
	node_box = tub_cbox,
 | 
			
		||||
	sounds = default.node_sound_stone_defaults(),
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
local bs_cbox = {
 | 
			
		||||
	type = "fixed",
 | 
			
		||||
	fixed = { -8/16, -8/16, 1/16, 8/16, 8/16, 8/16 }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
homedecor.register("bathroom_set", {
 | 
			
		||||
	drawtype = "mesh",
 | 
			
		||||
	mesh = "homedecor_bathroom_set.obj",
 | 
			
		||||
	tiles = {
 | 
			
		||||
		"homedecor_bathroom_set_mirror.png",
 | 
			
		||||
		"homedecor_bathroom_set_tray.png",
 | 
			
		||||
		"homedecor_bathroom_set_toothbrush.png",
 | 
			
		||||
		"homedecor_bathroom_set_cup.png",
 | 
			
		||||
		"homedecor_bathroom_set_toothpaste.png",
 | 
			
		||||
	},
 | 
			
		||||
	inventory_image = "homedecor_bathroom_set_inv.png",
 | 
			
		||||
	description = S("Bathroom sundries set"),
 | 
			
		||||
	groups = {snappy=3},
 | 
			
		||||
	selection_box = bs_cbox,
 | 
			
		||||
	walkable = false,
 | 
			
		||||
	sounds = default.node_sound_glass_defaults(),
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
-- aliases
 | 
			
		||||
 | 
			
		||||
minetest.register_alias("3dforniture:toilet", "homedecor:toilet")
 | 
			
		||||
minetest.register_alias("3dforniture:toilet_open", "homedecor:toilet_open")
 | 
			
		||||
minetest.register_alias("3dforniture:sink", "homedecor:sink")
 | 
			
		||||
minetest.register_alias("3dforniture:taps", "homedecor:taps")
 | 
			
		||||
minetest.register_alias("3dforniture:shower_tray", "homedecor:shower_tray")
 | 
			
		||||
minetest.register_alias("3dforniture:shower_head", "homedecor:shower_head")
 | 
			
		||||
minetest.register_alias("3dforniture:table_lamp", "homedecor:table_lamp_off")
 | 
			
		||||
 | 
			
		||||
minetest.register_alias("toilet", "homedecor:toilet")
 | 
			
		||||
minetest.register_alias("sink", "homedecor:sink")
 | 
			
		||||
minetest.register_alias("taps", "homedecor:taps")
 | 
			
		||||
minetest.register_alias("shower_tray", "homedecor:shower_tray")
 | 
			
		||||
minetest.register_alias("shower_head", "homedecor:shower_head")
 | 
			
		||||
minetest.register_alias("table_lamp", "homedecor:table_lamp_off")
 | 
			
		||||
 | 
			
		||||
-- convert old static nodes
 | 
			
		||||
 | 
			
		||||
homedecor.old_static_bathroom_tiles = {
 | 
			
		||||
	"homedecor:tiles_1",
 | 
			
		||||
	"homedecor:tiles_2",
 | 
			
		||||
	"homedecor:tiles_3",
 | 
			
		||||
	"homedecor:tiles_4",
 | 
			
		||||
	"homedecor:tiles_red",
 | 
			
		||||
	"homedecor:tiles_tan",
 | 
			
		||||
	"homedecor:tiles_yellow",
 | 
			
		||||
	"homedecor:tiles_green",
 | 
			
		||||
	"homedecor:tiles_blue"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
local old_to_color = {
 | 
			
		||||
	"light_grey",
 | 
			
		||||
	"grey",
 | 
			
		||||
	"black",
 | 
			
		||||
	"black"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
minetest.register_lbm({
 | 
			
		||||
	name = ":homedecor:convert_bathroom_tiles",
 | 
			
		||||
	label = "Convert bathroom tiles to use param2 color",
 | 
			
		||||
	run_at_every_load = false,
 | 
			
		||||
	nodenames = homedecor.old_static_bathroom_tiles,
 | 
			
		||||
	action = function(pos, node)
 | 
			
		||||
		local name = node.name
 | 
			
		||||
		local newname = "homedecor:bathroom_tiles_light"
 | 
			
		||||
		local a = string.find(name, "_")
 | 
			
		||||
		local color = string.sub(name, a + 1)
 | 
			
		||||
 | 
			
		||||
		if color == "tan" then
 | 
			
		||||
			color = "yellow_s50"
 | 
			
		||||
		elseif color == "1" or color == "2" or color == "3" or color == "4" then
 | 
			
		||||
			if color == "4" then
 | 
			
		||||
				newname = "homedecor:bathroom_tiles_medium"
 | 
			
		||||
			end
 | 
			
		||||
			color = old_to_color[tonumber(color)]
 | 
			
		||||
		elseif color ~= "yellow" then
 | 
			
		||||
			color = color.."_s50"
 | 
			
		||||
		end
 | 
			
		||||
 | 
			
		||||
		local paletteidx = unifieddyes.getpaletteidx("unifieddyes:"..color, "extended")
 | 
			
		||||
 | 
			
		||||
		minetest.set_node(pos, { name = newname, param2 = paletteidx })
 | 
			
		||||
		local meta = minetest.get_meta(pos)
 | 
			
		||||
		meta:set_string("dye", "unifieddyes:"..color)
 | 
			
		||||
		meta:set_string("palette", "ext")
 | 
			
		||||
	end
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
-- crafting
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
    output = "homedecor:towel_rod",
 | 
			
		||||
    recipe = {
 | 
			
		||||
		{ "group:wood", "group:stick", "group:wood" },
 | 
			
		||||
		{ "", "building_blocks:terrycloth_towel", "" },
 | 
			
		||||
    },
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
    output = "homedecor:toilet_paper",
 | 
			
		||||
    recipe = {
 | 
			
		||||
		{ "", "default:paper", "default:paper" },
 | 
			
		||||
		{ "group:wood", "group:stick", "default:paper" },
 | 
			
		||||
		{ "", "default:paper", "default:paper" },
 | 
			
		||||
    },
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
    output = "homedecor:medicine_cabinet",
 | 
			
		||||
    recipe = {
 | 
			
		||||
		{ "group:stick", "default:glass", "group:stick" },
 | 
			
		||||
		{ "group:stick", "default:glass", "group:stick" },
 | 
			
		||||
		{ "group:stick", "default:glass", "group:stick" }
 | 
			
		||||
    },
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
-- bathroom/kitchen tiles
 | 
			
		||||
 | 
			
		||||
minetest.register_craft( {
 | 
			
		||||
		output = "homedecor:bathroom_tiles_light 4",
 | 
			
		||||
		recipe = {
 | 
			
		||||
			{ "group:marble", "group:marble" },
 | 
			
		||||
			{ "group:marble", "group:marble" }
 | 
			
		||||
		},
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
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 = {
 | 
			
		||||
			{ "group:marble", "group:marble", "" },
 | 
			
		||||
			{ "group:marble", "group:marble", "dye:grey" }
 | 
			
		||||
		},
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
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 = {
 | 
			
		||||
			{ "group:marble", "group:marble", "" },
 | 
			
		||||
			{ "group:marble", "group:marble", "dye:dark_grey" }
 | 
			
		||||
		},
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
unifieddyes.register_color_craft({
 | 
			
		||||
	output = "homedecor:bathroom_tiles_dark",
 | 
			
		||||
	palette = "extended",
 | 
			
		||||
	type = "shapeless",
 | 
			
		||||
	neutral_node = "homedecor:bathroom_tiles_dark",
 | 
			
		||||
	recipe = {
 | 
			
		||||
		"NEUTRAL_NODE",
 | 
			
		||||
		"MAIN_DYE"
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	output = "homedecor:bathroom_set",
 | 
			
		||||
	recipe = {
 | 
			
		||||
		{ "", "homedecor:glass_table_small_round", "" },
 | 
			
		||||
		{ "basic_materials:plastic_sheet", "homedecor:glass_table_small_round", "basic_materials:plastic_sheet" },
 | 
			
		||||
		{ "group:stick", "basic_materials:plastic_sheet", "group:stick" }
 | 
			
		||||
	},
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	output = "homedecor:toilet",
 | 
			
		||||
	recipe = {
 | 
			
		||||
		{ "","","bucket:bucket_water"},
 | 
			
		||||
		{ "group:marble","group:marble", "group:marble" },
 | 
			
		||||
		{ "", "bucket:bucket_empty", "" },
 | 
			
		||||
	},
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	output = "homedecor:sink",
 | 
			
		||||
	recipe = {
 | 
			
		||||
		{ "group:marble","bucket:bucket_empty", "group:marble" },
 | 
			
		||||
		{ "", "group:marble", "" }
 | 
			
		||||
	},
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	output = "homedecor:taps",
 | 
			
		||||
	recipe = {
 | 
			
		||||
		{ "default:steel_ingot","bucket:bucket_water", "default:steel_ingot" },
 | 
			
		||||
	},
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	output = "homedecor:taps_brass",
 | 
			
		||||
	recipe = {
 | 
			
		||||
		{ "basic_materials:brass_ingot","bucket:bucket_water", "basic_materials:brass_ingot" },
 | 
			
		||||
	},
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	output = "homedecor:shower_tray",
 | 
			
		||||
	recipe = {
 | 
			
		||||
		{ "group:marble","bucket:bucket_empty", "group:marble" },
 | 
			
		||||
	},
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	output = "homedecor:shower_head",
 | 
			
		||||
	recipe = {
 | 
			
		||||
		{"default:steel_ingot", "bucket:bucket_water"},
 | 
			
		||||
	},
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	output = "homedecor:bathtub_clawfoot_brass_taps",
 | 
			
		||||
	recipe = {
 | 
			
		||||
		{ "homedecor:taps_brass", "", "" },
 | 
			
		||||
		{ "group:marble", "", "group:marble" },
 | 
			
		||||
		{ "default:steel_ingot", "group:marble", "default:steel_ingot"},
 | 
			
		||||
	},
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
minetest.register_craft({
 | 
			
		||||
	output = "homedecor:bathtub_clawfoot_chrome_taps",
 | 
			
		||||
	recipe = {
 | 
			
		||||
		{ "homedecor:taps", "", "" },
 | 
			
		||||
		{ "group:marble", "", "group:marble" },
 | 
			
		||||
		{"default:steel_ingot", "group:marble", "default:steel_ingot"},
 | 
			
		||||
	},
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||