From 72e53a82d7cbf01137a3bb462c49d8a9908070dd Mon Sep 17 00:00:00 2001 From: AFCMS Date: Mon, 26 Apr 2021 19:16:27 +0200 Subject: [PATCH 01/66] Basic not working script --- tools/create_luacheck.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) mode change 100644 => 100755 tools/create_luacheck.py diff --git a/tools/create_luacheck.py b/tools/create_luacheck.py old mode 100644 new mode 100755 index e69de29bb..31046a575 --- a/tools/create_luacheck.py +++ b/tools/create_luacheck.py @@ -0,0 +1,22 @@ +import os +import re +from pathlib import Path + +path = "../mods/" +pattern = re.compile(r'[a-z]') + +pathlist = Path(path).rglob('*.lua') +for path in pathlist: + path_in_str = str(path) + print(path_in_str) + with open(path_in_str) as f: + for line in f: + if pattern.search(line): + print(line) + +for subdir, dirs, files in os.walk(path): + for file in files: + print(os.path.join(subdir, file)) + filepath = subdir + os.sep + file + if filepath.endswith(".lua"): + print(filepath) \ No newline at end of file From 0a2fcdc4e8901f847aab1b5299140a91f1ae8dad Mon Sep 17 00:00:00 2001 From: AFCMS Date: Tue, 27 Apr 2021 19:16:08 +0200 Subject: [PATCH 02/66] fixes --- tools/create_luacheck.py | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/tools/create_luacheck.py b/tools/create_luacheck.py index 31046a575..1c38c33f4 100755 --- a/tools/create_luacheck.py +++ b/tools/create_luacheck.py @@ -2,17 +2,25 @@ import os import re from pathlib import Path -path = "../mods/" -pattern = re.compile(r'[a-z]') +path = "./mods/" +# pattern = re.compile(r'^(?P[^ \t\]]+)[ ]*=[ ]*\{') +pattern = re.compile(r'^(?P[^ \t\]]+)[ ]*=[ ]*\{') + pathlist = Path(path).rglob('*.lua') for path in pathlist: path_in_str = str(path) - print(path_in_str) + # print(path_in_str) + trouve = False with open(path_in_str) as f: - for line in f: - if pattern.search(line): - print(line) + for i, line in enumerate(f.readlines()): + m = pattern.match(line) + if m: + print(path_in_str, ":", i+1, ":", m.group('nomtableau').strip()) + trouve = True + break + if not trouve: + print(path_in_str, ": -") for subdir, dirs, files in os.walk(path): for file in files: From 1c05461e6743e58a71fb75e045501cdeec0d1eac Mon Sep 17 00:00:00 2001 From: NO11 Date: Fri, 30 Apr 2021 23:05:40 +0000 Subject: [PATCH 03/66] Add #924 (cactus breaks minecart now) --- mods/ITEMS/mcl_core/functions.lua | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/mods/ITEMS/mcl_core/functions.lua b/mods/ITEMS/mcl_core/functions.lua index 732c386b0..96f020ee2 100644 --- a/mods/ITEMS/mcl_core/functions.lua +++ b/mods/ITEMS/mcl_core/functions.lua @@ -197,9 +197,21 @@ minetest.register_abm({ interval = 1, chance = 1, action = function(pos, node, active_object_count, active_object_count_wider) - for _,object in pairs(minetest.get_objects_inside_radius(pos, 0.9)) do + for _,object in pairs(minetest.get_objects_inside_radius(pos, 1)) do if not object:is_player() and object:get_luaentity() and object:get_luaentity().name == "__builtin:item" then object:remove() + elseif not object:is_player() and object:get_luaentity().name == "mcl_minecarts:minecart" then + local pos = object:get_pos() + local driver = object:get_luaentity()._driver + if driver ~= nil then + mcl_player.player_attached[driver] = nil + local player = minetest.get_player_by_name(driver) + player:set_detach() + player:set_eye_offset({x=0, y=0, z=0},{x=0, y=0, z=0}) + mcl_player.player_set_animation(player, "stand" , 30) + end + minetest.add_item(pos, "mcl_minecarts:minecart") + object:remove() end end end, From c6e80b5882bdd171df0cd46b2631d704d9595218 Mon Sep 17 00:00:00 2001 From: Elias Fleckenstein Date: Sat, 1 May 2021 16:52:16 +0200 Subject: [PATCH 04/66] Add Real Maps --- mods/CORE/tga_encoder/.gitignore | 41 ++ mods/CORE/tga_encoder/LICENSE | 674 ++++++++++++++++++ mods/CORE/tga_encoder/README.md | 4 + mods/CORE/tga_encoder/init.lua | 109 +++ mods/CORE/tga_encoder/mod.conf | 3 + mods/HELP/tt/init.lua | 6 +- mods/ITEMS/mcl_enchanting/init.lua | 2 +- mods/ITEMS/mcl_maps/colors.json | 1 + mods/ITEMS/mcl_maps/init.lua | 261 +++++-- mods/ITEMS/mcl_maps/locale/mcl_maps.de.tr | 10 +- mods/ITEMS/mcl_maps/locale/mcl_maps.es.tr | 3 - mods/ITEMS/mcl_maps/locale/mcl_maps.fr.tr | 5 - mods/ITEMS/mcl_maps/locale/mcl_maps.ru.tr | 5 - mods/ITEMS/mcl_maps/locale/template.txt | 10 +- mods/ITEMS/mcl_maps/mod.conf | 2 +- mods/ITEMS/mcl_maps/palettes.json | 1 + .../mcl_maps/textures/map_background.png | Bin 0 -> 1710 bytes .../textures/mcl_maps_map_background.png | Bin 0 -> 1565 bytes settingtypes.txt | 3 + tools/Texture_Converter.py | 5 + tools/create_map_color_file.py | 59 ++ 21 files changed, 1114 insertions(+), 90 deletions(-) create mode 100644 mods/CORE/tga_encoder/.gitignore create mode 100644 mods/CORE/tga_encoder/LICENSE create mode 100644 mods/CORE/tga_encoder/README.md create mode 100644 mods/CORE/tga_encoder/init.lua create mode 100644 mods/CORE/tga_encoder/mod.conf create mode 100644 mods/ITEMS/mcl_maps/colors.json create mode 100644 mods/ITEMS/mcl_maps/palettes.json create mode 100644 mods/ITEMS/mcl_maps/textures/map_background.png create mode 100644 mods/ITEMS/mcl_maps/textures/mcl_maps_map_background.png create mode 100644 tools/create_map_color_file.py diff --git a/mods/CORE/tga_encoder/.gitignore b/mods/CORE/tga_encoder/.gitignore new file mode 100644 index 000000000..6fd0a376d --- /dev/null +++ b/mods/CORE/tga_encoder/.gitignore @@ -0,0 +1,41 @@ +# Compiled Lua sources +luac.out + +# luarocks build files +*.src.rock +*.zip +*.tar.gz + +# Object files +*.o +*.os +*.ko +*.obj +*.elf + +# Precompiled Headers +*.gch +*.pch + +# Libraries +*.lib +*.a +*.la +*.lo +*.def +*.exp + +# Shared objects (inc. Windows DLLs) +*.dll +*.so +*.so.* +*.dylib + +# Executables +*.exe +*.out +*.app +*.i*86 +*.x86_64 +*.hex + diff --git a/mods/CORE/tga_encoder/LICENSE b/mods/CORE/tga_encoder/LICENSE new file mode 100644 index 000000000..f288702d2 --- /dev/null +++ b/mods/CORE/tga_encoder/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/mods/CORE/tga_encoder/README.md b/mods/CORE/tga_encoder/README.md new file mode 100644 index 000000000..9b3293dda --- /dev/null +++ b/mods/CORE/tga_encoder/README.md @@ -0,0 +1,4 @@ +# tga_encoder +A TGA Encoder written in Lua without the use of external Libraries. + +May be used as a Minetest mod. diff --git a/mods/CORE/tga_encoder/init.lua b/mods/CORE/tga_encoder/init.lua new file mode 100644 index 000000000..45b9e85a2 --- /dev/null +++ b/mods/CORE/tga_encoder/init.lua @@ -0,0 +1,109 @@ +tga_encoder = {} + +local LUA_ARGS_LIMIT = 1000 + +local image = setmetatable({}, { + __call = function(self, ...) + local t = setmetatable({}, {__index = self}) + t:constructor(...) + return t + end, +}) + +function image:constructor(pixels) + self.bytes = {} + self.chunks = {self.bytes} + self.pixels = pixels + self.width = #pixels[1] + self.height = #pixels + + self:encode() +end + +function image:insert(byte) + table.insert(self.bytes, byte) + if #self.bytes == LUA_ARGS_LIMIT then + self.bytes = {} + table.insert(self.chunks, self.bytes) + end +end + +function image:littleendian(size, value) + for i = 1, size do + local byte = value % 256 + value = value - byte + value = value / 256 + self:insert(byte) + end +end + +function image:encode_colormap_spec() + -- first entry index + self:littleendian(2, 0) + -- number of entries + self:littleendian(2, 0) + -- number of bits per pixel + self:insert(0) +end + +function image:encode_image_spec() + -- X- and Y- origin + self:littleendian(2, 0) + self:littleendian(2, 0) + -- width and height + self:littleendian(2, self.width) + self:littleendian(2, self.height) + -- pixel depth + self:insert(24) + -- image descriptor + self:insert(0) +end + +function image:encode_header() + -- id length + self:insert(0) -- no image id info + -- color map type + self:insert(0) -- no color map + -- image type + self:insert(2) -- uncompressed true-color image + -- color map specification + self:encode_colormap_spec() + -- image specification + self:encode_image_spec() +end + +function image:encode_data() + for _, row in ipairs(self.pixels) do + for _, pixel in ipairs(row) do + self:insert(pixel[3]) + self:insert(pixel[2]) + self:insert(pixel[1]) + end + end +end + +function image:encode() + -- encode header + self:encode_header() + -- no color map and image id data + -- encode data + self:encode_data() + -- no extension area +end + +function image:get_data() + local data = "" + for _, bytes in ipairs(self.chunks) do + data = data .. string.char(unpack(bytes)) + end + return data .. string.char(0, 0, 0, 0) .. string.char(0, 0, 0, 0) .. "TRUEVISION-XFILE." .. string.char(0) +end + +function image:save(filename) + self.data = self.data or self:get_data() + local f = assert(io.open(filename, "w")) + f:write(self.data) + f:close() +end + +tga_encoder.image = image diff --git a/mods/CORE/tga_encoder/mod.conf b/mods/CORE/tga_encoder/mod.conf new file mode 100644 index 000000000..e4bfac898 --- /dev/null +++ b/mods/CORE/tga_encoder/mod.conf @@ -0,0 +1,3 @@ +name = tga_encoder +author = Fleckenstein +description = A TGA Encoder written in Lua without the use of external Libraries. diff --git a/mods/HELP/tt/init.lua b/mods/HELP/tt/init.lua index afc421e4f..a5ae24a35 100644 --- a/mods/HELP/tt/init.lua +++ b/mods/HELP/tt/init.lua @@ -11,6 +11,10 @@ tt.register_snippet = function(func) table.insert(tt.registered_snippets, func) end +tt.register_priority_snippet = function(func) + table.insert(tt.registered_snippets, 1, func) +end + dofile(minetest.get_modpath(minetest.get_current_modname()).."/snippets.lua") -- Apply item description updates @@ -22,8 +26,6 @@ local function apply_snippets(desc, itemstring, toolcaps, itemstack) local str, snippet_color = tt.registered_snippets[s](itemstring, toolcaps, itemstack) if snippet_color == nil then snippet_color = tt.COLOR_DEFAULT - elseif snippet_color == false then - snippet_color = false end if str then if first then diff --git a/mods/ITEMS/mcl_enchanting/init.lua b/mods/ITEMS/mcl_enchanting/init.lua index 855e3bf33..26fd5e19d 100644 --- a/mods/ITEMS/mcl_enchanting/init.lua +++ b/mods/ITEMS/mcl_enchanting/init.lua @@ -361,4 +361,4 @@ minetest.register_on_joinplayer(mcl_enchanting.initialize_player) minetest.register_on_player_receive_fields(mcl_enchanting.handle_formspec_fields) minetest.register_allow_player_inventory_action(mcl_enchanting.allow_inventory_action) minetest.register_on_player_inventory_action(mcl_enchanting.on_inventory_action) -table.insert(tt.registered_snippets, 1, mcl_enchanting.enchantments_snippet) +tt.register_priority_snippet(mcl_enchanting.enchantments_snippet) diff --git a/mods/ITEMS/mcl_maps/colors.json b/mods/ITEMS/mcl_maps/colors.json new file mode 100644 index 000000000..0aa23f0fc --- /dev/null +++ b/mods/ITEMS/mcl_maps/colors.json @@ -0,0 +1 @@ +{"player.png": [123, 74, 62], "player_back.png": [114, 68, 56], "mcl_skins_player_dummy.png": [125, 125, 125], "mcl_skins_player_1.png": [103, 100, 86], "mcl_skins_button.png": [121, 95, 85], "mcl_skins_character_1.png": [93, 90, 77], "mcl_hunger_bar_saturation.png": [255, 255, 0], "hbhunger_bar_health_poison.png": [148, 120, 24], "mcl_hunger_bar_exhaustion.png": [255, 255, 255], "mcl_hunger_icon_exhaustion.png": [213, 213, 213], "mcl_hunger_bgicon_exhaustion.png": [25, 25, 26], "mcl_hunger_icon_foodpoison.png": [109, 106, 40], "mcl_hunger_bgicon_saturation.png": [24, 24, 26], "hbhunger_bar.png": [200, 103, 0], "hbhunger_bgicon.png": [24, 24, 26], "hbhunger_icon_health_poison.png": [69, 98, 45], "mcl_hunger_bar_foodpoison.png": [116, 132, 88], "hbhunger_icon.png": [175, 132, 97], "mcl_hunger_icon_saturation.png": [157, 140, 64], "mcl_playerplus_end_sky.png": [14, 14, 14], "mobs_mc_llama_decor_purple.png": [98, 50, 98], "mobs_mc_spawn_icon_illusioner.png": [98, 111, 155], "mobs_mc_llama_gray.png": [195, 188, 175], "mobs_mc_spawn_icon_zombie.png": [64, 136, 112], "mobs_mc_llama_decor_blue.png": [50, 50, 249], "mobs_mc_spawn_icon_skeleton.png": [146, 146, 146], "mobs_mc_shulker_blue.png": [89, 100, 126], "mobs_mc_shulker_black.png": [78, 75, 76], "mobs_mc_wolf_collar.png": [186, 186, 186], "mobs_mc_spawn_icon_bat.png": [130, 63, 13], "mobs_mc_parrot_green.png": [47, 208, 62], "mobs_mc_llama_decor_magenta.png": [249, 50, 249], "mobs_mc_rabbit_black.png": [73, 64, 61], "mobs_mc_vindicator.png": [56, 56, 57], "mobs_mc_polarbear.png": [233, 220, 208], "mobs_mc_magmacube.png": [83, 40, 27], "mobs_mc_chicken.png": [198, 182, 176], "mobs_mc_ghast_firing.png": [198, 198, 198], "mobs_mc_spawn_icon_zombie_pigman.png": [202, 160, 135], "mobs_mc_husk.png": [98, 95, 76], "mobs_mc_villager_librarian.png": [176, 171, 163], "mobs_mc_villager_priest.png": [100, 64, 74], "mobs_mc_villager_smith.png": [76, 76, 63], "mobs_mc_horse_armor_gold.png": [143, 110, 59], "mobs_mc_spawn_icon_dragon.png": [98, 47, 89], "mobs_mc_spawn_icon_donkey.png": [152, 132, 100], "mobs_mc_squid.png": [37, 52, 68], "mobs_mc_villager_farmer.png": [81, 80, 67], "mobs_mc_spawn_icon_horse_skeleton.png": [245, 204, 202], "mobs_mc_horse_markings_blackdots.png": [24, 22, 22], "mobs_mc_zombie_farmer.png": [119, 99, 85], "mobs_mc_spawn_icon_vex.png": [145, 185, 185], "mobs_mc_parrot_blue.png": [43, 58, 148], "mobs_mc_spider_eyes.png": [174, 48, 48], "mobs_mc_zombie.png": [78, 110, 105], "mobs_mc_llama_decor_light_blue.png": [104, 168, 194], "mobs_mc_zombie_priest.png": [120, 104, 110], "mobs_mc_llama_decor_black.png": [50, 50, 50], "mobs_mc_horse_white.png": [190, 173, 154], "mobs_mc_spawn_icon_vindicator.png": [102, 103, 104], "mobs_mc_silverfish.png": [179, 164, 144], "mobs_mc_llama_decor_gray.png": [98, 98, 98], "mobs_mc_spawn_icon_guardian.png": [119, 156, 148], "mobs_mc_creeper.png": [98, 107, 71], "mobs_mc_shulker_purple.png": [135, 87, 99], "mobs_mc_spawn_icon_rabbit.png": [156, 126, 84], "mobs_mc_horse_armor_iron.png": [134, 123, 118], "mobs_mc_sheep.png": [182, 161, 149], "mobs_mc_parrot_grey.png": [33, 178, 173], "mobs_mc_wolf_icon_sit.png": [8, 88, 116], "mobs_mc_gold_horse_armor.png": [140, 106, 67], "mobs_mc_spawn_icon_witch.png": [98, 85, 68], "mobs_mc_shulker_green.png": [89, 122, 84], "mobs_mc_bat.png": [87, 63, 54], "mobs_mc_horse_chestnut.png": [126, 78, 58], "mobs_mc_shulker_yellow.png": [175, 128, 69], "mobs_mc_spawn_icon_creeper.png": [115, 125, 53], "mobs_mc_slime.png": [63, 133, 78], "mobs_mc_evoker.png": [44, 48, 43], "mobs_mc_horse_skeleton.png": [163, 156, 141], "mobs_mc_spawn_icon_blaze.png": [142, 76, 49], "mobs_mc_shulker_light_blue.png": [114, 140, 158], "mobs_mc_shulker_gray.png": [106, 104, 109], "mobs_mc_horse_darkbrown.png": [69, 47, 34], "mobs_mc_stray_overlay.png": [63, 59, 65], "mobs_mc_arrow_particle.png": [218, 171, 136], "mobs_mc_spawn_icon_cat.png": [120, 66, 10], "mobs_mc_stray.png": [155, 157, 161], "mobs_mc_trading_formspec_bg.png": [157, 157, 157], "mobs_mc_llama_chest.png": [70, 53, 36], "mobs_mc_spawn_icon_villager.png": [134, 124, 81], "mobs_mc_pig.png": [228, 175, 165], "mobs_mc_spawn_icon_mooshroom.png": [160, 56, 55], "mobs_mc_wolf_angry.png": [187, 179, 176], "mobs_mc_cat_black.png": [206, 181, 154], "mobs_mc_vex_charging.png": [142, 153, 153], "mobs_mc_llama.png": [207, 189, 155], "mobs_mc_mushroom_brown.png": [122, 81, 58], "mobs_mc_spawn_icon_shulker.png": [170, 117, 130], "mobs_mc_wither_half_health.png": [7, 58, 91], "mobs_mc_spawn_icon_guardian_elder.png": [174, 140, 113], "mobs_mc_enderman_eyes.png": [184, 211, 242], "mobs_mc_horse_creamy.png": [146, 111, 75], "mobs_mc_spawn_icon_zombie_villager.png": [95, 110, 68], "mobs_mc_vex.png": [128, 162, 162], "mobs_mc_iron_golem.png": [47, 44, 44], "mobs_mc_cat_ocelot.png": [163, 111, 52], "mobs_mc_llama_decor_green.png": [50, 98, 50], "mobs_mc_cow.png": [94, 68, 55], "mobs_mc_llama_decor_brown.png": [101, 75, 60], "mobs_mc_villager_butcher.png": [82, 83, 71], "mobs_mc_parrot_yellow_blue.png": [98, 187, 205], "mobs_mc_zombie_pigman.png": [164, 129, 117], "mobs_mc_spawn_icon_wolf.png": [231, 218, 207], "mobs_mc_zombie_villager.png": [112, 108, 90], "mobs_mc_sheep_fur.png": [203, 186, 174], "mobs_mc_spawn_icon_horse_zombie.png": [129, 143, 66], "mobs_mc_blaze.png": [84, 63, 50], "mcl_totems_totem.png": [185, 139, 52], "mobs_mc_rabbit_salt.png": [122, 99, 87], "mobs_mc_rabbit_white_splotched.png": [146, 139, 135], "mobs_mc_horse_brown.png": [115, 84, 61], "mobs_mc_ghast.png": [199, 199, 199], "mobs_mc_horse_markings_white.png": [165, 149, 132], "mobs_mc_horse_markings_whitefield.png": [193, 178, 162], "mobs_mc_spawn_icon_endermite.png": [138, 67, 74], "mobs_mc_shulker_magenta.png": [143, 97, 130], "mobs_mc_snowman.png": [211, 217, 221], "mobs_mc_zombie_smith.png": [71, 59, 54], "mobs_mc_spawn_icon_squid.png": [55, 58, 103], "mobs_mc_dragon_fireball.png": [89, 66, 79], "mobs_mc_horse_armor_diamond.png": [78, 110, 129], "mobs_mc_diamond_horse_armor.png": [67, 95, 112], "mobs_mc_rabbit_toast.png": [130, 123, 119], "mobs_mc_llama_white.png": [207, 199, 184], "mobs_mc_llama_creamy.png": [208, 190, 155], "mobs_mc_pig_saddle.png": [82, 63, 45], "mobs_mc_spawn_icon_cave_spider.png": [23, 43, 57], "mobs_mc_shulker_silver.png": [140, 138, 143], "mobs_mc_trading_formspec_disabled.png": [193, 26, 26], "mobs_mc_spider.png": [41, 38, 37], "mobs_mc_wither.png": [33, 33, 33], "mobs_mc_llama_decor_white.png": [249, 249, 249], "mobs_mc_witch.png": [80, 74, 67], "mobs_mc_wolf_icon_roam.png": [6, 124, 36], "mobs_mc_illusionist.png": [56, 68, 114], "mobs_mc_endermite.png": [55, 20, 65], "mobs_mc_spawn_icon_witherskeleton.png": [71, 71, 71], "mobs_mc_llama_decor_light_gray.png": [185, 185, 185], "mobs_mc_llama_decor_cyan.png": [18, 249, 249], "mobs_mc_skeleton.png": [124, 124, 124], "mobs_mc_spawn_icon_llama.png": [230, 221, 178], "mobs_mc_spawn_icon_chicken.png": [170, 160, 156], "mobs_mc_shulker_pink.png": [173, 127, 160], "mobs_mc_spawn_icon_spider.png": [53, 43, 43], "mobs_mc_shulker_red.png": [146, 77, 71], "mobs_mc_shulker_white.png": [184, 181, 186], "mobs_mc_spawn_icon_magmacube.png": [52, 33, 23], "mobs_mc_spawn_icon_ghast.png": [212, 212, 212], "mobs_mc_rabbit_brown.png": [112, 86, 73], "mobs_mc_spawn_icon_pig.png": [242, 200, 188], "mobs_mc_spawn_icon_horse.png": [44, 36, 25], "mobs_mc_cat_siamese.png": [161, 144, 133], "mobs_mc_mushroom_red.png": [176, 51, 49], "mobs_mc_shulker_brown.png": [94, 81, 70], "mobs_mc_guardian.png": [78, 116, 130], "mobs_mc_creeper_charge.png": [121, 219, 255], "mobs_mc_villager.png": [88, 91, 55], "mobs_mc_llama_decor_lime.png": [50, 249, 50], "mobs_mc_llama_brown.png": [136, 97, 52], "mobs_mc_parrot_red_blue.png": [171, 70, 37], "mobs_mc_spawn_icon_husk.png": [174, 174, 128], "mobs_mc_rabbit_gold.png": [151, 130, 96], "mobs_mc_spawn_icon_evoker.png": [92, 103, 86], "mobs_mc_iron_horse_armor.png": [133, 119, 114], "mobs_mc_llama_decor_red.png": [249, 50, 50], "mobs_mc_enderman.png": [3, 10, 10], "mobs_mc_mooshroom_brown.png": [93, 50, 28], "mobs_mc_llama_decor_pink.png": [249, 161, 175], "mobs_mc_enderman_block.png": [46, 42, 38], "mobs_mc_mooshroom.png": [90, 42, 41], "mobs_mc_cat_red.png": [221, 163, 120], "mobs_mc_spit.png": [221, 218, 246], "mobs_mc_shulkerbullet.png": [216, 190, 153], "mobs_mc_horse_markings_whitedots.png": [230, 220, 207], "mobs_mc_mule.png": [108, 75, 51], "mobs_mc_spawn_icon_iron_golem.png": [122, 72, 41], "mobs_mc_zombie_butcher.png": [107, 98, 87], "mobs_mc_llama_decor_yellow.png": [249, 249, 50], "mobs_mc_wolf_tame.png": [179, 159, 154], "mobs_mc_horse_gray.png": [78, 68, 62], "mobs_mc_shulker_lime.png": [106, 132, 88], "mobs_mc_rabbit_caerbannog.png": [186, 179, 174], "mobs_mc_zombie_librarian.png": [106, 104, 104], "mobs_mc_spawn_icon_silverfish.png": [199, 168, 128], "mobs_mc_spawn_icon_stray.png": [118, 116, 118], "mobs_mc_spawn_icon_polarbear.png": [237, 235, 212], "mobs_mc_guardian_elder.png": [141, 141, 125], "mobs_mc_spawn_icon_slime.png": [76, 130, 33], "mobs_mc_cave_spider.png": [14, 28, 38], "mobs_mc_spawn_icon_cow.png": [162, 118, 72], "mobs_mc_wolf.png": [182, 165, 159], "mobs_mc_wither_skeleton.png": [50, 50, 50], "mobs_mc_endergolem.png": [135, 87, 99], "mobs_mc_spawn_icon_mule.png": [115, 82, 47], "mobs_mc_llama_decor_orange.png": [249, 131, 50], "mobs_chicken_egg.png": [199, 157, 106], "mobs_mc_rabbit_white.png": [161, 153, 149], "mobs_mc_horse_black.png": [49, 42, 39], "mobs_mc_dragon.png": [79, 54, 67], "mobs_mc_spawn_icon_parrot.png": [202, 100, 54], "mobs_mc_spawn_icon_snowman.png": [216, 173, 147], "mobs_mc_donkey.png": [91, 78, 68], "mobs_mc_shulker_cyan.png": [89, 114, 128], "mobs_mc_spawn_icon_sheep.png": [209, 185, 175], "mobs_mc_TEMP_wither_projectile.png": [69, 69, 69], "mobs_mc_spawn_icon_enderman.png": [63, 82, 87], "mobs_mc_shulker_orange.png": [156, 90, 67], "mobs_mc_empty.png": [255, 255, 255], "mobs_mc_spawn_icon_wither.png": [102, 102, 102], "mcl_boats_spruce_boat.png": [72, 61, 51], "mcl_boats_jungle_boat.png": [102, 73, 58], "mcl_boats_texture_birch_boat.png": [131, 105, 83], "mcl_boats_texture_oak_boat.png": [103, 82, 65], "mcl_boats_birch_boat.png": [120, 95, 78], "mcl_boats_texture_jungle_boat.png": [109, 78, 60], "mcl_boats_oak_boat.png": [93, 76, 62], "mcl_boats_texture_acacia_boat.png": [136, 90, 64], "mcl_boats_texture_dark_oak_boat.png": [89, 76, 64], "mcl_boats_texture_spruce_boat.png": [74, 61, 50], "mcl_boats_acacia_boat.png": [124, 82, 59], "mcl_boats_dark_oak_boat.png": [89, 76, 64], "mobs_nametag.png": [138, 114, 89], "mobs_blood.png": [27, 27, 29], "mcl_minecarts_rail_golden_curved_powered.png": [89, 71, 57], "mcl_minecarts_rail_golden_crossing.png": [83, 70, 55], "mcl_minecarts_rail_detector_curved_powered.png": [81, 68, 64], "mcl_minecarts_rail_golden_t_junction_powered.png": [82, 69, 59], "mcl_minecarts_rail_golden_t_junction.png": [80, 70, 59], "mcl_minecarts_rail_detector.png": [85, 74, 67], "mcl_minecarts_rail_detector_crossing.png": [77, 69, 65], "default_rail_t_junction.png": [79, 68, 61], "mcl_minecarts_rail_activator_crossing_powered.png": [72, 55, 51], "mcl_minecarts_minecart_hopper.png": [45, 45, 45], "mcl_minecarts_minecart_furnace.png": [66, 65, 64], "mcl_minecarts_minecart_command_block.png": [64, 62, 61], "mcl_minecarts_rail_golden.png": [92, 77, 60], "mcl_minecarts_rail_activator_t_junction_powered.png": [76, 61, 55], "default_rail_curved.png": [76, 67, 60], "mcl_minecarts_rail_activator_t_junction.png": [72, 62, 56], "mcl_minecarts_rail_golden_crossing_powered.png": [86, 70, 54], "mcl_minecarts_rail_detector_crossing_powered.png": [78, 68, 64], "mcl_minecarts_rail_detector_curved.png": [77, 70, 66], "default_rail_crossing.png": [79, 68, 59], "mcl_minecarts_rail_detector_t_junction.png": [74, 66, 61], "mcl_minecarts_minecart.png": [72, 60, 51], "mcl_minecarts_rail_golden_curved.png": [85, 73, 58], "mcl_minecarts_rail_activator.png": [78, 64, 56], "mcl_minecarts_rail_activator_powered.png": [86, 62, 54], "mcl_minecarts_rail_detector_t_junction_powered.png": [76, 66, 61], "mcl_minecarts_minecart_normal.png": [47, 45, 43], "mcl_minecarts_minecart_tnt.png": [75, 52, 52], "mcl_minecarts_rail_detector_powered.png": [87, 74, 67], "mcl_minecarts_rail_golden_powered.png": [94, 77, 60], "mcl_minecarts_rail_activator_crossing.png": [65, 56, 52], "default_rail.png": [83, 70, 61], "mcl_minecarts_rail_activator_curved_powered.png": [75, 55, 52], "mcl_minecarts_rail_activator_curved.png": [66, 56, 53], "mcl_minecarts_minecart_chest.png": [51, 48, 46], "mobs_mc_gameconfig_enderman_cactus_background.png": [44, 71, 27], "mcl_paintings_paintings.png": [104, 99, 89], "mcl_paintings_painting.png": [139, 133, 119], "mcl_particles_lava.png": [250, 150, 64], "mcl_particles_instant_effect.png": [160, 160, 160], "mcl_particles_note.png": [41, 40, 39], "mcl_particles_bubble.png": [147, 174, 195], "mcl_particles_sponge1.png": [241, 238, 226], "mcl_particles_smoke_anim.png": [172, 172, 172], "mcl_particles_crit.png": [165, 165, 165], "mcl_particles_mob_death.png": [198, 198, 198], "mcl_particles_droplet_bottle.png": [203, 203, 203], "mcl_particles_sponge4.png": [241, 238, 226], "mcl_particles_effect.png": [184, 184, 184], "mcl_particles_teleport.png": [86, 22, 128], "mcl_particles_sponge5.png": [241, 238, 226], "mcl_particles_flame.png": [244, 149, 63], "mcl_particles_sponge3.png": [241, 238, 226], "mcl_particles_sponge2.png": [241, 238, 226], "mcl_particles_smoke.png": [174, 174, 174], "lightning_lightning_2.png": [255, 255, 255], "lightning_lightning_3.png": [217, 217, 217], "lightning_lightning_1.png": [223, 223, 223], "weather_pack_rain_raindrop_2.png": [33, 79, 142], "weather_pack_rain_raindrop_3.png": [59, 88, 128], "mcl_particles_nether_dust3.png": [143, 105, 102], "weather_pack_rain_raindrop_1.png": [97, 137, 179], "mcl_particles_nether_dust1.png": [143, 105, 102], "weather_pack_snow_snowflake1.png": [255, 255, 255], "mcl_particles_nether_dust2.png": [143, 105, 102], "weather_pack_snow_snowflake2.png": [255, 255, 255], "mcl_moon_moon_phases.png": [80, 106, 141], "hbarmor_bgicon.png": [27, 27, 29], "hbarmor_bar.png": [175, 172, 165], "hbarmor_icon.png": [135, 131, 126], "mcl_base_textures_background9.png": [179, 179, 179], "object_crosshair.png": [255, 255, 255], "bubble.png": [69, 138, 194], "crosshair.png": [255, 255, 255], "heart.png": [137, 47, 40], "mcl_base_textures_background.png": [179, 179, 179], "crack_anylength.png": [93, 93, 93], "mcl_base_textures_button9_pressed.png": [162, 162, 162], "mcl_base_textures_button9.png": [162, 162, 162], "smoke_puff.png": [255, 255, 255], "mineclone2_logo.png": [75, 74, 69], "mineclone2_icon.png": [58, 74, 44], "awards_template.png": [134, 134, 134], "awards_bg_mining.png": [73, 68, 51], "awards_progress_gray.png": [157, 157, 157], "awards_ui_icon.png": [190, 34, 34], "awards_unknown.png": [134, 134, 134], "awards_progress_green.png": [0, 155, 74], "awards_bg_default.png": [38, 38, 38], "hudbars_bar_breath.png": [159, 161, 255], "hudbars_icon_health.png": [137, 47, 40], "hudbars_bar_health.png": [168, 55, 47], "hudbars_bgicon_breath.png": [0, 0, 0], "hudbars_bgicon_health.png": [27, 27, 29], "hudbars_icon_breath.png": [69, 138, 194], "hudbars_bar_background.png": [71, 71, 71], "mcl_achievements_button.png": [158, 152, 67], "mcl_inventory_hotbar.png": [81, 81, 85], "crafting_inventory_creative_survival.png": [195, 195, 195], "crafting_creative_bg_dark.png": [157, 157, 157], "mcl_inventory_empty_armor_slot_shield.png": [25, 32, 34], "crafting_formspec_bg.png": [9, 9, 9], "mcl_inventory_empty_armor_slot_helmet.png": [25, 32, 34], "mcl_inventory_hotbar_selected.png": [113, 85, 40], "crafting_creative_inactive_down.png": [151, 151, 151], "crafting_creative_active_down.png": [196, 196, 196], "crafting_creative_prev.png": [254, 254, 254], "crafting_creative_marker.png": [0, 0, 0], "mcl_inventory_button9_pressed.png": [162, 162, 162], "crafting_creative_active.png": [202, 202, 202], "mcl_inventory_button9.png": [162, 162, 162], "mcl_inventory_empty_armor_slot_chestplate.png": [0, 0, 0], "mcl_inventory_empty_armor_slot_boots.png": [0, 0, 0], "crafting_creative_bg.png": [207, 207, 207], "crafting_creative_inactive.png": [157, 157, 157], "crafting_creative_next.png": [254, 254, 254], "mcl_inventory_empty_armor_slot_leggings.png": [25, 32, 34], "crafting_inventory_creative.png": [206, 206, 206], "crafting_creative_trash.png": [144, 113, 113], "mcl_formspec_itemslot.png": [157, 157, 157], "mcl_experience_bottle.png": [136, 174, 169], "experience_bar_background.png": [49, 46, 45], "experience_orb.png": [93, 174, 0], "experience_bar.png": [74, 102, 70], "mcl_bossbars_empty.png": [255, 255, 255], "mcl_bossbars.png": [76, 68, 75], "mcl_itemframes_item_frame.png": [123, 90, 63], "mcl_itemframes_itemframe_background.png": [136, 104, 75], "mcl_banners_stripe_middle.png": [255, 255, 255], "mcl_banners_skull.png": [255, 255, 255], "mcl_banners_bricks.png": [255, 255, 255], "mcl_banners_square_bottom_left.png": [255, 255, 255], "mcl_banners_gradient.png": [254, 254, 254], "mcl_banners_cross.png": [255, 255, 255], "mcl_banners_gradient_up.png": [254, 254, 254], "mcl_banners_item_overlay.png": [240, 240, 240], "mcl_banners_stripe_downright.png": [255, 255, 255], "mcl_banners_stripe_downleft.png": [255, 255, 255], "mcl_banners_fallback_wood.png": [102, 88, 74], "mcl_banners_base_inverted.png": [255, 255, 255], "mcl_banners_triangles_top.png": [255, 255, 255], "mcl_banners_banner_base.png": [215, 206, 193], "mcl_banners_curly_border.png": [254, 254, 254], "mcl_banners_thing.png": [253, 253, 253], "mcl_banners_small_stripes.png": [255, 255, 255], "mcl_banners_triangle_bottom.png": [254, 254, 254], "mcl_banners_stripe_right.png": [255, 255, 255], "mcl_banners_straight_cross.png": [255, 255, 255], "mcl_banners_triangle_top.png": [255, 255, 255], "mcl_banners_border.png": [255, 255, 255], "mcl_banners_diagonal_left.png": [255, 255, 255], "mcl_banners_diagonal_right.png": [255, 255, 255], "mcl_banners_base.png": [255, 255, 255], "mcl_banners_half_vertical.png": [255, 255, 255], "mcl_banners_circle.png": [254, 254, 254], "mcl_banners_triangles_bottom.png": [255, 255, 255], "mcl_banners_item_base.png": [103, 89, 75], "mcl_banners_stripe_left.png": [255, 255, 255], "mcl_banners_rhombus.png": [255, 255, 255], "mcl_banners_creeper.png": [255, 255, 255], "mcl_banners_flower.png": [254, 254, 254], "mcl_banners_stripe_bottom.png": [255, 255, 255], "mcl_banners_half_horizontal.png": [255, 255, 255], "mcl_banners_half_horizontal_bottom.png": [255, 255, 255], "mcl_banners_square_top_left.png": [255, 255, 255], "mcl_banners_square_top_right.png": [255, 255, 255], "mcl_banners_stripe_center.png": [255, 255, 255], "mcl_banners_diagonal_up_left.png": [255, 255, 255], "mcl_banners_stripe_top.png": [255, 255, 255], "mcl_banners_diagonal_up_right.png": [255, 255, 255], "mcl_banners_square_bottom_right.png": [255, 255, 255], "mcl_banners_half_vertical_right.png": [255, 255, 255], "mcl_doors_trapdoor_dark_oak.png": [81, 68, 56], "mcl_doors_trapdoor_acacia_side.png": [154, 102, 71], "doors_trapdoor_steel_side.png": [149, 140, 140], "mcl_doors_door_jungle_side_upper.png": [109, 75, 57], "mcl_doors_door_dark_oak_side_lower.png": [103, 90, 75], "mcl_doors_door_iron_lower.png": [157, 152, 151], "mcl_doors_door_acacia_upper.png": [152, 100, 69], "mcl_doors_door_jungle_side_lower.png": [107, 72, 55], "mcl_doors_door_wood_lower.png": [89, 70, 55], "doors_trapdoor_steel.png": [149, 140, 140], "mcl_doors_door_iron_side_upper.png": [155, 149, 148], "mcl_doors_door_acacia_side_upper.png": [133, 80, 53], "mcl_doors_door_jungle.png": [116, 83, 62], "mcl_doors_door_iron_side_lower.png": [157, 152, 151], "mcl_doors_door_birch_upper.png": [179, 158, 139], "mcl_doors_trapdoor_spruce_side.png": [73, 59, 47], "mcl_doors_door_iron_upper.png": [155, 149, 148], "mcl_doors_door_spruce_side_lower.png": [92, 79, 68], "mcl_doors_trapdoor_spruce.png": [71, 57, 46], "mcl_doors_trapdoor_birch_side.png": [147, 116, 89], "doors_trapdoor_side.png": [113, 86, 67], "mcl_doors_door_acacia_lower.png": [153, 101, 70], "mcl_doors_door_dark_oak_side_upper.png": [102, 89, 75], "mcl_doors_door_acacia_side_lower.png": [131, 78, 51], "mcl_doors_door_wood_upper.png": [92, 72, 57], "mcl_doors_trapdoor_birch.png": [173, 151, 132], "mcl_doors_door_dark_oak_upper.png": [83, 71, 59], "mcl_doors_door_acacia.png": [148, 98, 67], "mcl_doors_door_spruce.png": [67, 56, 47], "mcl_doors_door_spruce_lower.png": [71, 58, 48], "mcl_doors_door_birch_side_upper.png": [153, 121, 94], "mcl_doors_trapdoor_dark_oak_side.png": [85, 72, 60], "mcl_doors_door_wood_side_upper.png": [84, 65, 51], "mcl_doors_door_birch.png": [172, 147, 124], "mcl_doors_door_birch_lower.png": [165, 140, 119], "mcl_doors_trapdoor_jungle.png": [103, 70, 52], "doors_item_steel.png": [148, 144, 143], "doors_trapdoor.png": [98, 75, 59], "mcl_doors_door_jungle_lower.png": [116, 82, 61], "doors_item_wood.png": [88, 67, 53], "mcl_doors_door_jungle_upper.png": [113, 79, 59], "mcl_doors_door_spruce_upper.png": [71, 58, 47], "mcl_doors_door_dark_oak_lower.png": [84, 71, 59], "mcl_doors_door_dark_oak.png": [82, 69, 57], "mcl_doors_door_wood_side_lower.png": [132, 102, 81], "mcl_doors_trapdoor_jungle_side.png": [121, 87, 62], "mcl_doors_door_spruce_side_upper.png": [92, 79, 68], "mcl_doors_door_birch_side_lower.png": [152, 119, 92], "mcl_doors_trapdoor_acacia.png": [148, 96, 66], "mcl_fishing_clownfish_raw.png": [205, 127, 81], "mcl_fishing_fish_raw.png": [70, 112, 154], "mcl_fishing_salmon_raw.png": [112, 105, 102], "mcl_fishing_fish_cooked.png": [93, 84, 94], "mcl_fishing_bobber.png": [171, 117, 119], "mcl_fishing_pufferfish_raw.png": [219, 165, 77], "mcl_fishing_fishing_rod.png": [134, 116, 103], "mcl_fishing_salmon_cooked.png": [97, 91, 89], "mcl_stairs_diorite_smooth_slab.png": [156, 153, 151], "mcl_stairs_iron_block_slab.png": [166, 159, 159], "mcl_stairs_andesite_smooth_slab.png": [106, 113, 108], "mcl_stairs_gold_block_slab.png": [191, 146, 56], "mcl_stairs_granite_smooth_slab.png": [150, 121, 109], "mcl_stairs_lapis_block_slab.png": [49, 89, 158], "mcl_fireworks_rocket.png": [155, 84, 71], "mcl_bows_arrow_inv.png": [144, 129, 121], "mcl_bows_arrow_overlay.png": [193, 191, 186], "mcl_bows_bow_1.png": [112, 95, 79], "mcl_bows_bow_0.png": [111, 94, 79], "mcl_bows_bow_2.png": [115, 98, 82], "mcl_bows_bow.png": [114, 95, 78], "mcl_bows_arrow.png": [133, 116, 108], "mcl_bows_arrow_front.png": [178, 175, 168], "mcl_bows_arrow_back.png": [218, 216, 213], "mcl_ocean_dead_bubble_coral.png": [118, 108, 126], "mcl_ocean_tube_coral.png": [57, 88, 209], "mcl_ocean_sea_pickle_2_anim.png": [95, 122, 51], "mcl_ocean_dead_horn_coral_fan.png": [150, 143, 123], "mcl_ocean_dead_bubble_coral_block.png": [114, 105, 122], "mcl_ocean_sea_pickle_3_off.png": [68, 99, 36], "mcl_ocean_dead_horn_coral_block.png": [152, 146, 125], "mcl_ocean_bubble_coral_block.png": [143, 76, 195], "mcl_ocean_horn_coral.png": [233, 195, 69], "mcl_ocean_dead_tube_coral_block.png": [99, 104, 127], "mcl_ocean_sea_pickle_item.png": [93, 120, 50], "mcl_ocean_kelp_item.png": [42, 105, 55], "mcl_ocean_dried_kelp_side.png": [71, 80, 67], "mcl_ocean_dead_tube_coral.png": [99, 105, 128], "mcl_ocean_fire_coral_block.png": [198, 74, 62], "mcl_ocean_bubble_coral.png": [149, 77, 200], "mcl_ocean_prismarine_bricks.png": [104, 112, 115], "mcl_ocean_brain_coral.png": [206, 87, 153], "mcl_ocean_dried_kelp_top.png": [56, 71, 57], "mcl_ocean_brain_coral_block.png": [200, 85, 148], "mcl_ocean_prismarine_dark.png": [77, 89, 97], "mcl_ocean_dead_fire_coral_block.png": [127, 102, 100], "mcl_ocean_prismarine_shard.png": [122, 144, 135], "mcl_ocean_sea_pickle_2_off.png": [70, 100, 36], "mcl_ocean_sea_pickle_4_anim.png": [85, 113, 46], "mcl_ocean_dead_brain_coral.png": [134, 117, 127], "mcl_ocean_tube_coral_fan.png": [59, 85, 203], "mcl_ocean_sea_pickle_4_off.png": [68, 98, 36], "mcl_ocean_sea_pickle_1_anim.png": [106, 132, 57], "mcl_ocean_fire_coral.png": [208, 78, 65], "mcl_ocean_sea_pickle_3_anim.png": [89, 116, 48], "mcl_ocean_dead_fire_coral_fan.png": [140, 113, 110], "mcl_ocean_prismarine_crystals.png": [182, 193, 190], "mcl_ocean_prismarine_anim.png": [104, 123, 122], "mcl_ocean_horn_coral_fan.png": [230, 189, 68], "mcl_ocean_dead_tube_coral_fan.png": [98, 103, 125], "mcl_ocean_sea_pickle_1_off.png": [72, 103, 37], "mcl_ocean_dead_horn_coral.png": [154, 148, 127], "mcl_ocean_dead_fire_coral.png": [133, 107, 105], "mcl_ocean_bubble_coral_fan.png": [141, 75, 192], "mcl_ocean_horn_coral_block.png": [232, 193, 69], "mcl_ocean_brain_coral_fan.png": [206, 87, 154], "mcl_ocean_sea_lantern.png": [133, 144, 145], "mcl_ocean_seagrass.png": [48, 125, 60], "mcl_ocean_dead_brain_coral_fan.png": [134, 117, 127], "mcl_ocean_dried_kelp.png": [36, 57, 40], "mcl_ocean_dead_bubble_coral_fan.png": [113, 104, 120], "mcl_ocean_dried_kelp_bottom.png": [56, 71, 57], "mcl_ocean_kelp_plant.png": [42, 105, 55], "mcl_ocean_tube_coral_block.png": [58, 88, 207], "mcl_ocean_dead_brain_coral_block.png": [130, 114, 123], "mcl_ocean_fire_coral_fan.png": [205, 77, 64], "mcl_portals_endframe_bottom.png": [109, 99, 87], "mcl_portals_particle3.png": [146, 0, 201], "mcl_portals_particle2.png": [146, 0, 201], "mcl_portals_endframe_top.png": [95, 85, 74], "mcl_portals_particle4.png": [146, 0, 201], "mcl_portals_endframe_eye.png": [135, 36, 18], "mcl_portals_end_portal.png": [14, 14, 14], "mcl_particles_nether_portal.png": [206, 0, 206], "mcl_portals_particle5.png": [189, 11, 213], "mcl_portals_endframe_side.png": [110, 99, 86], "mcl_portals_particle1.png": [173, 28, 229], "mcl_portals_portal.png": [74, 24, 172], "mcl_particles_nether_portal_t.png": [159, 0, 223], "cake_side.png": [201, 170, 155], "cake_inner.png": [185, 129, 99], "cake_bottom.png": [160, 86, 51], "cake_top.png": [241, 228, 226], "cake.png": [216, 187, 176], "mcl_cocoas_cocoa_top_stage_2.png": [138, 68, 52], "mcl_cocoas_cocoa_stage_1.png": [172, 121, 69], "mcl_cocoas_cocoa_stage_2.png": [132, 65, 50], "mcl_cocoas_cocoa_stage_0.png": [65, 77, 39], "mcl_fences_fence_red_nether_brick.png": [68, 17, 0], "mcl_fences_fence_gate_red_nether_brick.png": [64, 15, 0], "mcl_fences_fence_gate_nether_brick.png": [50, 25, 26], "mcl_mobitems_spider_eye.png": [154, 69, 60], "mcl_mobitems_leather.png": [105, 75, 45], "mcl_mobitems_feather.png": [206, 185, 183], "mcl_mobitems_string.png": [202, 186, 166], "mcl_mobitems_rabbit_foot.png": [124, 107, 97], "mcl_mobitems_saddle.png": [93, 72, 50], "mcl_mobitems_bone.png": [182, 162, 139], "mcl_mobitems_shulker_shell.png": [118, 68, 83], "mcl_mobitems_blaze_rod.png": [143, 64, 28], "mcl_mobitems_beef_raw.png": [147, 63, 54], "mcl_mobitems_rabbit_stew.png": [127, 98, 79], "mcl_mobitems_rotten_flesh.png": [110, 68, 45], "mcl_mobitems_chicken_raw.png": [217, 178, 149], "mcl_mobitems_ghast_tear.png": [148, 160, 166], "mcl_mobitems_porkchop_raw.png": [160, 72, 69], "mcl_mobitems_rabbit_hide.png": [108, 85, 73], "mcl_mobitems_slimeball.png": [75, 134, 82], "mcl_mobitems_magma_cream.png": [102, 54, 34], "default_gunpowder.png": [48, 41, 36], "mcl_mobitems_chicken_cooked.png": [187, 145, 106], "mcl_mobitems_beef_cooked.png": [112, 70, 49], "mcl_mobitems_rabbit_cooked.png": [188, 155, 131], "mcl_mobitems_blaze_powder.png": [86, 50, 34], "mcl_mobitems_rabbit_raw.png": [217, 177, 157], "mcl_mobitems_carrot_on_a_stick.png": [133, 113, 93], "mcl_mobitems_mutton_cooked.png": [144, 104, 77], "mcl_mobitems_nether_star.png": [234, 189, 123], "mcl_mobitems_porkchop_cooked.png": [116, 72, 48], "mcl_mobitems_mutton_raw.png": [175, 77, 77], "mcl_mobitems_bucket_milk.png": [180, 175, 166], "mcl_farming_wheat_stage_0.png": [53, 101, 46], "farming_carrot.png": [147, 106, 63], "farming_potato_poison.png": [121, 93, 55], "farming_cookie.png": [144, 100, 61], "mcl_farming_melon_seeds.png": [100, 72, 61], "mcl_farming_potatoes_stage_1.png": [69, 113, 61], "mcl_farming_melon_stem_disconnected.png": [96, 96, 96], "farming_carrot_4.png": [93, 105, 58], "mcl_farming_wheat_stage_5.png": [101, 142, 66], "farming_tool_woodhoe.png": [120, 101, 86], "mcl_farming_potatoes_stage_0.png": [73, 119, 65], "farming_carrot_1.png": [75, 112, 61], "farming_carrot_3.png": [70, 107, 57], "farming_melon.png": [153, 84, 62], "mcl_farming_pumpkin_seeds.png": [132, 120, 87], "farming_wheat_harvested.png": [178, 134, 80], "farming_pumpkin_side.png": [186, 100, 42], "mcl_farming_pumpkin_face.png": [181, 94, 40], "mcl_farming_wheat_stage_4.png": [86, 129, 65], "mcl_farming_farmland_wet.png": [69, 55, 46], "mcl_farming_beetroot_0.png": [56, 122, 75], "mcl_farming_pumpkin_stem_connected.png": [94, 94, 94], "mcl_farming_farmland_dry.png": [101, 80, 68], "farming_tool_diamondhoe.png": [101, 104, 104], "mcl_farming_beetroot_1.png": [54, 118, 72], "mcl_farming_beetroot_2.png": [54, 119, 73], "mcl_farming_wheat_stage_7.png": [165, 116, 75], "mcl_farming_beetroot.png": [113, 69, 66], "mcl_farming_wheat_stage_6.png": [145, 145, 69], "mcl_farming_wheat_stage_3.png": [64, 113, 52], "mcl_farming_pumpkin_stem_disconnected.png": [96, 96, 96], "mcl_farming_hayblock_top.png": [154, 116, 81], "farming_pumpkin_face_light.png": [189, 100, 45], "farming_potato_baked.png": [118, 84, 45], "farming_melon_side.png": [68, 95, 37], "farming_potato.png": [107, 74, 39], "mcl_farming_wheat_stage_1.png": [49, 97, 45], "farming_pumpkin_top.png": [172, 87, 40], "farming_bread.png": [177, 133, 94], "mcl_farming_beetroot_soup.png": [120, 70, 63], "farming_melon_top.png": [58, 80, 33], "mcl_farming_potatoes_stage_3.png": [82, 106, 57], "farming_tool_stonehoe.png": [133, 122, 111], "mcl_farming_beetroot_seeds.png": [107, 104, 88], "farming_tool_goldhoe.png": [162, 131, 70], "farming_carrot_gold.png": [140, 122, 48], "farming_carrot_2.png": [72, 108, 58], "farming_pumpkin_face.png": [161, 79, 37], "mcl_farming_melon_stem_connected.png": [94, 94, 94], "mcl_farming_pumpkin_pie.png": [172, 98, 45], "mcl_farming_pumpkin_face_preview.png": [166, 81, 38], "mcl_farming_wheat_stage_2.png": [49, 97, 45], "farming_tool_steelhoe.png": [123, 112, 102], "mcl_farming_potatoes_stage_2.png": [72, 116, 62], "mcl_farming_beetroot_3.png": [73, 105, 71], "mcl_farming_wheat_seeds.png": [102, 87, 55], "mcl_farming_hayblock_side.png": [135, 99, 71], "mcl_end_purpur_block.png": [161, 111, 175], "mcl_end_chorus_flower_dead.png": [82, 79, 118], "mcl_end_end_stone.png": [221, 214, 130], "mcl_end_endframe_side.png": [110, 99, 86], "mcl_end_purpur_pillar.png": [157, 108, 171], "mcl_end_chorus_fruit.png": [87, 89, 121], "mcl_end_endframe_eye.png": [135, 36, 18], "mcl_end_chorus_fruit_popped.png": [70, 67, 110], "mcl_end_end_rod_top.png": [123, 75, 97], "mcl_end_endframe_top.png": [95, 85, 74], "mcl_end_purpur_pillar_top.png": [159, 110, 173], "mcl_end_chorus_flower.png": [92, 92, 125], "mcl_end_crystal_item.png": [170, 140, 162], "mcl_end_end_bricks.png": [194, 187, 123], "mcl_end_dragon_egg.png": [55, 34, 32], "mcl_end_ender_eye.png": [130, 33, 17], "mcl_end_chorus_plant.png": [78, 73, 115], "mcl_end_end_rod_bottom.png": [122, 74, 96], "mcl_end_crystal_beam.png": [251, 251, 251], "mcl_end_end_rod_side.png": [242, 202, 177], "mcl_clock_clock_18.png": [152, 123, 81], "mcl_clock_clock_03.png": [160, 129, 88], "mcl_clock_clock_49.png": [155, 122, 79], "mcl_clock_clock_34.png": [140, 115, 76], "mcl_clock_clock_01.png": [161, 129, 88], "mcl_clock_clock_32.png": [141, 116, 77], "mcl_clock_clock_27.png": [142, 117, 78], "mcl_clock_clock_42.png": [147, 119, 79], "mcl_clock_clock_25.png": [145, 119, 78], "mcl_clock_clock_56.png": [160, 126, 81], "mcl_clock_clock_22.png": [146, 119, 79], "mcl_clock_clock_31.png": [141, 116, 76], "mcl_clock_clock_57.png": [161, 127, 83], "mcl_clock_clock_58.png": [157, 127, 86], "mcl_clock_clock_39.png": [146, 119, 79], "mcl_clock_clock_59.png": [160, 128, 86], "mcl_clock_clock_16.png": [157, 125, 80], "mcl_clock_clock_38.png": [141, 117, 78], "mcl_clock_clock_53.png": [158, 124, 80], "mcl_clock_clock_43.png": [149, 121, 80], "mcl_clock_clock_09.png": [161, 127, 81], "mcl_clock_clock_33.png": [141, 116, 76], "mcl_clock_clock_07.png": [162, 128, 83], "mcl_clock_clock_23.png": [148, 121, 80], "mcl_clock_clock_51.png": [156, 123, 80], "mcl_clock_clock_10.png": [158, 127, 85], "mcl_clock_clock_55.png": [160, 126, 81], "mcl_clock_clock_46.png": [152, 122, 81], "mcl_clock_clock_26.png": [142, 117, 79], "mcl_clock_clock_06.png": [157, 127, 86], "mcl_clock_clock_00.png": [162, 129, 87], "mcl_clock_clock_28.png": [141, 116, 77], "mcl_clock_clock_44.png": [150, 120, 79], "mcl_clock_clock_08.png": [160, 127, 81], "mcl_clock_clock_19.png": [152, 122, 80], "mcl_clock_clock_12.png": [159, 127, 83], "mcl_clock_clock_45.png": [153, 123, 81], "mcl_clock_clock_24.png": [147, 120, 80], "mcl_clock_clock_15.png": [157, 125, 81], "mcl_clock_clock_20.png": [150, 121, 79], "mcl_clock_clock_61.png": [160, 129, 88], "mcl_clock_clock_02.png": [159, 129, 89], "mcl_clock_clock_40.png": [147, 120, 79], "mcl_clock_clock_37.png": [143, 118, 79], "mcl_clock_clock_48.png": [155, 123, 79], "mcl_clock_clock_13.png": [159, 126, 82], "mcl_clock_clock_17.png": [156, 125, 81], "mcl_clock_clock_52.png": [156, 123, 80], "mcl_clock_clock_54.png": [156, 125, 84], "mcl_clock_clock_04.png": [159, 128, 87], "mcl_clock_clock_47.png": [154, 122, 80], "mcl_clock_clock_62.png": [159, 129, 89], "mcl_clock_clock_41.png": [147, 120, 79], "mcl_clock_clock_35.png": [140, 115, 76], "mcl_clock_clock_60.png": [159, 128, 87], "mcl_clock_clock_50.png": [155, 123, 80], "mcl_clock_clock_29.png": [142, 117, 78], "mcl_clock_clock_21.png": [150, 122, 81], "mcl_clock_clock_30.png": [140, 115, 76], "mcl_clock_clock_14.png": [157, 125, 81], "mcl_clock_clock_05.png": [160, 128, 85], "mcl_clock_clock_36.png": [141, 116, 77], "mcl_clock_clock_63.png": [161, 129, 88], "mcl_clock_clock_11.png": [160, 127, 82], "mcl_compass_compass_02.png": [116, 107, 104], "mcl_compass_compass_06.png": [117, 107, 104], "mcl_compass_compass_04.png": [117, 106, 104], "mcl_compass_compass_19.png": [116, 106, 103], "mcl_compass_compass_16.png": [114, 106, 104], "mcl_compass_compass_26.png": [117, 107, 104], "mcl_compass_compass_25.png": [117, 107, 105], "mcl_compass_compass_24.png": [117, 107, 105], "mcl_compass_compass_17.png": [115, 106, 104], "mcl_compass_compass_23.png": [117, 107, 105], "mcl_compass_compass_01.png": [115, 107, 104], "mcl_compass_compass_28.png": [116, 107, 104], "mcl_compass_compass_05.png": [117, 106, 104], "mcl_compass_compass_09.png": [117, 107, 104], "mcl_compass_compass_10.png": [117, 107, 105], "mcl_compass_compass_14.png": [116, 107, 105], "mcl_compass_compass_18.png": [117, 107, 104], "mcl_compass_compass_13.png": [117, 106, 104], "mcl_compass_compass_08.png": [117, 107, 104], "mcl_compass_compass_21.png": [117, 107, 104], "mcl_compass_compass_27.png": [117, 106, 104], "mcl_compass_compass_30.png": [116, 107, 104], "mcl_compass_compass_15.png": [115, 106, 104], "mcl_compass_compass_29.png": [115, 106, 104], "mcl_compass_compass_03.png": [116, 106, 104], "mcl_compass_compass_07.png": [117, 107, 104], "mcl_compass_compass_22.png": [117, 107, 105], "mcl_compass_compass_12.png": [117, 106, 104], "mcl_compass_compass_00.png": [114, 107, 104], "mcl_compass_compass_20.png": [116, 106, 104], "mcl_compass_compass_31.png": [115, 107, 104], "mcl_compass_compass_11.png": [117, 106, 104], "mcl_jukebox_record_wait.png": [39, 42, 55], "mcl_jukebox_record_cat.png": [40, 45, 51], "mcl_jukebox_record_mellohi.png": [46, 44, 59], "mcl_jukebox_record_13.png": [51, 47, 51], "mcl_jukebox_record_ward.png": [39, 43, 51], "mcl_jukebox_record_chirp.png": [49, 40, 50], "mcl_jukebox_record_blocks.png": [47, 37, 49], "mcl_jukebox_record_11.png": [41, 40, 52], "mcl_jukebox_record_mall.png": [42, 41, 62], "mcl_jukebox_top.png": [72, 56, 44], "mcl_jukebox_record_strad.png": [45, 45, 57], "mcl_jukebox_record_far.png": [47, 48, 52], "mcl_jukebox_side.png": [94, 74, 57], "mcl_jukebox_record_stal.png": [39, 38, 49], "mcl_fences_fence_acacia.png": [152, 99, 68], "mcl_fences_fence_gate_mask.png": [255, 126, 126], "mcl_fences_fence_gate_spruce.png": [85, 69, 56], "mcl_fences_fence_big_oak.png": [83, 71, 59], "mcl_fences_fence_spruce.png": [84, 67, 54], "mcl_fences_fence_gate_birch.png": [153, 121, 94], "mcl_fences_fence_gate_acacia.png": [155, 102, 70], "mcl_fences_fence_gate_big_oak.png": [85, 73, 61], "mcl_fences_fence_oak.png": [108, 83, 64], "mcl_fences_fence_gate_oak.png": [111, 85, 66], "mcl_fences_fence_jungle.png": [115, 80, 60], "mcl_fences_fence_nether_brick.png": [49, 24, 24], "mcl_fences_fence_birch.png": [151, 119, 93], "mcl_fences_fence_gate_jungle.png": [117, 82, 61], "mcl_fences_fence_mask.png": [255, 126, 126], "mcl_core_leaves_birch.png": [28, 57, 28], "default_mossycobble.png": [100, 105, 94], "default_flint.png": [70, 67, 64], "mcl_core_bowl.png": [78, 61, 47], "mcl_core_bone_block_top.png": [220, 201, 170], "default_acacia_tree.png": [105, 91, 74], "default_steel_block.png": [159, 151, 151], "mcl_core_stonebrick_mossy.png": [81, 101, 76], "default_diamond_block.png": [92, 160, 200], "default_leaves.png": [39, 79, 38], "mcl_core_web.png": [202, 189, 167], "mcl_core_reeds.png": [57, 100, 52], "default_gold_ingot.png": [179, 133, 47], "mcl_core_grass_path_side.png": [113, 89, 62], "mcl_core_red_sand.png": [224, 137, 111], "default_apple.png": [137, 57, 44], "mcl_core_log_birch_top.png": [155, 130, 112], "default_coal_block.png": [51, 49, 51], "mcl_core_andesite_smooth.png": [107, 113, 109], "mcl_core_apple_golden.png": [176, 138, 51], "mcl_core_diorite.png": [153, 149, 146], "mcl_core_granite_smooth.png": [150, 121, 110], "mcl_core_bedrock.png": [91, 77, 66], "mcl_core_planks_spruce.png": [81, 65, 54], "mcl_core_sapling_big_oak.png": [69, 92, 80], "mcl_core_emerald_ore.png": [115, 122, 103], "mcl_core_sandstone_smooth.png": [202, 155, 121], "mcl_core_glass_light_blue.png": [101, 153, 215], "default_brick.png": [139, 87, 75], "mcl_core_redstone_ore.png": [128, 91, 88], "mcl_core_cactus_top.png": [77, 99, 49], "mcl_core_frosted_ice_1.png": [147, 198, 227], "mcl_core_sapling_spruce.png": [55, 72, 53], "mcl_core_stripped_acacia_top.png": [149, 92, 58], "mcl_core_log_spruce_top.png": [97, 71, 57], "mcl_core_glass_lime.png": [126, 203, 24], "mcl_core_lapis_ore.png": [111, 113, 125], "default_junglesapling.png": [64, 88, 39], "default_clay_brick.png": [127, 57, 48], "default_gold_block.png": [192, 147, 59], "default_water_source_animated.png": [37, 98, 129], "mcl_core_glass_yellow.png": [228, 228, 50], "default_acacia_sapling.png": [109, 92, 59], "mcl_core_stripped_acacia_side.png": [155, 96, 61], "mcl_core_sandstone_carved.png": [199, 152, 119], "mcl_core_glass_blue.png": [50, 75, 178], "mcl_core_red_sandstone_normal.png": [198, 120, 104], "mcl_core_glass_gray.png": [75, 75, 75], "mcl_core_leaves_spruce.png": [38, 74, 47], "mcl_core_glass_pink.png": [241, 126, 164], "mcl_core_lapis_block.png": [50, 92, 162], "mcl_core_glass_purple.png": [126, 62, 178], "mcl_core_iron_nugget.png": [156, 151, 145], "default_papyrus.png": [82, 114, 57], "default_dry_grass.png": [100, 94, 54], "mcl_core_stripped_dark_oak_top.png": [91, 78, 68], "mcl_core_glass_silver.png": [153, 153, 153], "mcl_core_andesite.png": [104, 110, 107], "mcl_core_frosted_ice_3.png": [165, 209, 233], "mcl_core_sugar.png": [215, 215, 215], "default_acacia_wood.png": [152, 100, 69], "mcl_core_glass_black.png": [24, 24, 24], "mcl_core_iron_ore.png": [134, 123, 117], "mcl_core_stripped_birch_side.png": [163, 130, 104], "default_clay.png": [124, 124, 124], "mcl_core_stripped_jungle_side.png": [140, 98, 76], "mcl_core_glass_red.png": [153, 50, 50], "mcl_core_grass_block_top.png": [141, 130, 113], "mcl_core_planks_birch.png": [145, 113, 89], "mcl_core_glass_white.png": [254, 254, 254], "mcl_core_stripped_oak_side.png": [119, 94, 71], "mcl_core_glass_cyan.png": [75, 126, 153], "mcl_core_cactus_side.png": [88, 110, 56], "default_ladder.png": [83, 64, 50], "default_dry_grass_side.png": [91, 93, 52], "mcl_core_stripped_jungle_top.png": [143, 101, 78], "mcl_core_ice_packed.png": [165, 211, 231], "mcl_core_frosted_ice_2.png": [153, 202, 229], "default_dry_shrub.png": [118, 88, 69], "mcl_core_red_sandstone_carved.png": [202, 122, 104], "default_tree.png": [95, 75, 57], "default_clay_lump.png": [111, 111, 111], "mcl_core_red_sandstone_top.png": [212, 126, 108], "mcl_core_dirt_podzol_side.png": [101, 79, 63], "mcl_core_red_sandstone_smooth.png": [207, 124, 106], "default_jungletree_top.png": [125, 87, 67], "mcl_core_coal_ore.png": [109, 101, 99], "default_jungleleaves.png": [29, 84, 30], "mcl_core_vine.png": [21, 61, 21], "default_snow.png": [221, 229, 234], "mcl_core_leaves_big_oak.png": [21, 69, 28], "mcl_core_void.png": [59, 59, 59], "default_tree_top.png": [135, 104, 74], "mcl_core_gold_ore.png": [132, 119, 103], "default_steel_ingot.png": [142, 137, 131], "default_sapling.png": [62, 90, 45], "mcl_core_log_birch.png": [194, 184, 174], "mcl_core_stripped_spruce_top.png": [111, 81, 64], "default_water_flowing_animated.png": [38, 101, 129], "mcl_core_emerald_block.png": [44, 138, 39], "default_jungletree.png": [86, 58, 45], "mcl_core_grass_side_snowed.png": [162, 154, 150], "default_stone_brick.png": [97, 89, 86], "default_lava_flowing_animated.png": [177, 42, 16], "mcl_core_stripped_spruce_side.png": [104, 78, 63], "default_coal_lump.png": [41, 39, 41], "default_sand.png": [220, 170, 127], "mcl_core_glass_green.png": [101, 126, 50], "mcl_core_glass_orange.png": [215, 126, 50], "default_acacia_tree_top.png": [130, 84, 55], "mcl_core_stripped_oak_top.png": [139, 108, 78], "mcl_core_grass_block_side_overlay.png": [153, 142, 123], "default_lava_source_animated.png": [180, 45, 17], "mcl_core_cactus_bottom.png": [169, 168, 116], "mcl_core_sandstone_bottom.png": [202, 155, 121], "default_paper.png": [213, 184, 154], "mcl_core_diamond_ore.png": [122, 124, 126], "default_ice.png": [145, 197, 226], "mcl_core_dirt_podzol_top.png": [85, 63, 42], "mcl_core_slime.png": [93, 157, 86], "mcl_core_gold_nugget.png": [213, 169, 74], "default_stick.png": [88, 70, 57], "mcl_core_emerald.png": [59, 160, 52], "default_diamond.png": [109, 179, 217], "mcl_core_mycelium_top.png": [108, 89, 117], "mcl_core_bone_block_side.png": [226, 207, 174], "mcl_core_diorite_smooth.png": [157, 154, 152], "default_obsidian.png": [13, 9, 25], "mcl_core_planks_big_oak.png": [87, 74, 62], "mcl_core_log_spruce.png": [66, 51, 44], "mcl_core_glass_magenta.png": [178, 75, 215], "mcl_core_granite.png": [153, 121, 110], "mcl_core_log_big_oak_top.png": [83, 70, 62], "default_cobble.png": [113, 106, 104], "mcl_core_red_sandstone_bottom.png": [207, 124, 106], "mcl_core_barrier.png": [138, 46, 38], "mcl_core_stripped_dark_oak_side.png": [86, 73, 63], "mcl_core_mycelium_side.png": [107, 84, 87], "mcl_core_stonebrick_cracked.png": [94, 87, 83], "mcl_core_charcoal.png": [40, 35, 32], "mcl_core_glass_brown.png": [101, 75, 50], "mcl_core_stonebrick_carved.png": [97, 90, 85], "default_wood.png": [113, 87, 67], "default_dirt.png": [108, 83, 70], "mcl_core_log_big_oak.png": [74, 62, 55], "default_junglewood.png": [113, 78, 59], "mcl_core_frosted_ice_0.png": [140, 193, 224], "mcl_core_sandstone_normal.png": [195, 149, 117], "default_gravel.png": [112, 105, 99], "mcl_core_sandstone_top.png": [201, 154, 121], "default_glass.png": [213, 223, 235], "default_stone.png": [130, 122, 118], "mcl_core_sapling_birch.png": [78, 110, 74], "mcl_core_coarse_dirt.png": [117, 92, 76], "default_acacia_leaves.png": [110, 89, 45], "mcl_core_stripped_birch_top.png": [157, 126, 102], "mcl_core_grass_path_top.png": [125, 101, 50], "mcl_throwing_ender_pearl.png": [78, 19, 26], "mcl_throwing_egg.png": [199, 157, 106], "mcl_throwing_snowball.png": [191, 200, 203], "mcl_flowers_tulip_red.png": [82, 57, 43], "mcl_flowers_double_plant_rose_top.png": [81, 69, 45], "mcl_flowers_double_plant_sunflower_front.png": [203, 157, 61], "mcl_flowers_tulip_white.png": [106, 122, 95], "mcl_flowers_double_plant_grass_top.png": [156, 145, 125], "mcl_flowers_azure_bluet.png": [97, 114, 98], "mcl_flowers_oxeye_daisy.png": [130, 139, 110], "mcl_flowers_poppy.png": [96, 59, 43], "mcl_flowers_double_plant_paeonia_top.png": [90, 84, 81], "mcl_flowers_double_plant_rose_bottom.png": [78, 63, 41], "mcl_flowers_tallgrass.png": [151, 141, 122], "mcl_flowers_double_plant_sunflower_bottom.png": [45, 76, 40], "mcl_flowers_fern.png": [143, 132, 115], "flowers_tulip.png": [106, 84, 51], "mcl_flowers_double_plant_syringa_bottom.png": [63, 77, 60], "mcl_flowers_double_plant_fern_bottom.png": [140, 130, 113], "flowers_dandelion_yellow.png": [111, 111, 55], "mcl_flowers_double_plant_paeonia_bottom.png": [82, 83, 73], "mcl_flowers_double_plant_sunflower_back.png": [174, 146, 57], "mcl_flowers_allium.png": [120, 116, 144], "flowers_waterlily.png": [28, 81, 29], "mcl_flowers_tulip_pink.png": [100, 99, 90], "mcl_flowers_double_plant_sunflower_top.png": [48, 81, 44], "mcl_flowers_double_plant_syringa_top.png": [95, 90, 98], "mcl_flowers_double_plant_grass_bottom.png": [151, 140, 121], "mcl_flowers_double_plant_grass_inv.png": [48, 95, 43], "mcl_flowers_fern_inv.png": [43, 86, 39], "mcl_flowers_double_plant_fern_top.png": [148, 138, 119], "mcl_flowers_tallgrass_inv.png": [47, 92, 41], "mcl_flowers_double_plant_fern_inv.png": [45, 89, 40], "mcl_flowers_blue_orchid.png": [46, 91, 86], "mcl_armor_leggings_iron.png": [132, 128, 123], "mcl_armor_inv_leggings_iron.png": [130, 125, 120], "mcl_armor_chestplate_chain_preview.png": [124, 98, 90], "mcl_armor_inv_helmet_gold.png": [178, 134, 51], "mcl_armor_leggings_chain.png": [64, 66, 69], "mcl_armor_helmet_chain_preview.png": [154, 150, 143], "mcl_armor_chestplate_diamond_preview.png": [102, 140, 160], "mcl_armor_inv_boots_iron.png": [134, 129, 124], "mcl_armor_boots_gold_preview.png": [178, 133, 42], "mcl_armor_leggings_diamond_preview.png": [80, 118, 138], "mcl_armor_inv_chestplate_chain.png": [128, 105, 96], "mcl_armor_helmet_diamond_preview.png": [101, 134, 152], "mcl_armor_boots_leather_preview.png": [129, 119, 101], "mcl_armor_inv_chestplate_gold.png": [171, 128, 55], "mcl_armor_inv_helmet_diamond.png": [109, 130, 142], "mcl_armor_leggings_leather_preview.png": [141, 134, 114], "mcl_armor_boots_leather.png": [122, 111, 93], "mcl_armor_inv_chestplate_diamond.png": [106, 146, 168], "mcl_armor_helmet_diamond.png": [70, 85, 93], "mcl_armor_chestplate_iron_preview.png": [143, 134, 123], "mcl_armor_inv_chestplate_leather.png": [143, 136, 118], "mcl_armor_boots_diamond.png": [87, 132, 157], "mcl_armor_leggings_diamond.png": [78, 102, 115], "mcl_armor_leggings_gold_preview.png": [185, 156, 108], "mcl_armor_chestplate_gold.png": [157, 117, 55], "mcl_armor_inv_helmet_chain.png": [140, 137, 132], "mcl_armor_boots_chain_preview.png": [78, 78, 79], "mcl_armor_inv_leggings_chain.png": [81, 81, 82], "mcl_armor_inv_helmet_iron.png": [143, 138, 133], "mcl_armor_helmet_leather.png": [130, 121, 102], "mcl_armor_chestplate_diamond.png": [110, 157, 183], "mcl_armor_leggings_leather.png": [119, 108, 91], "mcl_armor_leggings_iron_preview.png": [127, 122, 117], "mcl_armor_inv_boots_gold.png": [187, 142, 46], "mcl_armor_chestplate_leather.png": [139, 132, 112], "mcl_armor_boots_iron.png": [118, 113, 109], "mcl_armor_elytra.png": [75, 121, 147], "mcl_armor_helmet_chain.png": [127, 124, 121], "mcl_armor_helmet_gold_preview.png": [181, 138, 54], "mcl_armor_boots_iron_preview.png": [118, 113, 108], "mcl_armor_helmet_iron.png": [153, 149, 144], "mcl_armor_inv_boots_leather.png": [130, 121, 103], "mcl_armor_leggings_chain_preview.png": [54, 56, 61], "mcl_armor_helmet_iron_preview.png": [143, 138, 132], "mcl_armor_helmet_leather_preview.png": [119, 109, 91], "mcl_armor_chestplate_leather_preview.png": [144, 138, 118], "mcl_armor_leggings_gold.png": [182, 158, 126], "mcl_armor_inv_leggings_gold.png": [175, 145, 97], "mcl_armor_chestplate_iron.png": [130, 120, 112], "mcl_armor_inv_elytra.png": [76, 122, 148], "mcl_armor_boots_chain.png": [88, 88, 88], "mcl_armor_helmet_gold.png": [178, 136, 56], "mcl_armor_inv_boots_diamond.png": [75, 121, 147], "mcl_armor_inv_chestplate_iron.png": [135, 125, 115], "mcl_armor_inv_leggings_diamond.png": [75, 93, 103], "mcl_armor_inv_leggings_leather.png": [126, 116, 98], "mcl_armor_inv_helmet_leather.png": [140, 132, 114], "mcl_armor_inv_boots_chain.png": [69, 69, 72], "mcl_armor_chestplate_gold_preview.png": [169, 127, 56], "mcl_armor_chestplate_chain.png": [119, 98, 93], "mcl_armor_boots_gold.png": [160, 118, 42], "mcl_armor_boots_diamond_preview.png": [89, 141, 169], "mcl_walls_cobble_wall_top.png": [120, 114, 112], "mcl_walls_cobble_mossy_wall_top.png": [53, 97, 61], "mcl_walls_cobble_wall_side.png": [109, 103, 101], "mcl_walls_cobble_mossy_wall_side.png": [86, 98, 83], "mcl_hoppers_item.png": [44, 44, 44], "mcl_hoppers_hopper_top.png": [43, 43, 43], "mcl_hoppers_hopper_outside.png": [44, 43, 43], "mcl_hoppers_hopper_inside.png": [50, 50, 50], "mcl_stairs_stone_slab_top.png": [127, 118, 114], "mcl_stairs_stone_slab_side.png": [127, 117, 113], "mcl_stairs_turntexture.png": [255, 0, 255], "mcl_brewing_bottle_bg.png": [204, 204, 204], "mcl_brewing_bubble_sprite.png": [167, 167, 167], "mcl_brewing_side.png": [175, 156, 160], "mcl_brewing_inventory.png": [168, 168, 168], "mcl_brewing_bubbles_active.png": [186, 186, 186], "mcl_brewing_fuel_bg.png": [200, 200, 200], "mcl_brewing_potion_bg.png": [204, 204, 204], "mcl_brewing_bubbles.png": [154, 154, 154], "mcl_brewing_top.png": [139, 130, 126], "mcl_brewing_base.png": [130, 122, 118], "mcl_brewing_burner.png": [183, 183, 183], "mcl_brewing_burner_active.png": [212, 161, 132], "xpanes_top_glass_cyan.png": [76, 127, 153], "xpanes_top_glass_brown.png": [102, 76, 51], "xpanes_top_glass_magenta.png": [178, 75, 215], "xpanes_top_glass_light_blue.png": [102, 153, 216], "xpanes_top_glass_blue.png": [51, 76, 178], "xpanes_top_glass_gray.png": [76, 76, 76], "xpanes_top_glass_silver.png": [153, 153, 153], "xpanes_top_iron.png": [155, 146, 146], "xpanes_top_glass_black.png": [25, 25, 25], "xpanes_top_glass_white.png": [255, 255, 255], "xpanes_top_glass_lime.png": [127, 204, 25], "xpanes_top_glass_orange.png": [216, 127, 51], "xpanes_top_glass_purple.png": [127, 63, 178], "xpanes_top_glass_red.png": [153, 51, 51], "xpanes_top_glass_natural.png": [222, 222, 239], "xpanes_top_glass_green.png": [102, 127, 51], "xpanes_top_glass_pink.png": [241, 126, 164], "xpanes_pane_iron.png": [160, 152, 152], "xpanes_top_glass_yellow.png": [229, 229, 51], "hardened_clay_stained_pink.png": [164, 79, 76], "mcl_colorblocks_glazed_terracotta_yellow.png": [232, 199, 99], "mcl_colorblocks_glazed_terracotta_orange.png": [170, 146, 81], "mcl_colorblocks_concrete_powder_lime.png": [125, 186, 42], "mcl_colorblocks_concrete_brown.png": [98, 60, 32], "mcl_colorblocks_concrete_magenta.png": [171, 49, 162], "mcl_colorblocks_glazed_terracotta_magenta.png": [210, 108, 215], "mcl_colorblocks_concrete_silver.png": [128, 129, 118], "mcl_colorblocks_glazed_terracotta_grey.png": [90, 90, 90], "mcl_colorblocks_concrete_powder_blue.png": [72, 75, 169], "mcl_colorblocks_concrete_yellow.png": [241, 177, 21], "mcl_colorblocks_concrete_red.png": [146, 34, 34], "mcl_colorblocks_glazed_terracotta_lime.png": [152, 211, 72], "mcl_colorblocks_concrete_black.png": [8, 10, 15], "mcl_colorblocks_glazed_terracotta_silver.png": [134, 151, 151], "hardened_clay_stained_white.png": [213, 197, 184], "mcl_colorblocks_glazed_terracotta_green.png": [111, 135, 50], "mcl_colorblocks_glazed_terracotta_blue.png": [34, 65, 117], "mcl_colorblocks_concrete_powder_red.png": [172, 57, 52], "mcl_colorblocks_concrete_powder_cyan.png": [38, 150, 159], "hardened_clay_stained_purple.png": [81, 71, 123], "hardened_clay_stained_brown.png": [96, 69, 61], "hardened_clay_stained_grey.png": [110, 92, 85], "mcl_colorblocks_concrete_lime.png": [96, 171, 25], "hardened_clay_stained_blue.png": [68, 91, 143], "mcl_colorblocks_concrete_powder_white.png": [224, 225, 225], "hardened_clay_stained_yellow.png": [177, 128, 51], "hardened_clay_stained_light_blue.png": [91, 128, 171], "hardened_clay.png": [143, 104, 87], "mcl_colorblocks_concrete_cyan.png": [21, 123, 140], "mcl_colorblocks_glazed_terracotta_brown.png": [108, 88, 64], "mcl_colorblocks_concrete_grey.png": [56, 59, 64], "mcl_colorblocks_concrete_powder_magenta.png": [196, 94, 189], "mcl_colorblocks_concrete_powder_black.png": [22, 26, 30], "mcl_colorblocks_concrete_pink.png": [213, 103, 144], "mcl_colorblocks_concrete_powder_orange.png": [227, 141, 38], "mcl_colorblocks_glazed_terracotta_cyan.png": [90, 131, 136], "mcl_colorblocks_glazed_terracotta_red.png": [184, 67, 53], "mcl_colorblocks_concrete_green.png": [75, 94, 37], "mcl_colorblocks_concrete_blue.png": [46, 48, 147], "mcl_colorblocks_glazed_terracotta_light_blue.png": [99, 162, 204], "hardened_clay_stained_orange.png": [156, 95, 69], "mcl_colorblocks_concrete_powder_silver.png": [160, 160, 155], "mcl_colorblocks_concrete_powder_pink.png": [224, 148, 176], "hardened_clay_stained_silver.png": [149, 129, 117], "hardened_clay_stained_red.png": [159, 81, 66], "hardened_clay_stained_magenta.png": [150, 80, 85], "mcl_colorblocks_glazed_terracotta_black.png": [38, 22, 22], "mcl_colorblocks_concrete_white.png": [208, 214, 215], "hardened_clay_stained_green.png": [74, 101, 63], "hardened_clay_stained_lime.png": [105, 134, 73], "mcl_colorblocks_concrete_powder_green.png": [104, 127, 45], "mcl_colorblocks_concrete_light_blue.png": [37, 140, 200], "mcl_colorblocks_concrete_powder_brown.png": [128, 86, 54], "mcl_colorblocks_concrete_purple.png": [103, 32, 159], "hardened_clay_stained_cyan.png": [71, 107, 123], "mcl_colorblocks_concrete_powder_purple.png": [138, 58, 180], "mcl_colorblocks_concrete_powder_yellow.png": [230, 198, 54], "mcl_colorblocks_concrete_powder_light_blue.png": [75, 181, 212], "mcl_colorblocks_glazed_terracotta_pink.png": [251, 138, 170], "mcl_colorblocks_glazed_terracotta_purple.png": [112, 49, 152], "mcl_colorblocks_concrete_orange.png": [226, 101, 1], "mcl_colorblocks_concrete_powder_grey.png": [91, 98, 103], "hardened_clay_stained_black.png": [69, 52, 46], "mcl_colorblocks_glazed_terracotta_white.png": [188, 211, 202], "fire_basic_flame_animated.png": [206, 98, 34], "mcl_burning_hud_flame_animated.png": [206, 98, 34], "mcl_fire_fire_charge.png": [95, 58, 41], "mcl_burning_entity_flame_animated.png": [206, 98, 34], "mcl_fire_flint_and_steel.png": [96, 95, 93], "fire_basic_flame.png": [207, 100, 36], "dye_red.png": [113, 74, 47], "dye_yellow.png": [123, 91, 49], "dye_violet.png": [107, 76, 57], "dye_dark_green.png": [99, 81, 47], "mcl_dye_blue.png": [58, 101, 173], "dye_cyan.png": [104, 89, 60], "mcl_dye_lime.png": [107, 91, 53], "dye_pink.png": [120, 81, 61], "mcl_dye_light_blue.png": [103, 88, 70], "dye_dark_grey.png": [108, 81, 52], "mcl_dye_white.png": [205, 193, 166], "dye_grey.png": [113, 86, 58], "dye_magenta.png": [111, 79, 59], "dye_orange.png": [122, 85, 48], "mcl_dye_brown.png": [104, 75, 56], "mcl_dye_black.png": [56, 56, 64], "default_river_water_flowing_animated.png": [38, 123, 130], "default_river_water_source_animated.png": [37, 120, 130], "3d_armor_stand_item.png": [134, 114, 98], "mob_spawner.png": [40, 40, 40], "mcl_nether_quartz_chiseled_side.png": [194, 186, 183], "mcl_nether_quartz_pillar_top.png": [195, 188, 185], "mcl_nether_nether_wart.png": [190, 79, 75], "mcl_nether_nether_wart_stage_1.png": [86, 54, 51], "mcl_nether_quartz_ore.png": [133, 64, 53], "mcl_nether_soul_sand.png": [90, 70, 51], "mcl_nether_nether_wart_block.png": [175, 76, 73], "mcl_nether_nether_wart_stage_0.png": [53, 41, 38], "mcl_nether_quartz_block_bottom.png": [198, 191, 187], "mcl_nether_quartz_block_top.png": [198, 190, 187], "mcl_nether_quartz.png": [152, 149, 147], "mcl_nether_quartz_pillar_side.png": [195, 188, 184], "mcl_nether_netherbrick.png": [58, 24, 20], "mcl_nether_glowstone.png": [202, 154, 96], "mcl_nether_netherrack.png": [130, 50, 39], "mcl_nether_red_nether_brick.png": [69, 17, 5], "mcl_nether_quartz_chiseled_top.png": [197, 189, 186], "mcl_nether_glowstone_dust.png": [209, 137, 67], "mcl_nether_nether_wart_stage_2.png": [106, 57, 53], "mcl_nether_quartz_block_side.png": [198, 190, 187], "mcl_nether_nether_brick.png": [49, 23, 24], "mcl_nether_magma.png": [85, 33, 27], "mcl_cauldrons_cauldron_inner.png": [24, 24, 24], "mcl_cauldrons_cauldron_top.png": [54, 54, 54], "mcl_cauldrons_cauldron_bottom.png": [50, 37, 38], "mcl_cauldrons_cauldron.png": [47, 47, 47], "mcl_cauldrons_cauldron_side.png": [43, 43, 43], "mcl_beds_bed_side_bottom_magenta.png": [127, 48, 89], "mcl_beds_bed_blue.png": [73, 78, 105], "mcl_beds_bed_side_top_r_black.png": [99, 86, 75], "mcl_beds_bed_side_bottom_r_magenta.png": [132, 46, 94], "mcl_beds_bed_side_top_brown.png": [98, 76, 59], "mcl_beds_bed_lime.png": [96, 135, 66], "mcl_beds_bed_side_top_green.png": [98, 76, 59], "mcl_beds_bed_light_blue.png": [100, 107, 142], "mcl_beds_bed_pink.png": [184, 105, 115], "mcl_beds_bed_side_bottom_black.png": [66, 56, 47], "mcl_beds_bed_top_bottom_green.png": [57, 110, 29], "mcl_beds_bed_side_top_blue.png": [98, 76, 59], "mcl_beds_bed_top_top_pink.png": [217, 138, 147], "mcl_beds_bed_side_bottom_light_blue.png": [90, 94, 129], "mcl_beds_bed_side_bottom_blue.png": [63, 65, 90], "mcl_beds_bed_top_top_red.png": [173, 90, 83], "mcl_beds_bed_side_top_grey.png": [98, 76, 59], "mcl_beds_bed_top_top_white.png": [198, 190, 183], "mcl_beds_bed_top_top_black.png": [107, 100, 92], "mcl_beds_bed_top_bottom_brown.png": [101, 69, 38], "mcl_beds_bed_top_bottom_pink.png": [232, 105, 135], "mcl_beds_bed_side_bottom_r_pink.png": [183, 95, 106], "mcl_beds_bed_side_bottom_r_green.png": [73, 97, 42], "mcl_beds_bed_side_bottom_r_grey.png": [86, 77, 69], "mcl_beds_bed_side_top_r_white.png": [158, 145, 134], "mcl_beds_bed_side_bottom_orange.png": [143, 84, 28], "mcl_beds_bed_side_bottom_purple.png": [105, 36, 112], "mcl_beds_bed_side_bottom_r_light_blue.png": [90, 97, 136], "mcl_beds_bed_side_top_r_magenta.png": [140, 81, 103], "mcl_beds_bed_side_bottom_r_yellow.png": [150, 131, 25], "mcl_beds_bed_side_top_r_pink.png": [176, 111, 113], "mcl_beds_bed_top_top_blue.png": [105, 112, 137], "mcl_beds_bed_side_bottom_green.png": [74, 94, 43], "mcl_beds_bed_side_bottom_r_blue.png": [61, 66, 95], "mcl_beds_bed_top_top_grey.png": [129, 121, 113], "mcl_beds_bed_black.png": [76, 68, 61], "mcl_beds_bed_top_top_silver.png": [159, 151, 143], "mcl_beds_bed_white.png": [173, 165, 158], "mcl_beds_bed_top_top_cyan.png": [105, 144, 135], "mcl_beds_bed_top_bottom_orange.png": [184, 91, 0], "mcl_beds_bed_side_top_silver.png": [98, 76, 59], "mcl_beds_bed_top_top_brown.png": [143, 118, 93], "mcl_beds_bed_side_top_r_light_blue.png": [115, 111, 132], "mcl_beds_bed_side_bottom_r_lime.png": [86, 129, 53], "mcl_beds_bed_red.png": [139, 58, 51], "mcl_beds_bed_top_bottom_lime.png": [79, 163, 47], "mcl_beds_bed_side_top_r_brown.png": [121, 97, 75], "mcl_beds_bed_side_bottom_r_silver.png": [119, 109, 102], "mcl_beds_bed_yellow.png": [154, 138, 41], "mcl_beds_bed_side_top_yellow.png": [98, 76, 59], "mcl_beds_bed_top_bottom_black.png": [37, 37, 37], "mcl_beds_bed_brown.png": [110, 85, 61], "mcl_beds_bed_side_top_orange.png": [98, 76, 59], "mcl_beds_bed_side_top_red.png": [98, 76, 59], "mcl_beds_bed_top_top_purple.png": [148, 79, 161], "mcl_beds_bed_side_bottom_pink.png": [177, 93, 102], "mcl_beds_bed_side_top_r_grey.png": [112, 99, 88], "mcl_beds_bed_side_top_r_blue.png": [97, 91, 104], "mcl_beds_bed_side_top_purple.png": [98, 76, 59], "mcl_beds_bed_side_top_cyan.png": [98, 76, 59], "mcl_beds_bed_top_bottom_blue.png": [32, 60, 119], "mcl_beds_bed_side_bottom_yellow.png": [143, 125, 28], "mcl_beds_bed_side_top_black.png": [98, 76, 59], "mcl_beds_bed_top_top_orange.png": [188, 130, 72], "mcl_beds_bed_top_bottom_silver.png": [129, 129, 129], "mcl_beds_bed_top_top_green.png": [117, 140, 88], "mcl_beds_bed_cyan.png": [73, 111, 103], "mcl_beds_bed_top_bottom_red.png": [157, 20, 20], "mcl_beds_bed_top_bottom_purple.png": [111, 0, 163], "mcl_beds_bed_side_top_r_silver.png": [133, 120, 109], "mcl_beds_bed_side_bottom_grey.png": [86, 76, 67], "mcl_beds_bed_grey.png": [96, 88, 81], "mcl_beds_bed_side_top_r_yellow.png": [151, 132, 62], "mcl_beds_bed_side_top_r_green.png": [103, 111, 72], "mcl_beds_bed_side_bottom_brown.png": [100, 73, 48], "mcl_beds_bed_magenta.png": [138, 60, 104], "mcl_beds_bed_side_bottom_r_red.png": [134, 44, 37], "mcl_beds_bed_side_bottom_r_brown.png": [101, 73, 47], "mcl_beds_bed_side_top_lime.png": [98, 76, 59], "mcl_beds_bed_side_top_light_blue.png": [98, 76, 59], "mcl_beds_bed_side_bottom_red.png": [129, 47, 38], "mcl_beds_bed_bottom_top.png": [48, 38, 29], "mcl_beds_bed_top_bottom_grey.png": [76, 76, 76], "mcl_beds_bed_side_bottom_r_orange.png": [150, 86, 25], "mcl_beds_bed_side_bottom_r_black.png": [64, 54, 47], "mcl_beds_bed_top_bottom_cyan.png": [32, 119, 114], "mcl_beds_bed_side_bottom_silver.png": [116, 106, 97], "mcl_beds_bed_side_top_magenta.png": [98, 76, 59], "mcl_beds_bed_top_bottom_white.png": [201, 201, 201], "mcl_beds_bed_side_top_r_orange.png": [151, 105, 62], "mcl_beds_bed_top_bottom_magenta.png": [154, 23, 118], "mcl_beds_bed_side_top_r_lime.png": [110, 131, 80], "mcl_beds_bed_top_top_magenta.png": [172, 92, 137], "mcl_beds_bed_bottom_bottom.png": [48, 38, 29], "mcl_beds_bed_side_top_r_purple.png": [125, 73, 119], "mcl_beds_bed_side_top_r_cyan.png": [97, 113, 103], "mcl_beds_bed_side_top_white.png": [98, 76, 59], "mcl_beds_bed_side_bottom_r_cyan.png": [61, 101, 93], "mcl_beds_bed_side_bottom_cyan.png": [63, 97, 89], "mcl_beds_bed_side_bottom_white.png": [161, 151, 142], "mcl_beds_bed_top_bottom_yellow.png": [184, 169, 0], "mcl_beds_bed_top_bottom_light_blue.png": [82, 113, 182], "mcl_beds_bed_top_top_lime.png": [130, 169, 98], "mcl_beds_bed_silver.png": [109, 100, 93], "mcl_beds_bed_purple.png": [115, 47, 128], "mcl_beds_bed_side_top_r_red.png": [141, 80, 69], "mcl_beds_bed_top_top_light_blue.png": [132, 141, 174], "mcl_beds_bed_side_bottom_r_purple.png": [107, 32, 120], "mcl_beds_bed_side_bottom_r_white.png": [161, 151, 144], "mcl_beds_bed_orange.png": [154, 96, 41], "mcl_beds_bed_top_bottom_gray.png": [57, 57, 57], "mcl_beds_bed_side_bottom_lime.png": [85, 122, 53], "mcl_beds_bed_green.png": [85, 107, 56], "mcl_beds_bed_top_top_yellow.png": [188, 172, 72], "mcl_beds_bed_side_top_pink.png": [98, 76, 59], "mcl_sponges_sponge_wet_river_water.png": [157, 141, 104], "mcl_sponges_sponge.png": [210, 177, 118], "mcl_sponges_sponge_wet.png": [156, 134, 92], "farming_mushroom_red.png": [169, 59, 58], "mcl_mushrooms_mushroom_block_inside.png": [218, 175, 136], "mcl_mushrooms_mushroom_block_skin_brown.png": [131, 86, 68], "mcl_mushrooms_mushroom_block_skin_stem.png": [204, 183, 149], "mcl_mushrooms_mushroom_block_skin_red.png": [137, 39, 25], "farming_mushroom_brown.png": [121, 81, 59], "farming_mushroom_stew.png": [134, 97, 67], "default_tool_goldsword.png": [194, 154, 70], "default_tool_steelsword.png": [134, 130, 125], "default_tool_woodsword.png": [100, 82, 68], "default_tool_goldshovel.png": [167, 133, 64], "default_tool_steelpick.png": [137, 128, 119], "default_tool_woodshovel.png": [108, 90, 76], "default_tool_goldpick.png": [172, 139, 73], "default_tool_woodaxe.png": [110, 92, 77], "default_tool_diamondsword.png": [105, 133, 149], "default_tool_steelshovel.png": [125, 115, 107], "default_tool_stonesword.png": [133, 125, 118], "default_tool_woodpick.png": [110, 91, 76], "default_tool_shears.png": [139, 132, 124], "default_tool_goldaxe.png": [160, 128, 66], "default_tool_stoneshovel.png": [126, 116, 107], "default_tool_diamondaxe.png": [103, 110, 113], "default_tool_diamondshovel.png": [106, 125, 134], "default_tool_steelaxe.png": [129, 119, 110], "default_tool_stoneaxe.png": [126, 115, 104], "default_tool_diamondpick.png": [92, 105, 111], "default_tool_stonepick.png": [126, 114, 104], "mcl_chests_ender_chest_right.png": [73, 67, 64], "mcl_chests_chest_trapped_right.png": [98, 78, 62], "default_chest_front.png": [85, 70, 58], "mcl_chests_blue_shulker_box_top.png": [67, 85, 119], "mcl_chests_chest_left.png": [99, 78, 63], "mcl_chests_dark_green_shulker_box_top.png": [67, 111, 70], "mcl_chests_chest_back.png": [92, 75, 61], "mcl_chests_ender_chest_bottom.png": [61, 55, 55], "mcl_chests_ender.png": [70, 62, 58], "mcl_chests_brown_shulker_box_top.png": [73, 63, 55], "mcl_chests_chest_trapped_back.png": [92, 75, 61], "mcl_chests_chest_trapped_side_big.png": [96, 77, 62], "mcl_chests_magenta_shulker_box_top.png": [128, 81, 124], "mcl_chests_ender_chest_back.png": [72, 66, 64], "mcl_chests_chest_trapped_bottom.png": [118, 91, 70], "mcl_chests_chest_trapped_front.png": [86, 68, 57], "default_chest_side_big.png": [96, 77, 62], "mcl_chests_green_shulker_box_top.png": [88, 122, 75], "mcl_chests_pink_shulker_box_top.png": [163, 116, 158], "mcl_chests_trapped.png": [95, 76, 61], "mcl_chests_blank.png": [255, 255, 255], "mcl_chests_normal_double.png": [98, 78, 62], "mcl_chests_chest_trapped_top.png": [88, 73, 61], "mcl_chests_normal.png": [95, 76, 61], "default_chest_front_big.png": [93, 75, 61], "mcl_chests_ender_chest_front.png": [76, 69, 65], "mcl_chests_white_shulker_box_top.png": [176, 178, 187], "mcl_chests_cyan_shulker_box_top.png": [67, 101, 121], "mcl_chests_chest_trapped_top_big.png": [100, 80, 65], "default_chest_top_big.png": [100, 80, 65], "mcl_chests_grey_shulker_box_top.png": [126, 129, 138], "mcl_chests_red_shulker_box_top.png": [132, 58, 57], "mcl_chests_trapped_double.png": [98, 78, 62], "mcl_chests_violet_shulker_box_top.png": [120, 71, 88], "mcl_chests_chest_trapped_front_big.png": [94, 75, 61], "mcl_chests_lightblue_shulker_box_top.png": [96, 130, 155], "mcl_chests_dark_grey_shulker_box_top.png": [87, 90, 99], "mcl_chests_black_shulker_box_top.png": [56, 57, 62], "mcl_chests_chest_right.png": [98, 78, 62], "mcl_chests_yellow_shulker_box_top.png": [165, 116, 53], "mcl_chests_chest_bottom.png": [118, 91, 70], "default_chest_top.png": [88, 73, 61], "mcl_chests_ender_chest_top.png": [70, 64, 61], "mcl_chests_ender_chest_left.png": [73, 67, 64], "mcl_chests_chest_trapped_left.png": [99, 78, 63], "mcl_chests_orange_shulker_box_top.png": [143, 74, 51], "screwdriver.png": [132, 119, 108], "_un.png": [0, 0, 0], "_at.png": [0, 0, 0], "_s_.png": [0, 0, 0], "_sz.png": [0, 0, 0], "_q.png": [0, 0, 0], "_1.png": [0, 0, 0], "_h_.png": [0, 0, 0], "_o_tilde.png": [0, 0, 0], "_q_.png": [0, 0, 0], "_ae.png": [0, 0, 0], "_e_circumflex_.png": [0, 0, 0], "_ex.png": [0, 0, 0], "_e_.png": [0, 0, 0], "_qo.png": [0, 0, 0], "_z_.png": [0, 0, 0], "_ps.png": [0, 0, 0], "_pound.png": [0, 0, 0], "_div.png": [0, 0, 0], "_l_.png": [0, 0, 0], "_pilcrow.png": [0, 0, 0], "_3_sup.png": [0, 0, 0], "_e_acute.png": [0, 0, 0], "_9.png": [0, 0, 0], "_e_grave_.png": [0, 0, 0], "_u_acute.png": [0, 0, 0], "_a_sup.png": [0, 0, 0], "_sr.png": [0, 0, 0], "_v.png": [0, 0, 0], "_ue_.png": [0, 0, 0], "_t_.png": [0, 0, 0], "_cl.png": [0, 0, 0], "_n_tilde_.png": [0, 0, 0], "_p_.png": [0, 0, 0], "_c.png": [0, 0, 0], "_a.png": [0, 0, 0], "_a_circumflex_.png": [0, 0, 0], "_8.png": [0, 0, 0], "_s.png": [0, 0, 0], "_o_.png": [0, 0, 0], "_1_4.png": [0, 0, 0], "_e_grave.png": [0, 0, 0], "_o_dash.png": [0, 0, 0], "_5.png": [0, 0, 0], "_d_dash_.png": [0, 0, 0], "_i_grave.png": [0, 0, 0], "_vb.png": [0, 0, 0], "_sp.png": [255, 255, 255], "_a_acute_.png": [0, 0, 0], "_as.png": [0, 0, 0], "_y_acute.png": [0, 0, 0], "_3_4.png": [0, 0, 0], "_6.png": [0, 0, 0], "_7.png": [0, 0, 0], "_tl.png": [0, 0, 0], "_t.png": [0, 0, 0], "_y.png": [0, 0, 0], "_ca.png": [0, 0, 0], "_e.png": [0, 0, 0], "_hs.png": [0, 0, 0], "_copyright.png": [0, 0, 0], "_l.png": [0, 0, 0], "_h.png": [0, 0, 0], "_u_circumflex_.png": [0, 0, 0], "_i_acute_.png": [0, 0, 0], "_ha.png": [0, 0, 0], "_y_diaresis.png": [0, 0, 0], "_gt.png": [0, 0, 0], "_b.png": [0, 0, 0], "_degree.png": [0, 0, 0], "_a_tilde_.png": [0, 0, 0], "_u_.png": [0, 0, 0], "_o_sup.png": [0, 0, 0], "_m_.png": [0, 0, 0], "_c_.png": [0, 0, 0], "_cr.png": [0, 0, 0], "_3.png": [0, 0, 0], "_currency.png": [0, 0, 0], "_f.png": [0, 0, 0], "_cedille.png": [0, 0, 0], "_u_grave_.png": [0, 0, 0], "_dt.png": [0, 0, 0], "_am.png": [0, 0, 0], "_c_cedille_.png": [0, 0, 0], "_u_acute_.png": [0, 0, 0], "_bl.png": [0, 0, 0], "_registered.png": [0, 0, 0], "_i_acute.png": [0, 0, 0], "_lt.png": [0, 0, 0], "_e_acute_.png": [0, 0, 0], "_paragraph.png": [0, 0, 0], "_i_grave_.png": [0, 0, 0], "_o.png": [0, 0, 0], "_1_sup.png": [0, 0, 0], "mcl_signs_sign.png": [114, 89, 69], "_yen.png": [0, 0, 0], "_b_.png": [0, 0, 0], "_macron.png": [0, 0, 0], "_qu_inv.png": [0, 0, 0], "_o_dash_.png": [0, 0, 0], "_guill_right.png": [0, 0, 0], "_p.png": [0, 0, 0], "_thorn_.png": [0, 0, 0], "_2_sup.png": [0, 0, 0], "_pr.png": [0, 0, 0], "default_sign.png": [145, 115, 88], "_times_dot.png": [0, 0, 0], "_acute.png": [0, 0, 0], "_g_.png": [0, 0, 0], "_o_acute_.png": [0, 0, 0], "_a_tilde.png": [0, 0, 0], "_j.png": [0, 0, 0], "_k.png": [0, 0, 0], "_co.png": [0, 0, 0], "_dv.png": [0, 0, 0], "_o_circumflex.png": [0, 0, 0], "_a_ring.png": [0, 0, 0], "_br.png": [0, 0, 0], "_d.png": [0, 0, 0], "_ap.png": [0, 0, 0], "_sl.png": [0, 0, 0], "_mn.png": [0, 0, 0], "_m.png": [0, 0, 0], "_ae_lig.png": [0, 0, 0], "_thorn.png": [0, 0, 0], "_2.png": [0, 0, 0], "_gr.png": [0, 0, 0], "_i.png": [0, 0, 0], "_y_acute_.png": [0, 0, 0], "_diaresis.png": [0, 0, 0], "_oe.png": [0, 0, 0], "_mu.png": [0, 0, 0], "_guill_left.png": [0, 0, 0], "_times_cross.png": [0, 0, 0], "_ae_.png": [0, 0, 0], "_w.png": [0, 0, 0], "_u.png": [0, 0, 0], "_broken_bar.png": [0, 0, 0], "_4.png": [0, 0, 0], "_plus_minus.png": [0, 0, 0], "_1_2.png": [0, 0, 0], "_u_circumflex.png": [0, 0, 0], "_w_.png": [0, 0, 0], "_x_.png": [0, 0, 0], "_e_circumflex.png": [0, 0, 0], "_g.png": [0, 0, 0], "_o_tilde_.png": [0, 0, 0], "_ae_lig_.png": [0, 0, 0], "_v_.png": [0, 0, 0], "_dl.png": [0, 0, 0], "_a_grave.png": [0, 0, 0], "_re.png": [0, 0, 0], "_a_acute.png": [0, 0, 0], "_qu.png": [0, 0, 0], "_oe_.png": [0, 0, 0], "_n_tilde.png": [0, 0, 0], "_eq.png": [0, 0, 0], "_d_.png": [0, 0, 0], "_sm.png": [0, 0, 0], "_y_.png": [0, 0, 0], "_not.png": [0, 0, 0], "_n.png": [0, 0, 0], "_j_.png": [0, 0, 0], "_k_.png": [0, 0, 0], "_0.png": [0, 0, 0], "_o_grave_.png": [0, 0, 0], "_r_.png": [0, 0, 0], "_r.png": [0, 0, 0], "_u_grave.png": [0, 0, 0], "_ee_.png": [0, 0, 0], "_c_cedille.png": [0, 0, 0], "_ex_inv.png": [0, 0, 0], "_cm.png": [0, 0, 0], "_o_grave.png": [0, 0, 0], "_x.png": [0, 0, 0], "_i_.png": [0, 0, 0], "_n_.png": [0, 0, 0], "_rc.png": [0, 0, 0], "_a_.png": [0, 0, 0], "_a_grave_.png": [0, 0, 0], "_ee.png": [0, 0, 0], "_o_acute.png": [0, 0, 0], "_a_ring_.png": [0, 0, 0], "_i_circumflex_.png": [0, 0, 0], "_cent.png": [0, 0, 0], "_d_dash.png": [0, 0, 0], "_f_.png": [0, 0, 0], "_o_circumflex_.png": [0, 0, 0], "_ue.png": [0, 0, 0], "_a_circumflex.png": [0, 0, 0], "_i_circumflex.png": [0, 0, 0], "_z.png": [0, 0, 0], "gui_furnace_arrow_fg.png": [239, 239, 239], "default_furnace_front.png": [105, 95, 91], "default_furnace_fire_bg.png": [139, 139, 139], "default_furnace_top.png": [148, 138, 133], "default_furnace_fire_fg.png": [179, 115, 70], "default_furnace_side.png": [117, 107, 102], "gui_furnace_arrow_bg.png": [139, 139, 139], "default_furnace_front_active.png": [119, 95, 85], "default_furnace_bottom.png": [148, 138, 133], "default_torch_on_floor.png": [115, 82, 59], "default_torch_on_floor_animated.png": [116, 84, 61], "default_tnt_bottom.png": [161, 54, 58], "mcl_tnt_blink.png": [255, 255, 255], "default_tnt_top.png": [125, 54, 57], "default_tnt_side.png": [178, 105, 98], "mcl_heads_skeleton.png": [125, 125, 125], "mcl_heads_skeleton_node.png": [124, 124, 124], "mcl_heads_creeper_node.png": [98, 107, 71], "mcl_heads_zombie.png": [66, 104, 69], "mcl_heads_creeper.png": [92, 110, 68], "mcl_heads_steve_node.png": [115, 70, 58], "mcl_heads_skeleton_preview.png": [128, 127, 127], "mcl_heads_steve_preview.png": [117, 83, 66], "mcl_heads_zombie_node.png": [78, 110, 105], "mcl_heads_steve.png": [108, 76, 59], "mcl_heads_wither_skeleton_node.png": [50, 50, 50], "mcl_heads_zombie_preview.png": [66, 103, 68], "mcl_heads_creeper_preview.png": [88, 110, 65], "mcl_heads_wither_skeleton.png": [50, 50, 50], "mcl_heads_wither_skeleton_preview.png": [50, 50, 50], "mcl_flowerpots_cactus.png": [109, 83, 52], "mcl_flowerpots_flowerpot_inventory.png": [121, 54, 45], "mcl_flowerpots_flowerpot.png": [120, 55, 47], "bucket_lava.png": [166, 127, 113], "bucket_river_water.png": [139, 152, 155], "bucket_water.png": [139, 147, 155], "bucket.png": [147, 143, 139], "mcl_anvils_anvil_top_damaged_1.png": [48, 48, 48], "mcl_anvils_anvil_top_damaged_2.png": [46, 46, 46], "mcl_anvils_anvil_top_damaged_0.png": [50, 50, 50], "mcl_anvils_anvil_side.png": [45, 45, 45], "mcl_anvils_inventory.png": [157, 157, 157], "mcl_anvils_anvil_base.png": [40, 40, 40], "mcl_maps_map_filled.png": [213, 176, 148], "mcl_maps_map_empty.png": [217, 187, 157], "mcl_maps_map_filled_markings.png": [183, 183, 183], "mcl_dispensers_dispenser_front_vertical.png": [115, 104, 99], "mcl_dispensers_dispenser_front_horizontal.png": [105, 96, 92], "jeija_wall_lever.png": [95, 80, 69], "mesecons_delayer_front_locked_off.png": [97, 85, 77], "mesecons_delayer_locked_on.png": [114, 100, 95], "mesecons_delayer_sides_locked_off.png": [95, 80, 73], "mesecons_delayer_sides_on.png": [106, 71, 63], "mesecons_delayer_item.png": [100, 87, 82], "mesecons_delayer_end_locked_off.png": [97, 85, 77], "mesecons_delayer_end_locked_on.png": [101, 85, 78], "mesecons_delayer_ends_off.png": [99, 86, 80], "mesecons_delayer_front_locked_on.png": [101, 85, 77], "mesecons_delayer_ends_on.png": [105, 87, 81], "mesecons_delayer_sides_locked_on.png": [104, 81, 74], "mesecons_delayer_locked_off.png": [110, 99, 95], "mesecons_delayer_sides_off.png": [90, 69, 61], "mesecons_delayer_off.png": [112, 100, 96], "mesecons_delayer_on.png": [116, 101, 97], "redstone_redstone_dust_line0.png": [168, 168, 168], "redstone_redstone_dust.png": [81, 0, 0], "redstone_redstone_dust_dot.png": [168, 168, 168], "redstone_redstone_dust_line1.png": [173, 173, 173], "jeija_commandblock_off.png": [110, 99, 96], "jeija_commandblock_on.png": [110, 99, 96], "redstone_redstone_block.png": [128, 8, 9], "jeija_torches_on.png": [102, 68, 56], "jeija_torches_off.png": [90, 66, 54], "mesecons_button_wield_mask.png": [255, 126, 126], "mcl_droppers_dropper_front_vertical.png": [118, 108, 103], "mcl_droppers_dropper_front_horizontal.png": [110, 101, 96], "mesecons_noteblock.png": [104, 81, 63], "jeija_solar_panel_inverted.png": [100, 107, 117], "jeija_solar_panel.png": [124, 113, 101], "jeija_solar_panel_side.png": [60, 47, 36], "mcl_observers_observer_top.png": [139, 128, 123], "mcl_observers_observer_front.png": [95, 80, 84], "mcl_observers_observer_back_lit.png": [75, 67, 65], "mcl_observers_observer_back.png": [72, 67, 64], "mcl_observers_observer_side.png": [111, 103, 99], "mesecons_piston_pusher_front_sticky.png": [97, 81, 63], "mesecons_piston_pusher_top.png": [106, 83, 65], "mesecons_piston_back.png": [110, 101, 98], "mesecons_piston_on_front.png": [111, 101, 98], "mesecons_piston_pusher_back.png": [106, 83, 65], "mesecons_piston_bottom.png": [120, 107, 100], "mesecons_piston_pusher_right.png": [106, 83, 65], "mesecons_piston_pusher_bottom.png": [106, 83, 65], "mesecons_piston_pusher_front.png": [106, 83, 65], "mesecons_piston_pusher_left.png": [106, 83, 65], "jeija_lightstone_gray_on.png": [97, 56, 37], "jeija_lightstone_gray_off.png": [64, 49, 43], "mcl_comparators_sides_on.png": [105, 87, 81], "mcl_comparators_comp.png": [61, 20, 20], "mcl_comparators_on.png": [116, 102, 98], "mcl_comparators_sides_comp.png": [99, 88, 83], "mcl_comparators_off.png": [113, 102, 98], "mcl_comparators_ends_comp.png": [99, 88, 83], "mcl_comparators_ends_sub.png": [105, 88, 83], "mcl_comparators_ends_off.png": [96, 80, 74], "mcl_comparators_ends_on.png": [105, 81, 75], "mcl_comparators_sub.png": [112, 25, 25], "mcl_comparators_item.png": [98, 83, 79], "mcl_comparators_sides_off.png": [99, 86, 80], "mcl_comparators_sides_sub.png": [105, 88, 83], "default_book.png": [103, 67, 44], "default_bookshelf.png": [84, 67, 54], "mcl_books_book_written.png": [110, 74, 44], "mcl_books_book_bg.png": [203, 180, 151], "mcl_books_button9_pressed.png": [145, 112, 86], "mcl_books_button9.png": [145, 112, 86], "mcl_books_book_writable.png": [151, 122, 108], "mcl_books_bookshelf_top.png": [109, 84, 65], "wool_dark_grey.png": [96, 87, 87], "wool_grey.png": [143, 134, 134], "wool_magenta.png": [140, 85, 125], "wool_black.png": [45, 42, 42], "wool_orange.png": [188, 106, 45], "wool_blue.png": [43, 73, 125], "wool_yellow.png": [201, 163, 69], "wool_pink.png": [171, 91, 108], "wool_dark_green.png": [53, 91, 51], "wool_brown.png": [86, 57, 43], "wool_red.png": [132, 42, 45], "mcl_wool_light_blue.png": [91, 130, 180], "wool_cyan.png": [30, 94, 113], "mcl_wool_lime.png": [107, 151, 76], "wool_white.png": [212, 199, 182], "wool_violet.png": [77, 57, 102], "mcl_potions_melon_speckled.png": [170, 97, 62], "mcl_potions_effect_swift.png": [106, 96, 85], "mcl_potions_spider_eye_fermented.png": [143, 97, 62], "mcl_potions_splash_bottle.png": [168, 156, 183], "mcl_potions_effect_water_breathing.png": [59, 69, 100], "mcl_potions_effect_leaping.png": [100, 91, 86], "mcl_potions_effect_weak.png": [127, 126, 126], "mcl_potions_dragon_breath.png": [171, 137, 163], "mcl_potions_effect_food_poisoning.png": [112, 123, 89], "hudbars_icon_regenerate.png": [195, 77, 114], "mcl_potions_effect_fire_proof.png": [112, 68, 68], "mcl_potions_splash_overlay.png": [202, 202, 202], "mcl_potions_effect_invisible.png": [96, 103, 95], "hbhunger_icon_regen_poison.png": [147, 111, 115], "mcl_potions_effect_slow.png": [78, 81, 85], "mcl_potions_lingering_bottle.png": [181, 159, 192], "mcl_potions_potion_overlay.png": [201, 201, 201], "mcl_potions_effect_regenerating.png": [133, 90, 83], "mcl_potions_arrow_inv.png": [171, 165, 160], "mcl_potions_effect_night_vision.png": [86, 99, 74], "mcl_potions_potion_bottle.png": [156, 172, 203], "mcl_potions_effect_poisoned.png": [78, 110, 80], "mcl_potions_effect_strong.png": [100, 82, 97], "crafting_workbench_front.png": [120, 93, 72], "gui_crafting_arrow.png": [139, 139, 139], "crafting_workbench_side.png": [120, 93, 72], "crafting_workbench_top.png": [152, 121, 93], "mcl_enchanting_glyph_11.png": [209, 209, 231], "mcl_enchanting_glyph_14.png": [209, 209, 231], "mcl_enchanting_glyph_6.png": [209, 209, 231], "mcl_enchanting_glyph_8.png": [209, 209, 231], "mcl_enchanting_glyph_9.png": [209, 209, 231], "mcl_enchanting_glyph_3.png": [209, 209, 231], "mcl_enchanting_number_1_off.png": [255, 255, 255], "mcl_enchanting_number_3_off.png": [255, 255, 255], "mcl_enchanting_number_3.png": [151, 47, 40], "mcl_enchanting_book_open.png": [153, 123, 99], "mcl_enchanting_button_off.png": [255, 255, 255], "mcl_enchanting_glyph_2.png": [209, 209, 231], "mcl_enchanting_glyph_1.png": [209, 209, 231], "mcl_enchanting_button.png": [255, 255, 255], "mcl_enchanting_table_side.png": [66, 58, 55], "mcl_enchanting_book_closed.png": [112, 78, 55], "mcl_enchanting_table_bottom.png": [58, 51, 52], "mcl_enchanting_glyph_15.png": [209, 209, 231], "mcl_enchanting_number_2_off.png": [255, 255, 255], "mcl_enchanting_glyph_5.png": [209, 209, 231], "mcl_enchanting_number_1.png": [149, 45, 39], "mcl_enchanting_glyph_7.png": [209, 209, 231], "mcl_enchanting_table_top.png": [88, 86, 84], "mcl_enchanting_number_2.png": [149, 46, 39], "mcl_enchanting_glyph_16.png": [209, 209, 231], "mcl_enchanting_button_hovered.png": [255, 255, 255], "mcl_enchanting_book_enchanted.png": [122, 69, 46], "mcl_enchanting_glyph_4.png": [209, 209, 231], "mcl_enchanting_glyph_10.png": [209, 209, 231], "mcl_enchanting_glyph_13.png": [209, 209, 231], "mcl_enchanting_glyph_17.png": [209, 209, 231], "mcl_enchanting_glyph_18.png": [209, 209, 231], "mcl_enchanting_lapis_background.png": [255, 255, 255], "mcl_enchanting_button_background.png": [229, 202, 171], "mcl_enchanting_glyph_12.png": [209, 209, 231], "doc_basics_gameplay_mtg_2.png": [151, 168, 207], "doc_basics_liquids_renewable_1.png": [139, 146, 159], "doc_basics_players_sam.png": [95, 133, 106], "doc_basics_players_flat.png": [127, 155, 130], "doc_basics_craft_shapeless_2.png": [52, 52, 48], "doc_basics_build.png": [84, 84, 55], "doc_basics_pointing.png": [66, 104, 32], "doc_basics_nodes.png": [108, 104, 94], "doc_basics_craft_groups_2.png": [65, 58, 52], "doc_basics_craft_groups_1.png": [57, 57, 58], "doc_basics_inventory.png": [47, 47, 45], "doc_basics_minimap_radar.png": [73, 164, 128], "doc_basics_sneak.png": [70, 69, 69], "doc_basics_camera_behind.png": [108, 144, 135], "doc_basics_craft_repair.png": [47, 46, 45], "doc_basics_hotbar_relations.png": [85, 84, 69], "doc_basics_gameplay_lott.png": [119, 122, 112], "doc_basics_tools_mining.png": [64, 62, 59], "doc_basics_players_lott.png": [180, 193, 224], "doc_basics_gameplay_outback.png": [146, 114, 109], "doc_basics_gameplay_pixture.png": [94, 120, 57], "doc_basics_craft_grid.png": [46, 46, 46], "doc_basics_craft_groups_3.png": [61, 58, 55], "doc_basics_camera_front.png": [99, 133, 110], "doc_basics_minimap_map.png": [149, 169, 183], "doc_basics_gameplay_mtg_1.png": [136, 117, 86], "doc_basics_gameplay_xtraores_xtension.png": [95, 15, 86], "doc_basics_light_torch.png": [25, 43, 14], "doc_basics_minimap_round.png": [160, 175, 189], "doc_basics_light_test.png": [133, 113, 69], "doc_basics_liquids_nonrenewable.png": [64, 87, 87], "doc_basics_gameplay_hades.png": [81, 70, 62], "doc_basics_gameplay_moontest.png": [75, 74, 79], "doc_basics_liquids_range.png": [146, 166, 179], "doc_basics_inventory_detail.png": [43, 41, 39], "doc_basics_camera_ego.png": [111, 147, 139], "doc_basics_tools.png": [46, 45, 42], "doc_basics_liquids_renewable_2.png": [136, 148, 166], "doc_basics_items_dropped.png": [195, 185, 147], "doc_basics_liquids_types.png": [146, 164, 171], "doc_basics_gameplay_carbone_ng.png": [121, 118, 89], "doc_basics_craft_shaped.png": [55, 52, 50], "doc_basics_hotbar.png": [141, 175, 226], "doc_basics_craft_shapeless_1.png": [52, 52, 48], "doc_button_icon_lores.png": [19, 143, 183], "doc_awards_icon_generic.png": [14, 125, 162], "inventory_plus_doc_inventory_plus.png": [19, 143, 183], "doc_button_icon_hires.png": [30, 149, 188], "doc_identifier_identifier.png": [172, 151, 139], "doc_identifier_identifier_liquid.png": [125, 147, 190], "craftguide_clear_icon.png": [254, 254, 254], "craftguide_book.png": [84, 117, 39], "mcl_craftguide_fuel.png": [187, 121, 75], "craftguide_prev_icon.png": [255, 255, 255], "craftguide_zoomout_icon.png": [255, 255, 255], "craftguide_search_icon.png": [254, 254, 254], "craftguide_arrow.png": [139, 139, 139], "craftguide_zoomin_icon.png": [255, 255, 255], "craftguide_shapeless.png": [130, 130, 130], "craftguide_next_icon.png": [255, 255, 255]} \ No newline at end of file diff --git a/mods/ITEMS/mcl_maps/init.lua b/mods/ITEMS/mcl_maps/init.lua index 58a0a3a15..df550f537 100644 --- a/mods/ITEMS/mcl_maps/init.lua +++ b/mods/ITEMS/mcl_maps/init.lua @@ -1,8 +1,140 @@ local S = minetest.get_translator("mcl_maps") +local storage = minetest.get_mod_storage() +local modpath = minetest.get_modpath("mcl_maps") +local worldpath = minetest.get_worldpath() +local map_textures_path = worldpath .. "/mcl_maps/" +local last_finished_id = storage:get_int("next_id") - 1 + +minetest.mkdir(map_textures_path) + +local function load_json_file(name) + local file = assert(io.open(modpath .. "/" .. name .. ".json", "r")) + local data = minetest.parse_json(file:read()) + file:close() + return data +end + +local texture_colors = load_json_file("colors") +local palettes = load_json_file("palettes") + +local color_cache = {} + +local creating_maps = {} +local loading_maps = {} +local loaded_maps = {} + +local c_air = minetest.get_content_id("air") -- Turn empty map into filled map by rightclick local make_filled_map = function(itemstack, placer, pointed_thing) local new_map = ItemStack("mcl_maps:filled_map") + if minetest.settings:get_bool("enable_real_maps", true) then + local meta = new_map:get_meta() + local id = storage:get_int("next_id") + storage:set_int("next_id", id + 1) + local texture_file = "mcl_maps_map_texture_" .. id .. ".tga" + local texture_path = map_textures_path .. texture_file + local texture = "[combine:140x140:0,0=mcl_maps_map_background.png:6,6=" .. texture_file + meta:set_int("mcl_maps:id", id) + meta:set_string("mcl_maps:texture", texture) + meta:set_string("mcl_maps:texture_path", texture_path) + tt.reload_itemstack_description(new_map) + creating_maps[texture] = true + local pos = placer:get_pos() + local minp = vector.multiply(vector.floor(vector.divide(pos, 128)), 128) + local maxp = vector.add(minp, vector.new(127, 127, 127)) + minetest.emerge_area(minp, maxp, function(blockpos, action, calls_remaining) + if calls_remaining < 1 then + local vm = minetest.get_voxel_manip() + local emin, emax = vm:read_from_map(minp, maxp) + local data = vm:get_data() + local param2data = vm:get_param2_data() + local area = VoxelArea:new({MinEdge = emin, MaxEdge = emax}) + local pixels = {} + local last_heightmap + for x = 1, 128 do + local map_x = minp.x - 1 + x + local heightmap = {} + for z = 1, 128 do + local map_z = minp.z - 1 + z + local color + for map_y = maxp.y, minp.y, -1 do + local index = area:index(map_x, map_y, map_z) + local c_id = data[index] + + if c_id ~= c_air then + color = color_cache[c_id] + + if color == nil then + local nodename = minetest.get_name_from_content_id(c_id) + local def = minetest.registered_nodes[nodename] + + if def then + local texture + + if def.palette then + texture = def.palette + elseif def.tiles then + texture = def.tiles[1] + + if type(texture) == "table" then + texture = texture.name + end + end + + if texture then + texture = texture:match("([^=^%^]-([^.]+))$"):split("^")[1] + end + + if def.palette then + local palette = palettes[texture] + color = palette and {palette = palette} + else + color = texture_colors[texture] + end + end + end + + if color and color.palette then + color = color.palette[param2data[index] + 1] + else + color_cache[c_id] = color or false + end + + if color and last_heightmap then + local last_height = last_heightmap[z] + if last_height < map_y then + color = { + math.min(255, color[1] + 16), + math.min(255, color[2] + 16), + math.min(255, color[3] + 16), + } + elseif last_height > map_y then + color = { + math.max(0, color[1] - 16), + math.max(0, color[2] - 16), + math.max(0, color[3] - 16), + } + end + end + + height = map_y + break + end + end + heightmap[z] = height + pixels[z] = pixels[z] or {} + pixels[z][x] = color or {0, 0, 0} + end + last_heightmap = heightmap + end + + tga_encoder.image(pixels):save(texture_path) + + creating_maps[texture] = false + end + end) + end itemstack:take_item() if itemstack:is_empty() then return new_map @@ -20,7 +152,7 @@ end minetest.register_craftitem("mcl_maps:empty_map", { description = S("Empty Map"), _doc_items_longdesc = S("Empty maps are not useful as maps, but they can be stacked and turned to maps which can be used."), - _doc_items_usagehelp = S("Rightclick to start using the map (which can't be stacked anymore)."), + _doc_items_usagehelp = S("Rightclick to create a filled map (which can't be stacked anymore)."), inventory_image = "mcl_maps_map_empty.png", groups = { not_in_creative_inventory = 1 }, on_place = make_filled_map, @@ -28,62 +160,27 @@ minetest.register_craftitem("mcl_maps:empty_map", { stack_max = 64, }) -mcl_wip.register_wip_item("mcl_maps:empty_map") - -local function has_item_in_hotbar(player, item) - -- Requirement: player carries the tool in the hotbar - local inv = player:get_inventory() - local hotbar = player:hud_get_hotbar_itemcount() - for i=1, hotbar do - if inv:get_stack("main", i):get_name() == item then - return true - end - end - return false -end - --- Checks if player is still allowed to display the minimap -local function update_minimap(player) - local creative = minetest.is_creative_enabled(player:get_player_name()) - if creative then - player:hud_set_flags({minimap=true, minimap_radar = true}) - else - if has_item_in_hotbar(player, "mcl_maps:filled_map") then - player:hud_set_flags({minimap = true, minimap_radar = false}) - else - player:hud_set_flags({minimap = false, minimap_radar = false}) - end - end -end - --- Remind player how to use the minimap correctly -local function use_minimap(itemstack, player, pointed_thing) - if player and player:is_player() then - update_minimap(player) - minetest.chat_send_player(player:get_player_name(), S("Use the minimap key to show the map.")) - end -end - --- Enables minimap if carried in hotbar. --- If this item is NOT in the hotbar, the minimap is unavailable --- Note: This is not at all like Minecraft right now. Minetest's minimap is pretty overpowered, it --- has a very greatly zoomed-out version and even a radar mode minetest.register_craftitem("mcl_maps:filled_map", { description = S("Map"), - _tt_help = S("Enables minimap"), - _doc_items_longdesc = S("Maps show your surroundings as you explore the world."), - _doc_items_usagehelp = S("Hold the map in any of the hotbar slots. This allows you to access the minimap by pressing the minimap key (see controls settings).").."\n".. - S("In Creative Mode, you don't need this item; the minimap is always available."), + _tt_help = S("Shows a map image."), + _doc_items_longdesc = S("When created, the map saves the nearby area as an image that can be viewed any time by holding the map."), + _doc_items_usagehelp = S("Hold the map in your hand. This will display a map on your screen."), groups = { tool = 1 }, inventory_image = "mcl_maps_map_filled.png^(mcl_maps_map_filled_markings.png^[colorize:#000000)", stack_max = 1, - - on_use = use_minimap, - on_secondary_use = use_minimap, }) +tt.register_priority_snippet(function(itemstring, _, itemstack) + if itemstack and itemstring == "mcl_maps:filled_map" then + local id = itemstack:get_meta():get_string("mcl_maps:id") + if id ~= "" then + return "#" .. id, mcl_colors.GRAY + end + end +end) + minetest.register_craft({ - output = "mcl_maps:filled_map", + output = "mcl_maps:empty_map", recipe = { { "mcl_core:paper", "mcl_core:paper", "mcl_core:paper" }, { "mcl_core:paper", "group:compass", "mcl_core:paper" }, @@ -91,20 +188,62 @@ minetest.register_craft({ } }) +local maps = {} +local huds = {} + minetest.register_on_joinplayer(function(player) - update_minimap(player) + huds[player] = player:hud_add({ + hud_elem_type = "image", + text = "blank.png", + position = {x = 1, y = 1}, + alignment = {x = -1, y = -1}, + offset = {x = -125, y = -50}, + scale = {x = 2, y = 2}, + }) end) -local updatetimer = 0 -if not minetest.is_creative_enabled("") then - minetest.register_globalstep(function(dtime) - updatetimer = updatetimer + dtime - if updatetimer > 0.1 then - local players = minetest.get_connected_players() - for i=1, #players do - update_minimap(players[i]) +minetest.register_on_leaveplayer(function(player) + maps[player] = nil + huds[player] = nil +end) + +local function is_holding_map(player) + local wield = player:get_wielded_item() + if wield:get_name() ~= "mcl_maps:filled_map" then + return + end + local meta = wield:get_meta() + local texture = meta:get_string("mcl_maps:texture") + if texture == "" then + return + end + if loaded_maps[texture] then + return texture + end + local path = meta:get_string("mcl_maps:texture_path") + if not creating_maps[texture] and not loading_maps[texture] then + loading_maps[texture] = true + local player_name = player:get_player_name() + minetest.dynamic_add_media(path, function(finished_name) + if player_name == finished_name then + loading_maps[texture] = false + loaded_maps[texture] = true end - updatetimer = updatetimer - dtime - end - end) + end) + end end + +minetest.register_globalstep(function(dtime) + for _, player in pairs(minetest.get_connected_players()) do + local texture = is_holding_map(player) + if texture then + if texture ~= maps[player] then + player:hud_change(huds[player], "text", texture) + maps[player] = texture + end + elseif maps[player] then + player:hud_change(huds[player], "text", "blank.png") + maps[player] = nil + end + end +end) diff --git a/mods/ITEMS/mcl_maps/locale/mcl_maps.de.tr b/mods/ITEMS/mcl_maps/locale/mcl_maps.de.tr index 6d1836b48..d7762e512 100644 --- a/mods/ITEMS/mcl_maps/locale/mcl_maps.de.tr +++ b/mods/ITEMS/mcl_maps/locale/mcl_maps.de.tr @@ -1,10 +1,8 @@ # textdomain: mcl_maps Empty Map=Leere Karte Empty maps are not useful as maps, but they can be stacked and turned to maps which can be used.=Leere Karten sind als Karten nicht nützlich, aber sie können gestapelt werden und zu benutzbaren Karten umgewandelt werden. -Rightclick to start using the map (which can't be stacked anymore).=Rechtsklick, um zu beginnen, die Karte zu benutzen. Sie kann dann nicht mehr gestapelt werden. +Rightclick to create a filled map (which can't be stacked anymore).=Rechtsklick, um die Karte zu füllen. Sie kann dann nicht mehr gestapelt werden. Map=Karte -Maps show your surroundings as you explore the world.=Karten zeigen Ihre Umgebung, während Sie die Welt erkunden. -Hold the map in any of the hotbar slots. This allows you to access the minimap by pressing the minimap key (see controls settings).=Halten Sie die Karte in einen beliebigen Platz in der Schnellleiste. Damit können Sie jetzt die Übersichtskarte aktivieren, indem Sie die Taste zum Umschalten der Karte drücken (siehe Tastenbelegung). -In Creative Mode, you don't need this item; the minimap is always available.=Im Kreativmodus brauchen Sie diesen Gegenstand nicht; die Übersichtskarte ist immer verfügbar. -Enables minimap=Aktiviert Übersichtskarte -Use the minimap key to show the map.=Taste „Karte an/aus“ benutzen, um die Karte zu betrachten. +Shows a map image.=Zeigt ein Kartenbild. +When created, the map saves the nearby area as an image that can be viewed any time by holding the map.=Beim Erstellen speichert die Karte die Gegend in der Nähe als ein Bild, dass jederzeit durch halten der Karte angesehen werden kann. +Hold the map in your hand. This will display a map on your screen.=Halten Sie die Karte in Ihrer Hand. Eine Karte wird auf Ihrem Bildschirm angezeigt werden. diff --git a/mods/ITEMS/mcl_maps/locale/mcl_maps.es.tr b/mods/ITEMS/mcl_maps/locale/mcl_maps.es.tr index 513eab136..cec96b17b 100644 --- a/mods/ITEMS/mcl_maps/locale/mcl_maps.es.tr +++ b/mods/ITEMS/mcl_maps/locale/mcl_maps.es.tr @@ -3,6 +3,3 @@ Empty Map=Mapa vacio Empty maps are not useful as maps, but they can be stacked and turned to maps which can be used.=Los mapas vacíos no son útiles como mapas, pero se pueden apilar y convertir en mapas que se pueden usar. Rightclick to start using the map (which can't be stacked anymore).=Haga clic derecho para comenzar a usar el mapa (que ya no se puede apilar). Map=Mapa -Maps show your surroundings as you explore the world.=Los mapas muestran tu entorno mientras exploras el mundo. -Hold the map in any of the hotbar slots. This allows you to access the minimap by pressing the minimap key (see controls settings).=Mantenga el mapa en cualquiera de las ranuras de la barra de acceso directo. Esto le permite acceder al minimapa presionando la tecla del minimapa (consulte la configuración de los controles). -In Creative Mode, you don't need this item; the minimap is always available.=En el modo creativo, no necesita este elemento; El minimapa siempre está disponible. diff --git a/mods/ITEMS/mcl_maps/locale/mcl_maps.fr.tr b/mods/ITEMS/mcl_maps/locale/mcl_maps.fr.tr index 6feb253ae..9ef7cd5c5 100644 --- a/mods/ITEMS/mcl_maps/locale/mcl_maps.fr.tr +++ b/mods/ITEMS/mcl_maps/locale/mcl_maps.fr.tr @@ -3,8 +3,3 @@ Empty Map=Carte Vierge Empty maps are not useful as maps, but they can be stacked and turned to maps which can be used.=Les cartes vierges ne sont pas utiles en tant que cartes, mais elles peuvent être empilées et transformées en cartes utilisables. Rightclick to start using the map (which can't be stacked anymore).=Clic droit pour commencer à utiliser la carte (qui ne peut plus être empilée). Map=Carte -Maps show your surroundings as you explore the world.=Les cartes montrent votre environnement lorsque vous explorez le monde. -Hold the map in any of the hotbar slots. This allows you to access the minimap by pressing the minimap key (see controls settings).=Tenez la carte dans l'un des emplacements de la barre de raccourci. Cela vous permet d'accéder à la mini-carte en appuyant sur la touche de la mini-carte (voir les paramètres des commandes). -In Creative Mode, you don't need this item; the minimap is always available.=En mode créatif, vous n'avez pas besoin de cet élément; la minicarte est toujours disponible. -Enables minimap=Active la minicarte -Use the minimap key to show the map.=Utilisez la touche mini-carte pour afficher la carte. diff --git a/mods/ITEMS/mcl_maps/locale/mcl_maps.ru.tr b/mods/ITEMS/mcl_maps/locale/mcl_maps.ru.tr index 70243a166..6c34007a9 100644 --- a/mods/ITEMS/mcl_maps/locale/mcl_maps.ru.tr +++ b/mods/ITEMS/mcl_maps/locale/mcl_maps.ru.tr @@ -3,8 +3,3 @@ Empty Map=Пустая карта Empty maps are not useful as maps, but they can be stacked and turned to maps which can be used.=Пустые карты не могут использоваться в качестве карт, но могут складываться в стопки, а также могут быть превращены в полноценные карты. Rightclick to start using the map (which can't be stacked anymore).=Кликните правой, чтобы начать использовать карту (её больше нельзя будет уложить в стопку). Map=Карта -Maps show your surroundings as you explore the world.=Карты показывают ваше окружение, когда вы изучаете мир. -Hold the map in any of the hotbar slots. This allows you to access the minimap by pressing the minimap key (see controls settings).=Поместите карту в один из отсеков панели быстрого доступа. Это позволит вам вызывать миникарту нажатием клавиши [Миникарта] (см. настройки управления). -In Creative Mode, you don't need this item; the minimap is always available.=Этот предмет не нужен в творческом режиме; там миникарта всегда доступна и так. -Enables minimap=Включает миникарту -Use the minimap key to show the map.=Используйте клавишу [Миникарта] для отображения карты. diff --git a/mods/ITEMS/mcl_maps/locale/template.txt b/mods/ITEMS/mcl_maps/locale/template.txt index 061ed45e0..27298d2ec 100644 --- a/mods/ITEMS/mcl_maps/locale/template.txt +++ b/mods/ITEMS/mcl_maps/locale/template.txt @@ -1,10 +1,8 @@ # textdomain: mcl_maps Empty Map= Empty maps are not useful as maps, but they can be stacked and turned to maps which can be used.= -Rightclick to start using the map (which can't be stacked anymore).= +Rightclick to create a filled map (which can't be stacked anymore).= Map= -Maps show your surroundings as you explore the world.= -Hold the map in any of the hotbar slots. This allows you to access the minimap by pressing the minimap key (see controls settings).= -In Creative Mode, you don't need this item; the minimap is always available.= -Enables minimap= -Use the minimap key to show the map.= +Shows a map image.= +When created, the map saves the nearby area as an image that can be viewed any time by holding the map.= +Hold the map in your hand. This will display a map on your screen.= diff --git a/mods/ITEMS/mcl_maps/mod.conf b/mods/ITEMS/mcl_maps/mod.conf index 5615dc2be..82c9e61f0 100644 --- a/mods/ITEMS/mcl_maps/mod.conf +++ b/mods/ITEMS/mcl_maps/mod.conf @@ -1,2 +1,2 @@ name = mcl_maps -depends = mcl_wip +depends = mcl_core, mcl_flowers, tga_encoder, tt, mcl_colors diff --git a/mods/ITEMS/mcl_maps/palettes.json b/mods/ITEMS/mcl_maps/palettes.json new file mode 100644 index 000000000..958882a16 --- /dev/null +++ b/mods/ITEMS/mcl_maps/palettes.json @@ -0,0 +1 @@ +{"mcl_core_palette_grass.png": [[109, 196, 117], [159, 193, 114], [118, 177, 120], [118, 177, 120], [107, 186, 107], [118, 177, 120], [92, 182, 119], [92, 182, 119], [92, 182, 119], [92, 182, 119], [118, 177, 120], [109, 196, 117], [35, 175, 105], [94, 190, 107], [94, 190, 107], [94, 190, 107], [94, 190, 107], [159, 193, 114], [76, 176, 84], [164, 150, 110], [164, 150, 110], [164, 150, 110], [164, 150, 110], [159, 193, 114], [93, 181, 76], [93, 181, 76], [93, 181, 76], [93, 181, 76], [76, 118, 60], [94, 190, 107], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117], [109, 196, 117]]} \ No newline at end of file diff --git a/mods/ITEMS/mcl_maps/textures/map_background.png b/mods/ITEMS/mcl_maps/textures/map_background.png new file mode 100644 index 0000000000000000000000000000000000000000..8b717704a1beb1f514e723ff148cfff6502c2ae6 GIT binary patch literal 1710 zcmV;f22uHmP)N2bPDNB8 zb~7$DE-^4L^m3s900t^aL_t(|UgcXmvfM@t)IEIyhpzG&oHJ#pK;;YA zxeh@KTMJgRr}3M|eTjlCa+kvo8V#T^v;1%z$A|Cva~l8Ymmd%RM1cJD@#n)nU;g;@ z+}eKUgXh^k-p}@5>4e{Y`r+V@-|qncKa2vyjsN=J=i}=?e;%!^jg3CvuHnGp{ro<> zt(;?aAh2vO-ouaCIVS*)hz;ZiOO4NrAz>3(20NTERumFI@ zKfLS@+%+;{hC2TVfEj8JjaxU~?r;0N<>UDMeD3G-`*rOe%z_I5e$WPvjCY`_Er*U^ zfHIa1ia=50{5J%_!(?H=;(dHz-gl37asdK^Ob`q}<1&MGKyeU406cb5+E-rAjwcMj zc%Oh!g$FXg_Pu(^9B`q2$FpwG1eAaQD&|!zN4bELrUKE&7z1P#SOAz9HW>@y z<2!~%o*y&7Rn$e{y$S%xFV28&R;*0im>A!c#w@I!BBz@G?=b!~ z0I*u@fcFF~V*q+BGCnJrS&1}fUz(vy2vi1iJsy=w$N^dXkK}HLF_DPEQn(KQE4vD? zC=r4Z>}q{wyh?bPT(4OQAaZ~bLwChK z=M(P?Pa$;a1E$98jDG@<)$u!w&%}_I!UqE$-hU6zW5s|n7{zQ?;jxFaUVuyC6@d2u zA*ce~e9$R}L?48DsAs&c%L0ag9a0eGv?9f1_g z2Xs^)m$a%3W=imV84yjV2EBkve5yod0N{AO9?mdd%HX&POg&ECHv@P+ATz%5I8J_K zIYk0+c7h$FxcP}ZoOs^B#u=d<&u27`stQhzpA2{a&@p~$YzD%U0Tl>YVvBMIuQTvs z$ub`x8E}`eko6g4ugPlL6-Rz(jX;VdE981V_v8C}fcOcpYE-h_*iV!T<*V zjqGakopIiJqoE4?2=vG~oKU0qUy>jW+%af!4$cEI^Vq|Y$5ock7|P(vD!`&-l7%M# z_=DQ@74z5`>iZ5;@jA?~(MQ;wv2@BL%WX1&mj72PIyOR%9U+z@^J%6{c3_zL# zyd0@|9)Ykci0~e-Hd=vTzsa>hRR!)gp2Oiz24pQT<_sx>d}%CWfXD5w=h1k~0a;w% zEsI?p;-4}v3nSCSwhIO)!AWw9dVvW8LIAStzZhH1A2hnRDhG5Kzf4apw7C z8GM;;dyc&;=S*@)%79D+Nf6Y`4+9Y~h1LeA302X*3IlU8|26+n1tKNb4hLm4gCnNH zm;qf7GP+l6kPI+Xb{{6K4%uAckO7&;s}hK|g$(G(;Lt0bd)h!RfTMA;RyhXm~N??(B45o050vY z0Wf9&ul02nQb;GLs*^FGOY=+#G7BCdzzi70db9{qtsw>s$Uxaqe&~JgKK-SMQwcf) zCNeZ!O)hAU=c&Z|79%5uuoAR!O9+gN@6>%}fMANEI~%bR>v#>G68DB^0pPJd*y!L| zvbf3zB!w#lw;THz{TBc%47^6RazJHdW5HA@x~fI4z)(}-u5^7X%b+Jif0MN3=_t`P zWH5T&_i^Gfn<~%d{S6?zjxt^Xpx&?b-<%n|mKQci^yddQj2A`mg~n`O0pu~wTYOf& zrkoM-7l{xE9LW38!{G1P`O{-vkfL$X{l4p0=M9wq0mW27_GR(*F#rGn07*qoM6N<$ Eg1xB+ZU6uP literal 0 HcmV?d00001 diff --git a/mods/ITEMS/mcl_maps/textures/mcl_maps_map_background.png b/mods/ITEMS/mcl_maps/textures/mcl_maps_map_background.png new file mode 100644 index 0000000000000000000000000000000000000000..9eeb0ea560c4e37763c0f1d68e9d67637d102499 GIT binary patch literal 1565 zcmV+&2IBdNP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw0000R zP)t-s00028hH1Q%bkM7fn{iv~;KS?Ev){m?|NsAp+CqT<0004WQchC(dotZJ_z<1UT{c*_FAA4)VW3xH-{*0!GF>D8Y)h z__HO;#Bhs*-^P3;&dxAhclTvD8H1EdU=$XZ&at0H2!=!(jbA>Q!<|vZ1j>`EhPy(R z8(;t*DDwm^Tyz8A(7@y8t744#Qc|ui*)540=P6t~G~YTm`Jw-ziwT-=mRUxcaN>xl zJTML?eZ*1541p58*_enTw`LBBVlPkgA8pJN4PYg=YsFzvnSx4iy3tq^y#74z6tiVF zitsQrQhk3I$&#Q8Yg>rbHAkAZ3hwXdK&$lCNKzYeeZ_I{UCm zK~BKP+N~tvtC)KH$>?I1Zl&wWqHs((;WX(?AyNMWh68Eon><%VfZ=+6wf_iHZoX;V zL{SsWuA&J1pJB+uE9-{7yu@|fUw}o;lP)IZn`QPROdCvD5=YewpH|c`@5U6lHBPuI z(lQD4!~QVCTPZ#HX3pD6rtrGa#gr$SB?U3A+Eh4$602~sFpnrDhiNmR56vP zwnz-mhP2DIlAJ!q^3bcR3e{94Uih%jyIfktbM|^T3TR@|N%XQ}S1QY@jYU!q6^~T4 zc8Zu7J8KN0F>*f)|9~A!K2T{wy)6(Yo{$Ug` z(kWV}jNnKLb#RyxJ~jMj;FubHjH!KLEK zL!xk&Hy3ELZa$8&kA*giD{eNW zsQ!DWiIJFEH5OHvTZmG|JQa*|63w+B>lc zsf1}ol|@<>m0}9wZA$5JyHmoPB`emHqDK)a;^Vp6VGv^!F_kE;7q>+VfE2L*RyP~<9IaokzVxaag18Y%yT%G_{MD>rbLrj~mvu|RL!nvYFRv8sX3m1O~ zW4>)fR8HxzWu7WuP0abXfZD#4hys9R-9a^Lf9#K3vT9+v`{%oF?v~PT>fgj|7)AN? z`w++l^e|YWsA9zMS19-=5Snn88dsKo5EM;*CWQTx@b**sDbc<#-TC?ce17Kp?o;Z+ zb!%o?JETWSm>t<)1pn;0^VYnG0000bbVXQnWMOn=I%9HWVRU5xGB7eREig4LFfmjy zH99giIyE>eFfuwYFl05haR2}SC3HntbYx+4WjbwdWNBu305UK!Gc7PUEiy7xF*!Oj zGdeOdD=;!TFff0e3Q+(602*{fSaefwW^{L9a%BKeVQFr3E>1;MAa*k@H7+qQF!XYv P00000NkvXXu0mjf)DymE literal 0 HcmV?d00001 diff --git a/settingtypes.txt b/settingtypes.txt index c5968a4c0..78a8122b5 100644 --- a/settingtypes.txt +++ b/settingtypes.txt @@ -150,3 +150,6 @@ basic_pseudobiome_villages (Enables very basic, and experimental "pseudobiome-ba # If enabled, will run an LBM to fix the top 1/2 of double plants in mcimported worlds; defaults to true. fix_doubleplants (Mcimport double plant fixes) bool true + +# Allow players to create Minecraft-like maps. +enable_real_maps (Enable Real Maps) bool true diff --git a/tools/Texture_Converter.py b/tools/Texture_Converter.py index c23bc9fce..820fa9c08 100755 --- a/tools/Texture_Converter.py +++ b/tools/Texture_Converter.py @@ -196,6 +196,11 @@ def convert_textures(): if verbose: print(src_file + " → " + dst_file) + # Convert map background + map_background_file = tex_dir + "/map/map_background.png" + if os.path.isfile(map_background_file): + os.system("convert " + map_background_file + " -interpolate Integer -filter point -resize \"140x140\" " + target_dir("/mods/ITEMS/mcl_maps/textures") + "/mcl_maps_map_background.png") + # Convert armor textures (requires ImageMagick) armor_files = [ [ tex_dir + "/models/armor/leather_layer_1.png", tex_dir + "/models/armor/leather_layer_2.png", target_dir("/mods/ITEMS/mcl_armor/textures"), "mcl_armor_helmet_leather.png", "mcl_armor_chestplate_leather.png", "mcl_armor_leggings_leather.png", "mcl_armor_boots_leather.png" ], diff --git a/tools/create_map_color_file.py b/tools/create_map_color_file.py new file mode 100644 index 000000000..2664c017b --- /dev/null +++ b/tools/create_map_color_file.py @@ -0,0 +1,59 @@ +import sys, json, os +from PIL import Image + +colors = {} +palettes = {} + +for root, directories, files in os.walk(".."): + if root.endswith("/textures"): + for name in files: + try: + img = Image.open(os.path.join(root, name)).convert("RGBA") + pixels = img.load() + + if "palette" in name: + palette = [] + + for y in range(0, img.size[1]): + for x in range(0, img.size[0]): + r, g, b, a = pixels[x, y] + palette.append((r, g, b)) + + palettes[name] = palette + else: + r_total = 0 + g_total = 0 + b_total = 0 + + count = 0 + + for x in range(0, img.size[0]): + for y in range(0, img.size[1]): + r, g, b, a = pixels[x, y] + if a > 0: + r_total += r / 255 * a + g_total += g / 255 * a + b_total += b / 255 * a + count += a / 255 + + average_color = None + + if count > 0: + average_color = (int(r_total / count), int(g_total / count), int(b_total / count)) + else: + average_color = (255, 255, 255) + + colors[name] = average_color + + img.close() + except IOError: + pass + +path = "../mods/ITEMS/mcl_maps/" + +with open(path + "colors.json", "w") as colorfile: + colorfile.write(json.dumps(colors)) + +with open(path + "palettes.json", "w") as palettefile: + palettefile.write(json.dumps(palettes)) + From 5d3e74c8443f1da9835db5568964da6c27add844 Mon Sep 17 00:00:00 2001 From: Elias Fleckenstein Date: Sat, 1 May 2021 17:20:23 +0200 Subject: [PATCH 05/66] Remove useless tga_encoder files --- mods/CORE/tga_encoder/.gitignore | 41 -- mods/CORE/tga_encoder/LICENSE | 674 ------------------------------- 2 files changed, 715 deletions(-) delete mode 100644 mods/CORE/tga_encoder/.gitignore delete mode 100644 mods/CORE/tga_encoder/LICENSE diff --git a/mods/CORE/tga_encoder/.gitignore b/mods/CORE/tga_encoder/.gitignore deleted file mode 100644 index 6fd0a376d..000000000 --- a/mods/CORE/tga_encoder/.gitignore +++ /dev/null @@ -1,41 +0,0 @@ -# Compiled Lua sources -luac.out - -# luarocks build files -*.src.rock -*.zip -*.tar.gz - -# Object files -*.o -*.os -*.ko -*.obj -*.elf - -# Precompiled Headers -*.gch -*.pch - -# Libraries -*.lib -*.a -*.la -*.lo -*.def -*.exp - -# Shared objects (inc. Windows DLLs) -*.dll -*.so -*.so.* -*.dylib - -# Executables -*.exe -*.out -*.app -*.i*86 -*.x86_64 -*.hex - diff --git a/mods/CORE/tga_encoder/LICENSE b/mods/CORE/tga_encoder/LICENSE deleted file mode 100644 index f288702d2..000000000 --- a/mods/CORE/tga_encoder/LICENSE +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. From 1ed6aeca5e2cd70011c5d5cc5f828630b84037fb Mon Sep 17 00:00:00 2001 From: Elias Fleckenstein Date: Sat, 1 May 2021 17:22:48 +0200 Subject: [PATCH 06/66] Remove map_background.png --- mods/ITEMS/mcl_maps/textures/map_background.png | Bin 1710 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 mods/ITEMS/mcl_maps/textures/map_background.png diff --git a/mods/ITEMS/mcl_maps/textures/map_background.png b/mods/ITEMS/mcl_maps/textures/map_background.png deleted file mode 100644 index 8b717704a1beb1f514e723ff148cfff6502c2ae6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1710 zcmV;f22uHmP)N2bPDNB8 zb~7$DE-^4L^m3s900t^aL_t(|UgcXmvfM@t)IEIyhpzG&oHJ#pK;;YA zxeh@KTMJgRr}3M|eTjlCa+kvo8V#T^v;1%z$A|Cva~l8Ymmd%RM1cJD@#n)nU;g;@ z+}eKUgXh^k-p}@5>4e{Y`r+V@-|qncKa2vyjsN=J=i}=?e;%!^jg3CvuHnGp{ro<> zt(;?aAh2vO-ouaCIVS*)hz;ZiOO4NrAz>3(20NTERumFI@ zKfLS@+%+;{hC2TVfEj8JjaxU~?r;0N<>UDMeD3G-`*rOe%z_I5e$WPvjCY`_Er*U^ zfHIa1ia=50{5J%_!(?H=;(dHz-gl37asdK^Ob`q}<1&MGKyeU406cb5+E-rAjwcMj zc%Oh!g$FXg_Pu(^9B`q2$FpwG1eAaQD&|!zN4bELrUKE&7z1P#SOAz9HW>@y z<2!~%o*y&7Rn$e{y$S%xFV28&R;*0im>A!c#w@I!BBz@G?=b!~ z0I*u@fcFF~V*q+BGCnJrS&1}fUz(vy2vi1iJsy=w$N^dXkK}HLF_DPEQn(KQE4vD? zC=r4Z>}q{wyh?bPT(4OQAaZ~bLwChK z=M(P?Pa$;a1E$98jDG@<)$u!w&%}_I!UqE$-hU6zW5s|n7{zQ?;jxFaUVuyC6@d2u zA*ce~e9$R}L?48DsAs&c%L0ag9a0eGv?9f1_g z2Xs^)m$a%3W=imV84yjV2EBkve5yod0N{AO9?mdd%HX&POg&ECHv@P+ATz%5I8J_K zIYk0+c7h$FxcP}ZoOs^B#u=d<&u27`stQhzpA2{a&@p~$YzD%U0Tl>YVvBMIuQTvs z$ub`x8E}`eko6g4ugPlL6-Rz(jX;VdE981V_v8C}fcOcpYE-h_*iV!T<*V zjqGakopIiJqoE4?2=vG~oKU0qUy>jW+%af!4$cEI^Vq|Y$5ock7|P(vD!`&-l7%M# z_=DQ@74z5`>iZ5;@jA?~(MQ;wv2@BL%WX1&mj72PIyOR%9U+z@^J%6{c3_zL# zyd0@|9)Ykci0~e-Hd=vTzsa>hRR!)gp2Oiz24pQT<_sx>d}%CWfXD5w=h1k~0a;w% zEsI?p;-4}v3nSCSwhIO)!AWw9dVvW8LIAStzZhH1A2hnRDhG5Kzf4apw7C z8GM;;dyc&;=S*@)%79D+Nf6Y`4+9Y~h1LeA302X*3IlU8|26+n1tKNb4hLm4gCnNH zm;qf7GP+l6kPI+Xb{{6K4%uAckO7&;s}hK|g$(G(;Lt0bd)h!RfTMA;RyhXm~N??(B45o050vY z0Wf9&ul02nQb;GLs*^FGOY=+#G7BCdzzi70db9{qtsw>s$Uxaqe&~JgKK-SMQwcf) zCNeZ!O)hAU=c&Z|79%5uuoAR!O9+gN@6>%}fMANEI~%bR>v#>G68DB^0pPJd*y!L| zvbf3zB!w#lw;THz{TBc%47^6RazJHdW5HA@x~fI4z)(}-u5^7X%b+Jif0MN3=_t`P zWH5T&_i^Gfn<~%d{S6?zjxt^Xpx&?b-<%n|mKQci^yddQj2A`mg~n`O0pu~wTYOf& zrkoM-7l{xE9LW38!{G1P`O{-vkfL$X{l4p0=M9wq0mW27_GR(*F#rGn07*qoM6N<$ Eg1xB+ZU6uP From e11185638f28ed1b43d0b72cec6b073ba80fe0d5 Mon Sep 17 00:00:00 2001 From: Elias Fleckenstein Date: Sat, 1 May 2021 17:24:07 +0200 Subject: [PATCH 07/66] Remove obsolete 'import sys' from python script --- tools/create_map_color_file.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/create_map_color_file.py b/tools/create_map_color_file.py index 2664c017b..b6486b8e3 100644 --- a/tools/create_map_color_file.py +++ b/tools/create_map_color_file.py @@ -1,4 +1,4 @@ -import sys, json, os +import json, os from PIL import Image colors = {} From 2228b306588c107dc4d88a4212fbf2c6c719f4da Mon Sep 17 00:00:00 2001 From: Elias Fleckenstein Date: Sat, 1 May 2021 17:36:51 +0200 Subject: [PATCH 08/66] Add API to create filled map --- mods/ITEMS/mcl_maps/init.lua | 219 +++++++++++++++++------------------ 1 file changed, 108 insertions(+), 111 deletions(-) diff --git a/mods/ITEMS/mcl_maps/init.lua b/mods/ITEMS/mcl_maps/init.lua index df550f537..43a23f8f7 100644 --- a/mods/ITEMS/mcl_maps/init.lua +++ b/mods/ITEMS/mcl_maps/init.lua @@ -1,3 +1,5 @@ +mcl_maps = {} + local S = minetest.get_translator("mcl_maps") local storage = minetest.get_mod_storage() local modpath = minetest.get_modpath("mcl_maps") @@ -25,127 +27,122 @@ local loaded_maps = {} local c_air = minetest.get_content_id("air") --- Turn empty map into filled map by rightclick -local make_filled_map = function(itemstack, placer, pointed_thing) - local new_map = ItemStack("mcl_maps:filled_map") - if minetest.settings:get_bool("enable_real_maps", true) then - local meta = new_map:get_meta() - local id = storage:get_int("next_id") - storage:set_int("next_id", id + 1) - local texture_file = "mcl_maps_map_texture_" .. id .. ".tga" - local texture_path = map_textures_path .. texture_file - local texture = "[combine:140x140:0,0=mcl_maps_map_background.png:6,6=" .. texture_file - meta:set_int("mcl_maps:id", id) - meta:set_string("mcl_maps:texture", texture) - meta:set_string("mcl_maps:texture_path", texture_path) - tt.reload_itemstack_description(new_map) - creating_maps[texture] = true - local pos = placer:get_pos() - local minp = vector.multiply(vector.floor(vector.divide(pos, 128)), 128) - local maxp = vector.add(minp, vector.new(127, 127, 127)) - minetest.emerge_area(minp, maxp, function(blockpos, action, calls_remaining) - if calls_remaining < 1 then - local vm = minetest.get_voxel_manip() - local emin, emax = vm:read_from_map(minp, maxp) - local data = vm:get_data() - local param2data = vm:get_param2_data() - local area = VoxelArea:new({MinEdge = emin, MaxEdge = emax}) - local pixels = {} - local last_heightmap - for x = 1, 128 do - local map_x = minp.x - 1 + x - local heightmap = {} - for z = 1, 128 do - local map_z = minp.z - 1 + z - local color - for map_y = maxp.y, minp.y, -1 do - local index = area:index(map_x, map_y, map_z) - local c_id = data[index] - - if c_id ~= c_air then - color = color_cache[c_id] - - if color == nil then - local nodename = minetest.get_name_from_content_id(c_id) - local def = minetest.registered_nodes[nodename] - - if def then - local texture - - if def.palette then - texture = def.palette - elseif def.tiles then - texture = def.tiles[1] - - if type(texture) == "table" then - texture = texture.name - end - end - - if texture then - texture = texture:match("([^=^%^]-([^.]+))$"):split("^")[1] - end - - if def.palette then - local palette = palettes[texture] - color = palette and {palette = palette} - else - color = texture_colors[texture] - end +function mcl_maps.create_map(pos) + local itemstack = ItemStack("mcl_maps:filled_map") + local meta = itemstack:get_meta() + local id = storage:get_int("next_id") + storage:set_int("next_id", id + 1) + local texture_file = "mcl_maps_map_texture_" .. id .. ".tga" + local texture_path = map_textures_path .. texture_file + local texture = "[combine:140x140:0,0=mcl_maps_map_background.png:6,6=" .. texture_file + meta:set_int("mcl_maps:id", id) + meta:set_string("mcl_maps:texture", texture) + meta:set_string("mcl_maps:texture_path", texture_path) + tt.reload_itemstack_description(itemstack) + creating_maps[texture] = true + local minp = vector.multiply(vector.floor(vector.divide(pos, 128)), 128) + local maxp = vector.add(minp, vector.new(127, 127, 127)) + minetest.emerge_area(minp, maxp, function(blockpos, action, calls_remaining) + if calls_remaining > 0 then + return + end + local vm = minetest.get_voxel_manip() + local emin, emax = vm:read_from_map(minp, maxp) + local data = vm:get_data() + local param2data = vm:get_param2_data() + local area = VoxelArea:new({MinEdge = emin, MaxEdge = emax}) + local pixels = {} + local last_heightmap + for x = 1, 128 do + local map_x = minp.x - 1 + x + local heightmap = {} + for z = 1, 128 do + local map_z = minp.z - 1 + z + local color + for map_y = maxp.y, minp.y, -1 do + local index = area:index(map_x, map_y, map_z) + local c_id = data[index] + if c_id ~= c_air then + color = color_cache[c_id] + if color == nil then + local nodename = minetest.get_name_from_content_id(c_id) + local def = minetest.registered_nodes[nodename] + if def then + local texture + if def.palette then + texture = def.palette + elseif def.tiles then + texture = def.tiles[1] + if type(texture) == "table" then + texture = texture.name end end - - if color and color.palette then - color = color.palette[param2data[index] + 1] + if texture then + texture = texture:match("([^=^%^]-([^.]+))$"):split("^")[1] + end + if def.palette then + local palette = palettes[texture] + color = palette and {palette = palette} else - color_cache[c_id] = color or false + color = texture_colors[texture] end - - if color and last_heightmap then - local last_height = last_heightmap[z] - if last_height < map_y then - color = { - math.min(255, color[1] + 16), - math.min(255, color[2] + 16), - math.min(255, color[3] + 16), - } - elseif last_height > map_y then - color = { - math.max(0, color[1] - 16), - math.max(0, color[2] - 16), - math.max(0, color[3] - 16), - } - end - end - - height = map_y - break end end - heightmap[z] = height - pixels[z] = pixels[z] or {} - pixels[z][x] = color or {0, 0, 0} + + if color and color.palette then + color = color.palette[param2data[index] + 1] + else + color_cache[c_id] = color or false + end + + if color and last_heightmap then + local last_height = last_heightmap[z] + if last_height < map_y then + color = { + math.min(255, color[1] + 16), + math.min(255, color[2] + 16), + math.min(255, color[3] + 16), + } + elseif last_height > map_y then + color = { + math.max(0, color[1] - 16), + math.max(0, color[2] - 16), + math.max(0, color[3] - 16), + } + end + end + height = map_y + break end - last_heightmap = heightmap end - - tga_encoder.image(pixels):save(texture_path) - - creating_maps[texture] = false + heightmap[z] = height + pixels[z] = pixels[z] or {} + pixels[z][x] = color or {0, 0, 0} end - end) - end - itemstack:take_item() - if itemstack:is_empty() then - return new_map - else - local inv = placer:get_inventory() - if inv:room_for_item("main", new_map) then - inv:add_item("main", new_map) - else - minetest.add_item(placer:get_pos(), new_map) + last_heightmap = heightmap + end + tga_encoder.image(pixels):save(texture_path) + creating_maps[texture] = false + end) + return itemstack +end + +-- Turn empty map into filled map by rightclick +local make_filled_map = function(itemstack, placer, pointed_thing) + if minetest.settings:get_bool("enable_real_maps", true) then + local new_map = mcl_maps.create_map(placer:get_pos()) + itemstack:take_item() + if itemstack:is_empty() then + return new_map + else + local inv = placer:get_inventory() + if inv:room_for_item("main", new_map) then + inv:add_item("main", new_map) + else + minetest.add_item(placer:get_pos(), new_map) + end + return itemstack end - return itemstack end end From 1079ab74d49e4aacd71878c135ef0c52e187649d Mon Sep 17 00:00:00 2001 From: Elias Fleckenstein Date: Sun, 2 May 2021 11:42:16 +0200 Subject: [PATCH 09/66] Stack filled maps that have the same metadata --- mods/ITEMS/mcl_maps/init.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mods/ITEMS/mcl_maps/init.lua b/mods/ITEMS/mcl_maps/init.lua index 43a23f8f7..9dc098b7c 100644 --- a/mods/ITEMS/mcl_maps/init.lua +++ b/mods/ITEMS/mcl_maps/init.lua @@ -164,7 +164,7 @@ minetest.register_craftitem("mcl_maps:filled_map", { _doc_items_usagehelp = S("Hold the map in your hand. This will display a map on your screen."), groups = { tool = 1 }, inventory_image = "mcl_maps_map_filled.png^(mcl_maps_map_filled_markings.png^[colorize:#000000)", - stack_max = 1, + stack_max = 64, }) tt.register_priority_snippet(function(itemstring, _, itemstack) From f22b3fd4576dbf6adac365fdecad7fc9bd28b889 Mon Sep 17 00:00:00 2001 From: Elias Fleckenstein Date: Sun, 2 May 2021 12:23:29 +0200 Subject: [PATCH 10/66] Implement copying maps --- mods/ITEMS/mcl_maps/init.lua | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/mods/ITEMS/mcl_maps/init.lua b/mods/ITEMS/mcl_maps/init.lua index 9dc098b7c..a01077eef 100644 --- a/mods/ITEMS/mcl_maps/init.lua +++ b/mods/ITEMS/mcl_maps/init.lua @@ -185,6 +185,23 @@ minetest.register_craft({ } }) +minetest.register_craft({ + type = "shapeless", + output = "mcl_maps:filled_map 2", + recipe = {"mcl_maps:filled_map", "mcl_maps:empty_map"}, +}) + +minetest.register_on_craft(function(itemstack, player, old_craft_grid, craft_inv) + if itemstack:get_name() == "mcl_maps:filled_map" then + for _, stack in pairs(old_craft_grid) do + if stack:get_name() == "mcl_maps:filled_map" then + itemstack:get_meta():from_table(stack:get_meta():to_table()) + return itemstack + end + end + end +end) + local maps = {} local huds = {} From d9a670dcb81ad8ae13b6dc9225efc4c4be9b2985 Mon Sep 17 00:00:00 2001 From: Elias Fleckenstein Date: Sun, 2 May 2021 12:24:22 +0200 Subject: [PATCH 11/66] Show empty map in creative inv, but don't show filled map there --- mods/ITEMS/mcl_maps/init.lua | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/mods/ITEMS/mcl_maps/init.lua b/mods/ITEMS/mcl_maps/init.lua index a01077eef..357c0f48e 100644 --- a/mods/ITEMS/mcl_maps/init.lua +++ b/mods/ITEMS/mcl_maps/init.lua @@ -151,7 +151,6 @@ minetest.register_craftitem("mcl_maps:empty_map", { _doc_items_longdesc = S("Empty maps are not useful as maps, but they can be stacked and turned to maps which can be used."), _doc_items_usagehelp = S("Rightclick to create a filled map (which can't be stacked anymore)."), inventory_image = "mcl_maps_map_empty.png", - groups = { not_in_creative_inventory = 1 }, on_place = make_filled_map, on_secondary_use = make_filled_map, stack_max = 64, @@ -162,7 +161,7 @@ minetest.register_craftitem("mcl_maps:filled_map", { _tt_help = S("Shows a map image."), _doc_items_longdesc = S("When created, the map saves the nearby area as an image that can be viewed any time by holding the map."), _doc_items_usagehelp = S("Hold the map in your hand. This will display a map on your screen."), - groups = { tool = 1 }, + groups = {tool = 1, not_in_creative_inventory = 1}, inventory_image = "mcl_maps_map_filled.png^(mcl_maps_map_filled_markings.png^[colorize:#000000)", stack_max = 64, }) From ca9cd8cbe0fff0ab40121d6067fb075559b12860 Mon Sep 17 00:00:00 2001 From: Elias Fleckenstein Date: Sun, 2 May 2021 12:55:04 +0200 Subject: [PATCH 12/66] Use PNG instead of TGA --- mods/CORE/tga_encoder/README.md | 4 - mods/CORE/tga_encoder/init.lua | 109 ----------------- mods/CORE/tga_encoder/mod.conf | 3 - mods/ITEMS/mcl_maps/bit32.lua | 98 +++++++++++++++ mods/ITEMS/mcl_maps/init.lua | 18 ++- mods/ITEMS/mcl_maps/mod.conf | 2 +- mods/ITEMS/mcl_maps/pngencoder.lua | 190 +++++++++++++++++++++++++++++ 7 files changed, 305 insertions(+), 119 deletions(-) delete mode 100644 mods/CORE/tga_encoder/README.md delete mode 100644 mods/CORE/tga_encoder/init.lua delete mode 100644 mods/CORE/tga_encoder/mod.conf create mode 100644 mods/ITEMS/mcl_maps/bit32.lua create mode 100644 mods/ITEMS/mcl_maps/pngencoder.lua diff --git a/mods/CORE/tga_encoder/README.md b/mods/CORE/tga_encoder/README.md deleted file mode 100644 index 9b3293dda..000000000 --- a/mods/CORE/tga_encoder/README.md +++ /dev/null @@ -1,4 +0,0 @@ -# tga_encoder -A TGA Encoder written in Lua without the use of external Libraries. - -May be used as a Minetest mod. diff --git a/mods/CORE/tga_encoder/init.lua b/mods/CORE/tga_encoder/init.lua deleted file mode 100644 index 45b9e85a2..000000000 --- a/mods/CORE/tga_encoder/init.lua +++ /dev/null @@ -1,109 +0,0 @@ -tga_encoder = {} - -local LUA_ARGS_LIMIT = 1000 - -local image = setmetatable({}, { - __call = function(self, ...) - local t = setmetatable({}, {__index = self}) - t:constructor(...) - return t - end, -}) - -function image:constructor(pixels) - self.bytes = {} - self.chunks = {self.bytes} - self.pixels = pixels - self.width = #pixels[1] - self.height = #pixels - - self:encode() -end - -function image:insert(byte) - table.insert(self.bytes, byte) - if #self.bytes == LUA_ARGS_LIMIT then - self.bytes = {} - table.insert(self.chunks, self.bytes) - end -end - -function image:littleendian(size, value) - for i = 1, size do - local byte = value % 256 - value = value - byte - value = value / 256 - self:insert(byte) - end -end - -function image:encode_colormap_spec() - -- first entry index - self:littleendian(2, 0) - -- number of entries - self:littleendian(2, 0) - -- number of bits per pixel - self:insert(0) -end - -function image:encode_image_spec() - -- X- and Y- origin - self:littleendian(2, 0) - self:littleendian(2, 0) - -- width and height - self:littleendian(2, self.width) - self:littleendian(2, self.height) - -- pixel depth - self:insert(24) - -- image descriptor - self:insert(0) -end - -function image:encode_header() - -- id length - self:insert(0) -- no image id info - -- color map type - self:insert(0) -- no color map - -- image type - self:insert(2) -- uncompressed true-color image - -- color map specification - self:encode_colormap_spec() - -- image specification - self:encode_image_spec() -end - -function image:encode_data() - for _, row in ipairs(self.pixels) do - for _, pixel in ipairs(row) do - self:insert(pixel[3]) - self:insert(pixel[2]) - self:insert(pixel[1]) - end - end -end - -function image:encode() - -- encode header - self:encode_header() - -- no color map and image id data - -- encode data - self:encode_data() - -- no extension area -end - -function image:get_data() - local data = "" - for _, bytes in ipairs(self.chunks) do - data = data .. string.char(unpack(bytes)) - end - return data .. string.char(0, 0, 0, 0) .. string.char(0, 0, 0, 0) .. "TRUEVISION-XFILE." .. string.char(0) -end - -function image:save(filename) - self.data = self.data or self:get_data() - local f = assert(io.open(filename, "w")) - f:write(self.data) - f:close() -end - -tga_encoder.image = image diff --git a/mods/CORE/tga_encoder/mod.conf b/mods/CORE/tga_encoder/mod.conf deleted file mode 100644 index e4bfac898..000000000 --- a/mods/CORE/tga_encoder/mod.conf +++ /dev/null @@ -1,3 +0,0 @@ -name = tga_encoder -author = Fleckenstein -description = A TGA Encoder written in Lua without the use of external Libraries. diff --git a/mods/ITEMS/mcl_maps/bit32.lua b/mods/ITEMS/mcl_maps/bit32.lua new file mode 100644 index 000000000..7f86d8626 --- /dev/null +++ b/mods/ITEMS/mcl_maps/bit32.lua @@ -0,0 +1,98 @@ +bit32 = {} + +local N = 32 +local P = 2^N + +function bit32.bnot(x) + x = x % P + return P - 1 - x +end + +function bit32.band(x, y) + -- Common usecases, they deserve to be optimized + if y == 0xff then return x % 0x100 end + if y == 0xffff then return x % 0x10000 end + if y == 0xffffffff then return x % 0x100000000 end + + x, y = x % P, y % P + local r = 0 + local p = 1 + for i = 1, N do + local a, b = x % 2, y % 2 + x, y = math.floor(x / 2), math.floor(y / 2) + if a + b == 2 then + r = r + p + end + p = 2 * p + end + return r +end + +function bit32.bor(x, y) + -- Common usecases, they deserve to be optimized + if y == 0xff then return x - (x%0x100) + 0xff end + if y == 0xffff then return x - (x%0x10000) + 0xffff end + if y == 0xffffffff then return 0xffffffff end + + x, y = x % P, y % P + local r = 0 + local p = 1 + for i = 1, N do + local a, b = x % 2, y % 2 + x, y = math.floor(x / 2), math.floor(y / 2) + if a + b >= 1 then + r = r + p + end + p = 2 * p + end + return r +end + +function bit32.bxor(x, y) + x, y = x % P, y % P + local r = 0 + local p = 1 + for i = 1, N do + local a, b = x%2, y%2 + x, y = math.floor(x/2), math.floor(y/2) + if a + b == 1 then + r = r + p + end + p = 2 * p + end + return r +end + +function bit32.lshift(x, s_amount) + if math.abs(s_amount) >= N then return 0 end + x = x % P + if s_amount < 0 then + return math.floor(x * (2 ^ s_amount)) + else + return (x * (2 ^ s_amount)) % P + end +end + +function bit32.rshift(x, s_amount) + if math.abs(s_amount) >= N then return 0 end + x = x % P + if s_amount > 0 then + return math.floor(x * (2 ^ - s_amount)) + else + return (x * (2 ^ -s_amount)) % P + end +end + +function bit32.arshift(x, s_amount) + if math.abs(s_amount) >= N then return 0 end + x = x % P + if s_amount > 0 then + local add = 0 + if x >= P/2 then + add = P - 2 ^ (N - s_amount) + end + return math.floor(x * (2 ^ -s_amount)) + add + else + return (x * (2 ^ -s_amount)) % P + end +end diff --git a/mods/ITEMS/mcl_maps/init.lua b/mods/ITEMS/mcl_maps/init.lua index 357c0f48e..73fdb7b34 100644 --- a/mods/ITEMS/mcl_maps/init.lua +++ b/mods/ITEMS/mcl_maps/init.lua @@ -7,6 +7,11 @@ local worldpath = minetest.get_worldpath() local map_textures_path = worldpath .. "/mcl_maps/" local last_finished_id = storage:get_int("next_id") - 1 +dofile(modpath .. "/bit32.lua") -- taken from http://gitea.minetest.one/minetest-mods/turtle/src/branch/master/bit32.lua + +bit = bit32 +pngencoder = dofile(modpath .. "/pngencoder.lua") -- taken from https://github.com/wyozi/lua-pngencoder/blob/master/pngencoder.lua + minetest.mkdir(map_textures_path) local function load_json_file(name) @@ -32,7 +37,7 @@ function mcl_maps.create_map(pos) local meta = itemstack:get_meta() local id = storage:get_int("next_id") storage:set_int("next_id", id + 1) - local texture_file = "mcl_maps_map_texture_" .. id .. ".tga" + local texture_file = "mcl_maps_map_texture_" .. id .. ".png" local texture_path = map_textures_path .. texture_file local texture = "[combine:140x140:0,0=mcl_maps_map_background.png:6,6=" .. texture_file meta:set_int("mcl_maps:id", id) @@ -121,7 +126,16 @@ function mcl_maps.create_map(pos) end last_heightmap = heightmap end - tga_encoder.image(pixels):save(texture_path) + local image = pngencoder(128, 128, "rgb") + for _, row in ipairs(pixels) do + for _, pixel in ipairs(row) do + image:write(pixel) + end + end + assert(image.done) + local f = assert(io.open(texture_path, "w")) + f:write(table.concat(image.output)) + f:close() creating_maps[texture] = false end) return itemstack diff --git a/mods/ITEMS/mcl_maps/mod.conf b/mods/ITEMS/mcl_maps/mod.conf index 82c9e61f0..617c0f1a3 100644 --- a/mods/ITEMS/mcl_maps/mod.conf +++ b/mods/ITEMS/mcl_maps/mod.conf @@ -1,2 +1,2 @@ name = mcl_maps -depends = mcl_core, mcl_flowers, tga_encoder, tt, mcl_colors +depends = mcl_core, mcl_flowers, tt, mcl_colors diff --git a/mods/ITEMS/mcl_maps/pngencoder.lua b/mods/ITEMS/mcl_maps/pngencoder.lua new file mode 100644 index 000000000..015aab542 --- /dev/null +++ b/mods/ITEMS/mcl_maps/pngencoder.lua @@ -0,0 +1,190 @@ +local Png = {} +Png.__index = Png + +local DEFLATE_MAX_BLOCK_SIZE = 65535 + +local function putBigUint32(val, tbl, index) + for i=0,3 do + tbl[index + i] = bit.band(bit.rshift(val, (3 - i) * 8), 0xFF) + end +end + +function Png:writeBytes(data, index, len) + index = index or 1 + len = len or #data + for i=index,index+len-1 do + table.insert(self.output, string.char(data[i])) + end +end + +function Png:write(pixels) + local count = #pixels -- Byte count + local pixelPointer = 1 + while count > 0 do + if self.positionY >= self.height then + error("All image pixels already written") + end + + if self.deflateFilled == 0 then -- Start DEFLATE block + local size = DEFLATE_MAX_BLOCK_SIZE; + if (self.uncompRemain < size) then + size = self.uncompRemain + end + local header = { -- 5 bytes long + bit.band((self.uncompRemain <= DEFLATE_MAX_BLOCK_SIZE and 1 or 0), 0xFF), + bit.band(bit.rshift(size, 0), 0xFF), + bit.band(bit.rshift(size, 8), 0xFF), + bit.band(bit.bxor(bit.rshift(size, 0), 0xFF), 0xFF), + bit.band(bit.bxor(bit.rshift(size, 8), 0xFF), 0xFF), + } + self:writeBytes(header) + self:crc32(header, 1, #header) + end + assert(self.positionX < self.lineSize and self.deflateFilled < DEFLATE_MAX_BLOCK_SIZE); + + if (self.positionX == 0) then -- Beginning of line - write filter method byte + local b = {0} + self:writeBytes(b) + self:crc32(b, 1, 1) + self:adler32(b, 1, 1) + self.positionX = self.positionX + 1 + self.uncompRemain = self.uncompRemain - 1 + self.deflateFilled = self.deflateFilled + 1 + else -- Write some pixel bytes for current line + local n = DEFLATE_MAX_BLOCK_SIZE - self.deflateFilled; + if (self.lineSize - self.positionX < n) then + n = self.lineSize - self.positionX + end + if (count < n) then + n = count; + end + assert(n > 0); + + self:writeBytes(pixels, pixelPointer, n) + + -- Update checksums + self:crc32(pixels, pixelPointer, n); + self:adler32(pixels, pixelPointer, n); + + -- Increment positions + count = count - n; + pixelPointer = pixelPointer + n; + self.positionX = self.positionX + n; + self.uncompRemain = self.uncompRemain - n; + self.deflateFilled = self.deflateFilled + n; + end + + if (self.deflateFilled >= DEFLATE_MAX_BLOCK_SIZE) then + self.deflateFilled = 0; -- End current block + end + + if (self.positionX == self.lineSize) then -- Increment line + self.positionX = 0; + self.positionY = self.positionY + 1; + if (self.positionY == self.height) then -- Reached end of pixels + local footer = { -- 20 bytes long + 0, 0, 0, 0, -- DEFLATE Adler-32 placeholder + 0, 0, 0, 0, -- IDAT CRC-32 placeholder + -- IEND chunk + 0x00, 0x00, 0x00, 0x00, + 0x49, 0x45, 0x4E, 0x44, + 0xAE, 0x42, 0x60, 0x82, + } + putBigUint32(self.adler, footer, 1) + self:crc32(footer, 1, 4) + putBigUint32(self.crc, footer, 5) + self:writeBytes(footer) + self.done = true + end + end + end +end + +function Png:crc32(data, index, len) + self.crc = bit.bnot(self.crc) + for i=index,index+len-1 do + local byte = data[i] + for j=0,7 do -- Inefficient bitwise implementation, instead of table-based + local nbit = bit.band(bit.bxor(self.crc, bit.rshift(byte, j)), 1); + self.crc = bit.bxor(bit.rshift(self.crc, 1), bit.band((-nbit), 0xEDB88320)); + end + end + self.crc = bit.bnot(self.crc) +end +function Png:adler32(data, index, len) + local s1 = bit.band(self.adler, 0xFFFF) + local s2 = bit.rshift(self.adler, 16) + for i=index,index+len-1 do + s1 = (s1 + data[i]) % 65521 + s2 = (s2 + s1) % 65521 + end + self.adler = bit.bor(bit.lshift(s2, 16), s1) +end + +local function begin(width, height, colorMode) + -- Default to rgb + colorMode = colorMode or "rgb" + + -- Determine bytes per pixel and the PNG internal color type + local bytesPerPixel, colorType + if colorMode == "rgb" then + bytesPerPixel, colorType = 3, 2 + elseif colorMode == "rgba" then + bytesPerPixel, colorType = 4, 6 + else + error("Invalid colorMode") + end + + local state = setmetatable({ width = width, height = height, done = false, output = {} }, Png) + + -- Compute and check data siezs + state.lineSize = width * bytesPerPixel + 1 + -- TODO: check if lineSize too big + + state.uncompRemain = state.lineSize * height + + local numBlocks = math.ceil(state.uncompRemain / DEFLATE_MAX_BLOCK_SIZE) + + -- 5 bytes per DEFLATE uncompressed block header, 2 bytes for zlib header, 4 bytes for zlib Adler-32 footer + local idatSize = numBlocks * 5 + 6 + idatSize = idatSize + state.uncompRemain; + + -- TODO check if idatSize too big + + local header = { -- 43 bytes long + -- PNG header + 0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A, + -- IHDR chunk + 0x00, 0x00, 0x00, 0x0D, + 0x49, 0x48, 0x44, 0x52, + 0, 0, 0, 0, -- 'width' placeholder + 0, 0, 0, 0, -- 'height' placeholder + 0x08, colorType, 0x00, 0x00, 0x00, + 0, 0, 0, 0, -- IHDR CRC-32 placeholder + -- IDAT chunk + 0, 0, 0, 0, -- 'idatSize' placeholder + 0x49, 0x44, 0x41, 0x54, + -- DEFLATE data + 0x08, 0x1D, + } + putBigUint32(width, header, 17) + putBigUint32(height, header, 21) + putBigUint32(idatSize, header, 34) + + state.crc = 0 + state:crc32(header, 13, 17) + putBigUint32(state.crc, header, 30) + state:writeBytes(header) + + state.crc = 0 + state:crc32(header, 38, 6); -- 0xD7245B6B + state.adler = 1 + + state.positionX = 0 + state.positionY = 0 + state.deflateFilled = 0 + + return state +end + +return begin From bd74dbe3211909cc326b8d5f82d5f86927ade353 Mon Sep 17 00:00:00 2001 From: Elias Fleckenstein Date: Sun, 2 May 2021 13:03:18 +0200 Subject: [PATCH 13/66] Revert "Use PNG instead of TGA" This reverts commit ca9cd8cbe0fff0ab40121d6067fb075559b12860. The TGA was faster and produced smaller files. --- mods/CORE/tga_encoder/README.md | 4 + mods/CORE/tga_encoder/init.lua | 109 +++++++++++++++++ mods/CORE/tga_encoder/mod.conf | 3 + mods/ITEMS/mcl_maps/bit32.lua | 98 --------------- mods/ITEMS/mcl_maps/init.lua | 18 +-- mods/ITEMS/mcl_maps/mod.conf | 2 +- mods/ITEMS/mcl_maps/pngencoder.lua | 190 ----------------------------- 7 files changed, 119 insertions(+), 305 deletions(-) create mode 100644 mods/CORE/tga_encoder/README.md create mode 100644 mods/CORE/tga_encoder/init.lua create mode 100644 mods/CORE/tga_encoder/mod.conf delete mode 100644 mods/ITEMS/mcl_maps/bit32.lua delete mode 100644 mods/ITEMS/mcl_maps/pngencoder.lua diff --git a/mods/CORE/tga_encoder/README.md b/mods/CORE/tga_encoder/README.md new file mode 100644 index 000000000..9b3293dda --- /dev/null +++ b/mods/CORE/tga_encoder/README.md @@ -0,0 +1,4 @@ +# tga_encoder +A TGA Encoder written in Lua without the use of external Libraries. + +May be used as a Minetest mod. diff --git a/mods/CORE/tga_encoder/init.lua b/mods/CORE/tga_encoder/init.lua new file mode 100644 index 000000000..45b9e85a2 --- /dev/null +++ b/mods/CORE/tga_encoder/init.lua @@ -0,0 +1,109 @@ +tga_encoder = {} + +local LUA_ARGS_LIMIT = 1000 + +local image = setmetatable({}, { + __call = function(self, ...) + local t = setmetatable({}, {__index = self}) + t:constructor(...) + return t + end, +}) + +function image:constructor(pixels) + self.bytes = {} + self.chunks = {self.bytes} + self.pixels = pixels + self.width = #pixels[1] + self.height = #pixels + + self:encode() +end + +function image:insert(byte) + table.insert(self.bytes, byte) + if #self.bytes == LUA_ARGS_LIMIT then + self.bytes = {} + table.insert(self.chunks, self.bytes) + end +end + +function image:littleendian(size, value) + for i = 1, size do + local byte = value % 256 + value = value - byte + value = value / 256 + self:insert(byte) + end +end + +function image:encode_colormap_spec() + -- first entry index + self:littleendian(2, 0) + -- number of entries + self:littleendian(2, 0) + -- number of bits per pixel + self:insert(0) +end + +function image:encode_image_spec() + -- X- and Y- origin + self:littleendian(2, 0) + self:littleendian(2, 0) + -- width and height + self:littleendian(2, self.width) + self:littleendian(2, self.height) + -- pixel depth + self:insert(24) + -- image descriptor + self:insert(0) +end + +function image:encode_header() + -- id length + self:insert(0) -- no image id info + -- color map type + self:insert(0) -- no color map + -- image type + self:insert(2) -- uncompressed true-color image + -- color map specification + self:encode_colormap_spec() + -- image specification + self:encode_image_spec() +end + +function image:encode_data() + for _, row in ipairs(self.pixels) do + for _, pixel in ipairs(row) do + self:insert(pixel[3]) + self:insert(pixel[2]) + self:insert(pixel[1]) + end + end +end + +function image:encode() + -- encode header + self:encode_header() + -- no color map and image id data + -- encode data + self:encode_data() + -- no extension area +end + +function image:get_data() + local data = "" + for _, bytes in ipairs(self.chunks) do + data = data .. string.char(unpack(bytes)) + end + return data .. string.char(0, 0, 0, 0) .. string.char(0, 0, 0, 0) .. "TRUEVISION-XFILE." .. string.char(0) +end + +function image:save(filename) + self.data = self.data or self:get_data() + local f = assert(io.open(filename, "w")) + f:write(self.data) + f:close() +end + +tga_encoder.image = image diff --git a/mods/CORE/tga_encoder/mod.conf b/mods/CORE/tga_encoder/mod.conf new file mode 100644 index 000000000..e4bfac898 --- /dev/null +++ b/mods/CORE/tga_encoder/mod.conf @@ -0,0 +1,3 @@ +name = tga_encoder +author = Fleckenstein +description = A TGA Encoder written in Lua without the use of external Libraries. diff --git a/mods/ITEMS/mcl_maps/bit32.lua b/mods/ITEMS/mcl_maps/bit32.lua deleted file mode 100644 index 7f86d8626..000000000 --- a/mods/ITEMS/mcl_maps/bit32.lua +++ /dev/null @@ -1,98 +0,0 @@ -bit32 = {} - -local N = 32 -local P = 2^N - -function bit32.bnot(x) - x = x % P - return P - 1 - x -end - -function bit32.band(x, y) - -- Common usecases, they deserve to be optimized - if y == 0xff then return x % 0x100 end - if y == 0xffff then return x % 0x10000 end - if y == 0xffffffff then return x % 0x100000000 end - - x, y = x % P, y % P - local r = 0 - local p = 1 - for i = 1, N do - local a, b = x % 2, y % 2 - x, y = math.floor(x / 2), math.floor(y / 2) - if a + b == 2 then - r = r + p - end - p = 2 * p - end - return r -end - -function bit32.bor(x, y) - -- Common usecases, they deserve to be optimized - if y == 0xff then return x - (x%0x100) + 0xff end - if y == 0xffff then return x - (x%0x10000) + 0xffff end - if y == 0xffffffff then return 0xffffffff end - - x, y = x % P, y % P - local r = 0 - local p = 1 - for i = 1, N do - local a, b = x % 2, y % 2 - x, y = math.floor(x / 2), math.floor(y / 2) - if a + b >= 1 then - r = r + p - end - p = 2 * p - end - return r -end - -function bit32.bxor(x, y) - x, y = x % P, y % P - local r = 0 - local p = 1 - for i = 1, N do - local a, b = x%2, y%2 - x, y = math.floor(x/2), math.floor(y/2) - if a + b == 1 then - r = r + p - end - p = 2 * p - end - return r -end - -function bit32.lshift(x, s_amount) - if math.abs(s_amount) >= N then return 0 end - x = x % P - if s_amount < 0 then - return math.floor(x * (2 ^ s_amount)) - else - return (x * (2 ^ s_amount)) % P - end -end - -function bit32.rshift(x, s_amount) - if math.abs(s_amount) >= N then return 0 end - x = x % P - if s_amount > 0 then - return math.floor(x * (2 ^ - s_amount)) - else - return (x * (2 ^ -s_amount)) % P - end -end - -function bit32.arshift(x, s_amount) - if math.abs(s_amount) >= N then return 0 end - x = x % P - if s_amount > 0 then - local add = 0 - if x >= P/2 then - add = P - 2 ^ (N - s_amount) - end - return math.floor(x * (2 ^ -s_amount)) + add - else - return (x * (2 ^ -s_amount)) % P - end -end diff --git a/mods/ITEMS/mcl_maps/init.lua b/mods/ITEMS/mcl_maps/init.lua index 73fdb7b34..357c0f48e 100644 --- a/mods/ITEMS/mcl_maps/init.lua +++ b/mods/ITEMS/mcl_maps/init.lua @@ -7,11 +7,6 @@ local worldpath = minetest.get_worldpath() local map_textures_path = worldpath .. "/mcl_maps/" local last_finished_id = storage:get_int("next_id") - 1 -dofile(modpath .. "/bit32.lua") -- taken from http://gitea.minetest.one/minetest-mods/turtle/src/branch/master/bit32.lua - -bit = bit32 -pngencoder = dofile(modpath .. "/pngencoder.lua") -- taken from https://github.com/wyozi/lua-pngencoder/blob/master/pngencoder.lua - minetest.mkdir(map_textures_path) local function load_json_file(name) @@ -37,7 +32,7 @@ function mcl_maps.create_map(pos) local meta = itemstack:get_meta() local id = storage:get_int("next_id") storage:set_int("next_id", id + 1) - local texture_file = "mcl_maps_map_texture_" .. id .. ".png" + local texture_file = "mcl_maps_map_texture_" .. id .. ".tga" local texture_path = map_textures_path .. texture_file local texture = "[combine:140x140:0,0=mcl_maps_map_background.png:6,6=" .. texture_file meta:set_int("mcl_maps:id", id) @@ -126,16 +121,7 @@ function mcl_maps.create_map(pos) end last_heightmap = heightmap end - local image = pngencoder(128, 128, "rgb") - for _, row in ipairs(pixels) do - for _, pixel in ipairs(row) do - image:write(pixel) - end - end - assert(image.done) - local f = assert(io.open(texture_path, "w")) - f:write(table.concat(image.output)) - f:close() + tga_encoder.image(pixels):save(texture_path) creating_maps[texture] = false end) return itemstack diff --git a/mods/ITEMS/mcl_maps/mod.conf b/mods/ITEMS/mcl_maps/mod.conf index 617c0f1a3..82c9e61f0 100644 --- a/mods/ITEMS/mcl_maps/mod.conf +++ b/mods/ITEMS/mcl_maps/mod.conf @@ -1,2 +1,2 @@ name = mcl_maps -depends = mcl_core, mcl_flowers, tt, mcl_colors +depends = mcl_core, mcl_flowers, tga_encoder, tt, mcl_colors diff --git a/mods/ITEMS/mcl_maps/pngencoder.lua b/mods/ITEMS/mcl_maps/pngencoder.lua deleted file mode 100644 index 015aab542..000000000 --- a/mods/ITEMS/mcl_maps/pngencoder.lua +++ /dev/null @@ -1,190 +0,0 @@ -local Png = {} -Png.__index = Png - -local DEFLATE_MAX_BLOCK_SIZE = 65535 - -local function putBigUint32(val, tbl, index) - for i=0,3 do - tbl[index + i] = bit.band(bit.rshift(val, (3 - i) * 8), 0xFF) - end -end - -function Png:writeBytes(data, index, len) - index = index or 1 - len = len or #data - for i=index,index+len-1 do - table.insert(self.output, string.char(data[i])) - end -end - -function Png:write(pixels) - local count = #pixels -- Byte count - local pixelPointer = 1 - while count > 0 do - if self.positionY >= self.height then - error("All image pixels already written") - end - - if self.deflateFilled == 0 then -- Start DEFLATE block - local size = DEFLATE_MAX_BLOCK_SIZE; - if (self.uncompRemain < size) then - size = self.uncompRemain - end - local header = { -- 5 bytes long - bit.band((self.uncompRemain <= DEFLATE_MAX_BLOCK_SIZE and 1 or 0), 0xFF), - bit.band(bit.rshift(size, 0), 0xFF), - bit.band(bit.rshift(size, 8), 0xFF), - bit.band(bit.bxor(bit.rshift(size, 0), 0xFF), 0xFF), - bit.band(bit.bxor(bit.rshift(size, 8), 0xFF), 0xFF), - } - self:writeBytes(header) - self:crc32(header, 1, #header) - end - assert(self.positionX < self.lineSize and self.deflateFilled < DEFLATE_MAX_BLOCK_SIZE); - - if (self.positionX == 0) then -- Beginning of line - write filter method byte - local b = {0} - self:writeBytes(b) - self:crc32(b, 1, 1) - self:adler32(b, 1, 1) - self.positionX = self.positionX + 1 - self.uncompRemain = self.uncompRemain - 1 - self.deflateFilled = self.deflateFilled + 1 - else -- Write some pixel bytes for current line - local n = DEFLATE_MAX_BLOCK_SIZE - self.deflateFilled; - if (self.lineSize - self.positionX < n) then - n = self.lineSize - self.positionX - end - if (count < n) then - n = count; - end - assert(n > 0); - - self:writeBytes(pixels, pixelPointer, n) - - -- Update checksums - self:crc32(pixels, pixelPointer, n); - self:adler32(pixels, pixelPointer, n); - - -- Increment positions - count = count - n; - pixelPointer = pixelPointer + n; - self.positionX = self.positionX + n; - self.uncompRemain = self.uncompRemain - n; - self.deflateFilled = self.deflateFilled + n; - end - - if (self.deflateFilled >= DEFLATE_MAX_BLOCK_SIZE) then - self.deflateFilled = 0; -- End current block - end - - if (self.positionX == self.lineSize) then -- Increment line - self.positionX = 0; - self.positionY = self.positionY + 1; - if (self.positionY == self.height) then -- Reached end of pixels - local footer = { -- 20 bytes long - 0, 0, 0, 0, -- DEFLATE Adler-32 placeholder - 0, 0, 0, 0, -- IDAT CRC-32 placeholder - -- IEND chunk - 0x00, 0x00, 0x00, 0x00, - 0x49, 0x45, 0x4E, 0x44, - 0xAE, 0x42, 0x60, 0x82, - } - putBigUint32(self.adler, footer, 1) - self:crc32(footer, 1, 4) - putBigUint32(self.crc, footer, 5) - self:writeBytes(footer) - self.done = true - end - end - end -end - -function Png:crc32(data, index, len) - self.crc = bit.bnot(self.crc) - for i=index,index+len-1 do - local byte = data[i] - for j=0,7 do -- Inefficient bitwise implementation, instead of table-based - local nbit = bit.band(bit.bxor(self.crc, bit.rshift(byte, j)), 1); - self.crc = bit.bxor(bit.rshift(self.crc, 1), bit.band((-nbit), 0xEDB88320)); - end - end - self.crc = bit.bnot(self.crc) -end -function Png:adler32(data, index, len) - local s1 = bit.band(self.adler, 0xFFFF) - local s2 = bit.rshift(self.adler, 16) - for i=index,index+len-1 do - s1 = (s1 + data[i]) % 65521 - s2 = (s2 + s1) % 65521 - end - self.adler = bit.bor(bit.lshift(s2, 16), s1) -end - -local function begin(width, height, colorMode) - -- Default to rgb - colorMode = colorMode or "rgb" - - -- Determine bytes per pixel and the PNG internal color type - local bytesPerPixel, colorType - if colorMode == "rgb" then - bytesPerPixel, colorType = 3, 2 - elseif colorMode == "rgba" then - bytesPerPixel, colorType = 4, 6 - else - error("Invalid colorMode") - end - - local state = setmetatable({ width = width, height = height, done = false, output = {} }, Png) - - -- Compute and check data siezs - state.lineSize = width * bytesPerPixel + 1 - -- TODO: check if lineSize too big - - state.uncompRemain = state.lineSize * height - - local numBlocks = math.ceil(state.uncompRemain / DEFLATE_MAX_BLOCK_SIZE) - - -- 5 bytes per DEFLATE uncompressed block header, 2 bytes for zlib header, 4 bytes for zlib Adler-32 footer - local idatSize = numBlocks * 5 + 6 - idatSize = idatSize + state.uncompRemain; - - -- TODO check if idatSize too big - - local header = { -- 43 bytes long - -- PNG header - 0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A, - -- IHDR chunk - 0x00, 0x00, 0x00, 0x0D, - 0x49, 0x48, 0x44, 0x52, - 0, 0, 0, 0, -- 'width' placeholder - 0, 0, 0, 0, -- 'height' placeholder - 0x08, colorType, 0x00, 0x00, 0x00, - 0, 0, 0, 0, -- IHDR CRC-32 placeholder - -- IDAT chunk - 0, 0, 0, 0, -- 'idatSize' placeholder - 0x49, 0x44, 0x41, 0x54, - -- DEFLATE data - 0x08, 0x1D, - } - putBigUint32(width, header, 17) - putBigUint32(height, header, 21) - putBigUint32(idatSize, header, 34) - - state.crc = 0 - state:crc32(header, 13, 17) - putBigUint32(state.crc, header, 30) - state:writeBytes(header) - - state.crc = 0 - state:crc32(header, 38, 6); -- 0xD7245B6B - state.adler = 1 - - state.positionX = 0 - state.positionY = 0 - state.deflateFilled = 0 - - return state -end - -return begin From 9a3ae17564bc04cb1313760ac49613ab700afadd Mon Sep 17 00:00:00 2001 From: Elias Fleckenstein Date: Sun, 2 May 2021 16:04:48 +0200 Subject: [PATCH 14/66] Make maps show their image when in itemframes --- mods/ITEMS/mcl_itemframes/init.lua | 63 ++++++++++++++-------- mods/ITEMS/mcl_itemframes/mod.conf | 2 +- mods/ITEMS/mcl_maps/init.lua | 87 ++++++++++++++---------------- 3 files changed, 81 insertions(+), 71 deletions(-) diff --git a/mods/ITEMS/mcl_itemframes/init.lua b/mods/ITEMS/mcl_itemframes/init.lua index 073933fcf..4d81e76c3 100644 --- a/mods/ITEMS/mcl_itemframes/init.lua +++ b/mods/ITEMS/mcl_itemframes/init.lua @@ -53,6 +53,24 @@ minetest.register_entity("mcl_itemframes:item",{ end, }) +minetest.register_entity("mcl_itemframes:map", { + initial_properties = { + visual = "upright_sprite", + visual_size = {x = 1, y = 1}, + pointable = false, + physical = false, + collide_with_objects = false, + textures = {"blank.png"}, + }, + on_activate = function(self, staticdata) + self.id = staticdata + self.object:set_properties({textures = {mcl_maps.load_map(self.id)}}) + end, + get_staticdata = function(self) + return self.id + end, +}) + local facedir = {} facedir[0] = {x=0,y=0,z=1} @@ -61,13 +79,10 @@ facedir[2] = {x=0,y=0,z=-1} facedir[3] = {x=-1,y=0,z=0} local remove_item_entity = function(pos, node) - local objs = nil if node.name == "mcl_itemframes:item_frame" then - objs = minetest.get_objects_inside_radius(pos, .5) - end - if objs then - for _, obj in ipairs(objs) do - if obj and obj:get_luaentity() and obj:get_luaentity().name == "mcl_itemframes:item" then + for _, obj in pairs(minetest.get_objects_inside_radius(pos, 0.5)) do + local entity = obj:get_luaentity() + if entity and (entity.name == "mcl_itemframes:item" or entity.name == "mcl_itemframes:map") then obj:remove() end end @@ -89,25 +104,27 @@ local update_item_entity = function(pos, node, param2) pos.y = pos.y + posad.y*6.5/16 pos.z = pos.z + posad.z*6.5/16 end - local e = minetest.add_entity(pos, "mcl_itemframes:item") - local lua = e:get_luaentity() - lua._nodename = node.name - local itemname = item:get_name() - if itemname == "" or itemname == nil then - lua._texture = "blank.png" - lua._scale = 1 - else - lua._texture = itemname - local def = minetest.registered_items[itemname] - if def and def.wield_scale then - lua._scale = def.wield_scale.x - else + local yaw = math.pi*2 - param2 * math.pi/2 + local map_id = item:get_meta():get_string("mcl_maps:id") + if map_id == "" then + local e = minetest.add_entity(pos, "mcl_itemframes:item") + local lua = e:get_luaentity() + lua._nodename = node.name + local itemname = item:get_name() + if itemname == "" or itemname == nil then + lua._texture = "blank.png" lua._scale = 1 + else + lua._texture = itemname + local def = minetest.registered_items[itemname] + lua._scale = def and def.wield_scale and def.wield_scale.x or 1 end - end - lua:_update_texture() - if node.name == "mcl_itemframes:item_frame" then - local yaw = math.pi*2 - param2 * math.pi/2 + lua:_update_texture() + if node.name == "mcl_itemframes:item_frame" then + e:set_yaw(yaw) + end + else + local e = minetest.add_entity(pos, "mcl_itemframes:map", map_id) e:set_yaw(yaw) end end diff --git a/mods/ITEMS/mcl_itemframes/mod.conf b/mods/ITEMS/mcl_itemframes/mod.conf index 39f4370aa..bbf4ec969 100644 --- a/mods/ITEMS/mcl_itemframes/mod.conf +++ b/mods/ITEMS/mcl_itemframes/mod.conf @@ -1,3 +1,3 @@ name = mcl_itemframes -depends = mcl_core, mcl_sounds +depends = mcl_core, mcl_sounds, mcl_maps optional_depends = screwdriver diff --git a/mods/ITEMS/mcl_maps/init.lua b/mods/ITEMS/mcl_maps/init.lua index 357c0f48e..76ec134dc 100644 --- a/mods/ITEMS/mcl_maps/init.lua +++ b/mods/ITEMS/mcl_maps/init.lua @@ -22,7 +22,6 @@ local palettes = load_json_file("palettes") local color_cache = {} local creating_maps = {} -local loading_maps = {} local loaded_maps = {} local c_air = minetest.get_content_id("air") @@ -30,16 +29,12 @@ local c_air = minetest.get_content_id("air") function mcl_maps.create_map(pos) local itemstack = ItemStack("mcl_maps:filled_map") local meta = itemstack:get_meta() - local id = storage:get_int("next_id") - storage:set_int("next_id", id + 1) - local texture_file = "mcl_maps_map_texture_" .. id .. ".tga" - local texture_path = map_textures_path .. texture_file - local texture = "[combine:140x140:0,0=mcl_maps_map_background.png:6,6=" .. texture_file - meta:set_int("mcl_maps:id", id) - meta:set_string("mcl_maps:texture", texture) - meta:set_string("mcl_maps:texture_path", texture_path) + local next_id = storage:get_int("next_id") + storage:set_int("next_id", next_id + 1) + local id = tostring(next_id) + meta:set_string("mcl_maps:id", id) tt.reload_itemstack_description(itemstack) - creating_maps[texture] = true + creating_maps[id] = true local minp = vector.multiply(vector.floor(vector.divide(pos, 128)), 128) local maxp = vector.add(minp, vector.new(127, 127, 127)) minetest.emerge_area(minp, maxp, function(blockpos, action, calls_remaining) @@ -58,7 +53,7 @@ function mcl_maps.create_map(pos) local heightmap = {} for z = 1, 128 do local map_z = minp.z - 1 + z - local color + local color, height for map_y = maxp.y, minp.y, -1 do local index = area:index(map_x, map_y, map_z) local c_id = data[index] @@ -111,24 +106,47 @@ function mcl_maps.create_map(pos) } end end - height = map_y + height = map_y break end end - heightmap[z] = height + heightmap[z] = height or minp.y pixels[z] = pixels[z] or {} pixels[z][x] = color or {0, 0, 0} end last_heightmap = heightmap end - tga_encoder.image(pixels):save(texture_path) - creating_maps[texture] = false + tga_encoder.image(pixels):save(map_textures_path .. "mcl_maps_map_texture_" .. id .. ".tga") + creating_maps[id] = nil end) return itemstack end --- Turn empty map into filled map by rightclick -local make_filled_map = function(itemstack, placer, pointed_thing) +function mcl_maps.load_map(id) + if id == "" or creating_maps[id] then + return + end + + local texture = "mcl_maps_map_texture_" .. id .. ".tga" + + if not loaded_maps[id] then + loaded_maps[id] = true + minetest.dynamic_add_media(map_textures_path .. texture, function() end) + end + + return texture +end + +function mcl_maps.load_map_item(itemstack) + return mcl_maps.load_map(itemstack:get_meta():get_string("mcl_maps:id")) +end + +local function fill_map(itemstack, placer, pointed_thing) + local new_stack = mcl_util.call_on_rightclick(itemstack, placer, pointed_thing) + if new_stack then + return new_stack + end + if minetest.settings:get_bool("enable_real_maps", true) then local new_map = mcl_maps.create_map(placer:get_pos()) itemstack:take_item() @@ -151,8 +169,8 @@ minetest.register_craftitem("mcl_maps:empty_map", { _doc_items_longdesc = S("Empty maps are not useful as maps, but they can be stacked and turned to maps which can be used."), _doc_items_usagehelp = S("Rightclick to create a filled map (which can't be stacked anymore)."), inventory_image = "mcl_maps_map_empty.png", - on_place = make_filled_map, - on_secondary_use = make_filled_map, + on_place = fill_map, + on_secondary_use = fill_map, stack_max = 64, }) @@ -220,38 +238,13 @@ minetest.register_on_leaveplayer(function(player) huds[player] = nil end) -local function is_holding_map(player) - local wield = player:get_wielded_item() - if wield:get_name() ~= "mcl_maps:filled_map" then - return - end - local meta = wield:get_meta() - local texture = meta:get_string("mcl_maps:texture") - if texture == "" then - return - end - if loaded_maps[texture] then - return texture - end - local path = meta:get_string("mcl_maps:texture_path") - if not creating_maps[texture] and not loading_maps[texture] then - loading_maps[texture] = true - local player_name = player:get_player_name() - minetest.dynamic_add_media(path, function(finished_name) - if player_name == finished_name then - loading_maps[texture] = false - loaded_maps[texture] = true - end - end) - end -end - minetest.register_globalstep(function(dtime) for _, player in pairs(minetest.get_connected_players()) do - local texture = is_holding_map(player) + local wield = player:get_wielded_item() + local texture = mcl_maps.load_map_item(wield) if texture then if texture ~= maps[player] then - player:hud_change(huds[player], "text", texture) + player:hud_change(huds[player], "text", "[combine:140x140:0,0=mcl_maps_map_background.png:6,6=" .. texture) maps[player] = texture end elseif maps[player] then From 1f8787487056f3c110f6baedbf25d3814976328c Mon Sep 17 00:00:00 2001 From: Elias Fleckenstein Date: Sun, 2 May 2021 17:03:39 +0200 Subject: [PATCH 15/66] Make it look like the player is holding the map in their hand --- mods/ENTITIES/mobs_mc/villager.lua | 2 +- mods/ITEMS/mcl_maps/init.lua | 54 ++++++++++++++++++++++++++---- mods/ITEMS/mcl_maps/mod.conf | 2 +- mods/PLAYER/mcl_meshhand/init.lua | 6 ++-- 4 files changed, 53 insertions(+), 11 deletions(-) diff --git a/mods/ENTITIES/mobs_mc/villager.lua b/mods/ENTITIES/mobs_mc/villager.lua index 154e9411f..4e4b40553 100644 --- a/mods/ENTITIES/mobs_mc/villager.lua +++ b/mods/ENTITIES/mobs_mc/villager.lua @@ -195,7 +195,7 @@ local professions = { { -- TODO: replace with empty map - { { "mcl_core:emerald", 7, 11}, { "mcl_maps:filled_map", 1, 1 } }, + { { "mcl_core:emerald", 7, 11}, { "mcl_maps:empty_map", 1, 1 } }, }, -- TODO: special maps diff --git a/mods/ITEMS/mcl_maps/init.lua b/mods/ITEMS/mcl_maps/init.lua index 76ec134dc..e2d608936 100644 --- a/mods/ITEMS/mcl_maps/init.lua +++ b/mods/ITEMS/mcl_maps/init.lua @@ -174,15 +174,47 @@ minetest.register_craftitem("mcl_maps:empty_map", { stack_max = 64, }) -minetest.register_craftitem("mcl_maps:filled_map", { +local filled_def = { description = S("Map"), _tt_help = S("Shows a map image."), _doc_items_longdesc = S("When created, the map saves the nearby area as an image that can be viewed any time by holding the map."), _doc_items_usagehelp = S("Hold the map in your hand. This will display a map on your screen."), - groups = {tool = 1, not_in_creative_inventory = 1}, inventory_image = "mcl_maps_map_filled.png^(mcl_maps_map_filled_markings.png^[colorize:#000000)", stack_max = 64, -}) + groups = {not_in_creative_inventory = 1, filled_map = 1, tool = 1}, +} + +minetest.register_craftitem("mcl_maps:filled_map", filled_def) + +local filled_wield_def = table.copy(filled_def) +filled_wield_def.use_texture_alpha = minetest.features.use_texture_alpha_string_modes and "opaque" or false +filled_wield_def.visual_scale = 1 +filled_wield_def.wield_scale = {x = 1, y = 1, z = 1} +filled_wield_def.paramtype = "light" +filled_wield_def.drawtype = "mesh" +filled_wield_def.node_placement_prediction = "" +filled_wield_def.range = minetest.registered_items[""].range + +for _, texture in pairs(mcl_skins.list) do + local def = table.copy(filled_wield_def) + def.tiles = {texture .. ".png"} + def.mesh = "mcl_meshhand.b3d" + def._mcl_hand_id = texture + minetest.register_node("mcl_maps:filled_map_" .. texture, def) + + local female_def = table.copy(def) + female_def.mesh = "mcl_meshhand_female.b3d" + female_def._mcl_hand_id = texture .. "_female" + minetest.register_node("mcl_maps:filled_map_" .. texture .. "_female", female_def) +end + +local old_add_item = minetest.add_item +function minetest.add_item(pos, stack) + if minetest.get_item_group(stack:get_name(), "filled_map") > 0 then + stack:set_name("mcl_maps:filled_map") + end + return old_add_item(pos, stack) +end tt.register_priority_snippet(function(itemstring, _, itemstack) if itemstack and itemstring == "mcl_maps:filled_map" then @@ -205,13 +237,13 @@ minetest.register_craft({ minetest.register_craft({ type = "shapeless", output = "mcl_maps:filled_map 2", - recipe = {"mcl_maps:filled_map", "mcl_maps:empty_map"}, + recipe = {"group:filled_map", "mcl_maps:empty_map"}, }) minetest.register_on_craft(function(itemstack, player, old_craft_grid, craft_inv) if itemstack:get_name() == "mcl_maps:filled_map" then for _, stack in pairs(old_craft_grid) do - if stack:get_name() == "mcl_maps:filled_map" then + if ninetest.get_item_group(stack:get_name(), "filled_map") > 0 then itemstack:get_meta():from_table(stack:get_meta():to_table()) return itemstack end @@ -226,9 +258,9 @@ minetest.register_on_joinplayer(function(player) huds[player] = player:hud_add({ hud_elem_type = "image", text = "blank.png", - position = {x = 1, y = 1}, + position = {x = 0.875, y = 0.8}, alignment = {x = -1, y = -1}, - offset = {x = -125, y = -50}, + offset = {x = 0, y = 0}, scale = {x = 2, y = 2}, }) end) @@ -243,6 +275,14 @@ minetest.register_globalstep(function(dtime) local wield = player:get_wielded_item() local texture = mcl_maps.load_map_item(wield) if texture then + local wield_def = wield:get_definition() + local hand_def = player:get_inventory():get_stack("hand", 1):get_definition() + + if hand_def and wield_def and hand_def._mcl_hand_id ~= wield_def._mcl_hand_id then + wield:set_name("mcl_maps:filled_map_" .. hand_def._mcl_hand_id) + player:set_wielded_item(wield) + end + if texture ~= maps[player] then player:hud_change(huds[player], "text", "[combine:140x140:0,0=mcl_maps_map_background.png:6,6=" .. texture) maps[player] = texture diff --git a/mods/ITEMS/mcl_maps/mod.conf b/mods/ITEMS/mcl_maps/mod.conf index 82c9e61f0..23226565c 100644 --- a/mods/ITEMS/mcl_maps/mod.conf +++ b/mods/ITEMS/mcl_maps/mod.conf @@ -1,2 +1,2 @@ name = mcl_maps -depends = mcl_core, mcl_flowers, tga_encoder, tt, mcl_colors +depends = mcl_core, mcl_flowers, tga_encoder, tt, mcl_colors, mcl_skins diff --git a/mods/PLAYER/mcl_meshhand/init.lua b/mods/PLAYER/mcl_meshhand/init.lua index 80bf36b7d..93f22c325 100644 --- a/mods/PLAYER/mcl_meshhand/init.lua +++ b/mods/PLAYER/mcl_meshhand/init.lua @@ -34,7 +34,8 @@ for _,texture in pairs(list) do end, groups = { dig_immediate = 3, not_in_creative_inventory = 1 }, range = def.range, - }) + _mcl_hand_id = texture, + }) minetest.register_node("mcl_meshhand:"..texture.. "_female", { description = "", @@ -57,7 +58,8 @@ for _,texture in pairs(list) do end, groups = { dig_immediate = 3, not_in_creative_inventory = 1 }, range = def.range, - }) + _mcl_hand_id = texture .. "_female", + }) end if has_mcl_skins == true then From ef089771120e6ba21b8f89ade3284048c196d183 Mon Sep 17 00:00:00 2001 From: Elias Fleckenstein Date: Sun, 2 May 2021 17:11:33 +0200 Subject: [PATCH 16/66] Copy stack before accessing it in add_item --- mods/ITEMS/mcl_maps/init.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/mods/ITEMS/mcl_maps/init.lua b/mods/ITEMS/mcl_maps/init.lua index e2d608936..1fcbaf2ae 100644 --- a/mods/ITEMS/mcl_maps/init.lua +++ b/mods/ITEMS/mcl_maps/init.lua @@ -210,6 +210,7 @@ end local old_add_item = minetest.add_item function minetest.add_item(pos, stack) + stack = ItemStack(stack) if minetest.get_item_group(stack:get_name(), "filled_map") > 0 then stack:set_name("mcl_maps:filled_map") end From ecea8f1662f692527d8821a8bcf10fef9543de5a Mon Sep 17 00:00:00 2001 From: Elias Fleckenstein Date: Sun, 2 May 2021 17:14:57 +0200 Subject: [PATCH 17/66] Prevent placing of wielded maps --- mods/ITEMS/mcl_maps/init.lua | 1 + mods/ITEMS/mcl_maps/mod.conf | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/mods/ITEMS/mcl_maps/init.lua b/mods/ITEMS/mcl_maps/init.lua index 1fcbaf2ae..455203c92 100644 --- a/mods/ITEMS/mcl_maps/init.lua +++ b/mods/ITEMS/mcl_maps/init.lua @@ -194,6 +194,7 @@ filled_wield_def.paramtype = "light" filled_wield_def.drawtype = "mesh" filled_wield_def.node_placement_prediction = "" filled_wield_def.range = minetest.registered_items[""].range +filled_wield_def.on_place = mcl_util.call_on_rightclick for _, texture in pairs(mcl_skins.list) do local def = table.copy(filled_wield_def) diff --git a/mods/ITEMS/mcl_maps/mod.conf b/mods/ITEMS/mcl_maps/mod.conf index 23226565c..e1f068963 100644 --- a/mods/ITEMS/mcl_maps/mod.conf +++ b/mods/ITEMS/mcl_maps/mod.conf @@ -1,2 +1,2 @@ name = mcl_maps -depends = mcl_core, mcl_flowers, tga_encoder, tt, mcl_colors, mcl_skins +depends = mcl_core, mcl_flowers, tga_encoder, tt, mcl_colors, mcl_skins, mcl_util From 63d4e57a8daf90e9a285e0f9911d2a1f393cc165 Mon Sep 17 00:00:00 2001 From: Elias Fleckenstein Date: Sun, 2 May 2021 17:19:11 +0200 Subject: [PATCH 18/66] Correct typo (ninetest -> minetest) --- mods/ITEMS/mcl_maps/init.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mods/ITEMS/mcl_maps/init.lua b/mods/ITEMS/mcl_maps/init.lua index 455203c92..7a89568dc 100644 --- a/mods/ITEMS/mcl_maps/init.lua +++ b/mods/ITEMS/mcl_maps/init.lua @@ -245,7 +245,7 @@ minetest.register_craft({ minetest.register_on_craft(function(itemstack, player, old_craft_grid, craft_inv) if itemstack:get_name() == "mcl_maps:filled_map" then for _, stack in pairs(old_craft_grid) do - if ninetest.get_item_group(stack:get_name(), "filled_map") > 0 then + if minetest.get_item_group(stack:get_name(), "filled_map") > 0 then itemstack:get_meta():from_table(stack:get_meta():to_table()) return itemstack end From 1eaf66283376b0dffdff874dc5a6f5ca5e36f485 Mon Sep 17 00:00:00 2001 From: Elias Fleckenstein Date: Sun, 2 May 2021 17:47:46 +0200 Subject: [PATCH 19/66] Add updated tga_encoder --- mods/CORE/tga_encoder/init.lua | 97 ++++++++++++---------------------- 1 file changed, 33 insertions(+), 64 deletions(-) diff --git a/mods/CORE/tga_encoder/init.lua b/mods/CORE/tga_encoder/init.lua index 45b9e85a2..96afda5e1 100644 --- a/mods/CORE/tga_encoder/init.lua +++ b/mods/CORE/tga_encoder/init.lua @@ -1,7 +1,5 @@ tga_encoder = {} -local LUA_ARGS_LIMIT = 1000 - local image = setmetatable({}, { __call = function(self, ...) local t = setmetatable({}, {__index = self}) @@ -11,8 +9,7 @@ local image = setmetatable({}, { }) function image:constructor(pixels) - self.bytes = {} - self.chunks = {self.bytes} + self.data = "" self.pixels = pixels self.width = #pixels[1] self.height = #pixels @@ -20,87 +17,59 @@ function image:constructor(pixels) self:encode() end -function image:insert(byte) - table.insert(self.bytes, byte) - if #self.bytes == LUA_ARGS_LIMIT then - self.bytes = {} - table.insert(self.chunks, self.bytes) - end -end - -function image:littleendian(size, value) - for i = 1, size do - local byte = value % 256 - value = value - byte - value = value / 256 - self:insert(byte) - end -end - function image:encode_colormap_spec() - -- first entry index - self:littleendian(2, 0) - -- number of entries - self:littleendian(2, 0) - -- number of bits per pixel - self:insert(0) + self.data = self.data + .. string.char(0, 0) -- first entry index + .. string.char(0, 0) -- number of entries + .. string.char(0) -- bits per pixel end function image:encode_image_spec() - -- X- and Y- origin - self:littleendian(2, 0) - self:littleendian(2, 0) - -- width and height - self:littleendian(2, self.width) - self:littleendian(2, self.height) - -- pixel depth - self:insert(24) - -- image descriptor - self:insert(0) + self.data = self.data + .. string.char(0, 0) -- X-origin + .. string.char(0, 0) -- Y-origin + .. string.char(self.width % 256, math.floor(self.width / 256)) -- width + .. string.char(self.height % 256, math.floor(self.height / 256)) -- height + .. string.char(24) -- pixel depth (RGB = 3 bytes = 24 bits) + .. string.char(0) -- image descriptor end function image:encode_header() - -- id length - self:insert(0) -- no image id info - -- color map type - self:insert(0) -- no color map - -- image type - self:insert(2) -- uncompressed true-color image - -- color map specification - self:encode_colormap_spec() - -- image specification - self:encode_image_spec() + self.data = self.data + .. string.char(0) -- image id + .. string.char(0) -- color map type + .. string.char(2) -- image type (uncompressed true-color image = 2) + self:encode_colormap_spec() -- color map specification + self:encode_image_spec() -- image specification end function image:encode_data() for _, row in ipairs(self.pixels) do for _, pixel in ipairs(row) do - self:insert(pixel[3]) - self:insert(pixel[2]) - self:insert(pixel[1]) + self.data = self.data + .. string.char(pixel[3], pixel[2], pixel[1]) end end end -function image:encode() - -- encode header - self:encode_header() - -- no color map and image id data - -- encode data - self:encode_data() - -- no extension area +function image:encode_footer() + self.data = self.data + .. string.char(0, 0, 0, 0) -- extension area offset + .. string.char(0, 0, 0, 0) -- developer area offset + .. "TRUEVISION-XFILE" + .. "." + .. string.char(0) end -function image:get_data() - local data = "" - for _, bytes in ipairs(self.chunks) do - data = data .. string.char(unpack(bytes)) - end - return data .. string.char(0, 0, 0, 0) .. string.char(0, 0, 0, 0) .. "TRUEVISION-XFILE." .. string.char(0) +function image:encode() + self:encode_header() -- header + -- no color map and image id data + self:encode_data() -- encode data + -- no extension or developer area + self:encode_footer() -- footer end function image:save(filename) - self.data = self.data or self:get_data() local f = assert(io.open(filename, "w")) f:write(self.data) f:close() From 0d287001f7d853925edc7fe2587e1c49e7a7db3d Mon Sep 17 00:00:00 2001 From: Elias Fleckenstein Date: Sun, 2 May 2021 19:18:30 +0200 Subject: [PATCH 20/66] Fix tt snippet to update wield filled maps as well --- mods/ITEMS/mcl_maps/init.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mods/ITEMS/mcl_maps/init.lua b/mods/ITEMS/mcl_maps/init.lua index 7a89568dc..21bff9107 100644 --- a/mods/ITEMS/mcl_maps/init.lua +++ b/mods/ITEMS/mcl_maps/init.lua @@ -219,7 +219,7 @@ function minetest.add_item(pos, stack) end tt.register_priority_snippet(function(itemstring, _, itemstack) - if itemstack and itemstring == "mcl_maps:filled_map" then + if itemstack and minetest.get_item_group(itemstring, "filled_map") > 0 then local id = itemstack:get_meta():get_string("mcl_maps:id") if id ~= "" then return "#" .. id, mcl_colors.GRAY From f063d14cafb1f959e65e80c5c6dd02b7d82bacbb Mon Sep 17 00:00:00 2001 From: Elias Fleckenstein Date: Sun, 2 May 2021 19:30:27 +0200 Subject: [PATCH 21/66] Add craft predict for map copying --- mods/ITEMS/mcl_maps/init.lua | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/mods/ITEMS/mcl_maps/init.lua b/mods/ITEMS/mcl_maps/init.lua index 21bff9107..d6b972b86 100644 --- a/mods/ITEMS/mcl_maps/init.lua +++ b/mods/ITEMS/mcl_maps/init.lua @@ -242,7 +242,7 @@ minetest.register_craft({ recipe = {"group:filled_map", "mcl_maps:empty_map"}, }) -minetest.register_on_craft(function(itemstack, player, old_craft_grid, craft_inv) +local function on_craft(itemstack, player, old_craft_grid, craft_inv) if itemstack:get_name() == "mcl_maps:filled_map" then for _, stack in pairs(old_craft_grid) do if minetest.get_item_group(stack:get_name(), "filled_map") > 0 then @@ -251,7 +251,10 @@ minetest.register_on_craft(function(itemstack, player, old_craft_grid, craft_inv end end end -end) +end + +minetest.register_on_craft(on_craft) +minetest.register_craft_predict(on_craft) local maps = {} local huds = {} From 5bb1657bd86cb9938c08a669d7d3b3313e50b631 Mon Sep 17 00:00:00 2001 From: Elias Fleckenstein Date: Mon, 3 May 2021 10:46:59 +0200 Subject: [PATCH 22/66] Add moving marker for the player --- mods/ITEMS/mcl_maps/init.lua | 59 +++++++++++++++--- .../textures/mcl_maps_player_arrow.png | Bin 0 -> 1528 bytes .../mcl_maps/textures/mcl_maps_player_dot.png | Bin 0 -> 3101 bytes 3 files changed, 51 insertions(+), 8 deletions(-) create mode 100644 mods/ITEMS/mcl_maps/textures/mcl_maps_player_arrow.png create mode 100644 mods/ITEMS/mcl_maps/textures/mcl_maps_player_dot.png diff --git a/mods/ITEMS/mcl_maps/init.lua b/mods/ITEMS/mcl_maps/init.lua index d6b972b86..b2c03b354 100644 --- a/mods/ITEMS/mcl_maps/init.lua +++ b/mods/ITEMS/mcl_maps/init.lua @@ -27,16 +27,20 @@ local loaded_maps = {} local c_air = minetest.get_content_id("air") function mcl_maps.create_map(pos) + local minp = vector.multiply(vector.floor(vector.divide(pos, 128)), 128) + local maxp = vector.add(minp, vector.new(127, 127, 127)) + local itemstack = ItemStack("mcl_maps:filled_map") local meta = itemstack:get_meta() local next_id = storage:get_int("next_id") storage:set_int("next_id", next_id + 1) local id = tostring(next_id) meta:set_string("mcl_maps:id", id) + meta:set_string("mcl_maps:minp", minetest.pos_to_string(minp)) + meta:set_string("mcl_maps:maxp", minetest.pos_to_string(maxp)) tt.reload_itemstack_description(itemstack) + creating_maps[id] = true - local minp = vector.multiply(vector.floor(vector.divide(pos, 128)), 128) - local maxp = vector.add(minp, vector.new(127, 127, 127)) minetest.emerge_area(minp, maxp, function(blockpos, action, calls_remaining) if calls_remaining > 0 then return @@ -260,14 +264,20 @@ local maps = {} local huds = {} minetest.register_on_joinplayer(function(player) - huds[player] = player:hud_add({ + local map_def = { hud_elem_type = "image", text = "blank.png", - position = {x = 0.875, y = 0.8}, - alignment = {x = -1, y = -1}, + position = {x = 0.75, y = 0.8}, + alignment = {x = 0, y = -1}, offset = {x = 0, y = 0}, scale = {x = 2, y = 2}, - }) + } + local marker_def = table.copy(map_def) + marker_def.alignment = {x = 0, y = 0} + huds[player] = { + map = player:hud_add(map_def), + marker = player:hud_add(marker_def), + } end) minetest.register_on_leaveplayer(function(player) @@ -279,6 +289,7 @@ minetest.register_globalstep(function(dtime) for _, player in pairs(minetest.get_connected_players()) do local wield = player:get_wielded_item() local texture = mcl_maps.load_map_item(wield) + local hud = huds[player] if texture then local wield_def = wield:get_definition() local hand_def = player:get_inventory():get_stack("hand", 1):get_definition() @@ -289,11 +300,43 @@ minetest.register_globalstep(function(dtime) end if texture ~= maps[player] then - player:hud_change(huds[player], "text", "[combine:140x140:0,0=mcl_maps_map_background.png:6,6=" .. texture) + player:hud_change(hud.map, "text", "[combine:140x140:0,0=mcl_maps_map_background.png:6,6=" .. texture) maps[player] = texture end + + local pos = vector.round(player:get_pos()) + local meta = wield:get_meta() + local minp = minetest.string_to_pos(meta:get_string("mcl_maps:minp")) + local maxp = minetest.string_to_pos(meta:get_string("mcl_maps:maxp")) + + local marker = "mcl_maps_player_arrow.png" + + if pos.x < minp.x then + marker = "mcl_maps_player_dot.png" + pos.x = minp.x + elseif pos.x > maxp.x then + marker = "mcl_maps_player_dot.png" + pos.x = maxp.x + end + + if pos.z < minp.z then + marker = "mcl_maps_player_dot.png" + pos.z = minp.z + elseif pos.z > maxp.z then + marker = "mcl_maps_player_dot.png" + pos.z = maxp.z + end + + if marker == "mcl_maps_player_arrow.png" then + local yaw = (math.floor(player:get_look_horizontal() * 180 / math.pi / 90 + 0.5) % 4) * 90 + marker = marker .. "^[transformR" .. yaw + end + + player:hud_change(hud.marker, "text", marker) + player:hud_change(hud.marker, "offset", {x = (6 - 140 / 2 + pos.x - minp.x) * 2, y = (6 - 140 + maxp.z - pos.z) * 2}) elseif maps[player] then - player:hud_change(huds[player], "text", "blank.png") + player:hud_change(hud.map, "text", "blank.png") + player:hud_change(hud.marker, "text", "blank.png") maps[player] = nil end end diff --git a/mods/ITEMS/mcl_maps/textures/mcl_maps_player_arrow.png b/mods/ITEMS/mcl_maps/textures/mcl_maps_player_arrow.png new file mode 100644 index 0000000000000000000000000000000000000000..3f58f676501e514ddee898f7a19ad409590a5249 GIT binary patch literal 1528 zcmV zaB^>EX>4U6ba`-PAZ2)IW&i+q+O1bvlH@83{MRYw2uNZ*4q%9QH+aXN1mjv<-CawM z30ssbv}6h#MeYCpI{m@L$yl;3M4!AjxNNdXGA7aNSDH^Yc0TtjEXntJx-1f?6jGOc zUiKM!cU^FpbGg@3TyG>UM@Qu4P)B6JWV=lgdfD}Cm!s77iBB=yrdni|bs5f7)}4;> z*1PeWZWT5FrOhFbiZo?4^BMOHblj{N(#!)-@xj?_Z?D)g#EgZ?X5bSC_2^qJDMM1e*^x zFf4#v=Q58Ga68Py90?BD_5jwrAdGksUT|Tq6SG) zb?{`z;4VRvZW_T^l}4&i%Ow|{anp=fIU@4LFcpR~#*%Lb{q*vkLA}=j5u3Q<)F#0) z`Wk5r=Ef6NAcXtk%}s!hvFJB9{exBogKokcQD8P@cTpT)drK$J3Ofh6?+T`{EeC)I zu^p0O1p~&jI`(XWNMHtz5d>vqE^4KK0d`I{Bq>(a3k8WXVq;CHQMN+k0HjG zVos72XP`?yg%ndtISXY3%J7w8pP?yIwAkW`FQLSeO0H<1YOAZhh8kUKo_fBp#%tT2#~ZBiVofGf!!BG{gO)-# zT<|zf+~5q1iDfVz1_Nkl8JwBO*2-XRaAuNVQ#e7AZg4{z55_>DZ7iz>G#C%q3QkD zpV0qOnY*N$RdNp9rQ|s`W=W0pq&XyAOp2ZtwV1wHb@iJM4IQeQpYMd9Dy1JPYuf|z z@{l%;=Q*RR>M^lB@p_E>@&j^T zS}(o57W?ba^zlhH{&3*$B>e>pgOXObK^?>Z00D$)LqkwWLqi~Na&Km7Y-Iodc$|Ha zJxIeq9K~PLmKLcv*g?f1Lv^wsD&nYBC_;r$E41oha{YuR4M~cNqu^R_@ME#+;Nq;S zgR3A2et@{SIVrkGiT_IqEn+-4?#H`(kGpq((5y1m42%P+W*O;ZLd@n?#n3B)@FR>t z1Y~CFbCQ&T=lHsZkFR%ep5=Y+&(WJNm<;fV#IsB{EaDB~=}k-LyiXiuWjRlLPCRDN z1&JTIuDJZhx#Y0GGowZ(Jx?4Z7E4{MbTKO%D)AI?EU#*mFJxWLbKc^tR_m;NPyWJ4 zL0ehoI?Z7uv4|x|5TT%s3aYRWr&S}xM4I*!9{wT6FOf?jR|Sk53#dVb?D)a|;CHuX zadN^0RCs-O6&M*O4ex=P&u2Zz9DiL%!{-W~4l?cX!) z{(b=69CB;*2v67m000JJOGiWi{{a60|De66lK=n!32;bRa{vGizW@LZzX3P}QzQTY z00(qQO+^Rg1p^2fE*Z`BU;qFBT1iAfR0!9NkFgEFAPfXgC>vScgk6|{o!EfVm8ba> z5r`s+a^1^+whRYmrZX4*U}hR)=(Io0vaH@a0JYYAyR5;S6M)Rzg$tmy27tR05k$nZ eR}zw5U%3H%YbOfTMa)D10000NP) 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 literal 0 HcmV?d00001 From ecc2010fe5820caf81b9ae5982ecf6da2ab047aa Mon Sep 17 00:00:00 2001 From: Elias Fleckenstein Date: Mon, 3 May 2021 11:22:47 +0200 Subject: [PATCH 23/66] Make compasses work in itemframes --- mods/ITEMS/mcl_compass/init.lua | 43 +++++++++++++++--------------- mods/ITEMS/mcl_itemframes/init.lua | 3 +++ mods/ITEMS/mcl_itemframes/mod.conf | 2 +- 3 files changed, 26 insertions(+), 22 deletions(-) diff --git a/mods/ITEMS/mcl_compass/init.lua b/mods/ITEMS/mcl_compass/init.lua index f15459303..2c71eeac0 100644 --- a/mods/ITEMS/mcl_compass/init.lua +++ b/mods/ITEMS/mcl_compass/init.lua @@ -12,6 +12,27 @@ local random_timer_trigger = 0.5 -- random compass spinning tick in seconds. Inc local random_frame = math.random(0, compass_frames-1) +function mcl_compass.get_compass_image(pos, dir) + -- Compasses do not work in certain zones + if mcl_worlds.compass_works(pos) then + local spawn = {x=0,y=0,z=0} + local ssp = minetest.setting_get_pos("static_spawnpoint") + if ssp then + spawn = ssp + if type(spawn) ~= "table" or type(spawn.x) ~= "number" or type(spawn.y) ~= "number" or type(spawn.z) ~= "number" then + spawn = {x=0,y=0,z=0} + end + end + local angle_north = math.deg(math.atan2(spawn.x - pos.x, spawn.z - pos.z)) + if angle_north < 0 then angle_north = angle_north + 360 end + local angle_dir = -math.deg(dir) + local angle_relative = (angle_north - angle_dir + 180) % 360 + return math.floor((angle_relative/11.25) + 0.5) % compass_frames + else + return random_frame + end +end + minetest.register_globalstep(function(dtime) random_timer = random_timer + dtime @@ -30,27 +51,7 @@ minetest.register_globalstep(function(dtime) end if has_compass(player) then local pos = player:get_pos() - local dim = mcl_worlds.pos_to_dimension(pos) - local compass_image - -- Compasses do not work in certain zones - if not mcl_worlds.compass_works(pos) then - compass_image = random_frame - else - local spawn = {x=0,y=0,z=0} - local ssp = minetest.setting_get_pos("static_spawnpoint") - if ssp then - spawn = ssp - if type(spawn) ~= "table" or type(spawn.x) ~= "number" or type(spawn.y) ~= "number" or type(spawn.z) ~= "number" then - spawn = {x=0,y=0,z=0} - end - end - local dir = player:get_look_horizontal() - local angle_north = math.deg(math.atan2(spawn.x - pos.x, spawn.z - pos.z)) - if angle_north < 0 then angle_north = angle_north + 360 end - local angle_dir = -math.deg(dir) - local angle_relative = (angle_north - angle_dir + 180) % 360 - compass_image = math.floor((angle_relative/11.25) + 0.5) % compass_frames - end + local compass_image = mcl_compass.get_compass_image(pos, player:get_look_horizontal()) for j,stack in pairs(player:get_inventory():get_list("main")) do if minetest.get_item_group(stack:get_name(), "compass") ~= 0 and diff --git a/mods/ITEMS/mcl_itemframes/init.lua b/mods/ITEMS/mcl_itemframes/init.lua index 073933fcf..4afb1d042 100644 --- a/mods/ITEMS/mcl_itemframes/init.lua +++ b/mods/ITEMS/mcl_itemframes/init.lua @@ -188,6 +188,9 @@ minetest.register_node("mcl_itemframes:item_frame",{ end local put_itemstack = ItemStack(itemstack) put_itemstack:set_count(1) + if minetest.get_item_group(put_itemstack:get_name(), "compass") > 0 then + put_itemstack:set_name("mcl_compass:" .. mcl_compass.get_compass_image(pos, minetest.dir_to_yaw(minetest.facedir_to_dir(node.param2)))) + end inv:set_stack("main", 1, put_itemstack) update_item_entity(pos, node) -- Add node infotext when item has been named diff --git a/mods/ITEMS/mcl_itemframes/mod.conf b/mods/ITEMS/mcl_itemframes/mod.conf index 39f4370aa..98906bfb7 100644 --- a/mods/ITEMS/mcl_itemframes/mod.conf +++ b/mods/ITEMS/mcl_itemframes/mod.conf @@ -1,3 +1,3 @@ name = mcl_itemframes -depends = mcl_core, mcl_sounds +depends = mcl_core, mcl_sounds, mcl_compass optional_depends = screwdriver From 74e3c6555d3a481a600950a45fe4056d0a8e16cb Mon Sep 17 00:00:00 2001 From: Elias Fleckenstein Date: Mon, 3 May 2021 13:43:46 +0200 Subject: [PATCH 24/66] Globalize mcl_clock API --- mods/ITEMS/mcl_clock/init.lua | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/mods/ITEMS/mcl_clock/init.lua b/mods/ITEMS/mcl_clock/init.lua index d53d75076..30753f43a 100644 --- a/mods/ITEMS/mcl_clock/init.lua +++ b/mods/ITEMS/mcl_clock/init.lua @@ -1,7 +1,7 @@ local S = minetest.get_translator("mcl_clock") --[[ - mcl_clock, renew of the renew of the watch mod + mcl_clock, renew of the renew of the mcl_clock mod Original from Echo, here: http://forum.minetest.net/viewtopic.php?id=3795 ]]-- @@ -11,8 +11,7 @@ mcl_clock = {} -- This is the itemstring of the default clock item. It is used for the default inventory image, help entries, and the like mcl_clock.stereotype = "mcl_clock:clock" -local watch = {} -watch.old_time = -1 +mcl_clock.old_time = -1 local clock_frames = 64 @@ -22,20 +21,20 @@ local random_timer_trigger = 1.0 -- random clock spinning tick in seconds. Incre local random_frame = math.random(0, clock_frames-1) -- Image of all possible faces -watch.images = {} +mcl_clock.images = {} for frame=0, clock_frames-1 do local sframe = tostring(frame) if string.len(sframe) == 1 then sframe = "0" .. sframe end - table.insert(watch.images, "mcl_clock_clock_"..sframe..".png") + table.insert(mcl_clock.images, "mcl_clock_clock_"..sframe..".png") end local function round(num) return math.floor(num + 0.5) end -function watch.get_clock_frame() +function mcl_clock.get_clock_frame() local t = clock_frames * minetest.get_timeofday() t = round(t) if t == clock_frames then t = 0 end @@ -45,7 +44,7 @@ end local doc_mod = minetest.get_modpath("doc") ~= nil -- Register items -function watch.register_item(name, image, creative, frame) +function mcl_clock.register_item(name, image, creative, frame) local g = 1 if creative then g = 0 @@ -78,7 +77,7 @@ end local force_clock_update_timer = 0 minetest.register_globalstep(function(dtime) - local now = watch.get_clock_frame() + local now = mcl_clock.get_clock_frame() force_clock_update_timer = force_clock_update_timer + dtime random_timer = random_timer + dtime -- This causes the random spinning of the clock @@ -87,12 +86,12 @@ minetest.register_globalstep(function(dtime) random_timer = 0 end - if watch.old_time == now and force_clock_update_timer < 60 then + if mcl_clock.old_time == now and force_clock_update_timer < 60 then return end force_clock_update_timer = 0 - watch.old_time = now + mcl_clock.old_time = now for p, player in pairs(minetest.get_connected_players()) do for s, stack in pairs(player:get_inventory():get_list("main")) do @@ -117,7 +116,7 @@ end) -- Immediately set correct clock time after crafting minetest.register_on_craft(function(itemstack) if itemstack:get_name() == mcl_clock.stereotype then - itemstack:set_name("mcl_clock:clock_"..watch.get_clock_frame()) + itemstack:set_name("mcl_clock:clock_"..mcl_clock.get_clock_frame()) end end) @@ -132,7 +131,7 @@ minetest.register_craft({ }) -- Clock tool -watch.register_item(mcl_clock.stereotype, watch.images[1], true, 1) +mcl_clock.register_item(mcl_clock.stereotype, mcl_clock.images[1], true, 1) -- Faces for a=0,clock_frames-1,1 do @@ -142,6 +141,6 @@ for a=0,clock_frames-1,1 do else b = b + 32 end - watch.register_item("mcl_clock:clock_"..tostring(a), watch.images[b+1], false, a+1) + mcl_clock.register_item("mcl_clock:clock_"..tostring(a), mcl_clock.images[b+1], false, a+1) end From cbb014ed3867418d373dadbfc05e5d7dc90a8b4c Mon Sep 17 00:00:00 2001 From: AFCMS Date: Mon, 3 May 2021 22:11:49 +0200 Subject: [PATCH 25/66] basic working script --- mods/MAPGEN/mcl_villages/const.lua | 2 +- tools/create_luacheck.py | 31 ++++++++++++++++++++++-------- 2 files changed, 24 insertions(+), 9 deletions(-) diff --git a/mods/MAPGEN/mcl_villages/const.lua b/mods/MAPGEN/mcl_villages/const.lua index 6621dbf3a..e5cbc9b39 100644 --- a/mods/MAPGEN/mcl_villages/const.lua +++ b/mods/MAPGEN/mcl_villages/const.lua @@ -7,7 +7,7 @@ end --[[ Manually set in 'buildings.lua' -- material to replace cobblestone with -wallmaterial = { +local wallmaterial = { "mcl_core:junglewood", "mcl_core:sprucewood", "mcl_core:wood", diff --git a/tools/create_luacheck.py b/tools/create_luacheck.py index 1c38c33f4..a9caad38e 100755 --- a/tools/create_luacheck.py +++ b/tools/create_luacheck.py @@ -4,8 +4,10 @@ from pathlib import Path path = "./mods/" # pattern = re.compile(r'^(?P[^ \t\]]+)[ ]*=[ ]*\{') -pattern = re.compile(r'^(?P[^ \t\]]+)[ ]*=[ ]*\{') +pattern = re.compile(r'^(?P[A-Za-z_0-9]+)[ ]*=[ ]*\{') +pattern_local = re.compile(r'local (?P[A-Za-z_0-9]+)') +global_vars = [] pathlist = Path(path).rglob('*.lua') for path in pathlist: @@ -13,18 +15,31 @@ for path in pathlist: # print(path_in_str) trouve = False with open(path_in_str) as f: + variables_locales = [] for i, line in enumerate(f.readlines()): m = pattern.match(line) if m: - print(path_in_str, ":", i+1, ":", m.group('nomtableau').strip()) - trouve = True - break - if not trouve: - print(path_in_str, ": -") + nomtableau = m.group('nomtableau') + if nomtableau not in variables_locales: + print(path_in_str, ":", i+1, ":", m.group('nomtableau').strip()) + global_vars.append(m.group('nomtableau').strip()) + trouve = True + break -for subdir, dirs, files in os.walk(path): + else: + n = pattern_local.match(line) + if n: + variables_locales.append(n.group('nomvar')) + + if not trouve: + nb_varloc = len(variables_locales) + #print(path_in_str, ": -", "({} variables locales)".format(nb_varloc) if nb_varloc > 0 else '') + +""" for subdir, dirs, files in os.walk(path): for file in files: print(os.path.join(subdir, file)) filepath = subdir + os.sep + file if filepath.endswith(".lua"): - print(filepath) \ No newline at end of file + print(filepath) """ + +print(', '.join(['"{}"'.format(v) for v in global_vars])) From 2c5eca399928567e6423ff733b472721393ed99f Mon Sep 17 00:00:00 2001 From: Elias Fleckenstein Date: Tue, 4 May 2021 08:49:21 +0200 Subject: [PATCH 26/66] Make clocks work in itemframes --- mods/ITEMS/mcl_clock/init.lua | 3 +++ mods/ITEMS/mcl_itemframes/init.lua | 21 ++++++++++++++++++++- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/mods/ITEMS/mcl_clock/init.lua b/mods/ITEMS/mcl_clock/init.lua index 30753f43a..0f6978447 100644 --- a/mods/ITEMS/mcl_clock/init.lua +++ b/mods/ITEMS/mcl_clock/init.lua @@ -92,10 +92,12 @@ minetest.register_globalstep(function(dtime) force_clock_update_timer = 0 mcl_clock.old_time = now + mcl_clock.random_frame = random_frame for p, player in pairs(minetest.get_connected_players()) do for s, stack in pairs(player:get_inventory():get_list("main")) do local dim = mcl_worlds.pos_to_dimension(player:get_pos()) + local frame -- Clocks do not work in certain zones if not mcl_worlds.clock_works(player:get_pos()) then @@ -103,6 +105,7 @@ minetest.register_globalstep(function(dtime) else frame = now end + local count = stack:get_count() if stack:get_name() == mcl_clock.stereotype then player:get_inventory():set_stack("main", s, "mcl_clock:clock_"..frame.." "..count) diff --git a/mods/ITEMS/mcl_itemframes/init.lua b/mods/ITEMS/mcl_itemframes/init.lua index 4afb1d042..07779e544 100644 --- a/mods/ITEMS/mcl_itemframes/init.lua +++ b/mods/ITEMS/mcl_itemframes/init.lua @@ -148,6 +148,21 @@ minetest.register_node("mcl_itemframes:item_frame",{ groups = { dig_immediate=3,deco_block=1,dig_by_piston=1,container=7,attached_node_facedir=1 }, sounds = mcl_sounds.node_sound_defaults(), node_placement_prediction = "", + on_timer = function(pos) + local inv = minetest.get_meta(pos):get_inventory() + local stack = inv:get_stack("main", 1) + local itemname = stack:get_name() + if minetest.get_item_group(itemname, "clock") > 0 then + local new_name = "mcl_clock:clock_" .. (mcl_worlds.clock_works(pos) and mcl_clock.old_time or mcl_clock.random_frame) + if itemname ~= new_name then + stack:set_name(new_name) + inv:set_stack("main", 1, stack) + local node = minetest.get_node(pos) + update_item_entity(pos, node, node.param2) + end + minetest.get_node_timer(pos):start(1.0) + end + end, on_place = function(itemstack, placer, pointed_thing) if pointed_thing.type ~= "node" then return itemstack @@ -188,9 +203,13 @@ minetest.register_node("mcl_itemframes:item_frame",{ end local put_itemstack = ItemStack(itemstack) put_itemstack:set_count(1) - if minetest.get_item_group(put_itemstack:get_name(), "compass") > 0 then + local itemname = put_itemstack:get_name() + if minetest.get_item_group(itemname, "compass") > 0 then put_itemstack:set_name("mcl_compass:" .. mcl_compass.get_compass_image(pos, minetest.dir_to_yaw(minetest.facedir_to_dir(node.param2)))) end + if minetest.get_item_group(itemname, "clock") > 0 then + minetest.get_node_timer(pos):start(1.0) + end inv:set_stack("main", 1, put_itemstack) update_item_entity(pos, node) -- Add node infotext when item has been named From 3b3d67a99c63fddbe4fded25d080b4f649c435f7 Mon Sep 17 00:00:00 2001 From: Elias Fleckenstein Date: Tue, 4 May 2021 09:16:42 +0200 Subject: [PATCH 27/66] Make clocks work when dropped --- mods/ENTITIES/mcl_item_entity/init.lua | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/mods/ENTITIES/mcl_item_entity/init.lua b/mods/ENTITIES/mcl_item_entity/init.lua index b65585a15..b05e92ce2 100644 --- a/mods/ENTITIES/mcl_item_entity/init.lua +++ b/mods/ENTITIES/mcl_item_entity/init.lua @@ -98,7 +98,7 @@ end minetest.register_globalstep(function(dtime) - + tick = not tick for _,player in pairs(minetest.get_connected_players()) do @@ -106,7 +106,7 @@ minetest.register_globalstep(function(dtime) local name = player:get_player_name() - + local pos = player:get_pos() if tick == true and pool[name] > 0 then @@ -124,7 +124,7 @@ minetest.register_globalstep(function(dtime) end - + local inv = player:get_inventory() local checkpos = {x=pos.x,y=pos.y + item_drop_settings.player_collect_height,z=pos.z} @@ -428,6 +428,7 @@ minetest.register_entity(":__builtin:item", { description = def.description glow = def.light_source end + self.is_clock = minetest.get_item_group(itemname, "clock") > 0 local s = 0.2 + 0.1 * (count / max_count) local wield_scale = (def and def.wield_scale and def.wield_scale.x) or 1 local c = s @@ -593,6 +594,12 @@ minetest.register_entity(":__builtin:item", { local node = minetest.get_node_or_nil(p) local in_unloaded = (node == nil) + if self.is_clock then + self.object:set_properties({ + textures = {"mcl_clock:clock_" .. (mcl_worlds.clock_works(p) and mcl_clock.old_time or mcl_clock.random_frame)} + }) + end + -- If no collector was found for a long enough time, declare the magnet as disabled if self._magnet_active and (self._collector_timer == nil or (self._collector_timer > item_drop_settings.magnet_time)) then self._magnet_active = false From 78ce97aaf624c6c1a7390b0415f1e03bac38ed27 Mon Sep 17 00:00:00 2001 From: Elias Fleckenstein Date: Tue, 4 May 2021 09:53:28 +0200 Subject: [PATCH 28/66] Fix creeper explosion values --- mods/ENTITIES/mobs_mc/creeper.lua | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/mods/ENTITIES/mobs_mc/creeper.lua b/mods/ENTITIES/mobs_mc/creeper.lua index 4552d79d1..4d0539996 100644 --- a/mods/ENTITIES/mobs_mc/creeper.lua +++ b/mods/ENTITIES/mobs_mc/creeper.lua @@ -43,10 +43,10 @@ mobs:register_mob("mobs_mc:creeper", { eye_height = 1.25, --hssssssssssss - explosion_strength = 10, - explosion_radius = 4, - explosion_damage_radius = 6, - explosiontimer_reset_radius = 6, + explosion_strength = 3, + --explosion_radius = 3, + --explosion_damage_radius = 6, + --explosiontimer_reset_radius = 6, reach = 1.5, defuse_reach = 4, explosion_timer = 0.3, @@ -148,7 +148,7 @@ mobs:register_mob("mobs_mc:creeper", { }) mobs:register_mob("mobs_mc:creeper_charged", { - description = S("Creeper"), + description = S("Charged Creeper"), type = "monster", spawn_class = "hostile", hp_min = 20, @@ -182,10 +182,10 @@ mobs:register_mob("mobs_mc:creeper_charged", { runaway_from = { "mobs_mc:ocelot", "mobs_mc:cat" }, attack_type = "explode", - explosion_strength = 24, - explosion_radius = 12, - explosion_damage_radius = 18, - explosiontimer_reset_radius = 10, + explosion_strength = 6, + --explosion_radius = 3, + --explosion_damage_radius = 6, + --explosiontimer_reset_radius = 3, reach = 1.5, defuse_reach = 4, explosion_timer = 0.3, From 75d94500026355f8bb23fc739fde34489c99cc9c Mon Sep 17 00:00:00 2001 From: Elias Fleckenstein Date: Tue, 4 May 2021 10:24:08 +0200 Subject: [PATCH 29/66] Make compasses point upwards when dropped as an item --- mods/ENTITIES/mcl_item_entity/init.lua | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/mods/ENTITIES/mcl_item_entity/init.lua b/mods/ENTITIES/mcl_item_entity/init.lua index b05e92ce2..895bfc892 100644 --- a/mods/ENTITIES/mcl_item_entity/init.lua +++ b/mods/ENTITIES/mcl_item_entity/init.lua @@ -406,6 +406,14 @@ minetest.register_entity(":__builtin:item", { return end local stack = ItemStack(itemstring) + if minetest.get_item_group(stack:get_name(), "compass") > 0 then + stack:set_name("mcl_compass:16") + itemstring = stack:to_string() + self.itemstring = itemstring + end + if minetest.get_item_group(stack:get_name(), "clock") > 0 then + self.is_clock = true + end local count = stack:get_count() local max_count = stack:get_stack_max() if count > max_count then @@ -428,7 +436,6 @@ minetest.register_entity(":__builtin:item", { description = def.description glow = def.light_source end - self.is_clock = minetest.get_item_group(itemname, "clock") > 0 local s = 0.2 + 0.1 * (count / max_count) local wield_scale = (def and def.wield_scale and def.wield_scale.x) or 1 local c = s From f7280dc4f007c46094fa2d6072270e2b61157700 Mon Sep 17 00:00:00 2001 From: Elias Fleckenstein Date: Tue, 4 May 2021 20:16:30 +0200 Subject: [PATCH 30/66] Remove mod screenshots since they only take up space and are partly outdated --- mods/ENVIRONMENT/lightning/screenshot.png | Bin 50057 -> 0 bytes mods/ENVIRONMENT/mcl_weather/screenshot.png | Bin 30710 -> 0 bytes mods/HELP/doc/doc/screenshot.png | Bin 12315 -> 0 bytes mods/HELP/doc/doc_identifier/screenshot.png | Bin 28682 -> 0 bytes mods/HELP/doc/doc_items/screenshot.png | Bin 15507 -> 0 bytes mods/HELP/mcl_craftguide/screenshot.png | Bin 35837 -> 0 bytes mods/HELP/mcl_doc_basics/screenshot.png | Bin 44823 -> 0 bytes mods/HUD/awards/screenshot.png | Bin 63807 -> 0 bytes mods/HUD/hudbars/screenshot.png | Bin 9556 -> 0 bytes mods/HUD/show_wielded_item/screenshot.png | Bin 11859 -> 0 bytes mods/ITEMS/mcl_torches/screenshot.png | Bin 36243 -> 0 bytes mods/PLAYER/mcl_hunger/screenshot.png | Bin 8498 -> 0 bytes 12 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 mods/ENVIRONMENT/lightning/screenshot.png delete mode 100644 mods/ENVIRONMENT/mcl_weather/screenshot.png delete mode 100644 mods/HELP/doc/doc/screenshot.png delete mode 100644 mods/HELP/doc/doc_identifier/screenshot.png delete mode 100644 mods/HELP/doc/doc_items/screenshot.png delete mode 100644 mods/HELP/mcl_craftguide/screenshot.png delete mode 100644 mods/HELP/mcl_doc_basics/screenshot.png delete mode 100644 mods/HUD/awards/screenshot.png delete mode 100644 mods/HUD/hudbars/screenshot.png delete mode 100644 mods/HUD/show_wielded_item/screenshot.png delete mode 100644 mods/ITEMS/mcl_torches/screenshot.png delete mode 100644 mods/PLAYER/mcl_hunger/screenshot.png diff --git a/mods/ENVIRONMENT/lightning/screenshot.png b/mods/ENVIRONMENT/lightning/screenshot.png deleted file mode 100644 index 8d3a047ca7ab2a211df4a63504582131e2bb946d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 50057 zcmV(uK004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00006 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

^ul$R>3DDykb8lXf}k-Si2T? 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 diff --git a/mods/HELP/doc/doc/screenshot.png b/mods/HELP/doc/doc/screenshot.png deleted file mode 100644 index 90946a9999d0558787fb1a7d3d6fdbfa56a92fb5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12315 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 BcrO3| diff --git a/mods/HELP/doc/doc_identifier/screenshot.png b/mods/HELP/doc/doc_identifier/screenshot.png deleted file mode 100644 index 13b2540df519067df7d1b4fa7a090f4909a34f90..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28682 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 diff --git a/mods/HELP/doc/doc_items/screenshot.png b/mods/HELP/doc/doc_items/screenshot.png deleted file mode 100644 index 8e7f5656ca39c3724a9ed0129f88af609e418fc7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15507 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 diff --git a/mods/HELP/mcl_craftguide/screenshot.png b/mods/HELP/mcl_craftguide/screenshot.png deleted file mode 100644 index ebb8e4d768d753fd298504a75bc86fe6e42f5c5d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35837 zcmV(uK004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00006 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 diff --git a/mods/HUD/hudbars/screenshot.png b/mods/HUD/hudbars/screenshot.png deleted file mode 100644 index 88ee3238dbaac6e7d3769e212c0ccd4eed023b96..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9556 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 AAOHXW diff --git a/mods/ITEMS/mcl_torches/screenshot.png b/mods/ITEMS/mcl_torches/screenshot.png deleted file mode 100644 index 5c9f85919fd676fc32d3333bcba43c218353785a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36243 zcmV(mK=Z$eP)7 z6d)7|78eyH6bl*_6&n{8C=~}685SBC8yFfG9T^xM8W|cJ86FxLDi{nR8W0>C9vd7Q z9~&Ac8V(#C8z3ATE*c0R9UL7V93LGaAsrkZ9~~kd9WWgXBOf0iAs;Ls5Gx-UB_SXr zA|)atAt)jmCL$p=APOfVA}S*sBqbv#BqJ#$Bq}B)GbI)>B^@RxB|9V$Ehiu=CnhQ= zD=a7{D=954DJU>0A}K2=E-5lDDk(22DJ?89EG;WAEGr-{J~1sUG%px4E+{fCEjukG zBQilkE)X{`CNwZFFfuSjE*d^CBTX(9K`|doF$6a=GBh+eIyEmjH8VOkH9R;sJ~=Z? zI2TSgB1kwaQ8yhvIypf+FH1TmSU43|I2u4aJ6bm&LOnNKI2=tr8&N(GLOwlQI~YYl zKT|*>MnXJALpEYPAxlCxRX{XILqbVLD_cP+V?iEYLnBH?MPEf2OGiOaM?6ePJyJ^> zX+;)SM>|bPM@~#IZbcqXOGRo&9#2b2Yeyt;M-yC1HC;?7bVeXjPEB-57E@12R8T{B zNh4HJHC0hhbxb95P!?EKIAc;oSyWSgP9k$rC|OlbaZxi_R!M19J%UjtTv%6tR40yB z4`E$UVO(2oTsLB0L55l^abg^FUOt9i5ocpoXJTMzW=MfzIE`X5ZE8$yX=ZL~UXo=t znQI8DXcBaBWOZ<|FuMESm zbhojc$F*&@wX(>#hrqg?+QJ~)#ShNFo7%%(*u`es##qiy~9mk&!8s#UzoF8Op+`bZx3Liz{eSDQzUvQC1O9Lg-3# zw=HQ9(*)~Q+re!g61%a!>+ou{yVkB9vK<1)oq)y59d-ogMcBr&y~Y^UhYfqIeRu&c ze?pc7gOKq(&--Onk8IzkQFnEB{bWA*{ygvBmyICsJiWQHynN=&8Gc!At}LBdYBrlo zODjuDOJ^F52L94KyM99yMZ+TLdrmM+Lf?s#BpG;))#=)1N7tIo<+Jr$oWZM?mzVIM z(O7OS^W9eXlX|dX8kVVdTDl&DU3|4{+cvwJK8SrgG_1@pZM&s+}vo%Z=22f+xljJ<;(KaYQ%Aj-&yO+f|NkkT;cgHah<8x zS)6mz3ZgXW_kGv#!X%7vn8Pfvbl=r=4JX0p;MI81@-jaEoV){GN!VBFH(P18bj#{! zdb_KKQMYAUmTv)Ut>a|AW$7Km(gBw3+g{KWv~){fRbZ{)>|1l>R#scB)g_Zyji%uo zthXtwe(o1U{wDRPyD-J+1-X4Y;8rJ z7r32s>SO^}Qywkh;n_J_`04D~rr||Es~`02Y6}lSFYH^ck8^BN0wIFSX9Z)Rg%>w* z4SD%$;Bg5WXPUa@0xSIn!w)sh^ehXK)ot5&D+sA>SVqUNeLo08-w@d%wsVBmAVQ~T z;n9+wjH>AbXbD(1&cXUQNLIJiREwguKucTG6d)AxrA7-N0m_v%eBV$KC1CN%)&eVl zQxx7J#qwbYRB{vFc^mUj(Uk38~oKli#DU)A7=Q;Y!B+UguNO%uHnQ1JRD zLE?dJY;3HzYSH5B1T25PY|AhVfaUdSg-qhm>UOl{Gt25!MJ4&e9ILa?DM;6b<$6Jw zjLLC=mjs5cS^Bw!0G??qubic5iS6Q>L8<4$wX)W+jMf?~oUYrNffwV|P&;3+f{;N* zyOtNE`9Rk+!?J)DUeqF3ON}P&7M3P*O0ZUOdi{y4;QAV@pNA6uJi)?=<5fKKwKakT z*Z~&xtrniu)fHN%&CL~My;{xHQ?vk+d=o`o=;J)_WCA>5GBGrV|bfEAugJKdpd#Xg|wm_|2* z()BD?urfR^%JRt3G@U={U7)qnP-hKuzqSUOr>zK9t4+$;Y9wIoyhefb^S{VNu$D#i z8mnsY#WeAdpxTlvUv;7t zRhmW!_%sBovuBs(J5ABL<{{ zomjfw(JZ^u^&OZ!o1)b*VGUAv4NK#bI$hK3wnQdt2@$X?eMS9dRnUqBt=9@zzXYWC zKfpTk60lbJT8b7C!;4xqHZAI(SU{1r+8wSmHRoD4s2ffYXL-Z#c|j7|hGBdC(H2$$ z3ubjz=qsAMpl8o4ofSVu9RzM?mlg7s7jb!ZhuEB1V8sV#VW7?s>gA@gfWT}OvSM^7 zSa6=Y>w+yny5R^-8zN-70LwA#FbM+3GP;nyP6vL`G);Qi6{?YdwI(9BqId;>*H#+w zbUKNy7jO8B_4-Ey3uoV$d$*>h;pt5!Ub1Sm_;4;!VzdZw*SQ8M+Veq{V>R$Qh!o_> zGOJLE2ztK(AVu2w5I>8Eb0k+Txw{YPsSbbnc24tn1ILDEq!LheV);EUhb(G*`PhTJ`tkhGr2TKa6UiqBO5p1BZxTK$?8F z=lgJVfHcapIP`lO-I}794HC>V4YAnE3){3#7kUmtvpl_2S7} z?H0b#cAL~ik`DSs%W%j{aTp1(g6pwNSDsFC>caNxOEp~(tXe|asDeViptAVkTCjde zfhFFuu_T(tWLpdF2HK7Q#D(94N;oM@;%N^7i|_+oDD+dDJ@DMj5mn^$OL(6 zL*xl?0lag7YqhDQ2)}J^u7gjA012AZTXCn#ND(bsoTX-07no?-@t{LxbX=1^+F>v3 zDXeG&{2oB^{SM5%iD&v@2q7eM7eg;pl1lGpA z1`FV0zd4a91F4xE{pAo$~M`^6#;`imQZh%^9_}bD;pAsWj=^*R2 z<=9=zry&S@2$n%wf{SDTSXeTPMhV}2lO{;W=!(czjno{i6%`vk@qUFCz*_i120v6CA4<%TFRG`2z=oN{VV|mH2D$_o$EATQ+_$&v6A4d-E zMSx(t0Td8ByMi$J>=HxdP89b;yWLVjzQxS*BB4HuD_ZUyPE*a|F@ z+(}GV&xS`LGj#jVMsHJZEicY~S*$)Eu6DYH7soh7U0Y$aO@Db-c?I!_e9@{#tYDrz zQq8W=t2ROi-|!=wxH&--CjiT_6kiS!sG;jSX1CpjCc><_VUM`22v$wWJ^-z`MbgOW zUoL7$q&}p;I!onTrKwvLt}e`DePeUI7PH!VwX_WgGnkYck_>EZc{m%RRxYPk9}xu0 z=~)d%K4!aXy4l65Oe_EgmWluwzlP1wAz==Vz7Jd1Y0hbS9SMOBh^4k%*gbbsTdno( ztk8FmSAYfH-Z46BTDy%PQqy>~fR$zh79u|z+SmbBL7GAbz!StB6Etvo1YbBT%f>Z^ zHtHK41MClsfzn|Za~7|_T3=m&^~4h&`p^>smQq3zEv0!RSsjFenvyYw*YFQrM+L_H zfsjlQBv-JqPQx8fnWje9B6_%pT{|3Itn#3{2}Gk&pT9KC^B#F&5POc}SUTZ=iYcfN zzUb{WP3z+7M^Oka*;z=RvTb~@qUjqgt=$5>YEiV?ZAh~1`UZm@P2XJC!Ze@_ur_gY zNs*BtBlrw$$hM@mn1v7~0c$2H1BQ*7!b(`@n!d5IB4EAl31S7bYU-faC_>96VW(@% z#cU`=?_y zt1XI4UR?2)EXP?!Xha?LgPTw7^9nwhX4Bj;l>Q z%fS|07mDYPstTqIq8#)rvUeN4pku>o+BjS%0i9WAKwOIzmt=sNn;ZJ86j&enPz~0r z1uU9y#%+xi74faM+Dy|BEL_DoKUYX$^;L>Nt=?P%gP{IRBad;Yrr&cZex#-1z+GNW z(NF~!LJ`MH$nG6uRp0_3n&OwH$!lTqS&j$&xK{WiwgHo5@ZxyDtqr3kSdnmPYdE2H zY?4?p&Vhfi+D1R|qs$VpAbmz011zu$4?eu_+O69CE!9{x8ceusbO6??uY28xYOwIb z8A+-(g+BlrMI7c_9s;)+%!8RI+e+qO)iT5@2cY6CU4R9%53s-)QW3wfR?rYc+V}X- zt;Nf6x?Nn{2ynrAfqQ`>EU$M+2jmH`b0U0R5?Vbf>yly)z*490Z+BYoh&c7Op|=a^^VrfRg>ZBJsZK|V|%e#t2DlZ=#}9>$3C#D{^m^)Sy|Mn&y8QrD19!1wZ3Uw{2I zU|s)ea%lPUlFG6+>&Tg8p@o1QHXELc3l`T?2CJu#QbBZ>kc$df4yjihG_pL)s_`&O z!Z6Et5q2aqq)4Q3(a(u{NX9KX*)qew`PDjAR2=G z*CZ#?Znv~eeHCJ2bZNXGZ!Vb0D#WvKX05#$fP?y8mO6$N=VbATr)Yy7T5;lU0=G`b z4>u%)?9wSJjMnB9mEQ3BIanVRuwdZl!bjt_RtJfMi!KE#O19!fsH{voEW17TfP$5P z6~z)p1FT-0W%)1zgU^_S0BDdwP}6=KCu!tT4JkGWwAHlyC>DDNnr3wnBkkz91l{B1s^iIyf87%(6Ogx(3Jq|3V6T2EM<^h#73f z^Mm1}9KZ_T`tm&)LSwomf5B+^__xIL+dCKoiUbJ7xGUU7k1C8Ud+j0aXS8Y1H;U@E9aQXM2dZ0|CY3 z8Q_1{w(x#ln#MvLY0)7}5nzBB>Vz?ZC{aU?=VgPkz#S82t4+D0(b_ab!az+SSEk!D zbUHPrd~l{3ZKqG4R90CCN@MVZOgCh%xi8U|a70D>sUJ9WuSvt++*lShYqnZz0PDKz zUiXPl2w0zZ^Yz!Asq=noQa*#_YPGwrI#&dISsD{aZ81MCQADB>q*dN?-|=Njou zARCadbqErG+w72J0&9p>ot|2T_0b#>QU@ZP_~Iy?Adj4`ANGQN=*+#74pyqeu=)LD ztEz^1Ujtej8%zw++qGIRzwWy0UQvVfiBG)ky6c$Ff?R>LOFFCtv2-C2DXmZzQA0!| z0F+rfKOb+NW&)OL*_$GSF*PyhDcaQll0lY7%uj;dt6-9jf&||Yu)1BN7elOIoWi`y zV!0Y^&{3dev|T}zS!s`;<~ivWh0mlgfocQLF8wBs3-rR!0UM&c=89Bt5tFpVGlzK! zE9H>7;9VT6ZM&A|>WmJ0qJf%jOPUFmq?}YmJ}@9rc&jDFwf;U>Do3hm8`Ra7szxTX z)I2fqd6HZQ=XGkN@^XYfheF_ip;fEgf=z^Yn;v5e{+2qHl&J`)4MJ`6O>MflP6r_% zJiDcLy-1`N;hxrEPJkat)9wLJ#Gg@7;SKPTZku&tXdYuhAghDX>JA>Z*3LDTR~ST6 zH$WdobyQRmt27gA8&tzzTAI5>*sldxAARIKA0=34 zX{lDUmF5OiU!V%r%NIn7$#q@g=&c~#tj&~Sc_$}8)qBK&CXnxgIbf?^VQ;a8Nujs+2qz{v)g)Nk8T$Fayn`Q5Y- z@*ps7YfER&HCG#w$zN)$ENRf(z&Byepd}fdjt7ZnIM`7J-Bt-BUcxvZh(^T45ULm{ zZZ7fP9IOvK^zL`R>pdTT+jXy?%_4=@M9f`Uqa+WEHhqO%Tk$}#hcM2F)VSKh`3hDJ zO&4^k+pUq>>};&BHqNMAn&#jb9Z$5hqMkAj=)kCZ^z=51*X_0$4y!C+T{Q6=hzKI$zMU8B@?9sQ;48$)lne~d=Ru(g<(k@rP1ibx$kavO&Bbu*5nuh z-|sOFv$@~^5Ksj1R^&w@77~}?!leUcvQ`#gz4|@xdiT5Eefjcx-g@0D8p|u7R~_Y! z#IM5TaKU8EU0%TYjIbzRHS)UrvuU|~FjSmBvFe&)1XMm%z&fMwf`y?XGl_%9Lehrf zWP2223l5c<#lyaRpogN09Mi$!U@7;5h}<*v?WEZ zIasika1t7eL*yS)>5|5cI8S#CQYFH z(NMy$cWo#m&@>Sgu};OTJ1Be?;ZB!9wB@Ho4!AlH1}Xe3Z^m$@up5>aMk)l0U}QtM zLRXc1>PVNg(H7K|PG;pKPcx^k4z9e6OTc>9y8zb9Ua<^8?n2=L&$I*A=rE_Z0#^l`Ds2H0z~X-5*o+0q+NJyj3U7AcJuTN@xhqMNu+x;z zq%-;j_FW*P>MI>&H6ZlCs0_nqumzKnjHHwynR)oso^Y9907XnwYptg63aod%>)j9k zFYg9eFSB{&sM3fibwZ_4$)MY{cdM^G-paQ`rGl-C6@_fTR06@0*tJ>rDe-6<^Ze7I zOuBS-g(c6P>)1gOkwE!c(^!m`Q&OUAA#F^UZi2Z=Edc=TbzV#l<}&3$?oPg~O& z;=v(%rirg{Uc{`r#*t^(elH3jS&%7GQiEL!x^DMq$DkVs6OwGyk9?!Ge5UPtM%(sd zxDME?WISY2$;QjXdL?X!3L*%j4>IG-Q%q5c(}G;()i4`aD-8i_Y3Z(yeeB7nus(L( z%U*Ut`FC6SRV-X31y#?xwlt4J-x8$8)i4pA@}dOcn!PDKaDtY$085IZRK&B3yzyD4 ztU7vEk`9m~d2`o``wSHO0RnB?q~X@}HaufWxLoKWG#9oFa3TKo99YJ-(e0Q*v>4u< zr^nO`Kn1xCw&Ea)9KF@SwGR=hmI17+ zqBM9KOJpzmh0lM1NImuBQ=j_%m%S`f@v_Z8lqEQJ6be$F7)XaiaxbO zaV0P&ah?H*C`(~ZaiY~QjoM2$|K49d{e!Q6ss`(;pMNE7JG4-wN|3_pd2>>3i!X_3 zU-Ds9Fp5*;Yo35-E5|yUMWpC2>_ls5=S~yn3-cwaxJe$bGFmvHsLnDc%n0HE&bmX6 z&h(5S7bzm10iVZ`c4T&>A+klH1w};YVo(_kSX`$Ep&>&^M=%b(Jj*0;Boxa*SP{ho z_>~|{eTm-;))E()6M{wR3RQ%kp;T0`n9*q(OOp8Ug#J=u73#JPGAQYJmCahy zq27Vg|2Xv}{UuKnG?naWa6z!KI;+vTV+Cxp1YC?I1E3W;Ns!0$2m)sjB!dA=H=wYD zk0R1l3fRZTz==?@2yT>a;X|uQRi#y4eWnKMQ%`;F%bx{UPv6!SkZPoykk%^*ywkLC zUyyP@Fob*7v9#~r5X6#7$TMdFmdMw7!*_IEbFH~_DpaZ}BV|MAm`k-6+=)XtC~_(X zRH_T9*@Qz9>p)!=uyqOr+*7IZMn;EJT@^e4@;nzP)uv!a= z0%U%mz;aI0#{Dc5BHCsZX|Cpyz{(`$74`Ia6IV-mCA5ak+5x--0$*0==WsQctrMGs zK-%>Imu|XdSMs_JvsI2r*7|zef<}?{)DbBTVgxu5TS!MkOZpk;TcMRKUF&h*aiN7# zAjRK!6orIE3KpZwGkvdc7U9fQu0l?&Tts?)NQdkAR<(ZQEar@W-o*D*TH5jNAHNeg0U)azP+fNq!2>Zl43+0#42M?tI@4} zmQWH1L6~hZ#3fktg*h!1TxL0*O}9a~0$*>wndJRbpB1C^`3pC|jlh7@8M9l139_Ca z1=mD5aO%A|y9y(CXqD^tPO%EzHd`?TEVh9IEXOrPeCnWto-f#hGo+>)Qi;*&&pI?t zjAac9k)yY1u%rauQ+|ulsLBs`JSekm8q(y)2AYnBn8}r%5CMyc=&hp21E=Sh23SXm z__Zu4Xc6;FfkB_;$(g}A#KVi@DoX;gtk8=9)F95lCBfk*ds6@$yDtUnGkty<-7%4( zMQ5fo3>IL4N874Xh8{4LL@; z1n$x6lk!NTBk-~SHlHf(O#XR%OcI!e&GQNUG|v)vj5fs*(JQlr(req%ENgBPpclzx zQU+Z+9>7$W1E^tDC6c%t#JnN_^EOO6lwh7^0(+mNOgw~{7^-}NP$!70S;e2N^*LD2 zKL@ZtVKy|~i87TkCs;7`3$SbhrkYrJip1x*I=#6}3A5*K6Mth47W?Hl36`NE)}Cb; zs?^6!fu@m@O2eMmEn(8CUr4PLg1VwJMXnm5lLSHlH!tA|43RXjDGlUW)5PxSRuFjz z^CJY1T`L<;m}e=9vKY{44f;6J!C(;287lib5$5LMHJv{~vZ%=j>59M#sx$&vP1>wa zJ@wh=pP^(y6;&e`oV@9+5 zlJVhWcM@2}@mK!KXMX#)KmDaIeerXj`{v|9K>z?C07*naRI~4Y|Jmn$@ENHt()9_6 zhpComTFP9)8o*2_Xyb}$i%`5F*p-(SOvVdRFAf{ zAqHM>tbcE8hDp-z)%|EJU4mX1QJhKbmC?M!525NxHMCZ{ji3$^)pgWx6GMTH9z?^U z*n<0n6D6U+g^Yt-^zON zyDz-(!qx9^{eGXX^cCwfb(N!$(u<@??SS+XA5J4Fx|zUBz!njyi&ZsZN=*#^dR^FV zft$7(Y&>8;N8eLP1Zhuar`ftp_mEk1nFIi!97+N~qARd8>A6_bHodz0hTW8Y(1%Bp zmK@s@dPS5hQ`C@*i#i#_VVoCb9)w^IU=evPS&isI5Rp7E1(-t(&pQ%61*~(ZXao#9 z3bGs~CCwtREci{>oN6}9kN@@suJ3YvPr&*k-?3o?x`LG^K-nrestTtnf+i2mB(`;Z z@r5S+@gP{liM~INcvjif+)zr@h51VcpykrWX&Ri75_`@HsicoBA8P8b&l-64dMl7C z{NL<|6`<8c{E>t`$Bp36SWRJJvD4NeiKbXW6Al%JY~*!x< zRA4w53}G7dT~C=W4K^82|$=aviYivES=MaX_oeJb{6yKKEJ38mYkRCM`<+~ zm#l8Y5iC7O*R^0h^DM!V0xf}JMw|m@2JMyss?d+v7(&7xMKxD&YW*ru`bdKR6 z0bp-sLkHzBXvBdL6sF?>EXVGwt>YPD`&Ck^W&na`cNNATET*k(ujTZE?yckcI-Xw{@iWFEca((x?=bm}ynLi>}>{(*2m;sn2cFV0(_!8OJf=_f! zbhBt{z$F3+@*UPX*)~Xi%N9C297H6gJdPf#^c}D@82hz#i%r#Raq$c`uM18z`Nm3P z#rE_jr_q|a6Y?r?0sv8Eug-OV#N)(OM$GEAV09dmfdDnqHhNyv$7KbiULZqgeNd}- zkOh7|9*c=B3(@XCShgD`v2#rz;zKmay{deS2jwtJy%*K`8>|<<_q`wd;Cr8;A9R6~ zYjx|UcEgF z#4Zj?fMBJp3T5SVHk%Byvdkp3_GFyF@?frFOSKj-F%$Zr78!Hz`D|M8duF{9EUeE+ zcGP13j`R+wM6w+sjt&-eL#7n-8m!);{X?%)PdaPgT^XI2uZHUfF4G9QM9dawC_w5W z6oSFG%#NliQtZJB909b`STdIyOIjzqVZFKDqeexN$p&eN<1LDrBs@L%LMgApow2;n zL^R7q1)jVGi;jqlgZvQ~JZx5w71eY$DM(3EUswavn0jwi6?F1(-LS_3EO}VW-1~Gk zt`G`U>E8#-b^X38oIzheWxH%^45Y48w>xBW-maP`R4zrT$Dq zt{|tPyoTY?k5Q<)YRcB+UpLM*;l-paz~o61QOFp(a1aGuIPa`B8XHZ>*Cyf>5ha%J zaYTVU#1F9gnjYvz*L7I5r*kmbjcVic^Wx$*{Puu-;vW4!*k}=h6)@gm$p&w!|Gqs&^H{;l&rPe*2rxJp1fldN>c4 z+$w;?t4cEmKzT{=Vg4K|*I_kAXM>p}(Yv~&EcH(Jbj`tHDa=svME&!lK1)q5Rj9d+ z=$z^!VWEW7MAS|Ch$Qe_@b{(lCT&qYxDlkWx{%~~9$gBI0IU`)00@`EBSi$zX(_J; z=>S6_Oa=9fY^z6IhEC;(V|qrENm88Ce(X}UoG@~vBnANqhwR*EMJ!9JG8@Ft%Mxq# z{5QVwt#5tni?+qCJqSunM#UF#d9ct7Ze8ifAv2WKCCik7NG9)0nru}c<7OspP3`QW z8CHXn+d8{q#bD{up(S8#aCk|ux1^<3EjvU^hxo==Z#GuJ9y~nBljtzyxB%Ek4@3!g z`3BRuZT1;;Obfzpxx@igOoXCicnP+l89$sMv@~Hs6gC`_OoQcHMu zTM&YA?x^a6?Q@TSPFps1VN+~F+5ZkxSY(kJ`IKR7G@BcY?tLFzz*Ek|6h-WAKw@xp zHrBOscpZnS6I#fXQT-4x}fY zhKp`4W%qfkj0w5WoHf=d;5jz~L&^~KMDz{GwP1at221KJV%;?bR+ps)rpoa~I1d9n zN~+~brttP%DuZLo7Wi2_SHrV&-M0L8sh#B=xo!?G^x(m3XUgk$j_Wv-!|j1fT7iZEUr zvaAP7MxV&HGOZi@BwG}wIN^~1*kM&~w3eSUF%thS4pq zc&}$Q#hiD51_BAPeA)^%^=`7)gDq}EXkGYqLz@RP?arK0Fk7|SToIN+ChW%vhnPZN z$Z%cmkp#RB;o$%QRB4peVb;75XUh;t+pt`dg;rCl=~iIZ(+Y7~04`W}m>h=35lnv3 zqckJV9Vi#eI5f%QngvO_6BAyAXsdKc@Xdy^nF8x7*K;ocOSRC5WHF62^kUk%y(eWe^5by$gcHF2fRU1|<#Iu&SV-F_VfCJBh%uZp+2e{$xsmRc+_?{rA4`ZCQW##XtMA zKmS8%aqg(4n~o}$$9wy6M`xp`*6unzgk2HDNNqI%m|_p0DRHRDsdb*NsK6zn>rNZm z>RL-{DYR;vrOUvUX6o#S_B}Nn2eddr$E22&>JdVAIBMCo9E1>_3|b+A8I4%cqvEg< zf=eSsNEX6;FiRMHdo)m79IzBp|CK_;kR77n0XbQD1#8bBC#ZYZXypYe)vP|9?N0f< z*d}E{Fdf825pDkLU;KBhzxeSD?qp=uVCi+wl$5*jO9uzrDj~o&UXzkTPpbsQIq!8B zV#5cXc$|udgR6=dw4t>n7bxnt&_jK7X+^6Ug>AXia`1Yl>EY%)Q57blwN?vK1*b0A z4q*g9Ym|^x#*SeFFjcvRBA8H2Dy_wIfdqN!_INxQ7g45;sLD81K0>@Vq-Ms0z^n74 zY$gl_*)WdlM=sCYObSbz0b0BckAgM-t+wbYHHfh5GLqvM0a3csdj z>}WVA_M-zZG6onn$Clce%>f+o%<90#L&?k&EMnA>27j&Y%UzRsk&fyyl4`sYI3c^7kiaS121q4~nALcK*nW2=kd>*}EKzLA ziB^NfiLIvQ`fNe*Wkfnj_|0WM2p3%N3X_4IPJjR}lzyXr7E)E?K2vm18*XyJApxC( zM0yu|I!}VYma0oOU>T*5h!4=DLmGX$UCy*5P(r6|^1V2T2CP)c1wi$^-gzY|Bprym znW2E*L#c!H1z2t^PN1OuBxADT z0IeP1gf*K@B~{1`5^E};X4K}yz6o!rBUn&sNPFeu!=gHm$aeSc8hg}q&F`N_2u3xG zvLsfWS`K8*vSq@Fbb%Y)>1No639@~|WZgYtIk14G-pSbv$x*dTj6Smq1S@dGFEYyz zt63399)2(NZ%>-Xx60|bfLkD~#k0)j+-BWSPd?)*YL6?902x}qmgSf@O#oZ2teWF3yy2$BFliAqt~LxFxy`zm3=^^!p`Tb96s&0NZRF8RVjbgCq{sbSQhBVL!{VsCYiq#$mAjlmGd@V*TekFGO;X zFrRAo0fsh`xHQdtJl#LSfBTh1eS!k?;hMM0@|KcoJS9%EyPIgG1=*zrgSa%k&GWaV}Lgd!@9(jrQ4GU+Z8Bb z!biFBMaK+#Vj@h~RnN*OKbea8pqkXiVVn*)dW;}E7~};_Mh%_bQWQHlxhd6j>xOs!?jK|Q?rU$7-V!hB$MvK{z54(h;Pz}b+uwiR@!|f2 zQ&U5J)WtX4{+2i0bt|wcrn|d$-~INt+BUu1O_~wpqxpCURk+f>Ah7^eU(7%FbV6?-TLq#SqVi#?0Uz zr^6dAE3odoDN{Ky*Sz`x9jdFHYY6-bXH9e&<^V7RO4K8@# zNJh-@I6Y_S?XXWVvZT0Gl;a}x;WZsjN;98tdP&HQ#28v~^Z-s(_tJ5hihRVZ!)MIw zl9%Unb@V}ymD#LP3Lh%N%u+R5BZa^ZGSa<~IEaimRpoSdHo2(=>$RJU&FA9&e9tCp zll@rX#odET`}>zp-gk67gT;iKo6O$v(8CYD^S;|f56d?^^68>4L8I?9a2sR);MQ7H`KjfCr$^a zivfVJ-IbE zytSOKTOYdr-rLJN9|3+`Z)HxmDCg)mw7;`d$g|RDZV)F^P1ON4jwncvw=_huvc(N) zRksyqAy~184`y?DF&d@Z6oSK>%w2c6orM$nk`A|}UzTWrhC>x5k(X{$XvJjAC?`2s z1aPg}X*|_eqZZ4!2&AimO>+eTCj2nUOYX{W?lq@i8M3UG4Ae7o3jN;Qn@(Y~Kp?nVpWA^V0C(6+MX0~wUf99h2xhZnFINhh!|Q2lBoa^|;Q z`L90w;Sc}uCtrWTmk~MJy%s8NC+PQQ`?Kl6{`At`-n691vO>$NTb616R*2IB54=TK z*6rgryy2Ex>d2xhBdI_!HdHNF(y}Ix1h19lX4~}HuEH!PYv^KKC8p&JOb`+*ggl0Y zD1^-d4qIx4aN}7COma^;du`t}b@q{ku4VgqKjhRw6fo~s2|o(T@dR`nm${^8n}9Vj zO>Oj~Up$~FK}mP0pJ0rL4Jb^7SZDlJkyV1_w%Z#U8y9}}%@8bK624N6P7wY}336*h zunsTn9vtsq+MP~w`fs>H2+}PO>pZ*tz3;u}&O7A|%R0^}q2uCe1S%MK-D6vfir`e4 zUMG)eF0(%;Bpt|Nzh7Y}8f89MV9=rjfja zeaEi>*>plL4;oSL{N=s2%S!Xs2p6uOj0%|%52Z5|h9R0FlD>3wX@3u_+=~Wj^#(}M zTiyg$2qs#+0ZT%h>13*oXuK=2PLis2?}ni=87k1x>McH6=bEcM$dt?EUzR2?>;S@- zX~`HLny~4y%Vb$RfHaNDaJ3mK7W+ ziDT|Nkf(XMP3^3PAnjlT`FSxC(wD2o;<=9rLx~HxAmfoT@I|$|yT2#mHHswJw%L_( zEZaqL*7zsYDCPhah=c9`tX(pPW3bZMmKUXiJMX!NZttF|yaN_=2i|FSZ-4*bV0U&m za07`Ms}Nr*E4^N$HdnfFYU9_|n&(!}olhcGDcE_BQ|d#Mqlmd>U+N@mFy+6z0CVl9 z`Ea|aw$eO>I9y1Qev*c^X&KzoZ_~7T5ZRu~oC(5d+l>@u7&Gq|v8OD}hUIXexMv~Q z3?(Hqkc>0aFoA5b!kJ8%h7u|%2EHiom_kryOb=uR2hF8no0c`j1xTP1EK0B#u9N-5 zv)$vf+U1q<#ut~sF>{TR^?=psqsN+W>6z)q*pR=VmW>gdYnqQbi8}V-ofz)uN+(& z!)&DY-*^9;ZomC@TB)*vs?QLdkF)sJhaP$4@;fhI==Z~$Ur*yGVdF4u=!<}GO_vQE zWD~HJ)zyxP7%YvY6&mu&!IrJ+b~0j%eGj;=VtnhjN*ioOrd8Pz6)`6 zeQxw3#MFS7@Z+%@Sus?5ydaK)Kp_~OOnF2TxX5xms|qm^LP}YHg`u5E2m-Jq02fQe zu#j6&#SDJ)x^3jaPu=^(t} z^$$J#$O8{tzU!?}(fj5;5y#ZfPWz8FnGa)g+j?_(S!>H!f(Uh##xjdw+r>z_&pn4F zF0I|_nk3fJ6jLPq3trF4CzGAgRszM*q=jDcwl?=cvLqg3kcxvWRqAd&lbTPat$rpz4mU?Ec=IKLbzW0s~ z4~~y_C)M83tcFRhnh;VNOvI?SzV@y6J;?RIW%APdcIHpZ;=e;mSJb!lmE~1CWO~7# z=Ni>MZ2*j$mqwnWlfkzjII`7G#ON@Q`)?qQL(rB7J-HzTkrJEy-5DG__RO zb7n)j6~lnTI<#l5?8&fIT-=%70pYkqTzgHLU@nS4(RIn_LL&wlvqF-U;laj3W~ABV zP!?It;z$92_YoKt!(lMbwfEI*7owp-T#r5Xxhn*Ms@cKrbnp1l$4?;M7ol|d>tFx+ zTi&2Rq6%Maam*R3~6ot?fTaC*HP90rV@CAIN3?1rC0jUz7}g`n1kWbTqg znB`Q|OWBOFVnJuX6lk67BP*5BQRb_8u>J-3@AC?*Z5i+Kya7TO8ni-<4ojOL8+&x_ zYi7-NF(iM0icSvpW@UBo=%WY?5krjcdFa7+KA>R2df@U~-+I@bx86#^bqlIA5G5lfD&Q9KjQs<)wQ025^?YhQvZ}TdW1eMlAhc}v7*va&^w1*@zU{ut zO6eYW@WH!+3pd>qZ_BmX9&Ym!GUn6LIxuZWGtfMavUJ(ui5=X{mfBy#lHJF+sS3AS zgz!k_BXqmEit=SWd?9B@m+dfVN%7_Y5J2z0p4Z$3Q073)E}NV?!HL8m@bEc8rOpLuP#J%X`tYf@pwlC ze$29(K3hxM?EiM86F&^YkxH;^leoZKjV2S2iE6sX_;6=3X5FTm?MTK!_}G9kmjrR- z@r<)`NpDM)G7)=+&znp^f9c?T`<$e}8%6m~ zKlI*v?!W8KJKu8atp(KXmhv_l1<*cP)5(O71+~a&$gWoH4ngARNk@wI+RECRbV<~E zYcO81Z4l5c*_#tA-PP8w0qfshQ0*LpVj_7DIO8HTx`??sD%CdFvljSC9EM4s2C5j2 zwyRmSO~S>nui)M)T*CesUk=p8?DtvnshuK$;x4QGoPF@zWOl2R_P=D1jkfB6FJCt8 zgAn)pP~{d?^BQ#B3wHJ=)pU0s!QsJPO|Z60uu{;2TW-l1LG0Xq@9h&N;-^dvj$s$% z8u7XzkmfKi>q6H|(8&hs+G%G6wOkj853v|-(dAFv;z-L>mB zXT&(eiv|35T&E05;g*mp+8bVbRq%nKW_+Krc3AJr7jv4YWY${7o47F%JpYt?t0t0H zonC~%_f;2P&yl>W<<~nY=Jl`vn{X_rI@+%$yO)j+lwYYthHiPoEhSkW(>=G`|Hvcv z&eXaa9ss&pNR>t^Oby$Y^D$KS%qfr1RGETA)Z;}r9ruA*>1_mJ@(j*gcMK#>o!m+`gUplyiqb@jVGE7yyIm=4uWz6j;Ip-LWvgay< zVXGk1r}<=8@|?5X$#}|#V^Db>oWZdUM%0GPi1*c&7pL1Jm&Yf^Oe>!p5v*HSsUU55 zo1{8;4R5*s;YaSh`|a;|$Nl%-bIYY#30MNM~|9{o`uYW3Pm~+{WhbRC5AOJ~3K~x_;Srm=PWu?uvVc=b5P2fG+z&)K! zF6LV_@-RcAi*+tUq6z2}xdgsY)?!r!+2Lso7ho~P2G7Y#@vPcCxMNn~J@Aq#$E5@; zZWEW}TbVS3&->kRa@=vDItEUU9Uq^(?`XHU{gH=j)^H!~ZGJ0Q>0Os=R{9_~*X95!;1TpfN?^v5X_*Ci z9gpp>QAA2dHQi2Crj+Wp3wwQ$1w`5vwb764MG#fvq3i}C&U`WS?1z(sqm!dYPj+{Y z2-ZW72>-n2-aD)E{tu|M`vWzPAbp2q74$6SP?$rSHl&M$*@n(~o9z)@+qDePQjk(u z4QV1{>xD19iayLV$PPrz?zVrN<#H~7wZRHHtTZCp9d_12G=2a7qcxCH%Yo+!U|*rW#QTO;o9$tdZI;pH+|t-U?zBF#8GH>+47yvR2Bl$+ER za~BwA2)Xl}@kAYYwL2bejV?~4$UY^@uC}-OMj&C{yv3O_J~HpHpZ1>mZ2oT7#30(XwbUb+?JBeljv7F%jL4*dj+vEPs@Ty=QFpiNBK8f@5gh`iJ5-`w7P|`YYa*=Tc4ZO6i zbGzOiV&;hiL3rmOct4#48QWHp6}!9K3xiwvawsSW>UJ>%K89(8K%|1ICTT*++MOcu z-akO7Ak^UvlefS9?f1TgY<{BBIlR>Q-r>RF;Q=&sS9lid12lpSMuM_glN$21eM1j| z&gzQh*5e0@HZ5E2tLsJkzxC-)fBN@+>yN(u?QeeTTi=3c{ly>t%CFpxpqE=E^3%!* zd>to%)b=dg64?buq+aK7!I16(H-H$8nByK+V=?SgN@h8ci!4OYL)6Ue64@@qni#kF z7fU;=SmY>2q}TZ%866xl?;x8+*EbCE)R3hE)erc4?(xgI;YIe)9PUjIA3NS-0`cC5 z9)gv+d>@5M#7D(9`QHEZPw&0={`>F0=k}ekqBFyqI&e0VmdG?@JABoVy53RSA8@B0 zM?#^+bmzv;d~M#O|I9bP@eKm@&2N6=e~vRxjY_gN9hmjl$7Qn&?RYeGe#Eq>2Q?HxUSa!JfOi}mn)()1urg_QW)ZvW{==qNA0^YU9%MIcqx z&4%hCb>>5Nh*1!TYOC#zZAXzS_r9sOE)78+n8n?kgLU<)fF+IR-}=AeK!V#sthXoo z5_9uz?l=fv%FS(=%d-4zP7q+E?znjIBB(eJrl}$`WEphAgi9e?+_E(}m#!3Q)&&W# zdE2E#(x8w;QQPD;+0%v;Pcg&n8aL=I=6EeDVJ`Og0AG&w**bXd{rAH2Rq|GK-dak& z?|oP(*ya1)#P*Znpq_JW@b-`MB%|bB{J=I_+B*E22u4g-NtU#(%oyY738acC7sRl zwwM~MP&I}q%L`%P4|y=(CX5>oB+*OeE$3jx3=EGB4leCo+O1SMr_RFT3QlUW0flOeitUKp@Hae^{go@*_YFy1Z9y>n%VX*dgx%(a`c*RQg zVbjCJ-_R}HLEnE7Y%AMCXTWYq{q}6=fYcWH3dIt~B_J#l^d+t>2kWq&h15T``FX z4Fog0L5=G&W^j5rT>jQBfw8~>UrDk$YcS0FgQ04R6)8~u zb2=IC?CcDIRXVB)pWBemx1*a6iqo|OAudy*Qeu0Log5z>!ott?Cy|sU(`r%QQ5lbU z8VjZa*URUvLCtzFtksYjpzLF3vM5L%X>6{qYnz+`P#fw;^4jx0O%Wd60I;6px_b55 z?|i#n-~5%5xtX%ehTCd$64vZp8xrDjf4`mY_ zc*io2(ydWZ)(Piw7|#nZwS58An94nor%EEmRbpBs7^;Y!s1x>_c(Ev;+3sUku3R}e zIXu`uoJMk9DUWt5yZL4&_k){%>_=Z^F~8@$@>Ob(#CoNtrf^zXTWd%=ZAbF3iQES! z2zZML?wi6Kcu%I(g|?86)8fP@Uy)4#zWd^f-@W?W^UtdF&zZ?&D~&RhMba}3-bOo) z&-1=Eej=#|-;ayhmR^J!f^zOq)yb4`;yV%q&35Rze?*@>hmwu^(uAA1a7A?7(bnhdi+U|6qYPl5HS8(+n2 z-YZ}E%2&PSHQX!af@6C>_M<;~^Ua6=q9F7%-c7zyyDhcByy&-MAlzwo93SR9lkK_u zx;Wr@A#cxc@)fl+z~B7Mcdsti2_=i3y&8*<@FrR;)o|O@aBYDbuKT2+7`^mQ(fj!^3^pp1p(J$#i!Qzo4j1gieZ28nP82 z9+ZV*0 zikpVpMICbmoK|gE3M*Y2!WkFJP?)x+G2h>-Tjr!;O%)Kq$Bw@;pR)b#)$hp=Db~qQ z(Q5$4MuVJN=DIzLL`~o9NmZQ_mSH~|jYbQpfqCBD+Xq$N$4Ot>7Z})Xz`i`TGEa9W zbzz-&lw+||lrOloU4pd_9&j+(yF`P{JT<;-vpFGF{p?i@Rw)! zMNe(fukL>{cP{@hSXa_|+>0A4Wm)WSMAqWX0J*CQ)gt6>e=#L#dWSMNlkupi4v!8# z@W~GWq}kCi*1;~n9g(DtL{P)ykc0<&jjDNrw<>}cJM&O`GC<_nP(w^c zcfR*Gdq@FS%Lt^ygKNQrB^el4AN+^FdX$~k+vz~W7gjTn`y|@j=$DOi(sj&6g$Zxjc$AXOuj}f={e#2flat3kcye-l>Fy{0^i%IUKHimJnIAy6j1N;07oEsNy4j|r zjuVb@2v{D|4Ftkbd)|4SwjQvu*H3U=5*a0Al|-c`Hh<%V1z3PefpzsUQEyT4f?snr z*BXUEGGx5WQA(C!X6$F!zXYA*iDFHwosa$LC*Me8bZ~rhX>WHbQqM`KRKVifQP7}9 zGK3LDti&pxAYe^t*mBu|x!w+c0Tvx;9QW%Yv6Wvs237>?cz^Pb|KzX!pF_MF$|gcM zEO&O)wW%AX3AJ(=X>uDmk$@#7Vs+0n)#{_O0~?1LCOAMCnfbgIN4}!yH*2t7eBrrg zo_Y2;H5vJ<+f1s<1u6JhQ|1kVt*ux#%gT$vpp-sGZdu232VAD;(p#ejc4`?J&Lc#?IFu_sxrpmIt`pM(RyXFktGfMFLdnznj03ErlPgz_ z4o|Kipq{>wVC|1NggtM0D6a)eyl@RxJaoYqYBgknoqH3yl38#yMAS6+j>Eg}DBxJrmEx(YdPXhzh1l*u*}_)X_hLFq)R&!VHcLP zf3R1){T+YuSATK?^QNj-iQ%2mkWZpa1H2{@Wk^{=c{YzB4RTb*E4@xV#?en@8{z6}#Ql8_H(G zJjJ11-;0S;Ofo%UUE3PMVHjx<>U?AY*0T$+zW)m(+O*zPAx(^aSN7*iTnl_FB4uNV z$h*NCY^yV!Fv6JaPH+0dKmY4zpZ(ewerAVx)0tS;Y8b`2I{uw;Ih2fGx$tf^k*C=g z&nP>GK(fvUrwlY!vls(qzUuOOJU%))K6wD*-<2fN$dNp0HFBK)AF$GlO)qTm5sh|v zKTU(wjkk1_4v2wt%rh~gT%mGkH+}ot&wTgl^MCp8NTv4bHLa)Ta!{*rP2{fyOX_@J z48kI0T@0mV_risq&suFUM{02GnjqFW{vf35%E^EH+H>E#`uw;5+kdzKXgOLXorkcN z;4BtnbVE~9>JGb35kvIzt!ws$HU43+#*=(oN+Cn2E225u zvg@E0eAtW2`U>a56`_W+OH(=3{P}0EA{O|{W2~wl?CmIPlhH88HkV@9eYlz)w282`YmcG8^7T@H=#i|ox$ZJ?Eg2P{ev$*H(yWx za|rQhi_AhPTi#V) zOZV*b4hT3T>#JY-{8xVa2!9yE&d^iH-#@ zRMt7lRBnCD+M#2_P~wrOVJa-75<>%a4gwMN`@ZhI6s$)ny=3HdrKW_nVohW#35I1h zkoXQrrc*L_EEw~Hqm%cY9PK~-^)LL+)1TQtlF;zz0M==DkBGuV4&_s)(tw-SMial= zRiee(9-P5UxkMb=P%e9)&%@$T4>@B!P_`sUp@zrDR}f4;27N#LH%~tKu^&GDo6|*Y zunq)w4-aI`)Ekc_Dw#1?%<7IBqflElCfo@+(6mmlmB=Wwv@CN2J=q+Ai8X+gmqw@a zQ=hsPtV78`kGLu3HjW(89jB|^5H^q_65J3CpIT%S`nrh}d&kq+?*84s^Tn_K*=L{r zy~E?9D_5>ON_TYt%U|zvAr=H-GSmWL@1! z!IAyBywGW_X?|bLsLqKhhYi(mVa!_s8tuOW)&V;q(ybwNu(~+9ZNx3Yx;A3Yemao* z5;}dR&?iE@i!vSHKi)C)Ghcu5$tQnu>1OtMAUMSNAM62)natJiNCE)X_R_)LY+fIp zgGHAGaXh*Ndpw;nlUS28p|e#@z)r!+(%DBIJ9+eR82Ar9e&wIO>zDu2)gL_frF-8{ zsph_#z{YZ~=yE*fD9=RIGx08Lc4~OeVv>-zp;gH(kkZZmeC$$ErZ;%=+%y|RdcBQv z8>e95>(f_m+1jcd%Lt#Q?r|=6fi^=q1sZ@biYw&_C(=d0lR5sqU;fyGZ~c*%=Ob7n z2@ntVj`wdPon8>~tY9WZK8FTe0>x2UK}O!EAc>l{$Ye(I@E5cZV&4b_!X zN1%P29`CHW)^0mdU2{`+7^KRRzvAz zThvHdhi;>oKn*9mLL16q5vd|9e&7HT3un?BuPR{1=BCxF3q;%*B4>B~>@PA<~`rN`^{n@9u zp8A*+O$Ql5tb&9q$0uAsMCo{lK4Kh@ ztzwOYT`VetwZ&%ESbSow$;`LjHmM!q#Tu-^px!~)3$n#vH7CNn3m1Z*0)M}91%bl9 z{J=*)^t$U_@w$KgzJrN~lQ3^`q~T%%02S>Qy!ON4ZS2%+IdNE@8@a=m`yyRnqQ>M4v{dG^g z|NU=!HG>+CnI0bR&*-0IpDk&O9oK1IGTtKp|LXd>-Zsu_U2UMdJ;}BVMOCTDAV?!5 zJO(|4N7xgVVZ~ufo1w=BrkWC(?5&YMFwxBT*r8oBDnQScwmY#SSO!Xe&7T7{4# zz2$)td2Zceuy}ffm9257Jji6KMI_RyYPLha9<;g}cR#!F*6Vvu-kkHDa^CK@v>Ccz z=R;TLTOx7ui{|lC)y&0X+K^Zoho=-3x#^tWJsMNB0#W!h>ZqI~X1OGRV~o7}zX1#C z6jK<)MG;s@rQ}RpHY+);pr|D+%G?a*0w^z_1;nnoCLR6uH&nHf)JX34-Xc_{?L z<7t@qf&ckm|L6bx-{|?@|MkD{T!~6fT2Ay+D7@%4rz+UKhsHUTqKjtvb2d_Z_98M{ z@}hdPR`BN^Wp_O0HWhPMV zLC;@Cg~68SU^Fd?U3I~cY==WR$DDfe(8U|SKY8$U$kjg=L-=;|qtiLyxK>}j2bUpQ zb=oD8+HBfQBJZ}&bggD!z^>nfS`#fXYFgU2FU>9Cm^c6M zgFpBeUPt_c9~}Qr-gSMJg7PF6^DCGH9#3a@>MoN$P@q_i`Bz2Ghq$##QTM(?l?b_>Of# z)Mt2i45f6??1lthGAV8CE|3%BNip$6tZW~H^@AN?ozS$r#525@mrx-C3&~z`^7JHf z4Fv4GdJGy3;uaI###JMzJJz&*=;HlPE*y32CQ|8!sAomOXwx`lYkHLrDil5mET5~Y zgqQ8to#;Z8hZXv+ScL?IUh7{8@f?GkEww1u+5E%Ziw6(Bb!L8!I9{t^Q%b;TJLHyX zAT64Rt}Y!nV$#kAHI-#fq@k_IgCpZHo(Yp;lp6}-E)DK0i0!9QDUxIYV=4!*e*7J< z3Z;t1J!sq?oRKla2v(bs4=AFxB874|wIUU5j$ za8kxMsFu6UEyT?yS2!3byB^SSF;_!ZDatq)gA-|@7Ih8w2M+SJR(pMO{SWsK?LT<( zlJ5m|N`0)7)elvME_%hH62Ie!BBNvJJXtl#yTZiyGnRPb-XhIgD>9R4AHfK!ioFdy zZpagKS#&JEas2&*Kj=S)utEKO0?S|y&->wWnHbqr3cY14>x9e+yRqbg$RrH$1C_|x zh+TQ!%)$Gge}0zlS&2T7AJ)LCglLV9QyeYIV(OX4kB}JQ*hDlASq}@WR}?E%UNOxI zpY#{=eL0#(@5ev>m!IHy{q|R1eeu;-UtOk?0HQR}P#D(yjY$$@#3#~HPMR!Fq58q~e;#WV zGtw5aI}fIH^5i=Z!Nv(zeuZfCQft$Z| z;eTXV=xBSAiLL+uAOJ~3K~xfVHkxYp!e-bzv3LLRk6J#xD0MGrcYA9$mp^*+5zBJE z`>yNoaIHEhlJctsu~|15;y$)mq}?NwhDUb4^21lq-9~^Bp+JW>PZ+cHQ5d3+jS*Ns z+50*_dq4e(pUVfZBY@?5=%tlLDZ?Cr()Tdhol#eun#`&iu4ks@`DByLb@_=P+a z1wpi2+)HbA)IQu-zu<{6my2-(7Uzc1foePW23k6;imm0`;;auMJN-mZGsD&hvaIz^ zt9Rn{gJ)WyLx*W=_2Y-VwMT#c^P|-}z0Id%MMp76&^GzZS{0oIE@%AOT&3D8c4TVu1nFCzU4w&r_Vlcn@CQpC7Do1>TLtb z20jS)MbieV(cbK~dhhH#xX=pyu+!^pe7q92+IJp3df4gqI<1es_~MI4E3Hmv?Ve(`eW1;jDOsQzpn#{3)Pez@} zzVU}I{{8j+KiLUZv7)1mi0QIM!D@nKYw#^76M$t3IS-{!Eo0|N#B9jjPzU5%Qjuj& z$frtBU*5W;;$eFz;6?@G2rPJEt;#J`mL~2v`;~@hPEZzCJX>I`ciZj7cTSVXSvtKg z+~L*y-N%pG?J&6dr!W5eC$h5k>hEs039Aiq(6IIJ<40F1y~nlPPzoKCvMR<65xy`% z$4dwXJ>(KMOL3QMA(u|4GBPad(CY`k1C~j@2K}BmM3th9q5f>Ki1jzTc03^wSbN5j za*kW3t9p%#RODSX3&Z57g_QbrxJak8e`}8jgxsTgRUM_S-t{0~+DYFkEhiD+JWq`Z_VPM~^=4^?IF7C#*NF z-n=;!6TPCWbw2_ro?*0t71-?fvokYC zg)|PA8a2~)DMAs0xk+GkyDc=51mQ=I9t}Zkl!EYUtjspSZ6XuHKl&k0{gM?WL~adH zC=^sPSn(xiUamMb zg*q8pMP1*sP<95N5zUa$DR3h-I|@Ag+NZ3DHIbrE3m1Ig+IqE8rG%RPO4CBTraaGY zphkwG9eOtTB*(}xTU%Djc});lf+}qBZ4n(H?)>Es-#c?^HnQSMKBrZpr+VaW4DwFqxc`qLRxC`H8^#>@pX8 zEyz0&`&MCDlMs?g$e3Bg2FOB2&1yoS0U5D1T`JK@rJ{A0ok^U4HF2e)Bl49>EE6Cn z<>=-Do!UjA=|QZD+^=St7H&kS}jj64qOrIV{(3@-l+RzUCjo4 z^9uQJ&7S}8(_0rWo~Vk>X*+7gFj=??1CMAfQS(!jZ4E&LdNPYmG-AdDEFR)eitu?c z$O@h5EXLWhSs9D9<+1zQ!TL;C7DhO^#HSVDj}zq8ah!uhYBLIYj}nQjTw%@oDZF|{ z`4~lJG320QZ2-?&VCb)e5Jew{QU;Cz(FomdwbG)F5sQMm<;)ocH7=KUdzOitNFr%f z%jX+g`gRaG8cfFLyauX^tybXKdAKLsymAx*N3)S$u=6f-rceMBX%(GVHM1m49K)I0 z$OBIwjt>8D_jq2Lni8`@6Oj(Mki-!7_Ub=^_1TGJmc>ZKMY}Y?`FVnJ9K<^UAh&NK zHlD6<16Q$ZiB99DQ)HDtzW0KYiN;ZBTu9_F&VDMT{0hZ2%PeUY(91cOi;8ykM*mDdii?lXtz2`C(*E86v=Xuq+8SIqeNt)Wbas{YgyDOPeS10_sABa4h7NVQQg6_ zbQB$IzFda^`MNBR#3Z?787fi;X*52m8kTJMMBFuW+9UZFC3b^OI|^F$77?^O>Rh^* zQr*^dbmrFWix=J#7i7@R=gLQPat@8NXseK*fyyox^$~#|6=Dqie#~S7Gr!TEEi#+e z2&~ulf5)=&MO{>X5L=UpiBY6cuM_@s>cx$({0!cjb(7Nl^4G@#}K0I^ko!JPi4{zPNa^=+9&}ci) z@~&Ec7)atmmNdkwPrRRIgvSjrFFpL)t{DD`J>v*g^mj}`D>524r7cU;C05v^x{=@&gaN&dw-IWhN{q!PvifWP6jS5?D56z z7@dkiceB^5Srn6OZ!R~%%jP675KVTv>L3@H7*AC(v*7ymdZWozzEkI+djX+R+jWk- ztxDEo=yt`-r`BnIj?8@>ZBWI6SKX8HRNcDY2>BVsKIx#Eda6vU3Q5|I?+^JYkz z;MvUB=(rfMfYkEtUBknP^yH+<`xuKtd=G!!q^^luF#_x0!M7quWUL6RDP*lB2uEuL zz8p@+Vrey<#8UR6j@Em%C|8IyA^21%cDQq8O&2v7^bBHTp2M)s;}m37*+~ddi#-IC zfyoMbuQ7aQf>e>`HkK(9A-{ATxoDA#E(flqs}o~IN7CkOL)Cm&h=yX-*~Hj5)Vi8s z*lpLL@fo!@FhT=b#ck1g_3a}^pxZ4J9h5zs3k+eG=I{tbstL%T!dAy)yM}kg_6c<( zDJ}Jvz(H|Ok(fgyU%h{K?-p2h@7}+A_wI?Q0`nl5*h@j;C1Z3l6o|}Xrmjdq8=g(n zlj{Yh=TnfTSJOlz1?M<8>Sc+w#RMybS})2y%tr|7okfryJAwtG#K)rjxD`6g$drAPu79Z%Rr;5)Xp z{US^gIp)w{G!t!Eqhrtl`O!b`+Lgp*4AhEIIWH8W(-MkZ%p_jDy$!6p;(14lR_7`> z{Nu3+QEx~|N}4xB;>tA{SMws-azOjadJe{42GO+KfP9PIB@%#sSJ80JTX&8bWT+z} z36=PhL1{u&mq%kMHD9vLv}$;PSMz*~NvP4%z^tTAOB_Wk*D4os1Gpxq9af_DP0Mpp zp`JZje3PD{V5DMj3YR*bXowe*yjx(&0;kbkyI$S(qv4;TnCXJydY0t_EHq~+M&L+jUn8*cQWeXzv;zA` zZZeyhv|%_6*RmK7$AO&WnNuf@&b-YnSQV zKb<9%9zT2bPBO`m_sgzO#SdhT=>+K$$pQ1CDQt0Csem!_t`}Q!vxECS3ypSg?*9`9=-8BU}46ttWnw=r(B0qPTWBvnPRyna>L1jY&)hE z2__RAD<1SgARe!YLp2qc%d!q(Act2{~dxMZ3l{w!gG#Tq{s`ilatXZNHocF^YYk8{PvCQVBMhS z_rFloT)9-h!I?}>438ogpc5fYah|2{uro4~F%0CTdbw)MpFX{G?cp^{%5Zafuidb{ zpxdKp;)ho$eZ%l33N7^}>MEEqpd7rIt4up~ZUkV-B?8NyL($MA{}0-&22qNl%z{XU z*YYbAu@pI-z`_z-FA!Lc-(rzOPfTg(mHeA$Zr_gNr!O3bs`-VBk?tQT{LhaH%TlF% z`-ZlVVvrut{~p}Ce*K)BMScfHHpv@VC4y@*0~H9Y22S3-v40D!8w}RZWNdqbx-uxj zYs0UNjgFA>CeqmyRP^KH@jY~W6OGbx$L1FnuC1=FUZe04w!7aDldEU-&@yZ3|z=7i7cj*21@IDlfE?zt} zjmi-^DTf47fC$gM=y`Asg_2YPy<0q1C%TamsK8^9#Lu>Y_15nNSQ0nN^L>h1z>cEW z*vL2?v!mnjtdt^q9EWnmo&z%rs~dmWSiN-G15n*A4(>EN z^ap{p2a*ifK*tN@#&}(4Qq*x2`M|$^A6O!l#Kd>GOgw8OHr^KkkHu3H8QzF7zVzi^ z{`%Ly|9zESEx&!IwHy+=a=FmmyxP8V=Vpuiu35+Y8s&oR&6i|pZKrA@BXkH{+|2|O z$0#a|jb&X6U_pgC53mB%ggpmf(f8BhNky$_6fV(@H-&qX0yLF%%Y|b*rP*7QMqhaE zy)(y8;9NdJ3{{A`_Rna`b!TR0XGD_)N;D4yM)xA9@CHn5cGt*QER{;LE_Eg=BrK!b zrO9lX!Fp>aSg6vO=#NA-S{}#DVq#A$Hp0b4NKMJfR3i5HFMlDd{=RA&<8sv|&kL_o z^hS4DaJ79ESLi;XyzPe_h*dy4##L3Grf39BpNHZgf2a(=;{NY~j3fX$H?E@)^);$? zMK#onY2dO&Vz3mo=m)M%F%qlQjC}R%c?iMN^Io($7^R@Mqvb>;tx9HEW3?!oX?}HR zr}qh{=wGwDV%X3PJrUd`Bag?r4V4mZ`o#Bvb(d*fQJUbp`bli8o5)O}gJN_Xp)M}V ziA;7MS@N?l|H@#+<+AS75yG3~d1B59J(7miq<~LIb(_9NnVhE<2&{V81f4KMPmau% z<<*jrBx2Db|0|i?^GaaJTFEi$byaor$qez^e0d66mP>BK!z>|Lr(0Du$|4~7M-dCP zWk^6#96NtvMu=YXJSwG+1R17~^ZDYCfa?0a2U`!B7lRcou!ZwM+CY^iMu+LhP7rJP z>5bbvz`B3`{wL%a*zhM4*HR~Q8Rn#Mi98v1Y-1y1=&?^75QpuTO8`qLSBP8bmIq_9 zodyr^+J1X;^Xb!dGO4!jd4T}Sb>M;?CE;Sk3w`c6)hGzC6iKE0siv8xZkt60E3Z_7 zW})Jga;Rn{v8_3$Row=wP=^GV9Svee(@-;~W)0ZX?5*3E-$gQAQu9%>L{Y1X7K)*M zz!C-)+1d5$vpg%75c2R)$-uBvoUaX4DUJc3r+@jmE|72(0tBZeJl5 zKYRApt;_HBd!w~tVIV#hfpxEMR(Knl~c*GDt)jVlQP43+&g;VRllk_p4X&U4zQM6 zbq!$E#0Wq^)rfp{Be056Uq`{NX@*%Tl`NyE#6~4kQfd}`z*2c3wGgzMNZW*wU2nNA znk8ymlXkXs_V#UFhe90d!?UNkKa*#iY=#U)A_8jw)xB*{QGic^sk0j*uorTAnUa_T zWM&FlJ_K0%cYuXqPml+)#k7=)$HsR5aEyZbYjh}*k?u>O4Kwx%0fpzBN?@rb+7<*@ z$VycA$^QbpFMw;44N;z+;b;RF}sTR=$W(gwlQss&B*y& zarWrpp?mjsM0oKgzyeg*JjskfAc{Z_gM}VRT_dEz&5lp$U%O?- z6-_uGL1ni*2Ft(&e^tf4q)Lh4)liDy#XbtOamfsA-)RP2N(kC542+xSKfQGkxQHHJ zqE|Ds=LJ8dbm!Nnju>JglAc!&U$}B%=V^GaAGq$#9+0tyh1?J;4o8MZ`H({cL@J|Z z6F=Vx)?LEtGx`G6a2KvN%h_C(z}?Ne&SS|$Hi_LzDK(dwNKEuCtEk4tRrrjeSM+UQ zH3V2Fz||}PRs)L*ppVqu+}v#YemiW~Dk3{yDi>=M`(2GPr~;)BB`qgqkfLftV#@h^ zNlDSEtB3|~g0&I0f>u2Ud)PDT*k}La@_VSY^BrN0%gXP*YtPJ{I0Ft(VDZIniJaiX*s|$t{k7p9}Pikx!Ct-}dP$J?%q!eInta4q!vJLuu z2rSA?=)8~I(4d#Z4+6i&U=hK$0hUIv5mvpx#v&X)1*8v_Ou#A zp=92FF6E*-Db~ToUIqrsh2a`R?;$K^Oq25&ypF~&3L?a55Ewkx@2Z9gC#AQK92o*s z54NCsAX1*|vk_@Pufs%a92$un?g^}YnarM3pQGxqpPxQhFJ8QO@?_)T!-te1-(1L! zpzm)aju{tJ7h|fXCSt=Bvo@YQeY)9Qm}ja`E2>oni%43rRJAF?tYj-$(1e9L{#ZbjvmKgn9A6DD78w{%&P3<_vzqahl#gt{-mWxx#u zF}3s99jKN1M#ZYGXi$d#*xWa54YI<#imS_^>pS>p#JV0_pWVZIk$FRFDyPBW6JjC} z1Lb>;6IlEA?*!`!J!DnlSy?zdoQRK)4v%vZKroF^I;~FoH*dCk>uqF&KIrrO{2V3q z04tRwOibPutg6js;9DN1?is9t!NrfsbiQSBybC}sW(hSN9gEWUgSD{+nATRWtz4pK<>qvZH>-_Ij17;Y&D)0L zWeZ}CEhIPugf~AkW6jhspTl55HJHH)nnbk3*8nWlp|?DusQ?SN3VpB~!*onpQZy+m z#~WSMM0!NYA=->oJ7|YhLyHz~GFWJI_ECB8T5UQm)+xWTt?g=4;yH5u^7%^*?j(0a z8&sc^ZiniF4?ZBfqBmytNYR9lipv^07gH2^s=CID!r2YK1J?a(Y*N?gS-P~c@#5>R zzgbgIco<1aW3lqWRpi9WVXK3aKNNL#T&H;L=PzGwHpmUPfkm&fBLJ;?4n-0Q_{`~> z_-{-C%K%uCUC|5z%Wm5gCrWkVr5-wS6`X&D?*^f*8AT)7l}o=xcCJo5Ev&n4i?~{E zozqcz37h`5P75T{=WpG*^6LvkwYHQYh?x$3*98Ub`rz=WQs^()P$8qqH~VsG0e20E z@*<%WX66^p-`@__AMfAz&B^1JE?pDP%F4#qcqoP~l;wCTH-B}5TojcmGVUfJhTIwR z(T*E#zQpr%y)~x_uR ziHBV8+A4eCrAw<%5bW{K!u;aHjVF9aKD@cujC>2r(;P2c2T;$St|1+~=|Sn3#hn1w zw6h4?t4$MF!m>PcWr^v0lh?GyB@|~Ajlgm$1wf7)Hb@I&0DxtEvvKYa&!T3CU zNdFgaQPf{qTx|FrBIz8Fqs^yJpFe-vYqJiYQ_<**uQe7IYmsHuT^?X1uu3M5#Rj%9 zc|6TZF$f|gQi*7kq}lbl?G!Y!LGndt@K5ZHNn$U&U8+fMq{YokmSUEJnJB0vcFC|{ zTNE4U!0B~@AndO9@F9qQ(l^1~t2QGROJi)97*1(uK(4NHuwv>!k!wZ~4gbWc_Q;w( zGk!q_ z5eWM6=!Xq`n_^0(O2ND;+X*DftxT3T9ISmY~;ZWjgk?#;l#(mpg&Z-G@Hup*sa zip>~t0$g?MDK|9@?e2L+8Xb*WhAdH%UDGTJSNpcCnkbsa2rTp{IabBW6Q!RRkHC`e z7;Y5+014?yL_t(7iu!~PY>BW6D7aJbdis2`*$AG($PvVranZEQ&F`2JtyX!gpIC2o z==!!=@&jR29}v$voJMzoK{yGZp1g>FqOeWRKZ14UBX&A6rK?Mb@)Wkd`SzRDg{7s% z#jCA_bE_}D`S$BOOG`L2*LuAU%A+BXX?p!oUfTjItkIFu2g|4wiv^29-J*|$(Jq6< zb7CriHEtOSPef@|P0kyZK|~HVH##yV<>@nYu(CQyzc(bFEZKg$!!H$RRu~d$2wuxU z2_IZYJGDF`cBA|!LVrt_wE=xvmYlB8D9sFTDNDOocrd9{Sq!^L9+ zVOA!G%y|^gyS+_#8<|n7gJF{%d1Qy8XDgtObvRq+u#dO+#0(maj{Cr&Z3#5nmB#zU({O|fetz2TLuDuY@{O#L~1&4X)@^ixO znY#cA*$X1#5sc0hVcq)PukxSP{G|fW-nL=sH!)zm6zJ(wCji!oORGCRwL~`cw*gX^{%;Gg zUPRx5Si~xQ-NL-B_lG{TVkKxnnbR;?vPyuZi!M5B!4XmqmT6OJqw#_x2*apch|zex z26nvbf#K># z{O-J)FhE3;Cr?L~QN+dlC(GJszz_M&j3_dB5Aa5B$ zrfgQ2RcCc0+4h4lH$fS*p=y$9O%o$^u|9bYlyiCxTV&b|?m*#(y^Lr>Z@uNwXDG*L zx7q#HkqgnG-RX+!C-9A-dwpspPQ%CCPy?_|S5QL`hO=>PiEvt?18#LA3i17LzPj4C zwl(JM-~R2}Z=Y|{tK(VQz*=Ln#i{n4g-DJbP#IRE%T=l!U`0co1+D7!!ai7Zg!3ey zresodIF&4|OeBan-2YOpYxj4#$E%k97*Kn=*H%#|zj!8!6`ihVW~jA^>x3i$4g zT&xv^FG}s%GlQ^)stAQK{sh|}z#>Q)EI}6@h_amM5FxOX(*h{`k`IZUuUuo~n41d_ z38-rbKj2hPqO;Gd?F1`aW281V))wcDXp%_RDuxrTZ}QWr_Q5jyN|=SB?hudx zz;bOQJxIS;GcqOR-F8D&ijs`ZF4P>XR#TQOI>AA%%9BQ?PM&Fcysg%)@Ges;!~|yG z6B)4A$-zJzI$egO+wCle9NxnwgY}e7$qvj+z}KkrW%y9PoD7S47WIhWtp}%7`{qX9 z98h_A7)71FNnN|j&Ufh=xtBod`NkTZBfal{g^0o5WbNvLU9$#LR~99E5muYs3ic?N zQK;f&0)`u)+86NTFMXy`EGX4Vfjhk|G6@DtAe?1lrA#>#(v}0TYzJw55WINt@alqV zv)DUsjZN<+q&8c<2&+I7VCljG3#tJzEnpc|vH| z3pTOfm~Dh)Mxu7qij19e>@E-ewva)Dt@co4QvIH`XKZE9o;{|7$8Id&>=T1)ODh7Y z736q8YVFC_-{2vnp7Sg59k6`Slgwa+?qG2S{b;SH&tJZLiC{sdv)>&zsu}lLxNHc1#t-dG|7M@JD{(H)VHQc#XS9?DtUCP zXsT?mge+N(Q>#=c(l0~flYTHXPE!iu`Ze7}*@0XRk)apWx;o-%aj7H-hJepj^PhkU zj=2i3!qXhZ`*nmU8Ah0T@lEu+*z7;c(P0dzi1^i=?*Yp;>%EuaVX(TyVCqmciomKA ziiRIS6*f#(zfemY$vo8HUBgBR)wgW{maJHfhR2P^CNV5JBuaE{=vc0xV)w*i&op zuf*DawJ3b48nb)?tLIzOHYEOR%XX^(D-RhvPuQ$#HA{JeRb|SQCWS4_Z1pzM4+M9UY}#ie|}; zYw!N*mu1-@u$or|KwJWiC@E)%-+c3Y4F}ynfEB&J9jvI9?S;K9tX{UDq1*?{CDw)Y zwJ0zMumYE-PkBod>t)nK-xj*A7QmX8N5hNACHd;!Ta7bXGeQ~PX=%C!v>0x|V zubPktY6xvH$F5XLRmdb^{G?jZ4Eo$M5XYFcsaFg#unzVZMZu-TU=hzB>H~#8xxwXO z^WT2;t6%*af#nlejm1H=m>#exkpivViF{=zSR!-S0ao$vh0U{T&> zXbhGUfkg;2Seow%u&hQCw4+8eOhcijq{$;ABa-U4CNKRX0I`M=VuxlyRkTLHuLAUJ z%tq5OikjtN0TfIeTCHU47LQaM(<>D4MY~~LT00000NkvXXu0mjfwjz3A diff --git a/mods/PLAYER/mcl_hunger/screenshot.png b/mods/PLAYER/mcl_hunger/screenshot.png deleted file mode 100644 index 5af6583667df4ff97d008c7b503a307616773244..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8498 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 Date: Wed, 5 May 2021 08:54:03 +0200 Subject: [PATCH 31/66] mcl_util.deal_damage: Only deal damage to players / mobs that are not already dead --- mods/CORE/mcl_util/init.lua | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/mods/CORE/mcl_util/init.lua b/mods/CORE/mcl_util/init.lua index f976457c0..01fd5e8ff 100644 --- a/mods/CORE/mcl_util/init.lua +++ b/mods/CORE/mcl_util/init.lua @@ -484,12 +484,18 @@ function mcl_util.deal_damage(target, damage, mcl_reason) elseif luaentity._cmi_is_mob then -- local puncher = mcl_reason and mcl_reason.direct or target -- target:punch(puncher, 1.0, {full_punch_interval = 1.0, damage_groups = {fleshy = damage}}, vector.direction(puncher:get_pos(), target:get_pos()), damage) - luaentity.health = luaentity.health - damage + if luaentity.health > 0 then + luaentity.health = luaentity.health - damage + end return end end - target:set_hp(target:get_hp() - damage, {_mcl_reason = mcl_reason}) + local hp = target:get_hp() + + if hp > 0 then + target:set_hp(hp - damage, {_mcl_reason = mcl_reason}) + end end function mcl_util.get_hp(obj) From 1bd647507b6479e5c44f5686e7d18ddbc6cf8b8b Mon Sep 17 00:00:00 2001 From: Elias Fleckenstein Date: Wed, 5 May 2021 13:20:06 +0200 Subject: [PATCH 32/66] Add proper end crystal death message --- mods/ITEMS/mcl_end/end_crystal.lua | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/mods/ITEMS/mcl_end/end_crystal.lua b/mods/ITEMS/mcl_end/end_crystal.lua index 720d8ed8d..78fcc0e21 100644 --- a/mods/ITEMS/mcl_end/end_crystal.lua +++ b/mods/ITEMS/mcl_end/end_crystal.lua @@ -27,8 +27,16 @@ end local function crystal_explode(self, puncher) if self._exploded then return end self._exploded = true - local strength = puncher and explosion_strength or 1 - mcl_explosions.explode(vector.add(self.object:get_pos(), {x = 0, y = 1.5, z = 0}), strength, {drop_chance = 1}, puncher) + local strength = 1 + local source + if puncher then + strength = explosion_strength + local reason = {} + mcl_damage.from_punch(reason, puncher) + mcl_damage.finish_reason(reason) + source = reason.source + end + mcl_explosions.explode(vector.add(self.object:get_pos(), {x = 0, y = 1.5, z = 0}), strength, {drop_chance = 1}, self.object, source) minetest.after(0, self.object.remove, self.object) end From f53ff8418f6f9628c3efbf9bf80afdf02a505558 Mon Sep 17 00:00:00 2001 From: Elias Fleckenstein Date: Wed, 5 May 2021 13:24:23 +0200 Subject: [PATCH 33/66] mcl_damage: HP check guard in non-modifier on_hpchange callback and usage of raw tostring for deactivated objects for death messages --- mods/CORE/mcl_damage/init.lua | 2 +- mods/CORE/mcl_util/init.lua | 2 +- mods/HUD/mcl_death_messages/init.lua | 3 ++- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/mods/CORE/mcl_damage/init.lua b/mods/CORE/mcl_damage/init.lua index 983b82b49..c6f91d414 100644 --- a/mods/CORE/mcl_damage/init.lua +++ b/mods/CORE/mcl_damage/init.lua @@ -149,7 +149,7 @@ minetest.register_on_player_hpchange(function(player, hp_change, mt_reason) end, true) minetest.register_on_player_hpchange(function(player, hp_change, mt_reason) - if hp_change < 0 then + if hp_change < 0 and player:get_hp() > 0 then mcl_damage.run_damage_callbacks(player, -hp_change, mcl_damage.from_mt(mt_reason)) end end, false) diff --git a/mods/CORE/mcl_util/init.lua b/mods/CORE/mcl_util/init.lua index 01fd5e8ff..1bf3add38 100644 --- a/mods/CORE/mcl_util/init.lua +++ b/mods/CORE/mcl_util/init.lua @@ -539,7 +539,7 @@ function mcl_util.get_object_name(object) local luaentity = object:get_luaentity() if not luaentity then - return "" + return tostring(object) end return luaentity.nametag and luaentity.nametag ~= "" and luaentity.nametag or luaentity.description or luaentity.name diff --git a/mods/HUD/mcl_death_messages/init.lua b/mods/HUD/mcl_death_messages/init.lua index 9087c41e9..0432c3488 100644 --- a/mods/HUD/mcl_death_messages/init.lua +++ b/mods/HUD/mcl_death_messages/init.lua @@ -204,8 +204,9 @@ mcl_damage.register_on_death(function(obj, reason) if obj:is_player() then send_to = true - end -- ToDo: add mob death messages for owned mobs, only send to owner (sent_to = "player name") + end + -- ToDo: add mob death messages for owned mobs, only send to owner (sent_to = "player name") if send_to then local messages = mcl_death_messages.messages[reason.type] or {} From 35a2a2b91288fa35ff97fe4e84897c429850fb9e Mon Sep 17 00:00:00 2001 From: Elias Fleckenstein Date: Wed, 5 May 2021 13:27:30 +0200 Subject: [PATCH 34/66] Workaround to prevent double death messages --- mods/CORE/mcl_damage/init.lua | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/mods/CORE/mcl_damage/init.lua b/mods/CORE/mcl_damage/init.lua index c6f91d414..df2ecd58d 100644 --- a/mods/CORE/mcl_damage/init.lua +++ b/mods/CORE/mcl_damage/init.lua @@ -149,13 +149,18 @@ minetest.register_on_player_hpchange(function(player, hp_change, mt_reason) end, true) minetest.register_on_player_hpchange(function(player, hp_change, mt_reason) - if hp_change < 0 and player:get_hp() > 0 then + if hp_change < 0 then mcl_damage.run_damage_callbacks(player, -hp_change, mcl_damage.from_mt(mt_reason)) end + if player:get_hp() > 0 then + mt_reason._mcl_approved = true + end end, false) minetest.register_on_dieplayer(function(player, mt_reason) - mcl_damage.run_death_callbacks(player, mcl_damage.from_mt(mt_reason)) + if mt_reason._mcl_approved then + mcl_damage.run_death_callbacks(player, mcl_damage.from_mt(mt_reason)) + end end) minetest.register_on_mods_loaded(function() From 4b327bcf99338a28ec505289cbafcbb9f74b25dc Mon Sep 17 00:00:00 2001 From: Elias Fleckenstein Date: Wed, 5 May 2021 14:41:23 +0200 Subject: [PATCH 35/66] Minor fix to prevent writing the damage reason approval field into MCL damage reason and calling passive damage handlers on dead players --- mods/CORE/mcl_damage/init.lua | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/mods/CORE/mcl_damage/init.lua b/mods/CORE/mcl_damage/init.lua index df2ecd58d..8b2acbb35 100644 --- a/mods/CORE/mcl_damage/init.lua +++ b/mods/CORE/mcl_damage/init.lua @@ -149,16 +149,16 @@ minetest.register_on_player_hpchange(function(player, hp_change, mt_reason) end, true) minetest.register_on_player_hpchange(function(player, hp_change, mt_reason) - if hp_change < 0 then - mcl_damage.run_damage_callbacks(player, -hp_change, mcl_damage.from_mt(mt_reason)) - end if player:get_hp() > 0 then - mt_reason._mcl_approved = true + mt_reason.approved = true + if hp_change < 0 then + mcl_damage.run_damage_callbacks(player, -hp_change, mcl_damage.from_mt(mt_reason)) + end end end, false) minetest.register_on_dieplayer(function(player, mt_reason) - if mt_reason._mcl_approved then + if mt_reason.approved then mcl_damage.run_death_callbacks(player, mcl_damage.from_mt(mt_reason)) end end) From 37350e81c94419003f14f2fde04aec8a7727941c Mon Sep 17 00:00:00 2001 From: jordan4ibanez Date: Wed, 5 May 2021 12:52:07 -0400 Subject: [PATCH 36/66] Stop crashing when mob object is already deleted --- mods/ENTITIES/mcl_mobs/api/mob_functions/death_logic.lua | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/mods/ENTITIES/mcl_mobs/api/mob_functions/death_logic.lua b/mods/ENTITIES/mcl_mobs/api/mob_functions/death_logic.lua index fd95b60ef..57cb6e4e5 100644 --- a/mods/ENTITIES/mcl_mobs/api/mob_functions/death_logic.lua +++ b/mods/ENTITIES/mcl_mobs/api/mob_functions/death_logic.lua @@ -87,6 +87,12 @@ end mobs.death_logic = function(self, dtime) + + --stop crashing game when object is nil + if not self or not self.object or not self.object:get_luaentity() then + return + end + self.death_animation_timer = self.death_animation_timer + dtime --get all attached entities and sort through them From 4bb27a0d799fe07ae5bf35cdf418a42e4b2062d7 Mon Sep 17 00:00:00 2001 From: kay27 Date: Sat, 8 May 2021 14:09:16 +0400 Subject: [PATCH 37/66] [mcl_mobspawners] Fix random crash, https://git.minetest.land/MineClone2/MineClone2/issues/1707 --- mods/ITEMS/mcl_mobspawners/init.lua | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mods/ITEMS/mcl_mobspawners/init.lua b/mods/ITEMS/mcl_mobspawners/init.lua index d95395642..2c3c83c40 100644 --- a/mods/ITEMS/mcl_mobspawners/init.lua +++ b/mods/ITEMS/mcl_mobspawners/init.lua @@ -54,6 +54,7 @@ local spawn_count_overrides = { local function set_doll_properties(doll, mob) local mobinfo = minetest.registered_entities[mob] + if not mobinfo then return end local xs, ys if doll_size_overrides[mob] then xs = doll_size_overrides[mob].x @@ -95,7 +96,7 @@ All the arguments are optional! * Mob: ID of mob to spawn (default: mobs_mc:pig) * MinLight: Minimum light to spawn (default: 0) -* MaxLight: Maximum light to spawn (default: 15) + * MaxLight: Maximum light to spawn (default: 15) * MaxMobsInArea: How many mobs are allowed in the area around the spawner (default: 4) * PlayerDistance: Spawn mobs only if a player is within this distance; 0 to disable (default: 15) * YOffset: Y offset to spawn mobs; 0 to disable (default: 0) From 31b56e77eed54cb1b1fdbbd28419d5c6f91b305b Mon Sep 17 00:00:00 2001 From: kay27 Date: Sat, 8 May 2021 14:12:13 +0400 Subject: [PATCH 38/66] [mcl_mobspawners] Remove a typo (tab character) --- mods/ITEMS/mcl_mobspawners/init.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mods/ITEMS/mcl_mobspawners/init.lua b/mods/ITEMS/mcl_mobspawners/init.lua index 2c3c83c40..fe01f4c52 100644 --- a/mods/ITEMS/mcl_mobspawners/init.lua +++ b/mods/ITEMS/mcl_mobspawners/init.lua @@ -96,7 +96,7 @@ All the arguments are optional! * Mob: ID of mob to spawn (default: mobs_mc:pig) * MinLight: Minimum light to spawn (default: 0) - * MaxLight: Maximum light to spawn (default: 15) +* MaxLight: Maximum light to spawn (default: 15) * MaxMobsInArea: How many mobs are allowed in the area around the spawner (default: 4) * PlayerDistance: Spawn mobs only if a player is within this distance; 0 to disable (default: 15) * YOffset: Y offset to spawn mobs; 0 to disable (default: 0) From f6b8133381d6ef6b0f6bd821f654e1d36d44313e Mon Sep 17 00:00:00 2001 From: NO11 Date: Sun, 9 May 2021 21:54:56 +0000 Subject: [PATCH 39/66] Better textures for stripped wood part1 --- .../textures/mcl_core_stripped_acacia_side.png | Bin 361 -> 2171 bytes .../textures/mcl_core_stripped_acacia_top.png | Bin 426 -> 2025 bytes .../textures/mcl_core_stripped_birch_side.png | Bin 531 -> 611 bytes .../textures/mcl_core_stripped_birch_top.png | Bin 439 -> 681 bytes 4 files changed, 0 insertions(+), 0 deletions(-) diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_stripped_acacia_side.png b/mods/ITEMS/mcl_core/textures/mcl_core_stripped_acacia_side.png index 2e2de8dbeb40446e193bc91c921dcd549cb8f5ed..2b57a0863e404e0ee1177fd4562bffecc5a3e527 100644 GIT binary patch delta 2114 zcmV-I2)*~|0{akaB^>EX>4U6ba`-PAZ2)IW&i+q+O1b@vLh!9 z{Ld+J1SAk2$6=VEYHzT|PXiKu&wkmeq~a-iFatvBZb`O#e*YToFT9wjxG1@#nv%yW z)>ye=Q2c)FJNdXi^^3Q`w|RFSFs1_TVSi1Ju5Xx^*M=N*{(t&D?{Zf=MGcu{H5lf} zjDfBzYAEoYC;jfK?rZT&IQkx)*JHW%qxbJI1B_c>FR3sMOh4V=lq&JLop5$lj7D8{V*~#A?@bKAxeSO7l++~bs zN7rHkQpssh7JtebVIkm*VQoveGTwr5URT9c5Ml>oH`u&zbw`yLXb*~XQ=>u8x_9bu zG4jJ1cjgWb=3EJxEB7!di1VVsIn;2wP{30MYXQ@Ie4%x2UFUTwIQb^5L^5=o%b%C~ zY4X2Z$Iuv4x87T(h+Eg%BPfmA7AsDZ2)1^UUcKtoM}L?%Cnfv7J2iESkI!ags%`BXl z`Y=$~9)!`jU|Sq$3(xxEBT$P%0(|=##o|j_&yx5$Cj_11mc1%Ee5|K<=e@y~w4O%P zqJMRl2sE~hIJ@z(!Cdz8o<#7-0U2zJa}`FF#$IO|P#(LwhSc3>MrK*-E863uZn$#Y z`_$^yT&*$eV4K$+Eyl22LeEye{dRj+r8#hC1Rv90Bn>*e)FDc0;M%?>Aaw5oOTR>& zU~x&kNP1*q)+t!a7Uv#7*IE5A&?-1vr+-6`!LN;l4(^1Z!fix(*=|hNlz}>n+mb1v*nfD# z2CMb#Sk+ZT=pF^0hi1*JA$yp76w4_yTM8SE-PD~X6!56L)S*%&-2V1)YbNu!r(y6XgQhF#2|YVDCe(z65>23*!?l*Hxx5YC9y&J;x39zXh)}VoK(B2`bOz7;8bY%Eqfnx^&HAukWlpxC}k~D)-b$2!hf#vSP4|w zqH8y|!3URHDtPJ*k7pA-n~q|iq?{VAB{*r>aVzDt!DMqxXZ%5`*fu_*tKUWErpz@A zd?*4a=E<`3-u_>cpGWYavV7f1hW9LIg;h@TlOXUv3;x^ zl4iP_1h5DCh6o%`l?na#?>}{nfm!kXHi&CN!SQi$ex9f`GK%A^ag2^N=j+cmukVvT z&l|g=xUL%miemhHkd;_-tQna_AC3?a$vh_j&7I1k0e{R)nj7miaW_oj`n>4lKr4uA zk#00O>k3M6u3+?r%@w>oI+6gmzF+w0^!EdqkZI3=WK<*tcyr8!_2x7;kdXEwBB(5o zFksyaC=iT~0YGJ8ZdeIcB-$sC32(;zI+^Fq^}IkutVKL0eRLuc6I3J?D-b(=KN?kH zU4hJqnSYo$c?Xm@ehyy0U-ZX;nPGA)qR1)$Rs>arABF<@qhrmm<{&Yz1rqnYXuSbo zMRL!rCaww8hP9iLE3xiiV7`;id(uqg=3sOQbE7heYXNL4(uP-XJPypAh$JJqXOJXT z1u`dAFg_ksZNfW=kQ@HD!u@p-nV1i%dSBb8A~c6{w5X?{DN{-9^NL zOsWcNh6F42Aw$A!1C)te!CwWK#CShAzZMk<1`&x$e7$at=Coh$5AJL7JsUrc?OiU~ s<0s%cC+m4}JO)xx6hah%cOzHwKhm2+#(v>@egFUf07*qoM6N<$f{<_i>;M1& delta 292 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 DmWrWo diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_stripped_birch_side.png b/mods/ITEMS/mcl_core/textures/mcl_core_stripped_birch_side.png index a27739c1e6dcb48dbb821783a2d00a007b9f9c88..5eed80b39cb4260a31b8b111c23ff6d321480582 100644 GIT binary patch delta 540 zcmV+%0^|LY1mgsdQhx;r3jzn9viPe200HnxL_t(I%RQ4(lH529LmxrPp6+C~a>86A zXW3IGRoTh3Es@NJyGOr-AP4~MzaQWGe&5-*jc@<{!`tmf&V%DP8T*dh$$2uyMrCr& z#rwwxzka`SJSH+Tz;GAPR26eBOokMA>~uGZjjY1m=qkd4Y=4jsXNuC(m#;u$(uHd<6RK{^40|%08T-C7XM#a@QI%8{*!37dRZ%q2-Jci3 zg=iAk!ZE-{fPWdeCK`i03Q4$xn+Qpl0zfV*69Xa~vkQ2fi>!lw{GoxYrfFm#m*{S) z3mP8hVvLQkzwtWz*f8LB|B8n{6@vhsa{?eaRf%NGH8I4T=Ox|kDpD7E8t!tk8=dFE zC8~PBW%8GmLlk3SfYRTzeKBZ;bfrf}g! z7j8llS#AICMi7)yDC7&=}`Rwr!BrR5x+8?PVP7+Xi|O0VclO--xkM>qHXP e&6?M){1pXplqc&=(;Z0w0000m? zT}0m9X?GmF#-K-$^aA+rxtdfL3a62p|Za5QPD~QrvFtx!v4*AZGI!kIFDkClkwdI-M|P z=joF5YQe{^KY#sK=#`?Cnx>P~RY4Rk8T9x^)>&GfE-g`+iL;5O;p#HzX2_NI{_}Sa zWY!%AauHesb5ZEwBX zR%-Ip*B@^W++1B+_FgG_R#%0egIt7`waf%%Cb)k2%tT`|!(}G8+a4ZrU`#y!U3*@= zcxqQ|cYEuN%ldBuEYPSXp;Z{002ovPDHLkV1k|4 B+#CP^ diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_stripped_birch_top.png b/mods/ITEMS/mcl_core/textures/mcl_core_stripped_birch_top.png index e5290422d4f7f826064a1bff7baf1cea5a2b46c7..69d2e0bfdffc760bed2d9936723cbe5d8803207b 100644 GIT binary patch delta 610 zcmV-o0-gQ01E~d&Qhx;r3L6-Rcs6kW00K5iL_t(I%WaZda@s%;MbC`J2!tMkO~rPe z3(GFDl5Eil;$^T#LVy5Coe$ZHsbs#otNKoN-#+T+kME+jLMer(G}_Y`PxHT5*9`!d zxRrE_VPt zJbvcxU6Z0*VYJp);$aZ7T%-W_1A|Tee)_Uqlh|7>r;1JH@I1}cvVJgTy_#c_q!+r~ zuAe9v1?&pPFbDxqTA|gecsP#OKCiem(&hdQ(}~5?9_RBJn^<;b$8%N^C}#Nlv2dmfj%#=q%2io&k5h_J~zU(EXzM5I4cG!AgN<5<<4 zP8SBRMvF-A*YD*PBLdsZabq-!ZlSihu*n>!bIqswDaEef;o}!XgkxDS3S$=OFO;G) z@or+-S2gK8y<)*180PCOaTGJ3J+WHM09Y?mY+?}sU4J(nU88{p5nl3wBb$!)Tb#p1P`6VH8G;!swl6Ev9W+M1;Dj5fSnt zzk=rt=kC-Yt3}F(`;W}h8BNoo1vnfl1_PfYPS8p-3_^xM$Y|Vk(@HT4BUX!)IEtwb zCDVyT09(_xE&Jn%rfn(r2ks`8>QIswIZ2$5@cI34 znrYwz&`z^+wtE2OHD3vyfdDGy&a5y6aI%Od9yK)4ZM|&k5Ha z=Ou&Z5=DTj9-TXT6Gv&-YDE@O)uZ{a$U;;S18}=HPFBW2RgYBlXl9d9HtW`Ax_)(- zSQ*H^+i6A*3uo;#Q(kk5EHu5nI@mK6Sx6fAsK}$pLgzh*6MKcbA Date: Sun, 9 May 2021 21:55:51 +0000 Subject: [PATCH 40/66] Better textures for stripped wood part2 --- .../mcl_core_stripped_dark_oak_side.png | Bin 382 -> 2007 bytes .../mcl_core_stripped_dark_oak_top.png | Bin 438 -> 695 bytes .../textures/mcl_core_stripped_jungle_side.png | Bin 415 -> 650 bytes .../textures/mcl_core_stripped_jungle_top.png | Bin 480 -> 637 bytes 4 files changed, 0 insertions(+), 0 deletions(-) diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_stripped_dark_oak_side.png b/mods/ITEMS/mcl_core/textures/mcl_core_stripped_dark_oak_side.png index 9345a14dc22824b02974199546cd9a357df98c15..32a8bfebd2cd0b3954d8c6a0c35e28a25673e9bd 100644 GIT binary patch delta 1948 zcmV;N2V?mD0@n|aBYy>bdQ@0+Qek%>aB^>EX>4U6ba`-PAZ2)IW&i+q+O1bxvg{@d z{AU$e0uqSFaxgYk*+G_{220G?_vBV3m2sUhBZFSuG(PV7>(Al-z=wTGE=n$`rsVO7 zHCApI6n}s2JNdZ2^@q2?!|wJ2hAH44?w{$>`3-jYEXYyq$A8oAa#ue^9hql!7-nR~ zK<5>86!^B2{&rQ@wfI$z{*BJ-u^jiK_wSg|j8ot*u;VLG@c1q>N|=8X8t$^bD<)A$ z7{^fY&7uC>JGY0g=Izm|cfP4TJX_&>(h2F+Bej$K+`HAG7it#y@nG~F;@94dvy5@w z)wP(=spPaMD}QB;FcIyHVJ%CzGX4bPysnC?pu`TuPM~?<>W(Tgx;-e;NsR_w>)xp& z#mEeeOCGutW3VHG5G}4&J&2P*CAT+e6viiF&_kYD3{{?ISg0k9NP+;@N?cxyn za4RgF1Lld3&fi;u@~IBcBE%LXLjef*L_sK#&&-(!eJsGIA#)Cq4@W1wY17LK*FS^nq4im*47ZT!F9vxh8e9Le1sz&a-<_4<)}yN zpihrodg{5CUVA(F3@5h#na=Faa@Mn5bb(4&yyQw(zRFdvHo&zJMjSHI$fJxp+D1)L zeWFG$#YB1+)E@;Y$Ow527M}Gq1c_IKp^Tf;-ijgOB6Ej~Kn?e|< zkxXz-nur0xcoEB>jok;i-{R&Z{wv)0pOAACy8iI5rv`zs$t#sHR={`K%Y+v47mM)nCu}Xxb~XTyOZoc**XOb z?Xp>NSqFxCDx$NKRdUc1xcPo$JxT8_8L6n;oCJ?gBd4|0cf;0oMS#p!pbts`O=-SO zY5WgL_xj1{n-Pwz$ZToXW^I!fx!B;|k62k#i=${!Hr&eYp4h6@Ef_7wVEDz&ZhyDa z)+CXU?g?83Y=UjCoxi#ElJ1lobkkDtnq@yW1I9DT&dsNgo+&x-?y$i0+8m}KAb=rA ze&=+lOIdr$t!;T2<+ns+BdQb=reO(Z6DG-@&37}~d)u+m$auc`3Gj zQOP{9GknZKZ$o&gVPbmelAogO6!2&wz%S88Ypf$u4U%9;exhk<9}x($#J|St~gcLU@4&hi(ATzFMZQ2Si{&_;XY|{v+4WTGn{a=r1yEBwhpY> zZYmj@IFIK}+uE8;cEIm_mhW0tc5dckLWFm>r&@j;g{L*#q=HD>iZ@7@+}-^2IFxY` z9JW7?r?!4#*hVj9Vd3s$&JqycZyW)yRMq_ryz{jyO|e9;ks&dE1ql@~9e@Msn*aa- z+et)0R5;5`lgV}6FbqX6K#=;f3(7VHr2k41TOu)JLFJ$9fj0v3>*tT^een5lqN4QC zi3lPSGedyPL`0Zt@p+zH_s#D=UtISWmRYpcKm=`#@9RQU$w;gj-}lWhLrtkHA`3wn zV;}R*?)$~2L zcQ&9d540&+$y&~wlLFRSWG1S@F*=z^@5bvmkOH&DS`)3>o>U$NQRbY82=`o66-||@ z+ExULqOza_YfXs=vXXAb=$)*@JpfqlSTlO>On1VA-i^$EB+}9Fq^cO!DR>78(7ORb zJyina(*gpcA81if1r(zhBCwW&2=2l0)V194<){jgK^3?!G!sgMtj#J2=j%l`BQk-V zfvN&KJb*1!P#y(qO(GKyXU-caj?r1}d|%faWVvsf1-XM2+G{zt+nR7uU z5y4u%l~$qJ6jhs>Ba^HJFMk9H6E-V36}-m)009e0L_t(I%Z-zuLtZ00000 LNkvXXu0mjfAxDjk diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_stripped_dark_oak_top.png b/mods/ITEMS/mcl_core/textures/mcl_core_stripped_dark_oak_top.png index fbc45938f39a4c70c4f1b506a630a606676ebb15..48c6da9afb1f59cd193feec2edafbbe7fe46ae8e 100644 GIT binary patch delta 637 zcmV-@0)qXv1Gfc`7zqdl0000V^Z#LyAu)di2^AkNL({T10006+NklE ze)*&*D2ghmDm(bTPf-*+hll{WJ;4)UOBAZAq}lKZ!zTT17n7!#bjj)Q8MFDkCb)ls zF&RZw;<_%LwMyVSxUNS#9uT#fxQ>geWs_%|9-jel*z4_8SQWA?rK}W3sAZqLI$>#2 zM1(kM;<+xqACj(C4EkLL{q9~xuhSt2d{h<3DuiJZYb^(XODB#1s8p%S3V`Xug6YG8 z%h8b8e2$1Z$E#&vq;jqVH@moT#kmQDxMbt;Oq(qjTWvO;CUf8 zw>Na+h>P=cs;XjX5=4aQ!(yvwf@)cZ3Xquk#m^r#F4E)o;4(4yrI;*8T_m?u&j0 z*w1$tl1Wnz`-hZe$s$QuWf_;FA$gwdd&aXFB7(Qu=^d`FZ#WwC_sjDfr^jd9{k;WX zy(#fLx3*x?)qY*At!PIPW|e8-h)`A)MNtPUBAlI^Zy);e^qH#4V$v0Pp5ZtSzkXlS zj$0h|dIY{lwq6rQEtZKvRms*VjtB^Ns^B<+2s{?MwNnz4l9+Tae=?n6RjGM3SuOkr X0j(<2i>x$V00000NkvXXu0mjf8q+E& delta 378 zcmV-=0fqjz1-1i_7zq#t0000_VD(U0003)Nkl2|9DEgZHOA6?gVZ5v*&99rkjIp@7|Rn;_26Z(l1AV+_& zUN4u6MHnfcV}(Q5YURE6Kcs*aVaIH6^nBL!>ou%dw%_k|ArVOcRupCVcnrVK=j-)y z8Gxr6h^Rm#E4O%nNT3LSp%h2Tgb^6mfGk3mo*h6LeqU9eTZ$M01EH9uQN^MZf&(Zr zj(m($6lK}AVTz+)a|vR3e!Jc8VJc>n;hvf!vDGHZK!o41N)OX8y%@TWo{W$LBnkKcdGb)NWjTQD_>K+)vmW8>@VFV=O%!^uq6b>(?9 zM(_Oj_s+o35y@1HwH8ERU1wAkfXtv2<2Vjf1XINXYAqC1B!4<8Kvf}t%%qwU;XI#D z>NJr+49BdHnY7mMNU8~aIEsJ@ggdnupI@I$)5J7Qh(Ls+nNIaZ~KurmEMkFQ%nP?`s59V6guSRks{&_wD7%{kx z#`f6oNIb3)_kWSR6B~dabRSeRBAnJ5smag&LQ+`PnbsTay4X9I34&k({{WehL0ENE R04V?f002ovPDHLkV1mqZ3-`fto z1`J*I20lSg(d+acJw$HMbs!)YFT9BY28n?2rrlKPSZUI~@gR-<{Fy(#dwYHP+AQY) z><&i&wndJyj=Cyo`+tZYm z1f2Z&mmshi>qynC^kP!YSjX;goG8m=_3%xrjo!mgd!zRlajyb%fK(x+${B5oJjO~U zJ+JR4k|iXujFn^$WTW^0l7u|f_QQpJ0Q;tkacZNSl}fET`Ey*FYu-yJ$tHIp#rwx+ z+*GM9GuC0Oi%;t-A4~GsW|6aRx=5k`>Z<&+s%%fjGp*xXRQf30|F$14T#-Z1ZVf2( oeCvNv(*HEEu1e~vyt?K9-;v&ygZ6z%UjP6A07*qoM6N<$f&((9$p8QV diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_stripped_jungle_top.png b/mods/ITEMS/mcl_core/textures/mcl_core_stripped_jungle_top.png index bfa54d8fe5470e58eb8ae0f161464355c6dbed27..028e37eafdb10bcd29ba938dea78c68e8370caeb 100644 GIT binary patch delta 579 zcmV-J0=)g;1N{V$7zqdl0000V^Z#LyAu)di2?-+#ZWu+I0006CNkl$}7^C7^^WWZvXAjY6#3}GOs zDyuYS-0e_R7JzP~Xb`+pzL^Y~&%z);Gz<|DR%y#slFd9)J+w7VAo3|ld(3Y-A#Ag;c3nM_bc8*C zwXAms)|-^kWsm<=uiwUdcwTLYHAK!6IJq1Vh~S(%ySj6O;j$fbKbvBmNA{&_K=a2J zeyz5AzWvCk(`wAC$#u;2N?CD0y!Q>L_F(>YKmd2wJ&0004PNkl zGS#{wPcsTCB|r>PKcC)vALc37a1?*|9l(uQQUm}I%6`grtJP+6I2bb=_WSMjFYf>+ zvb1UH+&cjtHf1{i%Nbz*a}Oc$c$_40tnJ6~et{?oTP1DCQ~d42!o$n^atOH)W&r!s zX_EAMc_F@ua?RH^RFXnMR)&eOf(*=r<+p&9;6xCD8 Date: Sun, 9 May 2021 21:57:06 +0000 Subject: [PATCH 41/66] Better textures for stripped wood part3 --- .../textures/mcl_core_stripped_oak_side.png | Bin 551 -> 2130 bytes .../textures/mcl_core_stripped_oak_top.png | Bin 523 -> 729 bytes .../textures/mcl_core_stripped_spruce_side.png | Bin 447 -> 2054 bytes .../textures/mcl_core_stripped_spruce_top.png | Bin 556 -> 733 bytes 4 files changed, 0 insertions(+), 0 deletions(-) diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_stripped_oak_side.png b/mods/ITEMS/mcl_core/textures/mcl_core_stripped_oak_side.png index 3bdffd76e14a9a256975620422c6830b37462408..c37220bb653a15b6170a20b09c34777eb138f6e3 100644 GIT binary patch delta 2085 zcmV+=2-^3j1kw@9ghRm`W4AV1XpzA~p1>W%;XAF*ibWJM#&ONy^LOmr8GeCxMqk+Zrt{$w3g@#f$X^)gJf+{UTL^uzW}ZK8 zgy4&Rf4yV(41al^duP{T22$B+QkKdZVIkm*VQtH}3f>9hvaX6tkYWd818iQnx}!=A zv>%EzsL@0B`tH;bV&t0(zL`5Xm~#>eSMFg_5a&e?mr%oSLBLZ7YXQ@IVxi@?E`OZ_ zo(Ewi6O0jd{J7k2lmE+g3_Z`3E|Hgm72@KlX@oJEn}45J1w!aiOw+=5UG7ac{*BlG z2GfFBkYMxIHgP3-X)7$A1J)%Uo!_NFWvBr_1m6k4PyhoyQ%ID_7v@3)90mL|M9v}d z1qLW39^@Wy6G8?#!qYeQ6k2OJ@t#I&Sp||q0W~!=kQHNseo7Q*sHKpiODW}4lBAki z4mswObAK**_NZ1ui6xa>N|91alOR!&WGNz2rB$v0EiBbsi>p#=Z4FKvOgHRqSkcM)I-k6`e#_u;P*69EYn${JvET>~_zG3FeqtopP@ zE`OrSEkjjiQO!99PitN5V1C{c__jqkFHfkeut&q!5Sm-#D+F`qL$ifx*#N-3?kzq? z4bq%O$-3S_GG#ey5_JwIpvFP06Y)=hRnKjibPy5CPAP)Ly|Xb$SC8r5dnsmJSF5>< z^SNUs5*%HY(st2^XanS>3^m3!6E&cow|^f`VWZ9{kxdCso4$Rw4v`IwQ4G3t?VB+5 z98Pjm6s0(`Oqw1WPl`SpP}#@lbH@96Z=eXuzP}RcF>iPh4$x%jdi5t)*|fn++iCiK zg$ec&oMCXRc_sXy$s}Fz5#zxtP;0f@n&In!(v9hM0*l$Wj2}@B}Fn_9| z@a(eVNFure4lKy@LV-17zfyar^_81!@Sw7KR2JJ&nF^zE*AWa24d~)m;ACMOd!&?6 zWrN7>d8|xsRyFwpjD;pgaVN(1sNksTh^idfyQE}zQy12-s?}SK*4bB8wza8tDZDo)bJ>DKr04Xwwsl$pqN%=;36FkKesF za2qCbKD{Nqhvt@it$~Of?~QNUp~Pa2e%3#0V|GVq@*}c%05xDRb-I_9u7B@am$ze*5jHtpvj4BuW4ar|E%^*%VAdQ{3lJ9k& znK+Z^)V%VUkMvJk$SS(iP>;C1m7DdAKtm-FgT?3#M{AVMp9A5XxYABx*$B@`$!wg+ za6G;EbjG6z_7s`FeuR;aY=5l)S>tc$N0zU@Pcd7~Xitm3o=;hyBhU`;Ahmn8&stOG zFrpexhyU3#<5w-uTG*+Pe~uu|a;pkH)=x*niEn+cZ6dNm-qvjAL!=^B#s^S*1Z1(J zSDY$Yx7=ixKNSc7>@c$!ayw1TzX0QaCpi3pcYg!ss>mvgxSfM0e}VST*9tNc_fAk0 z#n~IuM~K}<2n1Q12yN8JLfYX;MP`u+uaz9V;mG7Q7pQ19&ucQ8Y2JZG7AunTILHJe znuS!XOgx$y-E=nuWNg0$tf=i@!iH-lt(noq=zV7=u~ED&_t7?PLAMBt+c1&4e}J<$ zdfO!4bM5plB=L51e^vyxkiZtd|G9WPC%569tF~Ac7{t*9^`U5Sj?VAL#foG!Ge%?O zp0t41OdhXEGx!zBTtRPp$IsWK3hw7%uA((@^u}oBnrk1`O0F5qm2`l%>tokV zxsoavV~fmHWE7)++=URYmE0?7_J2Y3CZJK3oTE{gITIUZ8w9UaR3-lcI94}^9Q_q% P00000NkvXXu0mjfLG|wa delta 493 zcmVQ*(%i;qEiw4Q(?C=US}i3&CFC(L_`=ErYLN8xgO5IAk@ZF&(?-e|E}sw zX6SdGm&WfkA=6g@Fvfgf6gb+2O-~ zckf~tE`ORGukrQphntqLK++ zBaB9OIeHYq(gKVo7r-3=i)-{a&tB-cT5}g}1JE6Y%N!UuJ@t0w>nJP^z!lW6s6me+ zbc+cAbc-?40I6~Q`t`?;U%xUi+`s>S`t|qkh`7e3|NlXT_Y8t~q5zkVaHS2n#RLGX zT!5DwXypnMp*Y1Abm(!8UI3x<(bW@O4#0vAJ++gX`f(*ng5>}#8^Rod9)x!oo-=&J z7J^X>whYR+i)f4xKrgvqAl%TZTt1qCA)>&lL*5HBN{CIgFm>qa35LKfu}j}rpW84n zxVq};Nk}j-{GR}g5(ey1051VyfIuCAQ4-<;yLVr@^x_5XT9Qym5X=RHYCUuZDjgI3 jz_k?-HG~o!uA&ofw> z5oM4;)Mt5e^n>_K{Cd3j=TSfqsUnp>0ZK}nq-}E7hqP7pW$*0Fp1XU_S^4n(ts(&6 zI4%N+lm!LM^bMe@SZm9yimJsG5dzP_F@ma6^?f|AN;b|xCx5IxYVh+aA*gzc#~Epo zp{k7Xf=MB`Vg$zse&Dm&ZUPWCYDDpn&d^S;Vvf#k@v8w=m3|ykSbw-1Bz*pHg@~|wa)mJlwK?%% z^bg?Uw=))em-XcbIF6xN_xXI3Q?)s@1)ry3ox^UAm#Zy0Q976O)4_SU!uInOUaqz{ z?@t&_a+1-6cdyz2JZaVDT+GIf;vxIpKB`k0J5h=;!uCeUpWcY$%Y?I=J1P~gWPIw6 z*}7q)hJWu>P{37H#^VeKxabXd^J0aw76wE&F`X!#n+hOHGjgjaifgT9 ttb#Ezm1Z;th;HJ08KAHhrsoX8UzyK7bIUoiUJL*L002ovPDHLkV1lh}J5T@s delta 451 zcmV;!0X+WM1&aibQhx*q6D0wIK{SH^00EduL_t(I%cYYsPuoxwg}+!P!nG6+$&-@e z0jriO7{Zinz?9u{H~t(0Q}>JvmFPs4C{j>Rm4rx-49}7Y3RUTV?v)MMxQit}-{W(> zdtdD$JAdU97}>&1*0Is5fJZtvHX?|-&`|Gf!FWxW^x6NOk; zuwUN;V7`9h$LTi`6EL$I02T9gHD6xeF<#_MADoI?S74%$!~_)=DllH;09;<*G3d5A zI%ojsA7^%hbp-&42{<`yRt1g@8VpCPN>kd2m_9fL-8TKSrSEq-Fj2^$+twyPn;!q&^(qvu1aI_-rL`q(sH`7M|e*T{C-UB%(PvUv| z!hHQi-26gf0*0d%SubX0H}umM))id+`t!yh>&1E~dC!hJ3Kw9|Z7XE!3XSNMsS6|- znZyxS64ykbE}2)}Dk0rZTbL-+X$(gzZl;gw!n#6xYCIR&`D@+x`2Mw_cHh$$Hd4Z@ tau+7coXIl(Fw)z5KJ0(FYM;H%{{im@)*MZ?;pYGV002ovPDHLkV1i?D(&+#I diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_stripped_spruce_side.png b/mods/ITEMS/mcl_core/textures/mcl_core_stripped_spruce_side.png index 11ea15bebbad35c0a09c692a42104d22382c31b1..55cb4cec3fdd8d2c466b30ddbf75a2aa6748b050 100644 GIT binary patch delta 1995 zcmV;+2Q>J<1BMWgBYy?0dQ@0+Qek%>aB^>EX>4U6ba`-PAZ2)IW&i+q+O1Y?lI$i7 z{Ld+J1OyTv$HCaH$_;Y-G$7#_@5`%7D&yTTBd{d8Tf*-8>(AT$flnYG97`^#rsVPA z$~80$ieH~~C(rX+e|Q^w+1;K9Fh$(s`k5|W-(Z*Lfy`<@zJKj5clA@$k$F~!aYPOn z=(?hgVpw+4->&L&jX$=d|91~_T8=gK{>>R+oC1F_xNt>^9^Yj|iQ}JQ!(HZg#UhFc z;}|QxL*!p$=l1Xg-X6WM^G)sX8w%%>E=Vto)K2ni>?T4l)-3YZ1l>OS&(9}z_gU`y zTDxnUfK+n2DSz9_9AP2g$rG2M5DeVh%O*I4Iz8(H$~qI9)7YqJy;vbJ)4ij9X{CP6d%q!pcB!MtI`K z<$h)SFV}W--$S}YzHF?JR~VW`8iTpTpJ`TGg=FX5EM!VH7FF2#VpWI<^l~hiNa1ql4L1TrKOlSNlGcF(W6?9 znX}}SbAK+m=2l|iA|;hvN~xvQP$OEH)Ks&prPkUSf;PBrc)DRlYezWZ!G|2_$VWNq z(K_VQxl2zy_tI-`XE@`D@;}p=-C53hwu>%E>EcVSbmgmD^=db?cE_7dZ7{}jU4B@DIcIZ0qn*g$41bITCNQ1{0}yl=ocTh`VK6s1^EIF- zB!D%NLC#5oF)+v%1-WT+_b~Tc-kk8i;w}6Wb8b-ge=z3;b;{gN-hRQ_+2)B7CqbhM z2c|yWXlxgbqK3cjuNqDv#vcqaY&bP~UDKd!P6;pxYn3lG%{dkvM{^RsZMn{Q;I>>< zAAg&gqRz3THCMpYG&P5sTP_+(?K1zjrbB7@K&`T6xKb_t$@z#Z4(WtY*e1gokiXPI zmOMcrbJt1JX&ntfmlL}c@j$>hH;K>>D0!L?=vb3n`U`;(U;^e4!60B(z+#~9d~llB z8qLdhwInVR2RHW9rcYsnKG%ppHqsUpsDF!dCFnOXiU`$oxoN^?vNGyVL+RE*xeU~@ z9Hg)lO)Feyc4WvjnWM4iMMo=sLqlmp5>;t_vlsW)?zN#HrN6M@6$hI*4EL5b;A87Z z%#AU6y)nw1^-+nc$Dm~3)Lz?0L8^vu?yE+V3tLw^>Gp;IUf120;A_iX%Vl&(U4LD~ zIMC-hYgVmPx-HTBl~r9zaFd154JC`c@0W3BY*IX}uKmtRG4j3LMwucww8@rEC`)K2 zzFCC9ig3Y;m(gw#GLG?}DbA+)QxT;5u5{{dCrWOB^Rr|RL&PM7-^y#XGWJq;%esnN z`6-rxs+Gng|G2YimX%yqXIh;;x_`^6QU|=7mnv$!b39;KEpD*7s^0-sHfrPb?qa+0 zYHIHqfopY}l2oUvz=0taY?tk3T&33iE?esuiPf=#cD6Fo(XE`FOR-)>fZQx7U$vb?L^7qBZT^#?? zM&ie}2i;qWq>a1_GZDvd#%&Q261YKj^PGz?m@Db-&4Z@c+eL2)s~VGly7j|aMOW`k zNUTbJhWVDqet%|fh=&_1izzoS#R~D-pmzY^p-@{fFtBR~*rEm{s6`4gf z%q}Fm8(?Nb_jaOtPwuaa+xjr4ccwQ$nz?Gr$pr?hl4wELmjg}K{xCC}xVgZNyGg99 dol+92`436)Bvn(^-+=%C002ovPDHLkV1fYy_^6vWGzR{43E0^`ci19nLQ;CO}nb5gA^KBv_lr{Jda3nKvYN* zeN+E>Iv{_E9NKmT_JR}|Wsw>K)y)3&!wk6PiJ?RQqFuKm>UQ*i<`$??w4!H$nj&JV!`RD}7NU%>Dro}n+em983pTf6aqG?NdX-@oSGU67j>DV~h^FfHCSt^bMLqwc*o;drq14#0n>j{pDw07*qoM6N<$g6iq2`~Uy| diff --git a/mods/ITEMS/mcl_core/textures/mcl_core_stripped_spruce_top.png b/mods/ITEMS/mcl_core/textures/mcl_core_stripped_spruce_top.png index 7699612b6bf2721104c69d9318710f7723554e40..ec0dd2da813ae457527cf65598c385e609d6a150 100644 GIT binary patch delta 676 zcmV;V0$cs81lQ_koy8 zuBw*5->)^ZmZXZchTJ(s3f95P0)n%~0-!)rWtuw#p*eO0 zZ@Fs@7cC~4=jqfjjESU>dxtSbsB(W#W)0i6<91mStYLHL$c&-NJa3jYuNM`Ee!yG9 z^|T<*EQ;dBm@YI0;qluMfJtyX?2dSM23}7~L?CzWnLZTW;j9r3{lNY-0?-_LM4;^= zni6AD5V-%gp)NcEY}$@~Ohi=-z(aFDRSDj3Rb>3}+YLo#F#^F`Qc^N!Xxe|CyQV!0 zS)P{}1zs;}UR38S2=M7^!}@lGb(Zz*ig_8Bmx0_{L|}-C`=+HIBPK=Vaeo3}R%A5C z4xX3%++WTnfU`!dlo>PBz%>nddB=?Tv^YDAk%fPFvk`MO{%PMEn zcI;2X4}gOF_2*i>a~N};34*oef)Np7jED$BOsJlJ0F;yx{{tV$EVK}+{<_ov0000< KMNUMnLSTXzA419i delta 497 zcmVf?|7qo*=kZyHw=wI+(c5p~Hmx4nrxGQF9{iq*^hAMU_j|rC?x_L|T zChy%nch7V0n`*aPtw!T`q$`<%m&4OO``eN?=044>;Sss6ZCh6O{o{7L{eC2RSeAc` zyLY0|Xg*)B!~Z|kjj?UU9K`lp~W2kBD3{$ch7W zmo`}uU>wj52fzdHgxqSiQYoK5-)bqYa?a6lG8tW$f%N<1@pLLD#Qw=-wc73e;~5^& ziUQh40igA0B^*)VVzJo-LHM0ll+Aydrl!fj>h*HjapDCi=URlsmr}xkNO5BTc&jAC zf8{xSe|!l$2Y-lGq7MF=rfG^25g}J60-yp=!2?U0K_UQ>G<5=iIR;k}6#%k-JA9>H z!!>~7$rAyPIEI{4u3||Oe9bk`Y*s48Vp!No?3a!qDwM{Jb1qE}fQeHeshnL0 Date: Mon, 10 May 2021 01:57:34 +0400 Subject: [PATCH 42/66] [mcl_mapgen_core] Don't crash if Ender Dragon doesn't spawn for some reason --- mods/MAPGEN/mcl_mapgen_core/init.lua | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/mods/MAPGEN/mcl_mapgen_core/init.lua b/mods/MAPGEN/mcl_mapgen_core/init.lua index 90b272506..bdcdb1b4d 100644 --- a/mods/MAPGEN/mcl_mapgen_core/init.lua +++ b/mods/MAPGEN/mcl_mapgen_core/init.lua @@ -1248,9 +1248,14 @@ local function generate_clay(minp, maxp, blockseed, voxelmanip_data, voxelmanip_ end local function generate_end_exit_portal(pos) - local dragon_entity = minetest.add_entity(vector.add(pos, vector.new(3, 11, 3)), "mobs_mc:enderdragon"):get_luaentity() - dragon_entity._initial = true - dragon_entity._portal_pos = pos + local obj = minetest.add_entity(vector.add(pos, vector.new(3, 11, 3)), "mobs_mc:enderdragon") + if obj then + local dragon_entity = obj:get_luaentity() + dragon_entity._initial = true + dragon_entity._portal_pos = pos + else + minetest.log("error", "[mcl_mapgen_core] ERROR! Ender dragon doesn't want to spawn") + end mcl_structures.call_struct(pos, "end_exit_portal") end From a3d3055e8af15d00ca87123ec64fc0544fd529f7 Mon Sep 17 00:00:00 2001 From: NO11 Date: Sun, 9 May 2021 22:10:08 +0000 Subject: [PATCH 43/66] Remove cactus destroys minecart from master --- mods/ITEMS/mcl_core/functions.lua | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/mods/ITEMS/mcl_core/functions.lua b/mods/ITEMS/mcl_core/functions.lua index 96f020ee2..732c386b0 100644 --- a/mods/ITEMS/mcl_core/functions.lua +++ b/mods/ITEMS/mcl_core/functions.lua @@ -197,21 +197,9 @@ minetest.register_abm({ interval = 1, chance = 1, action = function(pos, node, active_object_count, active_object_count_wider) - for _,object in pairs(minetest.get_objects_inside_radius(pos, 1)) do + for _,object in pairs(minetest.get_objects_inside_radius(pos, 0.9)) do if not object:is_player() and object:get_luaentity() and object:get_luaentity().name == "__builtin:item" then object:remove() - elseif not object:is_player() and object:get_luaentity().name == "mcl_minecarts:minecart" then - local pos = object:get_pos() - local driver = object:get_luaentity()._driver - if driver ~= nil then - mcl_player.player_attached[driver] = nil - local player = minetest.get_player_by_name(driver) - player:set_detach() - player:set_eye_offset({x=0, y=0, z=0},{x=0, y=0, z=0}) - mcl_player.player_set_animation(player, "stand" , 30) - end - minetest.add_item(pos, "mcl_minecarts:minecart") - object:remove() end end end, From f3c540af5d879c3e8c5b2eb32eb2c9bbbb4bf0a7 Mon Sep 17 00:00:00 2001 From: kay27 Date: Mon, 10 May 2021 02:24:38 +0400 Subject: [PATCH 44/66] [mcl_mapgen_core, mcl_biomes] Make chorus growth deterministic --- mods/ITEMS/mcl_end/chorus_plant.lua | 16 ++++++++-------- mods/MAPGEN/mcl_biomes/init.lua | 7 +++++-- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/mods/ITEMS/mcl_end/chorus_plant.lua b/mods/ITEMS/mcl_end/chorus_plant.lua index 9622e618f..597842867 100644 --- a/mods/ITEMS/mcl_end/chorus_plant.lua +++ b/mods/ITEMS/mcl_end/chorus_plant.lua @@ -309,7 +309,7 @@ minetest.register_node("mcl_end:chorus_plant", { }) -- Grow a complete chorus plant at pos -mcl_end.grow_chorus_plant = function(pos, node) +mcl_end.grow_chorus_plant = function(pos, node, pr) local flowers = { pos } -- Plant initial flower (if it isn't there already) if not node then @@ -321,7 +321,7 @@ mcl_end.grow_chorus_plant = function(pos, node) while true do local new_flowers_list = {} for f=1, #flowers do - local new_flowers = mcl_end.grow_chorus_plant_step(flowers[f], minetest.get_node(flowers[f])) + local new_flowers = mcl_end.grow_chorus_plant_step(flowers[f], minetest.get_node(flowers[f]), pr) if #new_flowers > 0 then table.insert(new_flowers_list, new_flowers) end @@ -340,7 +340,7 @@ end -- Grow a single step of a chorus plant at pos. -- Pos must be a chorus flower. -mcl_end.grow_chorus_plant_step = function(pos, node) +mcl_end.grow_chorus_plant_step = function(pos, node, pr) local new_flower_buds = {} local above = { x = pos.x, y = pos.y + 1, z = pos.z } local node_above = minetest.get_node(above) @@ -396,7 +396,7 @@ mcl_end.grow_chorus_plant_step = function(pos, node) if grow_chance then local new_flowers = {} - local r = math.random(1, 100) + local r = pr:next(1, 100) local age = node.param2 if r <= grow_chance then table.insert(new_flowers, above) @@ -404,13 +404,13 @@ mcl_end.grow_chorus_plant_step = function(pos, node) age = age + 1 local branches if branching == false then - branches = math.random(1, 4) + branches = pr:next(1, 4) elseif branching == true then - branches = math.random(0, 3) + branches = pr:next(0, 3) end local branch_grown = false for b=1, branches do - local next_branch = math.random(1, #around) + local next_branch = pr:next(1, #around) local branch = vector.add(pos, around[next_branch]) local below_branch = vector.add(branch, {x=0,y=-1,z=0}) if minetest.get_node(below_branch).name == "air" then @@ -457,7 +457,7 @@ minetest.register_abm({ interval = 35.0, chance = 4.0, action = function(pos, node, active_object_count, active_object_count_wider) - mcl_end.grow_chorus_plant_step(pos, node) + mcl_end.grow_chorus_plant_step(pos, node, pr) end, }) diff --git a/mods/MAPGEN/mcl_biomes/init.lua b/mods/MAPGEN/mcl_biomes/init.lua index f583d87b6..cf9ccfb9e 100644 --- a/mods/MAPGEN/mcl_biomes/init.lua +++ b/mods/MAPGEN/mcl_biomes/init.lua @@ -3976,9 +3976,12 @@ if mg_name ~= "singlenode" then --local poslist = {} for _, pos in ipairs(gennotify["decoration#"..deco_id_chorus_plant] or {}) do local realpos = { x = pos.x, y = pos.y + 1, z = pos.z } - mcl_end.grow_chorus_plant(realpos) + local node = minetest.get_node(realpos) + if node and node.name == "mcl_end:chorus_flower" then + mcl_end.grow_chorus_plant(realpos, node, PseudoRandom(blockseed + 14)) + end end - end) + end, 999999999) end end From f054eb1ce60a653db9dc9a2bbe6cf8d8a8be619b Mon Sep 17 00:00:00 2001 From: kay27 Date: Mon, 10 May 2021 02:47:56 +0400 Subject: [PATCH 45/66] [mcl_biomes] Fix chorus random function, prevent chorus growth at return portal position --- mods/MAPGEN/mcl_biomes/init.lua | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/mods/MAPGEN/mcl_biomes/init.lua b/mods/MAPGEN/mcl_biomes/init.lua index cf9ccfb9e..3655be7eb 100644 --- a/mods/MAPGEN/mcl_biomes/init.lua +++ b/mods/MAPGEN/mcl_biomes/init.lua @@ -3974,14 +3974,18 @@ if mg_name ~= "singlenode" then mcl_mapgen_core.register_generator("chorus_grow", nil, function(minp, maxp, blockseed) local gennotify = minetest.get_mapgen_object("gennotify") --local poslist = {} + local pr = PseudoRandom(blockseed + 14) for _, pos in ipairs(gennotify["decoration#"..deco_id_chorus_plant] or {}) do - local realpos = { x = pos.x, y = pos.y + 1, z = pos.z } - local node = minetest.get_node(realpos) - if node and node.name == "mcl_end:chorus_flower" then - mcl_end.grow_chorus_plant(realpos, node, PseudoRandom(blockseed + 14)) + local x, y, z = pos.x, pos.y, pos.z + if x < -2 or x > 2 or z < -2 or z > 2 then + local realpos = { x = x, y = y + 1, z = z } + local node = minetest.get_node(realpos) + if node and node.name == "mcl_end:chorus_flower" then + mcl_end.grow_chorus_plant(realpos, node, pr) + end end end - end, 999999999) + end) end end From 81ee51b0c2663db964f6801a1c1e163941be0281 Mon Sep 17 00:00:00 2001 From: AFCMS Date: Mon, 10 May 2021 09:58:26 +0200 Subject: [PATCH 46/66] document script --- tools/README.md | 14 ++++++++++++++ tools/create_luacheck.py | 35 +++++++++++++++++------------------ 2 files changed, 31 insertions(+), 18 deletions(-) diff --git a/tools/README.md b/tools/README.md index abcc73ae3..4dc378bc1 100644 --- a/tools/README.md +++ b/tools/README.md @@ -27,3 +27,17 @@ Usage: - Convert the textures - Put the new texture directory in the Minetest texture pack directory, just like any other Minetest texture pack + +## Luacheck Globals Generators +This is a Python script which list every single global tables in mineclone2 source code. +It outputs a list to be used in luacheck conf files. + +Modes of operation: +- List global tables + +Requirements: +- Know how to use the console +- Python 3 + +Usage: +- In the console, run `python3 ./tools/create_luacheck.py` in the MineClone2 directory diff --git a/tools/create_luacheck.py b/tools/create_luacheck.py index a9caad38e..8b55c1376 100755 --- a/tools/create_luacheck.py +++ b/tools/create_luacheck.py @@ -2,44 +2,43 @@ import os import re from pathlib import Path +# Just run this script from mineclone2 directory to get a list of every global vars to use in luacheck configuration files + path = "./mods/" -# pattern = re.compile(r'^(?P[^ \t\]]+)[ ]*=[ ]*\{') -pattern = re.compile(r'^(?P[A-Za-z_0-9]+)[ ]*=[ ]*\{') -pattern_local = re.compile(r'local (?P[A-Za-z_0-9]+)') + +pattern = re.compile(r'^(?P[A-Za-z_0-9]+)[ ]*=[ ]*\{') +pattern_local = re.compile(r'local (?P[A-Za-z_0-9]+)') global_vars = [] + +print("---Copy/Paste output in your luacheck conf file---\n") + + pathlist = Path(path).rglob('*.lua') for path in pathlist: path_in_str = str(path) # print(path_in_str) trouve = False with open(path_in_str) as f: - variables_locales = [] + local_vars = [] for i, line in enumerate(f.readlines()): m = pattern.match(line) if m: - nomtableau = m.group('nomtableau') - if nomtableau not in variables_locales: - print(path_in_str, ":", i+1, ":", m.group('nomtableau').strip()) - global_vars.append(m.group('nomtableau').strip()) - trouve = True + global_name = m.group('global_var') + if global_name not in local_vars: + #print(path_in_str, ":", i+1, ":", m.group('global_var').strip()) + global_vars.append(m.group('global_var').strip()) + found = True break else: n = pattern_local.match(line) if n: - variables_locales.append(n.group('nomvar')) + local_vars.append(n.group('local_var')) - if not trouve: + if not found: nb_varloc = len(variables_locales) #print(path_in_str, ": -", "({} variables locales)".format(nb_varloc) if nb_varloc > 0 else '') -""" for subdir, dirs, files in os.walk(path): - for file in files: - print(os.path.join(subdir, file)) - filepath = subdir + os.sep + file - if filepath.endswith(".lua"): - print(filepath) """ - print(', '.join(['"{}"'.format(v) for v in global_vars])) From 6ffb7f525a991ebbf6ed4832f000a2c9b2441b36 Mon Sep 17 00:00:00 2001 From: NO11 Date: Mon, 10 May 2021 09:40:16 +0000 Subject: [PATCH 47/66] Add more crafting recipes for wooden planks (including stripped wood) --- mods/ITEMS/mcl_core/crafting.lua | 109 +++++++++++++++++++++---------- 1 file changed, 73 insertions(+), 36 deletions(-) diff --git a/mods/ITEMS/mcl_core/crafting.lua b/mods/ITEMS/mcl_core/crafting.lua index a0ad38a77..ded4364c3 100644 --- a/mods/ITEMS/mcl_core/crafting.lua +++ b/mods/ITEMS/mcl_core/crafting.lua @@ -4,47 +4,84 @@ -- Crafting definition -- -minetest.register_craft({ - output = 'mcl_core:wood 4', - recipe = { - {'mcl_core:tree'}, - } -}) +local craft_oak_planks = function(subname) + minetest.register_craft({ + output = "mcl_core:wood 4", + recipe = { + {"mcl_core:"..subname}, + } + }) +end +local craft_dark_oak_planks = function(subname) + minetest.register_craft({ + output = "mcl_core:darkwood 4", + recipe = { + {"mcl_core:"..subname}, + } + }) +end +local craft_jungle_planks = function(subname) + minetest.register_craft({ + output = "mcl_core:junglewood 4", + recipe = { + {"mcl_core:"..subname}, + } + }) +end +local craft_acacia_planks = function(subname) + minetest.register_craft({ + output = "mcl_core:acaciawood 4", + recipe = { + {"mcl_core:"..subname}, + } + }) +end +local craft_spruce_planks = function(subname) + minetest.register_craft({ + output = "mcl_core:sprucewood 4", + recipe = { + {"mcl_core:"..subname}, + } + }) +end +local craft_birch_planks = function(subname) + minetest.register_craft({ + output = "mcl_core:birchwood 4", + recipe = { + {"mcl_core:"..subname}, + } + }) +end -minetest.register_craft({ - output = 'mcl_core:darkwood 4', - recipe = { - {'mcl_core:darktree'}, - } -}) +craft_oak_planks("tree") +craft_oak_planks("tree_bark") +craft_oak_planks("stripped_oak") +craft_oak_planks("stripped_oak_bark") -minetest.register_craft({ - output = 'mcl_core:junglewood 4', - recipe = { - {'mcl_core:jungletree'}, - } -}) +craft_dark_oak_planks("darktree") +craft_dark_oak_planks("darktree_bark") +craft_dark_oak_planks("stripped_dark_oak") +craft_dark_oak_planks("stripped_dark_oak_bark") -minetest.register_craft({ - output = 'mcl_core:acaciawood 4', - recipe = { - {'mcl_core:acaciatree'}, - } -}) +craft_jungle_planks("jungletree") +craft_jungle_planks("jungletree_bark") +craft_jungle_planks("stripped_jungle") +craft_jungle_planks("stripped_jungle_bark") -minetest.register_craft({ - output = 'mcl_core:sprucewood 4', - recipe = { - {'mcl_core:sprucetree'}, - } -}) +craft_acacia_planks("acaciatree") +craft_acacia_planks("acaciatree_bark") +craft_acacia_planks("stripped_acacia") +craft_acacia_planks("stripped_acacia_bark") -minetest.register_craft({ - output = 'mcl_core:birchwood 4', - recipe = { - {'mcl_core:birchtree'}, - } -}) +craft_spruce_planks("sprucetree") +craft_spruce_planks("sprucetree_bark") +craft_spruce_planks("stripped_spruce") +craft_spruce_planks("stripped_spruce_bark") + +craft_birch_planks("birchtree") +craft_birch_planks("birchtree_bark") +craft_birch_planks("stripped_birch") +craft_birch_planks("stripped_birch_bark") minetest.register_craft({ type = 'shapeless', From 9fa51dc6b9593a7723fde51ef23557b2a0b45137 Mon Sep 17 00:00:00 2001 From: NO11 Date: Mon, 10 May 2021 10:06:34 +0000 Subject: [PATCH 48/66] Simplify wooden planks crafting --- mods/ITEMS/mcl_core/crafting.lua | 95 ++++++++++---------------------- 1 file changed, 28 insertions(+), 67 deletions(-) diff --git a/mods/ITEMS/mcl_core/crafting.lua b/mods/ITEMS/mcl_core/crafting.lua index ded4364c3..44f49a4d4 100644 --- a/mods/ITEMS/mcl_core/crafting.lua +++ b/mods/ITEMS/mcl_core/crafting.lua @@ -4,84 +4,45 @@ -- Crafting definition -- -local craft_oak_planks = function(subname) +local craft_planks = function(output, input) minetest.register_craft({ - output = "mcl_core:wood 4", + output = "mcl_core:"..output.."wood 4", recipe = { - {"mcl_core:"..subname}, - } - }) -end -local craft_dark_oak_planks = function(subname) - minetest.register_craft({ - output = "mcl_core:darkwood 4", - recipe = { - {"mcl_core:"..subname}, - } - }) -end -local craft_jungle_planks = function(subname) - minetest.register_craft({ - output = "mcl_core:junglewood 4", - recipe = { - {"mcl_core:"..subname}, - } - }) -end -local craft_acacia_planks = function(subname) - minetest.register_craft({ - output = "mcl_core:acaciawood 4", - recipe = { - {"mcl_core:"..subname}, - } - }) -end -local craft_spruce_planks = function(subname) - minetest.register_craft({ - output = "mcl_core:sprucewood 4", - recipe = { - {"mcl_core:"..subname}, - } - }) -end -local craft_birch_planks = function(subname) - minetest.register_craft({ - output = "mcl_core:birchwood 4", - recipe = { - {"mcl_core:"..subname}, + {"mcl_core:"..input}, } }) end -craft_oak_planks("tree") -craft_oak_planks("tree_bark") -craft_oak_planks("stripped_oak") -craft_oak_planks("stripped_oak_bark") +craft_planks("", "tree") +craft_planks("", "tree_bark") +craft_planks("", "stripped_oak") +craft_planks("", "stripped_oak_bark") -craft_dark_oak_planks("darktree") -craft_dark_oak_planks("darktree_bark") -craft_dark_oak_planks("stripped_dark_oak") -craft_dark_oak_planks("stripped_dark_oak_bark") +craft_planks("dark", "darktree") +craft_planks("dark", "darktree_bark") +craft_planks("dark", "stripped_dark_oak") +craft_planks("dark", "stripped_dark_oak_bark") -craft_jungle_planks("jungletree") -craft_jungle_planks("jungletree_bark") -craft_jungle_planks("stripped_jungle") -craft_jungle_planks("stripped_jungle_bark") +craft_planks("jungle", "jungletree") +craft_planks("jungle", "jungletree_bark") +craft_planks("jungle", "stripped_jungle") +craft_planks("jungle", "stripped_jungle_bark") -craft_acacia_planks("acaciatree") -craft_acacia_planks("acaciatree_bark") -craft_acacia_planks("stripped_acacia") -craft_acacia_planks("stripped_acacia_bark") +craft_planks("acacia", "acaciatree") +craft_planks("acacia", "acaciatree_bark") +craft_planks("acacia", "stripped_acacia") +craft_planks("acacia", "stripped_acacia_bark") -craft_spruce_planks("sprucetree") -craft_spruce_planks("sprucetree_bark") -craft_spruce_planks("stripped_spruce") -craft_spruce_planks("stripped_spruce_bark") +craft_planks("spruce", "sprucetree") +craft_planks("spruce", "sprucetree_bark") +craft_planks("spruce", "stripped_spruce") +craft_planks("spruce", "stripped_spruce_bark") + +craft_planks("birch", "birchtree") +craft_planks("birch", "birchtree_bark") +craft_planks("birch", "stripped_birch") +craft_planks("birch", "stripped_birch_bark") -craft_birch_planks("birchtree") -craft_birch_planks("birchtree_bark") -craft_birch_planks("stripped_birch") -craft_birch_planks("stripped_birch_bark") minetest.register_craft({ type = 'shapeless', From 11d700b78594e8876f7718482f5fbb5313ff2ad0 Mon Sep 17 00:00:00 2001 From: NO11 Date: Mon, 10 May 2021 19:47:46 +0000 Subject: [PATCH 49/66] Update my credits in CREDITS.md --- CREDITS.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CREDITS.md b/CREDITS.md index c6ca7d0fb..296e7c23b 100644 --- a/CREDITS.md +++ b/CREDITS.md @@ -22,6 +22,7 @@ * Nicu * aligator * Code-Sploit +* NO11 ## Contributors * Laurent Rocher @@ -40,7 +41,6 @@ * Jared Moody * Li0n * Midgard -* NO11 * Saku Laesvuori * Yukitty * ZedekThePD @@ -102,6 +102,7 @@ * leorockway * xMrVizzy * yutyo +* NO11 ## Translations * Wuzzy From 7e132866bf0570a6c8dc2f470492216816a6ca4c Mon Sep 17 00:00:00 2001 From: NO11 Date: Mon, 10 May 2021 19:47:51 +0000 Subject: [PATCH 50/66] Update my credits in mcl_credits --- mods/HUD/mcl_credits/init.lua | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/mods/HUD/mcl_credits/init.lua b/mods/HUD/mcl_credits/init.lua index 4464a401b..294373875 100644 --- a/mods/HUD/mcl_credits/init.lua +++ b/mods/HUD/mcl_credits/init.lua @@ -28,6 +28,7 @@ mcl_credits.people = { "Nicu", "aligator", "Code-Sploit", + "NO11", }}, {"Contributors", 0x52FF00, { "Laurent Rocher", @@ -46,7 +47,6 @@ mcl_credits.people = { "Jared Moody", "Li0n", "Midgard", - "NO11", "Saku Laesvuori", "Yukitty", "ZedekThePD", @@ -107,7 +107,8 @@ mcl_credits.people = { "kingoscargames", "leorockway", "xMrVizzy", - "yutyo" + "yutyo", + "NO11", }}, {"Translations", 0x00FF60, { "Wuzzy", From 074e8c83892f809de38c59a54546273525581828 Mon Sep 17 00:00:00 2001 From: AFCMS Date: Tue, 11 May 2021 00:43:17 +0200 Subject: [PATCH 51/66] remove unused optional depends to lucky_block lucky_block is mtg mod and never used at any place in the code --- mods/ENTITIES/mcl_mobs/mod.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mods/ENTITIES/mcl_mobs/mod.conf b/mods/ENTITIES/mcl_mobs/mod.conf index 0d622f6a9..9dfb43aef 100644 --- a/mods/ENTITIES/mcl_mobs/mod.conf +++ b/mods/ENTITIES/mcl_mobs/mod.conf @@ -2,4 +2,4 @@ name = mcl_mobs author = PilzAdam description = Adds a mob API for mods to add animals or monsters, etc. depends = mcl_particles -optional_depends = mcl_weather, mcl_explosions, mcl_hunger, mcl_worlds, invisibility, lucky_block, cmi, doc_identifier, mcl_armor, mcl_portals, mcl_experience +optional_depends = mcl_weather, mcl_explosions, mcl_hunger, mcl_worlds, invisibility, cmi, doc_identifier, mcl_armor, mcl_portals, mcl_experience From 052bb540baf9487d08fd8feb3bfc85052b545214 Mon Sep 17 00:00:00 2001 From: jordan4ibanez Date: Mon, 10 May 2021 20:06:38 -0400 Subject: [PATCH 52/66] Remove unused parent data for arrows --- mods/ITEMS/mcl_bows/arrow.lua | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/mods/ITEMS/mcl_bows/arrow.lua b/mods/ITEMS/mcl_bows/arrow.lua index a6f0c13db..c34e93479 100644 --- a/mods/ITEMS/mcl_bows/arrow.lua +++ b/mods/ITEMS/mcl_bows/arrow.lua @@ -118,16 +118,6 @@ ARROW_ENTITY.on_step = function(self, dtime) dpos = vector.round(dpos) local node = minetest.get_node(dpos) - if self.object:get_attach() ~= nil and self.object:get_attach(parent):get_hp() < 1 then - self.object:remove() - end - - minetest.register_on_leaveplayer(function(player) - if self.object:get_attach(parent) == player then - self.object:remove() - end - end) - if self._stuck then self._stucktimer = self._stucktimer + dtime self._stuckrechecktimer = self._stuckrechecktimer + dtime From ad4e86decaa4a833ea9e90e623a662a4c987a34c Mon Sep 17 00:00:00 2001 From: jordan4ibanez Date: Mon, 10 May 2021 20:17:43 -0400 Subject: [PATCH 53/66] Fix #1726 --- mods/PLAYER/mcl_hunger/init.lua | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/mods/PLAYER/mcl_hunger/init.lua b/mods/PLAYER/mcl_hunger/init.lua index 6b9998574..d212e631a 100644 --- a/mods/PLAYER/mcl_hunger/init.lua +++ b/mods/PLAYER/mcl_hunger/init.lua @@ -137,14 +137,14 @@ local timerMult = 1 -- Cycles from 0 to 7, each time when timer hits half a seco minetest.register_globalstep(function(dtime) main_timer = main_timer + dtime timer = timer + dtime - if main_timer > mcl_hunger.HUD_TICK or timer > 0.5 then + if main_timer > mcl_hunger.HUD_TICK or timer > 0.25 then if main_timer > mcl_hunger.HUD_TICK then main_timer = 0 end for _,player in pairs(minetest.get_connected_players()) do local name = player:get_player_name() local h = tonumber(mcl_hunger.get_hunger(player)) local hp = player:get_hp() - if timer > 0.5 then + if timer > 0.25 then -- Slow health regeneration, and hunger damage (every 4s). -- Regeneration rate based on tutorial video . -- Minecraft Wiki seems to be wrong in claiming that full hunger gives 0.5s regen rate. @@ -166,9 +166,9 @@ minetest.register_globalstep(function(dtime) end end end - if timer > 0.5 then + if timer > 0.25 then timer = 0 - timerMult = timerMult + 1 + timerMult = timerMult + 2 if timerMult > 7 then timerMult = 0 end From 0ad03acf469a900ff11009cd3a843783b5845aea Mon Sep 17 00:00:00 2001 From: AFCMS Date: Thu, 13 May 2021 22:55:17 +0200 Subject: [PATCH 54/66] improve mcl_worlds API --- mods/CORE/mcl_worlds/init.lua | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/mods/CORE/mcl_worlds/init.lua b/mods/CORE/mcl_worlds/init.lua index 6cdeaab7e..435ce51c7 100644 --- a/mods/CORE/mcl_worlds/init.lua +++ b/mods/CORE/mcl_worlds/init.lua @@ -112,10 +112,11 @@ local last_dimension = {} -- * player: Player who changed the dimension -- * dimension: New dimension ("overworld", "nether", "end", "void") function mcl_worlds.dimension_change(player, dimension) + local playername = player:get_player_name() for i=1, #mcl_worlds.registered_on_dimension_change do - mcl_worlds.registered_on_dimension_change[i](player, dimension) - last_dimension[player:get_player_name()] = dimension + mcl_worlds.registered_on_dimension_change[i](player, dimension, last_dimension[playername]) end + last_dimension[playername] = dimension end ----------------------- INTERNAL STUFF ---------------------- From d5ec2ccbd8f02f23482711be60260407bce70b9b Mon Sep 17 00:00:00 2001 From: AFCMS Date: Thu, 13 May 2021 23:09:47 +0200 Subject: [PATCH 55/66] fix doc --- mods/CORE/mcl_worlds/API.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/mods/CORE/mcl_worlds/API.md b/mods/CORE/mcl_worlds/API.md index a5509431c..dd96b01b5 100644 --- a/mods/CORE/mcl_worlds/API.md +++ b/mods/CORE/mcl_worlds/API.md @@ -61,20 +61,21 @@ In mc, you cant use clock in the nether and the end. * pos: position -## mcl_worlds.register_on_dimension_change(function(player, dimension)) +## mcl_worlds.register_on_dimension_change(function(player, dimension, last_dimension)) Register a callback function func(player, dimension). It will be called whenever a player changes between dimensions. The void counts as dimension. -* player: player, the player who changed the dimension -* dimension: position, The new dimension of the player ("overworld", "nether", "end", "void"). +* player: player, the player who changed of dimension +* dimension: string, The new dimension of the player ("overworld", "nether", "end", "void"). +* last_dimension: string, The dimension where the player was ("overworld", "nether", "end", "void"). ## mcl_worlds.registered_on_dimension_change Table containing all function registered with mcl_worlds.register_on_dimension_change() ## mcl_worlds.dimension_change(player, dimension) -Notify this mod of a dimmension change of to +Notify this mod of a dimension change of to * player: player, player who changed the dimension * dimension: string, new dimension ("overworld", "nether", "end", "void") \ No newline at end of file From 866c097d56b12a8ada819abff86a49b59269edf5 Mon Sep 17 00:00:00 2001 From: AFCMS Date: Fri, 14 May 2021 09:19:44 +0200 Subject: [PATCH 56/66] fix typo --- mods/ENTITIES/mobs_mc/guardian_elder.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mods/ENTITIES/mobs_mc/guardian_elder.lua b/mods/ENTITIES/mobs_mc/guardian_elder.lua index 4fb989e2f..e44796bad 100644 --- a/mods/ENTITIES/mobs_mc/guardian_elder.lua +++ b/mods/ENTITIES/mobs_mc/guardian_elder.lua @@ -15,7 +15,7 @@ mobs:register_mob("mobs_mc:guardian_elder", { xp_min = 10, xp_max = 10, breath_max = -1, - passive = false, + passive = false, attack_type = "punch", pathfinding = 1, view_range = 16, From 86d1e0ac12046ec521207a5169aab1b69479f4c2 Mon Sep 17 00:00:00 2001 From: AFCMS Date: Fri, 14 May 2021 09:34:40 +0200 Subject: [PATCH 57/66] fix duplicated assignement --- mods/ENTITIES/mobs_mc/0_gameconfig.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mods/ENTITIES/mobs_mc/0_gameconfig.lua b/mods/ENTITIES/mobs_mc/0_gameconfig.lua index 3476bee4c..c947e9185 100644 --- a/mods/ENTITIES/mobs_mc/0_gameconfig.lua +++ b/mods/ENTITIES/mobs_mc/0_gameconfig.lua @@ -15,7 +15,7 @@ with name "mobs_mc_gameconfig". ]] -- Set to false in your gameconfig mod if you create your own monster egg nodes. mobs_mc.create_monster_egg_nodes = true -mobs_mc.items = {} +--mobs_mc.items = {} mobs_mc.items = { -- Items defined in mobs_mc From bcea5a35efd1b69b32a3f7208b8ad611a28bdd64 Mon Sep 17 00:00:00 2001 From: Code-Sploit Date: Fri, 14 May 2021 08:22:10 +0000 Subject: [PATCH 58/66] Try to fix unknown variable in mcl_chorus_flower --- mods/MAPGEN/mcl_biomes/init.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mods/MAPGEN/mcl_biomes/init.lua b/mods/MAPGEN/mcl_biomes/init.lua index 3655be7eb..d4ebe00d3 100644 --- a/mods/MAPGEN/mcl_biomes/init.lua +++ b/mods/MAPGEN/mcl_biomes/init.lua @@ -3974,7 +3974,7 @@ if mg_name ~= "singlenode" then mcl_mapgen_core.register_generator("chorus_grow", nil, function(minp, maxp, blockseed) local gennotify = minetest.get_mapgen_object("gennotify") --local poslist = {} - local pr = PseudoRandom(blockseed + 14) + pr = PseudoRandom(blockseed + 14) for _, pos in ipairs(gennotify["decoration#"..deco_id_chorus_plant] or {}) do local x, y, z = pos.x, pos.y, pos.z if x < -2 or x > 2 or z < -2 or z > 2 then From f4c302e582319e2d92b3006384ee59901be213ec Mon Sep 17 00:00:00 2001 From: NO11 Date: Fri, 14 May 2021 10:07:42 +0000 Subject: [PATCH 59/66] Fix #1718 (Give potion particles the same color as in mc) part1 --- mods/ITEMS/mcl_potions/potions.lua | 62 +++++++++++++++--------------- 1 file changed, 31 insertions(+), 31 deletions(-) diff --git a/mods/ITEMS/mcl_potions/potions.lua b/mods/ITEMS/mcl_potions/potions.lua index 2d76a217b..b9c2aad24 100644 --- a/mods/ITEMS/mcl_potions/potions.lua +++ b/mods/ITEMS/mcl_potions/potions.lua @@ -459,7 +459,7 @@ local healing_def = { _tt = S("+4 HP"), _tt_2 = S("+8 HP"), _longdesc = S("Instantly heals."), - color = "#CC0000", + color = "#F82423", effect = 4, instant = true, on_use = mcl_potions.healing_func, @@ -473,7 +473,7 @@ local harming_def = { _tt = S("-6 HP"), _tt_II = S("-12 HP"), _longdesc = S("Instantly deals damage."), - color = "#660099", + color = "#430A09", effect = -6, instant = true, on_use = mcl_potions.healing_func, @@ -486,7 +486,7 @@ local night_vision_def = { description = S("Night Vision"), _tt = nil, _longdesc = S("Increases the perceived brightness of light under a dark sky."), - color = "#1010AA", + color = "#1F1FA1", effect = nil, is_dur = true, on_use = mcl_potions.night_vision_func, @@ -498,7 +498,7 @@ local swiftness_def = { description = S("Swiftness"), _tt = nil, _longdesc = S("Increases walking speed."), - color = "#009999", + color = "#7CAFC6", effect = 1.2, is_dur = true, on_use = mcl_potions.swiftness_func, @@ -511,7 +511,7 @@ local slowness_def = { description = S("Slowness"), _tt = nil, _longdesc = S("Decreases walking speed."), - color = "#000080", + color = "#5A6C81", effect = 0.85, is_dur = true, on_use = mcl_potions.swiftness_func, @@ -525,7 +525,7 @@ local leaping_def = { description = S("Leaping"), _tt = nil, _longdesc = S("Increases jump strength."), - color = "#00CC33", + color = "#22FF4C", effect = 1.15, is_dur = true, on_use = mcl_potions.leaping_func, @@ -538,7 +538,7 @@ local poison_def = { description = S("Poison"), _tt = nil, _longdesc = S("Applies the poison effect which deals damage at a regular interval."), - color = "#447755", + color = "#4E9331", effect = 2.5, is_dur = true, on_use = mcl_potions.poison_func, @@ -552,7 +552,7 @@ local regeneration_def = { description = S("Regeneration"), _tt = nil, _longdesc = S("Regenerates health over time."), - color = "#B52CC2", + color = "#CD5CAB", effect = 2.5, is_dur = true, on_use = mcl_potions.regeneration_func, @@ -565,7 +565,7 @@ local invisibility_def = { description = S("Invisibility"), _tt = nil, _longdesc = S("Grants invisibility."), - color = "#B0B0B0", + color = "#7F8392", is_dur = true, on_use = mcl_potions.invisiblility_func, is_plus = true, @@ -576,7 +576,7 @@ local water_breathing_def = { description = S("Water Breathing"), _tt = nil, _longdesc = S("Grants limitless breath underwater."), - color = "#0000AA", + color = "#2E5299", is_dur = true, on_use = mcl_potions.water_breathing_func, is_plus = true, @@ -587,7 +587,7 @@ local fire_resistance_def = { description = S("Fire Resistance"), _tt = nil, _longdesc = S("Grants immunity to damage from heat sources like fire."), - color = "#D0A040", + color = "#E49A3A", is_dur = true, on_use = mcl_potions.fire_resistance_func, is_plus = true, @@ -611,22 +611,22 @@ end -- description = S("Weakness"), -- _tt_help = TODO, -- _doc_items_longdesc = brewhelp, --- wield_image = potion_image("#6600AA"), --- inventory_image = potion_image("#6600AA"), +-- wield_image = potion_image("#484D48"), +-- inventory_image = potion_image("#484D48"), -- groups = { brewitem=1, food=3, can_eat_when_full=1 }, -- stack_max = 1, -- -- on_place = function(itemstack, user, pointed_thing) -- mcl_potions.weakness_func(user, -4, mcl_potions.DURATION*mcl_potions.INV_FACTOR) -- minetest.do_item_eat(0, "mcl_potions:glass_bottle", itemstack, user, pointed_thing) --- mcl_potions._use_potion(itemstack, user, "#6600AA") +-- mcl_potions._use_potion(itemstack, user, "#484D48") -- return itemstack -- end, -- -- on_secondary_use = function(itemstack, user, pointed_thing) -- mcl_potions.weakness_func(user, -4, mcl_potions.DURATION*mcl_potions.INV_FACTOR) -- minetest.do_item_eat(0, "mcl_potions:glass_bottle", itemstack, user, pointed_thing) --- mcl_potions._use_potion(itemstack, user, "#6600AA") +-- mcl_potions._use_potion(itemstack, user, "#484D48") -- return itemstack -- end -- }) @@ -635,22 +635,22 @@ end -- description = S("Weakness +"), -- _tt_help = TODO, -- _doc_items_longdesc = brewhelp, --- wield_image = potion_image("#7700BB"), --- inventory_image = potion_image("#7700BB"), +-- wield_image = potion_image("#484D48"), +-- inventory_image = potion_image("#484D48"), -- groups = { brewitem=1, food=3, can_eat_when_full=1 }, -- stack_max = 1, -- -- on_place = function(itemstack, user, pointed_thing) -- mcl_potions.weakness_func(user, -4, mcl_potions.DURATION_2*mcl_potions.INV_FACTOR) -- minetest.do_item_eat(0, "mcl_potions:glass_bottle", itemstack, user, pointed_thing) --- mcl_potions._use_potion(itemstack, user, "#7700BB") +-- mcl_potions._use_potion(itemstack, user, "#484D48") -- return itemstack -- end, -- -- on_secondary_use = function(itemstack, user, pointed_thing) -- mcl_potions.weakness_func(user, -4, mcl_potions.DURATION_2*mcl_potions.INV_FACTOR) -- minetest.do_item_eat(0, "mcl_potions:glass_bottle", itemstack, user, pointed_thing) --- mcl_potions._use_potion(itemstack, user, "#7700BB") +-- mcl_potions._use_potion(itemstack, user, "#484D48") -- return itemstack -- end -- }) @@ -659,22 +659,22 @@ end -- description = S("Strength"), -- _tt_help = TODO, -- _doc_items_longdesc = brewhelp, --- wield_image = potion_image("#D444D4"), --- inventory_image = potion_image("#D444D4"), +-- wield_image = potion_image("#932423"), +-- inventory_image = potion_image("#932423"), -- groups = { brewitem=1, food=3, can_eat_when_full=1 }, -- stack_max = 1, -- -- on_place = function(itemstack, user, pointed_thing) -- mcl_potions.weakness_func(user, 3, mcl_potions.DURATION) -- minetest.do_item_eat(0, "mcl_potions:glass_bottle", itemstack, user, pointed_thing) --- mcl_potions._use_potion(itemstack, user, "#D444D4") +-- mcl_potions._use_potion(itemstack, user, "#932423") -- return itemstack -- end, -- -- on_secondary_use = function(itemstack, user, pointed_thing) -- mcl_potions.weakness_func(user, 3, mcl_potions.DURATION) -- minetest.do_item_eat(0, "mcl_potions:glass_bottle", itemstack, user, pointed_thing) --- mcl_potions._use_potion(itemstack, user, "#D444D4") +-- mcl_potions._use_potion(itemstack, user, "#932423") -- return itemstack -- end -- }) @@ -683,22 +683,22 @@ end -- description = S("Strength II"), -- _tt_help = TODO, -- _doc_items_longdesc = brewhelp, --- wield_image = potion_image("#D444E4"), --- inventory_image = potion_image("#D444E4"), +-- wield_image = potion_image("#932423"), +-- inventory_image = potion_image("#932423"), -- groups = { brewitem=1, food=3, can_eat_when_full=1 }, -- stack_max = 1, -- -- on_place = function(itemstack, user, pointed_thing) -- mcl_potions.weakness_func(user, 6, mcl_potions.DURATION_2) -- minetest.do_item_eat(0, "mcl_potions:glass_bottle", itemstack, user, pointed_thing) --- mcl_potions._use_potion(itemstack, user, "#D444E4") +-- mcl_potions._use_potion(itemstack, user, "#932423") -- return itemstack -- end, -- -- on_secondary_use = function(itemstack, user, pointed_thing) -- mcl_potions.weakness_func(user, 6, mcl_potions.DURATION_2) -- minetest.do_item_eat(0, "mcl_potions:glass_bottle", itemstack, user, pointed_thing) --- mcl_potions._use_potion(itemstack, user, "#D444E4") +-- mcl_potions._use_potion(itemstack, user, "#932423") -- return itemstack -- end -- }) @@ -707,22 +707,22 @@ end -- description = S("Strength +"), -- _tt_help = TODO, -- _doc_items_longdesc = brewhelp, --- wield_image = potion_image("#D444F4"), --- inventory_image = potion_image("#D444F4"), +-- wield_image = potion_image("#932423"), +-- inventory_image = potion_image("#932423"), -- groups = { brewitem=1, food=3, can_eat_when_full=1 }, -- stack_max = 1, -- -- on_place = function(itemstack, user, pointed_thing) -- mcl_potions.weakness_func(user, 3, mcl_potions.DURATION_PLUS) -- minetest.do_item_eat(0, "mcl_potions:glass_bottle", itemstack, user, pointed_thing) --- mcl_potions._use_potion(itemstack, user, "#D444F4") +-- mcl_potions._use_potion(itemstack, user, "#932423") -- return itemstack -- end, -- -- on_secondary_use = function(itemstack, user, pointed_thing) -- mcl_potions.weakness_func(user, 3, mcl_potions.DURATION_PLUS) -- minetest.do_item_eat(0, "mcl_potions:glass_bottle", itemstack, user, pointed_thing) --- mcl_potions._use_potion(itemstack, user, "#D444F4") +-- mcl_potions._use_potion(itemstack, user, "#932423") -- return itemstack -- end -- }) From be9fb5be47aa1e848f04746617f870eaf293f297 Mon Sep 17 00:00:00 2001 From: NO11 Date: Fri, 14 May 2021 10:07:58 +0000 Subject: [PATCH 60/66] Fix #1718 (Give potion particles the same color as in mc) part2 --- mods/ITEMS/mcl_potions/functions.lua | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/mods/ITEMS/mcl_potions/functions.lua b/mods/ITEMS/mcl_potions/functions.lua index 55a98ba9d..b4e1d9448 100644 --- a/mods/ITEMS/mcl_potions/functions.lua +++ b/mods/ITEMS/mcl_potions/functions.lua @@ -107,7 +107,7 @@ minetest.register_globalstep(function(dtime) EF.invisible[player].timer = EF.invisible[player].timer + dtime - if player:get_pos() then mcl_potions._add_spawner(player, "#B0B0B0") end + if player:get_pos() then mcl_potions._add_spawner(player, "#7F8392") end if EF.invisible[player].timer >= EF.invisible[player].dur then mcl_potions.make_invisible(player, false) @@ -129,7 +129,7 @@ minetest.register_globalstep(function(dtime) EF.poisoned[player].timer = EF.poisoned[player].timer + dtime EF.poisoned[player].hit_timer = (EF.poisoned[player].hit_timer or 0) + dtime - if player:get_pos() then mcl_potions._add_spawner(player, "#225533") end + if player:get_pos() then mcl_potions._add_spawner(player, "#4E9331") end if EF.poisoned[player].hit_timer >= EF.poisoned[player].step then if mcl_util.get_hp(player) - 1 > 0 then @@ -158,7 +158,7 @@ minetest.register_globalstep(function(dtime) EF.regenerating[player].timer = EF.regenerating[player].timer + dtime EF.regenerating[player].heal_timer = (EF.regenerating[player].heal_timer or 0) + dtime - if player:get_pos() then mcl_potions._add_spawner(player, "#A52BB2") end + if player:get_pos() then mcl_potions._add_spawner(player, "#CD5CAB") end if EF.regenerating[player].heal_timer >= EF.regenerating[player].step then @@ -192,7 +192,7 @@ minetest.register_globalstep(function(dtime) EF.water_breathing[player].timer = EF.water_breathing[player].timer + dtime - if player:get_pos() then mcl_potions._add_spawner(player, "#0000AA") end + if player:get_pos() then mcl_potions._add_spawner(player, "#2E5299") end if player:get_breath() then if player:get_breath() < 10 then player:set_breath(10) end @@ -217,7 +217,7 @@ minetest.register_globalstep(function(dtime) EF.leaping[player].timer = EF.leaping[player].timer + dtime - if player:get_pos() then mcl_potions._add_spawner(player, "#00CC33") end + if player:get_pos() then mcl_potions._add_spawner(player, "#22FF4C") end if EF.leaping[player].timer >= EF.leaping[player].dur then playerphysics.remove_physics_factor(player, "jump", "mcl_potions:leaping") @@ -239,7 +239,7 @@ minetest.register_globalstep(function(dtime) EF.swift[player].timer = EF.swift[player].timer + dtime - if player:get_pos() then mcl_potions._add_spawner(player, "#009999") end + if player:get_pos() then mcl_potions._add_spawner(player, "#7CAFC6") end if EF.swift[player].timer >= EF.swift[player].dur then playerphysics.remove_physics_factor(player, "speed", "mcl_potions:swiftness") @@ -261,7 +261,7 @@ minetest.register_globalstep(function(dtime) EF.night_vision[player].timer = EF.night_vision[player].timer + dtime - if player:get_pos() then mcl_potions._add_spawner(player, "#1010AA") end + if player:get_pos() then mcl_potions._add_spawner(player, "#1F1FA1") end if EF.night_vision[player].timer >= EF.night_vision[player].dur then EF.night_vision[player] = nil @@ -286,7 +286,7 @@ minetest.register_globalstep(function(dtime) EF.fire_proof[player].timer = EF.fire_proof[player].timer + dtime - if player:get_pos() then mcl_potions._add_spawner(player, "#E0B050") end + if player:get_pos() then mcl_potions._add_spawner(player, "#E49A3A") end if EF.fire_proof[player].timer >= EF.fire_proof[player].dur then EF.fire_proof[player] = nil @@ -307,7 +307,7 @@ minetest.register_globalstep(function(dtime) EF.weak[player].timer = EF.weak[player].timer + dtime - if player:get_pos() then mcl_potions._add_spawner(player, "#7700BB") end + if player:get_pos() then mcl_potions._add_spawner(player, "#484D48") end if EF.weak[player].timer >= EF.weak[player].dur then EF.weak[player] = nil @@ -328,7 +328,7 @@ minetest.register_globalstep(function(dtime) EF.strong[player].timer = EF.strong[player].timer + dtime - if player:get_pos() then mcl_potions._add_spawner(player, "#7700BB") end + if player:get_pos() then mcl_potions._add_spawner(player, "#932423") end if EF.strong[player].timer >= EF.strong[player].dur then EF.strong[player] = nil From 9e095980c8427da79da234723114fa053d9b725a Mon Sep 17 00:00:00 2001 From: NO11 Date: Fri, 14 May 2021 15:00:34 +0000 Subject: [PATCH 61/66] Simplify wooden planks crafting even more --- mods/ITEMS/mcl_core/crafting.lua | 43 +++++++++++--------------------- 1 file changed, 14 insertions(+), 29 deletions(-) diff --git a/mods/ITEMS/mcl_core/crafting.lua b/mods/ITEMS/mcl_core/crafting.lua index 44f49a4d4..f031c7ca2 100644 --- a/mods/ITEMS/mcl_core/crafting.lua +++ b/mods/ITEMS/mcl_core/crafting.lua @@ -13,36 +13,21 @@ local craft_planks = function(output, input) }) end -craft_planks("", "tree") -craft_planks("", "tree_bark") -craft_planks("", "stripped_oak") -craft_planks("", "stripped_oak_bark") - -craft_planks("dark", "darktree") -craft_planks("dark", "darktree_bark") -craft_planks("dark", "stripped_dark_oak") -craft_planks("dark", "stripped_dark_oak_bark") - -craft_planks("jungle", "jungletree") -craft_planks("jungle", "jungletree_bark") -craft_planks("jungle", "stripped_jungle") -craft_planks("jungle", "stripped_jungle_bark") - -craft_planks("acacia", "acaciatree") -craft_planks("acacia", "acaciatree_bark") -craft_planks("acacia", "stripped_acacia") -craft_planks("acacia", "stripped_acacia_bark") - -craft_planks("spruce", "sprucetree") -craft_planks("spruce", "sprucetree_bark") -craft_planks("spruce", "stripped_spruce") -craft_planks("spruce", "stripped_spruce_bark") - -craft_planks("birch", "birchtree") -craft_planks("birch", "birchtree_bark") -craft_planks("birch", "stripped_birch") -craft_planks("birch", "stripped_birch_bark") +local planks = { + {"", "oak"}, + {"dark", "dark_oak"}, + {"jungle", "jungle"}, + {"acacia", "acacia"}, + {"spruce", "spruce"}, + {"birch", "birch"} +} +for _, p in pairs(planks) do + craft_planks(p[1], p[1].."tree") + craft_planks(p[1], p[1].."tree_bark") + craft_planks(p[1], "stripped_"..p[2]) + craft_planks(p[1], "stripped_"..p[2].."_bark") +end minetest.register_craft({ type = 'shapeless', From 9ae11194386aedcdeae247d4aca2350fd8f23a03 Mon Sep 17 00:00:00 2001 From: kay27 Date: Sat, 15 May 2021 03:17:16 +0400 Subject: [PATCH 62/66] [mcl_mobs] Fix server crash for mobs in unloaded areas, https://git.minetest.land/MineClone2/MineClone2/issues/1703 --- mods/ENTITIES/mcl_mobs/api/mob_functions/ai.lua | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/mods/ENTITIES/mcl_mobs/api/mob_functions/ai.lua b/mods/ENTITIES/mcl_mobs/api/mob_functions/ai.lua index eda7e8871..d75bda6c6 100644 --- a/mods/ENTITIES/mcl_mobs/api/mob_functions/ai.lua +++ b/mods/ENTITIES/mcl_mobs/api/mob_functions/ai.lua @@ -938,10 +938,13 @@ mobs.mob_step = function(self, dtime) end end - if self.burn_timer == 0 and minetest_get_node_light(pos) > 12 and minetest_get_node_light(pos, 0.5) == 15 then - mcl_burning.set_on_fire(self.object, 1) - self.burn_timer = 1 --1.7 seconds - self.pause_timer = 0.4 + if self.burn_timer == 0 then + local light_current, light_day = minetest_get_node_light(pos), minetest_get_node_light(pos, 0.5) + if light_current and light_day and light_current > 12 and light_day == 15 then + mcl_burning.set_on_fire(self.object, 1) + self.burn_timer = 1 --1.7 seconds + self.pause_timer = 0.4 + end end end From cb82e3c9c55f7f9dd3269c870419987f64772c37 Mon Sep 17 00:00:00 2001 From: NO11 Date: Sun, 16 May 2021 21:13:07 +0000 Subject: [PATCH 63/66] Make a cobweb protect from fall damage --- mods/PLAYER/mcl_playerplus/init.lua | 3 +++ 1 file changed, 3 insertions(+) diff --git a/mods/PLAYER/mcl_playerplus/init.lua b/mods/PLAYER/mcl_playerplus/init.lua index 9436ae94d..7b7920ee0 100644 --- a/mods/PLAYER/mcl_playerplus/init.lua +++ b/mods/PLAYER/mcl_playerplus/init.lua @@ -549,6 +549,9 @@ mcl_damage.register_modifier(function(obj, damage, reason) end return 0 end + if node.name == "mcl_core:cobweb" then + return 0 + end end pos = vector.add(pos, step) node = minetest.get_node(pos) From 04436ea5f765edc26529122f3586b59058604f80 Mon Sep 17 00:00:00 2001 From: Elias Fleckenstein Date: Tue, 18 May 2021 16:34:20 +0200 Subject: [PATCH 64/66] Fix that fucking mending armor crash --- mods/HUD/mcl_experience/init.lua | 4 ---- 1 file changed, 4 deletions(-) diff --git a/mods/HUD/mcl_experience/init.lua b/mods/HUD/mcl_experience/init.lua index fd78534fc..b52611d5a 100644 --- a/mods/HUD/mcl_experience/init.lua +++ b/mods/HUD/mcl_experience/init.lua @@ -275,10 +275,6 @@ function mcl_experience.add_experience(player, experience) end stack:set_wear(math.floor(new_wear)) inv:set_stack(list, index, stack) - if can.list == "armor" then - local armor_inv = minetest.get_inventory({type = "detached", name = player:get_player_name() .. "_armor"}) - armor_inv:set_stack(list, index, stack) - end end local old_bar, old_xp, old_level = temp_pool.bar, temp_pool.xp, temp_pool.level From f7052943ec8ef4ddbde3e1bcf6b50487bd3cfa72 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elias=20=C3=85str=C3=B6m?= Date: Sat, 1 May 2021 15:37:14 +0200 Subject: [PATCH 65/66] Fix rays not being cast in a specific direction A bug was introduced in 679e2b1b which caused explosions to not cast rays for environment destruction in the (+X, +Y, +Z) direction. This commit fixes that. --- mods/CORE/mcl_explosions/init.lua | 76 +++++++++++++++---------------- 1 file changed, 37 insertions(+), 39 deletions(-) diff --git a/mods/CORE/mcl_explosions/init.lua b/mods/CORE/mcl_explosions/init.lua index e59e3ea12..d3fb882ce 100644 --- a/mods/CORE/mcl_explosions/init.lua +++ b/mods/CORE/mcl_explosions/init.lua @@ -66,46 +66,44 @@ local function compute_sphere_rays(radius) local rays = {} local sphere = {} - for i=1, 2 do + local function add_ray(pos) + sphere[hash_node_position(pos)] = pos + end + + for y = -radius, radius do + for z = -radius, radius do + for x = -radius, 0 do + local d = x * x + y * y + z * z + if d <= radius * radius then + add_ray(vector.new(x, y, z)) + add_ray(vector.new(-x, y, z)) + break + end + end + end + end + + for x = -radius, radius do + for z = -radius, radius do + for y = -radius, 0 do + local d = x * x + y * y + z * z + if d <= radius * radius then + add_ray(vector.new(x, y, z)) + add_ray(vector.new(x, -y, z)) + break + end + end + end + end + + for x = -radius, radius do for y = -radius, radius do - for z = -radius, radius do - for x = -radius, 0, 1 do - local d = x * x + y * y + z * z - if d <= radius * radius then - local pos = { x = x, y = y, z = z } - sphere[hash_node_position(pos)] = pos - break - end - end - end - end - end - - for i=1,2 do - for x = -radius, radius do - for z = -radius, radius do - for y = -radius, 0, 1 do - local d = x * x + y * y + z * z - if d <= radius * radius then - local pos = { x = x, y = y, z = z } - sphere[hash_node_position(pos)] = pos - break - end - end - end - end - end - - for i=1,2 do - for x = -radius, radius do - for y = -radius, radius do - for z = -radius, 0, 1 do - local d = x * x + y * y + z * z - if d <= radius * radius then - local pos = { x = x, y = y, z = z } - sphere[hash_node_position(pos)] = pos - break - end + for z = -radius, 0 do + local d = x * x + y * y + z * z + if d <= radius * radius then + add_ray(vector.new(x, y, z)) + add_ray(vector.new(x, y, -z)) + break end end end From 4d13eddcd6b2ee5321a42d1fe46e241fa7cfc631 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elias=20=C3=85str=C3=B6m?= Date: Sat, 8 May 2021 19:59:48 +0200 Subject: [PATCH 66/66] Adjust explosion entity damage hitbox In mcl_explosions the hitbox used for calculating the damage of an entity is its collisionbox multiplied by two. This commit removes the multiplication by two because that makes explosion damage behave weirdly in some circumstances. It was most likely implemented that way because of a misinterpretation of the Minecraft wiki. --- mods/CORE/mcl_explosions/init.lua | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/mods/CORE/mcl_explosions/init.lua b/mods/CORE/mcl_explosions/init.lua index d3fb882ce..dfae884cd 100644 --- a/mods/CORE/mcl_explosions/init.lua +++ b/mods/CORE/mcl_explosions/init.lua @@ -258,12 +258,12 @@ local function trace_explode(pos, strength, raydirs, radius, info, direct, sourc if collisionbox then -- Create rays from random points in the collision box - local x1 = collisionbox[1] * 2 - local y1 = collisionbox[2] * 2 - local z1 = collisionbox[3] * 2 - local x2 = collisionbox[4] * 2 - local y2 = collisionbox[5] * 2 - local z2 = collisionbox[6] * 2 + local x1 = collisionbox[1] + local y1 = collisionbox[2] + local z1 = collisionbox[3] + local x2 = collisionbox[4] + local y2 = collisionbox[5] + local z2 = collisionbox[6] local x_len = math.abs(x2 - x1) local y_len = math.abs(y2 - y1) local z_len = math.abs(z2 - z1)