From 72e53a82d7cbf01137a3bb462c49d8a9908070dd Mon Sep 17 00:00:00 2001 From: AFCMS Date: Mon, 26 Apr 2021 19:16:27 +0200 Subject: [PATCH 01/67] 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 e69de29bb2..31046a5754 --- 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/67] 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 31046a5754..1c38c33f43 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/67] 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 732c386b09..96f020ee20 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/67] 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 0000000000..6fd0a376de --- /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 0000000000..f288702d2f --- /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 0000000000..9b3293ddab --- /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 0000000000..45b9e85a23 --- /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 0000000000..e4bfac8985 --- /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 afc421e4f5..a5ae24a350 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 855e3bf332..26fd5e19d5 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 0000000000..0aa23f0fc3 --- /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 58a0a3a15d..df550f537f 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 6d1836b48f..d7762e512d 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 513eab136c..cec96b17b8 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 6feb253ae3..9ef7cd5c50 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 70243a166c..6c34007a9e 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 061ed45e02..27298d2ec8 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 5615dc2be9..82c9e61f03 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 0000000000..958882a16f --- /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 c5968a4c09..78a8122b51 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 c23bc9fce3..820fa9c08f 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 0000000000..2664c017be --- /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/67] 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 6fd0a376de..0000000000 --- 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 f288702d2f..0000000000 --- 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/67] 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/67] 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 2664c017be..b6486b8e3f 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/67] 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 df550f537f..43a23f8f73 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/67] 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 43a23f8f73..9dc098b7c1 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/67] 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 9dc098b7c1..a01077eeff 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/67] 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 a01077eeff..357c0f48ee 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/67] 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 9b3293ddab..0000000000 --- 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 45b9e85a23..0000000000 --- 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 e4bfac8985..0000000000 --- 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 0000000000..7f86d86260 --- /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 357c0f48ee..73fdb7b348 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 82c9e61f03..617c0f1a33 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 0000000000..015aab5423 --- /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/67] 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 0000000000..9b3293ddab --- /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 0000000000..45b9e85a23 --- /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 0000000000..e4bfac8985 --- /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 7f86d86260..0000000000 --- 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 73fdb7b348..357c0f48ee 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 617c0f1a33..82c9e61f03 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 015aab5423..0000000000 --- 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/67] 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 073933fcf7..4d81e76c3f 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 39f4370aa4..bbf4ec9691 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 357c0f48ee..76ec134dc5 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/67] 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 154e9411fb..4e4b405536 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 76ec134dc5..e2d608936c 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 82c9e61f03..23226565c6 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 80bf36b7d2..93f22c3250 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/67] 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 e2d608936c..1fcbaf2aed 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/67] 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 1fcbaf2aed..455203c928 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 23226565c6..e1f068963c 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/67] 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 455203c928..7a89568dc5 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/67] 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 45b9e85a23..96afda5e13 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/67] 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 7a89568dc5..21bff91077 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/67] 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 21bff91077..d6b972b863 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/67] 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 d6b972b863..b2c03b354d 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/67] 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 f154593037..2c71eeac05 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 073933fcf7..4afb1d0427 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 39f4370aa4..98906bfb71 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/67] 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 d53d75076e..30753f43a7 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/67] 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 6621dbf3a3..e5cbc9b391 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 1c38c33f43..a9caad38e4 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/67] 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 30753f43a7..0f69784471 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 4afb1d0427..07779e544a 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 33c6e5cdad0b25cbb3aa43e11cdf9153967fb222 Mon Sep 17 00:00:00 2001 From: Elias Fleckenstein Date: Tue, 4 May 2021 08:59:01 +0200 Subject: [PATCH 27/67] Fix wearing pumpkin heads as armor --- mods/ITEMS/mcl_farming/pumpkin.lua | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/mods/ITEMS/mcl_farming/pumpkin.lua b/mods/ITEMS/mcl_farming/pumpkin.lua index 8d234d586d..86ddf707b6 100644 --- a/mods/ITEMS/mcl_farming/pumpkin.lua +++ b/mods/ITEMS/mcl_farming/pumpkin.lua @@ -117,8 +117,9 @@ pumpkin_face_base_def.groups.armor_head=1 pumpkin_face_base_def.groups.non_combat_armor_head=1 pumpkin_face_base_def._mcl_armor_mob_range_factor = 0 pumpkin_face_base_def._mcl_armor_mob_range_mob = "mobs_mc:enderman" -pumpkin_face_base_def._mcl_armor_entry = "head" -pumpkin_face_base_def.groups.non_combat_armor=1 +pumpkin_face_base_def._mcl_armor_element = "head" +pumpkin_face_base_def._mcl_armor_texture = "mcl_farming_pumpkin_face.png" +pumpkin_face_base_def._mcl_armor_preview = "mcl_farming_pumpkin_face_preview.png" if minetest.get_modpath("mcl_armor") then pumpkin_face_base_def.on_secondary_use = mcl_armor.equip_on_use end From f96258ca5c6eb3407dd3a2aba9b5dfa4e4243f0c Mon Sep 17 00:00:00 2001 From: Elias Fleckenstein Date: Tue, 4 May 2021 09:01:53 +0200 Subject: [PATCH 28/67] Fix mob heads not showing their texture when worn as head armor --- mods/ITEMS/mcl_heads/init.lua | 2 ++ 1 file changed, 2 insertions(+) diff --git a/mods/ITEMS/mcl_heads/init.lua b/mods/ITEMS/mcl_heads/init.lua index ec6a5638e2..0f41adb89d 100644 --- a/mods/ITEMS/mcl_heads/init.lua +++ b/mods/ITEMS/mcl_heads/init.lua @@ -112,6 +112,8 @@ local function addhead(name, texture, desc, longdesc, rangemob, rangefactor) _mcl_armor_mob_range_mob = rangemob, _mcl_armor_mob_range_factor = rangefactor, _mcl_armor_element = "head", + _mcl_armor_texture = "mcl_heads_" .. name .. ".png", + _mcl_armor_preview = "mcl_heads_" .. name .. "_preview.png", _mcl_blast_resistance = 1, _mcl_hardness = 1, }) From 3b3d67a99c63fddbe4fded25d080b4f649c435f7 Mon Sep 17 00:00:00 2001 From: Elias Fleckenstein Date: Tue, 4 May 2021 09:16:42 +0200 Subject: [PATCH 29/67] 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 b65585a158..b05e92ce2d 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 30/67] 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 4552d79d10..4d0539996c 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 0d29688b13b29c1bca151a3b9e5f3092eb36b3c9 Mon Sep 17 00:00:00 2001 From: Elias Fleckenstein Date: Tue, 4 May 2021 09:53:28 +0200 Subject: [PATCH 31/67] 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 4552d79d10..4d0539996c 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 32/67] 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 b05e92ce2d..895bfc8925 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 33/67] 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*IKxe;+P)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00006 zVoOIv0RI600RN!9r;`8xfB;EEK~#9!?EPu9W!G^Y2!0W<_c`YdZ^{vgOw1Drk`Opr zqDWDbNm-I*%d;(4*(%rScH6F!?PYaaU9M`oZF!J9RhL_;c6pLKEXifbvMkA>NOKlR z5hOtnAV|zWA`>~k=?-VuJ0kkWc`uOwkw7MpiA(_RTW{rhFW-Ilp6S~WJBBalr$5|c z2j@V@uB}!N*Lw+mrH)}F&B1C_!B5TiW|u2{NnTYX#b5ot;(=%E*S?xV2n2^KKu$ug zfP(~XfC04qNA48K4N!ocgggTduoIK#b6$BhB3$VMxVqq==2SIDbN`y>OHE1Z(YKOx6~YhdFN!PJgOg z{k(LmX?ROod~>;eFF@_`JET1sXOEc-+NHNutDg_^!(skpwfY5+;L0tp=fjRA+ycS( z7MrVStbSz{CI`l$Sq$@|^=_uC?m>CguEMoTbn8AI#+>C4fM)Lp97LYm-QVV5a)nzO z-|Ap;%hk2cCAk6y*Lu&llPO?%a9tW+-@C8v%6pt8P9NsH$=w>@E(4R{)?Zx(p6U(> z0U(gxIy(Nf$#vlh86N_!Dc1;iBQww(cU;45#!vo6SDt+^UAI``Mlb*%I_LX-`-h%O zWM{v(?W;(Dk(pM9wAf2Pv2kBocvHE4Z?5)hbr7CBEI7c{Isl4JytVm!wfOl)C!sm- zuh!N1fys4&?20`81RSbPGuadK{a2iUPGS48ezl>7w;tr%_VI5#a2d{vBRDv?-unTv z>6>Tf9;X>>*^WMZO9c2*8QaKmMeXAg;8 z29j2DxDJ;m&E4;_lENIjM|8_x{^-~9u?;sv6|eO9Zy)3KH?PJ5y+gt)iEFC0lkLit zN{XBZ-Xw zXR$-V%Zl@cxgB(%T!SNDT?_)bC;HZA(Y5ldY<~DmFmnjVMn!yeUF9V2S30z2bIv0C5&piy_&oLm&aZ0cw z?QXgH3OLBKg%RM*?%%~}$~u?&SRP$Z+W19UD<)(^%3cJz{Tlw3>-e92Ce2!iATR)w z;f>8d06QeS90>ELL;Z{v%UbO(H@?bwng@sS;LzFqy*Z7g*~r7Ikb&ob$g)eRGRWoL zYV~*W;E)auJa08Q=ha9V>KH_rqe)=KfknFedbw>M4I({q(!O%olA;Iz;8*jhzq;5V z;iX3|_vPXB0N}Y>d~29LrNu63Pv+_X!5p}La0-q|9=sN;009mnP=M?6sKW#`bn0cG zYnSLpPWUy zHL@<$$D}z44kX1?%QZfD1sgRk7UX7O7}}G0bOU>KN4K5Xd&{+a=K&rT^w=r;#tHj{ zFXlh~?r>`AzkF{#J#_+#03!5dXs?+Qesw`R{e+hvyq)Yd0N3y{H!RM+vUy`?!LNeq z;R^$W`mi)7Hy7VCF7&R0eA|AxcA1W@`J*TGz9Z)tIzp3B2!wHEiU41O*s+AK0_>~_ zaNxLI+stOSjh^}H%o`8=_=m(z?meu(e*bw4oo{`=!@vv24hdgX5J2#a zG<@^8hC7%Ybai%`KJUPt%h}SqH)sCUqx!|COc-Yy9d<%2uMj&Vd{sdJ2=7~Y@Jk!F zhP)Z-rvXZ%n>`HA7j?W!;9S%Q8;zHd+;@m~DRFgWieL92`0c}^U*5Q-&dg~oExb7o zuaoXnoIc8F^J-`?Js+~-C%(Try6&HRNM+}#xun>+oUanp*_>`4AAN9o!(2rjkZ`zWDw=X_+$N1>iCf5t;IYH6B zp+?iIUguj-?9AYR0rRf9y(9klshpz zlP7>c48S>Tm!4kv$G%N&z`jM|D}OAnL+s=UFAE%`&J}leFFx_W+96 zzQNW~o~F@Fp*hhl+#cpn=i&9+eWh0b1eoK4ZwZf{w8u`_4hb&@b{zam41yP&4wUOl zalVlUUz=XvTD*Y1VF$chd<$6@XHR+cqOM)228QRoZ69Phr7Z`mtVz~B6}c6s<3K9|=7c1U-&@1!ssF+~DJkMk0_#=54hdh!aDaQ! z_?LX?%8=fCfcGxY-}tpwh^`vdvo{2G*1Fdp$SDBCX%c6TNqyucUQI}fA9!1scmC0@ z>#*2i;H!-tOZa+%lQy9~D%}}a*1-X8Put+y^9e{hpoXmYYd=u@>?gZEH0h9Gwd?P6@~>pbi#h~Yk9Eae_m1SknnW?u1_M6uq~F)M!XuJF0X^zfQj0lq`L zs~bBcd`-Z~x@zqnP|#wRR@daw&Bg`6;rh+4Wir2Rh23#v?dn%F-N6nCUjuNs6`Nlp z&-1|}|qc96Dl_5`e(@B7_k-HQw!-FiLY zyY7(HsdstD2YqdTcW%_x4U+Z*h`Z%)A?sf9)$Z80Kwmv-vkvy!?rnSnfe($^Y;W{= z#aB1TDL7Xz`8p=-TcAJv-uR#I%kyq07W0|`zirp-{RcL7ICvFfOLgYOU*tfOpoWdw zcVy~cTL|hjiu%DrtM{B*JTZ@9$3MNQK;$GkIPl^f4(7P~5P!>cGAQu(ezRNI(WH1y zfxhy!ceExCWnC~#~HHl{}VGjo)`%{zhfz|PjNxYgt zgrx!f=zHT&{zexVJJO)9T|9r~Bp@3d9ChDya4pKt%;T#a!YINH17F)XulrK4fA7Kd zTNmqOJNb*N4h|ezq3^mwwtm>bYZ))Lhe$@ZEH>YBaBYW$R~;OOR(P?ZpZP@ENl3ib z@e()CfkOO)hgPrcbNW~MaCdMn)UZC^DG+_lNl z_w}{am*Jfz+iFV0PVvTNMqs*bWru~YH$2Dg5z))@PWz_B4;@-PFz9xoHJ1rY*fqkR zcu)M?<2vtlR19A~cme0L_fAiqJdtz0a2K=B>EFF)`tH3G+eu(t9`u{J_gi zoNot6a6fbU%%;p}3)vyz zB|w+`E!Xm-@tuL5R~$qa@#X%~Ul-a9>h5PwpRB6E;?gn^Utk=R2;XyX?VtGUcJOlJtO2}bu}Sv)2Rr9W>5W{1a2pYs>FSx2 z8|!Q5^G+E!IxA#HWB(O^2%maH|J7#`c49M^882u6pNC7x!%G(PCgQej&gY#9`(qn} zodEkQgwXcf`Iq?yJB#2;;KdE#xoF$=QuPg8V%6B*JDp9ZOUo-~W2X*GJE@i9jwO7> z_@;co7f-tm>9%eZbAmjR!D!iVd>Bjl7Pz4&3f z{4J8sz+KuCq%Bzs03;U17Dg%qTet&6CgV7LG|nEkxCA0C_mvy>rQuC3gEuk{FUkM{ zAmXN(Pc}E)?Kzi?0MN^@g!HdJdgOAP7y+xcL~wU!iF1{mSi&noGW^8%6`y@fKk={z zrlLMAuT!hK%iGmhKd*T^gL3dLaNj53dIt zaI)0w`gWJX!32j}|Nj8sMt(M*c=irB+-dvPG`qhw%%2Y3$vnCRcw;3WFV+A8w6VU{ z#~m-Nl*{FEN70vf?BJ5(^wfDvb^FUU+=^{U2iNA|A+k468P3J-0GVk% zpKorgUvm2O*qN#ITEb=VD4t_5U;nr$14u+ErS-KlW|vXOY=?w9c%$HA4WPUC{wFhE zRw=<967Jv)fr~YO)9GY3*(APbiTam;9TM)~bq;rw;X(~ypMKcfSObV&tsd$f626w; zK-Qi9`ip=8w=FeyEYDxk0QTFz$>#c{O+Q=+!YgfzBB-4=woO36Z{RfWr9=Nv+x*gB00`sBm9GbQ^%5ZRxe7H?jz&u1r?c{cC6xyfB+`{ z&~?o1GY$U~Z z-XY(1vjF%HU&>{~z6JX9Bf6vh^dd+`-+geslxJB;L}s?Wb|$6nN?E_{BS9p;j3i85 z>QZ<1M+YML(Rul`wPB~cL&cYeB4FB}$^I9=r`Rt~w}a=wfj2GJ z*N>b2$G+QcKA-aybs>Zh*y*xbLL!>YW-n;yBm0rr4i#S}Xj}DA9ec*~-+g-oaL<$a z;4vFUIy3jWb91Qmy=_V<|x>!|r z-ud<){Qf_Yb9zo^^>e$d3CK=NzEr4CZ~Ex$XGsVwksf(!`qC%iPQ({Z6(X9?=NBTv zA>%)SW{Lg;iIZd0Vr~WHn$tj~wzB5ZX8(yUL<;5?Ln@={M z`ORPa>B;J`#~=Lou4`|)?JeKY=C;{f`;q_gUzTNM4g!dw3L-Egb=g5`v{I&<7n^H` z-3zaU?(R$5C;E^3FzFZJsj^A~YJaW0X}h3_u*Eo|)=0j$k^Cy4s8;b!%G^`HOLADvCtSN7a^`ou$%$wbI3gj;TT*SwjX ze)=1=*0nl6&e23)$!p;8Fn;jUIF^8U{c() zhnetu-WvY>m(t0Jzn%mRm^sD(f*aIS^CcFoa(FZ{{XF@W|Khxc;_l zZn*x>{x^RwMgqd0}y>s)jE~MJDf*A6y$Ao$XNZm7)*c{F(Q~M@||M ze(6j3bx>;K?t@|Z;s5g=9C`XdZDxC}yQ2)n@BRaS)$Ee-FvQ~I(TD#1&;Ae7jWd(k z>D09$1~n6NC2)2cRp!buP-_Nr0$0IiiA9Wzm?_!*Ypz|}T%{1&jcGX^zW3elTRnX& zP20co|Nh5&ckczz)OB6YUZnzVBI>)dHn2V(k4K{g5YD$b*~`A`4Op9J*5dw=u0fB45A`TD1;IB;*vYS@o2a{?3G&@?Yc z9keKlpZj0``_o4syXK}lH`b38aoBaWnsRcD%z+_JZr)kW9n3^nLSc0lW{rf#%~D(( zo;-a#)rkXzVKp8MKlhoBzy0mMYx&TwpZb}<`?r4lZ*6R>_Y`Pz3z#|I&TOZSuZbUk3z)yT<~Wx}(Rwy6@1PpZbk| zQjV94LG`cyw?Ef)HIsTM3oum!wDphvm4Dqf-Nk-H(=>0n`@6p|Idk;!`*N!1vsow# z7EyFerW9f;nzxmd; ztgW3dv=)@EiAkV&nK>4szGG{qW}IGi%45-dsCb4pz<@LjpM* z!1?w>?k*uT^~S7TefTRMD+fauI0oywY+X^6+GUEICo^V9EHaE(93E)v-SfN&!^+Iv z)Il8Bvw83*jz1lm?2*a*qbEM{@RJYk+r2+D>2qKE!mG3=e6fq_7Gp6SEer;goj;#- zwg7d9iZ26g#`|xRI}h+b`%DV2%{`&J4TjZIkACeJ|Mx$4?9uyVVX(aChSf7qB5@d( zp53(rg%Cx%>_Wq0xm+2%?X5pljz_6!4&L&%dULX|aa6l}_j`Zep1n6cuWrW7hNJ4q zNAG?3zEA(>fAN=MwGsxExj9iJ>ZWZN7gi@H_bx*S;9{Zbnk2+ZPJx3E|JKlNZ;V*e)t(&{v`}>bQe&5Q$Tieqof9&slq^X~EQ<-^lg9w1&TDPtyRiTa`q5?6P_e!qdB3hedVU*@I4Wo1pbCglrmWGi# zc+OH5IcKT@rilw#Sz0;r=wsjgogd=MCwX{rS9v>fbMoY|`E2U$FSwuXhmDS+e&E2y zyY^0)U3b#^7lzyR@oTq&jhH|2tN&zq|8?Vi2b;-8&RLwfEV8R-1%skw&DwMbu$;3g zS{twIK6dzP23Yo$Yp#3d(R(FUT~{yczi$5A!sc=i{=r{<|LU2iKJMUW`f-zGO+?_=FEV5!zWJF`(<9jyh*mCnC+-sn1gCI*!3}&H!z+ z7=?D;h{(#J19fiXcmFs4bM4iD+W-Y{W!uw;h(IZI)9F+-7iIZ^rA7pp(=gcWOZ6z) z={9ELE1m%(dPQHC4@q(Beg<&wVGFOp(2TnkMe)dkpZd(N|7=^&g$W|&#z8m(l`uFE zlarJ}EEEDeQKW1gK&;?^tZkd>c5}TLjYi`YX4-e{9p`)m8S*nvJhV6r3*&0CzMAT$ zn@ksnvImlBg( zFc9;`bi+G+>dD8q6u1xTfrz|Y)|aq8pqjTuPA}F~wwLkXuk-@-GU0Bqh=(70;LD%=rO*8O z&xBB-5Cfsfp%C4inmM(clNN&_bqUOrm4funswX93ClEoK_PRUXwR+--r|$dg!aJ95 ze$)HT^|o@?z303B#20?;AARaKzj$c>^&2OT4;B|Ypw$ExDcIBrWUyeMGPs$W8<|8w z8F`8@2)W59MS|qbIxtdFq3D*fX;@8Eg+S8Pb+I^B%@(-qf|?EYEYnYa_}Rg~N$K0K z*I~3GZ#MO;si&sK%;%JSzXZ%({St4~+%1GS8ZQh6gBOY1oNnS5Pc6umD0w5oLg7Dn zYuD*{p7xg@feYbthyC!h!eu~{@Mqo^0sQmNq$xoU;ola*G@i0 zWdY*Sst$8&lXVFMCI-RHv)Mvbj$>HsGQ}ddjcO)y5@u#KXLzccKl+#cw>Q7z2bOkS z)3whpgcgZMpZxrHT&vlzIbHwn|H7aAp&$CA$B!Pq_u&VuY2gS}p*cGcg5)MgW(}O% zwuqH6D2iqcL@c;xoWOHLM9F0c{{!Pa~gfmUJ zA`I+dj^vci_xUeX#GZhg7V5`02bZ}l;p%F^clV+wK_CVJ=O*;bboKO;|KP{o=fc(U z(qOneovg=US$7-WW+D{TD6@^#BDpXRi!cbm0hC1>7S`({5@T77$!X)*<2T;*9pCi_ z{^C2{|HEz5S+=fyfy|+5S~>9c-Pf#FK^I1g?|IMre&-9H{or?h-$Rc-GV??QYp2A} zY~}>_6xdXY@yNPNMKE_6M4l%agh7ZK)A?{zN@G@{Zra==HZO)1%#9HGK`nt9#EYY6 zNthLHxki(1?@!#_J;b=QvUh1^pPBY-Ol^bnDDpd=HJL)*kGZ&1Z0sX9^VxJZoeW3g z(P+%fXZO}ZezGnu*kE5`nBmZ(rB|jUUx{5i>Q2^|%Tz56E~XppRe-x$`e%RdPaS#c zD>1}bH~)#B`dnEq5|f$1v9jxiVrA)$w|&o7KlRIdZn$kaS=G(C!9s`{$j3sHZfVy( zo~#mcA)%K#8k<%7ZC#%fLtL;hR@# z)qLZPH$VNzqyPCg{==JYf9vP(`D{U@nFnT$%*+l*;0(_x2{So-+IbKg7h=@3oi@2( zwju!J%mSvQUIm|Y9*Ki!rwmT1RoHVZ;h{x4mn{SUxy z8xi9?-sV3E0y|i-h@vnVqW${{L!=B}hJlPFWRW1s0m}$vmb$938AH4J3AG-U! z-#=PfY33JNQcA$lS$X&FsgeJYANZpWJ^b~rJ@~*q_k6Ax4y@@U2!!F9RE1%6Vs&HZ z;ebHJ@;J2(5yVZ17gomXHigGlD+yiYId$pGl!VwNcO5{vHFuK`o+aV!yY;-Ye)~yV zZ~)9a950R*mWhy3H=k@Y%~ZS2+`OkSz2IL%s2>4EYUtS*xGx}mIjj^$?&^(Z7GoSQ zE=_H8`CP5%ToZ@k`D;!xx^}^UUbW=qP{_?0K90Iv?eEOsR>`R~fPbK2M+ur)jWB2{&U;a7smv}@R$cA71^6Dr5 zJMFHh9*m4`IlJ$W>`EYWv!ES7#&vmh|`4PPKU z6e$g+kDbfcd@;7s-S_P~V4zyVscv{F7ZZYzzvG5*a8L2s2dC$Hqz=@HzVJ-AC>|1! z9p84KF5*knJo+}y4pa$@-#IE&R=@i1e)7Zr?k5K;dt?yuJUI}DWjmQmjB!}zS-0={ zJO0Rz{_X2-erGiR09DK<+COwGR1LXn=AZcWfBpIY`t$3jpRnY`(jX_5Yzpk(fAG|F zo#w4lK6KkV>y6WcV(|z5LGD_`BVS;OP~9d!;gOXgMaw1e(FE}lct@z z8bx6sH(8=M)M}*&trG=yb1q^vu9`^`ibz7*We``xa-I`JqQcaq2$@W?4$88dG%}1P zlxOW=G@u6_onV_%3TAj}>#mumW~MoTu&oK_@ZM0qu&p#VH8@B@QB}jTs))$Ee|+g& z68bg?3%1XlSgP|SaKA3oEJOmT;NN#km$$>74ye7bbyCx{6HlC#(ChT#cEUwjE-vj- zr@>%=Z`u{SqKo6$yHf1mRowT;^xQ0Pzeo73$K!>Quvbj^_G>l<1sCzfMxcvG)_nTR z$@R@M`}ZDP94`^Tj0aXnfBh%^;B52E@uLrMS+Y4In|g?nn`G`Gh$)8Sg=RiW-j-4= zEbUpJoch5(_`fvG1cJNX^?Sek+yCdse(4`c70O~bpKV6w%q$KtNszAX$l*blDW`ns zy0;Zei;Lquf9l76CiQc~`)EZr37op;1ZmvOEdPtY|Hq$s>g)5#nHUN<5r_)13=wpj za}oj|RcTC|oFZpcG2%ju;lgNDiZC7&XVz!Muqcx8xN6#zniK~i&AM_}I#E}*#jq3% zf<5PUn**V!LOGzNeeRaKrfX(hJJ;L+IDg3n`L=`yd797Gr&A)9YA`B_GD_4Js+X-* zHo951yzy8@j_lFh_UU$o(8*jYvwx9Z6{!!Z{ zH{Vs}YPkH!{h#2XYu)4-=R01Iepku zX6C!z^FzP=@t^x!Kl^p&>g+`k4j=jDpI$qDI8P>3HFO85XU#rIB$N$Q#Q;%uBS?l; z!Rsz84t$=7DR(IrkprX66Jb{8&f8La+J+*qgBveKrM4!OLB&VFsrXeI}lgNTJm$h!IF#@eaVXHHC~lYY*|IrZ!~ zJ}=~IW*}gW0}Ga4SYP~`z5(2I_cb?w1t2@;`dr8tNG6+`Ar_ZV5Sq?@IRJdi?F+YG zKUDRz{tV$lEp5-hZ`-#S*m|{--raoG={yHjH8^qd*utKDx887@fkfisVmTU)KljDY z{J@6}eCN+lirmk+*Q`a3m`n5Eh%r;Mc&kz5V2k!m# z_rCv+eeIs#VtLj_&6?iv?Y}RS)nI9NltDY$$f*T8n4#`)foLR{2M!h}icp|DsVNG> zq40U?+LR;Ptl=_RV48JYhTOD8Q6zFsPJz27F;SmSr28Ma2+2bt0+DG>ZPPTfuB%Nm z;U$BT1h^TTh$U9#a4@I}#;1-g)Ot3}a5Y8Gx1omj9L)R1pmXiXS@_nY`27E5UOoBr zwC*nQq`co5R)fI{Ucr~d3rBDqAnaOU~p)MOO~X2eih-LkNmYTW=37Ih_1 z$(#Y}uW2?C9*maSW~Ss6V=Q9lxd3-{!yKh#O9qBB2}y2~xyM1tgj9D9gkfA>K5+8z z+bAREl{l`9g(PJqaBO8ch|YZr-)iV4z^7gM>|@Uq zA$GFY;Z&{=fG_}nt88wwFdjNhdGiS21vi3l_mp0MY}=Wei^^OQh)$e5emPF$35U4{ zriF3!zIWfc_QZ)tA3sr*kwOK!4tTN4-gkAr=d2Bc6Y=Wm>74Vq=S={>PaS#U|M5Tl zUt85`aonnrIR%_)Hwq3ih?+Flb%-(7wPy=uW$Z(>Dir&M1CV#bk5A^VnS_aGR&O#h zRk5h5RJWAX0!dK-=;}7ap!3Xw$ORWwi2%ut5V;}?;8s^p9jO+^F3#EO>7*D9!OqDy z*Nzv%As6wJ|LLdS^MN0&XC2YAF8ge{{;l8tBahzyu`|y+PG~|LDn}Ql&a@Ef6hXLE zuYwZ^aht8o$bq;sz(Wk3W>1+$18q`RsJdCr*=STsQJ_mHS!8d4=;EF!NLb(8d_}j{ z(W|dFT_Y?Z#;O{G5QwDrOwPV)>$OBr9X(~q>y*JK+?|@!1R{wNDhv-eU0sD$vm{?m zHy;S6uaQ%I8`*PD-$C+C2D1P6S+ahZgW`&uV}HfJ4x+i%)``%U`+oS5JcZARWo%@DA$OZG#A@!z_r1vm0Uz z=O_|K=zV!xCm?(rYwax6AXHXXP>Y4xUFaN@Ix4iQl1_Gd> zSbpG(|K{3j?`rBNv@NW44$?J>Ld0S2MC3t&QFb-OU|4l+OA=^USlbDK6z*A;0|BvUeeF&-IEYv6N+KD=;d z@MRzUD>&^7Vy_xDXKhM)dTqLCpTDOgZKZ|U-{b~ z{`x(?^{IdRH^wmtQ9axIv48mSuAThnU-&!B#j(R*cgvv+$^y5pX+sQDX9NK}O{S_U zgOZs|xTvaZHYS=gg0sS-x&;Jd3uLp}2I7yMRq&LlD5=e}(;L;Gr2pSXRtMCKd0tTq0(>i?@EmXQoCcwt!Gb^S`GSZm`mv$D~vslEdsct%*_$-!_^E;{yk*>S#E ztO=6+xz^3{pgo zcePNkf#|0{+&aiW1TQI7)DEc~@w}oA1b6an&+6j+q~}Cj+^thvZ}j+DV{RhB-B<)5 zA_mbN2X`-zN&rm$jkVDvU8SSE4YW^I_si-Fc&Aqg411uvv8#5EZ zvQfd-X(XaRsWXbAU1D>TkwDg^Fdn)agSwoGveY(7U}R4@aTH>qVWG2D9AH+<+@zF} z2s<-}=mY}1U?e9d%^C`^3?YUf1Zg`ZGYCmh6me8YdCOhzJAUNr|M$Q9;rYzGIZ>}Y z(zesp(}zF&AOHTe-keQN4Mz)cFeKxQL{7~dS&O=}QA8$oid~l&jv!tq>I@YJ7By#K zSIyHJaAq>1qKF-wNMITk7Q9R1o`b+mB&52H!ifn&1xc?@?6-6N4&Lt5s zk|miV5-yki5u_u*3W+I=a!fE|Lwo@J!yXW*y+PJ9K3F__6SL+sv#MwY9$Op zYL!_zQchkDDNkKer&747GD3o;R4tY^;Di?0vL?%Ffr&+ig{pH^NcIdXvZaEe6nS$N zMwPKSyrhukT^tmd99c_})TU6%IlCLj%0SO1V2J>f?$sPCHN2#*q^_XWa_5@P##+uT z{v?3NfEOqhsk@|E`7^feIDp5}b&EW`CY*|- z&+ZWk@bexz!R^J{!Cuzk*o8GInbUHSe0!?F^M1Qo+v-GjFT^4c2t))&5Ug%&XiiT3 zs5Q?n4xiJ=z#ukD8{M(BQ^zD0?Q}{+Toe?9go~mu0nZax!Ay}o42rG=6Au=a+S~=_ zwB39XIjFF?QDcbWDTxF`vO3G4(v&2|iTc2O(q;{ew(}4G6Bi2zMv2@uX9!%X<+3zW zFDPbqLac^Q9RBjCSm^3`UTn@xPLImP6Q?!?aXCoaHkk#)BqUyBHIO4j$=apFWWj~K z%L|J#Ng9@ino`&0qKwFv;4~;XWpyG0m|$)xm!qBTBJ$x#9&5j)&9n|3L+Td81&1Je}Fq;WQOV0#c00FZ=c z^$8{z0CtDLnTXwuz##It{I$(peY3OCmFx_>KsZRCGaEeGU0>33MhkQv?S&XYKp?$2 zK5Y=XAl6(sE;O~{PIWz7Ut4{_&sMdyeFw&ah4s}_NsVBScZU?$xnmStA~h$rxjQi# z$b*OzkFI^&_x*vtAQAwdZmxa&qyMIeg|}HnWuB#oxy>RWcs4i5popfcU8uDjh}}RA z88CwgP*qQzn-eR0;Y6I32GLwX;5w(^hHS|3<@>WNn>(bZ)8+P4(+_**36R>TyO|_@%7VvxP@4N z$T+J#NCYfJUq+*jR%J7VX$o1{N$O+wkkDKnyc;d~~v&3R`;v(U8800vcT=XNyjEyN8;C`V4F3d?SG zwsk9mm;(X7??-;z%?9J8dp`T0KKtokW)dHW0X!%ZoQ2KZ1EW(a#oQp`O-mu54BjU1 zQazuUBLIU1Hl>vVMc0{GHVu;rsBQ-f5~?&Ps#%>|a%+h~$Zf|}VRc4QuYyFGZO$u@ z3`1F#AdBGa7DUvw2+Q__XdQh#&=ohQgV( z)tC9?dEX|(Ad(==fq6?V&9`DMn53XdyVb`W>_qNP4Bv_g(AHZpQL%Wb9>=R6eRac{ zUh-2uzizTq84>^j*7M-mv^04j>+IPWFOyBO0J!zw_!diFdD5EfIkh0BoZQtNv^{FJ zFTIFG<)*{Y;=laqKVR3Iu^PBp;K)W4$<^86P-YP$XQ8ZMHZ~X`sf2>Y0Zm>UcPRI#QEzX_3+GIp=AFP%mT;3Qx)K7FB#AAIqSQ)E#*EbYFou`E9ut7RsMWPI zN4FJhV`2$J6ol8>!Stz5xRl}`VE{&3qzyK3eUVa zt{Q6rjzby5qP0ZMi+fVZ#iUkt6lK{p)@7Dpi*+EUz!F0cf*Hn4Po6k^;J~f7z3ct& z{H{NA-L2pHkAC9%f(INK) zErKPaoJ9$)p(s<^a9K$~)@dMDqBN9GAx9D?tLrctdeeocx&xQ?mTw1R zdV6Q%8@_#V`18)e!M!VTHZVsHFcC+^_Ian^n8SG~ZNObW?;0T#g>#H4{{ zS!I1@|NeJY?>sno>!CqbL$3?Cwe0{ADV6Lk5t!LMS3DnuE+-j|7AI@Z)T^f`6k#-y zqA;~kl?cSyNvJ4{gxRRoZoIHKTRlTX6FO{?jME{?SkT>R&tk%r}a` z*j$nOQhN|cvzfyPAn44CDmrWDw%EpL(3SnZz81o;3PI;J7fKchAP!7z4k8ZYLeM!C zMW4R2S({=AgruN4yE~N?4I&Idgg`oYZ$Mc8XU&8xO&6&r$&7-~RBGRX) zm__=Ij4;|87OuNO`b=*Wl#;6O>@sIgo9(a)T@@0+H@cxam68f<0@NGHyRIL8>#d8w z{m}Y7k8Z{wMCMM!L73+@3i$+ltG6`7N~9$6xh;`|ZgTYA&;7?=`^A6Uc5^qAvT`>k zltj5xE+l8&78)~QTUchMoMs&dadj8h)~m&kvwPpA8sQ3exFHl!?VDanqPvr4Gmy4Q z3^;p7OKntmRTh!i+}(XP*150k+xzDA(??a630;@b2j#=IKh}A6r3`Z~MF<2&YZ?OE zTn(`cq0J}>*(eOkc2)xjRY|Jdw2jL{xFegYa&iwSs*0+RryT&4>?!GHD^=kF0=a|S zo2D&dWZ_Us#&)jHoSb02AjP&U#l*z23!1cfQxl_-~mZF}4 z=ajq(IfEU}U^BIxh?wB2EnHO7O}DGj}DfJSM`yUz;JI^3rh%M-^4Mc`Q} z3Id?p6vZ}0U*Jw}u})4r{#zu4rYS&x43}@T`gB0m_kGl9ot%8Ds+8)dKUEC(EF5?b z&eJ;kM!@B+eM=?|1hT*iptC^mGNk_IGMk&g$w6C{^uRbw&(>(KjQG^NCKwaX>a{O^ z_TTKg_V(%KnR>o<&7rrho_eY%tJ!q(P2chZC!Trem;cq@I)3cvU}2fdLfv!I5#XbW zAvW)%2#G*l<}zxGS-WUKk=dCTnju6m&q>RYlWI1V$W;hk?y?~k%!;OKm_r<}xXk8_ zNI_GDqWTnH&BxRAu!L zSk0JtU^?>`8WQ>(B?oc#XtbXG^{N(R^;^&9ULsb(d5O-}`lts?D zs>Z+k^Z#ES4AHekHFWZnG6|6|G36$KTn2@?`!rD*AxJfi3UX5*u%s?&5jbaKCJ}L= zLJCzIRH4lpsR-&E2!vr6YBn+`Y&b08U?7xKPm1}RV@R9;XjvAf?r^9t?ylS!LW3%1 zLs1eJY;FSpSU{)0xMj;-vTVhmz|heq%&aqy4u&VEF(@sSH<+)%vTM_H!BzSs3_y(* zK;F_b0}~g4MMRjRgSym}!HEgfDPrKJ>m(F8o54e*Lkq+1poOh`9dJ$pw@)I-SxK3# zq|doG^=u0k`No+io_OdZeXplG$S9N%V88(C%vl1nfY5jSI^2yYcSP)DZa$ryU?~Q} zm1?vb$T`(+4#3UFO9zW;p&ISE(pr8#or%|uhQeoJ)+!mNWd{kJ9CSiP$}<_P>SJiAY!o#BN|UA|{p)`yLb$X4PzNaCbE)W=d`bcQ8^n zBM`_R74MDsS8p^#WEU~{b&m=;CTs+obe zwuSwev0*MYQYs{>Yf;3krWs&NXI-oU343R$%gh|27!ku=)g=HP47{F)Os(Yr(8e6M z?4@y;mSc=j9X9Rs)EsbA0}H!H&Yc7}L?~ygN?}M+&1!vQBuao0xjS5v)9?Quf2^;e zWr@rjikMPurcfaYEX*YH=G3mew>9-zEEY~3|C*b{a+KQ{hp4TN7WWLsi>YlxtUwAd z+}$#B!4!(&kRc(I#A2SA(Ra|C6>hVv0JDgB?&}YGr`6r7YAjq3O9)}KbnVK%J0%om z+FM<~HFs+#?(bW?-L0y2jd$I2r73gi5hY9CQU*Av%`r;uE906Rheg-t(C4Y_FDt=| zZHKebe#RvNYriKXV&X!bQ^u$N%ikQ1cg^P;Ayfdy%ZI+@?ccY#apwQ{sUKX}vv)q9 zKlHJ$-1p#D-}igpyS%t$o?Q@y!RWFEm(-$A zkkNTtr%*6%9iFr&H^f{f{DzGiM##F)nYY0v!N-Q8O#k9qOdSA zx%uE^OXM-c`FykOGJruDHJigZMih~UtQ9Le+{p>*a2QOI=Q>|Gsk{2kh`Ygu5iyG#_TPj@s0p*oB5fO54n@sapvgc znmS0(Vq1R#{b-OZeZTuqbpt(G8`z|7)?q8hk+2*K3dF&HiZs0Is7z22|k zTdhq_^T`?rOS`UV8kT2Rlhfs35aV#PxUZhCZ`}Bn&wuh?jh1$~dx!#HP*&6F4335Ih{!wS0D%F~;hwS= zK{#dvTNsGBgD~AZKHWUdp>VZ9F)||-&N*w=+;xa?xU^Ue7IMl$F>7b;LAc8%1cpe( z)o{?X9$j;!q45Ch%fs9lw@yl<P#+(q58 zRf{8ncWp-F4yVGn5EklOd@bcBM>gVutn)%T@-PZsFobk5WXEV!datpYt!uNHfyGMV zQi_GB$TEG815MGk3~u%gg{v6tj#z5n|BZ;t_Ru0w?dhuV|Z2VA(~4 zm}9JRN=(#svk)TyGbh?gp^{L}^Haw+&EeUY!^z{19Y6BGaAAc=TwNp<)o?Hzn>q(T zY4zAwuetGC`-hUA)miFS86yILQ@a6*ERiK_zYN|_wA=a@=TBXp>k?mR28Xsq2Daa~ zpNvQ6Dz(x1qEFv+ApQ2--Om1bJzMX4s6wcU*r&(9909oHc6)W}015GvAO4w8mO`wq z0#?&JZDXvf!Q$x?5B-~;`7B%Ec{HZ_xC&$B4xe!xlRS`f2 ziXkurnox2ua?e`C(6()iqHO{K#sYFR13VU?KE4+B?Xi@KD5X>&6D~+I5tV^S03#=_ zJC9BtC3o7gw;_86Au{1C8Lb5tg1A`Sr9jNWou;H1a_FjD)n#@|S*s9|Q+5kYYlFhF z#c?Q!mrPE0sEhpb(t4z0@oM_D}B#hmrVe5V6IV}5u`IjwpN>I!v^Ur zu9V%rNFy24+>B}9MgHnKMe(9$vQ2%6rhz#!P?m4@=I@pO}=ETtK z-1Cgtp^i2in)O+XB{7$S0THVu25I)LofE+vZq6*kw03$DiYiD+#O4|Bu5CjsiP#Cl z@$#_P>KQ-w^!;1WCW5Ig?>bbJL%2=rlLQW-SXw!dbJxr_9Eh>(+Iff-OAwY2t8=vC z9K>)#U#}%`i>v)S9HN}sXBqQN8g(hPIW_fsz5kCG2gI_pe2r>uo6WPLY(+Vu?RCSq zi;ntVNhtddGEV0IUJ2vAr?~*zUPHmS)!_Y5GZKw2(AADce&Pd=!EbQjJE)x-T zP3GQ~5fPY$-6)pPoQpUB`eDEVM_CPHQAreHn1Pwh%(8ZQPENVCVi44oiQS<|g(Z{) zxIZL=QSMB7gB#*#agSPyURl=EY+KQdncM-2#ejue0dP4Sh=eWMWn|gP!RXLU-vVIu z^wT2T*LIk~P2cfte{l8m;rVP;RVBn`zRApHR+K{`VHS}%Ufe^xJ>H$bBt5Cm#L$spF5Bt8kIJSy?R(2D{$#9X}F6K}2vW2Mb%$0|bEU`P#jYa%e$^q?L^AKaESo!4~F=er|&<0;RM zh1qrcaR90y1X?MoiFQ19C$HJyknG4_M>Fl?Z~#yi6@t(##ibZH464|iYQ>3&24#Wm z<+2@S&TzHh%H#oVg zd2$scAu=J(ngg>pO)FA#mRL$*roa-!sA<}{H|~IECk{nbm^z%?U4l4)NqT*FiDZ_u zs&{>aCG^W=uhr>b)0A@4+YvW2Gt-WRty6P|Q0k_p9?Qy&yJp4`VmXLq?5mCH`Nrel z`0UEw>xgjT*h4vW#DG(3^K|3n%D(H5JoS~Xow_TL0MKM2@!IR(y6?cPAr|xLdQnyq z3U@P8CRR;PKk*d_k)=3u^01kiI;3?-+svmM8_j$&8t>{&TI%N8uBN5bJoL4X9De*u zsyU}QD3a6S%06Lf+v!)o^sD2AT_Ry^^=T$Ked4jF9>2%!Y_Y_a_a4J&xUjf(<{1g$ z@Zsse$PGFvhXVoU@R zE0~Ev638h=R_$Z6p>1bj5Ouu?B?rcQx^C{so%=91^S8Y1d*`zabT;p%n;R!n(@u{( zSr%n5GV}Gejnl-0vWN>V*-Sw*(7RzYa-F*MSJF?E_(+wggmYiES@7Z@#*VW9FQ+MR> zS75|Jm;~hgw$qIy^gCgwrWi}j$xQqFiiouB{G83BYwP>3y9JQIMJ$Io&mB6Otf_UD zGZC8`ImL1$F)(26DK)}u<}7^XP!>4UT;$ z`DQ8tf%3dP^~{q5`RuR!Y!NGF7J(V^d}i*WGOEGc7?cE^vYD4fU}jWxFze? zFCu7m5n`r=s>)dvo>kkVohlOr;UF?zsPgVOtBipb*u7^oS#1PJ&os^)fussYNNtKC zWY3IYmQI~2sv%t()ICT!g`s_pqLg4jN$Cmf(ClU$_SL+Q0yIVgB zja0k78O-|-DO{5qCkpV?oA!_3@ut2@C=ndAEE;jBrR`dL3Y8#_#8urxlKUe~M$bn@6k zP7F5!3Cg9t2h3CMGBMneZ#C$eX*OchEO6wIK=u;r4Q{kh@ky)I2cfL7;i=)GOi6NVCzk3w)-{^JMM; zl#@|*KCVG+YcwWyys=E<~hcYfT7Ss!BvKa~TFA%J2}`)ZGk1oq1cjfz(Oc zIJ{=)t%gC=TFY^)*J>m5QzV89#f(^p%p44#HNph*1Y|}-K-*#tb!XwZx4|i^@~#3* z)6K@o$URKfPPhs&1s1NDnar>?QJ6rW)OAEK=hS9*hjTGx2De@9nX+ps(U?yjei#x1 z6UVZuN=GoufM#=c&q@2;EejONrl#(UlxLa~9H~PHoXuEB)tJc*V34qHO+++PCnf-< z)(g(II_bI@5r?XXF){^%v$!Vf8Vg0xl=_ApH)z*oZP}>jq&cipZbM=zt5M30NTF&D zWOWd7G7iEVP8|P6kmztQY0eyi>y~CJ5r}*%90la;1j@;Y`|siA=0;#*I(_PKz*LRl z*6(nEqet%>R4e-q-sWaz+BXd~O(yeET#76;l7wDPLd~!>Bb@rGecMXP8;E#w^CW?~ zwq-HR-p85UjRkIa{E<&c8JL2a0}yw049bA6>bkjRXW}~L=nSHqjo2ZuP9ICN8;iZC z500LG=9#y@?d?=xyf~`obsREU6h@;?qta|&RP(6fg(Fd5&cV9Wtv9D`SiaM@bog0a z)|;aXqeHX$@ov&gbsckq!Bw@MJ?>vp%G!%(xTh|Magk>ozzPGL89d9HtgpZ}aoJzC znv2>jo2hHXs92XnG3yw{K;`0a1_EKet4M*pVCh|O0xy*@1_4~1gzD8*UW6@+@8 zq(ex_V*oRfc?8UjUAnC3#qj!CDJS!6S%rlQWbLn78Vc1u$XL|A}}1)c;M!)94cws zdCna(RE>$d6PZO=WH4A<+I@f+#5CDFZf5=S+A9ck?Sw#14%^B^^n2h*{cO6S7uOyg#$>YA%s2YPaldSw0*yy|7nb&_8nc5q1WzfuXTtWJv%Ut9+?CXJ*R|0(0n+24*5AB83ZlI@ypAyw7MemxY)+GbobuspOKLmLz#2R>ghye(}~D zZ+i1BZxId;eB(YdmWrA>4M9X`lEp&Qlxo6|Q%aUO#?a2&b(!>=33C_Wjb~2fS?8** zCS7*Tu0~`rWSJxdWkwq^fVdLVkoYvYxid#5g{672Ypak<-8ZMLuQmjlq1UZ&R^yqX z?hp}MHyEP3niQc^C3V$I9eE*~odZz^9y%Kk;kDLv;?BS%#14;6>`ogx9F~2Ki&{0y zd7cWP0HO^Ytqi;|C9s;M+~!Q`4iCiUU;&)q&LG>&OXDi5YBn`1lA5Zy%gVvUzUGtJ zg~d9Hl~}f(fux9qXjUR8Cl>16dLarTU@%C{g9!Hxk{}KuvQ>$@H6)agTO+1zC1E#n zA((@S`d6x=XO0BUUC$hn5J*TnCnqA7GMa)wB%Hb$w6%%UXluI`X1<_7?*<)Gfk%( z+|MV4scJv9n;fQ&tyzfPbv2P$cH8=NI=hR;mI^fbJCL)c$#i|XYN`YU_Y*bA$XJ<$ zh@i0>el5+GOSOLok<+(E3BbIY#(z$dd$)z#L1|o6@gN4;h&An5tle89UkJ&M| z(Aa{rH0B!#bM-n~r)W$%7j<;z$vArnCPkj7)G4cVUA9iiAfTYcfVP^m!M&@KIZVwA z5*X&1)g11SKu{1-msHIarrFgkxI3Ui0#G;aib}dRg&=O`fRrJp6o@HM=NWFPQF9by zQALd0%yMMOISGkWLWIuRZoOufa$I41TC!ARn$QnA@8bdeC@FUi1RwcEus)TN8!raY02Z{VWq5Cm&sI#E0_?fDXIe;+gDoxX0kHq}TL&F;5Yj#*1Wy)}7SaGz=7oyN zpmW`9*5_yBZ~V}cKmLVkAu2KDl*!C*E8`E|Zg5D8yQYdMqt7 zxmq#{S&%0^SG*&S^*2L-lmm3Rk%2@Wuk8JOBGk19z?^VUji2BLt}5;G}~lfhig zlVwv+DU&lr_rzPB@@_dB8{Aw~vzexTJdP_{QWXjy&q@1ynkFSCBkLL$p}u;@$y2Ko zQBhz<*Ql|ZS(kEXQ!b)(Nr{L98Q|oWEV&V>XEGwqrdi8aq^{Ter7l|#s%HwIbA^#2 zmns}gl4R1p_!TXv;B!Yag3~0m5YJmU~}P`iNJCF<8wAq}gL7 zS&fO*oVPVl`VF@kiLg0&HaK$19Aqm2-D)VJs`Z9T)q5kN))xplgH(;S-&W0;`eq~Y zY+R57n#|Rkx?VW2mnNRgVASgw5j&iS$jq70C1*ghvv}7LlV^1phtj*&2(FgNS)$M9 z8aR?r&l)C}fqK*D@SHU;Gv&Sp3r5C$#zaTp$l?mLDwM$4uP9Cmmz|Xl9r(`a)K9Bc+iEx;MYI?8-MWket$_0 zurR4=Kz|R(O!Jtm_HMc6jzU%NN?5vo{?i}ZzpL7)lSMNrq`NsthuMvhovQtX)UcP0ck0_9MoX1DIwAtHLvzke4qn2c z?t^Q_>NMXLu48zZG~0E)FkrAea6pK%8Jr-rzA-m-=E5DpF=B)&1T_k=cO8ku31XZh zi*-bWh1xt&$b>c{Spck(K=2F}=hk@;C6E(K^xRo5dMIpd-MSJhNFqnlPNRU{> zUW9-RPH4M21nQCsfshm$BK12>7Pbs7U=9h0A}N^!a!?Fl7G^oS4`<$zH6wsYN*T=B z)1Kk3eQV2BH2?rY?rI8*-YH1n0ZGf9rsX|{X2*`$l9aVK(Is#_U)?xy0!+-X&dPCg zf_7>%TO601bn1CfMK{Y?Nl4s7(k3DlanW`!+<0IvGXU?r`yGegd~>PvMnLIkvxRA+ z?qpErP$0uW)a#Tn!Kjy?rmcMmaRQ1$9BxdUkvV9Sh@b=kwX;+X3Ucqv3x^5kPk*Vy_PKHltbVyr5Hp_-AP+zX0se!a)y#i z1t<`m6q+>-3Re^bcPVX`%l4ZmS91w4^FpN2L|_iuwpK*xk_mB6nNsHAKvjZ>nxU7I zGp%PD3(m>=ZAiZb4S~B>%NVkns+DDETMdC7NJ#^6QC1)qrj#uP>5>;wQdS}oilbt5 zYV`?W29QmIP|jLJ=~6DFN?Lp7SWwqm9E5BNbE)EV?R1bLd(H$FN=Y}@j?Hn%)LBCB zwQ9Da3@~%UEchrDiPVXs5>=Fwl2H)WuA>3@6O+}`hXGu-`@qLP{yPtR^}g@R5y#3KR81I^0~;EPFOD&UDPwpG9RIweEpZn{v|z5yDmmbE{0Dm$)d2 z4-BN~=tL??kxp|;)aJf~Brt`hE`n6d<`!G)x-K{(V8W4!HAfX{j4JV@Vm_I-5hPAz z4TDC^nJ{csHEW$IP~pf?s8fj?9hh5OD0!}0a8L_sxyz_k3N8SeShgCMMW8mD!nE*F- zA#aR@kPxd%2C-@9M5&JoDF>_MQ*+Zb5wU4-FHD=0LgF6$aWWs$v0clb&nYoKM*7XjLstHj_ z7Kn2;f@JGl32a@L!PIu0B(wzz=WLxN$4u)2A+wp+O&xBKe1;bGA4rG4l2UN6<*coh zgeW}s7Ofa*bjx!h(4e5rI>&;hx)I+zKKa!XkDYj;p4V@^>CQXf`Zjk^w$9Yd=+*^x zNT&2mEl!~f0GwT0wQOLJItfuE7P3xpXsA!mESc6hRFqo{fz_Oa)F1@AaX8hs7}!j0 z&w=QV)s33CHC=Y1B8sUadNJahvZ<p}b z<*coFG}ENscxL9tB(lvEOmHiVDF`-FHgosbX@+B(j9D0bs+EF$qS;g(MbeydAI&EKqlt+n^s z{W(?V)TyddonyP~#36R@98WHP`&-{Qfz=@s2T`@r>s&jgh+U zRjcc;-4cU}b3hb7DXsuyN>EB*bU6K0F5CtrLt+6X3kpc@z`IfL;_3V9jzymT=pQig z@bukBAAhK#L?BI>v3&Zfm6CIKwtr7WIAGZ9`NBoL%xf+W&5Q_Wvw<<1shD2xf~w~f zmfwE?7x-WLul%WHUEci80}=hn-~3a%%}z}oJ=&Fw%;*SFfyDp%4}WV&;fe3Qoge>$ zyU(WA)Ae@$t^JeFKmRIUk3U{s)j0b*db4Cm625a85|v}sPp6Q$y{UCo{lR_s{!X$d zqt{+9cZ}EBwwyknkn!#ZcOftpV1U|G)f9ZK4T+rHfdG&lnraemDx#)f<}PZ4!3hw_ zqyZ72f_47|bnNEK-Psm_T?~SF=Sc_{GHO$EAD)gNURT>F7ZV>@Z&%tyuD;%_M1+7L zVr{w&q14v;)R>%!s%m$VbMp`aFCyGH?x_{+B}7?UOf*SL7!=LjBk^R-oKu3PfDzO@ zH0B-GqB#e32L%tls^2(OvH23r00N!dqaq?8F*RxK5Ce)j0`|!)14uJ;H#Y`$cLWE5 zriLe|(oaS-;%XiMRJE`6f}?{0Kx>K|kPH-oz{Sk0vkN+$g=8$?=;A;W7CqRfKb(&D zW^&>i8zMr}W*{KQOzK8}Kw#=jEM~pkX=13S)khK8Kf5tN{n9v)G(ksqQ1!qh%@C0T zwx$%g&y+);;@aKq92}j%QM9@eMUaNTq7{ijn}v&DP@5n>M{Ne6tMKdwyO_e7C>eHJocZOtc){L<|TXnQ>-w z7uC%UQBhHkA2a>#d>JFp^>6$q|Is_|zW2v};g4TkUc7$sb*aUhgW?I6K>Q#4Q~y#* zu~{Rg$3J=(zk8a^{;^;GB}V+gi?5$OeFElrh$)6Y_~GZK78Ae!=WYz`YTSm9E_UO8 z_*;J$z^nP)@&3EN^xpG&*pHe12^>@Yx&6E9u&$+-Jf&6<2^?O$cqL5$Ja8}*rVyFc ztrT^H*0hwmuJ!qs&vW35>wQz{+>F}9`fwFb(4tg1JUlE0IkF=j4>Lt7b4%a7&;h5Z z$&;9ft$^iRZcBSc>gum6T+l4C-G=q6<%o-3Y`{UxmZdp*Q!Pyxi6en{@McULx1ni^ zDOg_tj%?zI*qSMML>`&~vPAIJF<~m*uMK3(=42I6jjglWtw;^xnud^aAw%r6ze&EobVzAo*yeDMCy*EhGgdaG8KHvph2 z;@MCgtmDffj*d=F4h*Nd7tcu>5!+!x2=3OTMdmIpLV%z^j9{S6n5Zi+Fd;N^gp>zD zs?yBhX8-QR{)rq8>)kzoKmGWZ1Qt^>FrqkVd%S;Y?$*rE!&>}UJ&=Xq=t=<`?1DXx z({kWMlsJr0OKTtxyQ4~-5L%ImT+QX7!OrL^AwV!&J}zxRc4A5Jw-MMCpj=e{R*HXH zWv$tO9A5qc@fC+H#@Bj9oB#H|_OIOD9sbte{d>RoE5G```d|LfolV#YEwc)@HlRM?iW5r^zo`>!87hm4KS*|X}essM5-V--KB)1mw_IP~r{Hr@8?)qqtu15qy zq*dyh)&ju}D3Ry6{k5cdeBnS)*Ihq}x|;-zW?e0uR- zOi8zd^SaE71A!X0Fph(W4YWmBYF#1n!HkIp@uA{nNr%#On`?#~69$Y(7*WLx(M-mY zr=f5pS)7?vtSc7)AQ4D2imal6NX^JmPD}j+?otf_bxdCAlG> zAp*H6fH-DGHzNv1{HK5EpL%?~`}@E1+4PZHQ9CMRKm~Ka5Xi&4)6HjAbiGQcHdeFR zloJ%Srj-o+gFU^e0h6hvJ5!yvIlz`fg;~JNLpA=x14cs!tqom?UFMn|M*Ts(T>v1)Y@IOF zHOLUb{WwjJE_ZeHWm&4!Rt>#5I0aUr&2AHjje-FLNaGOX*oe@9ks$IYQUNrkEuc%Q zImZ|hfYn-4eq`&i-R`Gl+Fgtfhl9IQX9FUrxYX9<7~)v!)T#`5_xknAlm;_d<{A^W zHsv(T^Ww_)4~M(^+rYuym~vn6a_})OYinfC zrc&El*Kxd<5BIM=zrFqHXr>}%x4AmbcOQNDY`?p9*J(b6khi<*yO%%t?29*>VGl3o zaC`<#y#8=8^ALk=pf!_P`j}1J9Gp5R=ic1Z4f=%Qp2 zVAAoy>)ae+6KKrxlUsD3$q>D{Tr~#t;s)SrG6E7b6eLDjH6*N)L=KGw6&k8E#lQ^U zXT#@qS|L?HP;fU_G&1HG6Nb^!YRa48_~|Q3Y${#%3SJ%Om(%dkBZzfyv;^g=BQj!_ z4gqi6PD*s>s@|6a`p&YdA%cjz3nLQX{dg>In(c$n4u~p_jwJ3(?aUw_oF3^Q~WH!Xf7-hUkc%#?88}Y7YSL$Nu=Adj9;gXK+a9EZivev4iD>EF9)8ogF2owP4c~L`Y)tt2n zk{u5Bk8iF`JO!TCNfphiD4DiSVrgv+9Nmqa#B^O7Gq$SWn8G+s_e?o3i?rIxkcPQD zq>ySucUk89aeM9FrsJz2@5iCmHrHhe|J=|0GBepPfT?HBPp+?>{Qva7`@aYRnwuFQ zM(jkd4sUjPx2rlJ-dtbSWkv)sLwDY7=FcDMQ~@wd6&zFz0K@7=#>PQb0Y`#-aAJD$ z{`-gNiyUyS3g|z3@$HvieNG5sj)?ES|Lvu;a1maA`5BU@1Eesd&92@Z5xl8yx4WC0 zchJ44%*R8W@0f6D^7LoEBR@;=$GRRLyt)Y`h@8OIwQE0UGv88MHGVa3htPX^JT`SV zwbRtU@D6uw1_ptX>MT_V0tU|Go)LxY(dNp`F^0k|J})YcM(()bOl9gkn-yj#nx&ci^rx5w@FQTXz+R{)O4%sh_6s~2~H=+*1n z7=l>OG@VIu+Hpq!cXBXw@2ckOT8A9fK+Sn}DF*~{0CiO}H9!Jg#8XJj?Kqo*nVI{r z*(~$q?#)phFeTlCey+x-0Km_#)@OjC`T?+S!JQFO8eZ{jwYIxO96A5m6+p~Kd)U@vv~(n8UkSr+fib~UEfIg` zD*ot*O;mjN*5mq57m#e65wy8Bm0vNg87aowrRus6(V1D;%9&fUUY0=#->QFI+>y{p0TxAYV|LnIf zFZUxxsVY_f-T%%1ZMS7JD`rr&EOQJQkfc=t1d3`+S__<2Nt$Q_lKWe?8oh97&pT^k1scyycwNub{~E42#`e798|*VyO#t>T1BLB z%>U^3KHZEFkuNW|((Lkb^Zey2)5oRG>fB_V=eFNwH|G$g*5(y39}lmH`7lk)(af6{ zj@#CpG0debYbix)Rd+0{(Yg|WQD(5i@lZ-FwE@vuS_(kC5RKD3r<7aKWu4|_Rnxhw zfg=leWHl^h4KW2zhTdSge@JKsA)wk)O{IzGJWt*3B8^)!I35owPmT{?6UTWym`7=% z(g@=H?aMG7=ib`XrS5i{aWj7Tqmr^sM_n3v~wZ;DA6A^;qmf zub^N57oQH>Y_E=8cLM;9(*z0((Bb6yVV>^huJjykCqigy82RDHuMr#*Az|MbDm)Jc z14j5DfjPaZM$O!_0Du~xn5aAN#HvfXmm-j*j4hzQ`(9qyeD08I)_+jdQ@&9f7(NOKElY!G1sj>buqM zSInaP-Jv>yClF&bnw!tn5#13yG$s)M@%cN9ziq?7<^5#;a2cP&vbG>)w?J!JYCG;| zcxP9jHL*=dUzC@hef|m@9`7%kD41`)^SDi`HZ-+b+jOh|M-Jn-Nlh9CH*1N9xh~-+ zpWVE8@zp2a`+NWC|NVFWy?>iNx{%gV$`8khiC(>axPO=f(GP$4#Rng}lVU^w3M|sB zyED0NhE3@Qn^xv{eYI;<4eZV9`=#nnK6|mQ>koeS#|E&d^~!7#Mzpu0_@*TwdmBRwCT($V{5yS6|&1sq@mN>G<%l43W%G&2DdRV+iv)&x^FChr|7J zTxzZqFG6e6yn^ad+gh6$u4_fWb(uM^!4REO%-Wiwrj*!dn%B#VZNzY#XAzm^Nz{>I zElUikt;Mb7oL{_t@%Z{8P(+EPETtAzs8UL+;h+4|-(TwbYI(>ZR+ZNDyVu|P?yr5T zQ}HHIzb~!=0OMx+spV~y5Eoc-R|b%^8Vqtw)%hm8~>pj{u}?|Z$>6D zyS;rNgwI}l1*?~1b#-N;ZitO&uU8iVMp1PKSk1x2jTF^^XQiX*8v#&d_YVetS%IAH zTb~m&F?v%FfSI}^hZ6Xc0MCtIEPyyfK5Zu%z>fW>C-Exo>q6k>l*z%(p<}IP&I+0d z)J_aeCfC#akPzH$D@851$ncALjBbt3Yw{L*_w{ORX!kP%NJ@`#9eV8S3G)(P2S z^IA;wFs(!oITB}T_e5ym06yeoh5%ZNtm~3f4Iv|lsBJgfX+F3;Ijj#&eJvFr9*=JT zq*hZaF(Svk8_aWykH@kci&ztDRZ6YHusI&q5C~+cS2&W9&w4TJwoir_!i!gTt*$AA zb`cyfrF601#7Ogss#4Y}>Q*FO#Nhnq_1(0r&%b)Hzk~hdemYLu-DW;6bCu^WpU2lN z2i9X1b0i9ZS``)FF%PHnxif%Eo&c9bsgU}p3v(4E*p!CZF; ztKR;sV52c?(r1Om0RYtiq19^U6`+}W>8;smdFe#4>hc@_06>oI5^#3;`K|mH$G$Kj zYUydLlNzHn2Y|-5e%vnpfk{S0fJu+v32pRuep|KE=-t(99O7ErW@Hny&U8n&0Rf?) zaUvIAcj)Ge!}c=z5fs`rW)0r1aHI`C-MKlh5?3uhd1zB>VoPi3&2d+2=jkD$sO~Rz zd5Ff|nm7aPImgf)t#7U`M1_b|1!1T#{_IwkpR9kIL zrUi!h?C$`A zI-Buvo_E{K3>UjCMmKvLCCrd4%OlcvimO&S8--9G>zG3+m& zO~>09Skw_Oq&dL7t5W3FM6`uUukP=LI8O6@sUl71buDF?mnHoEAACwg0BELbsW(^G zYpECeahYcaEM+zI<5Dhm8$#M{b6J+P%CfA>+RSY;4#SY%+}?@7n^(8{tNpVN-eu+# z`N!+s=l1IA=WgIbr3c+^Lf1t>Mi$eF?>G2?<&MZf(k?*$@L4<9gp z>nWO|12EPnjXB)DzVFFXn<96u6os2z6yXK&Le6U%CwZ6AAvM!FOC-GRsnLyGw1!7a zPY4azeFjNQl7)>l|A70Jf;nh2TNS=)94YO%e8fn|2*`l~cK;eBQ}AqL4#ni4OVAMR zR{vz9zjN$VAx+S>XrHcuQIw893$4}d_b!)RbAw^dLxL?({f>dTvUvelTUV=-&2`$YThB$6tD4 ztDsmGTN(^sTM9wlRaHg5|LfoX{x5xpkN_;i^!nB7_uqT`^y%IVO09U})dC>43W+a< zU)ytvn}0mr>Q~=>H@*DqzD(1+)VsUGx)x@PDY@!lUibUK9bB|;loGlbdS4Ymrx3_( zGj9HmfBkQ`imHYf9^JgxwHaV+Fh-@nEWbWj&t`Bh--F2E?GbU;F z>iFgjF}Q#D(R<^t0jTTxdK|VK@YSm~zx6wZ5ZGkh>>e?`F(bMg$HAjc21l&~&UOjUGUWi7?j9zA+=dp8}Y#T_|Nm3Do#d;I9?@@mfn+fCT* zwkdH=G36Lz7bboqFZZ%h;C3@sm;ugnQN2dwA_6+FfkFo zc=>9UxY!t&y4yA}y?S*!EfMnGT*-(K(CH7q{zr&pX4U}HMK^zYEBp!PMbWmDm8)i|sA{?^ zCT?a1!*&3|mSB2?2ryoJtbqJp;V*$OzQ#iLw%tfmC+W*dkVY)E=KaVHaD|Bcxy(<~ zE+BGqH-FGdoXe|r_pzpbM8mze+SbyZepT1CCAI(O-~Gpb@|S;cIh6nMFaMeU^?&g1 z1`3V<#f+gFwipp-WTay)rHUEsQmAWdRYWAGyetndU*3QE`HK+vXFhr7*}K=nkVFl^ z-92pb^S}4y<4-pF0Qjwi@83C6{qKHk|ET`zx~#R@vex5qxw}6uOD$y$oJ(5(kqOO| zD5>6a>2Lk#zw@8{=f8D(d(X^gp-;Ge^bEjDttn-z>xnPr^5Xf!`_FdBv6h7? z)>aYWFhA^fj}FJz+wpQ<4hFQANrVEKy3O-4j>CLB4C7u+%RF(+s<(ALreQNpx0`Xx z7}n*;F`C-|IXMqDuWEI7!u_s-EN(5bCn1+ry&Myeytl8j0xTtGi`dpU-@ED62-#S8nRy%e)*V z<~#zJnu{1034lpp|xtqz=YuJ=1^w@M50bH?MhIc z=t)H8Z%tAB?9$y8e*TERk%0q-vpZE6bmuOG>4QQ;jxf|e8+A@y&<9yg}_se`h z0Hr`$zYJnikp|T`gn6C7Fy>KOQ7JKRmSvgenVI(c%f9$~`|`_i*lN>tJ%0Mx3#4SG zrs}TacO#fAUBe&y)o=Sr?6B{!nYl6&AiDXw&Te*?*J)~M_M@+7 zCj8MW8poLPz>K$dhc6ES5soz&P>76Bn5bz6Pi_K`O?7B3gkYvsqp3<;a~@Qxv`UDa zV!*hTrHOjv5Ml_7=xQLXnOiUaz`+UExuzjAqL>HpTDr07DaQD%zZ(O9Ga;N5HcsO9 zoxjL@N}8Q`3SCF=9Hqov5&%pM5xT4JSttg&ev3JBcZKZQ5~s~%I9a;E=@sCtENCY# z*J<}O`bmhXt6-$SeJ$4v0D&pHn#5=BzVHVRPUiU7{_bdLoAdwZU;XDx6N9c@3GVvg z<9E!>!Aq69yZJb+Km5^`X5vQ3c=4jSw`cD?S#~J|CITjIO^6X3Z(n`t097rZ^5)St@X!CV zS{I@K4yq?r0z~}rr?-FS@BifG>q*U+Foy8%)BVMkRlDL=9fslQldFIDJ3k1_9eXl2 zQ2`}JGIc~X)6N9Ae{fYPwVJsbsVIQGzI*fJ=8`a!S(fEcnyblNN|F>PK0Mq#z1h#@ z4N)*7vv8aqh{FBdEd|bb)MjREiKd>F4mvPH=lZ4#V8KbBv`f#NtJRaX zY;GL*vroTvbybNms@uE(Iv_KsxZ5%>FpeU^j4>t=i!sgf{eE|Odw&Z+P4u%LKmY8< z&vQ=S`sCSmGnkbag17~u`-j7`cdozv$<5FI+_QNppMP=tgCD;lB2`m>Pd<5nS&o13 z!nv6p}Y@wTjv@FMu!| z4jf{LF)%O7I_9ygGa)rJ*A`PgPRE?W#l`!z90SL)tZG1H%Q}za<+?r$d9%zbg{W$W zhlh*HeO+d8AM#j45Mub>{>>r~!Gj}#gK61}qq(QZr40Rk5f#Et?KU$P5p<6!invJA zKEnZH!kkk~kr2Xej43d4U_wF@n~q0_JjQW*@tBz4tUQ#5)bCO4hw$kZMeK6p=AD-B zr@sU>!?R;40*I=Lguv@6cpj~t?QanPC~%D7k2stH#2hcK_9>?xI%!BJdyF2n-D=F- z%yFB4+Frr|F0c2uFK-_nj#}ju?!9yd_pZ(C=l{|<_V8>{e0sbO`0%tCf6`6Ew}FiS z=H%|=ZXFzQkF~1e#Pa)J>>S{iKe_tsVU_>GWFJ2hAlzMY>Vb<4Zl{he?s;^6#=eXHq0RPEnUlU;rL1Y<* zT;`dGifAo9&!v_UQwD%_SwH>!#XC=~-L2GevDqzkeg5L`kAL^`nE2xlpFMrDd+*(= z58t~sa3bz(ZzB8`|Ai!?U%xnX0V_47E>T9@yM2*H6gmd&04lPswGCZ69K2d9 zRSw5{2SN(9SpqX{7KH=NHX}H3432P}o3$PlSXHO_7&y+;L8XaI zDP@xy!uW8QV$jRWPwpQ+6VVihyTi+%MxCG57e)cF)*53pa}ib54ibjQV4ia#!WhGl z6ZPE%+A%W{f_vY-?MbR{&;bAGc`x&~*VR`G zb574bdiNQe71q$r{Oix3uS;3i0_w!{)?&%u9yX_Bc$#J)(YZ`@>^#7;3rOE)e)j%j z)zeYZnM<`cRlh&7Ra>k5@+VKKN?;Bg{ty4@U+)FP_dfXWH-6=h*D6Rv)VX6dWClkw z`#XR45B|(Q`ST(IM9i$F1Z3_Zu$hvxyNLh?9>y2~bHI;2dh+bq%@2O~#n;bY4LM5_ zF%QVo!&0RZ#oAP4i79c2tu~}k%bL?Tuf>5%U2Cg==?6dj>_ zyNAP9pMCNA=KAv4yH}SNyPR3h2YUC2C1Q5~+?dOwr`;A&0O z3`}7u>oV81$l-XLrUG%)X-16ZR@Pb7oS+nOSVG9te5|c$D^-0dvpbd2T3c0Zk~st% zXxlAW`tnRGg(Ego^K^f>3o)!^W!RMU9)Vl45cu}?mP3RlA&hR)sNL83gJ-{ZfBP8{ zsY#V;N}-CHS>&iDA%v7-43u(GwVOwKA`Bt)F2d0}0%0BV_y*i?Q$y;sX6jP7MD$jC zw#OkLnRmJ!p7gm+%C)`Ga_kJbbDMO^h363ZBlyZm{nim74|&`S-*}AmSL`N%0QM^Dkdo7gX$6 zEPZ3vbnY=nt`Z`edqn_#1=wOlmF?z z{9jiSqA;(^XP@69d5o$5wrNby-h1cxFfH@yrvKo#e)wy@{4=8B4uM18{BpCtfvTpA z3U+lI+;L)l8fvAM{pFNI|05AknwbKL#>8;6Gm(1(` zV&5_7^0;qrpDtt6OUSOZNoc1R`6Kr?o&6?Go*L&n9pE%8IG1c^C=-9`89#+^p5T$L z-b*L(zf&;xyB1HEb;`Z{3c1GZDjuR6yx;Fe(~QRGTx0M=zMW!r1+$b*!$r; zW^n)3cRxC3QatCv(}KSFTQH`(uK3x)38l4G1qr|S$ydv?bVVxcCs&sV1~BW@sWbVb zU08||kpr!*nkkVX2#aiAYTYvbv#B3=s))+KHK|fAry#<8eJsB}Q(d>PCFMEdJ`%eM%vQbX?|# z!(AS>ZLy`!)4Y@_)4YVh=#>}`)9s_{4-XH|(=bl+g8`Y9R^3=qqG_3b^rLxM%Wiw& z;LGwRg<-qdKOEou_|sQ0#Qko3=jr9+#~0&}n7OI;taK_Y00d^&04PmGwXCHHv?kNME{ohh+}EnN_Ycg2$XaE(*k8`e z@#V`eKl$KW569OcTBU$<6-pa$rh0N^3F1d6t{&t(#Lw_xG3nRstGQXX z5CQlpB&4sdo+Iv5(HWc?vu|9$01?2{m|4vT@hlB}E-vv@i@lAdw+YJOZBBg~AaAoF z{1m?bmYecZsEeFMDD?b7=N~+6y*VM;DdzzI`l(6t)4O#MT|&3h z!u2V%PlknXK6Luu0wSu~+hP>{|E|9u9_C10dI$S7q$~cW9L@aQ_n%UC-$S&YLVr4J z2<{?!wL!xE$(>Y@+yRl$T~*Bt$sma=L}R4!{`SilhqcVDL8+^#&-0veVrE1#bW>7m$NSg2 z%ctOam=7Yz6z6#osc&v?=?`;`;o@R^d~@;6)9WUpCL!by!n(}N$<6Z+1CzO`X$Z-* zb)|N2G7}_1LRDc3=xEZ2qM?~tpk!77JOpOO6qy67D)V(M4e7mF3iGg*Rn@1tP4iUN ztJ}Nju-?b8tMx%d5xJCu8HAW0rb9Bb6kwTmo9(jBO}MoilUCH4u7G2g6*ML?cVh09 z$tj9X^;f@R-K`gqCk<_)vlo|Jm+^H+B6c@IdaEvahBmt_C#m+s`|W-C%`?wo`8M-( z30F9^YA2w>zj*?j?rAt@SA;G**q`<`;7>pcfOYYZx6%C;Yr&tope}LI*{ywYb1Ej! z%tJrPkDMV@JjdtToJr)Tc_p5QjQ!NGGso@ZIO?aP>kP~QFyk=hZ<^9Gui)HHyQvw_ z&woIrz5OX;3{L2-h-hHU+?5fDEay~P8;5jrefi?~o7$wT>*d8e^Kv)l{ZtRrG9Qi; zApYX_J`@o*XXJDGKF@-|y?<>64uC|&aB;C~O-gAwh3o5!Whq~N_3C~)y4YHMU8i}T z*3y=_3}cQOq^@u7A1*IORb7|1)OlH@*0Pq$oN8?ZNL??l`2O;JX>&~Z;o&8RLA9t- zYYG5~U|y!$%Ih}|xA*fnoMrgyl=D6$e*WUqSFhIXW_Wyaak-C=9$lmuh*_-xQcOu& zamT;`z*F9=Wl~TA0Kp9ht(bH*dh<)$2ExSC8v*s~(TjedwA=?g%|`{Sl{GKaJOr zPKg7$qV_jfp>^5DK56WWPYOuqHtc-&ob-_U4f<0Amb2jJ*_rmlXnNbl5xm7h-`0i* zy+U((4mLj}n|@Su35N4^oCu!?b~<(Z)G0dl06JB%-QL0BRFNb2 zsRBMjFK5l}^CR6NyW>aTb|UEDANg(ZEp%hB|>CnWpLf{>^TCvy`8F=Vv}f45Bs10bHu;ZujW^ z;rUlzz25JJM~^O^KH3kP%)}wYCMsqr5Qw@7Vi0XZ-iS6wL_!mHaAp>9W(F`ZBSH@3 zQe#YJ9%D#xXblmGc;BRUk$csa(l|{MVi3I%(OMgS=TH7QV*VyuosF{3<2nR@?iO+` zBmIndcIK~lpxw=o*xiZQOcANu7JU=bJzJU6>19vBa1z5u?vebq8a?GjBzzkz_|0FO zA2^YZ{e&^TO~2oulf6YeyMH70fIH(u*nOVhZI*j`&!5w5zm8r@pODRSq5HN9cYF(M zzRl{LmGhRh0{}gjy!`<*VC^tDA?ryHce# zKOT=|E%(PY1d1sUoF=z1L5zdcDizkcF3Vzux3~9zL>T(Hxj--MVM zA!TM}GZ&L_*j8E1oQMfQ-BQf8t}({Iq12T*cH3Y?3^A8F4S8c`qQV?cO7axU)zL$U zL{986;C4F<1M|=QslNaK22O}>-rx9b9_t3x=ew;t{q)-JEw}+E2!ZG=bL)g|0GT_V zrQuI#1ou~VB63$I?ubr5=Hc9%o#oZ=oC&{4#BcwHPS^>ZpprA(3Sj4a?&oynXIbkL zR`k=u^FC>@{)U|acXnMwI2W@$*>u8uub;oUl2b1R-74+v1ckcKoYU!3I^oIPH3v_j z2uS1(J?gk$#`z5C2E%X93ji>6cON4DneRq5?-Re?O`HxA>SaQIuYTM)A)BhI0>H(^ z=5Uyq!ozf&mbxtE;V^gO7!L7pn3h$Zy>r!ZAVNZbjy*C5cRTg!=2EAR$FZ#t(sa$kqLI& zotv*^+KhX55cAfg)Hct{bi9jchu+pwj)%kR*YoFJ-hTGk>)YG8lopr*!;m)aieODG z#oXEgfQ+OfF%G8EBPPbNwW%AEm}=l;*7{vX9NopVYn>od?1N8t58Yx9+1|78lKkN-ew1LBP2BqOa^4$e^!ZD-N3N-obHa;TV7T*;%-RhNNgsE zUB=w|I`20ze45;!u*#m`6o7h1I$U8KPxQMUb-lB-X6qeD>G6Nck>@1Yxt;{n<-f_9 ziPg{8(oc1z=+JBBQ%!pgdUrtLt~%8dRu@(~_0tYWsHTW~MpaLY)YB)^ErkL55S31b zSm)Wv36eQoj|1Fn=?oGh5Q7*1nj15ok=V|FmB5h@j9|YTham!TZSCrES60b~u&(Vm zP0al2)m=)dtZT}{S6{w%_h0$`$F(*y3o%&}K@wFp;ec2#R#mMUUD`|bDFwcJ0$jI;j~t9ba3eFHrUxk(YHuh+6I)H2*gQQn)#?5|4v7MD({+_;y1lykq_$O> z#5Bx@TL2D$rujGw7o{%B>;OaFxv5$M4=-OmU)Gz?zIZcD_g7ap`(1o=efj8egy4)w zDY-ckH(5i>VCHDj7B?hDj;XcPK!E}>Bh*%B=7eN1=T=v-M$E)Pz3}(`^l$tW?sw`v zy0X)`J33Fh9Nyj>gePpqz_1_lr^?FDg&e!-+u-b+7oyOyXJPt!nwB2lO9$kL?(L3+G_oTJ9+g-UeA|ejm z@f!e3X`&9UjHE98I~q14fTcKUv0B$@Iy7}NxqCR6d8AB?wJje$`}lBp#enMSh-EEi zG|%_TVy&)yqM_RQ#~wH=>m1`?pk-Zh%uTgczrCG){OMPpe){VEAcx}|h*BJDEnP0a zfr;W$W_Lsg^E7XUt$QURRZnTt+Jwm97AUDyqR{Fb!w}rTTqDO`u6)CDJTqR-%oaGi znw=UaM6%w!oc`F)cgIuV2OVc7#_2su9t76oPi@22Zu< zFTMxA^g(D+Q_N~)4mX=~vD!@(yLzwzuro#lImM?5c1v-$K9DeN%mcUrK#D2Fwz|X^ zuCFdX`q01p^6Q*4k+S>OU*G;Vg^wU>1ALBWjPfn;(@ja<9zMOxdRxGr zmTedbPCU?)fps@0rk>f%nHk(p1T}Yn9)W&FYs?WC$<3Jwu#ez-9;Wkf5t_hX{8bu) zZE^@Cn@o`!bHI*-0TQ#c!XZKD3c52#kxImfq$(XD6Dc926U~mgt-3L>hyXBv=OG@C zYc0*dm?Iz@kMpw1J5MgmPLPs!af)uijbz#YFs8xHfY44(QoS-jGYcVhx*2m2sScRq z&`Z|Sjbx4pjNIFD1@9eZYfB)`DFgX1rtNmvZS#=QIHvu6^YrPX58r!oak*20wXCHs zH#bk`d8$p;(pqg*Y&zc8s;vpK$B;t|7Z*r$ZL5F6`nz{LB7qwc^?0BY z8SOMmCgRimea062gp{7?T5dlDaGq8a&x}wfcSLq~M(hlcz^rbFNGE6C6JBzjU@;OR zhPUamgUCOHcD}t5?3E;R{Wv_en%E)0^T+|eVX$IHV(5(0zWq>;5YH^TzQ^=UoSo(& z$b@>TZ^3$sqmxu|uU!Fwfy@n=I?L{q>+wAEcPGTBm-NR!B6m=gl#-h{c%a~>r^5?C zO;Sh*y>(|K5^2n_zbpU}vYKGu;*Xz81w~ZciQiU=P&LE*-em`h>yp0De~;y z$7*WYw_#2nuDJ)!?k=q$F%c1204|2{(p5w@o2`Qy)T0%%jREl=5 zgb=v3`SInGX}&L|F6D@r-SK$51*7S>xSN>t&x8nTD?sF`fMlu&Oo-A-&R4A+hheu) z#}Ec{4Iysw0Dy;wm&5jo5M#{EM2+0xc%19Hwo;p{2He`h9FfMaUVQm`fB55uK0#2-!*jVAURA8~2o?lC0OZu}U`q=Vr-=yTkdHb6!sVm6f!lbLjCd5A;z zV>rXxh=8gMk(nta6EzLNTvXG~|NOW9;XnNSaU7{BxQEDJef5fvzyG~wwfm?wb%YQ? zlOj@?==7y1xLXKOq;_Be0Nm6a3@nCJWko>7fMC*P792tdY7NdL57!PXc;I*o7>~-H?QZZtXfsWydG6? zT_*r*4Ma*)GY4`FF{`RF$G8DkH?w9=RNHDQIgZD}%Mjwj@opUV(w3Oh@$j(O#K`IT z`lES$bFqC==7(v$-;9qNv=Dt+HH5G%(`J*^p{dTVK1T}MaaYP5V|;i3{LTO2{~XV2 zZ9O0f2~ILoC*0q`yP}zyh7d%B0I`>j=edOg1ZGwJ24X!85zeszXr|14f!*FRPT({m zQvfDL69w$HzTgggqM;%po!+ib-rf2f>{Pz`35D#=Fue}7J_70I!ih%50EXCO3Gf8@ z_VUS3qrYBUB6}Z&o#-#r@hb1&37(;s)5qgP!At>=80|cid)r~3Uh>R#=tZoWAp#RM zF+lofzN5ePQL3$knBBBPL#-)MFgIp4Z9rY&GDC5PRupLQ)PDs74e%XT)$tDJD>CX;AvcM-a(pg$eoDP;TCf}&m+%v+b5m? zpJ_2~sWYc}dcW`c%f3xpc;4M*3TD>na;G^sSof4BB!63`_IN_?v`;2J)o1-JzL}Sv zE*eiQA9b(ovzUf6A`*%!QvkHCukp?B@(f=&z^{Lc-rf5LkNCYycy{6MKcaW``X|0M zl(Hg6cXIHmD(W#r)#j!|0g*(6DYys_t0;${)*O(CO>38P1cJBIk&f=rTNZfVmo?rhx7$;&5VngIjk4r9Q?42M6Y;Dt)P# zF(81n1{jC}fQuHwK;V7&b8eH_TwM(j8Hf-?^!!b`ins&02aY0&NK9`Yn$cPBh1L}6ORb4jYu-oR%hPT^zeYw5ZZ!Wg+`f|75Z?CWS@4x@_$C1wmwl&C``4(7;w`U;T{x%-&wb&Et!nOM zMBK9+Agc({nX~eCrK98ZoqFo#08DJ)<`9q!%&bF;c7m6BXM3Utu!Ho;d#{HH2nmY- zAQ#iVtShQ#7dIsiX6kOl!Ohg|FaJvX_DwVBoHAB5AVg)6^-PPAUdM8u-@3;*x(gsO zF_>~p(n^e3tpY$`cB#ZcRYC}=_2iQ4N*EkZ*%H8s$-H$9)WET}1&JM<0|g;7;~`Je z^cVizuk_DJy>?Ye6>)HN3`pjJ!0u{hIVM$AQ%4HO6hKvp$z5_vRa%qAVL${7L8W#O zXdE`BRW%R9oxv_5Ap}C?l$xr$5k+J}oTp!lsBg0-~rnI|zxW&th5V?sVG6^;dNBH+!A%4#uZ)e6QAE=@v6 zCdMI}34sHViD8H;4MR|?OymHfEv1cW10uE7mo`Ntrcvtx2&(Ob2CGtt2q2&~Z^hW*`D+VuI%8OsrbnlqvOGEb16eHI->4q%QZv z%%)Fm1?b+36b1DwT$u7Tma!XEzjQlc%ENv zhYK@$bN5wBo0qSC9K!D5@DdRfSZlSA!7ZnK)dc|2g$Niz$cexGC;luFpRo{NqHgVC z4jf4P1n)F#bv!K=bmb+~QyI?gJQ|;COWCyegp(dfEAw z6ad8MeW*UI>xt#e*zR~BQg3Dbl%V{~Bx}Ah6s=GNlKsV%Y1M_a;;{UyWW_Y?OL%>Z6Lp;qAhR7q?5Mc}6#uQKmiB(%n8#C+dBGAU&f`*ey>x7xk z0HSUKfafm40Za%P4DOFh2oz!hGY&jtzP#98Ty8Edq7#LX4b;IMEO0b$k(0TJDssXO z9Gpwu6cUiPRw?GrC+?>k6CojU=nS82M3584Ajhk z7y>Kd37$yAAAuS->B$h+F+JnRf?S*JYgO{;;LL5xXN0G&frGo+|0r>!#L zm{O_7-R>f#0H`^q7!b*F%Ga0s{YC!p{b!e#7t)$2E%PD7tgbl?(kgM>3l$CL!=Dc(aE;`>X!`bzatE9(Ga}4kwxz zQB4U~VPG=&D@EfR@JirG{s`e(oY=2w5|!`3Q-Ge!^H#74K9 z0TJ99sD_XM#6;4tndaMZ*f%V0g6IK5YbE84s+a>BhM2&b12Uij5Q3`ayq%Z(A#bXz zY8Ai&<+V&{NVSPGqQhp~)iwvpF+^3BRs%;sHj|u3F)=qVjd3@v_e=y1Aq;JuQc9)F zF>X)`@;J?RX_D&a2dbz%ee%n$sY*28OxSaFL<2HTqzO2%89kGX*$lp2KNf&>Yd3gL(Ik z21j*62MCO6MBt(=#w2Qp1`bSMfZ*h=#3TX;&aCbM(aq&Fx;QcB-f9S1Z|>d15fFH; zKGhC3gtbZtK}4HMKnCQ}B*xgAxK4FPa09+f@~{4h{UzTjZ>D*Pc{{Hw5w)t3vS{fJ z^c><+3Lpk#IZhn&yp|X?>$-3l=Q8Cqnwle;gH&ZkMAB9Q#U>>u8sb*15vR4TM8rs{ z5;&*{5(Q3T)zk=~)_I5I=NN~`Nv%1!8@P9eXLnZuRQ1iUZ(3_D90CHPH!uYN zG(e7wp|x40F>)V|Mjo1$97k<)3dvN}gfIpUrOYuz^lB=I5Ga`I!*SkhcAz4z;Qd7d z5SvvoIzos%$yzI1o1cmc?emhY5$s#0#j{;2(@D^Nb0&QcO0^)gpgZZ0m)or z96C$3)+14NgBXTdS41YlUQ(8IA;wZ`irIrn^Hr7QvWb2nhf?vaYR^E?F^dN|{2k%e*B> znO!}UIw7WU^WHCh?|X;o?)96)-R<2x>)pf4$ou=duZV_en!)Me`1-VJg7M9KH^htv zidtKVA*u-zBSek~|N8&+f3eniNIOR_WzKnHBI*)3Hf<>k2HslDF*T{gOn~af7{!{K zrjUy)DGuGrkSWwUr!;_jktN4L)rbR_*R~GBR$En&z{$ELu3KyCI9}BC$T1+WY6~HY zG&9M0Tk8~KR&xbhd9Tu%t|{*rX;~j) z9MmLI7F}c7wz8;8${Pl*ZK9C7r=)p_X}3-XXHRLv80PhE$U8MbM*!n6)OB{WmDkV0K%XGn2C_q7~T-Z`kL6B30er3kbbhJduzDaBE}bs{i_)Yf7sDQ*d@ z>dKT6)tnj739M^^npCU^x!+dL$r@gQ*Y`7*r`l$izA2rOXJ_iOL~_F8bexLt`H2^@tdN z&>rR?W!V_PguD@ot_MqG4VZ6|1$Z>sqRa2vM4* z!*QCH#gF&*3Qk1KycstJj@~#1{#XCy-$2S@*i?w(T#I{HYo(CI$Q+hsjd44bDezX! z-9vXwD{XZMRfK6+YZJ59jA&R}F=ul$p(+ZCg3EXR2Qrx>Y5$V&w z$XQzHTPCd)4kH6pDSc)mQUgb=1>6A1)niCYIi#>L*Val-yRtqYB6E;dBM()Uly?my|!hj5p-t_^9-9fD-9?J3%LI`0f%Q2?0)e^!` zTSYem(lR4a4ntdKj-#m}fVm-pst~YhjUfQAw8orODsgZ(RYk|vrW8jec6FlQ-Z&(Y z>ZXLOx<<~72nI+I9GF6DOJ8J0K(`iRLPrP2GwDdRL0@fgL&QK~ttF?OX=CQrX5vKP zj6tQOnCErgjW<=wkOq|sjs#8^O$&3BRs&~13>*=x%FGx;j4o=ugemi8xB&MUxJn_Q z5Ca-ZT~ZoLS%$O$#K5dBu8oj3!xp>@IU*XNUR_)>+vVjZXWVYao9nCHcC#IMw;#tG zZXP|lx!J$>{ySIK`xJ>d)+V(r!~xv-ul{R)UbTq!?Bq<`VUOi_Ao37%3~4P#ASWU) zSz8GqBC)D61$D1wao3QB7>814b%~MD!O)3A2w7cSg*l59DHQ`!%!u4%HEc0N&;}F` zA%tPAOH8?GaZ$CxA;q+*brmZqC)5VOL`Z~1RzemxVzj1!LL3orEyt7-xW|-$0zxB- zfB(0C6a%Fp5k(+sa*QDn1|&oZBH{$#=;SGkOFiy37j6|P5L#)KIg3>y?pnfto^m>E za!?eh1|H+kq!8t1>zFs9H4R(UT59RY3NaZnc1zkkGLxg5x|$ezirXeDb8^tm-;W`w z7Ex1|kOl-0*BJBC=IwX^phUsUYFjuBfm72OV-~AS5fEd{qN@X`wLDxpfNF~=E_L3F zmuj`IqSm^kamN@$DyQUb?iNA z-(4^3!2t~*hNNzh<64dYYEDF)hjCtxfQS@AhyY-&tuDyaL^tE!5lWdcM5X`^fkQ2e zgBrLSZZ{Weog9If>Fj!^t*BMN01o43H?0rE$y5R-0uUE+1(cMAJcP|=3{iLc-I&Am z<>i>;IK-TAw;ispFW-CiOk^o- z&_S&NU>-N1)>;8%AP>k6Hsq~JGnWv;X4o(5fsj=z5^jc_Y0bmFl*yq59>%m;*1N!2 zv?0Qf$FAWjQUN>z<~oNbVDXITH7(Ft)m3u zWqAlZq!`_R8Hw3Ms;)!YxmP9>X#g;cJ6BPwDevmK7)aoR2;j{O0BjicW@0WWZAzJm z*-ZnHdqs@y64MB7>Mc;NWy-@wTgf4bu6=Wd!hqmTMi5$CkjPAiJc?E%GHs3&LvR9g z7A@+^;5iLu;s^$+;5lVSASczPDuHM_?wTwH;3kHY)2Jo^xyWK_fq6IXiYy|E1P(mp zjaUuHYn=$0826j~+UC|8$7p~lW^*CHwN6X{z%F)Ib2(ILF=cfd(pIenHXY*D!KUdh#(_ABtlGMMhKUn41)?qzrP7ADG1Iji9U#VGEtA$3 z0)x3>@LJ4)DLA@_q%f#Sm11r=ZI<|eD&(Lf9I<=uaD#Ia+x2#_nnV&9BQjQyhYoXE=qYI z3Ix#Ff*x`n*L5N$Kr)jYcV)Scad1;PCsOwk>*6$DdV zW86wDId7IaZHBAbmVmKI19NFJG3B&tWsPZE$~5K+(TV`33J$FvDa0Xe%Q_FkuGSJL zn=81tR#V99dKbfxLMrQ=hrOsU26J^)RgIKtd5Ce0#I>x$cp++?Zmd#OB~nybnG+(Y zw3K$DMhHYfr9f9AawEhp;epgCU@fIl+TwuN#fVK}myi*OaWri?ZCYCZ2}}t?-&GGG zFY7dpm(t3RHzK8bs00dN24FFa$N7H0y=hW&8qJ%?$`E_$t6EarK1{d!?Twlc5C^Jt zW=ttX!cglp*5+m!C{PHSd|B560&s``IIRyv%rQG!h)K;wWiTL>}4QKdStfpEw%jRq28YEoOR$jqFWNmPMQ zT*u8tm1VQJT+5`Q1`t9_X;aJ0AvG;IZ=2T5=3*_AnW`y=km6Qk;W&t{$PCCi3DI-fgIldD$53VMoYTO=ygo2TKul?aj;$^n zhh@DZj>sX!aV<+AQumxjbOJY^Fwbu|L^VihFmP#$0mYaCCopsL)>d!@3;>Yxwv-8x zkwfIoXZH)&gj5ssQCRbm{~3n6SaS2^#HAf;4gDP=Nu<{`!8$T^M6dI!j9*t9msIBv$vkVYa1 zA*}0zm?AP!ASMbU5tn*&q@1_49ft8L=Pe+GfQY!R_s9{E-JAk5XLk{8KpbNhEivuJ zyf=3QB?{|$;J6_Sw|959cV)lZKDr*an|ytB@#xXzFU+NqkF_lmK~T9?&8IHWFR zgrFj#(qb55j7;PrhvRJ;wlQQkaWrzA*JDmw1K$kW(&n9 zqNYuXBN39B09pW2mlQ_kfEY?UxS~RhX{S=%TOdXXu9Y|gqGnOahW!oy=dc* z`tCb(a23@SV?qiFI+b~|xsbNTv=ObuDd$03HETKV3{l)_TZdsMbqQ(gN=`X%nydhp zhYkPbzx1c16{6rkIp!EM0IbuYtOp=VX+uawCJrH_LF-!T(%QW+Qb}NnK@8M zLr$B+@fCojG%!GnBZVMs28U&xQye%%0$_>`N|XVqwsox!V;&rIlg7NeGF`#E)P;}% zqqKRueY`BUL*5VuHCf8E9kvF#A9iWHuDYPpalXqTBeZ~-Il_sg!a42MbqW;4ghEIZ z&DIpQ-iM5U97CeA_pPqTNEk36LpmJajN=6|XdhYmy4^lrrUzn( zanniu^K>`lZ5oDJryMs1>vnT99Uo#0DUJXxrc!H6L&~|;i9;gPaeOo#Z*v|x?XgL9 zvlKJOD6$|C6Xmp@r-zghQ*^gdWt=@4K1c(VufzetmZDtGy5|naGVLS;U5j$$in@zq*F|Eh@7*ko-oVE@YLP}{|%dI)= z#w*d9!boh+l*4Yb+m+*iIn-Jr4?q-h1_O@aczm_pT*sI@M&)ENY*I{-*`y&rt#uqP z9W{jDKx?@Tl*e&L$dR*nMWl#%*d#VWqG`Izd2fh0=hiA9wl?Lw-EJ?4l7ovia16x5 zkP{~HHcbzkizjP&7{<-AE+GbYPa%xEYXa^yXQ0dhH)%&mOF4>pj7eJI5X~SEFsBeO z4HvHdaCl9Ok%nQD2HZ54d3gwNvo41ivzetdI#}coVgevgzdO9<5XQV8h71ZoetUSG zn4|_tgS`njzsaJ&Ht|6qQ z&XLFY_-eDercSysMn=;{7@Mpq4r`erZ>Pi83K`wCX&x@rl!;oa zu7VWJn$!Z=Rc)-)y5ByotppA#B3hWTySB9ucAX(y%5=Sdcdct@Ux^fiKm<}Nq4kx6 z+RARcQ9D^jNvo>L9Ka3D)EZJ}%;yktYjsFt)2dRK2WIkCRT>cYwY_n;Xi|rm)KuF- zJPvtqRcqD2`M>d3{)G^RzWY6H_Ay2z?;f>>>3&^jgKjqpDGv_d5c(viX%$sOjue^5 ztkyO&r(xI=$6nPFg>kqzOCDKib*=O5!^7|W{#T!T^ntla6SV>W<9NNSx3w9H5TZ*1 zh-yvBLPR2x;y@v&nW>pKqLA}$S?*d>QV2u@s172lwc59Jhhb;vwKO6!mCfc_L`>_l zu9?A@kgpkW-7IK5uw`V#%x^1;ft7H*K>oy^8dg{Zz0r zckS8$l|sYMZ@=Ag@LKzz>BOtt%{!-E^NKcL`MR}}_ps~qfGOJ)+}I_LX-`f|Yg4eY zT)=!>A_;hKXDr9XnBrSI7zMjSS|2UA7p`%vd#TKCxik*VPb-wzvK}ZI2jwU|-r>Ax zlb=W9j9{5x(^e{8`Pw++s=&kl;fHEf6a@}DFibI-wD;kG|Mxu^`M6}h$;Y0({`Xg} zd4lVbTW@Yo4mtiupptXj@6tOun`$?dIq-%}CybKHsswJ)wB`Jv|saDBFsX&Us$iUEC*T6{E$RNbf+{)C*%FsmH nz|hLTVAXnkpn4&9T5Nj|B}1)4HFI2*8f6LW(yDtKWHBoBo-Pe z84nc@J!Kvd8xa^M7ZMi|Ky4r&7z;jY9}gK18!Q?W9~7vipy%lSIbj_W91}Gp859{5 z8YLMNA`~7k8$4niL2Dr6KDmzD0A2Jx<-rWut z4I?)iFi{$mkck^77D6r|GgcZyb0V0Tw>MiH94r@*jfIkwwncR#ASN3tM;A0&8z(y* zD<2aB^OC~B`rEXKr0>U?EkR8+9MnmLqbV5O=w7T zBqT60BQ_r%7!w^J7CTB_DKIkw zroZDeK}$tPMkG8UJ4#u@(CNg*+8`|?%+2DftlK0rD>O4VAuB5?KOiPB9VaXj!NkxV zCnYU86*x&vHZvKIy7jiXK{hd> zzUMV6B(Aa1bb5{~MIkjw8`Ib5XoRBj^!1#p(zC?kXK;b7yXAd?n0k`4r>Mj?QX%T> z@IFBvLsCWH;_QN&zCU9(QaUWy+xC)~rEQI{WM^%iqpr-~{KdxYsjs-v)Yh}Oz&BPk zz1RG`%H)TSoIO%fU0_^CXib!|-bijgfuzw(X`-cz!ezROZ(#MS8otJF7KuHfwyF28F&NB$4(I zWL~Ej1|uN9ea;A>(GnxP79s@1Aq3MTgw&FQLO1KUY}=DSxcvhi+m<0aM(8|1SVm*C zqG^vF?Q45NT#O(b2aQ%A5nli3eeG_tJ%oynfcOY^RB)CMLgA%25{*Pcj4<|vBm@&x zBsDsg$(jfu*ij(N{sx3dVo(VG;LX!G2b&w0AP6}15#jFZN80);pCsEuP>jI2!w6>l z_H2k0ocVY>96=ai?DG;KB)%You?dr7Q*i%mIBw!kh`uApt*w8wzv#oxU(0Bf_JD9% zoPHu`$1iIiExg<=f>MOQ8M{LWriw)fL5NZ%*hCl`H4%Kw<8xFof?|akAlUdbk^UoW zX;TY~zzt4rYr7_I2*Se4+R^d*S0YqBMxYoR%SucG0hyj;1a!D32#8WZKthCo8UqAn z03r4o5Nsnd5Cnt~{A_ySh9De`Xh%nPuR?gy9j|(FoDsqaMnHm$fWCQ@5JXu|_z0m< zARzQP93CYE^vO7pKzn4yL$<9{XdnoO4_4bl*y<<3$g%d(>&MBVs}NA+(Nw@k2#0MT zP?TZ>BqIqy*Mng$_y{BDG5Q>4gvl8lD&YjGL?&3oSgJ3bQHs&33ImrA#6Q{AY0s;TiLGF zZq{V&#k6Y~l>ZP)PQ?WRWs(q3$X`@+j=>1F4Ftp{1lz`SN6zECsZK<#LZ6IpWl<8=HUMAOvDCW)L#S z2_J!?{zJIU2tpQpgajj)CLu)4TcfyAH-R9hgZAw7Y+n#$6JhV10V=}9xuKgnFS?{) zSTG<4fiw|R10iP45P~R~K0||dMYF=%7dwX+pMI0Vpgpd&I47>t12rZv_434-k-$W$B% z^RlW=5CYLV)6<`yG3Wt8qu}K^gsrW^2Q~5ZAy`gP>6`#XxA+YRcx4164um2hL=_>} z*?DCGMa}^MrzdA;V|W?^2)Y77k7~k(^Pcnxa)Z0#y}eZ| zIy4IUp{AW6M6aoSQ1Y8T5fH5LHsR^6s7o`y(OigLa z630(B!hc0y;WuSc8>E8)A%%iH$8QxMAs8iuNF+Q#2*@}qgc1ZKDnN+#0%7$W!iJ{( zbAJjLxviY&FG4cegXW0iQopS0b>UQ~FK`Q-83O^sl8~9oX@p431Og>W2v7lnC+B;F z;5Zi`95j34E+8b^Hh5V}_67m{FJ;1!LONO01kR!?RV}%~KaC*`l#S)3eOwC1%3>8r^WTeySa!xvWx+;(? zcj1bQ981}R!H>x>Lgw8^DlC^Hrkq5wO6`2;m?jgn+Opg;VYrftQ)uOU>yj!uR)q@JsUIFa0YE$IYW2 zAq?m01q$t#*?Oa#!B9{8!C8a4j5H&t04KxLV4Z{xbz_dABVe#Fd+-sI zVgxMi0YSy?$etqz@xMdhZ@kL{6qPMEMoBtX1l#r*bi|r-{oC+jAh$}4V8jTa7*IhV z%+CJMON88l)_sKU2efL@L_m>R6s2>}pycXU%19V|n4l1aVV&$W*lwCE3P{K!1luMA z02+kwM^_N!B?#J{*L8#so>~5Cpa{eHbeda#onzga_fP<40^upAyaM5wXI>rZMUw05ZH|sobz`N(JJ?x>(qpU<-fcpLhfGo5Qch@Pd@qRc%-e-QMz8nSci5tIr&o6;*b2r z=RP@&xm(ebDHWqNZ3{1vFR1!t9j_Yadnbehf*H0uLXeFv;cA3K%@L;%-n$Nh=bb|6 zO^$q|nVJ?P(&*vxH#?+X%GYuW9*4#PJL)f8IxgmwikV#2&1&tO9r61snNE8SH z@p^u!>EdY&zhFYmfyzgEvDN;l17<$knq5_qsGs80v457&d)0@_3)HL}MR`MyFbd zS^k=7rQ}J;8#_9+`Bg_0<2u4qYYPh)GpH-Z46o)H1;m=8>BHh5yaU$?VNJ9|5G_*E z7S162`j}D22pmfxq7tYGAxt)~Y;?2fxfwK2xj4@gbPib!3js%bq7L9dJvYSwEG@jFF0-!H#+?*w62v_g7QF=mU4a26})Z4??*o z#u*n%mWw24jfl$sKc%dEykY2OO=utCDXs|?hdR|c#P#>hXk{WKD0w=oqpU4@vk-&t zBP$A5gtO^IO>m|T|Gx;XoroGVTc(261AcT2nIa`AGbXK56or#APc9)eezF)LOe^{XnptsHU=*`UWU5-m|f2%VxgH8$JQu%$6n$E8S#J#=Ijk zN|gkqFEv3p542pn2%kOS9`m2i4+Nr#fU;GzQeCRxqe~q?DCLyOZl3yEp}76W6(AXk z9(&O_DqfXRif$qx7t{o=xrVCkdZ!RRIE%2>F#-aJZ@=t2M6)Ki7WK>H*)=au(`Ss1 zLW`-q378bmldY3qPQ@~*vdimu?syeOqALikicX$FsI6$tgPgXze>sBa0D&By?<+(T zLAQ{sNM%)e!qxrtPYBeCG(gYMR!M?zTX%Z3E@3&=^(u**l9Y?4@WL0_XyiUBEN~ zH37-{yULvka6j8F!o9T%Hkf;e&>=+IP$PF+)P&)+R6bIm?XkM3^K_tKsQ@Mox3l@% zbGVS!4I4wHnYn1Q7w7}RuV)dwy{V~P$8q|CuzSDJH2tzZ(gGrRe4Ok~$6TrUJ2d&C z=hT&sGUsK|@%hwRCR=v{{GfbqvmXe%^m-*k^7WUy zf-vmFU3$pZ<@Hm`n8+`M3$d&xt9Up*TP&5UDKC|+xNaQhTJ5B_m$v(aHE|9h2gKUO z>L&hSg<4H$+M_Nav<^eG^Ao~k=MMxo_7Mtmwu>onrj(sei4<24T!KwDhjMx3)CIMh7yQpI}qsh z4+j~cnJqL&s1hr+n%5r$cDMrKlaEF^Loo6s$H`)~XzmZMTK6AxL}Ijesc@vng->v^ z5LW#@0aapEUKio3=bt2i__4)csWSvSG4GTyAVRxC(_uY8(J2|no6k$p$c;m2^a&f= z*MBPenGe2eUGn>XK7RZyAf7Zows;`8Tttf>*L7w6_Y6z99_6J8WoAw{*ik|zj=OUS$sT;<;6r8mlBeb{b zv$`uUL6D+L2%PV}zX)M>|NezKUygKVh+5>qkzw$^Mrc66LO(34DS`9};n#K$G|lN1 z!uPukhfAx({oUs;O*{W$)yVO2%bm5kxm!#4NgzG!Ya8f}%V$@pz4Hj4^&dghuw-{3 zg19!q{rzXo=ew`a544%9wj+|S93LIGoH3_Wwj@$zE1&iM1w5l9uFB8dMYt#0Q&`wN z+5b6*@L6}7qh|Q*SKoI9BKgVP^}8*aBO&F#m@I$3Y3IP@W0MW@c%^(OJ z#KpftL?Jz2C{Z5=_*=FFv?*7vb7nT}8!2K;8L#IyILiE**h}6Hf`Rk-`A$ z5wPu@{kkc-#(e7ZMd+8VhGh%`WAW7ybLa<(V(QxwkOTyp6iy_uua3Ic$>#VEZ;t^=&WM{~P z!=GCbki-~%5RE_?-i8Q5dq?~!!PYzKRsJ@Deq9Cvy(ecET}MSg2qkQeE~@-YxGt+Y zvIxS9A|b3G%5;;9U<8*l6C@*GG%OZ^7Q0W$>z{%VhP-WpDYZJnaz@Oy$5`f$v;LkC z$f}NXZUl4$5gcX0ia;WyfI=-K0+NVuAQHjwY&u1uD2y$D6N@b^KtZY_i3pZpghuID z=7j_4Qp4-ja9ePO!2ZFU@ zaSVOP9pS^)3L)N2ttDgVYm~4+#eE)LC~^2$P>cRMh^LS zwM=`Z)6J5Eg?4c@74H@7@}~ zCwPRJaIyU$2h=v zD7H4biFD*G9I&&nHb1|!vT~4y;e+Q~yAuN#LKwsFz#s;&JpdH$86)t(Pd|Nd(>Fs1 zB&d_x-2bAVM>RveU7cGurXZ{{{|rK0V7~iHf6U30M?cB$ApCUigOR7x8gqJOe)z{8 z$De;TYPTPNViF&Gu&^-byAw%(QuF~l4~`mi4M@T%;}3vF5Kh!3>U(qlz0{9C{^8?~ zKaBTH!!(bAP-gyqIeKMK=0E-e2%ckFVbiOrYMB{!HYU<|Ir{08FJ?d(8vXq9$B!>8 zEW`vN2$MQK1|g2ZPhY)v(@$e3ijYN}0sJ4+C<$&|_iO)J)tN15hd;jx35arFn6*Z^ zF@jJ&fUsU>{t*PwhkpRU7Zpk|C5ZwG;M=Ezq1MWA(Et_<=;=_fE~2YnTln0N2{69G#Jrd6}1(WIBycHNbtE;9VvFHJN79v;GPM(Bnr& zp{6owtx6CQ6&A5_YReBPMGb@~s;5d55GErqGVh)#4N@?C5CBa>SlH|Bzw~`?AKo(c zs)Zld<`;H$R<2#S_WiHM&JFg@Pkjn4`|m(7!@#uz+h%4hCK#}!HrFs3CMXKS2!g=# zsYPKanNFc*=-RJUaT+lKfZ^3-3MEZ-s_e~z@Cxis>rS_#XjI8$GMbEKqOmk1Qbegp zsjJf=1hD#f@M>iR44N9ahi(u2hOxgg=H~Eb<#2M;?sQtPwSdBz!_VE^>vm5#Gn!WI zz=5!0JL>P4ZR1~Ao0+Z~xQ<(QL(?%l^{C$fsfMAN;JybC;C2MT+7bj-SxU;Ol;P)4 zzKT+MZ7ad^1ptG~tJfQoFZ0iUaMY`us!mrGR8^|BsA$E4#LB*}=a7hfN_=sYgq87E zg%{@MBh$gz8M=0IcL!WOi~$(FTrMwny1f^k8r`|S*IQcyO5-|n;rRG(QG`(6338%5J$zI*gdg1x9iLKKcN}JFwF_<3X0D+i<`HSftl%uzNA&Uu0VL{-;M1n_)EGw-tT)AvvU8qy;PW6u< z_?9pFI;9fJ<5i_VF_~j5F{Ex0N!y}?FwXj@Az!b`T7gv%q16pUP@$xwJUtS^na6h` z{fYlj)u#pBxYt=;Zmq8`w>Da>&PwlvwG$Rz_^8)~TLQy}wnZJ^pV120P)n5gtcE2y%ZtlZtYja?8XA?OwTWsmS(@f|ey{l>kM4u-+sn(_ z?eg~a#`gO5cB{3~Y4^LWZnxWRwOak&?Dw|N>%W5#x&d&Y%{ujM3$7m2dZ;o@$BY}W z6~e9q!(Bamj!|n`5d_liaCLxu@zL|1PFVTluj9I8hUq%D?B@*K~n zmpCpLI$Azi=J1Tpq|QbE>*!&Zx)LEe%NE#BX9Jm68AWvI{SvyqoK>*G3M?rJ7nb=X z(lEM>pk*v(NU4OX^$~=HNkvd*F`4~Za({oL-P#84*EhD??d|pb)^>Mix7S;4wOc@< z*X{Lo;RJB{!O5btJwAkB>sHeS-&~L#sxbr~RQG-A_)eWd7Tm$+*f6~bBM88tX_)GG z39}qH#CLrtN3qP>trO$d00tlvwzxTa2R%U)iuoi$iM%W)mbg8Z}Fl;S>%%}(JlrEB#V*a5WgmBIZ*`5kph(_?dq9A9cd^-L@BG> z#+P|PLoA!qO3Rg`RM8b(d3XkdShJzbetY2kGxz(g{)dl0-tV6Y+V8>m@3bSeVAj;` zb>^ouS|?bR>o}o3v@U|+0TADYEI<-0zaF?Q+yT`dK!nbm6Em2}&3Akb<7hfa5X76d1j>x7mKV;LX- z1qeY@-5~{V;}1dt0)LxE!vP2&Zvuh|wi?aN;33nqK#tY)YU2#%V3lUX0H6-VY4FSu z1PQ0)Adp~+DschIAa0dNxg-+m$)q5sxb)IiRZkILl3BSxz(q-7bxH9RSxi9^SWJq# zQqP1Io6YK2U{eaxEgcb2Q?e*isY+E=d|1#doFdoDS{9YI2~h|tk^Db}Fb!lJN^7IN zz7E5FKQ3ROy?MyPFak3nxZtf5Rq@acT`Pv*M%5^YNKgtx+lea?$Z??;LV`1*{Fd|bTe2g5Hqkl=z#b4-kpb7V&8Sf3}Py5||tJCj94;?$l={5BL zf*M1pnIIq$5dgu>s3#;BwPc24bC~0_)x5^>2`-VKi*AO?6$DvX&DBMuP^Ey`Km-JA zhG2@6*jRwTBfiL%5TUMI(Bu>r2_f`VT0{z4#Ik@{y@E)AWDAlc9=rS4&83p%+2Y+m zp;Y>}A@srT76bvx4|L}KTAY);Zok{x?+(HO{~kpMt_Khj?M@?hEz>X$GUi0eBCa{_o6GM37i6^dp2$FER!5k=t02rVz8^!=Y zv|JcLkOUSZ8E2FvS>lky<2*FiRFcK%j3Sdp%-bd3&DughlagBWTMypWcp@%j%qs2lPL4YJMzh}_+{0ung_3-uA=U#vPwbx#IG2Whz_Ff!d zfQ4<$z^p-k_~n;TIpPG2Q!s?ZY-Nd)&=2#A>BV zL8qU4`Yq+F z&p7eKH{O2ht+(Gg@r^g$dgF~Z)R6{3fUjdoK-}VDB9#=DWQ3D^QWiMOB9X^JO3>I8 z8|X;PAWbh2Szwn4Gz9_$A0|DO`-`6!^SWM82-aksmE;sk%8FY-$c8H_KoVFiW37@w z7%2oj3?2R5cQ4)k^0d>Q0|=jdG67*)_nm!wj7xkO>&3I`(QmYxZ%7+w9LEQFP+(lWyv#Cmrqa$UEZAq6=scBecTG&`y5Sp2-*8Npi zmkn1-r7bfv5^9jffZ|+35oIzQd*cgN>tMgLP1_B+!Pb56p65>U_`>J&`}aIgZj4^O zJays1wHwvy;*zCgtjODpK zN&#Vm7G5o40nUOD#F;m72Jd4bOCU6`;jjP-u7grQf#QX4S8}#%F|-4|0A)~`)nTO1zVUR;EnJbnW@h)6$e-x*o%?m>w9qgAe0 zRn${u@DHvGu5NB_K7C4dg7+^L^2K~!ZbeYOn9dj8hn>02Wb)0;vQC_+vCY)XIBbPN z9&S)YzM>BNK=y$G{8W*F9&SJYVGVMEOyT}*iwT-$I1=Lph)Q7I41+|T+Wq_RjA3Obxh)5KcKroi&(TIS@8H!_06AT+z{hr`SkwAC^A`i#&AHaSWE<$pSP$)r> z0!ETtB*JqP9-&fRf)isocSr2_%IwOA=XyM42>(T8SiipYEA(3(uy6FmRL444{?z*R z`Xa0n);l_`U53Ok|t!ouu8eFLZ&w7;#nIS2N?wwBFS)TPsfbUIy^ z22DV0&u(NvVEJJOwD62A96mAQ2*WSngWG~pEh8r!Nn1-Yd?K7|d2G6(kcV+Qt{~69 z++h2n^KOZ%hOmR>?1R)+hdg|2aV_lGxMG8eQMvzD{k*Ga<7{VDif{%l;b>4SD^dFBM z?>RR(_)s96fA2Pg*8u_`86IBz^m8!!t?jMF8?b*0n@86`aLDjC>jZh;Vd4kso4Xel zx(90ay=JJIb?$Abf3bSLzkhx{HIbUwQEj?dTUX2%9ASqno8#&Xc)?XU6jc-og}Ms( zutI*MJ4dEl!kr^FTc*Y_GV)|+OR_WEQh1~cL2jGi3HKoQ_?_i4nEmd49`SkuI7yNy zoHA%gs8(sT3+uY@R?^%b+KQTHsOf7zj{Q$X&iOlWB1Pgqo2W+el`51c-Fj$PnaXXc@xUvm-CRc^3jn zP@GYN5K0UxqUV)LB%q`TQUg9fTL>i)AUDshUhRdF@(h#eX9fNYelilrDFHKjf7pZZ z8X_Pfn9)f3#EF@k&z|AFApX?*N2)P~ER;EBn_kt+(tQ51?JgWqrPdpyUF`(rM@ z9Er01{r$m-tINyt+4)NoAP7Gohs_2-$N>$snps`VWJYX`47`A6tU?cW%gD^mYi?$B zBX@J{*4pOg>grlSx+DrBaWciRwAw-;fnFcMX=sY))9$rfn`mDbbBvRu1kD90i4(dKMTQfD zkqDmR1e75W3u3G)?&__riW&YF2*Zolub-bQfnF{BSo-AE(%ASo+<;BMY0Jy?Xa?D?i{LcSK3bGhH0&Zb74N~d+| zT2+dJO;%M%t8?lqo%TkZ&Z<(_t#-FUbt|M$9kQD@4(PQ`>ybkTO*frKDs|3EyIC93 zsZ5QEki86ng!%Rwl`x@7D31`eS}j=M@ZYE=jWntzC`JZa>^*n%un=GcEHEjeEGytA zC8g4bNr=d*H8i5;P+#s)D7V2tYzj&dA;J;9grG5giMpvcBBT-`8o`BHL?nE>*hGYj zBUs|0Ljc<^3rzp(C0Qkzz)qX~?XTm@5MnWZ)bDZ`Vy?l37xf1k^pKd_nwMK@Ivq(5 z@X6=vmUA1E`bvGPzFMU-n{Sz|3cc2@P+3D-y~?b!hup2L3a6^lZMC)@(rNVyohkI< zO=qY{+h|{Fbeo)7z0+)7vzirFZBu2d+pKT{18vh?2qg6e#u{lFRZ^IgqAY5RG(u8< z{9r+m0E4#JTEgGKI_qdrfCBcNN$N1lV#GYyxe_6$1fmI8ECi1RXWNDb76e{oeL|cP zI1WvS9CP7PkfV4Bl0+mTP?FR?6b$YO1OfskM(%^~^TS{;SGofFv3+!`{gcusrS|sr zEA6GR(eY8Z0m5&;JP3l{?~lg(&GpUuVFLpmZEaOmo_(H9o5PW>D?pL7cEF_Hm^5jd z^am7nZBt{VqRDR8RazB*!X2`@&8Cn-t5P&sbt=2HQKf29sZ1f=?<&2*tg^e0G&=PP ztyyn6;&!X7W^0o|rw58htmejYPLPcrMU6Cqs=Yoe81&K>l8190BFJlYV`LxzAuT)A ze-4iu`vnv~GfAG@Ph$0ae8~5>M7^NKQUO*2We{DpYgfwCEirIOJf;4Y5+XF#k@E!^ z#OL)=tR&%r*DDDWK_nztK74x*!ZVK#|Lci|nZGBn|F6Fu{cLmzjDJj4``GAMW;&C} zOizD){Xr0-uuSXOH`LuW@L@On7jky)iT31W2-&^Wd-eKibF0?5p$Fr4nyg1!n-03| zD)T`_WwqYaYIRqd8?_3j$*cubA*;@A*V;`Gm2@`&lFFp7uWzWXA8H$FlS{A$y`t^F z-iGSE4Gs0cy9{BE+Ok{zVg-V-KGX|Uq^JR>fWv?J>>q>bD1KTBPxYUSQ&`Z8@_k)2 z;p>%noaL3?cP&OjiIN1FQW_6iT6+v{mSS=Y`7ooKbP3(XL z#cxr#MAL3``rF!$7ZKD&(M9x(wRI625q*y1H{UmV;CbHn`QGn+2UL95@3Hw{{?=H+ zS@9HEp^I`v+H<-s|j5ZOLd|`AdiQX)9ZBTF7`88 z_^%{vAN5+F;OUs(JwY9`8tuWLt>UE}?Z~j-X^&eSuJO#~Gh3T~BVqH;v<1WE z7~UUV4KMSby)k;j@Z(kI&*A?!%}rkCzQl0jZ5Lj1)nq`FqBc=#W&o`A&Sskc7!ad_ zQ$`X~z+XdH6r~<!>DhX$)~MFFOm3hnA4pgm1YI5%9oj@Nt-znpe}l(dDwo|?2j>}3lA z!Jc!{Le5e|G2|%v^nOoqR_0dLIV7x4+?`CqGJ^TtSXvN*LeS^(=AD*MKHwK=_ zO@!|Lmn1;;JH5de@83Ue9)n*0s9dgN-EEi4<@xz?ITBIJ^LS}jYCPU)Kk>x;6Z3U7 z66r_c_|{_3aO7r<;W)@B$J->Ev?vB(&SStu5Rl9?anj@*m;+K=XK?{T#{fot=jW%Y z*aXnBgeGQf(SU?O%}bh7QZsvdw<;#(Qn#cZ<+!SQv{yQiM+c*(+&%OJi^VJ;&)?GL|R2NN1Qm z{)#|as9***p+l;ATgO!uozqxxRh>?6tYEB=#eB?zrTu!Ee(os`6$}1b5J#VH=$mNI(ZYpbfa&INI?>yrs6$$A#KxH2Uau)TMF+ZMcbsh4~0ifP6?9ZK1TK zqA3ZMnlb=l4aBkC!yV9-VA_xt;Htsh1gw~8>Vuf7HNODBSk$?ZB#n~tqy$Qu-ApZ6 zRrED|=`KJ~%IRe}r||2e1D(Rj@&T`u80AknnxJDY&FU>_$F#RdqL4$P&QGy~ohB`_ zLF}*u%ZA72^-f&zSjZO>CK7BO+uuCvrOD7+B!wy(b*tw-!A#t0v{O2UTanjJtZg&Q zGS3GSp-Rz;T|xq>Y{HnJVyN`fj(b>FkoYS^ef}TY{Rnz`?E%_XjbZDncne&#dXKB| zNIVYJc`x$$=bzuy>NMVi0R7Q0{IPZc?|358??;CJEJqncHHKr8lYxLC3Q1p#+DsX+ zAZnJZL9U4mum&GheG(lge7BpdR!ddA+)b85xmxY&rb>!GJR0qBimrB`)TU&44`m`* zR&t8Yf4PqHg9Ts{<`~BB&ml{)qGOmt62?!wkmeXgd)cBO7=4K1QRk0&IOCn(Zfq`YB9W=`m^Fjpb7%lLbK z-4y3%bltVf;T}Z6>3a=dFlx-}x`!k{w>9zZby}@XE8gz6#s{JsTn$vSM~8Np_6 zP_LJJy>h+2R4?y$%1cX2<$d*xFVFno{dOd-stXGcqXmrZ19-gq5&Y^%qZJuKjK4 z$7xp1Fe~8_udH(N0i%@Uu!2e*Bj;qSHdu3VJeSLHNSd$ubI6S#23}|Uf0BU8js0?B zoWdh30v@*Tc!D&_I)pczFoMhh1m7=8~^olg8ztJlF$A6gS1Mj$^OOvW`8YCQQtR9qMxOz0ZD=bl(ws54oc0E zzS~svn&ER?b<~A@Pw5qI3Tndmp)6dO%K>1G1gtLWNCfih93n261Ns^{To}LfaZQrq=s&yQL_DgrPwSn@I+G(q;2C$9{Tb*`mcxnjU zKecsA6PniWWAL{B=uJX#pDt+Qa&MP8X^=R-c7}zgS-R)n!I$I)qBU(@5tFl|-RX z$yYY=py^?@U@caxMRx7-L^|(5Di*Qpwv-BBG2;#sc%7y1JDvUSUs_mL`W|Ys^T4Ax zJ-Sf-{@b0MolEil_H3N4z4lx5uDu0AmtJ<+&bK>{y!8Ff&Uxp3`QU?RocZOs@2ma& zwyNn+zg-6QXmRbMzyJ0-r(bZ9W^0{l07+yT#w6s4wFaH%$0 zQ7;@%+mk~T8QbAI>Bn=8-ops3 zW7APhLgOBjv>H`DMmvU<8I4UzrPkz2%G0thR76}cEh%H66GJ;Z*Z7Kk6V&W98{K_m z7UQSW&xu4fS3&3*neAS9aB;rp!R@=5yR+LxIPK|P8yV^8F3+xUcU4c%()?BAKiyD& zdH3$K*TnU_#qRRgH{bl>Ef@0NUaXa&GwgoV2!Y`JeJ}0Yx4d)bkGps@B>LwH_`&~x z(AX6WQ(>_COC`+Ha{Nc5A5GHeeD&_h6F1)-p~=92S}-H#cO8rMh1rE=`5_0B{P<&! z-5haI0vCQzndPD~8^H}mNBQ(-aq{3>Xk&BoCv|{e6$Fz^6Gwve5nC7u$4A!D6tify zI#stAjYe`zDcbi+toY+$zi;ziSr=96XzxqV|BO|ikZt=sryb)_6-`d+9vg}oV=Qe< zr8NoCQXwqLb}O-5@@nBI#_?^q!nP}qkCd2Flhw{z_r>pZ_sk31&vV{7GT+_3eLL?g z&O#|)&U3fBytLdizeeDAuv}j4S=hc-Ug}=BYL?l)w$`(7^4Fi-(#@pjEbm@i=w2Az zGL?rH=-b1;i63`9S9nH5=Klo2Tp#SZAYgCYlV7jQ(b1L?)`~#&Oma%wTq`CQKH%c@ zDCXS2g-1l#7+Z@Albmumv)q-3azMz{!Y>JjA$EX*0D-j8g_@va-PO`@V6g`CcqLC# zm1MW-j%ha8N}u1ST3NfvRwZp!$0qs|vQkYSH)-yuI_`~GNl-OwjcSxb-cx_O+GEpA z$OOhzw?|D8rZpvv1UuxBQmOk>`suQ$bVny*+LhZXp5SUJ-Tlt%+0!>b`1!4;fByOB z51yW<_A@{KG*yNNw?9o%H2Wn}dv;!gc!uG4n@0XWW2?gYw%d6$JMZx?W<<;G@ zJXh`(aGeLYwB#XPYNO&zeDn2JbAa$qPdL!jsW^4kMgCC(TN1>e7Q(;VBH< zWWI6>X)TxM7kawUIEc|uVDu;UeYLOunR~?eTc7!y=Qcp-y^NsT6*Pa;v0hrwS3q!0 z0fGxkiBQ>_s&GCK5CoX{m>pANO;;u60supB4KKv%h;LYT(VOE{#ajejt<>{R8p!lnM^h!ZJiesOqL_3S3K0;Bq=fB9k-Zb?6{%# z1Le#_Em}yAS#CGhcrP_xnoQ>)GbQE0+6a!|s}OZQp;%I+9Lr;k?|*08mE$xfIx_)h zus7)60AcsdA_RZ3xAv&LZF`Bod-t|7F5k4N_3}$L?Ikob7PntW@_FHfYs7?}o-(IM zL3i$Zf8UQgf86ork1y@pweRB{A0PJcD~El2*ek;g4NY^2eww`fjJZN#?r1!L@wZ0k zu4;BPlreO5g&RLw7a-(ek`k3XD4ki2S#bj43oZtEDVO~Ri6@9e1T`HC3M_|!!G-(m zpXGUkOgM_TfY94SjVq5m_H8@}q623BAiSjtf;XhOy-^{y&|)*XPU)W>f1Od}tQv7z zrdM{NI~SYzA%zfW!fK*ahy2v4>p9lPqv(!o(V8mgn%m(D3ksm6=!LRJ+Y$&y8m#k9WAbYD!C zLpmxNe*O46&X}CMW7{2%PLiOys@c)%(&JcvwLA|9OP_7$Qht1QHz0hD!G*EK85yqe3{9T6)9LJtJA((rUq(r-C|<0p5M>by2@5I6CwzM(lbKjWL_9zzUCnlP6l3Qx`)c}AhC08V$kHS%ujS6XU zrip{c6kE$X@%9_1WzX22;#l8URT}^PvY_?%R~LGgR+pE1xL;jZ0|`inNnha~0R*?8 z!952_EKd)LHLNE90IghIs={u6{xDOu1! zYs{B$1WwXN0x;pT0>TFW5Ds`wa7RoQ(E!31kGGG9X`q@HRwgHL1y*BuU~HjGAqZ^p zozvSpvl)M;GZTKqNsT+4$z&aVr*p{J={Gp4*^$@ic3Z5h(vGaLxQ(ibXkd)GO=wfq z86ot_g^H5#8oBu7#EjK@uuYx0+Nj)btV{N}qq15T^>`GEME;qS(r$$^s!mrrcVkE@ zQsT4eTFwhra@wX@Cv1AlJH_doyr<~7@tWyJ)75^$$W_~y%HJ=q_LNt5-m~1Zx_s~Z zWk6U020=z3)WZ;WjPm!ZJxjaFFCBO7#~=SVoJcekP_{jpm}@FDH6@yw06{oGA<-l} zpud5iCj=qAwEPUNuuEtx9{XpC`b+O+jgEl9(NVzww-T*3PSPuEU77cAe`VY>DrUC` zxFq>afO9zIjI%^r=Y^*zv5LB%s0QRqk-P6SIQ{Kr^H4V4888?!&iYRsK?mJuN25Jp zHa9i~2L^hpAgHnl{#RA{IKG&-1~@D>_&lf3u9w+?mQz%E#!>f*Nz%qcKAWb{_mLDY z6$qQ0)}=G_U8krhhn1u;MDu1WM>t@8odOQGq^KyldGhGGVl?`{wY0C`WSVCW9ieJx zjRc6Jc2jL@8*Ab7Tlc>4H$$H@JTo z_Qw&PYh{b4ZD9f8}+03Wz5;;+-$-$uQ#nY$m=Zo}nMjyw5ae z&3?ZjFt}B8>3Re4KsFrivfIs+Y#oMRrn3qHoiPpmM`NUTt!di+3Nhh^l-Lb&qb-Ka z%O{~@yk^I=S0#emtP|s#Ep_8w&7w|kv$A67OQuvjz^i-4q9J#5TGG%Mh5C#p#gg_K zLm^)%B3jw%3UFAfNTM4lH|DBque^$V!c`=0}hhK7dWClR`F0}bH~37mlU1PrGwfBq1I z{P+6SHd5igg7E1Jj$rR#APkL&6qQ6Z?{YmSxQIM;^C(6qD3BNt1Wp*`;@W(N=Wa_tPIWz5_ernFd=tNO-Js^$Rm>zGt!AO)^t%p?^^E=Ah2G3vxAZY8IUMj zOy2npDb5pTAeVq=oPI;x;5Yc=gU$Xxea3FTV6c9x17X;JsEPM>1p;P&kmZm+?1z~K zFZ;`U&nqqQIpfrn^Xs zc%8rpob(X5)rN&~Cj#N@s=~B`pX+>-TWDBMO@q79drOu6JC92VV)2~h%ZE5$BPg&a) z)&*z8WTRW|I8lR0un&b(|X&OJeW_j_E^h(ZCET(wN=c|H% z;emkEbfXLNJvt$gjegcMS6Or+^M~-8hB0~pyNW2lwO?E~L4zFtb6A`R0SE=sBLNKb z#Ctp6{p6EFMn-NKIs5F{+1W2ydmnXXZSCc)tw){NcF83#9f%3pY{p;?cV@HkJs)j( zVvAUJyc%)c{rWq5+J~H3;%+t*Ffi|ju)Q;$HDl1QJvcB}Zx1>eofq)Z-xx3e3L3k? z!GW$uyJNsX8fxzSCFma<*m~Jdui-H0mA3i=&8ShEyXwW$f$T`gys#;X7n91G_zxz| zEwqt33gb^zTwI(algT(HHe)U`=?sa^gOk*auu{kxGbTDQ(HM;wx&hG|gQX>=0YxkJ zMNm;2Q5R7}S49xC?t|c6ydho@L=**4DvD2vDE|Jjsm`X|=_K^weE;*E^PNj0+s!~& zMCVevP(Uh7vQhfO^?Gs~2^4hJ!OOu^fBX>qa@m!Elzw9=qA-E6@a|?TJvSGPZa!Ct za`fr4vHF&ZDYxh(SYoSCp;PBP&k!WAUYYJ^``i8hc>*s|QepbXzo9ho>Kor5zToBO zM551YYF{eSQ2f;Ju30wMV z%gOa}PBmT}Fk%YzcNq7TY_n_HhLPh}m^mhb9odyUKqwYv`;TJB%nePRsaD*SEz9$B z^d4s*1oZ7xiv6cVnw^k(q@v}3CY_{Ht;9u$+(nCgvtdy91D+eiP#HD z@RWkiRGq>)x)M%55*SAb!nHA&CFvgM@KHj4`m@4lv82TGd@Wy&KUyv&gP$b>qq%Hy zvL6#Z`GzvYTc7^^>hJHq`o_C20g2e(L$YFi&OP=N2tYR2eHwPxk797>2QUOti4;{l zCpmiX!Ka?s-G$vw+;!K=%GQCEl>;lwE35O^y-fm!6J#<3hGhaXV7#&qLbWIrD~3@m z%5pLOmxj5eMuUeiR8cl1=1mPu*R>?3@hnH9(&Wj!;ix&zyR7=qy>GT$22xcI2;8_k zY}xpZs;RaUx1_&*Fda?(LmlQc)iZ2QC7!5~EbV)OUJ9o|rC4H=3Wbu1QY0MN$m``m zB%h>{5G+JvlSI8==#Ofl<7;E&@8%1&)LLOJeQLQMNyR>BmiX*BXDnt%rPwHaI9(5J zGP1z}6{{nP{;=LpFD7YBl*6g|%@5obh;G-F!<&;np<)k&-7mlV{>^t!eohp5shx=+ zeI9p&WX#Wzf8Z!)2M=Dt?o$#10q_uK|D2;cJG;BD{Pfma-`sQ07t1Sz-PP61`Rzj- z_<0aGkeNTwK6r37vwE=ICNyLHLwEshaejM0JNlt3#~WRlWT)Z8wZ9m7C($>$lIHx- zkc+B@ZF9b9GhpgD4xq&SPRDgER~2Kyjx3A3pO-mQHBB`JXaE`N!Ff8Mr?#Zti%h7t z)IYk+QFh|IH%*aTsk6UA8(xZpnRrPw*_&EQL?elE8A1w_vgA1w;u4}rL}yrGChW$1 zKDMTmZ@jToD~HN4iWRX!N>OTW-2Qzj8Lllg6HtAj85~pWi0Ld+^`rDRgUo2?3bl

^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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 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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 WMSq??Meywb;ZKr^5|v^`f&T;HjM^~( 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*mKuN!eP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00006 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 diff --git a/mods/HELP/mcl_doc_basics/screenshot.png b/mods/HELP/mcl_doc_basics/screenshot.png deleted file mode 100644 index f0be2d7ecbc330851041aad2bbe4023e916d41d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 44823 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

fRAzUJyJr6r$zF;wrxON1Vji7-gI^4Z|o^Mgl@ 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

s`rqE(9&=J{p_b^zlWsRVZS?4eY#Txj+(w13 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 Z378FywAxTB3;}#eMnX}%R@6A;{{VSZ`Go)g 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 zcmaKSRahKNur_W%7x%^8-4|HgZ3z-AcyNMSHY^@wk>C=X;2t2jdw^iU6Wrb9=R4=> z-24|kJ=I-L$#nHp^}G|Mt*L~AMS+EYfPkZ-4AwMF@0 zR83Iry%Lyi%0`|D2)KR!HN+GST*}u$^p7eU3h3)^kV)_nGcu%p2*_j*R@m| z86MZwpXu3tYc~(iW<_mRyBb~yNXDQu1gLhOQj=i+8*D{t+C|lVe(5?Pld(W+4w9(5 zAqYKOSN1cCJ1VB>bVLB;4;u>7h9MA>0E3YZ3Cait;w#IcAgM%xfC(@R@D2=v7BTy?|3`?W@~0Am zoc}KqT^PR_CuZTuhyNVlMQm1lqiS9H5$dC78_09SXc=8Wkt+w3o1KG|e3x7@RAb#N z+9t;G)iHo%#+IOS!cXfYGN$ZL8&m<=bF6<<%!5~%Lh!O#-d27EwwmOSMebst40TQP zf?#;Sl#xJLIfA)j3>YmJT?jTn7C zXpI7>12*aq2wb87{1K*|8Iu4t6Ablep-)gltDZ9f#rU;3(+vK7JJzt4+oa5DZzDqp z1$EguY#-dIGVwpVWR`T3=mUio>BNnd`*f2QcTvSgIFMtR<+WRN>dtXmw4)2c1u0c^QrUkj=Rq#3zIL>6orra=Oo+}&A4K2-3Hk6B1ovhIUbOM zWX^{_c*20s1?T-i&MN1MLx4R{g9^yU0dqy4b~0gaW1)=$Un9^KAG#Y!PmCgjJcZp< zmfsJ(WmO7Ig-Y{=?&8zm($ih50P&sm3-f_C7WQe~d9%Rdllh648lJT;ob^k7=9kLs zDHob@YYU+Iu$$N)_8C5v+(Z~KB+R;2jf~jhCyAb!4=HW^oQ|ST{H#H8wEBh^;F^0F z-9N1RE^PYK_JCYiho!|(nk?Nl)knx%3UNJI2yS36NH8=quK~8e0tGcpl3{(0gxaGK z&>111boX@OBa6c#*Do-qu<7Lt;NA^m-^jtY6IQ=I+CNw2Sy)6~O%#wQH2<0MGE6XF(k#JU)S#x??039JFH;{VXR0~Wm~KnvegU?nTqnc|6_Yd;;)f%v#&JQf5z_B6j)A~!X!Nca4-FH`omZx?)0v<&q);CD$7&6lT=ZkY0zdZq_$}7 zPJ80q$gM0x)!BJI`)5G_fzUt{x~X>vB=wKz;ila2u`x*;yAAVNc?hMK z*8;~jB4#ePI6*gxAkh^hbrs*YbQdhi`ab$TDnHo5Dln9@zU6T>pz&b7P0@C4_Fbkx z$+P*(-?P2Kq9S5qVkL#e{e#+yh7~j<7g{OD>-QJzv7Zy!gJS1&jdTo*AnxmJjkAW) zW3~n6f6CvTZGV{Qygdg6cl&8+5nqT znWFr=*jV1n3om+KO$Uyzr6Z)kf-BP7yD1egrl4SGH|`OuK0GNxBjJ4nSNh{qu%@RE zP{6r+SaWV{%wSSe-V9;G`X061v;{n#{uY)=I6W;~?f-ATU(Yt_n+lEe#pXgqg)cxjW6Z$dN`{vGPwkAvIL^O8 z9A2_9Qy0<++RBR3m^c-O(H6cbOF|axk%?$hHQ1Jo(2_Tm%>AhArgr@C@Xkc)$y!^- z%O^hi+Rbis7Ya$EGc3LWGZ3dNb)^XPbr4q*1O>B-z1w$9u&f-W8FVCklZx&>ZoU61Qq8RT6 zX|IHY${((S*!bLUnw)Fbf&+vE2yy$XOxccSKggS{{{8Yrs?A%$dBvDomI#4qa zq_O~aj~9&mE?162Gf#=aOGQgA0d}jBYDSAhmBP+b^sL-F5qR?~%-@UE@17?^q zvMDr1@)eS&-uk~hDHf|5exdTSdbm#Z&RQ~pCua#h)QX*1MvHl_zF2QbMyB7L2AsO< zckhf|yDrP*xn4)A#48ta5$Eov{g#yvo-d!Io)sdPXLqD$=qH}%mV1o$vBjaD-U|h!W;W>m-3QXcNvSG6J%?8if?a^5C85r zp%0=7O`7}szQKe?zV=Yg?aXGgSuP^m$X>xI=B?H2+P* ztfL+qw)i`oWY}_5)WgkA`E0ES_V``!Qtf2t?ZDNtTcZ`|<%^GD1s5l$s_I^92>5;N z+j;>;NO_AF;4|%8di<_zUF}AnBh_9J7zaoD`S-uwZ833XB7wL0KYpCdRmCnf>^T}| zgvxLjI*yJSTH8Ev@zt)MZVbgzj=nSQ!d(gUylU~xB;oWG7QU8e-ri=(m3-NVpzZ4q z5()|49OcP9T1+aeC@STlFq?9zP1DMK&NjnqOh8(oBxNCr5hCT;N5_R_d^nkuS?e2e zVq2J#kC+a}kwA7p!wZjY2g=CIUU*7y(f2TXADb3Qt=J*k^=~+Ja)A97w|Aq3gR%RY ziDwyz@hJZYv8z7KXx;fs{nQ!rQxh<8y@VYQ>D>SMG=B^OSOqRg-{+-G_LZXWYaU z3Fqawmu;R>l_lwc0xe3MV8I-zS;EQNESkwz1<)Yo% zo-_X`ia2s9aq@dS%SgbpIB+UIkxu@3JZ*6g|K)6OWRP|(H(l&(S&SQ*_&wCMuvB&| zw=?i+wj*0YNn8K#cZ1*Pw8=O7#6jnbLLcVhn1hJJ*>Q&%Nd~LmnKTClY#gr?*p1iC z%`S3&MXADR&8HV<_y;UdC=a>qcB$_dz?&`beE0|fWQ=W(8dKgvW63c}tLFZ2dDqH; zMAkt5N~^J_bXyBfO%)G+I|sG0MvjEDd})>9v)Ng1#Te>CAQ0o!Ls)u!PNyy;Jzc2q zH0wxrxG`si{ybj4^Lcwasq;8-)Zks)imva3=oXDv&=YD{T`riOFovnDOo}kcg9-;r zhH9ZDNXcI@cbY>tbG%B|c%*7B==yH;%}%^vN4dcV@5vm$-nydR^?^(Of0=48L066j zldDgyK5Ei_`}yOJhTo}Nl$}h&O=-6M^HrGy$i6_z4az*e5BXQ}F*6&NR~DC!&6y~5 zR+TFAaBJFfitr{#2d4E=lBK#T#8eir%vBgI)>v+*KL-9SjrOGGV#CW7`)5qZOfB=w zp|IjVqoMVDRXyDigi1i5y-Zy#%UtgK%uXB@b}FhDRVhHm$WQ*(vD8noIS=;lFF@F- zCR4qfSwrJ~!=S&8;xzDnO-tgkq5#x+NL zmV#ThwoRUSZ%){T;XsBkIbSh1J@1088^WD`MrO8QQe=_f&hNe+B}7KuDv+xfmmVmhND_~f;)Uo zay?h?{MU>>B7LD_0_ddjn1`qnHP+%(7Y4}lf08PrzbW)daF?|%>?kgVj;7}1G&nD% z%$7Gxo)7h(pVwq%-3`V|&}d(zA_x#q{hDk1c@SObbJE9U;@IqDba(r&p`V{-IyE)s zw_`%8_JMdh31vACPilA=RLTDqimodq(=2e(j25k!U+UV~OboM6*5&|2 z8DC=x)ZYvA&tK<`E9LlG{T(b9F74rua!yuFVMJIfP}HifcI~R7k-C4fJlBr;q zPtQ>%K15Kem9`xOOOK?|@|n>sUAXeDBP9n11yLeI{Gj>sBL_!Yy(MI1jWK?2bn(LBj*ylz$FE}aih9o*sXQy5_YUOexS)v*tSD%cut$i0*(FJ}P``4?#j z+)AnDUaW=7Rf`aI1J<9?h4mqw*tKsPe9tI76r8*#Vi{ca#!Crp3uCAw(P<_2cIyQ~ zJhFqm2NP%ll8~(qH79Ghg@Q`88NC`XMm7OuoI)B9gLmforVHgSM?{9n{f7*2(Vl)o z_Vpeqf7_*g;RsFqUq0OPuC6k^m}=-UoYZvW)7zcTy@I;%<34Kl8aL^N!c1L3+`>2 zq;NPLezRa))83rUH(r;cKj-n%#+c|@)_ zsPZ~!-QG%ZUBf*wKe}s)%3c7>&CgZ%UKxE`T=02}3=Z|Ar>BOfeM{zkS9?_Q@~(_8 z&C9@$MXR;Bs;X)Bn2EJoMFswT@REm;GeK^Yv1ZVPpObkOSl6uc6b&6=o8tm{xu>>AX*p)EU=OB2GYF3Uzd9rYf) z`((Ajrj4Dmweo9%6|0@-;o%wz+A-B`7?j^Yz>eZ8_fbngvp%;-u7pqUaAF8Ck?7&k zD34aaOHdg&|Ka&TUck1n(n#RpwNz72@5z39@%#{E9#A>?yNqdXk84xQSn0$o3Xu}E z%2s!+LoFxZ*uM@>`iHQO%WRg|ee>#m>-z|PPW6!8U)xg!<5yQ~etvD+lUg6VU?Bi0eIl`Dk8jX0X}mvT2#V|GEC& z(n;XeuL_+P->XHN(ax3jld-c8UIQ^IRn@rT9KhdF0a-@(WV znHPtA)gtx|U$2drlYN{4Zoc99qhQq~Wufa+%nUkfPfS(ZTsP`2oKF6qI>?y#$j3fJ zORe>p`P{tR<|qRAC8UHQ3He_cr71*0 z(>8r$GHi}0|6-2wN=L#OQA}-*N7{)~Tdm z_%5oX!TD7|k(rUnhvDf#2}`)d?)rTzBAI~=-@De^az#DcW}|MyFKR<^v0lF?Qq{D~ zxjGS$1SBP;xe6x3E|eTURN45DI|(1~ypzQIUgNs<^Yv)aYP&TgR-pA!{m(1M)xEJH zK)mS3w~oze73ZMFS=%rQI=V(Ref9IG0tvn807XTyS-eLFLHl=;(NSuXL&xa0kGf~o zLKz$7-kmr#<36%X>{|Xnm5v#;I`9AA3LAz+!G#d#6*mfrZ#FosCQ-Ou<2rP^_(H0@kVTGyw!OU_9ww%UMur{NqY-`-wFu9J zl+W7Mcjqp%{Cb6 zn;wQp6?VGX9srNPFqbRUjJ|1obt60?qI}j7h^dXFo}kYjrdu`Z2*oZcDl#xI5YNU{ zmE`-#oHRUu;EO~O?5ISc zvVxgiUO5<6hpV2X%!rS0j^B$)^~nQI5=zD^UDX4yTIW>O8d4P7b`k&0R#;{SN_3|n z=4WK1qooJa;eY|MZ_X?ZfFf3B>-n#rUnc4};P&L8BLu2&!VPHwe*QkINnuJ*#IF}y zF!0naq}_0Hw~+7OpP)L8rH=%XKLS|j@I<{}To$Qamxwq(G+acfNGlXMk1wbo$undX z>_WOKiarFBSKrmnVXm3)RlGR9;p=?I$J?N=?UAPXjPUwQmYoyiv&vQeMloOwN4kfj zBrQFv9}1f%oO<{zLO&xl4^g7ws77nyrz4jq?PbQAEL(-+k|!sVO&%yX=X8eQP>P7e zWeI+3H`Q*M1qi2WHrQUV93>;(+lKhftM6Rmvu>#t@w1QcwV)$e6y)W_kb}r>k-_v5 zSfH+yEHDTV=f27?q|?LA>(eKhDA-3P$G9M(ta7XFf}qJl-ea(i&lf+>p;HV;!*wTR zI{P5)a3N6Jc>Spz8uo^inT5G(Z8~omo1E9}>~Ft!Xs$-B_F^81uiN$*&YH-NN!i{9 zuHY*Jvy*P!oipXLH5t*11J~z&6rPhSohFUnvy;TYmed|t;Ew?@aqa!9=vL#OkPCl> zhWvOcp~a(-B-5U~uCeU>)VfmNmcUG9#Z~D{`{23*_l*Q1{YIkRu#^bufuJG~eW+1m zREJrC9*E`WT1@iuYxU{=KsS|kTKbcNZ)waKFO@&bZ=jK@_`l*dU_ernkzqT<`e_@9 zf^UgsI1lo8Lm2{c_YeXyApn4s1?|K3??K>{#5jSw{l&JE7-`N;@twj>+#Uq_ljK}$ z0r5Xw+R?B;f4WZ$%#NakDzzq?CniWE)I>uo&P)xZ9Q<^QQ9hGqobKT0swZK8x)ed_ zpbC4?FP|;6qa{%H;O6`hffIG#AKs`C=AXqQFUh(Fl4D&oRdYc2Tp20+c|JcpZP1CAzWX%% z87}D7nV4OO;G--@m=hYY+gzyqF@W7aPNxV&GLCDicGKf#=s_as0=Z}!YcDv1F-COc zjq0;~cP<)_CjK~YMS_}OraTG<&C$lc%Xg)NCAGv}TxW{o?56dOmTlNJIv$jPDM#IZ zN$xtQOFx*69dJ-On|(P%0a&S^*Y zw(1!y6ey1)-_eCIP+}&uD7zdQ6#Qb zk7jlt*1&$TQ`##=CG9z&xsPjCx7olg3(gJ|HQpqdu~tPw<&bX4&9{5vq@&#MD9*n;5Ir~)-N*!94?~o0=yLBh*v$;jqH_L%h^a~ZU7#g?N8J1S_oEh1cEJR$ zZ*W91Xa02FQKP-|V9=vh$XvnD?;c_x5jho4G!Y0i# z!W**XKeNXi4(#d5E!RA**^(6~RUqhSf~~SI$|BYTgCxuJql*wXXaR9!Dswd-rgE#k z-#|M0Mv-Ebkg%H4S$SoPi4vK*YSn?FMD_c8pS^Us9Rw%%dsSJ~{>|xlAC{&sdUqRy zWh~6t9Nve1Z53a&(-Gxid$YSDH=Ls_YKlgn>me8kVt-=+G~#Hi)gsfzr4x<~2Vzc| zcMN#VdB)}|jW|kV@cbi8Y)7G^8d41Bgdu+>&*}wII7gf!;_5>ZK{Vwwc!pvD=$x^} zQjUv$THD4fK`0fGTUJg^G9AigjEF1!F@eK6f3c~EWz^echh=fCrsfx97e&ryF+3ow(W zCLGCf;D+uyBcmjya>Cf-s_{aCO_t*_S^lh$IoRmUpv~UBum(Q){ZEuArZ54v(eVN zmJ9+t!&3<6$5Hh#mlRZQ&07RBBkJEVcR!#Xm^IQb&;gn1L_6F7(}L3DL{AA!m#Uz>h?B-yK$Y>s-eg2DN#u$WCb+csfC_7&{b%B_>w3;> zId*U*OQ%%!$-IQ@6}&19HMFW-Iwh^~T0hsw|R@6 zSo?Ha)fVP$PlBpEUYo>{eueg@_9*5y$tzc@BVc;v-vF1?1xXrFwk9djKVB6rsSO%# zSAxqt2X->Xv=tkbDO@(jp)+<1?!+UX$R}R*Y>G zQ=Ieq8w}zG(4MQOv+HLhmxoMIEBoAw8Uqn^&>Md0@X&we?$01tsQ`h}c6xKp0H zKpDpv^TnHs+@nNzi}j*z(y*lG{Uu`1gH-dWUzHmngZ%a$s=j8Q&1W-B zg~v~LN)S!8HP2|gZ`(eIi8fAYq!ApWT4^@d^YA+mp`?2>vDDGnOYt!aDL8bzgFO^) zeH@nl8E{e^fg9U)P{lS=aPD>gB=}m-&M$cJFV>DEXDG$?^=){fvRt$8GLM zNDXc;D+&7Tc?9q^i!cNdw#7bOVbJ!Hva`Gev;8K0MJHWxQCAYFw!{zEDpN~V0bCU8 zdg+n+1N|WctE8pQH<))b`9y7tZ-J8lk4j*T1JOo6Bnh|a?v;Ay^QN9*L;_hl6HljZ zKf+I*`o)TwJ!~{&DueP_e0gtv#wYRw(eOP7I=;rnMmK$W_z*eherQNJk|iDA95+sm zAE2qF6=7W!!#OuUe~`{3wdpkKY-3ZTSWs3~#k|Itn1v*1`oluj;tm_>Ue%9qNmjbk z;#-Jo#o6ilqj{XLCW-yzjC=0j^2vpVANktN;<7T0&R)uB$K7IKB(j#HqoZ>3w@AcU zw|`i5vDmfBrX`2of5&Jq$GALrybxduk z9!H8*+pP_Us-Tp#x({3E@g#!W$5Cfz!5#IAMf>Y;=3@ai>FyJex&0uyFL=i@b3_EM z6@=6EeM%yjKh76~%z9wGjGfl)k7oU%t$RsFQ;N!$MP8V8G=lLS3awhD=<8yu`u#cC z%gf99l!Y(tHG4>B73r2?a7E1)Ed=|Cg0XoRA?zue#*BRAvaK6!_5D`5k!Bx>tSVq#on)~;;~%z? zaE}>a5=X1Z6rzr7qU8S~IwC9GC1QxylPgTZcyWI2Q8fYre$IqZ;jOf;e4+ti&odJO z8I>d_%Koj-O-(YbYdRc*l|jt9?jq}Rhl|!Bz%=`IGjm%Jt6I?M{J`8>__IvykjADO TgAVF{e>kZqXo9QcEI$7~BOnZ3 diff --git a/mods/HUD/show_wielded_item/screenshot.png b/mods/HUD/show_wielded_item/screenshot.png deleted file mode 100644 index 50c2c626051b8ba80d67b178defc0401bf264814..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11859 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 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 34/67] 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 f976457c0b..01fd5e8ff4 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 35/67] 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 720d8ed8db..78fcc0e216 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 36/67] 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 983b82b49d..c6f91d4141 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 01fd5e8ff4..1bf3add389 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 9087c41e94..0432c3488d 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 37/67] 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 c6f91d4141..df2ecd58dc 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 38/67] 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 df2ecd58dc..8b2acbb355 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 39/67] 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 fd95b60ef2..57cb6e4e5a 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 40/67] [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 d953956426..2c3c83c404 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 41/67] [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 2c3c83c404..fe01f4c528 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 42/67] 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 43/67] 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 44/67] 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 45/67] [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 90b2725067..bdcdb1b4d4 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 46/67] 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 96f020ee20..732c386b09 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 47/67] [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 9622e618f1..5978428676 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 f583d87b6f..cf9ccfb9e9 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 48/67] [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 cf9ccfb9e9..3655be7ebe 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 49/67] 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 abcc73ae31..4dc378bc18 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 a9caad38e4..8b55c13762 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 50/67] 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 a0ad38a777..ded4364c3a 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 51/67] 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 ded4364c3a..44f49a4d4d 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 52/67] 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 c6ca7d0fb3..296e7c23bf 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 53/67] 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 4464a401b6..2943738753 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 54/67] 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 0d622f6a9a..9dfb43aefc 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 55/67] 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 a6f0c13dbe..c34e934795 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 56/67] 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 6b99985748..d212e631a5 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 57/67] 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 6cdeaab7e0..435ce51c7f 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 58/67] 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 a5509431c2..dd96b01b54 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 59/67] 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 4fb989e2fb..e44796bad6 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 60/67] 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 3476bee4c7..c947e91859 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 61/67] 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 3655be7ebe..d4ebe00d33 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 62/67] 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 2d76a217b0..b9c2aad24d 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 63/67] 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 55a98ba9de..b4e1d94487 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 64/67] 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 44f49a4d4d..f031c7ca2f 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 65/67] [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 eda7e88711..d75bda6c6b 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 66/67] 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 9436ae94da..7b7920ee09 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 67/67] 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 fd78534fc9..b52611d5af 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